@dxos/plugin-assistant 0.8.4-main.fd6878d → 0.8.4-staging.60fe92afc8
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/LICENSE +102 -5
- package/PLUGIN.mdl +439 -0
- package/README.md +1 -1
- package/dist/lib/neutral/AgentArticle-K7XM46OQ.mjs +160 -0
- package/dist/lib/neutral/AgentArticle-K7XM46OQ.mjs.map +7 -0
- package/dist/lib/neutral/AgentProperties-LFTEYJ54.mjs +40 -0
- package/dist/lib/neutral/AgentProperties-LFTEYJ54.mjs.map +7 -0
- package/dist/lib/neutral/AssistantPlugin.mjs +10 -0
- package/dist/lib/neutral/AssistantPlugin.node.mjs +72 -0
- package/dist/lib/neutral/AssistantPlugin.node.mjs.map +7 -0
- package/dist/lib/neutral/AssistantPlugin.workerd.mjs +40 -0
- package/dist/lib/neutral/AssistantPlugin.workerd.mjs.map +7 -0
- package/dist/lib/neutral/AssistantSettings-GG52BLKS.mjs +40 -0
- package/dist/lib/neutral/AssistantSettings-GG52BLKS.mjs.map +7 -0
- package/dist/lib/neutral/BlueprintArticle-ZBOZNZM7.mjs +27 -0
- package/dist/lib/neutral/BlueprintArticle-ZBOZNZM7.mjs.map +7 -0
- package/dist/lib/neutral/ChatArticle-VNVZCDUR.mjs +8 -0
- package/dist/lib/neutral/ChatCompanion-LBUHYWQG.mjs +128 -0
- package/dist/lib/neutral/ChatCompanion-LBUHYWQG.mjs.map +7 -0
- package/dist/lib/neutral/ChatDialog-DCA6FLOV.mjs +73 -0
- package/dist/lib/neutral/ChatDialog-DCA6FLOV.mjs.map +7 -0
- package/dist/lib/neutral/PlanArticle-TS5ULWYS.mjs +28 -0
- package/dist/lib/neutral/PlanArticle-TS5ULWYS.mjs.map +7 -0
- package/dist/lib/neutral/RoutineArticle-5NYXHRG6.mjs +119 -0
- package/dist/lib/neutral/RoutineArticle-5NYXHRG6.mjs.map +7 -0
- package/dist/lib/neutral/RoutineList-SO5ETHNT.mjs +48 -0
- package/dist/lib/neutral/RoutineList-SO5ETHNT.mjs.map +7 -0
- package/dist/lib/neutral/RoutineProperties-FISLMW2R.mjs +17 -0
- package/dist/lib/neutral/RoutineProperties-FISLMW2R.mjs.map +7 -0
- package/dist/lib/neutral/TracePanel-KTZJ6JNR.mjs +167 -0
- package/dist/lib/neutral/TracePanel-KTZJ6JNR.mjs.map +7 -0
- package/dist/lib/neutral/TriggerStatus-X7Y5JFZJ.mjs +93 -0
- package/dist/lib/neutral/TriggerStatus-X7Y5JFZJ.mjs.map +7 -0
- package/dist/lib/neutral/agent-hydrator-PJBYVMBW.mjs +24 -0
- package/dist/lib/neutral/agent-hydrator-PJBYVMBW.mjs.map +7 -0
- package/dist/lib/neutral/agent-service-WCAP5MLI.mjs +32 -0
- package/dist/lib/neutral/agent-service-WCAP5MLI.mjs.map +7 -0
- package/dist/lib/neutral/ai-context-7WRHWYXY.mjs +42 -0
- package/dist/lib/neutral/ai-context-7WRHWYXY.mjs.map +7 -0
- package/dist/lib/neutral/ai-service-AADUIKBY.mjs +40 -0
- package/dist/lib/neutral/ai-service-AADUIKBY.mjs.map +7 -0
- package/dist/lib/neutral/app-graph-builder-WUFHQH3Y.mjs +232 -0
- package/dist/lib/neutral/app-graph-builder-WUFHQH3Y.mjs.map +7 -0
- package/dist/lib/neutral/automation-templates-M2XQWGR6.mjs +115 -0
- package/dist/lib/neutral/automation-templates-M2XQWGR6.mjs.map +7 -0
- package/dist/lib/neutral/blueprint-definition-MH2QLYQH.mjs +39 -0
- package/dist/lib/neutral/blueprint-definition-MH2QLYQH.mjs.map +7 -0
- package/dist/lib/neutral/blueprints/index.mjs +8 -0
- package/dist/lib/neutral/capabilities/index.mjs +45 -0
- package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
- package/dist/lib/neutral/chunk-5H6UJHLF.mjs +30 -0
- package/dist/lib/neutral/chunk-5H6UJHLF.mjs.map +7 -0
- package/dist/lib/neutral/chunk-HLANPOBA.mjs +10 -0
- package/dist/lib/neutral/chunk-HLANPOBA.mjs.map +7 -0
- package/dist/lib/neutral/chunk-KLYLW4WH.mjs +9 -0
- package/dist/lib/neutral/chunk-KLYLW4WH.mjs.map +7 -0
- package/dist/lib/neutral/chunk-QAZMOFPI.mjs +130 -0
- package/dist/lib/neutral/chunk-QAZMOFPI.mjs.map +7 -0
- package/dist/lib/neutral/chunk-RKVVK3R3.mjs +110 -0
- package/dist/lib/neutral/chunk-RKVVK3R3.mjs.map +7 -0
- package/dist/lib/neutral/chunk-SMFJD7BP.mjs +8 -0
- package/dist/lib/neutral/chunk-SMFJD7BP.mjs.map +7 -0
- package/dist/lib/neutral/chunk-VTK5R4H3.mjs +9 -0
- package/dist/lib/neutral/chunk-VTK5R4H3.mjs.map +7 -0
- package/dist/lib/neutral/chunk-XYHPOGTK.mjs +43 -0
- package/dist/lib/neutral/chunk-XYHPOGTK.mjs.map +7 -0
- package/dist/lib/neutral/chunk-YXRGZYYH.mjs +392 -0
- package/dist/lib/neutral/chunk-YXRGZYYH.mjs.map +7 -0
- package/dist/lib/neutral/companion-chat-provisioner-YZZ73P6E.mjs +120 -0
- package/dist/lib/neutral/companion-chat-provisioner-YZZ73P6E.mjs.map +7 -0
- package/dist/lib/neutral/components/index.mjs +2410 -0
- package/dist/lib/neutral/components/index.mjs.map +7 -0
- package/dist/lib/neutral/containers/index.mjs +29 -0
- package/dist/lib/neutral/containers/index.mjs.map +7 -0
- package/dist/lib/neutral/create-chat-SGGQ6HVN.mjs +54 -0
- package/dist/lib/neutral/create-chat-SGGQ6HVN.mjs.map +7 -0
- package/dist/lib/neutral/create-object-U2SOFZLR.mjs +92 -0
- package/dist/lib/neutral/create-object-U2SOFZLR.mjs.map +7 -0
- package/dist/lib/neutral/edge-model-resolver-BBVOJBGJ.mjs +55 -0
- package/dist/lib/neutral/edge-model-resolver-BBVOJBGJ.mjs.map +7 -0
- package/dist/lib/neutral/ensure-companion-chat-AMOF3C66.mjs +58 -0
- package/dist/lib/neutral/ensure-companion-chat-AMOF3C66.mjs.map +7 -0
- package/dist/lib/neutral/execution-graph/index.mjs +703 -0
- package/dist/lib/neutral/execution-graph/index.mjs.map +7 -0
- package/dist/lib/neutral/fork-chat-34KEF4ZJ.mjs +95 -0
- package/dist/lib/neutral/fork-chat-34KEF4ZJ.mjs.map +7 -0
- package/dist/lib/neutral/hooks/index.mjs +992 -0
- package/dist/lib/neutral/hooks/index.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +38 -0
- package/dist/lib/neutral/index.mjs.map +7 -0
- package/dist/lib/neutral/integration-provider-RBD3AFJU.mjs +71 -0
- package/dist/lib/neutral/integration-provider-RBD3AFJU.mjs.map +7 -0
- package/dist/lib/neutral/local-model-resolver-I2BENFFS.mjs +24 -0
- package/dist/lib/neutral/local-model-resolver-I2BENFFS.mjs.map +7 -0
- package/dist/lib/neutral/markdown-extension-YMIFDMYF.mjs +110 -0
- package/dist/lib/neutral/markdown-extension-YMIFDMYF.mjs.map +7 -0
- package/dist/lib/neutral/meta.json +1 -0
- package/dist/lib/neutral/meta.mjs +12 -0
- package/dist/lib/neutral/meta.mjs.map +7 -0
- package/dist/lib/neutral/migrations-7DEMVBOG.mjs +28 -0
- package/dist/lib/neutral/migrations-7DEMVBOG.mjs.map +7 -0
- package/dist/lib/neutral/operation-handler-SF36MOB5.mjs +13 -0
- package/dist/lib/neutral/operation-handler-SF36MOB5.mjs.map +7 -0
- package/dist/lib/neutral/operations/index.mjs +8 -0
- package/dist/lib/neutral/operations/index.mjs.map +7 -0
- package/dist/lib/neutral/plugin.mjs +16 -0
- package/dist/lib/neutral/plugin.mjs.map +7 -0
- package/dist/lib/neutral/react-surface-XRTBW5OJ.mjs +174 -0
- package/dist/lib/neutral/react-surface-XRTBW5OJ.mjs.map +7 -0
- package/dist/lib/neutral/resolve-navigation-targets-ZHIMMH7L.mjs +22 -0
- package/dist/lib/neutral/resolve-navigation-targets-ZHIMMH7L.mjs.map +7 -0
- package/dist/lib/neutral/run-prompt-in-new-chat-D5IIE2C7.mjs +102 -0
- package/dist/lib/neutral/run-prompt-in-new-chat-D5IIE2C7.mjs.map +7 -0
- package/dist/lib/neutral/set-current-chat-VWBPSIMZ.mjs +48 -0
- package/dist/lib/neutral/set-current-chat-VWBPSIMZ.mjs.map +7 -0
- package/dist/lib/neutral/settings-W4BLWQ53.mjs +28 -0
- package/dist/lib/neutral/settings-W4BLWQ53.mjs.map +7 -0
- package/dist/lib/neutral/state-H3G7QCU6.mjs +28 -0
- package/dist/lib/neutral/state-H3G7QCU6.mjs.map +7 -0
- package/dist/lib/neutral/testing.mjs +8 -0
- package/dist/lib/neutral/testing.mjs.map +7 -0
- package/dist/lib/neutral/toggle-trace-panel-debug-JGTB6KVJ.mjs +21 -0
- package/dist/lib/neutral/toggle-trace-panel-debug-JGTB6KVJ.mjs.map +7 -0
- package/dist/lib/neutral/toolkit-GVWXPDLJ.mjs +14 -0
- package/dist/lib/neutral/toolkit-GVWXPDLJ.mjs.map +7 -0
- package/dist/lib/neutral/translations.mjs +179 -0
- package/dist/lib/neutral/translations.mjs.map +7 -0
- package/dist/lib/neutral/types/index.mjs +20 -0
- package/dist/lib/neutral/types/index.mjs.map +7 -0
- package/dist/lib/neutral/update-chat-name-Y7JWIP64.mjs +61 -0
- package/dist/lib/neutral/update-chat-name-Y7JWIP64.mjs.map +7 -0
- package/dist/types/src/AssistantPlugin.d.ts +4 -1
- package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
- package/dist/types/src/AssistantPlugin.node.d.ts +5 -0
- package/dist/types/src/AssistantPlugin.node.d.ts.map +1 -0
- package/dist/types/src/AssistantPlugin.test.d.ts +2 -0
- package/dist/types/src/AssistantPlugin.test.d.ts.map +1 -0
- package/dist/types/src/AssistantPlugin.workerd.d.ts +4 -0
- package/dist/types/src/AssistantPlugin.workerd.d.ts.map +1 -0
- package/dist/types/src/blueprints/assistant/blueprint.d.ts +4 -0
- package/dist/types/src/blueprints/assistant/blueprint.d.ts.map +1 -0
- package/dist/types/src/blueprints/assistant/blueprint.node.test.d.ts +2 -0
- package/dist/types/src/blueprints/assistant/blueprint.node.test.d.ts.map +1 -0
- package/dist/types/src/blueprints/assistant/index.d.ts +2 -0
- package/dist/types/src/blueprints/assistant/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/index.d.ts +2 -0
- package/dist/types/src/blueprints/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/agent-hydrator.d.ts +5 -0
- package/dist/types/src/capabilities/agent-hydrator.d.ts.map +1 -0
- package/dist/types/src/capabilities/agent-service.d.ts +6 -0
- package/dist/types/src/capabilities/agent-service.d.ts.map +1 -0
- package/dist/types/src/capabilities/ai-context.d.ts +6 -0
- package/dist/types/src/capabilities/ai-context.d.ts.map +1 -0
- package/dist/types/src/capabilities/ai-service.d.ts +4 -3
- package/dist/types/src/capabilities/ai-service.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts +5 -2
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/automation-templates.d.ts +6 -0
- package/dist/types/src/capabilities/automation-templates.d.ts.map +1 -0
- package/dist/types/src/capabilities/blueprint-definition.d.ts +4 -2
- package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
- package/dist/types/src/capabilities/companion-chat-provisioner.d.ts +9 -0
- package/dist/types/src/capabilities/companion-chat-provisioner.d.ts.map +1 -0
- package/dist/types/src/capabilities/create-object.d.ts +31 -0
- package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
- package/dist/types/src/capabilities/edge-model-resolver.d.ts +6 -4
- package/dist/types/src/capabilities/edge-model-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +62 -9
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/integration-provider.d.ts +5 -0
- package/dist/types/src/capabilities/integration-provider.d.ts.map +1 -0
- package/dist/types/src/capabilities/local-model-resolver.d.ts +16 -0
- package/dist/types/src/capabilities/local-model-resolver.d.ts.map +1 -0
- package/dist/types/src/capabilities/markdown-extension.d.ts +5 -0
- package/dist/types/src/capabilities/markdown-extension.d.ts.map +1 -0
- package/dist/types/src/capabilities/migrations.d.ts +6 -0
- package/dist/types/src/capabilities/migrations.d.ts.map +1 -0
- package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
- package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface.d.ts +3 -2
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings.d.ts +4 -2
- package/dist/types/src/capabilities/settings.d.ts.map +1 -1
- package/dist/types/src/capabilities/state.d.ts +21 -0
- package/dist/types/src/capabilities/state.d.ts.map +1 -0
- package/dist/types/src/capabilities/toolkit.d.ts +4 -3
- package/dist/types/src/capabilities/toolkit.d.ts.map +1 -1
- package/dist/types/src/components/AgentProperties/AgentProperties.d.ts +7 -0
- package/dist/types/src/components/AgentProperties/AgentProperties.d.ts.map +1 -0
- package/dist/types/src/components/AgentProperties/AgentProperties.stories.d.ts +15 -0
- package/dist/types/src/components/AgentProperties/AgentProperties.stories.d.ts.map +1 -0
- package/dist/types/src/components/AgentProperties/index.d.ts +2 -0
- package/dist/types/src/components/AgentProperties/index.d.ts.map +1 -0
- package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts +4 -4
- package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts.map +1 -1
- package/dist/types/src/components/AssistantSettings/AssistantSettings.stories.d.ts +15 -0
- package/dist/types/src/components/AssistantSettings/AssistantSettings.stories.d.ts.map +1 -0
- package/dist/types/src/components/AssistantSettings/index.d.ts +1 -1
- package/dist/types/src/components/AssistantSettings/index.d.ts.map +1 -1
- package/dist/types/src/components/Chat/Chat.d.ts +52 -31
- package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
- package/dist/types/src/components/Chat/context.d.ts +29 -0
- package/dist/types/src/components/Chat/context.d.ts.map +1 -0
- package/dist/types/src/components/Chat/events.d.ts +13 -1
- package/dist/types/src/components/Chat/events.d.ts.map +1 -1
- package/dist/types/src/components/ChatPrompt/ChatActions.d.ts +3 -2
- package/dist/types/src/components/ChatPrompt/ChatActions.d.ts.map +1 -1
- package/dist/types/src/components/ChatPrompt/ChatMcpErrors.d.ts +12 -0
- package/dist/types/src/components/ChatPrompt/ChatMcpErrors.d.ts.map +1 -0
- package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts +13 -8
- package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts.map +1 -1
- package/dist/types/src/components/ChatPrompt/ChatOptions.stories.d.ts +19 -0
- package/dist/types/src/components/ChatPrompt/ChatOptions.stories.d.ts.map +1 -0
- package/dist/types/src/components/ChatPrompt/ChatPresets.d.ts +2 -9
- package/dist/types/src/components/ChatPrompt/ChatPresets.d.ts.map +1 -1
- package/dist/types/src/components/ChatPrompt/ChatPrompt.d.ts +27 -0
- package/dist/types/src/components/ChatPrompt/ChatPrompt.d.ts.map +1 -0
- package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts +5 -6
- package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts.map +1 -1
- package/dist/types/src/components/ChatPrompt/ChatStatus.d.ts +20 -0
- package/dist/types/src/components/ChatPrompt/ChatStatus.d.ts.map +1 -0
- package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts +6 -4
- package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts.map +1 -1
- package/dist/types/src/components/ChatPrompt/index.d.ts +3 -0
- package/dist/types/src/components/ChatPrompt/index.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/Anchor.stories.d.ts +14 -0
- package/dist/types/src/components/ChatThread/Anchor.stories.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/ChatThread.d.ts +16 -11
- package/dist/types/src/components/ChatThread/ChatThread.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +24 -215
- package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/Link.d.ts +2 -2
- package/dist/types/src/components/ChatThread/Link.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/MarkdownStream.stories.d.ts +42 -0
- package/dist/types/src/components/ChatThread/MarkdownStream.stories.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/registry.d.ts +29 -0
- package/dist/types/src/components/ChatThread/registry.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/sync.d.ts +69 -0
- package/dist/types/src/components/ChatThread/sync.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/sync.test.d.ts +2 -0
- package/dist/types/src/components/ChatThread/sync.test.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/tool-widget-state.d.ts +18 -0
- package/dist/types/src/components/ChatThread/tool-widget-state.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/tool-widget-state.test.d.ts +2 -0
- package/dist/types/src/components/ChatThread/tool-widget-state.test.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/widgets/FallbackWidget.d.ts +8 -0
- package/dist/types/src/components/ChatThread/widgets/FallbackWidget.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.d.ts +25 -0
- package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.stories.d.ts +18 -0
- package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.stories.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/widgets/ReferenceWidget.d.ts +9 -0
- package/dist/types/src/components/ChatThread/widgets/ReferenceWidget.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/widgets/SelectWidget.d.ts +14 -0
- package/dist/types/src/components/ChatThread/widgets/SelectWidget.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/widgets/StatsWidget.d.ts +12 -0
- package/dist/types/src/components/ChatThread/widgets/StatsWidget.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/widgets/StatusWidget.d.ts +12 -0
- package/dist/types/src/components/ChatThread/widgets/StatusWidget.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/widgets/SuggestionWidget.d.ts +11 -0
- package/dist/types/src/components/ChatThread/widgets/SuggestionWidget.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/widgets/SummaryWidget.d.ts +5 -0
- package/dist/types/src/components/ChatThread/widgets/SummaryWidget.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/widgets/ToolWidget.d.ts +9 -0
- package/dist/types/src/components/ChatThread/widgets/ToolWidget.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/widgets/ToolWidget.stories.d.ts +15 -0
- package/dist/types/src/components/ChatThread/widgets/ToolWidget.stories.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/widgets/defaults.d.ts +5 -0
- package/dist/types/src/components/ChatThread/widgets/defaults.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/widgets/index.d.ts +10 -0
- package/dist/types/src/components/ChatThread/widgets/index.d.ts.map +1 -0
- package/dist/types/src/components/ProcessTree/ProcessTree.d.ts +11 -0
- package/dist/types/src/components/ProcessTree/ProcessTree.d.ts.map +1 -0
- package/dist/types/src/components/ProcessTree/ProcessTree.stories.d.ts +7 -0
- package/dist/types/src/components/ProcessTree/ProcessTree.stories.d.ts.map +1 -0
- package/dist/types/src/components/ProcessTree/index.d.ts +2 -0
- package/dist/types/src/components/ProcessTree/index.d.ts.map +1 -0
- package/dist/types/src/components/RoutineProperties/RoutineProperties.d.ts +7 -0
- package/dist/types/src/components/RoutineProperties/RoutineProperties.d.ts.map +1 -0
- package/dist/types/src/components/RoutineProperties/RoutineProperties.stories.d.ts +15 -0
- package/dist/types/src/components/RoutineProperties/RoutineProperties.stories.d.ts.map +1 -0
- package/dist/types/src/components/RoutineProperties/index.d.ts +2 -0
- package/dist/types/src/components/RoutineProperties/index.d.ts.map +1 -0
- package/dist/types/src/components/TaskList/TaskList.d.ts +10 -0
- package/dist/types/src/components/TaskList/TaskList.d.ts.map +1 -0
- package/dist/types/src/components/TaskList/TaskList.stories.d.ts +16 -0
- package/dist/types/src/components/TaskList/TaskList.stories.d.ts.map +1 -0
- package/dist/types/src/components/TaskList/index.d.ts +2 -0
- package/dist/types/src/components/TaskList/index.d.ts.map +1 -0
- package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts +10 -11
- package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +1 -1
- package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts +13 -7
- package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +13 -4
- package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +1 -1
- package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts +10 -2
- package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +1 -1
- package/dist/types/src/components/TemplateEditor/extensions/handlebars-extension.d.ts +12 -0
- package/dist/types/src/components/TemplateEditor/extensions/handlebars-extension.d.ts.map +1 -0
- package/dist/types/src/components/TemplateEditor/extensions/index.d.ts +3 -0
- package/dist/types/src/components/TemplateEditor/extensions/index.d.ts.map +1 -0
- package/dist/types/src/components/TemplateEditor/extensions/xml-extension.d.ts +8 -0
- package/dist/types/src/components/TemplateEditor/extensions/xml-extension.d.ts.map +1 -0
- package/dist/types/src/components/ToolBlock/ToolBlock.d.ts +12 -0
- package/dist/types/src/components/ToolBlock/ToolBlock.d.ts.map +1 -0
- package/dist/types/src/components/ToolBlock/ToolBlockWidget.d.ts +2 -0
- package/dist/types/src/components/ToolBlock/ToolBlockWidget.d.ts.map +1 -0
- package/dist/types/src/components/ToolBlock/index.d.ts +3 -0
- package/dist/types/src/components/ToolBlock/index.d.ts.map +1 -0
- package/dist/types/src/components/Toolbox/Toolbox.d.ts +15 -16
- package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
- package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts +15 -5
- package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +7 -9
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/constants.d.ts +5 -0
- package/dist/types/src/constants.d.ts.map +1 -0
- package/dist/types/src/containers/AgentArticle/AgentArticle.d.ts +6 -0
- package/dist/types/src/containers/AgentArticle/AgentArticle.d.ts.map +1 -0
- package/dist/types/src/containers/AgentArticle/AgentArticle.stories.d.ts +19 -0
- package/dist/types/src/containers/AgentArticle/AgentArticle.stories.d.ts.map +1 -0
- package/dist/types/src/containers/AgentArticle/index.d.ts +2 -0
- package/dist/types/src/containers/AgentArticle/index.d.ts.map +1 -0
- package/dist/types/src/containers/AgentProperties/AgentProperties.d.ts +6 -0
- package/dist/types/src/containers/AgentProperties/AgentProperties.d.ts.map +1 -0
- package/dist/types/src/containers/AgentProperties/index.d.ts +2 -0
- package/dist/types/src/containers/AgentProperties/index.d.ts.map +1 -0
- package/dist/types/src/containers/BlueprintArticle/BlueprintArticle.d.ts +6 -0
- package/dist/types/src/containers/BlueprintArticle/BlueprintArticle.d.ts.map +1 -0
- package/dist/types/src/containers/BlueprintArticle/index.d.ts +2 -0
- package/dist/types/src/containers/BlueprintArticle/index.d.ts.map +1 -0
- package/dist/types/src/containers/ChatArticle/ChatArticle.d.ts +25 -0
- package/dist/types/src/containers/ChatArticle/ChatArticle.d.ts.map +1 -0
- package/dist/types/src/containers/ChatArticle/ChatArticle.stories.d.ts +15 -0
- package/dist/types/src/containers/ChatArticle/ChatArticle.stories.d.ts.map +1 -0
- package/dist/types/src/containers/ChatArticle/index.d.ts +2 -0
- package/dist/types/src/containers/ChatArticle/index.d.ts.map +1 -0
- package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts +26 -0
- package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts.map +1 -0
- package/dist/types/src/containers/ChatCompanion/index.d.ts +2 -0
- package/dist/types/src/containers/ChatCompanion/index.d.ts.map +1 -0
- package/dist/types/src/{components → containers/ChatDialog}/ChatDialog.d.ts +2 -3
- package/dist/types/src/containers/ChatDialog/ChatDialog.d.ts.map +1 -0
- package/dist/types/src/containers/ChatDialog/index.d.ts +2 -0
- package/dist/types/src/containers/ChatDialog/index.d.ts.map +1 -0
- package/dist/types/src/containers/PlanArticle/PlanArticle.d.ts +6 -0
- package/dist/types/src/containers/PlanArticle/PlanArticle.d.ts.map +1 -0
- package/dist/types/src/containers/PlanArticle/index.d.ts +2 -0
- package/dist/types/src/containers/PlanArticle/index.d.ts.map +1 -0
- package/dist/types/src/containers/RoutineArticle/RoutineArticle.d.ts +6 -0
- package/dist/types/src/containers/RoutineArticle/RoutineArticle.d.ts.map +1 -0
- package/dist/types/src/containers/RoutineArticle/RoutineArticle.stories.d.ts +15 -0
- package/dist/types/src/containers/RoutineArticle/RoutineArticle.stories.d.ts.map +1 -0
- package/dist/types/src/containers/RoutineArticle/index.d.ts +2 -0
- package/dist/types/src/containers/RoutineArticle/index.d.ts.map +1 -0
- package/dist/types/src/containers/RoutineList/RoutineList.d.ts +6 -0
- package/dist/types/src/containers/RoutineList/RoutineList.d.ts.map +1 -0
- package/dist/types/src/containers/RoutineList/RoutineList.stories.d.ts +21 -0
- package/dist/types/src/containers/RoutineList/RoutineList.stories.d.ts.map +1 -0
- package/dist/types/src/containers/RoutineList/index.d.ts +2 -0
- package/dist/types/src/containers/RoutineList/index.d.ts.map +1 -0
- package/dist/types/src/containers/TracePanel/TracePanel.d.ts +8 -0
- package/dist/types/src/containers/TracePanel/TracePanel.d.ts.map +1 -0
- package/dist/types/src/containers/TracePanel/TracePanel.stories.d.ts +16 -0
- package/dist/types/src/containers/TracePanel/TracePanel.stories.d.ts.map +1 -0
- package/dist/types/src/containers/TracePanel/dxn-extractor.d.ts +19 -0
- package/dist/types/src/containers/TracePanel/dxn-extractor.d.ts.map +1 -0
- package/dist/types/src/containers/TracePanel/dxn-extractor.test.d.ts +2 -0
- package/dist/types/src/containers/TracePanel/dxn-extractor.test.d.ts.map +1 -0
- package/dist/types/src/containers/TracePanel/index.d.ts +4 -0
- package/dist/types/src/containers/TracePanel/index.d.ts.map +1 -0
- package/dist/types/src/containers/TracePanel/testing/index.d.ts +3 -0
- package/dist/types/src/containers/TracePanel/testing/index.d.ts.map +1 -0
- package/dist/types/src/containers/TracePanel/testing/simulated-agent.d.ts +14 -0
- package/dist/types/src/containers/TracePanel/testing/simulated-agent.d.ts.map +1 -0
- package/dist/types/src/containers/TracePanel/testing/snapshot-playback.d.ts +12 -0
- package/dist/types/src/containers/TracePanel/testing/snapshot-playback.d.ts.map +1 -0
- package/dist/types/src/containers/TriggerStatus/TriggerStatus.d.ts +5 -0
- package/dist/types/src/containers/TriggerStatus/TriggerStatus.d.ts.map +1 -0
- package/dist/types/src/containers/TriggerStatus/index.d.ts +2 -0
- package/dist/types/src/containers/TriggerStatus/index.d.ts.map +1 -0
- package/dist/types/src/containers/index.d.ts +13 -0
- package/dist/types/src/containers/index.d.ts.map +1 -0
- package/dist/types/src/execution-graph/execution-graph.d.ts +108 -0
- package/dist/types/src/execution-graph/execution-graph.d.ts.map +1 -0
- package/dist/types/src/execution-graph/execution-graph.test.d.ts +2 -0
- package/dist/types/src/execution-graph/execution-graph.test.d.ts.map +1 -0
- package/dist/types/src/execution-graph/index.d.ts +3 -0
- package/dist/types/src/execution-graph/index.d.ts.map +1 -0
- package/dist/types/src/execution-graph/remote-snapshot.test.d.ts +2 -0
- package/dist/types/src/execution-graph/remote-snapshot.test.d.ts.map +1 -0
- package/dist/types/src/execution-graph/span-tree.d.ts +76 -0
- package/dist/types/src/execution-graph/span-tree.d.ts.map +1 -0
- package/dist/types/src/execution-graph/span-tree.test.d.ts +2 -0
- package/dist/types/src/execution-graph/span-tree.test.d.ts.map +1 -0
- package/dist/types/src/execution-graph/sub-agent-delegation.test.d.ts +2 -0
- package/dist/types/src/execution-graph/sub-agent-delegation.test.d.ts.map +1 -0
- package/dist/types/src/execution-graph/testing/collect-trace-events.d.ts +40 -0
- package/dist/types/src/execution-graph/testing/collect-trace-events.d.ts.map +1 -0
- package/dist/types/src/execution-graph/testing/index.d.ts +2 -0
- package/dist/types/src/execution-graph/testing/index.d.ts.map +1 -0
- package/dist/types/src/extensions/index.d.ts +2 -0
- package/dist/types/src/extensions/index.d.ts.map +1 -0
- package/dist/types/src/extensions/prompt-extension.d.ts +10 -0
- package/dist/types/src/extensions/prompt-extension.d.ts.map +1 -0
- package/dist/types/src/feed-logger.d.ts +13 -0
- package/dist/types/src/feed-logger.d.ts.map +1 -0
- package/dist/types/src/functions/services.test.d.ts +2 -0
- package/dist/types/src/functions/services.test.d.ts.map +1 -0
- package/dist/types/src/hooks/index.d.ts +8 -4
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useBlueprintRegistry.d.ts +59 -14
- package/dist/types/src/hooks/useBlueprintRegistry.d.ts.map +1 -1
- package/dist/types/src/hooks/useChatKeymap.d.ts +12 -0
- package/dist/types/src/hooks/useChatKeymap.d.ts.map +1 -0
- package/dist/types/src/hooks/useChatProcessor.d.ts +9 -12
- package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
- package/dist/types/src/hooks/useChatServices.d.ts +9 -8
- package/dist/types/src/hooks/useChatServices.d.ts.map +1 -1
- package/dist/types/src/hooks/useChatToolbarActions.d.ts +8 -0
- package/dist/types/src/hooks/useChatToolbarActions.d.ts.map +1 -0
- package/dist/types/src/hooks/useContextBinder.d.ts +5 -0
- package/dist/types/src/hooks/useContextBinder.d.ts.map +1 -0
- package/dist/types/src/hooks/useContextObjects.d.ts +16 -0
- package/dist/types/src/hooks/useContextObjects.d.ts.map +1 -0
- package/dist/types/src/hooks/useDebug.d.ts +10 -0
- package/dist/types/src/hooks/useDebug.d.ts.map +1 -0
- package/dist/types/src/hooks/useFilteredTypes.d.ts +3 -0
- package/dist/types/src/hooks/useFilteredTypes.d.ts.map +1 -0
- package/dist/types/src/{stories/hooks → hooks}/useFlush.d.ts +1 -1
- package/dist/types/src/hooks/useFlush.d.ts.map +1 -0
- package/dist/types/src/hooks/usePresets.d.ts +3 -3
- package/dist/types/src/hooks/usePresets.d.ts.map +1 -1
- package/dist/types/src/hooks/useReferencesProvider.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +2 -4
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +6 -4
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/operations/create-chat.d.ts +5 -0
- package/dist/types/src/operations/create-chat.d.ts.map +1 -0
- package/dist/types/src/operations/ensure-companion-chat.d.ts +5 -0
- package/dist/types/src/operations/ensure-companion-chat.d.ts.map +1 -0
- package/dist/types/src/operations/fork-chat.d.ts +5 -0
- package/dist/types/src/operations/fork-chat.d.ts.map +1 -0
- package/dist/types/src/operations/index.d.ts +3 -0
- package/dist/types/src/operations/index.d.ts.map +1 -0
- package/dist/types/src/operations/prompt.node.test.d.ts +2 -0
- package/dist/types/src/operations/prompt.node.test.d.ts.map +1 -0
- package/dist/types/src/operations/resolve-navigation-targets.d.ts +17 -0
- package/dist/types/src/operations/resolve-navigation-targets.d.ts.map +1 -0
- package/dist/types/src/operations/run-prompt-in-new-chat.d.ts +5 -0
- package/dist/types/src/operations/run-prompt-in-new-chat.d.ts.map +1 -0
- package/dist/types/src/operations/set-current-chat.d.ts +5 -0
- package/dist/types/src/operations/set-current-chat.d.ts.map +1 -0
- package/dist/types/src/operations/toggle-trace-panel-debug.d.ts +5 -0
- package/dist/types/src/operations/toggle-trace-panel-debug.d.ts.map +1 -0
- package/dist/types/src/operations/update-chat-name.d.ts +5 -0
- package/dist/types/src/operations/update-chat-name.d.ts.map +1 -0
- package/dist/types/src/paths.d.ts +3 -0
- package/dist/types/src/paths.d.ts.map +1 -0
- package/dist/types/src/plugin.d.ts +4 -0
- package/dist/types/src/plugin.d.ts.map +1 -0
- package/dist/types/src/processor/index.d.ts +3 -0
- package/dist/types/src/processor/index.d.ts.map +1 -0
- package/dist/types/src/{hooks → processor}/presets.d.ts +2 -2
- package/dist/types/src/processor/presets.d.ts.map +1 -0
- package/dist/types/src/processor/processor.d.ts +317 -0
- package/dist/types/src/processor/processor.d.ts.map +1 -0
- package/dist/types/src/processor/processor.node.test.d.ts +2 -0
- package/dist/types/src/processor/processor.node.test.d.ts.map +1 -0
- package/dist/types/src/templates/automation-templates.test.d.ts +2 -0
- package/dist/types/src/templates/automation-templates.test.d.ts.map +1 -0
- package/dist/types/src/templates/daily-digest.d.ts +3 -0
- package/dist/types/src/templates/daily-digest.d.ts.map +1 -0
- package/dist/types/src/templates/index.d.ts +4 -0
- package/dist/types/src/templates/index.d.ts.map +1 -0
- package/dist/types/src/templates/research-brief.d.ts +3 -0
- package/dist/types/src/templates/research-brief.d.ts.map +1 -0
- package/dist/types/src/templates/scaffold.d.ts +17 -0
- package/dist/types/src/templates/scaffold.d.ts.map +1 -0
- package/dist/types/src/testing/index.d.ts +3 -1
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/snapshot.d.ts +21 -0
- package/dist/types/src/testing/snapshot.d.ts.map +1 -0
- package/dist/types/src/testing/test-generator.d.ts +7 -0
- package/dist/types/src/testing/test-generator.d.ts.map +1 -0
- package/dist/types/src/testing/test-generator.test.d.ts +2 -0
- package/dist/types/src/testing/test-generator.test.d.ts.map +1 -0
- package/dist/types/src/testing/test-sequence.d.ts +10 -7
- package/dist/types/src/testing/test-sequence.d.ts.map +1 -1
- package/dist/types/src/testing/test-services.d.ts +2 -2
- package/dist/types/src/testing/test-services.d.ts.map +1 -1
- package/dist/types/src/testing/test-trace.d.ts +5 -0
- package/dist/types/src/testing/test-trace.d.ts.map +1 -0
- package/dist/types/src/testing/trace-timeline.node.test.d.ts +2 -0
- package/dist/types/src/testing/trace-timeline.node.test.d.ts.map +1 -0
- package/dist/types/src/testing.d.ts +2 -0
- package/dist/types/src/testing.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts +2 -76
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/Assistant.d.ts +34 -37
- package/dist/types/src/types/Assistant.d.ts.map +1 -1
- package/dist/types/src/types/AssistantCapabilities.d.ts +30 -0
- package/dist/types/src/types/AssistantCapabilities.d.ts.map +1 -0
- package/dist/types/src/types/AssistantEvents.d.ts +3 -0
- package/dist/types/src/types/AssistantEvents.d.ts.map +1 -0
- package/dist/types/src/types/AssistantOperation.d.ts +153 -0
- package/dist/types/src/types/AssistantOperation.d.ts.map +1 -0
- package/dist/types/src/types/Settings.d.ts +27 -0
- package/dist/types/src/types/Settings.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +9 -2
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/preset.d.ts +12 -0
- package/dist/types/src/types/preset.d.ts.map +1 -0
- package/dist/types/src/types/service.d.ts +13 -213
- package/dist/types/src/types/service.d.ts.map +1 -1
- package/dist/types/src/util/suggestions.d.ts +9 -0
- package/dist/types/src/util/suggestions.d.ts.map +1 -0
- package/dist/types/src/util/suggestions.test.d.ts +2 -0
- package/dist/types/src/util/suggestions.test.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +198 -119
- package/src/AssistantPlugin.conversations.json +1 -0
- package/src/AssistantPlugin.node.ts +90 -0
- package/src/AssistantPlugin.test.ts +213 -0
- package/src/AssistantPlugin.ts +158 -0
- package/src/AssistantPlugin.workerd.ts +41 -0
- package/src/blueprints/assistant/blueprint.node.test.ts +46 -0
- package/src/blueprints/assistant/blueprint.ts +31 -0
- package/src/blueprints/assistant/index.ts +5 -0
- package/src/{components/Timeline → blueprints}/index.ts +1 -1
- package/src/capabilities/agent-hydrator.ts +37 -0
- package/src/capabilities/agent-service.ts +38 -0
- package/src/capabilities/ai-context.ts +48 -0
- package/src/capabilities/ai-service.ts +46 -24
- package/src/capabilities/app-graph-builder.ts +222 -154
- package/src/capabilities/automation-templates.ts +16 -0
- package/src/capabilities/blueprint-definition.ts +58 -25
- package/src/capabilities/companion-chat-provisioner.ts +164 -0
- package/src/capabilities/create-object.ts +100 -0
- package/src/capabilities/edge-model-resolver.ts +66 -25
- package/src/capabilities/index.ts +40 -10
- package/src/capabilities/integration-provider.ts +86 -0
- package/src/capabilities/local-model-resolver.ts +48 -0
- package/src/capabilities/markdown-extension.ts +40 -0
- package/src/capabilities/migrations.ts +28 -0
- package/src/capabilities/operation-handler.ts +16 -0
- package/src/capabilities/react-surface.tsx +158 -129
- package/src/capabilities/settings.ts +24 -12
- package/src/capabilities/state.ts +35 -0
- package/src/capabilities/toolkit.ts +7 -100
- package/src/components/AgentProperties/AgentProperties.stories.tsx +74 -0
- package/src/components/AgentProperties/AgentProperties.tsx +103 -0
- package/src/components/AgentProperties/index.ts +5 -0
- package/src/components/AssistantSettings/AssistantSettings.stories.tsx +35 -0
- package/src/components/AssistantSettings/AssistantSettings.tsx +29 -91
- package/src/components/AssistantSettings/index.ts +2 -2
- package/src/components/Chat/Chat.tsx +238 -297
- package/src/components/Chat/context.ts +39 -0
- package/src/components/Chat/events.ts +21 -1
- package/src/components/ChatPrompt/ChatActions.tsx +36 -32
- package/src/components/ChatPrompt/ChatMcpErrors.tsx +50 -0
- package/src/components/ChatPrompt/ChatOptions.stories.tsx +136 -0
- package/src/components/ChatPrompt/ChatOptions.tsx +405 -42
- package/src/components/ChatPrompt/ChatPresets.tsx +4 -7
- package/src/components/ChatPrompt/ChatPrompt.tsx +180 -0
- package/src/components/ChatPrompt/ChatReferences.tsx +38 -40
- package/src/components/ChatPrompt/ChatStatus.tsx +123 -0
- package/src/components/ChatPrompt/ChatStatusIndicator.tsx +25 -22
- package/src/components/ChatPrompt/index.ts +3 -0
- package/src/components/ChatThread/Anchor.stories.tsx +95 -0
- package/src/components/ChatThread/ChatThread.stories.tsx +98 -219
- package/src/components/ChatThread/ChatThread.tsx +101 -36
- package/src/components/ChatThread/DEBUG.md +41 -0
- package/src/components/ChatThread/Link.tsx +10 -23
- package/src/components/ChatThread/MarkdownStream.stories.tsx +281 -0
- package/src/components/ChatThread/registry.tsx +290 -0
- package/src/components/ChatThread/sync.test.ts +257 -0
- package/src/components/ChatThread/sync.ts +150 -0
- package/src/components/ChatThread/testing/reasoning.md +25 -0
- package/src/components/ChatThread/testing/thinking.md +21 -0
- package/src/components/ChatThread/testing/thread-1.md +30 -0
- package/src/components/ChatThread/testing/thread-2.md +56 -0
- package/src/components/ChatThread/testing/thread-widgets.md +79 -0
- package/src/components/ChatThread/tool-widget-state.test.ts +34 -0
- package/src/components/ChatThread/tool-widget-state.ts +48 -0
- package/src/components/ChatThread/widgets/FallbackWidget.tsx +28 -0
- package/src/components/ChatThread/widgets/ReasoningWidget.stories.tsx +68 -0
- package/src/components/ChatThread/widgets/ReasoningWidget.ts +139 -0
- package/src/components/ChatThread/widgets/ReferenceWidget.ts +33 -0
- package/src/components/ChatThread/widgets/SelectWidget.ts +39 -0
- package/src/components/ChatThread/widgets/StatsWidget.ts +31 -0
- package/src/components/ChatThread/widgets/StatusWidget.ts +53 -0
- package/src/components/ChatThread/widgets/SuggestionWidget.ts +41 -0
- package/src/components/ChatThread/widgets/SummaryWidget.tsx +29 -0
- package/src/components/ChatThread/widgets/ToolWidget.stories.tsx +55 -0
- package/src/components/ChatThread/widgets/ToolWidget.tsx +173 -0
- package/src/components/ChatThread/widgets/defaults.ts +8 -0
- package/src/components/ChatThread/widgets/index.ts +13 -0
- package/src/components/ProcessTree/ProcessTree.stories.tsx +83 -0
- package/src/components/ProcessTree/ProcessTree.tsx +120 -0
- package/src/components/ProcessTree/index.ts +5 -0
- package/src/components/RoutineProperties/RoutineProperties.stories.tsx +59 -0
- package/src/components/RoutineProperties/RoutineProperties.tsx +23 -0
- package/src/components/RoutineProperties/index.ts +5 -0
- package/src/components/TaskList/TaskList.stories.tsx +44 -0
- package/src/components/TaskList/TaskList.tsx +45 -0
- package/src/components/TaskList/index.ts +5 -0
- package/src/components/TemplateEditor/TemplateEditor.stories.tsx +30 -20
- package/src/components/TemplateEditor/TemplateEditor.tsx +60 -72
- package/src/components/TemplateEditor/TemplateForm.stories.tsx +25 -21
- package/src/components/TemplateEditor/TemplateForm.tsx +113 -87
- package/src/components/TemplateEditor/extensions/handlebars-extension.ts +274 -0
- package/src/components/TemplateEditor/extensions/index.ts +6 -0
- package/src/components/TemplateEditor/extensions/xml-extension.ts +64 -0
- package/src/components/ToolBlock/ToolBlock.tsx +152 -0
- package/src/components/ToolBlock/ToolBlockWidget.tsx +5 -0
- package/src/components/ToolBlock/index.ts +6 -0
- package/src/components/Toolbox/Toolbox.stories.tsx +22 -27
- package/src/components/Toolbox/Toolbox.tsx +82 -82
- package/src/components/index.ts +9 -8
- package/src/constants.ts +9 -0
- package/src/containers/AgentArticle/AgentArticle.stories.tsx +124 -0
- package/src/containers/AgentArticle/AgentArticle.tsx +192 -0
- package/src/containers/AgentArticle/index.ts +5 -0
- package/src/containers/AgentProperties/AgentProperties.tsx +43 -0
- package/src/containers/AgentProperties/index.ts +5 -0
- package/src/containers/BlueprintArticle/BlueprintArticle.tsx +29 -0
- package/src/containers/BlueprintArticle/index.ts +5 -0
- package/src/containers/ChatArticle/ChatArticle.stories.tsx +78 -0
- package/src/containers/ChatArticle/ChatArticle.tsx +112 -0
- package/src/containers/ChatArticle/index.ts +5 -0
- package/src/containers/ChatCompanion/ChatCompanion.tsx +127 -0
- package/src/containers/ChatCompanion/index.ts +5 -0
- package/src/containers/ChatDialog/ChatDialog.tsx +67 -0
- package/src/containers/ChatDialog/index.ts +5 -0
- package/src/containers/PlanArticle/PlanArticle.tsx +33 -0
- package/src/containers/PlanArticle/index.ts +5 -0
- package/src/containers/RoutineArticle/RoutineArticle.stories.tsx +75 -0
- package/src/containers/RoutineArticle/RoutineArticle.tsx +109 -0
- package/src/containers/RoutineArticle/index.ts +5 -0
- package/src/containers/RoutineList/RoutineList.stories.tsx +130 -0
- package/src/containers/RoutineList/RoutineList.tsx +50 -0
- package/src/containers/RoutineList/index.ts +5 -0
- package/src/containers/TracePanel/TracePanel.stories.tsx +347 -0
- package/src/containers/TracePanel/TracePanel.tsx +257 -0
- package/src/containers/TracePanel/dxn-extractor.test.ts +153 -0
- package/src/containers/TracePanel/dxn-extractor.ts +166 -0
- package/src/containers/TracePanel/index.ts +9 -0
- package/src/containers/TracePanel/testing/index.ts +6 -0
- package/src/containers/TracePanel/testing/simulated-agent.ts +114 -0
- package/src/containers/TracePanel/testing/snapshot-playback.ts +45 -0
- package/src/containers/TriggerStatus/TriggerStatus.tsx +130 -0
- package/src/containers/TriggerStatus/index.ts +5 -0
- package/src/containers/index.ts +17 -0
- package/src/execution-graph/SPEC.md +690 -0
- package/src/execution-graph/execution-graph.test.ts +891 -0
- package/src/execution-graph/execution-graph.ts +777 -0
- package/src/execution-graph/index.ts +24 -0
- package/src/execution-graph/remote-snapshot.test.ts +116 -0
- package/src/execution-graph/span-tree.test.ts +249 -0
- package/src/execution-graph/span-tree.ts +269 -0
- package/src/execution-graph/sub-agent-delegation.test.ts +50 -0
- package/src/execution-graph/testing/collect-trace-events.ts +74 -0
- package/src/execution-graph/testing/index.ts +5 -0
- package/src/execution-graph/testing/sub-agent-delegation.json +1285 -0
- package/src/extensions/index.ts +5 -0
- package/src/extensions/prompt-extension.ts +111 -0
- package/src/feed-logger.ts +149 -0
- package/src/functions/services.test.ts +53 -0
- package/src/hooks/index.ts +10 -5
- package/src/hooks/useBlueprintRegistry.ts +90 -44
- package/src/hooks/useChatKeymap.ts +52 -0
- package/src/hooks/useChatProcessor.ts +65 -40
- package/src/hooks/useChatServices.ts +16 -60
- package/src/hooks/useChatToolbarActions.ts +124 -0
- package/src/hooks/useContextBinder.ts +43 -0
- package/src/hooks/useContextObjects.ts +51 -0
- package/src/hooks/useDebug.ts +38 -0
- package/src/hooks/useFilteredTypes.ts +39 -0
- package/src/hooks/usePresets.ts +7 -5
- package/src/hooks/useReferencesProvider.ts +11 -22
- package/src/index.ts +2 -5
- package/src/meta.ts +35 -10
- package/src/operations/create-chat.ts +57 -0
- package/src/operations/ensure-companion-chat.ts +63 -0
- package/src/operations/fork-chat.ts +112 -0
- package/src/operations/index.ts +16 -0
- package/src/operations/prompt.node.test.ts +82 -0
- package/src/operations/resolve-navigation-targets.ts +31 -0
- package/src/operations/run-prompt-in-new-chat.ts +113 -0
- package/src/operations/set-current-chat.ts +49 -0
- package/src/operations/toggle-trace-panel-debug.ts +27 -0
- package/src/operations/update-chat-name.ts +65 -0
- package/src/paths.ts +10 -0
- package/src/plugin.ts +11 -0
- package/src/processor/index.ts +6 -0
- package/src/processor/presets.ts +72 -0
- package/src/processor/processor.node.test.ts +40 -0
- package/src/processor/processor.ts +423 -0
- package/src/templates/automation-templates.test.ts +66 -0
- package/src/templates/daily-digest.ts +37 -0
- package/src/templates/index.ts +11 -0
- package/src/templates/research-brief.ts +40 -0
- package/src/templates/scaffold.ts +74 -0
- package/src/testing/data/trace-timeline-multiple.dx.json +1 -0
- package/src/testing/data/trace-timeline-remote.dx.json +1 -0
- package/src/testing/data/trace-timeline.dx.json +4657 -0
- package/src/testing/index.ts +3 -1
- package/src/testing/snapshot.ts +35 -0
- package/src/testing/test-generator.test.ts +71 -0
- package/src/testing/test-generator.ts +284 -0
- package/src/testing/test-sequence.ts +7 -32
- package/src/testing/test-services.ts +10 -14
- package/src/testing/test-trace.ts +20 -0
- package/src/testing/trace-timeline.node.conversations.json +1 -0
- package/src/testing/trace-timeline.node.test.ts +241 -0
- package/src/testing.ts +9 -0
- package/src/translations.ts +167 -70
- package/src/types/Assistant.ts +17 -50
- package/src/types/AssistantCapabilities.ts +35 -0
- package/src/types/AssistantEvents.ts +11 -0
- package/src/types/AssistantOperation.ts +164 -0
- package/src/types/Settings.ts +82 -0
- package/src/types/index.ts +15 -2
- package/src/types/preset.ts +16 -0
- package/src/types/service.ts +22 -16
- package/src/util/suggestions.test.ts +52 -0
- package/src/util/suggestions.ts +42 -0
- package/src/vite-env.d.ts +35 -0
- package/dist/lib/browser/BlueprintContainer-H7H4BQ2C.mjs +0 -29
- package/dist/lib/browser/BlueprintContainer-H7H4BQ2C.mjs.map +0 -7
- package/dist/lib/browser/ChatContainer-OUVSX5V5.mjs +0 -76
- package/dist/lib/browser/ChatContainer-OUVSX5V5.mjs.map +0 -7
- package/dist/lib/browser/ChatDialog-P4FLEOHG.mjs +0 -86
- package/dist/lib/browser/ChatDialog-P4FLEOHG.mjs.map +0 -7
- package/dist/lib/browser/SequenceContainer-627OQ557.mjs +0 -163
- package/dist/lib/browser/SequenceContainer-627OQ557.mjs.map +0 -7
- package/dist/lib/browser/ai-service-7KJ5LXBT.mjs +0 -22
- package/dist/lib/browser/ai-service-7KJ5LXBT.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-AVHHQ3KV.mjs +0 -166
- package/dist/lib/browser/app-graph-builder-AVHHQ3KV.mjs.map +0 -7
- package/dist/lib/browser/blueprint-definition-CMGIZAOW.mjs +0 -146
- package/dist/lib/browser/blueprint-definition-CMGIZAOW.mjs.map +0 -7
- package/dist/lib/browser/chunk-BRLHDHOF.mjs +0 -244
- package/dist/lib/browser/chunk-BRLHDHOF.mjs.map +0 -7
- package/dist/lib/browser/chunk-HRLMD35M.mjs +0 -191
- package/dist/lib/browser/chunk-HRLMD35M.mjs.map +0 -7
- package/dist/lib/browser/chunk-LKP65RPA.mjs +0 -20
- package/dist/lib/browser/chunk-LKP65RPA.mjs.map +0 -7
- package/dist/lib/browser/chunk-NZDCKQ6W.mjs +0 -89
- package/dist/lib/browser/chunk-NZDCKQ6W.mjs.map +0 -7
- package/dist/lib/browser/chunk-QB7OVS6Z.mjs +0 -16
- package/dist/lib/browser/chunk-QB7OVS6Z.mjs.map +0 -7
- package/dist/lib/browser/chunk-VEBVAHNM.mjs +0 -2231
- package/dist/lib/browser/chunk-VEBVAHNM.mjs.map +0 -7
- package/dist/lib/browser/edge-model-resolver-2HB4PCWH.mjs +0 -24
- package/dist/lib/browser/edge-model-resolver-2HB4PCWH.mjs.map +0 -7
- package/dist/lib/browser/index.mjs +0 -293
- package/dist/lib/browser/index.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-MVOIEJXZ.mjs +0 -81
- package/dist/lib/browser/intent-resolver-MVOIEJXZ.mjs.map +0 -7
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/react-surface-4HXS3YLT.mjs +0 -163
- package/dist/lib/browser/react-surface-4HXS3YLT.mjs.map +0 -7
- package/dist/lib/browser/settings-G2EZXMWT.mjs +0 -23
- package/dist/lib/browser/settings-G2EZXMWT.mjs.map +0 -7
- package/dist/lib/browser/toolkit-IW4FBLLB.mjs +0 -105
- package/dist/lib/browser/toolkit-IW4FBLLB.mjs.map +0 -7
- package/dist/lib/browser/types/index.mjs +0 -19
- package/dist/lib/node-esm/BlueprintContainer-VH4EE4CM.mjs +0 -30
- package/dist/lib/node-esm/BlueprintContainer-VH4EE4CM.mjs.map +0 -7
- package/dist/lib/node-esm/ChatContainer-D5FABDNE.mjs +0 -77
- package/dist/lib/node-esm/ChatContainer-D5FABDNE.mjs.map +0 -7
- package/dist/lib/node-esm/ChatDialog-NKWVXHJP.mjs +0 -87
- package/dist/lib/node-esm/ChatDialog-NKWVXHJP.mjs.map +0 -7
- package/dist/lib/node-esm/SequenceContainer-EQ5NP2PG.mjs +0 -164
- package/dist/lib/node-esm/SequenceContainer-EQ5NP2PG.mjs.map +0 -7
- package/dist/lib/node-esm/ai-service-LDD32477.mjs +0 -23
- package/dist/lib/node-esm/ai-service-LDD32477.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-RMOUJMMG.mjs +0 -167
- package/dist/lib/node-esm/app-graph-builder-RMOUJMMG.mjs.map +0 -7
- package/dist/lib/node-esm/blueprint-definition-AEWYMW6I.mjs +0 -147
- package/dist/lib/node-esm/blueprint-definition-AEWYMW6I.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-3SOC5GOP.mjs +0 -2232
- package/dist/lib/node-esm/chunk-3SOC5GOP.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-F7RXCX5Y.mjs +0 -192
- package/dist/lib/node-esm/chunk-F7RXCX5Y.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-GAWXJ7K5.mjs +0 -90
- package/dist/lib/node-esm/chunk-GAWXJ7K5.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
- package/dist/lib/node-esm/chunk-KOC6ESG7.mjs +0 -22
- package/dist/lib/node-esm/chunk-KOC6ESG7.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-RD755HN3.mjs +0 -245
- package/dist/lib/node-esm/chunk-RD755HN3.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-X6AANUHZ.mjs +0 -17
- package/dist/lib/node-esm/chunk-X6AANUHZ.mjs.map +0 -7
- package/dist/lib/node-esm/edge-model-resolver-UDDR2IA6.mjs +0 -25
- package/dist/lib/node-esm/edge-model-resolver-UDDR2IA6.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -294
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-DTDNCX3C.mjs +0 -82
- package/dist/lib/node-esm/intent-resolver-DTDNCX3C.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/react-surface-V6JNEZVO.mjs +0 -164
- package/dist/lib/node-esm/react-surface-V6JNEZVO.mjs.map +0 -7
- package/dist/lib/node-esm/settings-AIP5FOJG.mjs +0 -24
- package/dist/lib/node-esm/settings-AIP5FOJG.mjs.map +0 -7
- package/dist/lib/node-esm/toolkit-2VNUL77B.mjs +0 -106
- package/dist/lib/node-esm/toolkit-2VNUL77B.mjs.map +0 -7
- package/dist/lib/node-esm/types/index.mjs +0 -20
- package/dist/types/src/capabilities/capabilities.d.ts +0 -11
- package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
- package/dist/types/src/components/BlueprintContainer.d.ts +0 -8
- package/dist/types/src/components/BlueprintContainer.d.ts.map +0 -1
- package/dist/types/src/components/ChatContainer.d.ts +0 -12
- package/dist/types/src/components/ChatContainer.d.ts.map +0 -1
- package/dist/types/src/components/ChatDialog.d.ts.map +0 -1
- package/dist/types/src/components/ChatThread/ChatMessage.d.ts +0 -18
- package/dist/types/src/components/ChatThread/ChatMessage.d.ts.map +0 -1
- package/dist/types/src/components/ChatThread/ToolBlock.d.ts +0 -19
- package/dist/types/src/components/ChatThread/ToolBlock.d.ts.map +0 -1
- package/dist/types/src/components/ChatThread/reducer.d.ts +0 -12
- package/dist/types/src/components/ChatThread/reducer.d.ts.map +0 -1
- package/dist/types/src/components/PromptSettings.d.ts +0 -6
- package/dist/types/src/components/PromptSettings.d.ts.map +0 -1
- package/dist/types/src/components/SequenceContainer.d.ts +0 -8
- package/dist/types/src/components/SequenceContainer.d.ts.map +0 -1
- package/dist/types/src/components/SequenceEditor/SequenceEditor.d.ts +0 -13
- package/dist/types/src/components/SequenceEditor/SequenceEditor.d.ts.map +0 -1
- package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts +0 -8
- package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts.map +0 -1
- package/dist/types/src/components/SequenceEditor/index.d.ts +0 -2
- package/dist/types/src/components/SequenceEditor/index.d.ts.map +0 -1
- package/dist/types/src/components/Timeline/Timeline.d.ts +0 -24
- package/dist/types/src/components/Timeline/Timeline.d.ts.map +0 -1
- package/dist/types/src/components/Timeline/Timeline.stories.d.ts +0 -9
- package/dist/types/src/components/Timeline/Timeline.stories.d.ts.map +0 -1
- package/dist/types/src/components/Timeline/index.d.ts +0 -2
- package/dist/types/src/components/Timeline/index.d.ts.map +0 -1
- package/dist/types/src/events.d.ts +0 -4
- package/dist/types/src/events.d.ts.map +0 -1
- package/dist/types/src/functions/analysis.d.ts +0 -5
- package/dist/types/src/functions/analysis.d.ts.map +0 -1
- package/dist/types/src/functions/index.d.ts +0 -4
- package/dist/types/src/functions/index.d.ts.map +0 -1
- package/dist/types/src/functions/list.d.ts +0 -10
- package/dist/types/src/functions/list.d.ts.map +0 -1
- package/dist/types/src/functions/load.d.ts +0 -8
- package/dist/types/src/functions/load.d.ts.map +0 -1
- package/dist/types/src/hooks/chat-processor.d.ts +0 -72
- package/dist/types/src/hooks/chat-processor.d.ts.map +0 -1
- package/dist/types/src/hooks/errors.d.ts +0 -4
- package/dist/types/src/hooks/errors.d.ts.map +0 -1
- package/dist/types/src/hooks/presets.d.ts.map +0 -1
- package/dist/types/src/hooks/useResolveRef.d.ts +0 -4
- package/dist/types/src/hooks/useResolveRef.d.ts.map +0 -1
- package/dist/types/src/parser/filter-generator.d.ts +0 -4
- package/dist/types/src/parser/filter-generator.d.ts.map +0 -1
- package/dist/types/src/parser/filter-generator.test.d.ts +0 -2
- package/dist/types/src/parser/filter-generator.test.d.ts.map +0 -1
- package/dist/types/src/parser/index.d.ts +0 -4
- package/dist/types/src/parser/index.d.ts.map +0 -1
- package/dist/types/src/parser/query-parser.d.ts +0 -15
- package/dist/types/src/parser/query-parser.d.ts.map +0 -1
- package/dist/types/src/parser/query-parser.test.d.ts +0 -2
- package/dist/types/src/parser/query-parser.test.d.ts.map +0 -1
- package/dist/types/src/parser/types.d.ts +0 -24
- package/dist/types/src/parser/types.d.ts.map +0 -1
- package/dist/types/src/queue-logger.d.ts +0 -11
- package/dist/types/src/queue-logger.d.ts.map +0 -1
- package/dist/types/src/stories/Chat.stories.d.ts +0 -268
- package/dist/types/src/stories/Chat.stories.d.ts.map +0 -1
- package/dist/types/src/stories/components/BlueprintContainer.d.ts +0 -5
- package/dist/types/src/stories/components/BlueprintContainer.d.ts.map +0 -1
- package/dist/types/src/stories/components/ChatContainer.d.ts +0 -5
- package/dist/types/src/stories/components/ChatContainer.d.ts.map +0 -1
- package/dist/types/src/stories/components/GraphContainer.d.ts +0 -6
- package/dist/types/src/stories/components/GraphContainer.d.ts.map +0 -1
- package/dist/types/src/stories/components/LoggingContainer.d.ts +0 -5
- package/dist/types/src/stories/components/LoggingContainer.d.ts.map +0 -1
- package/dist/types/src/stories/components/SurfaceContainer.d.ts +0 -8
- package/dist/types/src/stories/components/SurfaceContainer.d.ts.map +0 -1
- package/dist/types/src/stories/components/TasksContainer.d.ts +0 -5
- package/dist/types/src/stories/components/TasksContainer.d.ts.map +0 -1
- package/dist/types/src/stories/components/index.d.ts +0 -8
- package/dist/types/src/stories/components/index.d.ts.map +0 -1
- package/dist/types/src/stories/components/types.d.ts +0 -7
- package/dist/types/src/stories/components/types.d.ts.map +0 -1
- package/dist/types/src/stories/hooks/index.d.ts +0 -3
- package/dist/types/src/stories/hooks/index.d.ts.map +0 -1
- package/dist/types/src/stories/hooks/useFlush.d.ts.map +0 -1
- package/dist/types/src/stories/hooks/useMatcherExtension.d.ts +0 -3
- package/dist/types/src/stories/hooks/useMatcherExtension.d.ts.map +0 -1
- package/dist/types/src/stories/testing/data.d.ts +0 -142
- package/dist/types/src/stories/testing/data.d.ts.map +0 -1
- package/dist/types/src/stories/testing/index.d.ts +0 -3
- package/dist/types/src/stories/testing/index.d.ts.map +0 -1
- package/dist/types/src/stories/testing/testing.d.ts +0 -26
- package/dist/types/src/stories/testing/testing.d.ts.map +0 -1
- package/dist/types/src/testing/test-functions.d.ts +0 -6
- package/dist/types/src/testing/test-functions.d.ts.map +0 -1
- package/dist/types/src/tools/function.d.ts +0 -5
- package/dist/types/src/tools/function.d.ts.map +0 -1
- package/dist/types/src/tools/index.d.ts +0 -3
- package/dist/types/src/tools/index.d.ts.map +0 -1
- package/dist/types/src/tools/openapi.d.ts +0 -10
- package/dist/types/src/tools/openapi.d.ts.map +0 -1
- package/dist/types/src/tools/openapi.test.d.ts +0 -2
- package/dist/types/src/tools/openapi.test.d.ts.map +0 -1
- package/dist/types/src/types/AssistantAction.d.ts +0 -90
- package/dist/types/src/types/AssistantAction.d.ts.map +0 -1
- package/dist/types/src/types/defs.d.ts +0 -2
- package/dist/types/src/types/defs.d.ts.map +0 -1
- package/src/AssistantPlugin.tsx +0 -145
- package/src/capabilities/capabilities.ts +0 -22
- package/src/capabilities/intent-resolver.ts +0 -73
- package/src/components/BlueprintContainer.tsx +0 -24
- package/src/components/ChatContainer.tsx +0 -69
- package/src/components/ChatDialog.tsx +0 -68
- package/src/components/ChatThread/ChatMessage.tsx +0 -282
- package/src/components/ChatThread/ToolBlock.tsx +0 -125
- package/src/components/ChatThread/reducer.ts +0 -52
- package/src/components/PromptSettings.tsx +0 -89
- package/src/components/SequenceContainer.tsx +0 -133
- package/src/components/SequenceEditor/SequenceEditor.stories.tsx +0 -33
- package/src/components/SequenceEditor/SequenceEditor.tsx +0 -50
- package/src/components/SequenceEditor/index.ts +0 -5
- package/src/components/Timeline/Timeline.stories.tsx +0 -53
- package/src/components/Timeline/Timeline.tsx +0 -159
- package/src/events.ts +0 -11
- package/src/functions/analysis.ts +0 -20
- package/src/functions/index.ts +0 -7
- package/src/functions/list.ts +0 -42
- package/src/functions/load.ts +0 -43
- package/src/hooks/chat-processor.ts +0 -260
- package/src/hooks/errors.ts +0 -8
- package/src/hooks/presets.ts +0 -53
- package/src/hooks/useResolveRef.ts +0 -33
- package/src/parser/filter-generator.test.ts +0 -32
- package/src/parser/filter-generator.ts +0 -74
- package/src/parser/index.ts +0 -7
- package/src/parser/query-parser.test.ts +0 -139
- package/src/parser/query-parser.ts +0 -199
- package/src/parser/types.ts +0 -34
- package/src/queue-logger.ts +0 -125
- package/src/shims.d.ts +0 -8
- package/src/stories/Chat.stories.tsx +0 -317
- package/src/stories/components/BlueprintContainer.tsx +0 -34
- package/src/stories/components/ChatContainer.tsx +0 -80
- package/src/stories/components/GraphContainer.tsx +0 -118
- package/src/stories/components/LoggingContainer.tsx +0 -22
- package/src/stories/components/SurfaceContainer.tsx +0 -62
- package/src/stories/components/TasksContainer.tsx +0 -51
- package/src/stories/components/index.ts +0 -12
- package/src/stories/components/types.ts +0 -11
- package/src/stories/hooks/index.ts +0 -6
- package/src/stories/hooks/useMatcherExtension.ts +0 -45
- package/src/stories/testing/data.ts +0 -130
- package/src/stories/testing/index.ts +0 -6
- package/src/stories/testing/testing.tsx +0 -162
- package/src/testing/test-functions.ts +0 -16
- package/src/tools/function.ts +0 -49
- package/src/tools/index.ts +0 -6
- package/src/tools/openapi.test.ts +0 -219
- package/src/tools/openapi.ts +0 -341
- package/src/types/AssistantAction.ts +0 -54
- package/src/types/defs.ts +0 -5
- package/src/typings.d.ts +0 -9
- /package/dist/lib/{browser/chunk-J5LGTIGS.mjs.map → neutral/AssistantPlugin.mjs.map} +0 -0
- /package/dist/lib/{browser/types/index.mjs.map → neutral/ChatArticle-VNVZCDUR.mjs.map} +0 -0
- /package/dist/lib/{node-esm/types → neutral/blueprints}/index.mjs.map +0 -0
- /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs +0 -0
- /package/dist/lib/{node-esm/chunk-HSLMI22Q.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
- /package/src/{stories/hooks → hooks}/useFlush.ts +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/components/index.ts", "../../../../src/components/AgentProperties/AgentProperties.tsx", "../../../../src/components/Chat/Chat.tsx", "../../../../src/components/ChatPrompt/ChatActions.tsx", "../../../../src/components/ChatPrompt/ChatMcpErrors.tsx", "../../../../src/components/ChatPrompt/ChatOptions.tsx", "../../../../src/components/ChatPrompt/ChatPresets.tsx", "../../../../src/components/ChatPrompt/ChatPrompt.tsx", "../../../../src/components/ChatPrompt/ChatReferences.tsx", "../../../../src/components/ChatPrompt/ChatStatusIndicator.tsx", "../../../../src/components/ChatPrompt/ChatStatus.tsx", "../../../../src/components/ChatThread/ChatThread.tsx", "../../../../src/components/ChatThread/registry.tsx", "../../../../src/components/ChatThread/tool-widget-state.ts", "../../../../src/components/ChatThread/widgets/FallbackWidget.tsx", "../../../../src/components/ChatThread/widgets/ReasoningWidget.ts", "../../../../src/components/ChatThread/widgets/defaults.ts", "../../../../src/components/ChatThread/widgets/ReferenceWidget.ts", "../../../../src/components/ChatThread/widgets/SelectWidget.ts", "../../../../src/components/ChatThread/widgets/StatsWidget.ts", "../../../../src/components/ChatThread/widgets/StatusWidget.ts", "../../../../src/components/ChatThread/widgets/SummaryWidget.tsx", "../../../../src/components/ChatThread/widgets/SuggestionWidget.ts", "../../../../src/components/ChatThread/widgets/ToolWidget.tsx", "../../../../src/components/ChatThread/sync.ts", "../../../../src/components/TaskList/TaskList.tsx", "../../../../src/components/ProcessTree/ProcessTree.tsx", "../../../../src/components/TemplateEditor/TemplateEditor.tsx", "../../../../src/components/TemplateEditor/extensions/handlebars-extension.ts", "../../../../src/components/TemplateEditor/extensions/xml-extension.ts", "../../../../src/components/Toolbox/Toolbox.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n// TODO(wittjosiah): Factor components out of plugin-assistant into a standalone package.\n\nimport { type ComponentType, lazy } from 'react';\n\nexport * from './AgentProperties';\nexport * from './Chat';\nexport * from './ProcessTree';\nexport * from './TaskList';\nexport * from './TemplateEditor';\nexport * from './Toolbox';\n\nexport const AssistantSettings: ComponentType<any> = lazy(() => import('./AssistantSettings'));\nexport const RoutineProperties: ComponentType<any> = lazy(() => import('./RoutineProperties'));\n\nexport { ChatPrompt, type ChatPromptProps } from './ChatPrompt/ChatPrompt';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom } from '@effect-atom/atom';\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport * as Option from 'effect/Option';\nimport React, { useCallback, useMemo } from 'react';\n\nimport { type Agent } from '@dxos/assistant-toolkit';\nimport { Filter, Obj, Ref, Type } from '@dxos/echo';\nimport { useQuery } from '@dxos/react-client/echo';\nimport { Input, useTranslation } from '@dxos/react-ui';\nimport { Form } from '@dxos/react-ui-form';\nimport { FeedAnnotation } from '@dxos/schema';\n\nimport { meta } from '#meta';\n\nexport type AgentPropertiesProps = {\n agent: Agent.Agent;\n};\n\nexport const AgentProperties = ({ agent }: AgentPropertiesProps) => {\n const { t } = useTranslation(meta.id);\n const db = Obj.getDatabase(agent);\n\n // Build a filter matching objects of any schema annotated as a feed.\n const feedFilter = useMemo(() => {\n if (!db) {\n return Filter.nothing();\n }\n\n const schemas = db.graph.registry.list().filter(Type.isType);\n const feedSchemas = schemas.filter((type) => {\n const annotation = FeedAnnotation.get(Type.getSchema(type));\n return Option.isSome(annotation) && annotation.value === true;\n });\n\n return feedSchemas.length === 0\n ? Filter.nothing()\n : Filter.or(...feedSchemas.map((schema: Type.AnyEntity) => Filter.type(schema)));\n }, [db]);\n\n const subscribedObjects = useQuery(db, feedFilter);\n\n // Query all existing subscriptions (e.g., mail, calendar, etc.)\n const existingSubscriptions = useAtomValue(\n useMemo(\n () =>\n Obj.atom(agent).pipe((_) =>\n Atom.make((get) => {\n const agentObj = get(_);\n const selectedSubscriptions: Obj.Unknown[] = subscribedObjects.filter((object) =>\n agentObj.subscriptions.some((subscription) => subscription.uri === Obj.getURI(object)),\n );\n\n return selectedSubscriptions;\n }),\n ),\n [agent, subscribedObjects],\n ),\n );\n\n // Create/remove agent subscription.\n const handleSubscriptionChange = useCallback(\n (object: Obj.Unknown, checked: boolean) => {\n Obj.update(agent, (agent) => {\n if (checked) {\n agent.subscriptions.push(Ref.fromURI(Obj.getURI(object)));\n } else {\n agent.subscriptions = agent.subscriptions.filter((subscription) => subscription.uri !== Obj.getURI(object));\n }\n });\n },\n [agent],\n );\n\n if (subscribedObjects.length === 0) {\n return null;\n }\n\n return (\n <Form.Section>\n <Input.Root>\n <Input.Label classNames='mt-form-gap'>{t('subscriptions.label')}</Input.Label>\n </Input.Root>\n\n {subscribedObjects.map((object) => (\n <Input.Root key={object.id}>\n <div className='flex items-center gap-2'>\n <Input.Checkbox\n checked={existingSubscriptions.includes(object)}\n onCheckedChange={(checked) => {\n handleSubscriptionChange(object, checked === true);\n }}\n />\n <Input.Label>{Obj.getLabel(object) ?? object.id}</Input.Label>\n </div>\n </Input.Root>\n ))}\n </Form.Section>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport * as Array from 'effect/Array';\nimport * as Option from 'effect/Option';\nimport React, { type PropsWithChildren, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { Agent, Plan } from '@dxos/assistant-toolkit';\nimport { Event } from '@dxos/async';\nimport { type Database, type Feed, Filter, Obj, Query } from '@dxos/echo';\nimport { useQuery } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { Toast, composable, composableProps, useTranslation } from '@dxos/react-ui';\nimport { type MarkdownStreamController } from '@dxos/react-ui-markdown';\nimport { Menu, MenuRootProps } from '@dxos/react-ui-menu';\nimport { Message } from '@dxos/types';\n\nimport { useChatKeymapExtensions, useChatToolbarActions, useDebug } from '#hooks';\nimport { meta } from '#meta';\n\nimport {\n ChatStatus,\n ChatPrompt as NaturalChatPrompt,\n type ChatPromptProps as NaturalChatPromptProps,\n} from '../ChatPrompt';\nimport { ChatThread as NaturalChatThread, type ChatThreadProps as NaturalChatThreadProps } from '../ChatThread';\nimport { TaskList } from '../TaskList';\nimport { ChatContextProvider, type ChatContextValue, type ChatRequestTiming, useChatContext } from './context';\nimport { type ChatEvent } from './events';\n\n//\n// Root\n//\n\ntype ChatRootProps = PropsWithChildren<\n Pick<ChatContextValue, 'chat' | 'processor'> & {\n feed?: Feed.Feed;\n /** Fallback database when the chat is transient (not yet persisted). */\n db?: Database.Database;\n onEvent?: (event: ChatEvent) => void;\n /**\n * Runs (and is awaited) before the request fires on submit. Lets a transient chat\n * persist and flush its conversation feed so the agent can resolve it.\n */\n onSubmit?: (text: string) => Promise<void> | void;\n }\n>;\n\nconst ChatRoot = ({ children, chat, feed, processor, db: dbFallback, onEvent, onSubmit, ...props }: ChatRootProps) => {\n const [debug, setDebug] = useState(false);\n const streaming = useAtomValue(processor.streaming);\n const active = useAtomValue(processor.active);\n const requestTiming = useRequestTiming({ active });\n const lastPrompt = useRef<string | undefined>(undefined);\n // Transient chats have no database of their own; fall back to the supplied space db so\n // the message query and context controls operate before the chat is persisted.\n const db = (chat && Obj.getDatabase(chat)) || dbFallback;\n\n // Event sink.\n const event = useMemo(() => new Event<ChatEvent>(), []);\n\n const feedMessages = useQuery(\n db,\n feed ? Query.select(Filter.type(Message.Message)).from(feed) : Query.select(Filter.nothing()),\n );\n const pendingMessages = useAtomValue(processor.messages);\n const messages = useMemo(\n () => Array.dedupeWith([...feedMessages, ...pendingMessages], ({ id: a }, { id: b }) => a === b),\n [feedMessages, pendingMessages],\n );\n\n const dump = useDebug({ processor });\n\n // Surface processor failures (e.g., AI service unavailable) to subscribers via the event bus.\n const error = useAtomValue(processor.error);\n useEffect(() => {\n if (Option.isSome(error)) {\n event.emit({ type: 'error', error: error.value });\n }\n }, [event, error]);\n\n useEffect(() => {\n return event.on((ev) => {\n switch (ev.type) {\n case 'toggle-debug': {\n setDebug((debug) => {\n if (debug) {\n return false;\n } else {\n void dump();\n return true;\n }\n });\n break;\n }\n\n case 'submit': {\n const text = ev.text.trim();\n if (!streaming && text.length) {\n lastPrompt.current = ev.text;\n // Await persistence (transient chat) before requesting so the agent resolves the\n // now-durable conversation feed; resolves immediately when there is no hook.\n void Promise.resolve(onSubmit?.(text)).then(() => processor.request({ message: text }));\n }\n break;\n }\n\n case 'retry': {\n if (!streaming) {\n void processor.retry();\n }\n break;\n }\n\n case 'cancel': {\n void processor.cancel();\n if (streaming) {\n if (lastPrompt.current) {\n event.emit({ type: 'update-prompt', text: lastPrompt.current });\n }\n }\n break;\n }\n }\n\n onEvent?.(ev);\n });\n }, [event, dump, processor, streaming, onEvent, onSubmit]);\n\n return (\n <ChatContextProvider\n debug={debug}\n event={event}\n db={db}\n chat={chat}\n messages={messages}\n processor={processor}\n requestTiming={requestTiming}\n {...props}\n >\n {children}\n </ChatContextProvider>\n );\n};\n\nChatRoot.displayName = 'Chat.Root';\n\nconst useRequestTiming = ({ active }: { active: boolean }) => {\n const [requestTiming, setRequestTiming] = useState<ChatRequestTiming | null>(null);\n useEffect(() => {\n if (active) {\n setRequestTiming({ startedAt: Date.now(), endedAt: null });\n } else {\n setRequestTiming((prev) => (prev && prev.endedAt == null ? { ...prev, endedAt: Date.now() } : prev));\n }\n }, [active]);\n\n return requestTiming;\n};\n\n//\n// Toolbar\n//\n\nconst CHAT_TOOLBAR_NAME = 'Chat.Toolbar';\n\ntype ChatToolbarProps = Pick<MenuRootProps, 'attendableId' | 'alwaysActive'> &\n PropsWithChildren<{\n companionTo?: Obj.Unknown;\n }>;\n\nconst ChatToolbar = composable<HTMLDivElement, ChatToolbarProps>(\n ({ children, attendableId, alwaysActive, companionTo, ...props }, forwardedRef) => {\n const { chat } = useChatContext(CHAT_TOOLBAR_NAME);\n const menuActions = useChatToolbarActions({ chat, companionTo });\n\n return (\n <Menu.Root {...menuActions} attendableId={attendableId} alwaysActive={alwaysActive}>\n <Menu.Toolbar {...composableProps(props)} ref={forwardedRef}>\n {children}\n </Menu.Toolbar>\n </Menu.Root>\n );\n },\n);\n\nChatToolbar.displayName = CHAT_TOOLBAR_NAME;\n\n//\n// Content\n//\n\nconst CHAT_CONTENT_NAME = 'Chat.Content';\n\ntype ChatContentProps = {};\n\nconst ChatContent = composable<HTMLDivElement, ChatContentProps>(({ children, ...props }, forwardedRef) => {\n return (\n <div {...composableProps(props, { classNames: 'dx-expander flex flex-col' })} ref={forwardedRef}>\n {children}\n </div>\n );\n});\n\nChatContent.displayName = CHAT_CONTENT_NAME;\n\n//\n// Thread\n//\n\nconst CHAT_THREAD_NAME = 'Chat.Thread';\n\ntype ChatThreadProps = Omit<NaturalChatThreadProps, 'identity' | 'messages' | 'tools'>;\n\nconst ChatThread = ({ viewType, debug: debugProp, ...props }: ChatThreadProps) => {\n const { t } = useTranslation(meta.id);\n const { debug, event, messages, processor } = useChatContext(CHAT_THREAD_NAME);\n const extensions = useChatKeymapExtensions({ event });\n const identity = useIdentity();\n const error = useAtomValue(processor.error).pipe(Option.getOrUndefined);\n const [toastError, setToastError] = useState<Error | undefined>(undefined);\n const debugView = viewType === 'debug';\n\n const controllerRef = useRef<MarkdownStreamController | null>(null);\n useEffect(() => {\n return event.on((event) => {\n switch (event.type) {\n case 'submit':\n case 'scroll-to-bottom':\n controllerRef.current?.scrollToBottom();\n break;\n case 'nav-previous':\n controllerRef.current?.navigatePrevious();\n break;\n case 'nav-next':\n controllerRef.current?.navigateNext();\n break;\n case 'error':\n setToastError(event.error);\n break;\n }\n });\n }, [event]);\n\n const handleEvent = useCallback<NonNullable<NaturalChatThreadProps['onEvent']>>(\n (ev) => {\n event.emit(ev);\n },\n [event],\n );\n\n if (!identity) {\n return <div className='dx-expander' />;\n }\n\n return (\n <>\n <NaturalChatThread\n {...props}\n identity={identity}\n messages={messages}\n error={error}\n debug={debugProp ?? (debug || debugView)}\n viewType={viewType}\n extensions={extensions}\n onEvent={handleEvent}\n ref={controllerRef}\n />\n\n <Toast.Root\n type='foreground'\n open={!!toastError}\n duration={20_000}\n onOpenChange={(open) => !open && setToastError(undefined)}\n >\n <Toast.Title icon='ph--warning--regular' onClose={() => setToastError(undefined)}>\n {t('ai-service-error.label')}\n </Toast.Title>\n <Toast.Description>{toastError?.message}</Toast.Description>\n </Toast.Root>\n </>\n );\n};\n\nChatThread.displayName = CHAT_THREAD_NAME;\n\n//\n// Prompt\n//\n\nconst CHAT_PROMPT_NAME = 'Chat.Prompt';\n\ntype ChatPromptProps = Omit<NaturalChatPromptProps, 'chat' | 'db' | 'processor' | 'event'>;\n\nconst ChatPrompt = (props: ChatPromptProps) => {\n const { chat, db, processor, event } = useChatContext(CHAT_PROMPT_NAME);\n return <NaturalChatPrompt {...props} chat={chat} db={db} processor={processor} event={event} />;\n};\n\nChatPrompt.displayName = CHAT_PROMPT_NAME;\n\n//\n// TaskList\n//\n\nconst CHAT_TASK_LIST_NAME = 'Chat.TaskList';\n\ntype ChatTaskListProps = {\n plan?: Plan.Plan;\n};\n\nconst ChatTaskList = composable<HTMLDivElement, ChatTaskListProps>(({ plan: planProp, ...props }, forwardedRef) => {\n const { chat } = useChatContext(CHAT_TASK_LIST_NAME);\n const parent = chat ? Obj.getParent(chat) : undefined;\n const agent = parent && Obj.instanceOf(Agent.Agent, parent) ? parent : undefined;\n const plan = planProp ?? agent?.plan.target;\n if (!plan) {\n return null;\n }\n\n return <TaskList {...props} plan={plan} ref={forwardedRef} />;\n});\n\nChatTaskList.displayName = CHAT_TASK_LIST_NAME;\n\n//\n// Chat\n//\n\nexport const Chat = {\n Root: ChatRoot,\n Toolbar: ChatToolbar,\n Content: ChatContent,\n Prompt: ChatPrompt,\n Status: ChatStatus,\n Thread: ChatThread,\n TaskList: ChatTaskList,\n};\n\nexport type { ChatRootProps, ChatToolbarProps, ChatContentProps, ChatPromptProps, ChatThreadProps, ChatEvent };\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type PropsWithChildren } from 'react';\n\nimport { IconButton, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport { meta } from '#meta';\n\nimport { type ChatEvent } from '../Chat/events';\n\nexport type ChatActionsProps = ThemedClassName<\n PropsWithChildren<{\n microphone?: boolean;\n recording?: boolean;\n processing?: boolean;\n debug?: boolean;\n onEvent?: (event: ChatEvent) => void;\n }>\n>;\n\nexport const ChatActions = ({\n classNames,\n children,\n microphone,\n recording,\n processing,\n debug,\n onEvent,\n}: ChatActionsProps) => {\n const { t } = useTranslation(meta.id);\n\n return (\n <div className={mx('flex items-center', classNames)}>\n {children}\n\n {microphone && (\n <IconButton\n disabled={!processing}\n classNames={mx(recording && 'bg-primary-500')}\n variant='ghost'\n icon='ph--microphone--regular'\n iconOnly\n noTooltip\n label={t('microphone.button')}\n onMouseDown={() => onEvent?.({ type: 'record-start' })}\n onMouseUp={() => onEvent?.({ type: 'record-stop' })}\n onTouchStart={() => onEvent?.({ type: 'record-start' })}\n onTouchEnd={() => onEvent?.({ type: 'record-stop' })}\n />\n )}\n\n {debug && (\n <IconButton\n variant='ghost'\n icon='ph--wrench--regular'\n iconOnly\n label={t('debug.button')}\n onClick={() => onEvent?.({ type: 'toggle-debug' })}\n />\n )}\n\n <IconButton\n // disabled={!processing} // TODO(dmaretskyi): Set processing state correctly on rehydrated agents.\n variant='ghost'\n icon='ph--x--regular'\n iconOnly\n label={t('cancel-processing.button')}\n onClick={() => onEvent?.({ type: 'cancel' })}\n />\n </div>\n );\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport React, { useCallback } from 'react';\n\nimport { Message, type ThemedClassName, useTranslation } from '@dxos/react-ui';\n\nimport { meta } from '#meta';\n\nimport { type AiChatProcessor } from '../../processor';\n\nexport type ChatMcpErrorsProps = ThemedClassName<{\n processor: AiChatProcessor;\n}>;\n\n/**\n * Inline banner that lists MCP servers that failed to connect during the most recent request.\n * The chat itself keeps working without these servers — this just lets the user see what was dropped.\n */\nexport const ChatMcpErrors = ({ classNames, processor }: ChatMcpErrorsProps) => {\n const { t } = useTranslation(meta.id);\n const errors = useAtomValue(processor.mcpErrors);\n\n const handleDismiss = useCallback(() => {\n processor.dismissMcpErrors();\n }, [processor]);\n\n if (errors.length === 0) {\n return null;\n }\n\n return (\n <Message.Root classNames={['m-1', classNames]} valence='warning'>\n <Message.Title onClose={handleDismiss}>{t('mcp-server-error.label')}</Message.Title>\n <Message.Content asChild>\n <ul className='flex flex-col gap-0.5 text-sm'>\n {errors.map((error) => (\n <li key={`${error.url}::${error.protocol}`} className='truncate'>\n <span className='font-mono'>{error.url}</span>\n {' — '}\n <span>{error.message}</span>\n </li>\n ))}\n </ul>\n </Message.Content>\n </Message.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type JSX, useCallback, useMemo, useState } from 'react';\n\nimport { type AiContext } from '@dxos/assistant';\nimport { type Chat as ChatModule, McpServer } from '@dxos/assistant-toolkit';\nimport { type Database, Filter, Obj, type Registry, Type, URI } from '@dxos/echo';\nimport { useObject, useQuery } from '@dxos/react-client/echo';\nimport { IconButton, Input, Popover, Select, useTranslation } from '@dxos/react-ui';\nimport { Listbox } from '@dxos/react-ui-list';\nimport { SearchList, useSearchListResults } from '@dxos/react-ui-search';\nimport { Tabs } from '@dxos/react-ui-tabs';\nimport { getStyles, mx } from '@dxos/ui-theme';\n\nimport { useActiveBlueprints, useBlueprintHandlers, useBlueprints, useContextObjects, useFilteredTypes } from '#hooks';\nimport { meta } from '#meta';\nimport { Assistant, type ChatPresetProps } from '#types';\n\nconst styles = {\n panel: 'w-[calc(100dvw-.5rem)] sm:w-max max-w-document-width',\n toolbar: 'p-0! gap-0! border-t border-separator',\n};\n\nexport type ChatOptionsProps = ChatPresetProps & {\n chat?: ChatModule.Chat;\n db: Database.Database;\n context: AiContext.Binder;\n registry?: Registry.Registry;\n};\n\n/**\n * Manages the runtime context for the chat.\n */\nexport const ChatOptions = ({ chat, db, context, registry, presets, preset, onPresetChange }: ChatOptionsProps) => {\n const { t } = useTranslation(meta.id);\n\n return (\n <div className='flex'>\n <Popover.Root>\n <Popover.Trigger asChild>\n <IconButton variant='ghost' icon='ph--plus--regular' iconOnly label={t('context-objects.button')} />\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content side='top' classNames={styles.panel}>\n <Popover.Viewport>\n <ObjectsPanel db={db} context={context} />\n </Popover.Viewport>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n\n <Popover.Root>\n <Popover.Trigger asChild>\n <IconButton\n variant='ghost'\n icon='ph--sliders-horizontal--regular'\n iconOnly\n label={t('context-settings.button')}\n />\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content side='top' classNames={styles.panel}>\n <Popover.Viewport>\n <Tabs.Root\n classNames='flex'\n orientation='horizontal'\n defaultValue='view'\n defaultActivePart='list'\n tabIndex={-1}\n >\n <Tabs.Viewport classNames={mx('grid grid-rows-[1fr_40px] w-full')}>\n <Tabs.Panel tabIndex={-1} classNames='dx-focus-ring-inset overflow-hidden' value='view'>\n <ViewPanel chat={chat} />\n </Tabs.Panel>\n <Tabs.Panel tabIndex={-1} classNames='dx-focus-ring-inset overflow-hidden' value='blueprints'>\n <BlueprintsPanel registry={registry} db={db} context={context} />\n </Tabs.Panel>\n <Tabs.Panel tabIndex={-1} classNames='dx-focus-ring-inset overflow-hidden' value='mcp-servers'>\n <McpServersPanel db={db} />\n </Tabs.Panel>\n <Tabs.Panel tabIndex={-1} classNames='dx-focus-ring-inset overflow-hidden' value='model'>\n <ModelsPanel presets={presets} preset={preset} onPresetChange={onPresetChange} />\n </Tabs.Panel>\n <Tabs.Tablist classNames={[styles.toolbar]}>\n <Tabs.IconTab value='view' icon='ph--eye--regular' label={t('chat-view.title')} />\n <Tabs.IconTab\n value='blueprints'\n icon='ph--blueprint--regular'\n label={t('options.blueprints.title')}\n />\n <Tabs.IconTab\n value='mcp-servers'\n icon='ph--plugs-connected--regular'\n label={t('options.mcp.title')}\n />\n <Tabs.IconTab value='model' icon='ph--cpu--regular' label={t('options.chat-model.title')} />\n </Tabs.Tablist>\n </Tabs.Viewport>\n </Tabs.Root>\n </Popover.Viewport>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </div>\n );\n};\n\nconst BlueprintsPanel = ({ registry, db, context }: Pick<ChatOptionsProps, 'registry' | 'db' | 'context'>) => {\n const { t } = useTranslation(meta.id);\n\n const blueprints = useBlueprints({ registry, db });\n const activeBlueprints = useActiveBlueprints({ context });\n const { onUpdateBlueprint } = useBlueprintHandlers({ db, context, registry });\n const { results, handleSearch } = useSearchListResults({\n items: blueprints,\n extract: (blueprint) => blueprint.name,\n });\n\n return (\n <SearchList.Root onSearch={handleSearch}>\n <SearchList.Content classNames='flex flex-col'>\n <SearchList.Viewport>\n {results.map((blueprint) => {\n const blueprintKey = Obj.getMeta(blueprint).key ?? blueprint.id;\n const isActive = activeBlueprints.has(blueprintKey);\n return (\n <SearchList.Item\n classNames='flex items-center overflow-hidden'\n key={blueprintKey}\n value={blueprintKey}\n label={blueprint.name}\n checked={isActive}\n onSelect={() => onUpdateBlueprint?.(blueprintKey, !isActive)}\n />\n );\n })}\n </SearchList.Viewport>\n <SearchList.Input placeholder={t('search.placeholder')} classNames='border-t border-separator' autoFocus />\n </SearchList.Content>\n </SearchList.Root>\n );\n};\n\nconst ViewPanel = ({ chat }: Pick<ChatOptionsProps, 'chat'>) => {\n const { t } = useTranslation(meta.id);\n const [view, setView] = useObject(chat, 'view');\n const value = (view as Assistant.ChatView | undefined) ?? 'normal';\n\n return (\n <Listbox.Root value={value} onValueChange={setView} autoFocus>\n {Assistant.ChatViews.map((view) => (\n <Listbox.Option key={view} value={view}>\n <Listbox.OptionLabel>{t(`chat-view.${view}.label`, { defaultValue: view })}</Listbox.OptionLabel>\n <Listbox.OptionIndicator />\n </Listbox.Option>\n ))}\n </Listbox.Root>\n );\n};\n\nconst ModelsPanel = ({\n presets,\n preset,\n onPresetChange,\n}: Pick<ChatOptionsProps, 'presets' | 'preset' | 'onPresetChange'>) => {\n return (\n <Listbox.Root value={preset} onValueChange={onPresetChange} autoFocus>\n {presets?.map(({ id, label }) => {\n return (\n <Listbox.Option key={id} value={id}>\n <Listbox.OptionLabel>{label}</Listbox.OptionLabel>\n <Listbox.OptionIndicator />\n </Listbox.Option>\n );\n })}\n </Listbox.Root>\n );\n};\n\ntype McpServersPanelProps = {\n db: Database.Database;\n};\n\nconst McpServersPanel = ({ db }: McpServersPanelProps) => {\n const { t } = useTranslation(meta.id);\n const servers = useQuery(db, Filter.type(McpServer.McpServer));\n const [adding, setAdding] = useState(false);\n\n const handleAdd = useCallback(\n (name: string, url: string, protocol: 'sse' | 'http', apiKey?: string) => {\n db.add(Obj.make(McpServer.McpServer, { name, url, protocol, apiKey, enabled: true }));\n setAdding(false);\n },\n [db],\n );\n\n const handleRemove = useCallback(\n (server: McpServer.McpServer) => {\n db.remove(server);\n },\n [db],\n );\n\n return (\n <div className='p-form-chrome'>\n {servers.map((server) => (\n <McpServerRow key={server.id} server={server} onRemove={handleRemove} />\n ))}\n {adding ? (\n <McpServerForm onSubmit={handleAdd} onCancel={() => setAdding(false)} />\n ) : (\n <div>\n <IconButton\n variant='ghost'\n icon='ph--plus--regular'\n label={t('mcp-server-add.label')}\n onClick={() => setAdding(true)}\n />\n </div>\n )}\n </div>\n );\n};\n\ntype McpServerRowProps = {\n server: McpServer.McpServer;\n onRemove: (server: McpServer.McpServer) => void;\n};\n\n/**\n * `useQuery` returns live objects but only re-renders on result-identity changes,\n * so we must subscribe to the per-server `enabled` field via `useObject` to keep the\n * switch in sync with mutations made through the returned setter.\n */\nconst McpServerRow = ({ server, onRemove }: McpServerRowProps) => {\n const { t } = useTranslation(meta.id);\n const [enabled, setEnabled] = useObject(server, 'enabled');\n\n return (\n <div className='flex items-center gap-2 px-form-chrome'>\n <Input.Root>\n <Input.Label srOnly>{server.name}</Input.Label>\n <Input.Switch checked={enabled !== false} onCheckedChange={(checked) => setEnabled(!!checked)} />\n </Input.Root>\n <span className='flex-1 truncate text-sm'>{server.name}</span>\n <span className='truncate text-xs text-description'>{server.url}</span>\n <IconButton\n variant='ghost'\n icon='ph--x--regular'\n iconOnly\n label={t('mcp-server-remove.label')}\n onClick={() => onRemove(server)}\n />\n </div>\n );\n};\n\ntype McpServerFormProps = {\n onSubmit: (name: string, url: string, protocol: 'sse' | 'http', apiKey?: string) => void;\n onCancel: () => void;\n};\n\nconst McpServerForm = ({ onSubmit, onCancel }: McpServerFormProps) => {\n const { t } = useTranslation(meta.id);\n const [name, setName] = useState('');\n const [url, setUrl] = useState('');\n const [protocol, setProtocol] = useState<'sse' | 'http'>('sse');\n const [apiKey, setApiKey] = useState('');\n\n const canSubmit = name.trim().length > 0 && url.trim().length > 0;\n const handleSubmit = useCallback(() => {\n if (canSubmit) {\n onSubmit(name.trim(), url.trim(), protocol, apiKey.trim() || undefined);\n }\n }, [canSubmit, name, url, protocol, apiKey, onSubmit]);\n\n return (\n <div className='space-y-2 px-form-chrome'>\n <Input.Root>\n <Input.Label srOnly>{t('mcp-server-name.label')}</Input.Label>\n <Input.TextInput\n placeholder={t('mcp-server-name.placeholder')}\n value={name}\n onChange={(event) => setName(event.target.value)}\n autoFocus\n />\n </Input.Root>\n <Input.Root>\n <Input.Label srOnly>{t('mcp-server-url.label')}</Input.Label>\n <Input.TextInput\n placeholder={t('mcp-server-url.placeholder')}\n value={url}\n onChange={(event) => setUrl(event.target.value)}\n />\n </Input.Root>\n <Select.Root value={protocol} onValueChange={(value) => setProtocol(value as 'sse' | 'http')}>\n <Select.TriggerButton placeholder={t('mcp-server-protocol.label')} />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n <Select.Option value='sse'>SSE</Select.Option>\n <Select.Option value='http'>HTTP</Select.Option>\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n <Input.Root>\n <Input.Label srOnly>{t('mcp-server-api-key.label')}</Input.Label>\n <Input.TextInput\n type='password'\n placeholder={t('mcp-server-api-key.placeholder')}\n value={apiKey}\n onChange={(event) => setApiKey(event.target.value)}\n />\n </Input.Root>\n <div className='flex gap-2'>\n <IconButton\n variant='ghost'\n icon='ph--check--regular'\n iconOnly\n label={t('save.button')}\n onClick={handleSubmit}\n disabled={!canSubmit}\n />\n <IconButton variant='ghost' icon='ph--x--regular' iconOnly label={t('cancel.button')} onClick={onCancel} />\n </div>\n </div>\n );\n};\n\nconst ANY = '__any__' as const;\n\n/** @private */\nexport const ObjectsPanel = ({ db, context }: Pick<ChatOptionsProps, 'db' | 'context'>): JSX.Element => {\n const { t } = useTranslation(meta.id);\n\n // Item types sorted by label.\n const types = useFilteredTypes(db);\n const typeOptions = useMemo(() => {\n const options = types.map((type) => {\n const typename = Type.getTypename(type);\n return {\n uri: Type.getURI(type),\n label: t('typename.label', { ns: typename, defaultValue: typename }),\n };\n });\n\n options.sort((a, b) => a.label.localeCompare(b.label));\n return options;\n }, [types, t]);\n\n // Current type URI and filter.\n const [selectedUri, setSelectedUri] = useState<URI.URI | typeof ANY>(ANY);\n const anyFilter = useMemo(() => Filter.or(...typeOptions.map(({ uri }) => Filter.type(uri))), [typeOptions]);\n\n // Context objects.\n const objects = useQuery(db, selectedUri === ANY ? anyFilter : Filter.type(selectedUri));\n const { objects: contextObjects, onUpdateObject } = useContextObjects({ db, context });\n const { results, handleSearch } = useSearchListResults({\n items: objects,\n extract: (object) => Obj.getLabel(object) ?? Obj.getTypename(object) ?? object.id,\n });\n\n return (\n <SearchList.Root onSearch={handleSearch}>\n <SearchList.Content classNames='p-form-chrome [&:has([cmdk-list-sizer]:empty)]:py-0'>\n <SearchList.Viewport>\n {results.length ? (\n results.map((object) => {\n const isActive = contextObjects.findIndex((obj) => obj.id === object.id) !== -1;\n const { icon, hue } = Obj.getIcon(object) ?? { icon: 'ph--cube--regular', hue: undefined };\n const styles = hue ? getStyles(hue) : undefined;\n return (\n <SearchList.Item\n classNames='flex items-center overflow-hidden'\n key={object.id}\n value={object.id}\n icon={icon}\n iconClassNames={styles?.text}\n label={Obj.getLabel(object) ?? Obj.getTypename(object) ?? object.id}\n checked={isActive}\n onSelect={() => onUpdateObject?.(Obj.getURI(object), !isActive)}\n />\n );\n })\n ) : (\n <SearchList.Item value='__empty__' label={t('no-results.message')} />\n )}\n </SearchList.Viewport>\n </SearchList.Content>\n\n <div className={mx('flex flex-col', styles.toolbar)}>\n <Select.Root\n value={selectedUri === ANY ? undefined : selectedUri}\n onValueChange={(val) => setSelectedUri(val as URI.URI | typeof ANY)}\n >\n <Select.TriggerButton placeholder={t('type-filter.placeholder')} />\n <Select.Portal>\n <Select.Content>\n <Select.ScrollUpButton />\n <Select.Viewport>\n <Select.Option value={ANY}>{t('any-type-filter.label')}</Select.Option>\n {typeOptions.map(({ uri, label }) => (\n <Select.Option key={uri} value={uri}>\n {label}\n </Select.Option>\n ))}\n </Select.Viewport>\n <Select.ScrollDownButton />\n <Select.Arrow />\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n <SearchList.Input placeholder={t('search.placeholder')} autoFocus />\n </div>\n </SearchList.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Select } from '@dxos/react-ui';\n\nimport { type ChatPresetProps } from '#types';\n\nexport const ChatPresets = ({ presets, preset, onPresetChange }: ChatPresetProps) => {\n return (\n <Select.Root value={preset} onValueChange={onPresetChange}>\n <Select.TriggerButton classNames='text-sm' />\n <Select.Content>\n {presets?.map(({ id, label }) => (\n <Select.Option key={id} value={id} classNames='text-sm'>\n {label}\n </Select.Option>\n ))}\n <Select.Arrow />\n </Select.Content>\n </Select.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport * as Option from 'effect/Option';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { type Chat } from '@dxos/assistant-toolkit';\nimport { type Event } from '@dxos/async';\nimport { type Database } from '@dxos/echo';\nimport { type Merge } from '@dxos/effect';\nimport { useVoiceInput } from '@dxos/plugin-transcription';\nimport { Input, type ThemedClassName, useDynamicRef, useTranslation } from '@dxos/react-ui';\nimport { ChatEditor, type ChatEditorController, type ChatEditorProps } from '@dxos/react-ui-chat';\nimport { mx } from '@dxos/ui-theme';\n\nimport { useChatKeymapExtensions } from '#hooks';\nimport { meta } from '#meta';\nimport { type ChatPresetProps } from '#types';\n\nimport { type AiChatProcessor } from '../../processor';\nimport { type ChatEvent } from '../Chat/events';\nimport { ChatActions, type ChatActionsProps } from './ChatActions';\nimport { ChatMcpErrors } from './ChatMcpErrors';\nimport { ChatOptions } from './ChatOptions';\nimport { ChatReferences } from './ChatReferences';\nimport { ChatStatusIndicator } from './ChatStatusIndicator';\n\nexport type ChatPromptProps = ThemedClassName<\n Merge<\n {\n outline?: boolean;\n settings?: boolean;\n expandable?: boolean;\n db?: Database.Database;\n chat?: Chat.Chat;\n processor: AiChatProcessor;\n event: Event<ChatEvent>;\n online?: boolean;\n placeholder?: ChatEditorProps['placeholder'];\n onOnlineChange?: (online: boolean) => void;\n },\n ChatPresetProps\n >\n>;\n\nexport const ChatPrompt = ({\n classNames,\n outline,\n db,\n chat,\n processor,\n event,\n online,\n placeholder,\n onOnlineChange,\n onPresetChange,\n settings = true,\n presets,\n preset,\n}: ChatPromptProps) => {\n const { t } = useTranslation(meta.id);\n\n const error = useAtomValue(processor.error).pipe(Option.getOrUndefined);\n const streaming = useAtomValue(processor.streaming);\n const active = useAtomValue(processor.active);\n const activeRef = useDynamicRef(active);\n\n const editorRef = useRef<ChatEditorController>(null);\n const [recordingState, setRecordingState] = useState(false);\n useEffect(() => {\n return event.on((ev) => {\n switch (ev.type) {\n case 'update-prompt':\n if (!editorRef.current?.getText()?.length) {\n editorRef.current?.setText(ev.text);\n editorRef.current?.focus();\n }\n break;\n case 'record-start':\n setRecordingState(true);\n break;\n case 'record-stop':\n setRecordingState(false);\n break;\n }\n });\n }, [event]);\n\n // TODO(burdon): Configure capability in TranscriptionPlugin.\n const { recording } = useVoiceInput({\n active: recordingState,\n onUpdate: (text) => {\n editorRef.current?.setText(text);\n editorRef.current?.focus();\n },\n });\n\n const extensions = useChatKeymapExtensions({ event });\n\n const handleSubmit = useCallback<NonNullable<ChatEditorProps['onSubmit']>>(\n (text) => {\n if (!activeRef.current) {\n event.emit({ type: 'submit', text });\n return true;\n }\n },\n [event],\n );\n\n const handleEvent = useCallback<NonNullable<ChatActionsProps['onEvent']>>(\n (ev) => {\n event.emit(ev);\n },\n [event],\n );\n\n return (\n <div\n role='group'\n className={mx(\n 'flex flex-col w-full dx-density-md',\n outline &&\n 'bg-group-surface rounded-sm border border-subdued-separator transition transition-border [&:has(.cm-content:focus)]:border-separator',\n classNames,\n )}\n >\n <ChatMcpErrors processor={processor} />\n\n <div className='flex p-2 gap-2'>\n <ChatStatusIndicator classNames='p-1' preset={preset} error={error} processing={streaming} />\n <ChatEditor\n ref={editorRef}\n autoFocus\n lineWrapping\n classNames='col-span-2 pt-0.5'\n placeholder={placeholder ?? t('prompt.placeholder')}\n extensions={extensions}\n onSubmit={handleSubmit}\n />\n </div>\n\n {db && settings && (\n <div className='flex items-center overflow-hidden p-1.5'>\n <ChatOptions\n chat={chat}\n db={db}\n registry={processor.registry}\n context={processor.context}\n preset={preset}\n presets={presets}\n onPresetChange={onPresetChange}\n />\n\n <div className='flex h-6 grow overflow-x-auto scrollbar-none'>\n <ChatReferences db={db} context={processor.context} />\n </div>\n\n <ChatActions\n classNames='col-span-2'\n microphone={true}\n recording={recording}\n processing={streaming}\n onEvent={handleEvent}\n >\n {online !== undefined && (\n <Input.Root>\n <Input.Label srOnly>{t('online-switch.label')}</Input.Label>\n <Input.Switch classNames='mx-1' checked={online} onCheckedChange={onOnlineChange} />\n </Input.Root>\n )}\n </ChatActions>\n </div>\n )}\n </div>\n );\n};\n\nChatPrompt.displayName = 'Chat.Prompt';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type AiContext } from '@dxos/assistant';\nimport { type Database, Obj } from '@dxos/echo';\nimport { Icon, IconButton, type Label, type ThemedClassName, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { getStyles, mx } from '@dxos/ui-theme';\n\nimport { useContextObjects } from '#hooks';\nimport { meta } from '#meta';\n\nexport type ChatReferencesProps = ThemedClassName<{\n context: AiContext.Binder;\n db: Database.Database;\n}>;\n\nexport const ChatReferences = ({ classNames, context, db }: ChatReferencesProps) => {\n const { t } = useTranslation(meta.id);\n const { objects, onUpdateObject } = useContextObjects({ db, context });\n\n return (\n <ul className={mx('flex', classNames)}>\n {objects.map((obj) => {\n const uri = Obj.getURI(obj);\n const typename = Obj.getTypename(obj);\n const label: Label = Obj.getLabel(obj) ?? (typename ? ['object-name.placeholder', { ns: typename }] : obj.id);\n const { icon, hue } = Obj.getIcon(obj) ?? { icon: DEFAULT_OBJECT_ICON, hue: undefined };\n const styles = hue ? getStyles(hue) : undefined;\n return (\n <li key={uri.toString()} className='dx-tag py-0 flex items-center gap-1' data-hue='neutral'>\n <Icon icon={icon} size={4} />\n {toLocalizedString(label, t)}\n <IconButton\n icon='ph--x--bold'\n iconOnly\n variant='ghost'\n label={t('remove-object.label')}\n classNames='p-0 hover:bg-transparent'\n size={3}\n onClick={() => onUpdateObject?.(uri, false)}\n />\n </li>\n );\n })}\n </ul>\n );\n};\n\n// TODO(dmaretskyi): Extract those somewhere else.\nconst DEFAULT_OBJECT_ICON = 'ph--cube--regular';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useEffect, useState } from 'react';\n\nimport { type ThemedClassName, Tooltip, useTimeout } from '@dxos/react-ui';\nimport { Spinner, type SpinnerProps } from '@dxos/react-ui-components';\nimport { mx } from '@dxos/ui-theme';\n\nconst period = 3_000;\n\nexport type ChatStatusIndicatorProps = ThemedClassName<\n {\n preset?: string;\n processing?: boolean;\n error?: Error;\n } & Pick<SpinnerProps, 'size' | 'onClick'>\n>;\n\nexport const ChatStatusIndicator = ({ classNames, preset, processing, error, ...props }: ChatStatusIndicatorProps) => {\n const [init, setInit] = useState(false);\n useEffect(() => setInit(false), [preset]);\n useTimeout(\n async () => {\n setInit(true);\n },\n period / 2,\n [preset],\n );\n\n return (\n <div className={mx('relative flex', classNames)}>\n <Spinner duration={period} state={!init ? 'flash' : error ? 'error' : processing ? 'spin' : 'pulse'} {...props} />\n {error && (\n <Tooltip.Trigger asChild content={error.message}>\n <div className='absolute inset-0' />\n </Tooltip.Trigger>\n )}\n </div>\n );\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { ChatStatus as NaturalChatStatus, formatElapsed } from '@dxos/react-ui-chat';\nimport { Matrix } from '@dxos/react-ui-components';\nimport { type ContentBlock } from '@dxos/types';\nimport { Unit } from '@dxos/util';\n\nimport { type ChatRequestTiming, useChatContext } from '../Chat/context';\n\nconst CHAT_STREAM_STATUS_NAME = 'Chat.StreamStatus';\nconst TICK_MS = 1_000;\n\nexport type ChatStreamStatusProps = ThemedClassName<{\n icon?: boolean;\n}>;\n\n/**\n * Live status pill rendered at the bottom of the chat thread.\n *\n * The block-widget host re-mounts this component each time wire's drip queue toggles\n * (`wireDrainingEffect`) — so all visible state is derived from chat-context values that\n * survive the unmount: the latest `stats` block on the chat context's `messages` for token counts,\n * and `requestTiming` (start/end wall-clock timestamps) for the elapsed value.\n *\n * Shows:\n * - elapsed seconds since the most recent request started (frozen at end-of-request)\n * - last completed turn's output token count (from the most recent `stats` content block)\n * - cumulative session total tokens across all `stats` content blocks\n */\nexport const ChatStatus = ({ classNames, icon }: ChatStreamStatusProps) => {\n // Read `messages` from the chat context (combines `useQuery(queue)` + the processor's\n // pending atom) rather than `processor.messages` directly — the latter only contains\n // blocks streamed via the ephemeral `PartialBlock` channel, while finalized blocks\n // (including the per-turn `stats` block we read for token counts) are submitted to the\n // feed via `_submitMessage` and only show up through `useQuery`.\n const { messages, requestTiming } = useChatContext(CHAT_STREAM_STATUS_NAME);\n\n const { lastOutputTokens, sessionTotalTokens } = useMemo(() => {\n let last: number | undefined;\n let total = 0;\n for (const message of messages) {\n for (const block of message.blocks) {\n if (isStats(block) && block.usage) {\n last = block.usage.outputTokens;\n total += block.usage.totalTokens ?? 0;\n }\n }\n }\n return { lastOutputTokens: last, sessionTotalTokens: total };\n }, [messages]);\n\n const isRunning = requestTiming != null && requestTiming.endedAt == null;\n const show = requestTiming || lastOutputTokens || sessionTotalTokens > 0;\n if (!show) {\n return null;\n }\n\n return (\n <NaturalChatStatus.Root defaultRunning={false} classNames={['py-2 gap-2 text-sm', classNames]}>\n {icon && (\n <NaturalChatStatus.Icon>\n <Matrix\n classNames='w-5 h-5'\n dotClassNames='bg-primary-500'\n dim={4}\n dotSize={3}\n count={10}\n interval={500}\n active={isRunning}\n />\n </NaturalChatStatus.Icon>\n )}\n {show && (\n <div className='flex items-center'>\n {requestTiming && (\n <NaturalChatStatus.Text>\n <Elapsed timing={requestTiming} />\n </NaturalChatStatus.Text>\n )}\n {lastOutputTokens != null && (\n <>\n {requestTiming && <NaturalChatStatus.Separator />}\n <NaturalChatStatus.Text>↓ {Unit.Thousand(lastOutputTokens).toString()}</NaturalChatStatus.Text>\n </>\n )}\n {sessionTotalTokens > 0 && (\n <>\n {(requestTiming || lastOutputTokens != null) && <NaturalChatStatus.Separator />}\n <NaturalChatStatus.Text>Σ {Unit.Thousand(sessionTotalTokens).toString()}</NaturalChatStatus.Text>\n </>\n )}\n </div>\n )}\n </NaturalChatStatus.Root>\n );\n};\n\n/**\n * Wall-clock-derived elapsed display. Tick interval forces a re-render every second while\n * the request is active so the displayed value advances; once `endedAt` is set, the value\n * is frozen and the interval is no longer scheduled.\n */\nconst Elapsed = ({ timing }: { timing: ChatRequestTiming }) => {\n const isRunning = timing.endedAt == null;\n const [now, setNow] = useState(Date.now());\n useEffect(() => {\n if (!isRunning) {\n return;\n }\n\n const id = setInterval(() => setNow(Date.now()), TICK_MS);\n return () => clearInterval(id);\n }, [isRunning]);\n\n return <>{formatElapsed((timing.endedAt ?? now) - timing.startedAt)}</>;\n};\n\nconst isStats = (block: ContentBlock.Any): block is ContentBlock.Stats => block._tag === 'stats';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { forwardRef, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { PublicKey } from '@dxos/keys';\nimport { type Identity } from '@dxos/react-client/halo';\nimport { type ThemedClassName, setRef } from '@dxos/react-ui';\nimport { MarkdownStream, type MarkdownStreamController, type MarkdownStreamProps } from '@dxos/react-ui-markdown';\nimport { type Message } from '@dxos/types';\nimport { keyToFallback } from '@dxos/util';\n\nimport { type Assistant } from '../../types';\nimport { type ChatEvent } from '../Chat';\nimport { componentRegistry, createBlockRenderer } from './registry';\nimport { MessageSyncer } from './sync';\n\nconst defaultOptions: MarkdownStreamProps['options'] = {\n autoScroll: true,\n cursor: false,\n fader: false,\n typewriter: true,\n};\n\nexport type ChatThreadProps = ThemedClassName<\n {\n identity?: Identity;\n messages?: Message.Message[];\n error?: Error;\n viewType?: Assistant.ChatView;\n onEvent?: (event: ChatEvent) => void;\n } & Pick<MarkdownStreamProps, 'options' | 'debug' | 'extensions' | 'footer'>\n>;\n\nexport const ChatThread = forwardRef<MarkdownStreamController | null, ChatThreadProps>(\n (\n {\n classNames,\n identity,\n messages = [],\n error,\n options = defaultOptions,\n footer,\n debug = false,\n extensions,\n viewType,\n onEvent,\n },\n forwardedRef,\n ) => {\n const [controller, setController] = useState<MarkdownStreamController | null>(null);\n const handleMarkdownStreamRef = useCallback(\n (instance: MarkdownStreamController | null) => {\n setController(instance);\n setRef(forwardedRef, instance);\n },\n [forwardedRef],\n );\n\n const userHue = useMemo(\n () => identity?.profile?.data?.hue || keyToFallback(identity?.identityKey ?? PublicKey.random()).hue,\n [identity],\n );\n\n // Jump to the bottom instantly when the thread first mounts (e.g. opening the companion);\n // smooth-scroll only on subsequent error changes.\n const initializedRef = useRef(false);\n useEffect(() => {\n if (!controller) {\n // MarkdownStream is keyed by viewType; switching views replaces the controller. Reset so\n // the first scroll for the new controller is instant rather than animated.\n initializedRef.current = false;\n return;\n }\n controller.scrollToBottom(initializedRef.current ? 'smooth' : 'instant');\n initializedRef.current = true;\n }, [controller, error]);\n\n // Update document.\n const renderer = useMemo(() => createBlockRenderer(viewType), [viewType]);\n const syncer = useMemo(() => controller && new MessageSyncer(controller, renderer), [controller, renderer]);\n useEffect(() => {\n if (!syncer) {\n return;\n }\n\n if (syncer.update(messages)) {\n controller?.scrollToBottom('instant');\n }\n }, [controller, syncer, messages]);\n\n // Event adapter.\n const handleEvent = useCallback<NonNullable<MarkdownStreamProps['onEvent']>>(\n ({ type, value }) => {\n switch (type) {\n case 'submit': {\n value && onEvent?.({ type, text: value });\n break;\n }\n }\n },\n [onEvent],\n );\n\n return (\n <div data-hue={userHue} className='contents'>\n <MarkdownStream\n key={viewType}\n classNames={classNames}\n registry={componentRegistry}\n options={options}\n debug={debug}\n extensions={extensions}\n footer={footer}\n onEvent={handleEvent}\n ref={handleMarkdownStreamRef}\n />\n </div>\n );\n },\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { log } from '@dxos/log';\nimport { ContentBlock, type Message } from '@dxos/types';\nimport { type XmlWidgetRegistry, getXmlTextChild } from '@dxos/ui-editor';\n\nimport { type Assistant } from '../../types';\nimport { type BlockRenderer, type MessageThreadContext } from './sync';\nimport { applyToolBlockToWidgetState } from './tool-widget-state';\nimport {\n FallbackWidget,\n ReasoningWidget,\n ReferenceWidget,\n SelectWidget,\n SuggestionWidget,\n StatsWidget,\n SummaryWidget,\n ToolWidget,\n StatusWidget,\n} from './widgets';\n\n/**\n * Custom XML tags registry.\n *\n * NOTE: `<prompt>` has no widget — it is rendered via mark + line decorations\n * (`xmlBlockDecoration`) in MarkdownStream so the prompt text remains part of the document\n * and can be highlighted by `xmlFormatting`. It is still listed here so the markdown block\n * parser (`xmlBlockParsers`) knows to keep `<prompt>...</prompt>` as a single HTMLBlock\n * — otherwise an unregistered prompt opens a Paragraph that lazy-continues into the\n * following lines and breaks parsing of subsequent multi-line tags (e.g. a `<reasoning>`\n * block whose content contains an ordered list).\n */\nexport const componentRegistry: XmlWidgetRegistry = {\n //\n // Block-only (no widget — see note above).\n //\n\n prompt: {\n block: true,\n },\n\n //\n // DOM Widgets\n //\n\n synthetic: {\n block: true,\n factory: ({ children, range }) => {\n const text = getXmlTextChild(children);\n // TODO(dmaretskyi): Synthetic blocks are \"user\"-turn messages generated by the system, i.e. and event from a trigger, an email-encoded to JSON, etc.\n // They are meant to start agent, to process the event without looking like user-authored prompt.\n // Create a new widget type for them.\n return text ? new ReasoningWidget(text, range.from) : null;\n },\n },\n reasoning: {\n block: true,\n streaming: true,\n factory: ({ children, range }) => {\n const text = getXmlTextChild(children);\n return text ? new ReasoningWidget(text, range.from) : null;\n },\n },\n reference: {\n block: false,\n factory: ({ children, ref }) => {\n const text = getXmlTextChild(children);\n return text && ref ? new ReferenceWidget(text, ref) : null;\n },\n },\n select: {\n block: true,\n factory: ({ children }) => {\n const options = children\n ?.map((option: any) => option._tag === 'option' && getXmlTextChild(option.children))\n .filter(Boolean);\n return options?.length ? new SelectWidget(options) : null;\n },\n },\n suggestion: {\n block: true,\n factory: ({ children }) => {\n const text = getXmlTextChild(children);\n return text ? new SuggestionWidget(text) : null;\n },\n },\n stats: {\n block: true,\n factory: ({ children }) => {\n const text = getXmlTextChild(children);\n return text ? new StatsWidget(text) : null;\n },\n },\n status: {\n block: true,\n streaming: true,\n factory: ({ children }) => {\n const text = getXmlTextChild(children);\n return text ? new StatusWidget(text) : null;\n },\n },\n\n //\n // React Widgets (portaled outside of the editor)\n //\n\n summary: {\n block: true,\n Component: SummaryWidget,\n },\n toolCall: {\n block: true,\n Component: (props) => (\n <div className='py-2'>\n <ToolWidget {...props} />\n </div>\n ),\n },\n toolResult: {\n block: true,\n Component: FallbackWidget,\n },\n toolkit: {\n block: true,\n Component: FallbackWidget,\n },\n\n //\n // Fallback\n //\n\n json: {\n block: true,\n Component: FallbackWidget,\n },\n};\n\n/**\n * Convert block to markdown.\n */\nexport const blockToMarkdown: BlockRenderer = createBlockRenderer('normal');\n\n/**\n * Create a {@link BlockRenderer} that filters blocks based on the chat view type.\n *\n * - `summary`: only user prompts.\n * - `normal`: user prompts + assistant text + tool calls + summary/select/suggestion/reference + status. Hides reasoning.\n * - `thinking`: same as normal plus reasoning.\n * - `debug`: renders every block (raw fallbacks visible).\n */\nexport function createBlockRenderer(viewType: Assistant.ChatView | undefined): BlockRenderer {\n return (context, message, block) => {\n if (!isBlockVisible(viewType, message, block)) {\n return;\n }\n let str = blockToMarkdownImpl(context, message, block);\n if (str && !block.pending) {\n // Use a blank line as the block separator so each rendered block parses as its own\n // markdown block. A single newline lets CommonMark absorb a following `<prompt>` (an\n // HTML type-7 tag, which can't interrupt an open paragraph) into the previous\n // paragraph, rendering the prompt bubble inline next to the prior assistant text.\n return (str += '\\n');\n }\n return str;\n };\n}\n\nconst isBlockVisible = (\n viewType: Assistant.ChatView | undefined,\n message: Message.Message,\n block: ContentBlock.Any,\n): boolean => {\n switch (viewType) {\n case 'debug':\n return true;\n case 'normal':\n return block._tag !== 'reasoning';\n case 'summary':\n // Show only conversational text (user prompts + assistant replies); hide reasoning,\n // tool calls, status, stats, and synthetic system messages.\n return block._tag === 'text' && (block as ContentBlock.Text).disposition !== 'synthetic';\n case 'thinking':\n default:\n return true;\n }\n};\n\nconst blockToMarkdownImpl = (context: MessageThreadContext, message: Message.Message, block: ContentBlock.Any) => {\n log('blockToMarkdown', { block: JSON.stringify(block) });\n switch (block._tag) {\n case 'text': {\n if (message.sender.role === 'user') {\n if (block.disposition === 'synthetic') {\n return renderXMLBlock('synthetic', { content: block.text, pending: block.pending });\n } else {\n return `\\n<prompt>${block.text}</prompt>`;\n }\n } else {\n const text = block.text.trim();\n if (text.length > 0) {\n return text;\n }\n }\n break;\n }\n\n case 'reference': {\n if (block.pending) {\n return;\n }\n const dxn = block.reference.uri;\n return `<reference ref=\"${dxn.toString()}\">${context.getObjectLabel(dxn)}</reference>`;\n }\n\n case 'suggestion': {\n if (block.pending) {\n return;\n }\n return `<suggestion>${block.text}</suggestion>`;\n }\n\n case 'select': {\n if (block.pending || block.options.length === 0) {\n return;\n }\n return `<select>${block.options.map((option) => `<option>${option}</option>`).join('')}</select>`;\n }\n\n case 'toolCall': {\n applyToolBlockToWidgetState(context, block);\n return `<toolCall id=\"${block.toolCallId}\" />`;\n }\n\n case 'toolResult': {\n // TODO(dmaretskyi): the parameter could be undefined, perhaps tool blocks are not arriving in order.\n applyToolBlockToWidgetState(context, block);\n break;\n }\n\n case 'stats': {\n return '';\n }\n\n case 'reasoning': {\n let text = block.reasoningText ?? block.redactedText;\n if (!text) {\n return;\n }\n return renderXMLBlock('reasoning', { content: text, pending: block.pending });\n }\n\n case 'summary': {\n return renderXMLBlock('summary', { content: block.content, pending: block.pending });\n }\n\n case 'status': {\n return renderXMLBlock('status', { content: block.statusText, pending: block.pending });\n }\n\n default: {\n // TODO(burdon): Needs stable ID.\n return `<json id=\"${message.id}\">\\n${JSON.stringify(block)}\\n</json>`;\n }\n }\n};\n\n/**\n * Escape text embedded in generated XML so the mixed XML parser does not treat `&`, `<`, `>` as markup.\n */\nconst escapeXmlTextContent = (raw: string): string =>\n raw.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n\nconst renderXMLBlock = (tag: string, opts: { content?: string; pending?: boolean; attributes?: string }) => {\n // Replace paragraph breaks so that the markdown parser does not split the content into multiple paragraphs.\n // NOTE: do not strip leading list-marker prefixes (`-`, `*`, `1. `, ...) per line — the streaming\n // tag's range is replaced atomically by the XML widget so the inner markdown is never user-visible,\n // and stripping can collapse a line to empty mid-stream (e.g. when only `1. ` has arrived), breaking\n // the prefix-extension contract that `MessageSyncer` relies on for incremental appends.\n const content = escapeXmlTextContent((opts.content ?? '').replace(/\\n\\n/g, ' ').trim());\n\n if (opts.pending) {\n return `<${tag}${opts.attributes ? ` ${opts.attributes}` : ''}>${content}`;\n } else {\n return `<${tag}${opts.attributes ? ` ${opts.attributes}` : ''}>${content}</${tag}>`;\n }\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { type ContentBlock, type Message } from '@dxos/types';\nimport { type StateDispatch } from '@dxos/ui-editor';\n\n/**\n * Minimal surface used to push tool call / result blocks into {@link MarkdownStreamController} widget state.\n */\nexport type ToolWidgetStateSink = {\n updateWidget<T>(id: string, value: StateDispatch<T>): void;\n};\n\n/**\n * Mirrors tool-related branches of {@link blockToMarkdown} so widget props stay in sync with message blocks.\n */\nexport const applyToolBlockToWidgetState = (context: ToolWidgetStateSink, block: ContentBlock.Any): void => {\n switch (block._tag) {\n case 'toolCall': {\n context.updateWidget<{ blocks: ContentBlock.Any[] }>(block.toolCallId, {\n blocks: [block],\n });\n break;\n }\n case 'toolResult': {\n context.updateWidget<{ blocks: ContentBlock.Any[] }>(block.toolCallId, ({ blocks = [] } = { blocks: [] }) => ({\n blocks: [...blocks, block],\n }));\n break;\n }\n default: {\n break;\n }\n }\n};\n\n/**\n * Re-applies tool widget state after a full document replace (e.g. {@link MarkdownStreamController.setContent}),\n * which clears accumulated widget props via `xmlTagResetEffect`.\n */\nexport const rehydrateToolWidgetsFromMessages = (context: ToolWidgetStateSink, messages: Message.Message[]): void => {\n for (const message of messages) {\n for (const block of message.blocks) {\n applyToolBlockToWidgetState(context, block);\n }\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { TogglePanel } from '@dxos/react-ui-components';\nimport { JsonHighlighter } from '@dxos/react-ui-syntax-highlighter';\nimport { type XmlWidgetProps } from '@dxos/ui-editor';\n\nimport { type MessageThreadContext } from '../sync';\n\nexport const FallbackWidget = ({ _tag, ...props }: XmlWidgetProps<MessageThreadContext>) => {\n return (\n <TogglePanel.Root>\n <TogglePanel.Content>\n <TogglePanel.Header classNames='bg-group-surface'>{_tag}</TogglePanel.Header>\n <TogglePanel.Body classNames='bg-modal-surface'>\n <TogglePanel.Viewport>\n <JsonHighlighter classNames='p-2! text-sm' data={props} />\n </TogglePanel.Viewport>\n </TogglePanel.Body>\n </TogglePanel.Content>\n </TogglePanel.Root>\n );\n};\n\nFallbackWidget.displayName = 'Fallback';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { WidgetType } from '@codemirror/view';\n\nimport { Domino } from '@dxos/ui';\n\nimport { styles } from './defaults';\n\n/**\n * Props used to derive a stable key for a reasoning block across CodeMirror widget rebuilds.\n * CodeMirror does not assign persistent IDs to widgets; streaming re-runs the factory each tick.\n */\nexport type ReasoningWidgetBlockIdProps = {\n id?: string;\n range?: { from: number; to: number };\n};\n\n/**\n * AI reasoning widget.\n */\nexport class ReasoningWidget extends WidgetType {\n readonly #pos: string;\n /** The timer id last registered for this instance (may differ from the map if superseded). */\n #ownedTimerId: ReturnType<typeof setTimeout> | null = null;\n\n constructor(\n private readonly text: string,\n pos: string | number | undefined,\n ) {\n super();\n this.#pos = pos === undefined || pos === '' ? 'reasoning' : String(pos);\n }\n\n override eq(other: this) {\n return this.text === other.text && this.#pos === other.#pos;\n }\n\n override toDOM() {\n return Domino.of('div')\n .classNames(styles.padding)\n .append(\n Domino.of('div')\n .classNames('relative overflow-hidden p-px', styles.border)\n .attributes({ 'data-trail-container': '' })\n .append(\n Domino.of('div')\n .classNames(\n 'relative z-10 bg-base-surface rounded-sm text-sm text-subdued py-1',\n 'grid grid-cols-[24px_1fr] gap-x-0.5 items-start',\n )\n .append(\n Domino.of('div')\n .classNames('flex h-5 w-full shrink-0 items-center justify-center self-start')\n .append(Domino.svg('ph--brain--regular').classNames('shrink-0 size-4 opacity-70')),\n Domino.of('div')\n .classNames('px-2 max-h-[5lh] overflow-y-auto dx-scrollbar-thin min-w-0')\n .text(this.text)\n .attributes({ 'data-reasoning-text': '' }),\n ),\n Domino.of('div').attributes({ 'data-id': this.#pos }),\n ),\n ).root;\n }\n\n override updateDOM(dom: HTMLElement) {\n // Update only the text leaf; `dom` may be wrapped in an outer shell, and the trail host is a\n // sibling of the text node inside the bordered container — setting `textContent` on the wrong\n // ancestor would remove `[data-id]`.\n dom.querySelector<HTMLElement>('[data-reasoning-text]')?.replaceChildren(this.text);\n\n // Recreate trail host if it was removed by a prior timeout (streaming paused > TRAIL_REMOVAL_DELAY_MS).\n const container = dom.querySelector<HTMLElement>('[data-trail-container]');\n let trailHost = container?.querySelector<HTMLElement>('[data-id]');\n if (container && !trailHost) {\n trailHost = Domino.of('div').attributes({ 'data-id': this.#pos }).root;\n container.append(trailHost);\n }\n if (trailHost?.childElementCount === 0) {\n trailHost.append(...createTrailLayers());\n }\n\n this.#scheduleTrailRemoval(dom);\n return true;\n }\n\n override destroy(_dom: HTMLElement) {\n this.#clearOwnedTrailTimer();\n }\n\n #scheduleTrailRemoval(dom: HTMLElement) {\n const previous = trailRemovalTimers.get(this.#pos);\n if (previous !== undefined) {\n clearTimeout(previous);\n }\n\n const timerId = setTimeout(() => {\n if (trailRemovalTimers.get(this.#pos) !== timerId) {\n return;\n }\n trailRemovalTimers.delete(this.#pos);\n this.#ownedTimerId = null;\n dom.querySelector<HTMLElement>('[data-id]')?.remove();\n }, TRAIL_REMOVAL_DELAY_MS);\n\n trailRemovalTimers.set(this.#pos, timerId);\n this.#ownedTimerId = timerId;\n }\n\n #clearOwnedTrailTimer() {\n const active = trailRemovalTimers.get(this.#pos);\n if (active !== undefined && active === this.#ownedTimerId) {\n clearTimeout(active);\n trailRemovalTimers.delete(this.#pos);\n }\n this.#ownedTimerId = null;\n }\n}\n\nconst trail = [\n 'absolute z-0 aspect-[2/1] w-16',\n 'bg-[radial-gradient(at_100%_50%,_theme(colors.green.700),_transparent_80%)]',\n '[offset-anchor:100%_50%] [offset-path:border-box]',\n];\n\n/** Delay after the last content update before hiding the trail. */\nconst TRAIL_REMOVAL_DELAY_MS = 1_000;\n\n/**\n * One pending removal timer per logical block. Streaming creates a new widget instance each tick;\n * `destroy` may run after the next instance has already scheduled, so we must not clear a newer timer.\n */\nconst trailRemovalTimers = new Map<string, ReturnType<typeof setTimeout>>();\n\nconst createTrailLayers = (): [HTMLElement, HTMLElement] => [\n Domino.of('div').classNames(...trail, 'animate-trail').root,\n Domino.of('div').classNames(...trail, 'animate-trail-offset').root,\n];\n", "//\n// Copyright 2026 DXOS.org\n//\n\nexport const styles = {\n padding: 'my-4',\n border: 'border border-subdued-separator rounded-sm',\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { WidgetType } from '@codemirror/view';\n\nimport { Domino } from '@dxos/ui';\n\nimport { styles } from './defaults';\n\nexport class ReferenceWidget extends WidgetType {\n constructor(\n private text: string,\n private dxn: string,\n ) {\n super();\n }\n\n override eq(other: this) {\n return this.dxn === other.dxn;\n }\n\n override toDOM() {\n return Domino.of('div')\n .classNames(styles.padding)\n .append(\n Domino.of('dx-anchor' as any)\n .classNames('dx-tag--anchor')\n .attributes({ dxn: this.dxn })\n .text(this.text),\n ).root;\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { WidgetType } from '@codemirror/view';\n\nimport { Domino } from '@dxos/ui';\n\nimport { styles } from './defaults';\n\n/**\n * Simple prompt widget.\n */\nexport class SelectWidget extends WidgetType {\n constructor(private options: string[]) {\n super();\n }\n\n override eq(other: this) {\n return JSON.stringify(this.options) === JSON.stringify(other.options);\n }\n\n /**\n * NOTE: Container must set var based on user's identity.\n */\n override toDOM() {\n return Domino.of('div')\n .attributes({ role: 'group' })\n .classNames(styles.padding, 'flex flex-wrap gap-1')\n .append(\n ...this.options.map((option) =>\n Domino.of('button')\n .classNames('dx-button inline-block max-w-[100cqi]')\n .attributes({ 'data-action': 'submit', 'data-value': option, 'data-density': 'md' })\n .text(option),\n ),\n ).root;\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { WidgetType } from '@codemirror/view';\n\nimport { Domino } from '@dxos/ui';\n\nimport { styles } from './defaults';\n\n/**\n * Simple stats widget.\n */\nexport class StatsWidget extends WidgetType {\n constructor(private text: string) {\n super();\n }\n\n override eq(other: this) {\n return this.text === other.text;\n }\n\n override toDOM() {\n return Domino.of('div').classNames(styles.padding, 'text-sm text-placeholder').text(this.text).root;\n }\n\n override updateDOM(dom: HTMLElement) {\n dom.textContent = this.text;\n return true;\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { WidgetType } from '@codemirror/view';\n\nimport { Domino } from '@dxos/ui';\n\nimport { styles } from './defaults';\n\n/**\n * AI status widget.\n */\nexport class StatusWidget extends WidgetType {\n constructor(private readonly text: string) {\n super();\n }\n\n override eq(other: this) {\n return this.text === other.text;\n }\n\n override toDOM() {\n return Domino.of('div')\n .classNames(styles.padding)\n .append(\n Domino.of('div')\n .classNames('relative overflow-hidden rounded-sm')\n .append(\n Domino.of('div')\n .classNames('grid grid-cols-[24px_1fr] gap-x-0.5 gap-y-0 items-start px-0.5 py-0.5 text-placeholder')\n .append(\n Domino.of('div')\n .classNames('flex h-5 w-full shrink-0 items-center justify-center self-start')\n .append(Domino.svg('ph--info--regular').classNames('shrink-0 size-4 opacity-70')),\n Domino.of('div')\n .classNames('relative min-w-0')\n .append(\n Domino.of('div')\n .classNames('relative z-10 rounded-sm text-sm leading-5')\n .attributes({ 'data-status-text': '' })\n .text(this.text),\n ),\n ),\n ),\n ).root;\n }\n\n override updateDOM(dom: HTMLElement) {\n dom.querySelector<HTMLElement>('[data-status-text]')?.replaceChildren(this.text);\n return true;\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useTranslation } from '@dxos/react-ui';\nimport { TogglePanel } from '@dxos/react-ui-components';\nimport { type XmlWidgetProps } from '@dxos/ui-editor';\n\nimport { meta } from '#meta';\n\nimport { MessageThreadContext } from '../sync';\nimport { styles } from './defaults';\n\nexport const SummaryWidget = ({ children }: XmlWidgetProps<MessageThreadContext>) => {\n const { t } = useTranslation(meta.id);\n\n return (\n <TogglePanel.Root>\n <TogglePanel.Content classNames={styles.border}>\n <TogglePanel.Header classNames='text-sm bg-group-surface'>{t('summary.label')}</TogglePanel.Header>\n <TogglePanel.Body>\n <div className='p-1 text-sm text-subdued'>{children}</div>\n </TogglePanel.Body>\n </TogglePanel.Content>\n </TogglePanel.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { WidgetType } from '@codemirror/view';\n\nimport { Domino, mx } from '@dxos/ui';\n\n/**\n * Simple prompt widget.\n */\nexport class SuggestionWidget extends WidgetType {\n constructor(private text: string) {\n super();\n }\n\n override eq(other: this) {\n return this.text === other.text;\n }\n\n override toDOM() {\n // NOTE: Container must have `dx-inline-size-container` (or `dx-size-container`) to support cqi.\n return Domino.of('span')\n .classNames(mx('inline-flex max-w-[calc(100cqi-8px)] my-1 pe-2 overflow-hidden'))\n .append(\n Domino.of('button')\n .attributes({\n 'data-action': 'submit',\n 'data-density': 'md',\n 'data-value': this.text,\n })\n .classNames(mx('dx-button gap-2 w-full overflow-hidden'))\n .append(\n Domino.of('dx-icon' as any).attributes({\n icon: 'ph--lightning--regular',\n }),\n Domino.of('span').classNames('flex-1 truncate min-w-0').text(this.text),\n ),\n ).root;\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Tool from '@effect/ai/Tool';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { Icon, useTranslation } from '@dxos/react-ui';\nimport { NumericTabs, TextCrawl, TogglePanel, type TogglePanelRootProps } from '@dxos/react-ui-components';\nimport { JsonHighlighter } from '@dxos/react-ui-syntax-highlighter';\nimport { type ContentBlock, type Message } from '@dxos/types';\nimport { type XmlWidgetProps } from '@dxos/ui-editor';\nimport { isNonNullable, safeParseJson } from '@dxos/util';\n\nimport { meta } from '#meta';\n\nexport const isToolMessage = (message: Message.Message) => {\n return message.blocks.some((block: ContentBlock.Any) => block._tag === 'toolCall' || block._tag === 'toolResult');\n};\n\nexport type ToolWidgetProps = XmlWidgetProps<{\n blocks: ContentBlock.Any[];\n}>;\n\nexport const ToolWidget = ({ view, blocks = [] }: ToolWidgetProps) => {\n const { t } = useTranslation(meta.id);\n\n const items = useMemo<ToolPanelProps['items']>(() => {\n let lastToolCall: { tool: Tool.Any | undefined; block: ContentBlock.ToolCall } | undefined;\n // TODO(burdon): Get from context?\n const tools: Tool.Any[] = []; //processor.conversation.toolkit?.tools ?? [];\n return blocks\n .filter((block) => block._tag === 'toolCall' || block._tag === 'toolResult' || block._tag === 'stats')\n .map((block) => {\n switch (block._tag) {\n case 'toolCall': {\n if (block.pending && lastToolCall?.block.toolCallId === block.toolCallId) {\n return null;\n }\n\n const tool = tools.find((tool) => tool.name === block.name);\n lastToolCall = { tool, block };\n return {\n title: tool?.description ?? [t('tool-call.label'), block.name].filter(Boolean).join(' '),\n icon: block.operationIcon,\n content: {\n ...block,\n input: safeParseJson(block.input),\n },\n };\n }\n\n case 'toolResult': {\n // TODO(burdon): Parse error type.\n if (block.error) {\n return {\n title: t('tool-error.label'),\n icon: lastToolCall?.block.operationIcon,\n content: block,\n };\n }\n\n const title =\n lastToolCall?.tool?.description ??\n [t('tool-result.label'), lastToolCall?.block.name].filter(Boolean).join(' ');\n const icon = lastToolCall?.block.operationIcon;\n lastToolCall = undefined;\n return {\n title,\n icon,\n content: {\n ...block,\n result: typeof block.result === 'string' ? safeParseJson(block.result) : block.result,\n },\n };\n }\n\n case 'stats': {\n if (!lastToolCall) {\n return null;\n }\n\n return {\n title: t('stats.label'),\n icon: lastToolCall.block.operationIcon,\n content: block,\n };\n }\n }\n })\n .filter(isNonNullable);\n }, [blocks, t]);\n\n const handleChangeOpen = useCallback(() => {\n setTimeout(() => {\n // Measure after animation.\n view?.requestMeasure();\n }, 1_000);\n }, [view]);\n\n // Ignore if empty.\n if (!items.length) {\n return null;\n }\n\n return <ToolPanel items={items} onChangeOpen={handleChangeOpen} />;\n};\n\ntype ToolPanelItem = { title: string; icon?: string; content: any };\n\ntype ToolPanelProps = {\n items: ToolPanelItem[];\n} & Pick<TogglePanelRootProps, 'onChangeOpen'>;\n\nconst DEFAULT_TOOL_ICON = 'ph--wrench--regular';\n\nconst ToolPanel = ({ items, onChangeOpen }: ToolPanelProps) => {\n const tabsRef = useRef<HTMLDivElement>(null);\n const [selected, setSelected] = useState(0);\n const [open, setOpen] = useState(false);\n\n // Clamp selected to avoid out-of-bounds after items shrink.\n useEffect(() => {\n setSelected((prev) => Math.min(prev, Math.max(0, items.length - 1)));\n }, [items.length]);\n\n useEffect(() => {\n onChangeOpen?.(open);\n if (open) {\n tabsRef.current?.focus();\n }\n }, [open, onChangeOpen]);\n\n const handleSelect = useCallback((index: number) => {\n setSelected(index);\n }, []);\n\n // Prefer the icon from the latest tool call so the header reflects what's currently active.\n // TextCrawl shows multiple titles, but only one icon slot — using the most recent keeps it in sync\n // with the visible operation while it streams.\n const headerIcon = items[items.length - 1]?.icon ?? items[0]?.icon ?? DEFAULT_TOOL_ICON;\n\n return (\n <TogglePanel.Root open={open} onChangeOpen={setOpen}>\n <TogglePanel.Content>\n <TogglePanel.Header classNames='flex items-center gap-2 text-sm text-placeholder'>\n <Icon icon={headerIcon} size={4} classNames='shrink-0 opacity-70' />\n <TextCrawl key='status-roll' lines={items.map((item) => item.title)} autoAdvance greedy />\n </TogglePanel.Header>\n <TogglePanel.Body>\n <TogglePanel.Viewport classNames='grid grid-cols-[32px_1fr]'>\n <NumericTabs\n ref={tabsRef}\n classNames='p-1'\n length={items.length}\n selected={selected}\n onSelect={handleSelect}\n />\n <JsonHighlighter\n data={items[selected]?.content}\n classNames='p-1 text-xs bg-transparent'\n replacer={{\n maxDepth: 3,\n maxArrayLen: 10,\n maxStringLen: 128,\n }}\n />\n </TogglePanel.Viewport>\n </TogglePanel.Body>\n </TogglePanel.Content>\n </TogglePanel.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type URI } from '@dxos/keys';\nimport { type MarkdownStreamController } from '@dxos/react-ui-markdown';\nimport { type ContentBlock, type Message } from '@dxos/types';\nimport { type StateDispatch, type XmlWidgetStateManager } from '@dxos/ui-editor';\n\nimport { rehydrateToolWidgetsFromMessages } from './tool-widget-state';\n\n/**\n * Update document.\n */\nexport type TextModel = Pick<MarkdownStreamController, 'length' | 'setContent' | 'append' | 'updateWidget'>;\n\n/**\n * Renders a block to markdown.\n *\n * Contract: for any block whose lifetime spans multiple invocations (i.e. a streaming block\n * with `pending: true` whose content grows over time, transitioning to `pending: false`), the\n * sequence of returned strings must be monotonically extending — each subsequent value must be\n * a string-extension of the previous. The {@link MessageSyncer} relies on this invariant to\n * compute appendable deltas without diffing.\n */\nexport type BlockRenderer = (\n context: MessageThreadContext,\n message: Message.Message,\n block: ContentBlock.Any,\n) => string | undefined;\n\n/**\n * Thread context passed to renderer.\n */\nexport class MessageThreadContext implements Pick<MarkdownStreamController, 'updateWidget'> {\n constructor(private readonly _widgetState?: XmlWidgetStateManager) {}\n\n updateWidget<T>(id: string, value: StateDispatch<T>) {\n this._widgetState?.updateWidget(id, value);\n }\n\n // TODO(burdon): Resolve name from hypergraph.\n getObjectLabel(_id: URI.URI) {\n return 'Object';\n }\n}\n\n/**\n * Syncs messages with the editor.\n *\n * Reflects the AI streaming contract:\n * - Messages and their blocks are appended in order.\n * - Only the last block in `messages` may be `pending`; all earlier blocks are finalized.\n * - The renderer's output for a streaming block grows monotonically (see {@link BlockRenderer}).\n * - The document is read-only outside this syncer.\n *\n * Under those rules the syncer needs only:\n * - `_completed`: the flat-block index past which everything has been fully appended.\n * - `_trailing`: chars of the in-flight block (at index `_completed`) already appended.\n * - `_threadId`: identity sentinel; if `messages[0]?.id` changes, the document is replaced.\n */\nexport class MessageSyncer {\n private _threadId?: string;\n private _completed = 0;\n private _trailing = 0;\n\n private readonly _context: MessageThreadContext;\n\n constructor(\n private readonly _document: TextModel,\n private readonly _renderer: BlockRenderer,\n ) {\n this._context = new MessageThreadContext(this._document);\n }\n\n get context() {\n return this._context;\n }\n\n /**\n * Replace the document with the rendering of `messages`. Use on mount, on thread switch,\n * and from {@link update} when it detects an identity change in `messages[0]`.\n */\n reset(messages: Message.Message[] = []): void {\n this._threadId = messages[0]?.id;\n this._completed = 0;\n this._trailing = 0;\n const buffer = this._walk(messages);\n // Match the pre-rewrite behaviour: rendering from a steady state (initial mount with\n // non-empty messages, or thread switch) lands the entire content via `setContent` — which\n // uses `wireBypass`, so the editor jumps straight to the final text and `update()` returns\n // `true` so the caller can scroll to the bottom. Live streaming partials that arrive\n // *after* this initial render flow through `update()`'s incremental path → `_document.append`\n // → wire's drip filter, preserving the char-by-char typewriter for incoming text.\n void this._document.setContent(buffer).then(() => {\n rehydrateToolWidgetsFromMessages(this._context, messages);\n });\n }\n\n /**\n * Stream the suffix of the rendered messages into the document.\n * Returns `true` if the document was replaced (initial mount or thread switch), `false`\n * if the call was a streaming append (or a no-op).\n */\n update(messages: Message.Message[]): boolean {\n if (messages[0]?.id !== this._threadId) {\n this.reset(messages);\n return true;\n }\n const buffer = this._walk(messages);\n if (buffer.length > 0) {\n void this._document.append(buffer);\n }\n return false;\n }\n\n /**\n * Walk flat blocks starting at `_completed`, advancing the cursors and returning the chars\n * to append. Blocks before `_completed` are skipped — their renderer is never re-invoked,\n * which preserves single-shot side effects (e.g. tool widget state mutation).\n */\n _walk(messages: Message.Message[]): string {\n let buffer = '';\n let index = 0;\n outer: for (const message of messages) {\n for (const block of message.blocks) {\n if (index < this._completed) {\n index++;\n continue;\n }\n const rendered = this._renderer(this._context, message, block) ?? '';\n if (rendered.length > this._trailing) {\n buffer += rendered.slice(this._trailing);\n }\n if (block.pending) {\n // Stay on this block; record how far we've appended so the next call can resume.\n // `Math.max`-style guard against a non-monotonic renderer output without shrinking the doc.\n if (rendered.length > this._trailing) {\n this._trailing = rendered.length;\n }\n break outer;\n }\n this._completed = index + 1;\n this._trailing = 0;\n index++;\n }\n }\n return buffer;\n }\n}\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Plan } from '@dxos/assistant-toolkit';\nimport { useObject } from '@dxos/react-client/echo';\nimport { Icon, Tag, type ThemedClassName } from '@dxos/react-ui';\nimport { composable, composableProps } from '@dxos/react-ui';\nimport { Row, RowList } from '@dxos/react-ui-list';\n\nexport type TaskListProps = ThemedClassName<{\n plan: Plan.Plan;\n}>;\n\nexport const TaskList = composable<HTMLDivElement, TaskListProps>(({ plan, ...props }, forwardedRef) => {\n const [snapshot] = useObject(plan);\n const tasks = snapshot?.tasks ?? [];\n\n return (\n <RowList.Root>\n <RowList.Viewport {...composableProps(props, { classNames: 'dx-container' })} ref={forwardedRef}>\n <RowList.Content aria-label='Tasks'>\n {tasks.map((task) => (\n <Row key={task.id} id={task.id} classNames='py-0'>\n <div className='flex items-center gap-2'>\n <Icon\n icon={task.status === 'done' ? 'ph--check--regular' : 'ph--circle--regular'}\n classNames={task.status === 'done' ? 'text-success-text' : undefined}\n size={4}\n />\n <span className='sr-only'>\n {task.status === 'done' ? 'done' : task.status === 'in-progress' ? 'in progress' : 'to do'}\n </span>\n <span className='truncate flex-1'>{task.title}</span>\n {task.status === 'in-progress' && <Tag palette='info'>pending</Tag>}\n </div>\n </Row>\n ))}\n </RowList.Content>\n </RowList.Viewport>\n </RowList.Root>\n );\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Match from 'effect/Match';\nimport * as Option from 'effect/Option';\nimport React from 'react';\n\nimport { Process } from '@dxos/compute';\nimport { Icon, IconButton, ScrollArea, Tooltip, Treegrid } from '@dxos/react-ui';\nimport { composable, composableProps } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\nimport { Unit } from '@dxos/util';\n\nexport type ProcessTreeProps = {\n // TODO(burdon): Atom.\n processes: readonly Process.Info[];\n onProcessSelect?: (process: Process.Info) => void;\n onProcessTerminate?: (process: Process.Info) => void;\n};\n\nexport const ProcessTree = React.memo(\n composable<HTMLDivElement, ProcessTreeProps>(\n ({ processes, onProcessSelect, onProcessTerminate, ...props }, forwardedRef) => {\n const sortedProcesses = [\n ...processes.filter((process) => [Process.State.RUNNING, Process.State.HYBERNATING].includes(process.state)),\n ...processes.filter((process) => [Process.State.IDLE].includes(process.state)).slice(0, 3),\n ...processes.filter((process) =>\n [Process.State.SUCCEEDED, Process.State.FAILED, Process.State.TERMINATED].includes(process.state),\n ),\n ].sort((a, b) => {\n const aCompletedAt = Option.getOrElse(a.completedAt, () => Infinity);\n const bCompletedAt = Option.getOrElse(b.completedAt, () => Infinity);\n return bCompletedAt - aCompletedAt;\n });\n\n return (\n <ScrollArea.Root {...composableProps(props, { classNames: 'dx-expander' })} thin ref={forwardedRef}>\n <ScrollArea.Viewport>\n <Treegrid.Root classNames='grid grid-cols-[min-content_1fr_min-content_min-content]'>\n {sortedProcesses\n .filter((process) => process.parentPid === null)\n .map((process) => {\n // const activeChildren = filteredProcesses.filter(\n // (candidate) =>\n // candidate.parentPid?.toString() === process.pid.toString() &&\n // candidate.state === Process.State.RUNNING,\n // );\n const t = Unit.Duration(process.metrics.wallTime);\n return (\n <Treegrid.Row\n key={process.pid.toString()}\n id={process.pid.toString()}\n parentOf={process.parentPid?.toString()}\n classNames={mx('col-span-full grid grid-cols-subgrid gap-2 ps-1', onProcessSelect && 'dx-hover')}\n >\n <Treegrid.Cell classNames='grid place-items-center'>\n <Tooltip.Trigger content={process.state.toString()}>\n <Icon\n size={4}\n synchronized\n classNames={mx(\n process.state === Process.State.RUNNING && 'animate-spin',\n process.state === Process.State.FAILED && 'text-error-text',\n process.state === Process.State.SUCCEEDED && 'text-success-text',\n )}\n icon={Match.value(process.state).pipe(\n Match.when(Process.State.RUNNING, () => 'ph--spinner-gap--regular'),\n Match.when(Process.State.SUCCEEDED, () => 'ph--check-circle--regular'),\n Match.when(Process.State.FAILED, () => 'ph--warning--regular'),\n Match.when(Process.State.HYBERNATING, () => 'ph--spinner--regular'),\n Match.when(Process.State.IDLE, () => 'ph--moon-stars--regular'),\n Match.when(Process.State.TERMINATING, () => 'ph--x-circle--regular'),\n Match.when(Process.State.TERMINATED, () => 'ph--x-circle--regular'),\n Match.orElse(() => 'ph--spinner-gap--regular'),\n )}\n />\n </Tooltip.Trigger>\n </Treegrid.Cell>\n <Treegrid.Cell classNames='flex items-center truncate' onClick={() => onProcessSelect?.(process)}>\n <span\n className={mx(\n 'truncate text-sm',\n process.state !== Process.State.RUNNING && 'text-description',\n )}\n >\n {process.params.name ?? process.pid.toString()}\n </span>\n </Treegrid.Cell>\n <Treegrid.Cell classNames='flex items-center justify-end text-xs text-description tabular-nums'>\n {[Process.State.FAILED, Process.State.SUCCEEDED].includes(process.state) && (\n <span className='whitespace-nowrap'>{t.toString()}</span>\n )}\n </Treegrid.Cell>\n <Treegrid.Cell>\n {onProcessTerminate && (\n <IconButton\n classNames='min-h-0 p-1'\n icon='ph--x--regular'\n iconOnly\n variant='ghost'\n size={4}\n label='Actions'\n onClick={(event) => {\n event.stopPropagation();\n onProcessTerminate?.(process);\n }}\n />\n )}\n </Treegrid.Cell>\n </Treegrid.Row>\n );\n })}\n </Treegrid.Root>\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n );\n },\n ),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { defaultHighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { composeRefs } from '@radix-ui/react-compose-refs';\nimport React from 'react';\n\nimport { type Ref } from '@dxos/echo';\nimport { createDocAccessor } from '@dxos/echo-client';\nimport { useThemeContext, useTranslation } from '@dxos/react-ui';\nimport { composable, composableProps } from '@dxos/react-ui';\nimport { useTextEditor } from '@dxos/react-ui-editor';\nimport { type Text } from '@dxos/schema';\nimport {\n createBasicExtensions,\n createDataExtensions,\n createMarkdownExtensions,\n createThemeExtensions,\n decorateMarkdown,\n} from '@dxos/ui-editor';\nimport { isNonNullable } from '@dxos/util';\n\nimport { meta } from '#meta';\n\nimport { handlebars, xmlDecorator } from './extensions';\n\nexport type TemplateEditorProps = {\n id: string;\n /** Markdown + Handlebars source text. */\n source?: Ref.Ref<Text.Text>;\n lineNumbers?: boolean;\n};\n\nexport const TemplateEditor = composable<HTMLDivElement, TemplateEditorProps>(\n ({ classNames, id, source, lineNumbers = true, ...props }, forwardedRef) => {\n const { t } = useTranslation(meta.id);\n const { themeMode } = useThemeContext();\n const { parentRef } = useTextEditor(() => {\n const target = source?.target;\n if (!target) {\n return {};\n }\n\n return {\n initialValue: target.content ?? '',\n extensions: [\n createDataExtensions({\n id,\n text: createDocAccessor(target, ['content']),\n }),\n createBasicExtensions({\n bracketMatching: false,\n lineNumbers,\n lineWrapping: true,\n placeholder: t('template.placeholder'),\n }),\n createThemeExtensions({ themeMode }),\n createMarkdownExtensions(),\n decorateMarkdown(),\n handlebars(),\n // xml(),\n // NOTE: Since we're using markdown only HTML nodes are parsed.\n xmlDecorator(),\n syntaxHighlighting(defaultHighlightStyle),\n ].filter(isNonNullable),\n };\n }, [themeMode, source?.target, lineNumbers]);\n\n return (\n <div\n {...composableProps(props, {\n role: 'none',\n classNames: ['h-full overflow-hidden', classNames],\n })}\n ref={composeRefs(parentRef, forwardedRef)}\n />\n );\n },\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport {\n type CompletionContext,\n type CompletionResult,\n autocompletion,\n completionKeymap,\n} from '@codemirror/autocomplete';\nimport { type Extension, RangeSetBuilder } from '@codemirror/state';\nimport {\n Decoration,\n type DecorationSet,\n type EditorView,\n ViewPlugin,\n type ViewUpdate,\n WidgetType,\n keymap,\n} from '@codemirror/view';\n\nimport { Domino, mx } from '@dxos/ui';\n\nexport type HandlebarsOptions = {};\n\n/**\n * Simple Handlebars plugin for CodeMirror.\n * Supports:\n * - Comments: {{! comment }}\n * - Commands: {{#command}} {{/command}}\n * - Variables: {{var}}\n * - Commands with variables: {{#each items}} {{/each}}\n */\nexport const handlebars = (_: HandlebarsOptions = {}): Extension => {\n return [\n handlebarsHighlightPlugin,\n autocompletion({\n activateOnTyping: true,\n aboveCursor: true,\n closeOnBlur: true,\n override: [handlebarsCompletions],\n }),\n keymap.of(completionKeymap),\n ];\n};\n\nconst regex = {\n // {{! comment }}\n comment: /\\{\\{!\\s*[^}]*\\}\\}/g,\n\n // {{var}}\n brackets: /\\{\\{[^}]*\\}\\}/g,\n\n // {{#command}} {{/command}}\n command: /\\{\\{[#/]([^}]+)\\}\\}/g,\n\n // {{var}}\n var: /\\{\\{(?!\\s*!)(\\w[^}]*)\\}\\}/g,\n\n // @echo://space/id or @dxn:nsid\n dxn: /@?(?:echo:\\/{1,3}[\\w/]+|dxn:[\\w.-]+)/g,\n\n // example.com/path/xxx\n url: /[\\w.-]+\\.[\\w.-]+\\/[\\w/]+/g,\n};\n\nconst tagPadding = 'mx-0.5 px-1 rounded-xs';\n\n/**\n * ViewPlugin that decorates Handlebars syntax.\n */\nconst handlebarsHighlightPlugin = ViewPlugin.fromClass(\n class {\n decorations: DecorationSet;\n\n constructor(view: EditorView) {\n this.decorations = this.buildDecorations(view);\n }\n\n update(update: ViewUpdate) {\n if (update.docChanged || update.viewportChanged || update.selectionSet) {\n this.decorations = this.buildDecorations(update.view);\n }\n }\n\n // NOTE: Decorations may clash with other extensions (e.g., markdown).\n buildDecorations(view: EditorView) {\n const selection = view.state.selection.main;\n const decorations: Array<{\n from: number;\n to: number;\n decoration: Decoration;\n }> = [];\n\n for (const { from, to } of view.visibleRanges) {\n const text = view.state.doc.sliceString(from, to);\n\n // Match DXN.\n {\n let match;\n while ((match = regex.dxn.exec(text)) !== null) {\n const start = from + match.index;\n const end = start + match[0].length;\n // Only show widget if selection doesn't overlap with the match range.\n const overlaps = selection.to > start && selection.from <= end;\n if (!overlaps) {\n decorations.push({\n from: start,\n to: end,\n decoration: Decoration.widget({\n widget: new DXNWidget(match[0]),\n }),\n });\n }\n }\n }\n\n // Match URLs.\n {\n let match;\n while ((match = regex.url.exec(text)) !== null) {\n const start = from + match.index;\n const end = start + match[0].length;\n decorations.push({\n from: start,\n to: end,\n decoration: Decoration.mark({\n class: mx('dx-tag--blue', tagPadding),\n }),\n });\n }\n }\n\n // Match brackets: {{ and }}.\n {\n let match;\n while ((match = regex.brackets.exec(text)) !== null) {\n const start = from + match.index;\n const end = start + match[0].length;\n decorations.push({\n from: start,\n to: end,\n decoration: Decoration.mark({ class: 'text-subdued' }),\n });\n }\n }\n\n // Match commands: {{#command}} and {{/command}}.\n {\n let match;\n while ((match = regex.command.exec(text)) !== null) {\n const start = from + match.index + 2;\n let end = start + match[0].length - 4;\n const text = view.state.doc.sliceString(start, end);\n const parts = text.split(/\\s+/);\n if (parts.length > 1) {\n const idx = start + parts[0].length;\n decorations.push({\n from: idx,\n to: end,\n decoration: Decoration.mark({ class: 'text-green-text' }),\n });\n end = idx;\n }\n decorations.push({\n from: start,\n to: end,\n decoration: Decoration.mark({ class: 'text-blue-text' }),\n });\n }\n }\n\n // Match variables: {{var}}.\n {\n let match;\n while ((match = regex.var.exec(text)) !== null) {\n const start = from + match.index + 2;\n const end = start + match[0].length - 4;\n decorations.push({\n from: start,\n to: end,\n decoration: Decoration.mark({ class: 'text-green-text' }),\n });\n }\n }\n }\n\n // Sort decorations by position to satisfy RangeSetBuilder requirements.\n decorations.sort((a, b) => a.from - b.from || a.to - b.to);\n\n // Add sorted decorations to builder.\n const builder = new RangeSetBuilder<Decoration>();\n for (const { from, to, decoration } of decorations) {\n builder.add(from, to, decoration);\n }\n\n return builder.finish();\n }\n },\n {\n decorations: (v) => v.decorations,\n },\n);\n\nclass DXNWidget extends WidgetType {\n constructor(private readonly _identifier: string) {\n super();\n }\n\n override ignoreEvent() {\n return false;\n }\n\n override eq(other: this) {\n return this._identifier === other._identifier;\n }\n\n override toDOM() {\n const text = this._identifier\n .split(':')\n .map((part) => {\n const len = 16;\n const plen = 4;\n if (part.length > len) {\n return `[${part.slice(0, plen)}…${part.slice(-plen)}]`;\n }\n return part;\n })\n .join(':');\n return Domino.of('span').classNames(mx('font-mono dx-tag--blue', tagPadding)).text(text).root;\n }\n}\n\n// TODO(burdon): Pass in variables.\nconst variables = ['this'];\nconst commands = ['this', 'each', 'if', 'unless', 'with'];\n\n/**\n * Provides completions for Handlebars variables.\n */\nfunction handlebarsCompletions(context: CompletionContext): CompletionResult | null {\n const match = context.matchBefore(/\\{\\{[^}]*/);\n if (!match || match.from === match.to) {\n return null;\n }\n\n let type = 'variable';\n let text = match.text.slice(2);\n let from = match.from + 2;\n let matches = [];\n if (text.startsWith('#') || text.startsWith('/')) {\n const idx = text.lastIndexOf(' ');\n if (idx !== -1) {\n type = 'variable';\n matches = variables;\n text = text.slice(idx + 1);\n from += idx + 1;\n } else {\n type = 'command';\n text = text.slice(1);\n matches = commands;\n from += 1;\n }\n } else {\n type = 'variable';\n matches = variables;\n }\n\n const options = matches.filter((name) => name.startsWith(text)).map((name) => ({ type, label: name }));\n return {\n from,\n options,\n };\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { syntaxTree } from '@codemirror/language';\nimport { type Extension, RangeSetBuilder } from '@codemirror/state';\nimport { Decoration, type DecorationSet, type EditorView, ViewPlugin, type ViewUpdate } from '@codemirror/view';\n\nexport type XmlOptions = {};\n\n/**\n * XML decorator plugin for CodeMirror.\n * Decorates XML tags with monospace font using the XML language grammar.\n */\nexport const xmlDecorator = (_: XmlOptions = {}): Extension => {\n return [xmlDecoratorPlugin];\n};\n\n/**\n * ViewPlugin that decorates XML tags using syntax tree.\n */\nconst xmlDecoratorPlugin = ViewPlugin.fromClass(\n class {\n decorations: DecorationSet;\n\n constructor(view: EditorView) {\n this.decorations = this.buildDecorations(view);\n }\n\n update(update: ViewUpdate) {\n if (update.docChanged || update.viewportChanged) {\n this.decorations = this.buildDecorations(update.view);\n }\n }\n\n buildDecorations(view: EditorView) {\n const builder = new RangeSetBuilder<Decoration>();\n\n for (const { from, to } of view.visibleRanges) {\n syntaxTree(view.state).iterate({\n from,\n to,\n enter: (node) => {\n // Decorate XML elements (opening tags, closing tags, self-closing tags).\n if (\n node.name === 'HTMLTag' ||\n node.name === 'OpenTag' ||\n node.name === 'CloseTag' ||\n node.name === 'SelfClosingTag' ||\n node.name === 'Element'\n ) {\n builder.add(node.from, node.to, Decoration.mark({ class: 'font-mono text-subdued' }));\n }\n },\n });\n }\n\n return builder.finish();\n }\n },\n {\n decorations: (v) => v.decorations,\n },\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { Fragment, useEffect, useState } from 'react';\n\nimport { type Blueprint } from '@dxos/compute';\nimport { Operation } from '@dxos/compute';\nimport { type Database, Filter, type Ref } from '@dxos/echo';\nimport { log } from '@dxos/log';\nimport { useQuery } from '@dxos/react-client/echo';\nimport { ScrollArea, type ThemedClassName } from '@dxos/react-ui';\nimport { composable, composableProps } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport { ServiceType } from '#types';\n\nimport { type AiChatProcessor } from '../../processor';\n\nexport type ToolboxProps = {\n services?: { service: ServiceType }[];\n functions?: Operation.PersistentOperation[];\n // TODO(burdon): Combine into single array.\n blueprints?: readonly Blueprint.Blueprint[];\n activeBlueprints?: readonly Ref.Ref<Blueprint.Blueprint>[];\n};\n\nexport const Toolbox = composable<HTMLDivElement, ToolboxProps>(\n ({ functions, services, blueprints, activeBlueprints, ...props }, forwardedRef) => {\n return (\n <ScrollArea.Root {...composableProps(props)} thin orientation='vertical' ref={forwardedRef}>\n <ScrollArea.Viewport>\n {blueprints && blueprints.length > 0 && (\n <Section\n title='Blueprints'\n items={blueprints.map(({ name, description, tools }) => ({\n name,\n description,\n subitems: tools.map((toolId) => ({ name: `∙ ${safeToolId(toolId)}` })),\n }))}\n />\n )}\n\n {activeBlueprints && activeBlueprints.length > 0 && (\n <Section\n title='Blueprints'\n items={activeBlueprints.map(({ target }) => ({\n name: target?.name ?? '',\n description: target?.description ?? '',\n subitems: target?.tools.map((toolId) => ({ name: `∙ ${safeToolId(toolId)}` })),\n }))}\n />\n )}\n\n {services && services.length > 0 && (\n <Section\n title='Services'\n items={services.map(({ service: { serviceId, name, description } }) => ({\n name: name ?? serviceId,\n description,\n // subitems: tools.map(({ name, description }) => ({ name: `∙ ${name}`, description })),\n }))}\n />\n )}\n\n {functions && functions.length > 0 && (\n <Section title='Functions' items={functions.map(({ name, description }) => ({ name, description }))} />\n )}\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n );\n },\n);\n\nToolbox.displayName = 'Toolbox';\n\ntype SectionProps = {\n title: string;\n items: { name: string; description?: string; subitems?: { name: string; description?: string }[] }[];\n striped?: boolean;\n};\n\nconst Section = ({ title, items, striped }: SectionProps) => {\n const stripeClassNames = 'odd:bg-neutral-50 dark:odd:bg-neutral-800';\n const gridClassNames = 'grid grid-cols-[8rem_1fr]';\n const subGridClassNames = mx('col-span-full grid grid-cols-subgrid text-xs px-2', striped && stripeClassNames);\n\n return (\n <div>\n <h1 className='px-2 text-sm'>{title}</h1>\n <div className={gridClassNames}>\n {items.map(({ name, description, subitems }, i) => (\n <Fragment key={i}>\n {name && (\n <div className={subGridClassNames}>\n <div className='truncate text-primary-500'>{name}</div>\n <div className='line-clamp-2'>{description}</div>\n </div>\n )}\n {subitems?.map(({ name, description }, i) => (\n <div key={i} className={mx(subGridClassNames, striped && stripeClassNames)}>\n <div className='truncate'>{name}</div>\n <div className='line-clamp-3 text-subdued'>{description}</div>\n </div>\n ))}\n </Fragment>\n ))}\n </div>\n </div>\n );\n};\n\nexport type ToolboxPanelProps = ThemedClassName<{\n db?: Database.Database;\n processor?: AiChatProcessor;\n}>;\n\nexport const ToolboxPanel = ({ classNames, db, processor }: ToolboxPanelProps) => {\n // Registered services.\n const services = useQuery(db, Filter.type(ServiceType));\n const [serviceTools, setServiceTools] = useState<{ service: ServiceType }[]>([]);\n useEffect(() => {\n log('creating service tools...', { services: services.length });\n queueMicrotask(async () => {\n // TODO(burdon): Fix.\n // const tools = await Promise.all(\n // services.map(async (service) => ({ service, tools: await createToolsFromService(service) })),\n // );\n // setServiceTools(tools);\n });\n }, [services]);\n\n // Deployed functions.\n const functions = useQuery(db, Filter.type(Operation.PersistentOperation));\n\n return (\n <Toolbox\n classNames={classNames}\n blueprints={processor?.context.getBlueprints()}\n services={serviceTools}\n functions={functions}\n />\n );\n};\n\nconst safeToolId = (name: string) => {\n return name.split('_').pop();\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["lazy", "Atom", "useAtomValue", "Option", "React", "useCallback", "useMemo", "Filter", "Obj", "Ref", "Type", "useQuery", "Input", "useTranslation", "Form", "FeedAnnotation", "meta", "AgentProperties", "agent", "t", "id", "db", "getDatabase", "feedFilter", "nothing", "schemas", "graph", "registry", "list", "filter", "isType", "feedSchemas", "type", "annotation", "get", "getSchema", "isSome", "value", "length", "or", "map", "schema", "subscribedObjects", "existingSubscriptions", "atom", "pipe", "_", "make", "agentObj", "selectedSubscriptions", "object", "subscriptions", "some", "subscription", "uri", "getURI", "handleSubscriptionChange", "checked", "update", "push", "fromURI", "Section", "Root", "Label", "classNames", "key", "div", "className", "Checkbox", "includes", "onCheckedChange", "getLabel", "useAtomValue", "Array", "Option", "React", "useCallback", "useEffect", "useMemo", "useRef", "useState", "Agent", "Event", "Filter", "Obj", "Query", "useQuery", "useIdentity", "Toast", "composable", "composableProps", "useTranslation", "Menu", "Message", "useChatKeymapExtensions", "useChatToolbarActions", "useDebug", "meta", "React", "IconButton", "useTranslation", "mx", "meta", "ChatActions", "classNames", "children", "microphone", "recording", "processing", "debug", "onEvent", "t", "id", "div", "className", "disabled", "variant", "icon", "iconOnly", "noTooltip", "label", "onMouseDown", "type", "onMouseUp", "onTouchStart", "onTouchEnd", "onClick", "useAtomValue", "React", "useCallback", "Message", "useTranslation", "meta", "ChatMcpErrors", "classNames", "processor", "t", "id", "errors", "mcpErrors", "handleDismiss", "dismissMcpErrors", "length", "Root", "valence", "Title", "onClose", "Content", "asChild", "ul", "className", "map", "error", "li", "key", "url", "protocol", "span", "message", "React", "useCallback", "useMemo", "useState", "McpServer", "Filter", "Obj", "Type", "useObject", "useQuery", "IconButton", "Input", "Popover", "Select", "useTranslation", "Listbox", "SearchList", "useSearchListResults", "Tabs", "getStyles", "mx", "useActiveBlueprints", "useBlueprintHandlers", "useBlueprints", "useContextObjects", "useFilteredTypes", "meta", "Assistant", "styles", "panel", "toolbar", "ChatOptions", "chat", "db", "context", "registry", "presets", "preset", "onPresetChange", "t", "id", "div", "className", "Root", "Trigger", "asChild", "variant", "icon", "iconOnly", "label", "Portal", "Content", "side", "classNames", "Viewport", "ObjectsPanel", "Arrow", "orientation", "defaultValue", "defaultActivePart", "tabIndex", "Panel", "value", "ViewPanel", "BlueprintsPanel", "McpServersPanel", "ModelsPanel", "Tablist", "IconTab", "blueprints", "activeBlueprints", "onUpdateBlueprint", "results", "handleSearch", "items", "extract", "blueprint", "name", "onSearch", "map", "blueprintKey", "getMeta", "key", "isActive", "has", "Item", "checked", "onSelect", "placeholder", "autoFocus", "view", "setView", "onValueChange", "ChatViews", "Option", "OptionLabel", "OptionIndicator", "servers", "type", "adding", "setAdding", "handleAdd", "url", "protocol", "apiKey", "add", "make", "enabled", "handleRemove", "server", "remove", "McpServerRow", "onRemove", "McpServerForm", "onSubmit", "onCancel", "onClick", "setEnabled", "Label", "srOnly", "Switch", "onCheckedChange", "span", "setName", "setUrl", "setProtocol", "setApiKey", "canSubmit", "trim", "length", "handleSubmit", "undefined", "TextInput", "onChange", "event", "target", "TriggerButton", "disabled", "ANY", "types", "typeOptions", "options", "typename", "getTypename", "uri", "getURI", "ns", "sort", "a", "b", "localeCompare", "selectedUri", "setSelectedUri", "anyFilter", "or", "objects", "contextObjects", "onUpdateObject", "object", "getLabel", "findIndex", "obj", "hue", "getIcon", "iconClassNames", "text", "val", "ScrollUpButton", "ScrollDownButton", "React", "Select", "useAtomValue", "Option", "React", "useCallback", "useEffect", "useRef", "useState", "useVoiceInput", "Input", "useDynamicRef", "useTranslation", "ChatEditor", "mx", "useChatKeymapExtensions", "meta", "React", "Obj", "Icon", "IconButton", "toLocalizedString", "useTranslation", "getStyles", "mx", "useContextObjects", "meta", "ChatReferences", "classNames", "context", "db", "t", "id", "objects", "onUpdateObject", "ul", "className", "map", "obj", "uri", "getURI", "typename", "getTypename", "label", "getLabel", "ns", "icon", "hue", "getIcon", "DEFAULT_OBJECT_ICON", "undefined", "styles", "li", "key", "toString", "data-hue", "size", "iconOnly", "variant", "onClick", "React", "useEffect", "useState", "Tooltip", "useTimeout", "Spinner", "mx", "period", "ChatStatusIndicator", "classNames", "preset", "processing", "error", "props", "init", "setInit", "div", "className", "duration", "state", "Trigger", "asChild", "content", "message", "ChatPrompt", "classNames", "outline", "db", "chat", "processor", "event", "online", "placeholder", "onOnlineChange", "onPresetChange", "settings", "presets", "preset", "t", "useTranslation", "meta", "id", "error", "useAtomValue", "pipe", "getOrUndefined", "streaming", "active", "activeRef", "useDynamicRef", "editorRef", "useRef", "recordingState", "setRecordingState", "useState", "useEffect", "on", "ev", "type", "current", "getText", "length", "setText", "text", "focus", "recording", "useVoiceInput", "onUpdate", "extensions", "useChatKeymapExtensions", "handleSubmit", "useCallback", "emit", "handleEvent", "React", "div", "role", "className", "mx", "ChatMcpErrors", "ChatStatusIndicator", "processing", "ChatEditor", "ref", "autoFocus", "lineWrapping", "onSubmit", "ChatOptions", "registry", "context", "ChatReferences", "ChatActions", "microphone", "onEvent", "undefined", "Input", "Root", "Label", "srOnly", "Switch", "checked", "onCheckedChange", "displayName", "React", "useEffect", "useMemo", "useState", "ChatStatus", "NaturalChatStatus", "formatElapsed", "Matrix", "Unit", "CHAT_STREAM_STATUS_NAME", "TICK_MS", "ChatStatus", "classNames", "icon", "messages", "requestTiming", "useChatContext", "lastOutputTokens", "sessionTotalTokens", "useMemo", "last", "total", "message", "block", "blocks", "isStats", "usage", "outputTokens", "totalTokens", "isRunning", "endedAt", "show", "React", "NaturalChatStatus", "Root", "defaultRunning", "Icon", "Matrix", "dotClassNames", "dim", "dotSize", "count", "interval", "active", "div", "className", "Text", "Elapsed", "timing", "Separator", "Unit", "Thousand", "toString", "now", "setNow", "useState", "Date", "useEffect", "id", "setInterval", "clearInterval", "formatElapsed", "startedAt", "_tag", "React", "forwardRef", "useCallback", "useEffect", "useMemo", "useRef", "useState", "PublicKey", "setRef", "MarkdownStream", "keyToFallback", "React", "log", "getXmlTextChild", "applyToolBlockToWidgetState", "context", "block", "_tag", "updateWidget", "toolCallId", "blocks", "rehydrateToolWidgetsFromMessages", "messages", "message", "React", "TogglePanel", "JsonHighlighter", "FallbackWidget", "_tag", "props", "Root", "Content", "Header", "classNames", "Body", "Viewport", "data", "displayName", "WidgetType", "Domino", "styles", "padding", "border", "ReasoningWidget", "WidgetType", "text", "pos", "undefined", "String", "eq", "other", "toDOM", "Domino", "of", "classNames", "styles", "padding", "append", "border", "attributes", "svg", "root", "updateDOM", "dom", "querySelector", "replaceChildren", "container", "trailHost", "childElementCount", "createTrailLayers", "destroy", "_dom", "previous", "trailRemovalTimers", "get", "clearTimeout", "timerId", "setTimeout", "delete", "remove", "TRAIL_REMOVAL_DELAY_MS", "set", "active", "trail", "Map", "WidgetType", "Domino", "ReferenceWidget", "WidgetType", "text", "dxn", "eq", "other", "toDOM", "Domino", "of", "classNames", "styles", "padding", "append", "attributes", "root", "WidgetType", "Domino", "SelectWidget", "WidgetType", "options", "eq", "other", "JSON", "stringify", "toDOM", "Domino", "of", "attributes", "role", "classNames", "styles", "padding", "append", "map", "option", "text", "root", "WidgetType", "Domino", "StatsWidget", "WidgetType", "text", "eq", "other", "toDOM", "Domino", "of", "classNames", "styles", "padding", "root", "updateDOM", "dom", "textContent", "WidgetType", "Domino", "StatusWidget", "WidgetType", "text", "eq", "other", "toDOM", "Domino", "of", "classNames", "styles", "padding", "append", "svg", "attributes", "root", "updateDOM", "dom", "querySelector", "replaceChildren", "React", "useTranslation", "TogglePanel", "meta", "SummaryWidget", "children", "t", "useTranslation", "meta", "id", "React", "TogglePanel", "Root", "Content", "classNames", "styles", "border", "Header", "Body", "div", "className", "WidgetType", "Domino", "mx", "SuggestionWidget", "text", "eq", "other", "toDOM", "of", "classNames", "append", "attributes", "icon", "root", "React", "useCallback", "useEffect", "useMemo", "useRef", "useState", "Icon", "useTranslation", "NumericTabs", "TextCrawl", "TogglePanel", "JsonHighlighter", "isNonNullable", "safeParseJson", "meta", "ToolWidget", "view", "blocks", "t", "useTranslation", "meta", "id", "items", "useMemo", "lastToolCall", "tools", "filter", "block", "_tag", "map", "pending", "toolCallId", "tool", "find", "name", "title", "description", "Boolean", "join", "icon", "operationIcon", "content", "input", "safeParseJson", "error", "undefined", "result", "isNonNullable", "handleChangeOpen", "useCallback", "setTimeout", "requestMeasure", "length", "React", "ToolPanel", "onChangeOpen", "DEFAULT_TOOL_ICON", "tabsRef", "useRef", "selected", "setSelected", "useState", "open", "setOpen", "useEffect", "prev", "Math", "min", "max", "current", "focus", "handleSelect", "index", "headerIcon", "TogglePanel", "Root", "Content", "Header", "classNames", "Icon", "size", "TextCrawl", "key", "lines", "item", "autoAdvance", "greedy", "Body", "Viewport", "NumericTabs", "ref", "onSelect", "JsonHighlighter", "data", "replacer", "maxDepth", "maxArrayLen", "maxStringLen", "factory", "reasoning", "streaming", "text", "ReasoningWidget", "reference", "ref", "ReferenceWidget", "select", "options", "length", "suggestion", "SuggestionWidget", "stats", "StatsWidget", "status", "StatusWidget", "Component", "toolCall", "React", "props", "toolResult", "toolkit", "isBlockVisible", "message", "block", "str", "stringify", "_tag", "renderXMLBlock", "content", "pending", "tag", "opts", "attributes", "MessageThreadContext", "_widgetState", "updateWidget", "id", "value", "getObjectLabel", "_id", "MessageSyncer", "_threadId", "_completed", "_trailing", "_context", "_document", "_renderer", "context", "reset", "messages", "buffer", "_walk", "setContent", "then", "rehydrateToolWidgetsFromMessages", "update", "length", "append", "index", "outer", "message", "block", "blocks", "rendered", "slice", "pending", "defaultOptions", "autoScroll", "cursor", "fader", "typewriter", "ChatThread", "forwardRef", "classNames", "identity", "messages", "error", "options", "footer", "debug", "extensions", "viewType", "onEvent", "forwardedRef", "controller", "setController", "useState", "handleMarkdownStreamRef", "useCallback", "instance", "setRef", "userHue", "useMemo", "profile", "data", "hue", "keyToFallback", "identityKey", "PublicKey", "random", "initializedRef", "useRef", "useEffect", "current", "scrollToBottom", "renderer", "createBlockRenderer", "syncer", "MessageSyncer", "update", "handleEvent", "type", "value", "text", "React", "div", "data-hue", "className", "MarkdownStream", "key", "registry", "componentRegistry", "ref", "React", "useObject", "Icon", "Tag", "composable", "composableProps", "Row", "RowList", "TaskList", "plan", "props", "forwardedRef", "snapshot", "tasks", "Root", "Viewport", "classNames", "ref", "Content", "aria-label", "map", "task", "key", "id", "div", "className", "icon", "status", "undefined", "size", "span", "title", "palette", "ChatRoot", "children", "chat", "feed", "processor", "db", "dbFallback", "onEvent", "onSubmit", "props", "debug", "setDebug", "useState", "streaming", "useAtomValue", "active", "requestTiming", "useRequestTiming", "lastPrompt", "useRef", "undefined", "Obj", "getDatabase", "event", "useMemo", "Event", "feedMessages", "useQuery", "Query", "select", "Filter", "type", "Message", "from", "nothing", "pendingMessages", "messages", "dedupeWith", "id", "a", "b", "dump", "useDebug", "error", "useEffect", "isSome", "emit", "value", "on", "ev", "text", "trim", "length", "current", "Promise", "resolve", "then", "request", "message", "retry", "cancel", "React", "ChatContextProvider", "displayName", "setRequestTiming", "startedAt", "Date", "now", "endedAt", "prev", "CHAT_TOOLBAR_NAME", "ChatToolbar", "composable", "attendableId", "alwaysActive", "companionTo", "forwardedRef", "useChatContext", "menuActions", "useChatToolbarActions", "Menu", "Root", "Toolbar", "composableProps", "ref", "CHAT_CONTENT_NAME", "ChatContent", "div", "classNames", "CHAT_THREAD_NAME", "ChatThread", "viewType", "debugProp", "t", "useTranslation", "meta", "extensions", "useChatKeymapExtensions", "identity", "useIdentity", "pipe", "getOrUndefined", "toastError", "setToastError", "debugView", "controllerRef", "scrollToBottom", "navigatePrevious", "navigateNext", "handleEvent", "useCallback", "className", "NaturalChatThread", "Toast", "open", "duration", "onOpenChange", "Title", "icon", "onClose", "Description", "CHAT_PROMPT_NAME", "ChatPrompt", "NaturalChatPrompt", "CHAT_TASK_LIST_NAME", "ChatTaskList", "plan", "planProp", "parent", "getParent", "agent", "instanceOf", "Agent", "target", "TaskList", "Chat", "Content", "Prompt", "Status", "ChatStatus", "Thread", "Match", "Option", "React", "Process", "Icon", "IconButton", "ScrollArea", "Tooltip", "Treegrid", "composable", "composableProps", "mx", "Unit", "ProcessTree", "memo", "processes", "onProcessSelect", "onProcessTerminate", "props", "forwardedRef", "sortedProcesses", "filter", "process", "State", "RUNNING", "HYBERNATING", "includes", "state", "IDLE", "slice", "SUCCEEDED", "FAILED", "TERMINATED", "sort", "a", "b", "aCompletedAt", "getOrElse", "completedAt", "Infinity", "bCompletedAt", "Root", "classNames", "thin", "ref", "Viewport", "parentPid", "map", "t", "Duration", "metrics", "wallTime", "Row", "key", "pid", "toString", "id", "parentOf", "Cell", "Trigger", "content", "size", "synchronized", "icon", "value", "pipe", "when", "TERMINATING", "orElse", "onClick", "span", "className", "params", "name", "iconOnly", "variant", "label", "event", "stopPropagation", "defaultHighlightStyle", "syntaxHighlighting", "composeRefs", "React", "createDocAccessor", "useThemeContext", "useTranslation", "composable", "composableProps", "useTextEditor", "createBasicExtensions", "createDataExtensions", "createMarkdownExtensions", "createThemeExtensions", "decorateMarkdown", "isNonNullable", "meta", "autocompletion", "completionKeymap", "RangeSetBuilder", "Decoration", "ViewPlugin", "WidgetType", "keymap", "Domino", "mx", "handlebars", "_", "handlebarsHighlightPlugin", "activateOnTyping", "aboveCursor", "closeOnBlur", "override", "handlebarsCompletions", "of", "regex", "comment", "brackets", "command", "var", "dxn", "url", "tagPadding", "fromClass", "decorations", "view", "buildDecorations", "update", "docChanged", "viewportChanged", "selectionSet", "selection", "state", "main", "from", "to", "visibleRanges", "text", "doc", "sliceString", "match", "exec", "start", "index", "end", "length", "overlaps", "push", "decoration", "widget", "DXNWidget", "mark", "class", "parts", "split", "idx", "sort", "a", "b", "builder", "add", "finish", "v", "_identifier", "ignoreEvent", "eq", "other", "toDOM", "map", "part", "len", "plen", "slice", "join", "classNames", "root", "variables", "commands", "context", "matchBefore", "type", "matches", "startsWith", "lastIndexOf", "options", "filter", "name", "label", "syntaxTree", "RangeSetBuilder", "Decoration", "ViewPlugin", "xmlDecorator", "_", "xmlDecoratorPlugin", "fromClass", "decorations", "view", "buildDecorations", "update", "docChanged", "viewportChanged", "builder", "from", "to", "visibleRanges", "state", "iterate", "enter", "node", "name", "add", "mark", "class", "finish", "v", "TemplateEditor", "composable", "classNames", "id", "source", "lineNumbers", "props", "forwardedRef", "t", "useTranslation", "meta", "themeMode", "useThemeContext", "parentRef", "useTextEditor", "target", "initialValue", "content", "extensions", "createDataExtensions", "text", "createDocAccessor", "createBasicExtensions", "bracketMatching", "lineWrapping", "placeholder", "createThemeExtensions", "createMarkdownExtensions", "decorateMarkdown", "handlebars", "xmlDecorator", "syntaxHighlighting", "defaultHighlightStyle", "filter", "isNonNullable", "React", "div", "composableProps", "role", "ref", "composeRefs", "React", "Fragment", "useEffect", "useState", "Operation", "Filter", "log", "useQuery", "ScrollArea", "composable", "composableProps", "mx", "ServiceType", "__dxlog_file", "Toolbox", "thin", "orientation", "ref", "forwardedRef", "title", "blueprints", "map", "description", "tools", "subitems", "activeBlueprints", "items", "target", "name", "safeToolId", "toolId", "services", "service", "functions", "stripeClassNames", "gridClassNames", "subGridClassNames", "className", "div", "i", "striped", "ToolboxPanel", "classNames", "db", "type", "queueMicrotask", "processor", "context", "getBlueprints", "AssistantSettings", "lazy", "RoutineProperties"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import "../chunk-J5LGTIGS.mjs";
|
|
2
|
+
|
|
3
|
+
// src/containers/index.ts
|
|
4
|
+
import { lazy } from "react";
|
|
5
|
+
var AgentArticle = lazy(() => import("../AgentArticle-K7XM46OQ.mjs"));
|
|
6
|
+
var AgentProperties = lazy(() => import("../AgentProperties-LFTEYJ54.mjs"));
|
|
7
|
+
var BlueprintArticle = lazy(() => import("../BlueprintArticle-ZBOZNZM7.mjs"));
|
|
8
|
+
var ChatCompanion = lazy(() => import("../ChatCompanion-LBUHYWQG.mjs"));
|
|
9
|
+
var ChatArticle = lazy(() => import("../ChatArticle-VNVZCDUR.mjs"));
|
|
10
|
+
var ChatDialog = lazy(() => import("../ChatDialog-DCA6FLOV.mjs"));
|
|
11
|
+
var PlanArticle = lazy(() => import("../PlanArticle-TS5ULWYS.mjs"));
|
|
12
|
+
var RoutineArticle = lazy(() => import("../RoutineArticle-5NYXHRG6.mjs"));
|
|
13
|
+
var RoutineList = lazy(() => import("../RoutineList-SO5ETHNT.mjs"));
|
|
14
|
+
var TracePanel = lazy(() => import("../TracePanel-KTZJ6JNR.mjs"));
|
|
15
|
+
var TriggerStatus = lazy(() => import("../TriggerStatus-X7Y5JFZJ.mjs"));
|
|
16
|
+
export {
|
|
17
|
+
AgentArticle,
|
|
18
|
+
AgentProperties,
|
|
19
|
+
BlueprintArticle,
|
|
20
|
+
ChatArticle,
|
|
21
|
+
ChatCompanion,
|
|
22
|
+
ChatDialog,
|
|
23
|
+
PlanArticle,
|
|
24
|
+
RoutineArticle,
|
|
25
|
+
RoutineList,
|
|
26
|
+
TracePanel,
|
|
27
|
+
TriggerStatus
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/containers/index.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ComponentType, lazy } from 'react';\n\nexport const AgentArticle: ComponentType<any> = lazy(() => import('./AgentArticle'));\nexport const AgentProperties: ComponentType<any> = lazy(() => import('./AgentProperties'));\nexport const BlueprintArticle: ComponentType<any> = lazy(() => import('./BlueprintArticle'));\nexport const ChatCompanion: ComponentType<any> = lazy(() => import('./ChatCompanion'));\nexport const ChatArticle: ComponentType<any> = lazy(() => import('./ChatArticle'));\nexport const ChatDialog: ComponentType<any> = lazy(() => import('./ChatDialog'));\nexport const PlanArticle: ComponentType<any> = lazy(() => import('./PlanArticle'));\nexport const RoutineArticle: ComponentType<any> = lazy(() => import('./RoutineArticle'));\nexport const RoutineList: ComponentType<any> = lazy(() => import('./RoutineList'));\nexport const TracePanel: ComponentType<any> = lazy(() => import('./TracePanel'));\nexport const TriggerStatus: ComponentType<any> = lazy(() => import('./TriggerStatus'));\n"],
|
|
5
|
+
"mappings": ";;;AAIA,SAA6BA,YAAY;AAElC,IAAMC,eAAmCD,KAAK,MAAM,OAAO,8BAAA,CAAA;AAC3D,IAAME,kBAAsCF,KAAK,MAAM,OAAO,iCAAA,CAAA;AAC9D,IAAMG,mBAAuCH,KAAK,MAAM,OAAO,kCAAA,CAAA;AAC/D,IAAMI,gBAAoCJ,KAAK,MAAM,OAAO,+BAAA,CAAA;AAC5D,IAAMK,cAAkCL,KAAK,MAAM,OAAO,6BAAA,CAAA;AAC1D,IAAMM,aAAiCN,KAAK,MAAM,OAAO,4BAAA,CAAA;AACzD,IAAMO,cAAkCP,KAAK,MAAM,OAAO,6BAAA,CAAA;AAC1D,IAAMQ,iBAAqCR,KAAK,MAAM,OAAO,gCAAA,CAAA;AAC7D,IAAMS,cAAkCT,KAAK,MAAM,OAAO,6BAAA,CAAA;AAC1D,IAAMU,aAAiCV,KAAK,MAAM,OAAO,4BAAA,CAAA;AACzD,IAAMW,gBAAoCX,KAAK,MAAM,OAAO,+BAAA,CAAA;",
|
|
6
|
+
"names": ["lazy", "AgentArticle", "AgentProperties", "BlueprintArticle", "ChatCompanion", "ChatArticle", "ChatDialog", "PlanArticle", "RoutineArticle", "RoutineList", "TracePanel", "TriggerStatus"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import "./chunk-J5LGTIGS.mjs";
|
|
2
|
+
|
|
3
|
+
// src/operations/create-chat.ts
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
import { Capabilities, Capability } from "@dxos/app-framework";
|
|
6
|
+
import { AiContext } from "@dxos/assistant";
|
|
7
|
+
import { Chat, DatabaseBlueprint, AgentWizardBlueprint } from "@dxos/assistant-toolkit";
|
|
8
|
+
import { Blueprint, Operation } from "@dxos/compute";
|
|
9
|
+
import { Feed, Obj, Ref } from "@dxos/echo";
|
|
10
|
+
import { createFeedServiceLayer } from "@dxos/echo-client";
|
|
11
|
+
import { invariant } from "@dxos/invariant";
|
|
12
|
+
import { ClientCapabilities } from "@dxos/plugin-client";
|
|
13
|
+
import { AssistantBlueprint } from "#blueprints";
|
|
14
|
+
import { AssistantOperation } from "#types";
|
|
15
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-assistant/src/operations/create-chat.ts";
|
|
16
|
+
var handler = AssistantOperation.CreateChat.pipe(Operation.withHandler(Effect.fnUntraced(function* ({ db, name, addToSpace = true }) {
|
|
17
|
+
const registry = yield* Capability.get(Capabilities.AtomRegistry);
|
|
18
|
+
const client = yield* Capability.get(ClientCapabilities.Client);
|
|
19
|
+
const space = client.spaces.get(db.spaceId);
|
|
20
|
+
invariant(space, "Space not found", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 19, S: this, A: ["space", "'Space not found'"] });
|
|
21
|
+
const feed = space.db.add(Feed.make());
|
|
22
|
+
const chat = Chat.make({
|
|
23
|
+
name,
|
|
24
|
+
feed: Ref.make(feed)
|
|
25
|
+
});
|
|
26
|
+
Obj.setParent(feed, chat);
|
|
27
|
+
if (addToSpace) {
|
|
28
|
+
space.db.add(chat);
|
|
29
|
+
}
|
|
30
|
+
const { BlueprintManagerBlueprint } = yield* Effect.promise(() => import("@dxos/assistant-toolkit"));
|
|
31
|
+
const feedServiceLayer = createFeedServiceLayer(space.queues);
|
|
32
|
+
const runtime2 = yield* Effect.runtime().pipe(Effect.provide(feedServiceLayer));
|
|
33
|
+
const binder = new AiContext.Binder({
|
|
34
|
+
feed,
|
|
35
|
+
runtime: runtime2,
|
|
36
|
+
registry
|
|
37
|
+
});
|
|
38
|
+
yield* Effect.promise(() => binder.use((b) => b.bind({
|
|
39
|
+
blueprints: [
|
|
40
|
+
AssistantBlueprint,
|
|
41
|
+
DatabaseBlueprint,
|
|
42
|
+
AgentWizardBlueprint,
|
|
43
|
+
BlueprintManagerBlueprint
|
|
44
|
+
].map(({ key }) => Ref.fromURI(Blueprint.registryURI(key)))
|
|
45
|
+
})));
|
|
46
|
+
return {
|
|
47
|
+
object: chat
|
|
48
|
+
};
|
|
49
|
+
})));
|
|
50
|
+
var create_chat_default = handler;
|
|
51
|
+
export {
|
|
52
|
+
create_chat_default as default
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=create-chat-SGGQ6HVN.mjs.map
|