@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
|
@@ -2,25 +2,31 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { Atom } from '@effect-atom/atom';
|
|
6
|
-
import { useAtomValue } from '@effect-atom/atom-react';
|
|
7
5
|
import * as Option from 'effect/Option';
|
|
8
6
|
import React, { useCallback, useMemo } from 'react';
|
|
9
7
|
|
|
10
8
|
import { type Agent } from '@dxos/assistant-toolkit';
|
|
9
|
+
import { Trigger } from '@dxos/compute';
|
|
11
10
|
import { Filter, Obj, Ref, Type } from '@dxos/echo';
|
|
12
|
-
import { useQuery } from '@dxos/react
|
|
11
|
+
import { useQuery } from '@dxos/echo-react';
|
|
12
|
+
import { URI } from '@dxos/keys';
|
|
13
13
|
import { Input, useTranslation } from '@dxos/react-ui';
|
|
14
14
|
import { Form } from '@dxos/react-ui-form';
|
|
15
15
|
import { FeedAnnotation } from '@dxos/schema';
|
|
16
16
|
|
|
17
17
|
import { meta } from '#meta';
|
|
18
18
|
|
|
19
|
+
/** Mirrors the foreign keys stamped by the agent-wizard automation compiler (`sync-automation`). */
|
|
20
|
+
const AGENT_TRIGGER_EXTENSION_KEY = 'org.dxos.extension.AgentTrigger';
|
|
21
|
+
const AGENT_TRIGGER_TARGET_EXTENSION_KEY = 'org.dxos.extension.AgentTriggerTarget';
|
|
22
|
+
|
|
19
23
|
export type AgentPropertiesProps = {
|
|
20
24
|
agent: Agent.Agent;
|
|
25
|
+
/** Invoked with the FULL next subscription set when the user toggles one. */
|
|
26
|
+
onSubscriptionsChanged?: (subscriptions: Ref.Ref<Obj.Unknown>[]) => void;
|
|
21
27
|
};
|
|
22
28
|
|
|
23
|
-
export const AgentProperties = ({ agent }: AgentPropertiesProps) => {
|
|
29
|
+
export const AgentProperties = ({ agent, onSubscriptionsChanged }: AgentPropertiesProps) => {
|
|
24
30
|
const { t } = useTranslation(meta.profile.key);
|
|
25
31
|
const db = Obj.getDatabase(agent);
|
|
26
32
|
|
|
@@ -43,36 +49,37 @@ export const AgentProperties = ({ agent }: AgentPropertiesProps) => {
|
|
|
43
49
|
|
|
44
50
|
const subscribedObjects = useQuery(db, feedFilter);
|
|
45
51
|
|
|
46
|
-
//
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
52
|
+
// The subscription state lives on the compiled automation (routine triggers), not the agent:
|
|
53
|
+
// a trigger's target foreign key holds the subscribed object's URI (`timer:` keys are schedules).
|
|
54
|
+
const triggers = useQuery(
|
|
55
|
+
db,
|
|
56
|
+
Filter.foreignKeys(Trigger.Trigger, [{ source: AGENT_TRIGGER_EXTENSION_KEY, id: agent.id }]),
|
|
57
|
+
);
|
|
58
|
+
const subscribedUris = useMemo(
|
|
59
|
+
() =>
|
|
60
|
+
new Set(
|
|
61
|
+
triggers
|
|
62
|
+
.map(
|
|
63
|
+
(trigger) => Obj.getMeta(trigger).keys.find((key) => key.source === AGENT_TRIGGER_TARGET_EXTENSION_KEY)?.id,
|
|
64
|
+
)
|
|
65
|
+
.filter((id): id is string => id !== undefined && !id.startsWith('timer:')),
|
|
66
|
+
),
|
|
67
|
+
[triggers],
|
|
62
68
|
);
|
|
63
69
|
|
|
64
|
-
//
|
|
70
|
+
// Toggle recompiles the full subscription set (see `sync-automation`'s per-category reconcile).
|
|
65
71
|
const handleSubscriptionChange = useCallback(
|
|
66
72
|
(object: Obj.Unknown, checked: boolean) => {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}
|
|
73
|
+
const next = new Set(subscribedUris);
|
|
74
|
+
const uri = Obj.getURI(object);
|
|
75
|
+
if (checked) {
|
|
76
|
+
next.add(uri);
|
|
77
|
+
} else {
|
|
78
|
+
next.delete(uri);
|
|
79
|
+
}
|
|
80
|
+
onSubscriptionsChanged?.([...next].map((subscription) => Ref.fromURI(URI.make(subscription))));
|
|
74
81
|
},
|
|
75
|
-
[
|
|
82
|
+
[subscribedUris, onSubscriptionsChanged],
|
|
76
83
|
);
|
|
77
84
|
|
|
78
85
|
if (subscribedObjects.length === 0) {
|
|
@@ -89,7 +96,7 @@ export const AgentProperties = ({ agent }: AgentPropertiesProps) => {
|
|
|
89
96
|
<Input.Root key={object.id}>
|
|
90
97
|
<div className='flex items-center gap-2'>
|
|
91
98
|
<Input.Checkbox
|
|
92
|
-
checked={
|
|
99
|
+
checked={subscribedUris.has(Obj.getURI(object))}
|
|
93
100
|
onCheckedChange={(checked) => {
|
|
94
101
|
handleSubscriptionChange(object, checked === true);
|
|
95
102
|
}}
|
|
@@ -4,34 +4,47 @@
|
|
|
4
4
|
|
|
5
5
|
import { Atom } from '@effect-atom/atom';
|
|
6
6
|
import { useAtomValue } from '@effect-atom/atom-react';
|
|
7
|
-
import * as Array from 'effect/Array';
|
|
8
7
|
import * as Option from 'effect/Option';
|
|
9
8
|
import React, { type PropsWithChildren, useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
10
9
|
|
|
11
|
-
import { Plan } from '@dxos/assistant-toolkit';
|
|
12
10
|
import { Event } from '@dxos/async';
|
|
13
|
-
import { getSpace } from '@dxos/client/echo';
|
|
14
11
|
import { type Database, Filter, Obj, Query } from '@dxos/echo';
|
|
15
|
-
import { useObject, useQuery } from '@dxos/react
|
|
16
|
-
import { useIdentity } from '@dxos/react
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
12
|
+
import { useObject, useQuery } from '@dxos/echo-react';
|
|
13
|
+
import { useIdentity } from '@dxos/halo-react';
|
|
14
|
+
import { log } from '@dxos/log';
|
|
15
|
+
import {
|
|
16
|
+
Button,
|
|
17
|
+
type ThemedClassName,
|
|
18
|
+
Toast,
|
|
19
|
+
composable,
|
|
20
|
+
composableProps,
|
|
21
|
+
useDynamicRef,
|
|
22
|
+
useTranslation,
|
|
23
|
+
} from '@dxos/react-ui';
|
|
24
|
+
import { Minimap, type MinimapMarker } from '@dxos/react-ui-components';
|
|
25
|
+
import { type DocumentRange, type MarkdownStreamController } from '@dxos/react-ui-markdown';
|
|
19
26
|
import { Menu, MenuRootProps } from '@dxos/react-ui-menu';
|
|
27
|
+
import { Outline } from '@dxos/types';
|
|
20
28
|
import { Message } from '@dxos/types';
|
|
21
29
|
|
|
22
|
-
import { useChatKeymapExtensions, useChatToolbarActions, useDebug
|
|
30
|
+
import { useChatKeymapExtensions, useChatToolbarActions, useDebug } from '#hooks';
|
|
23
31
|
import { meta } from '#meta';
|
|
24
32
|
|
|
25
|
-
import { AiUsageQuotaError } from '../../processor';
|
|
33
|
+
import { AiUsageQuotaError, type ProcessorRequestContext } from '../../processor';
|
|
26
34
|
import {
|
|
27
35
|
ChatStatus,
|
|
28
36
|
ChatPrompt as NaturalChatPrompt,
|
|
29
37
|
type ChatPromptProps as NaturalChatPromptProps,
|
|
30
38
|
} from '../ChatPrompt';
|
|
31
|
-
import {
|
|
39
|
+
import {
|
|
40
|
+
type MessageSpan,
|
|
41
|
+
ChatThread as NaturalChatThread,
|
|
42
|
+
type ChatThreadProps as NaturalChatThreadProps,
|
|
43
|
+
} from '../ChatThread';
|
|
32
44
|
import { TaskList } from '../TaskList';
|
|
33
45
|
import { ChatContextProvider, type ChatContextValue, type ChatRequestTiming, useChatContext } from './context';
|
|
34
46
|
import { type ChatEvent } from './events';
|
|
47
|
+
import { projectThread, resolveRewind } from './thread';
|
|
35
48
|
|
|
36
49
|
//
|
|
37
50
|
// Root
|
|
@@ -47,10 +60,21 @@ type ChatRootProps = PropsWithChildren<
|
|
|
47
60
|
* persist and flush its conversation feed so the agent can resolve it.
|
|
48
61
|
*/
|
|
49
62
|
onSubmit?: (text: string) => Promise<void> | void;
|
|
63
|
+
/** Called at submit time to capture ephemeral request context (e.g. companion selection). */
|
|
64
|
+
getContext?: () => ProcessorRequestContext | undefined;
|
|
50
65
|
}
|
|
51
66
|
>;
|
|
52
67
|
|
|
53
|
-
const ChatRoot = ({
|
|
68
|
+
const ChatRoot = ({
|
|
69
|
+
children,
|
|
70
|
+
chat,
|
|
71
|
+
processor,
|
|
72
|
+
db: dbFallback,
|
|
73
|
+
onEvent,
|
|
74
|
+
onSubmit,
|
|
75
|
+
getContext,
|
|
76
|
+
...props
|
|
77
|
+
}: ChatRootProps) => {
|
|
54
78
|
const [debug, setDebug] = useState(false);
|
|
55
79
|
const streaming = useAtomValue(processor.streaming);
|
|
56
80
|
const active = useAtomValue(processor.active);
|
|
@@ -67,14 +91,19 @@ const ChatRoot = ({ children, chat, processor, db: dbFallback, onEvent, onSubmit
|
|
|
67
91
|
// Event sink.
|
|
68
92
|
const event = useMemo(() => new Event<ChatEvent>(), []);
|
|
69
93
|
|
|
94
|
+
// The editor controller and per-message ranges are produced by `Chat.Thread` and consumed by
|
|
95
|
+
// `Chat.Minimap`; lifted here so both sub-components share the same instance.
|
|
96
|
+
const [controller, setController] = useState<MarkdownStreamController | null>(null);
|
|
97
|
+
const [messageRanges, setMessageRanges] = useState<MessageSpan[]>([]);
|
|
98
|
+
|
|
70
99
|
const feedMessages = useQuery(
|
|
71
100
|
db,
|
|
72
101
|
feed ? Query.select(Filter.type(Message.Message)).from(feed) : Query.select(Filter.nothing()),
|
|
73
102
|
);
|
|
74
103
|
const pendingMessages = useAtomValue(processor.messages);
|
|
75
|
-
const messages = useMemo(
|
|
76
|
-
() =>
|
|
77
|
-
[feedMessages, pendingMessages],
|
|
104
|
+
const { messages } = useMemo(
|
|
105
|
+
() => projectThread({ feedMessages, pendingMessages, rewindFrom: feedSnapshot?.rewindFrom }),
|
|
106
|
+
[feedMessages, pendingMessages, feedSnapshot?.rewindFrom],
|
|
78
107
|
);
|
|
79
108
|
|
|
80
109
|
const dump = useDebug({ processor });
|
|
@@ -106,9 +135,25 @@ const ChatRoot = ({ children, chat, processor, db: dbFallback, onEvent, onSubmit
|
|
|
106
135
|
const text = ev.text.trim();
|
|
107
136
|
if (!streaming && text.length) {
|
|
108
137
|
lastPrompt.current = ev.text;
|
|
138
|
+
const context = getContext?.();
|
|
109
139
|
// Await persistence (transient chat) before requesting so the agent resolves the
|
|
110
140
|
// now-durable conversation feed; resolves immediately when there is no hook.
|
|
111
|
-
void Promise.resolve(onSubmit?.(text)).then(() => processor.request({ message: text }));
|
|
141
|
+
void Promise.resolve(onSubmit?.(text)).then(() => processor.request({ message: text, context }));
|
|
142
|
+
}
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
case 'rewind': {
|
|
147
|
+
// Edit-and-resend: discard the prompt and everything after it, and put its text back in the
|
|
148
|
+
// composer so it can be revised. Recorded on the feed rather than the chat because the
|
|
149
|
+
// continuation is appended by the agent's process, which resolves the feed and never sees the
|
|
150
|
+
// chat. A stale click (message already gone) resolves to nothing and is a no-op.
|
|
151
|
+
const rewind = feed && resolveRewind(messages, ev.id);
|
|
152
|
+
if (rewind) {
|
|
153
|
+
Obj.update(feed, (feed) => {
|
|
154
|
+
feed.rewindFrom = rewind.rewindFrom;
|
|
155
|
+
});
|
|
156
|
+
event.emit({ type: 'update-prompt', text: rewind.text });
|
|
112
157
|
}
|
|
113
158
|
break;
|
|
114
159
|
}
|
|
@@ -133,7 +178,9 @@ const ChatRoot = ({ children, chat, processor, db: dbFallback, onEvent, onSubmit
|
|
|
133
178
|
|
|
134
179
|
onEvent?.(ev);
|
|
135
180
|
});
|
|
136
|
-
|
|
181
|
+
// `feed` and `messages` are dependencies because the rewind branch reads and writes them: without
|
|
182
|
+
// them the handler would keep resolving rewinds against whatever was mounted first.
|
|
183
|
+
}, [event, dump, processor, streaming, onEvent, onSubmit, getContext, feed, messages]);
|
|
137
184
|
|
|
138
185
|
return (
|
|
139
186
|
<ChatContextProvider
|
|
@@ -144,6 +191,10 @@ const ChatRoot = ({ children, chat, processor, db: dbFallback, onEvent, onSubmit
|
|
|
144
191
|
messages={messages}
|
|
145
192
|
processor={processor}
|
|
146
193
|
requestTiming={requestTiming}
|
|
194
|
+
controller={controller}
|
|
195
|
+
setController={setController}
|
|
196
|
+
messageRanges={messageRanges}
|
|
197
|
+
setMessageRanges={setMessageRanges}
|
|
147
198
|
{...props}
|
|
148
199
|
>
|
|
149
200
|
{children}
|
|
@@ -212,6 +263,84 @@ const ChatContent = composable<HTMLDivElement, ChatContentProps>(({ children, ..
|
|
|
212
263
|
|
|
213
264
|
ChatContent.displayName = CHAT_CONTENT_NAME;
|
|
214
265
|
|
|
266
|
+
//
|
|
267
|
+
// Markers
|
|
268
|
+
//
|
|
269
|
+
|
|
270
|
+
const PROMPT_SNIPPET_LINES = 3;
|
|
271
|
+
const PROMPT_SNIPPET_CHARS = 280;
|
|
272
|
+
const PROMPT_TITLE_CHARS = 100;
|
|
273
|
+
|
|
274
|
+
/** First non-empty line of a message's text, truncated for the marker title. */
|
|
275
|
+
const promptTitle = (message: Message.Message): string => {
|
|
276
|
+
const text = Message.extractText(message).trim();
|
|
277
|
+
const firstLine = text.split('\n').find((line) => line.trim().length) ?? '';
|
|
278
|
+
return firstLine.length > PROMPT_TITLE_CHARS ? `${firstLine.slice(0, PROMPT_TITLE_CHARS)}…` : firstLine;
|
|
279
|
+
};
|
|
280
|
+
|
|
281
|
+
/** First few text lines of an assistant reply (tool calls, reasoning and status are excluded). */
|
|
282
|
+
const replySnippet = (message: Message.Message): string | undefined => {
|
|
283
|
+
// `extractText` keeps only `text` blocks, so tool calls / reasoning / status are dropped.
|
|
284
|
+
const text = Message.extractText(message).trim();
|
|
285
|
+
if (!text.length) {
|
|
286
|
+
return undefined;
|
|
287
|
+
}
|
|
288
|
+
const snippet = text
|
|
289
|
+
.split('\n')
|
|
290
|
+
.filter((line) => line.trim().length)
|
|
291
|
+
.slice(0, PROMPT_SNIPPET_LINES)
|
|
292
|
+
.join('\n');
|
|
293
|
+
return snippet.length > PROMPT_SNIPPET_CHARS ? `${snippet.slice(0, PROMPT_SNIPPET_CHARS)}…` : snippet;
|
|
294
|
+
};
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Build one minimap marker per user-prompt turn: title = the prompt text, description = a
|
|
298
|
+
* snippet of the following assistant reply, range = the turn's document span (prompt start →
|
|
299
|
+
* next prompt start). Positions come from the syncer's per-message range table.
|
|
300
|
+
*/
|
|
301
|
+
const buildMarkers = (messages: Message.Message[], ranges: MessageSpan[]): MinimapMarker[] => {
|
|
302
|
+
const rangeById = new Map(ranges.map((range) => [range.id, range] as const));
|
|
303
|
+
const markers: MinimapMarker[] = [];
|
|
304
|
+
for (let index = 0; index < messages.length; index++) {
|
|
305
|
+
const message = messages[index];
|
|
306
|
+
if (message.sender.role !== 'user') {
|
|
307
|
+
continue;
|
|
308
|
+
}
|
|
309
|
+
const range = rangeById.get(message.id);
|
|
310
|
+
if (!range) {
|
|
311
|
+
continue;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
// Extend the turn through the following non-user messages and grab the first assistant reply.
|
|
315
|
+
let turnTo = range.to;
|
|
316
|
+
let description: string | undefined;
|
|
317
|
+
for (let next = index + 1; next < messages.length; next++) {
|
|
318
|
+
const nextMessage = messages[next];
|
|
319
|
+
const nextRange = rangeById.get(nextMessage.id);
|
|
320
|
+
if (nextMessage.sender.role === 'user') {
|
|
321
|
+
if (nextRange) {
|
|
322
|
+
turnTo = nextRange.from;
|
|
323
|
+
}
|
|
324
|
+
break;
|
|
325
|
+
}
|
|
326
|
+
if (nextRange) {
|
|
327
|
+
turnTo = nextRange.to;
|
|
328
|
+
}
|
|
329
|
+
if (!description && nextMessage.sender.role === 'assistant') {
|
|
330
|
+
description = replySnippet(nextMessage);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
markers.push({
|
|
335
|
+
id: message.id,
|
|
336
|
+
title: promptTitle(message) || 'Prompt',
|
|
337
|
+
description,
|
|
338
|
+
range: { from: range.from, to: turnTo },
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
return markers;
|
|
342
|
+
};
|
|
343
|
+
|
|
215
344
|
//
|
|
216
345
|
// Thread
|
|
217
346
|
//
|
|
@@ -225,7 +354,8 @@ type ChatThreadProps = Omit<NaturalChatThreadProps, 'identity' | 'messages' | 't
|
|
|
225
354
|
|
|
226
355
|
const ChatThread = ({ viewType, debug: debugProp, onViewUsage, ...props }: ChatThreadProps) => {
|
|
227
356
|
const { t } = useTranslation(meta.profile.key);
|
|
228
|
-
const { debug, event, messages, processor } =
|
|
357
|
+
const { debug, event, messages, processor, messageRanges, setController, setMessageRanges } =
|
|
358
|
+
useChatContext(CHAT_THREAD_NAME);
|
|
229
359
|
const extensions = useChatKeymapExtensions({ event });
|
|
230
360
|
const identity = useIdentity();
|
|
231
361
|
const error = useAtomValue(processor.error).pipe(Option.getOrUndefined);
|
|
@@ -235,25 +365,70 @@ const ChatThread = ({ viewType, debug: debugProp, onViewUsage, ...props }: ChatT
|
|
|
235
365
|
const debugView = viewType === 'debug';
|
|
236
366
|
|
|
237
367
|
const controllerRef = useRef<MarkdownStreamController | null>(null);
|
|
368
|
+
// Share the controller with `Chat.Minimap` (and keep the local ref for event handling).
|
|
369
|
+
const handleControllerRef = useCallback(
|
|
370
|
+
(instance: MarkdownStreamController | null) => {
|
|
371
|
+
controllerRef.current = instance;
|
|
372
|
+
setController(instance);
|
|
373
|
+
},
|
|
374
|
+
[setController],
|
|
375
|
+
);
|
|
376
|
+
|
|
377
|
+
// Prompt-turn positions for navigation; a ref keeps the event handler stable without stale reads.
|
|
378
|
+
const promptPositions = useMemo(
|
|
379
|
+
() =>
|
|
380
|
+
buildMarkers(messages, messageRanges)
|
|
381
|
+
.map((marker) => marker.range.from)
|
|
382
|
+
.sort((a, b) => a - b),
|
|
383
|
+
[messages, messageRanges],
|
|
384
|
+
);
|
|
385
|
+
const promptPositionsRef = useDynamicRef(promptPositions);
|
|
386
|
+
|
|
387
|
+
// Navigate between prompt turns using the range table (not the xml-tag widget bookmarks).
|
|
388
|
+
const navigateToPrompt = useCallback(
|
|
389
|
+
(direction: 1 | -1) => {
|
|
390
|
+
const controller = controllerRef.current;
|
|
391
|
+
const positions = promptPositionsRef.current;
|
|
392
|
+
if (!controller || !positions.length) {
|
|
393
|
+
return;
|
|
394
|
+
}
|
|
395
|
+
const anchor = controller.getVisibleRange()?.from ?? 0;
|
|
396
|
+
const epsilon = 2;
|
|
397
|
+
const target =
|
|
398
|
+
direction > 0
|
|
399
|
+
? positions.find((pos) => pos > anchor + epsilon)
|
|
400
|
+
: [...positions].reverse().find((pos) => pos < anchor - epsilon);
|
|
401
|
+
if (target != null) {
|
|
402
|
+
controller.scrollTo(target, { y: 'start' });
|
|
403
|
+
}
|
|
404
|
+
},
|
|
405
|
+
[promptPositionsRef],
|
|
406
|
+
);
|
|
407
|
+
|
|
238
408
|
useEffect(() => {
|
|
239
409
|
return event.on((event) => {
|
|
240
410
|
switch (event.type) {
|
|
411
|
+
case 'rewind':
|
|
412
|
+
console.log('rewind', event);
|
|
413
|
+
break;
|
|
241
414
|
case 'submit':
|
|
242
415
|
case 'scroll-to-bottom':
|
|
243
416
|
controllerRef.current?.scrollToBottom();
|
|
244
417
|
break;
|
|
245
418
|
case 'nav-previous':
|
|
246
|
-
|
|
419
|
+
navigateToPrompt(-1);
|
|
247
420
|
break;
|
|
248
421
|
case 'nav-next':
|
|
249
|
-
|
|
422
|
+
navigateToPrompt(1);
|
|
250
423
|
break;
|
|
251
424
|
case 'error':
|
|
252
425
|
setToastError(event.error);
|
|
253
426
|
break;
|
|
427
|
+
default:
|
|
428
|
+
log.info('no handled', event);
|
|
254
429
|
}
|
|
255
430
|
});
|
|
256
|
-
}, [event]);
|
|
431
|
+
}, [event, navigateToPrompt]);
|
|
257
432
|
|
|
258
433
|
const handleEvent = useCallback<NonNullable<NaturalChatThreadProps['onEvent']>>(
|
|
259
434
|
(ev) => {
|
|
@@ -277,7 +452,8 @@ const ChatThread = ({ viewType, debug: debugProp, onViewUsage, ...props }: ChatT
|
|
|
277
452
|
viewType={viewType}
|
|
278
453
|
extensions={extensions}
|
|
279
454
|
onEvent={handleEvent}
|
|
280
|
-
|
|
455
|
+
onSpans={setMessageRanges}
|
|
456
|
+
ref={handleControllerRef}
|
|
281
457
|
/>
|
|
282
458
|
|
|
283
459
|
<Toast.Root
|
|
@@ -311,6 +487,45 @@ const ChatThread = ({ viewType, debug: debugProp, onViewUsage, ...props }: ChatT
|
|
|
311
487
|
|
|
312
488
|
ChatThread.displayName = CHAT_THREAD_NAME;
|
|
313
489
|
|
|
490
|
+
//
|
|
491
|
+
// Minimap
|
|
492
|
+
//
|
|
493
|
+
|
|
494
|
+
const CHAT_MINIMAP_NAME = 'Chat.Minimap';
|
|
495
|
+
|
|
496
|
+
type ChatMinimapProps = ThemedClassName<{}>;
|
|
497
|
+
|
|
498
|
+
/**
|
|
499
|
+
* Anchor-marker rail for the thread: one tick per user-prompt turn. Reads the shared controller
|
|
500
|
+
* and the syncer's range table from context; clicking a tick scrolls the thread to that turn.
|
|
501
|
+
*/
|
|
502
|
+
const ChatMinimap = ({ classNames }: ChatMinimapProps) => {
|
|
503
|
+
const { messages, messageRanges, controller } = useChatContext(CHAT_MINIMAP_NAME);
|
|
504
|
+
const [visibleRange, setVisibleRange] = useState<DocumentRange | undefined>(undefined);
|
|
505
|
+
useEffect(() => {
|
|
506
|
+
if (!controller) {
|
|
507
|
+
return;
|
|
508
|
+
}
|
|
509
|
+
return controller.onVisibleRangeChange(setVisibleRange);
|
|
510
|
+
}, [controller]);
|
|
511
|
+
|
|
512
|
+
const markers = useMemo(() => buildMarkers(messages, messageRanges), [messages, messageRanges]);
|
|
513
|
+
const handleSelect = useCallback(
|
|
514
|
+
(marker: MinimapMarker) => {
|
|
515
|
+
controller?.scrollTo(marker.range.from, { y: 'start' });
|
|
516
|
+
},
|
|
517
|
+
[controller],
|
|
518
|
+
);
|
|
519
|
+
|
|
520
|
+
if (!markers.length) {
|
|
521
|
+
return null;
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
return <Minimap classNames={classNames} markers={markers} visibleRange={visibleRange} onSelect={handleSelect} />;
|
|
525
|
+
};
|
|
526
|
+
|
|
527
|
+
ChatMinimap.displayName = CHAT_MINIMAP_NAME;
|
|
528
|
+
|
|
314
529
|
//
|
|
315
530
|
// Prompt
|
|
316
531
|
//
|
|
@@ -333,46 +548,38 @@ ChatPrompt.displayName = CHAT_PROMPT_NAME;
|
|
|
333
548
|
const CHAT_TASK_LIST_NAME = 'Chat.TaskList';
|
|
334
549
|
|
|
335
550
|
type ChatTaskListProps = {
|
|
336
|
-
|
|
551
|
+
outline?: Outline.Outline;
|
|
337
552
|
};
|
|
338
553
|
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
Option.
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
554
|
+
// TODO(burdon): Project chats keep their working checklist on the parent project's outline —
|
|
555
|
+
// resolve via the parent edge (needs a reactive parent lookup), not only `chat.outline`.
|
|
556
|
+
const ChatTaskList = composable<HTMLDivElement, ChatTaskListProps>(
|
|
557
|
+
({ outline: outlineProp, ...props }, forwardedRef) => {
|
|
558
|
+
const { chat } = useChatContext(CHAT_TASK_LIST_NAME);
|
|
559
|
+
|
|
560
|
+
const outline = useAtomValue(
|
|
561
|
+
useMemo(
|
|
562
|
+
() =>
|
|
563
|
+
Atom.make(
|
|
564
|
+
(get) =>
|
|
565
|
+
outlineProp ??
|
|
566
|
+
Option.fromNullable(chat).pipe(
|
|
567
|
+
Option.map((_) => get(Obj.atom(_))),
|
|
568
|
+
Option.flatMapNullable((_) => _?.outline?.atom),
|
|
569
|
+
Option.map(get),
|
|
570
|
+
Option.getOrUndefined,
|
|
571
|
+
),
|
|
572
|
+
),
|
|
573
|
+
[chat, outlineProp],
|
|
574
|
+
),
|
|
575
|
+
);
|
|
576
|
+
if (!outline) {
|
|
577
|
+
return null;
|
|
578
|
+
}
|
|
364
579
|
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
plan={plan}
|
|
369
|
-
space={space}
|
|
370
|
-
traceMessages={traceMessages}
|
|
371
|
-
conversationId={conversationId}
|
|
372
|
-
ref={forwardedRef}
|
|
373
|
-
/>
|
|
374
|
-
);
|
|
375
|
-
});
|
|
580
|
+
return <TaskList {...props} outline={outline} ref={forwardedRef} />;
|
|
581
|
+
},
|
|
582
|
+
);
|
|
376
583
|
|
|
377
584
|
ChatTaskList.displayName = CHAT_TASK_LIST_NAME;
|
|
378
585
|
|
|
@@ -387,7 +594,16 @@ export const Chat = {
|
|
|
387
594
|
Prompt: ChatPrompt,
|
|
388
595
|
Status: ChatStatus,
|
|
389
596
|
Thread: ChatThread,
|
|
597
|
+
Minimap: ChatMinimap,
|
|
390
598
|
TaskList: ChatTaskList,
|
|
391
599
|
};
|
|
392
600
|
|
|
393
|
-
export type {
|
|
601
|
+
export type {
|
|
602
|
+
ChatContentProps,
|
|
603
|
+
ChatEvent,
|
|
604
|
+
ChatMinimapProps,
|
|
605
|
+
ChatPromptProps,
|
|
606
|
+
ChatRootProps,
|
|
607
|
+
ChatThreadProps,
|
|
608
|
+
ChatToolbarProps,
|
|
609
|
+
};
|
|
@@ -56,7 +56,7 @@ const FailureToast = ({ rawError }: FailureToastProps) => {
|
|
|
56
56
|
};
|
|
57
57
|
|
|
58
58
|
const meta = {
|
|
59
|
-
title: 'plugins/plugin-assistant/components/
|
|
59
|
+
title: 'plugins/plugin-assistant/components/Error',
|
|
60
60
|
render: FailureToast,
|
|
61
61
|
decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
|
|
62
62
|
parameters: { translations },
|
|
@@ -7,9 +7,11 @@ import { createContext } from '@radix-ui/react-context';
|
|
|
7
7
|
import { type Chat as ChatModule } from '@dxos/assistant-toolkit';
|
|
8
8
|
import { type Event } from '@dxos/async';
|
|
9
9
|
import { type Database } from '@dxos/echo';
|
|
10
|
+
import { type MarkdownStreamController } from '@dxos/react-ui-markdown';
|
|
10
11
|
import { type Message } from '@dxos/types';
|
|
11
12
|
|
|
12
13
|
import { type AiChatProcessor } from '../../processor';
|
|
14
|
+
import { type MessageSpan } from '../ChatThread';
|
|
13
15
|
import { type ChatEvent } from './events';
|
|
14
16
|
|
|
15
17
|
/**
|
|
@@ -31,6 +33,12 @@ export type ChatContextValue = {
|
|
|
31
33
|
messages: Message.Message[];
|
|
32
34
|
processor: AiChatProcessor;
|
|
33
35
|
requestTiming: ChatRequestTiming | null;
|
|
36
|
+
/** The thread's editor controller, shared between `Chat.Thread` and `Chat.Minimap`. */
|
|
37
|
+
controller: MarkdownStreamController | null;
|
|
38
|
+
setController: (controller: MarkdownStreamController | null) => void;
|
|
39
|
+
/** Per-message document offset ranges, published by `Chat.Thread`'s syncer. */
|
|
40
|
+
messageRanges: MessageSpan[];
|
|
41
|
+
setMessageRanges: (ranges: MessageSpan[]) => void;
|
|
34
42
|
};
|
|
35
43
|
|
|
36
44
|
// Internal: not re-exported from `Chat/index.ts`. Accessed by sibling components in this
|
|
@@ -29,6 +29,11 @@ export type ChatEvent =
|
|
|
29
29
|
type: 'delete';
|
|
30
30
|
id: string;
|
|
31
31
|
}
|
|
32
|
+
/** Soft-fork the thread: continue from this message, leaving what followed it unreachable. */
|
|
33
|
+
| {
|
|
34
|
+
type: 'rewind';
|
|
35
|
+
id: string;
|
|
36
|
+
}
|
|
32
37
|
| {
|
|
33
38
|
type: 'add';
|
|
34
39
|
object: Obj.Unknown;
|