@kitn.ai/ui 0.25.2 → 0.26.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 +2 -2
- package/dist/components/attachment-types.d.ts +46 -1
- package/dist/components/attachments.d.ts +31 -0
- package/dist/components/audio-visualizer/fit-scale.d.ts +50 -0
- package/dist/components/audio-visualizer/index.d.ts +15 -1
- package/dist/components/audio-visualizer/variant-bar.d.ts +24 -1
- package/dist/components/chat-thread.d.ts +3 -41
- package/dist/components/code-block.d.ts +22 -0
- package/dist/components/conversation-item.d.ts +54 -1
- package/dist/components/conversation-list.d.ts +65 -0
- package/dist/components/form.d.ts +42 -0
- package/dist/components/message.d.ts +7 -0
- package/dist/components/toast.d.ts +2 -1
- package/dist/components/voice-input.d.ts +8 -0
- package/dist/components/voice-output.d.ts +12 -1
- package/dist/components/workspace-shell.d.ts +87 -0
- package/dist/{create-tween-B5Y4Im8G.js → create-tween-BFT6c-Y8.js} +1 -1
- package/dist/{create-tween-4z1XYLkR.js → create-tween-CJNlzoaO.js} +1 -1
- package/dist/{create-tween-CUzOlaMS.js → create-tween-CQED4T0g.js} +1 -1
- package/dist/custom-elements.json +2931 -2572
- package/dist/diagnostics/hook.d.ts +81 -0
- package/dist/diagnostics/index.d.ts +7 -0
- package/dist/diagnostics/report-request.d.ts +61 -0
- package/dist/diagnostics.d.ts +5 -0
- package/dist/diagnostics.js +209 -0
- 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/autoloader.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-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-b5A8hlHs.js → Icon--Y8vsFal.js} +1 -1
- package/dist/elements/chunks/action-icons-D9u3OzYW.js +1 -0
- package/dist/elements/chunks/arrow-left-CVh1TeN7.js +1 -0
- package/dist/elements/chunks/{artifact-BSuPYFHY.js → artifact-BkYcfIlZ.js} +1 -1
- package/dist/elements/chunks/attachments-DwfNlubq.js +1 -0
- package/dist/elements/chunks/audio-visualizer-D7lB6mvR.js +1 -0
- package/dist/elements/chunks/{badge-TIMiJFKc.js → badge-Q0-Cmwzz.js} +1 -1
- package/dist/elements/chunks/{button-B9okqG73.js → button-flUbeufF.js} +1 -1
- package/dist/elements/chunks/{card-renderer-CSoTL_e1.js → card-renderer-3Dyl-FpN.js} +1 -1
- package/dist/elements/chunks/check-B5kBPKeo.js +1 -0
- package/dist/elements/chunks/chevron-down-DZ1GS39h.js +1 -0
- package/dist/elements/chunks/chevron-right-CvP7OUd2.js +1 -0
- package/dist/elements/chunks/{choice-card-CGMc3kek.js → choice-card-D4QUIOWZ.js} +1 -1
- package/dist/elements/chunks/circle-CDf9g6MQ.js +1 -0
- package/dist/elements/chunks/circle-check-CA47Nqbz.js +1 -0
- package/dist/elements/chunks/{circle-x-mhH7pOK2.js → circle-x-CJ_HVbC8.js} +1 -1
- package/dist/elements/chunks/code-block-BdLiTitd.js +1 -0
- package/dist/elements/chunks/collapsible-BzbXpPzr.js +1 -0
- package/dist/elements/chunks/{composer-CZZmtYOT.js → composer-Byve-n8K.js} +2 -2
- package/dist/elements/chunks/{confirm-card-BWjf2-xo.js → confirm-card-B0flE3MN.js} +1 -1
- package/dist/elements/chunks/context-VLIL3sJ-.js +1 -0
- package/dist/elements/chunks/controllable-DTwTIlwp.js +1 -0
- package/dist/elements/chunks/conversation-item-BDztezOG.js +1 -0
- package/dist/elements/chunks/copy-Nf-kqxXH.js +1 -0
- package/dist/elements/chunks/{create-tween-CUrM6D_o.js → create-tween-c4Z8TDYz.js} +2 -2
- package/dist/elements/chunks/default-input-C2iLFq0b.js +1 -0
- package/dist/elements/chunks/define-wjHR1MkU.js +1 -0
- package/dist/elements/chunks/disclosure-CcNbyLy0.js +1 -0
- package/dist/elements/chunks/{download-DnCyWFJE.js → download-C4V7tBdb.js} +1 -1
- package/dist/elements/chunks/dropdown-BgWTthUx.js +1 -0
- package/dist/elements/chunks/{ellipsis-CVxqfsDZ.js → ellipsis-7gU33mL2.js} +1 -1
- package/dist/elements/chunks/embed-D3KewsIJ.js +1 -0
- package/dist/elements/chunks/{external-link-DG2sRdQL.js → external-link-CSOEsNlx.js} +1 -1
- package/dist/elements/chunks/{file-text-D0J9F6M7.js → file-text-D1G8khle.js} +1 -1
- package/dist/elements/chunks/{file-tree-yGWNK0Js.js → file-tree-zvB2i7P9.js} +1 -1
- package/dist/elements/chunks/{folder-NV1pi_ud.js → folder-WW2LGLid.js} +1 -1
- package/dist/elements/chunks/form-CQirdC4W.js +1 -0
- package/dist/elements/chunks/hover-card-CJJkfHTK.js +1 -0
- package/dist/elements/chunks/icon-Cfgmf4fa.js +1 -0
- package/dist/elements/chunks/{info-C8r5Q6cc.js → info-DX3YMOt6.js} +1 -1
- package/dist/elements/chunks/input-BtW9U6Sq.js +1 -0
- package/dist/elements/chunks/{kbd-OGJDUT-O.js → kbd-LGXwuT_V.js} +1 -1
- package/dist/elements/chunks/{link-BdsfLB7b.js → link-2My69BqT.js} +1 -1
- package/dist/elements/chunks/{link-preview-Cf5KOP-i.js → link-preview-OQ9IEq0f.js} +1 -1
- package/dist/elements/chunks/{loader-B5QzK_8_.js → loader-iOxc_Tu-.js} +1 -1
- package/dist/elements/chunks/{markdown-DbozyYqa.js → markdown-DgBFaGAz.js} +1 -1
- package/dist/elements/chunks/{message-DtXKPqiR.js → message-VMZohrXx.js} +1 -1
- package/dist/elements/chunks/message-circle-CpXMM-_n.js +1 -0
- package/dist/elements/chunks/message-square-DxcWtETQ.js +1 -0
- package/dist/elements/chunks/message-tZmV2A3p.js +1 -0
- package/dist/elements/chunks/{minimize-2-SegJ_oku.js → minimize-2-DPIUKTrT.js} +1 -1
- package/dist/elements/chunks/{model-switcher-D7JrFFHp.js → model-switcher-DsT8tFB0.js} +1 -1
- package/dist/elements/chunks/{overlay-CV7z2YuX.js → overlay-DuiwdXjm.js} +1 -1
- package/dist/elements/chunks/{paperclip-Bg0ITU3b.js → paperclip-CRZVp4z_.js} +1 -1
- package/dist/elements/chunks/{progress-bar-D1_rzt6N.js → progress-bar-DNy66e_E.js} +1 -1
- package/dist/elements/chunks/{prompt-suggestion-D5Sm8xF1.js → prompt-suggestion-Bn64Nl7L.js} +1 -1
- package/dist/elements/chunks/reasoning-Emn9N4-T.js +1 -0
- package/dist/elements/chunks/{resizable-Dpzjlvp4.js → resizable-D181b4fM.js} +1 -1
- package/dist/elements/chunks/{rotate-cw-DzVDJOA1.js → rotate-cw-CPWe37D9.js} +1 -1
- package/dist/elements/chunks/{scroll-area-93A1bbeG.js → scroll-area-ClZkZxIk.js} +1 -1
- package/dist/elements/chunks/scroll-button-DPE-t3x_.js +1 -0
- package/dist/elements/chunks/{separator-DH2r_ZSZ.js → separator-CeJHQqLW.js} +1 -1
- package/dist/elements/chunks/{settings-BFMOd6yB.js → settings-CqaHgJF9.js} +1 -1
- package/dist/elements/chunks/{settings-group-B3VZKIcz.js → settings-group-CjqjLCOn.js} +1 -1
- package/dist/elements/chunks/share-CyfnNEqp.js +1 -0
- package/dist/elements/chunks/{skeleton-N8BuWYmf.js → skeleton-D8akBnKS.js} +1 -1
- package/dist/elements/chunks/slots-DaNjX0rc.js +1 -0
- package/dist/elements/chunks/{source-w9V0NnBn.js → source-UWCvmVak.js} +1 -1
- package/dist/elements/chunks/{star-DHvACxtm.js → star-DoHFAikQ.js} +1 -1
- package/dist/elements/chunks/store-Cjq0qwYN.js +1 -0
- package/dist/elements/chunks/{tasks-card-lPxoodlA.js → tasks-card-CmZ5xh6v.js} +1 -1
- package/dist/elements/chunks/{text-shimmer-BY_rI3s5.js → text-shimmer-DYn09zrz.js} +1 -1
- package/dist/elements/chunks/textarea-skiGHURM.js +1 -0
- package/dist/elements/chunks/{thumbs-up-DQe0hvkZ.js → thumbs-up-DX2Ijk3H.js} +1 -1
- package/dist/elements/chunks/{toast-store-VUZZBhzH.js → toast-store-CFnQpThX.js} +1 -1
- package/dist/elements/chunks/{tool-C1YtxwPu.js → tool-DKQ2D1DP.js} +1 -1
- package/dist/elements/chunks/{tooltip-BqwnFWhn.js → tooltip-B0G99y8w.js} +1 -1
- package/dist/elements/chunks/{triangle-alert-B6or7F5u.js → triangle-alert-F9cyUEyy.js} +1 -1
- package/dist/elements/chunks/{use-card-resolution-DJg32jGH.js → use-card-resolution-DoA2f_EU.js} +1 -1
- package/dist/elements/chunks/{variant-aurora-QXTZPyST.js → variant-aurora-qt6Zct8M.js} +2 -2
- package/dist/elements/chunks/variant-custom-tJp22_BQ.js +1 -0
- package/dist/{variant-wave-BwzrHD1s.js → elements/chunks/variant-wave-CaQ5ti39.js} +2 -2
- package/dist/elements/chunks/x-B6UnOiLw.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-item.d.ts +1 -0
- package/dist/elements/conversation-item.js +1 -0
- package/dist/elements/conversation-list.js +1 -1
- package/dist/elements/default-input.d.ts +3 -3
- package/dist/elements/define.d.ts +27 -0
- package/dist/elements/diagnostic-events.d.ts +74 -0
- package/dist/elements/dialog.js +1 -1
- package/dist/elements/dock.d.ts +1 -0
- package/dist/elements/dock.js +149 -0
- package/dist/elements/dropdown.d.ts +1 -0
- package/dist/elements/dropdown.js +1 -0
- package/dist/elements/editable-label.js +1 -1
- package/dist/elements/element-diagnostics.d.ts +81 -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 +2 -0
- package/dist/elements/remote.js +1 -1
- package/dist/elements/resizable.js +1 -1
- package/dist/elements/response-stream.js +3 -3
- 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 +35 -3
- 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/voice-input.js +1 -1
- package/dist/elements/voice-output.js +1 -1
- package/dist/elements.d.ts +232 -148
- package/dist/index.d.ts +2 -0
- package/dist/index.js +5456 -4931
- package/dist/index.server.js +4142 -3669
- package/dist/kai-provider.es.js +40 -40
- package/dist/kai.es.js +1 -1
- package/dist/llms/llms-full.txt +184 -69
- package/dist/llms/llms.txt +3 -3
- package/dist/mcp.es.js +2669 -546
- package/dist/primitives/use-resize-observer.d.ts +23 -0
- package/dist/primitives/use-speech-recognition.d.ts +8 -0
- package/dist/primitives/use-text-stream.d.ts +5 -0
- package/dist/react/index.d.ts +115 -266
- package/dist/react.js +247 -221
- package/dist/register-impl-DpE7icIb.js +293 -0
- package/dist/schemas/index.d.ts +1 -1
- package/dist/schemas/tool-defs.d.ts +35 -0
- package/dist/schemas.js +403 -310
- package/dist/{solid-BMuDmFo_.js → solid-BtdqNZI7.js} +8435 -7394
- package/dist/{solid-CGYNdLRR.js → solid-CnavwBye.js} +5987 -5035
- package/dist/solid.d.ts +5 -0
- package/dist/solid.js +210 -203
- package/dist/solid.server.js +210 -203
- package/dist/state/index.d.ts +4 -0
- package/dist/state/persistence.d.ts +51 -0
- package/dist/state/stream.d.ts +50 -0
- package/dist/state/threads.d.ts +71 -0
- package/dist/state.js +269 -169
- package/dist/types.d.ts +4 -2
- package/dist/ui/dock.d.ts +109 -0
- package/dist/ui/hover-card.d.ts +44 -0
- package/dist/{variant-aurora-DwSOfraQ.js → variant-aurora-B8II3-I1.js} +27 -27
- package/dist/{variant-aurora-wKvAQ5wp.js → variant-aurora-CMNWOSJR.js} +28 -28
- package/dist/{variant-aurora-XEkPT0_z.js → variant-aurora-CcuDMWwQ.js} +2 -2
- package/dist/{variant-custom-eFIg2XWQ.js → variant-custom-BdvYC7af.js} +40 -40
- package/dist/{variant-custom-BhS9wIpU.js → variant-custom-C714mqKl.js} +65 -65
- package/dist/variant-custom-L16JLLZy.js +1 -0
- package/dist/{elements/chunks/variant-wave-DDCwhLas.js → variant-wave-2S4La2Ka.js} +2 -2
- package/dist/{variant-wave-CbVsmgwT.js → variant-wave-D7ruiA1W.js} +25 -25
- package/dist/{variant-wave-CUWGx9Bn.js → variant-wave-ecwykeyL.js} +21 -21
- package/dist/wire/chunk.d.ts +47 -0
- package/dist/wire/diagnostics.d.ts +575 -0
- package/dist/wire/encode-probe.d.ts +70 -0
- package/dist/wire/encode.d.ts +24 -0
- package/dist/wire/index.d.ts +2 -0
- package/dist/wire/sse.d.ts +10 -2
- package/dist/wire.js +917 -480
- package/frameworks/react/index.tsx +132 -93
- package/llms-full.txt +184 -69
- package/llms.txt +3 -3
- package/package.json +26 -6
- package/src/agent-tooling/archetypes.ts +41 -9
- package/src/agent-tooling/catalog/README.md +676 -0
- package/src/agent-tooling/catalog/catalog-types.ts +231 -0
- package/src/agent-tooling/catalog/fabrications.ts +96 -0
- package/src/agent-tooling/catalog/invariants.ts +284 -0
- package/src/agent-tooling/catalog/labs-titles.ts +114 -0
- package/src/agent-tooling/catalog/scenarios.ts +87 -0
- package/src/agent-tooling/catalog/surfaces.ts +275 -0
- package/src/agent-tooling/integrations/anthropic.ts +7 -1
- package/src/agent-tooling/integrations/cloudflare.ts +43 -2
- package/src/agent-tooling/integrations/langgraph.ts +7 -1
- package/src/agent-tooling/integrations/mastra.ts +7 -1
- package/src/agent-tooling/integrations/mock.ts +92 -17
- package/src/agent-tooling/integrations/ollama.ts +7 -1
- package/src/agent-tooling/integrations/openai.ts +7 -1
- package/src/agent-tooling/integrations/openrouter.ts +7 -1
- package/src/agent-tooling/integrations/pi.ts +56 -1
- package/src/agent-tooling/integrations/vercel-ai-sdk.ts +7 -1
- package/src/agent-tooling/mcp/css-raw.d.ts +12 -0
- package/src/agent-tooling/mcp/manifest.ts +100 -1
- package/src/agent-tooling/mcp/server.ts +61 -5
- package/src/agent-tooling/mcp/tools/reference.ts +440 -4
- package/src/agent-tooling/mcp/tools/scaffold.ts +1834 -307
- package/src/agent-tooling/mcp/tools/theme.ts +146 -30
- package/src/agent-tooling/mcp/validate-args.ts +141 -0
- package/src/agent-tooling/registry.ts +19 -7
- package/src/agent-tooling/route-emit.ts +26 -2
- package/src/components/attachment-types.ts +47 -1
- package/src/components/attachments.tsx +169 -22
- package/src/components/audio-visualizer/fit-scale.ts +112 -0
- package/src/components/audio-visualizer/index.tsx +80 -3
- package/src/components/audio-visualizer/variant-aurora.tsx +10 -4
- package/src/components/audio-visualizer/variant-bar.tsx +38 -6
- package/src/components/audio-visualizer/variant-custom.tsx +8 -2
- package/src/components/audio-visualizer/variant-grid.tsx +16 -11
- package/src/components/audio-visualizer/variant-radial.tsx +15 -10
- package/src/components/audio-visualizer/variant-wave.tsx +7 -2
- package/src/components/chat-container.tsx +4 -1
- package/src/components/chat-thread.tsx +36 -7
- package/src/components/code-block.tsx +79 -3
- package/src/components/composer.tsx +8 -1
- package/src/components/conversation-item.tsx +114 -4
- package/src/components/conversation-list.tsx +212 -12
- package/src/components/embed.tsx +4 -0
- package/src/components/form.tsx +41 -14
- package/src/components/message.tsx +75 -5
- package/src/components/response-stream.tsx +13 -7
- package/src/components/screen.tsx +5 -0
- package/src/components/scroll-button.tsx +7 -0
- package/src/components/toast.tsx +11 -5
- package/src/components/voice-input.tsx +35 -3
- package/src/components/voice-output.tsx +46 -6
- package/src/components/workspace-shell.tsx +285 -0
- package/src/diagnostics/hook.ts +352 -0
- package/src/diagnostics/index.ts +82 -0
- package/src/diagnostics/report-request.ts +296 -0
- package/src/elements/attachments.tsx +6 -7
- package/src/elements/audio-visualizer.tsx +48 -4
- package/src/elements/chat-workspace.tsx +159 -287
- package/src/elements/chat.tsx +12 -9
- package/src/elements/code-block.tsx +19 -1
- package/src/elements/command.tsx +4 -1
- package/src/elements/compiled.css +1 -1
- package/src/elements/conversation-item.tsx +80 -0
- package/src/elements/conversation-list.tsx +60 -11
- package/src/elements/default-input.tsx +5 -5
- package/src/elements/define.tsx +168 -8
- package/src/elements/diagnostic-events.ts +114 -0
- package/src/elements/dialog.tsx +47 -0
- package/src/elements/disclosure.ts +34 -12
- package/src/elements/dock.tsx +204 -0
- package/src/elements/dropdown.tsx +123 -0
- package/src/elements/element-diagnostics.ts +392 -0
- package/src/elements/element-manifest.json +12 -0
- package/src/elements/element-meta.json +672 -439
- package/src/elements/element-nonscalar.json +170 -0
- package/src/elements/element-types.d.ts +232 -148
- package/src/elements/menu.tsx +13 -0
- package/src/elements/prompt-dock.tsx +2 -1
- package/src/elements/prompt-input.tsx +8 -8
- package/src/elements/register-impl.ts +46 -0
- package/src/elements/register.ts +28 -0
- package/src/elements/resizable.tsx +52 -25
- package/src/elements/scroll-button.tsx +5 -0
- package/src/elements/slots.ts +107 -12
- package/src/elements/styles.css +30 -6
- package/src/elements/thinking-bar.tsx +16 -7
- package/src/elements/toast.tsx +3 -0
- package/src/elements/tool.tsx +26 -5
- package/src/elements/voice-input.tsx +11 -2
- package/src/elements/voice-output.tsx +16 -3
- package/src/index.ts +2 -0
- package/src/primitives/use-resize-observer.ts +33 -0
- package/src/primitives/use-speech-recognition.ts +12 -1
- package/src/primitives/use-stick-to-bottom.ts +34 -2
- package/src/primitives/use-text-stream.ts +33 -2
- package/src/remote/provider-runtime.ts +6 -3
- package/src/schemas/index.ts +1 -0
- package/src/schemas/tool-defs.ts +297 -6
- package/src/solid.ts +5 -0
- package/src/state/index.ts +12 -0
- package/src/state/persistence.ts +180 -0
- package/src/state/stream.ts +71 -4
- package/src/state/threads.ts +142 -0
- package/src/types.ts +4 -2
- package/src/ui/dialog.tsx +6 -0
- package/src/ui/dock.tsx +445 -0
- package/src/ui/dropdown.tsx +67 -23
- package/src/ui/hover-card.tsx +156 -6
- package/src/ui/input.tsx +29 -10
- package/src/ui/resizable.tsx +11 -0
- package/src/wire/chunk.ts +47 -0
- package/src/wire/consume.ts +185 -26
- package/src/wire/diagnostics.ts +727 -0
- package/src/wire/encode-probe.ts +214 -0
- package/src/wire/encode.ts +267 -14
- package/src/wire/formats/anthropic.ts +8 -1
- package/src/wire/formats/openai.ts +5 -0
- package/src/wire/index.ts +22 -0
- package/src/wire/read.ts +250 -6
- package/src/wire/sse.ts +16 -3
- package/dist/elements/chunks/action-icons-DW9muWrY.js +0 -1
- package/dist/elements/chunks/arrow-left-iJVnQmxA.js +0 -1
- package/dist/elements/chunks/attachments-CL6TaqIb.js +0 -1
- package/dist/elements/chunks/audio-visualizer-BuUqQmaO.js +0 -1
- package/dist/elements/chunks/chat-thread-DxoKaStk.js +0 -1
- package/dist/elements/chunks/check-MdLzbxrm.js +0 -1
- package/dist/elements/chunks/chevron-down-MK7IzDqe.js +0 -1
- package/dist/elements/chunks/chevron-right-C5jXhmtV.js +0 -1
- package/dist/elements/chunks/circle-BG7VkPep.js +0 -1
- package/dist/elements/chunks/circle-check-GqvO2UBs.js +0 -1
- package/dist/elements/chunks/code-block-ClhQO9RW.js +0 -1
- package/dist/elements/chunks/collapsible-DBcBkFPh.js +0 -1
- package/dist/elements/chunks/context-hKjNqiyQ.js +0 -1
- package/dist/elements/chunks/conversation-list-CsGJjSKG.js +0 -1
- package/dist/elements/chunks/default-input-B1Mem5wu.js +0 -1
- package/dist/elements/chunks/define-B_tXMYRm.js +0 -1
- package/dist/elements/chunks/disclosure-DAoYOKew.js +0 -1
- package/dist/elements/chunks/dropdown-CmNna5lT.js +0 -1
- package/dist/elements/chunks/embed-CjAD2jSi.js +0 -1
- package/dist/elements/chunks/form-Cp8Y00Wn.js +0 -1
- package/dist/elements/chunks/hover-card-6KtXpLwT.js +0 -1
- package/dist/elements/chunks/icon-97R8SR2p.js +0 -1
- package/dist/elements/chunks/input-DrseEjhp.js +0 -1
- package/dist/elements/chunks/message-CE4k-qaj.js +0 -1
- package/dist/elements/chunks/message-square-C9ovmtOo.js +0 -1
- package/dist/elements/chunks/reasoning-BrxQfpfI.js +0 -1
- package/dist/elements/chunks/scroll-button-CrTo7wm4.js +0 -1
- package/dist/elements/chunks/share-DgNbkJKY.js +0 -1
- package/dist/elements/chunks/slots-CIw9RlAe.js +0 -1
- package/dist/elements/chunks/store-HIPGhNz9.js +0 -1
- package/dist/elements/chunks/textarea-DPfuhswM.js +0 -1
- package/dist/elements/chunks/variant-custom-D5ZlmziF.js +0 -1
- package/dist/elements/chunks/video-Bb86fVYI.js +0 -1
- package/dist/elements/chunks/x-BOhjBeOd.js +0 -1
- package/dist/primitives/card-validate-generator.testlib.d.ts +0 -20
- package/dist/register-impl-DGmGzrEM.js +0 -145
- package/dist/variant-custom-MkTNTycd.js +0 -1
- package/src/primitives/card-validate-generator.testlib.ts +0 -38
package/dist/state.js
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
function
|
|
2
|
-
const
|
|
3
|
-
return
|
|
1
|
+
function g(e) {
|
|
2
|
+
const t = e.toLowerCase();
|
|
3
|
+
return t ? t.includes("bash") || t.includes("command") || t.includes("shell") || t.includes("terminal") || t.includes("exec") ? "command" : t.includes("edit") || t.includes("write") || t.includes("patch") || t.includes("replace") || t.includes("delete") ? "file-change" : t.includes("search") || t.includes("grep") || t.includes("glob") || t.includes("find") ? "search" : t.includes("fetch") || t.includes("http") || t.includes("browse") || t.includes("crawl") ? "fetch" : t.includes("mcp") ? "mcp" : t.includes("image") || t.includes("screenshot") || t.includes("vision") ? "image" : "generic" : "generic";
|
|
4
4
|
}
|
|
5
|
-
function
|
|
6
|
-
const
|
|
5
|
+
function p(e) {
|
|
6
|
+
const t = /* @__PURE__ */ new WeakSet(), n = (r) => {
|
|
7
7
|
if (r === null || typeof r != "object") return r;
|
|
8
|
-
if (
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
return
|
|
8
|
+
if (t.has(r)) return "[circular]";
|
|
9
|
+
t.add(r);
|
|
10
|
+
const o = r, a = Array.isArray(r) ? r.map(n) : Object.fromEntries(Object.keys(o).sort().map((i) => [i, n(o[i])]));
|
|
11
|
+
return t.delete(r), a;
|
|
12
12
|
};
|
|
13
|
-
return JSON.stringify(n(
|
|
13
|
+
return JSON.stringify(n(e)) ?? "";
|
|
14
14
|
}
|
|
15
|
-
function
|
|
16
|
-
const n =
|
|
17
|
-
return (n == null ? void 0 : n.type) === "text" ? [...
|
|
15
|
+
function x(e, t) {
|
|
16
|
+
const n = e[e.length - 1];
|
|
17
|
+
return (n == null ? void 0 : n.type) === "text" ? [...e.slice(0, -1), { ...n, text: n.text + t }] : [...e, { type: "text", text: t }];
|
|
18
18
|
}
|
|
19
|
-
function
|
|
20
|
-
const r = n.index ?? 0,
|
|
21
|
-
(
|
|
19
|
+
function T(e, t, n = {}) {
|
|
20
|
+
const r = n.index ?? 0, o = n.streamId, a = e.findIndex(
|
|
21
|
+
(u) => u.type === "reasoning" && (u.index ?? 0) === r && u.streamId === o
|
|
22
22
|
);
|
|
23
|
-
if (
|
|
24
|
-
return [...
|
|
25
|
-
const
|
|
26
|
-
...
|
|
27
|
-
text:
|
|
28
|
-
label: n.label ??
|
|
29
|
-
signature: n.signature ??
|
|
30
|
-
raw: n.raw ??
|
|
23
|
+
if (a < 0)
|
|
24
|
+
return [...e, { type: "reasoning", text: t, index: r, streamId: o, label: n.label, signature: n.signature, raw: n.raw }];
|
|
25
|
+
const i = e[a], s = {
|
|
26
|
+
...i,
|
|
27
|
+
text: i.text + t,
|
|
28
|
+
label: n.label ?? i.label,
|
|
29
|
+
signature: n.signature ?? i.signature,
|
|
30
|
+
raw: n.raw ?? i.raw
|
|
31
31
|
};
|
|
32
|
-
return
|
|
32
|
+
return S(i, s) ? e : [...e.slice(0, a), s, ...e.slice(a + 1)];
|
|
33
33
|
}
|
|
34
|
-
const
|
|
34
|
+
const b = [
|
|
35
35
|
"type",
|
|
36
36
|
"text",
|
|
37
37
|
"index",
|
|
@@ -39,42 +39,42 @@ const I = [
|
|
|
39
39
|
"label",
|
|
40
40
|
"signature",
|
|
41
41
|
"raw"
|
|
42
|
-
],
|
|
43
|
-
type: (
|
|
44
|
-
text: (
|
|
45
|
-
index: (
|
|
46
|
-
streamId: (
|
|
47
|
-
label: (
|
|
48
|
-
signature: (
|
|
49
|
-
raw: (
|
|
42
|
+
], I = {
|
|
43
|
+
type: (e, t) => e.type === t.type,
|
|
44
|
+
text: (e, t) => e.text === t.text,
|
|
45
|
+
index: (e, t) => e.index === t.index,
|
|
46
|
+
streamId: (e, t) => e.streamId === t.streamId,
|
|
47
|
+
label: (e, t) => e.label === t.label,
|
|
48
|
+
signature: (e, t) => e.signature === t.signature,
|
|
49
|
+
raw: (e, t) => e.raw === t.raw
|
|
50
50
|
};
|
|
51
|
-
function
|
|
52
|
-
return
|
|
51
|
+
function S(e, t) {
|
|
52
|
+
return b.every((n) => I[n](e, t));
|
|
53
53
|
}
|
|
54
|
-
function
|
|
55
|
-
const n =
|
|
56
|
-
if (n < 0) return [...
|
|
57
|
-
const r =
|
|
58
|
-
return
|
|
54
|
+
function A(e, t) {
|
|
55
|
+
const n = e.findIndex((o) => o.type === "card" && o.envelope.id === t.id);
|
|
56
|
+
if (n < 0) return [...e, { type: "card", envelope: t }];
|
|
57
|
+
const r = e[n];
|
|
58
|
+
return p(r.envelope) === p(t) ? e : [...e.slice(0, n), { ...r, envelope: t }, ...e.slice(n + 1)];
|
|
59
59
|
}
|
|
60
|
-
function
|
|
61
|
-
const r =
|
|
60
|
+
function M(e, t, n) {
|
|
61
|
+
const r = e.findIndex((i) => i.type === "tool" && i.tool.toolCallId === t);
|
|
62
62
|
if (r < 0) {
|
|
63
|
-
const
|
|
63
|
+
const i = {
|
|
64
64
|
type: n.type ?? "unknown",
|
|
65
65
|
state: n.state ?? "input-streaming",
|
|
66
66
|
...n,
|
|
67
|
-
toolCallId:
|
|
67
|
+
toolCallId: t
|
|
68
68
|
};
|
|
69
|
-
return
|
|
69
|
+
return i.kind = i.kind ?? g(i.type), [...e, { type: "tool", tool: i }];
|
|
70
70
|
}
|
|
71
|
-
const
|
|
72
|
-
return
|
|
71
|
+
const o = e[r].tool, a = { ...o, ...n, toolCallId: t };
|
|
72
|
+
return a.kind = O(o, n, a.type), a.raw === void 0 && o.raw !== void 0 && (a.raw = o.raw), E(o, a) ? e : [...e.slice(0, r), { type: "tool", tool: a }, ...e.slice(r + 1)];
|
|
73
73
|
}
|
|
74
|
-
function
|
|
75
|
-
return
|
|
74
|
+
function O(e, t, n) {
|
|
75
|
+
return t.kind !== void 0 ? t.kind : e.kind === void 0 || e.kind === g(e.type) ? g(n) : e.kind;
|
|
76
76
|
}
|
|
77
|
-
const
|
|
77
|
+
const R = [
|
|
78
78
|
"type",
|
|
79
79
|
"state",
|
|
80
80
|
"kind",
|
|
@@ -84,172 +84,267 @@ const S = [
|
|
|
84
84
|
"raw",
|
|
85
85
|
"input",
|
|
86
86
|
"output"
|
|
87
|
-
],
|
|
88
|
-
type: (
|
|
89
|
-
state: (
|
|
90
|
-
kind: (
|
|
91
|
-
toolCallId: (
|
|
92
|
-
errorText: (
|
|
93
|
-
rawInput: (
|
|
94
|
-
raw: (
|
|
95
|
-
input: (
|
|
96
|
-
output: (
|
|
87
|
+
], _ = {
|
|
88
|
+
type: (e, t) => e.type === t.type,
|
|
89
|
+
state: (e, t) => e.state === t.state,
|
|
90
|
+
kind: (e, t) => e.kind === t.kind,
|
|
91
|
+
toolCallId: (e, t) => e.toolCallId === t.toolCallId,
|
|
92
|
+
errorText: (e, t) => e.errorText === t.errorText,
|
|
93
|
+
rawInput: (e, t) => e.rawInput === t.rawInput,
|
|
94
|
+
raw: (e, t) => e.raw === t.raw,
|
|
95
|
+
input: (e, t) => e.input === t.input || p(e.input) === p(t.input),
|
|
96
|
+
output: (e, t) => e.output === t.output || p(e.output) === p(t.output)
|
|
97
97
|
};
|
|
98
|
-
function E(
|
|
99
|
-
return
|
|
98
|
+
function E(e, t) {
|
|
99
|
+
return R.every((n) => _[n](e, t));
|
|
100
100
|
}
|
|
101
101
|
function C() {
|
|
102
102
|
return typeof crypto < "u" && crypto.randomUUID ? crypto.randomUUID() : "kai-" + Math.random().toString(36).slice(2);
|
|
103
103
|
}
|
|
104
|
-
function
|
|
105
|
-
return { id: n.id ?? C(), role:
|
|
104
|
+
function Y(e, t, n = {}) {
|
|
105
|
+
return { id: n.id ?? C(), role: e, parts: [{ type: "text", text: t }], ...n };
|
|
106
106
|
}
|
|
107
|
-
function
|
|
108
|
-
return
|
|
107
|
+
function q(e) {
|
|
108
|
+
return e.filter((t) => t.type === "text").map((t) => t.text).join("");
|
|
109
109
|
}
|
|
110
|
-
function
|
|
111
|
-
return [...
|
|
110
|
+
function G(e, t) {
|
|
111
|
+
return [...e, t];
|
|
112
112
|
}
|
|
113
|
-
function
|
|
114
|
-
const n =
|
|
115
|
-
if (n === -1) return [...
|
|
116
|
-
const r =
|
|
117
|
-
return r[n] =
|
|
113
|
+
function J(e, t) {
|
|
114
|
+
const n = e.findIndex((o) => o.id === t.id);
|
|
115
|
+
if (n === -1) return [...e, t];
|
|
116
|
+
const r = e.slice();
|
|
117
|
+
return r[n] = t, r;
|
|
118
118
|
}
|
|
119
|
-
function
|
|
120
|
-
return
|
|
121
|
-
(r) => r.id ===
|
|
119
|
+
function V(e, t, n) {
|
|
120
|
+
return e.map(
|
|
121
|
+
(r) => r.id === t ? typeof n == "function" ? n(r) : { ...r, ...n } : r
|
|
122
122
|
);
|
|
123
123
|
}
|
|
124
|
-
function
|
|
125
|
-
return
|
|
124
|
+
function W(e, t) {
|
|
125
|
+
return e.filter((n) => n.id !== t);
|
|
126
126
|
}
|
|
127
|
-
function
|
|
128
|
-
return
|
|
127
|
+
function z(e, t, n) {
|
|
128
|
+
return e.map((r) => r.id === t ? { ...r, parts: x(r.parts, n) } : r);
|
|
129
129
|
}
|
|
130
|
-
function
|
|
131
|
-
return
|
|
130
|
+
function B(e, t) {
|
|
131
|
+
return e.includes(t) ? e.slice() : [...e, t];
|
|
132
132
|
}
|
|
133
|
-
function
|
|
134
|
-
return
|
|
133
|
+
function H(e, t) {
|
|
134
|
+
return e.filter((n) => n !== t);
|
|
135
135
|
}
|
|
136
|
-
function
|
|
136
|
+
function P() {
|
|
137
137
|
return typeof crypto < "u" && crypto.randomUUID ? crypto.randomUUID() : "kai-" + Math.random().toString(36).slice(2);
|
|
138
138
|
}
|
|
139
|
-
function
|
|
140
|
-
const n =
|
|
139
|
+
function Q(e, t = {}) {
|
|
140
|
+
const n = t.id ?? P();
|
|
141
141
|
let r = !1;
|
|
142
|
-
|
|
143
|
-
const
|
|
144
|
-
r ||
|
|
145
|
-
const
|
|
146
|
-
if (
|
|
147
|
-
const c =
|
|
148
|
-
return c ===
|
|
142
|
+
e((i) => [...i, { id: n, role: "assistant", parts: [], ...t }]);
|
|
143
|
+
const o = (i) => {
|
|
144
|
+
r || e((s) => {
|
|
145
|
+
const u = s.findIndex((d) => d.id === n);
|
|
146
|
+
if (u < 0) return s;
|
|
147
|
+
const c = i(s[u].parts);
|
|
148
|
+
return c === s[u].parts ? s : [...s.slice(0, u), { ...s[u], parts: c }, ...s.slice(u + 1)];
|
|
149
149
|
});
|
|
150
|
-
},
|
|
150
|
+
}, a = {
|
|
151
151
|
id: n,
|
|
152
|
-
appendText(
|
|
153
|
-
return
|
|
152
|
+
appendText(i) {
|
|
153
|
+
return o((s) => x(s, i)), a;
|
|
154
154
|
},
|
|
155
|
-
appendReasoning(
|
|
156
|
-
return
|
|
155
|
+
appendReasoning(i, s) {
|
|
156
|
+
return o((u) => T(u, i, s)), a;
|
|
157
157
|
},
|
|
158
|
-
upsertTool(
|
|
159
|
-
return
|
|
158
|
+
upsertTool(i, s) {
|
|
159
|
+
return o((u) => M(u, i, s)), a;
|
|
160
160
|
},
|
|
161
161
|
// Upsert, not append: keyed on envelope.id so a revised card replaces itself.
|
|
162
|
-
addCard(
|
|
163
|
-
return
|
|
162
|
+
addCard(i) {
|
|
163
|
+
return o((s) => A(s, i)), a;
|
|
164
164
|
},
|
|
165
|
-
addSource(
|
|
166
|
-
return
|
|
165
|
+
addSource(i) {
|
|
166
|
+
return o((s) => [...s, { type: "source", source: i }]), a;
|
|
167
167
|
},
|
|
168
|
-
addFile(
|
|
169
|
-
return
|
|
168
|
+
addFile(i) {
|
|
169
|
+
return o((s) => [...s, { type: "file", attachment: i }]), a;
|
|
170
170
|
},
|
|
171
171
|
done() {
|
|
172
172
|
r = !0;
|
|
173
173
|
},
|
|
174
|
-
abort(
|
|
175
|
-
|
|
174
|
+
abort(i) {
|
|
175
|
+
const s = (i == null ? void 0 : i.trim()) || void 0;
|
|
176
|
+
o((u) => {
|
|
177
|
+
let c = !1;
|
|
178
|
+
const d = u.map((l) => {
|
|
179
|
+
var y;
|
|
180
|
+
return l.type !== "tool" || l.tool.state === "output-available" ? l : l.tool.state === "output-error" && ((y = l.tool.errorText) != null && y.trim()) ? (c = !0, l) : (c = !0, { ...l, tool: { ...l.tool, state: "output-error", errorText: s } });
|
|
181
|
+
});
|
|
182
|
+
return c || !s ? d : [...d, { type: "text", text: s }];
|
|
183
|
+
}), r = !0;
|
|
176
184
|
}
|
|
177
185
|
};
|
|
178
|
-
return
|
|
186
|
+
return a;
|
|
179
187
|
}
|
|
180
|
-
function
|
|
188
|
+
function X(e, t) {
|
|
181
189
|
const n = {
|
|
182
|
-
id:
|
|
190
|
+
id: e.id,
|
|
183
191
|
appendText(r) {
|
|
184
|
-
return
|
|
192
|
+
return e.appendText(r), n;
|
|
185
193
|
},
|
|
186
|
-
appendReasoning(r,
|
|
187
|
-
return
|
|
194
|
+
appendReasoning(r, o) {
|
|
195
|
+
return e.appendReasoning(r, o), n;
|
|
188
196
|
},
|
|
189
|
-
upsertTool(r,
|
|
190
|
-
return
|
|
197
|
+
upsertTool(r, o) {
|
|
198
|
+
return e.upsertTool(r, o), n;
|
|
191
199
|
},
|
|
192
200
|
addCard(r) {
|
|
193
|
-
return
|
|
201
|
+
return e.addCard(r), n;
|
|
194
202
|
},
|
|
195
203
|
addSource(r) {
|
|
196
|
-
return
|
|
204
|
+
return e.addSource(r), n;
|
|
197
205
|
},
|
|
198
206
|
addFile(r) {
|
|
199
|
-
return
|
|
207
|
+
return e.addFile(r), n;
|
|
200
208
|
},
|
|
201
209
|
done() {
|
|
202
|
-
|
|
210
|
+
e.done(), t();
|
|
203
211
|
},
|
|
204
212
|
abort(r) {
|
|
205
|
-
|
|
213
|
+
e.abort(r), t();
|
|
206
214
|
}
|
|
207
215
|
};
|
|
208
216
|
return n;
|
|
209
217
|
}
|
|
210
|
-
|
|
218
|
+
function D(e, t, n, r = {}) {
|
|
219
|
+
var i;
|
|
220
|
+
let o = !1;
|
|
221
|
+
const a = e.map((s) => {
|
|
222
|
+
if (s.id !== t) return s;
|
|
223
|
+
o = !0;
|
|
224
|
+
const u = { ...s, messages: n(s.messages) };
|
|
225
|
+
return r.touch ? r.touch(u) : u;
|
|
226
|
+
});
|
|
227
|
+
return o ? a : ((i = r.onDrop) == null || i.call(r, t), e);
|
|
228
|
+
}
|
|
229
|
+
function Z(e, t, n = {}) {
|
|
230
|
+
return (r) => {
|
|
231
|
+
e((o) => D(o, t, r, n));
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
function v(e) {
|
|
235
|
+
const t = /* @__PURE__ */ new Map(), n = () => Array.from(t.keys()), r = () => e == null ? void 0 : e(n());
|
|
236
|
+
return {
|
|
237
|
+
begin(o) {
|
|
238
|
+
var i;
|
|
239
|
+
(i = t.get(o)) == null || i.abort();
|
|
240
|
+
const a = new AbortController();
|
|
241
|
+
return t.set(o, a), r(), a;
|
|
242
|
+
},
|
|
243
|
+
end(o, a) {
|
|
244
|
+
t.get(o) === a && (t.delete(o), r());
|
|
245
|
+
},
|
|
246
|
+
abort(o) {
|
|
247
|
+
const a = t.get(o);
|
|
248
|
+
return a ? (a.abort(), t.delete(o), r(), !0) : !1;
|
|
249
|
+
},
|
|
250
|
+
isStreaming(o) {
|
|
251
|
+
return t.has(o);
|
|
252
|
+
},
|
|
253
|
+
streamingIds: n
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
function f(e) {
|
|
257
|
+
return typeof e == "object" && e !== null;
|
|
258
|
+
}
|
|
259
|
+
const K = {
|
|
260
|
+
text: (e) => typeof e.text == "string",
|
|
261
|
+
reasoning: (e) => typeof e.text == "string",
|
|
262
|
+
tool: (e) => f(e.tool),
|
|
263
|
+
card: (e) => f(e.envelope) && typeof e.envelope.type == "string" && typeof e.envelope.id == "string",
|
|
264
|
+
source: (e) => f(e.source),
|
|
265
|
+
file: (e) => f(e.attachment)
|
|
266
|
+
};
|
|
267
|
+
function N(e, t) {
|
|
268
|
+
if (!f(e) || typeof e.type != "string")
|
|
269
|
+
return t.push({ at: "part", reason: "not a part record", value: e }), null;
|
|
270
|
+
const n = K[e.type];
|
|
271
|
+
return n ? n(e) ? e : (t.push({ at: "part", reason: `missing or invalid payload for "${e.type}" part`, value: e }), null) : (t.push({ at: "part", reason: `unknown part type "${e.type}"`, value: e }), null);
|
|
272
|
+
}
|
|
273
|
+
function U(e, t) {
|
|
274
|
+
if (!f(e) || typeof e.id != "string" || e.role !== "user" && e.role !== "assistant" || !Array.isArray(e.parts))
|
|
275
|
+
return t.push({ at: "message", reason: "not a message record (id/role/parts)", value: e }), null;
|
|
276
|
+
const n = e.parts.map((o) => N(o, t)).filter((o) => o !== null);
|
|
277
|
+
if (n.length === 0)
|
|
278
|
+
return t.push({ at: "message", reason: "no readable parts survived", value: e }), null;
|
|
279
|
+
const r = { id: e.id, role: e.role, parts: n };
|
|
280
|
+
return (e.feedback === "like" || e.feedback === "dislike") && (r.feedback = e.feedback), f(e.avatar) && (r.avatar = e.avatar), Array.isArray(e.actions) && (r.actions = e.actions), r;
|
|
281
|
+
}
|
|
282
|
+
function ee(e) {
|
|
283
|
+
const t = [];
|
|
284
|
+
return Array.isArray(e) ? { messages: e.map((r) => U(r, t)).filter((r) => r !== null), dropped: t } : { messages: [], dropped: [{ at: "thread", reason: "stored thread is not an array", value: e }] };
|
|
285
|
+
}
|
|
286
|
+
function te(e, t) {
|
|
287
|
+
const n = t.setTimeout ?? ((c, d) => setTimeout(c, d)), r = t.clearTimeout ?? ((c) => clearTimeout(c));
|
|
288
|
+
let o, a = !1, i;
|
|
289
|
+
const s = () => {
|
|
290
|
+
a && (r(i), a = !1);
|
|
291
|
+
}, u = () => {
|
|
292
|
+
a = !1, e(o);
|
|
293
|
+
};
|
|
294
|
+
return {
|
|
295
|
+
schedule(c) {
|
|
296
|
+
o = c, s(), i = n(u, t.delayMs), a = !0;
|
|
297
|
+
},
|
|
298
|
+
flush() {
|
|
299
|
+
a && (s(), e(o));
|
|
300
|
+
},
|
|
301
|
+
cancel: s,
|
|
302
|
+
pending: () => a
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
const $ = "kai-mock", j = "_kai_mock", w = "no provider was contacted — this reply was generated locally by createMockResponder() from @kitn.ai/ui/state", h = `: kai-mock — NO PROVIDER WAS CONTACTED. ${w}.`, k = [
|
|
211
306
|
"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
307
|
"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
308
|
"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
309
|
];
|
|
215
|
-
function
|
|
216
|
-
const n =
|
|
217
|
-
if (
|
|
310
|
+
function L(e, t) {
|
|
311
|
+
const n = e.split(/(\s+)/).filter((o) => o !== "");
|
|
312
|
+
if (t <= 1) return n;
|
|
218
313
|
const r = [];
|
|
219
|
-
for (let
|
|
220
|
-
r.push(n.slice(
|
|
314
|
+
for (let o = 0; o < n.length; o += t)
|
|
315
|
+
r.push(n.slice(o, o + t).join(""));
|
|
221
316
|
return r;
|
|
222
317
|
}
|
|
223
|
-
function
|
|
318
|
+
function m(e, t) {
|
|
224
319
|
return `data: ${JSON.stringify({
|
|
225
|
-
[
|
|
226
|
-
id:
|
|
320
|
+
[j]: w,
|
|
321
|
+
id: e,
|
|
227
322
|
object: "chat.completion.chunk",
|
|
228
|
-
model:
|
|
229
|
-
...
|
|
323
|
+
model: $,
|
|
324
|
+
...t
|
|
230
325
|
})}
|
|
231
326
|
|
|
232
327
|
`;
|
|
233
328
|
}
|
|
234
|
-
const
|
|
235
|
-
function
|
|
329
|
+
const F = (e) => e > 0 ? new Promise((t) => setTimeout(t, e)) : Promise.resolve();
|
|
330
|
+
function ne(e = {}) {
|
|
236
331
|
const {
|
|
237
|
-
replies:
|
|
332
|
+
replies: t = k,
|
|
238
333
|
delayMs: n = 24,
|
|
239
334
|
chunkSize: r = 1,
|
|
240
|
-
announce:
|
|
241
|
-
} =
|
|
242
|
-
let
|
|
335
|
+
announce: o = !0
|
|
336
|
+
} = e, a = t.length > 0 ? t : k;
|
|
337
|
+
let i = 0, s = !1;
|
|
243
338
|
return function(c) {
|
|
244
|
-
const
|
|
245
|
-
return
|
|
339
|
+
const d = a[i % a.length], l = `kai-mock-${i + 1}`;
|
|
340
|
+
return i += 1, {
|
|
246
341
|
async *[Symbol.asyncIterator]() {
|
|
247
|
-
|
|
342
|
+
o && !s && (s = !0, console.info(`[kai] ${h.slice(2)}`)), yield `${h}
|
|
248
343
|
|
|
249
|
-
`, yield
|
|
250
|
-
for (const
|
|
251
|
-
await
|
|
252
|
-
yield
|
|
344
|
+
`, yield m(l, { choices: [{ index: 0, delta: { role: "assistant" }, finish_reason: null }] });
|
|
345
|
+
for (const y of L(d, r))
|
|
346
|
+
await F(n), yield m(l, { choices: [{ index: 0, delta: { content: y }, finish_reason: null }] });
|
|
347
|
+
yield m(l, {
|
|
253
348
|
choices: [{ index: 0, delta: {}, finish_reason: "stop" }],
|
|
254
349
|
usage: { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 }
|
|
255
350
|
}), yield `data: [DONE]
|
|
@@ -260,27 +355,32 @@ function z(t = {}) {
|
|
|
260
355
|
};
|
|
261
356
|
}
|
|
262
357
|
export {
|
|
263
|
-
|
|
264
|
-
|
|
358
|
+
k as DEFAULT_MOCK_REPLIES,
|
|
359
|
+
h as MOCK_BANNER,
|
|
265
360
|
w as MOCK_MARKER,
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
361
|
+
j as MOCK_MARKER_KEY,
|
|
362
|
+
$ as MOCK_MODEL_ID,
|
|
363
|
+
B as addSuggestion,
|
|
364
|
+
G as appendMessage,
|
|
365
|
+
T as appendReasoningPart,
|
|
366
|
+
z as appendText,
|
|
367
|
+
x as appendTextPart,
|
|
368
|
+
Z as bindThreadMessages,
|
|
369
|
+
g as classifyTool,
|
|
370
|
+
Q as createAssistantStream,
|
|
371
|
+
ne as createMockResponder,
|
|
372
|
+
te as createSaveScheduler,
|
|
373
|
+
v as createThreadSessions,
|
|
374
|
+
p as fingerprint,
|
|
375
|
+
X as onStreamSettled,
|
|
376
|
+
ee as parseStoredThread,
|
|
377
|
+
q as partsToText,
|
|
378
|
+
W as removeMessage,
|
|
379
|
+
H as removeSuggestion,
|
|
380
|
+
Y as textMessage,
|
|
381
|
+
V as updateMessage,
|
|
382
|
+
D as updateThreadMessages,
|
|
383
|
+
A as upsertCardPart,
|
|
384
|
+
J as upsertMessage,
|
|
385
|
+
M as upsertToolPart
|
|
286
386
|
};
|
package/dist/types.d.ts
CHANGED
|
@@ -27,9 +27,11 @@ export interface ConversationSummary {
|
|
|
27
27
|
id: string;
|
|
28
28
|
title: string;
|
|
29
29
|
groupId?: string;
|
|
30
|
-
scope
|
|
30
|
+
/** Only meaningful to scope-aware consumers; the list never reads it. */
|
|
31
|
+
scope?: ConversationScope;
|
|
31
32
|
messageCount: number;
|
|
32
|
-
|
|
33
|
+
/** Fallback for the auto relative time when updatedAt is absent. */
|
|
34
|
+
lastMessageAt?: string;
|
|
33
35
|
updatedAt: string;
|
|
34
36
|
/** Right-aligned trailing text on the row — a count, status, or "days ago".
|
|
35
37
|
* When omitted, a short relative time is auto-derived from `updatedAt`
|