Skip to content

feat: streaming UI — generative UI engine, MCP tooling, playground#184

Open
geoquant wants to merge 353 commits intocloudflare:mainfrom
geoquant:geoquant/streaming-ui
Open

feat: streaming UI — generative UI engine, MCP tooling, playground#184
geoquant wants to merge 353 commits intocloudflare:mainfrom
geoquant:geoquant/streaming-ui

Conversation

@geoquant
Copy link
Collaborator

@geoquant geoquant commented Mar 5, 2026

Summary

  • @cloudflare/kumo/streaming — JSONL + RFC 6902 patch engine, useUITree hook, action system (handler registry, URL policy, processors)
  • @cloudflare/kumo/generativeUITreeRenderer, element validator with enum coercion, component map codegen, gradeComposition quality rules, uiTreeToJsx converter
  • @cloudflare/kumo/loadable — UMD bundle entry point for cross-boundary / iframe embedding
  • @cloudflare/kumo/catalog — system prompt builder with prop scoring/filtering, custom component support, few-shot examples
  • Stack / Cluster layout primitives with render prop API
  • Playground — chat UI with model selector, presets, A/B panels, skill picker, eval report page, tool middleware with MCP proxy
  • kumo-mcp package — Worker + Durable Object MCP agent with create_worker / execute_create_worker tools, iframe postMessage bridge
  • Docs/streaming page with live demo, /playground with auth-gated chat, custom components docs

288 files changed, ~54k insertions

@pkg-pr-new
Copy link

pkg-pr-new bot commented Mar 5, 2026

npm i https://pkg.pr.new/@cloudflare/kumo@184

commit: 0fae77b

@github-actions
Copy link
Contributor

github-actions bot commented Mar 5, 2026

Docs Preview

View docs preview

Commit: c2a40e7

@github-actions
Copy link
Contributor

github-actions bot commented Mar 5, 2026

Visual Regression Report

No visual changes detected.

@geoquant geoquant force-pushed the geoquant/streaming-ui branch 2 times, most recently from ea424f0 to 0734eae Compare March 13, 2026 02:17
geoquant added 24 commits March 12, 2026 19:24
…module

- generative-map-generator.ts generates component-manifest.ts (pure data)
- stateful-wrappers.tsx: Select, Checkbox, Switch, Tabs, Collapsible
- generative-wrappers.tsx: Surface, Input, InputArea, CloudflareLogo, Select
- component-map.ts assembles COMPONENT_MAP (40 entries) + KNOWN_TYPES
- wired into codegen:registry pipeline (atomic with registry/schemas)
geoquant added 17 commits March 12, 2026 19:27
The canonical system prompt from getSystemPrompt() is ~75k chars.
The previous 50k limit silently dropped the override in parseChatRequest,
causing regenerateWithPrompt to send no system prompt at all — producing
invalid HTML/CSS output instead of JSONL.
@geoquant geoquant force-pushed the geoquant/streaming-ui branch from 0734eae to f97357b Compare March 13, 2026 02:28
geoquant added 12 commits March 12, 2026 20:10
startWorkspaceComparison ignored editedSystemPrompt — only
regenerateWithPrompt sent skipSystemPrompt + systemPromptOverride.
Chat submissions now forward the edited prompt for both panels.
…t false drops

LLMs sometimes emit multi-line indented JSON instead of compact JSONL.
The verifier's line-by-line parsing counted each fragment as a dropped
line, exceeding maxDroppedLines=0 and blocking render.

Add reassembleJsonObjects() that buffers lines by tracking brace depth
and joins them before parsing. Compact JSONL gets a fast-path (no
regression). Leftover unclosed fragments still count as dropped.
LLMs frequently emit pretty-printed JSON. maxDroppedLines=0 caused
constant false-positive failures. Dropped lines are informational —
the tree still renders whatever ops parsed successfully.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant