@dxos/plugin-assistant 0.10.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PLUGIN.mdl +3 -28
- package/dist/lib/AssistantPlugin.mjs +2 -0
- package/dist/lib/AssistantPlugin.node.mjs +55 -0
- package/dist/lib/AssistantPlugin.node.mjs.map +1 -0
- package/dist/lib/AssistantPlugin.workerd.mjs +43 -0
- package/dist/lib/AssistantPlugin.workerd.mjs.map +1 -0
- package/dist/lib/capabilities.mjs +24 -0
- package/dist/lib/capabilities.mjs.map +1 -0
- package/dist/lib/chunk-AgentArticle.mjs +52 -0
- package/dist/lib/chunk-AgentArticle.mjs.map +1 -0
- package/dist/lib/chunk-AgentProperties.mjs +35 -0
- package/dist/lib/chunk-AgentProperties.mjs.map +1 -0
- package/dist/lib/chunk-AssistantPlugin.mjs +88 -0
- package/dist/lib/chunk-AssistantPlugin.mjs.map +1 -0
- package/dist/lib/chunk-AssistantSettings.mjs +285 -0
- package/dist/lib/chunk-AssistantSettings.mjs.map +1 -0
- package/dist/lib/chunk-ChatArticle.mjs +121 -0
- package/dist/lib/chunk-ChatArticle.mjs.map +1 -0
- package/dist/lib/chunk-ChatCompanion.mjs +116 -0
- package/dist/lib/chunk-ChatCompanion.mjs.map +1 -0
- package/dist/lib/chunk-ChatDialog.mjs +73 -0
- package/dist/lib/chunk-ChatDialog.mjs.map +1 -0
- package/dist/lib/chunk-IntegrationPrompt.mjs +73 -0
- package/dist/lib/chunk-IntegrationPrompt.mjs.map +1 -0
- package/dist/lib/chunk-SpaceHomePrompt.mjs +104 -0
- package/dist/lib/chunk-SpaceHomePrompt.mjs.map +1 -0
- package/dist/lib/chunk-SpaceHomeSuggestions.mjs +60 -0
- package/dist/lib/chunk-SpaceHomeSuggestions.mjs.map +1 -0
- package/dist/lib/chunk-TracePanel.mjs +127 -0
- package/dist/lib/chunk-TracePanel.mjs.map +1 -0
- package/dist/lib/chunk-TracePanel2.mjs +7 -0
- package/dist/lib/chunk-TracePanel2.mjs.map +1 -0
- package/dist/lib/chunk-TriggerStatus.mjs +72 -0
- package/dist/lib/chunk-TriggerStatus.mjs.map +1 -0
- package/dist/lib/chunk-agent-hydrator.mjs +22 -0
- package/dist/lib/chunk-agent-hydrator.mjs.map +1 -0
- package/dist/lib/chunk-agent-service.mjs +21 -0
- package/dist/lib/chunk-agent-service.mjs.map +1 -0
- package/dist/lib/{neutral/ai-context-LIKJYMIN.mjs → chunk-ai-context.mjs} +8 -12
- package/dist/lib/chunk-ai-context.mjs.map +1 -0
- package/dist/lib/chunk-ai-service.mjs +27 -0
- package/dist/lib/chunk-ai-service.mjs.map +1 -0
- package/dist/lib/chunk-app-graph-builder.mjs +179 -0
- package/dist/lib/chunk-app-graph-builder.mjs.map +1 -0
- package/dist/lib/chunk-automation-templates.mjs +99 -0
- package/dist/lib/chunk-automation-templates.mjs.map +1 -0
- package/dist/lib/chunk-companion-chat-provisioner.mjs +123 -0
- package/dist/lib/chunk-companion-chat-provisioner.mjs.map +1 -0
- package/dist/lib/chunk-connector.mjs +60 -0
- package/dist/lib/chunk-connector.mjs.map +1 -0
- package/dist/lib/chunk-constants.mjs +9 -0
- package/dist/lib/chunk-constants.mjs.map +1 -0
- package/dist/lib/chunk-context.mjs +7 -0
- package/dist/lib/chunk-context.mjs.map +1 -0
- package/dist/lib/chunk-create-chat.mjs +53 -0
- package/dist/lib/chunk-create-chat.mjs.map +1 -0
- package/dist/lib/chunk-create-object.mjs +70 -0
- package/dist/lib/chunk-create-object.mjs.map +1 -0
- package/dist/lib/chunk-edge-model-resolver.mjs +64 -0
- package/dist/lib/chunk-edge-model-resolver.mjs.map +1 -0
- package/dist/lib/chunk-ensure-companion-chat.mjs +49 -0
- package/dist/lib/chunk-ensure-companion-chat.mjs.map +1 -0
- package/dist/lib/chunk-extensions.mjs +78 -0
- package/dist/lib/chunk-extensions.mjs.map +1 -0
- package/dist/lib/chunk-fork-chat.mjs +83 -0
- package/dist/lib/chunk-fork-chat.mjs.map +1 -0
- package/dist/lib/chunk-generate-home-suggestions.mjs +71 -0
- package/dist/lib/chunk-generate-home-suggestions.mjs.map +1 -0
- package/dist/lib/chunk-local-model-resolver.mjs +25 -0
- package/dist/lib/chunk-local-model-resolver.mjs.map +1 -0
- package/dist/lib/chunk-markdown-extension.mjs +27 -0
- package/dist/lib/chunk-markdown-extension.mjs.map +1 -0
- package/dist/lib/{neutral/chunk-L7AR4VTA.mjs → chunk-meta.mjs} +20 -25
- package/dist/lib/chunk-meta.mjs.map +1 -0
- package/dist/lib/chunk-operation-handler.mjs +13 -0
- package/dist/lib/chunk-operation-handler.mjs.map +1 -0
- package/dist/lib/chunk-paths.mjs +8 -0
- package/dist/lib/chunk-paths.mjs.map +1 -0
- package/dist/lib/chunk-processor.mjs +432 -0
- package/dist/lib/chunk-processor.mjs.map +1 -0
- package/dist/lib/chunk-react-surface.mjs +177 -0
- package/dist/lib/chunk-react-surface.mjs.map +1 -0
- package/dist/lib/chunk-run-prompt-in-new-chat.mjs +96 -0
- package/dist/lib/chunk-run-prompt-in-new-chat.mjs.map +1 -0
- package/dist/lib/chunk-set-current-chat.mjs +43 -0
- package/dist/lib/chunk-set-current-chat.mjs.map +1 -0
- package/dist/lib/chunk-settings.mjs +23 -0
- package/dist/lib/chunk-settings.mjs.map +1 -0
- package/dist/lib/chunk-skill-definition.mjs +42 -0
- package/dist/lib/chunk-skill-definition.mjs.map +1 -0
- package/dist/lib/chunk-skills.mjs +19 -0
- package/dist/lib/chunk-skills.mjs.map +1 -0
- package/dist/lib/chunk-state.mjs +32 -0
- package/dist/lib/chunk-state.mjs.map +1 -0
- package/dist/lib/chunk-toggle-trace-panel-debug.mjs +18 -0
- package/dist/lib/chunk-toggle-trace-panel-debug.mjs.map +1 -0
- package/dist/lib/chunk-toolkit.mjs +12 -0
- package/dist/lib/chunk-toolkit.mjs.map +1 -0
- package/dist/lib/chunk-types.mjs +332 -0
- package/dist/lib/chunk-types.mjs.map +1 -0
- package/dist/lib/chunk-update-chat-name.mjs +63 -0
- package/dist/lib/chunk-update-chat-name.mjs.map +1 -0
- package/dist/lib/components.mjs +2616 -0
- package/dist/lib/components.mjs.map +1 -0
- package/dist/lib/containers.mjs +17 -0
- package/dist/lib/containers.mjs.map +1 -0
- package/dist/lib/execution-graph.mjs +961 -0
- package/dist/lib/execution-graph.mjs.map +1 -0
- package/dist/lib/extensions.mjs +2 -0
- package/dist/lib/hooks.mjs +674 -0
- package/dist/lib/hooks.mjs.map +1 -0
- package/dist/lib/index.mjs +5 -0
- package/dist/lib/meta.mjs +2 -0
- package/dist/lib/operations.mjs +7 -0
- package/dist/lib/operations.mjs.map +1 -0
- package/dist/lib/plugin.mjs +9 -0
- package/dist/lib/plugin.mjs.map +1 -0
- package/dist/lib/plugin.workerd.mjs +2 -0
- package/dist/lib/skills.mjs +2 -0
- package/dist/lib/testing.mjs +2 -0
- package/dist/lib/translations.mjs +207 -0
- package/dist/lib/translations.mjs.map +1 -0
- package/dist/lib/types.mjs +2 -0
- package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
- package/dist/types/src/AssistantPlugin.node.d.ts.map +1 -1
- package/dist/types/src/AssistantPlugin.workerd.d.ts.map +1 -1
- package/dist/types/src/capabilities/AssistantSurfaces.d.ts +22 -0
- package/dist/types/src/capabilities/AssistantSurfaces.d.ts.map +1 -0
- package/dist/types/src/capabilities/agent-hydrator.d.ts +1 -1
- package/dist/types/src/capabilities/agent-service.d.ts +1 -1
- package/dist/types/src/capabilities/agent-service.d.ts.map +1 -1
- package/dist/types/src/capabilities/ai-context.d.ts +1 -1
- package/dist/types/src/capabilities/ai-service.d.ts +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts +12 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/automation-templates.d.ts +1 -1
- package/dist/types/src/capabilities/companion-chat-provisioner.d.ts +1 -1
- package/dist/types/src/capabilities/connector.d.ts +1 -1
- package/dist/types/src/capabilities/create-object.d.ts +1 -1
- 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 +0 -2
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/local-model-resolver.d.ts +1 -1
- package/dist/types/src/capabilities/local-model-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/markdown-extension.d.ts +1 -1
- package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings.d.ts +1 -1
- package/dist/types/src/capabilities/skill-definition.d.ts.map +1 -1
- package/dist/types/src/capabilities/standalone-chats-query.test.d.ts +2 -0
- package/dist/types/src/capabilities/standalone-chats-query.test.d.ts.map +1 -0
- package/dist/types/src/capabilities/state.d.ts +1 -1
- package/dist/types/src/capabilities/toolkit.d.ts +1 -1
- package/dist/types/src/components/AgentProperties/AgentProperties.d.ts +4 -1
- package/dist/types/src/components/AgentProperties/AgentProperties.d.ts.map +1 -1
- package/dist/types/src/components/AgentProperties/AgentProperties.stories.d.ts.map +1 -1
- package/dist/types/src/components/Chat/Chat.d.ts +21 -8
- package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
- package/dist/types/src/components/Chat/{Chat.stories.d.ts → Error.stories.d.ts} +1 -1
- package/dist/types/src/components/Chat/Error.stories.d.ts.map +1 -0
- package/dist/types/src/components/Chat/context.d.ts +8 -0
- package/dist/types/src/components/Chat/context.d.ts.map +1 -1
- package/dist/types/src/components/Chat/events.d.ts +5 -0
- package/dist/types/src/components/Chat/events.d.ts.map +1 -1
- package/dist/types/src/components/Chat/thread.d.ts +42 -0
- package/dist/types/src/components/Chat/thread.d.ts.map +1 -0
- package/dist/types/src/components/Chat/thread.test.d.ts +2 -0
- package/dist/types/src/components/Chat/thread.test.d.ts.map +1 -0
- package/dist/types/src/components/ChatPrompt/ChatActions.d.ts.map +1 -1
- package/dist/types/src/components/ChatPrompt/ChatOptions.stories.d.ts.map +1 -1
- package/dist/types/src/components/ChatPrompt/ChatPrompt.d.ts +5 -3
- package/dist/types/src/components/ChatPrompt/ChatPrompt.d.ts.map +1 -1
- package/dist/types/src/components/ChatPrompt/index.d.ts +0 -1
- package/dist/types/src/components/ChatPrompt/index.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/Anchor.stories.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/ChatThread.d.ts +8 -3
- package/dist/types/src/components/ChatThread/ChatThread.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +30 -2
- package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/Link.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/index.d.ts +1 -0
- package/dist/types/src/components/ChatThread/index.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/registry.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/sync/index.d.ts +3 -0
- package/dist/types/src/components/ChatThread/sync/index.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/{sync.d.ts → sync/sync.d.ts} +46 -2
- package/dist/types/src/components/ChatThread/sync/sync.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/sync/sync.test.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/sync/tool-widget-state.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/sync/tool-widget-state.test.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/widgets/BranchWidget.d.ts +15 -0
- package/dist/types/src/components/ChatThread/widgets/BranchWidget.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/widgets/BranchWidget.stories.d.ts +21 -0
- package/dist/types/src/components/ChatThread/widgets/BranchWidget.stories.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/widgets/BranchWidget.test.d.ts +2 -0
- package/dist/types/src/components/ChatThread/widgets/BranchWidget.test.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/widgets/ReferenceWidget.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/ToolWidget.d.ts +1 -2
- package/dist/types/src/components/ChatThread/widgets/ToolWidget.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/widgets/defaults.d.ts +6 -0
- package/dist/types/src/components/ChatThread/widgets/defaults.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/widgets/format-time.d.ts +2 -0
- package/dist/types/src/components/ChatThread/widgets/format-time.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/widgets/index.d.ts +4 -1
- package/dist/types/src/components/ChatThread/widgets/index.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/widgets/is-tool-message.d.ts +3 -0
- package/dist/types/src/components/ChatThread/widgets/is-tool-message.d.ts.map +1 -0
- package/dist/types/src/components/ConnectorAuthMenu/ConnectorAuthMenu.d.ts +16 -0
- package/dist/types/src/components/ConnectorAuthMenu/ConnectorAuthMenu.d.ts.map +1 -0
- package/dist/types/src/components/ConnectorAuthMenu/ConnectorAuthMenu.stories.d.ts +210 -0
- package/dist/types/src/components/ConnectorAuthMenu/ConnectorAuthMenu.stories.d.ts.map +1 -0
- package/dist/types/src/components/ConnectorAuthMenu/index.d.ts +2 -0
- package/dist/types/src/components/ConnectorAuthMenu/index.d.ts.map +1 -0
- package/dist/types/src/components/ProcessTree/ProcessTree.d.ts +1 -1
- package/dist/types/src/components/ProcessTree/ProcessTree.d.ts.map +1 -1
- package/dist/types/src/components/TaskList/TaskList.d.ts +9 -11
- package/dist/types/src/components/TaskList/TaskList.d.ts.map +1 -1
- package/dist/types/src/components/TaskList/TaskList.stories.d.ts +3 -4
- package/dist/types/src/components/TaskList/TaskList.stories.d.ts.map +1 -1
- package/dist/types/src/components/ToolBlock/ToolBlock.d.ts +1 -2
- package/dist/types/src/components/ToolBlock/ToolBlock.d.ts.map +1 -1
- package/dist/types/src/components/ToolBlock/index.d.ts +1 -0
- package/dist/types/src/components/ToolBlock/index.d.ts.map +1 -1
- package/dist/types/src/components/ToolBlock/is-tool-message.d.ts +3 -0
- package/dist/types/src/components/ToolBlock/is-tool-message.d.ts.map +1 -0
- package/dist/types/src/components/Toolbox/Toolbox.d.ts +1 -1
- package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -0
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/containers/AgentArticle/AgentArticle.d.ts +5 -2
- package/dist/types/src/containers/AgentArticle/AgentArticle.d.ts.map +1 -1
- package/dist/types/src/containers/AgentArticle/AgentArticle.stories.d.ts.map +1 -1
- package/dist/types/src/containers/AgentProperties/AgentProperties.d.ts +4 -1
- package/dist/types/src/containers/AgentProperties/AgentProperties.d.ts.map +1 -1
- package/dist/types/src/containers/AssistantSettings/AssistantSettings.d.ts +4 -1
- package/dist/types/src/containers/AssistantSettings/AssistantSettings.d.ts.map +1 -1
- package/dist/types/src/containers/AssistantSettings/AssistantSettings.stories.d.ts +4 -1
- package/dist/types/src/containers/AssistantSettings/AssistantSettings.stories.d.ts.map +1 -1
- package/dist/types/src/containers/AssistantSettings/OllamaModels.d.ts +4 -6
- package/dist/types/src/containers/AssistantSettings/OllamaModels.d.ts.map +1 -1
- package/dist/types/src/containers/ChatArticle/ChatArticle.d.ts.map +1 -1
- package/dist/types/src/containers/ChatArticle/ChatArticle.stories.d.ts +22 -1
- package/dist/types/src/containers/ChatArticle/ChatArticle.stories.d.ts.map +1 -1
- package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts.map +1 -1
- package/dist/types/src/containers/ChatDialog/ChatDialog.d.ts +4 -1
- package/dist/types/src/containers/ChatDialog/ChatDialog.d.ts.map +1 -1
- package/dist/types/src/containers/IntegrationPrompt/IntegrationPrompt.d.ts +4 -7
- package/dist/types/src/containers/IntegrationPrompt/IntegrationPrompt.d.ts.map +1 -1
- package/dist/types/src/containers/SpaceHomePrompt/SpaceHomePrompt.d.ts +4 -9
- package/dist/types/src/containers/SpaceHomePrompt/SpaceHomePrompt.d.ts.map +1 -1
- package/dist/types/src/containers/SpaceHomeSuggestions/SpaceHomeSuggestions.d.ts +5 -7
- package/dist/types/src/containers/SpaceHomeSuggestions/SpaceHomeSuggestions.d.ts.map +1 -1
- package/dist/types/src/containers/TracePanel/TracePanel.d.ts +1 -1
- package/dist/types/src/containers/TracePanel/TracePanel.d.ts.map +1 -1
- package/dist/types/src/containers/TracePanel/TracePanel.stories.d.ts.map +1 -1
- package/dist/types/src/containers/TriggerStatus/TriggerStatus.d.ts +15 -1
- package/dist/types/src/containers/TriggerStatus/TriggerStatus.d.ts.map +1 -1
- package/dist/types/src/containers/index.d.ts +0 -1
- package/dist/types/src/containers/index.d.ts.map +1 -1
- package/dist/types/src/execution-graph/execution-graph.d.ts +12 -1
- package/dist/types/src/execution-graph/execution-graph.d.ts.map +1 -1
- package/dist/types/src/execution-graph/index.d.ts +1 -1
- package/dist/types/src/execution-graph/index.d.ts.map +1 -1
- package/dist/types/src/execution-graph/pending-block-status.d.ts.map +1 -1
- package/dist/types/src/execution-graph/span-tree.d.ts +17 -0
- package/dist/types/src/execution-graph/span-tree.d.ts.map +1 -1
- package/dist/types/src/feed-logger.d.ts +1 -1
- package/dist/types/src/feed-logger.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +1 -1
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
- package/dist/types/src/hooks/useChatToolbarActions.d.ts.map +1 -1
- package/dist/types/src/hooks/useContextObjects.d.ts +1 -1
- package/dist/types/src/hooks/useContextObjects.d.ts.map +1 -1
- package/dist/types/src/hooks/useSelectionContext.d.ts +13 -0
- package/dist/types/src/hooks/useSelectionContext.d.ts.map +1 -0
- package/dist/types/src/hooks/useSelectionContext.test.d.ts +2 -0
- package/dist/types/src/hooks/useSelectionContext.test.d.ts.map +1 -0
- package/dist/types/src/hooks/useTraceMessages.d.ts.map +1 -1
- package/dist/types/src/operations/index.d.ts.map +1 -1
- package/dist/types/src/processor/index.d.ts +1 -0
- package/dist/types/src/processor/index.d.ts.map +1 -1
- package/dist/types/src/processor/processor.d.ts +5 -2
- package/dist/types/src/processor/processor.d.ts.map +1 -1
- package/dist/types/src/processor/prompt.d.ts +18 -0
- package/dist/types/src/processor/prompt.d.ts.map +1 -0
- package/dist/types/src/processor/prompt.test.d.ts +2 -0
- package/dist/types/src/processor/prompt.test.d.ts.map +1 -0
- package/dist/types/src/processor/streaming.node.test.d.ts +2 -0
- package/dist/types/src/processor/streaming.node.test.d.ts.map +1 -0
- package/dist/types/src/skills/assistant/skill.d.ts.map +1 -1
- package/dist/types/src/templates/scaffold.d.ts +1 -1
- package/dist/types/src/templates/scaffold.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/AssistantCapabilities.d.ts +1 -1
- package/dist/types/src/types/AssistantCapabilities.d.ts.map +1 -1
- package/dist/types/src/types/AssistantOperation.d.ts +2 -13
- package/dist/types/src/types/AssistantOperation.d.ts.map +1 -1
- package/dist/types/src/types/ChatSurface.d.ts +2 -2
- package/dist/types/src/types/ChatSurface.d.ts.map +1 -1
- package/dist/types/src/types/Ollama.d.ts +1 -1
- package/dist/types/src/types/Ollama.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dx.config.ts +1 -0
- package/package.json +106 -105
- package/src/AssistantPlugin.node.ts +1 -2
- package/src/AssistantPlugin.test.ts +60 -62
- package/src/AssistantPlugin.ts +1 -10
- package/src/AssistantPlugin.workerd.ts +1 -2
- package/src/capabilities/AssistantSurfaces.tsx +86 -0
- package/src/capabilities/agent-service.ts +1 -1
- package/src/capabilities/app-graph-builder.ts +31 -17
- package/src/capabilities/companion-chat-provisioner.ts +12 -11
- package/src/capabilities/connector.ts +3 -3
- package/src/capabilities/edge-model-resolver.ts +5 -2
- package/src/capabilities/index.ts +0 -2
- package/src/capabilities/react-surface.ts +135 -0
- package/src/capabilities/skill-definition.ts +4 -0
- package/src/capabilities/standalone-chats-query.test.ts +51 -0
- package/src/capabilities/state.ts +1 -1
- package/src/components/AgentProperties/AgentProperties.stories.tsx +6 -7
- package/src/components/AgentProperties/AgentProperties.tsx +37 -30
- package/src/components/Chat/Chat.tsx +275 -59
- package/src/components/Chat/{Chat.stories.tsx → Error.stories.tsx} +1 -1
- package/src/components/Chat/context.ts +8 -0
- package/src/components/Chat/events.ts +5 -0
- package/src/components/Chat/thread.test.ts +127 -0
- package/src/components/Chat/thread.ts +87 -0
- package/src/components/ChatPrompt/ChatActions.tsx +8 -8
- package/src/components/ChatPrompt/ChatMcpErrors.tsx +2 -2
- package/src/components/ChatPrompt/ChatOptions.stories.tsx +2 -1
- package/src/components/ChatPrompt/ChatOptions.tsx +5 -5
- package/src/components/ChatPrompt/ChatPrompt.tsx +33 -6
- package/src/components/ChatPrompt/index.ts +0 -1
- package/src/components/ChatThread/Anchor.stories.tsx +2 -1
- package/src/components/ChatThread/ChatThread.stories.tsx +99 -4
- package/src/components/ChatThread/ChatThread.tsx +34 -6
- package/src/components/ChatThread/Link.tsx +1 -0
- package/src/components/ChatThread/index.ts +2 -0
- package/src/components/ChatThread/registry.tsx +28 -4
- package/src/components/ChatThread/sync/index.ts +6 -0
- package/src/components/ChatThread/{sync.test.ts → sync/sync.test.ts} +167 -7
- package/src/components/ChatThread/{sync.ts → sync/sync.ts} +97 -3
- package/src/components/ChatThread/{tool-widget-state.ts → sync/tool-widget-state.ts} +1 -3
- package/src/components/ChatThread/widgets/BranchWidget.stories.tsx +83 -0
- package/src/components/ChatThread/widgets/BranchWidget.test.ts +55 -0
- package/src/components/ChatThread/widgets/BranchWidget.tsx +61 -0
- package/src/components/ChatThread/widgets/FallbackWidget.tsx +2 -2
- package/src/components/ChatThread/widgets/ReasoningWidget.ts +1 -1
- package/src/components/ChatThread/widgets/ReferenceWidget.ts +1 -6
- package/src/components/ChatThread/widgets/SuggestionWidget.ts +12 -3
- package/src/components/ChatThread/widgets/SummaryWidget.tsx +1 -1
- package/src/components/ChatThread/widgets/ToolWidget.tsx +15 -9
- package/src/components/ChatThread/widgets/defaults.ts +7 -1
- package/src/components/ChatThread/widgets/format-time.ts +45 -0
- package/src/components/ChatThread/widgets/index.ts +4 -1
- package/src/components/ChatThread/widgets/is-tool-message.ts +13 -0
- package/src/components/ConnectorAuthMenu/ConnectorAuthMenu.stories.tsx +177 -0
- package/src/components/ConnectorAuthMenu/ConnectorAuthMenu.tsx +82 -0
- package/src/components/ConnectorAuthMenu/index.ts +5 -0
- package/src/components/ProcessTree/ProcessTree.stories.tsx +1 -1
- package/src/components/TaskList/TaskList.stories.tsx +19 -26
- package/src/components/TaskList/TaskList.tsx +32 -104
- package/src/components/ToolBlock/ToolBlock.tsx +1 -5
- package/src/components/ToolBlock/index.ts +1 -0
- package/src/components/ToolBlock/is-tool-message.ts +13 -0
- package/src/components/Toolbox/Toolbox.tsx +1 -1
- package/src/components/index.ts +1 -0
- package/src/containers/AgentArticle/AgentArticle.stories.tsx +18 -11
- package/src/containers/AgentArticle/AgentArticle.tsx +27 -151
- package/src/containers/AgentProperties/AgentProperties.tsx +21 -17
- package/src/containers/AssistantSettings/AssistantSettings.tsx +2 -0
- package/src/containers/AssistantSettings/OllamaModels.tsx +6 -4
- package/src/containers/ChatArticle/ChatArticle.stories.tsx +200 -27
- package/src/containers/ChatArticle/ChatArticle.tsx +25 -5
- package/src/containers/ChatCompanion/ChatCompanion.tsx +45 -10
- package/src/containers/ChatDialog/ChatDialog.tsx +4 -1
- package/src/containers/IntegrationPrompt/IntegrationPrompt.tsx +9 -6
- package/src/containers/SpaceHomePrompt/SpaceHomePrompt.tsx +2 -0
- package/src/containers/SpaceHomeSuggestions/SpaceHomeSuggestions.tsx +40 -39
- package/src/containers/TracePanel/TracePanel.stories.tsx +9 -4
- package/src/containers/TracePanel/TracePanel.tsx +22 -6
- package/src/containers/TriggerStatus/TriggerStatus.tsx +9 -16
- package/src/containers/index.ts +0 -1
- package/src/execution-graph/SPEC.md +60 -2
- package/src/execution-graph/execution-graph.ts +15 -2
- package/src/execution-graph/index.ts +1 -0
- package/src/execution-graph/pending-block-status.ts +3 -2
- package/src/execution-graph/span-tree.test.ts +87 -1
- package/src/execution-graph/span-tree.ts +95 -0
- package/src/feed-logger.ts +6 -6
- package/src/hooks/index.ts +1 -1
- package/src/hooks/useChatProcessor.ts +2 -1
- package/src/hooks/useChatToolbarActions.ts +22 -19
- package/src/hooks/useContextObjects.ts +9 -3
- package/src/hooks/useSelectionContext.test.ts +93 -0
- package/src/hooks/useSelectionContext.ts +72 -0
- package/src/hooks/useSkillRegistry.ts +1 -1
- package/src/hooks/useTraceMessages.ts +5 -3
- package/src/operations/create-chat.ts +2 -2
- package/src/operations/fork-chat.ts +2 -2
- package/src/operations/generate-home-suggestions.test.ts +2 -2
- package/src/operations/index.ts +0 -1
- package/src/operations/prompt.node.test.ts +1 -1
- package/src/paths.ts +3 -3
- package/src/processor/index.ts +1 -0
- package/src/processor/processor.node.test.ts +1 -1
- package/src/processor/processor.ts +33 -5
- package/src/processor/prompt.test.ts +37 -0
- package/src/processor/prompt.ts +42 -0
- package/src/processor/streaming.node.test.ts +196 -0
- package/src/skills/assistant/skill.node.test.ts +2 -2
- package/src/skills/assistant/skill.ts +3 -5
- package/src/templates/routine-templates.test.ts +1 -2
- package/src/templates/scaffold.ts +3 -3
- package/src/testing/data/trace-timeline-multiple.dx.json +1 -1
- package/src/testing/data/trace-timeline-remote.dx.json +1 -1
- package/src/testing/data/trace-timeline.dx.json +1 -2
- package/src/testing/trace-timeline.node.test.ts +3 -3
- package/src/translations.ts +11 -10
- package/src/types/AssistantCapabilities.ts +1 -1
- package/src/types/AssistantOperation.ts +8 -31
- package/src/types/ChatSurface.ts +3 -3
- package/src/types/Ollama.ts +1 -1
- package/dist/lib/neutral/AgentArticle-GV6EEW3I.mjs +0 -161
- package/dist/lib/neutral/AgentArticle-GV6EEW3I.mjs.map +0 -7
- package/dist/lib/neutral/AgentProperties-LFTEYJ54.mjs +0 -40
- package/dist/lib/neutral/AgentProperties-LFTEYJ54.mjs.map +0 -7
- package/dist/lib/neutral/AssistantPlugin.mjs +0 -10
- package/dist/lib/neutral/AssistantPlugin.mjs.map +0 -7
- package/dist/lib/neutral/AssistantPlugin.node.mjs +0 -72
- package/dist/lib/neutral/AssistantPlugin.node.mjs.map +0 -7
- package/dist/lib/neutral/AssistantPlugin.workerd.mjs +0 -13
- package/dist/lib/neutral/AssistantPlugin.workerd.mjs.map +0 -7
- package/dist/lib/neutral/AssistantSettings-3N5M5VCN.mjs +0 -302
- package/dist/lib/neutral/AssistantSettings-3N5M5VCN.mjs.map +0 -7
- package/dist/lib/neutral/ChatArticle-OO7GGEFW.mjs +0 -8
- package/dist/lib/neutral/ChatArticle-OO7GGEFW.mjs.map +0 -7
- package/dist/lib/neutral/ChatCompanion-GIFJRY6I.mjs +0 -128
- package/dist/lib/neutral/ChatCompanion-GIFJRY6I.mjs.map +0 -7
- package/dist/lib/neutral/ChatDialog-5MXN4MXS.mjs +0 -74
- package/dist/lib/neutral/ChatDialog-5MXN4MXS.mjs.map +0 -7
- package/dist/lib/neutral/IntegrationPrompt-2HJQFYJE.mjs +0 -72
- package/dist/lib/neutral/IntegrationPrompt-2HJQFYJE.mjs.map +0 -7
- package/dist/lib/neutral/PlanArticle-VPK2IYWU.mjs +0 -34
- package/dist/lib/neutral/PlanArticle-VPK2IYWU.mjs.map +0 -7
- package/dist/lib/neutral/SpaceHomePrompt-ISAB76LD.mjs +0 -114
- package/dist/lib/neutral/SpaceHomePrompt-ISAB76LD.mjs.map +0 -7
- package/dist/lib/neutral/SpaceHomeSuggestions-IDH77QQR.mjs +0 -63
- package/dist/lib/neutral/SpaceHomeSuggestions-IDH77QQR.mjs.map +0 -7
- package/dist/lib/neutral/TracePanel-JKNWADJ4.mjs +0 -12
- package/dist/lib/neutral/TracePanel-JKNWADJ4.mjs.map +0 -7
- package/dist/lib/neutral/TriggerStatus-FURRBHYA.mjs +0 -95
- package/dist/lib/neutral/TriggerStatus-FURRBHYA.mjs.map +0 -7
- package/dist/lib/neutral/agent-hydrator-OBO3RHLO.mjs +0 -23
- package/dist/lib/neutral/agent-hydrator-OBO3RHLO.mjs.map +0 -7
- package/dist/lib/neutral/agent-service-XFJ4VQMT.mjs +0 -32
- package/dist/lib/neutral/agent-service-XFJ4VQMT.mjs.map +0 -7
- package/dist/lib/neutral/ai-context-LIKJYMIN.mjs.map +0 -7
- package/dist/lib/neutral/ai-service-DM6YXWUC.mjs +0 -44
- package/dist/lib/neutral/ai-service-DM6YXWUC.mjs.map +0 -7
- package/dist/lib/neutral/app-graph-builder-OPVOEQY7.mjs +0 -249
- package/dist/lib/neutral/app-graph-builder-OPVOEQY7.mjs.map +0 -7
- package/dist/lib/neutral/automation-templates-MADJLXGJ.mjs +0 -97
- package/dist/lib/neutral/automation-templates-MADJLXGJ.mjs.map +0 -7
- package/dist/lib/neutral/capabilities/index.mjs +0 -47
- package/dist/lib/neutral/capabilities/index.mjs.map +0 -7
- package/dist/lib/neutral/chunk-5IHQ52KJ.mjs +0 -9
- package/dist/lib/neutral/chunk-5IHQ52KJ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-6Q4OBGIK.mjs +0 -420
- package/dist/lib/neutral/chunk-6Q4OBGIK.mjs.map +0 -7
- package/dist/lib/neutral/chunk-BXI2R4OO.mjs +0 -410
- package/dist/lib/neutral/chunk-BXI2R4OO.mjs.map +0 -7
- package/dist/lib/neutral/chunk-CMPLPDYE.mjs +0 -30
- package/dist/lib/neutral/chunk-CMPLPDYE.mjs.map +0 -7
- package/dist/lib/neutral/chunk-GPHT3HYS.mjs +0 -8
- package/dist/lib/neutral/chunk-GPHT3HYS.mjs.map +0 -7
- package/dist/lib/neutral/chunk-HKLSFB5I.mjs +0 -90
- package/dist/lib/neutral/chunk-HKLSFB5I.mjs.map +0 -7
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs +0 -10
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +0 -7
- package/dist/lib/neutral/chunk-L7AR4VTA.mjs.map +0 -7
- package/dist/lib/neutral/chunk-LS72HWMM.mjs +0 -42
- package/dist/lib/neutral/chunk-LS72HWMM.mjs.map +0 -7
- package/dist/lib/neutral/chunk-OZWZGIV2.mjs +0 -12
- package/dist/lib/neutral/chunk-OZWZGIV2.mjs.map +0 -7
- package/dist/lib/neutral/chunk-QOKLFHUS.mjs +0 -13
- package/dist/lib/neutral/chunk-QOKLFHUS.mjs.map +0 -7
- package/dist/lib/neutral/chunk-SCTHQVIJ.mjs +0 -155
- package/dist/lib/neutral/chunk-SCTHQVIJ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-U4LTLBAX.mjs +0 -56
- package/dist/lib/neutral/chunk-U4LTLBAX.mjs.map +0 -7
- package/dist/lib/neutral/chunk-UPKFUZ6V.mjs +0 -115
- package/dist/lib/neutral/chunk-UPKFUZ6V.mjs.map +0 -7
- package/dist/lib/neutral/chunk-V2Y4XE3O.mjs +0 -12
- package/dist/lib/neutral/chunk-V2Y4XE3O.mjs.map +0 -7
- package/dist/lib/neutral/chunk-VTK5R4H3.mjs +0 -9
- package/dist/lib/neutral/chunk-VTK5R4H3.mjs.map +0 -7
- package/dist/lib/neutral/chunk-XVGEJWJX.mjs +0 -133
- package/dist/lib/neutral/chunk-XVGEJWJX.mjs.map +0 -7
- package/dist/lib/neutral/companion-chat-provisioner-IQV5VIVE.mjs +0 -126
- package/dist/lib/neutral/companion-chat-provisioner-IQV5VIVE.mjs.map +0 -7
- package/dist/lib/neutral/components/index.mjs +0 -2527
- package/dist/lib/neutral/components/index.mjs.map +0 -7
- package/dist/lib/neutral/connector-ITLLTBPZ.mjs +0 -70
- package/dist/lib/neutral/connector-ITLLTBPZ.mjs.map +0 -7
- package/dist/lib/neutral/containers/index.mjs +0 -31
- package/dist/lib/neutral/containers/index.mjs.map +0 -7
- package/dist/lib/neutral/create-chat-YGVZZYGP.mjs +0 -56
- package/dist/lib/neutral/create-chat-YGVZZYGP.mjs.map +0 -7
- package/dist/lib/neutral/create-object-5PAEJ6KM.mjs +0 -76
- package/dist/lib/neutral/create-object-5PAEJ6KM.mjs.map +0 -7
- package/dist/lib/neutral/edge-model-resolver-WDJWDZTT.mjs +0 -55
- package/dist/lib/neutral/edge-model-resolver-WDJWDZTT.mjs.map +0 -7
- package/dist/lib/neutral/ensure-companion-chat-AMOF3C66.mjs +0 -58
- package/dist/lib/neutral/ensure-companion-chat-AMOF3C66.mjs.map +0 -7
- package/dist/lib/neutral/execution-graph/index.mjs +0 -977
- package/dist/lib/neutral/execution-graph/index.mjs.map +0 -7
- package/dist/lib/neutral/extensions/index.mjs +0 -8
- package/dist/lib/neutral/extensions/index.mjs.map +0 -7
- package/dist/lib/neutral/fork-chat-RMAAYYQF.mjs +0 -92
- package/dist/lib/neutral/fork-chat-RMAAYYQF.mjs.map +0 -7
- package/dist/lib/neutral/generate-home-suggestions-6MM2XWPV.mjs +0 -93
- package/dist/lib/neutral/generate-home-suggestions-6MM2XWPV.mjs.map +0 -7
- package/dist/lib/neutral/hooks/index.mjs +0 -877
- package/dist/lib/neutral/hooks/index.mjs.map +0 -7
- package/dist/lib/neutral/index.mjs +0 -42
- package/dist/lib/neutral/index.mjs.map +0 -7
- package/dist/lib/neutral/local-model-resolver-I2BENFFS.mjs +0 -24
- package/dist/lib/neutral/local-model-resolver-I2BENFFS.mjs.map +0 -7
- package/dist/lib/neutral/markdown-extension-R4TKDTIF.mjs +0 -41
- package/dist/lib/neutral/markdown-extension-R4TKDTIF.mjs.map +0 -7
- package/dist/lib/neutral/meta.json +0 -1
- package/dist/lib/neutral/meta.mjs +0 -12
- package/dist/lib/neutral/meta.mjs.map +0 -7
- package/dist/lib/neutral/migrations-7DEMVBOG.mjs +0 -28
- package/dist/lib/neutral/migrations-7DEMVBOG.mjs.map +0 -7
- package/dist/lib/neutral/navigation-resolver-PYGP2DAW.mjs +0 -18
- package/dist/lib/neutral/navigation-resolver-PYGP2DAW.mjs.map +0 -7
- package/dist/lib/neutral/operation-handler-2LEN45GP.mjs +0 -8
- package/dist/lib/neutral/operation-handler-2LEN45GP.mjs.map +0 -7
- package/dist/lib/neutral/operations/index.mjs +0 -8
- package/dist/lib/neutral/operations/index.mjs.map +0 -7
- package/dist/lib/neutral/plugin.mjs +0 -16
- package/dist/lib/neutral/plugin.mjs.map +0 -7
- package/dist/lib/neutral/plugin.workerd.mjs +0 -13
- package/dist/lib/neutral/plugin.workerd.mjs.map +0 -7
- package/dist/lib/neutral/react-surface-HEJEK44F.mjs +0 -171
- package/dist/lib/neutral/react-surface-HEJEK44F.mjs.map +0 -7
- package/dist/lib/neutral/resolve-navigation-targets-PBQ3OLUE.mjs +0 -28
- package/dist/lib/neutral/resolve-navigation-targets-PBQ3OLUE.mjs.map +0 -7
- package/dist/lib/neutral/run-prompt-in-new-chat-RNUJE2FM.mjs +0 -102
- package/dist/lib/neutral/run-prompt-in-new-chat-RNUJE2FM.mjs.map +0 -7
- package/dist/lib/neutral/set-current-chat-VWBPSIMZ.mjs +0 -48
- package/dist/lib/neutral/set-current-chat-VWBPSIMZ.mjs.map +0 -7
- package/dist/lib/neutral/settings-7Q3RITIT.mjs +0 -28
- package/dist/lib/neutral/settings-7Q3RITIT.mjs.map +0 -7
- package/dist/lib/neutral/skill-definition-553MQRTR.mjs +0 -8
- package/dist/lib/neutral/skill-definition-553MQRTR.mjs.map +0 -7
- package/dist/lib/neutral/skills/index.mjs +0 -8
- package/dist/lib/neutral/skills/index.mjs.map +0 -7
- package/dist/lib/neutral/state-4LGAKSSD.mjs +0 -34
- package/dist/lib/neutral/state-4LGAKSSD.mjs.map +0 -7
- package/dist/lib/neutral/testing.mjs +0 -8
- package/dist/lib/neutral/testing.mjs.map +0 -7
- package/dist/lib/neutral/toggle-trace-panel-debug-JGTB6KVJ.mjs +0 -21
- package/dist/lib/neutral/toggle-trace-panel-debug-JGTB6KVJ.mjs.map +0 -7
- package/dist/lib/neutral/toolkit-ETWLG5NT.mjs +0 -8
- package/dist/lib/neutral/toolkit-ETWLG5NT.mjs.map +0 -7
- package/dist/lib/neutral/translations.mjs +0 -217
- package/dist/lib/neutral/translations.mjs.map +0 -7
- package/dist/lib/neutral/types/index.mjs +0 -24
- package/dist/lib/neutral/types/index.mjs.map +0 -7
- package/dist/lib/neutral/update-chat-name-IJJELRR6.mjs +0 -61
- package/dist/lib/neutral/update-chat-name-IJJELRR6.mjs.map +0 -7
- package/dist/types/src/capabilities/migrations.d.ts +0 -5
- package/dist/types/src/capabilities/migrations.d.ts.map +0 -1
- package/dist/types/src/capabilities/navigation-resolver.d.ts +0 -5
- package/dist/types/src/capabilities/navigation-resolver.d.ts.map +0 -1
- package/dist/types/src/components/Chat/Chat.stories.d.ts.map +0 -1
- package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts +0 -10
- package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts.map +0 -1
- package/dist/types/src/components/ChatThread/sync.d.ts.map +0 -1
- package/dist/types/src/components/ChatThread/sync.test.d.ts.map +0 -1
- package/dist/types/src/components/ChatThread/tool-widget-state.d.ts.map +0 -1
- package/dist/types/src/components/ChatThread/tool-widget-state.test.d.ts.map +0 -1
- package/dist/types/src/containers/PlanArticle/PlanArticle.d.ts +0 -6
- package/dist/types/src/containers/PlanArticle/PlanArticle.d.ts.map +0 -1
- package/dist/types/src/containers/PlanArticle/index.d.ts +0 -2
- package/dist/types/src/containers/PlanArticle/index.d.ts.map +0 -1
- package/dist/types/src/hooks/useFlush.d.ts +0 -6
- package/dist/types/src/hooks/useFlush.d.ts.map +0 -1
- package/dist/types/src/operations/resolve-navigation-targets.d.ts +0 -5
- package/dist/types/src/operations/resolve-navigation-targets.d.ts.map +0 -1
- package/src/AssistantPlugin.conversations.json +0 -1
- package/src/capabilities/migrations.ts +0 -28
- package/src/capabilities/navigation-resolver.ts +0 -20
- package/src/capabilities/react-surface.tsx +0 -177
- package/src/components/ChatPrompt/ChatStatusIndicator.tsx +0 -42
- package/src/components/ChatThread/DEBUG.md +0 -64
- package/src/containers/PlanArticle/PlanArticle.tsx +0 -37
- package/src/containers/PlanArticle/index.ts +0 -5
- package/src/hooks/useFlush.ts +0 -35
- package/src/operations/resolve-navigation-targets.ts +0 -44
- /package/dist/types/src/components/ChatThread/{sync.test.d.ts → sync/sync.test.d.ts} +0 -0
- /package/dist/types/src/components/ChatThread/{tool-widget-state.d.ts → sync/tool-widget-state.d.ts} +0 -0
- /package/dist/types/src/components/ChatThread/{tool-widget-state.test.d.ts → sync/tool-widget-state.test.d.ts} +0 -0
- /package/src/components/ChatThread/{tool-widget-state.test.ts → sync/tool-widget-state.test.ts} +0 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { AppCapabilities } from "@dxos/app-toolkit";
|
|
2
|
+
import { Capability } from "@dxos/app-framework";
|
|
3
|
+
import * as Effect from "effect/Effect";
|
|
4
|
+
import * as Layer from "effect/Layer";
|
|
5
|
+
import { LMStudioResolver, OllamaResolver } from "@dxos/ai/resolvers";
|
|
6
|
+
import * as OpenAiClient from "@effect/ai-openai/OpenAiClient";
|
|
7
|
+
import * as FetchHttpClient from "@effect/platform/FetchHttpClient";
|
|
8
|
+
import * as HttpClient from "@effect/platform/HttpClient";
|
|
9
|
+
//#region src/capabilities/local-model-resolver.ts
|
|
10
|
+
/**
|
|
11
|
+
* To start LM Studio server:
|
|
12
|
+
* ```bash
|
|
13
|
+
* ~/.lmstudio/bin/lms server start --cors
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* To start Ollama server:
|
|
17
|
+
* ```bash
|
|
18
|
+
* OLLAMA_ORIGINS="*" ollama serve
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
var localModelResolver = Capability.makeModule(() => Effect.succeed([Capability.contributes(AppCapabilities.AiModelResolver, LMStudioResolver.make().pipe(Layer.provide(OpenAiClient.layer({ apiUrl: LMStudioResolver.DEFAULT_LMSTUDIO_ENDPOINT })), Layer.provide(FetchHttpClient.layer))), Capability.contributes(AppCapabilities.AiModelResolver, OllamaResolver.make({ transformClient: HttpClient.withTracerPropagation(false) }).pipe(Layer.provide(FetchHttpClient.layer)))]));
|
|
22
|
+
//#endregion
|
|
23
|
+
export { localModelResolver as default };
|
|
24
|
+
|
|
25
|
+
//# sourceMappingURL=chunk-local-model-resolver.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-local-model-resolver.mjs","names":[],"sources":["../../src/capabilities/local-model-resolver.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as OpenAiClient from '@effect/ai-openai/OpenAiClient';\nimport * as FetchHttpClient from '@effect/platform/FetchHttpClient';\nimport * as HttpClient from '@effect/platform/HttpClient';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\n\nimport { LMStudioResolver, OllamaResolver } from '@dxos/ai/resolvers';\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\n\n/**\n * To start LM Studio server:\n * ```bash\n * ~/.lmstudio/bin/lms server start --cors\n * ```\n *\n * To start Ollama server:\n * ```bash\n * OLLAMA_ORIGINS=\"*\" ollama serve\n * ```\n */\nconst localModelResolver = Capability.makeModule<[]>(() =>\n Effect.succeed([\n Capability.contributes(\n AppCapabilities.AiModelResolver,\n LMStudioResolver.make().pipe(\n Layer.provide(\n OpenAiClient.layer({\n apiUrl: LMStudioResolver.DEFAULT_LMSTUDIO_ENDPOINT,\n }),\n ),\n Layer.provide(FetchHttpClient.layer),\n ),\n ),\n Capability.contributes(\n AppCapabilities.AiModelResolver,\n OllamaResolver.make({\n transformClient: HttpClient.withTracerPropagation(false),\n }).pipe(Layer.provide(FetchHttpClient.layer)),\n ),\n ]),\n);\n\nexport default localModelResolver;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAyBA,IAAM,qBAAqB,WAAW,iBACpC,OAAO,QAAQ,CACb,WAAW,YACT,gBAAgB,iBAChB,iBAAiB,KAAK,CAAC,CAAC,KACtB,MAAM,QACJ,aAAa,MAAM,EACjB,QAAQ,iBAAiB,0BAC3B,CAAC,CACH,GACA,MAAM,QAAQ,gBAAgB,KAAK,CACrC,CACF,GACA,WAAW,YACT,gBAAgB,iBAChB,eAAe,KAAK,EAClB,iBAAiB,WAAW,sBAAsB,KAAK,EACzD,CAAC,CAAC,CAAC,KAAK,MAAM,QAAQ,gBAAgB,KAAK,CAAC,CAC9C,CACF,CAAC,CACH"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { t as promptRunExtension } from "./chunk-extensions.mjs";
|
|
2
|
+
import { Capabilities, Capability } from "@dxos/app-framework";
|
|
3
|
+
import { Obj } from "@dxos/echo";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
import { MarkdownCapabilities } from "@dxos/plugin-markdown/types";
|
|
6
|
+
import { RoutineOperation } from "@dxos/plugin-routine/types";
|
|
7
|
+
//#region src/capabilities/markdown-extension.ts
|
|
8
|
+
var markdown_extension_default = Capability.makeModule(Effect.fnUntraced(function* () {
|
|
9
|
+
const capabilities = yield* Capability.Service;
|
|
10
|
+
return Capability.contributes(MarkdownCapabilities.ExtensionProvider, [({ document: doc, viewMode }) => {
|
|
11
|
+
if (viewMode === "source") return;
|
|
12
|
+
if (!doc) return;
|
|
13
|
+
const db = Obj.getDatabase(doc);
|
|
14
|
+
if (!db) return;
|
|
15
|
+
const { invokePromise } = capabilities.get(Capabilities.OperationInvoker);
|
|
16
|
+
return promptRunExtension({ onRun: (promptText) => {
|
|
17
|
+
invokePromise(RoutineOperation.RunPromptInNewChat, {
|
|
18
|
+
db,
|
|
19
|
+
instructions: promptText
|
|
20
|
+
});
|
|
21
|
+
} });
|
|
22
|
+
}]);
|
|
23
|
+
}));
|
|
24
|
+
//#endregion
|
|
25
|
+
export { markdown_extension_default as default };
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=chunk-markdown-extension.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-markdown-extension.mjs","names":[],"sources":["../../src/capabilities/markdown-extension.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { Obj } from '@dxos/echo';\nimport { MarkdownCapabilities } from '@dxos/plugin-markdown/types';\nimport { RoutineOperation } from '@dxos/plugin-routine/types';\n\nimport { promptRunExtension } from '../extensions';\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const capabilities = yield* Capability.Service;\n\n return Capability.contributes(MarkdownCapabilities.ExtensionProvider, [\n ({ document: doc, viewMode }) => {\n if (viewMode === 'source') {\n return undefined;\n }\n\n if (!doc) {\n return undefined;\n }\n\n const db = Obj.getDatabase(doc);\n if (!db) {\n return undefined;\n }\n\n const { invokePromise } = capabilities.get(Capabilities.OperationInvoker);\n\n return promptRunExtension({\n onRun: (promptText) => {\n void invokePromise(RoutineOperation.RunPromptInNewChat, { db, instructions: promptText });\n },\n });\n },\n ]);\n }),\n);\n"],"mappings":";;;;;;;AAaA,IAAA,6BAAe,WAAW,WACxB,OAAO,WAAW,aAAa;CAC7B,MAAM,eAAe,OAAO,WAAW;CAEvC,OAAO,WAAW,YAAY,qBAAqB,mBAAmB,EACnE,EAAE,UAAU,KAAK,eAAe;EAC/B,IAAI,aAAa,UACf;EAGF,IAAI,CAAC,KACH;EAGF,MAAM,KAAK,IAAI,YAAY,GAAG;EAC9B,IAAI,CAAC,IACH;EAGF,MAAM,EAAE,kBAAkB,aAAa,IAAI,aAAa,gBAAgB;EAExE,OAAO,mBAAmB,EACxB,QAAQ,eAAe;GACrB,cAAmB,iBAAiB,oBAAoB;IAAE;IAAI,cAAc;GAAW,CAAC;EAC1F,EACF,CAAC;CACH,CACF,CAAC;AACH,CAAC,CACH"}
|
|
@@ -1,16 +1,13 @@
|
|
|
1
|
-
// src/meta.ts
|
|
2
1
|
import { Plugin } from "@dxos/app-framework";
|
|
3
2
|
import { DXN } from "@dxos/keys";
|
|
4
|
-
|
|
5
|
-
// dx.config.ts
|
|
6
3
|
import { Config2 } from "@dxos/app-framework/config";
|
|
7
4
|
import { trim } from "@dxos/util";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
5
|
+
//#region dx.config.ts
|
|
6
|
+
var dx_config_default = Config2.make({ plugin: {
|
|
7
|
+
key: "org.dxos.plugin.assistant",
|
|
8
|
+
name: "Assistant",
|
|
9
|
+
author: "DXOS",
|
|
10
|
+
description: trim`
|
|
14
11
|
AssistantPlugin brings a conversational AI assistant into DXOS Composer, letting users chat naturally
|
|
15
12
|
with objects in their spaces. Every Chat is a first-class ECHO object — messages are persisted,
|
|
16
13
|
replicated across peers in real time, and can be bound to any document or collection as a companion
|
|
@@ -31,23 +28,21 @@ var dx_config_default = Config2.make({
|
|
|
31
28
|
TracePanel visualises that trace as a commit graph or raw JSON, giving developers full observability
|
|
32
29
|
into what the model did and why.
|
|
33
30
|
`,
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
|
|
31
|
+
icon: {
|
|
32
|
+
key: "ph--sparkle--regular",
|
|
33
|
+
hue: "sky"
|
|
34
|
+
},
|
|
35
|
+
source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-assistant",
|
|
36
|
+
spec: "PLUGIN.mdl",
|
|
37
|
+
tags: ["alpha"]
|
|
38
|
+
} });
|
|
39
|
+
//#endregion
|
|
40
|
+
//#region src/meta.ts
|
|
44
41
|
var meta = Plugin.getMetaFromConfig(dx_config_default);
|
|
45
42
|
var ASSISTANT_DIALOG = DXN.make(`${meta.profile.key}.assistantDialog`);
|
|
43
|
+
/** Companion variant identifier for the assistant chat panel. */
|
|
46
44
|
var ASSISTANT_COMPANION_VARIANT = "assistant-chat";
|
|
45
|
+
//#endregion
|
|
46
|
+
export { ASSISTANT_DIALOG as n, meta as r, ASSISTANT_COMPANION_VARIANT as t };
|
|
47
47
|
|
|
48
|
-
|
|
49
|
-
meta,
|
|
50
|
-
ASSISTANT_DIALOG,
|
|
51
|
-
ASSISTANT_COMPANION_VARIANT
|
|
52
|
-
};
|
|
53
|
-
//# sourceMappingURL=chunk-L7AR4VTA.mjs.map
|
|
48
|
+
//# sourceMappingURL=chunk-meta.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-meta.mjs","names":[],"sources":["../../dx.config.ts","../../src/meta.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Config2 } from '@dxos/app-framework/config';\nimport { trim } from '@dxos/util';\n\nexport default Config2.make({\n plugin: {\n key: 'org.dxos.plugin.assistant',\n name: 'Assistant',\n author: 'DXOS',\n description: trim`\n AssistantPlugin brings a conversational AI assistant into DXOS Composer, letting users chat naturally\n with objects in their spaces. Every Chat is a first-class ECHO object — messages are persisted,\n replicated across peers in real time, and can be bound to any document or collection as a companion\n panel that appears alongside the primary view.\n\n AI capabilities are delivered through a flexible multi-provider model layer. Users can route requests\n to the DXOS Edge service, a locally running Ollama instance, or LM Studio, and switch providers at\n any time in Settings. Each provider can be configured with a preferred model, and the runtime\n automatically falls back when a provider is unavailable.\n\n Skills give every chat a specialised identity. Built-in skills cover general assistance,\n web browsing, database interaction, web search, Discord and Linear integration, autonomous agents,\n planning, memory, automation, and a wizard for authoring new skills. Binding a skill\n changes the system instructions and the tool set exposed to the model in a single step.\n\n Tool execution runs through the DXOS compute runtime so every AI action — opening a document,\n searching the web, querying a database — produces a structured execution trace. The optional\n TracePanel visualises that trace as a commit graph or raw JSON, giving developers full observability\n into what the model did and why.\n `,\n icon: { key: 'ph--sparkle--regular', hue: 'sky' },\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-assistant',\n spec: 'PLUGIN.mdl',\n tags: ['alpha'],\n },\n});\n","//\n// Copyright 2023 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\nimport { DXN } from '@dxos/keys';\n\nimport config from '../dx.config';\n\nexport const meta = Plugin.getMetaFromConfig(config);\n\nexport const ASSISTANT_DIALOG = DXN.make(`${meta.profile.key}.assistantDialog`);\n\n/** Companion variant identifier for the assistant chat panel. */\nexport const ASSISTANT_COMPANION_VARIANT = 'assistant-chat';\n"],"mappings":";;;;;AAOA,IAAA,oBAAe,QAAQ,KAAK,EAC1B,QAAQ;CACN,KAAK;CACL,MAAM;CACN,QAAQ;CACR,aAAa,IAAI;;;;;;;;;;;;;;;;;;;;;CAqBjB,MAAM;EAAE,KAAK;EAAwB,KAAK;CAAM;CAChD,QAAQ;CACR,MAAM;CACN,MAAM,CAAC,OAAO;AAChB,EACF,CAAC;;;AC7BD,IAAa,OAAO,OAAO,kBAAkB,iBAAM;AAEnD,IAAa,mBAAmB,IAAI,KAAK,GAAG,KAAK,QAAQ,IAAI,iBAAiB;;AAG9E,IAAa,8BAA8B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { u as __exportAll } from "./chunk-types.mjs";
|
|
2
|
+
import { Capabilities, Capability } from "@dxos/app-framework";
|
|
3
|
+
import * as Effect from "effect/Effect";
|
|
4
|
+
import { AssistantOperationHandlerSet } from "#operations";
|
|
5
|
+
//#region src/capabilities/operation-handler.ts
|
|
6
|
+
var operation_handler_exports = /* @__PURE__ */ __exportAll({ default: () => operation_handler_default });
|
|
7
|
+
var operation_handler_default = Capability.makeModule(Effect.fnUntraced(function* () {
|
|
8
|
+
return Capability.contributes(Capabilities.OperationHandler, AssistantOperationHandlerSet);
|
|
9
|
+
}));
|
|
10
|
+
//#endregion
|
|
11
|
+
export { operation_handler_exports as n, operation_handler_default as t };
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=chunk-operation-handler.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-operation-handler.mjs","names":[],"sources":["../../src/capabilities/operation-handler.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport type { OperationHandlerSet } from '@dxos/compute';\n\nimport { AssistantOperationHandlerSet } from '#operations';\n\nexport default Capability.makeModule<OperationHandlerSet.OperationHandlerSet>(\n Effect.fnUntraced(function* () {\n return Capability.contributes(Capabilities.OperationHandler, AssistantOperationHandlerSet);\n }),\n);\n"],"mappings":";;;;;;AAWA,IAAA,4BAAe,WAAW,WACxB,OAAO,WAAW,aAAa;CAC7B,OAAO,WAAW,YAAY,aAAa,kBAAkB,4BAA4B;AAC3F,CAAC,CACH"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { GraphPath } from "@dxos/app-toolkit";
|
|
2
|
+
import { Chat } from "@dxos/assistant-toolkit";
|
|
3
|
+
//#region src/paths.ts
|
|
4
|
+
var { getSectionPath: getChatsPath, getObjectPath: getChatPath } = GraphPath.createTypeSectionPaths(Chat.Chat, { groupId: GraphPath.GroupSegments.ai });
|
|
5
|
+
//#endregion
|
|
6
|
+
export { getChatsPath as n, getChatPath as t };
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=chunk-paths.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-paths.mjs","names":[],"sources":["../../src/paths.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport { GraphPath } from '@dxos/app-toolkit';\nimport { Chat } from '@dxos/assistant-toolkit';\n\nconst { getSectionPath: getChatsPath, getObjectPath: getChatPath } = GraphPath.createTypeSectionPaths(Chat.Chat, {\n groupId: GraphPath.GroupSegments.ai,\n});\n\nexport { getChatPath, getChatsPath };\n"],"mappings":";;;AAOA,IAAM,EAAE,gBAAgB,cAAc,eAAe,gBAAgB,UAAU,uBAAuB,KAAK,MAAM,EAC/G,SAAS,UAAU,cAAc,GACnC,CAAC"}
|
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
import { Harness, McpServerError, PartialBlock, ToolExecutionServices, createSystemPrompt, formatSystemPrompt } from "@dxos/assistant";
|
|
2
|
+
import { AgentService, Operation, Trace } from "@dxos/compute";
|
|
3
|
+
import { DXN } from "@dxos/keys";
|
|
4
|
+
import { trim } from "@dxos/util";
|
|
5
|
+
import { Model, Provider } from "@dxos/ai";
|
|
6
|
+
import { EffectEx } from "@dxos/effect";
|
|
7
|
+
import { Database, Obj } from "@dxos/echo";
|
|
8
|
+
import { Atom, Registry as Registry$1 } from "@effect-atom/atom";
|
|
9
|
+
import { ContentBlock, Message } from "@dxos/types";
|
|
10
|
+
import { AssistantOperation } from "#types";
|
|
11
|
+
import * as Effect from "effect/Effect";
|
|
12
|
+
import * as Option from "effect/Option";
|
|
13
|
+
import { log } from "@dxos/log";
|
|
14
|
+
import * as AiError from "@effect/ai/AiError";
|
|
15
|
+
import * as Cause from "effect/Cause";
|
|
16
|
+
import * as Exit from "effect/Exit";
|
|
17
|
+
import * as Fiber from "effect/Fiber";
|
|
18
|
+
import * as Stream from "effect/Stream";
|
|
19
|
+
import { UsageQuotaExceededError } from "@dxos/edge-client";
|
|
20
|
+
//#region src/processor/presets.ts
|
|
21
|
+
/** Presets for a provider: every model the provider serves (the catalog filtered by provider). */
|
|
22
|
+
var presetsForProvider = (provider) => Model.forProvider(provider).map((model) => ({
|
|
23
|
+
id: model.id,
|
|
24
|
+
provider,
|
|
25
|
+
model: model.id,
|
|
26
|
+
backend: model.backend,
|
|
27
|
+
label: model.label
|
|
28
|
+
}));
|
|
29
|
+
/**
|
|
30
|
+
* Reconcile a stored provider DXN with the runtime: map the bundled sidecar (`built-in`) and an
|
|
31
|
+
* external server (`ollama`) onto whichever is actually available — they are environment-exclusive
|
|
32
|
+
* (the sidecar exists only on desktop). Defaults to `edge` when unset or unparseable.
|
|
33
|
+
*/
|
|
34
|
+
var resolveProvider = (provider, hasBuiltIn) => {
|
|
35
|
+
const resolved = (provider ? DXN.tryMake(provider) : void 0) ?? Provider.edge.id;
|
|
36
|
+
if (resolved === Provider.ollama.id && hasBuiltIn) return Provider.builtIn.id;
|
|
37
|
+
if (resolved === Provider.builtIn.id && !hasBuiltIn) return Provider.ollama.id;
|
|
38
|
+
return resolved;
|
|
39
|
+
};
|
|
40
|
+
/** The {@link Settings.modelDefaults} key for a provider (`built-in` shares the `ollama` key). */
|
|
41
|
+
var defaultsKeyForProvider = (provider) => provider === Provider.edge.id ? "edge" : provider === Provider.lmStudio.id ? "lmstudio" : "ollama";
|
|
42
|
+
//#endregion
|
|
43
|
+
//#region src/util/error-cause.ts
|
|
44
|
+
/** Walk an error's `cause` chain and return the first value matching `predicate`. */
|
|
45
|
+
var findInCause = (error, predicate) => {
|
|
46
|
+
let current = error;
|
|
47
|
+
const visited = /* @__PURE__ */ new Set();
|
|
48
|
+
while (current) {
|
|
49
|
+
if (visited.has(current)) break;
|
|
50
|
+
visited.add(current);
|
|
51
|
+
if (predicate(current)) return current;
|
|
52
|
+
current = current instanceof Error ? current.cause : void 0;
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
//#endregion
|
|
56
|
+
//#region src/processor/prompt.ts
|
|
57
|
+
/**
|
|
58
|
+
* Prompt content for a request: the bare message, or — when the request carries selection context —
|
|
59
|
+
* a synthetic block (system-generated user-turn content, hidden from the summary view) ahead of it.
|
|
60
|
+
*/
|
|
61
|
+
var createPromptContent = (request) => {
|
|
62
|
+
const selection = request.context?.selection;
|
|
63
|
+
if (!selection?.text.length) return request.message;
|
|
64
|
+
return [ContentBlock.Text.make({
|
|
65
|
+
disposition: "synthetic",
|
|
66
|
+
text: trim`
|
|
67
|
+
The user's current selection in the document they are viewing:
|
|
68
|
+
<selection>
|
|
69
|
+
${selection.text}
|
|
70
|
+
</selection>
|
|
71
|
+
`
|
|
72
|
+
}), ContentBlock.Text.make({ text: request.message })];
|
|
73
|
+
};
|
|
74
|
+
//#endregion
|
|
75
|
+
//#region src/processor/processor.ts
|
|
76
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-assistant/src/processor/processor.ts";
|
|
77
|
+
var defaultOptions = { model: Model.DEFAULT_EDGE };
|
|
78
|
+
/** User-facing message shown when an AI request is rejected for exceeding the account usage quota (HTTP 429). */
|
|
79
|
+
var QUOTA_EXCEEDED_MESSAGE = "You have reached your AI usage limit for this period.";
|
|
80
|
+
/**
|
|
81
|
+
* Display error for an over-quota (HTTP 429) rejection. Declares an {@link action} so the chat toast can
|
|
82
|
+
* offer a usage-dashboard link declaratively — the UI renders whatever action an error declares rather
|
|
83
|
+
* than branching on the error type.
|
|
84
|
+
*/
|
|
85
|
+
var AiUsageQuotaError = class extends Error {
|
|
86
|
+
action = { labelKey: "view-usage.label" };
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Matches an over-quota rejection (EDGE responds 429) in error text. The typed
|
|
90
|
+
* {@link UsageQuotaExceededError} is wrapped deep in the cause chain and does not survive the
|
|
91
|
+
* agent-process boundary — the failure is rendered to a string via `Cause.pretty`, which drops
|
|
92
|
+
* nested causes — so detection also relies on the HTTP 429 that `@effect/ai`'s
|
|
93
|
+
* {@link AiError.HttpResponseError} embeds in its message (e.g. "... (429 POST ...").
|
|
94
|
+
*/
|
|
95
|
+
var QUOTA_PATTERN = /\b429\b|rate.?limit|too many requests|usage quota|quota exceeded/i;
|
|
96
|
+
/** Whether an error denotes an over-quota (HTTP 429) rejection, detected by typed status or message text. */
|
|
97
|
+
var isQuotaError = (err) => {
|
|
98
|
+
if (AiError.isAiError(err)) {
|
|
99
|
+
if (err._tag === "HttpResponseError" && err.response.status === 429) return true;
|
|
100
|
+
return QUOTA_PATTERN.test(err.description ?? err.message);
|
|
101
|
+
}
|
|
102
|
+
return typeof err === "string" && QUOTA_PATTERN.test(err);
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* Maps a failure from the agent fiber to an error suitable for display.
|
|
106
|
+
* An over-quota (HTTP 429) rejection is surfaced as an actionable usage-limit message; the typed
|
|
107
|
+
* {@link UsageQuotaExceededError} only survives on the direct path, so {@link isQuotaError} also
|
|
108
|
+
* recognizes the stringified 429 the chat receives across the agent-process boundary.
|
|
109
|
+
* Other {@link AiError}s originate from the AI service and are actionable by the user
|
|
110
|
+
* (e.g., "model 'x' not found", "Connection refused"), so their detail is propagated.
|
|
111
|
+
* Any other failure is treated as an internal/unexpected error and reported generically
|
|
112
|
+
* to avoid leaking implementation detail.
|
|
113
|
+
*/
|
|
114
|
+
var parseError = (err) => {
|
|
115
|
+
const quotaError = findInCause(err, UsageQuotaExceededError.is);
|
|
116
|
+
if (quotaError || isQuotaError(err)) return new AiUsageQuotaError(quotaError?.message?.trim() || QUOTA_EXCEEDED_MESSAGE, { cause: err });
|
|
117
|
+
let message;
|
|
118
|
+
if (AiError.isAiError(err)) message = err.description?.trim() || err.message;
|
|
119
|
+
else if (typeof err === "string") {
|
|
120
|
+
const [, model] = err.match(/model\s+'([^']+)'\s+not\s+found/i) || [];
|
|
121
|
+
if (model) message = `The model is not available: ${model}`;
|
|
122
|
+
}
|
|
123
|
+
if (!message) message = "An unexpected error occurred.";
|
|
124
|
+
return new Error(message, { cause: err });
|
|
125
|
+
};
|
|
126
|
+
/**
|
|
127
|
+
* Handles interactions with the AI service.
|
|
128
|
+
* Uses AgentService to spawn a process-backed agent and subscribes to ephemeral trace events for streaming.
|
|
129
|
+
*/
|
|
130
|
+
var AiChatProcessor = class {
|
|
131
|
+
_conversation;
|
|
132
|
+
_runtime;
|
|
133
|
+
_feed;
|
|
134
|
+
_spaceLayer;
|
|
135
|
+
_options;
|
|
136
|
+
#registry;
|
|
137
|
+
/** Pending messages (finalized, non-streaming). */
|
|
138
|
+
#pending = Atom.make([]);
|
|
139
|
+
/** Currently streaming messages (from ephemeral trace events). */
|
|
140
|
+
#streaming = Atom.make([]);
|
|
141
|
+
/** Set of message IDs that have been finalized (non-pending delivered via ephemeral). */
|
|
142
|
+
#finalizedIds = /* @__PURE__ */ new Set();
|
|
143
|
+
/** Currently active request fiber. */
|
|
144
|
+
#requestFiber;
|
|
145
|
+
/** Last request (for retries). */
|
|
146
|
+
#lastRequest;
|
|
147
|
+
/** Streaming state. */
|
|
148
|
+
streaming = Atom.make((get) => get(this.#streaming).length > 0);
|
|
149
|
+
/** Active state. */
|
|
150
|
+
active = Atom.make(false);
|
|
151
|
+
/** Array of Messages (incl. the current message being streamed). */
|
|
152
|
+
messages = Atom.make((get) => [...get(this.#pending), ...get(this.#streaming)]);
|
|
153
|
+
/** Last error. */
|
|
154
|
+
error = Atom.make(Option.none());
|
|
155
|
+
/**
|
|
156
|
+
* MCP server connection errors observed during the most recent request.
|
|
157
|
+
* Misconfigured/unreachable servers are dropped from the toolkit so the chat
|
|
158
|
+
* keeps working; the entries here let the UI display which servers failed.
|
|
159
|
+
*/
|
|
160
|
+
mcpErrors = Atom.make([]);
|
|
161
|
+
constructor(_conversation, _runtime, _feed, _spaceLayer, _options = defaultOptions) {
|
|
162
|
+
this._conversation = _conversation;
|
|
163
|
+
this._runtime = _runtime;
|
|
164
|
+
this._feed = _feed;
|
|
165
|
+
this._spaceLayer = _spaceLayer;
|
|
166
|
+
this._options = _options;
|
|
167
|
+
this.#registry = this._options.observableRegistry ?? Registry$1.make();
|
|
168
|
+
if (this._options.model && !this._options.system) {
|
|
169
|
+
const capabilities = this._options.modelRegistry?.getCapabilities(this._options.model) ?? {};
|
|
170
|
+
this._options.system = createSystemPrompt(capabilities);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
get context() {
|
|
174
|
+
return this._conversation.context;
|
|
175
|
+
}
|
|
176
|
+
get conversation() {
|
|
177
|
+
return this._conversation;
|
|
178
|
+
}
|
|
179
|
+
get registry() {
|
|
180
|
+
return this._options.registry;
|
|
181
|
+
}
|
|
182
|
+
get system() {
|
|
183
|
+
return this._options.system ?? "";
|
|
184
|
+
}
|
|
185
|
+
async getTools() {
|
|
186
|
+
return this._runtime.runPromise(Effect.provide(this._conversation.getTools(), ToolExecutionServices).pipe(Effect.provide(this._spaceLayer)));
|
|
187
|
+
}
|
|
188
|
+
async getSystemPrompt() {
|
|
189
|
+
return this._runtime.runPromise(Effect.gen(this, function* () {
|
|
190
|
+
const skills = this.context.getSkills();
|
|
191
|
+
const objects = this.context.getObjects();
|
|
192
|
+
const instructions = yield* this.#getInstructions();
|
|
193
|
+
const runtime = yield* Effect.runtime();
|
|
194
|
+
return yield* formatSystemPrompt({
|
|
195
|
+
system: this._options.system,
|
|
196
|
+
skills,
|
|
197
|
+
objects,
|
|
198
|
+
instructions
|
|
199
|
+
}).pipe(Effect.provideService(Harness.HarnessService, Harness.fromBinder({
|
|
200
|
+
feed: this._feed,
|
|
201
|
+
runtime,
|
|
202
|
+
binder: this.context
|
|
203
|
+
})));
|
|
204
|
+
}).pipe(Effect.provide(this._spaceLayer), Effect.orDie));
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Resolves the chat's steering instructions, if any. The session is feed-centric and cannot reach
|
|
208
|
+
* its chat, so the ref is resolved here and handed down.
|
|
209
|
+
*/
|
|
210
|
+
#getInstructions() {
|
|
211
|
+
return Effect.gen(this, function* () {
|
|
212
|
+
const instructionsRef = this._options.chat?.target?.instructions;
|
|
213
|
+
if (!instructionsRef) return [];
|
|
214
|
+
const instructions = yield* Database.load(instructionsRef).pipe(Effect.orElseSucceed(() => void 0));
|
|
215
|
+
return instructions ? [instructions] : [];
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Initiates a new request via AgentService.
|
|
220
|
+
*/
|
|
221
|
+
async request(requestProp) {
|
|
222
|
+
if (this.#requestFiber) await this.cancel();
|
|
223
|
+
try {
|
|
224
|
+
this.#lastRequest = requestProp;
|
|
225
|
+
this.#registry.set(this.error, Option.none());
|
|
226
|
+
this.#registry.set(this.mcpErrors, []);
|
|
227
|
+
this.#registry.set(this.active, true);
|
|
228
|
+
const effect = Effect.gen(this, function* () {
|
|
229
|
+
log.info("init agent session", {
|
|
230
|
+
feed: Obj.getURI(this._feed),
|
|
231
|
+
model: this._options.model,
|
|
232
|
+
provider: this._options.provider
|
|
233
|
+
}, {
|
|
234
|
+
"~LogMeta": "~LogMeta",
|
|
235
|
+
F: __dxlog_file,
|
|
236
|
+
L: 305,
|
|
237
|
+
S: this
|
|
238
|
+
});
|
|
239
|
+
const session = yield* AgentService.getSession(this._feed, {
|
|
240
|
+
model: this._options.model,
|
|
241
|
+
provider: this._options.provider,
|
|
242
|
+
instructions: this._options.chat?.target?.instructions
|
|
243
|
+
});
|
|
244
|
+
yield* session.subscribeEphemeral().pipe(Stream.runForEach((message) => Effect.sync(() => {
|
|
245
|
+
for (const event of message.events) if (Trace.isOfType(PartialBlock, event)) this.#handleEphemeralMessage(event.data);
|
|
246
|
+
else if (Trace.isOfType(McpServerError, event)) this.#handleMcpError(event.data);
|
|
247
|
+
})), Effect.fork);
|
|
248
|
+
log("chat processor submitting prompt", { length: requestProp.message.length }, {
|
|
249
|
+
"~LogMeta": "~LogMeta",
|
|
250
|
+
F: __dxlog_file,
|
|
251
|
+
L: 331,
|
|
252
|
+
S: this
|
|
253
|
+
});
|
|
254
|
+
yield* session.submitPrompt(createPromptContent(requestProp));
|
|
255
|
+
log("chat processor submitPrompt returned, waiting for agent", {}, {
|
|
256
|
+
"~LogMeta": "~LogMeta",
|
|
257
|
+
F: __dxlog_file,
|
|
258
|
+
L: 333,
|
|
259
|
+
S: this
|
|
260
|
+
});
|
|
261
|
+
if (!this._options.chat?.target?.name) yield* this.#updateChatName(requestProp.message);
|
|
262
|
+
yield* session.waitForCompletion();
|
|
263
|
+
log.info("session complete", void 0, {
|
|
264
|
+
"~LogMeta": "~LogMeta",
|
|
265
|
+
F: __dxlog_file,
|
|
266
|
+
L: 342,
|
|
267
|
+
S: this
|
|
268
|
+
});
|
|
269
|
+
this.#flushStreaming();
|
|
270
|
+
});
|
|
271
|
+
this.#requestFiber = this._runtime.runFork(effect.pipe(Effect.provide(this._spaceLayer)));
|
|
272
|
+
const exit = await this._runtime.runPromise(Fiber.await(this.#requestFiber));
|
|
273
|
+
if (Exit.isFailure(exit)) {
|
|
274
|
+
if (Cause.isInterruptedOnly(exit.cause)) {
|
|
275
|
+
this.#discardStreaming();
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
throw EffectEx.causeToError(exit.cause);
|
|
279
|
+
}
|
|
280
|
+
this.#registry.set(this.error, Option.none());
|
|
281
|
+
this.#lastRequest = void 0;
|
|
282
|
+
this.#requestFiber = void 0;
|
|
283
|
+
} catch (err) {
|
|
284
|
+
log.error("request failed", { error: err }, {
|
|
285
|
+
"~LogMeta": "~LogMeta",
|
|
286
|
+
F: __dxlog_file,
|
|
287
|
+
L: 367,
|
|
288
|
+
S: this
|
|
289
|
+
});
|
|
290
|
+
this.#registry.set(this.error, Option.some(parseError(err)));
|
|
291
|
+
} finally {
|
|
292
|
+
log.info("setting active to false", void 0, {
|
|
293
|
+
"~LogMeta": "~LogMeta",
|
|
294
|
+
F: __dxlog_file,
|
|
295
|
+
L: 370,
|
|
296
|
+
S: this
|
|
297
|
+
});
|
|
298
|
+
this.#registry.set(this.active, false);
|
|
299
|
+
this.#requestFiber = void 0;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Cancels the current request.
|
|
304
|
+
*/
|
|
305
|
+
async cancel() {
|
|
306
|
+
await EffectEx.runAndForwardErrors(Effect.gen(this, function* () {
|
|
307
|
+
log.info("cancelling request", { fiber: this.#requestFiber }, {
|
|
308
|
+
"~LogMeta": "~LogMeta",
|
|
309
|
+
F: __dxlog_file,
|
|
310
|
+
L: 382,
|
|
311
|
+
S: this
|
|
312
|
+
});
|
|
313
|
+
if (this.#requestFiber) yield* Fiber.interrupt(this.#requestFiber);
|
|
314
|
+
yield* (yield* AgentService.getSession(this._feed)).terminate();
|
|
315
|
+
}).pipe(Effect.provide(this._spaceLayer)));
|
|
316
|
+
this.#requestFiber = void 0;
|
|
317
|
+
this.#discardStreaming();
|
|
318
|
+
this.#registry.set(this.active, false);
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Retry last failed request.
|
|
322
|
+
*/
|
|
323
|
+
async retry() {
|
|
324
|
+
if (this.#lastRequest) return this.request(this.#lastRequest);
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Clears the recorded MCP server errors (e.g. after the user dismisses the warning banner).
|
|
328
|
+
*/
|
|
329
|
+
dismissMcpErrors() {
|
|
330
|
+
this.#registry.set(this.mcpErrors, []);
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Update the current chat's name.
|
|
334
|
+
*/
|
|
335
|
+
async updateName(chat) {
|
|
336
|
+
const spaceId = Obj.getDatabase(chat)?.spaceId;
|
|
337
|
+
if (!spaceId) return;
|
|
338
|
+
EffectEx.unwrapExit(await this._runtime.runPromiseExit(Operation.invoke(AssistantOperation.UpdateChatName, { chat }, { spaceId }).pipe(Effect.provide(this._spaceLayer))));
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Handles an ephemeral message from the agent process.
|
|
342
|
+
* Both pending and completed blocks arrive here. Completed blocks are deduped
|
|
343
|
+
* against messages already written to the feed queue to handle the race between
|
|
344
|
+
* ephemeral delivery and feed replication.
|
|
345
|
+
*/
|
|
346
|
+
#handleEphemeralMessage(event) {
|
|
347
|
+
const isPending = event.block.pending;
|
|
348
|
+
const message = Obj.make(Message.Message, {
|
|
349
|
+
id: event.messageId,
|
|
350
|
+
created: (/* @__PURE__ */ new Date()).toISOString(),
|
|
351
|
+
sender: { role: event.role },
|
|
352
|
+
blocks: [event.block]
|
|
353
|
+
});
|
|
354
|
+
if (isPending) {
|
|
355
|
+
if (this.#finalizedIds.has(event.messageId)) return;
|
|
356
|
+
this.#registry.update(this.#streaming, (streaming) => {
|
|
357
|
+
const idx = streaming.findIndex((existing) => existing.id === event.messageId);
|
|
358
|
+
if (idx >= 0) {
|
|
359
|
+
const updated = [...streaming];
|
|
360
|
+
updated[idx] = message;
|
|
361
|
+
return updated;
|
|
362
|
+
}
|
|
363
|
+
return [...streaming, message];
|
|
364
|
+
});
|
|
365
|
+
} else {
|
|
366
|
+
this.#finalizedIds.add(event.messageId);
|
|
367
|
+
this.#registry.update(this.#streaming, (streaming) => streaming.filter((existing) => existing.id !== message.id));
|
|
368
|
+
this.#registry.update(this.#pending, (pending) => {
|
|
369
|
+
if (pending.some((existing) => existing.id === message.id)) return pending;
|
|
370
|
+
return [...pending, message];
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Records a per-server MCP failure, deduped by url+protocol so repeat misconfigurations
|
|
376
|
+
* across turns do not spam the UI.
|
|
377
|
+
*/
|
|
378
|
+
#handleMcpError(event) {
|
|
379
|
+
log.warn("MCP server error", event, {
|
|
380
|
+
"~LogMeta": "~LogMeta",
|
|
381
|
+
F: __dxlog_file,
|
|
382
|
+
L: 474,
|
|
383
|
+
S: this
|
|
384
|
+
});
|
|
385
|
+
this.#registry.update(this.mcpErrors, (errors) => {
|
|
386
|
+
if (errors.some((existing) => existing.url === event.url && existing.protocol === event.protocol)) return errors;
|
|
387
|
+
return [...errors, event];
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* Drop in-flight streaming messages (cancel/interrupt — partial blocks are discarded).
|
|
392
|
+
*/
|
|
393
|
+
#discardStreaming() {
|
|
394
|
+
this.#registry.set(this.#streaming, []);
|
|
395
|
+
this.#finalizedIds.clear();
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Move remaining streaming messages to pending (called when agent completes).
|
|
399
|
+
*/
|
|
400
|
+
#flushStreaming() {
|
|
401
|
+
const remaining = this.#registry.get(this.#streaming);
|
|
402
|
+
if (remaining.length > 0) {
|
|
403
|
+
this.#registry.update(this.#pending, (pending) => [...pending, ...remaining]);
|
|
404
|
+
this.#registry.set(this.#streaming, []);
|
|
405
|
+
}
|
|
406
|
+
this.#finalizedIds.clear();
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Schedule a chat name update as a detached (fire-and-forget) operation.
|
|
410
|
+
* Called automatically on the first message; can also be invoked manually via the toolbar.
|
|
411
|
+
*/
|
|
412
|
+
#updateChatName(prompt) {
|
|
413
|
+
const chat = this._options.chat?.target;
|
|
414
|
+
if (!chat) return Effect.void;
|
|
415
|
+
const spaceId = Obj.getDatabase(chat)?.spaceId;
|
|
416
|
+
if (!spaceId) return Effect.void;
|
|
417
|
+
log.info("scheduling chat name update", void 0, {
|
|
418
|
+
"~LogMeta": "~LogMeta",
|
|
419
|
+
F: __dxlog_file,
|
|
420
|
+
L: 518,
|
|
421
|
+
S: this
|
|
422
|
+
});
|
|
423
|
+
return Operation.schedule(AssistantOperation.UpdateChatName, {
|
|
424
|
+
chat,
|
|
425
|
+
prompt
|
|
426
|
+
}, { spaceId });
|
|
427
|
+
}
|
|
428
|
+
};
|
|
429
|
+
//#endregion
|
|
430
|
+
export { resolveProvider as a, presetsForProvider as i, AiUsageQuotaError as n, defaultsKeyForProvider as r, AiChatProcessor as t };
|
|
431
|
+
|
|
432
|
+
//# sourceMappingURL=chunk-processor.mjs.map
|