@kitn.ai/ui 0.20.1 → 0.22.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/README.md +44 -45
- package/dist/components/artifact-card.d.ts +51 -0
- package/dist/components/artifact.d.ts +1 -1
- package/dist/components/attachments.d.ts +2 -2
- package/dist/components/audio-visualizer/index.d.ts +3 -3
- package/dist/components/audio-visualizer/labs/lab-choreography.d.ts +59 -0
- package/dist/components/audio-visualizer/labs/lab-shaders.d.ts +22 -0
- package/dist/components/audio-visualizer/labs/lab-visualizer.d.ts +18 -0
- package/dist/components/audio-visualizer/variant-aurora.d.ts +2 -2
- package/dist/components/audio-visualizer/variant-bar.d.ts +2 -2
- package/dist/components/audio-visualizer/variant-custom.d.ts +2 -2
- package/dist/components/audio-visualizer/variant-grid.d.ts +1 -1
- package/dist/components/audio-visualizer/variant-radial.d.ts +1 -1
- package/dist/components/audio-visualizer/variant-wave.d.ts +1 -1
- package/dist/components/card-fallback.d.ts +12 -2
- package/dist/components/card-renderer.d.ts +63 -2
- package/dist/components/chat-container.d.ts +3 -0
- package/dist/components/chat-scope-picker.d.ts +2 -2
- package/dist/components/chat-thread.d.ts +77 -18
- package/dist/components/choice-card.d.ts +3 -28
- package/dist/components/composer-dom.d.ts +1 -1
- package/dist/components/composer-highlight.d.ts +1 -1
- package/dist/components/composer-history.d.ts +1 -1
- package/dist/components/composer.d.ts +1 -1
- package/dist/components/confirm-card.d.ts +3 -18
- package/dist/components/context.d.ts +8 -4
- package/dist/components/conversation-item.d.ts +1 -1
- package/dist/components/conversation-list.d.ts +4 -3
- package/dist/components/embed.d.ts +3 -3
- package/dist/components/file-tree.d.ts +11 -22
- package/dist/components/form-widgets.d.ts +1 -1
- package/dist/components/form.d.ts +3 -44
- package/dist/components/link-preview.d.ts +3 -3
- package/dist/components/loader.d.ts +30 -48
- package/dist/components/message-skills.d.ts +4 -0
- package/dist/components/message.d.ts +84 -21
- package/dist/components/model-switcher.d.ts +2 -2
- package/dist/components/prompt-input.d.ts +2 -2
- package/dist/components/response-compare-types.d.ts +11 -2
- package/dist/components/response-compare.d.ts +3 -3
- package/dist/components/source.d.ts +12 -3
- package/dist/components/tasks-card.d.ts +3 -31
- package/dist/components/thread.d.ts +17 -5
- package/dist/components/toast.d.ts +2 -2
- package/dist/components/tool-classify.d.ts +8 -0
- package/dist/components/tool-types.d.ts +29 -1
- package/dist/components/tool.d.ts +3 -3
- package/dist/components/use-card-resolution.d.ts +1 -1
- package/dist/create-tween-COnPwAQN.js +338 -0
- package/dist/create-tween-DmTUaXWE.js +341 -0
- package/dist/create-tween-qs-jjvNA.js +7 -0
- package/dist/custom-elements.json +1726 -463
- package/dist/elements/agent-card.js +1 -1
- package/dist/elements/artifact.js +1 -1
- package/dist/elements/attachments.js +1 -1
- package/dist/elements/audio-visualizer.js +1 -1
- package/dist/elements/avatar.js +1 -1
- package/dist/elements/badge.js +1 -1
- package/dist/elements/button.js +1 -1
- package/dist/elements/card.js +1 -1
- package/dist/elements/cards.js +1 -1
- package/dist/elements/chain-of-thought.js +1 -1
- package/dist/elements/chat-scope-picker.js +1 -1
- package/dist/elements/chat-types.d.ts +70 -10
- package/dist/elements/chat-workspace.js +1 -1
- package/dist/elements/chat.js +1 -1
- package/dist/elements/checkpoint.js +1 -1
- package/dist/elements/choice.js +1 -1
- package/dist/elements/chunks/{Icon-Tj58ES_d.js → Icon-CHG5z5L7.js} +1 -1
- package/dist/elements/chunks/{action-icons-ns1Fnedj.js → action-icons-BAtCEEgg.js} +1 -1
- package/dist/elements/chunks/arrow-left-CFPTeL1Y.js +1 -0
- package/dist/elements/chunks/artifact-fBZOE4SO.js +1 -0
- package/dist/elements/chunks/{attachments-mCB5F1Fq.js → attachments-DpYMe5VQ.js} +1 -1
- package/dist/elements/chunks/audio-visualizer-DFwzAcuL.js +1 -0
- package/dist/elements/chunks/{badge-B4Zuajl2.js → badge-D6zodm6E.js} +1 -1
- package/dist/elements/chunks/{button-ZWNif3--.js → button-C42vrGvO.js} +1 -1
- package/dist/elements/chunks/card-renderer-DMZsSuvU.js +1 -0
- package/dist/elements/chunks/card-tags-D8lZ-C_U.js +1 -0
- package/dist/elements/chunks/chat-thread-CNNEhol-.js +1 -0
- package/dist/elements/chunks/check-7Q3K-iXE.js +1 -0
- package/dist/elements/chunks/chevron-down-CpNYLn7E.js +1 -0
- package/dist/elements/chunks/chevron-right-DrH85Fha.js +1 -0
- package/dist/elements/chunks/choice-card-YoWjpsFV.js +1 -0
- package/dist/elements/chunks/circle-C9KRjKYv.js +1 -0
- package/dist/elements/chunks/circle-check-Dmi7Y4zw.js +1 -0
- package/dist/elements/chunks/{circle-x-B7faJFlY.js → circle-x-QIxXda6k.js} +1 -1
- package/dist/elements/chunks/code-block-CqeugReY.js +1 -0
- package/dist/elements/chunks/{collapsible-DM1Ckd4e.js → collapsible-sTv-_5lF.js} +1 -1
- package/dist/elements/chunks/{composer-BguS0QL_.js → composer-ldQyeVEB.js} +2 -2
- package/dist/elements/chunks/confirm-card-C0RNOwfn.js +1 -0
- package/dist/elements/chunks/context-5qgypNHC.js +1 -0
- package/dist/elements/chunks/conversation-list-DLzOacXz.js +1 -0
- package/dist/elements/chunks/create-tween-V4TXZ93X.js +7 -0
- package/dist/elements/chunks/default-input-DeeRSDHc.js +1 -0
- package/dist/elements/chunks/define-lE-QvQFn.js +1 -0
- package/dist/elements/chunks/{disclosure-CIZ5c8nO.js → disclosure-DZSa9jog.js} +1 -1
- package/dist/elements/chunks/{download-Dsbg3ste.js → download-B2ZmnGqW.js} +1 -1
- package/dist/elements/chunks/{dropdown-BDd1-Zgi.js → dropdown-R3B7cSRE.js} +1 -1
- package/dist/elements/chunks/{ellipsis-Dw6qrss-.js → ellipsis-BmxceY4l.js} +1 -1
- package/dist/elements/chunks/embed-BVrtTZPo.js +1 -0
- package/dist/elements/chunks/{external-link-Vt74zAoL.js → external-link-BbdR7YO7.js} +1 -1
- package/dist/elements/chunks/{file-text-CZrZF6_v.js → file-text-D7dijo1A.js} +1 -1
- package/dist/elements/chunks/{file-tree-DF4okKyo.js → file-tree-0upJ5jeb.js} +1 -1
- package/dist/elements/chunks/{folder-glP5rha4.js → folder-D8z58t7B.js} +1 -1
- package/dist/elements/chunks/form-p5BKJNw5.js +1 -0
- package/dist/elements/chunks/hover-card-CN9s2md5.js +1 -0
- package/dist/elements/chunks/{icon-BLb8beoi.js → icon-CNiKP37E.js} +1 -1
- package/dist/elements/chunks/{info-CIsv92JK.js → info-BSnuJiHI.js} +1 -1
- package/dist/elements/chunks/{input-Dds1kFyt.js → input-BauDmzxX.js} +1 -1
- package/dist/elements/chunks/{kbd-De_xbgi9.js → kbd-BlHJaP9b.js} +1 -1
- package/dist/elements/chunks/{link-i4r_k7z4.js → link-DEi5iUWC.js} +1 -1
- package/dist/elements/chunks/link-preview-BaHyM6W4.js +1 -0
- package/dist/elements/chunks/{loader-BmQH4s3V.js → loader-CmJG_Fkq.js} +1 -1
- package/dist/elements/chunks/{markdown-Zi21WhUz.js → markdown-D2jaMpCN.js} +1 -1
- package/dist/elements/chunks/message-C5UfXZ2Z.js +1 -0
- package/dist/elements/chunks/message-CXWLmmLn.js +1 -0
- package/dist/elements/chunks/message-square-hXylwsy0.js +1 -0
- package/dist/elements/chunks/{minimize-2--ifeCGrl.js → minimize-2-C9ytZFMU.js} +1 -1
- package/dist/elements/chunks/model-switcher-CivGfD7-.js +1 -0
- package/dist/elements/chunks/{overlay-kD8dwRv_.js → overlay-DJL_sbOm.js} +1 -1
- package/dist/elements/chunks/{paperclip-q21dYOSK.js → paperclip-CFaB8naM.js} +1 -1
- package/dist/elements/chunks/{progress-bar-BrAIIaaJ.js → progress-bar-Br5SksfR.js} +1 -1
- package/dist/elements/chunks/{prompt-suggestion-Bjn2K-fR.js → prompt-suggestion-CMIvtAhU.js} +1 -1
- package/dist/elements/chunks/reasoning-DpZcNzLq.js +1 -0
- package/dist/elements/chunks/{resizable-Dp4JExql.js → resizable-Q8i3T9a_.js} +1 -1
- package/dist/elements/chunks/{rotate-cw-CFWWkpj2.js → rotate-cw-B5IHCBFV.js} +1 -1
- package/dist/elements/chunks/{scroll-area-Bb0kHH1j.js → scroll-area-eLeydBje.js} +1 -1
- package/dist/elements/chunks/scroll-button-DWbz0yA1.js +1 -0
- package/dist/elements/chunks/{separator-9kRgr1X9.js → separator-Xic78AD_.js} +1 -1
- package/dist/elements/chunks/{settings-B8lmec4D.js → settings-B8H51pAx.js} +1 -1
- package/dist/elements/chunks/{settings-group-I0hEuXiN.js → settings-group-CsG9eYLe.js} +1 -1
- package/dist/elements/chunks/{share-C3lTiYGt.js → share-CNTx0z__.js} +1 -1
- package/dist/elements/chunks/skeleton-CLlHTcMI.js +1 -0
- package/dist/elements/chunks/slots-CIw9RlAe.js +1 -0
- package/dist/elements/chunks/source-BoVcU5ok.js +1 -0
- package/dist/elements/chunks/{star-CSJtGxgv.js → star-CxQVTVhI.js} +1 -1
- package/dist/elements/chunks/{store-CHyW95TP.js → store-CLtS5CUG.js} +1 -1
- package/dist/elements/chunks/tasks-card-CzlkLmUt.js +1 -0
- package/dist/elements/chunks/{text-shimmer-Cn9TmNpI.js → text-shimmer-D5NhpIQ1.js} +1 -1
- package/dist/elements/chunks/textarea-x5Uxsmtm.js +1 -0
- package/dist/elements/chunks/{thumbs-up-PNVVThEF.js → thumbs-up-UobcJnx9.js} +1 -1
- package/dist/elements/chunks/{toast-store-DKbQn3Wn.js → toast-store-BOfs9eXq.js} +1 -1
- package/dist/elements/chunks/{tool-DjTRpIpl.js → tool-Be6Dh_dt.js} +1 -1
- package/dist/elements/chunks/tooltip-RxMxyCLF.js +1 -0
- package/dist/elements/chunks/{triangle-alert-DsHTHCPm.js → triangle-alert-C4yxH2XN.js} +1 -1
- package/dist/elements/chunks/use-card-resolution-jva9ehH6.js +1 -0
- package/dist/elements/chunks/{variant-aurora-Dc4nQUia.js → variant-aurora-Dx4VRcjS.js} +2 -2
- package/dist/elements/chunks/{variant-custom-y_3kVQhS.js → variant-custom-Y1ZTWgEa.js} +1 -1
- package/dist/elements/chunks/{variant-wave-D5OR1-9Z.js → variant-wave-B9gml9Cg.js} +2 -2
- package/dist/elements/chunks/{video-B7vmenoC.js → video-CrPHsytT.js} +1 -1
- package/dist/elements/chunks/x-_-OPHept.js +1 -0
- package/dist/elements/coachmark.js +1 -1
- package/dist/elements/code-block.js +1 -1
- package/dist/elements/command.js +1 -1
- package/dist/elements/compare.js +1 -1
- package/dist/elements/composer.js +1 -1
- package/dist/elements/confirm-card.js +1 -1
- package/dist/elements/context-meter.js +1 -1
- package/dist/elements/conversation-list.js +1 -1
- package/dist/elements/default-input.d.ts +34 -7
- package/dist/elements/define.d.ts +1 -0
- package/dist/elements/dialog.js +1 -1
- package/dist/elements/disclosure.d.ts +1 -1
- package/dist/elements/editable-label.js +1 -1
- package/dist/elements/element-data-types.d.ts +107 -0
- package/dist/elements/embed.js +1 -1
- package/dist/elements/empty.js +1 -1
- package/dist/elements/feedback-bar.js +1 -1
- package/dist/elements/file-tree.js +1 -1
- package/dist/elements/file-upload.js +1 -1
- package/dist/elements/form.js +1 -1
- package/dist/elements/hover-card.js +1 -1
- package/dist/elements/icon.js +1 -1
- package/dist/elements/image.js +1 -1
- package/dist/elements/input.js +1 -1
- package/dist/elements/kbd.js +1 -1
- package/dist/elements/link-preview.js +1 -1
- package/dist/elements/loader.js +1 -1
- package/dist/elements/markdown.js +1 -1
- package/dist/elements/menu.js +1 -1
- package/dist/elements/message-skills.js +1 -1
- package/dist/elements/message.js +1 -1
- package/dist/elements/model-switcher.js +1 -1
- package/dist/elements/nav.js +1 -1
- package/dist/elements/notice.js +1 -1
- package/dist/elements/pane-group.js +1 -1
- package/dist/elements/pane.js +1 -1
- package/dist/elements/popover.js +1 -1
- package/dist/elements/progress-bar.js +1 -1
- package/dist/elements/prompt-dock.js +1 -1
- package/dist/elements/prompt-input.js +1 -1
- package/dist/elements/prompt-suggestions.js +1 -1
- package/dist/elements/reasoning.js +1 -1
- package/dist/elements/register.d.ts +8 -6
- package/dist/elements/remote.js +1 -1
- package/dist/elements/resizable.js +1 -1
- package/dist/elements/response-stream.js +1 -1
- package/dist/elements/screen.js +1 -1
- package/dist/elements/scroll-area.js +1 -1
- package/dist/elements/scroll-button.js +1 -1
- package/dist/elements/search.js +1 -1
- package/dist/elements/segmented.js +1 -1
- package/dist/elements/separator.js +1 -1
- package/dist/elements/setting-item.js +1 -1
- package/dist/elements/settings-group.js +1 -1
- package/dist/elements/skeleton.js +1 -1
- package/dist/elements/slot-text.d.ts +51 -0
- package/dist/elements/slots.d.ts +21 -0
- package/dist/elements/source.js +1 -1
- package/dist/elements/status.js +1 -1
- package/dist/elements/switch.js +1 -1
- package/dist/elements/tabs.js +1 -1
- package/dist/elements/tasks.js +1 -1
- package/dist/elements/text-shimmer.js +1 -1
- package/dist/elements/thinking-bar.js +1 -1
- package/dist/elements/thread.js +1 -1
- package/dist/elements/toast.js +1 -1
- package/dist/elements/tool.js +1 -1
- package/dist/elements/tooltip.js +1 -1
- package/dist/elements/validate-messages.d.ts +25 -0
- package/dist/elements/voice-input.js +1 -1
- package/dist/elements/voice-output.js +1 -1
- package/dist/elements.d.ts +2734 -217
- package/dist/index.d.ts +163 -125
- package/dist/index.js +6572 -5990
- package/dist/index.server.d.ts +5 -0
- package/dist/index.server.js +5403 -4860
- package/dist/kai-provider.es.d.ts +5 -0
- package/dist/kai-provider.es.js +79 -77
- package/dist/kai.es.d.ts +5 -0
- package/dist/kai.es.js +1 -1
- package/dist/llms/llms-full.txt +774 -151
- package/dist/llms/llms.txt +57 -5
- package/dist/mcp.es.js +4756 -782
- package/dist/primitives/card-component-types.d.ts +11 -0
- package/dist/primitives/card-data-types.d.ts +196 -0
- package/dist/primitives/card-host.d.ts +1 -1
- package/dist/primitives/card-recovery.d.ts +3 -3
- package/dist/primitives/card-registry.d.ts +4 -14
- package/dist/primitives/card-resolution.d.ts +1 -1
- package/dist/primitives/card-routing.d.ts +1 -1
- package/dist/primitives/card-tags.d.ts +11 -0
- package/dist/primitives/card-validate-cards.d.ts +57 -0
- package/dist/primitives/card-validate-generator.testlib.d.ts +20 -0
- package/dist/primitives/card-validate-schemas.d.ts +17 -0
- package/dist/primitives/card-validate.d.ts +24 -0
- package/dist/primitives/create-kai-chat.d.ts +3 -3
- package/dist/primitives/embed-providers.d.ts +1 -1
- package/dist/primitives/link-preview.d.ts +1 -1
- package/dist/primitives/message-feedback.d.ts +2 -2
- package/dist/primitives/toast-store.d.ts +1 -1
- package/dist/react/index.d.ts +730 -302
- package/dist/react/use-kai-chat.d.ts +8 -4
- package/dist/react.d.ts +5 -0
- package/dist/react.js +418 -317
- package/dist/register-impl-AxIlqjo7.js +145 -0
- package/dist/remote/host-embed.d.ts +1 -1
- package/dist/remote/index.d.ts +2 -2
- package/dist/remote/provider-runtime.d.ts +2 -2
- package/dist/remote/provider.d.ts +2 -2
- package/dist/remote/validate.d.ts +1 -1
- package/dist/remote/wire.d.ts +1 -1
- package/dist/schemas/artifact.schema.json +92 -0
- package/dist/schemas/embed.schema.json +0 -2
- package/dist/schemas/from-tool-call.d.ts +48 -0
- package/dist/schemas/index.d.ts +48 -0
- package/dist/schemas/link.schema.json +0 -2
- package/dist/schemas/provider-subsets.d.ts +136 -0
- package/dist/schemas/registry.d.ts +140 -0
- package/dist/schemas/tool-defs.d.ts +121 -0
- package/dist/schemas.d.ts +5 -0
- package/dist/schemas.js +717 -0
- package/dist/solid-BGYSJyHG.js +22960 -0
- package/dist/solid-Dt2nEwfl.js +20194 -0
- package/dist/solid.d.ts +66 -0
- package/dist/solid.js +261 -0
- package/dist/solid.server.d.ts +5 -0
- package/dist/solid.server.js +261 -0
- package/dist/state/index.d.ts +14 -4
- package/dist/state/messages.d.ts +8 -3
- package/dist/state/mock.d.ts +46 -0
- package/dist/state/parts.d.ts +85 -0
- package/dist/state/stream.d.ts +15 -9
- package/dist/state.d.ts +5 -0
- package/dist/state.js +253 -84
- package/dist/ui/action-icons.d.ts +1 -1
- package/dist/ui/collapsible.d.ts +11 -6
- package/dist/ui/dropdown.d.ts +47 -42
- package/dist/ui/pane-group.d.ts +1 -1
- package/dist/{variant-aurora-DVtGqVH6.js → variant-aurora-B44X69AG.js} +1 -1
- package/dist/variant-aurora-BRhV8Flk.js +391 -0
- package/dist/variant-aurora-Ds5ou9BH.js +381 -0
- package/dist/variant-custom-B20FhtYj.js +170 -0
- package/dist/{variant-custom-Dif-IV4u.js → variant-custom-BvA1Schl.js} +1 -1
- package/dist/variant-custom-D6Rtvneb.js +200 -0
- package/dist/{variant-wave-DbfNdvSi.js → variant-wave-BUQtkryq.js} +1 -1
- package/dist/variant-wave-BVYnqy9L.js +218 -0
- package/dist/variant-wave-DXC6_LcH.js +208 -0
- package/dist/wire/chunk.d.ts +171 -0
- package/dist/wire/consume.d.ts +26 -0
- package/dist/wire/encode.d.ts +221 -0
- package/dist/wire/files.d.ts +116 -0
- package/dist/wire/formats/anthropic.d.ts +2 -0
- package/dist/wire/formats/openai.d.ts +5 -0
- package/dist/wire/index.d.ts +16 -0
- package/dist/wire/media-types.d.ts +106 -0
- package/dist/wire/read.d.ts +26 -0
- package/dist/wire/sink-helpers.d.ts +21 -0
- package/dist/wire/sse.d.ts +33 -0
- package/dist/wire.d.ts +5 -53
- package/dist/wire.js +1126 -0
- package/frameworks/react/index.tsx +191 -158
- package/frameworks/react/runtime.tsx +21 -1
- package/frameworks/react/use-kai-chat.tsx +11 -1
- package/llms-full.txt +774 -151
- package/llms.txt +57 -5
- package/package.json +62 -8
- package/src/agent-tooling/archetypes.ts +127 -0
- package/src/agent-tooling/integrations/anthropic.ts +436 -0
- package/src/agent-tooling/integrations/cloudflare.ts +141 -52
- package/src/agent-tooling/integrations/langgraph.ts +80 -13
- package/src/agent-tooling/integrations/mastra.ts +161 -12
- package/src/agent-tooling/integrations/mock.ts +47 -8
- package/src/agent-tooling/integrations/ollama.ts +68 -24
- package/src/agent-tooling/integrations/openai.ts +89 -0
- package/src/agent-tooling/integrations/openrouter.ts +58 -8
- package/src/agent-tooling/integrations/pi.ts +104 -23
- package/src/agent-tooling/integrations/pydantic-ai.ts +61 -5
- package/src/agent-tooling/integrations/vercel-ai-sdk.ts +120 -13
- package/src/agent-tooling/mcp/manifest.ts +206 -25
- package/src/agent-tooling/mcp/tools/debug.ts +13 -7
- package/src/agent-tooling/mcp/tools/reference.ts +285 -6
- package/src/agent-tooling/mcp/tools/scaffold.ts +4152 -661
- package/src/agent-tooling/registry.ts +74 -0
- package/src/agent-tooling/types.ts +361 -1
- package/src/components/artifact-card.tsx +120 -0
- package/src/components/audio-visualizer/index.tsx +9 -0
- package/src/components/audio-visualizer/labs/lab-choreography.ts +187 -0
- package/src/components/audio-visualizer/labs/lab-shaders.ts +363 -0
- package/src/components/audio-visualizer/labs/lab-visualizer.tsx +102 -0
- package/src/components/audio-visualizer/shader-canvas.tsx +31 -1
- package/src/components/card-fallback.tsx +42 -10
- package/src/components/card-renderer.tsx +146 -9
- package/src/components/chat-container.tsx +4 -0
- package/src/components/chat-thread.tsx +128 -52
- package/src/components/choice-card.tsx +17 -29
- package/src/components/composer.tsx +12 -2
- package/src/components/confirm-card.tsx +24 -20
- package/src/components/context.tsx +30 -16
- package/src/components/conversation-item.tsx +6 -0
- package/src/components/conversation-list.tsx +18 -2
- package/src/components/file-tree.tsx +11 -22
- package/src/components/file-upload.tsx +14 -8
- package/src/components/form.tsx +14 -47
- package/src/components/loader.tsx +39 -12
- package/src/components/message-skills.tsx +4 -0
- package/src/components/message.tsx +294 -46
- package/src/components/model-switcher.tsx +38 -8
- package/src/components/reasoning.tsx +92 -5
- package/src/components/response-compare-types.ts +25 -0
- package/src/components/response-compare.tsx +4 -9
- package/src/components/source.tsx +50 -24
- package/src/components/tasks-card.tsx +10 -33
- package/src/components/thread.tsx +84 -42
- package/src/components/toast.tsx +17 -6
- package/src/components/tool-classify.ts +26 -0
- package/src/components/tool-types.ts +31 -1
- package/src/elements/agent-card.tsx +11 -11
- package/src/elements/artifact.tsx +15 -7
- package/src/elements/attachments.tsx +6 -4
- package/src/elements/avatar.tsx +1 -1
- package/src/elements/button.tsx +29 -6
- package/src/elements/card.tsx +2 -2
- package/src/elements/cards.tsx +109 -14
- package/src/elements/chain-of-thought.tsx +14 -10
- package/src/elements/chat-scope-picker.tsx +9 -7
- package/src/elements/chat-types.ts +59 -6
- package/src/elements/chat-workspace.tsx +50 -9
- package/src/elements/chat.tsx +90 -3
- package/src/elements/choice.tsx +8 -8
- package/src/elements/coachmark.tsx +1 -1
- package/src/elements/command.tsx +8 -23
- package/src/elements/compare.tsx +7 -6
- package/src/elements/compiled.css +1 -1
- package/src/elements/composer.tsx +8 -8
- package/src/elements/confirm-card.tsx +9 -9
- package/src/elements/context-meter.tsx +4 -18
- package/src/elements/conversation-list.tsx +14 -9
- package/src/elements/default-input.tsx +131 -8
- package/src/elements/define.tsx +178 -43
- package/src/elements/editable-label.tsx +17 -2
- package/src/elements/element-data-types.ts +112 -0
- package/src/elements/element-meta.json +1624 -306
- package/src/elements/element-types.d.ts +2645 -214
- package/src/elements/feedback-bar.tsx +1 -1
- package/src/elements/file-tree.tsx +1 -1
- package/src/elements/file-upload.tsx +1 -1
- package/src/elements/form.tsx +14 -6
- package/src/elements/input.tsx +1 -1
- package/src/elements/kbd.tsx +1 -1
- package/src/elements/menu.tsx +40 -32
- package/src/elements/message-skills.tsx +7 -9
- package/src/elements/message.tsx +200 -32
- package/src/elements/model-switcher.tsx +5 -3
- package/src/elements/pane.tsx +1 -1
- package/src/elements/prompt-dock.tsx +8 -8
- package/src/elements/prompt-input.tsx +10 -10
- package/src/elements/prompt-suggestions.tsx +7 -4
- package/src/elements/reasoning.tsx +1 -1
- package/src/elements/register.ts +9 -0
- package/src/elements/resizable.globals.d.ts +36 -0
- package/src/elements/resizable.tsx +24 -13
- package/src/elements/response-stream.tsx +1 -1
- package/src/elements/scroll-button.tsx +1 -1
- package/src/elements/search.tsx +6 -1
- package/src/elements/segmented.tsx +5 -11
- package/src/elements/separator.tsx +1 -1
- package/src/elements/slot-text.ts +73 -0
- package/src/elements/slots.ts +67 -24
- package/src/elements/source.tsx +21 -22
- package/src/elements/switch.tsx +3 -3
- package/src/elements/tasks.tsx +5 -4
- package/src/elements/thread.tsx +36 -4
- package/src/elements/toast.tsx +3 -2
- package/src/elements/tool.tsx +1 -1
- package/src/elements/validate-messages.ts +76 -0
- package/src/elements/voice-input.tsx +7 -7
- package/src/elements/voice-output.tsx +4 -4
- package/src/index.ts +145 -6
- package/src/primitives/card-component-types.ts +63 -0
- package/src/primitives/card-data-types.ts +312 -0
- package/src/primitives/card-recovery.ts +13 -2
- package/src/primitives/card-registry.tsx +34 -23
- package/src/primitives/card-schemas/artifact.schema.json +92 -0
- package/src/primitives/card-schemas/embed.schema.json +0 -2
- package/src/primitives/card-schemas/link.schema.json +0 -2
- package/src/primitives/card-tags.ts +61 -0
- package/src/primitives/card-validate-cards.ts +255 -0
- package/src/primitives/card-validate-generator.testlib.ts +38 -0
- package/src/primitives/card-validate-schemas.ts +58 -0
- package/src/primitives/card-validate.ts +48 -20
- package/src/primitives/create-tween.ts +54 -2
- package/src/primitives/message-feedback.ts +3 -2
- package/src/primitives/use-audio-analysis.ts +20 -1
- package/src/primitives/use-sequencer.ts +20 -1
- package/src/schemas/from-tool-call.ts +151 -0
- package/src/schemas/index.ts +340 -0
- package/src/schemas/provider-subsets.ts +538 -0
- package/src/schemas/registry.ts +355 -0
- package/src/schemas/tool-defs.ts +492 -0
- package/src/solid.ts +150 -0
- package/src/state/index.ts +27 -1
- package/src/state/messages.ts +21 -4
- package/src/state/mock.ts +211 -0
- package/src/state/parts.ts +295 -0
- package/src/state/stream.ts +56 -58
- package/src/ui/collapsible.tsx +17 -5
- package/src/ui/dropdown.tsx +46 -12
- package/src/ui/overlay.tsx +10 -4
- package/src/wire/chunk.ts +201 -0
- package/src/wire/consume.ts +440 -0
- package/src/wire/encode.ts +689 -0
- package/src/wire/files.ts +342 -0
- package/src/wire/formats/anthropic.ts +267 -0
- package/src/wire/formats/openai.ts +187 -0
- package/src/wire/index.ts +73 -0
- package/src/wire/media-types.ts +344 -0
- package/src/wire/read.ts +152 -0
- package/src/wire/sink-helpers.ts +50 -0
- package/src/wire/sse.ts +140 -0
- package/dist/create-tween-hvpmSuwW.js +0 -7
- package/dist/elements/chunks/arrow-left-DQocUFvy.js +0 -1
- package/dist/elements/chunks/audio-visualizer-BqNy7dfm.js +0 -1
- package/dist/elements/chunks/card-BkHbp4BA.js +0 -1
- package/dist/elements/chunks/chat-thread-CkRN6pZ7.js +0 -1
- package/dist/elements/chunks/check-B9-gn6SS.js +0 -1
- package/dist/elements/chunks/chevron-down-BNsxc2hk.js +0 -1
- package/dist/elements/chunks/chevron-right-Hv00StBO.js +0 -1
- package/dist/elements/chunks/circle-0e3KJTDr.js +0 -1
- package/dist/elements/chunks/circle-check-BNAS0JEy.js +0 -1
- package/dist/elements/chunks/code-block-BFUHn6Va.js +0 -1
- package/dist/elements/chunks/context-Cb7k4F-v.js +0 -1
- package/dist/elements/chunks/conversation-list-CvoAkWhN.js +0 -1
- package/dist/elements/chunks/create-tween-oVvAIG8r.js +0 -7
- package/dist/elements/chunks/default-input-Cqqilg9t.js +0 -1
- package/dist/elements/chunks/define-D1din7Ld.js +0 -1
- package/dist/elements/chunks/hover-card-Cmm6Q53m.js +0 -1
- package/dist/elements/chunks/message-BqyXDN3-.js +0 -1
- package/dist/elements/chunks/message-feedback-Djr3z6Yb.js +0 -1
- package/dist/elements/chunks/message-square-vFAgbDaX.js +0 -1
- package/dist/elements/chunks/model-switcher-B94YAKsM.js +0 -1
- package/dist/elements/chunks/reasoning-DTpCGtnY.js +0 -1
- package/dist/elements/chunks/scroll-button-B0cH5fXf.js +0 -1
- package/dist/elements/chunks/skeleton-DSXW5Yya.js +0 -1
- package/dist/elements/chunks/slots--V19HwUb.js +0 -1
- package/dist/elements/chunks/textarea-CUwqAX0G.js +0 -1
- package/dist/elements/chunks/tooltip-CgBZCVKp.js +0 -1
- package/dist/elements/chunks/use-card-resolution-BSu_XHjH.js +0 -1
- package/dist/elements/chunks/x-GRUeeQFT.js +0 -1
- package/dist/host-embed.d.ts +0 -33
- package/dist/kai-provider.d.ts +0 -2
- package/dist/origin.d.ts +0 -5
- package/dist/provider-runtime.d.ts +0 -27
- package/dist/register-impl-DQyejdfb.js +0 -145
- package/dist/validate.d.ts +0 -4
- package/dist/version.d.ts +0 -4
- package/src/components/component-meta.json +0 -4550
- package/src/elements/card-media.jpg +0 -0
- package/src/elements/resizable.d.ts +0 -27
- package/src/elements/video-poster.jpg +0 -0
package/llms.txt
CHANGED
|
@@ -17,7 +17,7 @@ This is the single most common mistake. Arrays and objects (`messages`, `models`
|
|
|
17
17
|
|
|
18
18
|
```js
|
|
19
19
|
const chat = document.querySelector('kai-chat');
|
|
20
|
-
chat.messages = [{ id: '1', role: 'assistant',
|
|
20
|
+
chat.messages = [{ id: '1', role: 'assistant', parts: [{ type: 'text', text: 'Hi!' }] }]; // ✅ property
|
|
21
21
|
```
|
|
22
22
|
```html
|
|
23
23
|
<kai-chat messages="[...]"></kai-chat> <!-- ❌ never works -->
|
|
@@ -47,18 +47,70 @@ All 80 elements are also exported individually. Use them for custom layouts or f
|
|
|
47
47
|
|
|
48
48
|
## ChatMessage schema (required for `<kai-chat>`)
|
|
49
49
|
|
|
50
|
+
A message's content is an **ordered `parts` array**. There is no `content` string: it was removed in 0.20.0. Text, reasoning, tool calls, generative-UI cards, citations and file attachments all live in `parts`, in the order the model produced them, so a post-tool answer renders below its tool panel instead of being glued onto the pre-tool text.
|
|
51
|
+
|
|
50
52
|
```ts
|
|
51
53
|
interface ChatMessage {
|
|
52
54
|
id: string;
|
|
53
55
|
role: 'user' | 'assistant';
|
|
54
|
-
content
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
attachments?: AttachmentData[];
|
|
56
|
+
/** The ONLY content channel. Ordered. */
|
|
57
|
+
parts: MessagePart[];
|
|
58
|
+
/** Action buttons under the message. Chrome, not content. */
|
|
58
59
|
actions?: ('copy' | 'like' | 'dislike' | 'regenerate' | 'edit')[];
|
|
60
|
+
avatar?: { src?: string; fallback?: string; alt?: string };
|
|
61
|
+
feedback?: 'like' | 'dislike';
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** Six variants, one per kind of content. Every variant may also carry `raw`
|
|
65
|
+
* (`{ source, payload }`), the untranslated provider block the part was
|
|
66
|
+
* normalized from, for echoing a turn back to the model verbatim. */
|
|
67
|
+
type MessagePart =
|
|
68
|
+
| { type: 'text'; text: string; raw?: RawOrigin }
|
|
69
|
+
| { type: 'reasoning'; text: string; label?: string; index?: number; signature?: string; raw?: RawOrigin }
|
|
70
|
+
| { type: 'tool'; tool: ToolPart; raw?: RawOrigin }
|
|
71
|
+
| { type: 'card'; envelope: CardEnvelope; raw?: RawOrigin }
|
|
72
|
+
| { type: 'source'; source: MessageSource; raw?: RawOrigin }
|
|
73
|
+
| { type: 'file'; attachment: AttachmentData; raw?: RawOrigin };
|
|
74
|
+
|
|
75
|
+
interface ToolPart {
|
|
76
|
+
type: string;
|
|
77
|
+
/** Rendering classification. Derived from `type` when you omit it; an explicit
|
|
78
|
+
* value you set is preserved across later patches. */
|
|
79
|
+
kind?: 'command' | 'file-change' | 'search' | 'fetch' | 'mcp' | 'image' | 'generic';
|
|
80
|
+
state: 'input-streaming' | 'input-available' | 'output-available' | 'output-error';
|
|
81
|
+
input?: Record<string, unknown>;
|
|
82
|
+
/** Raw accumulated argument fragments, for character-level streaming. */
|
|
83
|
+
rawInput?: string;
|
|
84
|
+
output?: Record<string, unknown>;
|
|
85
|
+
toolCallId?: string;
|
|
86
|
+
errorText?: string;
|
|
87
|
+
raw?: RawOrigin;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** A citation. Exported as `MessageSource` (the bare `Source` name belongs to
|
|
91
|
+
* the citation-chip component). */
|
|
92
|
+
interface MessageSource { id?: string; url?: string; title?: string; snippet?: string; index?: number }
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
The simplest possible message, and one with reasoning + a tool call before its answer:
|
|
96
|
+
|
|
97
|
+
```js
|
|
98
|
+
{ id: '1', role: 'assistant', parts: [{ type: 'text', text: 'Hi!' }] }
|
|
99
|
+
|
|
100
|
+
{
|
|
101
|
+
id: '2',
|
|
102
|
+
role: 'assistant',
|
|
103
|
+
parts: [
|
|
104
|
+
{ type: 'reasoning', text: 'I should search for current pricing.' },
|
|
105
|
+
{ type: 'tool', tool: { type: 'search', state: 'output-available', toolCallId: 'tc_1',
|
|
106
|
+
input: { query: 'current pricing' }, output: { results: ['A', 'B'] } } },
|
|
107
|
+
{ type: 'text', text: 'Here is what I found.' },
|
|
108
|
+
],
|
|
59
109
|
}
|
|
60
110
|
```
|
|
61
111
|
|
|
112
|
+
Types are importable: `import type { ChatMessage, MessagePart, MessageSource } from '@kitn.ai/ui'` (also from `'@kitn.ai/ui/react'` and `'@kitn.ai/ui/state'`).
|
|
113
|
+
|
|
62
114
|
## Framework wiring
|
|
63
115
|
|
|
64
116
|
**Plain HTML / CDN**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kitn.ai/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.22.0",
|
|
4
4
|
"nx": {
|
|
5
5
|
"name": "ui",
|
|
6
6
|
"targets": {
|
|
@@ -100,15 +100,39 @@
|
|
|
100
100
|
"types": "./dist/react/index.d.ts",
|
|
101
101
|
"default": "./dist/react.js"
|
|
102
102
|
},
|
|
103
|
+
"./solid": {
|
|
104
|
+
"types": "./dist/solid.d.ts",
|
|
105
|
+
"worker": "./dist/solid.server.js",
|
|
106
|
+
"browser": "./dist/solid.js",
|
|
107
|
+
"deno": "./dist/solid.server.js",
|
|
108
|
+
"node": "./dist/solid.server.js",
|
|
109
|
+
"default": "./dist/solid.js"
|
|
110
|
+
},
|
|
103
111
|
"./state": {
|
|
104
112
|
"types": "./dist/state/index.d.ts",
|
|
105
113
|
"default": "./dist/state.js"
|
|
106
114
|
},
|
|
115
|
+
"./wire": {
|
|
116
|
+
"types": "./dist/wire/index.d.ts",
|
|
117
|
+
"default": "./dist/wire.js"
|
|
118
|
+
},
|
|
119
|
+
"./schemas": {
|
|
120
|
+
"types": "./dist/schemas/index.d.ts",
|
|
121
|
+
"default": "./dist/schemas.js"
|
|
122
|
+
},
|
|
123
|
+
"./schemas/*": "./dist/schemas/*",
|
|
107
124
|
"./provider": {
|
|
108
|
-
"types": "./dist/
|
|
125
|
+
"types": "./dist/remote/provider.d.ts",
|
|
109
126
|
"default": "./dist/kai-provider.es.js"
|
|
110
127
|
}
|
|
111
128
|
},
|
|
129
|
+
"typesVersions": {
|
|
130
|
+
"*": {
|
|
131
|
+
"schemas": [
|
|
132
|
+
"./dist/schemas/index.d.ts"
|
|
133
|
+
]
|
|
134
|
+
}
|
|
135
|
+
},
|
|
112
136
|
"files": [
|
|
113
137
|
"dist",
|
|
114
138
|
"src",
|
|
@@ -118,7 +142,10 @@
|
|
|
118
142
|
"!src/**/*.test.tsx",
|
|
119
143
|
"!src/**/*.mdx",
|
|
120
144
|
"!src/stories",
|
|
145
|
+
"!src/wire/fixtures",
|
|
121
146
|
"!src/elements/logos",
|
|
147
|
+
"!src/elements/card-media.jpg",
|
|
148
|
+
"!src/elements/video-poster.jpg",
|
|
122
149
|
"frameworks",
|
|
123
150
|
"theme.css",
|
|
124
151
|
"llms.txt",
|
|
@@ -127,22 +154,37 @@
|
|
|
127
154
|
],
|
|
128
155
|
"scripts": {
|
|
129
156
|
"prepublishOnly": "npm run build",
|
|
130
|
-
"prebuild": "npm run build:css",
|
|
131
|
-
"build": "vite build --config vite.config.ts && vite build --config vite.config.provider.ts && vite build --config vite.config.react.ts && vite build --config vite.config.barrel.ts && vite build --config vite.config.barrel.server.ts && vite build --config vite.config.state.ts && vite build --config vite.config.mcp.ts && npm run build:elements && node scripts/verify-elements-bundle.mjs && node scripts/verify-react-wrappers.mjs && node scripts/verify-shader-lazy.mjs",
|
|
157
|
+
"prebuild": "npm run build:css && npm run build:card-validation",
|
|
158
|
+
"build": "vite build --config vite.config.ts && vite build --config vite.config.provider.ts && vite build --config vite.config.react.ts && vite build --config vite.config.barrel.ts && vite build --config vite.config.barrel.server.ts && vite build --config vite.config.solid.ts && vite build --config vite.config.solid.server.ts && vite build --config vite.config.state.ts && vite build --config vite.config.wire.ts && vite build --config vite.config.schemas.ts && vite build --config vite.config.mcp.ts && npm run build:elements && node scripts/verify-elements-bundle.mjs && node scripts/verify-react-wrappers.mjs && node scripts/verify-shader-lazy.mjs",
|
|
132
159
|
"build:elements": "node scripts/gen-elements-manifest.mjs && vite build --config vite.config.elements.ts && node scripts/gen-element-dts.mjs",
|
|
133
|
-
"postbuild": "npm run build:theme && npm run build:api && npm run build:schemas",
|
|
160
|
+
"postbuild": "npm run build:theme && npm run build:api && npm run build:schemas && npm run build:subpath-dts && npm run verify:dts",
|
|
134
161
|
"build:theme": "node scripts/build-theme-tokens.mjs",
|
|
135
162
|
"build:api": "node scripts/gen-element-api.mjs",
|
|
136
163
|
"build:schemas": "node scripts/copy-card-schemas.mjs",
|
|
164
|
+
"build:card-validation": "node scripts/gen-card-validation-schemas.mjs",
|
|
165
|
+
"build:subpath-dts": "node scripts/emit-subpath-dts.mjs",
|
|
166
|
+
"verify:card-validation": "node scripts/gen-card-validation-schemas.mjs --check",
|
|
137
167
|
"verify:consumer": "node scripts/verify-consumer-sideeffects.mjs",
|
|
138
|
-
"verify:
|
|
168
|
+
"verify:dts": "node scripts/verify-dts-boundaries.mjs",
|
|
169
|
+
"verify:dts:consumer": "node scripts/verify-dts-consumer.mjs",
|
|
170
|
+
"verify:generated": "node scripts/verify-generated-sync.mjs",
|
|
171
|
+
"verify:quarantine": "node scripts/verify-quarantine.mjs",
|
|
172
|
+
"verify:scaffold": "node scripts/verify-scaffold-compiles.mjs",
|
|
173
|
+
"verify:schemas": "node scripts/verify-schemas-exported.mjs",
|
|
174
|
+
"verify:solid-coverage": "node scripts/verify-solid-coverage.mjs",
|
|
175
|
+
"verify:tool-schemas": "node scripts/verify-tool-schemas.mjs",
|
|
176
|
+
"verify:ssr": "node scripts/verify-ssr-imports.mjs && node scripts/verify-ssr-render.mjs",
|
|
177
|
+
"verify:ssr:imports": "node scripts/verify-ssr-imports.mjs",
|
|
178
|
+
"verify:ssr:render": "node scripts/verify-ssr-render.mjs",
|
|
179
|
+
"verify:pack": "node scripts/verify-pack-weight.mjs",
|
|
180
|
+
"verify:starters": "node scripts/verify-starters.mjs",
|
|
139
181
|
"test": "vitest run",
|
|
140
182
|
"test:react": "vitest run --config vitest.react.config.ts",
|
|
141
183
|
"test:storybook": "vitest run --project=storybook",
|
|
142
184
|
"test:storybook:ci": "node scripts/run-storybook-tests.mjs",
|
|
143
185
|
"test:watch": "vitest",
|
|
144
|
-
"typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.react.json && tsc --noEmit -p tsconfig.react.test.json && tsc --noEmit -p tsconfig.mcp.json",
|
|
145
|
-
"examples": "echo 'Serving repo root on http://localhost:8000 — open http://localhost:8000/examples/demos/composable/index.html' && python3 -m http.server 8000",
|
|
186
|
+
"typecheck": "npm run verify:quarantine && tsc --noEmit && tsc --noEmit -p tsconfig.react.json && tsc --noEmit -p tsconfig.react.test.json && tsc --noEmit -p tsconfig.mcp.json && tsc --noEmit -p tsconfig.tests.json",
|
|
187
|
+
"examples": "echo 'Serving repo root on http://localhost:8000 — open http://localhost:8000/examples/demos/composable/index.html' && python3 -m http.server 8000 --directory ../..",
|
|
146
188
|
"dev": "npm run build:css && storybook dev -p 6006",
|
|
147
189
|
"storybook": "npm run build:css && storybook dev -p 6006",
|
|
148
190
|
"build-storybook": "npm run build:css && storybook build",
|
|
@@ -169,6 +211,12 @@
|
|
|
169
211
|
"zod": "^4.4.3"
|
|
170
212
|
},
|
|
171
213
|
"devDependencies": {
|
|
214
|
+
"@angular/ssr": "^22.0.0",
|
|
215
|
+
"@cloudflare/workers-types": "^5.20260810.1",
|
|
216
|
+
"@langchain/core": "^1.2.5",
|
|
217
|
+
"@langchain/langgraph": "^1.4.9",
|
|
218
|
+
"@langchain/openai": "^1.5.6",
|
|
219
|
+
"@mastra/client-js": "^1.38.0",
|
|
172
220
|
"@playwright/test": "^1.60.0",
|
|
173
221
|
"@shikijs/langs": "^4.2.0",
|
|
174
222
|
"@shikijs/themes": "^4.2.0",
|
|
@@ -177,19 +225,25 @@
|
|
|
177
225
|
"@storybook/addon-docs": "^10.3.5",
|
|
178
226
|
"@storybook/addon-themes": "^10.3.5",
|
|
179
227
|
"@storybook/addon-vitest": "^10.3.5",
|
|
228
|
+
"@sveltejs/kit": "^2.70.2",
|
|
180
229
|
"@tailwindcss/cli": "^4.3.0",
|
|
181
230
|
"@tailwindcss/postcss": "^4.2.2",
|
|
182
231
|
"@tailwindcss/typography": "^0.5.19",
|
|
232
|
+
"@tanstack/react-router": "^1.170.25",
|
|
233
|
+
"@tanstack/react-start": "^1.168.42",
|
|
183
234
|
"@testing-library/jest-dom": "^6.0.0",
|
|
184
235
|
"@testing-library/react": "^16.3.2",
|
|
236
|
+
"@types/express": "^5.0.6",
|
|
185
237
|
"@types/node": "^26.0.0",
|
|
186
238
|
"@types/react": "^19.2.17",
|
|
187
239
|
"@types/react-dom": "^19.2.3",
|
|
188
240
|
"@vitejs/plugin-react": "^4.7.0",
|
|
189
241
|
"@vitest/browser-playwright": "4.1.2",
|
|
190
242
|
"@vitest/coverage-v8": "4.1.2",
|
|
243
|
+
"ai": "^7.0.59",
|
|
191
244
|
"axe-core": "^4.12.1",
|
|
192
245
|
"concurrently": "^10.0.3",
|
|
246
|
+
"express": "^5.2.1",
|
|
193
247
|
"http-server": "^14.1.1",
|
|
194
248
|
"jsdom": "^24.0.0",
|
|
195
249
|
"playwright": "^1.59.1",
|
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
import type { Archetype } from './types';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* The archetypes are PRESETS over a components list, not the surface axis.
|
|
5
|
+
*
|
|
6
|
+
* `renderSurface({ framework, components, integration })` renders any components
|
|
7
|
+
* list; each entry below is a named point in that space plus a default placement.
|
|
8
|
+
* Read the table as "components + placement" and the CLI's feature multi-select
|
|
9
|
+
* falls out of it: placement is the layout question, `components` is the features.
|
|
10
|
+
*
|
|
11
|
+
* Adding an entry here adds a PRESET. It does not add a capability, and it is not
|
|
12
|
+
* how a new component reaches the renderers — that is `components` at the call
|
|
13
|
+
* site. See `listCapabilityGroups` below for what this catalog does still decide.
|
|
14
|
+
*/
|
|
3
15
|
export const archetypes: Archetype[] = [
|
|
4
16
|
{
|
|
5
17
|
id: 'drop-in-chat',
|
|
@@ -43,4 +55,119 @@ export const archetypes: Archetype[] = [
|
|
|
43
55
|
defaultPlacement: 'full-page',
|
|
44
56
|
docsSlug: 'examples/voice-assistant',
|
|
45
57
|
},
|
|
58
|
+
/**
|
|
59
|
+
* THE PRESET THAT EXISTS TO MAKE A CAPABILITY REACHABLE, not to name a product
|
|
60
|
+
* shape someone asked for.
|
|
61
|
+
*
|
|
62
|
+
* `kai-file-upload` and `kai-attachments` were registered elements that NO
|
|
63
|
+
* preset composed, and `listCapabilityGroups` derives its answer from this
|
|
64
|
+
* table — so the attachments capability reached neither `listSurfaceProbes`
|
|
65
|
+
* nor `verify:scaffold`, and `renderSurface` had no branch that emitted either
|
|
66
|
+
* tag. A caller could pass them in `components` (the axis takes any list) and
|
|
67
|
+
* get two bare `<kai-file-upload></kai-file-upload>` / `<kai-attachments>`
|
|
68
|
+
* siblings with nothing wired to them: on screen, inert, silent.
|
|
69
|
+
*
|
|
70
|
+
* The pair is ONE capability for the same reason `kai-artifact` +
|
|
71
|
+
* `kai-resizable` are: a dropzone with no list is a black hole, and a list
|
|
72
|
+
* with no dropzone can never fill. `hasAttachments` in scaffold.ts requires
|
|
73
|
+
* both for exactly that reason.
|
|
74
|
+
*
|
|
75
|
+
* The components match the create-kai spec's own feature table
|
|
76
|
+
* (`attachments` -> `kai-file-upload`, `kai-attachments`), so the CLI's
|
|
77
|
+
* multi-select and this preset name the same surface rather than two.
|
|
78
|
+
*/
|
|
79
|
+
{
|
|
80
|
+
id: 'attachments',
|
|
81
|
+
title: 'File attachments',
|
|
82
|
+
components: ['kai-chat', 'kai-file-upload', 'kai-attachments'],
|
|
83
|
+
defaultPlacement: 'full-page',
|
|
84
|
+
docsSlug: 'examples/attachments',
|
|
85
|
+
},
|
|
46
86
|
];
|
|
87
|
+
|
|
88
|
+
/** The component every surface composes around, so never a capability by itself. */
|
|
89
|
+
export const BASE_COMPONENT = 'kai-chat';
|
|
90
|
+
|
|
91
|
+
/** One capability: the components a preset adds on top of `BASE_COMPONENT`. */
|
|
92
|
+
export interface CapabilityGroup {
|
|
93
|
+
/** derived from the components, e.g. `tool+reasoning` — not a preset name */
|
|
94
|
+
id: string;
|
|
95
|
+
components: string[];
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* The distinct capabilities the presets know about, DERIVED from them.
|
|
100
|
+
*
|
|
101
|
+
* A capability is one preset's components minus `kai-chat`, deduped across the
|
|
102
|
+
* catalog. Today that is five: `sources`, `tool+reasoning`, `artifact+resizable`,
|
|
103
|
+
* `voice-input`, `file-upload+attachments` — and the seven presets collapse onto
|
|
104
|
+
* them because `drop-in-chat` and `support-widget` both add nothing (they differ
|
|
105
|
+
* only in `defaultPlacement`).
|
|
106
|
+
*
|
|
107
|
+
* Derived rather than listed for the reason the verify script's other axes are:
|
|
108
|
+
* a hand-written list would have to be edited by the same hand that adds a
|
|
109
|
+
* preset, so a new capability could land with nothing covering it and nothing
|
|
110
|
+
* failing to say so. Registering a preset whose components are new moves the
|
|
111
|
+
* cell count in `verify:scaffold` by itself.
|
|
112
|
+
*
|
|
113
|
+
* The grouping is real and not an artifact of the derivation: `kai-tool` and
|
|
114
|
+
* `kai-reasoning` are one capability because a tool panel with no reasoning
|
|
115
|
+
* disclosure is not a surface anyone asks for, `kai-artifact` /
|
|
116
|
+
* `kai-resizable` are one because `isWorkspace` only fires when BOTH are present
|
|
117
|
+
* — split them and the renderer emits a bare artifact with no pane to put it in
|
|
118
|
+
* — and `kai-file-upload` / `kai-attachments` are one because `hasAttachments`
|
|
119
|
+
* fires the same way, for the same kind of reason.
|
|
120
|
+
*/
|
|
121
|
+
export function listCapabilityGroups(): CapabilityGroup[] {
|
|
122
|
+
const seen = new Map<string, CapabilityGroup>();
|
|
123
|
+
for (const a of archetypes) {
|
|
124
|
+
const components = a.components.filter((c) => c !== BASE_COMPONENT);
|
|
125
|
+
if (components.length === 0) continue;
|
|
126
|
+
const key = [...components].sort().join(',');
|
|
127
|
+
if (seen.has(key)) continue;
|
|
128
|
+
seen.set(key, { id: components.map((c) => c.replace(/^kai-/, '')).join('+'), components });
|
|
129
|
+
}
|
|
130
|
+
return [...seen.values()];
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/** One surface the scaffolder's gate compiles across every integration × framework. */
|
|
134
|
+
export interface SurfaceProbe {
|
|
135
|
+
id: string;
|
|
136
|
+
components: string[];
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* The surface axis for `verify:scaffold`: each capability ALONE, plus none, plus
|
|
141
|
+
* ALL of them.
|
|
142
|
+
*
|
|
143
|
+
* WHY THESE AND NOT THE PRESETS. The presets are seven cells covering six
|
|
144
|
+
* distinct components lists (`support-widget` repeats `drop-in-chat`'s, and the
|
|
145
|
+
* matrix holds `placement` at one value, so that pair compiled the same types
|
|
146
|
+
* twice). More importantly they cover no combination at all — every preset is
|
|
147
|
+
* exactly one capability — so the surfaces the multi-select makes reachable,
|
|
148
|
+
* which is most of them, had nothing compiling them.
|
|
149
|
+
*
|
|
150
|
+
* WHY NOT THE POWER SET. 2^5 x 11 integrations x 8 frameworks is 2816 cells to
|
|
151
|
+
* exercise no new branch. The renderers compose capabilities INDEPENDENTLY: each
|
|
152
|
+
* companion tag is emitted on its own terms, and the one multi-component
|
|
153
|
+
* predicate (`isWorkspace`) reads components from within a single group. So
|
|
154
|
+
* "every capability alone" reaches every branch, and "all capabilities together"
|
|
155
|
+
* makes every PAIR of capabilities co-occur, which is what proves they compose.
|
|
156
|
+
*
|
|
157
|
+
* THE LIMIT, STATED: a defect needing exactly two capabilities and masked by a
|
|
158
|
+
* third would survive this. That is a real gap and the honest reason it is
|
|
159
|
+
* accepted is cost, not safety — no such branch exists in the renderers today,
|
|
160
|
+
* and `assertSurfacesAreDistinct` fails if the axis ever degenerates so that this
|
|
161
|
+
* reasoning is quietly checking less than it claims.
|
|
162
|
+
*/
|
|
163
|
+
export function listSurfaceProbes(): SurfaceProbe[] {
|
|
164
|
+
const groups = listCapabilityGroups();
|
|
165
|
+
return [
|
|
166
|
+
{ id: 'chat-only', components: [BASE_COMPONENT] },
|
|
167
|
+
...groups.map((g) => ({ id: g.id, components: [BASE_COMPONENT, ...g.components] })),
|
|
168
|
+
{
|
|
169
|
+
id: 'every-capability',
|
|
170
|
+
components: [BASE_COMPONENT, ...groups.flatMap((g) => g.components)],
|
|
171
|
+
},
|
|
172
|
+
];
|
|
173
|
+
}
|