@dxos/plugin-assistant 0.8.4-main.fcfe5033a5 → 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/{browser → neutral}/blueprints/index.mjs +1 -1
- package/dist/lib/neutral/capabilities/index.mjs +45 -0
- package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
- package/dist/lib/{browser/chunk-EZRS3J25.mjs → neutral/chunk-5H6UJHLF.mjs} +3 -3
- 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/{browser/ensure-companion-chat-ZEZA34MZ.mjs → neutral/ensure-companion-chat-AMOF3C66.mjs} +14 -21
- 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/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/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/{browser/resolve-navigation-targets-NZOD66NY.mjs → neutral/resolve-navigation-targets-ZHIMMH7L.mjs} +6 -6
- package/dist/lib/neutral/resolve-navigation-targets-ZHIMMH7L.mjs.map +7 -0
- package/dist/lib/{browser/run-prompt-in-new-chat-THLK5YQC.mjs → neutral/run-prompt-in-new-chat-D5IIE2C7.mjs} +22 -56
- package/dist/lib/neutral/run-prompt-in-new-chat-D5IIE2C7.mjs.map +7 -0
- package/dist/lib/{browser/set-current-chat-LRS3VFSH.mjs → neutral/set-current-chat-VWBPSIMZ.mjs} +7 -13
- 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/{browser/update-chat-name-3Y36KFAS.mjs → neutral/update-chat-name-Y7JWIP64.mjs} +26 -36
- package/dist/lib/neutral/update-chat-name-Y7JWIP64.mjs.map +7 -0
- package/dist/types/src/AssistantPlugin.d.ts +3 -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 +2 -2
- package/dist/types/src/blueprints/assistant/blueprint.d.ts.map +1 -1
- 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/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 +2 -2
- package/dist/types/src/capabilities/ai-service.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts +2 -1
- 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.map +1 -1
- package/dist/types/src/capabilities/companion-chat-provisioner.d.ts.map +1 -1
- 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 +1 -1
- package/dist/types/src/capabilities/edge-model-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +36 -3
- 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.map +1 -1
- package/dist/types/src/capabilities/{markdown.d.ts → markdown-extension.d.ts} +1 -1
- package/dist/types/src/capabilities/markdown-extension.d.ts.map +1 -0
- package/dist/types/src/capabilities/migrations.d.ts +2 -1
- package/dist/types/src/capabilities/migrations.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
- package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings.d.ts.map +1 -1
- package/dist/types/src/capabilities/state.d.ts.map +1 -1
- 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/{containers → components}/AgentProperties/AgentProperties.stories.d.ts +1 -2
- 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 +1 -1
- package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts.map +1 -1
- package/dist/types/src/components/AssistantSettings/AssistantSettings.stories.d.ts.map +1 -1
- package/dist/types/src/components/Chat/Chat.d.ts +44 -42
- 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 +3 -0
- package/dist/types/src/components/Chat/events.d.ts.map +1 -1
- package/dist/types/src/components/ChatPrompt/ChatActions.d.ts +1 -1
- 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 +10 -14
- package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts.map +1 -1
- package/dist/types/src/components/ChatPrompt/ChatOptions.stories.d.ts +1 -1
- package/dist/types/src/components/ChatPrompt/ChatOptions.stories.d.ts.map +1 -1
- 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 +2 -2
- 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 +1 -1
- 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 +6 -3
- package/dist/types/src/components/ChatThread/ChatThread.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +5 -5
- 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 +8 -1
- package/dist/types/src/components/ChatThread/MarkdownStream.stories.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/registry.d.ts +18 -0
- package/dist/types/src/components/ChatThread/registry.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/sync.d.ts +42 -16
- package/dist/types/src/components/ChatThread/sync.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/tool-widget-state.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/widgets/FallbackWidget.d.ts +4 -4
- package/dist/types/src/components/ChatThread/widgets/FallbackWidget.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.stories.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/widgets/ReferenceWidget.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/widgets/SelectWidget.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/widgets/StatsWidget.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/widgets/StatusWidget.d.ts +2 -15
- package/dist/types/src/components/ChatThread/widgets/StatusWidget.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/widgets/SuggestionWidget.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/widgets/SummaryWidget.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/widgets/ToolWidget.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/widgets/ToolWidget.stories.d.ts.map +1 -1
- 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 +1 -2
- package/dist/types/src/components/ChatThread/widgets/index.d.ts.map +1 -1
- package/dist/types/src/components/ProcessTree/ProcessTree.d.ts +4 -3
- package/dist/types/src/components/ProcessTree/ProcessTree.d.ts.map +1 -1
- package/dist/types/src/components/ProcessTree/ProcessTree.stories.d.ts +0 -1
- package/dist/types/src/components/ProcessTree/ProcessTree.stories.d.ts.map +1 -1
- 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 +5 -3
- package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +1 -1
- package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +4 -5
- package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +1 -1
- package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts +1 -1
- package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +1 -1
- package/dist/types/src/components/TemplateEditor/extensions/handlebars-extension.d.ts.map +1 -1
- package/dist/types/src/components/TemplateEditor/extensions/xml-extension.d.ts.map +1 -1
- package/dist/types/src/components/ToolBlock/ToolBlock.d.ts +4 -4
- package/dist/types/src/components/ToolBlock/ToolBlock.d.ts.map +1 -1
- package/dist/types/src/components/Toolbox/Toolbox.d.ts +3 -3
- package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
- package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +4 -0
- 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.map +1 -1
- package/dist/types/src/containers/AgentArticle/AgentArticle.stories.d.ts +0 -2
- package/dist/types/src/containers/AgentArticle/AgentArticle.stories.d.ts.map +1 -1
- package/dist/types/src/containers/AgentProperties/AgentProperties.d.ts.map +1 -1
- package/dist/types/src/containers/BlueprintArticle/BlueprintArticle.d.ts +1 -1
- package/dist/types/src/containers/BlueprintArticle/BlueprintArticle.d.ts.map +1 -1
- 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 +11 -3
- package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts.map +1 -1
- package/dist/types/src/containers/ChatDialog/ChatDialog.d.ts.map +1 -1
- 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/{PromptList/PromptList.stories.d.ts → RoutineList/RoutineList.stories.d.ts} +1 -1
- 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 +4 -5
- package/dist/types/src/containers/TracePanel/TracePanel.d.ts.map +1 -1
- package/dist/types/src/containers/TracePanel/TracePanel.stories.d.ts +4 -3
- package/dist/types/src/containers/TracePanel/TracePanel.stories.d.ts.map +1 -1
- package/dist/types/src/containers/TracePanel/dxn-extractor.d.ts +6 -6
- package/dist/types/src/containers/TracePanel/dxn-extractor.d.ts.map +1 -1
- package/dist/types/src/containers/TracePanel/index.d.ts.map +1 -1
- 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 +3 -2
- package/dist/types/src/containers/TriggerStatus/TriggerStatus.d.ts.map +1 -1
- package/dist/types/src/containers/TriggerStatus/index.d.ts +1 -1
- package/dist/types/src/containers/TriggerStatus/index.d.ts.map +1 -1
- package/dist/types/src/containers/index.d.ts +6 -5
- package/dist/types/src/containers/index.d.ts.map +1 -1
- 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/prompt-extension.d.ts.map +1 -1
- 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 +3 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useBlueprintRegistry.d.ts +56 -15
- 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 +5 -5
- package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
- package/dist/types/src/hooks/useChatServices.d.ts +7 -3
- package/dist/types/src/hooks/useChatServices.d.ts.map +1 -1
- package/dist/types/src/hooks/useChatToolbarActions.d.ts.map +1 -1
- package/dist/types/src/hooks/useContextBinder.d.ts +2 -2
- package/dist/types/src/hooks/useContextBinder.d.ts.map +1 -1
- package/dist/types/src/hooks/useContextObjects.d.ts +5 -4
- package/dist/types/src/hooks/useContextObjects.d.ts.map +1 -1
- 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 +1 -1
- package/dist/types/src/hooks/useFilteredTypes.d.ts.map +1 -1
- package/dist/types/src/hooks/useFlush.d.ts +1 -1
- package/dist/types/src/hooks/useFlush.d.ts.map +1 -1
- package/dist/types/src/hooks/usePresets.d.ts +2 -2
- 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 +1 -4
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +3 -2
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/operations/create-chat.d.ts +3 -3
- package/dist/types/src/operations/create-chat.d.ts.map +1 -1
- package/dist/types/src/operations/ensure-companion-chat.d.ts +3 -3
- package/dist/types/src/operations/ensure-companion-chat.d.ts.map +1 -1
- 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 +1 -2
- package/dist/types/src/operations/index.d.ts.map +1 -1
- 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 +4 -2
- package/dist/types/src/operations/resolve-navigation-targets.d.ts.map +1 -1
- package/dist/types/src/operations/run-prompt-in-new-chat.d.ts +3 -3
- package/dist/types/src/operations/run-prompt-in-new-chat.d.ts.map +1 -1
- package/dist/types/src/operations/set-current-chat.d.ts +3 -3
- package/dist/types/src/operations/set-current-chat.d.ts.map +1 -1
- 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 +3 -3
- package/dist/types/src/operations/update-chat-name.d.ts.map +1 -1
- 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/presets.d.ts.map +1 -1
- package/dist/types/src/processor/processor.d.ts +263 -26
- package/dist/types/src/processor/processor.d.ts.map +1 -1
- 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 +2 -0
- 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 +2 -3
- package/dist/types/src/testing/test-generator.d.ts.map +1 -1
- 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 -3
- package/dist/types/src/testing/test-sequence.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/types/src/types/Assistant.d.ts +25 -8
- 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 +21 -5
- package/dist/types/src/types/Settings.d.ts.map +1 -1
- package/dist/types/src/types/index.d.ts +8 -3
- 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 +2 -3
- 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 +177 -146
- 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.test.ts → blueprint.node.test.ts} +5 -5
- package/src/blueprints/assistant/blueprint.ts +4 -4
- 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 +31 -11
- package/src/capabilities/app-graph-builder.ts +106 -86
- package/src/capabilities/automation-templates.ts +16 -0
- package/src/capabilities/blueprint-definition.ts +15 -8
- package/src/capabilities/companion-chat-provisioner.ts +5 -5
- package/src/capabilities/create-object.ts +100 -0
- package/src/capabilities/edge-model-resolver.ts +53 -16
- package/src/capabilities/index.ts +23 -3
- package/src/capabilities/integration-provider.ts +86 -0
- package/src/capabilities/{markdown.ts → markdown-extension.ts} +3 -3
- package/src/capabilities/migrations.ts +4 -11
- package/src/capabilities/operation-handler.ts +1 -1
- package/src/capabilities/react-surface.tsx +41 -21
- 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 +3 -2
- package/src/components/AssistantSettings/AssistantSettings.tsx +22 -111
- package/src/components/Chat/Chat.tsx +145 -277
- package/src/components/Chat/context.ts +39 -0
- package/src/components/Chat/events.ts +7 -0
- package/src/components/ChatPrompt/ChatActions.tsx +11 -11
- package/src/components/ChatPrompt/ChatMcpErrors.tsx +50 -0
- package/src/components/ChatPrompt/ChatOptions.stories.tsx +32 -18
- package/src/components/ChatPrompt/ChatOptions.tsx +121 -103
- package/src/components/ChatPrompt/ChatPresets.tsx +3 -7
- package/src/components/ChatPrompt/ChatPrompt.tsx +180 -0
- package/src/components/ChatPrompt/ChatReferences.tsx +9 -13
- package/src/components/ChatPrompt/ChatStatus.tsx +123 -0
- package/src/components/ChatPrompt/ChatStatusIndicator.tsx +2 -2
- package/src/components/ChatPrompt/index.ts +3 -0
- package/src/components/ChatThread/Anchor.stories.tsx +95 -0
- package/src/components/ChatThread/ChatThread.stories.tsx +33 -37
- package/src/components/ChatThread/ChatThread.tsx +47 -23
- package/src/components/ChatThread/DEBUG.md +41 -0
- package/src/components/ChatThread/Link.tsx +5 -5
- package/src/components/ChatThread/MarkdownStream.stories.tsx +43 -5
- package/src/components/ChatThread/registry.tsx +80 -28
- package/src/components/ChatThread/sync.test.ts +180 -22
- package/src/components/ChatThread/sync.ts +89 -104
- package/src/components/ChatThread/testing/reasoning.md +25 -0
- package/src/components/ChatThread/widgets/FallbackWidget.tsx +8 -6
- package/src/components/ChatThread/widgets/ReasoningWidget.ts +13 -7
- package/src/components/ChatThread/widgets/ReferenceWidget.ts +3 -1
- package/src/components/ChatThread/widgets/SelectWidget.ts +4 -2
- package/src/components/ChatThread/widgets/StatsWidget.ts +3 -1
- package/src/components/ChatThread/widgets/StatusWidget.ts +6 -86
- package/src/components/ChatThread/widgets/SuggestionWidget.ts +2 -2
- package/src/components/ChatThread/widgets/SummaryWidget.tsx +7 -6
- package/src/components/ChatThread/widgets/ToolWidget.stories.tsx +2 -1
- package/src/components/ChatThread/widgets/ToolWidget.tsx +42 -25
- package/src/components/ChatThread/widgets/defaults.ts +8 -0
- package/src/components/ChatThread/widgets/index.ts +1 -2
- package/src/components/ProcessTree/ProcessTree.stories.tsx +13 -39
- package/src/components/ProcessTree/ProcessTree.tsx +101 -67
- 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 +6 -5
- package/src/components/TemplateEditor/TemplateEditor.tsx +12 -10
- package/src/components/TemplateEditor/TemplateForm.stories.tsx +6 -9
- package/src/components/TemplateEditor/TemplateForm.tsx +52 -73
- package/src/components/TemplateEditor/extensions/handlebars-extension.ts +2 -2
- package/src/components/ToolBlock/ToolBlock.tsx +25 -17
- package/src/components/Toolbox/Toolbox.stories.tsx +6 -5
- package/src/components/Toolbox/Toolbox.tsx +6 -5
- package/src/components/index.ts +6 -0
- package/src/constants.ts +9 -0
- package/src/containers/AgentArticle/AgentArticle.stories.tsx +19 -15
- package/src/containers/AgentArticle/AgentArticle.tsx +47 -53
- package/src/containers/AgentProperties/AgentProperties.tsx +20 -135
- package/src/containers/BlueprintArticle/BlueprintArticle.tsx +2 -2
- 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 +94 -109
- package/src/containers/ChatDialog/ChatDialog.tsx +6 -11
- 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/{PromptList/PromptList.stories.tsx → RoutineList/RoutineList.stories.tsx} +14 -13
- package/src/containers/{PromptList/PromptList.tsx → RoutineList/RoutineList.tsx} +9 -8
- package/src/containers/RoutineList/index.ts +5 -0
- package/src/containers/TracePanel/TracePanel.stories.tsx +285 -168
- package/src/containers/TracePanel/TracePanel.tsx +220 -77
- package/src/containers/TracePanel/dxn-extractor.test.ts +32 -32
- package/src/containers/TracePanel/dxn-extractor.ts +52 -64
- 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 +20 -34
- package/src/containers/TriggerStatus/index.ts +1 -1
- package/src/containers/index.ts +6 -5
- 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/{queue-logger.ts → feed-logger.ts} +39 -25
- package/src/functions/services.test.ts +53 -0
- package/src/hooks/index.ts +5 -0
- package/src/hooks/useBlueprintRegistry.ts +62 -46
- package/src/hooks/useChatKeymap.ts +52 -0
- package/src/hooks/useChatProcessor.ts +33 -17
- package/src/hooks/useChatServices.ts +8 -6
- package/src/hooks/useChatToolbarActions.ts +98 -96
- package/src/hooks/useContextBinder.ts +7 -7
- package/src/hooks/useContextObjects.ts +6 -5
- package/src/hooks/useDebug.ts +38 -0
- package/src/hooks/useFilteredTypes.ts +18 -16
- package/src/hooks/usePresets.ts +5 -3
- package/src/hooks/useReferencesProvider.ts +7 -15
- package/src/index.ts +1 -5
- package/src/meta.ts +27 -8
- package/src/operations/create-chat.ts +15 -38
- package/src/operations/ensure-companion-chat.ts +49 -47
- package/src/operations/fork-chat.ts +112 -0
- package/src/operations/index.ts +3 -4
- package/src/operations/prompt.node.test.ts +82 -0
- package/src/operations/resolve-navigation-targets.ts +8 -3
- package/src/operations/run-prompt-in-new-chat.ts +87 -87
- package/src/operations/set-current-chat.ts +6 -7
- package/src/operations/toggle-trace-panel-debug.ts +27 -0
- package/src/operations/update-chat-name.ts +24 -20
- package/src/paths.ts +10 -0
- package/src/plugin.ts +11 -0
- package/src/processor/presets.ts +15 -11
- package/src/processor/{processor.test.ts → processor.node.test.ts} +7 -7
- package/src/processor/processor.ts +160 -58
- 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 +2 -0
- package/src/testing/snapshot.ts +35 -0
- package/src/testing/test-generator.test.ts +71 -0
- package/src/testing/test-generator.ts +196 -205
- package/src/testing/test-sequence.ts +3 -3
- package/src/testing/test-services.ts +1 -1
- package/src/testing/test-trace.ts +20 -0
- package/src/testing/trace-timeline.node.conversations.json +1 -0
- package/src/testing/{trace-timeline.test.ts → trace-timeline.node.test.ts} +45 -50
- package/src/testing.ts +9 -0
- package/src/translations.ts +40 -38
- package/src/types/Assistant.ts +13 -1
- package/src/types/AssistantCapabilities.ts +35 -0
- package/src/types/AssistantEvents.ts +11 -0
- package/src/{operations/definitions.ts → types/AssistantOperation.ts} +66 -29
- package/src/types/Settings.ts +68 -7
- package/src/types/index.ts +12 -3
- package/src/types/preset.ts +16 -0
- package/src/types/service.ts +5 -10
- package/src/util/suggestions.test.ts +52 -0
- package/src/util/suggestions.ts +42 -0
- package/src/vite-env.d.ts +5 -0
- package/dist/lib/browser/AssistantSettings-7QMO3LGF.mjs +0 -97
- package/dist/lib/browser/AssistantSettings-7QMO3LGF.mjs.map +0 -7
- package/dist/lib/browser/chunk-ATHYBVGN.mjs +0 -176
- package/dist/lib/browser/chunk-ATHYBVGN.mjs.map +0 -7
- package/dist/lib/browser/chunk-EZRS3J25.mjs.map +0 -7
- package/dist/lib/browser/chunk-LMVTXH54.mjs +0 -154
- package/dist/lib/browser/chunk-LMVTXH54.mjs.map +0 -7
- package/dist/lib/browser/create-chat-LBZHGVSN.mjs +0 -82
- package/dist/lib/browser/create-chat-LBZHGVSN.mjs.map +0 -7
- package/dist/lib/browser/ensure-companion-chat-ZEZA34MZ.mjs.map +0 -7
- package/dist/lib/browser/index.mjs +0 -3452
- package/dist/lib/browser/index.mjs.map +0 -7
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/on-create-space-54RNX5JI.mjs +0 -22
- package/dist/lib/browser/on-create-space-54RNX5JI.mjs.map +0 -7
- package/dist/lib/browser/operations/index.mjs +0 -13
- package/dist/lib/browser/operations/index.mjs.map +0 -7
- package/dist/lib/browser/resolve-navigation-targets-NZOD66NY.mjs.map +0 -7
- package/dist/lib/browser/run-prompt-in-new-chat-THLK5YQC.mjs.map +0 -7
- package/dist/lib/browser/set-current-chat-LRS3VFSH.mjs.map +0 -7
- package/dist/lib/browser/types/index.mjs +0 -20
- package/dist/lib/browser/update-chat-name-3Y36KFAS.mjs.map +0 -7
- package/dist/lib/node-esm/AssistantSettings-UVUTKO7E.mjs +0 -98
- package/dist/lib/node-esm/AssistantSettings-UVUTKO7E.mjs.map +0 -7
- package/dist/lib/node-esm/blueprints/index.mjs +0 -9
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
- package/dist/lib/node-esm/chunk-NZIKC7AN.mjs +0 -32
- package/dist/lib/node-esm/chunk-NZIKC7AN.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-PXAJSTGZ.mjs +0 -177
- package/dist/lib/node-esm/chunk-PXAJSTGZ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-W3JZ2F4T.mjs +0 -155
- package/dist/lib/node-esm/chunk-W3JZ2F4T.mjs.map +0 -7
- package/dist/lib/node-esm/create-chat-3BEG4R6J.mjs +0 -83
- package/dist/lib/node-esm/create-chat-3BEG4R6J.mjs.map +0 -7
- package/dist/lib/node-esm/ensure-companion-chat-6K2WEWFP.mjs +0 -66
- package/dist/lib/node-esm/ensure-companion-chat-6K2WEWFP.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -3453
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/on-create-space-YRPZ6HZY.mjs +0 -23
- package/dist/lib/node-esm/on-create-space-YRPZ6HZY.mjs.map +0 -7
- package/dist/lib/node-esm/operations/index.mjs +0 -14
- package/dist/lib/node-esm/operations/index.mjs.map +0 -7
- package/dist/lib/node-esm/resolve-navigation-targets-3PPK7XLH.mjs +0 -23
- package/dist/lib/node-esm/resolve-navigation-targets-3PPK7XLH.mjs.map +0 -7
- package/dist/lib/node-esm/run-prompt-in-new-chat-OUYKCMQ7.mjs +0 -137
- package/dist/lib/node-esm/run-prompt-in-new-chat-OUYKCMQ7.mjs.map +0 -7
- package/dist/lib/node-esm/set-current-chat-SMXZJD3F.mjs +0 -55
- package/dist/lib/node-esm/set-current-chat-SMXZJD3F.mjs.map +0 -7
- package/dist/lib/node-esm/types/index.mjs +0 -21
- package/dist/lib/node-esm/update-chat-name-HM2P4NSI.mjs +0 -72
- package/dist/lib/node-esm/update-chat-name-HM2P4NSI.mjs.map +0 -7
- package/dist/types/src/blueprints/assistant/blueprint.test.d.ts +0 -2
- package/dist/types/src/blueprints/assistant/blueprint.test.d.ts.map +0 -1
- package/dist/types/src/capabilities/markdown.d.ts.map +0 -1
- package/dist/types/src/components/ChatProgress/ChatProgress.d.ts +0 -10
- package/dist/types/src/components/ChatProgress/ChatProgress.d.ts.map +0 -1
- package/dist/types/src/components/ChatProgress/index.d.ts +0 -2
- package/dist/types/src/components/ChatProgress/index.d.ts.map +0 -1
- package/dist/types/src/components/ChatThread/widgets/PromptWidget.d.ts +0 -14
- package/dist/types/src/components/ChatThread/widgets/PromptWidget.d.ts.map +0 -1
- package/dist/types/src/containers/AgentProperties/AgentProperties.stories.d.ts.map +0 -1
- package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts +0 -12
- package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts.map +0 -1
- package/dist/types/src/containers/ChatContainer/index.d.ts +0 -2
- package/dist/types/src/containers/ChatContainer/index.d.ts.map +0 -1
- package/dist/types/src/containers/PromptArticle/PromptArticle.d.ts +0 -6
- package/dist/types/src/containers/PromptArticle/PromptArticle.d.ts.map +0 -1
- package/dist/types/src/containers/PromptArticle/index.d.ts +0 -2
- package/dist/types/src/containers/PromptArticle/index.d.ts.map +0 -1
- package/dist/types/src/containers/PromptList/PromptList.d.ts +0 -6
- package/dist/types/src/containers/PromptList/PromptList.d.ts.map +0 -1
- package/dist/types/src/containers/PromptList/PromptList.stories.d.ts.map +0 -1
- package/dist/types/src/containers/PromptList/index.d.ts +0 -2
- package/dist/types/src/containers/PromptList/index.d.ts.map +0 -1
- package/dist/types/src/containers/TracePanel/execution-graph.d.ts +0 -17
- package/dist/types/src/containers/TracePanel/execution-graph.d.ts.map +0 -1
- package/dist/types/src/operations/definitions.d.ts +0 -135
- package/dist/types/src/operations/definitions.d.ts.map +0 -1
- package/dist/types/src/operations/on-create-space.d.ts +0 -5
- package/dist/types/src/operations/on-create-space.d.ts.map +0 -1
- package/dist/types/src/processor/processor.test.d.ts +0 -2
- package/dist/types/src/processor/processor.test.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/testing/trace-timeline.test.d.ts +0 -2
- package/dist/types/src/testing/trace-timeline.test.d.ts.map +0 -1
- package/dist/types/src/types/capabilities.d.ts +0 -32
- package/dist/types/src/types/capabilities.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/dist/types/src/types/events.d.ts +0 -5
- package/dist/types/src/types/events.d.ts.map +0 -1
- package/src/AssistantPlugin.tsx +0 -233
- package/src/components/ChatProgress/ChatProgress.tsx +0 -56
- package/src/components/ChatProgress/index.ts +0 -5
- package/src/components/ChatThread/widgets/PromptWidget.ts +0 -28
- package/src/containers/AgentProperties/AgentProperties.stories.tsx +0 -100
- package/src/containers/ChatContainer/ChatContainer.tsx +0 -95
- package/src/containers/ChatContainer/index.ts +0 -5
- package/src/containers/PromptArticle/PromptArticle.tsx +0 -59
- package/src/containers/PromptArticle/index.ts +0 -5
- package/src/containers/PromptList/index.ts +0 -5
- package/src/containers/TracePanel/execution-graph.ts +0 -425
- package/src/operations/on-create-space.ts +0 -24
- package/src/testing/trace-timeline.conversations.json +0 -1
- package/src/types/capabilities.ts +0 -35
- package/src/types/defs.ts +0 -5
- package/src/types/events.ts +0 -11
- /package/dist/lib/{browser/blueprints/index.mjs.map → neutral/AssistantPlugin.mjs.map} +0 -0
- /package/dist/lib/{browser/chunk-J5LGTIGS.mjs.map → neutral/ChatArticle-VNVZCDUR.mjs.map} +0 -0
- /package/dist/lib/{browser/types → neutral/blueprints}/index.mjs.map +0 -0
- /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs +0 -0
- /package/dist/lib/{node-esm/blueprints/index.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
- /package/dist/lib/{node-esm/types → neutral}/index.mjs.map +0 -0
- /package/dist/lib/{node-esm/chunk-HSLMI22Q.mjs.map → neutral/meta.mjs.map} +0 -0
|
@@ -7,25 +7,20 @@ import * as Prompt from '@effect/ai/Prompt';
|
|
|
7
7
|
import * as Effect from 'effect/Effect';
|
|
8
8
|
|
|
9
9
|
import { AiPreprocessor, AiService } from '@dxos/ai';
|
|
10
|
+
import { Operation } from '@dxos/compute';
|
|
10
11
|
import { Database, Feed, Filter, Obj } from '@dxos/echo';
|
|
11
12
|
import { log } from '@dxos/log';
|
|
12
|
-
import { Operation } from '@dxos/operation';
|
|
13
13
|
import { Message } from '@dxos/types';
|
|
14
14
|
import { trim } from '@dxos/util';
|
|
15
15
|
|
|
16
|
-
import {
|
|
16
|
+
import { AssistantOperation } from '#types';
|
|
17
17
|
|
|
18
|
-
const handler: Operation.WithHandler<typeof UpdateChatName> = UpdateChatName.pipe(
|
|
18
|
+
const handler: Operation.WithHandler<typeof AssistantOperation.UpdateChatName> = AssistantOperation.UpdateChatName.pipe(
|
|
19
19
|
Operation.withHandler(
|
|
20
20
|
Effect.fnUntraced(
|
|
21
|
-
function* ({ chat }) {
|
|
21
|
+
function* ({ chat, prompt: initialPrompt }) {
|
|
22
22
|
log.info('updating chat name', { chat });
|
|
23
23
|
|
|
24
|
-
const feed = yield* Database.load(chat.feed);
|
|
25
|
-
const history = yield* Feed.runQuery(feed, Filter.type(Message.Message));
|
|
26
|
-
|
|
27
|
-
log.info('history', { history: history.length });
|
|
28
|
-
|
|
29
24
|
const system = trim`
|
|
30
25
|
It is extremely important that you respond only with the title and nothing else.
|
|
31
26
|
Do not use markdown or other formatting.
|
|
@@ -35,25 +30,34 @@ const handler: Operation.WithHandler<typeof UpdateChatName> = UpdateChatName.pip
|
|
|
35
30
|
Fishing Trip
|
|
36
31
|
</example_reply>
|
|
37
32
|
`;
|
|
38
|
-
const prompt = 'Suggest a name for this chat';
|
|
39
33
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}
|
|
34
|
+
let namePrompt: Prompt.Prompt;
|
|
35
|
+
if (initialPrompt) {
|
|
36
|
+
// Use the provided prompt text directly; the feed may not have messages yet.
|
|
37
|
+
namePrompt = Prompt.setSystem(
|
|
38
|
+
Prompt.make(`User's first message: "${initialPrompt}"\n\nSuggest a name for this chat.`),
|
|
39
|
+
system,
|
|
40
|
+
);
|
|
41
|
+
} else {
|
|
42
|
+
const feed = yield* Database.load(chat.feed);
|
|
43
|
+
const history = yield* Feed.runQuery(feed, Filter.type(Message.Message));
|
|
44
|
+
log.info('history', { history: history.length });
|
|
45
|
+
const historyPrompt = yield* AiPreprocessor.preprocessPrompt(history, {
|
|
46
|
+
system,
|
|
47
|
+
cacheControl: 'ephemeral',
|
|
48
|
+
});
|
|
49
|
+
namePrompt = Prompt.merge(historyPrompt, 'Suggest a name for this chat');
|
|
50
|
+
}
|
|
48
51
|
|
|
52
|
+
const response = yield* LanguageModel.generateText({ prompt: namePrompt });
|
|
49
53
|
const newName = response.text.replaceAll(/[^a-zA-Z0-9\s]/g, '').trim();
|
|
50
54
|
|
|
51
|
-
Obj.
|
|
55
|
+
Obj.update(chat, (chat) => {
|
|
52
56
|
chat.name = newName;
|
|
53
57
|
});
|
|
54
58
|
log.info('chat name updated', { chat, newName: chat.name });
|
|
55
59
|
},
|
|
56
|
-
Effect.provide(AiService.model('
|
|
60
|
+
Effect.provide(AiService.model('ai.claude.model.claude-haiku-4-5')),
|
|
57
61
|
),
|
|
58
62
|
),
|
|
59
63
|
);
|
package/src/paths.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { createTypeSectionPaths } from '@dxos/app-toolkit';
|
|
6
|
+
import { Chat } from '@dxos/assistant-toolkit';
|
|
7
|
+
|
|
8
|
+
const { getSectionPath: getChatsPath, getObjectPath: getChatPath } = createTypeSectionPaths(Chat.Chat);
|
|
9
|
+
|
|
10
|
+
export { getChatsPath, getChatPath };
|
package/src/plugin.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { Plugin } from '@dxos/app-framework';
|
|
6
|
+
|
|
7
|
+
import { meta } from './meta';
|
|
8
|
+
|
|
9
|
+
export const AssistantPlugin = Plugin.lazy(meta, () => import('#plugin'));
|
|
10
|
+
|
|
11
|
+
export { AssistantOperationHandlerSet } from './operations';
|
package/src/processor/presets.ts
CHANGED
|
@@ -19,50 +19,54 @@ export type AiServicePreset = {
|
|
|
19
19
|
};
|
|
20
20
|
|
|
21
21
|
const createModelLabel = (model: ModelName) => {
|
|
22
|
-
const parts = model.split('
|
|
22
|
+
const parts = model.split('.');
|
|
23
23
|
return parts[parts.length - 1];
|
|
24
24
|
};
|
|
25
25
|
|
|
26
26
|
// TODO(burdon): Users should be able to create and edit presets.
|
|
27
27
|
export const AiServicePresets: AiServicePreset[] = [
|
|
28
|
+
// Sonnet is first so it is the default selection.
|
|
28
29
|
{
|
|
29
30
|
provider: 'dxos-remote' as const,
|
|
30
|
-
model: '
|
|
31
|
+
model: 'ai.claude.model.claude-sonnet-4-6' as const,
|
|
32
|
+
label: 'Claude Sonnet',
|
|
31
33
|
},
|
|
32
34
|
{
|
|
33
35
|
provider: 'dxos-remote' as const,
|
|
34
|
-
model: '
|
|
36
|
+
model: 'ai.claude.model.claude-opus-4-8' as const,
|
|
37
|
+
label: 'Claude Opus',
|
|
35
38
|
},
|
|
36
39
|
{
|
|
37
40
|
provider: 'dxos-remote' as const,
|
|
38
|
-
model: '
|
|
41
|
+
model: 'ai.claude.model.claude-haiku-4-5' as const,
|
|
42
|
+
label: 'Claude Haiku',
|
|
39
43
|
},
|
|
40
44
|
{
|
|
41
45
|
provider: 'ollama' as const,
|
|
42
|
-
model: 'gpt-oss:20b' as const,
|
|
46
|
+
model: 'ai.ollama.model.gpt-oss:20b' as const,
|
|
43
47
|
},
|
|
44
48
|
{
|
|
45
49
|
provider: 'ollama' as const,
|
|
46
|
-
model: 'gemma4:latest' as const,
|
|
50
|
+
model: 'ai.ollama.model.gemma4:latest' as const,
|
|
47
51
|
},
|
|
48
52
|
{
|
|
49
53
|
provider: 'lm-studio' as const,
|
|
50
|
-
model: '
|
|
54
|
+
model: 'ai.google.model.gemma-3-27b' as const,
|
|
51
55
|
},
|
|
52
56
|
{
|
|
53
57
|
provider: 'lm-studio' as const,
|
|
54
|
-
model: '
|
|
58
|
+
model: 'ai.meta.model.llama-3.2-3b-instruct' as const,
|
|
55
59
|
},
|
|
56
60
|
{
|
|
57
|
-
model: 'deepseek-r1:latest' as const,
|
|
61
|
+
model: 'ai.ollama.model.deepseek-r1:latest' as const,
|
|
58
62
|
provider: 'dxos-local' as const,
|
|
59
63
|
},
|
|
60
64
|
].map(
|
|
61
|
-
({ model, provider }, i) =>
|
|
65
|
+
({ model, provider, label }, i) =>
|
|
62
66
|
({
|
|
63
67
|
id: `preset-${i}`,
|
|
64
68
|
provider,
|
|
65
69
|
model,
|
|
66
|
-
label: createModelLabel(model),
|
|
70
|
+
label: label ?? createModelLabel(model),
|
|
67
71
|
}) satisfies AiServicePreset,
|
|
68
72
|
);
|
|
@@ -4,14 +4,16 @@
|
|
|
4
4
|
|
|
5
5
|
import { describe, it } from '@effect/vitest';
|
|
6
6
|
import * as Effect from 'effect/Effect';
|
|
7
|
+
import * as Layer from 'effect/Layer';
|
|
7
8
|
import * as ManagedRuntime from 'effect/ManagedRuntime';
|
|
8
9
|
|
|
10
|
+
import { Capabilities } from '@dxos/app-framework';
|
|
9
11
|
import { AiSession } from '@dxos/assistant';
|
|
10
12
|
import { Chat } from '@dxos/assistant-toolkit';
|
|
11
|
-
import { AssistantTestLayer } from '@dxos/assistant/testing';
|
|
12
13
|
import { Database, Feed } from '@dxos/echo';
|
|
13
|
-
import {
|
|
14
|
+
import { EffectEx } from '@dxos/effect';
|
|
14
15
|
import { TestHelpers } from '@dxos/effect/testing';
|
|
16
|
+
import { AssistantTestLayer } from '@dxos/functions-runtime/testing';
|
|
15
17
|
|
|
16
18
|
import { AiChatProcessor } from './processor';
|
|
17
19
|
|
|
@@ -25,11 +27,9 @@ describe('Chat processor', () => {
|
|
|
25
27
|
const feed = Feed.make();
|
|
26
28
|
yield* Database.add(feed);
|
|
27
29
|
const runtime = yield* Effect.runtime<Feed.FeedService>();
|
|
28
|
-
const session = yield* acquireReleaseResource(() => new AiSession({ feed, runtime }));
|
|
29
|
-
const managedRuntime = ManagedRuntime.make(
|
|
30
|
-
|
|
31
|
-
);
|
|
32
|
-
const processor = new AiChatProcessor(session, managedRuntime as any, feed);
|
|
30
|
+
const session = yield* EffectEx.acquireReleaseResource(() => new AiSession.Session({ feed, runtime }));
|
|
31
|
+
const managedRuntime = ManagedRuntime.make(Layer.empty) as unknown as Capabilities.ProcessManagerRuntime;
|
|
32
|
+
const processor = new AiChatProcessor(session, managedRuntime, feed, Layer.empty as any);
|
|
33
33
|
expect(processor).toBeDefined();
|
|
34
34
|
expect(processor.active).toBeDefined();
|
|
35
35
|
},
|
|
@@ -2,73 +2,109 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { Atom, Registry } from '@effect-atom/atom-react';
|
|
5
|
+
import { Atom, Registry as AtomRegistry } from '@effect-atom/atom-react';
|
|
6
|
+
import * as AiError from '@effect/ai/AiError';
|
|
7
|
+
import * as Cause from 'effect/Cause';
|
|
6
8
|
import * as Effect from 'effect/Effect';
|
|
9
|
+
import * as Exit from 'effect/Exit';
|
|
7
10
|
import * as Fiber from 'effect/Fiber';
|
|
11
|
+
import * as Layer from 'effect/Layer';
|
|
8
12
|
import * as Option from 'effect/Option';
|
|
9
13
|
import * as Stream from 'effect/Stream';
|
|
10
14
|
|
|
11
|
-
import { type AiService, DEFAULT_EDGE_MODEL, type ModelName, type ModelRegistry } from '@dxos/ai';
|
|
15
|
+
import { type AiService, DEFAULT_EDGE_MODEL, type ModelName, type ModelRegistry, type OpaqueToolkit } from '@dxos/ai';
|
|
16
|
+
import { Capabilities } from '@dxos/app-framework';
|
|
12
17
|
import {
|
|
13
|
-
|
|
14
|
-
|
|
18
|
+
AiContext,
|
|
19
|
+
AiSession,
|
|
15
20
|
createSystemPrompt,
|
|
16
21
|
formatSystemPrompt,
|
|
17
|
-
|
|
22
|
+
McpServerError,
|
|
18
23
|
PartialBlock,
|
|
19
24
|
ToolExecutionServices,
|
|
20
25
|
} from '@dxos/assistant';
|
|
21
26
|
import { type Chat } from '@dxos/assistant-toolkit';
|
|
22
|
-
import { type
|
|
23
|
-
import { type Database, Feed, Obj, Ref } from '@dxos/echo';
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
27
|
+
import { type Credential, Operation, type ServiceNotAvailableError, Trace } from '@dxos/compute';
|
|
28
|
+
import { type Database, Feed, Obj, Ref, type Registry } from '@dxos/echo';
|
|
29
|
+
import { EffectEx } from '@dxos/effect';
|
|
30
|
+
import { AgentService } from '@dxos/functions-runtime';
|
|
26
31
|
import { log } from '@dxos/log';
|
|
27
|
-
import { Operation } from '@dxos/operation';
|
|
28
|
-
import type { AutomationCapabilities } from '@dxos/plugin-automation/types';
|
|
29
32
|
import { Message } from '@dxos/types';
|
|
30
33
|
|
|
31
|
-
import {
|
|
34
|
+
import { AssistantOperation } from '#types';
|
|
32
35
|
|
|
33
36
|
/**
|
|
34
37
|
* @deprecated Services type for the old direct-conversation processor path.
|
|
35
38
|
* Retained for backward compatibility with CLI and update-name.
|
|
36
39
|
*/
|
|
37
40
|
export type AiChatServices =
|
|
38
|
-
| CredentialsService
|
|
41
|
+
| Credential.CredentialsService
|
|
39
42
|
| Database.Service
|
|
40
|
-
| QueueService
|
|
41
43
|
| AiService.AiService
|
|
42
44
|
| Trace.TraceService;
|
|
43
45
|
|
|
46
|
+
/**
|
|
47
|
+
* Space-scoped services materialised by the layer passed into
|
|
48
|
+
* {@link AiChatProcessor}. Mirrors the tag list that
|
|
49
|
+
* {@link useChatProcessor} passes to {@link ServiceResolver.provide}.
|
|
50
|
+
*/
|
|
51
|
+
export type SpaceServices =
|
|
52
|
+
| Database.Service
|
|
53
|
+
| Feed.FeedService
|
|
54
|
+
| Credential.CredentialsService
|
|
55
|
+
| AiService.AiService
|
|
56
|
+
| AgentService.AgentService
|
|
57
|
+
| Registry.Service
|
|
58
|
+
| OpaqueToolkit.OpaqueToolkitProvider;
|
|
59
|
+
|
|
44
60
|
export type AiChatProcessorOptions = {
|
|
45
61
|
model?: ModelName;
|
|
46
62
|
modelRegistry?: ModelRegistry;
|
|
47
|
-
|
|
48
|
-
observableRegistry?:
|
|
63
|
+
registry?: Registry.Registry;
|
|
64
|
+
observableRegistry?: AtomRegistry.Registry;
|
|
49
65
|
/**
|
|
50
66
|
* For tracing.
|
|
51
67
|
*/
|
|
52
68
|
chat?: Ref.Ref<Chat.Chat>;
|
|
53
69
|
system?: string;
|
|
54
|
-
/**
|
|
55
|
-
* Probability of automatically updating chat name after each request.
|
|
56
|
-
* Chat name is always updated if it has no name.
|
|
57
|
-
* @default 0.1 (10%)
|
|
58
|
-
*/
|
|
59
|
-
autoUpdateNameChance?: number;
|
|
60
70
|
};
|
|
61
71
|
|
|
62
72
|
const defaultOptions: Partial<AiChatProcessorOptions> = {
|
|
63
73
|
model: DEFAULT_EDGE_MODEL,
|
|
64
|
-
autoUpdateNameChance: 0.1,
|
|
65
74
|
};
|
|
66
75
|
|
|
67
|
-
export type
|
|
76
|
+
export type ProcessorRequestOptions = {};
|
|
68
77
|
|
|
69
|
-
export type
|
|
78
|
+
export type ProcessorRequest = {
|
|
70
79
|
message: string;
|
|
71
|
-
options?:
|
|
80
|
+
options?: ProcessorRequestOptions;
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Maps a failure from the agent fiber to an error suitable for display.
|
|
85
|
+
* {@link AiError}s originate from the AI service and are actionable by the user
|
|
86
|
+
* (e.g., "model 'x' not found", "Connection refused"), so their detail is propagated.
|
|
87
|
+
* Any other failure is treated as an internal/unexpected error and reported generically
|
|
88
|
+
* to avoid leaking implementation detail.
|
|
89
|
+
*/
|
|
90
|
+
const parseError = (err: unknown): Error => {
|
|
91
|
+
let message: string | undefined;
|
|
92
|
+
if (AiError.isAiError(err)) {
|
|
93
|
+
message = err.description?.trim() || err.message;
|
|
94
|
+
} else if (typeof err === 'string') {
|
|
95
|
+
// TODO(burdon): This is brittle.
|
|
96
|
+
// UnknownError: ChatCompletionsClient.streamText: model 'gemma3:27b' not found
|
|
97
|
+
const [, model] = err.match(/model\s+'([^']+)'\s+not\s+found/i) || [];
|
|
98
|
+
if (model) {
|
|
99
|
+
message = `The model is not available: ${model}`;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (!message) {
|
|
104
|
+
message = 'An unexpected error occurred.';
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return new Error(message, { cause: err });
|
|
72
108
|
};
|
|
73
109
|
|
|
74
110
|
/**
|
|
@@ -76,7 +112,7 @@ export type AiRequest = {
|
|
|
76
112
|
* Uses AgentService to spawn a process-backed agent and subscribes to ephemeral trace events for streaming.
|
|
77
113
|
*/
|
|
78
114
|
export class AiChatProcessor {
|
|
79
|
-
readonly #registry:
|
|
115
|
+
readonly #registry: AtomRegistry.Registry;
|
|
80
116
|
|
|
81
117
|
/** Pending messages (finalized, non-streaming). */
|
|
82
118
|
readonly #pending = Atom.make<Message.Message[]>([]);
|
|
@@ -91,7 +127,7 @@ export class AiChatProcessor {
|
|
|
91
127
|
#requestFiber: Fiber.RuntimeFiber<void, unknown> | undefined;
|
|
92
128
|
|
|
93
129
|
/** Last request (for retries). */
|
|
94
|
-
#lastRequest:
|
|
130
|
+
#lastRequest: ProcessorRequest | undefined;
|
|
95
131
|
|
|
96
132
|
/** Streaming state. */
|
|
97
133
|
public readonly streaming = Atom.make<boolean>((get) => get(this.#streaming).length > 0);
|
|
@@ -105,13 +141,29 @@ export class AiChatProcessor {
|
|
|
105
141
|
/** Last error. */
|
|
106
142
|
public readonly error = Atom.make<Option.Option<Error>>(Option.none());
|
|
107
143
|
|
|
144
|
+
/**
|
|
145
|
+
* MCP server connection errors observed during the most recent request.
|
|
146
|
+
* Misconfigured/unreachable servers are dropped from the toolkit so the chat
|
|
147
|
+
* keeps working; the entries here let the UI display which servers failed.
|
|
148
|
+
*/
|
|
149
|
+
public readonly mcpErrors = Atom.make<readonly Trace.PayloadType<typeof McpServerError>[]>([]);
|
|
150
|
+
|
|
108
151
|
constructor(
|
|
109
|
-
private readonly _conversation: AiSession,
|
|
110
|
-
private readonly _runtime:
|
|
152
|
+
private readonly _conversation: AiSession.Session,
|
|
153
|
+
private readonly _runtime: Capabilities.ProcessManagerRuntime,
|
|
111
154
|
private readonly _feed: Feed.Feed,
|
|
155
|
+
/**
|
|
156
|
+
* Pre-built layer that materialises {@link SpaceServices}. Built via
|
|
157
|
+
* {@link ServiceResolver.provide} with the {@link ServiceResolver} already
|
|
158
|
+
* supplied (hence `RIn = never`); the {@link ServiceNotAvailableError}
|
|
159
|
+
* error channel surfaces when a tag is not available for the space.
|
|
160
|
+
* Provided to every effect run by the processor so the underlying
|
|
161
|
+
* {@link ProcessManagerRuntime} has access to space-affinity services.
|
|
162
|
+
*/
|
|
163
|
+
private readonly _spaceLayer: Layer.Layer<SpaceServices, ServiceNotAvailableError, never>,
|
|
112
164
|
private readonly _options: AiChatProcessorOptions = defaultOptions,
|
|
113
165
|
) {
|
|
114
|
-
this.#registry = this._options.observableRegistry ??
|
|
166
|
+
this.#registry = this._options.observableRegistry ?? AtomRegistry.make();
|
|
115
167
|
if (this._options.model && !this._options.system) {
|
|
116
168
|
const capabilities = this._options.modelRegistry?.getCapabilities(this._options.model) ?? {};
|
|
117
169
|
this._options.system = createSystemPrompt(capabilities);
|
|
@@ -126,8 +178,8 @@ export class AiChatProcessor {
|
|
|
126
178
|
return this._conversation;
|
|
127
179
|
}
|
|
128
180
|
|
|
129
|
-
get
|
|
130
|
-
return this._options.
|
|
181
|
+
get registry() {
|
|
182
|
+
return this._options.registry;
|
|
131
183
|
}
|
|
132
184
|
|
|
133
185
|
get system(): string {
|
|
@@ -135,7 +187,9 @@ export class AiChatProcessor {
|
|
|
135
187
|
}
|
|
136
188
|
|
|
137
189
|
async getTools(): Promise<Record<string, any>> {
|
|
138
|
-
return this._runtime.runPromise(
|
|
190
|
+
return this._runtime.runPromise(
|
|
191
|
+
Effect.provide(this._conversation.getTools(), ToolExecutionServices).pipe(Effect.provide(this._spaceLayer)),
|
|
192
|
+
);
|
|
139
193
|
}
|
|
140
194
|
|
|
141
195
|
async getSystemPrompt(): Promise<string> {
|
|
@@ -144,14 +198,18 @@ export class AiChatProcessor {
|
|
|
144
198
|
const blueprints = this.context.getBlueprints();
|
|
145
199
|
const objects = this.context.getObjects();
|
|
146
200
|
return yield* formatSystemPrompt({ system: this._options.system, blueprints, objects });
|
|
147
|
-
}).pipe(
|
|
201
|
+
}).pipe(
|
|
202
|
+
Effect.provideService(AiContext.Service, { binder: this.context }),
|
|
203
|
+
Effect.provide(this._spaceLayer),
|
|
204
|
+
Effect.orDie,
|
|
205
|
+
),
|
|
148
206
|
);
|
|
149
207
|
}
|
|
150
208
|
|
|
151
209
|
/**
|
|
152
210
|
* Initiates a new request via AgentService.
|
|
153
211
|
*/
|
|
154
|
-
async request(requestProp:
|
|
212
|
+
async request(requestProp: ProcessorRequest): Promise<void> {
|
|
155
213
|
if (this.#requestFiber) {
|
|
156
214
|
await this.cancel();
|
|
157
215
|
}
|
|
@@ -159,11 +217,12 @@ export class AiChatProcessor {
|
|
|
159
217
|
try {
|
|
160
218
|
this.#lastRequest = requestProp;
|
|
161
219
|
this.#registry.set(this.error, Option.none());
|
|
220
|
+
this.#registry.set(this.mcpErrors, []);
|
|
162
221
|
this.#registry.set(this.active, true);
|
|
163
222
|
|
|
164
223
|
const effect = Effect.gen(this, function* () {
|
|
165
224
|
// NOTE: Gets or creates a session for the feed.
|
|
166
|
-
log.info('init agent session', { feed: Obj.
|
|
225
|
+
log.info('init agent session', { feed: Obj.getURI(this._feed), model: this._options.model });
|
|
167
226
|
const session = yield* AgentService.getSession(this._feed, { model: this._options.model });
|
|
168
227
|
const ephemeralStream = session.subscribeEphemeral();
|
|
169
228
|
yield* ephemeralStream.pipe(
|
|
@@ -172,6 +231,8 @@ export class AiChatProcessor {
|
|
|
172
231
|
for (const event of message.events) {
|
|
173
232
|
if (Trace.isOfType(PartialBlock, event)) {
|
|
174
233
|
this.#handleEphemeralMessage(event.data);
|
|
234
|
+
} else if (Trace.isOfType(McpServerError, event)) {
|
|
235
|
+
this.#handleMcpError(event.data);
|
|
175
236
|
}
|
|
176
237
|
}
|
|
177
238
|
}),
|
|
@@ -182,31 +243,40 @@ export class AiChatProcessor {
|
|
|
182
243
|
log('chat processor submitting prompt', { length: requestProp.message.length });
|
|
183
244
|
yield* session.submitPrompt(requestProp.message);
|
|
184
245
|
log('chat processor submitPrompt returned, waiting for agent', {});
|
|
246
|
+
|
|
247
|
+
// On the first message (no name yet), schedule rename immediately so it
|
|
248
|
+
// runs concurrently with the AI response rather than waiting for completion.
|
|
249
|
+
if (!this._options.chat?.target?.name) {
|
|
250
|
+
yield* this.#updateChatName(requestProp.message);
|
|
251
|
+
}
|
|
252
|
+
|
|
185
253
|
yield* session.waitForCompletion();
|
|
186
254
|
log.info('session complete');
|
|
187
255
|
|
|
188
256
|
this.#flushStreaming();
|
|
189
|
-
|
|
190
|
-
yield* this.#maybeUpdateChatName();
|
|
191
257
|
});
|
|
192
258
|
|
|
193
|
-
this.#requestFiber = this._runtime.runFork(effect);
|
|
259
|
+
this.#requestFiber = this._runtime.runFork(effect.pipe(Effect.provide(this._spaceLayer)));
|
|
194
260
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
261
|
+
// Inspect the fiber's exit so the underlying failure (e.g. "model 'x' not found") is
|
|
262
|
+
// preserved as a clean Error rather than an opaque FiberFailure.
|
|
263
|
+
const exit = await this._runtime.runPromise(Fiber.await(this.#requestFiber));
|
|
264
|
+
if (Exit.isFailure(exit)) {
|
|
265
|
+
if (Cause.isInterruptedOnly(exit.cause)) {
|
|
199
266
|
return;
|
|
200
267
|
}
|
|
201
|
-
|
|
268
|
+
|
|
269
|
+
throw EffectEx.causeToError(exit.cause);
|
|
202
270
|
}
|
|
203
271
|
|
|
204
272
|
this.#registry.set(this.error, Option.none());
|
|
205
273
|
this.#lastRequest = undefined;
|
|
206
274
|
this.#requestFiber = undefined;
|
|
207
275
|
} catch (err) {
|
|
276
|
+
// `EffectEx.causeToError` above unwraps the fiber failure into the underlying error (e.g. an AiError
|
|
277
|
+
// carrying "model 'x' not found"); `parseError` decides what to surface to the user.
|
|
208
278
|
log.error('request failed', { error: err });
|
|
209
|
-
this.#registry.set(this.error, Option.some(
|
|
279
|
+
this.#registry.set(this.error, Option.some(parseError(err)));
|
|
210
280
|
} finally {
|
|
211
281
|
log.info('setting active to false');
|
|
212
282
|
this.#registry.set(this.active, false);
|
|
@@ -218,12 +288,15 @@ export class AiChatProcessor {
|
|
|
218
288
|
* Cancels the current request.
|
|
219
289
|
*/
|
|
220
290
|
async cancel(): Promise<void> {
|
|
221
|
-
await runAndForwardErrors(
|
|
291
|
+
await EffectEx.runAndForwardErrors(
|
|
222
292
|
Effect.gen(this, function* () {
|
|
293
|
+
log.info('cancelling request', { fiber: this.#requestFiber });
|
|
223
294
|
if (this.#requestFiber) {
|
|
224
295
|
yield* Fiber.interrupt(this.#requestFiber);
|
|
225
296
|
}
|
|
226
|
-
|
|
297
|
+
const session = yield* AgentService.getSession(this._feed);
|
|
298
|
+
yield* session.terminate();
|
|
299
|
+
}).pipe(Effect.provide(this._spaceLayer)),
|
|
227
300
|
);
|
|
228
301
|
|
|
229
302
|
this.#requestFiber = undefined;
|
|
@@ -239,11 +312,28 @@ export class AiChatProcessor {
|
|
|
239
312
|
}
|
|
240
313
|
}
|
|
241
314
|
|
|
315
|
+
/**
|
|
316
|
+
* Clears the recorded MCP server errors (e.g. after the user dismisses the warning banner).
|
|
317
|
+
*/
|
|
318
|
+
dismissMcpErrors(): void {
|
|
319
|
+
this.#registry.set(this.mcpErrors, []);
|
|
320
|
+
}
|
|
321
|
+
|
|
242
322
|
/**
|
|
243
323
|
* Update the current chat's name.
|
|
244
324
|
*/
|
|
245
325
|
async updateName(chat: Chat.Chat): Promise<void> {
|
|
246
|
-
|
|
326
|
+
const spaceId = Obj.getDatabase(chat)?.spaceId;
|
|
327
|
+
if (!spaceId) {
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
EffectEx.unwrapExit(
|
|
331
|
+
await this._runtime.runPromiseExit(
|
|
332
|
+
Operation.invoke(AssistantOperation.UpdateChatName, { chat }, { spaceId }).pipe(
|
|
333
|
+
Effect.provide(this._spaceLayer),
|
|
334
|
+
),
|
|
335
|
+
),
|
|
336
|
+
);
|
|
247
337
|
}
|
|
248
338
|
|
|
249
339
|
/**
|
|
@@ -286,6 +376,20 @@ export class AiChatProcessor {
|
|
|
286
376
|
}
|
|
287
377
|
}
|
|
288
378
|
|
|
379
|
+
/**
|
|
380
|
+
* Records a per-server MCP failure, deduped by url+protocol so repeat misconfigurations
|
|
381
|
+
* across turns do not spam the UI.
|
|
382
|
+
*/
|
|
383
|
+
#handleMcpError(event: Trace.PayloadType<typeof McpServerError>) {
|
|
384
|
+
log.warn('MCP server error', event);
|
|
385
|
+
this.#registry.update(this.mcpErrors, (errors) => {
|
|
386
|
+
if (errors.some((existing) => existing.url === event.url && existing.protocol === event.protocol)) {
|
|
387
|
+
return errors;
|
|
388
|
+
}
|
|
389
|
+
return [...errors, event];
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
|
|
289
393
|
/**
|
|
290
394
|
* Move remaining streaming messages to pending (called when agent completes).
|
|
291
395
|
*/
|
|
@@ -299,23 +403,21 @@ export class AiChatProcessor {
|
|
|
299
403
|
}
|
|
300
404
|
|
|
301
405
|
/**
|
|
302
|
-
*
|
|
303
|
-
*
|
|
406
|
+
* Schedule a chat name update as a detached (fire-and-forget) operation.
|
|
407
|
+
* Called automatically on the first message; can also be invoked manually via the toolbar.
|
|
304
408
|
*/
|
|
305
|
-
#
|
|
409
|
+
#updateChatName(prompt?: string): Effect.Effect<void, never, Operation.Service> {
|
|
306
410
|
const chat = this._options.chat?.target;
|
|
307
411
|
if (!chat) {
|
|
308
412
|
return Effect.void;
|
|
309
413
|
}
|
|
310
414
|
|
|
311
|
-
const
|
|
312
|
-
|
|
313
|
-
if (!shouldUpdate) {
|
|
415
|
+
const spaceId = Obj.getDatabase(chat)?.spaceId;
|
|
416
|
+
if (!spaceId) {
|
|
314
417
|
return Effect.void;
|
|
315
418
|
}
|
|
316
419
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
return Operation.schedule(UpdateChatName, { chat });
|
|
420
|
+
log.info('scheduling chat name update');
|
|
421
|
+
return Operation.schedule(AssistantOperation.UpdateChatName, { chat, prompt }, { spaceId });
|
|
320
422
|
}
|
|
321
423
|
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as Effect from 'effect/Effect';
|
|
6
|
+
import * as Layer from 'effect/Layer';
|
|
7
|
+
import { describe, test } from 'vitest';
|
|
8
|
+
|
|
9
|
+
import { Operation, Routine, Trace, Trigger } from '@dxos/compute';
|
|
10
|
+
import { Database, Filter, Obj, Query } from '@dxos/echo';
|
|
11
|
+
import { TestDatabaseLayer } from '@dxos/echo-client/testing';
|
|
12
|
+
import { EffectEx } from '@dxos/effect';
|
|
13
|
+
import { Automation } from '@dxos/plugin-automation';
|
|
14
|
+
|
|
15
|
+
import { dailyDigest } from './daily-digest';
|
|
16
|
+
import { researchBrief } from './research-brief';
|
|
17
|
+
|
|
18
|
+
const dbLayer = TestDatabaseLayer({
|
|
19
|
+
types: [Automation.Automation, Routine.Routine, Trigger.Trigger, Operation.PersistentOperation],
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
const TestLayer = Layer.mergeAll(dbLayer, Trace.writerLayerNoop);
|
|
23
|
+
|
|
24
|
+
const templates = [
|
|
25
|
+
{ template: researchBrief, blueprintCount: 4 },
|
|
26
|
+
{ template: dailyDigest, blueprintCount: 3 },
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
describe('scheduled automation templates', () => {
|
|
30
|
+
test('apply globally (no subject required)', ({ expect }) => {
|
|
31
|
+
// Like Blank, these are offered in the global create dialog — no `appliesTo` gate.
|
|
32
|
+
expect(researchBrief.appliesTo).toBeUndefined();
|
|
33
|
+
expect(dailyDigest.appliesTo).toBeUndefined();
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
for (const { template, blueprintCount } of templates) {
|
|
37
|
+
test(`${template.label} scaffolds a Routine, a disabled timer Trigger, and an Automation`, async ({ expect }) => {
|
|
38
|
+
await Effect.gen(function* () {
|
|
39
|
+
const automation = yield* template.scaffold({});
|
|
40
|
+
yield* Database.add(automation);
|
|
41
|
+
yield* Database.flush();
|
|
42
|
+
|
|
43
|
+
expect(automation.triggers).toHaveLength(1);
|
|
44
|
+
expect(automation.runnable).toBeDefined();
|
|
45
|
+
|
|
46
|
+
const routines = yield* Database.query(Filter.type(Routine.Routine)).run;
|
|
47
|
+
expect(routines).toHaveLength(1);
|
|
48
|
+
expect(routines[0]?.blueprints).toHaveLength(blueprintCount);
|
|
49
|
+
|
|
50
|
+
const triggers = yield* Database.query(Query.select(Filter.type(Trigger.Trigger))).run;
|
|
51
|
+
expect(triggers).toHaveLength(1);
|
|
52
|
+
const trigger = triggers[0];
|
|
53
|
+
expect(trigger?.enabled).toBe(false);
|
|
54
|
+
expect(trigger?.spec?.kind).toBe('timer');
|
|
55
|
+
expect(trigger?.input?.prompt).toBeDefined();
|
|
56
|
+
// The trigger is owned by the automation (cascade-deletes with it); the routine stays independent.
|
|
57
|
+
expect(trigger && Obj.getParent(trigger)?.id).toBe(automation.id);
|
|
58
|
+
expect(routines[0] && Obj.getParent(routines[0])).toBeUndefined();
|
|
59
|
+
|
|
60
|
+
const operations = yield* Database.query(Filter.type(Operation.PersistentOperation)).run;
|
|
61
|
+
expect(operations).toHaveLength(1);
|
|
62
|
+
expect(automation.runnable?.uri).toBe(trigger?.function?.uri);
|
|
63
|
+
}).pipe(Effect.provide(TestLayer), EffectEx.runAndForwardErrors);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
});
|