@dxos/plugin-assistant 0.8.4-main.abd8ff62ef → 0.8.4-main.bc2380dfbc
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +102 -5
- package/README.md +1 -1
- package/dist/lib/neutral/AgentArticle-5XDDEXMP.mjs +169 -0
- package/dist/lib/neutral/AgentArticle-5XDDEXMP.mjs.map +7 -0
- package/dist/lib/neutral/AgentProperties-CNH4JMDZ.mjs +100 -0
- package/dist/lib/neutral/AgentProperties-CNH4JMDZ.mjs.map +7 -0
- package/dist/lib/neutral/AssistantPlugin.mjs +10 -0
- package/dist/lib/neutral/AssistantPlugin.node.mjs +46 -0
- package/dist/lib/neutral/AssistantPlugin.node.mjs.map +7 -0
- package/dist/lib/neutral/AssistantPlugin.workerd.mjs +40 -0
- package/dist/lib/neutral/AssistantPlugin.workerd.mjs.map +7 -0
- package/dist/lib/neutral/BlueprintArticle-U7LUBFOS.mjs +27 -0
- package/dist/lib/neutral/BlueprintArticle-U7LUBFOS.mjs.map +7 -0
- package/dist/lib/neutral/ChatArticle-WVAFZPVI.mjs +8 -0
- package/dist/lib/neutral/ChatCompanion-DFRMRUK3.mjs +133 -0
- package/dist/lib/neutral/ChatCompanion-DFRMRUK3.mjs.map +7 -0
- package/dist/lib/neutral/ChatDialog-QKZLG7SQ.mjs +72 -0
- package/dist/lib/neutral/ChatDialog-QKZLG7SQ.mjs.map +7 -0
- package/dist/lib/neutral/PlanArticle-TS5ULWYS.mjs +28 -0
- package/dist/lib/neutral/PlanArticle-TS5ULWYS.mjs.map +7 -0
- package/dist/lib/neutral/RoutineArticle-H7ECM7AH.mjs +116 -0
- package/dist/lib/neutral/RoutineArticle-H7ECM7AH.mjs.map +7 -0
- package/dist/lib/neutral/RoutineList-CLDXGQUD.mjs +48 -0
- package/dist/lib/neutral/RoutineList-CLDXGQUD.mjs.map +7 -0
- package/dist/lib/neutral/TracePanel-C77SPEIS.mjs +672 -0
- package/dist/lib/neutral/TracePanel-C77SPEIS.mjs.map +7 -0
- package/dist/lib/neutral/TriggerStatus-WTFYUIG5.mjs +92 -0
- package/dist/lib/neutral/TriggerStatus-WTFYUIG5.mjs.map +7 -0
- package/dist/lib/neutral/ai-service-GJXMI5OI.mjs +22 -0
- package/dist/lib/neutral/ai-service-GJXMI5OI.mjs.map +7 -0
- package/dist/lib/neutral/app-graph-builder-5QBICPYP.mjs +200 -0
- package/dist/lib/neutral/app-graph-builder-5QBICPYP.mjs.map +7 -0
- package/dist/lib/neutral/blueprint-definition-VXJYQ5AE.mjs +32 -0
- package/dist/lib/neutral/blueprint-definition-VXJYQ5AE.mjs.map +7 -0
- package/dist/lib/neutral/blueprints/index.mjs +8 -0
- package/dist/lib/neutral/capabilities/index.mjs +35 -0
- package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
- package/dist/lib/neutral/chunk-3FIV362Z.mjs +8 -0
- package/dist/lib/neutral/chunk-3FIV362Z.mjs.map +7 -0
- package/dist/lib/neutral/chunk-4CQZCMRP.mjs +25 -0
- package/dist/lib/neutral/chunk-4CQZCMRP.mjs.map +7 -0
- package/dist/lib/{browser/blueprints/index.mjs → neutral/chunk-5H6UJHLF.mjs} +4 -5
- package/dist/lib/neutral/chunk-5H6UJHLF.mjs.map +7 -0
- package/dist/lib/neutral/chunk-ITJX2YZZ.mjs +98 -0
- package/dist/lib/neutral/chunk-ITJX2YZZ.mjs.map +7 -0
- package/dist/lib/neutral/chunk-IZQWGJNG.mjs +380 -0
- package/dist/lib/neutral/chunk-IZQWGJNG.mjs.map +7 -0
- package/dist/lib/neutral/chunk-SLIPV6NN.mjs +106 -0
- package/dist/lib/neutral/chunk-SLIPV6NN.mjs.map +7 -0
- package/dist/lib/neutral/companion-chat-provisioner-2Y6PRSDK.mjs +116 -0
- package/dist/lib/neutral/companion-chat-provisioner-2Y6PRSDK.mjs.map +7 -0
- package/dist/lib/{browser/chunk-VK53MITK.mjs → neutral/components/index.mjs} +139 -141
- package/dist/lib/neutral/components/index.mjs.map +7 -0
- package/dist/lib/neutral/containers/index.mjs +29 -0
- package/dist/lib/neutral/containers/index.mjs.map +7 -0
- package/dist/lib/{browser/create-chat-E2ZLVTLP.mjs → neutral/create-chat-QQZURUBW.mjs} +10 -12
- package/dist/lib/neutral/create-chat-QQZURUBW.mjs.map +7 -0
- package/dist/lib/neutral/create-object-UZCJCPWM.mjs +93 -0
- package/dist/lib/neutral/create-object-UZCJCPWM.mjs.map +7 -0
- package/dist/lib/neutral/edge-model-resolver-XDNBZ3US.mjs +21 -0
- package/dist/lib/neutral/edge-model-resolver-XDNBZ3US.mjs.map +7 -0
- package/dist/lib/{browser/ensure-companion-chat-7GDMXSQW.mjs → neutral/ensure-companion-chat-5S4LZM2H.mjs} +9 -16
- package/dist/lib/neutral/ensure-companion-chat-5S4LZM2H.mjs.map +7 -0
- package/dist/lib/{browser/chunk-M55MBYG7.mjs → neutral/hooks/index.mjs} +106 -111
- package/dist/lib/neutral/hooks/index.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +32 -0
- package/dist/lib/neutral/local-model-resolver-I2BENFFS.mjs +24 -0
- package/dist/lib/neutral/local-model-resolver-I2BENFFS.mjs.map +7 -0
- package/dist/lib/neutral/markdown-KTBFOMFM.mjs +110 -0
- package/dist/lib/neutral/markdown-KTBFOMFM.mjs.map +7 -0
- package/dist/lib/neutral/meta.json +1 -0
- package/dist/lib/neutral/meta.mjs +12 -0
- package/dist/lib/neutral/migrations-7DEMVBOG.mjs +28 -0
- package/dist/lib/neutral/migrations-7DEMVBOG.mjs.map +7 -0
- package/dist/lib/{browser/on-create-space-4J3KTNAJ.mjs → neutral/on-create-space-Q2R7OSP6.mjs} +4 -7
- package/dist/lib/neutral/on-create-space-Q2R7OSP6.mjs.map +7 -0
- package/dist/lib/neutral/operation-handler-SF36MOB5.mjs +13 -0
- package/dist/lib/neutral/operation-handler-SF36MOB5.mjs.map +7 -0
- package/dist/lib/neutral/operations/index.mjs +8 -0
- package/dist/lib/neutral/plugin.mjs +16 -0
- package/dist/lib/neutral/plugin.mjs.map +7 -0
- package/dist/lib/neutral/react-surface-T4R65UJU.mjs +174 -0
- package/dist/lib/neutral/react-surface-T4R65UJU.mjs.map +7 -0
- package/dist/lib/{browser/resolve-navigation-targets-3ZPQE6SZ.mjs → neutral/resolve-navigation-targets-VXBSWV5L.mjs} +3 -5
- package/dist/lib/neutral/resolve-navigation-targets-VXBSWV5L.mjs.map +7 -0
- package/dist/lib/{browser/run-prompt-in-new-chat-AA3KPBDN.mjs → neutral/run-prompt-in-new-chat-VJXXZ6SI.mjs} +16 -19
- package/dist/lib/neutral/run-prompt-in-new-chat-VJXXZ6SI.mjs.map +7 -0
- package/dist/lib/{browser/set-current-chat-P4VHI3YF.mjs → neutral/set-current-chat-ZFDCYK5I.mjs} +4 -10
- package/dist/lib/neutral/set-current-chat-ZFDCYK5I.mjs.map +7 -0
- package/dist/lib/neutral/settings-W4BLWQ53.mjs +28 -0
- package/dist/lib/neutral/settings-W4BLWQ53.mjs.map +7 -0
- package/dist/lib/neutral/state-H3G7QCU6.mjs +28 -0
- package/dist/lib/neutral/state-H3G7QCU6.mjs.map +7 -0
- package/dist/lib/neutral/testing.mjs +8 -0
- package/dist/lib/neutral/toggle-trace-panel-debug-JGTB6KVJ.mjs +21 -0
- package/dist/lib/neutral/toggle-trace-panel-debug-JGTB6KVJ.mjs.map +7 -0
- package/dist/lib/neutral/toolkit-GVWXPDLJ.mjs +14 -0
- package/dist/lib/neutral/toolkit-GVWXPDLJ.mjs.map +7 -0
- package/dist/lib/{browser → neutral}/translations.mjs +5 -2
- package/dist/lib/neutral/translations.mjs.map +7 -0
- package/dist/lib/neutral/types/index.mjs +20 -0
- package/dist/lib/neutral/types/index.mjs.map +7 -0
- package/dist/lib/{browser/update-chat-name-VWKNUON7.mjs → neutral/update-chat-name-ENXRUMDJ.mjs} +3 -5
- package/dist/lib/neutral/update-chat-name-ENXRUMDJ.mjs.map +7 -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 +4 -0
- package/dist/types/src/AssistantPlugin.workerd.d.ts.map +1 -0
- package/dist/types/src/capabilities/companion-chat-provisioner.d.ts.map +1 -1
- package/dist/types/src/capabilities/create-object.d.ts +31 -0
- package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +27 -1
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/markdown.d.ts +1 -1
- package/dist/types/src/capabilities/migrations.d.ts +2 -1
- package/dist/types/src/capabilities/migrations.d.ts.map +1 -1
- package/dist/types/src/components/Chat/Chat.d.ts +11 -5
- package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
- package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts +2 -2
- package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts.map +1 -1
- package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts +2 -2
- package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +2 -3
- package/dist/types/src/components/ChatThread/ChatThread.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/StatusWidget.d.ts +2 -15
- package/dist/types/src/components/ChatThread/widgets/StatusWidget.d.ts.map +1 -1
- package/dist/types/src/components/ChatThread/widgets/SummaryWidget.d.ts.map +1 -1
- package/dist/types/src/components/ProcessTree/ProcessTree.d.ts.map +1 -1
- package/dist/types/src/components/TaskList/TaskList.d.ts +10 -0
- package/dist/types/src/components/TaskList/TaskList.d.ts.map +1 -0
- package/dist/types/src/components/TaskList/TaskList.stories.d.ts +16 -0
- package/dist/types/src/components/TaskList/TaskList.stories.d.ts.map +1 -0
- package/dist/types/src/components/TaskList/index.d.ts +2 -0
- package/dist/types/src/components/TaskList/index.d.ts.map +1 -0
- package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +1 -2
- package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +1 -1
- package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts +1 -1
- package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +1 -1
- package/dist/types/src/components/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.map +1 -1
- package/dist/types/src/containers/{ChatContainer/ChatContainer.d.ts → ChatArticle/ChatArticle.d.ts} +3 -3
- package/dist/types/src/containers/ChatArticle/ChatArticle.d.ts.map +1 -0
- package/dist/types/src/containers/ChatArticle/index.d.ts +2 -0
- package/dist/types/src/containers/ChatArticle/index.d.ts.map +1 -0
- package/dist/types/src/containers/ChatCompanion/ChatCompanion.d.ts.map +1 -1
- package/dist/types/src/containers/PlanArticle/PlanArticle.d.ts +6 -0
- package/dist/types/src/containers/PlanArticle/PlanArticle.d.ts.map +1 -0
- package/dist/types/src/containers/PlanArticle/index.d.ts +2 -0
- package/dist/types/src/containers/PlanArticle/index.d.ts.map +1 -0
- package/dist/types/src/containers/RoutineArticle/RoutineArticle.d.ts.map +1 -1
- package/dist/types/src/containers/RoutineArticle/RoutineArticle.stories.d.ts +15 -0
- package/dist/types/src/containers/RoutineArticle/RoutineArticle.stories.d.ts.map +1 -0
- package/dist/types/src/containers/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/execution-graph.d.ts +11 -2
- package/dist/types/src/containers/TracePanel/execution-graph.d.ts.map +1 -1
- package/dist/types/src/containers/TracePanel/span-tree.d.ts +73 -0
- package/dist/types/src/containers/TracePanel/span-tree.d.ts.map +1 -0
- package/dist/types/src/containers/TracePanel/span-tree.test.d.ts +2 -0
- package/dist/types/src/containers/TracePanel/span-tree.test.d.ts.map +1 -0
- 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/feed-logger.d.ts +13 -0
- package/dist/types/src/feed-logger.d.ts.map +1 -0
- package/dist/types/src/hooks/useBlueprintRegistry.d.ts +3 -3
- package/dist/types/src/hooks/useBlueprintRegistry.d.ts.map +1 -1
- package/dist/types/src/hooks/useChatProcessor.d.ts +1 -1
- package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
- package/dist/types/src/hooks/useChatServices.d.ts +1 -1
- package/dist/types/src/hooks/useChatServices.d.ts.map +1 -1
- package/dist/types/src/hooks/useChatToolbarActions.d.ts.map +1 -1
- package/dist/types/src/hooks/useContextBinder.d.ts +2 -2
- package/dist/types/src/hooks/useContextBinder.d.ts.map +1 -1
- package/dist/types/src/hooks/useContextObjects.d.ts +2 -2
- package/dist/types/src/hooks/useContextObjects.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +2 -4
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/operations/create-chat.d.ts +2 -2
- package/dist/types/src/operations/create-chat.d.ts.map +1 -1
- package/dist/types/src/operations/ensure-companion-chat.d.ts +2 -2
- package/dist/types/src/operations/ensure-companion-chat.d.ts.map +1 -1
- package/dist/types/src/operations/index.d.ts +0 -1
- package/dist/types/src/operations/index.d.ts.map +1 -1
- package/dist/types/src/operations/on-create-space.d.ts +2 -2
- package/dist/types/src/operations/on-create-space.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/operations/set-current-chat.d.ts +2 -2
- package/dist/types/src/operations/set-current-chat.d.ts.map +1 -1
- package/dist/types/src/operations/toggle-trace-panel-debug.d.ts +5 -0
- package/dist/types/src/operations/toggle-trace-panel-debug.d.ts.map +1 -0
- package/dist/types/src/operations/update-chat-name.d.ts +2 -2
- package/dist/types/src/operations/update-chat-name.d.ts.map +1 -1
- package/dist/types/src/plugin.d.ts +4 -0
- package/dist/types/src/plugin.d.ts.map +1 -0
- package/dist/types/src/processor/processor.d.ts +11 -11
- package/dist/types/src/processor/processor.d.ts.map +1 -1
- package/dist/types/src/testing/test-generator.d.ts +2 -3
- package/dist/types/src/testing/test-generator.d.ts.map +1 -1
- package/dist/types/src/testing/test-sequence.d.ts +3 -3
- package/dist/types/src/testing/test-sequence.d.ts.map +1 -1
- package/dist/types/src/testing.d.ts +2 -0
- package/dist/types/src/testing.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/Assistant.d.ts +1 -0
- package/dist/types/src/types/Assistant.d.ts.map +1 -1
- package/dist/types/src/types/AssistantCapabilities.d.ts +30 -0
- package/dist/types/src/types/AssistantCapabilities.d.ts.map +1 -0
- package/dist/types/src/types/AssistantEvents.d.ts +3 -0
- package/dist/types/src/types/AssistantEvents.d.ts.map +1 -0
- package/dist/types/src/{operations/definitions.d.ts → types/AssistantOperation.d.ts} +10 -6
- package/dist/types/src/types/AssistantOperation.d.ts.map +1 -0
- package/dist/types/src/types/Settings.d.ts +1 -0
- package/dist/types/src/types/Settings.d.ts.map +1 -1
- package/dist/types/src/types/index.d.ts +3 -2
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/util/suggestions.d.ts +9 -0
- package/dist/types/src/util/suggestions.d.ts.map +1 -0
- package/dist/types/src/util/suggestions.test.d.ts +2 -0
- package/dist/types/src/util/suggestions.test.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +152 -128
- package/src/AssistantPlugin.node.ts +7 -88
- package/src/AssistantPlugin.test.ts +3 -3
- package/src/AssistantPlugin.ts +126 -0
- package/src/AssistantPlugin.workerd.ts +41 -0
- package/src/blueprints/assistant/blueprint.ts +1 -1
- package/src/capabilities/app-graph-builder.ts +48 -9
- package/src/capabilities/companion-chat-provisioner.ts +4 -5
- package/src/capabilities/create-object.ts +107 -0
- package/src/capabilities/index.ts +1 -0
- package/src/capabilities/markdown.ts +2 -2
- package/src/capabilities/migrations.ts +3 -3
- package/src/capabilities/react-surface.tsx +15 -7
- package/src/components/Chat/Chat.tsx +35 -5
- package/src/components/ChatPrompt/ChatMcpErrors.tsx +1 -1
- package/src/components/ChatPrompt/ChatOptions.stories.tsx +4 -4
- package/src/components/ChatPrompt/ChatOptions.tsx +12 -11
- package/src/components/ChatPrompt/ChatPrompt.tsx +3 -3
- package/src/components/ChatPrompt/ChatReferences.tsx +3 -3
- package/src/components/ChatPrompt/ChatStatus.tsx +1 -1
- package/src/components/ChatPrompt/ChatStatusIndicator.tsx +1 -1
- package/src/components/ChatThread/Anchor.stories.tsx +3 -3
- package/src/components/ChatThread/ChatThread.stories.tsx +25 -29
- package/src/components/ChatThread/ChatThread.tsx +1 -1
- package/src/components/ChatThread/registry.tsx +8 -4
- package/src/components/ChatThread/sync.test.ts +4 -6
- package/src/components/ChatThread/widgets/ReasoningWidget.ts +2 -2
- package/src/components/ChatThread/widgets/StatusWidget.ts +3 -83
- package/src/components/ChatThread/widgets/SummaryWidget.tsx +1 -3
- package/src/components/ProcessTree/ProcessTree.tsx +2 -1
- package/src/components/TaskList/TaskList.stories.tsx +44 -0
- package/src/components/TaskList/TaskList.tsx +45 -0
- package/src/{cli → components/TaskList}/index.ts +1 -1
- package/src/components/TemplateEditor/TemplateEditor.stories.tsx +1 -1
- package/src/components/TemplateEditor/TemplateForm.stories.tsx +2 -6
- package/src/components/TemplateEditor/TemplateForm.tsx +48 -69
- package/src/components/Toolbox/Toolbox.stories.tsx +4 -4
- package/src/components/Toolbox/Toolbox.tsx +2 -2
- package/src/components/index.ts +1 -0
- package/src/containers/AgentArticle/AgentArticle.stories.tsx +7 -7
- package/src/containers/AgentArticle/AgentArticle.tsx +11 -7
- package/src/containers/AgentProperties/AgentProperties.stories.tsx +4 -4
- package/src/containers/AgentProperties/AgentProperties.tsx +4 -4
- package/src/containers/{ChatContainer/ChatContainer.tsx → ChatArticle/ChatArticle.tsx} +11 -9
- package/src/containers/ChatArticle/index.ts +5 -0
- package/src/containers/ChatCompanion/ChatCompanion.tsx +20 -29
- package/src/containers/PlanArticle/PlanArticle.tsx +33 -0
- package/src/containers/PlanArticle/index.ts +5 -0
- package/src/containers/RoutineArticle/RoutineArticle.stories.tsx +75 -0
- package/src/containers/RoutineArticle/RoutineArticle.tsx +74 -24
- package/src/containers/RoutineList/RoutineList.stories.tsx +3 -3
- package/src/containers/RoutineList/RoutineList.tsx +3 -3
- package/src/containers/TracePanel/TracePanel.stories.tsx +33 -26
- package/src/containers/TracePanel/TracePanel.tsx +72 -33
- package/src/containers/TracePanel/dxn-extractor.ts +7 -7
- package/src/containers/TracePanel/execution-graph.test.ts +218 -213
- package/src/containers/TracePanel/execution-graph.ts +316 -271
- package/src/containers/TracePanel/span-tree.test.ts +166 -0
- package/src/containers/TracePanel/span-tree.ts +214 -0
- package/src/containers/index.ts +4 -3
- package/src/{queue-logger.ts → feed-logger.ts} +37 -27
- package/src/hooks/useBlueprintRegistry.ts +12 -6
- package/src/hooks/useChatProcessor.ts +3 -3
- package/src/hooks/useChatServices.ts +1 -1
- package/src/hooks/useChatToolbarActions.ts +86 -88
- package/src/hooks/useContextBinder.ts +4 -4
- package/src/hooks/useContextObjects.ts +2 -2
- package/src/index.ts +2 -9
- package/src/operations/create-chat.ts +16 -11
- package/src/operations/ensure-companion-chat.ts +47 -45
- package/src/operations/index.ts +1 -2
- package/src/operations/on-create-space.ts +3 -3
- package/src/operations/prompt.test.ts +5 -5
- package/src/operations/resolve-navigation-targets.ts +2 -2
- package/src/operations/run-prompt-in-new-chat.ts +85 -84
- package/src/operations/set-current-chat.ts +3 -4
- package/src/operations/toggle-trace-panel-debug.ts +27 -0
- package/src/operations/update-chat-name.ts +2 -2
- package/src/plugin.ts +11 -0
- package/src/processor/processor.test.ts +1 -1
- package/src/processor/processor.ts +15 -15
- package/src/testing/test-generator.test.ts +41 -52
- package/src/testing/test-generator.ts +174 -189
- package/src/testing/test-sequence.ts +3 -3
- package/src/testing/trace-timeline.conversations.json +1 -1
- package/src/testing/trace-timeline.test.ts +3 -5
- package/src/testing.ts +7 -0
- package/src/translations.ts +5 -2
- package/src/types/Assistant.ts +2 -1
- package/src/types/AssistantCapabilities.ts +35 -0
- package/src/types/AssistantEvents.ts +11 -0
- package/src/{operations/definitions.ts → types/AssistantOperation.ts} +15 -0
- package/src/types/Settings.ts +6 -0
- package/src/types/index.ts +5 -2
- package/src/util/suggestions.test.ts +52 -0
- package/src/util/suggestions.ts +42 -0
- package/dist/lib/browser/blueprints/index.mjs.map +0 -7
- package/dist/lib/browser/chunk-DVOOFAWU.mjs +0 -175
- package/dist/lib/browser/chunk-DVOOFAWU.mjs.map +0 -7
- package/dist/lib/browser/chunk-M55MBYG7.mjs.map +0 -7
- package/dist/lib/browser/chunk-SEMCG4ZK.mjs +0 -195
- package/dist/lib/browser/chunk-SEMCG4ZK.mjs.map +0 -7
- package/dist/lib/browser/chunk-VK53MITK.mjs.map +0 -7
- package/dist/lib/browser/cli/index.mjs +0 -73
- package/dist/lib/browser/cli/index.mjs.map +0 -7
- package/dist/lib/browser/components/index.mjs +0 -20
- package/dist/lib/browser/create-chat-E2ZLVTLP.mjs.map +0 -7
- package/dist/lib/browser/ensure-companion-chat-7GDMXSQW.mjs.map +0 -7
- package/dist/lib/browser/hooks/index.mjs +0 -39
- package/dist/lib/browser/index.mjs +0 -84
- package/dist/lib/browser/index.mjs.map +0 -7
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/on-create-space-4J3KTNAJ.mjs.map +0 -7
- package/dist/lib/browser/operations/index.mjs +0 -13
- package/dist/lib/browser/operations/index.mjs.map +0 -7
- package/dist/lib/browser/resolve-navigation-targets-3ZPQE6SZ.mjs.map +0 -7
- package/dist/lib/browser/run-prompt-in-new-chat-AA3KPBDN.mjs.map +0 -7
- package/dist/lib/browser/set-current-chat-P4VHI3YF.mjs.map +0 -7
- package/dist/lib/browser/translations.mjs.map +0 -7
- package/dist/lib/browser/types/index.mjs +0 -18
- package/dist/lib/browser/update-chat-name-VWKNUON7.mjs.map +0 -7
- package/dist/lib/node-esm/AssistantSettings-23A5IMHS.mjs +0 -41
- package/dist/lib/node-esm/AssistantSettings-23A5IMHS.mjs.map +0 -7
- package/dist/lib/node-esm/blueprints/index.mjs +0 -32
- package/dist/lib/node-esm/blueprints/index.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-FWC3ZGPH.mjs +0 -933
- package/dist/lib/node-esm/chunk-FWC3ZGPH.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
- package/dist/lib/node-esm/chunk-JKEB3NFZ.mjs +0 -2302
- package/dist/lib/node-esm/chunk-JKEB3NFZ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-MBDVPB4V.mjs +0 -176
- package/dist/lib/node-esm/chunk-MBDVPB4V.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-XAFVSEUJ.mjs +0 -196
- package/dist/lib/node-esm/chunk-XAFVSEUJ.mjs.map +0 -7
- package/dist/lib/node-esm/cli/index.mjs +0 -74
- package/dist/lib/node-esm/cli/index.mjs.map +0 -7
- package/dist/lib/node-esm/components/index.mjs +0 -21
- package/dist/lib/node-esm/create-chat-UQQ3542N.mjs +0 -74
- package/dist/lib/node-esm/create-chat-UQQ3542N.mjs.map +0 -7
- package/dist/lib/node-esm/ensure-companion-chat-LVCPD4DJ.mjs +0 -66
- package/dist/lib/node-esm/ensure-companion-chat-LVCPD4DJ.mjs.map +0 -7
- package/dist/lib/node-esm/hooks/index.mjs +0 -40
- package/dist/lib/node-esm/index.mjs +0 -85
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/on-create-space-M63UBTTT.mjs +0 -23
- package/dist/lib/node-esm/on-create-space-M63UBTTT.mjs.map +0 -7
- package/dist/lib/node-esm/operations/index.mjs +0 -14
- package/dist/lib/node-esm/operations/index.mjs.map +0 -7
- package/dist/lib/node-esm/resolve-navigation-targets-HO77CAFT.mjs +0 -23
- package/dist/lib/node-esm/resolve-navigation-targets-HO77CAFT.mjs.map +0 -7
- package/dist/lib/node-esm/run-prompt-in-new-chat-RIRYYYPK.mjs +0 -107
- package/dist/lib/node-esm/run-prompt-in-new-chat-RIRYYYPK.mjs.map +0 -7
- package/dist/lib/node-esm/set-current-chat-Z7GJ52VX.mjs +0 -55
- package/dist/lib/node-esm/set-current-chat-Z7GJ52VX.mjs.map +0 -7
- package/dist/lib/node-esm/translations.mjs +0 -173
- package/dist/lib/node-esm/translations.mjs.map +0 -7
- package/dist/lib/node-esm/types/index.mjs +0 -19
- package/dist/lib/node-esm/update-chat-name-GV4HX32Z.mjs +0 -57
- package/dist/lib/node-esm/update-chat-name-GV4HX32Z.mjs.map +0 -7
- package/dist/types/src/cli/index.d.ts +0 -2
- package/dist/types/src/cli/index.d.ts.map +0 -1
- package/dist/types/src/cli/plugin.d.ts +0 -10
- package/dist/types/src/cli/plugin.d.ts.map +0 -1
- package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts.map +0 -1
- package/dist/types/src/containers/ChatContainer/index.d.ts +0 -2
- package/dist/types/src/containers/ChatContainer/index.d.ts.map +0 -1
- package/dist/types/src/operations/definitions.d.ts.map +0 -1
- package/dist/types/src/queue-logger.d.ts +0 -11
- package/dist/types/src/queue-logger.d.ts.map +0 -1
- package/dist/types/src/types/capabilities.d.ts +0 -32
- package/dist/types/src/types/capabilities.d.ts.map +0 -1
- package/dist/types/src/types/events.d.ts +0 -5
- package/dist/types/src/types/events.d.ts.map +0 -1
- package/src/AssistantPlugin.tsx +0 -238
- package/src/cli/plugin.ts +0 -83
- package/src/containers/ChatContainer/index.ts +0 -5
- package/src/types/capabilities.ts +0 -35
- package/src/types/events.ts +0 -11
- /package/dist/lib/{browser/chunk-J5LGTIGS.mjs.map → neutral/AssistantPlugin.mjs.map} +0 -0
- /package/dist/lib/{browser → neutral}/AssistantSettings-GG52BLKS.mjs +0 -0
- /package/dist/lib/{browser → neutral}/AssistantSettings-GG52BLKS.mjs.map +0 -0
- /package/dist/lib/{browser/components/index.mjs.map → neutral/ChatArticle-WVAFZPVI.mjs.map} +0 -0
- /package/dist/lib/{browser/hooks → neutral/blueprints}/index.mjs.map +0 -0
- /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs +0 -0
- /package/dist/lib/{browser/types/index.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
- /package/dist/lib/{node-esm/components → neutral}/index.mjs.map +0 -0
- /package/dist/lib/{node-esm/chunk-HSLMI22Q.mjs.map → neutral/meta.mjs.map} +0 -0
- /package/dist/lib/{node-esm/hooks → neutral/operations}/index.mjs.map +0 -0
- /package/dist/lib/{node-esm/types/index.mjs.map → neutral/testing.mjs.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/containers/TracePanel/TracePanel.tsx", "../../../src/containers/TracePanel/execution-graph.ts", "../../../src/containers/TracePanel/span-tree.ts", "../../../src/containers/TracePanel/index.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom } from '@effect-atom/atom';\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport { pipe } from 'effect/Function';\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport { useAtomCapability, useOperationInvoker } from '@dxos/app-framework/ui';\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { Trace } from '@dxos/compute';\nimport { Filter, Query } from '@dxos/echo';\nimport { AtomQuery } from '@dxos/echo-atom';\nimport { FeedTraceSink, Process } from '@dxos/functions-runtime';\nimport { DXN } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { useComputeRuntimeService } from '@dxos/plugin-automation/hooks';\nimport { type Space } from '@dxos/react-client/echo';\nimport { ScrollContainer } from '@dxos/react-ui';\nimport { useAttentionAttributes } from '@dxos/react-ui-attention';\nimport { Timeline, type Commit } from '@dxos/react-ui-components';\nimport { Syntax } from '@dxos/react-ui-syntax-highlighter';\nimport { composable, composableProps, mx } from '@dxos/ui-theme';\n\nimport { ProcessTree, ProcessTreeProps } from '#components';\nimport { AssistantCapabilities } from '#types';\n\nimport { buildExecutionGraph, type ExecutionGraph } from './execution-graph';\n\nexport type TracePanelProps = AppSurface.SpaceArticleProps<Pick<ProcessTreeProps, 'onProcessTerminate'>>;\n\nexport const TracePanel = composable<HTMLDivElement, TracePanelProps>(\n ({ space, attendableId, onProcessTerminate, ...props }, forwardedRef) => {\n const attentionAttrs = useAttentionAttributes(attendableId);\n const { invokePromise } = useOperationInvoker();\n const settings = useAtomCapability(AssistantCapabilities.Settings);\n const tracePanelDebug = settings.tracePanelDebug ?? false;\n const { branches, commits, spanTree } = useExecutionGraph(space);\n const runtime = useComputeRuntimeService(Process.ProcessMonitorService, space.id);\n const processes = useAtomValue(runtime?.processTreeAtom ?? atomEmpty);\n\n const [selectedCommit, setSelectedCommit] = useState<Commit | undefined>();\n const handleCommitSelect = useCallback(\n (commit: Commit | undefined) => {\n setSelectedCommit(commit);\n if (commit?.link) {\n const dxn = DXN.tryParse(commit.link)?.asEchoDXN();\n if (dxn?.spaceId && dxn.echoId) {\n // TODO(dmaretskyi): Navigates, but fails to open.\n void invokePromise(LayoutOperation.Open, {\n subject: [`${dxn.spaceId}:${dxn.echoId}`],\n });\n }\n }\n },\n [invokePromise, setSelectedCommit],\n );\n\n // Select current branch.\n const [currentBranch, setCurrentBranch] = useState<string | null>(null);\n const handleProcessSelect = useCallback(\n (process: Process.Info) => {\n const branch = branches.find((branch) => branch === process.pid.toString());\n if (branch) {\n setCurrentBranch(branch);\n }\n },\n [branches],\n );\n\n return (\n <div\n {...composableProps(props, {\n ...attentionAttrs,\n classNames: mx(\n 'h-full grid divide-y divide-separator',\n !tracePanelDebug && selectedCommit\n ? 'grid-rows-[minmax(0,4lh)_1fr_minmax(0,206px)]'\n : 'grid-rows-[minmax(0,4lh)_1fr]',\n ),\n })}\n ref={forwardedRef}\n >\n <ProcessTree\n processes={processes}\n onProcessSelect={handleProcessSelect}\n onProcessTerminate={onProcessTerminate}\n />\n\n <ScrollContainer.Root pin>\n <ScrollContainer.Content thin>\n <ScrollContainer.Fade />\n <ScrollContainer.Viewport>\n {tracePanelDebug ? (\n <Syntax.Root data={spanTree}>\n <Syntax.Content>\n <Syntax.Viewport>\n <Syntax.Code className='text-xs' />\n </Syntax.Viewport>\n </Syntax.Content>\n </Syntax.Root>\n ) : (\n <Timeline\n compact\n commits={commits}\n branches={branches}\n currentBranch={currentBranch}\n onSelect={handleCommitSelect}\n />\n )}\n </ScrollContainer.Viewport>\n <ScrollContainer.ScrollDownButton />\n </ScrollContainer.Content>\n </ScrollContainer.Root>\n\n {!tracePanelDebug && selectedCommit && (\n <Syntax.Root data={selectedCommit}>\n <Syntax.Content>\n <Syntax.Viewport>\n <Syntax.Code className='text-xs' />\n </Syntax.Viewport>\n </Syntax.Content>\n </Syntax.Root>\n )}\n </div>\n );\n },\n);\n\n// Stable ref.\nconst atomEmpty = Atom.make(() => [] as const);\n\ntype UseExecutionGraphOptions = {\n eventLimit?: number;\n};\n\nconst useExecutionGraph = (space: Space, { eventLimit }: UseExecutionGraphOptions = {}): ExecutionGraph => {\n const runtime = useComputeRuntimeService(Process.ProcessMonitorService, space.id);\n const activeProcesses = useAtomValue(runtime?.processTreeAtom ?? atomEmpty);\n const atom = useMemo(\n () => getExecutionGraph(space, activeProcesses, { eventLimit }),\n [space, activeProcesses, eventLimit],\n );\n\n return useAtomValue(atom);\n};\n\nconst getExecutionGraph = (\n space: Space,\n activeProcesses: readonly Process.Info[] = [],\n { eventLimit = 300 }: UseExecutionGraphOptions = {},\n): Atom.Atom<ExecutionGraph> => {\n return pipe(\n AtomQuery.make(space.db, FeedTraceSink.query),\n Atom.map((feeds) => {\n log('trace panel query trace feeds', { spaceId: space.id, feedCount: feeds.length });\n // TODO(dmaretskyi): This should be possible in a single query with properly working limit(1) and feed > feed contents traversal.\n return AtomQuery.make(\n space.db,\n feeds.length > 0\n ? Query.type(Trace.Message).from(feeds[0])\n : (Query.select(Filter.nothing()) as Query.Query<never>),\n );\n }),\n (_) => Atom.make((get) => get(get(_))),\n (_) =>\n Atom.make((get) =>\n buildExecutionGraph({\n traceMessages: [...get(_)],\n activeProcesses,\n eventLimit,\n }),\n ),\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Array from 'effect/Array';\nimport * as Either from 'effect/Either';\nimport { pipe } from 'effect/Function';\nimport * as Pipeable from 'effect/Pipeable';\nimport * as Schema from 'effect/Schema';\nimport * as Struct from 'effect/Struct';\n\nimport { AgentRequestBegin, AgentRequestEnd, CompleteBlock } from '@dxos/assistant';\nimport { Trace } from '@dxos/compute';\nimport { AGENT_PROCESS_KEY, Process } from '@dxos/functions-runtime';\nimport { LogLevel, log } from '@dxos/log';\nimport { type Commit } from '@dxos/react-ui-components';\n\nimport { ROOT_SPAN_ID, type Span, buildSpanTree, isSpanBeginEvent, isSpanEndEvent, walkSpanTree } from './span-tree';\n\n/**\n * Branch name for top-level operation invocations.\n */\nconst MAIN_BRANCH = 'main';\n\nconst ICONS = {\n agentRequestBegin: {\n icon: 'ph--atom--regular',\n level: LogLevel.VERBOSE,\n },\n agentRequestEnd: {\n icon: 'ph--atom--regular',\n level: LogLevel.INFO,\n },\n userMessage: {\n icon: 'ph--user--regular',\n level: LogLevel.VERBOSE,\n },\n statusMessage: {\n icon: 'ph--info--regular',\n level: LogLevel.VERBOSE,\n },\n operationStart: {\n icon: 'ph--function--regular',\n level: LogLevel.VERBOSE,\n },\n operationEndSuccess: {\n icon: 'ph--function--regular',\n level: LogLevel.INFO,\n },\n operationEndError: {\n icon: 'ph--function--regular',\n level: LogLevel.ERROR,\n },\n agentRequestRunning: {\n icon: 'ph--spinner-gap--regular',\n level: LogLevel.VERBOSE,\n },\n processRunning: {\n icon: 'ph--spinner-gap--regular',\n level: LogLevel.VERBOSE,\n },\n} as const;\n\nexport interface BuildExecutionGraphParams {\n traceMessages: Trace.Message[];\n activeProcesses?: readonly Process.Info[];\n eventLimit?: number;\n}\n\n/**\n * Builds a Timeline-compatible execution graph from trace messages and active processes.\n *\n * The conversion runs in two stages:\n * 1. `buildSpanTree` converts the flat list of trace messages into a hierarchical\n * tree of spans grouped by process id (pid). See `./span-tree.ts`.\n * 2. `spanTreeToCommits` walks the tree and emits one commit per event, using the\n * tree structure to decide which branch each commit belongs to and how to wire parents.\n *\n * Pure function — no signals or atoms.\n */\nexport type ExecutionGraph = {\n branches: string[];\n commits: Commit[];\n spanTree: Span;\n};\n\nexport const buildExecutionGraph = ({\n traceMessages,\n activeProcesses = [],\n eventLimit = 500,\n}: BuildExecutionGraphParams): ExecutionGraph => {\n const spanTree = buildSpanTree(traceMessages, { eventLimit });\n const built = spanTreeToCommits(spanTree, activeProcesses);\n log('trace execution graph', {\n traceMessages: traceMessages.length,\n commits: built.commits.length,\n branches: built.branches.length,\n activeProcesses: activeProcesses.length,\n });\n return { ...built, spanTree };\n};\n\n/**\n * Visual representation of a single trace event — icon, log level, message string.\n * `undefined` indicates that the event should not produce a commit.\n */\ninterface EventPresentation {\n icon: string;\n level: LogLevel;\n message: string;\n idSuffix?: string;\n}\n\nconst presentEvent = (event: Trace.FlatEvent): EventPresentation | undefined => {\n if (Trace.isOfType(AgentRequestBegin, event)) {\n if (Either.isLeft(Schema.validateEither(AgentRequestBegin.schema)(event.data))) {\n log('invalid trace event', { type: event.type });\n return undefined;\n }\n return {\n icon: ICONS.agentRequestBegin.icon,\n level: ICONS.agentRequestBegin.level,\n message: 'Agent processing request...',\n };\n }\n if (Trace.isOfType(AgentRequestEnd, event)) {\n if (Either.isLeft(Schema.validateEither(AgentRequestEnd.schema)(event.data))) {\n log('invalid trace event', { type: event.type });\n return undefined;\n }\n return {\n icon: ICONS.agentRequestEnd.icon,\n level: ICONS.agentRequestEnd.level,\n message: 'Agent completed request',\n };\n }\n if (Trace.isOfType(CompleteBlock, event)) {\n if (Either.isLeft(Schema.validateEither(CompleteBlock.schema)(event.data))) {\n log('invalid trace event', { type: event.type });\n return undefined;\n }\n switch (event.data.block._tag) {\n case 'text':\n return event.data.role === 'user'\n ? {\n icon: ICONS.userMessage.icon,\n level: ICONS.userMessage.level,\n message: trimText(event.data.block.text),\n }\n : undefined;\n case 'status':\n return {\n icon: ICONS.statusMessage.icon,\n level: ICONS.statusMessage.level,\n message: trimText(event.data.block.statusText),\n };\n default:\n return undefined;\n }\n }\n if (Trace.isOfType(Trace.OperationStart, event)) {\n if (Either.isLeft(Schema.validateEither(Trace.OperationStart.schema)(event.data))) {\n log('invalid trace event', { type: event.type });\n return undefined;\n }\n return {\n icon: ICONS.operationStart.icon,\n level: ICONS.operationStart.level,\n message: event.data.name ?? event.data.key,\n idSuffix: `${event.data.key}:start`,\n };\n }\n if (Trace.isOfType(Trace.OperationEnd, event)) {\n if (Either.isLeft(Schema.validateEither(Trace.OperationEnd.schema)(event.data))) {\n log('invalid trace event', { type: event.type });\n return undefined;\n }\n const success = event.data.outcome === 'success';\n return {\n icon: success ? ICONS.operationEndSuccess.icon : ICONS.operationEndError.icon,\n level: success ? ICONS.operationEndSuccess.level : ICONS.operationEndError.level,\n message: `${event.data.name ?? event.data.key} - ${success ? 'Success' : 'Error'}`,\n idSuffix: `${event.data.key}:end`,\n };\n }\n return undefined;\n};\n\n/**\n * A span is \"collapsible\" when it would otherwise render as an empty fork-and-merge:\n * exactly two events that form a begin/end pair and no child sub-spans. In that case\n * we emit a single commit for the end event on the parent branch.\n *\n * A *pending* span (one whose end event has not yet been recorded) is never collapsed:\n * its trailing events should keep rendering as middle commits on the span's own branch\n * — never as a fake \"end\" commit on the parent branch.\n *\n * Both nested spans and top-level spans (whose parent is the synthetic root) are eligible\n * once they have completed: a span with no inner activity is collapsed regardless of where\n * it sits in the tree.\n */\nconst isCollapsibleSpan = (span: Span, parent: Span | null): boolean => {\n if (span.id === ROOT_SPAN_ID) {\n return false;\n }\n if (span.events.length !== 2) {\n return false;\n }\n if (span.children.length > 0) {\n return false;\n }\n const firstEvent = span.events[0];\n const lastEvent = span.events[span.events.length - 1];\n if (!isSpanBeginEvent(firstEvent) || !isSpanEndEvent(lastEvent)) {\n return false;\n }\n return parent !== null;\n};\n\n/**\n * Converts a span tree into a flat list of commits + branches suitable for `Timeline` rendering.\n *\n * For every span the algorithm:\n * - emits the **first** event as a \"begin\" commit on the parent span's branch (fork);\n * - emits **middle** events as commits on the span's own branch;\n * - emits the **last** event as an \"end\" commit on the parent span's branch with two parents\n * (the begin commit and the last commit on the span's own branch — a merge).\n *\n * Collapsible spans (`isCollapsibleSpan`) emit only the end commit on the parent branch with\n * a single parent — a tidier rendering for sub-operations that have no inner detail.\n *\n * Events are processed in global chronological order so that sub-operations of a span interleave\n * naturally with the span's own middle events.\n */\nconst spanTreeToCommits = (\n root: Span,\n activeProcesses: readonly Process.Info[],\n): { branches: string[]; commits: Commit[] } => {\n const builder = new GraphBuilder();\n builder.addBranch(MAIN_BRANCH);\n\n // Build a child → parent lookup using the tree's own structure (already correctly parented\n // when the tree was constructed, including sequential spans of the same process).\n const parentBySpan = new Map<Span, Span | null>();\n parentBySpan.set(root, null);\n const indexParents = (span: Span): void => {\n for (const child of span.children) {\n parentBySpan.set(child, span);\n indexParents(child);\n }\n };\n indexParents(root);\n\n const findParentSpan = (span: Span): Span | null => parentBySpan.get(span) ?? null;\n\n // The branch name for a span is its pid — multiple sequential spans of the same process\n // (e.g. successive agent requests in one session) share a branch so they reuse a single lane.\n const branchOf = (span: Span | null): string => {\n if (!span || span.id === ROOT_SPAN_ID) {\n return MAIN_BRANCH;\n }\n return span.meta.pid ?? span.id;\n };\n\n // Selector that returns the most recent commit walking up the ancestor chain of `span`,\n // starting from `span`'s own branch and falling back through parent branches up to main.\n // Used when a commit emitted on a parent/ancestor branch needs to attach to something\n // that hasn't been written to yet (e.g. the first child sub-span begins before any\n // middle event has landed on the parent branch).\n const lastInAncestorChain = (span: Span | null): CommitSelector => {\n const branches: string[] = [];\n const seen = new Set<string>();\n let current = span;\n while (current) {\n const branch = branchOf(current);\n if (!seen.has(branch)) {\n seen.add(branch);\n branches.push(branch);\n }\n current = findParentSpan(current);\n }\n if (!seen.has(MAIN_BRANCH)) {\n branches.push(MAIN_BRANCH);\n }\n return CommitSelector.firstOf(\n ...branches.map((branch) => CommitSelector.branch(branch).pipe(CommitSelector.compose(CommitSelector.last()))),\n );\n };\n\n // Flatten the tree into a chronological stream, recording each event's position within its span\n // so we can detect begin/end events.\n interface EventCursor {\n span: Span;\n event: Trace.FlatEvent;\n eventIndex: number;\n globalIndex: number;\n }\n const stream: EventCursor[] = [];\n walkSpanTree(root, (span) => {\n span.events.forEach((event, eventIndex) => {\n stream.push({ span, event, eventIndex, globalIndex: stream.length });\n });\n });\n stream.sort((a, b) => a.event.timestamp - b.event.timestamp || a.globalIndex - b.globalIndex);\n\n // Track the id of the begin commit for each non-collapsible span so the end commit can merge into it.\n const beginCommitIdBySpan = new Map<string, string>();\n\n for (const { span, event, globalIndex } of stream) {\n const presentation = presentEvent(event);\n if (!presentation) {\n continue;\n }\n\n // Classify based on event TYPE, not array index. A pending span's trailing\n // middle event (e.g. a user message awaiting an agent response) must not be\n // mistaken for the span's end event — otherwise it would render on the\n // parent branch instead of the span's own branch.\n const isBeginEvent = isSpanBeginEvent(event);\n const isEndEvent = isSpanEndEvent(event);\n const parentSpan = findParentSpan(span);\n const collapsible = isCollapsibleSpan(span, parentSpan);\n\n // Collapsed spans: skip the begin event entirely; only the end event renders.\n if (collapsible && isBeginEvent) {\n continue;\n }\n\n const parentBranch = branchOf(parentSpan);\n const ownBranch = branchOf(span);\n\n let branch: string;\n let parents: string[];\n\n if (span.id === ROOT_SPAN_ID) {\n // Root-level events (no pid) attach sequentially to main.\n branch = MAIN_BRANCH;\n parents = builder.computeParents(\n CommitSelector.branch(MAIN_BRANCH).pipe(CommitSelector.compose(CommitSelector.last())),\n );\n } else if (collapsible) {\n // Only the end event reaches here for collapsible spans.\n // Walk the ancestor chain so the commit attaches to the most recent ancestor\n // even when the immediate parent branch has not received a commit yet.\n branch = parentBranch;\n parents = builder.computeParents(lastInAncestorChain(parentSpan));\n } else if (isBeginEvent) {\n // Begin commit: fork off the parent branch.\n // Walk the ancestor chain to find the most recent ancestor commit to fork from.\n branch = parentBranch;\n parents = builder.computeParents(lastInAncestorChain(parentSpan));\n } else if (isEndEvent) {\n // End commit: merge from the span's own branch back into the parent branch.\n branch = parentBranch;\n const beginId = beginCommitIdBySpan.get(span.id);\n parents = builder.computeParents(\n CommitSelector.unionAll(\n beginId ? CommitSelector.id(beginId) : lastInAncestorChain(parentSpan),\n CommitSelector.branch(ownBranch).pipe(CommitSelector.compose(CommitSelector.last())),\n ),\n );\n } else {\n // Middle event: continue the span's own branch.\n branch = ownBranch;\n parents = builder.computeParents(\n CommitSelector.branch(ownBranch).pipe(\n CommitSelector.compose(CommitSelector.last()),\n CommitSelector.orElse(lastInAncestorChain(parentSpan)),\n ),\n );\n }\n\n const commitId = formatCommitId(span, globalIndex, presentation.idSuffix);\n const commit: Commit = {\n id: commitId,\n branch,\n parents,\n timestamp: new Date(event.timestamp),\n icon: presentation.icon,\n level: presentation.level,\n message: presentation.message,\n };\n builder.addCommit(commit);\n\n // Record begin commit so a later end event can merge into it.\n if (isBeginEvent && !collapsible && span.id !== ROOT_SPAN_ID) {\n beginCommitIdBySpan.set(span.id, commitId);\n }\n }\n\n // Append \"running\" indicators for processes that are still active.\n for (const process of activeProcesses) {\n if (\n process.key === AGENT_PROCESS_KEY &&\n process.params.target &&\n (process.state === Process.State.RUNNING || process.state === Process.State.HYBERNATING)\n ) {\n builder.addCommit({\n id: `running:${process.pid}`,\n branch: process.pid,\n parents: builder.computeParents(\n CommitSelector.branch(process.pid).pipe(CommitSelector.compose(CommitSelector.last())),\n ),\n icon: ICONS.agentRequestRunning.icon,\n level: ICONS.agentRequestRunning.level,\n message: 'Generating...',\n timestamp: new Date(),\n });\n } else if (process.state === Process.State.RUNNING && builder.hasBranch(process.pid)) {\n builder.addCommit({\n id: `running:${process.pid}`,\n branch: process.pid,\n parents: builder.computeParents(\n CommitSelector.branch(process.pid).pipe(CommitSelector.compose(CommitSelector.last())),\n ),\n icon: ICONS.processRunning.icon,\n level: ICONS.processRunning.level,\n message: 'Running...',\n timestamp: new Date(),\n });\n }\n }\n\n return builder.build();\n};\n\nconst formatCommitId = (span: Span, globalIndex: number, suffix?: string): string => {\n const base = `${span.id}:${globalIndex}`;\n return suffix ? `${base}:${suffix}` : base;\n};\n\nconst trimText = (text: string) => text.slice(0, 100).trim().split('\\n')[0];\n\ntype Falsy = false | null | undefined;\n\nexport interface CommitSelector extends Pipeable.Pipeable {\n select: (commits: Commit[]) => Commit[];\n}\n\nexport const CommitSelector = {\n make: (select: CommitSelector['select']): CommitSelector => ({\n select,\n pipe(...args: any) {\n return Pipeable.pipeArguments(this, args);\n },\n }),\n\n identity: (): CommitSelector => CommitSelector.make((commits) => commits),\n\n /**\n * Selects commits that match the given predicate.\n */\n filter: (predicate: (commit: Commit) => unknown): CommitSelector =>\n CommitSelector.make((commits) => commits.filter(predicate)),\n\n /**\n * Selects commits by id.\n */\n id: (id: string): CommitSelector => CommitSelector.filter((commit) => commit.id === id),\n /**\n * Selects commits by tag.\n */\n tag: (tag: string | Falsy): CommitSelector => CommitSelector.filter((commit) => tag && commit.tags?.includes(tag)),\n /**\n * Selects commits by if any of the given tags are present.\n */\n anyTags: (tags: (string | Falsy)[]): CommitSelector =>\n CommitSelector.filter((commit) => tags.some((tag) => tag && commit.tags?.includes(tag))),\n /**\n * Selects commits by branch.\n */\n branch: (branch: string | Falsy): CommitSelector =>\n CommitSelector.filter((commit) => branch && commit.branch === branch),\n\n /**\n * Chains two selectors together, applying the second selector to the result of the first.\n *\n * Example:\n *\n * ```\n * CommitSelector.tag('tag').pipe(CommitSelector.compose(CommitSelector.branch('main')));\n * ```\n */\n compose:\n (next: CommitSelector) =>\n (prev: CommitSelector): CommitSelector =>\n CommitSelector.make((commits) => next.select(prev.select(commits))),\n\n /**\n * If `prev` selector matches no commits, return `next` selector, otherwise return `prev` selector.\n * Same as `CommitSelector.firstOf(prev, next)`.\n *\n * Example:\n *\n * ```\n * CommitSelector.tag('tag').pipe(CommitSelector.orElse(CommitSelector.branch('main')));\n * ```\n */\n orElse:\n (next: CommitSelector) =>\n (prev: CommitSelector): CommitSelector =>\n CommitSelector.make((commits) => {\n const selected = prev.select(commits);\n if (selected.length > 0) {\n return selected;\n }\n return next.select(commits);\n }),\n\n /**\n * Selects commits that match either of the given selectors.\n */\n andAlso:\n (next: CommitSelector) =>\n (prev: CommitSelector): CommitSelector =>\n CommitSelector.unionAll(prev, next),\n\n /**\n * Selects the first n commits.\n */\n first: (n: number = 1): CommitSelector => CommitSelector.make((commits) => commits.slice(0, n)),\n /**\n * Selects the last n commits (reverses the order of the commits).\n */\n last: (n: number = 1): CommitSelector => CommitSelector.make((commits) => commits.toReversed().slice(0, n)),\n /**\n * Selects commits that do not match the given selector.\n */\n not: (selector: CommitSelector): CommitSelector =>\n CommitSelector.make((commits) => {\n const selected = selector.select(commits);\n return commits.filter((commit) => !selected.includes(commit));\n }),\n\n /**\n * Selects commits that match any of the given selectors.\n */\n unionAll: (...selectors: CommitSelector[]): CommitSelector =>\n CommitSelector.make((commits) => {\n return Array.dedupeWith(\n selectors.flatMap((selector) => selector.select(commits)),\n (a, b) => a.id === b.id,\n );\n }),\n\n /**\n * Selects commits that match all of the given selectors.\n */\n intersectAll: (...selectors: CommitSelector[]): CommitSelector =>\n CommitSelector.make((commits) => {\n const selected = selectors.map((selector) => selector.select(commits));\n if (selected.length === 0) {\n return [];\n }\n return selected[0].filter((commit) => selected.every((selected) => selected.some((c) => c.id === commit.id)));\n }),\n\n /**\n * Returns the result of the first selector that matches any commits.\n */\n firstOf: (...selectors: CommitSelector[]): CommitSelector =>\n CommitSelector.make((commits) => {\n for (const selector of selectors) {\n const selected = selector.select(commits);\n if (selected.length > 0) {\n return selected;\n }\n }\n return [];\n }),\n};\n\nclass GraphBuilder {\n #commits: Commit[] = [];\n #branches = new Set<string>();\n\n findCommits(selector: CommitSelector): Commit[] {\n return selector.select(this.#commits);\n }\n\n hasBranch(branch: string): boolean {\n return this.#branches.has(branch);\n }\n\n addCommit(commit: Commit) {\n this.addBranch(commit.branch);\n this.#commits.push(commit);\n }\n\n /**\n * Computes parents — picks first matching commit's id.\n */\n computeParents(selector: CommitSelector): string[] {\n return Array.dedupe(selector.select(this.#commits).map((commit) => commit.id));\n }\n\n addBranch(branch: string) {\n this.#branches.add(branch);\n }\n\n /**\n * Removes duplicate commits and dangling parents.\n */\n doctor() {\n this.#commits = pipe(\n this.#commits,\n Array.dedupeWith((a, b) => a.id === b.id),\n Array.map(\n Struct.evolve({\n parents: (parents) =>\n parents ? Array.filter(parents, (id) => this.#commits.some((commit) => commit.id === id)) : undefined,\n }),\n ),\n );\n }\n\n build() {\n this.doctor();\n return {\n commits: this.#commits,\n branches: [...this.#branches],\n };\n }\n}\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { AgentRequestBegin, AgentRequestEnd } from '@dxos/assistant';\nimport { Trace } from '@dxos/compute';\n\n/**\n * Synthetic id assigned to the root span.\n * The root is a virtual container for top-level spans (those without a parent in the captured trace).\n */\nexport const ROOT_SPAN_ID = '<main>';\n\n/**\n * Computed metadata for a span.\n * Derived from the meta of the begin event that opened the span.\n */\nexport interface SpanMeta {\n readonly pid?: string;\n readonly parentPid?: string;\n readonly processName?: string;\n readonly conversationId?: string;\n readonly triggerId?: string;\n readonly toolCallId?: string;\n readonly runtimeName?: string;\n}\n\n/**\n * A span in the trace hierarchy.\n *\n * Each span represents a single bounded unit of work — an operation invocation or an\n * agent request. Spans are opened by `OperationStart` / `AgentRequestBegin` events and\n * closed by their matching `OperationEnd` / `AgentRequestEnd` events. A single process\n * (pid) may produce multiple sequential spans (for example, an agent session that serves\n * three prompts produces three sibling spans sharing the agent's pid).\n *\n * `events` contains the bounded events for this span only — child spans' events are not\n * duplicated here. `children` contains sub-spans that opened while this span was active.\n */\nexport interface Span {\n readonly id: string;\n readonly meta: SpanMeta;\n readonly events: Trace.FlatEvent[];\n readonly children: Span[];\n}\n\nexport const BEGIN_EVENT_TYPES = new Set<string>([Trace.OperationStart.key, AgentRequestBegin.key]);\nexport const END_EVENT_TYPES = new Set<string>([Trace.OperationEnd.key, AgentRequestEnd.key]);\n\nexport const isSpanBeginEvent = (event: Trace.FlatEvent): boolean => BEGIN_EVENT_TYPES.has(event.type);\nexport const isSpanEndEvent = (event: Trace.FlatEvent): boolean => END_EVENT_TYPES.has(event.type);\n\nconst computeMeta = (rawMeta: Trace.Meta): SpanMeta => ({\n pid: rawMeta.pid,\n parentPid: rawMeta.parentPid,\n processName: rawMeta.processName,\n conversationId: rawMeta.conversationId,\n triggerId: rawMeta.triggerId,\n toolCallId: rawMeta.toolCallId,\n runtimeName: rawMeta.runtimeName,\n});\n\ninterface MutableSpan {\n id: string;\n meta: SpanMeta;\n events: Trace.FlatEvent[];\n children: MutableSpan[];\n firstTimestamp: number;\n}\n\nconst makeMutableSpan = (id: string, meta: SpanMeta): MutableSpan => ({\n id,\n meta,\n events: [],\n children: [],\n firstTimestamp: Number.POSITIVE_INFINITY,\n});\n\nconst freezeSpan = (span: MutableSpan): Span => ({\n id: span.id,\n meta: span.meta,\n events: span.events,\n children: span.children.map(freezeSpan),\n});\n\nexport interface BuildSpanTreeOptions {\n /**\n * If provided, only the last `eventLimit` flat events (after flattening and chronological sort)\n * are placed into the tree. Spans with no remaining events are dropped from the result.\n */\n eventLimit?: number;\n}\n\n/**\n * Builds a hierarchical span tree from a list of trace messages.\n *\n * Algorithm:\n * 1. Flatten messages into events and sort them chronologically.\n * 2. For each event:\n * - Begin events (`OperationStart`, `AgentRequestBegin`) open a new span whose parent\n * is the currently-open span of the event's `meta.parentPid`, or the root if there is\n * none. The begin event itself becomes the first event of the new span.\n * - End events (`OperationEnd`, `AgentRequestEnd`) close the currently-open span for\n * the event's `meta.pid` and become its last event.\n * - Other events attach to the currently-open span for their `meta.pid`, or to the\n * root span if no span is currently open for that pid (or the event has no pid).\n * 3. Sort each span's children by their earliest event timestamp.\n */\nexport const buildSpanTree = (messages: Trace.Message[], options: BuildSpanTreeOptions = {}): Span => {\n const allEvents = messages.flatMap((message) => Trace.flatten(message));\n allEvents.sort((a, b) => a.timestamp - b.timestamp);\n\n const events =\n options.eventLimit !== undefined && allEvents.length > options.eventLimit\n ? allEvents.slice(-options.eventLimit)\n : allEvents;\n\n const root = makeMutableSpan(ROOT_SPAN_ID, {});\n\n // Currently-open span for each pid.\n // A process may host multiple sequential spans (e.g. successive agent requests), so we\n // track the active one and start a new span on the next begin event.\n const openSpans = new Map<string, MutableSpan>();\n\n let spanCounter = 0;\n const allocSpanId = (pid: string): string => {\n const id = `${pid}#${spanCounter}`;\n spanCounter += 1;\n return id;\n };\n\n const noteTimestamp = (span: MutableSpan, timestamp: number): void => {\n if (timestamp < span.firstTimestamp) {\n span.firstTimestamp = timestamp;\n }\n };\n\n for (const event of events) {\n const pid = event.meta.pid;\n\n if (!pid) {\n // Events without a pid attach to the root.\n root.events.push(event);\n noteTimestamp(root, event.timestamp);\n continue;\n }\n\n if (BEGIN_EVENT_TYPES.has(event.type)) {\n const parentPid = event.meta.parentPid;\n const parent = (parentPid && openSpans.get(parentPid)) || root;\n const span = makeMutableSpan(allocSpanId(pid), computeMeta(event.meta));\n span.events.push(event);\n noteTimestamp(span, event.timestamp);\n parent.children.push(span);\n // The new span supersedes any previously-open span for this pid.\n openSpans.set(pid, span);\n continue;\n }\n\n if (END_EVENT_TYPES.has(event.type)) {\n const span = openSpans.get(pid);\n if (span) {\n span.events.push(event);\n noteTimestamp(span, event.timestamp);\n openSpans.delete(pid);\n } else {\n // End event without a matching begin — attach to root so the event isn't lost.\n root.events.push(event);\n noteTimestamp(root, event.timestamp);\n }\n continue;\n }\n\n // Non-boundary event: attach to the currently-open span for this pid if any.\n const open = openSpans.get(pid);\n if (open) {\n open.events.push(event);\n noteTimestamp(open, event.timestamp);\n } else {\n root.events.push(event);\n noteTimestamp(root, event.timestamp);\n }\n }\n\n // Sort children chronologically for deterministic output.\n const sortChildren = (span: MutableSpan): void => {\n span.children.sort((a, b) => a.firstTimestamp - b.firstTimestamp);\n for (const child of span.children) {\n sortChildren(child);\n }\n };\n sortChildren(root);\n\n return freezeSpan(root);\n};\n\n/**\n * Walks the span tree in depth-first pre-order, invoking `visit` for each span (root included).\n */\nexport const walkSpanTree = (root: Span, visit: (span: Span, depth: number) => void, depth = 0): void => {\n visit(root, depth);\n for (const child of root.children) {\n walkSpanTree(child, visit, depth + 1);\n }\n};\n\n/**\n * Returns all spans in the tree in depth-first pre-order, root first.\n */\nexport const flattenSpanTree = (root: Span): Span[] => {\n const result: Span[] = [];\n walkSpanTree(root, (span) => result.push(span));\n return result;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { TracePanel } from './TracePanel';\n\nexport * from './TracePanel';\n\nexport default TracePanel;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Atom", "useAtomValue", "pipe", "React", "useCallback", "useMemo", "useState", "useAtomCapability", "useOperationInvoker", "LayoutOperation", "Trace", "Filter", "Query", "AtomQuery", "FeedTraceSink", "Process", "DXN", "log", "useComputeRuntimeService", "ScrollContainer", "useAttentionAttributes", "Timeline", "Syntax", "composable", "composableProps", "mx", "ProcessTree", "AssistantCapabilities", "Array", "Either", "pipe", "Pipeable", "Schema", "Struct", "AgentRequestBegin", "AgentRequestEnd", "CompleteBlock", "Trace", "AGENT_PROCESS_KEY", "Process", "LogLevel", "log", "AgentRequestBegin", "AgentRequestEnd", "Trace", "ROOT_SPAN_ID", "BEGIN_EVENT_TYPES", "Set", "OperationStart", "key", "END_EVENT_TYPES", "OperationEnd", "isSpanBeginEvent", "event", "has", "type", "isSpanEndEvent", "computeMeta", "rawMeta", "pid", "parentPid", "processName", "conversationId", "triggerId", "toolCallId", "runtimeName", "makeMutableSpan", "id", "meta", "events", "children", "firstTimestamp", "Number", "POSITIVE_INFINITY", "freezeSpan", "span", "map", "buildSpanTree", "messages", "options", "allEvents", "flatMap", "message", "flatten", "sort", "a", "b", "timestamp", "eventLimit", "undefined", "length", "slice", "root", "openSpans", "Map", "spanCounter", "allocSpanId", "noteTimestamp", "push", "parent", "get", "set", "delete", "open", "sortChildren", "child", "walkSpanTree", "visit", "depth", "agentRequestBegin", "LogLevel", "agentRequestEnd", "userMessage", "statusMessage", "operationStart", "operationEndSuccess", "INFO", "operationEndError", "agentRequestRunning", "VERBOSE", "processRunning", "eventLimit", "log", "traceMessages", "commits", "length", "branches", "built", "activeProcesses", "spanTree", "isLeft", "Schema", "AgentRequestBegin", "type", "undefined", "level", "message", "Trace", "AgentRequestEnd", "event", "data", "role", "ICONS", "trimText", "idSuffix", "success", "icon", "key", "span", "events", "children", "firstEvent", "isSpanBeginEvent", "parent", "builder", "MAIN_BRANCH", "indexParents", "child", "set", "Set", "current", "branch", "has", "seen", "push", "findParentSpan", "CommitSelector", "stream", "walkSpanTree", "forEach", "eventIndex", "globalIndex", "beginCommitIdBySpan", "Map", "presentEvent", "presentation", "parentSpan", "collapsible", "isCollapsibleSpan", "isBeginEvent", "parents", "isEndEvent", "parentBranch", "commitId", "formatCommitId", "id", "timestamp", "addCommit", "commit", "process", "computeParents", "Date", "state", "base", "text", "slice", "make", "select", "args", "identity", "selected", "next", "includes", "GraphBuilder", "findCommits", "selector", "hasBranch", "addBranch", "build", "__dxlog_file", "TracePanel", "invokePromise", "useOperationInvoker", "settings", "useAtomCapability", "AssistantCapabilities", "Settings", "tracePanelDebug", "useExecutionGraph", "space", "runtime", "useComputeRuntimeService", "ProcessMonitorService", "processes", "useAtomValue", "processTreeAtom", "atomEmpty", "selectedCommit", "Process", "useState", "handleCommitSelect", "useCallback", "commit", "setSelectedCommit", "DXN", "tryParse", "dxn", "spaceId", "LayoutOperation", "echoId", "branches", "branch", "process", "setCurrentBranch", "attentionAttrs", "ref", "forwardedRef", "onProcessSelect", "handleProcessSelect", "onProcessTerminate", "pin", "ScrollContainer", "Content", "thin", "Fade", "data", "spanTree", "Syntax", "Viewport", "className", "Timeline", "compact", "commits", "currentBranch", "onSelect", "activeProcesses", "atom", "useMemo", "getExecutionGraph", "eventLimit", "feedCount", "AtomQuery", "length", "Query", "traceMessages", "Trace", "get", "_", "TracePanel"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import "./chunk-J5LGTIGS.mjs";
|
|
2
|
+
|
|
3
|
+
// src/containers/TriggerStatus/TriggerStatus.tsx
|
|
4
|
+
import React, { useMemo } from "react";
|
|
5
|
+
import { useTriggerRuntimeControls } from "@dxos/plugin-automation/hooks";
|
|
6
|
+
import { StatusBar } from "@dxos/plugin-status-bar/components";
|
|
7
|
+
import { useObject } from "@dxos/react-client/echo";
|
|
8
|
+
import { IconButton, Popover, useTranslation } from "@dxos/react-ui";
|
|
9
|
+
import { meta } from "#meta";
|
|
10
|
+
var getIcon = (state) => {
|
|
11
|
+
switch (state) {
|
|
12
|
+
case "disabled":
|
|
13
|
+
return "ph--lightning-slash--regular";
|
|
14
|
+
case "idle":
|
|
15
|
+
return "ph--lightning--regular";
|
|
16
|
+
case "edge":
|
|
17
|
+
return "ph--lightning--regular";
|
|
18
|
+
case "running":
|
|
19
|
+
return "ph--lightning--fill";
|
|
20
|
+
case "error":
|
|
21
|
+
return "ph--warning--regular";
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
var getIconClassNames = (state) => {
|
|
25
|
+
switch (state) {
|
|
26
|
+
case "running":
|
|
27
|
+
return "animate-pulse text-accent-text";
|
|
28
|
+
case "error":
|
|
29
|
+
return "text-error-text";
|
|
30
|
+
default:
|
|
31
|
+
return void 0;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
var SpaceStatus = ({ space }) => {
|
|
35
|
+
const { t } = useTranslation(meta.id);
|
|
36
|
+
const { state } = useTriggerRuntimeControls(space.db);
|
|
37
|
+
const isEnabled = state?.enabled ?? false;
|
|
38
|
+
const [properties] = useObject(space.properties);
|
|
39
|
+
const computeEnvironment = properties.computeEnvironment ?? "local";
|
|
40
|
+
const triggerState = useMemo(() => {
|
|
41
|
+
if (computeEnvironment === "edge") {
|
|
42
|
+
return "edge";
|
|
43
|
+
}
|
|
44
|
+
if (!isEnabled) {
|
|
45
|
+
return "disabled";
|
|
46
|
+
}
|
|
47
|
+
const hasPending = state?.invocations.some((invocation) => invocation.result === null);
|
|
48
|
+
if (hasPending) {
|
|
49
|
+
return "running";
|
|
50
|
+
}
|
|
51
|
+
const lastInvocation = state?.invocations.at(-1);
|
|
52
|
+
if (lastInvocation?.result?._tag === "Failure") {
|
|
53
|
+
return "error";
|
|
54
|
+
}
|
|
55
|
+
return "idle";
|
|
56
|
+
}, [
|
|
57
|
+
computeEnvironment,
|
|
58
|
+
isEnabled,
|
|
59
|
+
state?.invocations
|
|
60
|
+
]);
|
|
61
|
+
return /* @__PURE__ */ React.createElement(Popover.Root, null, /* @__PURE__ */ React.createElement(Popover.Trigger, {
|
|
62
|
+
asChild: true
|
|
63
|
+
}, /* @__PURE__ */ React.createElement(StatusBar.Item, null, /* @__PURE__ */ React.createElement(IconButton, {
|
|
64
|
+
icon: getIcon(triggerState),
|
|
65
|
+
iconOnly: true,
|
|
66
|
+
label: t(`trigger-status-${triggerState}.label`),
|
|
67
|
+
classNames: getIconClassNames(triggerState)
|
|
68
|
+
}))), /* @__PURE__ */ React.createElement(Popover.Portal, null, /* @__PURE__ */ React.createElement(Popover.Content, {
|
|
69
|
+
side: "left"
|
|
70
|
+
}, /* @__PURE__ */ React.createElement(TriggerStatusPopover, {
|
|
71
|
+
state: triggerState,
|
|
72
|
+
currentFunctionName: state?.invocations.at(-1)?.function?.meta.name ?? state?.invocations.at(-1)?.function?.meta.key,
|
|
73
|
+
lastInvocation: state?.invocations.at(-1)
|
|
74
|
+
}), /* @__PURE__ */ React.createElement(Popover.Arrow, null))));
|
|
75
|
+
};
|
|
76
|
+
var TriggerStatusPopover = ({ state, currentFunctionName, lastInvocation }) => {
|
|
77
|
+
const { t } = useTranslation(meta.id);
|
|
78
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
79
|
+
className: "flex flex-col gap-2 p-2 w-[240px]"
|
|
80
|
+
}, /* @__PURE__ */ React.createElement("div", {
|
|
81
|
+
className: "flex flex-col gap-1"
|
|
82
|
+
}, /* @__PURE__ */ React.createElement("div", {
|
|
83
|
+
className: "text-sm"
|
|
84
|
+
}, t(`trigger-status-${state}.label`)), currentFunctionName && state === "running" && /* @__PURE__ */ React.createElement("div", {
|
|
85
|
+
className: "text-xs text-description"
|
|
86
|
+
}, currentFunctionName)));
|
|
87
|
+
};
|
|
88
|
+
export {
|
|
89
|
+
SpaceStatus,
|
|
90
|
+
SpaceStatus as default
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=TriggerStatus-WTFYUIG5.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/containers/TriggerStatus/TriggerStatus.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { AppSurface } from '@dxos/app-toolkit/ui';\nimport { type InvocationsState } from '@dxos/functions-runtime';\nimport { useTriggerRuntimeControls } from '@dxos/plugin-automation/hooks';\nimport { StatusBar } from '@dxos/plugin-status-bar/components';\nimport { useObject } from '@dxos/react-client/echo';\nimport { IconButton, Popover, useTranslation } from '@dxos/react-ui';\n\nimport { meta } from '#meta';\n\ntype TriggerStatusState = 'disabled' | 'idle' | 'running' | 'edge' | 'error';\n\nconst getIcon = (state: TriggerStatusState): string => {\n switch (state) {\n case 'disabled':\n return 'ph--lightning-slash--regular';\n case 'idle':\n return 'ph--lightning--regular';\n case 'edge':\n return 'ph--lightning--regular';\n case 'running':\n return 'ph--lightning--fill';\n case 'error':\n return 'ph--warning--regular';\n }\n};\n\nconst getIconClassNames = (state: TriggerStatusState): string | undefined => {\n switch (state) {\n case 'running':\n return 'animate-pulse text-accent-text';\n case 'error':\n return 'text-error-text';\n default:\n return undefined;\n }\n};\n\nexport type SpaceStatusProps = AppSurface.SpaceArticleProps;\n\nexport const SpaceStatus = ({ space }: SpaceStatusProps) => {\n const { t } = useTranslation(meta.id);\n const { state } = useTriggerRuntimeControls(space.db);\n const isEnabled = state?.enabled ?? false;\n const [properties] = useObject(space.properties);\n const computeEnvironment = properties.computeEnvironment ?? 'local';\n\n // Determine the current trigger status state.\n const triggerState: TriggerStatusState = useMemo(() => {\n if (computeEnvironment === 'edge') {\n return 'edge';\n }\n\n if (!isEnabled) {\n return 'disabled';\n }\n\n // Check if there's any pending invocation.\n const hasPending = state?.invocations.some((invocation) => invocation.result === null);\n if (hasPending) {\n return 'running';\n }\n\n // Check if the last invocation failed.\n const lastInvocation = state?.invocations.at(-1);\n if (lastInvocation?.result?._tag === 'Failure') {\n return 'error';\n }\n\n return 'idle';\n }, [computeEnvironment, isEnabled, state?.invocations]);\n\n return (\n <Popover.Root>\n <Popover.Trigger asChild>\n <StatusBar.Item>\n <IconButton\n icon={getIcon(triggerState)}\n iconOnly\n label={t(`trigger-status-${triggerState}.label`)}\n classNames={getIconClassNames(triggerState)}\n />\n </StatusBar.Item>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content side='left'>\n <TriggerStatusPopover\n state={triggerState}\n currentFunctionName={\n state?.invocations.at(-1)?.function?.meta.name ?? state?.invocations.at(-1)?.function?.meta.key\n }\n lastInvocation={state?.invocations.at(-1)}\n />\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n};\n\ntype TriggerStatusPopoverProps = {\n state: TriggerStatusState;\n currentFunctionName?: string;\n lastInvocation?: InvocationsState;\n};\n\nconst TriggerStatusPopover = ({\n state,\n currentFunctionName,\n lastInvocation, // TODO(burdon): Show.\n}: TriggerStatusPopoverProps) => {\n const { t } = useTranslation(meta.id);\n\n return (\n <div className='flex flex-col gap-2 p-2 w-[240px]'>\n <div className='flex flex-col gap-1'>\n <div className='text-sm'>{t(`trigger-status-${state}.label`)}</div>\n {currentFunctionName && state === 'running' && (\n <div className='text-xs text-description'>{currentFunctionName}</div>\n )}\n </div>\n </div>\n );\n};\n"],
|
|
5
|
+
"mappings": ";;;AAIA,OAAOA,SAASC,eAAe;AAI/B,SAASC,iCAAiC;AAC1C,SAASC,iBAAiB;AAC1B,SAASC,iBAAiB;AAC1B,SAASC,YAAYC,SAASC,sBAAsB;AAEpD,SAASC,YAAY;AAIrB,IAAMC,UAAU,CAACC,UAAAA;AACf,UAAQA,OAAAA;IACN,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;EACX;AACF;AAEA,IAAMC,oBAAoB,CAACD,UAAAA;AACzB,UAAQA,OAAAA;IACN,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;IACT;AACE,aAAOE;EACX;AACF;AAIO,IAAMC,cAAc,CAAC,EAAEC,MAAK,MAAoB;AACrD,QAAM,EAAEC,EAAC,IAAKR,eAAeC,KAAKQ,EAAE;AACpC,QAAM,EAAEN,MAAK,IAAKR,0BAA0BY,MAAMG,EAAE;AACpD,QAAMC,YAAYR,OAAOS,WAAW;AACpC,QAAM,CAACC,UAAAA,IAAchB,UAAUU,MAAMM,UAAU;AAC/C,QAAMC,qBAAqBD,WAAWC,sBAAsB;AAG5D,QAAMC,eAAmCrB,QAAQ,MAAA;AAC/C,QAAIoB,uBAAuB,QAAQ;AACjC,aAAO;IACT;AAEA,QAAI,CAACH,WAAW;AACd,aAAO;IACT;AAGA,UAAMK,aAAab,OAAOc,YAAYC,KAAK,CAACC,eAAeA,WAAWC,WAAW,IAAA;AACjF,QAAIJ,YAAY;AACd,aAAO;IACT;AAGA,UAAMK,iBAAiBlB,OAAOc,YAAYK,GAAG,EAAC;AAC9C,QAAID,gBAAgBD,QAAQG,SAAS,WAAW;AAC9C,aAAO;IACT;AAEA,WAAO;EACT,GAAG;IAACT;IAAoBH;IAAWR,OAAOc;GAAY;AAEtD,SACE,sBAAA,cAAClB,QAAQyB,MAAI,MACX,sBAAA,cAACzB,QAAQ0B,SAAO;IAACC,SAAAA;KACf,sBAAA,cAAC9B,UAAU+B,MAAI,MACb,sBAAA,cAAC7B,YAAAA;IACC8B,MAAM1B,QAAQa,YAAAA;IACdc,UAAAA;IACAC,OAAOtB,EAAE,kBAAkBO,YAAAA,QAAoB;IAC/CgB,YAAY3B,kBAAkBW,YAAAA;QAIpC,sBAAA,cAAChB,QAAQiC,QAAM,MACb,sBAAA,cAACjC,QAAQkC,SAAO;IAACC,MAAK;KACpB,sBAAA,cAACC,sBAAAA;IACChC,OAAOY;IACPqB,qBACEjC,OAAOc,YAAYK,GAAG,EAAC,GAAIe,UAAUpC,KAAKqC,QAAQnC,OAAOc,YAAYK,GAAG,EAAC,GAAIe,UAAUpC,KAAKsC;IAE9FlB,gBAAgBlB,OAAOc,YAAYK,GAAG,EAAC;MAEzC,sBAAA,cAACvB,QAAQyC,OAAK,IAAA,CAAA,CAAA,CAAA;AAKxB;AAQA,IAAML,uBAAuB,CAAC,EAC5BhC,OACAiC,qBACAf,eAAc,MACY;AAC1B,QAAM,EAAEb,EAAC,IAAKR,eAAeC,KAAKQ,EAAE;AAEpC,SACE,sBAAA,cAACgC,OAAAA;IAAIC,WAAU;KACb,sBAAA,cAACD,OAAAA;IAAIC,WAAU;KACb,sBAAA,cAACD,OAAAA;IAAIC,WAAU;KAAWlC,EAAE,kBAAkBL,KAAAA,QAAa,CAAA,GAC1DiC,uBAAuBjC,UAAU,aAChC,sBAAA,cAACsC,OAAAA;IAAIC,WAAU;KAA4BN,mBAAAA,CAAAA,CAAAA;AAKrD;",
|
|
6
|
+
"names": ["React", "useMemo", "useTriggerRuntimeControls", "StatusBar", "useObject", "IconButton", "Popover", "useTranslation", "meta", "getIcon", "state", "getIconClassNames", "undefined", "SpaceStatus", "space", "t", "id", "db", "isEnabled", "enabled", "properties", "computeEnvironment", "triggerState", "hasPending", "invocations", "some", "invocation", "result", "lastInvocation", "at", "_tag", "Root", "Trigger", "asChild", "Item", "icon", "iconOnly", "label", "classNames", "Portal", "Content", "side", "TriggerStatusPopover", "currentFunctionName", "function", "name", "key", "Arrow", "div", "className"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import "./chunk-J5LGTIGS.mjs";
|
|
2
|
+
|
|
3
|
+
// src/capabilities/ai-service.ts
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
import * as Layer from "effect/Layer";
|
|
6
|
+
import { AiModelResolver } from "@dxos/ai";
|
|
7
|
+
import { Capability } from "@dxos/app-framework";
|
|
8
|
+
import { AppCapabilities } from "@dxos/app-toolkit";
|
|
9
|
+
var ai_service_default = Capability.makeModule(Effect.fnUntraced(function* () {
|
|
10
|
+
const resolvers = yield* Capability.getAll(AppCapabilities.AiModelResolver);
|
|
11
|
+
const combinedLayer = resolvers.reduce((acc, resolver) => resolver.pipe(Layer.provide(acc)), AiModelResolver.AiModelResolver.fromModelMap({
|
|
12
|
+
name: "Fallback"
|
|
13
|
+
}, Effect.succeed({})));
|
|
14
|
+
return [
|
|
15
|
+
// TODO(dmaretskyi): Read config from settings.
|
|
16
|
+
Capability.contributes(AppCapabilities.AiServiceLayer, AiModelResolver.AiModelResolver.buildAiService.pipe(Layer.provide(combinedLayer)))
|
|
17
|
+
];
|
|
18
|
+
}));
|
|
19
|
+
export {
|
|
20
|
+
ai_service_default as default
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=ai-service-GJXMI5OI.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/ai-service.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\n\nimport { AiModelResolver } from '@dxos/ai';\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const resolvers = yield* Capability.getAll(AppCapabilities.AiModelResolver);\n\n // TODO(dmaretskyi): Extract function to reduce them.\n const combinedLayer = resolvers.reduce(\n (acc, resolver) => resolver.pipe(Layer.provide(acc)),\n AiModelResolver.AiModelResolver.fromModelMap({ name: 'Fallback' }, Effect.succeed({})), // Empty resolver as fallback.\n );\n\n return [\n // TODO(dmaretskyi): Read config from settings.\n Capability.contributes(\n AppCapabilities.AiServiceLayer,\n AiModelResolver.AiModelResolver.buildAiService.pipe(Layer.provide(combinedLayer)),\n ),\n ];\n }),\n);\n"],
|
|
5
|
+
"mappings": ";;;AAIA,YAAYA,YAAY;AACxB,YAAYC,WAAW;AAEvB,SAASC,uBAAuB;AAChC,SAASC,kBAAkB;AAC3B,SAASC,uBAAuB;AAEhC,IAAA,qBAAeD,WAAWE,WACjBC,kBAAW,aAAA;AAChB,QAAMC,YAAY,OAAOJ,WAAWK,OAAOJ,gBAAgBF,eAAe;AAG1E,QAAMO,gBAAgBF,UAAUG,OAC9B,CAACC,KAAKC,aAAaA,SAASC,KAAWC,cAAQH,GAAAA,CAAAA,GAC/CT,gBAAgBA,gBAAgBa,aAAa;IAAEC,MAAM;EAAW,GAAUC,eAAQ,CAAC,CAAA,CAAA,CAAA;AAGrF,SAAO;;IAELd,WAAWe,YACTd,gBAAgBe,gBAChBjB,gBAAgBA,gBAAgBkB,eAAeP,KAAWC,cAAQL,aAAAA,CAAAA,CAAAA;;AAGxE,CAAA,CAAA;",
|
|
6
|
+
"names": ["Effect", "Layer", "AiModelResolver", "Capability", "AppCapabilities", "makeModule", "fnUntraced", "resolvers", "getAll", "combinedLayer", "reduce", "acc", "resolver", "pipe", "provide", "fromModelMap", "name", "succeed", "contributes", "AiServiceLayer", "buildAiService"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import "./chunk-J5LGTIGS.mjs";
|
|
2
|
+
|
|
3
|
+
// src/capabilities/app-graph-builder.ts
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
import { pipe } from "effect/Function";
|
|
6
|
+
import * as Option from "effect/Option";
|
|
7
|
+
import { Capability } from "@dxos/app-framework";
|
|
8
|
+
import { AppCapabilities, AppNode, getActiveSpace, getPersonalSpace } from "@dxos/app-toolkit";
|
|
9
|
+
import { AgentPrompt, Chat } from "@dxos/assistant-toolkit";
|
|
10
|
+
import { Blueprint, Routine, Operation } from "@dxos/compute";
|
|
11
|
+
import { Sequence } from "@dxos/conductor";
|
|
12
|
+
import { DXN, Database, Filter, Obj } from "@dxos/echo";
|
|
13
|
+
import { AtomObj } from "@dxos/echo-atom";
|
|
14
|
+
import { invariant } from "@dxos/invariant";
|
|
15
|
+
import { AutomationCapabilities } from "@dxos/plugin-automation";
|
|
16
|
+
import { ClientCapabilities } from "@dxos/plugin-client";
|
|
17
|
+
import { GraphBuilder, Node, NodeMatcher } from "@dxos/plugin-graph";
|
|
18
|
+
import { linkedSegment } from "@dxos/react-ui-attention";
|
|
19
|
+
import { ASSISTANT_COMPANION_VARIANT, meta } from "#meta";
|
|
20
|
+
import { AssistantCapabilities, AssistantOperation } from "#types";
|
|
21
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-assistant/src/capabilities/app-graph-builder.ts";
|
|
22
|
+
var computeOperationsToImport = [
|
|
23
|
+
AgentPrompt
|
|
24
|
+
];
|
|
25
|
+
var whenNonChatObject = NodeMatcher.whenAll(NodeMatcher.whenEchoObject, NodeMatcher.whenNot(NodeMatcher.whenEchoTypeMatches(Chat.Chat)));
|
|
26
|
+
var app_graph_builder_default = Capability.makeModule(Effect.fnUntraced(function* () {
|
|
27
|
+
const capabilities = yield* Capability.Service;
|
|
28
|
+
const extensions = yield* Effect.all([
|
|
29
|
+
GraphBuilder.createTypeExtension({
|
|
30
|
+
id: "root",
|
|
31
|
+
type: Chat.Chat,
|
|
32
|
+
actions: (chat) => {
|
|
33
|
+
return Effect.succeed([
|
|
34
|
+
Node.makeAction({
|
|
35
|
+
id: AssistantOperation.UpdateChatName.meta.key,
|
|
36
|
+
data: () => Effect.gen(function* () {
|
|
37
|
+
const computeRuntime = yield* Capability.get(AutomationCapabilities.ComputeRuntime);
|
|
38
|
+
const db = Obj.getDatabase(chat);
|
|
39
|
+
invariant(db, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 39, S: this, A: ["db", ""] });
|
|
40
|
+
const runtime = yield* computeRuntime.getRuntime(db.spaceId).runtimeEffect;
|
|
41
|
+
yield* Operation.invoke(AssistantOperation.UpdateChatName, {
|
|
42
|
+
chat
|
|
43
|
+
}).pipe(Effect.provide(runtime));
|
|
44
|
+
}),
|
|
45
|
+
properties: {
|
|
46
|
+
label: [
|
|
47
|
+
"chat-update-name.label",
|
|
48
|
+
{
|
|
49
|
+
ns: meta.id
|
|
50
|
+
}
|
|
51
|
+
],
|
|
52
|
+
icon: "ph--magic-wand--regular",
|
|
53
|
+
disposition: "list-item"
|
|
54
|
+
}
|
|
55
|
+
})
|
|
56
|
+
]);
|
|
57
|
+
}
|
|
58
|
+
}),
|
|
59
|
+
GraphBuilder.createExtension({
|
|
60
|
+
id: "assistant",
|
|
61
|
+
match: NodeMatcher.whenRoot,
|
|
62
|
+
actions: () => Effect.succeed([
|
|
63
|
+
Node.makeAction({
|
|
64
|
+
id: "import-compute-operations",
|
|
65
|
+
data: Effect.fnUntraced(function* () {
|
|
66
|
+
const capabilities2 = yield* Capability.Service;
|
|
67
|
+
const client = yield* Capability.get(ClientCapabilities.Client);
|
|
68
|
+
const space = getActiveSpace(client, capabilities2) ?? getPersonalSpace(client);
|
|
69
|
+
if (!space) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
for (const definition of computeOperationsToImport) {
|
|
73
|
+
const key = definition.meta.key;
|
|
74
|
+
if (!key) {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const existing = yield* Effect.promise(() => space.db.query(Filter.and(Filter.type(Operation.PersistentOperation), Filter.key(key))).run());
|
|
78
|
+
if (existing.length === 0) {
|
|
79
|
+
space.db.add(Operation.serialize(definition));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
yield* Database.flush();
|
|
83
|
+
}),
|
|
84
|
+
properties: {
|
|
85
|
+
label: [
|
|
86
|
+
"import-compute-operations.label",
|
|
87
|
+
{
|
|
88
|
+
ns: meta.id
|
|
89
|
+
}
|
|
90
|
+
],
|
|
91
|
+
icon: "ph--download-simple--regular"
|
|
92
|
+
}
|
|
93
|
+
}),
|
|
94
|
+
Node.makeAction({
|
|
95
|
+
id: AssistantOperation.ToggleTracePanelDebug.meta.key,
|
|
96
|
+
data: () => Operation.invoke(AssistantOperation.ToggleTracePanelDebug, {}),
|
|
97
|
+
properties: {
|
|
98
|
+
label: [
|
|
99
|
+
"toggle-trace-panel-debug.label",
|
|
100
|
+
{
|
|
101
|
+
ns: meta.id
|
|
102
|
+
}
|
|
103
|
+
],
|
|
104
|
+
icon: "ph--brackets-curly--regular"
|
|
105
|
+
}
|
|
106
|
+
}),
|
|
107
|
+
Node.makeAction({
|
|
108
|
+
id: "reset-blueprints",
|
|
109
|
+
data: Effect.fnUntraced(function* () {
|
|
110
|
+
const capabilities2 = yield* Capability.Service;
|
|
111
|
+
const client = yield* Capability.get(ClientCapabilities.Client);
|
|
112
|
+
const space = getActiveSpace(client, capabilities2) ?? getPersonalSpace(client);
|
|
113
|
+
if (!space) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const blueprints = yield* Effect.promise(() => space.db.query(Filter.type(Blueprint.Blueprint)).run());
|
|
117
|
+
for (const blueprint of blueprints) {
|
|
118
|
+
space.db.remove(blueprint);
|
|
119
|
+
}
|
|
120
|
+
yield* Database.flush();
|
|
121
|
+
}),
|
|
122
|
+
properties: {
|
|
123
|
+
label: [
|
|
124
|
+
"reset-blueprints.label",
|
|
125
|
+
{
|
|
126
|
+
ns: meta.id
|
|
127
|
+
}
|
|
128
|
+
],
|
|
129
|
+
icon: "ph--arrow-clockwise--regular"
|
|
130
|
+
}
|
|
131
|
+
})
|
|
132
|
+
])
|
|
133
|
+
}),
|
|
134
|
+
// Don't show assistant companion when a chat is already the primary object.
|
|
135
|
+
GraphBuilder.createExtension({
|
|
136
|
+
id: "companion-chat",
|
|
137
|
+
match: whenNonChatObject,
|
|
138
|
+
connector: (object, get) => Effect.gen(function* () {
|
|
139
|
+
const state = get(yield* Capability.get(AssistantCapabilities.State));
|
|
140
|
+
const cache = get(yield* Capability.get(AssistantCapabilities.CompanionChatCache));
|
|
141
|
+
const objectDXN = Obj.getDXN(object).toString();
|
|
142
|
+
const chat = pipe(Option.fromNullable(state.currentChat[objectDXN]), Option.flatMap((dxnStr) => Option.fromNullable(DXN.tryParse(dxnStr))), Option.flatMap((dxn) => Option.fromNullable(Obj.getDatabase(object)?.makeRef(dxn))), Option.map((ref) => get(AtomObj.make(ref))), Option.filter(Obj.isObject), Option.orElse(() => pipe(Option.fromNullable(cache[objectDXN]), Option.filter(Obj.isObject))), Option.getOrNull);
|
|
143
|
+
return [
|
|
144
|
+
AppNode.makeCompanion({
|
|
145
|
+
id: linkedSegment(ASSISTANT_COMPANION_VARIANT),
|
|
146
|
+
label: [
|
|
147
|
+
"assistant-chat.label",
|
|
148
|
+
{
|
|
149
|
+
ns: meta.id
|
|
150
|
+
}
|
|
151
|
+
],
|
|
152
|
+
icon: "ph--sparkle--regular",
|
|
153
|
+
data: chat,
|
|
154
|
+
position: "hoist"
|
|
155
|
+
})
|
|
156
|
+
];
|
|
157
|
+
})
|
|
158
|
+
}),
|
|
159
|
+
GraphBuilder.createExtension({
|
|
160
|
+
id: "invocations",
|
|
161
|
+
match: NodeMatcher.whenAny(NodeMatcher.whenEchoTypeMatches(Sequence.Sequence), NodeMatcher.whenEchoTypeMatches(Routine.Routine)),
|
|
162
|
+
connector: () => Effect.succeed([
|
|
163
|
+
AppNode.makeCompanion({
|
|
164
|
+
id: "invocations",
|
|
165
|
+
label: [
|
|
166
|
+
"invocations.label",
|
|
167
|
+
{
|
|
168
|
+
ns: meta.id
|
|
169
|
+
}
|
|
170
|
+
],
|
|
171
|
+
icon: "ph--clock-countdown--regular",
|
|
172
|
+
data: "invocations"
|
|
173
|
+
})
|
|
174
|
+
])
|
|
175
|
+
}),
|
|
176
|
+
GraphBuilder.createExtension({
|
|
177
|
+
id: "trace",
|
|
178
|
+
match: NodeMatcher.whenRoot,
|
|
179
|
+
connector: () => Effect.succeed([
|
|
180
|
+
AppNode.makeDeckCompanion({
|
|
181
|
+
id: linkedSegment("trace"),
|
|
182
|
+
label: [
|
|
183
|
+
"trace.label",
|
|
184
|
+
{
|
|
185
|
+
ns: meta.id
|
|
186
|
+
}
|
|
187
|
+
],
|
|
188
|
+
icon: "ph--line-segments--regular",
|
|
189
|
+
data: "trace",
|
|
190
|
+
position: "fallback"
|
|
191
|
+
})
|
|
192
|
+
])
|
|
193
|
+
})
|
|
194
|
+
]);
|
|
195
|
+
return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions);
|
|
196
|
+
}));
|
|
197
|
+
export {
|
|
198
|
+
app_graph_builder_default as default
|
|
199
|
+
};
|
|
200
|
+
//# sourceMappingURL=app-graph-builder-5QBICPYP.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/app-graph-builder.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport { pipe } from 'effect/Function';\nimport * as Option from 'effect/Option';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities, AppNode, getActiveSpace, getPersonalSpace } from '@dxos/app-toolkit';\nimport { AgentPrompt, Chat } from '@dxos/assistant-toolkit';\nimport { Blueprint, Routine, Operation } from '@dxos/compute';\nimport { Sequence } from '@dxos/conductor';\nimport { DXN, Database, Filter, Obj, type Ref } from '@dxos/echo';\nimport { AtomObj } from '@dxos/echo-atom';\nimport { invariant } from '@dxos/invariant';\nimport { AutomationCapabilities } from '@dxos/plugin-automation';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { GraphBuilder, Node, NodeMatcher } from '@dxos/plugin-graph';\nimport { linkedSegment } from '@dxos/react-ui-attention';\n\nimport { ASSISTANT_COMPANION_VARIANT, meta } from '#meta';\nimport { AssistantCapabilities, AssistantOperation } from '#types';\n\n/** Operation definitions to seed as `PersistentOperation` records for automation / triggers. */\nconst computeOperationsToImport = [AgentPrompt] as const;\n\n/** Match ECHO objects that are NOT chats. */\nconst whenNonChatObject = NodeMatcher.whenAll(\n NodeMatcher.whenEchoObject,\n NodeMatcher.whenNot(NodeMatcher.whenEchoTypeMatches(Chat.Chat)),\n);\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const capabilities = yield* Capability.Service;\n\n const extensions = yield* Effect.all([\n GraphBuilder.createTypeExtension({\n id: 'root',\n type: Chat.Chat,\n actions: (chat) => {\n return Effect.succeed([\n Node.makeAction({\n id: AssistantOperation.UpdateChatName.meta.key,\n data: () =>\n Effect.gen(function* () {\n // TODO(dmaretskyi): This goes away when composer will have unified operation invocations.\n const computeRuntime = yield* Capability.get(AutomationCapabilities.ComputeRuntime);\n const db = Obj.getDatabase(chat);\n invariant(db);\n const runtime = yield* computeRuntime.getRuntime(db.spaceId).runtimeEffect;\n yield* Operation.invoke(AssistantOperation.UpdateChatName, { chat }).pipe(Effect.provide(runtime));\n }),\n properties: {\n label: ['chat-update-name.label', { ns: meta.id }],\n icon: 'ph--magic-wand--regular',\n disposition: 'list-item',\n },\n }),\n ]);\n },\n }),\n\n GraphBuilder.createExtension({\n id: 'assistant',\n match: NodeMatcher.whenRoot,\n actions: () =>\n Effect.succeed([\n Node.makeAction({\n id: 'import-compute-operations',\n data: Effect.fnUntraced(function* () {\n const capabilities = yield* Capability.Service;\n const client = yield* Capability.get(ClientCapabilities.Client);\n const space = getActiveSpace(client, capabilities) ?? getPersonalSpace(client);\n if (!space) {\n return;\n }\n for (const definition of computeOperationsToImport) {\n const key = definition.meta.key;\n if (!key) {\n continue;\n }\n const existing = yield* Effect.promise(\n (): Promise<Operation.PersistentOperation[]> =>\n space.db.query(Filter.and(Filter.type(Operation.PersistentOperation), Filter.key(key))).run(),\n );\n if (existing.length === 0) {\n space.db.add(Operation.serialize(definition));\n }\n }\n yield* Database.flush();\n }),\n properties: {\n label: ['import-compute-operations.label', { ns: meta.id }],\n icon: 'ph--download-simple--regular',\n },\n }),\n Node.makeAction({\n id: AssistantOperation.ToggleTracePanelDebug.meta.key,\n data: () => Operation.invoke(AssistantOperation.ToggleTracePanelDebug, {}),\n properties: {\n label: ['toggle-trace-panel-debug.label', { ns: meta.id }],\n icon: 'ph--brackets-curly--regular',\n },\n }),\n Node.makeAction({\n id: 'reset-blueprints',\n data: Effect.fnUntraced(function* () {\n const capabilities = yield* Capability.Service;\n const client = yield* Capability.get(ClientCapabilities.Client);\n const space = getActiveSpace(client, capabilities) ?? getPersonalSpace(client);\n if (!space) {\n return;\n }\n const blueprints = yield* Effect.promise(\n (): Promise<Blueprint.Blueprint[]> => space.db.query(Filter.type(Blueprint.Blueprint)).run(),\n );\n for (const blueprint of blueprints) {\n space.db.remove(blueprint);\n }\n yield* Database.flush();\n }),\n properties: {\n label: ['reset-blueprints.label', { ns: meta.id }],\n icon: 'ph--arrow-clockwise--regular',\n },\n }),\n ]),\n }),\n\n // Don't show assistant companion when a chat is already the primary object.\n GraphBuilder.createExtension({\n id: 'companion-chat',\n match: whenNonChatObject,\n connector: (object, get) =>\n Effect.gen(function* () {\n const state = get(yield* Capability.get(AssistantCapabilities.State));\n const cache = get(yield* Capability.get(AssistantCapabilities.CompanionChatCache));\n const objectDXN = Obj.getDXN(object).toString();\n\n // Resolve chat from persisted state or transient cache.\n const chat = pipe(\n Option.fromNullable(state.currentChat[objectDXN]),\n Option.flatMap((dxnStr) => Option.fromNullable(DXN.tryParse(dxnStr))),\n Option.flatMap((dxn) => Option.fromNullable(Obj.getDatabase(object)?.makeRef(dxn))),\n Option.map((ref) => get(AtomObj.make(ref as Ref.Ref<Obj.Unknown>))),\n Option.filter(Obj.isObject),\n Option.orElse(() => pipe(Option.fromNullable(cache[objectDXN]), Option.filter(Obj.isObject))),\n Option.getOrNull,\n );\n\n return [\n AppNode.makeCompanion({\n id: linkedSegment(ASSISTANT_COMPANION_VARIANT),\n label: ['assistant-chat.label', { ns: meta.id }],\n icon: 'ph--sparkle--regular',\n data: chat,\n position: 'hoist',\n }),\n ];\n }),\n }),\n\n GraphBuilder.createExtension({\n id: 'invocations',\n match: NodeMatcher.whenAny(\n NodeMatcher.whenEchoTypeMatches(Sequence.Sequence),\n NodeMatcher.whenEchoTypeMatches(Routine.Routine),\n ),\n connector: () =>\n Effect.succeed([\n AppNode.makeCompanion({\n id: 'invocations',\n label: ['invocations.label', { ns: meta.id }],\n icon: 'ph--clock-countdown--regular',\n data: 'invocations',\n }),\n ]),\n }),\n\n GraphBuilder.createExtension({\n id: 'trace',\n match: NodeMatcher.whenRoot,\n connector: () =>\n Effect.succeed([\n AppNode.makeDeckCompanion({\n id: linkedSegment('trace'),\n label: ['trace.label', { ns: meta.id }],\n icon: 'ph--line-segments--regular',\n data: 'trace' as const,\n position: 'fallback',\n }),\n ]),\n }),\n ]);\n\n return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions);\n }),\n);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Effect", "pipe", "Option", "Capability", "AppCapabilities", "AppNode", "getActiveSpace", "getPersonalSpace", "AgentPrompt", "Chat", "Blueprint", "Routine", "Operation", "Sequence", "DXN", "Database", "Filter", "Obj", "AtomObj", "invariant", "AutomationCapabilities", "ClientCapabilities", "GraphBuilder", "Node", "NodeMatcher", "linkedSegment", "ASSISTANT_COMPANION_VARIANT", "meta", "AssistantCapabilities", "AssistantOperation", "Service", "extensions", "createTypeExtension", "actions", "makeAction", "data", "computeRuntime", "db", "runtime", "invoke", "UpdateChatName", "chat", "provide", "properties", "label", "icon", "disposition", "whenRoot", "client", "space", "capabilities", "key", "serialize", "definition", "blueprint", "flush", "whenNonChatObject", "connector", "cache", "objectDXN", "getDXN", "toString", "fromNullable", "currentChat", "makeCompanion", "position", "whenAny", "makeDeckCompanion"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import "./chunk-J5LGTIGS.mjs";
|
|
2
|
+
|
|
3
|
+
// src/capabilities/blueprint-definition.ts
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
import { Capabilities, Capability } from "@dxos/app-framework";
|
|
6
|
+
import { AppCapabilities } from "@dxos/app-toolkit";
|
|
7
|
+
import { AgentBlueprint, AgentBlueprintHandlers, AgentHandlers, AgentWizardBlueprint, AgentWizardHandlers, BlueprintManagerBlueprint, BlueprintManagerHandlers, BrowserBlueprint, DatabaseBlueprint, DatabaseHandlers, DiscordBlueprint, LinearBlueprint, PlanningBlueprint, WebSearchBlueprint, MemoryBlueprint, AutomationBlueprint } from "@dxos/assistant-toolkit";
|
|
8
|
+
import { AssistantBlueprint } from "#blueprints";
|
|
9
|
+
var blueprintDefinition = Capability.makeModule(() => Effect.succeed([
|
|
10
|
+
Capability.contributes(AppCapabilities.BlueprintDefinition, AssistantBlueprint),
|
|
11
|
+
Capability.contributes(AppCapabilities.BlueprintDefinition, BrowserBlueprint),
|
|
12
|
+
Capability.contributes(AppCapabilities.BlueprintDefinition, DatabaseBlueprint),
|
|
13
|
+
Capability.contributes(AppCapabilities.BlueprintDefinition, WebSearchBlueprint),
|
|
14
|
+
Capability.contributes(AppCapabilities.BlueprintDefinition, DiscordBlueprint),
|
|
15
|
+
Capability.contributes(AppCapabilities.BlueprintDefinition, LinearBlueprint),
|
|
16
|
+
Capability.contributes(AppCapabilities.BlueprintDefinition, AgentBlueprint),
|
|
17
|
+
Capability.contributes(AppCapabilities.BlueprintDefinition, PlanningBlueprint),
|
|
18
|
+
Capability.contributes(AppCapabilities.BlueprintDefinition, MemoryBlueprint),
|
|
19
|
+
Capability.contributes(AppCapabilities.BlueprintDefinition, AutomationBlueprint),
|
|
20
|
+
Capability.contributes(AppCapabilities.BlueprintDefinition, BlueprintManagerBlueprint),
|
|
21
|
+
Capability.contributes(AppCapabilities.BlueprintDefinition, AgentWizardBlueprint),
|
|
22
|
+
Capability.contributes(Capabilities.OperationHandler, AgentHandlers),
|
|
23
|
+
Capability.contributes(Capabilities.OperationHandler, AgentBlueprintHandlers),
|
|
24
|
+
Capability.contributes(Capabilities.OperationHandler, BlueprintManagerHandlers),
|
|
25
|
+
Capability.contributes(Capabilities.OperationHandler, DatabaseHandlers),
|
|
26
|
+
Capability.contributes(Capabilities.OperationHandler, AgentWizardHandlers)
|
|
27
|
+
]));
|
|
28
|
+
var blueprint_definition_default = blueprintDefinition;
|
|
29
|
+
export {
|
|
30
|
+
blueprint_definition_default as default
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=blueprint-definition-VXJYQ5AE.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/blueprint-definition.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\nimport {\n AgentBlueprint,\n AgentBlueprintHandlers,\n AgentHandlers,\n AgentWizardBlueprint,\n AgentWizardHandlers,\n BlueprintManagerBlueprint,\n BlueprintManagerHandlers,\n BrowserBlueprint,\n DatabaseBlueprint,\n DatabaseHandlers,\n DiscordBlueprint,\n LinearBlueprint,\n PlanningBlueprint,\n WebSearchBlueprint,\n MemoryBlueprint,\n AutomationBlueprint,\n} from '@dxos/assistant-toolkit';\n// eslint-disable-next-line unused-imports/no-unused-imports\nimport type { Blueprint } from '@dxos/compute';\n\nimport { AssistantBlueprint } from '#blueprints';\n\n// TODO(dmaretskyi): Force this type for all Capability.makeModule calls.\nconst blueprintDefinition: () => Effect.Effect<Capability.Capability<unknown>[]> = Capability.makeModule(() =>\n Effect.succeed([\n Capability.contributes(AppCapabilities.BlueprintDefinition, AssistantBlueprint),\n Capability.contributes(AppCapabilities.BlueprintDefinition, BrowserBlueprint),\n Capability.contributes(AppCapabilities.BlueprintDefinition, DatabaseBlueprint),\n Capability.contributes(AppCapabilities.BlueprintDefinition, WebSearchBlueprint),\n Capability.contributes(AppCapabilities.BlueprintDefinition, DiscordBlueprint),\n Capability.contributes(AppCapabilities.BlueprintDefinition, LinearBlueprint),\n Capability.contributes(AppCapabilities.BlueprintDefinition, AgentBlueprint),\n Capability.contributes(AppCapabilities.BlueprintDefinition, PlanningBlueprint),\n Capability.contributes(AppCapabilities.BlueprintDefinition, MemoryBlueprint),\n Capability.contributes(AppCapabilities.BlueprintDefinition, AutomationBlueprint),\n Capability.contributes(AppCapabilities.BlueprintDefinition, BlueprintManagerBlueprint),\n Capability.contributes(AppCapabilities.BlueprintDefinition, AgentWizardBlueprint),\n\n Capability.contributes(Capabilities.OperationHandler, AgentHandlers),\n Capability.contributes(Capabilities.OperationHandler, AgentBlueprintHandlers),\n Capability.contributes(Capabilities.OperationHandler, BlueprintManagerHandlers),\n Capability.contributes(Capabilities.OperationHandler, DatabaseHandlers),\n Capability.contributes(Capabilities.OperationHandler, AgentWizardHandlers),\n ]),\n);\n\nexport default blueprintDefinition;\n"],
|
|
5
|
+
"mappings": ";;;AAIA,YAAYA,YAAY;AAExB,SAASC,cAAcC,kBAAkB;AACzC,SAASC,uBAAuB;AAChC,SACEC,gBACAC,wBACAC,eACAC,sBACAC,qBACAC,2BACAC,0BACAC,kBACAC,mBACAC,kBACAC,kBACAC,iBACAC,mBACAC,oBACAC,iBACAC,2BACK;AAIP,SAASC,0BAA0B;AAGnC,IAAMC,sBAA6EnB,WAAWoB,WAAW,MAChGC,eAAQ;EACbrB,WAAWsB,YAAYrB,gBAAgBsB,qBAAqBL,kBAAAA;EAC5DlB,WAAWsB,YAAYrB,gBAAgBsB,qBAAqBd,gBAAAA;EAC5DT,WAAWsB,YAAYrB,gBAAgBsB,qBAAqBb,iBAAAA;EAC5DV,WAAWsB,YAAYrB,gBAAgBsB,qBAAqBR,kBAAAA;EAC5Df,WAAWsB,YAAYrB,gBAAgBsB,qBAAqBX,gBAAAA;EAC5DZ,WAAWsB,YAAYrB,gBAAgBsB,qBAAqBV,eAAAA;EAC5Db,WAAWsB,YAAYrB,gBAAgBsB,qBAAqBrB,cAAAA;EAC5DF,WAAWsB,YAAYrB,gBAAgBsB,qBAAqBT,iBAAAA;EAC5Dd,WAAWsB,YAAYrB,gBAAgBsB,qBAAqBP,eAAAA;EAC5DhB,WAAWsB,YAAYrB,gBAAgBsB,qBAAqBN,mBAAAA;EAC5DjB,WAAWsB,YAAYrB,gBAAgBsB,qBAAqBhB,yBAAAA;EAC5DP,WAAWsB,YAAYrB,gBAAgBsB,qBAAqBlB,oBAAAA;EAE5DL,WAAWsB,YAAYvB,aAAayB,kBAAkBpB,aAAAA;EACtDJ,WAAWsB,YAAYvB,aAAayB,kBAAkBrB,sBAAAA;EACtDH,WAAWsB,YAAYvB,aAAayB,kBAAkBhB,wBAAAA;EACtDR,WAAWsB,YAAYvB,aAAayB,kBAAkBb,gBAAAA;EACtDX,WAAWsB,YAAYvB,aAAayB,kBAAkBlB,mBAAAA;CACvD,CAAA;AAGH,IAAA,+BAAea;",
|
|
6
|
+
"names": ["Effect", "Capabilities", "Capability", "AppCapabilities", "AgentBlueprint", "AgentBlueprintHandlers", "AgentHandlers", "AgentWizardBlueprint", "AgentWizardHandlers", "BlueprintManagerBlueprint", "BlueprintManagerHandlers", "BrowserBlueprint", "DatabaseBlueprint", "DatabaseHandlers", "DiscordBlueprint", "LinearBlueprint", "PlanningBlueprint", "WebSearchBlueprint", "MemoryBlueprint", "AutomationBlueprint", "AssistantBlueprint", "blueprintDefinition", "makeModule", "succeed", "contributes", "BlueprintDefinition", "OperationHandler"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import "../chunk-J5LGTIGS.mjs";
|
|
2
|
+
|
|
3
|
+
// src/capabilities/index.ts
|
|
4
|
+
import { Capability } from "@dxos/app-framework";
|
|
5
|
+
var AiService = Capability.lazy("AiService", () => import("../ai-service-GJXMI5OI.mjs"));
|
|
6
|
+
var AppGraphBuilder = Capability.lazy("AppGraphBuilder", () => import("../app-graph-builder-5QBICPYP.mjs"));
|
|
7
|
+
var BlueprintDefinition = Capability.lazy("BlueprintDefinition", () => import("../blueprint-definition-VXJYQ5AE.mjs"));
|
|
8
|
+
var CompanionChatProvisioner = Capability.lazy("CompanionChatProvisioner", () => import("../companion-chat-provisioner-2Y6PRSDK.mjs"));
|
|
9
|
+
var CreateObject = Capability.lazy("CreateObject", () => import("../create-object-UZCJCPWM.mjs"));
|
|
10
|
+
var EdgeModelResolver = Capability.lazy("EdgeModelResolver", () => import("../edge-model-resolver-XDNBZ3US.mjs"));
|
|
11
|
+
var LocalModelResolver = Capability.lazy("LocalModelResolver", () => import("../local-model-resolver-I2BENFFS.mjs"));
|
|
12
|
+
var MarkdownExtension = Capability.lazy("MarkdownExtension", () => import("../markdown-KTBFOMFM.mjs"));
|
|
13
|
+
var Migrations = Capability.lazy("AssistantMigrations", () => import("../migrations-7DEMVBOG.mjs"));
|
|
14
|
+
var OperationHandler = Capability.lazy("OperationHandler", () => import("../operation-handler-SF36MOB5.mjs"));
|
|
15
|
+
var ReactSurface = Capability.lazy("ReactSurface", () => import("../react-surface-T4R65UJU.mjs"));
|
|
16
|
+
var Settings = Capability.lazy("Settings", () => import("../settings-W4BLWQ53.mjs"));
|
|
17
|
+
var AssistantState = Capability.lazy("AssistantState", () => import("../state-H3G7QCU6.mjs"));
|
|
18
|
+
var Toolkit = Capability.lazy("Toolkit", () => import("../toolkit-GVWXPDLJ.mjs"));
|
|
19
|
+
export {
|
|
20
|
+
AiService,
|
|
21
|
+
AppGraphBuilder,
|
|
22
|
+
AssistantState,
|
|
23
|
+
BlueprintDefinition,
|
|
24
|
+
CompanionChatProvisioner,
|
|
25
|
+
CreateObject,
|
|
26
|
+
EdgeModelResolver,
|
|
27
|
+
LocalModelResolver,
|
|
28
|
+
MarkdownExtension,
|
|
29
|
+
Migrations,
|
|
30
|
+
OperationHandler,
|
|
31
|
+
ReactSurface,
|
|
32
|
+
Settings,
|
|
33
|
+
Toolkit
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=index.mjs.map
|