@kitn.ai/ui 0.20.1 → 0.21.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 +68 -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-D3Y5qiij.js +338 -0
- package/dist/create-tween-DGKY1FDY.js +341 -0
- package/dist/create-tween-paho5Rh-.js +7 -0
- package/dist/custom-elements.json +1681 -454
- 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-C-2LvGDG.js} +1 -1
- package/dist/elements/chunks/{action-icons-ns1Fnedj.js → action-icons-CaYoImEk.js} +1 -1
- package/dist/elements/chunks/arrow-left-Bb46H7w9.js +1 -0
- package/dist/elements/chunks/artifact-BBIscOxJ.js +1 -0
- package/dist/elements/chunks/{attachments-mCB5F1Fq.js → attachments-BB56zoji.js} +1 -1
- package/dist/elements/chunks/audio-visualizer-BxOx4THz.js +1 -0
- package/dist/elements/chunks/{badge-B4Zuajl2.js → badge-SxLSZ19R.js} +1 -1
- package/dist/elements/chunks/{button-ZWNif3--.js → button-CmkUkz6c.js} +1 -1
- package/dist/elements/chunks/card-renderer-Db4ffkWv.js +1 -0
- package/dist/elements/chunks/card-tags-D8lZ-C_U.js +1 -0
- package/dist/elements/chunks/chat-thread-B3Ks-cKr.js +1 -0
- package/dist/elements/chunks/check-C8desc_h.js +1 -0
- package/dist/elements/chunks/chevron-down-DKtc2HNB.js +1 -0
- package/dist/elements/chunks/chevron-right-Dw4GPhwL.js +1 -0
- package/dist/elements/chunks/choice-card-Q9cYYDyM.js +1 -0
- package/dist/elements/chunks/circle-BeokBsvB.js +1 -0
- package/dist/elements/chunks/circle-check-wJSqt859.js +1 -0
- package/dist/elements/chunks/{circle-x-B7faJFlY.js → circle-x-D0MEfxOM.js} +1 -1
- package/dist/elements/chunks/code-block-C8VzAraE.js +1 -0
- package/dist/elements/chunks/{collapsible-DM1Ckd4e.js → collapsible-Cvj61obE.js} +1 -1
- package/dist/elements/chunks/{composer-BguS0QL_.js → composer-D86ztyL0.js} +2 -2
- package/dist/elements/chunks/confirm-card-BdyDAGLw.js +1 -0
- package/dist/elements/chunks/context-WHDl-xSx.js +1 -0
- package/dist/elements/chunks/conversation-list-CdR14_Y4.js +1 -0
- package/dist/elements/chunks/create-tween-C_A_B638.js +7 -0
- package/dist/elements/chunks/{default-input-Cqqilg9t.js → default-input-CSZqUM81.js} +1 -1
- package/dist/elements/chunks/define-BzPnNsXg.js +1 -0
- package/dist/elements/chunks/{disclosure-CIZ5c8nO.js → disclosure-DVKsoc1F.js} +1 -1
- package/dist/elements/chunks/{download-Dsbg3ste.js → download-BjA54IMJ.js} +1 -1
- package/dist/elements/chunks/{dropdown-BDd1-Zgi.js → dropdown-BjVVHWXH.js} +1 -1
- package/dist/elements/chunks/{ellipsis-Dw6qrss-.js → ellipsis-BNedmqfi.js} +1 -1
- package/dist/elements/chunks/embed-DQsl4XEq.js +1 -0
- package/dist/elements/chunks/{external-link-Vt74zAoL.js → external-link-Di-dw2CU.js} +1 -1
- package/dist/elements/chunks/{file-text-CZrZF6_v.js → file-text-B3sAODCV.js} +1 -1
- package/dist/elements/chunks/{file-tree-DF4okKyo.js → file-tree-Dgto-bMn.js} +1 -1
- package/dist/elements/chunks/{folder-glP5rha4.js → folder-D6rMadFV.js} +1 -1
- package/dist/elements/chunks/form-CILxvhQ7.js +1 -0
- package/dist/elements/chunks/hover-card-BtiF4XiU.js +1 -0
- package/dist/elements/chunks/{icon-BLb8beoi.js → icon-DKkmze3y.js} +1 -1
- package/dist/elements/chunks/{info-CIsv92JK.js → info-CWRjZkuy.js} +1 -1
- package/dist/elements/chunks/{input-Dds1kFyt.js → input--QJBK6BA.js} +1 -1
- package/dist/elements/chunks/{kbd-De_xbgi9.js → kbd-C3zuKh8R.js} +1 -1
- package/dist/elements/chunks/{link-i4r_k7z4.js → link-BL5JA7Q0.js} +1 -1
- package/dist/elements/chunks/link-preview-CU37bbXh.js +1 -0
- package/dist/elements/chunks/{loader-BmQH4s3V.js → loader-XmpyxyRH.js} +1 -1
- package/dist/elements/chunks/{markdown-Zi21WhUz.js → markdown-3Gv5UZ_o.js} +1 -1
- package/dist/elements/chunks/message-CnBA2OUt.js +1 -0
- package/dist/elements/chunks/message-X5NZbq-W.js +1 -0
- package/dist/elements/chunks/message-square-CnpAm_P0.js +1 -0
- package/dist/elements/chunks/{minimize-2--ifeCGrl.js → minimize-2-DwyrUTcM.js} +1 -1
- package/dist/elements/chunks/{model-switcher-B94YAKsM.js → model-switcher-CclaJEHt.js} +1 -1
- package/dist/elements/chunks/{overlay-kD8dwRv_.js → overlay-Cepd-KcS.js} +1 -1
- package/dist/elements/chunks/{paperclip-q21dYOSK.js → paperclip-CdwKjrlu.js} +1 -1
- package/dist/elements/chunks/{progress-bar-BrAIIaaJ.js → progress-bar-DMVXBD3b.js} +1 -1
- package/dist/elements/chunks/{prompt-suggestion-Bjn2K-fR.js → prompt-suggestion-Di_WZE_5.js} +1 -1
- package/dist/elements/chunks/reasoning-D0jMch5u.js +1 -0
- package/dist/elements/chunks/{resizable-Dp4JExql.js → resizable-1znbL1Gv.js} +1 -1
- package/dist/elements/chunks/{rotate-cw-CFWWkpj2.js → rotate-cw-DVhhgx8n.js} +1 -1
- package/dist/elements/chunks/{scroll-area-Bb0kHH1j.js → scroll-area-Bs4bFS1P.js} +1 -1
- package/dist/elements/chunks/scroll-button-Bet5NLc4.js +1 -0
- package/dist/elements/chunks/{separator-9kRgr1X9.js → separator-C5Gh8qGC.js} +1 -1
- package/dist/elements/chunks/{settings-B8lmec4D.js → settings-5vmEFg0K.js} +1 -1
- package/dist/elements/chunks/{settings-group-I0hEuXiN.js → settings-group-BWLB38kz.js} +1 -1
- package/dist/elements/chunks/{share-C3lTiYGt.js → share-BZ3G_DaB.js} +1 -1
- package/dist/elements/chunks/skeleton-DafPJQTp.js +1 -0
- package/dist/elements/chunks/slots-CIw9RlAe.js +1 -0
- package/dist/elements/chunks/source-D_qj_6uJ.js +1 -0
- package/dist/elements/chunks/{star-CSJtGxgv.js → star-Cuv7j2IE.js} +1 -1
- package/dist/elements/chunks/{store-CHyW95TP.js → store-C1StPHfW.js} +1 -1
- package/dist/elements/chunks/tasks-card-EyoBZfpA.js +1 -0
- package/dist/elements/chunks/{text-shimmer-Cn9TmNpI.js → text-shimmer-D9gRSh34.js} +1 -1
- package/dist/elements/chunks/textarea-DuhtHfcm.js +1 -0
- package/dist/elements/chunks/{thumbs-up-PNVVThEF.js → thumbs-up-B9hwv43w.js} +1 -1
- package/dist/elements/chunks/{toast-store-DKbQn3Wn.js → toast-store-Bm3DUEDe.js} +1 -1
- package/dist/elements/chunks/{tool-DjTRpIpl.js → tool-CDtW7L0z.js} +1 -1
- package/dist/elements/chunks/tooltip-eB226mGK.js +1 -0
- package/dist/elements/chunks/{triangle-alert-DsHTHCPm.js → triangle-alert-C1SNzTqK.js} +1 -1
- package/dist/elements/chunks/use-card-resolution-YZh2MvI5.js +1 -0
- package/dist/elements/chunks/{variant-aurora-Dc4nQUia.js → variant-aurora-Cj1F7D0l.js} +2 -2
- package/dist/elements/chunks/{variant-custom-y_3kVQhS.js → variant-custom-T9gpt7QE.js} +1 -1
- package/dist/elements/chunks/{variant-wave-D5OR1-9Z.js → variant-wave-CxU9z-TE.js} +2 -2
- package/dist/elements/chunks/{video-B7vmenoC.js → video-CK4R7Rus.js} +1 -1
- package/dist/elements/chunks/x-D1qx0aLd.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 +7 -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 +2 -2
- 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/slots.d.ts +16 -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 +2725 -214
- package/dist/index.d.ts +163 -125
- package/dist/index.js +6336 -5802
- package/dist/index.server.d.ts +5 -0
- package/dist/index.server.js +5446 -4937
- 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 +762 -148
- package/dist/llms/llms.txt +57 -5
- package/dist/mcp.es.js +4010 -770
- 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 +717 -299
- package/dist/react/use-kai-chat.d.ts +8 -4
- package/dist/react.d.ts +5 -0
- package/dist/react.js +417 -316
- package/dist/register-impl-bzrZ44ft.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-BCJUQqwS.js +22750 -0
- package/dist/solid-BdENBcEq.js +20108 -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-1wMcXRUS.js +381 -0
- package/dist/variant-aurora-BKHHiOgL.js +391 -0
- package/dist/{variant-aurora-DVtGqVH6.js → variant-aurora-DOb_o4pC.js} +1 -1
- package/dist/{variant-custom-Dif-IV4u.js → variant-custom-CJGB0Kbw.js} +1 -1
- package/dist/variant-custom-Co0CkXJF.js +200 -0
- package/dist/variant-custom-DWSSgmd2.js +170 -0
- package/dist/variant-wave-C3-45cL6.js +218 -0
- package/dist/{variant-wave-DbfNdvSi.js → variant-wave-CEODq-9q.js} +1 -1
- package/dist/variant-wave-jdXBnCUZ.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 +148 -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 +14 -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 +898 -0
- package/frameworks/react/index.tsx +183 -154
- package/frameworks/react/runtime.tsx +21 -1
- package/frameworks/react/use-kai-chat.tsx +11 -1
- package/llms-full.txt +762 -148
- package/llms.txt +57 -5
- package/package.json +61 -8
- package/src/agent-tooling/archetypes.ts +96 -0
- package/src/agent-tooling/integrations/anthropic.ts +412 -0
- package/src/agent-tooling/integrations/cloudflare.ts +136 -52
- package/src/agent-tooling/integrations/langgraph.ts +67 -13
- package/src/agent-tooling/integrations/mastra.ts +120 -12
- package/src/agent-tooling/integrations/mock.ts +43 -8
- package/src/agent-tooling/integrations/ollama.ts +61 -24
- package/src/agent-tooling/integrations/openai.ts +87 -0
- package/src/agent-tooling/integrations/openrouter.ts +56 -8
- package/src/agent-tooling/integrations/pi.ts +79 -23
- package/src/agent-tooling/integrations/pydantic-ai.ts +24 -2
- package/src/agent-tooling/integrations/vercel-ai-sdk.ts +84 -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 +3345 -675
- package/src/agent-tooling/registry.ts +17 -0
- package/src/agent-tooling/types.ts +229 -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 +118 -51
- 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 +12 -4
- 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/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 +11 -5
- 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 +3 -3
- 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 +64 -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 +3 -3
- 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 +1596 -304
- package/src/elements/element-types.d.ts +2636 -211
- 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 +10 -29
- 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/slots.ts +57 -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 +141 -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 +474 -0
- package/src/wire/formats/anthropic.ts +267 -0
- package/src/wire/formats/openai.ts +187 -0
- package/src/wire/index.ts +52 -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/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/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.21.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,36 @@
|
|
|
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",
|
|
139
180
|
"test": "vitest run",
|
|
140
181
|
"test:react": "vitest run --config vitest.react.config.ts",
|
|
141
182
|
"test:storybook": "vitest run --project=storybook",
|
|
142
183
|
"test:storybook:ci": "node scripts/run-storybook-tests.mjs",
|
|
143
184
|
"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",
|
|
185
|
+
"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",
|
|
186
|
+
"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
187
|
"dev": "npm run build:css && storybook dev -p 6006",
|
|
147
188
|
"storybook": "npm run build:css && storybook dev -p 6006",
|
|
148
189
|
"build-storybook": "npm run build:css && storybook build",
|
|
@@ -169,6 +210,12 @@
|
|
|
169
210
|
"zod": "^4.4.3"
|
|
170
211
|
},
|
|
171
212
|
"devDependencies": {
|
|
213
|
+
"@angular/ssr": "^22.0.0",
|
|
214
|
+
"@cloudflare/workers-types": "^5.20260810.1",
|
|
215
|
+
"@langchain/core": "^1.2.5",
|
|
216
|
+
"@langchain/langgraph": "^1.4.9",
|
|
217
|
+
"@langchain/openai": "^1.5.6",
|
|
218
|
+
"@mastra/client-js": "^1.38.0",
|
|
172
219
|
"@playwright/test": "^1.60.0",
|
|
173
220
|
"@shikijs/langs": "^4.2.0",
|
|
174
221
|
"@shikijs/themes": "^4.2.0",
|
|
@@ -177,19 +224,25 @@
|
|
|
177
224
|
"@storybook/addon-docs": "^10.3.5",
|
|
178
225
|
"@storybook/addon-themes": "^10.3.5",
|
|
179
226
|
"@storybook/addon-vitest": "^10.3.5",
|
|
227
|
+
"@sveltejs/kit": "^2.70.2",
|
|
180
228
|
"@tailwindcss/cli": "^4.3.0",
|
|
181
229
|
"@tailwindcss/postcss": "^4.2.2",
|
|
182
230
|
"@tailwindcss/typography": "^0.5.19",
|
|
231
|
+
"@tanstack/react-router": "^1.170.25",
|
|
232
|
+
"@tanstack/react-start": "^1.168.42",
|
|
183
233
|
"@testing-library/jest-dom": "^6.0.0",
|
|
184
234
|
"@testing-library/react": "^16.3.2",
|
|
235
|
+
"@types/express": "^5.0.6",
|
|
185
236
|
"@types/node": "^26.0.0",
|
|
186
237
|
"@types/react": "^19.2.17",
|
|
187
238
|
"@types/react-dom": "^19.2.3",
|
|
188
239
|
"@vitejs/plugin-react": "^4.7.0",
|
|
189
240
|
"@vitest/browser-playwright": "4.1.2",
|
|
190
241
|
"@vitest/coverage-v8": "4.1.2",
|
|
242
|
+
"ai": "^7.0.59",
|
|
191
243
|
"axe-core": "^4.12.1",
|
|
192
244
|
"concurrently": "^10.0.3",
|
|
245
|
+
"express": "^5.2.1",
|
|
193
246
|
"http-server": "^14.1.1",
|
|
194
247
|
"jsdom": "^24.0.0",
|
|
195
248
|
"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',
|
|
@@ -44,3 +56,87 @@ export const archetypes: Archetype[] = [
|
|
|
44
56
|
docsSlug: 'examples/voice-assistant',
|
|
45
57
|
},
|
|
46
58
|
];
|
|
59
|
+
|
|
60
|
+
/** The component every surface composes around, so never a capability by itself. */
|
|
61
|
+
export const BASE_COMPONENT = 'kai-chat';
|
|
62
|
+
|
|
63
|
+
/** One capability: the components a preset adds on top of `BASE_COMPONENT`. */
|
|
64
|
+
export interface CapabilityGroup {
|
|
65
|
+
/** derived from the components, e.g. `tool+reasoning` — not a preset name */
|
|
66
|
+
id: string;
|
|
67
|
+
components: string[];
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* The distinct capabilities the presets know about, DERIVED from them.
|
|
72
|
+
*
|
|
73
|
+
* A capability is one preset's components minus `kai-chat`, deduped across the
|
|
74
|
+
* catalog. Today that is four: `sources`, `tool+reasoning`, `artifact+resizable`,
|
|
75
|
+
* `voice-input` — and the six presets collapse onto them because `drop-in-chat`
|
|
76
|
+
* and `support-widget` both add nothing (they differ only in `defaultPlacement`).
|
|
77
|
+
*
|
|
78
|
+
* Derived rather than listed for the reason the verify script's other axes are:
|
|
79
|
+
* a hand-written list would have to be edited by the same hand that adds a
|
|
80
|
+
* preset, so a new capability could land with nothing covering it and nothing
|
|
81
|
+
* failing to say so. Registering a preset whose components are new moves the
|
|
82
|
+
* cell count in `verify:scaffold` by itself.
|
|
83
|
+
*
|
|
84
|
+
* The grouping is real and not an artifact of the derivation: `kai-tool` and
|
|
85
|
+
* `kai-reasoning` are one capability because a tool panel with no reasoning
|
|
86
|
+
* disclosure is not a surface anyone asks for, and `kai-artifact` /
|
|
87
|
+
* `kai-resizable` are one because `isWorkspace` only fires when BOTH are present
|
|
88
|
+
* — split them and the renderer emits a bare artifact with no pane to put it in.
|
|
89
|
+
*/
|
|
90
|
+
export function listCapabilityGroups(): CapabilityGroup[] {
|
|
91
|
+
const seen = new Map<string, CapabilityGroup>();
|
|
92
|
+
for (const a of archetypes) {
|
|
93
|
+
const components = a.components.filter((c) => c !== BASE_COMPONENT);
|
|
94
|
+
if (components.length === 0) continue;
|
|
95
|
+
const key = [...components].sort().join(',');
|
|
96
|
+
if (seen.has(key)) continue;
|
|
97
|
+
seen.set(key, { id: components.map((c) => c.replace(/^kai-/, '')).join('+'), components });
|
|
98
|
+
}
|
|
99
|
+
return [...seen.values()];
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** One surface the scaffolder's gate compiles across every integration × framework. */
|
|
103
|
+
export interface SurfaceProbe {
|
|
104
|
+
id: string;
|
|
105
|
+
components: string[];
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* The surface axis for `verify:scaffold`: each capability ALONE, plus none, plus
|
|
110
|
+
* ALL of them.
|
|
111
|
+
*
|
|
112
|
+
* WHY THESE AND NOT THE PRESETS. The presets are six cells covering five distinct
|
|
113
|
+
* components lists (`support-widget` repeats `drop-in-chat`'s, and the matrix
|
|
114
|
+
* holds `placement` at one value, so that pair compiled the same types twice).
|
|
115
|
+
* More importantly they cover no combination at all — every preset is exactly one
|
|
116
|
+
* capability — so the surfaces the multi-select makes reachable, which is most of
|
|
117
|
+
* them, had nothing compiling them.
|
|
118
|
+
*
|
|
119
|
+
* WHY NOT THE POWER SET. 2^4 x 11 integrations x 8 frameworks is 1408 cells to
|
|
120
|
+
* exercise no new branch. The renderers compose capabilities INDEPENDENTLY: each
|
|
121
|
+
* companion tag is emitted on its own terms, and the one multi-component
|
|
122
|
+
* predicate (`isWorkspace`) reads components from within a single group. So
|
|
123
|
+
* "every capability alone" reaches every branch, and "all capabilities together"
|
|
124
|
+
* makes every PAIR of capabilities co-occur, which is what proves they compose.
|
|
125
|
+
*
|
|
126
|
+
* THE LIMIT, STATED: a defect needing exactly two capabilities and masked by a
|
|
127
|
+
* third would survive this. That is a real gap and the honest reason it is
|
|
128
|
+
* accepted is cost, not safety — no such branch exists in the renderers today,
|
|
129
|
+
* and `assertSurfacesAreDistinct` fails if the axis ever degenerates so that this
|
|
130
|
+
* reasoning is quietly checking less than it claims.
|
|
131
|
+
*/
|
|
132
|
+
export function listSurfaceProbes(): SurfaceProbe[] {
|
|
133
|
+
const groups = listCapabilityGroups();
|
|
134
|
+
return [
|
|
135
|
+
{ id: 'chat-only', components: [BASE_COMPONENT] },
|
|
136
|
+
...groups.map((g) => ({ id: g.id, components: [BASE_COMPONENT, ...g.components] })),
|
|
137
|
+
{
|
|
138
|
+
id: 'every-capability',
|
|
139
|
+
components: [BASE_COMPONENT, ...groups.flatMap((g) => g.components)],
|
|
140
|
+
},
|
|
141
|
+
];
|
|
142
|
+
}
|