@dxos/plugin-assistant 0.9.0 → 0.9.1-staging.ee54ba693a
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 +18 -24
- package/dist/lib/neutral/{AgentArticle-K7XM46OQ.mjs → AgentArticle-GV6EEW3I.mjs} +9 -8
- package/dist/lib/neutral/AgentArticle-GV6EEW3I.mjs.map +7 -0
- package/dist/lib/neutral/AssistantPlugin.mjs +1 -1
- package/dist/lib/neutral/AssistantPlugin.node.mjs +6 -6
- package/dist/lib/neutral/AssistantPlugin.node.mjs.map +3 -3
- package/dist/lib/neutral/AssistantPlugin.workerd.mjs +7 -34
- package/dist/lib/neutral/AssistantPlugin.workerd.mjs.map +4 -4
- package/dist/lib/neutral/AssistantSettings-3N5M5VCN.mjs +302 -0
- package/dist/lib/neutral/AssistantSettings-3N5M5VCN.mjs.map +7 -0
- package/dist/lib/neutral/{ChatArticle-VNVZCDUR.mjs → ChatArticle-OO7GGEFW.mjs} +2 -2
- package/dist/lib/neutral/{ChatCompanion-LBUHYWQG.mjs → ChatCompanion-GIFJRY6I.mjs} +28 -28
- package/dist/lib/neutral/ChatCompanion-GIFJRY6I.mjs.map +7 -0
- package/dist/lib/neutral/{ChatDialog-DCA6FLOV.mjs → ChatDialog-5MXN4MXS.mjs} +9 -8
- package/dist/lib/neutral/ChatDialog-5MXN4MXS.mjs.map +7 -0
- package/dist/lib/neutral/IntegrationPrompt-2HJQFYJE.mjs +72 -0
- package/dist/lib/neutral/IntegrationPrompt-2HJQFYJE.mjs.map +7 -0
- package/dist/lib/neutral/{PlanArticle-TS5ULWYS.mjs → PlanArticle-VPK2IYWU.mjs} +8 -2
- package/dist/lib/neutral/PlanArticle-VPK2IYWU.mjs.map +7 -0
- package/dist/lib/neutral/SpaceHomePrompt-ISAB76LD.mjs +114 -0
- package/dist/lib/neutral/SpaceHomePrompt-ISAB76LD.mjs.map +7 -0
- package/dist/lib/neutral/SpaceHomeSuggestions-IDH77QQR.mjs +63 -0
- package/dist/lib/neutral/SpaceHomeSuggestions-IDH77QQR.mjs.map +7 -0
- package/dist/lib/neutral/TracePanel-JKNWADJ4.mjs +12 -0
- package/dist/lib/neutral/TracePanel-JKNWADJ4.mjs.map +7 -0
- package/dist/lib/neutral/{TriggerStatus-X7Y5JFZJ.mjs → TriggerStatus-FURRBHYA.mjs} +9 -7
- package/dist/lib/neutral/TriggerStatus-FURRBHYA.mjs.map +7 -0
- package/dist/lib/neutral/{agent-hydrator-PJBYVMBW.mjs → agent-hydrator-OBO3RHLO.mjs} +3 -4
- package/dist/lib/neutral/agent-hydrator-OBO3RHLO.mjs.map +7 -0
- package/dist/lib/neutral/{agent-service-WCAP5MLI.mjs → agent-service-XFJ4VQMT.mjs} +6 -6
- package/dist/lib/neutral/agent-service-XFJ4VQMT.mjs.map +7 -0
- package/dist/lib/neutral/ai-context-LIKJYMIN.mjs +14 -0
- package/dist/lib/neutral/ai-context-LIKJYMIN.mjs.map +7 -0
- package/dist/lib/neutral/{ai-service-AADUIKBY.mjs → ai-service-DM6YXWUC.mjs} +9 -5
- package/dist/lib/neutral/ai-service-DM6YXWUC.mjs.map +7 -0
- package/dist/lib/neutral/{app-graph-builder-WUFHQH3Y.mjs → app-graph-builder-OPVOEQY7.mjs} +45 -28
- package/dist/lib/neutral/app-graph-builder-OPVOEQY7.mjs.map +7 -0
- package/dist/lib/neutral/automation-templates-MADJLXGJ.mjs +97 -0
- package/dist/lib/neutral/automation-templates-MADJLXGJ.mjs.map +7 -0
- package/dist/lib/neutral/capabilities/index.mjs +21 -19
- package/dist/lib/neutral/capabilities/index.mjs.map +3 -3
- package/dist/lib/neutral/{chunk-KLYLW4WH.mjs → chunk-5IHQ52KJ.mjs} +1 -1
- package/dist/lib/neutral/chunk-5IHQ52KJ.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-YXRGZYYH.mjs → chunk-6Q4OBGIK.mjs} +87 -59
- package/dist/lib/neutral/chunk-6Q4OBGIK.mjs.map +7 -0
- package/dist/lib/neutral/chunk-BXI2R4OO.mjs +410 -0
- package/dist/lib/neutral/chunk-BXI2R4OO.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-5H6UJHLF.mjs → chunk-CMPLPDYE.mjs} +12 -12
- package/dist/lib/neutral/chunk-CMPLPDYE.mjs.map +7 -0
- package/dist/lib/neutral/chunk-GPHT3HYS.mjs +8 -0
- package/dist/lib/neutral/{chunk-SMFJD7BP.mjs.map → chunk-GPHT3HYS.mjs.map} +2 -2
- package/dist/lib/neutral/chunk-HKLSFB5I.mjs +90 -0
- package/dist/lib/neutral/chunk-HKLSFB5I.mjs.map +7 -0
- package/dist/lib/neutral/chunk-L7AR4VTA.mjs +53 -0
- package/dist/lib/neutral/chunk-L7AR4VTA.mjs.map +7 -0
- package/dist/lib/neutral/chunk-LS72HWMM.mjs +42 -0
- package/dist/lib/neutral/chunk-LS72HWMM.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-HLANPOBA.mjs → chunk-OZWZGIV2.mjs} +5 -3
- package/dist/lib/neutral/chunk-OZWZGIV2.mjs.map +7 -0
- package/dist/lib/neutral/{toolkit-GVWXPDLJ.mjs → chunk-QOKLFHUS.mjs} +3 -4
- package/dist/lib/neutral/{toolkit-GVWXPDLJ.mjs.map → chunk-QOKLFHUS.mjs.map} +1 -1
- package/dist/lib/neutral/{TracePanel-KTZJ6JNR.mjs → chunk-SCTHQVIJ.mjs} +11 -23
- package/dist/lib/neutral/chunk-SCTHQVIJ.mjs.map +7 -0
- package/dist/lib/neutral/chunk-U4LTLBAX.mjs +56 -0
- package/dist/lib/neutral/chunk-U4LTLBAX.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-RKVVK3R3.mjs → chunk-UPKFUZ6V.mjs} +22 -17
- package/dist/lib/neutral/chunk-UPKFUZ6V.mjs.map +7 -0
- package/dist/lib/neutral/{operation-handler-SF36MOB5.mjs → chunk-V2Y4XE3O.mjs} +3 -4
- package/dist/lib/neutral/{operation-handler-SF36MOB5.mjs.map → chunk-V2Y4XE3O.mjs.map} +1 -1
- package/dist/lib/neutral/chunk-XVGEJWJX.mjs +133 -0
- package/dist/lib/neutral/chunk-XVGEJWJX.mjs.map +7 -0
- package/dist/lib/neutral/{companion-chat-provisioner-YZZ73P6E.mjs → companion-chat-provisioner-IQV5VIVE.mjs} +14 -8
- package/dist/lib/neutral/companion-chat-provisioner-IQV5VIVE.mjs.map +7 -0
- package/dist/lib/neutral/components/index.mjs +749 -632
- package/dist/lib/neutral/components/index.mjs.map +4 -4
- package/dist/lib/neutral/{integration-provider-RBD3AFJU.mjs → connector-ITLLTBPZ.mjs} +13 -14
- package/dist/lib/neutral/connector-ITLLTBPZ.mjs.map +7 -0
- package/dist/lib/neutral/containers/index.mjs +15 -13
- package/dist/lib/neutral/containers/index.mjs.map +3 -3
- package/dist/lib/neutral/{create-chat-SGGQ6HVN.mjs → create-chat-YGVZZYGP.mjs} +18 -16
- package/dist/lib/neutral/create-chat-YGVZZYGP.mjs.map +7 -0
- package/dist/lib/neutral/{create-object-U2SOFZLR.mjs → create-object-5PAEJ6KM.mjs} +11 -27
- package/dist/lib/neutral/create-object-5PAEJ6KM.mjs.map +7 -0
- package/dist/lib/neutral/{edge-model-resolver-BBVOJBGJ.mjs → edge-model-resolver-WDJWDZTT.mjs} +2 -2
- package/dist/lib/neutral/execution-graph/index.mjs +336 -62
- package/dist/lib/neutral/execution-graph/index.mjs.map +4 -4
- package/dist/lib/neutral/extensions/index.mjs +8 -0
- package/dist/lib/neutral/{fork-chat-34KEF4ZJ.mjs → fork-chat-RMAAYYQF.mjs} +16 -19
- package/dist/lib/neutral/fork-chat-RMAAYYQF.mjs.map +7 -0
- package/dist/lib/neutral/generate-home-suggestions-6MM2XWPV.mjs +93 -0
- package/dist/lib/neutral/generate-home-suggestions-6MM2XWPV.mjs.map +7 -0
- package/dist/lib/neutral/hooks/index.mjs +393 -508
- package/dist/lib/neutral/hooks/index.mjs.map +4 -4
- package/dist/lib/neutral/index.mjs +14 -10
- package/dist/lib/neutral/markdown-extension-R4TKDTIF.mjs +41 -0
- package/dist/lib/neutral/markdown-extension-R4TKDTIF.mjs.map +7 -0
- package/dist/lib/neutral/meta.json +1 -1
- package/dist/lib/neutral/meta.mjs +1 -1
- package/dist/lib/neutral/navigation-resolver-PYGP2DAW.mjs +18 -0
- package/dist/lib/neutral/navigation-resolver-PYGP2DAW.mjs.map +7 -0
- package/dist/lib/neutral/operation-handler-2LEN45GP.mjs +8 -0
- package/dist/lib/neutral/operation-handler-2LEN45GP.mjs.map +7 -0
- package/dist/lib/neutral/operations/index.mjs +1 -1
- package/dist/lib/neutral/plugin.mjs +2 -2
- package/dist/lib/neutral/plugin.workerd.mjs +13 -0
- package/dist/lib/neutral/plugin.workerd.mjs.map +7 -0
- package/dist/lib/neutral/{react-surface-XRTBW5OJ.mjs → react-surface-HEJEK44F.mjs} +42 -45
- package/dist/lib/neutral/react-surface-HEJEK44F.mjs.map +7 -0
- package/dist/lib/neutral/resolve-navigation-targets-PBQ3OLUE.mjs +28 -0
- package/dist/lib/neutral/resolve-navigation-targets-PBQ3OLUE.mjs.map +7 -0
- package/dist/lib/neutral/{run-prompt-in-new-chat-D5IIE2C7.mjs → run-prompt-in-new-chat-RNUJE2FM.mjs} +31 -31
- package/dist/lib/neutral/run-prompt-in-new-chat-RNUJE2FM.mjs.map +7 -0
- package/dist/lib/neutral/{settings-W4BLWQ53.mjs → settings-7Q3RITIT.mjs} +3 -3
- package/dist/lib/neutral/{settings-W4BLWQ53.mjs.map → settings-7Q3RITIT.mjs.map} +3 -3
- package/dist/lib/neutral/skill-definition-553MQRTR.mjs +8 -0
- package/dist/lib/neutral/skill-definition-553MQRTR.mjs.map +7 -0
- package/dist/lib/neutral/skills/index.mjs +8 -0
- package/dist/lib/neutral/skills/index.mjs.map +7 -0
- package/dist/lib/neutral/{state-H3G7QCU6.mjs → state-4LGAKSSD.mjs} +9 -3
- package/dist/lib/neutral/state-4LGAKSSD.mjs.map +7 -0
- package/dist/lib/neutral/testing.mjs +1 -1
- package/dist/lib/neutral/toolkit-ETWLG5NT.mjs +8 -0
- package/dist/lib/neutral/toolkit-ETWLG5NT.mjs.map +7 -0
- package/dist/lib/neutral/translations.mjs +69 -31
- package/dist/lib/neutral/translations.mjs.map +3 -3
- package/dist/lib/neutral/types/index.mjs +5 -1
- package/dist/lib/neutral/{update-chat-name-Y7JWIP64.mjs → update-chat-name-IJJELRR6.mjs} +3 -3
- package/dist/lib/neutral/{update-chat-name-Y7JWIP64.mjs.map → update-chat-name-IJJELRR6.mjs.map} +2 -2
- package/dist/types/dx.config.d.ts +28 -0
- package/dist/types/dx.config.d.ts.map +1 -0
- package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
- package/dist/types/src/AssistantPlugin.workerd.d.ts.map +1 -1
- package/dist/types/src/capabilities/agent-hydrator.d.ts +1 -1
- package/dist/types/src/capabilities/agent-service.d.ts +1 -2
- package/dist/types/src/capabilities/agent-service.d.ts.map +1 -1
- package/dist/types/src/capabilities/ai-context.d.ts +1 -2
- package/dist/types/src/capabilities/ai-context.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -3
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/automation-templates.d.ts +1 -2
- package/dist/types/src/capabilities/automation-templates.d.ts.map +1 -1
- package/dist/types/src/capabilities/companion-chat-provisioner.d.ts +1 -1
- package/dist/types/src/capabilities/companion-chat-provisioner.d.ts.map +1 -1
- package/dist/types/src/capabilities/{integration-provider.d.ts → connector.d.ts} +2 -2
- package/dist/types/src/capabilities/connector.d.ts.map +1 -0
- package/dist/types/src/capabilities/create-object.d.ts +1 -27
- package/dist/types/src/capabilities/create-object.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +18 -57
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/markdown-extension.d.ts +1 -1
- package/dist/types/src/capabilities/migrations.d.ts +1 -2
- package/dist/types/src/capabilities/migrations.d.ts.map +1 -1
- package/dist/types/src/capabilities/navigation-resolver.d.ts +5 -0
- package/dist/types/src/capabilities/navigation-resolver.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface.d.ts +2 -2
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings.d.ts +1 -2
- package/dist/types/src/capabilities/settings.d.ts.map +1 -1
- package/dist/types/src/capabilities/skill-definition.d.ts +5 -0
- package/dist/types/src/capabilities/skill-definition.d.ts.map +1 -0
- package/dist/types/src/capabilities/state.d.ts +1 -17
- package/dist/types/src/capabilities/state.d.ts.map +1 -1
- package/dist/types/src/capabilities/toolkit.d.ts +1 -2
- package/dist/types/src/capabilities/toolkit.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 +10 -8
- package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
- package/dist/types/src/components/Chat/Chat.stories.d.ts +32 -0
- package/dist/types/src/components/Chat/Chat.stories.d.ts.map +1 -0
- package/dist/types/src/components/Chat/events.d.ts +0 -4
- package/dist/types/src/components/Chat/events.d.ts.map +1 -1
- package/dist/types/src/components/ChatPrompt/ChatActions.d.ts +2 -2
- package/dist/types/src/components/ChatPrompt/ChatActions.d.ts.map +1 -1
- package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts.map +1 -1
- package/dist/types/src/components/ChatPrompt/ChatOptions.stories.d.ts +2 -2
- package/dist/types/src/components/ChatPrompt/ChatOptions.stories.d.ts.map +1 -1
- package/dist/types/src/components/ChatPrompt/ChatPrompt.d.ts +5 -5
- package/dist/types/src/components/ChatPrompt/ChatPrompt.d.ts.map +1 -1
- package/dist/types/src/components/ChatPrompt/useChatVoiceInput.d.ts +9 -0
- package/dist/types/src/components/ChatPrompt/useChatVoiceInput.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +4 -4
- package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/MarkdownStream.stories.d.ts +2 -2
- package/dist/types/src/components/ChatThread/MarkdownStream.stories.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/registry.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.stories.d.ts +2 -2
- package/dist/types/src/components/ChatThread/widgets/ReasoningWidget.stories.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/widgets/SurfaceWidget.d.ts +11 -0
- package/dist/types/src/components/ChatThread/widgets/SurfaceWidget.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/widgets/index.d.ts +1 -0
- package/dist/types/src/components/ChatThread/widgets/index.d.ts.map +1 -1
- package/dist/types/src/components/ProcessTree/ProcessTree.d.ts +6 -0
- package/dist/types/src/components/ProcessTree/ProcessTree.d.ts.map +1 -1
- package/dist/types/src/components/ProcessTree/ProcessTree.stories.d.ts +1 -0
- package/dist/types/src/components/ProcessTree/ProcessTree.stories.d.ts.map +1 -1
- package/dist/types/src/components/TaskList/TaskList.d.ts +8 -0
- package/dist/types/src/components/TaskList/TaskList.d.ts.map +1 -1
- package/dist/types/src/components/TaskList/TaskList.stories.d.ts +5 -2
- package/dist/types/src/components/TaskList/TaskList.stories.d.ts.map +1 -1
- package/dist/types/src/components/Toolbox/Toolbox.d.ts +3 -3
- package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -4
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/constants.d.ts +1 -1
- package/dist/types/src/constants.d.ts.map +1 -1
- package/dist/types/src/containers/AgentArticle/AgentArticle.stories.d.ts +2 -2
- package/dist/types/src/containers/AgentArticle/AgentArticle.stories.d.ts.map +1 -1
- package/dist/types/src/{components → containers}/AssistantSettings/AssistantSettings.d.ts +1 -1
- package/dist/types/src/containers/AssistantSettings/AssistantSettings.d.ts.map +1 -0
- package/dist/types/src/{components → containers}/AssistantSettings/AssistantSettings.stories.d.ts.map +1 -1
- package/dist/types/src/containers/AssistantSettings/OllamaModels.d.ts +12 -0
- package/dist/types/src/containers/AssistantSettings/OllamaModels.d.ts.map +1 -0
- package/dist/types/src/{components/TemplateEditor/TemplateEditor.stories.d.ts → containers/AssistantSettings/OllamaModels.stories.d.ts} +9 -7
- package/dist/types/src/containers/AssistantSettings/OllamaModels.stories.d.ts.map +1 -0
- package/dist/types/src/{components → containers}/AssistantSettings/index.d.ts.map +1 -1
- package/dist/types/src/containers/ChatArticle/ChatArticle.d.ts +3 -10
- package/dist/types/src/containers/ChatArticle/ChatArticle.d.ts.map +1 -1
- package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts +4 -11
- package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts.map +1 -1
- package/dist/types/src/containers/ChatDialog/ChatDialog.d.ts.map +1 -1
- package/dist/types/src/containers/IntegrationPrompt/IntegrationPrompt.d.ts +13 -0
- package/dist/types/src/containers/IntegrationPrompt/IntegrationPrompt.d.ts.map +1 -0
- package/dist/types/src/containers/IntegrationPrompt/index.d.ts +2 -0
- package/dist/types/src/{components/RoutineProperties → containers/IntegrationPrompt}/index.d.ts.map +1 -1
- package/dist/types/src/containers/PlanArticle/PlanArticle.d.ts.map +1 -1
- package/dist/types/src/containers/SpaceHomePrompt/SpaceHomePrompt.d.ts +15 -0
- package/dist/types/src/containers/SpaceHomePrompt/SpaceHomePrompt.d.ts.map +1 -0
- package/dist/types/src/containers/SpaceHomePrompt/index.d.ts +2 -0
- package/dist/types/src/containers/SpaceHomePrompt/index.d.ts.map +1 -0
- package/dist/types/src/containers/SpaceHomeSuggestions/SpaceHomeSuggestions.d.ts +13 -0
- package/dist/types/src/containers/SpaceHomeSuggestions/SpaceHomeSuggestions.d.ts.map +1 -0
- package/dist/types/src/containers/SpaceHomeSuggestions/index.d.ts +2 -0
- package/dist/types/src/containers/SpaceHomeSuggestions/index.d.ts.map +1 -0
- 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/TracePanel/testing/simulated-agent.d.ts +1 -1
- package/dist/types/src/containers/TracePanel/testing/simulated-agent.d.ts.map +1 -1
- package/dist/types/src/containers/TriggerStatus/TriggerStatus.d.ts.map +1 -1
- package/dist/types/src/containers/index.d.ts +4 -3
- package/dist/types/src/containers/index.d.ts.map +1 -1
- package/dist/types/src/execution-graph/execution-graph.d.ts +20 -1
- package/dist/types/src/execution-graph/execution-graph.d.ts.map +1 -1
- package/dist/types/src/execution-graph/index.d.ts +3 -2
- package/dist/types/src/execution-graph/index.d.ts.map +1 -1
- package/dist/types/src/execution-graph/pending-block-status.d.ts +26 -0
- package/dist/types/src/execution-graph/pending-block-status.d.ts.map +1 -0
- package/dist/types/src/execution-graph/pending-block-status.test.d.ts +2 -0
- package/dist/types/src/execution-graph/pending-block-status.test.d.ts.map +1 -0
- package/dist/types/src/execution-graph/span-tree.d.ts +13 -0
- package/dist/types/src/execution-graph/span-tree.d.ts.map +1 -1
- package/dist/types/src/extensions/index.d.ts +1 -1
- package/dist/types/src/extensions/index.d.ts.map +1 -1
- package/dist/types/src/extensions/prompt-extension.d.ts +1 -1
- package/dist/types/src/extensions/prompt-extension.d.ts.map +1 -1
- package/dist/types/src/feed-logger.d.ts +3 -2
- package/dist/types/src/feed-logger.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +4 -2
- 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/useContextBinder.d.ts.map +1 -1
- package/dist/types/src/hooks/useHomeSuggestions.d.ts +8 -0
- package/dist/types/src/hooks/useHomeSuggestions.d.ts.map +1 -0
- package/dist/types/src/hooks/usePresets.d.ts +6 -2
- package/dist/types/src/hooks/usePresets.d.ts.map +1 -1
- package/dist/types/src/hooks/useProcessEphemeralStatus.d.ts +10 -0
- package/dist/types/src/hooks/useProcessEphemeralStatus.d.ts.map +1 -0
- package/dist/types/src/hooks/useSkillRegistry.d.ts +21 -0
- package/dist/types/src/hooks/useSkillRegistry.d.ts.map +1 -0
- package/dist/types/src/hooks/useTraceMessages.d.ts +12 -0
- package/dist/types/src/hooks/useTraceMessages.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +1 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +32 -2
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/operations/create-chat.d.ts.map +1 -1
- package/dist/types/src/operations/fork-chat.d.ts.map +1 -1
- package/dist/types/src/operations/generate-home-suggestions.d.ts +5 -0
- package/dist/types/src/operations/generate-home-suggestions.d.ts.map +1 -0
- package/dist/types/src/operations/generate-home-suggestions.test.d.ts +2 -0
- package/dist/types/src/operations/generate-home-suggestions.test.d.ts.map +1 -0
- package/dist/types/src/operations/index.d.ts.map +1 -1
- package/dist/types/src/operations/resolve-navigation-targets.d.ts +3 -15
- package/dist/types/src/operations/resolve-navigation-targets.d.ts.map +1 -1
- package/dist/types/src/operations/run-prompt-in-new-chat.d.ts +2 -2
- package/dist/types/src/operations/run-prompt-in-new-chat.d.ts.map +1 -1
- package/dist/types/src/paths.d.ts +1 -1
- package/dist/types/src/paths.d.ts.map +1 -1
- package/dist/types/src/plugin.workerd.d.ts +2 -0
- package/dist/types/src/plugin.workerd.d.ts.map +1 -0
- package/dist/types/src/processor/presets.d.ts +20 -9
- package/dist/types/src/processor/presets.d.ts.map +1 -1
- package/dist/types/src/processor/processor.d.ts +33 -209
- package/dist/types/src/processor/processor.d.ts.map +1 -1
- package/dist/types/src/skills/assistant/index.d.ts +2 -0
- package/dist/types/src/skills/assistant/index.d.ts.map +1 -0
- package/dist/types/src/skills/assistant/skill.d.ts +4 -0
- package/dist/types/src/skills/assistant/skill.d.ts.map +1 -0
- package/dist/types/src/skills/assistant/skill.node.test.d.ts +2 -0
- package/dist/types/src/skills/assistant/skill.node.test.d.ts.map +1 -0
- package/dist/types/src/skills/index.d.ts.map +1 -0
- package/dist/types/src/templates/daily-digest.d.ts +2 -2
- package/dist/types/src/templates/daily-digest.d.ts.map +1 -1
- package/dist/types/src/templates/index.d.ts +3 -3
- package/dist/types/src/templates/index.d.ts.map +1 -1
- package/dist/types/src/templates/research-brief.d.ts +2 -2
- package/dist/types/src/templates/research-brief.d.ts.map +1 -1
- package/dist/types/src/templates/routine-templates.test.d.ts +2 -0
- package/dist/types/src/templates/routine-templates.test.d.ts.map +1 -0
- package/dist/types/src/templates/scaffold.d.ts +9 -9
- package/dist/types/src/templates/scaffold.d.ts.map +1 -1
- package/dist/types/src/testing/test-generator.d.ts +1 -1
- package/dist/types/src/testing/test-generator.d.ts.map +1 -1
- package/dist/types/src/testing/test-sequence.d.ts +1 -8
- package/dist/types/src/testing/test-sequence.d.ts.map +1 -1
- package/dist/types/src/testing/test-trace.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/Assistant.d.ts +5 -12
- package/dist/types/src/types/Assistant.d.ts.map +1 -1
- package/dist/types/src/types/AssistantCapabilities.d.ts +21 -0
- package/dist/types/src/types/AssistantCapabilities.d.ts.map +1 -1
- package/dist/types/src/types/AssistantEvents.d.ts.map +1 -1
- package/dist/types/src/types/AssistantOperation.d.ts +17 -110
- package/dist/types/src/types/AssistantOperation.d.ts.map +1 -1
- package/dist/types/src/types/ChatSurface.d.ts +12 -0
- package/dist/types/src/types/ChatSurface.d.ts.map +1 -0
- package/dist/types/src/types/Ollama.d.ts +44 -0
- package/dist/types/src/types/Ollama.d.ts.map +1 -0
- package/dist/types/src/types/Settings.d.ts +5 -4
- package/dist/types/src/types/Settings.d.ts.map +1 -1
- package/dist/types/src/types/index.d.ts +2 -0
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/service.d.ts +4 -3
- package/dist/types/src/types/service.d.ts.map +1 -1
- package/dist/types/src/util/error-cause.d.ts +3 -0
- package/dist/types/src/util/error-cause.d.ts.map +1 -0
- package/dist/types/src/util/suggestions.d.ts +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dx.config.ts +38 -0
- package/package.json +103 -90
- package/src/AssistantPlugin.conversations.json +1 -1
- package/src/AssistantPlugin.node.ts +5 -5
- package/src/AssistantPlugin.test.ts +27 -41
- package/src/AssistantPlugin.ts +14 -12
- package/src/AssistantPlugin.workerd.ts +15 -6
- package/src/capabilities/agent-hydrator.ts +1 -2
- package/src/capabilities/agent-service.ts +7 -5
- package/src/capabilities/ai-context.ts +7 -32
- package/src/capabilities/ai-service.ts +3 -2
- package/src/capabilities/app-graph-builder.ts +43 -28
- package/src/capabilities/automation-templates.ts +3 -3
- package/src/capabilities/companion-chat-provisioner.ts +22 -6
- package/src/capabilities/{integration-provider.ts → connector.ts} +7 -12
- package/src/capabilities/create-object.ts +9 -26
- package/src/capabilities/index.ts +4 -12
- package/src/capabilities/markdown-extension.ts +7 -4
- package/src/capabilities/navigation-resolver.ts +20 -0
- package/src/capabilities/react-surface.tsx +55 -52
- package/src/capabilities/settings.ts +2 -2
- package/src/capabilities/skill-definition.ts +72 -0
- package/src/capabilities/state.ts +8 -1
- package/src/components/AgentProperties/AgentProperties.stories.tsx +1 -2
- package/src/components/AgentProperties/AgentProperties.tsx +1 -1
- package/src/components/Chat/Chat.stories.tsx +94 -0
- package/src/components/Chat/Chat.tsx +67 -16
- package/src/components/Chat/events.ts +0 -6
- package/src/components/ChatPrompt/ChatActions.tsx +185 -20
- package/src/components/ChatPrompt/ChatMcpErrors.tsx +1 -1
- package/src/components/ChatPrompt/ChatOptions.stories.tsx +3 -3
- package/src/components/ChatPrompt/ChatOptions.tsx +43 -50
- package/src/components/ChatPrompt/ChatPrompt.tsx +31 -47
- package/src/components/ChatPrompt/ChatReferences.tsx +1 -1
- package/src/components/ChatPrompt/useChatVoiceInput.ts +103 -0
- package/src/components/ChatThread/Anchor.stories.tsx +1 -1
- package/src/components/ChatThread/ChatThread.stories.tsx +7 -16
- package/src/components/ChatThread/DEBUG.md +23 -0
- package/src/components/ChatThread/MarkdownStream.stories.tsx +3 -3
- package/src/components/ChatThread/registry.tsx +43 -17
- package/src/components/ChatThread/widgets/ReasoningWidget.stories.tsx +2 -2
- package/src/components/ChatThread/widgets/SummaryWidget.tsx +1 -1
- package/src/components/ChatThread/widgets/SurfaceWidget.tsx +41 -0
- package/src/components/ChatThread/widgets/ToolWidget.tsx +1 -1
- package/src/components/ChatThread/widgets/index.ts +1 -0
- package/src/components/ProcessTree/ProcessTree.stories.tsx +7 -0
- package/src/components/ProcessTree/ProcessTree.tsx +183 -88
- package/src/components/TaskList/TaskList.stories.tsx +24 -3
- package/src/components/TaskList/TaskList.tsx +122 -28
- package/src/components/ToolBlock/ToolBlock.tsx +1 -1
- package/src/components/Toolbox/Toolbox.tsx +11 -11
- package/src/components/index.ts +1 -6
- package/src/constants.ts +1 -1
- package/src/containers/AgentArticle/AgentArticle.stories.tsx +12 -13
- package/src/containers/AgentArticle/AgentArticle.tsx +10 -10
- package/src/{components → containers}/AssistantSettings/AssistantSettings.stories.tsx +3 -2
- package/src/containers/AssistantSettings/AssistantSettings.tsx +90 -0
- package/src/containers/AssistantSettings/OllamaModels.stories.tsx +108 -0
- package/src/containers/AssistantSettings/OllamaModels.tsx +255 -0
- package/src/containers/ChatArticle/ChatArticle.stories.tsx +3 -3
- package/src/containers/ChatArticle/ChatArticle.tsx +25 -28
- package/src/containers/ChatCompanion/ChatCompanion.tsx +27 -27
- package/src/containers/ChatDialog/ChatDialog.tsx +10 -7
- package/src/containers/IntegrationPrompt/IntegrationPrompt.tsx +79 -0
- package/src/containers/IntegrationPrompt/index.ts +5 -0
- package/src/containers/PlanArticle/PlanArticle.tsx +5 -1
- package/src/containers/SpaceHomePrompt/SpaceHomePrompt.tsx +107 -0
- package/src/containers/SpaceHomePrompt/index.ts +5 -0
- package/src/containers/SpaceHomeSuggestions/SpaceHomeSuggestions.tsx +83 -0
- package/src/containers/SpaceHomeSuggestions/index.ts +5 -0
- package/src/containers/TracePanel/TracePanel.stories.tsx +89 -47
- package/src/containers/TracePanel/TracePanel.tsx +15 -37
- package/src/containers/TracePanel/dxn-extractor.test.ts +2 -2
- package/src/containers/TriggerStatus/TriggerStatus.tsx +10 -6
- package/src/containers/index.ts +4 -3
- package/src/execution-graph/SPEC.md +1 -1
- package/src/execution-graph/execution-graph.test.ts +213 -25
- package/src/execution-graph/execution-graph.ts +337 -70
- package/src/execution-graph/index.ts +15 -5
- package/src/execution-graph/pending-block-status.test.ts +114 -0
- package/src/execution-graph/pending-block-status.ts +88 -0
- package/src/execution-graph/span-tree.test.ts +33 -1
- package/src/execution-graph/span-tree.ts +43 -2
- package/src/execution-graph/sub-agent-delegation.test.ts +34 -19
- package/src/extensions/index.ts +1 -1
- package/src/extensions/prompt-extension.ts +102 -73
- package/src/feed-logger.ts +24 -22
- package/src/functions/services.test.ts +4 -4
- package/src/hooks/index.ts +4 -2
- package/src/hooks/useChatProcessor.ts +12 -16
- package/src/hooks/useChatServices.ts +2 -2
- package/src/hooks/useChatToolbarActions.ts +5 -5
- package/src/hooks/useContextBinder.ts +2 -4
- package/src/hooks/useDebug.ts +2 -2
- package/src/hooks/useHomeSuggestions.ts +55 -0
- package/src/hooks/usePresets.ts +80 -11
- package/src/hooks/useProcessEphemeralStatus.ts +192 -0
- package/src/hooks/useReferencesProvider.ts +1 -1
- package/src/hooks/useSkillRegistry.ts +125 -0
- package/src/hooks/useTraceMessages.ts +41 -0
- package/src/index.ts +1 -1
- package/src/meta.ts +3 -31
- package/src/operations/create-chat.ts +11 -12
- package/src/operations/fork-chat.ts +15 -20
- package/src/operations/generate-home-suggestions.test.ts +103 -0
- package/src/operations/generate-home-suggestions.ts +116 -0
- package/src/operations/index.ts +1 -0
- package/src/operations/prompt.node.test.ts +14 -17
- package/src/operations/resolve-navigation-targets.ts +32 -19
- package/src/operations/run-prompt-in-new-chat.ts +34 -35
- package/src/operations/update-chat-name.ts +2 -2
- package/src/paths.ts +5 -3
- package/src/plugin.workerd.ts +5 -0
- package/src/processor/presets.ts +38 -61
- package/src/processor/processor.node.test.ts +72 -2
- package/src/processor/processor.ts +91 -21
- package/src/skills/assistant/index.ts +5 -0
- package/src/{blueprints/assistant/blueprint.node.test.ts → skills/assistant/skill.node.test.ts} +8 -8
- package/src/{blueprints/assistant/blueprint.ts → skills/assistant/skill.ts} +9 -9
- package/src/templates/daily-digest.ts +10 -12
- package/src/templates/index.ts +3 -3
- package/src/templates/research-brief.ts +15 -13
- package/src/templates/routine-templates.test.ts +55 -0
- package/src/templates/scaffold.ts +22 -57
- 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 +3430 -1093
- package/src/testing/test-generator.test.ts +26 -22
- package/src/testing/test-generator.ts +4 -8
- package/src/testing/test-trace.ts +2 -1
- package/src/testing/trace-timeline.node.test.ts +14 -14
- package/src/translations.ts +74 -31
- package/src/types/Assistant.ts +3 -1
- package/src/types/AssistantCapabilities.ts +24 -3
- package/src/types/AssistantEvents.ts +1 -1
- package/src/types/AssistantOperation.ts +22 -33
- package/src/types/ChatSurface.ts +16 -0
- package/src/types/Ollama.ts +59 -0
- package/src/types/Settings.ts +12 -10
- package/src/types/index.ts +3 -0
- package/src/types/service.ts +14 -14
- package/src/util/error-cause.ts +21 -0
- package/src/util/suggestions.ts +1 -1
- package/dist/lib/neutral/AgentArticle-K7XM46OQ.mjs.map +0 -7
- package/dist/lib/neutral/AssistantSettings-GG52BLKS.mjs +0 -40
- package/dist/lib/neutral/AssistantSettings-GG52BLKS.mjs.map +0 -7
- package/dist/lib/neutral/BlueprintArticle-ZBOZNZM7.mjs +0 -27
- package/dist/lib/neutral/BlueprintArticle-ZBOZNZM7.mjs.map +0 -7
- package/dist/lib/neutral/ChatCompanion-LBUHYWQG.mjs.map +0 -7
- package/dist/lib/neutral/ChatDialog-DCA6FLOV.mjs.map +0 -7
- package/dist/lib/neutral/PlanArticle-TS5ULWYS.mjs.map +0 -7
- package/dist/lib/neutral/RoutineArticle-5NYXHRG6.mjs +0 -119
- package/dist/lib/neutral/RoutineArticle-5NYXHRG6.mjs.map +0 -7
- package/dist/lib/neutral/RoutineList-SO5ETHNT.mjs +0 -48
- package/dist/lib/neutral/RoutineList-SO5ETHNT.mjs.map +0 -7
- package/dist/lib/neutral/RoutineProperties-FISLMW2R.mjs +0 -17
- package/dist/lib/neutral/RoutineProperties-FISLMW2R.mjs.map +0 -7
- package/dist/lib/neutral/TracePanel-KTZJ6JNR.mjs.map +0 -7
- package/dist/lib/neutral/TriggerStatus-X7Y5JFZJ.mjs.map +0 -7
- package/dist/lib/neutral/agent-hydrator-PJBYVMBW.mjs.map +0 -7
- package/dist/lib/neutral/agent-service-WCAP5MLI.mjs.map +0 -7
- package/dist/lib/neutral/ai-context-7WRHWYXY.mjs +0 -42
- package/dist/lib/neutral/ai-context-7WRHWYXY.mjs.map +0 -7
- package/dist/lib/neutral/ai-service-AADUIKBY.mjs.map +0 -7
- package/dist/lib/neutral/app-graph-builder-WUFHQH3Y.mjs.map +0 -7
- package/dist/lib/neutral/automation-templates-M2XQWGR6.mjs +0 -115
- package/dist/lib/neutral/automation-templates-M2XQWGR6.mjs.map +0 -7
- package/dist/lib/neutral/blueprint-definition-MH2QLYQH.mjs +0 -39
- package/dist/lib/neutral/blueprint-definition-MH2QLYQH.mjs.map +0 -7
- package/dist/lib/neutral/blueprints/index.mjs +0 -8
- package/dist/lib/neutral/chunk-5H6UJHLF.mjs.map +0 -7
- package/dist/lib/neutral/chunk-HLANPOBA.mjs.map +0 -7
- package/dist/lib/neutral/chunk-KLYLW4WH.mjs.map +0 -7
- package/dist/lib/neutral/chunk-QAZMOFPI.mjs +0 -130
- package/dist/lib/neutral/chunk-QAZMOFPI.mjs.map +0 -7
- package/dist/lib/neutral/chunk-RKVVK3R3.mjs.map +0 -7
- package/dist/lib/neutral/chunk-SMFJD7BP.mjs +0 -8
- package/dist/lib/neutral/chunk-XYHPOGTK.mjs +0 -43
- package/dist/lib/neutral/chunk-XYHPOGTK.mjs.map +0 -7
- package/dist/lib/neutral/chunk-YXRGZYYH.mjs.map +0 -7
- package/dist/lib/neutral/companion-chat-provisioner-YZZ73P6E.mjs.map +0 -7
- package/dist/lib/neutral/create-chat-SGGQ6HVN.mjs.map +0 -7
- package/dist/lib/neutral/create-object-U2SOFZLR.mjs.map +0 -7
- package/dist/lib/neutral/fork-chat-34KEF4ZJ.mjs.map +0 -7
- package/dist/lib/neutral/integration-provider-RBD3AFJU.mjs.map +0 -7
- package/dist/lib/neutral/markdown-extension-YMIFDMYF.mjs +0 -110
- package/dist/lib/neutral/markdown-extension-YMIFDMYF.mjs.map +0 -7
- package/dist/lib/neutral/react-surface-XRTBW5OJ.mjs.map +0 -7
- package/dist/lib/neutral/resolve-navigation-targets-ZHIMMH7L.mjs +0 -22
- package/dist/lib/neutral/resolve-navigation-targets-ZHIMMH7L.mjs.map +0 -7
- package/dist/lib/neutral/run-prompt-in-new-chat-D5IIE2C7.mjs.map +0 -7
- package/dist/lib/neutral/state-H3G7QCU6.mjs.map +0 -7
- package/dist/types/src/blueprints/assistant/blueprint.d.ts +0 -4
- package/dist/types/src/blueprints/assistant/blueprint.d.ts.map +0 -1
- package/dist/types/src/blueprints/assistant/blueprint.node.test.d.ts +0 -2
- package/dist/types/src/blueprints/assistant/blueprint.node.test.d.ts.map +0 -1
- package/dist/types/src/blueprints/assistant/index.d.ts +0 -2
- package/dist/types/src/blueprints/assistant/index.d.ts.map +0 -1
- package/dist/types/src/blueprints/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/blueprint-definition.d.ts +0 -5
- package/dist/types/src/capabilities/blueprint-definition.d.ts.map +0 -1
- package/dist/types/src/capabilities/integration-provider.d.ts.map +0 -1
- package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts.map +0 -1
- package/dist/types/src/components/RoutineProperties/RoutineProperties.d.ts +0 -7
- package/dist/types/src/components/RoutineProperties/RoutineProperties.d.ts.map +0 -1
- package/dist/types/src/components/RoutineProperties/RoutineProperties.stories.d.ts +0 -15
- package/dist/types/src/components/RoutineProperties/RoutineProperties.stories.d.ts.map +0 -1
- package/dist/types/src/components/RoutineProperties/index.d.ts +0 -2
- package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts +0 -13
- package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +0 -1
- package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +0 -1
- package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +0 -21
- package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +0 -1
- package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts +0 -16
- package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +0 -1
- package/dist/types/src/components/TemplateEditor/extensions/handlebars-extension.d.ts +0 -12
- package/dist/types/src/components/TemplateEditor/extensions/handlebars-extension.d.ts.map +0 -1
- package/dist/types/src/components/TemplateEditor/extensions/index.d.ts +0 -3
- package/dist/types/src/components/TemplateEditor/extensions/index.d.ts.map +0 -1
- package/dist/types/src/components/TemplateEditor/extensions/xml-extension.d.ts +0 -8
- package/dist/types/src/components/TemplateEditor/extensions/xml-extension.d.ts.map +0 -1
- package/dist/types/src/components/TemplateEditor/index.d.ts +0 -2
- package/dist/types/src/components/TemplateEditor/index.d.ts.map +0 -1
- package/dist/types/src/components/TemplateEditor/types.d.ts +0 -18
- package/dist/types/src/components/TemplateEditor/types.d.ts.map +0 -1
- package/dist/types/src/containers/BlueprintArticle/BlueprintArticle.d.ts +0 -6
- package/dist/types/src/containers/BlueprintArticle/BlueprintArticle.d.ts.map +0 -1
- package/dist/types/src/containers/BlueprintArticle/index.d.ts +0 -2
- package/dist/types/src/containers/BlueprintArticle/index.d.ts.map +0 -1
- package/dist/types/src/containers/RoutineArticle/RoutineArticle.d.ts +0 -6
- package/dist/types/src/containers/RoutineArticle/RoutineArticle.d.ts.map +0 -1
- package/dist/types/src/containers/RoutineArticle/RoutineArticle.stories.d.ts +0 -15
- package/dist/types/src/containers/RoutineArticle/RoutineArticle.stories.d.ts.map +0 -1
- package/dist/types/src/containers/RoutineArticle/index.d.ts +0 -2
- package/dist/types/src/containers/RoutineArticle/index.d.ts.map +0 -1
- package/dist/types/src/containers/RoutineList/RoutineList.d.ts +0 -6
- package/dist/types/src/containers/RoutineList/RoutineList.d.ts.map +0 -1
- package/dist/types/src/containers/RoutineList/RoutineList.stories.d.ts +0 -21
- package/dist/types/src/containers/RoutineList/RoutineList.stories.d.ts.map +0 -1
- package/dist/types/src/containers/RoutineList/index.d.ts +0 -2
- package/dist/types/src/containers/RoutineList/index.d.ts.map +0 -1
- package/dist/types/src/hooks/useBlueprintRegistry.d.ts +0 -66
- package/dist/types/src/hooks/useBlueprintRegistry.d.ts.map +0 -1
- package/dist/types/src/hooks/useOnline.d.ts +0 -3
- package/dist/types/src/hooks/useOnline.d.ts.map +0 -1
- package/dist/types/src/templates/automation-templates.test.d.ts +0 -2
- package/dist/types/src/templates/automation-templates.test.d.ts.map +0 -1
- package/src/blueprints/assistant/index.ts +0 -5
- package/src/capabilities/blueprint-definition.ts +0 -65
- package/src/components/AssistantSettings/AssistantSettings.tsx +0 -43
- package/src/components/RoutineProperties/RoutineProperties.stories.tsx +0 -59
- package/src/components/RoutineProperties/RoutineProperties.tsx +0 -23
- package/src/components/RoutineProperties/index.ts +0 -5
- package/src/components/TemplateEditor/TemplateEditor.stories.tsx +0 -95
- package/src/components/TemplateEditor/TemplateEditor.tsx +0 -80
- package/src/components/TemplateEditor/TemplateForm.stories.tsx +0 -76
- package/src/components/TemplateEditor/TemplateForm.tsx +0 -204
- package/src/components/TemplateEditor/extensions/handlebars-extension.ts +0 -274
- package/src/components/TemplateEditor/extensions/index.ts +0 -6
- package/src/components/TemplateEditor/extensions/xml-extension.ts +0 -64
- package/src/components/TemplateEditor/index.ts +0 -5
- package/src/components/TemplateEditor/types.tsx +0 -28
- package/src/containers/BlueprintArticle/BlueprintArticle.tsx +0 -29
- package/src/containers/BlueprintArticle/index.ts +0 -5
- package/src/containers/RoutineArticle/RoutineArticle.stories.tsx +0 -75
- package/src/containers/RoutineArticle/RoutineArticle.tsx +0 -109
- package/src/containers/RoutineArticle/index.ts +0 -5
- package/src/containers/RoutineList/RoutineList.stories.tsx +0 -130
- package/src/containers/RoutineList/RoutineList.tsx +0 -50
- package/src/containers/RoutineList/index.ts +0 -5
- package/src/hooks/useBlueprintRegistry.ts +0 -125
- package/src/hooks/useOnline.ts +0 -10
- package/src/templates/automation-templates.test.ts +0 -66
- package/src/testing/trace-timeline.node.conversations.json +0 -1
- /package/dist/lib/neutral/{ChatArticle-VNVZCDUR.mjs.map → ChatArticle-OO7GGEFW.mjs.map} +0 -0
- /package/dist/lib/neutral/{edge-model-resolver-BBVOJBGJ.mjs.map → edge-model-resolver-WDJWDZTT.mjs.map} +0 -0
- /package/dist/lib/neutral/{blueprints → extensions}/index.mjs.map +0 -0
- /package/dist/types/src/{components → containers}/AssistantSettings/AssistantSettings.stories.d.ts +0 -0
- /package/dist/types/src/{components → containers}/AssistantSettings/index.d.ts +0 -0
- /package/dist/types/src/{blueprints → skills}/index.d.ts +0 -0
- /package/src/{components → containers}/AssistantSettings/index.ts +0 -0
- /package/src/{blueprints → skills}/index.ts +0 -0
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
// src/processor/presets.ts
|
|
2
|
+
import { Model, Provider } from "@dxos/ai";
|
|
3
|
+
import { DXN } from "@dxos/keys";
|
|
4
|
+
var presetsForProvider = (provider) => Model.forProvider(provider).map((model) => ({
|
|
5
|
+
id: model.id,
|
|
6
|
+
provider,
|
|
7
|
+
model: model.id,
|
|
8
|
+
backend: model.backend,
|
|
9
|
+
label: model.label
|
|
10
|
+
}));
|
|
11
|
+
var resolveProvider = (provider, hasBuiltIn) => {
|
|
12
|
+
const resolved = (provider ? DXN.tryMake(provider) : void 0) ?? Provider.edge.id;
|
|
13
|
+
if (resolved === Provider.ollama.id && hasBuiltIn) {
|
|
14
|
+
return Provider.builtIn.id;
|
|
15
|
+
}
|
|
16
|
+
if (resolved === Provider.builtIn.id && !hasBuiltIn) {
|
|
17
|
+
return Provider.ollama.id;
|
|
18
|
+
}
|
|
19
|
+
return resolved;
|
|
20
|
+
};
|
|
21
|
+
var defaultsKeyForProvider = (provider) => provider === Provider.edge.id ? "edge" : provider === Provider.lmStudio.id ? "lmstudio" : "ollama";
|
|
22
|
+
|
|
23
|
+
// src/processor/processor.ts
|
|
24
|
+
import { Atom, Registry as AtomRegistry } from "@effect-atom/atom-react";
|
|
25
|
+
import * as AiError from "@effect/ai/AiError";
|
|
26
|
+
import * as Cause from "effect/Cause";
|
|
27
|
+
import * as Effect from "effect/Effect";
|
|
28
|
+
import * as Exit from "effect/Exit";
|
|
29
|
+
import * as Fiber from "effect/Fiber";
|
|
30
|
+
import * as Option from "effect/Option";
|
|
31
|
+
import * as Stream from "effect/Stream";
|
|
32
|
+
import { Model as Model2 } from "@dxos/ai";
|
|
33
|
+
import { Harness, McpServerError, PartialBlock, ToolExecutionServices, createSystemPrompt, formatSystemPrompt } from "@dxos/assistant";
|
|
34
|
+
import { AgentService, Operation, Trace } from "@dxos/compute";
|
|
35
|
+
import { Obj } from "@dxos/echo";
|
|
36
|
+
import { UsageQuotaExceededError } from "@dxos/edge-client";
|
|
37
|
+
import { EffectEx } from "@dxos/effect";
|
|
38
|
+
import { log } from "@dxos/log";
|
|
39
|
+
import { Message } from "@dxos/types";
|
|
40
|
+
import { AssistantOperation } from "#types";
|
|
41
|
+
|
|
42
|
+
// src/util/error-cause.ts
|
|
43
|
+
var findInCause = (error, predicate) => {
|
|
44
|
+
let current = error;
|
|
45
|
+
const visited = /* @__PURE__ */ new Set();
|
|
46
|
+
while (current) {
|
|
47
|
+
if (visited.has(current)) {
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
visited.add(current);
|
|
51
|
+
if (predicate(current)) {
|
|
52
|
+
return current;
|
|
53
|
+
}
|
|
54
|
+
current = current instanceof Error ? current.cause : void 0;
|
|
55
|
+
}
|
|
56
|
+
return void 0;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
// src/processor/processor.ts
|
|
60
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-assistant/src/processor/processor.ts";
|
|
61
|
+
var defaultOptions = {
|
|
62
|
+
model: Model2.DEFAULT_EDGE
|
|
63
|
+
};
|
|
64
|
+
var QUOTA_EXCEEDED_MESSAGE = "You have reached your AI usage limit for this period.";
|
|
65
|
+
var AiUsageQuotaError = class extends Error {
|
|
66
|
+
action = {
|
|
67
|
+
labelKey: "view-usage.label"
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
var QUOTA_PATTERN = /\b429\b|rate.?limit|too many requests|usage quota|quota exceeded/i;
|
|
71
|
+
var isQuotaError = (err) => {
|
|
72
|
+
if (AiError.isAiError(err)) {
|
|
73
|
+
if (err._tag === "HttpResponseError" && err.response.status === 429) {
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
return QUOTA_PATTERN.test(err.description ?? err.message);
|
|
77
|
+
}
|
|
78
|
+
return typeof err === "string" && QUOTA_PATTERN.test(err);
|
|
79
|
+
};
|
|
80
|
+
var parseError = (err) => {
|
|
81
|
+
const quotaError = findInCause(err, UsageQuotaExceededError.is);
|
|
82
|
+
if (quotaError || isQuotaError(err)) {
|
|
83
|
+
return new AiUsageQuotaError(quotaError?.message?.trim() || QUOTA_EXCEEDED_MESSAGE, {
|
|
84
|
+
cause: err
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
let message;
|
|
88
|
+
if (AiError.isAiError(err)) {
|
|
89
|
+
message = err.description?.trim() || err.message;
|
|
90
|
+
} else if (typeof err === "string") {
|
|
91
|
+
const [, model] = err.match(/model\s+'([^']+)'\s+not\s+found/i) || [];
|
|
92
|
+
if (model) {
|
|
93
|
+
message = `The model is not available: ${model}`;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (!message) {
|
|
97
|
+
message = "An unexpected error occurred.";
|
|
98
|
+
}
|
|
99
|
+
return new Error(message, {
|
|
100
|
+
cause: err
|
|
101
|
+
});
|
|
102
|
+
};
|
|
103
|
+
var AiChatProcessor = class {
|
|
104
|
+
_conversation;
|
|
105
|
+
_runtime;
|
|
106
|
+
_feed;
|
|
107
|
+
_spaceLayer;
|
|
108
|
+
_options;
|
|
109
|
+
#registry;
|
|
110
|
+
/** Pending messages (finalized, non-streaming). */
|
|
111
|
+
#pending = Atom.make([]);
|
|
112
|
+
/** Currently streaming messages (from ephemeral trace events). */
|
|
113
|
+
#streaming = Atom.make([]);
|
|
114
|
+
/** Set of message IDs that have been finalized (non-pending delivered via ephemeral). */
|
|
115
|
+
#finalizedIds = /* @__PURE__ */ new Set();
|
|
116
|
+
/** Currently active request fiber. */
|
|
117
|
+
#requestFiber;
|
|
118
|
+
/** Last request (for retries). */
|
|
119
|
+
#lastRequest;
|
|
120
|
+
/** Streaming state. */
|
|
121
|
+
streaming = Atom.make((get) => get(this.#streaming).length > 0);
|
|
122
|
+
/** Active state. */
|
|
123
|
+
active = Atom.make(false);
|
|
124
|
+
/** Array of Messages (incl. the current message being streamed). */
|
|
125
|
+
messages = Atom.make((get) => [
|
|
126
|
+
...get(this.#pending),
|
|
127
|
+
...get(this.#streaming)
|
|
128
|
+
]);
|
|
129
|
+
/** Last error. */
|
|
130
|
+
error = Atom.make(Option.none());
|
|
131
|
+
/**
|
|
132
|
+
* MCP server connection errors observed during the most recent request.
|
|
133
|
+
* Misconfigured/unreachable servers are dropped from the toolkit so the chat
|
|
134
|
+
* keeps working; the entries here let the UI display which servers failed.
|
|
135
|
+
*/
|
|
136
|
+
mcpErrors = Atom.make([]);
|
|
137
|
+
constructor(_conversation, _runtime, _feed, _spaceLayer, _options = defaultOptions) {
|
|
138
|
+
this._conversation = _conversation;
|
|
139
|
+
this._runtime = _runtime;
|
|
140
|
+
this._feed = _feed;
|
|
141
|
+
this._spaceLayer = _spaceLayer;
|
|
142
|
+
this._options = _options;
|
|
143
|
+
this.#registry = this._options.observableRegistry ?? AtomRegistry.make();
|
|
144
|
+
if (this._options.model && !this._options.system) {
|
|
145
|
+
const capabilities = this._options.modelRegistry?.getCapabilities(this._options.model) ?? {};
|
|
146
|
+
this._options.system = createSystemPrompt(capabilities);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
get context() {
|
|
150
|
+
return this._conversation.context;
|
|
151
|
+
}
|
|
152
|
+
get conversation() {
|
|
153
|
+
return this._conversation;
|
|
154
|
+
}
|
|
155
|
+
get registry() {
|
|
156
|
+
return this._options.registry;
|
|
157
|
+
}
|
|
158
|
+
get system() {
|
|
159
|
+
return this._options.system ?? "";
|
|
160
|
+
}
|
|
161
|
+
async getTools() {
|
|
162
|
+
return this._runtime.runPromise(Effect.provide(this._conversation.getTools(), ToolExecutionServices).pipe(Effect.provide(this._spaceLayer)));
|
|
163
|
+
}
|
|
164
|
+
async getSystemPrompt() {
|
|
165
|
+
return this._runtime.runPromise(Effect.gen(this, function* () {
|
|
166
|
+
const skills = this.context.getSkills();
|
|
167
|
+
const objects = this.context.getObjects();
|
|
168
|
+
const runtime2 = yield* Effect.runtime();
|
|
169
|
+
return yield* formatSystemPrompt({
|
|
170
|
+
system: this._options.system,
|
|
171
|
+
skills,
|
|
172
|
+
objects
|
|
173
|
+
}).pipe(Effect.provideService(Harness.HarnessService, Harness.fromBinder({
|
|
174
|
+
feed: this._feed,
|
|
175
|
+
runtime: runtime2,
|
|
176
|
+
binder: this.context
|
|
177
|
+
})));
|
|
178
|
+
}).pipe(Effect.provide(this._spaceLayer), Effect.orDie));
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Initiates a new request via AgentService.
|
|
182
|
+
*/
|
|
183
|
+
async request(requestProp) {
|
|
184
|
+
if (this.#requestFiber) {
|
|
185
|
+
await this.cancel();
|
|
186
|
+
}
|
|
187
|
+
try {
|
|
188
|
+
this.#lastRequest = requestProp;
|
|
189
|
+
this.#registry.set(this.error, Option.none());
|
|
190
|
+
this.#registry.set(this.mcpErrors, []);
|
|
191
|
+
this.#registry.set(this.active, true);
|
|
192
|
+
const effect = Effect.gen(this, function* () {
|
|
193
|
+
log.info("init agent session", {
|
|
194
|
+
feed: Obj.getURI(this._feed),
|
|
195
|
+
model: this._options.model,
|
|
196
|
+
provider: this._options.provider
|
|
197
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 177, S: this });
|
|
198
|
+
const session = yield* AgentService.getSession(this._feed, {
|
|
199
|
+
model: this._options.model,
|
|
200
|
+
provider: this._options.provider
|
|
201
|
+
});
|
|
202
|
+
const ephemeralStream = session.subscribeEphemeral();
|
|
203
|
+
yield* ephemeralStream.pipe(Stream.runForEach((message) => Effect.sync(() => {
|
|
204
|
+
for (const event of message.events) {
|
|
205
|
+
if (Trace.isOfType(PartialBlock, event)) {
|
|
206
|
+
this.#handleEphemeralMessage(event.data);
|
|
207
|
+
} else if (Trace.isOfType(McpServerError, event)) {
|
|
208
|
+
this.#handleMcpError(event.data);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
})), Effect.fork);
|
|
212
|
+
log("chat processor submitting prompt", {
|
|
213
|
+
length: requestProp.message.length
|
|
214
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 196, S: this });
|
|
215
|
+
yield* session.submitPrompt(requestProp.message);
|
|
216
|
+
log("chat processor submitPrompt returned, waiting for agent", {}, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 200, S: this });
|
|
217
|
+
if (!this._options.chat?.target?.name) {
|
|
218
|
+
yield* this.#updateChatName(requestProp.message);
|
|
219
|
+
}
|
|
220
|
+
yield* session.waitForCompletion();
|
|
221
|
+
log.info("session complete", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 207, S: this });
|
|
222
|
+
this.#flushStreaming();
|
|
223
|
+
});
|
|
224
|
+
this.#requestFiber = this._runtime.runFork(effect.pipe(Effect.provide(this._spaceLayer)));
|
|
225
|
+
const exit = await this._runtime.runPromise(Fiber.await(this.#requestFiber));
|
|
226
|
+
if (Exit.isFailure(exit)) {
|
|
227
|
+
if (Cause.isInterruptedOnly(exit.cause)) {
|
|
228
|
+
this.#discardStreaming();
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
throw EffectEx.causeToError(exit.cause);
|
|
232
|
+
}
|
|
233
|
+
this.#registry.set(this.error, Option.none());
|
|
234
|
+
this.#lastRequest = void 0;
|
|
235
|
+
this.#requestFiber = void 0;
|
|
236
|
+
} catch (err) {
|
|
237
|
+
log.error("request failed", {
|
|
238
|
+
error: err
|
|
239
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 227, S: this });
|
|
240
|
+
this.#registry.set(this.error, Option.some(parseError(err)));
|
|
241
|
+
} finally {
|
|
242
|
+
log.info("setting active to false", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 232, S: this });
|
|
243
|
+
this.#registry.set(this.active, false);
|
|
244
|
+
this.#requestFiber = void 0;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Cancels the current request.
|
|
249
|
+
*/
|
|
250
|
+
async cancel() {
|
|
251
|
+
await EffectEx.runAndForwardErrors(Effect.gen(this, function* () {
|
|
252
|
+
log.info("cancelling request", {
|
|
253
|
+
fiber: this.#requestFiber
|
|
254
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 241, S: this });
|
|
255
|
+
if (this.#requestFiber) {
|
|
256
|
+
yield* Fiber.interrupt(this.#requestFiber);
|
|
257
|
+
}
|
|
258
|
+
const session = yield* AgentService.getSession(this._feed);
|
|
259
|
+
yield* session.terminate();
|
|
260
|
+
}).pipe(Effect.provide(this._spaceLayer)));
|
|
261
|
+
this.#requestFiber = void 0;
|
|
262
|
+
this.#discardStreaming();
|
|
263
|
+
this.#registry.set(this.active, false);
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Retry last failed request.
|
|
267
|
+
*/
|
|
268
|
+
async retry() {
|
|
269
|
+
if (this.#lastRequest) {
|
|
270
|
+
return this.request(this.#lastRequest);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Clears the recorded MCP server errors (e.g. after the user dismisses the warning banner).
|
|
275
|
+
*/
|
|
276
|
+
dismissMcpErrors() {
|
|
277
|
+
this.#registry.set(this.mcpErrors, []);
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Update the current chat's name.
|
|
281
|
+
*/
|
|
282
|
+
async updateName(chat) {
|
|
283
|
+
const spaceId = Obj.getDatabase(chat)?.spaceId;
|
|
284
|
+
if (!spaceId) {
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
EffectEx.unwrapExit(await this._runtime.runPromiseExit(Operation.invoke(AssistantOperation.UpdateChatName, {
|
|
288
|
+
chat
|
|
289
|
+
}, {
|
|
290
|
+
spaceId
|
|
291
|
+
}).pipe(Effect.provide(this._spaceLayer))));
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Handles an ephemeral message from the agent process.
|
|
295
|
+
* Both pending and completed blocks arrive here. Completed blocks are deduped
|
|
296
|
+
* against messages already written to the feed queue to handle the race between
|
|
297
|
+
* ephemeral delivery and feed replication.
|
|
298
|
+
*/
|
|
299
|
+
#handleEphemeralMessage(event) {
|
|
300
|
+
const isPending = event.block.pending;
|
|
301
|
+
const message = Obj.make(Message.Message, {
|
|
302
|
+
id: event.messageId,
|
|
303
|
+
created: (/* @__PURE__ */ new Date()).toISOString(),
|
|
304
|
+
sender: {
|
|
305
|
+
role: event.role
|
|
306
|
+
},
|
|
307
|
+
blocks: [
|
|
308
|
+
event.block
|
|
309
|
+
]
|
|
310
|
+
});
|
|
311
|
+
if (isPending) {
|
|
312
|
+
if (this.#finalizedIds.has(event.messageId)) {
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
this.#registry.update(this.#streaming, (streaming) => {
|
|
316
|
+
const idx = streaming.findIndex((existing) => existing.id === event.messageId);
|
|
317
|
+
if (idx >= 0) {
|
|
318
|
+
const updated = [
|
|
319
|
+
...streaming
|
|
320
|
+
];
|
|
321
|
+
updated[idx] = message;
|
|
322
|
+
return updated;
|
|
323
|
+
}
|
|
324
|
+
return [
|
|
325
|
+
...streaming,
|
|
326
|
+
message
|
|
327
|
+
];
|
|
328
|
+
});
|
|
329
|
+
} else {
|
|
330
|
+
this.#finalizedIds.add(event.messageId);
|
|
331
|
+
this.#registry.update(this.#streaming, (streaming) => streaming.filter((existing) => existing.id !== message.id));
|
|
332
|
+
this.#registry.update(this.#pending, (pending) => {
|
|
333
|
+
if (pending.some((existing) => existing.id === message.id)) {
|
|
334
|
+
return pending;
|
|
335
|
+
}
|
|
336
|
+
return [
|
|
337
|
+
...pending,
|
|
338
|
+
message
|
|
339
|
+
];
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Records a per-server MCP failure, deduped by url+protocol so repeat misconfigurations
|
|
345
|
+
* across turns do not spam the UI.
|
|
346
|
+
*/
|
|
347
|
+
#handleMcpError(event) {
|
|
348
|
+
log.warn("MCP server error", event, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 332, S: this });
|
|
349
|
+
this.#registry.update(this.mcpErrors, (errors) => {
|
|
350
|
+
if (errors.some((existing) => existing.url === event.url && existing.protocol === event.protocol)) {
|
|
351
|
+
return errors;
|
|
352
|
+
}
|
|
353
|
+
return [
|
|
354
|
+
...errors,
|
|
355
|
+
event
|
|
356
|
+
];
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Drop in-flight streaming messages (cancel/interrupt — partial blocks are discarded).
|
|
361
|
+
*/
|
|
362
|
+
#discardStreaming() {
|
|
363
|
+
this.#registry.set(this.#streaming, []);
|
|
364
|
+
this.#finalizedIds.clear();
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Move remaining streaming messages to pending (called when agent completes).
|
|
368
|
+
*/
|
|
369
|
+
#flushStreaming() {
|
|
370
|
+
const remaining = this.#registry.get(this.#streaming);
|
|
371
|
+
if (remaining.length > 0) {
|
|
372
|
+
this.#registry.update(this.#pending, (pending) => [
|
|
373
|
+
...pending,
|
|
374
|
+
...remaining
|
|
375
|
+
]);
|
|
376
|
+
this.#registry.set(this.#streaming, []);
|
|
377
|
+
}
|
|
378
|
+
this.#finalizedIds.clear();
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Schedule a chat name update as a detached (fire-and-forget) operation.
|
|
382
|
+
* Called automatically on the first message; can also be invoked manually via the toolbar.
|
|
383
|
+
*/
|
|
384
|
+
#updateChatName(prompt) {
|
|
385
|
+
const chat = this._options.chat?.target;
|
|
386
|
+
if (!chat) {
|
|
387
|
+
return Effect.void;
|
|
388
|
+
}
|
|
389
|
+
const spaceId = Obj.getDatabase(chat)?.spaceId;
|
|
390
|
+
if (!spaceId) {
|
|
391
|
+
return Effect.void;
|
|
392
|
+
}
|
|
393
|
+
log.info("scheduling chat name update", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 374, S: this });
|
|
394
|
+
return Operation.schedule(AssistantOperation.UpdateChatName, {
|
|
395
|
+
chat,
|
|
396
|
+
prompt
|
|
397
|
+
}, {
|
|
398
|
+
spaceId
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
};
|
|
402
|
+
|
|
403
|
+
export {
|
|
404
|
+
presetsForProvider,
|
|
405
|
+
resolveProvider,
|
|
406
|
+
defaultsKeyForProvider,
|
|
407
|
+
AiUsageQuotaError,
|
|
408
|
+
AiChatProcessor
|
|
409
|
+
};
|
|
410
|
+
//# sourceMappingURL=chunk-BXI2R4OO.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/processor/presets.ts", "../../../src/processor/processor.ts", "../../../src/util/error-cause.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Model, Provider } from '@dxos/ai';\nimport { DXN } from '@dxos/keys';\n\n/**\n * A chat preset: a model offered for a provider, with a display label. Derived from the {@link Model}\n * catalog — see {@link presetsForProvider}.\n */\nexport type AiServicePreset = {\n id: string;\n provider: DXN.DXN;\n model: DXN.DXN;\n /** Provider-specific back-end name (e.g. an Ollama pull tag); used to match installed models. */\n backend: string;\n label: string;\n};\n\n/** Presets for a provider: every model the provider serves (the catalog filtered by provider). */\nexport const presetsForProvider = (provider: DXN.DXN): AiServicePreset[] =>\n Model.forProvider(provider).map((model) => ({\n id: model.id,\n provider,\n model: model.id,\n backend: model.backend,\n label: model.label,\n }));\n\n/**\n * Reconcile a stored provider DXN with the runtime: map the bundled sidecar (`built-in`) and an\n * external server (`ollama`) onto whichever is actually available — they are environment-exclusive\n * (the sidecar exists only on desktop). Defaults to `edge` when unset or unparseable.\n */\nexport const resolveProvider = (provider: string | undefined, hasBuiltIn: boolean): DXN.DXN => {\n const resolved = (provider ? DXN.tryMake(provider) : undefined) ?? Provider.edge.id;\n if (resolved === Provider.ollama.id && hasBuiltIn) {\n return Provider.builtIn.id;\n }\n if (resolved === Provider.builtIn.id && !hasBuiltIn) {\n return Provider.ollama.id;\n }\n return resolved;\n};\n\n/** The {@link Settings.modelDefaults} key for a provider (`built-in` shares the `ollama` key). */\nexport const defaultsKeyForProvider = (provider: DXN.DXN): 'edge' | 'ollama' | 'lmstudio' =>\n provider === Provider.edge.id ? 'edge' : provider === Provider.lmStudio.id ? 'lmstudio' : 'ollama';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom, Registry as AtomRegistry } from '@effect-atom/atom-react';\nimport * as AiError from '@effect/ai/AiError';\nimport * as Cause from 'effect/Cause';\nimport * as Effect from 'effect/Effect';\nimport * as Exit from 'effect/Exit';\nimport * as Fiber from 'effect/Fiber';\nimport * as Layer from 'effect/Layer';\nimport * as Option from 'effect/Option';\nimport * as Stream from 'effect/Stream';\n\nimport { type AiService, Model, type OpaqueToolkit } from '@dxos/ai';\nimport { Capabilities } from '@dxos/app-framework';\nimport {\n AiContext,\n AiSession,\n Harness,\n McpServerError,\n PartialBlock,\n ToolExecutionServices,\n createSystemPrompt,\n formatSystemPrompt,\n} from '@dxos/assistant';\nimport { type Chat } from '@dxos/assistant-toolkit';\nimport { AgentService, type Credential, Operation, type ServiceNotAvailableError, Trace } from '@dxos/compute';\nimport { type Database, Feed, Obj, Ref, type Registry } from '@dxos/echo';\nimport { UsageQuotaExceededError } from '@dxos/edge-client';\nimport { EffectEx } from '@dxos/effect';\nimport { DXN } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { Message } from '@dxos/types';\n\nimport { AssistantOperation } from '#types';\n\nimport { findInCause } from '../util/error-cause';\n\n/**\n * @deprecated Services type for the old direct-conversation processor path.\n * Retained for backward compatibility with CLI and update-name.\n */\nexport type AiChatServices =\n | Credential.CredentialsService\n | Database.Service\n | AiService.AiService\n | Trace.TraceService;\n\n/**\n * Space-scoped services materialised by the layer passed into\n * {@link AiChatProcessor}. Mirrors the tag list that\n * {@link useChatProcessor} passes to {@link ServiceResolver.provide}.\n */\nexport type SpaceServices =\n | Database.Service\n | Credential.CredentialsService\n | AiService.AiService\n | AgentService.AgentService\n | Registry.Service\n | OpaqueToolkit.OpaqueToolkitProvider;\n\nexport type AiChatProcessorOptions = {\n model?: DXN.DXN;\n // The selected provider, carried with the model so the agent process resolves the (provider, id)\n // pair — the catalog's shared model ids are ambiguous without it.\n provider?: DXN.DXN;\n modelRegistry?: Model.Registry;\n registry?: Registry.Registry;\n observableRegistry?: AtomRegistry.Registry;\n /**\n * For tracing.\n */\n chat?: Ref.Ref<Chat.Chat>;\n system?: string;\n};\n\nconst defaultOptions: Partial<AiChatProcessorOptions> = {\n model: Model.DEFAULT_EDGE,\n};\n\nexport type ProcessorRequestOptions = {};\n\nexport type ProcessorRequest = {\n message: string;\n options?: ProcessorRequestOptions;\n};\n\n/** User-facing message shown when an AI request is rejected for exceeding the account usage quota (HTTP 429). */\nconst QUOTA_EXCEEDED_MESSAGE = 'You have reached your AI usage limit for this period.';\n\n/** An actionable next-step a chat error surfaces in its toast; the label key is resolved by the chat UI. */\nexport type ChatErrorAction = { readonly labelKey: string };\n\n/**\n * Display error for an over-quota (HTTP 429) rejection. Declares an {@link action} so the chat toast can\n * offer a usage-dashboard link declaratively — the UI renders whatever action an error declares rather\n * than branching on the error type.\n */\nexport class AiUsageQuotaError extends Error {\n readonly action: ChatErrorAction = { labelKey: 'view-usage.label' };\n}\n\n/**\n * Matches an over-quota rejection (EDGE responds 429) in error text. The typed\n * {@link UsageQuotaExceededError} is wrapped deep in the cause chain and does not survive the\n * agent-process boundary — the failure is rendered to a string via `Cause.pretty`, which drops\n * nested causes — so detection also relies on the HTTP 429 that `@effect/ai`'s\n * {@link AiError.HttpResponseError} embeds in its message (e.g. \"... (429 POST ...\").\n */\nconst QUOTA_PATTERN = /\\b429\\b|rate.?limit|too many requests|usage quota|quota exceeded/i;\n\n/** Whether an error denotes an over-quota (HTTP 429) rejection, detected by typed status or message text. */\nconst isQuotaError = (err: unknown): boolean => {\n if (AiError.isAiError(err)) {\n if (err._tag === 'HttpResponseError' && err.response.status === 429) {\n return true;\n }\n return QUOTA_PATTERN.test(err.description ?? err.message);\n }\n return typeof err === 'string' && QUOTA_PATTERN.test(err);\n};\n\n/**\n * Maps a failure from the agent fiber to an error suitable for display.\n * An over-quota (HTTP 429) rejection is surfaced as an actionable usage-limit message; the typed\n * {@link UsageQuotaExceededError} only survives on the direct path, so {@link isQuotaError} also\n * recognizes the stringified 429 the chat receives across the agent-process boundary.\n * Other {@link AiError}s originate from the AI service and are actionable by the user\n * (e.g., \"model 'x' not found\", \"Connection refused\"), so their detail is propagated.\n * Any other failure is treated as an internal/unexpected error and reported generically\n * to avoid leaking implementation detail.\n */\nexport const parseError = (err: unknown): Error => {\n const quotaError = findInCause(err, UsageQuotaExceededError.is);\n if (quotaError || isQuotaError(err)) {\n return new AiUsageQuotaError(quotaError?.message?.trim() || QUOTA_EXCEEDED_MESSAGE, { cause: err });\n }\n\n let message: string | undefined;\n if (AiError.isAiError(err)) {\n message = err.description?.trim() || err.message;\n } else if (typeof err === 'string') {\n // TODO(burdon): This is brittle.\n // UnknownError: ChatCompletionsClient.streamText: model 'gemma3:27b' not found\n const [, model] = err.match(/model\\s+'([^']+)'\\s+not\\s+found/i) || [];\n if (model) {\n message = `The model is not available: ${model}`;\n }\n }\n\n if (!message) {\n message = 'An unexpected error occurred.';\n }\n\n return new Error(message, { cause: err });\n};\n\n/**\n * Handles interactions with the AI service.\n * Uses AgentService to spawn a process-backed agent and subscribes to ephemeral trace events for streaming.\n */\nexport class AiChatProcessor {\n readonly #registry: AtomRegistry.Registry;\n\n /** Pending messages (finalized, non-streaming). */\n readonly #pending = Atom.make<Message.Message[]>([]);\n\n /** Currently streaming messages (from ephemeral trace events). */\n readonly #streaming = Atom.make<Message.Message[]>([]);\n\n /** Set of message IDs that have been finalized (non-pending delivered via ephemeral). */\n readonly #finalizedIds = new Set<string>();\n\n /** Currently active request fiber. */\n #requestFiber: Fiber.RuntimeFiber<void, unknown> | undefined;\n\n /** Last request (for retries). */\n #lastRequest: ProcessorRequest | undefined;\n\n /** Streaming state. */\n public readonly streaming = Atom.make<boolean>((get) => get(this.#streaming).length > 0);\n\n /** Active state. */\n public readonly active = Atom.make(false);\n\n /** Array of Messages (incl. the current message being streamed). */\n public readonly messages = Atom.make<Message.Message[]>((get) => [...get(this.#pending), ...get(this.#streaming)]);\n\n /** Last error. */\n public readonly error = Atom.make<Option.Option<Error>>(Option.none());\n\n /**\n * MCP server connection errors observed during the most recent request.\n * Misconfigured/unreachable servers are dropped from the toolkit so the chat\n * keeps working; the entries here let the UI display which servers failed.\n */\n public readonly mcpErrors = Atom.make<readonly Trace.PayloadType<typeof McpServerError>[]>([]);\n\n constructor(\n private readonly _conversation: AiSession.Session,\n private readonly _runtime: Capabilities.ProcessManagerRuntime,\n private readonly _feed: Feed.Feed,\n /**\n * Pre-built layer that materialises {@link SpaceServices}. Built via\n * {@link ServiceResolver.provide} with the {@link ServiceResolver} already\n * supplied (hence `RIn = never`); the {@link ServiceNotAvailableError}\n * error channel surfaces when a tag is not available for the space.\n * Provided to every effect run by the processor so the underlying\n * {@link ProcessManagerRuntime} has access to space-affinity services.\n */\n private readonly _spaceLayer: Layer.Layer<SpaceServices, ServiceNotAvailableError, never>,\n private readonly _options: AiChatProcessorOptions = defaultOptions,\n ) {\n this.#registry = this._options.observableRegistry ?? AtomRegistry.make();\n if (this._options.model && !this._options.system) {\n const capabilities = this._options.modelRegistry?.getCapabilities(this._options.model) ?? {};\n this._options.system = createSystemPrompt(capabilities);\n }\n }\n\n get context(): AiContext.Binder {\n return this._conversation.context;\n }\n\n get conversation() {\n return this._conversation;\n }\n\n get registry() {\n return this._options.registry;\n }\n\n get system(): string {\n return this._options.system ?? '';\n }\n\n async getTools(): Promise<Record<string, any>> {\n return this._runtime.runPromise(\n Effect.provide(this._conversation.getTools(), ToolExecutionServices).pipe(Effect.provide(this._spaceLayer)),\n );\n }\n\n async getSystemPrompt(): Promise<string> {\n return this._runtime.runPromise(\n Effect.gen(this, function* () {\n const skills = this.context.getSkills();\n const objects = this.context.getObjects();\n // Tier A only: system-prompt formatting runs operations that read the conversation context;\n // the live-host Tier B control surface is not reachable from this fiber.\n const runtime = yield* Effect.runtime<Database.Service>();\n return yield* formatSystemPrompt({ system: this._options.system, skills, objects }).pipe(\n Effect.provideService(\n Harness.HarnessService,\n Harness.fromBinder({ feed: this._feed, runtime, binder: this.context }),\n ),\n );\n }).pipe(Effect.provide(this._spaceLayer), Effect.orDie),\n );\n }\n\n /**\n * Initiates a new request via AgentService.\n */\n async request(requestProp: ProcessorRequest): Promise<void> {\n if (this.#requestFiber) {\n await this.cancel();\n }\n\n try {\n this.#lastRequest = requestProp;\n this.#registry.set(this.error, Option.none());\n this.#registry.set(this.mcpErrors, []);\n this.#registry.set(this.active, true);\n\n const effect = Effect.gen(this, function* () {\n // NOTE: Gets or creates a session for the feed.\n log.info('init agent session', {\n feed: Obj.getURI(this._feed),\n model: this._options.model,\n provider: this._options.provider,\n });\n const session = yield* AgentService.getSession(this._feed, {\n model: this._options.model,\n provider: this._options.provider,\n });\n const ephemeralStream = session.subscribeEphemeral();\n yield* ephemeralStream.pipe(\n Stream.runForEach((message) =>\n Effect.sync(() => {\n for (const event of message.events) {\n if (Trace.isOfType(PartialBlock, event)) {\n this.#handleEphemeralMessage(event.data);\n } else if (Trace.isOfType(McpServerError, event)) {\n this.#handleMcpError(event.data);\n }\n }\n }),\n ),\n Effect.fork,\n );\n\n log('chat processor submitting prompt', { length: requestProp.message.length });\n yield* session.submitPrompt(requestProp.message);\n log('chat processor submitPrompt returned, waiting for agent', {});\n\n // On the first message (no name yet), schedule rename immediately so it\n // runs concurrently with the AI response rather than waiting for completion.\n if (!this._options.chat?.target?.name) {\n yield* this.#updateChatName(requestProp.message);\n }\n\n yield* session.waitForCompletion();\n log.info('session complete');\n\n this.#flushStreaming();\n });\n\n this.#requestFiber = this._runtime.runFork(effect.pipe(Effect.provide(this._spaceLayer)));\n\n // Inspect the fiber's exit so the underlying failure (e.g. \"model 'x' not found\") is\n // preserved as a clean Error rather than an opaque FiberFailure.\n const exit = await this._runtime.runPromise(Fiber.await(this.#requestFiber));\n if (Exit.isFailure(exit)) {\n if (Cause.isInterruptedOnly(exit.cause)) {\n this.#discardStreaming();\n return;\n }\n\n throw EffectEx.causeToError(exit.cause);\n }\n\n this.#registry.set(this.error, Option.none());\n this.#lastRequest = undefined;\n this.#requestFiber = undefined;\n } catch (err) {\n // `EffectEx.causeToError` above unwraps the fiber failure into the underlying error (e.g. an AiError\n // carrying \"model 'x' not found\"); `parseError` decides what to surface to the user.\n log.error('request failed', { error: err });\n this.#registry.set(this.error, Option.some(parseError(err)));\n } finally {\n log.info('setting active to false');\n this.#registry.set(this.active, false);\n this.#requestFiber = undefined;\n }\n }\n\n /**\n * Cancels the current request.\n */\n async cancel(): Promise<void> {\n await EffectEx.runAndForwardErrors(\n Effect.gen(this, function* () {\n log.info('cancelling request', { fiber: this.#requestFiber });\n if (this.#requestFiber) {\n yield* Fiber.interrupt(this.#requestFiber);\n }\n const session = yield* AgentService.getSession(this._feed);\n yield* session.terminate();\n }).pipe(Effect.provide(this._spaceLayer)),\n );\n\n this.#requestFiber = undefined;\n this.#discardStreaming();\n this.#registry.set(this.active, false);\n }\n\n /**\n * Retry last failed request.\n */\n async retry(): Promise<void> {\n if (this.#lastRequest) {\n return this.request(this.#lastRequest);\n }\n }\n\n /**\n * Clears the recorded MCP server errors (e.g. after the user dismisses the warning banner).\n */\n dismissMcpErrors(): void {\n this.#registry.set(this.mcpErrors, []);\n }\n\n /**\n * Update the current chat's name.\n */\n async updateName(chat: Chat.Chat): Promise<void> {\n const spaceId = Obj.getDatabase(chat)?.spaceId;\n if (!spaceId) {\n return;\n }\n EffectEx.unwrapExit(\n await this._runtime.runPromiseExit(\n Operation.invoke(AssistantOperation.UpdateChatName, { chat }, { spaceId }).pipe(\n Effect.provide(this._spaceLayer),\n ),\n ),\n );\n }\n\n /**\n * Handles an ephemeral message from the agent process.\n * Both pending and completed blocks arrive here. Completed blocks are deduped\n * against messages already written to the feed queue to handle the race between\n * ephemeral delivery and feed replication.\n */\n #handleEphemeralMessage(event: Trace.PayloadType<typeof PartialBlock>) {\n const isPending = event.block.pending;\n const message = Obj.make(Message.Message, {\n id: event.messageId,\n created: new Date().toISOString(),\n sender: { role: event.role },\n blocks: [event.block],\n });\n\n if (isPending) {\n if (this.#finalizedIds.has(event.messageId)) {\n return;\n }\n this.#registry.update(this.#streaming, (streaming) => {\n const idx = streaming.findIndex((existing) => existing.id === event.messageId);\n if (idx >= 0) {\n const updated = [...streaming];\n updated[idx] = message;\n return updated;\n }\n return [...streaming, message];\n });\n } else {\n this.#finalizedIds.add(event.messageId);\n this.#registry.update(this.#streaming, (streaming) => streaming.filter((existing) => existing.id !== message.id));\n this.#registry.update(this.#pending, (pending) => {\n if (pending.some((existing) => existing.id === message.id)) {\n return pending;\n }\n return [...pending, message];\n });\n }\n }\n\n /**\n * Records a per-server MCP failure, deduped by url+protocol so repeat misconfigurations\n * across turns do not spam the UI.\n */\n #handleMcpError(event: Trace.PayloadType<typeof McpServerError>) {\n log.warn('MCP server error', event);\n this.#registry.update(this.mcpErrors, (errors) => {\n if (errors.some((existing) => existing.url === event.url && existing.protocol === event.protocol)) {\n return errors;\n }\n return [...errors, event];\n });\n }\n\n /**\n * Drop in-flight streaming messages (cancel/interrupt — partial blocks are discarded).\n */\n #discardStreaming() {\n this.#registry.set(this.#streaming, []);\n this.#finalizedIds.clear();\n }\n\n /**\n * Move remaining streaming messages to pending (called when agent completes).\n */\n #flushStreaming() {\n const remaining = this.#registry.get(this.#streaming);\n if (remaining.length > 0) {\n this.#registry.update(this.#pending, (pending) => [...pending, ...remaining]);\n this.#registry.set(this.#streaming, []);\n }\n this.#finalizedIds.clear();\n }\n\n /**\n * Schedule a chat name update as a detached (fire-and-forget) operation.\n * Called automatically on the first message; can also be invoked manually via the toolbar.\n */\n #updateChatName(prompt?: string): Effect.Effect<void, never, Operation.Service> {\n const chat = this._options.chat?.target;\n if (!chat) {\n return Effect.void;\n }\n\n const spaceId = Obj.getDatabase(chat)?.spaceId;\n if (!spaceId) {\n return Effect.void;\n }\n\n log.info('scheduling chat name update');\n return Operation.schedule(AssistantOperation.UpdateChatName, { chat, prompt }, { spaceId });\n }\n}\n", "//\n// Copyright 2026 DXOS.org\n//\n\n/** Walk an error's `cause` chain and return the first value matching `predicate`. */\nexport const findInCause = <T>(error: unknown, predicate: (value: unknown) => value is T): T | undefined => {\n let current: unknown = error;\n // Guard against self-referential / cyclic `cause` chains so traversal always terminates.\n const visited = new Set<unknown>();\n while (current) {\n if (visited.has(current)) {\n break;\n }\n visited.add(current);\n if (predicate(current)) {\n return current;\n }\n current = current instanceof Error ? current.cause : undefined;\n }\n return undefined;\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Model", "Provider", "DXN", "presetsForProvider", "provider", "forProvider", "map", "model", "id", "backend", "label", "resolveProvider", "hasBuiltIn", "resolved", "tryMake", "undefined", "edge", "ollama", "builtIn", "defaultsKeyForProvider", "lmStudio", "Atom", "Registry", "AtomRegistry", "AiError", "Cause", "Effect", "Exit", "Fiber", "Option", "Stream", "Model", "Harness", "McpServerError", "PartialBlock", "ToolExecutionServices", "createSystemPrompt", "formatSystemPrompt", "AgentService", "Operation", "Trace", "Obj", "UsageQuotaExceededError", "EffectEx", "log", "Message", "AssistantOperation", "findInCause", "error", "predicate", "current", "visited", "Set", "has", "add", "Error", "cause", "undefined", "defaultOptions", "Model", "labelKey", "AiError", "err", "QUOTA_PATTERN", "test", "quotaError", "isQuotaError", "AiUsageQuotaError", "trim", "message", "Error", "Atom", "make", "messages", "error", "_runtime", "_feed", "_spaceLayer", "_options", "capabilities", "getCapabilities", "system", "createSystemPrompt", "context", "conversation", "registry", "getTools", "getSystemPrompt", "objects", "getObjects", "skills", "pipe", "feed", "runtime", "binder", "Effect", "provide", "set", "active", "gen", "log", "model", "provider", "session", "AgentService", "ephemeralStream", "event", "isOfType", "PartialBlock", "McpServerError", "data", "length", "requestProp", "submitPrompt", "waitForCompletion", "Cause", "isInterruptedOnly", "exit", "Option", "undefined", "info", "Fiber", "interrupt", "getSession", "EffectEx", "spaceId", "Message", "id", "messageId", "created", "Date", "toISOString", "sender", "role", "blocks", "isPending", "updated", "streaming", "update", "pending", "existing", "errors", "protocol", "remaining", "clear", "void", "Obj", "chat", "prompt"]
|
|
7
|
+
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
// src/
|
|
1
|
+
// src/skills/assistant/skill.ts
|
|
2
2
|
import { LayoutOperation } from "@dxos/app-toolkit";
|
|
3
3
|
import { templates } from "@dxos/assistant";
|
|
4
|
-
import {
|
|
4
|
+
import { Skill } from "@dxos/compute";
|
|
5
5
|
import { AssistantOperation } from "#types";
|
|
6
|
-
var
|
|
7
|
-
var make = () =>
|
|
8
|
-
key:
|
|
6
|
+
var SKILL_KEY = "org.dxos.skill.assistant";
|
|
7
|
+
var make = () => Skill.make({
|
|
8
|
+
key: SKILL_KEY,
|
|
9
9
|
name: "Assistant",
|
|
10
|
-
tools:
|
|
10
|
+
tools: Skill.toolDefinitions({
|
|
11
11
|
// TODO(wittjosiah): LayoutOperation.Open requires Capability.Service which is only available
|
|
12
|
-
// via the compute-runtime layer (plugin-
|
|
12
|
+
// via the compute-runtime layer (plugin-routine). Once Capability.Service is propagated
|
|
13
13
|
// through LocalFunctionExecutionService, this will work without the compute-runtime dependency.
|
|
14
14
|
operations: [
|
|
15
15
|
LayoutOperation.Open,
|
|
@@ -18,13 +18,13 @@ var make = () => Blueprint.make({
|
|
|
18
18
|
}),
|
|
19
19
|
instructions: templates.system
|
|
20
20
|
});
|
|
21
|
-
var
|
|
22
|
-
key:
|
|
21
|
+
var skill = {
|
|
22
|
+
key: SKILL_KEY,
|
|
23
23
|
make
|
|
24
24
|
};
|
|
25
|
-
var
|
|
25
|
+
var skill_default = skill;
|
|
26
26
|
|
|
27
27
|
export {
|
|
28
|
-
|
|
28
|
+
skill_default
|
|
29
29
|
};
|
|
30
|
-
//# sourceMappingURL=chunk-
|
|
30
|
+
//# sourceMappingURL=chunk-CMPLPDYE.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/skills/assistant/skill.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { templates } from '@dxos/assistant';\nimport { Skill } from '@dxos/compute';\n\nimport { AssistantOperation } from '#types';\n\nconst SKILL_KEY = 'org.dxos.skill.assistant';\n\nconst make = () =>\n Skill.make({\n key: SKILL_KEY,\n name: 'Assistant',\n tools: Skill.toolDefinitions({\n // TODO(wittjosiah): LayoutOperation.Open requires Capability.Service which is only available\n // via the compute-runtime layer (plugin-routine). Once Capability.Service is propagated\n // through LocalFunctionExecutionService, this will work without the compute-runtime dependency.\n operations: [LayoutOperation.Open, AssistantOperation.ResolveNavigationTargets],\n }),\n instructions: templates.system,\n });\n\nconst skill: Skill.Definition = {\n key: SKILL_KEY,\n make,\n};\n\nexport default skill;\n"],
|
|
5
|
+
"mappings": ";AAIA,SAASA,uBAAuB;AAChC,SAASC,iBAAiB;AAC1B,SAASC,aAAa;AAEtB,SAASC,0BAA0B;AAEnC,IAAMC,YAAY;AAElB,IAAMC,OAAO,MACXH,MAAMG,KAAK;EACTC,KAAKF;EACLG,MAAM;EACNC,OAAON,MAAMO,gBAAgB;;;;IAI3BC,YAAY;MAACV,gBAAgBW;MAAMR,mBAAmBS;;EACxD,CAAA;EACAC,cAAcZ,UAAUa;AAC1B,CAAA;AAEF,IAAMC,QAA0B;EAC9BT,KAAKF;EACLC;AACF;AAEA,IAAA,gBAAeU;",
|
|
6
|
+
"names": ["LayoutOperation", "templates", "Skill", "AssistantOperation", "SKILL_KEY", "make", "key", "name", "tools", "toolDefinitions", "operations", "Open", "ResolveNavigationTargets", "instructions", "system", "skill"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// src/operations/index.ts
|
|
2
|
+
import { OperationHandlerSet } from "@dxos/compute";
|
|
3
|
+
var AssistantOperationHandlerSet = OperationHandlerSet.lazy(() => import("./create-chat-YGVZZYGP.mjs"), () => import("./ensure-companion-chat-AMOF3C66.mjs"), () => import("./fork-chat-RMAAYYQF.mjs"), () => import("./generate-home-suggestions-6MM2XWPV.mjs"), () => import("./resolve-navigation-targets-PBQ3OLUE.mjs"), () => import("./run-prompt-in-new-chat-RNUJE2FM.mjs"), () => import("./set-current-chat-VWBPSIMZ.mjs"), () => import("./toggle-trace-panel-debug-JGTB6KVJ.mjs"), () => import("./update-chat-name-IJJELRR6.mjs"));
|
|
4
|
+
|
|
5
|
+
export {
|
|
6
|
+
AssistantOperationHandlerSet
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=chunk-GPHT3HYS.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/operations/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { OperationHandlerSet } from '@dxos/compute';\n\nexport const AssistantOperationHandlerSet = OperationHandlerSet.lazy(\n () => import('./create-chat'),\n () => import('./ensure-companion-chat'),\n () => import('./fork-chat'),\n () => import('./resolve-navigation-targets'),\n () => import('./run-prompt-in-new-chat'),\n () => import('./set-current-chat'),\n () => import('./toggle-trace-panel-debug'),\n () => import('./update-chat-name'),\n);\n"],
|
|
5
|
-
"mappings": ";AAIA,SAASA,2BAA2B;AAE7B,IAAMC,+BAA+BD,oBAAoBE,KAC9D,MAAM,OAAO,4BAAA,GACb,MAAM,OAAO,sCAAA,GACb,MAAM,OAAO,0BAAA,GACb,MAAM,OAAO,2CAAA,GACb,MAAM,OAAO,uCAAA,GACb,MAAM,OAAO,iCAAA,GACb,MAAM,OAAO,yCAAA,GACb,MAAM,OAAO,iCAAA,CAAA;",
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { OperationHandlerSet } from '@dxos/compute';\n\nexport const AssistantOperationHandlerSet = OperationHandlerSet.lazy(\n () => import('./create-chat'),\n () => import('./ensure-companion-chat'),\n () => import('./fork-chat'),\n () => import('./generate-home-suggestions'),\n () => import('./resolve-navigation-targets'),\n () => import('./run-prompt-in-new-chat'),\n () => import('./set-current-chat'),\n () => import('./toggle-trace-panel-debug'),\n () => import('./update-chat-name'),\n);\n"],
|
|
5
|
+
"mappings": ";AAIA,SAASA,2BAA2B;AAE7B,IAAMC,+BAA+BD,oBAAoBE,KAC9D,MAAM,OAAO,4BAAA,GACb,MAAM,OAAO,sCAAA,GACb,MAAM,OAAO,0BAAA,GACb,MAAM,OAAO,0CAAA,GACb,MAAM,OAAO,2CAAA,GACb,MAAM,OAAO,uCAAA,GACb,MAAM,OAAO,iCAAA,GACb,MAAM,OAAO,yCAAA,GACb,MAAM,OAAO,iCAAA,CAAA;",
|
|
6
6
|
"names": ["OperationHandlerSet", "AssistantOperationHandlerSet", "lazy"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// src/extensions/prompt-extension.ts
|
|
2
|
+
import { syntaxTree } from "@codemirror/language";
|
|
3
|
+
import { Facet } from "@codemirror/state";
|
|
4
|
+
import { Decoration, EditorView, ViewPlugin, WidgetType } from "@codemirror/view";
|
|
5
|
+
import { Domino } from "@dxos/ui";
|
|
6
|
+
var promptHandlerFacet = Facet.define({
|
|
7
|
+
combine: (handlers) => handlers[0] ?? null
|
|
8
|
+
});
|
|
9
|
+
var promptPlugin = ViewPlugin.fromClass(class {
|
|
10
|
+
decorations;
|
|
11
|
+
constructor(view) {
|
|
12
|
+
this.decorations = this.buildDecorations(view);
|
|
13
|
+
}
|
|
14
|
+
update(update) {
|
|
15
|
+
if (update.docChanged || update.viewportChanged || update.selectionSet || update.focusChanged || update.startState.facet(promptHandlerFacet) !== update.state.facet(promptHandlerFacet)) {
|
|
16
|
+
this.decorations = this.buildDecorations(update.view);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
buildDecorations(view) {
|
|
20
|
+
const onRun = view.state.facet(promptHandlerFacet);
|
|
21
|
+
if (!onRun) {
|
|
22
|
+
return Decoration.none;
|
|
23
|
+
}
|
|
24
|
+
const ranges = [];
|
|
25
|
+
syntaxTree(view.state).iterate({
|
|
26
|
+
enter: (node) => {
|
|
27
|
+
if (node.name === "FencedCode") {
|
|
28
|
+
const info = node.node.getChild("CodeInfo");
|
|
29
|
+
if (info) {
|
|
30
|
+
const type = view.state.sliceDoc(info.from, info.to);
|
|
31
|
+
const text = node.node.getChild("CodeText");
|
|
32
|
+
if (type === "prompt" && text) {
|
|
33
|
+
const content = view.state.sliceDoc(text.from, text.to).trim();
|
|
34
|
+
if (content.length > 0) {
|
|
35
|
+
ranges.push(Decoration.line({
|
|
36
|
+
class: "cm-prompt-header"
|
|
37
|
+
}).range(node.from, node.from));
|
|
38
|
+
ranges.push(Decoration.widget({
|
|
39
|
+
widget: new PromptRunWidget(content, onRun),
|
|
40
|
+
side: -1
|
|
41
|
+
}).range(node.from, node.from));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
return Decoration.set(ranges, true);
|
|
49
|
+
}
|
|
50
|
+
}, {
|
|
51
|
+
decorations: (v) => v.decorations
|
|
52
|
+
});
|
|
53
|
+
var promptTheme = EditorView.baseTheme({
|
|
54
|
+
".cm-prompt-header": {
|
|
55
|
+
position: "relative",
|
|
56
|
+
overflow: "visible"
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
var promptRunExtension = ({ onRun }) => [
|
|
60
|
+
promptHandlerFacet.of(onRun),
|
|
61
|
+
promptPlugin,
|
|
62
|
+
promptTheme
|
|
63
|
+
];
|
|
64
|
+
var PromptRunWidget = class extends WidgetType {
|
|
65
|
+
prompt;
|
|
66
|
+
onClick;
|
|
67
|
+
constructor(prompt, onClick) {
|
|
68
|
+
super(), this.prompt = prompt, this.onClick = onClick;
|
|
69
|
+
}
|
|
70
|
+
eq(other) {
|
|
71
|
+
return this.prompt === other.prompt && this.onClick === other.onClick;
|
|
72
|
+
}
|
|
73
|
+
ignoreEvent() {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
toDOM() {
|
|
77
|
+
return Domino.of("button").classNames("dx-button h-6 w-6 min-h-0 p-1 absolute top-0 right-0 bg-green-bg hover:bg-green-surface text-green-fg").on("mousedown", (event) => {
|
|
78
|
+
event.preventDefault();
|
|
79
|
+
event.stopPropagation();
|
|
80
|
+
this.onClick(this.prompt);
|
|
81
|
+
}).append(Domino.of("svg", Domino.SVG).classNames("w-4 h-4 cursor-pointer").append(Domino.of("use", Domino.SVG).attributes({
|
|
82
|
+
href: Domino.icon("ph--sparkle--regular")
|
|
83
|
+
}))).root;
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export {
|
|
88
|
+
promptRunExtension
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=chunk-HKLSFB5I.mjs.map
|