@dxos/plugin-assistant 0.9.1-staging.ee54ba693a → 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
|
@@ -1,302 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
presetsForProvider,
|
|
3
|
-
resolveProvider
|
|
4
|
-
} from "./chunk-BXI2R4OO.mjs";
|
|
5
|
-
import "./chunk-J5LGTIGS.mjs";
|
|
6
|
-
|
|
7
|
-
// src/containers/AssistantSettings/AssistantSettings.tsx
|
|
8
|
-
import { useAtomValue as useAtomValue2 } from "@effect-atom/atom-react";
|
|
9
|
-
import React2, { useMemo } from "react";
|
|
10
|
-
import { Provider as Provider2 } from "@dxos/ai";
|
|
11
|
-
import { useOptionalCapability as useOptionalCapability2 } from "@dxos/app-framework/ui";
|
|
12
|
-
import { useTranslation as useTranslation2 } from "@dxos/react-ui";
|
|
13
|
-
import { Form as Form2, createSelectField } from "@dxos/react-ui-form";
|
|
14
|
-
import { meta as meta2 } from "#meta";
|
|
15
|
-
import { Assistant, AssistantCapabilities as AssistantCapabilities2, Ollama } from "#types";
|
|
16
|
-
|
|
17
|
-
// src/containers/AssistantSettings/OllamaModels.tsx
|
|
18
|
-
import { useAtomValue } from "@effect-atom/atom-react";
|
|
19
|
-
import React, { useCallback, useEffect, useState } from "react";
|
|
20
|
-
import { Model, Provider } from "@dxos/ai";
|
|
21
|
-
import { useOptionalCapability } from "@dxos/app-framework/ui";
|
|
22
|
-
import { EffectEx } from "@dxos/effect";
|
|
23
|
-
import { List, ListItem } from "@dxos/react-list";
|
|
24
|
-
import { IconButton, useTranslation } from "@dxos/react-ui";
|
|
25
|
-
import { Form } from "@dxos/react-ui-form";
|
|
26
|
-
import { Combobox } from "@dxos/react-ui-list";
|
|
27
|
-
import { meta } from "#meta";
|
|
28
|
-
import { AssistantCapabilities } from "#types";
|
|
29
|
-
var QUICK_PICKS = Model.forProvider(Provider.ollama.id).map((model) => model.backend);
|
|
30
|
-
var LOADED_POLL_INTERVAL = 3e3;
|
|
31
|
-
var OllamaModels = () => {
|
|
32
|
-
const manager = useOptionalCapability(AssistantCapabilities.OllamaManager);
|
|
33
|
-
if (!manager) {
|
|
34
|
-
return null;
|
|
35
|
-
}
|
|
36
|
-
return /* @__PURE__ */ React.createElement(OllamaModelsSection, {
|
|
37
|
-
manager
|
|
38
|
-
});
|
|
39
|
-
};
|
|
40
|
-
var OllamaModelsSection = ({ manager }) => {
|
|
41
|
-
const { t } = useTranslation(meta.profile.key);
|
|
42
|
-
const state = useAtomValue(manager.state);
|
|
43
|
-
const [query, setQuery] = useState("");
|
|
44
|
-
const [open, setOpen] = useState(false);
|
|
45
|
-
const [pending, setPending] = useState({});
|
|
46
|
-
useEffect(() => {
|
|
47
|
-
void EffectEx.runPromise(manager.refresh);
|
|
48
|
-
}, [
|
|
49
|
-
manager
|
|
50
|
-
]);
|
|
51
|
-
useEffect(() => {
|
|
52
|
-
const interval = setInterval(() => void EffectEx.runPromise(manager.refreshLoaded), LOADED_POLL_INTERVAL);
|
|
53
|
-
return () => clearInterval(interval);
|
|
54
|
-
}, [
|
|
55
|
-
manager
|
|
56
|
-
]);
|
|
57
|
-
const installed = new Set(state.models.map((model) => model.name));
|
|
58
|
-
const loaded = new Map(state.loaded.map((model) => [
|
|
59
|
-
model.name,
|
|
60
|
-
model
|
|
61
|
-
]));
|
|
62
|
-
const pulling = Object.keys(state.pulls).filter((name) => !installed.has(name));
|
|
63
|
-
const withPending = useCallback((key, action) => async () => {
|
|
64
|
-
setPending((prev) => ({
|
|
65
|
-
...prev,
|
|
66
|
-
[key]: true
|
|
67
|
-
}));
|
|
68
|
-
try {
|
|
69
|
-
await action();
|
|
70
|
-
} finally {
|
|
71
|
-
setPending((prev) => ({
|
|
72
|
-
...prev,
|
|
73
|
-
[key]: false
|
|
74
|
-
}));
|
|
75
|
-
}
|
|
76
|
-
}, []);
|
|
77
|
-
const handlePull = useCallback((target) => {
|
|
78
|
-
const trimmed = target.trim();
|
|
79
|
-
if (trimmed.length === 0) {
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
setQuery("");
|
|
83
|
-
setOpen(false);
|
|
84
|
-
void withPending(trimmed, () => EffectEx.runPromise(manager.pull(trimmed)))();
|
|
85
|
-
}, [
|
|
86
|
-
manager,
|
|
87
|
-
withPending
|
|
88
|
-
]);
|
|
89
|
-
const filter = query.trim();
|
|
90
|
-
const suggestions = QUICK_PICKS.filter((pick) => !installed.has(pick) && (filter === "" || pick.includes(filter)));
|
|
91
|
-
const offerCustom = filter.length > 0 && !installed.has(filter) && !suggestions.includes(filter);
|
|
92
|
-
const empty = state.models.length === 0 && pulling.length === 0;
|
|
93
|
-
return /* @__PURE__ */ React.createElement(Form.Section, {
|
|
94
|
-
title: t("settings.ollama.title")
|
|
95
|
-
}, /* @__PURE__ */ React.createElement(Form.Row, {
|
|
96
|
-
label: t("settings.ollama.installed.label")
|
|
97
|
-
}, state.kind === "failed" && state.error ? (
|
|
98
|
-
// Connection-level failure has no associated model, so it shows inline as the row content.
|
|
99
|
-
/* @__PURE__ */ React.createElement("p", {
|
|
100
|
-
className: "text-sm text-error-text"
|
|
101
|
-
}, t("settings.ollama.failed.message", {
|
|
102
|
-
error: state.error
|
|
103
|
-
}))
|
|
104
|
-
) : empty ? /* @__PURE__ */ React.createElement("p", {
|
|
105
|
-
className: "text-sm text-description"
|
|
106
|
-
}, t("settings.ollama.empty.message")) : (
|
|
107
|
-
// Plain `List`/`ListItem` (non-select), with the trigger editor's "fatter" two-line row
|
|
108
|
-
// treatment: a name line plus a secondary meta line, on a surface-styled row. Rows are
|
|
109
|
-
// actioned via their trailing buttons (no selection semantics).
|
|
110
|
-
/* @__PURE__ */ React.createElement(List, {
|
|
111
|
-
variant: "unordered",
|
|
112
|
-
className: "flex flex-col gap-1 grow is-full text-left"
|
|
113
|
-
}, state.models.map((model) => {
|
|
114
|
-
const running = loaded.get(model.name);
|
|
115
|
-
const error = state.errors[model.name];
|
|
116
|
-
const size = model.size != null ? formatBytes(model.size) : void 0;
|
|
117
|
-
const loadedLabel = running ? running.sizeVram ? t("settings.ollama.loaded.vram", {
|
|
118
|
-
size: formatBytes(running.sizeVram)
|
|
119
|
-
}) : t("settings.ollama.loaded.label") : void 0;
|
|
120
|
-
return /* @__PURE__ */ React.createElement(ListItem, {
|
|
121
|
-
key: model.name,
|
|
122
|
-
className: "flex flex-col gap-0.5 rounded-sm bg-input-surface px-2 py-1.5 is-full"
|
|
123
|
-
}, /* @__PURE__ */ React.createElement("div", {
|
|
124
|
-
className: "flex items-center gap-2"
|
|
125
|
-
}, /* @__PURE__ */ React.createElement("span", {
|
|
126
|
-
className: "grow truncate font-medium"
|
|
127
|
-
}, model.name), /* @__PURE__ */ React.createElement(IconButton, {
|
|
128
|
-
icon: running ? "ph--eject--regular" : "ph--play--regular",
|
|
129
|
-
iconOnly: true,
|
|
130
|
-
label: running ? t("settings.ollama.unload.label") : t("settings.ollama.load.label"),
|
|
131
|
-
disabled: pending[model.name],
|
|
132
|
-
onClick: () => void withPending(model.name, () => EffectEx.runPromise(running ? manager.unload(model.name) : manager.load(model.name)))()
|
|
133
|
-
}), /* @__PURE__ */ React.createElement(IconButton, {
|
|
134
|
-
icon: "ph--trash--regular",
|
|
135
|
-
iconOnly: true,
|
|
136
|
-
label: t("settings.ollama.remove.label"),
|
|
137
|
-
disabled: pending[model.name],
|
|
138
|
-
onClick: () => void withPending(model.name, () => EffectEx.runPromise(manager.remove(model.name)))()
|
|
139
|
-
})), (size || loadedLabel || error) && /* @__PURE__ */ React.createElement("div", {
|
|
140
|
-
className: "flex items-center gap-2 text-sm"
|
|
141
|
-
}, size && /* @__PURE__ */ React.createElement("span", {
|
|
142
|
-
className: "text-description"
|
|
143
|
-
}, size), loadedLabel && /* @__PURE__ */ React.createElement("span", {
|
|
144
|
-
className: "text-success-text"
|
|
145
|
-
}, loadedLabel), error && /* @__PURE__ */ React.createElement("span", {
|
|
146
|
-
className: "truncate text-error-text"
|
|
147
|
-
}, shortError(error))));
|
|
148
|
-
}), pulling.map((name) => {
|
|
149
|
-
const progress = state.pulls[name];
|
|
150
|
-
const status = progress?.total ? t("settings.ollama.pulling.message", {
|
|
151
|
-
percent: percentOf(progress)
|
|
152
|
-
}) : progress?.status ?? t("settings.ollama.pulling.label");
|
|
153
|
-
return /* @__PURE__ */ React.createElement(ListItem, {
|
|
154
|
-
key: name,
|
|
155
|
-
className: "flex flex-col gap-0.5 rounded-sm bg-input-surface px-2 py-1.5 is-full"
|
|
156
|
-
}, /* @__PURE__ */ React.createElement("div", {
|
|
157
|
-
className: "flex items-center gap-2"
|
|
158
|
-
}, /* @__PURE__ */ React.createElement("span", {
|
|
159
|
-
className: "grow truncate font-medium text-description"
|
|
160
|
-
}, name), /* @__PURE__ */ React.createElement(IconButton, {
|
|
161
|
-
icon: "ph--x--regular",
|
|
162
|
-
iconOnly: true,
|
|
163
|
-
label: t("settings.ollama.cancel.label"),
|
|
164
|
-
onClick: () => void EffectEx.runPromise(manager.cancel(name))
|
|
165
|
-
})), /* @__PURE__ */ React.createElement("span", {
|
|
166
|
-
className: "text-sm text-description"
|
|
167
|
-
}, status));
|
|
168
|
-
}))
|
|
169
|
-
)), /* @__PURE__ */ React.createElement(Form.Row, {
|
|
170
|
-
label: t("settings.ollama.pull.label")
|
|
171
|
-
}, Object.entries(state.errors).filter(([name]) => !installed.has(name)).map(([name, error]) => /* @__PURE__ */ React.createElement("p", {
|
|
172
|
-
key: name,
|
|
173
|
-
className: "text-xs text-error-text"
|
|
174
|
-
}, name, ": ", shortError(error))), /* @__PURE__ */ React.createElement(Combobox.Root, {
|
|
175
|
-
open,
|
|
176
|
-
onOpenChange: setOpen,
|
|
177
|
-
value: "",
|
|
178
|
-
onValueChange: () => {
|
|
179
|
-
},
|
|
180
|
-
placeholder: t("settings.ollama.pull.placeholder")
|
|
181
|
-
}, /* @__PURE__ */ React.createElement(Combobox.Trigger, {
|
|
182
|
-
classNames: "is-full"
|
|
183
|
-
}), /* @__PURE__ */ React.createElement(Combobox.Portal, null, /* @__PURE__ */ React.createElement(Combobox.Content, null, /* @__PURE__ */ React.createElement(Combobox.Input, {
|
|
184
|
-
value: query,
|
|
185
|
-
onValueChange: setQuery,
|
|
186
|
-
placeholder: t("settings.ollama.pull.placeholder"),
|
|
187
|
-
onKeyDown: (event) => {
|
|
188
|
-
if (event.key === "Enter" && filter.length > 0) {
|
|
189
|
-
handlePull(filter);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
}), /* @__PURE__ */ React.createElement(Combobox.List, null, offerCustom && /* @__PURE__ */ React.createElement(Combobox.Item, {
|
|
193
|
-
value: filter,
|
|
194
|
-
label: t("settings.ollama.pull-custom.label", {
|
|
195
|
-
name: filter
|
|
196
|
-
}),
|
|
197
|
-
icon: "ph--download-simple--regular",
|
|
198
|
-
onSelect: () => handlePull(filter)
|
|
199
|
-
}), suggestions.map((pick) => /* @__PURE__ */ React.createElement(Combobox.Item, {
|
|
200
|
-
key: pick,
|
|
201
|
-
value: pick,
|
|
202
|
-
label: pick,
|
|
203
|
-
onSelect: () => handlePull(pick)
|
|
204
|
-
}))), /* @__PURE__ */ React.createElement(Combobox.Arrow, null))))));
|
|
205
|
-
};
|
|
206
|
-
var shortError = (error) => {
|
|
207
|
-
const head = error.split(/\s*\(checked:/)[0].trim();
|
|
208
|
-
return head.length > 160 ? `${head.slice(0, 160)}\u2026` : head;
|
|
209
|
-
};
|
|
210
|
-
var percentOf = (progress) => progress && progress.total && progress.total > 0 ? Math.round((progress.completed ?? 0) / progress.total * 100) : 0;
|
|
211
|
-
var UNITS = [
|
|
212
|
-
"B",
|
|
213
|
-
"KB",
|
|
214
|
-
"MB",
|
|
215
|
-
"GB",
|
|
216
|
-
"TB"
|
|
217
|
-
];
|
|
218
|
-
var formatBytes = (bytes) => {
|
|
219
|
-
let value = bytes;
|
|
220
|
-
let unit = 0;
|
|
221
|
-
while (value >= 1024 && unit < UNITS.length - 1) {
|
|
222
|
-
value /= 1024;
|
|
223
|
-
unit += 1;
|
|
224
|
-
}
|
|
225
|
-
return `${value.toFixed(unit === 0 ? 0 : 1)} ${UNITS[unit]}`;
|
|
226
|
-
};
|
|
227
|
-
|
|
228
|
-
// src/containers/AssistantSettings/AssistantSettings.tsx
|
|
229
|
-
var presetOptions = (provider, installed) => presetsForProvider(provider).filter((preset) => !installed || installed.has(preset.backend)).map((preset) => ({
|
|
230
|
-
value: preset.model,
|
|
231
|
-
label: preset.label
|
|
232
|
-
}));
|
|
233
|
-
var AssistantSettings = ({ settings, onSettingsChange }) => {
|
|
234
|
-
const { t } = useTranslation2(meta2.profile.key);
|
|
235
|
-
const ollamaManager = useOptionalCapability2(AssistantCapabilities2.OllamaManager);
|
|
236
|
-
const localProvider = ollamaManager ? Provider2.builtIn : Provider2.ollama;
|
|
237
|
-
const localProviderKey = ollamaManager ? "built-in" : "ollama";
|
|
238
|
-
const localModels = useAtomValue2(ollamaManager?.state ?? Ollama.emptyState);
|
|
239
|
-
const installed = useMemo(() => new Set(localModels.models.map((model) => model.name)), [
|
|
240
|
-
localModels
|
|
241
|
-
]);
|
|
242
|
-
const values = useMemo(() => ({
|
|
243
|
-
...settings,
|
|
244
|
-
modelProvider: resolveProvider(settings.modelProvider, !!ollamaManager)
|
|
245
|
-
}), [
|
|
246
|
-
settings,
|
|
247
|
-
ollamaManager
|
|
248
|
-
]);
|
|
249
|
-
const fieldMap = useMemo(() => ({
|
|
250
|
-
// `defaultLabel: null` drops the sentinel "Default" option — a provider is always concrete.
|
|
251
|
-
"modelProvider": createSelectField({
|
|
252
|
-
defaultLabel: null,
|
|
253
|
-
options: [
|
|
254
|
-
{
|
|
255
|
-
value: Provider2.edge.id,
|
|
256
|
-
label: t("settings.provider.edge.label")
|
|
257
|
-
},
|
|
258
|
-
{
|
|
259
|
-
value: localProvider.id,
|
|
260
|
-
label: t(`settings.provider.${localProviderKey}.label`)
|
|
261
|
-
},
|
|
262
|
-
{
|
|
263
|
-
value: Provider2.lmStudio.id,
|
|
264
|
-
label: t("settings.provider.lmstudio.label")
|
|
265
|
-
}
|
|
266
|
-
]
|
|
267
|
-
}),
|
|
268
|
-
"modelDefaults.edge": createSelectField({
|
|
269
|
-
options: presetOptions(Provider2.edge.id)
|
|
270
|
-
}),
|
|
271
|
-
// `built-in` and `ollama` share the `ollama` default key; the managed sidecar restricts to installed.
|
|
272
|
-
"modelDefaults.ollama": createSelectField({
|
|
273
|
-
options: presetOptions(localProvider.id, ollamaManager ? installed : void 0)
|
|
274
|
-
}),
|
|
275
|
-
"modelDefaults.lmstudio": createSelectField({
|
|
276
|
-
options: presetOptions(Provider2.lmStudio.id)
|
|
277
|
-
})
|
|
278
|
-
}), [
|
|
279
|
-
t,
|
|
280
|
-
localProvider,
|
|
281
|
-
localProviderKey,
|
|
282
|
-
ollamaManager,
|
|
283
|
-
installed
|
|
284
|
-
]);
|
|
285
|
-
return /* @__PURE__ */ React2.createElement(Form2.Root, {
|
|
286
|
-
variant: "settings",
|
|
287
|
-
schema: Assistant.Settings,
|
|
288
|
-
readonly: !onSettingsChange,
|
|
289
|
-
values,
|
|
290
|
-
onValuesChanged: (values2) => onSettingsChange?.(() => values2)
|
|
291
|
-
}, /* @__PURE__ */ React2.createElement(Form2.Viewport, {
|
|
292
|
-
scroll: true
|
|
293
|
-
}, /* @__PURE__ */ React2.createElement(Form2.Content, null, /* @__PURE__ */ React2.createElement(Form2.Section, {
|
|
294
|
-
title: meta2.profile.name ?? meta2.profile.key
|
|
295
|
-
}, /* @__PURE__ */ React2.createElement(Form2.FieldSet, {
|
|
296
|
-
fieldMap
|
|
297
|
-
})), /* @__PURE__ */ React2.createElement(OllamaModels, null))));
|
|
298
|
-
};
|
|
299
|
-
export {
|
|
300
|
-
AssistantSettings as default
|
|
301
|
-
};
|
|
302
|
-
//# sourceMappingURL=AssistantSettings-3N5M5VCN.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/containers/AssistantSettings/AssistantSettings.tsx", "../../../src/containers/AssistantSettings/OllamaModels.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport React, { useMemo } from 'react';\n\nimport { Provider } from '@dxos/ai';\nimport { useOptionalCapability } from '@dxos/app-framework/ui';\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { type DXN } from '@dxos/keys';\nimport { useTranslation } from '@dxos/react-ui';\nimport { Form, type FormFieldMap, createSelectField } from '@dxos/react-ui-form';\n\nimport { meta } from '#meta';\nimport { Assistant, AssistantCapabilities, Ollama } from '#types';\n\nimport { presetsForProvider, resolveProvider } from '../../processor';\nimport { OllamaModels } from './OllamaModels';\n\nexport type AssistantSettingsProps = AppSurface.SettingsProps<Assistant.Settings>;\n\n// The per-provider model-default options must match the chat picker (usePresets): the catalog models\n// served by the provider, restricted to installed models when `installed` is supplied (local sidecar).\nconst presetOptions = (provider: DXN.DXN, installed?: ReadonlySet<string>) =>\n presetsForProvider(provider)\n .filter((preset) => !installed || installed.has(preset.backend))\n .map((preset) => ({ value: preset.model, label: preset.label }));\n\nexport const AssistantSettings = ({ settings, onSettingsChange }: AssistantSettingsProps) => {\n const { t } = useTranslation(meta.profile.key);\n\n // The Ollama manager is the bundled sidecar (desktop only). Its presence selects the local\n // provider: the managed `built-in` vs. an external `ollama` server.\n const ollamaManager = useOptionalCapability(AssistantCapabilities.OllamaManager);\n const localProvider = ollamaManager ? Provider.builtIn : Provider.ollama;\n const localProviderKey = ollamaManager ? 'built-in' : 'ollama';\n\n // Installed models reported by the bundled sidecar; restricts the local default to present models.\n const localModels = useAtomValue(ollamaManager?.state ?? Ollama.emptyState);\n const installed = useMemo(() => new Set(localModels.models.map((model) => model.name)), [localModels]);\n\n // Reconcile a stored provider with the runtime (`ollama` → `built-in` on desktop) so the\n // dropdown shows a concrete, available selection rather than blank.\n const values = useMemo(\n () => ({ ...settings, modelProvider: resolveProvider(settings.modelProvider, !!ollamaManager) }),\n [settings, ollamaManager],\n );\n\n // Form `fieldMap` is keyed by dotted JSON path, so nested struct leaves are addressed directly.\n const fieldMap = useMemo<FormFieldMap>(\n () => ({\n // `defaultLabel: null` drops the sentinel \"Default\" option — a provider is always concrete.\n 'modelProvider': createSelectField({\n defaultLabel: null,\n options: [\n { value: Provider.edge.id, label: t('settings.provider.edge.label') },\n { value: localProvider.id, label: t(`settings.provider.${localProviderKey}.label`) },\n { value: Provider.lmStudio.id, label: t('settings.provider.lmstudio.label') },\n ],\n }),\n 'modelDefaults.edge': createSelectField({ options: presetOptions(Provider.edge.id) }),\n // `built-in` and `ollama` share the `ollama` default key; the managed sidecar restricts to installed.\n 'modelDefaults.ollama': createSelectField({\n options: presetOptions(localProvider.id, ollamaManager ? installed : undefined),\n }),\n 'modelDefaults.lmstudio': createSelectField({ options: presetOptions(Provider.lmStudio.id) }),\n }),\n [t, localProvider, localProviderKey, ollamaManager, installed],\n );\n\n return (\n <Form.Root\n variant='settings'\n schema={Assistant.Settings}\n readonly={!onSettingsChange}\n values={values}\n onValuesChanged={(values) => onSettingsChange?.(() => values)}\n >\n <Form.Viewport scroll>\n <Form.Content>\n <Form.Section title={meta.profile.name ?? meta.profile.key}>\n <Form.FieldSet fieldMap={fieldMap} />\n </Form.Section>\n <OllamaModels />\n </Form.Content>\n </Form.Viewport>\n </Form.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { Model, Provider } from '@dxos/ai';\nimport { useOptionalCapability } from '@dxos/app-framework/ui';\nimport { EffectEx } from '@dxos/effect';\nimport { List, ListItem } from '@dxos/react-list';\nimport { IconButton, useTranslation } from '@dxos/react-ui';\nimport { Form } from '@dxos/react-ui-form';\nimport { Combobox } from '@dxos/react-ui-list';\n\nimport { meta } from '#meta';\nimport { AssistantCapabilities, type Ollama } from '#types';\n\n/** Quick-pick model names (Ollama pull tags) sourced from the curated catalog. */\nconst QUICK_PICKS = Model.forProvider(Provider.ollama.id).map((model) => model.backend);\n\n/** Poll interval for the loaded-into-memory set while the settings panel is open. */\nconst LOADED_POLL_INTERVAL = 3_000;\n\n/**\n * Manage locally-installed Ollama models. The {@link AssistantCapabilities.OllamaManager}\n * capability is only contributed by the native (desktop) runtime, so this renders nothing in the\n * browser/mobile. Split from the section body so hooks are never called conditionally.\n */\nexport const OllamaModels = () => {\n const manager = useOptionalCapability(AssistantCapabilities.OllamaManager);\n if (!manager) {\n return null;\n }\n\n return <OllamaModelsSection manager={manager} />;\n};\n\nexport const OllamaModelsSection = ({ manager }: { manager: Ollama.Manager }) => {\n const { t } = useTranslation(meta.profile.key);\n // Explicit subscription: the list and badges must re-render as pulls/installs/loads land.\n const state = useAtomValue(manager.state);\n const [query, setQuery] = useState('');\n const [open, setOpen] = useState(false);\n // UI-level gate keyed by model name, guaranteeing a visible busy state across the click handler.\n const [pending, setPending] = useState<Record<string, boolean>>({});\n\n // Ensure the sidecar is up and list installed models on mount.\n useEffect(() => {\n void EffectEx.runPromise(manager.refresh);\n }, [manager]);\n\n // Poll the loaded-into-memory set so the panel reflects which model is resident in real time.\n useEffect(() => {\n const interval = setInterval(() => void EffectEx.runPromise(manager.refreshLoaded), LOADED_POLL_INTERVAL);\n return () => clearInterval(interval);\n }, [manager]);\n\n const installed = new Set(state.models.map((model) => model.name));\n const loaded = new Map(state.loaded.map((model) => [model.name, model]));\n const pulling = Object.keys(state.pulls).filter((name) => !installed.has(name));\n\n const withPending = useCallback(\n (key: string, action: () => Promise<void>) => async () => {\n setPending((prev) => ({ ...prev, [key]: true }));\n try {\n await action();\n } finally {\n setPending((prev) => ({ ...prev, [key]: false }));\n }\n },\n [],\n );\n\n const handlePull = useCallback(\n (target: string) => {\n const trimmed = target.trim();\n if (trimmed.length === 0) {\n return;\n }\n setQuery('');\n setOpen(false);\n void withPending(trimmed, () => EffectEx.runPromise(manager.pull(trimmed)))();\n },\n [manager, withPending],\n );\n\n // Caller-driven filtering: curated picks not yet installed, matching the typed query.\n const filter = query.trim();\n const suggestions = QUICK_PICKS.filter((pick) => !installed.has(pick) && (filter === '' || pick.includes(filter)));\n const offerCustom = filter.length > 0 && !installed.has(filter) && !suggestions.includes(filter);\n const empty = state.models.length === 0 && pulling.length === 0;\n\n return (\n <Form.Section title={t('settings.ollama.title')}>\n <Form.Row label={t('settings.ollama.installed.label')}>\n {state.kind === 'failed' && state.error ? (\n // Connection-level failure has no associated model, so it shows inline as the row content.\n <p className='text-sm text-error-text'>{t('settings.ollama.failed.message', { error: state.error })}</p>\n ) : empty ? (\n <p className='text-sm text-description'>{t('settings.ollama.empty.message')}</p>\n ) : (\n // Plain `List`/`ListItem` (non-select), with the trigger editor's \"fatter\" two-line row\n // treatment: a name line plus a secondary meta line, on a surface-styled row. Rows are\n // actioned via their trailing buttons (no selection semantics).\n <List variant='unordered' className='flex flex-col gap-1 grow is-full text-left'>\n {state.models.map((model) => {\n const running = loaded.get(model.name);\n const error = state.errors[model.name];\n const size = model.size != null ? formatBytes(model.size) : undefined;\n const loadedLabel = running\n ? running.sizeVram\n ? t('settings.ollama.loaded.vram', { size: formatBytes(running.sizeVram) })\n : t('settings.ollama.loaded.label')\n : undefined;\n return (\n <ListItem\n key={model.name}\n className='flex flex-col gap-0.5 rounded-sm bg-input-surface px-2 py-1.5 is-full'\n >\n <div className='flex items-center gap-2'>\n <span className='grow truncate font-medium'>{model.name}</span>\n <IconButton\n icon={running ? 'ph--eject--regular' : 'ph--play--regular'}\n iconOnly\n label={running ? t('settings.ollama.unload.label') : t('settings.ollama.load.label')}\n disabled={pending[model.name]}\n onClick={() =>\n void withPending(model.name, () =>\n EffectEx.runPromise(running ? manager.unload(model.name) : manager.load(model.name)),\n )()\n }\n />\n <IconButton\n icon='ph--trash--regular'\n iconOnly\n label={t('settings.ollama.remove.label')}\n disabled={pending[model.name]}\n onClick={() =>\n void withPending(model.name, () => EffectEx.runPromise(manager.remove(model.name)))()\n }\n />\n </div>\n {(size || loadedLabel || error) && (\n <div className='flex items-center gap-2 text-sm'>\n {size && <span className='text-description'>{size}</span>}\n {loadedLabel && <span className='text-success-text'>{loadedLabel}</span>}\n {error && <span className='truncate text-error-text'>{shortError(error)}</span>}\n </div>\n )}\n </ListItem>\n );\n })}\n {pulling.map((name) => {\n const progress = state.pulls[name];\n const status = progress?.total\n ? t('settings.ollama.pulling.message', { percent: percentOf(progress) })\n : (progress?.status ?? t('settings.ollama.pulling.label'));\n return (\n <ListItem key={name} className='flex flex-col gap-0.5 rounded-sm bg-input-surface px-2 py-1.5 is-full'>\n <div className='flex items-center gap-2'>\n <span className='grow truncate font-medium text-description'>{name}</span>\n <IconButton\n icon='ph--x--regular'\n iconOnly\n label={t('settings.ollama.cancel.label')}\n onClick={() => void EffectEx.runPromise(manager.cancel(name))}\n />\n </div>\n <span className='text-sm text-description'>{status}</span>\n </ListItem>\n );\n })}\n </List>\n )}\n </Form.Row>\n\n <Form.Row label={t('settings.ollama.pull.label')}>\n {/* Pull failures for not-yet-installed models surface here (no model row to attach to). */}\n {Object.entries(state.errors)\n .filter(([name]) => !installed.has(name))\n .map(([name, error]) => (\n <p key={name} className='text-xs text-error-text'>\n {name}: {shortError(error)}\n </p>\n ))}\n {/* Root value is held empty so the trigger always shows the placeholder; the live text is\n the separate `query` driving the input and suggestion filter. */}\n <Combobox.Root\n open={open}\n onOpenChange={setOpen}\n value=''\n onValueChange={() => {}}\n placeholder={t('settings.ollama.pull.placeholder')}\n >\n <Combobox.Trigger classNames='is-full' />\n <Combobox.Portal>\n <Combobox.Content>\n <Combobox.Input\n value={query}\n onValueChange={setQuery}\n placeholder={t('settings.ollama.pull.placeholder')}\n onKeyDown={(event) => {\n if (event.key === 'Enter' && filter.length > 0) {\n handlePull(filter);\n }\n }}\n />\n <Combobox.List>\n {offerCustom && (\n <Combobox.Item\n value={filter}\n label={t('settings.ollama.pull-custom.label', { name: filter })}\n icon='ph--download-simple--regular'\n onSelect={() => handlePull(filter)}\n />\n )}\n {suggestions.map((pick) => (\n <Combobox.Item key={pick} value={pick} label={pick} onSelect={() => handlePull(pick)} />\n ))}\n </Combobox.List>\n <Combobox.Arrow />\n </Combobox.Content>\n </Combobox.Portal>\n </Combobox.Root>\n </Form.Row>\n </Form.Section>\n );\n};\n\n/**\n * Condense a verbose service error for inline display: drop Ollama's \"(checked: <paths>)\" path dump\n * and cap the length. The full message is still logged to the console.\n */\nconst shortError = (error: string): string => {\n const head = error.split(/\\s*\\(checked:/)[0].trim();\n return head.length > 160 ? `${head.slice(0, 160)}…` : head;\n};\n\n/** Percent complete for an in-flight pull, or 0 when totals are not yet known. */\nconst percentOf = (progress: Ollama.ModelsState['pulls'][string] | undefined): number =>\n progress && progress.total && progress.total > 0 ? Math.round(((progress.completed ?? 0) / progress.total) * 100) : 0;\n\nconst UNITS = ['B', 'KB', 'MB', 'GB', 'TB'];\n\n/** Human-readable byte size (binary units). */\nconst formatBytes = (bytes: number): string => {\n let value = bytes;\n let unit = 0;\n while (value >= 1024 && unit < UNITS.length - 1) {\n value /= 1024;\n unit += 1;\n }\n return `${value.toFixed(unit === 0 ? 0 : 1)} ${UNITS[unit]}`;\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["useAtomValue", "React", "useMemo", "Provider", "useOptionalCapability", "useTranslation", "Form", "createSelectField", "meta", "Assistant", "AssistantCapabilities", "Ollama", "useAtomValue", "React", "useCallback", "useEffect", "useState", "Model", "Provider", "useOptionalCapability", "EffectEx", "List", "ListItem", "IconButton", "useTranslation", "Form", "Combobox", "meta", "AssistantCapabilities", "QUICK_PICKS", "forProvider", "ollama", "id", "map", "model", "backend", "LOADED_POLL_INTERVAL", "OllamaModels", "manager", "OllamaManager", "OllamaModelsSection", "t", "profile", "key", "state", "query", "setQuery", "open", "setOpen", "pending", "setPending", "runPromise", "refresh", "interval", "setInterval", "refreshLoaded", "clearInterval", "installed", "Set", "models", "name", "loaded", "Map", "pulling", "Object", "keys", "pulls", "filter", "has", "withPending", "action", "prev", "handlePull", "target", "trimmed", "trim", "length", "pull", "suggestions", "pick", "includes", "offerCustom", "empty", "Section", "title", "Row", "label", "kind", "error", "p", "className", "variant", "running", "get", "errors", "size", "formatBytes", "undefined", "loadedLabel", "sizeVram", "div", "span", "icon", "iconOnly", "disabled", "onClick", "unload", "load", "remove", "shortError", "progress", "status", "total", "percent", "percentOf", "cancel", "entries", "Root", "onOpenChange", "value", "onValueChange", "placeholder", "Trigger", "classNames", "Portal", "Content", "Input", "onKeyDown", "event", "Item", "onSelect", "Arrow", "head", "split", "slice", "Math", "round", "completed", "UNITS", "bytes", "unit", "toFixed", "presetOptions", "provider", "installed", "presetsForProvider", "filter", "preset", "has", "backend", "map", "value", "model", "label", "AssistantSettings", "settings", "onSettingsChange", "t", "useTranslation", "meta", "profile", "key", "ollamaManager", "useOptionalCapability", "AssistantCapabilities", "OllamaManager", "localProvider", "Provider", "builtIn", "ollama", "localProviderKey", "localModels", "useAtomValue", "state", "Ollama", "emptyState", "useMemo", "Set", "models", "name", "values", "modelProvider", "resolveProvider", "fieldMap", "createSelectField", "defaultLabel", "options", "edge", "id", "lmStudio", "undefined", "React", "Form", "Root", "variant", "schema", "Assistant", "Settings", "readonly", "onValuesChanged", "Viewport", "scroll", "Content", "Section", "title", "FieldSet", "OllamaModels"]
|
|
7
|
-
}
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ChatArticle
|
|
3
|
-
} from "./chunk-UPKFUZ6V.mjs";
|
|
4
|
-
import "./chunk-J5LGTIGS.mjs";
|
|
5
|
-
|
|
6
|
-
// src/containers/ChatCompanion/ChatCompanion.tsx
|
|
7
|
-
import * as Option from "effect/Option";
|
|
8
|
-
import React, { forwardRef, useCallback, useMemo } from "react";
|
|
9
|
-
import { useOperationInvoker } from "@dxos/app-framework/ui";
|
|
10
|
-
import { AppAnnotation } from "@dxos/app-toolkit";
|
|
11
|
-
import { Chat } from "@dxos/assistant-toolkit";
|
|
12
|
-
import { getSpace } from "@dxos/client/echo";
|
|
13
|
-
import { Skill } from "@dxos/compute";
|
|
14
|
-
import { Entity, Filter, Obj, Ref, Type } from "@dxos/echo";
|
|
15
|
-
import { SpaceOperation } from "@dxos/plugin-space";
|
|
16
|
-
import { useObject, useQuery, useRegistry } from "@dxos/react-client/echo";
|
|
17
|
-
import { useAsyncEffect } from "@dxos/react-ui";
|
|
18
|
-
import { useContextBinder } from "#hooks";
|
|
19
|
-
import { AssistantOperation } from "#types";
|
|
20
|
-
var ChatCompanion = /* @__PURE__ */ forwardRef(({ role = "article", subject: chat, companionTo, attendableId }, forwardedRef) => {
|
|
21
|
-
const { invokePromise } = useOperationInvoker();
|
|
22
|
-
const space = getSpace(companionTo);
|
|
23
|
-
useSkills({
|
|
24
|
-
subject: chat,
|
|
25
|
-
companionTo
|
|
26
|
-
});
|
|
27
|
-
const handleSubmit = useCallback(async () => {
|
|
28
|
-
if (!space || !chat || Obj.getDatabase(chat)) {
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
await invokePromise(SpaceOperation.AddObject, {
|
|
32
|
-
object: chat,
|
|
33
|
-
target: space.db
|
|
34
|
-
});
|
|
35
|
-
await invokePromise(SpaceOperation.AddRelation, {
|
|
36
|
-
db: space.db,
|
|
37
|
-
schema: Chat.CompanionTo,
|
|
38
|
-
source: chat,
|
|
39
|
-
target: companionTo
|
|
40
|
-
});
|
|
41
|
-
await invokePromise(AssistantOperation.SetCurrentChat, {
|
|
42
|
-
companionTo,
|
|
43
|
-
chat
|
|
44
|
-
});
|
|
45
|
-
await space.db.flush();
|
|
46
|
-
}, [
|
|
47
|
-
space,
|
|
48
|
-
chat,
|
|
49
|
-
companionTo,
|
|
50
|
-
invokePromise
|
|
51
|
-
]);
|
|
52
|
-
return /* @__PURE__ */ React.createElement(ChatArticle, {
|
|
53
|
-
role,
|
|
54
|
-
subject: chat,
|
|
55
|
-
attendableId,
|
|
56
|
-
companionTo,
|
|
57
|
-
onSubmit: handleSubmit,
|
|
58
|
-
ref: forwardedRef
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
var useSkills = ({ subject: chat, companionTo }) => {
|
|
62
|
-
const registry = useRegistry();
|
|
63
|
-
const space = getSpace(companionTo);
|
|
64
|
-
const [feedSnapshot] = useObject(chat?.feed);
|
|
65
|
-
const feedTarget = Obj.getReactiveOrUndefined(feedSnapshot);
|
|
66
|
-
const binder = useContextBinder(space, feedTarget);
|
|
67
|
-
const skillKeys = useMemo(() => {
|
|
68
|
-
const schema = companionTo ? Obj.getType(companionTo) : void 0;
|
|
69
|
-
if (!schema) {
|
|
70
|
-
return [];
|
|
71
|
-
}
|
|
72
|
-
return Option.getOrElse(() => [])(AppAnnotation.SkillsAnnotation.get(Type.getSchema(schema)));
|
|
73
|
-
}, [
|
|
74
|
-
companionTo
|
|
75
|
-
]);
|
|
76
|
-
const existingSkills = useQuery(space?.db, Filter.type(Skill.Skill));
|
|
77
|
-
const pluginSkills = useMemo(() => existingSkills.filter((skill) => {
|
|
78
|
-
const key = Obj.getMeta(skill).key;
|
|
79
|
-
return key !== void 0 && skillKeys.includes(key);
|
|
80
|
-
}), [
|
|
81
|
-
existingSkills,
|
|
82
|
-
skillKeys
|
|
83
|
-
]);
|
|
84
|
-
useAsyncEffect(async () => {
|
|
85
|
-
if (!binder?.isOpen) {
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
if (skillKeys.length > 0) {
|
|
89
|
-
const registryKeys = skillKeys.filter((key) => {
|
|
90
|
-
const candidate = registry.list().find((e) => Entity.getMeta(e)?.key === key);
|
|
91
|
-
return candidate != null && Obj.instanceOf(Skill.Skill, candidate);
|
|
92
|
-
});
|
|
93
|
-
const dbForks = pluginSkills.filter((bp) => !registryKeys.includes(Obj.getMeta(bp).key ?? ""));
|
|
94
|
-
if (registryKeys.length > 0) {
|
|
95
|
-
await binder.bind({
|
|
96
|
-
skills: registryKeys.map((key) => Ref.fromURI(Skill.registryURI(key)))
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
if (dbForks.length > 0) {
|
|
100
|
-
await binder.bind({
|
|
101
|
-
skills: dbForks.map((skill) => Ref.make(skill))
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
if (Obj.instanceOf(Skill.Skill, companionTo)) {
|
|
106
|
-
await binder.bind({
|
|
107
|
-
skills: [
|
|
108
|
-
Ref.make(companionTo)
|
|
109
|
-
]
|
|
110
|
-
});
|
|
111
|
-
} else {
|
|
112
|
-
await binder.bind({
|
|
113
|
-
objects: [
|
|
114
|
-
Ref.make(companionTo)
|
|
115
|
-
]
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
}, [
|
|
119
|
-
binder,
|
|
120
|
-
skillKeys,
|
|
121
|
-
pluginSkills,
|
|
122
|
-
companionTo
|
|
123
|
-
]);
|
|
124
|
-
};
|
|
125
|
-
export {
|
|
126
|
-
ChatCompanion as default
|
|
127
|
-
};
|
|
128
|
-
//# sourceMappingURL=ChatCompanion-GIFJRY6I.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/containers/ChatCompanion/ChatCompanion.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Option from 'effect/Option';\nimport React, { forwardRef, useCallback, useMemo } from 'react';\n\nimport { useOperationInvoker } from '@dxos/app-framework/ui';\nimport { AppAnnotation } from '@dxos/app-toolkit';\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { Chat } from '@dxos/assistant-toolkit';\nimport { getSpace } from '@dxos/client/echo';\nimport { Skill } from '@dxos/compute';\nimport { Entity, Filter, Obj, Ref, Type } from '@dxos/echo';\nimport { SpaceOperation } from '@dxos/plugin-space';\nimport { useObject, useQuery, useRegistry } from '@dxos/react-client/echo';\nimport { useAsyncEffect } from '@dxos/react-ui';\n\nimport { useContextBinder } from '#hooks';\nimport { AssistantOperation } from '#types';\n\nimport ChatArticle from '../ChatArticle';\n\nexport type ChatCompanionProps = AppSurface.ArticleProps<Chat.Chat, {}, Obj.Unknown>;\n\nexport const ChatCompanion = forwardRef<HTMLDivElement, ChatCompanionProps>(\n ({ role = 'article', subject: chat, companionTo, attendableId }, forwardedRef) => {\n const { invokePromise } = useOperationInvoker();\n const space = getSpace(companionTo);\n useSkills({ subject: chat, companionTo });\n\n // Persist (and flush) a transient chat before the first request so the agent can resolve\n // the now-durable conversation feed; subsequent submits are a no-op once persisted.\n const handleSubmit = useCallback(async () => {\n if (!space || !chat || Obj.getDatabase(chat)) {\n return;\n }\n\n await invokePromise(SpaceOperation.AddObject, {\n object: chat,\n target: space.db,\n });\n await invokePromise(SpaceOperation.AddRelation, {\n db: space.db,\n schema: Chat.CompanionTo,\n source: chat,\n target: companionTo,\n });\n await invokePromise(AssistantOperation.SetCurrentChat, {\n companionTo,\n chat,\n });\n await space.db.flush();\n }, [space, chat, companionTo, invokePromise]);\n\n return (\n <ChatArticle\n role={role}\n subject={chat}\n attendableId={attendableId}\n companionTo={companionTo}\n onSubmit={handleSubmit}\n ref={forwardedRef}\n />\n );\n },\n);\n\n/**\n * Bind skills to the context.\n */\n// TODO(burdon): Why is this only in the companion?\nconst useSkills = ({ subject: chat, companionTo }: Pick<ChatCompanionProps, 'subject' | 'companionTo'>) => {\n const registry = useRegistry();\n const space = getSpace(companionTo);\n const [feedSnapshot] = useObject(chat?.feed);\n const feedTarget = Obj.getReactiveOrUndefined(feedSnapshot);\n const binder = useContextBinder(space, feedTarget);\n\n const skillKeys = useMemo(() => {\n const schema = companionTo ? Obj.getType(companionTo) : undefined;\n if (!schema) {\n return [] as string[];\n }\n\n return Option.getOrElse(() => [] as string[])(AppAnnotation.SkillsAnnotation.get(Type.getSchema(schema)));\n }, [companionTo]);\n\n const existingSkills = useQuery(space?.db, Filter.type(Skill.Skill));\n const pluginSkills = useMemo(\n () =>\n existingSkills.filter((skill) => {\n const key = Obj.getMeta(skill).key;\n return key !== undefined && skillKeys.includes(key);\n }),\n [existingSkills, skillKeys],\n );\n\n useAsyncEffect(async () => {\n if (!binder?.isOpen) {\n return;\n }\n\n // Bind annotated skills: use key URI for registry skills (no DB clone needed).\n if (skillKeys.length > 0) {\n const registryKeys = skillKeys.filter((key) => {\n const candidate = registry.list().find((e) => Entity.getMeta(e)?.key === key);\n return candidate != null && Obj.instanceOf(Skill.Skill, candidate);\n });\n\n // DB-forked skills (in space but not in registry).\n const dbForks = pluginSkills.filter((bp) => !registryKeys.includes(Obj.getMeta(bp).key ?? ''));\n if (registryKeys.length > 0) {\n await binder.bind({ skills: registryKeys.map((key) => Ref.fromURI(Skill.registryURI(key))) });\n }\n if (dbForks.length > 0) {\n await binder.bind({ skills: dbForks.map((skill) => Ref.make(skill)) });\n }\n }\n\n if (Obj.instanceOf(Skill.Skill, companionTo)) {\n await binder.bind({ skills: [Ref.make(companionTo)] });\n } else {\n await binder.bind({ objects: [Ref.make(companionTo)] });\n }\n }, [binder, skillKeys, pluginSkills, companionTo]);\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Option", "React", "forwardRef", "useCallback", "useMemo", "useOperationInvoker", "AppAnnotation", "Chat", "getSpace", "Skill", "Entity", "Filter", "Obj", "Ref", "Type", "SpaceOperation", "useObject", "useQuery", "useRegistry", "useAsyncEffect", "useContextBinder", "AssistantOperation", "ChatCompanion", "forwardRef", "role", "subject", "chat", "companionTo", "attendableId", "forwardedRef", "invokePromise", "useOperationInvoker", "space", "getSpace", "useSkills", "handleSubmit", "useCallback", "Obj", "getDatabase", "SpaceOperation", "AddObject", "object", "target", "db", "AddRelation", "schema", "Chat", "CompanionTo", "source", "AssistantOperation", "SetCurrentChat", "flush", "ChatArticle", "onSubmit", "ref", "registry", "useRegistry", "feedSnapshot", "useObject", "feed", "feedTarget", "getReactiveOrUndefined", "binder", "useContextBinder", "skillKeys", "useMemo", "getType", "undefined", "getOrElse", "AppAnnotation", "SkillsAnnotation", "get", "Type", "getSchema", "existingSkills", "useQuery", "Filter", "type", "Skill", "pluginSkills", "filter", "skill", "key", "getMeta", "includes", "useAsyncEffect", "isOpen", "length", "registryKeys", "candidate", "list", "find", "e", "Entity", "instanceOf", "dbForks", "bp", "bind", "skills", "map", "Ref", "fromURI", "registryURI", "make", "objects"]
|
|
7
|
-
}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import "./chunk-J5LGTIGS.mjs";
|
|
2
|
-
|
|
3
|
-
// src/containers/ChatDialog/ChatDialog.tsx
|
|
4
|
-
import React, { useCallback, useState } from "react";
|
|
5
|
-
import { Provider } from "@dxos/ai";
|
|
6
|
-
import { useAtomCapability } from "@dxos/app-framework/ui";
|
|
7
|
-
import { Obj } from "@dxos/echo";
|
|
8
|
-
import { useObject, useRegistry } from "@dxos/react-client/echo";
|
|
9
|
-
import { useTranslation } from "@dxos/react-ui";
|
|
10
|
-
import { ChatDialog as NaturalChatDialog } from "@dxos/react-ui-chat";
|
|
11
|
-
import { Chat } from "#components";
|
|
12
|
-
import { useChatProcessor, useChatServices, usePresets } from "#hooks";
|
|
13
|
-
import { meta } from "#meta";
|
|
14
|
-
import { AssistantCapabilities } from "#types";
|
|
15
|
-
var ChatDialog = ({ chat }) => {
|
|
16
|
-
const { t } = useTranslation(meta.profile.key);
|
|
17
|
-
const db = chat && Obj.getDatabase(chat);
|
|
18
|
-
const settings = useAtomCapability(AssistantCapabilities.Settings);
|
|
19
|
-
const runtime = useChatServices({
|
|
20
|
-
id: db?.spaceId
|
|
21
|
-
});
|
|
22
|
-
const { preset, ...chatProps } = usePresets(settings);
|
|
23
|
-
const online = preset?.provider === Provider.edge.id;
|
|
24
|
-
const registry = useRegistry();
|
|
25
|
-
const processor = useChatProcessor({
|
|
26
|
-
chat,
|
|
27
|
-
preset,
|
|
28
|
-
runtime,
|
|
29
|
-
registry,
|
|
30
|
-
settings
|
|
31
|
-
});
|
|
32
|
-
const [chatViewType] = useObject(chat, "viewType");
|
|
33
|
-
const [open, setOpen] = useState(true);
|
|
34
|
-
const [expanded, setExpanded] = useState(false);
|
|
35
|
-
const handleEvent = useCallback((event) => {
|
|
36
|
-
switch (event.type) {
|
|
37
|
-
case "submit":
|
|
38
|
-
case "thread-open":
|
|
39
|
-
setOpen(true);
|
|
40
|
-
setExpanded(true);
|
|
41
|
-
break;
|
|
42
|
-
case "thread-close":
|
|
43
|
-
setOpen(false);
|
|
44
|
-
break;
|
|
45
|
-
}
|
|
46
|
-
}, []);
|
|
47
|
-
if (!chat || !processor) {
|
|
48
|
-
return null;
|
|
49
|
-
}
|
|
50
|
-
return /* @__PURE__ */ React.createElement(Chat.Root, {
|
|
51
|
-
chat,
|
|
52
|
-
processor,
|
|
53
|
-
onEvent: handleEvent
|
|
54
|
-
}, /* @__PURE__ */ React.createElement(NaturalChatDialog.Root, {
|
|
55
|
-
open,
|
|
56
|
-
expanded,
|
|
57
|
-
onOpenChange: setOpen
|
|
58
|
-
}, /* @__PURE__ */ React.createElement(NaturalChatDialog.Header, {
|
|
59
|
-
title: t("assistant-dialog.title")
|
|
60
|
-
}), /* @__PURE__ */ React.createElement(NaturalChatDialog.Content, null, /* @__PURE__ */ React.createElement(Chat.Thread, {
|
|
61
|
-
viewType: chatViewType ?? settings.chatView
|
|
62
|
-
})), /* @__PURE__ */ React.createElement(NaturalChatDialog.Footer, {
|
|
63
|
-
classNames: "p-1.5"
|
|
64
|
-
}, /* @__PURE__ */ React.createElement(Chat.Prompt, {
|
|
65
|
-
...chatProps,
|
|
66
|
-
preset: preset?.id,
|
|
67
|
-
online,
|
|
68
|
-
expandable: true
|
|
69
|
-
}))));
|
|
70
|
-
};
|
|
71
|
-
export {
|
|
72
|
-
ChatDialog as default
|
|
73
|
-
};
|
|
74
|
-
//# sourceMappingURL=ChatDialog-5MXN4MXS.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/containers/ChatDialog/ChatDialog.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useState } from 'react';\n\nimport { Provider } from '@dxos/ai';\nimport { useAtomCapability } from '@dxos/app-framework/ui';\nimport { type Chat as ChatTypes } from '@dxos/assistant-toolkit';\nimport { Obj } from '@dxos/echo';\nimport { useObject, useRegistry } from '@dxos/react-client/echo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { ChatDialog as NaturalChatDialog } from '@dxos/react-ui-chat';\n\nimport { Chat, type ChatRootProps } from '#components';\nimport { useChatProcessor, useChatServices, usePresets } from '#hooks';\nimport { meta } from '#meta';\nimport { type Assistant, AssistantCapabilities } from '#types';\n\nexport type ChatDialogProps = {\n chat?: ChatTypes.Chat;\n};\n\nexport const ChatDialog = ({ chat }: ChatDialogProps) => {\n const { t } = useTranslation(meta.profile.key);\n\n const db = chat && Obj.getDatabase(chat);\n const settings = useAtomCapability(AssistantCapabilities.Settings);\n const runtime = useChatServices({ id: db?.spaceId });\n const { preset, ...chatProps } = usePresets(settings);\n const online = preset?.provider === Provider.edge.id;\n const registry = useRegistry();\n const processor = useChatProcessor({ chat, preset, runtime, registry, settings });\n // Subscribe via `useObject` so the thread re-renders when ChatOptions changes the view type.\n const [chatViewType] = useObject(chat, 'viewType');\n\n // TODO(burdon): Refocus when open.\n const [open, setOpen] = useState(true);\n const [expanded, setExpanded] = useState(false);\n const handleEvent = useCallback<NonNullable<ChatRootProps['onEvent']>>((event) => {\n switch (event.type) {\n case 'submit':\n case 'thread-open':\n setOpen(true);\n setExpanded(true);\n break;\n case 'thread-close':\n setOpen(false);\n break;\n }\n }, []);\n\n if (!chat || !processor) {\n return null;\n }\n\n return (\n <Chat.Root chat={chat} processor={processor} onEvent={handleEvent}>\n <NaturalChatDialog.Root open={open} expanded={expanded} onOpenChange={setOpen}>\n <NaturalChatDialog.Header title={t('assistant-dialog.title')} />\n <NaturalChatDialog.Content>\n <Chat.Thread viewType={(chatViewType as Assistant.ChatView | undefined) ?? settings.chatView} />\n </NaturalChatDialog.Content>\n <NaturalChatDialog.Footer classNames='p-1.5'>\n <Chat.Prompt {...chatProps} preset={preset?.id} online={online} expandable />\n </NaturalChatDialog.Footer>\n </NaturalChatDialog.Root>\n </Chat.Root>\n );\n};\n"],
|
|
5
|
-
"mappings": ";;;AAIA,OAAOA,SAASC,aAAaC,gBAAgB;AAE7C,SAASC,gBAAgB;AACzB,SAASC,yBAAyB;AAElC,SAASC,WAAW;AACpB,SAASC,WAAWC,mBAAmB;AACvC,SAASC,sBAAsB;AAC/B,SAASC,cAAcC,yBAAyB;AAEhD,SAASC,YAAgC;AACzC,SAASC,kBAAkBC,iBAAiBC,kBAAkB;AAC9D,SAASC,YAAY;AACrB,SAAyBC,6BAA6B;AAM/C,IAAMP,aAAa,CAAC,EAAEQ,KAAI,MAAmB;AAClD,QAAM,EAAEC,EAAC,IAAKV,eAAeO,KAAKI,QAAQC,GAAG;AAE7C,QAAMC,KAAKJ,QAAQZ,IAAIiB,YAAYL,IAAAA;AACnC,QAAMM,WAAWnB,kBAAkBY,sBAAsBQ,QAAQ;AACjE,QAAMC,UAAUZ,gBAAgB;IAAEa,IAAIL,IAAIM;EAAQ,CAAA;AAClD,QAAM,EAAEC,QAAQ,GAAGC,UAAAA,IAAcf,WAAWS,QAAAA;AAC5C,QAAMO,SAASF,QAAQG,aAAa5B,SAAS6B,KAAKN;AAClD,QAAMO,WAAW1B,YAAAA;AACjB,QAAM2B,YAAYtB,iBAAiB;IAAEK;IAAMW;IAAQH;IAASQ;IAAUV;EAAS,CAAA;AAE/E,QAAM,CAACY,YAAAA,IAAgB7B,UAAUW,MAAM,UAAA;AAGvC,QAAM,CAACmB,MAAMC,OAAAA,IAAWnC,SAAS,IAAA;AACjC,QAAM,CAACoC,UAAUC,WAAAA,IAAerC,SAAS,KAAA;AACzC,QAAMsC,cAAcvC,YAAmD,CAACwC,UAAAA;AACtE,YAAQA,MAAMC,MAAI;MAChB,KAAK;MACL,KAAK;AACHL,gBAAQ,IAAA;AACRE,oBAAY,IAAA;AACZ;MACF,KAAK;AACHF,gBAAQ,KAAA;AACR;IACJ;EACF,GAAG,CAAA,CAAE;AAEL,MAAI,CAACpB,QAAQ,CAACiB,WAAW;AACvB,WAAO;EACT;AAEA,SACE,sBAAA,cAACvB,KAAKgC,MAAI;IAAC1B;IAAYiB;IAAsBU,SAASJ;KACpD,sBAAA,cAAC9B,kBAAkBiC,MAAI;IAACP;IAAYE;IAAoBO,cAAcR;KACpE,sBAAA,cAAC3B,kBAAkBoC,QAAM;IAACC,OAAO7B,EAAE,wBAAA;MACnC,sBAAA,cAACR,kBAAkBsC,SAAO,MACxB,sBAAA,cAACrC,KAAKsC,QAAM;IAACC,UAAWf,gBAAmDZ,SAAS4B;OAEtF,sBAAA,cAACzC,kBAAkB0C,QAAM;IAACC,YAAW;KACnC,sBAAA,cAAC1C,KAAK2C,QAAM;IAAE,GAAGzB;IAAWD,QAAQA,QAAQF;IAAII;IAAgByB,YAAAA;;AAK1E;",
|
|
6
|
-
"names": ["React", "useCallback", "useState", "Provider", "useAtomCapability", "Obj", "useObject", "useRegistry", "useTranslation", "ChatDialog", "NaturalChatDialog", "Chat", "useChatProcessor", "useChatServices", "usePresets", "meta", "AssistantCapabilities", "chat", "t", "profile", "key", "db", "getDatabase", "settings", "Settings", "runtime", "id", "spaceId", "preset", "chatProps", "online", "provider", "edge", "registry", "processor", "chatViewType", "open", "setOpen", "expanded", "setExpanded", "handleEvent", "event", "type", "Root", "onEvent", "onOpenChange", "Header", "title", "Content", "Thread", "viewType", "chatView", "Footer", "classNames", "Prompt", "expandable"]
|
|
7
|
-
}
|