@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
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { MessagePart, RawOrigin } from '../elements/chat-types.js';
|
|
2
|
+
import { ToolPart } from '../components/tool-types.js';
|
|
3
|
+
import { CardEnvelope } from '../primitives/card-contract.js';
|
|
4
|
+
/** Stable structural fingerprint. Key order independent, so an identical snapshot
|
|
5
|
+
* arriving twice compares equal and can be skipped. */
|
|
6
|
+
export declare function fingerprint(value: unknown): string;
|
|
7
|
+
/** Appends to the trailing text part, or OPENS A NEW ONE if the last part is not
|
|
8
|
+
* text. This is what stops a post-tool answer being glued onto the pre-tool text. */
|
|
9
|
+
export declare function appendTextPart(parts: MessagePart[], delta: string): MessagePart[];
|
|
10
|
+
export interface ReasoningOpts {
|
|
11
|
+
index?: number;
|
|
12
|
+
/** Namespaces `index` to one provider response stream. Producers that read more
|
|
13
|
+
* than one stream into the SAME message must set it. See `appendReasoningPart`. */
|
|
14
|
+
streamId?: string;
|
|
15
|
+
label?: string;
|
|
16
|
+
signature?: string;
|
|
17
|
+
raw?: RawOrigin;
|
|
18
|
+
}
|
|
19
|
+
/** Keyed by `(streamId, index)` so parallel reasoning blocks stay distinct.
|
|
20
|
+
*
|
|
21
|
+
* WHY THE KEY IS A PAIR. A block index alone is NOT unique inside one `parts`
|
|
22
|
+
* array. Anthropic numbers content blocks per MESSAGE and restarts at 0 on the
|
|
23
|
+
* next one, while a tool loop folds every round into a single assistant turn.
|
|
24
|
+
* Keyed on index alone, round 2's thinking block (index 0) merges into round 1's
|
|
25
|
+
* part: the text concatenates and `raw: opts.raw ?? cur.raw` OVERWRITES round 1's
|
|
26
|
+
* verbatim provider payload with round 2's. `toAnthropicMessages` then emits one
|
|
27
|
+
* thinking block where two belong, carrying round 2's signature in round 1's
|
|
28
|
+
* position -- a modified-and-filtered thinking block, which is exactly the 400
|
|
29
|
+
* the verbatim `raw` channel exists to prevent.
|
|
30
|
+
*
|
|
31
|
+
* `streamId` is the namespace: one value per provider response stream, attached
|
|
32
|
+
* by `consumeModelStream`. Two rounds are two streams, so their index 0s are two
|
|
33
|
+
* parts. Producers that drive a sink from a single stream can omit it; `undefined`
|
|
34
|
+
* is its own namespace and behaves exactly as before.
|
|
35
|
+
*
|
|
36
|
+
* Returns the SAME array reference when the merge produces an identical part,
|
|
37
|
+
* for the same reason `upsertToolPart` does: a new `parts` array is the
|
|
38
|
+
* re-render signal, so handing one back for a delta that changed nothing is a
|
|
39
|
+
* spurious render.
|
|
40
|
+
*
|
|
41
|
+
* An EMPTY delta is not a no-op and must still reach here: it is how a redacted
|
|
42
|
+
* reasoning block, a `signature_delta` and an assembled `content_block_stop`
|
|
43
|
+
* block arrive, and how a format opens a block at the right position so block
|
|
44
|
+
* ORDER survives into `parts`. Those carry a new `raw`/`signature`/index and so
|
|
45
|
+
* compare unequal and DO rebuild. What the check absorbs is the other empty
|
|
46
|
+
* frame: one carrying nothing new, which a provider is free to send repeatedly.
|
|
47
|
+
*
|
|
48
|
+
* `signature` and `raw` resolve with `??`, so an explicit `undefined` from a
|
|
49
|
+
* later delta never blanks a value an earlier one established. Pass a DEFINED
|
|
50
|
+
* value to replace either; there is no way to clear them. */
|
|
51
|
+
export declare function appendReasoningPart(parts: MessagePart[], delta: string, opts?: ReasoningOpts): MessagePart[];
|
|
52
|
+
/** Creates or REPLACES a card part, keyed on `envelope.id`. Returns the SAME array
|
|
53
|
+
* reference when the incoming envelope is structurally identical to the current
|
|
54
|
+
* one, for the same reason `upsertToolPart` does: a new `parts` array is the
|
|
55
|
+
* re-render signal, so handing one back for a revision that changed nothing is a
|
|
56
|
+
* spurious render.
|
|
57
|
+
*
|
|
58
|
+
* WHY THIS REPLACES WHERE `upsertToolPart` MERGES. A tool part is patched
|
|
59
|
+
* fragment-by-fragment as its arguments stream in, which is why that function
|
|
60
|
+
* needs carry-forward rules for `raw` and `kind` — a later patch that omits a
|
|
61
|
+
* field is not asserting the field is gone. A card envelope is the opposite: it
|
|
62
|
+
* arrives WHOLE, as one complete tool result, so an omitted field IS an
|
|
63
|
+
* assertion. Last-write-wins is both simpler and the only semantics under which
|
|
64
|
+
* a host can CLEAR `resolution` to re-open a dismissed card — a field-by-field
|
|
65
|
+
* merge can only ever set that field, never unset it, so `CardPolicy.onReopen`
|
|
66
|
+
* (see `primitives/card-contract.ts`) would have no way to express its result.
|
|
67
|
+
*
|
|
68
|
+
* The PART-level `raw` is preserved across a revision. It is a different field
|
|
69
|
+
* from anything inside the envelope: the untranslated provider payload the part
|
|
70
|
+
* was built from, attached once by the producer, which a fresh envelope carries
|
|
71
|
+
* no opinion about.
|
|
72
|
+
*
|
|
73
|
+
* Position is preserved: a revised card stays where it first appeared in the
|
|
74
|
+
* thread rather than jumping past the text that followed it. */
|
|
75
|
+
export declare function upsertCardPart(parts: MessagePart[], envelope: CardEnvelope): MessagePart[];
|
|
76
|
+
/** Creates or merges a tool part. Returns the SAME array reference when the merge
|
|
77
|
+
* produces an identical tool, so repeated snapshots do not trigger a re-render.
|
|
78
|
+
*
|
|
79
|
+
* Two fields do NOT follow plain spread semantics, because a streaming provider
|
|
80
|
+
* hands them over on one fragment and then keeps patching the rest:
|
|
81
|
+
* - `kind`: a value the consumer set is preserved across later patches instead
|
|
82
|
+
* of being reverted to `classifyTool(type)` (see `resolveKind`).
|
|
83
|
+
* - `raw`: an explicit `raw: undefined` never blanks a `raw` an earlier patch
|
|
84
|
+
* established. Pass a DEFINED `raw` to replace it; there is no way to clear it. */
|
|
85
|
+
export declare function upsertToolPart(parts: MessagePart[], toolCallId: string, patch: Partial<ToolPart>): MessagePart[];
|
package/dist/state/stream.d.ts
CHANGED
|
@@ -1,18 +1,24 @@
|
|
|
1
|
-
import { ChatMessage } from '../elements/chat-types';
|
|
2
|
-
import { ToolPart } from '../components/tool-types';
|
|
1
|
+
import { ChatMessage, Source } from '../elements/chat-types.js';
|
|
2
|
+
import { ToolPart } from '../components/tool-types.js';
|
|
3
|
+
import { CardEnvelope } from '../primitives/card-contract.js';
|
|
4
|
+
import { AttachmentData } from '../components/attachment-types.js';
|
|
5
|
+
import { ReasoningOpts } from './parts.js';
|
|
3
6
|
/** The one universal contract: a functional-updater setter (React setState shape). */
|
|
4
7
|
export type SetMessages = (updater: (prev: ChatMessage[]) => ChatMessage[]) => void;
|
|
5
8
|
/** A fluent builder for one in-flight assistant message. Owns no state. */
|
|
6
9
|
export interface AssistantStream {
|
|
7
10
|
readonly id: string;
|
|
8
11
|
appendText(delta: string): AssistantStream;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
appendReasoning(delta: string, opts?: ReasoningOpts): AssistantStream;
|
|
13
|
+
upsertTool(toolCallId: string, patch: Partial<ToolPart>): AssistantStream;
|
|
14
|
+
/** Adds a card, or REPLACES the existing one with the same `envelope.id`. A
|
|
15
|
+
* model that revises a card mid-turn re-sends the whole envelope, so a second
|
|
16
|
+
* call with a known id revises that card in place rather than rendering a
|
|
17
|
+
* second copy of it. See `upsertCardPart`. */
|
|
18
|
+
addCard(envelope: CardEnvelope): AssistantStream;
|
|
19
|
+
addSource(source: Source): AssistantStream;
|
|
20
|
+
addFile(attachment: AttachmentData): AssistantStream;
|
|
21
|
+
done(): void;
|
|
16
22
|
abort(reason?: string): void;
|
|
17
23
|
}
|
|
18
24
|
/** Start an assistant message and drive it through `set`. New refs on every mutation. */
|
package/dist/state.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// GENERATED by scripts/emit-subpath-dts.mjs — do not edit.
|
|
2
|
+
// Sibling declarations for dist/state.js, so that RELATIVE imports
|
|
3
|
+
// of this bundle (which bypass package.json "exports") still resolve to types.
|
|
4
|
+
// Without this, tsc resolves the path to the .js and reports TS7016.
|
|
5
|
+
export * from './state/index.js';
|
package/dist/state.js
CHANGED
|
@@ -1,117 +1,286 @@
|
|
|
1
|
-
function
|
|
2
|
-
|
|
1
|
+
function y(t) {
|
|
2
|
+
const e = t.toLowerCase();
|
|
3
|
+
return e ? e.includes("bash") || e.includes("command") || e.includes("shell") || e.includes("terminal") || e.includes("exec") ? "command" : e.includes("edit") || e.includes("write") || e.includes("patch") || e.includes("replace") || e.includes("delete") ? "file-change" : e.includes("search") || e.includes("grep") || e.includes("glob") || e.includes("find") ? "search" : e.includes("fetch") || e.includes("http") || e.includes("browse") || e.includes("crawl") ? "fetch" : e.includes("mcp") ? "mcp" : e.includes("image") || e.includes("screenshot") || e.includes("vision") ? "image" : "generic" : "generic";
|
|
3
4
|
}
|
|
4
|
-
function
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
function d(t) {
|
|
6
|
+
const e = /* @__PURE__ */ new WeakSet(), n = (r) => {
|
|
7
|
+
if (r === null || typeof r != "object") return r;
|
|
8
|
+
if (e.has(r)) return "[circular]";
|
|
9
|
+
e.add(r);
|
|
10
|
+
const i = r, u = Array.isArray(r) ? r.map(n) : Object.fromEntries(Object.keys(i).sort().map((o) => [o, n(i[o])]));
|
|
11
|
+
return e.delete(r), u;
|
|
12
|
+
};
|
|
13
|
+
return JSON.stringify(n(t)) ?? "";
|
|
14
|
+
}
|
|
15
|
+
function k(t, e) {
|
|
16
|
+
const n = t[t.length - 1];
|
|
17
|
+
return (n == null ? void 0 : n.type) === "text" ? [...t.slice(0, -1), { ...n, text: n.text + e }] : [...t, { type: "text", text: e }];
|
|
18
|
+
}
|
|
19
|
+
function h(t, e, n = {}) {
|
|
20
|
+
const r = n.index ?? 0, i = n.streamId, u = t.findIndex(
|
|
21
|
+
(s) => s.type === "reasoning" && (s.index ?? 0) === r && s.streamId === i
|
|
22
|
+
);
|
|
23
|
+
if (u < 0)
|
|
24
|
+
return [...t, { type: "reasoning", text: e, index: r, streamId: i, label: n.label, signature: n.signature, raw: n.raw }];
|
|
25
|
+
const o = t[u], a = {
|
|
26
|
+
...o,
|
|
27
|
+
text: o.text + e,
|
|
28
|
+
label: n.label ?? o.label,
|
|
29
|
+
signature: n.signature ?? o.signature,
|
|
30
|
+
raw: n.raw ?? o.raw
|
|
31
|
+
};
|
|
32
|
+
return O(o, a) ? t : [...t.slice(0, u), a, ...t.slice(u + 1)];
|
|
33
|
+
}
|
|
34
|
+
const I = [
|
|
35
|
+
"type",
|
|
36
|
+
"text",
|
|
37
|
+
"index",
|
|
38
|
+
"streamId",
|
|
39
|
+
"label",
|
|
40
|
+
"signature",
|
|
41
|
+
"raw"
|
|
42
|
+
], T = {
|
|
43
|
+
type: (t, e) => t.type === e.type,
|
|
44
|
+
text: (t, e) => t.text === e.text,
|
|
45
|
+
index: (t, e) => t.index === e.index,
|
|
46
|
+
streamId: (t, e) => t.streamId === e.streamId,
|
|
47
|
+
label: (t, e) => t.label === e.label,
|
|
48
|
+
signature: (t, e) => t.signature === e.signature,
|
|
49
|
+
raw: (t, e) => t.raw === e.raw
|
|
50
|
+
};
|
|
51
|
+
function O(t, e) {
|
|
52
|
+
return I.every((n) => T[n](t, e));
|
|
53
|
+
}
|
|
54
|
+
function _(t, e) {
|
|
55
|
+
const n = t.findIndex((i) => i.type === "card" && i.envelope.id === e.id);
|
|
56
|
+
if (n < 0) return [...t, { type: "card", envelope: e }];
|
|
57
|
+
const r = t[n];
|
|
58
|
+
return d(r.envelope) === d(e) ? t : [...t.slice(0, n), { ...r, envelope: e }, ...t.slice(n + 1)];
|
|
59
|
+
}
|
|
60
|
+
function b(t, e, n) {
|
|
61
|
+
const r = t.findIndex((o) => o.type === "tool" && o.tool.toolCallId === e);
|
|
62
|
+
if (r < 0) {
|
|
63
|
+
const o = {
|
|
64
|
+
type: n.type ?? "unknown",
|
|
65
|
+
state: n.state ?? "input-streaming",
|
|
66
|
+
...n,
|
|
67
|
+
toolCallId: e
|
|
68
|
+
};
|
|
69
|
+
return o.kind = o.kind ?? y(o.type), [...t, { type: "tool", tool: o }];
|
|
70
|
+
}
|
|
71
|
+
const i = t[r].tool, u = { ...i, ...n, toolCallId: e };
|
|
72
|
+
return u.kind = M(i, n, u.type), u.raw === void 0 && i.raw !== void 0 && (u.raw = i.raw), E(i, u) ? t : [...t.slice(0, r), { type: "tool", tool: u }, ...t.slice(r + 1)];
|
|
73
|
+
}
|
|
74
|
+
function M(t, e, n) {
|
|
75
|
+
return e.kind !== void 0 ? e.kind : t.kind === void 0 || t.kind === y(t.type) ? y(n) : t.kind;
|
|
76
|
+
}
|
|
77
|
+
const S = [
|
|
78
|
+
"type",
|
|
79
|
+
"state",
|
|
80
|
+
"kind",
|
|
81
|
+
"toolCallId",
|
|
82
|
+
"errorText",
|
|
83
|
+
"rawInput",
|
|
84
|
+
"raw",
|
|
85
|
+
"input",
|
|
86
|
+
"output"
|
|
87
|
+
], R = {
|
|
88
|
+
type: (t, e) => t.type === e.type,
|
|
89
|
+
state: (t, e) => t.state === e.state,
|
|
90
|
+
kind: (t, e) => t.kind === e.kind,
|
|
91
|
+
toolCallId: (t, e) => t.toolCallId === e.toolCallId,
|
|
92
|
+
errorText: (t, e) => t.errorText === e.errorText,
|
|
93
|
+
rawInput: (t, e) => t.rawInput === e.rawInput,
|
|
94
|
+
raw: (t, e) => t.raw === e.raw,
|
|
95
|
+
input: (t, e) => t.input === e.input || d(t.input) === d(e.input),
|
|
96
|
+
output: (t, e) => t.output === e.output || d(t.output) === d(e.output)
|
|
97
|
+
};
|
|
98
|
+
function E(t, e) {
|
|
99
|
+
return S.every((n) => R[n](t, e));
|
|
9
100
|
}
|
|
10
|
-
function
|
|
101
|
+
function C() {
|
|
102
|
+
return typeof crypto < "u" && crypto.randomUUID ? crypto.randomUUID() : "kai-" + Math.random().toString(36).slice(2);
|
|
103
|
+
}
|
|
104
|
+
function U(t, e, n = {}) {
|
|
105
|
+
return { id: n.id ?? C(), role: t, parts: [{ type: "text", text: e }], ...n };
|
|
106
|
+
}
|
|
107
|
+
function j(t) {
|
|
108
|
+
return t.filter((e) => e.type === "text").map((e) => e.text).join("");
|
|
109
|
+
}
|
|
110
|
+
function L(t, e) {
|
|
111
|
+
return [...t, e];
|
|
112
|
+
}
|
|
113
|
+
function $(t, e) {
|
|
114
|
+
const n = t.findIndex((i) => i.id === e.id);
|
|
115
|
+
if (n === -1) return [...t, e];
|
|
116
|
+
const r = t.slice();
|
|
117
|
+
return r[n] = e, r;
|
|
118
|
+
}
|
|
119
|
+
function F(t, e, n) {
|
|
11
120
|
return t.map(
|
|
12
|
-
(
|
|
121
|
+
(r) => r.id === e ? typeof n == "function" ? n(r) : { ...r, ...n } : r
|
|
13
122
|
);
|
|
14
123
|
}
|
|
15
|
-
function
|
|
16
|
-
return t.filter((
|
|
124
|
+
function Y(t, e) {
|
|
125
|
+
return t.filter((n) => n.id !== e);
|
|
17
126
|
}
|
|
18
|
-
function
|
|
19
|
-
return t.map((
|
|
127
|
+
function q(t, e, n) {
|
|
128
|
+
return t.map((r) => r.id === e ? { ...r, parts: k(r.parts, n) } : r);
|
|
20
129
|
}
|
|
21
|
-
function
|
|
22
|
-
return t.includes(
|
|
130
|
+
function G(t, e) {
|
|
131
|
+
return t.includes(e) ? t.slice() : [...t, e];
|
|
23
132
|
}
|
|
24
|
-
function
|
|
25
|
-
return t.filter((
|
|
133
|
+
function J(t, e) {
|
|
134
|
+
return t.filter((n) => n !== e);
|
|
26
135
|
}
|
|
27
|
-
function
|
|
28
|
-
return typeof crypto < "u" &&
|
|
136
|
+
function A() {
|
|
137
|
+
return typeof crypto < "u" && crypto.randomUUID ? crypto.randomUUID() : "kai-" + Math.random().toString(36).slice(2);
|
|
29
138
|
}
|
|
30
|
-
function
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
return
|
|
139
|
+
function W(t, e = {}) {
|
|
140
|
+
const n = e.id ?? A();
|
|
141
|
+
let r = !1;
|
|
142
|
+
t((o) => [...o, { id: n, role: "assistant", parts: [], ...e }]);
|
|
143
|
+
const i = (o) => {
|
|
144
|
+
r || t((a) => {
|
|
145
|
+
const s = a.findIndex((l) => l.id === n);
|
|
146
|
+
if (s < 0) return a;
|
|
147
|
+
const c = o(a[s].parts);
|
|
148
|
+
return c === a[s].parts ? a : [...a.slice(0, s), { ...a[s], parts: c }, ...a.slice(s + 1)];
|
|
149
|
+
});
|
|
150
|
+
}, u = {
|
|
151
|
+
id: n,
|
|
152
|
+
appendText(o) {
|
|
153
|
+
return i((a) => k(a, o)), u;
|
|
40
154
|
},
|
|
41
|
-
appendReasoning(
|
|
42
|
-
return
|
|
43
|
-
var s, p;
|
|
44
|
-
return { ...a, reasoning: { text: (((s = a.reasoning) == null ? void 0 : s.text) ?? "") + n, label: r ?? ((p = a.reasoning) == null ? void 0 : p.label) } };
|
|
45
|
-
}), i;
|
|
155
|
+
appendReasoning(o, a) {
|
|
156
|
+
return i((s) => h(s, o, a)), u;
|
|
46
157
|
},
|
|
47
|
-
|
|
48
|
-
return
|
|
49
|
-
var s;
|
|
50
|
-
return { ...a, reasoning: { text: n, label: r ?? ((s = a.reasoning) == null ? void 0 : s.label) } };
|
|
51
|
-
}), i;
|
|
158
|
+
upsertTool(o, a) {
|
|
159
|
+
return i((s) => b(s, o, a)), u;
|
|
52
160
|
},
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
return s === -1 ? a.push(n) : a[s] = n, { ...r, tools: a };
|
|
57
|
-
}), i;
|
|
161
|
+
// Upsert, not append: keyed on envelope.id so a revised card replaces itself.
|
|
162
|
+
addCard(o) {
|
|
163
|
+
return i((a) => _(a, o)), u;
|
|
58
164
|
},
|
|
59
|
-
|
|
60
|
-
return
|
|
165
|
+
addSource(o) {
|
|
166
|
+
return i((a) => [...a, { type: "source", source: o }]), u;
|
|
61
167
|
},
|
|
62
|
-
|
|
63
|
-
return
|
|
168
|
+
addFile(o) {
|
|
169
|
+
return i((a) => [...a, { type: "file", attachment: o }]), u;
|
|
64
170
|
},
|
|
65
|
-
done(
|
|
66
|
-
|
|
171
|
+
done() {
|
|
172
|
+
r = !0;
|
|
67
173
|
},
|
|
68
|
-
abort(
|
|
69
|
-
|
|
174
|
+
abort(o) {
|
|
175
|
+
i((a) => a.map((s) => s.type === "tool" && s.tool.state !== "output-available" ? { ...s, tool: { ...s.tool, state: "output-error", errorText: o } } : s)), r = !0;
|
|
70
176
|
}
|
|
71
177
|
};
|
|
72
|
-
return
|
|
178
|
+
return u;
|
|
73
179
|
}
|
|
74
|
-
function
|
|
75
|
-
const
|
|
180
|
+
function v(t, e) {
|
|
181
|
+
const n = {
|
|
76
182
|
id: t.id,
|
|
77
|
-
appendText(
|
|
78
|
-
return t.appendText(
|
|
183
|
+
appendText(r) {
|
|
184
|
+
return t.appendText(r), n;
|
|
79
185
|
},
|
|
80
|
-
|
|
81
|
-
return t.
|
|
186
|
+
appendReasoning(r, i) {
|
|
187
|
+
return t.appendReasoning(r, i), n;
|
|
82
188
|
},
|
|
83
|
-
|
|
84
|
-
return t.
|
|
189
|
+
upsertTool(r, i) {
|
|
190
|
+
return t.upsertTool(r, i), n;
|
|
85
191
|
},
|
|
86
|
-
|
|
87
|
-
return t.
|
|
192
|
+
addCard(r) {
|
|
193
|
+
return t.addCard(r), n;
|
|
88
194
|
},
|
|
89
|
-
|
|
90
|
-
return t.
|
|
195
|
+
addSource(r) {
|
|
196
|
+
return t.addSource(r), n;
|
|
91
197
|
},
|
|
92
|
-
|
|
93
|
-
return t.
|
|
198
|
+
addFile(r) {
|
|
199
|
+
return t.addFile(r), n;
|
|
94
200
|
},
|
|
95
|
-
|
|
96
|
-
|
|
201
|
+
done() {
|
|
202
|
+
t.done(), e();
|
|
97
203
|
},
|
|
98
|
-
|
|
99
|
-
t.
|
|
100
|
-
},
|
|
101
|
-
abort(e) {
|
|
102
|
-
t.abort(e), u();
|
|
204
|
+
abort(r) {
|
|
205
|
+
t.abort(r), e();
|
|
103
206
|
}
|
|
104
207
|
};
|
|
105
|
-
return
|
|
208
|
+
return n;
|
|
209
|
+
}
|
|
210
|
+
const K = "kai-mock", N = "_kai_mock", w = "no provider was contacted — this reply was generated locally by createMockResponder() from @kitn.ai/ui/state", m = `: kai-mock — NO PROVIDER WAS CONTACTED. ${w}.`, g = [
|
|
211
|
+
"Hi! I'm a local mock — no backend, no API key, no provider was contacted. I'm streaming through the same parser a real model would, so what you're seeing is the real rendering path with a canned reply.",
|
|
212
|
+
"Still the mock. Swap `createMockResponder()` for a `fetch('/api/chat', …)` and nothing else in this handler changes — that's the whole point of the seam.",
|
|
213
|
+
"Mock again. Every frame I send is tagged `_kai_mock` and my usage reports zero tokens, so nothing here can be mistaken for a real turn."
|
|
214
|
+
];
|
|
215
|
+
function P(t, e) {
|
|
216
|
+
const n = t.split(/(\s+)/).filter((i) => i !== "");
|
|
217
|
+
if (e <= 1) return n;
|
|
218
|
+
const r = [];
|
|
219
|
+
for (let i = 0; i < n.length; i += e)
|
|
220
|
+
r.push(n.slice(i, i + e).join(""));
|
|
221
|
+
return r;
|
|
222
|
+
}
|
|
223
|
+
function p(t, e) {
|
|
224
|
+
return `data: ${JSON.stringify({
|
|
225
|
+
[N]: w,
|
|
226
|
+
id: t,
|
|
227
|
+
object: "chat.completion.chunk",
|
|
228
|
+
model: K,
|
|
229
|
+
...e
|
|
230
|
+
})}
|
|
231
|
+
|
|
232
|
+
`;
|
|
233
|
+
}
|
|
234
|
+
const D = (t) => t > 0 ? new Promise((e) => setTimeout(e, t)) : Promise.resolve();
|
|
235
|
+
function z(t = {}) {
|
|
236
|
+
const {
|
|
237
|
+
replies: e = g,
|
|
238
|
+
delayMs: n = 24,
|
|
239
|
+
chunkSize: r = 1,
|
|
240
|
+
announce: i = !0
|
|
241
|
+
} = t, u = e.length > 0 ? e : g;
|
|
242
|
+
let o = 0, a = !1;
|
|
243
|
+
return function(c) {
|
|
244
|
+
const l = u[o % u.length], f = `kai-mock-${o + 1}`;
|
|
245
|
+
return o += 1, {
|
|
246
|
+
async *[Symbol.asyncIterator]() {
|
|
247
|
+
i && !a && (a = !0, console.info(`[kai] ${m.slice(2)}`)), yield `${m}
|
|
248
|
+
|
|
249
|
+
`, yield p(f, { choices: [{ index: 0, delta: { role: "assistant" }, finish_reason: null }] });
|
|
250
|
+
for (const x of P(l, r))
|
|
251
|
+
await D(n), yield p(f, { choices: [{ index: 0, delta: { content: x }, finish_reason: null }] });
|
|
252
|
+
yield p(f, {
|
|
253
|
+
choices: [{ index: 0, delta: {}, finish_reason: "stop" }],
|
|
254
|
+
usage: { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 }
|
|
255
|
+
}), yield `data: [DONE]
|
|
256
|
+
|
|
257
|
+
`;
|
|
258
|
+
}
|
|
259
|
+
};
|
|
260
|
+
};
|
|
106
261
|
}
|
|
107
262
|
export {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
263
|
+
g as DEFAULT_MOCK_REPLIES,
|
|
264
|
+
m as MOCK_BANNER,
|
|
265
|
+
w as MOCK_MARKER,
|
|
266
|
+
N as MOCK_MARKER_KEY,
|
|
267
|
+
K as MOCK_MODEL_ID,
|
|
268
|
+
G as addSuggestion,
|
|
269
|
+
L as appendMessage,
|
|
270
|
+
h as appendReasoningPart,
|
|
271
|
+
q as appendText,
|
|
272
|
+
k as appendTextPart,
|
|
273
|
+
y as classifyTool,
|
|
274
|
+
W as createAssistantStream,
|
|
275
|
+
z as createMockResponder,
|
|
276
|
+
d as fingerprint,
|
|
277
|
+
v as onStreamSettled,
|
|
278
|
+
j as partsToText,
|
|
279
|
+
Y as removeMessage,
|
|
280
|
+
J as removeSuggestion,
|
|
281
|
+
U as textMessage,
|
|
282
|
+
F as updateMessage,
|
|
283
|
+
_ as upsertCardPart,
|
|
284
|
+
$ as upsertMessage,
|
|
285
|
+
b as upsertToolPart
|
|
117
286
|
};
|
package/dist/ui/collapsible.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export interface CollapsibleController {
|
|
|
14
14
|
open: Accessor<boolean>;
|
|
15
15
|
setOpen: (v: boolean) => void;
|
|
16
16
|
}
|
|
17
|
-
export
|
|
17
|
+
export interface CollapsibleProps {
|
|
18
18
|
open?: boolean;
|
|
19
19
|
defaultOpen?: boolean;
|
|
20
20
|
onOpenChange?: (open: boolean) => void;
|
|
@@ -26,16 +26,21 @@ export declare function Collapsible(props: {
|
|
|
26
26
|
controllerRef?: (api: CollapsibleController) => void;
|
|
27
27
|
children: JSX.Element;
|
|
28
28
|
class?: string;
|
|
29
|
-
}
|
|
30
|
-
export declare function
|
|
29
|
+
}
|
|
30
|
+
export declare function Collapsible(props: CollapsibleProps): JSX.Element;
|
|
31
|
+
export interface CollapsibleTriggerProps {
|
|
31
32
|
children?: JSX.Element;
|
|
32
33
|
class?: string;
|
|
33
34
|
as?: (props: Record<string, any>) => JSX.Element;
|
|
34
35
|
onClick?: JSX.EventHandlerUnion<HTMLButtonElement, MouseEvent>;
|
|
36
|
+
/** Remaining attributes are spread onto the rendered trigger. */
|
|
35
37
|
[k: string]: any;
|
|
36
|
-
}
|
|
37
|
-
export declare function
|
|
38
|
+
}
|
|
39
|
+
export declare function CollapsibleTrigger(props: CollapsibleTriggerProps): JSX.Element;
|
|
40
|
+
export interface CollapsibleContentProps {
|
|
38
41
|
children?: JSX.Element;
|
|
39
42
|
class?: string;
|
|
43
|
+
/** Remaining attributes are spread onto the rendered panel. */
|
|
40
44
|
[k: string]: any;
|
|
41
|
-
}
|
|
45
|
+
}
|
|
46
|
+
export declare function CollapsibleContent(props: CollapsibleContentProps): JSX.Element;
|