@cueplusplus/ui 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4028 -0
- package/LICENSE +21 -0
- package/NOTICE.md +34 -0
- package/README.md +237 -0
- package/dist/agent-runtime/_glyphs.js +43 -0
- package/dist/agent-runtime/branch-picker.d.ts +45 -0
- package/dist/agent-runtime/branch-picker.js +87 -0
- package/dist/agent-runtime/index.d.ts +4 -0
- package/dist/agent-runtime/index.js +4 -0
- package/dist/agent-runtime/tool-call-card.d.ts +69 -0
- package/dist/agent-runtime/tool-call-card.js +187 -0
- package/dist/agent-runtime/use-agent-thread.d.ts +164 -0
- package/dist/agent-runtime/use-agent-thread.js +251 -0
- package/dist/brand/_chassis.d.ts +54 -0
- package/dist/brand/_chassis.js +81 -0
- package/dist/brand/_geometry.js +41 -0
- package/dist/brand/cue-logotype.d.ts +29 -0
- package/dist/brand/cue-logotype.js +60 -0
- package/dist/brand/cue-mark.d.ts +30 -0
- package/dist/brand/cue-mark.js +61 -0
- package/dist/brand/index.d.ts +5 -0
- package/dist/brand/plussie.d.ts +67 -0
- package/dist/brand/plussie.js +125 -0
- package/dist/charts/_token.js +39 -0
- package/dist/charts/container.d.ts +58 -0
- package/dist/charts/container.js +77 -0
- package/dist/charts/index.d.ts +5 -0
- package/dist/charts/index.js +5 -0
- package/dist/charts/ramps.d.ts +140 -0
- package/dist/charts/ramps.js +615 -0
- package/dist/charts/theme.d.ts +112 -0
- package/dist/charts/theme.js +165 -0
- package/dist/charts/tones.d.ts +111 -0
- package/dist/charts/tones.js +127 -0
- package/dist/chat/_glyphs.js +55 -0
- package/dist/chat/agent-color.d.ts +84 -0
- package/dist/chat/agent-color.js +101 -0
- package/dist/chat/agent-pile.d.ts +55 -0
- package/dist/chat/agent-pile.js +121 -0
- package/dist/chat/ask-box.d.ts +88 -0
- package/dist/chat/ask-box.js +341 -0
- package/dist/chat/composer.d.ts +66 -0
- package/dist/chat/composer.js +144 -0
- package/dist/chat/delegation-card.d.ts +60 -0
- package/dist/chat/delegation-card.js +129 -0
- package/dist/chat/index.d.ts +8 -0
- package/dist/chat/index.js +8 -0
- package/dist/chat/message-list.d.ts +45 -0
- package/dist/chat/message-list.js +141 -0
- package/dist/chat/message.d.ts +47 -0
- package/dist/chat/message.js +108 -0
- package/dist/chrome/_band.js +54 -0
- package/dist/chrome/_drag.js +59 -0
- package/dist/chrome/_edge-scroller.d.ts +45 -0
- package/dist/chrome/_edge-scroller.js +149 -0
- package/dist/chrome/_glyphs.js +119 -0
- package/dist/chrome/_status-bar-item.js +85 -0
- package/dist/chrome/_status-bar.d.ts +15 -0
- package/dist/chrome/_status-bar.js +171 -0
- package/dist/chrome/_tabs-scroll.d.ts +67 -0
- package/dist/chrome/_tabs-scroll.js +73 -0
- package/dist/chrome/_tree.d.ts +75 -0
- package/dist/chrome/_tree.js +49 -0
- package/dist/chrome/app-bar.d.ts +103 -0
- package/dist/chrome/app-bar.js +175 -0
- package/dist/chrome/app-shell.d.ts +243 -0
- package/dist/chrome/app-shell.js +266 -0
- package/dist/chrome/band.d.ts +106 -0
- package/dist/chrome/band.js +97 -0
- package/dist/chrome/empty-state.d.ts +37 -0
- package/dist/chrome/empty-state.js +57 -0
- package/dist/chrome/eyebrow.d.ts +29 -0
- package/dist/chrome/eyebrow.js +36 -0
- package/dist/chrome/footer.d.ts +88 -0
- package/dist/chrome/footer.js +83 -0
- package/dist/chrome/index.d.ts +24 -0
- package/dist/chrome/index.js +22 -0
- package/dist/chrome/inspector.d.ts +61 -0
- package/dist/chrome/inspector.js +121 -0
- package/dist/chrome/navigation-menu.d.ts +80 -0
- package/dist/chrome/navigation-menu.js +121 -0
- package/dist/chrome/page-shell.d.ts +38 -0
- package/dist/chrome/page-shell.js +76 -0
- package/dist/chrome/panel.d.ts +55 -0
- package/dist/chrome/panel.js +67 -0
- package/dist/chrome/row.d.ts +82 -0
- package/dist/chrome/row.js +106 -0
- package/dist/chrome/scroll-area.d.ts +39 -0
- package/dist/chrome/scroll-area.js +70 -0
- package/dist/chrome/section-header.d.ts +42 -0
- package/dist/chrome/section-header.js +79 -0
- package/dist/chrome/segmented-control.d.ts +77 -0
- package/dist/chrome/segmented-control.js +95 -0
- package/dist/chrome/status-bar.d.ts +129 -0
- package/dist/chrome/status-bar.js +120 -0
- package/dist/chrome/tabs.d.ts +80 -0
- package/dist/chrome/tabs.js +132 -0
- package/dist/chrome/title-bar.d.ts +47 -0
- package/dist/chrome/title-bar.js +43 -0
- package/dist/chrome/toolbar.d.ts +68 -0
- package/dist/chrome/toolbar.js +83 -0
- package/dist/chrome/tree.d.ts +98 -0
- package/dist/chrome/tree.js +248 -0
- package/dist/color/_checker.js +14 -0
- package/dist/color/_convert.d.ts +52 -0
- package/dist/color/_convert.js +66 -0
- package/dist/color/_glyphs.js +28 -0
- package/dist/color/_thumb.js +15 -0
- package/dist/color/_value.js +28 -0
- package/dist/color/color-area.d.ts +27 -0
- package/dist/color/color-area.js +40 -0
- package/dist/color/color-field.d.ts +32 -0
- package/dist/color/color-field.js +43 -0
- package/dist/color/color-picker.d.ts +71 -0
- package/dist/color/color-picker.js +178 -0
- package/dist/color/color-slider.d.ts +31 -0
- package/dist/color/color-slider.js +51 -0
- package/dist/color/color-swatch.d.ts +32 -0
- package/dist/color/color-swatch.js +44 -0
- package/dist/color/index.d.ts +7 -0
- package/dist/color/index.js +7 -0
- package/dist/configurator/_export.d.ts +78 -0
- package/dist/configurator/_export.js +302 -0
- package/dist/configurator/_glyphs.js +92 -0
- package/dist/configurator/_overrides.d.ts +266 -0
- package/dist/configurator/_overrides.js +541 -0
- package/dist/configurator/configurator.d.ts +71 -0
- package/dist/configurator/configurator.js +284 -0
- package/dist/configurator/export-dialog.d.ts +30 -0
- package/dist/configurator/export-dialog.js +121 -0
- package/dist/configurator/index.d.ts +8 -0
- package/dist/configurator/index.js +8 -0
- package/dist/configurator/panel-sections.d.ts +86 -0
- package/dist/configurator/panel-sections.js +352 -0
- package/dist/configurator/token-editor.d.ts +74 -0
- package/dist/configurator/token-editor.js +152 -0
- package/dist/configurator/use-zoom.d.ts +87 -0
- package/dist/configurator/use-zoom.js +113 -0
- package/dist/date/_glyphs.js +34 -0
- package/dist/date/_segments.js +101 -0
- package/dist/date/_trigger.js +31 -0
- package/dist/date/calendar.d.ts +25 -0
- package/dist/date/calendar.js +125 -0
- package/dist/date/date-field.d.ts +34 -0
- package/dist/date/date-field.js +41 -0
- package/dist/date/date-picker.d.ts +69 -0
- package/dist/date/date-picker.js +89 -0
- package/dist/date/date-range-picker.d.ts +65 -0
- package/dist/date/date-range-picker.js +92 -0
- package/dist/date/index.d.ts +6 -0
- package/dist/date/index.js +6 -0
- package/dist/date/time-field.d.ts +29 -0
- package/dist/date/time-field.js +36 -0
- package/dist/dmx/_ramp.d.ts +77 -0
- package/dist/dmx/_ramp.js +169 -0
- package/dist/dmx/_readout.js +53 -0
- package/dist/dmx/_universe.d.ts +105 -0
- package/dist/dmx/_universe.js +112 -0
- package/dist/dmx/channel-matrix.d.ts +81 -0
- package/dist/dmx/channel-matrix.js +285 -0
- package/dist/dmx/dmx-bar.d.ts +50 -0
- package/dist/dmx/dmx-bar.js +107 -0
- package/dist/dmx/dmx-strip.d.ts +41 -0
- package/dist/dmx/dmx-strip.js +196 -0
- package/dist/dmx/index.d.ts +7 -0
- package/dist/dmx/index.js +7 -0
- package/dist/dmx/universe-grid.d.ts +61 -0
- package/dist/dmx/universe-grid.js +182 -0
- package/dist/elements/activity-graph.d.ts +40 -0
- package/dist/elements/activity-graph.js +81 -0
- package/dist/elements/agent-card.d.ts +49 -0
- package/dist/elements/agent-card.js +91 -0
- package/dist/elements/agent-handoff.d.ts +24 -0
- package/dist/elements/agent-handoff.js +53 -0
- package/dist/elements/agent-mode-badge.d.ts +72 -0
- package/dist/elements/agent-mode-badge.js +110 -0
- package/dist/elements/agent-plan.d.ts +24 -0
- package/dist/elements/agent-plan.js +74 -0
- package/dist/elements/agent-status.d.ts +29 -0
- package/dist/elements/agent-status.js +46 -0
- package/dist/elements/agent-surface.d.ts +65 -0
- package/dist/elements/agent-surface.js +68 -0
- package/dist/elements/animated-number.d.ts +86 -0
- package/dist/elements/animated-number.js +118 -0
- package/dist/elements/approval-card.d.ts +40 -0
- package/dist/elements/approval-card.js +78 -0
- package/dist/elements/artifact-card.d.ts +30 -0
- package/dist/elements/artifact-card.js +58 -0
- package/dist/elements/background-inbox.d.ts +39 -0
- package/dist/elements/background-inbox.js +60 -0
- package/dist/elements/canvas-split.d.ts +77 -0
- package/dist/elements/canvas-split.js +138 -0
- package/dist/elements/chart.d.ts +41 -0
- package/dist/elements/chart.js +117 -0
- package/dist/elements/chat-panel.d.ts +46 -0
- package/dist/elements/chat-panel.js +104 -0
- package/dist/elements/checkpoint-history.d.ts +31 -0
- package/dist/elements/checkpoint-history.js +65 -0
- package/dist/elements/clamp.d.ts +90 -0
- package/dist/elements/clamp.js +109 -0
- package/dist/elements/code-diff.d.ts +42 -0
- package/dist/elements/code-diff.js +69 -0
- package/dist/elements/code-runner.d.ts +38 -0
- package/dist/elements/code-runner.js +84 -0
- package/dist/elements/command-palette.d.ts +48 -0
- package/dist/elements/command-palette.js +129 -0
- package/dist/elements/compaction-row.d.ts +63 -0
- package/dist/elements/compaction-row.js +110 -0
- package/dist/elements/comparison-card.d.ts +47 -0
- package/dist/elements/comparison-card.js +69 -0
- package/dist/elements/composer.d.ts +274 -0
- package/dist/elements/composer.js +505 -0
- package/dist/elements/computer-use.d.ts +40 -0
- package/dist/elements/computer-use.js +92 -0
- package/dist/elements/confidence-marker.d.ts +39 -0
- package/dist/elements/confidence-marker.js +64 -0
- package/dist/elements/connection-state.d.ts +29 -0
- package/dist/elements/connection-state.js +66 -0
- package/dist/elements/context-breakdown.d.ts +30 -0
- package/dist/elements/context-breakdown.js +86 -0
- package/dist/elements/context-usage.d.ts +99 -0
- package/dist/elements/context-usage.js +225 -0
- package/dist/elements/conversation-search.d.ts +48 -0
- package/dist/elements/conversation-search.js +88 -0
- package/dist/elements/cost-meter.d.ts +33 -0
- package/dist/elements/cost-meter.js +75 -0
- package/dist/elements/data-table.d.ts +31 -0
- package/dist/elements/data-table.js +67 -0
- package/dist/elements/day-separator.d.ts +34 -0
- package/dist/elements/day-separator.js +50 -0
- package/dist/elements/diagram.d.ts +34 -0
- package/dist/elements/diagram.js +75 -0
- package/dist/elements/document-reference.d.ts +37 -0
- package/dist/elements/document-reference.js +66 -0
- package/dist/elements/draft-restore.d.ts +27 -0
- package/dist/elements/draft-restore.js +54 -0
- package/dist/elements/edit-message.d.ts +36 -0
- package/dist/elements/edit-message.js +77 -0
- package/dist/elements/elements.css +459 -0
- package/dist/elements/elicitation-form.d.ts +48 -0
- package/dist/elements/elicitation-form.js +106 -0
- package/dist/elements/empty-state.d.ts +52 -0
- package/dist/elements/empty-state.js +98 -0
- package/dist/elements/end-of-turn-summary.d.ts +60 -0
- package/dist/elements/end-of-turn-summary.js +75 -0
- package/dist/elements/error-state.d.ts +29 -0
- package/dist/elements/error-state.js +55 -0
- package/dist/elements/feedback-dialog.d.ts +36 -0
- package/dist/elements/feedback-dialog.js +81 -0
- package/dist/elements/file-tree.d.ts +45 -0
- package/dist/elements/file-tree.js +84 -0
- package/dist/elements/flow-graph.d.ts +45 -0
- package/dist/elements/flow-graph.js +78 -0
- package/dist/elements/generative/chart.js +200 -0
- package/dist/elements/generative/faults.js +111 -0
- package/dist/elements/generative/icons.d.ts +41 -0
- package/dist/elements/generative/icons.js +190 -0
- package/dist/elements/generative/intrinsics.js +483 -0
- package/dist/elements/generative/spec.d.ts +110 -0
- package/dist/elements/generative/spec.js +366 -0
- package/dist/elements/generative.css +1145 -0
- package/dist/elements/generative.d.ts +144 -0
- package/dist/elements/generative.js +126 -0
- package/dist/elements/guardrail-notice.d.ts +29 -0
- package/dist/elements/guardrail-notice.js +63 -0
- package/dist/elements/image-generation.d.ts +18 -0
- package/dist/elements/image-generation.js +64 -0
- package/dist/elements/index.d.ts +116 -0
- package/dist/elements/index.js +115 -0
- package/dist/elements/inline-citation.d.ts +43 -0
- package/dist/elements/inline-citation.js +93 -0
- package/dist/elements/job-progress.d.ts +49 -0
- package/dist/elements/job-progress.js +74 -0
- package/dist/elements/launcher-bubble.d.ts +34 -0
- package/dist/elements/launcher-bubble.js +72 -0
- package/dist/elements/live-region-announcer.d.ts +130 -0
- package/dist/elements/live-region-announcer.js +230 -0
- package/dist/elements/loading-state.d.ts +27 -0
- package/dist/elements/loading-state.js +36 -0
- package/dist/elements/map-answer.d.ts +38 -0
- package/dist/elements/map-answer.js +93 -0
- package/dist/elements/markdown.d.ts +131 -0
- package/dist/elements/markdown.js +528 -0
- package/dist/elements/math-block.d.ts +51 -0
- package/dist/elements/math-block.js +70 -0
- package/dist/elements/mcp-server-panel.d.ts +41 -0
- package/dist/elements/mcp-server-panel.js +115 -0
- package/dist/elements/memory-chips.d.ts +30 -0
- package/dist/elements/memory-chips.js +43 -0
- package/dist/elements/message-actions.d.ts +38 -0
- package/dist/elements/message-actions.js +71 -0
- package/dist/elements/message-attachment.d.ts +48 -0
- package/dist/elements/message-attachment.js +63 -0
- package/dist/elements/message-branches.d.ts +25 -0
- package/dist/elements/message-branches.js +65 -0
- package/dist/elements/message-pair.d.ts +33 -0
- package/dist/elements/message-pair.js +65 -0
- package/dist/elements/message-queue.d.ts +31 -0
- package/dist/elements/message-queue.js +80 -0
- package/dist/elements/message-timing.d.ts +33 -0
- package/dist/elements/message-timing.js +37 -0
- package/dist/elements/mobile-composer.d.ts +44 -0
- package/dist/elements/mobile-composer.js +88 -0
- package/dist/elements/model-picker.d.ts +38 -0
- package/dist/elements/model-picker.js +69 -0
- package/dist/elements/number-ticker.d.ts +18 -0
- package/dist/elements/number-ticker.js +47 -0
- package/dist/elements/onboarding.d.ts +30 -0
- package/dist/elements/onboarding.js +75 -0
- package/dist/elements/permission-grant.d.ts +35 -0
- package/dist/elements/permission-grant.js +86 -0
- package/dist/elements/permission-scopes.d.ts +215 -0
- package/dist/elements/permission-scopes.js +249 -0
- package/dist/elements/prompt-library.d.ts +43 -0
- package/dist/elements/prompt-library.js +117 -0
- package/dist/elements/queue-dock.d.ts +101 -0
- package/dist/elements/queue-dock.js +132 -0
- package/dist/elements/quota-banner.d.ts +26 -0
- package/dist/elements/quota-banner.js +66 -0
- package/dist/elements/quote-reply.d.ts +44 -0
- package/dist/elements/quote-reply.js +79 -0
- package/dist/elements/range.d.ts +29 -0
- package/dist/elements/range.js +45 -0
- package/dist/elements/read-aloud.d.ts +45 -0
- package/dist/elements/read-aloud.js +75 -0
- package/dist/elements/reasoning-effort.d.ts +36 -0
- package/dist/elements/reasoning-effort.js +67 -0
- package/dist/elements/reasoning-panel.d.ts +46 -0
- package/dist/elements/reasoning-panel.js +75 -0
- package/dist/elements/recommendation-card.d.ts +45 -0
- package/dist/elements/recommendation-card.js +83 -0
- package/dist/elements/regenerate-menu.d.ts +45 -0
- package/dist/elements/regenerate-menu.js +51 -0
- package/dist/elements/replay.d.ts +217 -0
- package/dist/elements/replay.js +498 -0
- package/dist/elements/research-report.d.ts +38 -0
- package/dist/elements/research-report.js +69 -0
- package/dist/elements/retrieval-chunks.d.ts +43 -0
- package/dist/elements/retrieval-chunks.js +81 -0
- package/dist/elements/revert-dock.d.ts +159 -0
- package/dist/elements/revert-dock.js +327 -0
- package/dist/elements/reviewable-diff.d.ts +45 -0
- package/dist/elements/reviewable-diff.js +110 -0
- package/dist/elements/risk-badge.d.ts +52 -0
- package/dist/elements/risk-badge.js +91 -0
- package/dist/elements/schedule-card.d.ts +42 -0
- package/dist/elements/schedule-card.js +90 -0
- package/dist/elements/score-breakdown.d.ts +47 -0
- package/dist/elements/score-breakdown.js +82 -0
- package/dist/elements/scroll-anchor.d.ts +32 -0
- package/dist/elements/scroll-anchor.js +123 -0
- package/dist/elements/settings-panel.d.ts +52 -0
- package/dist/elements/settings-panel.js +107 -0
- package/dist/elements/shared-conversation.d.ts +39 -0
- package/dist/elements/shared-conversation.js +68 -0
- package/dist/elements/sources.d.ts +33 -0
- package/dist/elements/sources.js +61 -0
- package/dist/elements/speaker-identity.d.ts +32 -0
- package/dist/elements/speaker-identity.js +51 -0
- package/dist/elements/spec-sheet.d.ts +31 -0
- package/dist/elements/spec-sheet.js +45 -0
- package/dist/elements/stopped-run.d.ts +22 -0
- package/dist/elements/stopped-run.js +50 -0
- package/dist/elements/streaming-text.d.ts +31 -0
- package/dist/elements/streaming-text.js +45 -0
- package/dist/elements/subagent-list.d.ts +37 -0
- package/dist/elements/subagent-list.js +79 -0
- package/dist/elements/suggestions.d.ts +30 -0
- package/dist/elements/suggestions.js +36 -0
- package/dist/elements/surfaces.d.ts +85 -0
- package/dist/elements/surfaces.js +108 -0
- package/dist/elements/tail-status.d.ts +131 -0
- package/dist/elements/tail-status.js +94 -0
- package/dist/elements/terminal-block.d.ts +29 -0
- package/dist/elements/terminal-block.js +54 -0
- package/dist/elements/thinking-indicator.d.ts +18 -0
- package/dist/elements/thinking-indicator.js +36 -0
- package/dist/elements/thread-list.d.ts +35 -0
- package/dist/elements/thread-list.js +68 -0
- package/dist/elements/thread-search.d.ts +42 -0
- package/dist/elements/thread-search.js +99 -0
- package/dist/elements/timeline.d.ts +37 -0
- package/dist/elements/timeline.js +46 -0
- package/dist/elements/todo-list.d.ts +42 -0
- package/dist/elements/todo-list.js +59 -0
- package/dist/elements/tool-call.d.ts +41 -0
- package/dist/elements/tool-call.js +85 -0
- package/dist/elements/tool-error.d.ts +39 -0
- package/dist/elements/tool-error.js +76 -0
- package/dist/elements/tool-group.d.ts +45 -0
- package/dist/elements/tool-group.js +71 -0
- package/dist/elements/tool-timeline.d.ts +65 -0
- package/dist/elements/tool-timeline.js +88 -0
- package/dist/elements/trace-waterfall.d.ts +37 -0
- package/dist/elements/trace-waterfall.js +69 -0
- package/dist/elements/transcript-rules.d.ts +67 -0
- package/dist/elements/transcript-rules.js +95 -0
- package/dist/elements/turn-footer.d.ts +74 -0
- package/dist/elements/turn-footer.js +101 -0
- package/dist/elements/typing-indicator.d.ts +16 -0
- package/dist/elements/typing-indicator.js +51 -0
- package/dist/elements/verdict-row.d.ts +89 -0
- package/dist/elements/verdict-row.js +150 -0
- package/dist/elements/vocabulary.d.ts +612 -0
- package/dist/elements/vocabulary.js +611 -0
- package/dist/elements/voice-conversation.d.ts +49 -0
- package/dist/elements/voice-conversation.js +123 -0
- package/dist/elements/web-preview.d.ts +32 -0
- package/dist/elements/web-preview.js +66 -0
- package/dist/elements/web-search.d.ts +37 -0
- package/dist/elements/web-search.js +66 -0
- package/dist/elements/work-collapse.d.ts +103 -0
- package/dist/elements/work-collapse.js +131 -0
- package/dist/flow/_frame.d.ts +52 -0
- package/dist/flow/_frame.js +38 -0
- package/dist/flow/controls.d.ts +41 -0
- package/dist/flow/controls.js +53 -0
- package/dist/flow/flow.css +121 -0
- package/dist/flow/handles.d.ts +40 -0
- package/dist/flow/handles.js +61 -0
- package/dist/flow/index.d.ts +7 -0
- package/dist/flow/index.js +7 -0
- package/dist/flow/node-card.d.ts +71 -0
- package/dist/flow/node-card.js +102 -0
- package/dist/flow/signal-edge.d.ts +60 -0
- package/dist/flow/signal-edge.js +108 -0
- package/dist/flow/use-flow-theme.d.ts +69 -0
- package/dist/flow/use-flow-theme.js +109 -0
- package/dist/forms/_chassis.d.ts +164 -0
- package/dist/forms/_chassis.js +159 -0
- package/dist/forms/_glyphs.js +143 -0
- package/dist/forms/_listbox.js +55 -0
- package/dist/forms/autocomplete.d.ts +61 -0
- package/dist/forms/autocomplete.js +88 -0
- package/dist/forms/button-group.d.ts +47 -0
- package/dist/forms/button-group.js +52 -0
- package/dist/forms/checkbox.d.ts +51 -0
- package/dist/forms/checkbox.js +98 -0
- package/dist/forms/combobox.d.ts +73 -0
- package/dist/forms/combobox.js +108 -0
- package/dist/forms/env-var-input.d.ts +74 -0
- package/dist/forms/env-var-input.js +116 -0
- package/dist/forms/field.d.ts +89 -0
- package/dist/forms/field.js +102 -0
- package/dist/forms/file-upload.d.ts +113 -0
- package/dist/forms/file-upload.js +232 -0
- package/dist/forms/index.d.ts +26 -0
- package/dist/forms/index.js +26 -0
- package/dist/forms/input-group.d.ts +36 -0
- package/dist/forms/input-group.js +59 -0
- package/dist/forms/input.d.ts +45 -0
- package/dist/forms/input.js +36 -0
- package/dist/forms/multi-select.d.ts +62 -0
- package/dist/forms/multi-select.js +107 -0
- package/dist/forms/number-field.d.ts +39 -0
- package/dist/forms/number-field.js +65 -0
- package/dist/forms/otp-field.d.ts +54 -0
- package/dist/forms/otp-field.js +59 -0
- package/dist/forms/password-input.d.ts +46 -0
- package/dist/forms/password-input.js +62 -0
- package/dist/forms/radio-group.d.ts +50 -0
- package/dist/forms/radio-group.js +64 -0
- package/dist/forms/rating.d.ts +69 -0
- package/dist/forms/rating.js +103 -0
- package/dist/forms/scrub-input.d.ts +81 -0
- package/dist/forms/scrub-input.js +249 -0
- package/dist/forms/search-input.d.ts +54 -0
- package/dist/forms/search-input.js +112 -0
- package/dist/forms/select.d.ts +75 -0
- package/dist/forms/select.js +91 -0
- package/dist/forms/slider.d.ts +44 -0
- package/dist/forms/slider.js +65 -0
- package/dist/forms/switch.d.ts +36 -0
- package/dist/forms/switch.js +71 -0
- package/dist/forms/tags-input.d.ts +69 -0
- package/dist/forms/tags-input.js +148 -0
- package/dist/forms/textarea.d.ts +39 -0
- package/dist/forms/textarea.js +37 -0
- package/dist/forms/toggle-group.d.ts +41 -0
- package/dist/forms/toggle-group.js +56 -0
- package/dist/forms/toggle.d.ts +47 -0
- package/dist/forms/toggle.js +100 -0
- package/dist/icons/containers.d.ts +89 -0
- package/dist/icons/containers.js +295 -0
- package/dist/icons/index.d.ts +2 -0
- package/dist/index.d.ts +138 -0
- package/dist/index.js +124 -0
- package/dist/instruments/_ansi.js +116 -0
- package/dist/instruments/_data-row.d.ts +68 -0
- package/dist/instruments/_data-row.js +139 -0
- package/dist/instruments/_glyphs.js +90 -0
- package/dist/instruments/_ledger-disclosure.js +103 -0
- package/dist/instruments/_ledger.d.ts +21 -0
- package/dist/instruments/_ledger.js +5 -0
- package/dist/instruments/_motion.js +56 -0
- package/dist/instruments/_rem.js +21 -0
- package/dist/instruments/app-window-frame.d.ts +48 -0
- package/dist/instruments/app-window-frame.js +76 -0
- package/dist/instruments/code-block.d.ts +35 -0
- package/dist/instruments/code-block.js +173 -0
- package/dist/instruments/copy-button.d.ts +41 -0
- package/dist/instruments/copy-button.js +112 -0
- package/dist/instruments/data-row.d.ts +94 -0
- package/dist/instruments/data-row.js +151 -0
- package/dist/instruments/data-table.d.ts +168 -0
- package/dist/instruments/data-table.js +212 -0
- package/dist/instruments/data-tree.d.ts +126 -0
- package/dist/instruments/data-tree.js +303 -0
- package/dist/instruments/group-bar.d.ts +63 -0
- package/dist/instruments/group-bar.js +122 -0
- package/dist/instruments/index.d.ts +18 -0
- package/dist/instruments/index.js +18 -0
- package/dist/instruments/ledger.d.ts +204 -0
- package/dist/instruments/ledger.js +204 -0
- package/dist/instruments/log-viewer.d.ts +74 -0
- package/dist/instruments/log-viewer.js +215 -0
- package/dist/instruments/meter.d.ts +81 -0
- package/dist/instruments/meter.js +96 -0
- package/dist/instruments/progress.d.ts +61 -0
- package/dist/instruments/progress.js +79 -0
- package/dist/instruments/seam-grid.d.ts +66 -0
- package/dist/instruments/seam-grid.js +78 -0
- package/dist/instruments/sparkline.d.ts +39 -0
- package/dist/instruments/sparkline.js +85 -0
- package/dist/instruments/stat.d.ts +35 -0
- package/dist/instruments/stat.js +59 -0
- package/dist/instruments/table.d.ts +170 -0
- package/dist/instruments/table.js +237 -0
- package/dist/instruments/terminal-frame.d.ts +89 -0
- package/dist/instruments/terminal-frame.js +256 -0
- package/dist/instruments/two-step-button.d.ts +47 -0
- package/dist/instruments/two-step-button.js +166 -0
- package/dist/instruments/usage-chart.d.ts +55 -0
- package/dist/instruments/usage-chart.js +235 -0
- package/dist/layout/_collapse.js +46 -0
- package/dist/layout/_glyphs.js +45 -0
- package/dist/layout/_ground.d.ts +22 -0
- package/dist/layout/_ground.js +9 -0
- package/dist/layout/accordion.d.ts +52 -0
- package/dist/layout/accordion.js +81 -0
- package/dist/layout/bento.d.ts +144 -0
- package/dist/layout/bento.js +266 -0
- package/dist/layout/breadcrumb.d.ts +35 -0
- package/dist/layout/breadcrumb.js +67 -0
- package/dist/layout/card.d.ts +51 -0
- package/dist/layout/card.js +76 -0
- package/dist/layout/carousel.d.ts +96 -0
- package/dist/layout/carousel.js +211 -0
- package/dist/layout/collapsible.d.ts +74 -0
- package/dist/layout/collapsible.js +126 -0
- package/dist/layout/container.d.ts +27 -0
- package/dist/layout/container.js +43 -0
- package/dist/layout/description-list.d.ts +24 -0
- package/dist/layout/description-list.js +37 -0
- package/dist/layout/frames.d.ts +70 -0
- package/dist/layout/frames.js +298 -0
- package/dist/layout/grid.d.ts +40 -0
- package/dist/layout/grid.js +48 -0
- package/dist/layout/index.d.ts +19 -0
- package/dist/layout/index.js +18 -0
- package/dist/layout/item.d.ts +65 -0
- package/dist/layout/item.js +100 -0
- package/dist/layout/link.d.ts +48 -0
- package/dist/layout/link.js +63 -0
- package/dist/layout/pagination.d.ts +54 -0
- package/dist/layout/pagination.js +121 -0
- package/dist/layout/preview.d.ts +177 -0
- package/dist/layout/preview.js +628 -0
- package/dist/layout/resizable.d.ts +38 -0
- package/dist/layout/resizable.js +68 -0
- package/dist/layout/sidebar.d.ts +105 -0
- package/dist/layout/sidebar.js +158 -0
- package/dist/layout/stack.d.ts +46 -0
- package/dist/layout/stack.js +62 -0
- package/dist/layout/stepper.d.ts +49 -0
- package/dist/layout/stepper.js +81 -0
- package/dist/layout/timeline.d.ts +43 -0
- package/dist/layout/timeline.js +63 -0
- package/dist/lib/aria-class.js +24 -0
- package/dist/lib/cn.js +18 -0
- package/dist/lib/compose.js +38 -0
- package/dist/lib/cva.d.ts +18 -0
- package/dist/lib/cva.js +65 -0
- package/dist/midi/_notes.d.ts +101 -0
- package/dist/midi/_notes.js +183 -0
- package/dist/midi/_ruler.d.ts +100 -0
- package/dist/midi/_ruler.js +105 -0
- package/dist/midi/_time.d.ts +107 -0
- package/dist/midi/_time.js +130 -0
- package/dist/midi/index.d.ts +9 -0
- package/dist/midi/index.js +9 -0
- package/dist/midi/musical-time-input.d.ts +48 -0
- package/dist/midi/musical-time-input.js +154 -0
- package/dist/midi/piano-keyboard.d.ts +50 -0
- package/dist/midi/piano-keyboard.js +197 -0
- package/dist/midi/spectrum-visualizer.d.ts +65 -0
- package/dist/midi/spectrum-visualizer.js +213 -0
- package/dist/midi/threshold-rail.d.ts +72 -0
- package/dist/midi/threshold-rail.js +214 -0
- package/dist/midi/timeline-ruler.d.ts +83 -0
- package/dist/midi/timeline-ruler.js +152 -0
- package/dist/overlays/_debounce.js +34 -0
- package/dist/overlays/_glyphs.js +59 -0
- package/dist/overlays/_surface.d.ts +70 -0
- package/dist/overlays/_surface.js +70 -0
- package/dist/overlays/_wheel.js +42 -0
- package/dist/overlays/alert-dialog.d.ts +67 -0
- package/dist/overlays/alert-dialog.js +117 -0
- package/dist/overlays/command-palette.d.ts +93 -0
- package/dist/overlays/command-palette.js +193 -0
- package/dist/overlays/context-menu.d.ts +64 -0
- package/dist/overlays/context-menu.js +78 -0
- package/dist/overlays/dialog.d.ts +72 -0
- package/dist/overlays/dialog.js +124 -0
- package/dist/overlays/drawer.d.ts +75 -0
- package/dist/overlays/drawer.js +151 -0
- package/dist/overlays/dropdown-menu.d.ts +79 -0
- package/dist/overlays/dropdown-menu.js +156 -0
- package/dist/overlays/hover-card.d.ts +58 -0
- package/dist/overlays/hover-card.js +91 -0
- package/dist/overlays/index.d.ts +15 -0
- package/dist/overlays/index.js +15 -0
- package/dist/overlays/info-tip.d.ts +41 -0
- package/dist/overlays/info-tip.js +45 -0
- package/dist/overlays/menubar.d.ts +72 -0
- package/dist/overlays/menubar.js +100 -0
- package/dist/overlays/popover.d.ts +66 -0
- package/dist/overlays/popover.js +114 -0
- package/dist/overlays/sheet.d.ts +78 -0
- package/dist/overlays/sheet.js +131 -0
- package/dist/overlays/toast.d.ts +106 -0
- package/dist/overlays/toast.js +146 -0
- package/dist/overlays/tooltip.d.ts +57 -0
- package/dist/overlays/tooltip.js +95 -0
- package/dist/primitives/avatar.d.ts +51 -0
- package/dist/primitives/avatar.js +93 -0
- package/dist/primitives/button.d.ts +58 -0
- package/dist/primitives/button.js +104 -0
- package/dist/primitives/chip.d.ts +73 -0
- package/dist/primitives/chip.js +238 -0
- package/dist/primitives/icon-button.d.ts +41 -0
- package/dist/primitives/icon-button.js +59 -0
- package/dist/primitives/index.d.ts +10 -0
- package/dist/primitives/index.js +10 -0
- package/dist/primitives/kbd.d.ts +17 -0
- package/dist/primitives/kbd.js +24 -0
- package/dist/primitives/separator.d.ts +25 -0
- package/dist/primitives/separator.js +30 -0
- package/dist/primitives/skeleton.d.ts +20 -0
- package/dist/primitives/skeleton.js +27 -0
- package/dist/primitives/spinner.d.ts +26 -0
- package/dist/primitives/spinner.js +31 -0
- package/dist/primitives/status-dot.d.ts +51 -0
- package/dist/primitives/status-dot.js +57 -0
- package/dist/styles.css +97 -0
- package/dist/system/agent-skin.d.ts +27 -0
- package/dist/system/agent-skin.js +20 -0
- package/dist/system/density.d.ts +73 -0
- package/dist/system/density.js +111 -0
- package/dist/system/index.d.ts +12 -0
- package/dist/system/index.js +10 -0
- package/dist/system/overrides.d.ts +80 -0
- package/dist/system/overrides.js +277 -0
- package/dist/system/portal.d.ts +56 -0
- package/dist/system/portal.js +193 -0
- package/dist/system/prepaint.d.ts +134 -0
- package/dist/system/prepaint.js +120 -0
- package/dist/system/theme-provider.d.ts +290 -0
- package/dist/system/theme-provider.js +543 -0
- package/dist/system/theme-registry.d.ts +53 -0
- package/dist/system/theme-registry.js +66 -0
- package/dist/system/use-density.d.ts +50 -0
- package/dist/system/use-density.js +232 -0
- package/dist/system/use-isomorphic-layout-effect.js +33 -0
- package/dist/system/use-theme.d.ts +30 -0
- package/dist/system/use-theme.js +36 -0
- package/dist/system/vocabulary.d.ts +16 -0
- package/dist/system/vocabulary.js +125 -0
- package/dist/theming/contrast.d.ts +2 -0
- package/dist/theming/contrast.js +2 -0
- package/dist/theming/create-theme.d.ts +195 -0
- package/dist/theming/create-theme.js +524 -0
- package/dist/theming/index.d.ts +4 -0
- package/dist/theming/index.js +4 -0
- package/dist/theming/serialize.d.ts +167 -0
- package/dist/theming/serialize.js +241 -0
- package/manifest/components/accordion.json +173 -0
- package/manifest/components/activity-graph.json +104 -0
- package/manifest/components/agent-card.json +150 -0
- package/manifest/components/agent-handoff.json +104 -0
- package/manifest/components/agent-mode-badge.json +102 -0
- package/manifest/components/agent-pile.json +147 -0
- package/manifest/components/agent-plan.json +74 -0
- package/manifest/components/agent-status.json +87 -0
- package/manifest/components/agent-surface.json +93 -0
- package/manifest/components/alert-dialog.json +215 -0
- package/manifest/components/animated-number.json +75 -0
- package/manifest/components/app-bar.json +297 -0
- package/manifest/components/app-shell.json +526 -0
- package/manifest/components/app-window-frame.json +124 -0
- package/manifest/components/approval-card.json +136 -0
- package/manifest/components/artifact-card.json +93 -0
- package/manifest/components/ask-box.json +288 -0
- package/manifest/components/audience-icon.json +46 -0
- package/manifest/components/autocomplete.json +262 -0
- package/manifest/components/avatar-group.json +83 -0
- package/manifest/components/avatar.json +113 -0
- package/manifest/components/background-inbox.json +79 -0
- package/manifest/components/band.json +104 -0
- package/manifest/components/bento.json +306 -0
- package/manifest/components/branch-picker.json +146 -0
- package/manifest/components/breadcrumb.json +85 -0
- package/manifest/components/button-group.json +91 -0
- package/manifest/components/button.json +163 -0
- package/manifest/components/calendar.json +65 -0
- package/manifest/components/canvas-split-body.json +66 -0
- package/manifest/components/canvas-split-document.json +55 -0
- package/manifest/components/canvas-split-header.json +97 -0
- package/manifest/components/canvas-split-line.json +66 -0
- package/manifest/components/canvas-split-message.json +70 -0
- package/manifest/components/canvas-split-thread.json +55 -0
- package/manifest/components/canvas-split.json +61 -0
- package/manifest/components/card.json +152 -0
- package/manifest/components/carousel.json +242 -0
- package/manifest/components/catalogue-icon.json +46 -0
- package/manifest/components/channel-beta-icon.json +46 -0
- package/manifest/components/channel-matrix.json +239 -0
- package/manifest/components/channel-released-icon.json +46 -0
- package/manifest/components/chart-container.json +127 -0
- package/manifest/components/chart-ramp.json +82 -0
- package/manifest/components/chart-swatch.json +72 -0
- package/manifest/components/chart-tooltip-content.json +140 -0
- package/manifest/components/chart.json +117 -0
- package/manifest/components/chat-empty-state.json +55 -0
- package/manifest/components/chat-panel-assistant-message.json +52 -0
- package/manifest/components/chat-panel-composer.json +74 -0
- package/manifest/components/chat-panel-messages.json +52 -0
- package/manifest/components/chat-panel-typing.json +52 -0
- package/manifest/components/chat-panel-user-message.json +52 -0
- package/manifest/components/chat-panel.json +58 -0
- package/manifest/components/checkbox-group.json +70 -0
- package/manifest/components/checkbox.json +106 -0
- package/manifest/components/checkpoint-history.json +91 -0
- package/manifest/components/chip.json +174 -0
- package/manifest/components/clamp.json +125 -0
- package/manifest/components/cli-tool-icon.json +46 -0
- package/manifest/components/code-block.json +107 -0
- package/manifest/components/code-diff.json +104 -0
- package/manifest/components/code-runner.json +124 -0
- package/manifest/components/collapsible.json +133 -0
- package/manifest/components/color-area.json +62 -0
- package/manifest/components/color-field.json +91 -0
- package/manifest/components/color-picker.json +235 -0
- package/manifest/components/color-slider.json +84 -0
- package/manifest/components/color-swatch.json +79 -0
- package/manifest/components/colors-section.json +70 -0
- package/manifest/components/combobox.json +265 -0
- package/manifest/components/command-palette.json +222 -0
- package/manifest/components/compaction-row.json +128 -0
- package/manifest/components/comparison-card.json +98 -0
- package/manifest/components/composer-actions.json +65 -0
- package/manifest/components/composer-attach-button.json +65 -0
- package/manifest/components/composer-attachment-chip.json +83 -0
- package/manifest/components/composer-attachments.json +60 -0
- package/manifest/components/composer-bar.json +76 -0
- package/manifest/components/composer-command-item.json +85 -0
- package/manifest/components/composer-context.json +71 -0
- package/manifest/components/composer-input.json +77 -0
- package/manifest/components/composer-menu-item.json +75 -0
- package/manifest/components/composer-menu.json +89 -0
- package/manifest/components/composer-model-item.json +82 -0
- package/manifest/components/composer-model-trigger.json +81 -0
- package/manifest/components/composer-person-item.json +86 -0
- package/manifest/components/composer-send.json +86 -0
- package/manifest/components/composer-toolbar.json +65 -0
- package/manifest/components/composer-voice-button.json +71 -0
- package/manifest/components/composer-voice.json +81 -0
- package/manifest/components/composer.json +238 -0
- package/manifest/components/computer-use.json +98 -0
- package/manifest/components/confidence-marker.json +86 -0
- package/manifest/components/connection-state.json +103 -0
- package/manifest/components/container.json +75 -0
- package/manifest/components/context-breakdown.json +72 -0
- package/manifest/components/context-menu.json +134 -0
- package/manifest/components/context-usage.json +98 -0
- package/manifest/components/conversation-search.json +111 -0
- package/manifest/components/copy-button.json +118 -0
- package/manifest/components/cost-meter.json +84 -0
- package/manifest/components/cue-logotype.json +110 -0
- package/manifest/components/cue-mark.json +111 -0
- package/manifest/components/cue-portal-frame.json +65 -0
- package/manifest/components/data-row.json +222 -0
- package/manifest/components/data-table-pagination.json +97 -0
- package/manifest/components/data-table-toolbar.json +127 -0
- package/manifest/components/data-tree.json +185 -0
- package/manifest/components/date-field.json +93 -0
- package/manifest/components/date-picker.json +255 -0
- package/manifest/components/date-range-picker.json +255 -0
- package/manifest/components/day-separator.json +63 -0
- package/manifest/components/delegation-card.json +196 -0
- package/manifest/components/density.json +93 -0
- package/manifest/components/description-list.json +91 -0
- package/manifest/components/diagram.json +126 -0
- package/manifest/components/dialog.json +222 -0
- package/manifest/components/disclosure.json +134 -0
- package/manifest/components/dmx-bar.json +107 -0
- package/manifest/components/dmx-strip.json +117 -0
- package/manifest/components/document-reference.json +108 -0
- package/manifest/components/draft-restore.json +96 -0
- package/manifest/components/drawer.json +204 -0
- package/manifest/components/dropdown-menu.json +275 -0
- package/manifest/components/edit-message.json +131 -0
- package/manifest/components/elements-command-palette.json +122 -0
- package/manifest/components/elements-composer.json +71 -0
- package/manifest/components/elements-data-table.json +75 -0
- package/manifest/components/elements-timeline.json +77 -0
- package/manifest/components/elicitation-form.json +130 -0
- package/manifest/components/empty-state-composer.json +71 -0
- package/manifest/components/empty-state-greeting.json +49 -0
- package/manifest/components/empty-state-suggestion.json +60 -0
- package/manifest/components/empty-state-suggestions.json +49 -0
- package/manifest/components/empty-state.json +111 -0
- package/manifest/components/end-of-turn-summary.json +89 -0
- package/manifest/components/env-var-input.json +194 -0
- package/manifest/components/error-state.json +93 -0
- package/manifest/components/export-dialog.json +101 -0
- package/manifest/components/eyebrow.json +59 -0
- package/manifest/components/feedback-dialog.json +133 -0
- package/manifest/components/field-description.json +66 -0
- package/manifest/components/field-error.json +87 -0
- package/manifest/components/field-label.json +66 -0
- package/manifest/components/field.json +82 -0
- package/manifest/components/file-tree.json +96 -0
- package/manifest/components/file-upload.json +204 -0
- package/manifest/components/flow-background.json +50 -0
- package/manifest/components/flow-controls.json +50 -0
- package/manifest/components/flow-graph.json +86 -0
- package/manifest/components/folder-icon.json +46 -0
- package/manifest/components/footer.json +133 -0
- package/manifest/components/frac.json +68 -0
- package/manifest/components/frames.json +210 -0
- package/manifest/components/generation-loader.json +78 -0
- package/manifest/components/generative-ui.json +125 -0
- package/manifest/components/grid.json +132 -0
- package/manifest/components/group-bar.json +122 -0
- package/manifest/components/guardrail-notice.json +109 -0
- package/manifest/components/hover-card.json +189 -0
- package/manifest/components/icon-button.json +106 -0
- package/manifest/components/image-generation.json +73 -0
- package/manifest/components/info-tip.json +133 -0
- package/manifest/components/inline-citation.json +90 -0
- package/manifest/components/input-group.json +112 -0
- package/manifest/components/input.json +121 -0
- package/manifest/components/inspector.json +199 -0
- package/manifest/components/item.json +163 -0
- package/manifest/components/job-progress.json +116 -0
- package/manifest/components/kbd.json +52 -0
- package/manifest/components/launcher-bubble.json +130 -0
- package/manifest/components/ledger.json +330 -0
- package/manifest/components/link.json +94 -0
- package/manifest/components/live-region-announcer.json +95 -0
- package/manifest/components/log-viewer.json +172 -0
- package/manifest/components/map-answer.json +97 -0
- package/manifest/components/markdown-text.json +126 -0
- package/manifest/components/math-block.json +84 -0
- package/manifest/components/mcp-server-icon.json +46 -0
- package/manifest/components/mcp-server-panel.json +102 -0
- package/manifest/components/memory-chips.json +73 -0
- package/manifest/components/menubar.json +184 -0
- package/manifest/components/message-actions.json +125 -0
- package/manifest/components/message-attachments.json +71 -0
- package/manifest/components/message-branches.json +83 -0
- package/manifest/components/message-list.json +121 -0
- package/manifest/components/message-pair.json +107 -0
- package/manifest/components/message-queue.json +85 -0
- package/manifest/components/message-timing.json +69 -0
- package/manifest/components/message.json +149 -0
- package/manifest/components/meter.json +150 -0
- package/manifest/components/mobile-composer.json +163 -0
- package/manifest/components/model-picker.json +87 -0
- package/manifest/components/multi-select.json +255 -0
- package/manifest/components/musical-time-input.json +141 -0
- package/manifest/components/navigation-menu.json +269 -0
- package/manifest/components/node-card.json +144 -0
- package/manifest/components/node-handle.json +84 -0
- package/manifest/components/number-field.json +131 -0
- package/manifest/components/number-ticker.json +67 -0
- package/manifest/components/onboarding.json +100 -0
- package/manifest/components/otp-field.json +163 -0
- package/manifest/components/page-shell.json +129 -0
- package/manifest/components/pagination.json +108 -0
- package/manifest/components/panel-header.json +89 -0
- package/manifest/components/panel.json +71 -0
- package/manifest/components/password-input.json +171 -0
- package/manifest/components/permission-grant.json +115 -0
- package/manifest/components/permission-scopes.json +184 -0
- package/manifest/components/piano-keyboard.json +149 -0
- package/manifest/components/plussie.json +140 -0
- package/manifest/components/popover.json +231 -0
- package/manifest/components/preset-section.json +80 -0
- package/manifest/components/preview.json +294 -0
- package/manifest/components/progress.json +114 -0
- package/manifest/components/prompt-library.json +122 -0
- package/manifest/components/queue-dock.json +139 -0
- package/manifest/components/quota-banner.json +113 -0
- package/manifest/components/quote-reply.json +129 -0
- package/manifest/components/radio-group.json +83 -0
- package/manifest/components/radio.json +94 -0
- package/manifest/components/rating.json +188 -0
- package/manifest/components/read-aloud.json +139 -0
- package/manifest/components/reasoning-effort.json +95 -0
- package/manifest/components/reasoning-panel.json +135 -0
- package/manifest/components/recommendation-card.json +133 -0
- package/manifest/components/regenerate-menu.json +107 -0
- package/manifest/components/replay-player.json +124 -0
- package/manifest/components/research-report.json +87 -0
- package/manifest/components/resizable.json +91 -0
- package/manifest/components/retrieval-chunks.json +98 -0
- package/manifest/components/revert-dock.json +197 -0
- package/manifest/components/reviewable-diff.json +113 -0
- package/manifest/components/risk-badge.json +89 -0
- package/manifest/components/row.json +122 -0
- package/manifest/components/schedule-card.json +121 -0
- package/manifest/components/score-breakdown.json +108 -0
- package/manifest/components/scroll-anchor.json +84 -0
- package/manifest/components/scroll-area.json +114 -0
- package/manifest/components/scrollable-tabs-list.json +91 -0
- package/manifest/components/scrub-input.json +268 -0
- package/manifest/components/seam-cell.json +91 -0
- package/manifest/components/seam-grid.json +84 -0
- package/manifest/components/seam-list.json +56 -0
- package/manifest/components/search-input.json +195 -0
- package/manifest/components/section-header.json +140 -0
- package/manifest/components/segmented-control.json +178 -0
- package/manifest/components/select.json +253 -0
- package/manifest/components/separator.json +56 -0
- package/manifest/components/settings-panel.json +152 -0
- package/manifest/components/shape-section.json +70 -0
- package/manifest/components/shared-conversation.json +107 -0
- package/manifest/components/sheet.json +210 -0
- package/manifest/components/shimmer-label.json +61 -0
- package/manifest/components/sidebar.json +245 -0
- package/manifest/components/signal-edge.json +56 -0
- package/manifest/components/skeleton.json +46 -0
- package/manifest/components/skill-icon.json +46 -0
- package/manifest/components/slider.json +106 -0
- package/manifest/components/sources.json +97 -0
- package/manifest/components/sparkline.json +89 -0
- package/manifest/components/speaker-identity.json +66 -0
- package/manifest/components/spec-sheet.json +93 -0
- package/manifest/components/spectrum-visualizer.json +147 -0
- package/manifest/components/spinner.json +71 -0
- package/manifest/components/stack-icon.json +46 -0
- package/manifest/components/stack.json +143 -0
- package/manifest/components/stacks-matrix-icon.json +46 -0
- package/manifest/components/stat.json +111 -0
- package/manifest/components/status-bar.json +233 -0
- package/manifest/components/status-dot.json +97 -0
- package/manifest/components/stepper.json +107 -0
- package/manifest/components/stopped-run.json +97 -0
- package/manifest/components/streaming-text.json +82 -0
- package/manifest/components/sub.json +45 -0
- package/manifest/components/subagent-list.json +106 -0
- package/manifest/components/suggestions.json +106 -0
- package/manifest/components/sup.json +45 -0
- package/manifest/components/swap-label.json +86 -0
- package/manifest/components/switch.json +102 -0
- package/manifest/components/table-scroll-region.json +78 -0
- package/manifest/components/table.json +306 -0
- package/manifest/components/tabs.json +156 -0
- package/manifest/components/tags-input.json +255 -0
- package/manifest/components/tail-status.json +138 -0
- package/manifest/components/terminal-block.json +111 -0
- package/manifest/components/terminal-frame.json +146 -0
- package/manifest/components/textarea.json +104 -0
- package/manifest/components/theme-configurator.json +158 -0
- package/manifest/components/theme-provider.json +228 -0
- package/manifest/components/thinking-indicator.json +69 -0
- package/manifest/components/thread-list.json +87 -0
- package/manifest/components/thread-search.json +108 -0
- package/manifest/components/threshold-rail.json +223 -0
- package/manifest/components/time-boundary.json +68 -0
- package/manifest/components/time-field.json +93 -0
- package/manifest/components/timeline-ruler.json +178 -0
- package/manifest/components/timeline.json +131 -0
- package/manifest/components/title-bar.json +97 -0
- package/manifest/components/toast.json +140 -0
- package/manifest/components/todo-list.json +76 -0
- package/manifest/components/toggle-group.json +134 -0
- package/manifest/components/toggle.json +140 -0
- package/manifest/components/token-editor.json +106 -0
- package/manifest/components/tool-call-card.json +268 -0
- package/manifest/components/tool-call.json +147 -0
- package/manifest/components/tool-error.json +141 -0
- package/manifest/components/tool-group.json +97 -0
- package/manifest/components/tool-timeline.json +147 -0
- package/manifest/components/toolbar.json +192 -0
- package/manifest/components/tooltip.json +199 -0
- package/manifest/components/trace-waterfall.json +84 -0
- package/manifest/components/tree-visibility-toggle.json +99 -0
- package/manifest/components/tree.json +182 -0
- package/manifest/components/turn-footer.json +133 -0
- package/manifest/components/two-step-button.json +150 -0
- package/manifest/components/typing-indicator.json +60 -0
- package/manifest/components/universe-grid.json +155 -0
- package/manifest/components/unread-divider.json +58 -0
- package/manifest/components/usage-chart.json +162 -0
- package/manifest/components/verdict-row.json +106 -0
- package/manifest/components/voice-conversation.json +141 -0
- package/manifest/components/web-preview.json +105 -0
- package/manifest/components/web-search.json +108 -0
- package/manifest/components/work-collapse.json +125 -0
- package/manifest/fixtures.json +776 -0
- package/manifest/manifest.json +5037 -0
- package/manifest/tokens.json +288 -0
- package/package.json +278 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { AGENT_ROOT_COLOR, agentColor } from "../chat/agent-color.js";
|
|
4
|
+
import { CheckGlyph } from "../chat/_glyphs.js";
|
|
5
|
+
import { Chip } from "../primitives/chip.js";
|
|
6
|
+
import { Spinner } from "../primitives/spinner.js";
|
|
7
|
+
import * as React from "react";
|
|
8
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
//#region src/agent-runtime/tool-call-card.tsx
|
|
10
|
+
/**
|
|
11
|
+
* The same map `AskBox` paints an approval with, for the same reason: a call
|
|
12
|
+
* the reader is watching and the question asking them to allow it must rate
|
|
13
|
+
* risk in one vocabulary, or the two cards disagree about what "critical"
|
|
14
|
+
* looks like.
|
|
15
|
+
*/
|
|
16
|
+
const DANGER_TONES = {
|
|
17
|
+
low: "ok",
|
|
18
|
+
high: "warn",
|
|
19
|
+
critical: "danger"
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* The header row, shared by the disclosure button and the buttonless header a
|
|
23
|
+
* card with nothing to disclose draws instead — the two must sit at exactly the
|
|
24
|
+
* same height and ink, or a list of calls ripples as some of them gain detail.
|
|
25
|
+
*/
|
|
26
|
+
const HEADER = "flex min-w-0 items-center gap-(--cue-space-2) border-0 bg-transparent p-0 text-start font-mono text-(length:--cue-text-ui) text-fg-muted outline-none focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-2 focus-visible:outline-accent";
|
|
27
|
+
/** The label over a block in the body, in the same eyebrow as a message header. */
|
|
28
|
+
const EYEBROW = "font-mono text-(length:--cue-text-micro) tracking-[0.15em] uppercase text-fg-subtle";
|
|
29
|
+
/**
|
|
30
|
+
* An LLM's own tool call, shown while it runs and after.
|
|
31
|
+
*
|
|
32
|
+
* The two neighbours it is deliberately not: `AskBox` is a question put to a
|
|
33
|
+
* human and it waits for an answer; `DelegationCard` is another agent's work
|
|
34
|
+
* folded into a lane. This is the model reaching for a tool by itself — nobody
|
|
35
|
+
* is being asked anything, and nothing downstream is another agent's turn. It
|
|
36
|
+
* borrows both their surfaces on purpose, so a transcript mixing all three
|
|
37
|
+
* reads as one family: the tool name and risk chip are `AskBox`'s, the status
|
|
38
|
+
* line and the disclosure are `DelegationCard`'s.
|
|
39
|
+
*
|
|
40
|
+
* Arguments and results are rendered verbatim: there is no markdown or HTML
|
|
41
|
+
* path here on purpose. Both are untrusted text — half of it is the model's
|
|
42
|
+
* own output and the other half is whatever the tool returned — and a
|
|
43
|
+
* component that quietly parsed them would make every consumer of this library
|
|
44
|
+
* one prompt away from an injection. `args` is text you already formatted;
|
|
45
|
+
* `result` takes nodes, so a caller who wants rich output passes their own
|
|
46
|
+
* renderer and owns that decision.
|
|
47
|
+
*
|
|
48
|
+
* The body is mounted and unmounted rather than height-animated. A call's
|
|
49
|
+
* result lands mid-render and its arguments grow while they stream, and
|
|
50
|
+
* animating the height of something that changes size on its own is how a panel
|
|
51
|
+
* ends up permanently mid-transition.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* <ToolCallCard tool="read_file" args={'{ "path": "cue.json" }'} status="working" activity="reading 12 KB" />
|
|
55
|
+
*/
|
|
56
|
+
const ToolCallCard = React.forwardRef(function ToolCallCard({ className, tool, args, result, status, activity, danger, agent, rootAgent, open: openProp, defaultOpen, onOpenChange, argsLabel = "arguments", resultLabel = "result", doneLabel = "Completed", failedLabel = "Failed", children, style, ...elementProps }, ref) {
|
|
57
|
+
const bodyId = React.useId();
|
|
58
|
+
const isControlled = openProp !== void 0;
|
|
59
|
+
const [uncontrolled, setUncontrolled] = React.useState(defaultOpen ?? false);
|
|
60
|
+
const open = isControlled ? openProp : uncontrolled;
|
|
61
|
+
const hasArgs = args !== void 0 && args !== "";
|
|
62
|
+
const hasResult = result !== void 0 && result !== null && result !== false && result !== "" && !(Array.isArray(result) && result.length === 0);
|
|
63
|
+
const hasDetail = hasArgs || hasResult || children !== void 0;
|
|
64
|
+
const toggle = () => {
|
|
65
|
+
const next = !open;
|
|
66
|
+
if (!isControlled) setUncontrolled(next);
|
|
67
|
+
onOpenChange?.(next);
|
|
68
|
+
};
|
|
69
|
+
const color = agent === void 0 ? AGENT_ROOT_COLOR : agentColor(agent, { root: rootAgent });
|
|
70
|
+
const heading = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
71
|
+
/* @__PURE__ */ jsx("span", {
|
|
72
|
+
"aria-hidden": "true",
|
|
73
|
+
className: "shrink-0 text-(--agent-color)",
|
|
74
|
+
children: "●"
|
|
75
|
+
}),
|
|
76
|
+
/* @__PURE__ */ jsx("code", {
|
|
77
|
+
"data-slot": "tool-call-card-tool",
|
|
78
|
+
className: "min-w-0 truncate font-mono text-(length:--cue-text-micro) text-fg",
|
|
79
|
+
children: tool
|
|
80
|
+
}),
|
|
81
|
+
agent === void 0 ? null : /* @__PURE__ */ jsxs("span", {
|
|
82
|
+
className: "sr-only",
|
|
83
|
+
children: ["by ", agent]
|
|
84
|
+
}),
|
|
85
|
+
danger === void 0 ? null : /* @__PURE__ */ jsx(Chip, {
|
|
86
|
+
"data-slot": "tool-call-card-danger",
|
|
87
|
+
tone: DANGER_TONES[danger],
|
|
88
|
+
"data-danger": danger,
|
|
89
|
+
children: danger
|
|
90
|
+
})
|
|
91
|
+
] });
|
|
92
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
93
|
+
ref,
|
|
94
|
+
"data-slot": "tool-call-card",
|
|
95
|
+
"data-agent": agent,
|
|
96
|
+
"data-status": status,
|
|
97
|
+
"data-state": hasDetail ? open ? "open" : "closed" : void 0,
|
|
98
|
+
"data-danger": danger,
|
|
99
|
+
className: cn("flex min-w-0 flex-col gap-(--cue-space-2) rounded-(--radius-control) border border-border px-(--cue-space-3) py-(--cue-space-2)", className),
|
|
100
|
+
style: {
|
|
101
|
+
"--agent-color": color,
|
|
102
|
+
...style
|
|
103
|
+
},
|
|
104
|
+
...elementProps,
|
|
105
|
+
children: [
|
|
106
|
+
hasDetail ? /* @__PURE__ */ jsxs("button", {
|
|
107
|
+
type: "button",
|
|
108
|
+
"data-slot": "tool-call-card-trigger",
|
|
109
|
+
"aria-expanded": open,
|
|
110
|
+
"aria-controls": open ? bodyId : void 0,
|
|
111
|
+
className: cn(HEADER, "cursor-pointer"),
|
|
112
|
+
onClick: toggle,
|
|
113
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
114
|
+
"aria-hidden": "true",
|
|
115
|
+
"data-slot": "tool-call-card-caret",
|
|
116
|
+
className: "shrink-0 text-(length:--cue-text-micro) leading-none select-none",
|
|
117
|
+
children: open ? "▾" : "▸"
|
|
118
|
+
}), heading]
|
|
119
|
+
}) : /* @__PURE__ */ jsxs("div", {
|
|
120
|
+
"data-slot": "tool-call-card-header",
|
|
121
|
+
className: HEADER,
|
|
122
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
123
|
+
"aria-hidden": "true",
|
|
124
|
+
"data-slot": "tool-call-card-caret-space",
|
|
125
|
+
className: "invisible shrink-0 text-(length:--cue-text-micro) leading-none select-none",
|
|
126
|
+
children: "▸"
|
|
127
|
+
}), heading]
|
|
128
|
+
}),
|
|
129
|
+
status === void 0 ? null : /* @__PURE__ */ jsxs("div", {
|
|
130
|
+
"data-slot": "tool-call-card-status",
|
|
131
|
+
"data-status": status,
|
|
132
|
+
className: cn("flex min-w-0 items-center gap-(--cue-space-2) ps-(--cue-space-5) font-mono text-(length:--cue-text-micro)", status === "failed" ? "text-danger" : "text-fg-subtle"),
|
|
133
|
+
children: [
|
|
134
|
+
status === "working" ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Spinner, {
|
|
135
|
+
size: "sm",
|
|
136
|
+
label: "working",
|
|
137
|
+
"data-slot": "tool-call-card-spinner",
|
|
138
|
+
className: "text-(--agent-color)"
|
|
139
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
140
|
+
className: "min-w-0 truncate",
|
|
141
|
+
children: activity ?? "working…"
|
|
142
|
+
})] }) : null,
|
|
143
|
+
status === "done" ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(CheckGlyph, { className: "size-icon-sm shrink-0 text-ok" }), /* @__PURE__ */ jsx("span", {
|
|
144
|
+
className: "min-w-0 truncate",
|
|
145
|
+
children: doneLabel
|
|
146
|
+
})] }) : null,
|
|
147
|
+
status === "failed" ? /* @__PURE__ */ jsx("span", {
|
|
148
|
+
className: "min-w-0 truncate",
|
|
149
|
+
children: failedLabel
|
|
150
|
+
}) : null,
|
|
151
|
+
status === "idle" ? /* @__PURE__ */ jsx("span", {
|
|
152
|
+
className: "min-w-0 truncate",
|
|
153
|
+
children: activity ?? "waiting"
|
|
154
|
+
}) : null
|
|
155
|
+
]
|
|
156
|
+
}),
|
|
157
|
+
open && hasDetail ? /* @__PURE__ */ jsxs("div", {
|
|
158
|
+
id: bodyId,
|
|
159
|
+
"data-slot": "tool-call-card-body",
|
|
160
|
+
className: "ms-(--cue-space-3) flex min-w-0 flex-col gap-(--cue-space-2) border-s-2 [border-inline-start-color:var(--agent-color)] ps-(--cue-space-4)",
|
|
161
|
+
children: [
|
|
162
|
+
hasArgs ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
|
|
163
|
+
"data-slot": "tool-call-card-args-label",
|
|
164
|
+
className: EYEBROW,
|
|
165
|
+
children: argsLabel
|
|
166
|
+
}), /* @__PURE__ */ jsx("pre", {
|
|
167
|
+
"data-slot": "tool-call-card-args",
|
|
168
|
+
className: "m-0 min-w-0 overflow-x-auto font-mono text-(length:--cue-text-micro) leading-(--cue-leading-ui) break-words whitespace-pre-wrap text-fg-muted",
|
|
169
|
+
children: args
|
|
170
|
+
})] }) : null,
|
|
171
|
+
hasResult ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
|
|
172
|
+
"data-slot": "tool-call-card-result-label",
|
|
173
|
+
className: EYEBROW,
|
|
174
|
+
children: resultLabel
|
|
175
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
176
|
+
"data-slot": "tool-call-card-result",
|
|
177
|
+
className: "min-w-0 font-mono text-(length:--cue-text-micro) leading-(--cue-leading-ui) break-words whitespace-pre-wrap text-fg",
|
|
178
|
+
children: result
|
|
179
|
+
})] }) : null,
|
|
180
|
+
children
|
|
181
|
+
]
|
|
182
|
+
}) : null
|
|
183
|
+
]
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
//#endregion
|
|
187
|
+
export { ToolCallCard };
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { BranchDirection } from "./branch-picker.js";
|
|
2
|
+
import { ToolCallStatus } from "./tool-call-card.js";
|
|
3
|
+
import { MessageRole } from "../chat/message.js";
|
|
4
|
+
import { AssistantRuntime, ThreadMessage } from "@assistant-ui/react";
|
|
5
|
+
//#region src/agent-runtime/use-agent-thread.d.ts
|
|
6
|
+
/** Where an agent turn has got to. */
|
|
7
|
+
type AgentTurnStatus = "streaming" | "complete" | "requires-action" | "cancelled" | "failed";
|
|
8
|
+
/** One tool call inside a turn, in the shape `ToolCallCard` takes. */
|
|
9
|
+
interface AgentToolCall {
|
|
10
|
+
/** The runtime's id for the call. */
|
|
11
|
+
id: string;
|
|
12
|
+
/** Tool name. Spread onto `ToolCallCard` as `tool`. */
|
|
13
|
+
tool: string;
|
|
14
|
+
/** Arguments as text: the pretty-printed parse once any field has landed, else the raw JSON as streamed. Spread as `args`. */
|
|
15
|
+
args: string;
|
|
16
|
+
/** The result as text, or `undefined` until there is one. Spread as `result`. */
|
|
17
|
+
result: string | undefined;
|
|
18
|
+
/** Spread onto `ToolCallCard` as `status`. */
|
|
19
|
+
status: ToolCallStatus;
|
|
20
|
+
}
|
|
21
|
+
/** One turn, in the shape `Message` takes. */
|
|
22
|
+
interface AgentTurn {
|
|
23
|
+
/** The runtime's message id. Use it as the React key and for `regenerate`/`switchBranch`. */
|
|
24
|
+
id: string;
|
|
25
|
+
/** Spread onto `Message` as `role`. */
|
|
26
|
+
role: MessageRole;
|
|
27
|
+
/** From `options.agent`; `undefined` when unset. Spread onto `Message` as `agent`. */
|
|
28
|
+
agent: string | undefined;
|
|
29
|
+
/** Every text part, joined by a blank line. Render verbatim as `Message`'s children. */
|
|
30
|
+
text: string;
|
|
31
|
+
/** Every reasoning part, joined by a blank line, or `undefined` when there is none. */
|
|
32
|
+
reasoning: string | undefined;
|
|
33
|
+
/** The turn's tool calls, in order. */
|
|
34
|
+
toolCalls: readonly AgentToolCall[];
|
|
35
|
+
/** Where the turn has got to, in words rather than in flags. */
|
|
36
|
+
status: AgentTurnStatus;
|
|
37
|
+
/** `status === "streaming"`. Spread onto `Message` as `pending`. */
|
|
38
|
+
pending: boolean;
|
|
39
|
+
/** When the runtime first saw the turn. */
|
|
40
|
+
createdAt: Date;
|
|
41
|
+
/** 1-based position among sibling branches, and how many there are — `BranchPicker`'s `index`/`count`. */
|
|
42
|
+
branch: {
|
|
43
|
+
readonly index: number;
|
|
44
|
+
readonly count: number;
|
|
45
|
+
};
|
|
46
|
+
/** The runtime's own message, for anything this shape leaves out. */
|
|
47
|
+
message: ThreadMessage;
|
|
48
|
+
}
|
|
49
|
+
interface UseAgentThreadOptions {
|
|
50
|
+
/** Names the agent behind agent turns: a fixed slug, or a resolver reading the runtime message (e.g. `m.metadata.custom.agent`). A resolver may be inline: it is read through a ref and applied when the thread changes, not on every render. */
|
|
51
|
+
agent?: string | ((message: ThreadMessage) => string | undefined);
|
|
52
|
+
}
|
|
53
|
+
/** What the hook returns — every field named for the prop it feeds. */
|
|
54
|
+
interface AgentThread {
|
|
55
|
+
/** The thread, oldest first. One `Message` each. */
|
|
56
|
+
turns: readonly AgentTurn[];
|
|
57
|
+
/** A run is in flight. Spread onto `Composer` as `busy`. */
|
|
58
|
+
busy: boolean;
|
|
59
|
+
/** The thread cannot take input. Spread onto `Composer` as `disabled`. */
|
|
60
|
+
disabled: boolean;
|
|
61
|
+
/** Send a user turn. Spread onto `Composer` as `onSend`. */
|
|
62
|
+
onSend: (text: string) => void;
|
|
63
|
+
/** Abort the run — `undefined` when the runtime cannot cancel, so `Composer` keeps Send. Spread as `onStop`. */
|
|
64
|
+
onStop: (() => void) | undefined;
|
|
65
|
+
/** Regenerate an agent turn in place (a new branch), or `undefined` when the runtime cannot reload. */
|
|
66
|
+
regenerate: ((turnId: string) => void) | undefined;
|
|
67
|
+
/** Move a turn to its previous/next sibling branch, or `undefined` when the runtime cannot switch. Feed `BranchPicker`'s `onNavigate`. */
|
|
68
|
+
switchBranch: ((turnId: string, direction: BranchDirection) => void) | undefined;
|
|
69
|
+
/** The runtime itself, for anything this shape leaves out. */
|
|
70
|
+
runtime: AssistantRuntime;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* An assistant-ui runtime, read as the props the Chat group already takes.
|
|
74
|
+
*
|
|
75
|
+
* `Message`, `MessageList` and `Composer` render turns that have finished
|
|
76
|
+
* arriving. The hard part of a turn that is *still* arriving — assembling
|
|
77
|
+
* tokens, tracking a run, cancelling one, keeping a regenerated answer beside
|
|
78
|
+
* its sibling — is a solved problem, so this library does not re-derive it. You
|
|
79
|
+
* build a runtime with one line of assistant-ui, typically
|
|
80
|
+
* `useExternalStoreRuntime(adapter)`, and hand the object over; every field
|
|
81
|
+
* that comes back is named for the prop it feeds.
|
|
82
|
+
*
|
|
83
|
+
* It is provider-free by construction: a `useSyncExternalStore` over the
|
|
84
|
+
* runtime's thread, and nothing else. No `AssistantRuntimeProvider`, no
|
|
85
|
+
* primitive, no context and no borrowed DOM — this library renders 100% of what
|
|
86
|
+
* the reader sees, and the peer is only a type in the shipped modules.
|
|
87
|
+
*
|
|
88
|
+
* `MessageList` follows a turn that is still growing on its own: the items
|
|
89
|
+
* container is watched for growth, so a streaming bubble keeps the bottom in
|
|
90
|
+
* view without the host adding anything, while a tool-call card the reader
|
|
91
|
+
* folds away leaves the view where it was.
|
|
92
|
+
*
|
|
93
|
+
* Four things are worth knowing before wiring an `ExternalStoreAdapter` to it:
|
|
94
|
+
*
|
|
95
|
+
* - **Pass `convertMessage`, and keep its identity.** Without it your messages
|
|
96
|
+
* must already be complete runtime messages, and a missing `metadata`
|
|
97
|
+
* throws; `convertMessage: (m) => m` lets the runtime fill the defaults in.
|
|
98
|
+
* Declare it outside the component (or memoise it): the runtime caches the
|
|
99
|
+
* conversion against that function, so a fresh arrow every render re-converts
|
|
100
|
+
* the whole thread, which re-renders, which converts it again — an inline
|
|
101
|
+
* arrow turns the next message change into "Maximum update depth exceeded".
|
|
102
|
+
* - **`onReload` takes two arguments** — `(parentId, config)`. Regenerating a
|
|
103
|
+
* turn re-runs its *parent*, which is what puts the new answer beside the old
|
|
104
|
+
* one rather than after it.
|
|
105
|
+
* - **A branch switch is host-owned.** Under an ExternalStore runtime
|
|
106
|
+
* `switchBranch` does not move the thread: it arrives at the adapter's
|
|
107
|
+
* `setMessages` with the newly visible list, and the host writes it back. A
|
|
108
|
+
* host that ignores `setMessages` gets a picker that does nothing.
|
|
109
|
+
* - **`onStop`, `regenerate` and `switchBranch` are `undefined`** until the
|
|
110
|
+
* matching callback exists on the adapter (`onCancel`, `onReload`,
|
|
111
|
+
* `setMessages`). That is deliberate: `Composer` keeps drawing Send while
|
|
112
|
+
* `onStop` is missing, so a control that cannot work is never drawn.
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* // Outside the component: the runtime caches the conversion against this
|
|
116
|
+
* // function, and a new one every render is an update loop.
|
|
117
|
+
* const convertMessage = (m: ThreadMessageLike) => m;
|
|
118
|
+
*
|
|
119
|
+
* const runtime = useExternalStoreRuntime({
|
|
120
|
+
* messages,
|
|
121
|
+
* isRunning,
|
|
122
|
+
* convertMessage,
|
|
123
|
+
* onNew,
|
|
124
|
+
* onCancel,
|
|
125
|
+
* onReload,
|
|
126
|
+
* setMessages,
|
|
127
|
+
* });
|
|
128
|
+
* const thread = useAgentThread(runtime, { agent: "planner" });
|
|
129
|
+
*
|
|
130
|
+
* <MessageList aria-label="Thread">
|
|
131
|
+
* {thread.turns.map((t) => (
|
|
132
|
+
* <Message
|
|
133
|
+
* key={t.id}
|
|
134
|
+
* role={t.role}
|
|
135
|
+
* agent={t.agent}
|
|
136
|
+
* pending={t.pending}
|
|
137
|
+
* footer={
|
|
138
|
+
* t.branch.count > 1 && thread.switchBranch ? (
|
|
139
|
+
* <BranchPicker
|
|
140
|
+
* index={t.branch.index}
|
|
141
|
+
* count={t.branch.count}
|
|
142
|
+
* onNavigate={(d) => thread.switchBranch?.(t.id, d)}
|
|
143
|
+
* disabled={thread.busy}
|
|
144
|
+
* />
|
|
145
|
+
* ) : undefined
|
|
146
|
+
* }
|
|
147
|
+
* >
|
|
148
|
+
* {t.text}
|
|
149
|
+
* {t.toolCalls.map((c) => (
|
|
150
|
+
* <ToolCallCard key={c.id} tool={c.tool} args={c.args} result={c.result} status={c.status} />
|
|
151
|
+
* ))}
|
|
152
|
+
* </Message>
|
|
153
|
+
* ))}
|
|
154
|
+
* </MessageList>
|
|
155
|
+
* <Composer
|
|
156
|
+
* onSend={thread.onSend}
|
|
157
|
+
* busy={thread.busy}
|
|
158
|
+
* disabled={thread.disabled || thread.busy}
|
|
159
|
+
* onStop={thread.onStop}
|
|
160
|
+
* />
|
|
161
|
+
*/
|
|
162
|
+
declare function useAgentThread(runtime: AssistantRuntime, options?: UseAgentThreadOptions): AgentThread;
|
|
163
|
+
//#endregion
|
|
164
|
+
export { AgentThread, AgentToolCall, AgentTurn, AgentTurnStatus, UseAgentThreadOptions, useAgentThread };
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
//#region src/agent-runtime/use-agent-thread.ts
|
|
4
|
+
/**
|
|
5
|
+
* The runtime says `assistant`; this library has said `agent` since its first
|
|
6
|
+
* chat component, because a turn here can come from one of a dozen named
|
|
7
|
+
* workers rather than the assistant.
|
|
8
|
+
*/
|
|
9
|
+
const ROLES = {
|
|
10
|
+
assistant: "agent",
|
|
11
|
+
system: "system",
|
|
12
|
+
user: "user"
|
|
13
|
+
};
|
|
14
|
+
/** Every text part of a turn, as one block of prose. */
|
|
15
|
+
function joinText(content) {
|
|
16
|
+
return content.flatMap((part) => part.type === "text" ? [part.text] : []).join("\n\n");
|
|
17
|
+
}
|
|
18
|
+
/** Every reasoning part, or nothing at all when the model showed none. */
|
|
19
|
+
function joinReasoning(content) {
|
|
20
|
+
const thoughts = content.flatMap((part) => part.type === "reasoning" ? [part.text] : []);
|
|
21
|
+
return thoughts.length === 0 ? void 0 : thoughts.join("\n\n");
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* While a call is still streaming, `args` is a partial parse — often `{}` for
|
|
25
|
+
* several frames — and `argsText` is what the model has actually said. Show the
|
|
26
|
+
* parse once there is one, the raw text until then, and nothing invented in
|
|
27
|
+
* either case.
|
|
28
|
+
*/
|
|
29
|
+
function formatArgs(part) {
|
|
30
|
+
const args = part.args;
|
|
31
|
+
if (typeof args === "object" && args !== null && Object.keys(args).length > 0) return JSON.stringify(args, null, 2);
|
|
32
|
+
return part.argsText ?? "";
|
|
33
|
+
}
|
|
34
|
+
/** A result as text, whatever the tool returned. Never parsed, never rendered as markup. */
|
|
35
|
+
function formatResult(result) {
|
|
36
|
+
if (result === void 0) return void 0;
|
|
37
|
+
if (typeof result === "string") return result;
|
|
38
|
+
return JSON.stringify(result, null, 2) ?? String(result);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* A call has no status of its own until it has an outcome, so until then it
|
|
42
|
+
* borrows the turn's: a call inside a running turn is working, one inside a
|
|
43
|
+
* turn parked on a human is waiting.
|
|
44
|
+
*/
|
|
45
|
+
function toolStatus(part, message) {
|
|
46
|
+
if (part.isError === true) return "failed";
|
|
47
|
+
if (part.result !== void 0) return "done";
|
|
48
|
+
switch (message.status?.type) {
|
|
49
|
+
case "running": return "working";
|
|
50
|
+
case "requires-action": return "idle";
|
|
51
|
+
case "incomplete": return "failed";
|
|
52
|
+
default: return "done";
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/** The turn's tool calls, in the order the model made them. */
|
|
56
|
+
function toolCalls(message) {
|
|
57
|
+
return message.content.flatMap((part) => part.type === "tool-call" ? [{
|
|
58
|
+
id: part.toolCallId,
|
|
59
|
+
tool: part.toolName,
|
|
60
|
+
args: formatArgs(part),
|
|
61
|
+
result: formatResult(part.result),
|
|
62
|
+
status: toolStatus(part, message)
|
|
63
|
+
}] : []);
|
|
64
|
+
}
|
|
65
|
+
/** The runtime's status vocabulary, in this library's words. */
|
|
66
|
+
function turnStatus(message) {
|
|
67
|
+
if (message.role !== "assistant") return "complete";
|
|
68
|
+
switch (message.status.type) {
|
|
69
|
+
case "running": return "streaming";
|
|
70
|
+
case "requires-action": return "requires-action";
|
|
71
|
+
case "incomplete": return message.status.reason === "cancelled" ? "cancelled" : "failed";
|
|
72
|
+
default: return "complete";
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/** Where the turn sits among its regenerated siblings. */
|
|
76
|
+
function branchOf(runtime, id) {
|
|
77
|
+
try {
|
|
78
|
+
const state = runtime.thread.getMessageById(id).getState();
|
|
79
|
+
return {
|
|
80
|
+
index: state.branchNumber,
|
|
81
|
+
count: state.branchCount
|
|
82
|
+
};
|
|
83
|
+
} catch {
|
|
84
|
+
return {
|
|
85
|
+
index: 1,
|
|
86
|
+
count: 1
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/** One runtime message, in the props the Chat group takes. */
|
|
91
|
+
function toTurn(runtime, message, agent) {
|
|
92
|
+
const role = ROLES[message.role];
|
|
93
|
+
const status = turnStatus(message);
|
|
94
|
+
return {
|
|
95
|
+
id: message.id,
|
|
96
|
+
role,
|
|
97
|
+
agent: role !== "agent" ? void 0 : typeof agent === "function" ? agent(message) : agent,
|
|
98
|
+
text: joinText(message.content),
|
|
99
|
+
reasoning: joinReasoning(message.content),
|
|
100
|
+
toolCalls: toolCalls(message),
|
|
101
|
+
status,
|
|
102
|
+
pending: status === "streaming",
|
|
103
|
+
createdAt: message.createdAt,
|
|
104
|
+
branch: branchOf(runtime, message.id),
|
|
105
|
+
message
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* An assistant-ui runtime, read as the props the Chat group already takes.
|
|
110
|
+
*
|
|
111
|
+
* `Message`, `MessageList` and `Composer` render turns that have finished
|
|
112
|
+
* arriving. The hard part of a turn that is *still* arriving — assembling
|
|
113
|
+
* tokens, tracking a run, cancelling one, keeping a regenerated answer beside
|
|
114
|
+
* its sibling — is a solved problem, so this library does not re-derive it. You
|
|
115
|
+
* build a runtime with one line of assistant-ui, typically
|
|
116
|
+
* `useExternalStoreRuntime(adapter)`, and hand the object over; every field
|
|
117
|
+
* that comes back is named for the prop it feeds.
|
|
118
|
+
*
|
|
119
|
+
* It is provider-free by construction: a `useSyncExternalStore` over the
|
|
120
|
+
* runtime's thread, and nothing else. No `AssistantRuntimeProvider`, no
|
|
121
|
+
* primitive, no context and no borrowed DOM — this library renders 100% of what
|
|
122
|
+
* the reader sees, and the peer is only a type in the shipped modules.
|
|
123
|
+
*
|
|
124
|
+
* `MessageList` follows a turn that is still growing on its own: the items
|
|
125
|
+
* container is watched for growth, so a streaming bubble keeps the bottom in
|
|
126
|
+
* view without the host adding anything, while a tool-call card the reader
|
|
127
|
+
* folds away leaves the view where it was.
|
|
128
|
+
*
|
|
129
|
+
* Four things are worth knowing before wiring an `ExternalStoreAdapter` to it:
|
|
130
|
+
*
|
|
131
|
+
* - **Pass `convertMessage`, and keep its identity.** Without it your messages
|
|
132
|
+
* must already be complete runtime messages, and a missing `metadata`
|
|
133
|
+
* throws; `convertMessage: (m) => m` lets the runtime fill the defaults in.
|
|
134
|
+
* Declare it outside the component (or memoise it): the runtime caches the
|
|
135
|
+
* conversion against that function, so a fresh arrow every render re-converts
|
|
136
|
+
* the whole thread, which re-renders, which converts it again — an inline
|
|
137
|
+
* arrow turns the next message change into "Maximum update depth exceeded".
|
|
138
|
+
* - **`onReload` takes two arguments** — `(parentId, config)`. Regenerating a
|
|
139
|
+
* turn re-runs its *parent*, which is what puts the new answer beside the old
|
|
140
|
+
* one rather than after it.
|
|
141
|
+
* - **A branch switch is host-owned.** Under an ExternalStore runtime
|
|
142
|
+
* `switchBranch` does not move the thread: it arrives at the adapter's
|
|
143
|
+
* `setMessages` with the newly visible list, and the host writes it back. A
|
|
144
|
+
* host that ignores `setMessages` gets a picker that does nothing.
|
|
145
|
+
* - **`onStop`, `regenerate` and `switchBranch` are `undefined`** until the
|
|
146
|
+
* matching callback exists on the adapter (`onCancel`, `onReload`,
|
|
147
|
+
* `setMessages`). That is deliberate: `Composer` keeps drawing Send while
|
|
148
|
+
* `onStop` is missing, so a control that cannot work is never drawn.
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* // Outside the component: the runtime caches the conversion against this
|
|
152
|
+
* // function, and a new one every render is an update loop.
|
|
153
|
+
* const convertMessage = (m: ThreadMessageLike) => m;
|
|
154
|
+
*
|
|
155
|
+
* const runtime = useExternalStoreRuntime({
|
|
156
|
+
* messages,
|
|
157
|
+
* isRunning,
|
|
158
|
+
* convertMessage,
|
|
159
|
+
* onNew,
|
|
160
|
+
* onCancel,
|
|
161
|
+
* onReload,
|
|
162
|
+
* setMessages,
|
|
163
|
+
* });
|
|
164
|
+
* const thread = useAgentThread(runtime, { agent: "planner" });
|
|
165
|
+
*
|
|
166
|
+
* <MessageList aria-label="Thread">
|
|
167
|
+
* {thread.turns.map((t) => (
|
|
168
|
+
* <Message
|
|
169
|
+
* key={t.id}
|
|
170
|
+
* role={t.role}
|
|
171
|
+
* agent={t.agent}
|
|
172
|
+
* pending={t.pending}
|
|
173
|
+
* footer={
|
|
174
|
+
* t.branch.count > 1 && thread.switchBranch ? (
|
|
175
|
+
* <BranchPicker
|
|
176
|
+
* index={t.branch.index}
|
|
177
|
+
* count={t.branch.count}
|
|
178
|
+
* onNavigate={(d) => thread.switchBranch?.(t.id, d)}
|
|
179
|
+
* disabled={thread.busy}
|
|
180
|
+
* />
|
|
181
|
+
* ) : undefined
|
|
182
|
+
* }
|
|
183
|
+
* >
|
|
184
|
+
* {t.text}
|
|
185
|
+
* {t.toolCalls.map((c) => (
|
|
186
|
+
* <ToolCallCard key={c.id} tool={c.tool} args={c.args} result={c.result} status={c.status} />
|
|
187
|
+
* ))}
|
|
188
|
+
* </Message>
|
|
189
|
+
* ))}
|
|
190
|
+
* </MessageList>
|
|
191
|
+
* <Composer
|
|
192
|
+
* onSend={thread.onSend}
|
|
193
|
+
* busy={thread.busy}
|
|
194
|
+
* disabled={thread.disabled || thread.busy}
|
|
195
|
+
* onStop={thread.onStop}
|
|
196
|
+
* />
|
|
197
|
+
*/
|
|
198
|
+
function useAgentThread(runtime, options) {
|
|
199
|
+
const agent = options?.agent;
|
|
200
|
+
const agentRef = React.useRef(agent);
|
|
201
|
+
agentRef.current = agent;
|
|
202
|
+
const agentKey = typeof agent === "function" ? "fn" : agent;
|
|
203
|
+
const subscribe = React.useCallback((onStoreChange) => runtime.thread.subscribe(onStoreChange), [runtime]);
|
|
204
|
+
const getState = React.useCallback(() => runtime.thread.getState(), [runtime]);
|
|
205
|
+
const { capabilities, isDisabled, isRunning, messages } = React.useSyncExternalStore(subscribe, getState, getState);
|
|
206
|
+
const turns = React.useMemo(() => messages.map((message) => toTurn(runtime, message, agentRef.current)), [
|
|
207
|
+
messages,
|
|
208
|
+
runtime,
|
|
209
|
+
agentKey
|
|
210
|
+
]);
|
|
211
|
+
const onSend = React.useCallback((text) => {
|
|
212
|
+
runtime.thread.append({
|
|
213
|
+
role: "user",
|
|
214
|
+
content: [{
|
|
215
|
+
type: "text",
|
|
216
|
+
text
|
|
217
|
+
}]
|
|
218
|
+
});
|
|
219
|
+
}, [runtime]);
|
|
220
|
+
const cancel = React.useCallback(() => {
|
|
221
|
+
runtime.thread.cancelRun();
|
|
222
|
+
}, [runtime]);
|
|
223
|
+
const reload = React.useCallback((turnId) => {
|
|
224
|
+
runtime.thread.getMessageById(turnId).reload();
|
|
225
|
+
}, [runtime]);
|
|
226
|
+
const switchTo = React.useCallback((turnId, direction) => {
|
|
227
|
+
runtime.thread.getMessageById(turnId).switchToBranch({ position: direction });
|
|
228
|
+
}, [runtime]);
|
|
229
|
+
return React.useMemo(() => ({
|
|
230
|
+
turns,
|
|
231
|
+
busy: isRunning,
|
|
232
|
+
disabled: isDisabled,
|
|
233
|
+
onSend,
|
|
234
|
+
onStop: capabilities.cancel ? cancel : void 0,
|
|
235
|
+
regenerate: capabilities.reload ? reload : void 0,
|
|
236
|
+
switchBranch: capabilities.switchToBranch ? switchTo : void 0,
|
|
237
|
+
runtime
|
|
238
|
+
}), [
|
|
239
|
+
turns,
|
|
240
|
+
isRunning,
|
|
241
|
+
isDisabled,
|
|
242
|
+
capabilities,
|
|
243
|
+
onSend,
|
|
244
|
+
cancel,
|
|
245
|
+
reload,
|
|
246
|
+
switchTo,
|
|
247
|
+
runtime
|
|
248
|
+
]);
|
|
249
|
+
}
|
|
250
|
+
//#endregion
|
|
251
|
+
export { useAgentThread };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
//#region src/brand/_chassis.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* What every brand asset in this group shares: how big it is drawn, where its
|
|
5
|
+
* ink comes from, and how it is named to a screen reader.
|
|
6
|
+
*
|
|
7
|
+
* Three assets, one contract, because a header that puts the mark next to the
|
|
8
|
+
* logotype has to be able to say `size="sm"` twice and get two things the same
|
|
9
|
+
* height.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Rung of the density control ladder a brand asset is drawn at.
|
|
13
|
+
*
|
|
14
|
+
* The same three rungs `Button`, `Avatar` and every form control use, and for
|
|
15
|
+
* the same reason: a mark in a toolbar is furniture on that toolbar's row, so
|
|
16
|
+
* it has to move when the density does. `size` picks the rung; the density
|
|
17
|
+
* decides what the rung measures.
|
|
18
|
+
*/
|
|
19
|
+
type BrandSize = "sm" | "md" | "lg";
|
|
20
|
+
/**
|
|
21
|
+
* Where a brand asset takes its ink from.
|
|
22
|
+
*
|
|
23
|
+
* Not a light/dark pair. The source artwork ships two files that hard-code
|
|
24
|
+
* `white`, `black` and `#1E1E1E`; this library ships one component that reads
|
|
25
|
+
* the token layer, so a single element is correct in all ten presets and both
|
|
26
|
+
* modes without anybody choosing a file.
|
|
27
|
+
*/
|
|
28
|
+
type BrandTone = "inherit" | "fg" | "accent";
|
|
29
|
+
/** The props every asset in this group takes. */
|
|
30
|
+
interface BrandAssetProps extends Omit<React.ComponentPropsWithoutRef<"svg">, "children" | "width" | "height" | "title"> {
|
|
31
|
+
/**
|
|
32
|
+
* Rung of the density control ladder to draw at, or an explicit height in px.
|
|
33
|
+
* Defaults to `"md"`.
|
|
34
|
+
*
|
|
35
|
+
* Height, always — every asset here keeps its own aspect ratio, so the width
|
|
36
|
+
* follows from the artwork rather than from the caller.
|
|
37
|
+
*/
|
|
38
|
+
size?: BrandSize | number;
|
|
39
|
+
/**
|
|
40
|
+
* Where the ink comes from: `currentColor`, the foreground token, or the
|
|
41
|
+
* accent. Defaults to `"inherit"`.
|
|
42
|
+
*/
|
|
43
|
+
tone?: BrandTone;
|
|
44
|
+
/**
|
|
45
|
+
* The accessible name.
|
|
46
|
+
*
|
|
47
|
+
* Omit it and the asset is decorative — `aria-hidden`, announced by nothing.
|
|
48
|
+
* Pass one only when the mark is the *only* thing naming what it sits on: a
|
|
49
|
+
* bare logo link, a splash screen with no heading.
|
|
50
|
+
*/
|
|
51
|
+
title?: string;
|
|
52
|
+
}
|
|
53
|
+
//#endregion
|
|
54
|
+
export { BrandAssetProps, BrandSize, BrandTone };
|