@agimon-ai/doompi-workflow 0.0.1-alpha.72 → 0.0.1-alpha.74
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 +4 -2
- package/README.md +8 -5
- package/dist/_virtual/_rolldown/runtime.cjs +23 -1
- package/dist/api-contracts.cjs +7 -1
- package/dist/api-contracts.mjs +2 -1
- package/dist/extensions/pi.cjs +62 -1
- package/dist/extensions/pi.cjs.map +1 -1
- package/dist/extensions/pi.d.cts +3 -3
- package/dist/extensions/pi.d.cts.map +1 -1
- package/dist/extensions/pi.d.mts +3 -3
- package/dist/extensions/pi.d.mts.map +1 -1
- package/dist/extensions/pi.mjs +57 -1
- package/dist/extensions/pi.mjs.map +1 -1
- package/dist/extensions/server.cjs +95 -1
- package/dist/extensions/server.cjs.map +1 -1
- package/dist/extensions/server.d.cts +3 -3
- package/dist/extensions/server.d.cts.map +1 -1
- package/dist/extensions/server.d.mts +3 -3
- package/dist/extensions/server.d.mts.map +1 -1
- package/dist/extensions/server.mjs +90 -1
- package/dist/extensions/server.mjs.map +1 -1
- package/dist/extensions/web.mjs +3219 -0
- package/dist/extensions/web.mjs.map +1 -0
- package/dist/index.cjs +4 -1
- package/dist/index.mjs +2 -1
- package/dist/src/constants/workflow.cjs +31 -1
- package/dist/src/constants/workflow.cjs.map +1 -1
- package/dist/src/constants/workflow.mjs +20 -1
- package/dist/src/constants/workflow.mjs.map +1 -1
- package/dist/src/extensions/(backend)/_lib/index.server.cjs +12 -0
- package/dist/src/extensions/(backend)/_lib/index.server.cjs.map +1 -0
- package/dist/src/extensions/(backend)/_lib/index.server.mjs +12 -0
- package/dist/src/extensions/(backend)/_lib/index.server.mjs.map +1 -0
- package/dist/src/extensions/(backend)/api/workflow/route.server.cjs +7 -0
- package/dist/src/extensions/(backend)/api/workflow/route.server.cjs.map +1 -0
- package/dist/src/extensions/(backend)/api/workflow/route.server.mjs +8 -0
- package/dist/src/extensions/(backend)/api/workflow/route.server.mjs.map +1 -0
- package/dist/src/extensions/(backend)/channel/workflow-catalog.server.cjs +7 -0
- package/dist/src/extensions/(backend)/channel/workflow-catalog.server.cjs.map +1 -0
- package/dist/src/extensions/(backend)/channel/workflow-catalog.server.mjs +8 -0
- package/dist/src/extensions/(backend)/channel/workflow-catalog.server.mjs.map +1 -0
- package/dist/src/extensions/(backend)/channel/workflows.server.cjs +7 -0
- package/dist/src/extensions/(backend)/channel/workflows.server.cjs.map +1 -0
- package/dist/src/extensions/(backend)/channel/workflows.server.mjs +8 -0
- package/dist/src/extensions/(backend)/channel/workflows.server.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/index.cli.cjs +100 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/index.cli.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/index.cli.mjs +100 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/index.cli.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/index.server.cjs +11 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/index.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/index.server.mjs +11 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/index.server.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/workflowSkillsResource.cjs +12 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/workflowSkillsResource.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/workflowSkillsResource.mjs +12 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/_lib/workflowSkillsResource.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/api/workflow/route.server.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/api/workflow/route.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/api/workflow/route.server.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/api/workflow/route.server.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/command/workflow-launch.cli.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/command/workflow-launch.cli.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/command/workflow-launch.cli.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/command/workflow-launch.cli.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/command/workflow-launch.server.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/command/workflow-launch.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/command/workflow-launch.server.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/command/workflow-launch.server.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/resources-discover.cli.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/resources-discover.cli.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/resources-discover.cli.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/resources-discover.cli.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-execution-end.server.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-execution-end.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-execution-end.server.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-execution-end.server.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/resource/doompi-author-workflow.server.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/resource/doompi-author-workflow.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/resource/doompi-author-workflow.server.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/resource/doompi-author-workflow.server.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/resource/doompi-use-workflow.server.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/resource/doompi-use-workflow.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/resource/doompi-use-workflow.server.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/resource/doompi-use-workflow.server.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/resource/workflow-recovery.server.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/resource/workflow-recovery.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/resource/workflow-recovery.server.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/resource/workflow-recovery.server.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/resource/workflow-skills.cli.cjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/resource/workflow-skills.cli.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/resource/workflow-skills.cli.mjs +8 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/resource/workflow-skills.cli.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.cjs +15 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.mjs +16 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/root.server.cjs +17 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/root.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/root.server.mjs +18 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/root.server.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/shortcut/workflow-panel.cli.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/shortcut/workflow-panel.cli.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/shortcut/workflow-panel.cli.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/shortcut/workflow-panel.cli.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/shortcut/workflow-view-close.cli.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/shortcut/workflow-view-close.cli.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/shortcut/workflow-view-close.cli.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/shortcut/workflow-view-close.cli.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/launch-workflow.server.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/launch-workflow.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/launch-workflow.server.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/launch-workflow.server.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/list-workflows.server.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/list-workflows.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/list-workflows.server.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/list-workflows.server.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/workflow-run.server.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/workflow-run.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/workflow-run.server.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/workflow-run.server.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/workflow.cli.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/workflow.cli.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/workflow.cli.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool/workflow.cli.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/workflow.cli.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/workflow.cli.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/workflow.cli.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/workflow.cli.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/workflow.server.cjs +6 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/workflow.server.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/workflow.server.mjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/workflow.server.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(frontend)/message/_lib/workflowFinishedRenderer.cjs +50 -0
- package/dist/src/extensions/workspaces/sessions/(frontend)/message/_lib/workflowFinishedRenderer.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(frontend)/message/_lib/workflowFinishedRenderer.mjs +47 -0
- package/dist/src/extensions/workspaces/sessions/(frontend)/message/_lib/workflowFinishedRenderer.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(frontend)/message/_lib/workflowStepRenderer.cjs +36 -0
- package/dist/src/extensions/workspaces/sessions/(frontend)/message/_lib/workflowStepRenderer.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(frontend)/message/_lib/workflowStepRenderer.mjs +35 -0
- package/dist/src/extensions/workspaces/sessions/(frontend)/message/_lib/workflowStepRenderer.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(frontend)/message/workflow-finished.cli.cjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(frontend)/message/workflow-finished.cli.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(frontend)/message/workflow-finished.cli.mjs +8 -0
- package/dist/src/extensions/workspaces/sessions/(frontend)/message/workflow-finished.cli.mjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(frontend)/message/workflow-step.cli.cjs +7 -0
- package/dist/src/extensions/workspaces/sessions/(frontend)/message/workflow-step.cli.cjs.map +1 -0
- package/dist/src/extensions/workspaces/sessions/(frontend)/message/workflow-step.cli.mjs +8 -0
- package/dist/src/extensions/workspaces/sessions/(frontend)/message/workflow-step.cli.mjs.map +1 -0
- package/dist/src/schemas/apiContracts.cjs +329 -1
- package/dist/src/schemas/apiContracts.cjs.map +1 -1
- package/dist/src/schemas/apiContracts.mjs +326 -1
- package/dist/src/schemas/apiContracts.mjs.map +1 -1
- package/dist/src/schemas/workflowPi.cjs +76 -1
- package/dist/src/schemas/workflowPi.cjs.map +1 -1
- package/dist/src/schemas/workflowPi.mjs +73 -1
- package/dist/src/schemas/workflowPi.mjs.map +1 -1
- package/dist/src/services/backgroundWork/index.cjs +60 -1
- package/dist/src/services/backgroundWork/index.cjs.map +1 -1
- package/dist/src/services/backgroundWork/index.mjs +60 -1
- package/dist/src/services/backgroundWork/index.mjs.map +1 -1
- package/dist/src/services/piToolBridge/index.cjs +204 -10
- package/dist/src/services/piToolBridge/index.cjs.map +1 -1
- package/dist/src/services/piToolBridge/index.mjs +194 -10
- package/dist/src/services/piToolBridge/index.mjs.map +1 -1
- package/dist/src/services/serverRuntime/index.cjs +341 -0
- package/dist/src/services/serverRuntime/index.cjs.map +1 -0
- package/dist/src/services/serverRuntime/index.mjs +341 -0
- package/dist/src/services/serverRuntime/index.mjs.map +1 -0
- package/dist/src/services/webWorkflowCatalog/index.cjs +52 -1
- package/dist/src/services/webWorkflowCatalog/index.cjs.map +1 -1
- package/dist/src/services/webWorkflowCatalog/index.mjs +51 -1
- package/dist/src/services/webWorkflowCatalog/index.mjs.map +1 -1
- package/dist/src/services/workflowCatalogChannel/index.cjs +74 -0
- package/dist/src/services/workflowCatalogChannel/index.cjs.map +1 -0
- package/dist/src/services/workflowCatalogChannel/index.mjs +74 -0
- package/dist/src/services/workflowCatalogChannel/index.mjs.map +1 -0
- package/dist/src/services/workflowCatalogDeps/index.cjs +24 -1
- package/dist/src/services/workflowCatalogDeps/index.cjs.map +1 -1
- package/dist/src/services/workflowCatalogDeps/index.mjs +24 -1
- package/dist/src/services/workflowCatalogDeps/index.mjs.map +1 -1
- package/dist/src/services/workflowExecution/index.cjs +204 -1
- package/dist/src/services/workflowExecution/index.cjs.map +1 -1
- package/dist/src/services/workflowExecution/index.mjs +199 -1
- package/dist/src/services/workflowExecution/index.mjs.map +1 -1
- package/dist/src/services/workflowFence/index.cjs +169 -1
- package/dist/src/services/workflowFence/index.cjs.map +1 -1
- package/dist/src/services/workflowFence/index.mjs +165 -1
- package/dist/src/services/workflowFence/index.mjs.map +1 -1
- package/dist/src/services/workflowHubApi/index.cjs +415 -0
- package/dist/src/services/workflowHubApi/index.cjs.map +1 -0
- package/dist/src/services/workflowHubApi/index.mjs +411 -0
- package/dist/src/services/workflowHubApi/index.mjs.map +1 -0
- package/dist/src/services/workflowLaunchCommand/index.cjs +120 -1
- package/dist/src/services/workflowLaunchCommand/index.cjs.map +1 -1
- package/dist/src/services/workflowLaunchCommand/index.mjs +117 -1
- package/dist/src/services/workflowLaunchCommand/index.mjs.map +1 -1
- package/dist/src/services/workflowLauncher/index.cjs +180 -1
- package/dist/src/services/workflowLauncher/index.cjs.map +1 -1
- package/dist/src/services/workflowLauncher/index.mjs +176 -1
- package/dist/src/services/workflowLauncher/index.mjs.map +1 -1
- package/dist/src/services/workflowNarration/index.cjs +18 -1
- package/dist/src/services/workflowNarration/index.cjs.map +1 -1
- package/dist/src/services/workflowNarration/index.mjs +18 -1
- package/dist/src/services/workflowNarration/index.mjs.map +1 -1
- package/dist/src/services/workflowResource/index.cjs +26 -1
- package/dist/src/services/workflowResource/index.cjs.map +1 -1
- package/dist/src/services/workflowResource/index.mjs +23 -1
- package/dist/src/services/workflowResource/index.mjs.map +1 -1
- package/dist/src/services/workflowRuns/index.cjs +332 -2
- package/dist/src/services/workflowRuns/index.cjs.map +1 -1
- package/dist/src/services/workflowRuns/index.mjs +318 -2
- package/dist/src/services/workflowRuns/index.mjs.map +1 -1
- package/dist/src/services/workflowTerminal/index.cjs +68 -1
- package/dist/src/services/workflowTerminal/index.cjs.map +1 -1
- package/dist/src/services/workflowTerminal/index.mjs +68 -1
- package/dist/src/services/workflowTerminal/index.mjs.map +1 -1
- package/dist/src/services/workflowTools/index.cjs +221 -0
- package/dist/src/services/workflowTools/index.cjs.map +1 -0
- package/dist/src/services/workflowTools/index.mjs +221 -0
- package/dist/src/services/workflowTools/index.mjs.map +1 -0
- package/dist/src/services/workflowWatcher/index.cjs +77 -1
- package/dist/src/services/workflowWatcher/index.cjs.map +1 -1
- package/dist/src/services/workflowWatcher/index.mjs +73 -1
- package/dist/src/services/workflowWatcher/index.mjs.map +1 -1
- package/dist/src/services/workflowsHubChannel/index.cjs +58 -0
- package/dist/src/services/workflowsHubChannel/index.cjs.map +1 -0
- package/dist/src/services/workflowsHubChannel/index.mjs +58 -0
- package/dist/src/services/workflowsHubChannel/index.mjs.map +1 -0
- package/dist/src/tui/leader.cjs +83 -1
- package/dist/src/tui/leader.cjs.map +1 -1
- package/dist/src/tui/leader.mjs +82 -1
- package/dist/src/tui/leader.mjs.map +1 -1
- package/dist/src/tui/workflow/doomOverlay.cjs +158 -1
- package/dist/src/tui/workflow/doomOverlay.cjs.map +1 -1
- package/dist/src/tui/workflow/doomOverlay.mjs +156 -1
- package/dist/src/tui/workflow/doomOverlay.mjs.map +1 -1
- package/dist/src/tui/workflow/overlayText.cjs +82 -1
- package/dist/src/tui/workflow/overlayText.cjs.map +1 -1
- package/dist/src/tui/workflow/overlayText.mjs +77 -1
- package/dist/src/tui/workflow/overlayText.mjs.map +1 -1
- package/dist/src/tui/workflow/rendering.cjs +21 -1
- package/dist/src/tui/workflow/rendering.cjs.map +1 -1
- package/dist/src/tui/workflow/rendering.mjs +19 -1
- package/dist/src/tui/workflow/rendering.mjs.map +1 -1
- package/dist/src/tui/workflow/workflowCatalog.cjs +335 -1
- package/dist/src/tui/workflow/workflowCatalog.cjs.map +1 -1
- package/dist/src/tui/workflow/workflowCatalog.mjs +332 -1
- package/dist/src/tui/workflow/workflowCatalog.mjs.map +1 -1
- package/dist/src/tui/workflow/workflowFinishedMessage.cjs +49 -2
- package/dist/src/tui/workflow/workflowFinishedMessage.cjs.map +1 -1
- package/dist/src/tui/workflow/workflowFinishedMessage.mjs +46 -2
- package/dist/src/tui/workflow/workflowFinishedMessage.mjs.map +1 -1
- package/dist/src/tui/workflow/workflowInspector.cjs +275 -1
- package/dist/src/tui/workflow/workflowInspector.cjs.map +1 -1
- package/dist/src/tui/workflow/workflowInspector.mjs +275 -1
- package/dist/src/tui/workflow/workflowInspector.mjs.map +1 -1
- package/dist/src/tui/workflow/workflowOverlay.cjs +125 -1
- package/dist/src/tui/workflow/workflowOverlay.cjs.map +1 -1
- package/dist/src/tui/workflow/workflowOverlay.mjs +124 -1
- package/dist/src/tui/workflow/workflowOverlay.mjs.map +1 -1
- package/dist/src/tui/workflow/workflowPicker.cjs +137 -1
- package/dist/src/tui/workflow/workflowPicker.cjs.map +1 -1
- package/dist/src/tui/workflow/workflowPicker.mjs +135 -1
- package/dist/src/tui/workflow/workflowPicker.mjs.map +1 -1
- package/dist/src/tui/workflow/workflowProgressOverlay.cjs +196 -1
- package/dist/src/tui/workflow/workflowProgressOverlay.cjs.map +1 -1
- package/dist/src/tui/workflow/workflowProgressOverlay.mjs +191 -1
- package/dist/src/tui/workflow/workflowProgressOverlay.mjs.map +1 -1
- package/dist/src/tui/workflow/workflowPrompt.cjs +141 -1
- package/dist/src/tui/workflow/workflowPrompt.cjs.map +1 -1
- package/dist/src/tui/workflow/workflowPrompt.mjs +138 -1
- package/dist/src/tui/workflow/workflowPrompt.mjs.map +1 -1
- package/dist/src/tui/workflow/workflowRunPanel.cjs +94 -1
- package/dist/src/tui/workflow/workflowRunPanel.cjs.map +1 -1
- package/dist/src/tui/workflow/workflowRunPanel.mjs +93 -1
- package/dist/src/tui/workflow/workflowRunPanel.mjs.map +1 -1
- package/dist/src/tui/workflow/workflowStatusRow.cjs +19 -1
- package/dist/src/tui/workflow/workflowStatusRow.cjs.map +1 -1
- package/dist/src/tui/workflow/workflowStatusRow.mjs +19 -1
- package/dist/src/tui/workflow/workflowStatusRow.mjs.map +1 -1
- package/dist/src/tui/workflow/workflowStepMessage.cjs +31 -1
- package/dist/src/tui/workflow/workflowStepMessage.cjs.map +1 -1
- package/dist/src/tui/workflow/workflowStepMessage.mjs +30 -1
- package/dist/src/tui/workflow/workflowStepMessage.mjs.map +1 -1
- package/dist/src/tui/workflow/workflowToolRender.cjs +490 -6
- package/dist/src/tui/workflow/workflowToolRender.cjs.map +1 -1
- package/dist/src/tui/workflow/workflowToolRender.mjs +489 -6
- package/dist/src/tui/workflow/workflowToolRender.mjs.map +1 -1
- package/dist/src/tui/workflowRuntime.cjs +1932 -7
- package/dist/src/tui/workflowRuntime.cjs.map +1 -1
- package/dist/src/tui/workflowRuntime.mjs +1928 -7
- package/dist/src/tui/workflowRuntime.mjs.map +1 -1
- package/dist/src/types/apiRoutes.cjs +82 -0
- package/dist/src/types/apiRoutes.cjs.map +1 -0
- package/dist/src/types/apiRoutes.mjs +80 -0
- package/dist/src/types/apiRoutes.mjs.map +1 -0
- package/dist/src/types/webWorkflowTerminal.cjs +22 -1
- package/dist/src/types/webWorkflowTerminal.cjs.map +1 -1
- package/dist/src/types/webWorkflowTerminal.mjs +21 -1
- package/dist/src/types/webWorkflowTerminal.mjs.map +1 -1
- package/dist/src/types/webWorkflows.cjs +7 -1
- package/dist/src/types/webWorkflows.cjs.map +1 -1
- package/dist/src/types/webWorkflows.mjs +6 -1
- package/dist/src/types/webWorkflows.mjs.map +1 -1
- package/package.json +28 -27
- package/src/types/webWorkflowTerminal.ts +7 -10
- package/dist/src/controllers/serverRuntime.cjs +0 -2
- package/dist/src/controllers/serverRuntime.cjs.map +0 -1
- package/dist/src/controllers/serverRuntime.mjs +0 -2
- package/dist/src/controllers/serverRuntime.mjs.map +0 -1
- package/dist/src/controllers/workflowCatalogChannel.cjs +0 -2
- package/dist/src/controllers/workflowCatalogChannel.cjs.map +0 -1
- package/dist/src/controllers/workflowCatalogChannel.mjs +0 -2
- package/dist/src/controllers/workflowCatalogChannel.mjs.map +0 -1
- package/dist/src/controllers/workflowHubApi.cjs +0 -2
- package/dist/src/controllers/workflowHubApi.cjs.map +0 -1
- package/dist/src/controllers/workflowHubApi.mjs +0 -2
- package/dist/src/controllers/workflowHubApi.mjs.map +0 -1
- package/dist/src/controllers/workflowsHubChannel.cjs +0 -2
- package/dist/src/controllers/workflowsHubChannel.cjs.map +0 -1
- package/dist/src/controllers/workflowsHubChannel.mjs +0 -2
- package/dist/src/controllers/workflowsHubChannel.mjs.map +0 -1
- package/dist/src/tools/workflowTools.cjs +0 -5
- package/dist/src/tools/workflowTools.cjs.map +0 -1
- package/dist/src/tools/workflowTools.mjs +0 -5
- package/dist/src/tools/workflowTools.mjs.map +0 -1
- package/src/extensions/web.ts +0 -80
- package/src/web/api/terminalApi.ts +0 -207
- package/src/web/components/ArtifactsPane.tsx +0 -451
- package/src/web/components/LaunchWorkflowDialog.tsx +0 -259
- package/src/web/components/StepTerminalPanel.tsx +0 -243
- package/src/web/components/WorkflowCatalogDrawer.tsx +0 -229
- package/src/web/components/WorkflowToolMessage.tsx +0 -55
- package/src/web/components/WorkflowsActivitySection.tsx +0 -155
- package/src/web/components/WorkflowsPanel.tsx +0 -750
- package/src/web/lib/launchLine.ts +0 -66
- package/src/web/lib/runDuration.ts +0 -15
- package/src/web/lib/workflowActivity.ts +0 -102
- package/src/web/lib/workflowToolRender.ts +0 -585
- package/src/web/stores/catalogStore.ts +0 -123
- package/src/web/stores/workflowsStore.ts +0 -91
- package/src/web/tsconfig.json +0 -22
- /package/{src/web/LICENSE → LICENSE.web} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflowFinishedRenderer.cjs","names":["Text"],"sources":["../../../../../../../../src/extensions/workspaces/sessions/(frontend)/message/_lib/workflowFinishedRenderer.ts"],"sourcesContent":["/**\n * Renders the `workflow-run-finished` custom message: one line per run that\n * reached a terminal state, rather than the host's default block of the\n * `[workflow-run-finished]` label above raw markdown.\n *\n * The same shape `@agimon-ai/doompi-team` gives a slash launch: a status glyph,\n * the run's identity, its outcome, and anything that went wrong indented under\n * it. A finished run is read at a glance in a transcript that is mostly about\n * something else, so it earns a line, not a card.\n *\n * DESIGN PATTERNS:\n * - A message with no `details` renders its content verbatim. That is a\n * transcript entry written before the field existed, and re-deriving it by\n * parsing the summary back out of markdown is exactly the liability\n * `completionNotice.ts` in the team package refused to port\n * - The full summary is still the message's `content`, which is what the model\n * reads and what `deliverAs: 'steer'` carries. This changes what a person\n * sees, never what the agent is told\n */\n\nimport type { ExtensionAPI, Theme } from '@earendil-works/pi-coding-agent';\nimport { type Component, Text } from '@earendil-works/pi-tui';\n\nexport const WORKFLOW_FINISHED_MESSAGE = 'workflow-run-finished';\n\n/** One finished run, as the extension records it on the message. */\nexport interface WorkflowFinishedRun {\n runKey: string;\n workspace: string;\n stage: string;\n workflowId?: string;\n failedJob?: string;\n error?: string;\n}\n\nexport interface WorkflowFinishedDetails {\n /** Kept for readers that already index runs by id; the lines come from `runs`. */\n runIds?: string[];\n runs?: WorkflowFinishedRun[];\n}\n\nconst COMPLETED_STAGE = 'completed';\nconst HELD_STAGES = new Set(['stopped', 'paused', 'cancelled']);\n\nfunction statusIcon(stage: string, theme: Theme): string {\n if (stage === COMPLETED_STAGE) return theme.fg('success', '✔');\n // Held is not failed: the run went nowhere wrong, it just stopped short.\n if (HELD_STAGES.has(stage)) return theme.fg('warning', '■');\n return theme.fg('error', '✖');\n}\n\nfunction runLine(run: WorkflowFinishedRun, theme: Theme): string {\n const separator = ` ${theme.fg('dim', '·')} `;\n const identity = [run.runKey, run.workspace].filter(Boolean).join('/');\n const parts = [theme.fg('dim', identity), theme.fg('dim', run.stage)];\n if (run.workflowId) parts.unshift(theme.bold(run.workflowId));\n let text = `${statusIcon(run.stage, theme)} ${parts.join(separator)}`;\n if (run.failedJob) text += `\\n ${theme.fg('dim', `⎿ failed job: ${run.failedJob}`)}`;\n if (run.error) text += `\\n ${theme.fg('dim', `⎿ ${run.error}`)}`;\n return text;\n}\n\n/**\n * Exported for tests: the rendered string before it is wrapped in a `Text`\n * component, so the formatting is assertable without a terminal.\n */\nexport function renderWorkflowFinished(runs: readonly WorkflowFinishedRun[], theme: Theme): string {\n return runs.map((run) => runLine(run, theme)).join('\\n');\n}\n\nexport function isWorkflowFinishedRuns(value: unknown): value is WorkflowFinishedRun[] {\n if (!Array.isArray(value) || value.length === 0) return false;\n return value.every(\n (entry) =>\n typeof entry === 'object' &&\n entry !== null &&\n typeof (entry as WorkflowFinishedRun).runKey === 'string' &&\n typeof (entry as WorkflowFinishedRun).stage === 'string',\n );\n}\n\nexport function createWorkflowFinishedRenderer(): readonly [...Parameters<ExtensionAPI['registerMessageRenderer']>] {\n return [\n WORKFLOW_FINISHED_MESSAGE,\n (message, _options, theme: Theme): Component => {\n const content = typeof message.content === 'string' ? message.content : JSON.stringify(message.content);\n const runs = (message.details as WorkflowFinishedDetails | undefined)?.runs;\n if (!isWorkflowFinishedRuns(runs)) return new Text(content, 0, 0);\n return new Text(renderWorkflowFinished(runs, theme), 0, 0);\n },\n ];\n}\n"],"mappings":";;AAuBA,MAAa,4BAA4B;AAkBzC,MAAM,kBAAkB;AACxB,MAAM,8BAAc,IAAI,IAAI;CAAC;CAAW;CAAU;AAAW,CAAC;AAE9D,SAAS,WAAW,OAAe,OAAsB;CACvD,IAAI,UAAU,iBAAiB,OAAO,MAAM,GAAG,WAAW,GAAG;CAE7D,IAAI,YAAY,IAAI,KAAK,GAAG,OAAO,MAAM,GAAG,WAAW,GAAG;CAC1D,OAAO,MAAM,GAAG,SAAS,GAAG;AAC9B;AAEA,SAAS,QAAQ,KAA0B,OAAsB;CAC/D,MAAM,YAAY,IAAI,MAAM,GAAG,OAAO,GAAG,EAAE;CAC3C,MAAM,WAAW,CAAC,IAAI,QAAQ,IAAI,SAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;CACrE,MAAM,QAAQ,CAAC,MAAM,GAAG,OAAO,QAAQ,GAAG,MAAM,GAAG,OAAO,IAAI,KAAK,CAAC;CACpE,IAAI,IAAI,YAAY,MAAM,QAAQ,MAAM,KAAK,IAAI,UAAU,CAAC;CAC5D,IAAI,OAAO,GAAG,WAAW,IAAI,OAAO,KAAK,EAAE,GAAG,MAAM,KAAK,SAAS;CAClE,IAAI,IAAI,WAAW,QAAQ,OAAO,MAAM,GAAG,OAAO,kBAAkB,IAAI,WAAW;CACnF,IAAI,IAAI,OAAO,QAAQ,OAAO,MAAM,GAAG,OAAO,MAAM,IAAI,OAAO;CAC/D,OAAO;AACT;;;;;AAMA,SAAgB,uBAAuB,MAAsC,OAAsB;CACjG,OAAO,KAAK,KAAK,QAAQ,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI;AACzD;AAEA,SAAgB,uBAAuB,OAAgD;CACrF,IAAI,CAAC,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW,GAAG,OAAO;CACxD,OAAO,MAAM,OACV,UACC,OAAO,UAAU,YACjB,UAAU,QACV,OAAQ,MAA8B,WAAW,YACjD,OAAQ,MAA8B,UAAU,QACpD;AACF;AAEA,SAAgB,iCAAoG;CAClH,OAAO,CACL,4BACC,SAAS,UAAU,UAA4B;EAC9C,MAAM,UAAU,OAAO,QAAQ,YAAY,WAAW,QAAQ,UAAU,KAAK,UAAU,QAAQ,OAAO;EACtG,MAAM,OAAQ,QAAQ,SAAiD;EACvE,IAAI,CAAC,uBAAuB,IAAI,GAAG,OAAO,IAAIA,uBAAAA,KAAK,SAAS,GAAG,CAAC;EAChE,OAAO,IAAIA,uBAAAA,KAAK,uBAAuB,MAAM,KAAK,GAAG,GAAG,CAAC;CAC3D,CACF;AACF"}
|
package/dist/src/extensions/workspaces/sessions/(frontend)/message/_lib/workflowFinishedRenderer.mjs
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Text } from "@earendil-works/pi-tui";
|
|
2
|
+
//#region src/extensions/workspaces/sessions/(frontend)/message/_lib/workflowFinishedRenderer.ts
|
|
3
|
+
const WORKFLOW_FINISHED_MESSAGE = "workflow-run-finished";
|
|
4
|
+
const COMPLETED_STAGE = "completed";
|
|
5
|
+
const HELD_STAGES = /* @__PURE__ */ new Set([
|
|
6
|
+
"stopped",
|
|
7
|
+
"paused",
|
|
8
|
+
"cancelled"
|
|
9
|
+
]);
|
|
10
|
+
function statusIcon(stage, theme) {
|
|
11
|
+
if (stage === COMPLETED_STAGE) return theme.fg("success", "✔");
|
|
12
|
+
if (HELD_STAGES.has(stage)) return theme.fg("warning", "■");
|
|
13
|
+
return theme.fg("error", "✖");
|
|
14
|
+
}
|
|
15
|
+
function runLine(run, theme) {
|
|
16
|
+
const separator = ` ${theme.fg("dim", "·")} `;
|
|
17
|
+
const identity = [run.runKey, run.workspace].filter(Boolean).join("/");
|
|
18
|
+
const parts = [theme.fg("dim", identity), theme.fg("dim", run.stage)];
|
|
19
|
+
if (run.workflowId) parts.unshift(theme.bold(run.workflowId));
|
|
20
|
+
let text = `${statusIcon(run.stage, theme)} ${parts.join(separator)}`;
|
|
21
|
+
if (run.failedJob) text += `\n ${theme.fg("dim", `⎿ failed job: ${run.failedJob}`)}`;
|
|
22
|
+
if (run.error) text += `\n ${theme.fg("dim", `⎿ ${run.error}`)}`;
|
|
23
|
+
return text;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Exported for tests: the rendered string before it is wrapped in a `Text`
|
|
27
|
+
* component, so the formatting is assertable without a terminal.
|
|
28
|
+
*/
|
|
29
|
+
function renderWorkflowFinished(runs, theme) {
|
|
30
|
+
return runs.map((run) => runLine(run, theme)).join("\n");
|
|
31
|
+
}
|
|
32
|
+
function isWorkflowFinishedRuns(value) {
|
|
33
|
+
if (!Array.isArray(value) || value.length === 0) return false;
|
|
34
|
+
return value.every((entry) => typeof entry === "object" && entry !== null && typeof entry.runKey === "string" && typeof entry.stage === "string");
|
|
35
|
+
}
|
|
36
|
+
function createWorkflowFinishedRenderer() {
|
|
37
|
+
return [WORKFLOW_FINISHED_MESSAGE, (message, _options, theme) => {
|
|
38
|
+
const content = typeof message.content === "string" ? message.content : JSON.stringify(message.content);
|
|
39
|
+
const runs = message.details?.runs;
|
|
40
|
+
if (!isWorkflowFinishedRuns(runs)) return new Text(content, 0, 0);
|
|
41
|
+
return new Text(renderWorkflowFinished(runs, theme), 0, 0);
|
|
42
|
+
}];
|
|
43
|
+
}
|
|
44
|
+
//#endregion
|
|
45
|
+
export { WORKFLOW_FINISHED_MESSAGE, createWorkflowFinishedRenderer, isWorkflowFinishedRuns, renderWorkflowFinished };
|
|
46
|
+
|
|
47
|
+
//# sourceMappingURL=workflowFinishedRenderer.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflowFinishedRenderer.mjs","names":[],"sources":["../../../../../../../../src/extensions/workspaces/sessions/(frontend)/message/_lib/workflowFinishedRenderer.ts"],"sourcesContent":["/**\n * Renders the `workflow-run-finished` custom message: one line per run that\n * reached a terminal state, rather than the host's default block of the\n * `[workflow-run-finished]` label above raw markdown.\n *\n * The same shape `@agimon-ai/doompi-team` gives a slash launch: a status glyph,\n * the run's identity, its outcome, and anything that went wrong indented under\n * it. A finished run is read at a glance in a transcript that is mostly about\n * something else, so it earns a line, not a card.\n *\n * DESIGN PATTERNS:\n * - A message with no `details` renders its content verbatim. That is a\n * transcript entry written before the field existed, and re-deriving it by\n * parsing the summary back out of markdown is exactly the liability\n * `completionNotice.ts` in the team package refused to port\n * - The full summary is still the message's `content`, which is what the model\n * reads and what `deliverAs: 'steer'` carries. This changes what a person\n * sees, never what the agent is told\n */\n\nimport type { ExtensionAPI, Theme } from '@earendil-works/pi-coding-agent';\nimport { type Component, Text } from '@earendil-works/pi-tui';\n\nexport const WORKFLOW_FINISHED_MESSAGE = 'workflow-run-finished';\n\n/** One finished run, as the extension records it on the message. */\nexport interface WorkflowFinishedRun {\n runKey: string;\n workspace: string;\n stage: string;\n workflowId?: string;\n failedJob?: string;\n error?: string;\n}\n\nexport interface WorkflowFinishedDetails {\n /** Kept for readers that already index runs by id; the lines come from `runs`. */\n runIds?: string[];\n runs?: WorkflowFinishedRun[];\n}\n\nconst COMPLETED_STAGE = 'completed';\nconst HELD_STAGES = new Set(['stopped', 'paused', 'cancelled']);\n\nfunction statusIcon(stage: string, theme: Theme): string {\n if (stage === COMPLETED_STAGE) return theme.fg('success', '✔');\n // Held is not failed: the run went nowhere wrong, it just stopped short.\n if (HELD_STAGES.has(stage)) return theme.fg('warning', '■');\n return theme.fg('error', '✖');\n}\n\nfunction runLine(run: WorkflowFinishedRun, theme: Theme): string {\n const separator = ` ${theme.fg('dim', '·')} `;\n const identity = [run.runKey, run.workspace].filter(Boolean).join('/');\n const parts = [theme.fg('dim', identity), theme.fg('dim', run.stage)];\n if (run.workflowId) parts.unshift(theme.bold(run.workflowId));\n let text = `${statusIcon(run.stage, theme)} ${parts.join(separator)}`;\n if (run.failedJob) text += `\\n ${theme.fg('dim', `⎿ failed job: ${run.failedJob}`)}`;\n if (run.error) text += `\\n ${theme.fg('dim', `⎿ ${run.error}`)}`;\n return text;\n}\n\n/**\n * Exported for tests: the rendered string before it is wrapped in a `Text`\n * component, so the formatting is assertable without a terminal.\n */\nexport function renderWorkflowFinished(runs: readonly WorkflowFinishedRun[], theme: Theme): string {\n return runs.map((run) => runLine(run, theme)).join('\\n');\n}\n\nexport function isWorkflowFinishedRuns(value: unknown): value is WorkflowFinishedRun[] {\n if (!Array.isArray(value) || value.length === 0) return false;\n return value.every(\n (entry) =>\n typeof entry === 'object' &&\n entry !== null &&\n typeof (entry as WorkflowFinishedRun).runKey === 'string' &&\n typeof (entry as WorkflowFinishedRun).stage === 'string',\n );\n}\n\nexport function createWorkflowFinishedRenderer(): readonly [...Parameters<ExtensionAPI['registerMessageRenderer']>] {\n return [\n WORKFLOW_FINISHED_MESSAGE,\n (message, _options, theme: Theme): Component => {\n const content = typeof message.content === 'string' ? message.content : JSON.stringify(message.content);\n const runs = (message.details as WorkflowFinishedDetails | undefined)?.runs;\n if (!isWorkflowFinishedRuns(runs)) return new Text(content, 0, 0);\n return new Text(renderWorkflowFinished(runs, theme), 0, 0);\n },\n ];\n}\n"],"mappings":";;AAuBA,MAAa,4BAA4B;AAkBzC,MAAM,kBAAkB;AACxB,MAAM,8BAAc,IAAI,IAAI;CAAC;CAAW;CAAU;AAAW,CAAC;AAE9D,SAAS,WAAW,OAAe,OAAsB;CACvD,IAAI,UAAU,iBAAiB,OAAO,MAAM,GAAG,WAAW,GAAG;CAE7D,IAAI,YAAY,IAAI,KAAK,GAAG,OAAO,MAAM,GAAG,WAAW,GAAG;CAC1D,OAAO,MAAM,GAAG,SAAS,GAAG;AAC9B;AAEA,SAAS,QAAQ,KAA0B,OAAsB;CAC/D,MAAM,YAAY,IAAI,MAAM,GAAG,OAAO,GAAG,EAAE;CAC3C,MAAM,WAAW,CAAC,IAAI,QAAQ,IAAI,SAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;CACrE,MAAM,QAAQ,CAAC,MAAM,GAAG,OAAO,QAAQ,GAAG,MAAM,GAAG,OAAO,IAAI,KAAK,CAAC;CACpE,IAAI,IAAI,YAAY,MAAM,QAAQ,MAAM,KAAK,IAAI,UAAU,CAAC;CAC5D,IAAI,OAAO,GAAG,WAAW,IAAI,OAAO,KAAK,EAAE,GAAG,MAAM,KAAK,SAAS;CAClE,IAAI,IAAI,WAAW,QAAQ,OAAO,MAAM,GAAG,OAAO,kBAAkB,IAAI,WAAW;CACnF,IAAI,IAAI,OAAO,QAAQ,OAAO,MAAM,GAAG,OAAO,MAAM,IAAI,OAAO;CAC/D,OAAO;AACT;;;;;AAMA,SAAgB,uBAAuB,MAAsC,OAAsB;CACjG,OAAO,KAAK,KAAK,QAAQ,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI;AACzD;AAEA,SAAgB,uBAAuB,OAAgD;CACrF,IAAI,CAAC,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW,GAAG,OAAO;CACxD,OAAO,MAAM,OACV,UACC,OAAO,UAAU,YACjB,UAAU,QACV,OAAQ,MAA8B,WAAW,YACjD,OAAQ,MAA8B,UAAU,QACpD;AACF;AAEA,SAAgB,iCAAoG;CAClH,OAAO,CACL,4BACC,SAAS,UAAU,UAA4B;EAC9C,MAAM,UAAU,OAAO,QAAQ,YAAY,WAAW,QAAQ,UAAU,KAAK,UAAU,QAAQ,OAAO;EACtG,MAAM,OAAQ,QAAQ,SAAiD;EACvE,IAAI,CAAC,uBAAuB,IAAI,GAAG,OAAO,IAAI,KAAK,SAAS,GAAG,CAAC;EAChE,OAAO,IAAI,KAAK,uBAAuB,MAAM,KAAK,GAAG,GAAG,CAAC;CAC3D,CACF;AACF"}
|
package/dist/src/extensions/workspaces/sessions/(frontend)/message/_lib/workflowStepRenderer.cjs
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
let _earendil_works_pi_tui = require("@earendil-works/pi-tui");
|
|
2
|
+
//#region src/extensions/workspaces/sessions/(frontend)/message/_lib/workflowStepRenderer.ts
|
|
3
|
+
const LEGACY_WORKFLOW_STEP_MESSAGE = "workflow-step";
|
|
4
|
+
function isWorkflowStepMessageDetails(value) {
|
|
5
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return false;
|
|
6
|
+
const candidate = value;
|
|
7
|
+
return typeof candidate.displayName === "string" && typeof candidate.job === "string" && typeof candidate.step === "string" && (candidate.status === "STARTED" || candidate.status === "FINISHED" || candidate.status === "FAILED") && (candidate.duration === void 0 || typeof candidate.duration === "string");
|
|
8
|
+
}
|
|
9
|
+
var WorkflowStepMessageLines = class {
|
|
10
|
+
details;
|
|
11
|
+
theme;
|
|
12
|
+
constructor(details, theme) {
|
|
13
|
+
this.details = details;
|
|
14
|
+
this.theme = theme;
|
|
15
|
+
}
|
|
16
|
+
render(width) {
|
|
17
|
+
const header = `${this.theme.fg("accent", `[${this.details.displayName}]:`)} ${this.details.job}`;
|
|
18
|
+
const transition = this.details.duration ? `${this.details.status}::${this.details.duration}::${this.details.step}` : `${this.details.status}::${this.details.step}`;
|
|
19
|
+
const colour = this.details.status === "FAILED" ? "error" : this.details.status === "FINISHED" ? "success" : "accent";
|
|
20
|
+
return [(0, _earendil_works_pi_tui.truncateToWidth)(header, width), (0, _earendil_works_pi_tui.truncateToWidth)(this.theme.fg(colour, transition), width)];
|
|
21
|
+
}
|
|
22
|
+
invalidate() {}
|
|
23
|
+
};
|
|
24
|
+
function renderWorkflowStepMessage(details, fallback, outputPad, theme) {
|
|
25
|
+
const box = new _earendil_works_pi_tui.Box(outputPad, 1, (text) => theme.bg("customMessageBg", text));
|
|
26
|
+
box.addChild(details ? new WorkflowStepMessageLines(details, theme) : new _earendil_works_pi_tui.Text(fallback, 0, 0));
|
|
27
|
+
return box;
|
|
28
|
+
}
|
|
29
|
+
const workflowStepRenderer = (message, { outputPad }, theme) => {
|
|
30
|
+
return renderWorkflowStepMessage(isWorkflowStepMessageDetails(message.details) ? message.details : void 0, typeof message.content === "string" ? message.content : JSON.stringify(message.content), outputPad, theme);
|
|
31
|
+
};
|
|
32
|
+
//#endregion
|
|
33
|
+
exports.LEGACY_WORKFLOW_STEP_MESSAGE = LEGACY_WORKFLOW_STEP_MESSAGE;
|
|
34
|
+
exports.workflowStepRenderer = workflowStepRenderer;
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=workflowStepRenderer.cjs.map
|
package/dist/src/extensions/workspaces/sessions/(frontend)/message/_lib/workflowStepRenderer.cjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflowStepRenderer.cjs","names":["truncateToWidth","Box","Text"],"sources":["../../../../../../../../src/extensions/workspaces/sessions/(frontend)/message/_lib/workflowStepRenderer.ts"],"sourcesContent":["import type { PiPluginContributions } from '@agimon-ai/doompi-core/pi-extension';\nimport type { Theme } from '@earendil-works/pi-coding-agent';\nimport { Box, type Component, Text, truncateToWidth } from '@earendil-works/pi-tui';\n\nexport const LEGACY_WORKFLOW_STEP_MESSAGE = 'workflow-step';\n\ninterface WorkflowStepMessageDetails {\n displayName: string;\n duration?: string;\n job: string;\n status: 'STARTED' | 'FINISHED' | 'FAILED';\n step: string;\n}\n\nfunction isWorkflowStepMessageDetails(value: unknown): value is WorkflowStepMessageDetails {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const candidate = value as Partial<WorkflowStepMessageDetails>;\n return (\n typeof candidate.displayName === 'string' &&\n typeof candidate.job === 'string' &&\n typeof candidate.step === 'string' &&\n (candidate.status === 'STARTED' || candidate.status === 'FINISHED' || candidate.status === 'FAILED') &&\n (candidate.duration === undefined || typeof candidate.duration === 'string')\n );\n}\n\nclass WorkflowStepMessageLines implements Component {\n constructor(\n private readonly details: WorkflowStepMessageDetails,\n private readonly theme: Theme,\n ) {}\n\n render(width: number): string[] {\n const header = `${this.theme.fg('accent', `[${this.details.displayName}]:`)} ${this.details.job}`;\n const transition = this.details.duration\n ? `${this.details.status}::${this.details.duration}::${this.details.step}`\n : `${this.details.status}::${this.details.step}`;\n const colour =\n this.details.status === 'FAILED' ? 'error' : this.details.status === 'FINISHED' ? 'success' : 'accent';\n return [truncateToWidth(header, width), truncateToWidth(this.theme.fg(colour, transition), width)];\n }\n\n invalidate(): void {}\n}\n\nfunction renderWorkflowStepMessage(\n details: WorkflowStepMessageDetails | undefined,\n fallback: string,\n outputPad: number,\n theme: Theme,\n): Component {\n const box = new Box(outputPad, 1, (text) => theme.bg('customMessageBg', text));\n box.addChild(details ? new WorkflowStepMessageLines(details, theme) : new Text(fallback, 0, 0));\n return box;\n}\n\nexport const workflowStepRenderer: NonNullable<PiPluginContributions['messageRenderers']>[number][1] = (\n message,\n { outputPad },\n theme,\n) => {\n const details = isWorkflowStepMessageDetails(message.details) ? message.details : undefined;\n const content = typeof message.content === 'string' ? message.content : JSON.stringify(message.content);\n return renderWorkflowStepMessage(details, content, outputPad, theme);\n};\n"],"mappings":";;AAIA,MAAa,+BAA+B;AAU5C,SAAS,6BAA6B,OAAqD;CACzF,IAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG,OAAO;CACxE,MAAM,YAAY;CAClB,OACE,OAAO,UAAU,gBAAgB,YACjC,OAAO,UAAU,QAAQ,YACzB,OAAO,UAAU,SAAS,aACzB,UAAU,WAAW,aAAa,UAAU,WAAW,cAAc,UAAU,WAAW,cAC1F,UAAU,aAAa,KAAA,KAAa,OAAO,UAAU,aAAa;AAEvE;AAEA,IAAM,2BAAN,MAAoD;CAE/B;CACA;CAFnB,YACE,SACA,OACA;EAFiB,KAAA,UAAA;EACA,KAAA,QAAA;CAChB;CAEH,OAAO,OAAyB;EAC9B,MAAM,SAAS,GAAG,KAAK,MAAM,GAAG,UAAU,IAAI,KAAK,QAAQ,YAAY,GAAG,EAAE,GAAG,KAAK,QAAQ;EAC5F,MAAM,aAAa,KAAK,QAAQ,WAC5B,GAAG,KAAK,QAAQ,OAAO,IAAI,KAAK,QAAQ,SAAS,IAAI,KAAK,QAAQ,SAClE,GAAG,KAAK,QAAQ,OAAO,IAAI,KAAK,QAAQ;EAC5C,MAAM,SACJ,KAAK,QAAQ,WAAW,WAAW,UAAU,KAAK,QAAQ,WAAW,aAAa,YAAY;EAChG,OAAO,EAAA,GAACA,uBAAAA,gBAAAA,CAAgB,QAAQ,KAAK,IAAA,GAAGA,uBAAAA,gBAAAA,CAAgB,KAAK,MAAM,GAAG,QAAQ,UAAU,GAAG,KAAK,CAAC;CACnG;CAEA,aAAmB,CAAC;AACtB;AAEA,SAAS,0BACP,SACA,UACA,WACA,OACW;CACX,MAAM,MAAM,IAAIC,uBAAAA,IAAI,WAAW,IAAI,SAAS,MAAM,GAAG,mBAAmB,IAAI,CAAC;CAC7E,IAAI,SAAS,UAAU,IAAI,yBAAyB,SAAS,KAAK,IAAI,IAAIC,uBAAAA,KAAK,UAAU,GAAG,CAAC,CAAC;CAC9F,OAAO;AACT;AAEA,MAAa,wBACX,SACA,EAAE,aACF,UACG;CAGH,OAAO,0BAFS,6BAA6B,QAAQ,OAAO,IAAI,QAAQ,UAAU,KAAA,GAClE,OAAO,QAAQ,YAAY,WAAW,QAAQ,UAAU,KAAK,UAAU,QAAQ,OAAO,GACnD,WAAW,KAAK;AACrE"}
|
package/dist/src/extensions/workspaces/sessions/(frontend)/message/_lib/workflowStepRenderer.mjs
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Box, Text, truncateToWidth } from "@earendil-works/pi-tui";
|
|
2
|
+
//#region src/extensions/workspaces/sessions/(frontend)/message/_lib/workflowStepRenderer.ts
|
|
3
|
+
const LEGACY_WORKFLOW_STEP_MESSAGE = "workflow-step";
|
|
4
|
+
function isWorkflowStepMessageDetails(value) {
|
|
5
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return false;
|
|
6
|
+
const candidate = value;
|
|
7
|
+
return typeof candidate.displayName === "string" && typeof candidate.job === "string" && typeof candidate.step === "string" && (candidate.status === "STARTED" || candidate.status === "FINISHED" || candidate.status === "FAILED") && (candidate.duration === void 0 || typeof candidate.duration === "string");
|
|
8
|
+
}
|
|
9
|
+
var WorkflowStepMessageLines = class {
|
|
10
|
+
details;
|
|
11
|
+
theme;
|
|
12
|
+
constructor(details, theme) {
|
|
13
|
+
this.details = details;
|
|
14
|
+
this.theme = theme;
|
|
15
|
+
}
|
|
16
|
+
render(width) {
|
|
17
|
+
const header = `${this.theme.fg("accent", `[${this.details.displayName}]:`)} ${this.details.job}`;
|
|
18
|
+
const transition = this.details.duration ? `${this.details.status}::${this.details.duration}::${this.details.step}` : `${this.details.status}::${this.details.step}`;
|
|
19
|
+
const colour = this.details.status === "FAILED" ? "error" : this.details.status === "FINISHED" ? "success" : "accent";
|
|
20
|
+
return [truncateToWidth(header, width), truncateToWidth(this.theme.fg(colour, transition), width)];
|
|
21
|
+
}
|
|
22
|
+
invalidate() {}
|
|
23
|
+
};
|
|
24
|
+
function renderWorkflowStepMessage(details, fallback, outputPad, theme) {
|
|
25
|
+
const box = new Box(outputPad, 1, (text) => theme.bg("customMessageBg", text));
|
|
26
|
+
box.addChild(details ? new WorkflowStepMessageLines(details, theme) : new Text(fallback, 0, 0));
|
|
27
|
+
return box;
|
|
28
|
+
}
|
|
29
|
+
const workflowStepRenderer = (message, { outputPad }, theme) => {
|
|
30
|
+
return renderWorkflowStepMessage(isWorkflowStepMessageDetails(message.details) ? message.details : void 0, typeof message.content === "string" ? message.content : JSON.stringify(message.content), outputPad, theme);
|
|
31
|
+
};
|
|
32
|
+
//#endregion
|
|
33
|
+
export { LEGACY_WORKFLOW_STEP_MESSAGE, workflowStepRenderer };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=workflowStepRenderer.mjs.map
|
package/dist/src/extensions/workspaces/sessions/(frontend)/message/_lib/workflowStepRenderer.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflowStepRenderer.mjs","names":[],"sources":["../../../../../../../../src/extensions/workspaces/sessions/(frontend)/message/_lib/workflowStepRenderer.ts"],"sourcesContent":["import type { PiPluginContributions } from '@agimon-ai/doompi-core/pi-extension';\nimport type { Theme } from '@earendil-works/pi-coding-agent';\nimport { Box, type Component, Text, truncateToWidth } from '@earendil-works/pi-tui';\n\nexport const LEGACY_WORKFLOW_STEP_MESSAGE = 'workflow-step';\n\ninterface WorkflowStepMessageDetails {\n displayName: string;\n duration?: string;\n job: string;\n status: 'STARTED' | 'FINISHED' | 'FAILED';\n step: string;\n}\n\nfunction isWorkflowStepMessageDetails(value: unknown): value is WorkflowStepMessageDetails {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const candidate = value as Partial<WorkflowStepMessageDetails>;\n return (\n typeof candidate.displayName === 'string' &&\n typeof candidate.job === 'string' &&\n typeof candidate.step === 'string' &&\n (candidate.status === 'STARTED' || candidate.status === 'FINISHED' || candidate.status === 'FAILED') &&\n (candidate.duration === undefined || typeof candidate.duration === 'string')\n );\n}\n\nclass WorkflowStepMessageLines implements Component {\n constructor(\n private readonly details: WorkflowStepMessageDetails,\n private readonly theme: Theme,\n ) {}\n\n render(width: number): string[] {\n const header = `${this.theme.fg('accent', `[${this.details.displayName}]:`)} ${this.details.job}`;\n const transition = this.details.duration\n ? `${this.details.status}::${this.details.duration}::${this.details.step}`\n : `${this.details.status}::${this.details.step}`;\n const colour =\n this.details.status === 'FAILED' ? 'error' : this.details.status === 'FINISHED' ? 'success' : 'accent';\n return [truncateToWidth(header, width), truncateToWidth(this.theme.fg(colour, transition), width)];\n }\n\n invalidate(): void {}\n}\n\nfunction renderWorkflowStepMessage(\n details: WorkflowStepMessageDetails | undefined,\n fallback: string,\n outputPad: number,\n theme: Theme,\n): Component {\n const box = new Box(outputPad, 1, (text) => theme.bg('customMessageBg', text));\n box.addChild(details ? new WorkflowStepMessageLines(details, theme) : new Text(fallback, 0, 0));\n return box;\n}\n\nexport const workflowStepRenderer: NonNullable<PiPluginContributions['messageRenderers']>[number][1] = (\n message,\n { outputPad },\n theme,\n) => {\n const details = isWorkflowStepMessageDetails(message.details) ? message.details : undefined;\n const content = typeof message.content === 'string' ? message.content : JSON.stringify(message.content);\n return renderWorkflowStepMessage(details, content, outputPad, theme);\n};\n"],"mappings":";;AAIA,MAAa,+BAA+B;AAU5C,SAAS,6BAA6B,OAAqD;CACzF,IAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG,OAAO;CACxE,MAAM,YAAY;CAClB,OACE,OAAO,UAAU,gBAAgB,YACjC,OAAO,UAAU,QAAQ,YACzB,OAAO,UAAU,SAAS,aACzB,UAAU,WAAW,aAAa,UAAU,WAAW,cAAc,UAAU,WAAW,cAC1F,UAAU,aAAa,KAAA,KAAa,OAAO,UAAU,aAAa;AAEvE;AAEA,IAAM,2BAAN,MAAoD;CAE/B;CACA;CAFnB,YACE,SACA,OACA;EAFiB,KAAA,UAAA;EACA,KAAA,QAAA;CAChB;CAEH,OAAO,OAAyB;EAC9B,MAAM,SAAS,GAAG,KAAK,MAAM,GAAG,UAAU,IAAI,KAAK,QAAQ,YAAY,GAAG,EAAE,GAAG,KAAK,QAAQ;EAC5F,MAAM,aAAa,KAAK,QAAQ,WAC5B,GAAG,KAAK,QAAQ,OAAO,IAAI,KAAK,QAAQ,SAAS,IAAI,KAAK,QAAQ,SAClE,GAAG,KAAK,QAAQ,OAAO,IAAI,KAAK,QAAQ;EAC5C,MAAM,SACJ,KAAK,QAAQ,WAAW,WAAW,UAAU,KAAK,QAAQ,WAAW,aAAa,YAAY;EAChG,OAAO,CAAC,gBAAgB,QAAQ,KAAK,GAAG,gBAAgB,KAAK,MAAM,GAAG,QAAQ,UAAU,GAAG,KAAK,CAAC;CACnG;CAEA,aAAmB,CAAC;AACtB;AAEA,SAAS,0BACP,SACA,UACA,WACA,OACW;CACX,MAAM,MAAM,IAAI,IAAI,WAAW,IAAI,SAAS,MAAM,GAAG,mBAAmB,IAAI,CAAC;CAC7E,IAAI,SAAS,UAAU,IAAI,yBAAyB,SAAS,KAAK,IAAI,IAAI,KAAK,UAAU,GAAG,CAAC,CAAC;CAC9F,OAAO;AACT;AAEA,MAAa,wBACX,SACA,EAAE,aACF,UACG;CAGH,OAAO,0BAFS,6BAA6B,QAAQ,OAAO,IAAI,QAAQ,UAAU,KAAA,GAClE,OAAO,QAAQ,YAAY,WAAW,QAAQ,UAAU,KAAK,UAAU,QAAQ,OAAO,GACnD,WAAW,KAAK;AACrE"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
const require_workflowFinishedRenderer = require("./_lib/workflowFinishedRenderer.cjs");
|
|
2
|
+
//#region src/extensions/workspaces/sessions/(frontend)/message/workflow-finished.cli.ts
|
|
3
|
+
var workflow_finished_cli_default = (0, require("@agimon-ai/doompi-core/pi-extension").defineMessageRenderer)(...require_workflowFinishedRenderer.createWorkflowFinishedRenderer());
|
|
4
|
+
//#endregion
|
|
5
|
+
exports.default = workflow_finished_cli_default;
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=workflow-finished.cli.cjs.map
|
package/dist/src/extensions/workspaces/sessions/(frontend)/message/workflow-finished.cli.cjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-finished.cli.cjs","names":["defineMessageRenderer","createWorkflowFinishedRenderer"],"sources":["../../../../../../../src/extensions/workspaces/sessions/(frontend)/message/workflow-finished.cli.ts"],"sourcesContent":["import { defineMessageRenderer } from '@agimon-ai/doompi-core/pi-extension';\n\nimport { createWorkflowFinishedRenderer } from './_lib/workflowFinishedRenderer';\n\nexport default defineMessageRenderer(...createWorkflowFinishedRenderer());\n"],"mappings":";;AAIA,IAAA,iCAAA,gDAAeA,CAAAA,CAAAA,sBAAAA,CAAsB,GAAGC,iCAAAA,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createWorkflowFinishedRenderer } from "./_lib/workflowFinishedRenderer.mjs";
|
|
2
|
+
import { defineMessageRenderer } from "@agimon-ai/doompi-core/pi-extension";
|
|
3
|
+
//#region src/extensions/workspaces/sessions/(frontend)/message/workflow-finished.cli.ts
|
|
4
|
+
var workflow_finished_cli_default = defineMessageRenderer(...createWorkflowFinishedRenderer());
|
|
5
|
+
//#endregion
|
|
6
|
+
export { workflow_finished_cli_default as default };
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=workflow-finished.cli.mjs.map
|
package/dist/src/extensions/workspaces/sessions/(frontend)/message/workflow-finished.cli.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-finished.cli.mjs","names":[],"sources":["../../../../../../../src/extensions/workspaces/sessions/(frontend)/message/workflow-finished.cli.ts"],"sourcesContent":["import { defineMessageRenderer } from '@agimon-ai/doompi-core/pi-extension';\n\nimport { createWorkflowFinishedRenderer } from './_lib/workflowFinishedRenderer';\n\nexport default defineMessageRenderer(...createWorkflowFinishedRenderer());\n"],"mappings":";;;AAIA,IAAA,gCAAe,sBAAsB,GAAG,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
const require_workflowStepRenderer = require("./_lib/workflowStepRenderer.cjs");
|
|
2
|
+
//#region src/extensions/workspaces/sessions/(frontend)/message/workflow-step.cli.ts
|
|
3
|
+
var workflow_step_cli_default = (0, require("@agimon-ai/doompi-core/pi-extension").defineMessageRenderer)(require_workflowStepRenderer.LEGACY_WORKFLOW_STEP_MESSAGE, require_workflowStepRenderer.workflowStepRenderer);
|
|
4
|
+
//#endregion
|
|
5
|
+
exports.default = workflow_step_cli_default;
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=workflow-step.cli.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-step.cli.cjs","names":["defineMessageRenderer","LEGACY_WORKFLOW_STEP_MESSAGE","workflowStepRenderer"],"sources":["../../../../../../../src/extensions/workspaces/sessions/(frontend)/message/workflow-step.cli.ts"],"sourcesContent":["import { defineMessageRenderer } from '@agimon-ai/doompi-core/pi-extension';\n\nimport { LEGACY_WORKFLOW_STEP_MESSAGE, workflowStepRenderer } from './_lib/workflowStepRenderer';\n\nexport default defineMessageRenderer(LEGACY_WORKFLOW_STEP_MESSAGE, workflowStepRenderer);\n"],"mappings":";;AAIA,IAAA,6BAAA,gDAAeA,CAAAA,CAAAA,sBAAAA,CAAsBC,6BAAAA,8BAA8BC,6BAAAA,oBAAoB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { LEGACY_WORKFLOW_STEP_MESSAGE, workflowStepRenderer } from "./_lib/workflowStepRenderer.mjs";
|
|
2
|
+
import { defineMessageRenderer } from "@agimon-ai/doompi-core/pi-extension";
|
|
3
|
+
//#region src/extensions/workspaces/sessions/(frontend)/message/workflow-step.cli.ts
|
|
4
|
+
var workflow_step_cli_default = defineMessageRenderer(LEGACY_WORKFLOW_STEP_MESSAGE, workflowStepRenderer);
|
|
5
|
+
//#endregion
|
|
6
|
+
export { workflow_step_cli_default as default };
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=workflow-step.cli.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-step.cli.mjs","names":[],"sources":["../../../../../../../src/extensions/workspaces/sessions/(frontend)/message/workflow-step.cli.ts"],"sourcesContent":["import { defineMessageRenderer } from '@agimon-ai/doompi-core/pi-extension';\n\nimport { LEGACY_WORKFLOW_STEP_MESSAGE, workflowStepRenderer } from './_lib/workflowStepRenderer';\n\nexport default defineMessageRenderer(LEGACY_WORKFLOW_STEP_MESSAGE, workflowStepRenderer);\n"],"mappings":";;;AAIA,IAAA,4BAAe,sBAAsB,8BAA8B,oBAAoB"}
|
|
@@ -1,2 +1,330 @@
|
|
|
1
|
-
let
|
|
1
|
+
let _agimon_ai_doompi_core_api_contracts = require("@agimon-ai/doompi-core/api-contracts");
|
|
2
|
+
let typebox = require("typebox");
|
|
3
|
+
//#region src/schemas/apiContracts.ts
|
|
4
|
+
const S = typebox.Type.String();
|
|
5
|
+
const N = typebox.Type.Number();
|
|
6
|
+
const B = typebox.Type.Boolean();
|
|
7
|
+
const O = typebox.Type.Optional;
|
|
8
|
+
const values = (items) => typebox.Type.Union(items.map((item) => typebox.Type.Literal(item)));
|
|
9
|
+
const Step = {
|
|
10
|
+
name: S,
|
|
11
|
+
status: values([
|
|
12
|
+
"running",
|
|
13
|
+
"completed",
|
|
14
|
+
"skipped",
|
|
15
|
+
"failed",
|
|
16
|
+
"pause_requested",
|
|
17
|
+
"paused",
|
|
18
|
+
"resumed"
|
|
19
|
+
]),
|
|
20
|
+
reason: O(S),
|
|
21
|
+
startedAt: O(S),
|
|
22
|
+
endedAt: O(S)
|
|
23
|
+
};
|
|
24
|
+
const Run = typebox.Type.Object({
|
|
25
|
+
runKey: S,
|
|
26
|
+
workspace: S,
|
|
27
|
+
displayName: S,
|
|
28
|
+
workflowName: O(S),
|
|
29
|
+
workflowPath: S,
|
|
30
|
+
stage: values([
|
|
31
|
+
"running",
|
|
32
|
+
"completed",
|
|
33
|
+
"error"
|
|
34
|
+
]),
|
|
35
|
+
outcome: O(values([
|
|
36
|
+
"success",
|
|
37
|
+
"skipped",
|
|
38
|
+
"failed",
|
|
39
|
+
"interrupted"
|
|
40
|
+
])),
|
|
41
|
+
executionState: O(values([
|
|
42
|
+
"running",
|
|
43
|
+
"pause_requested",
|
|
44
|
+
"paused",
|
|
45
|
+
"resume_requested"
|
|
46
|
+
])),
|
|
47
|
+
prompt: O(S),
|
|
48
|
+
startedAt: S,
|
|
49
|
+
finishedAt: O(S),
|
|
50
|
+
errorMessage: O(S),
|
|
51
|
+
failedJob: O(S),
|
|
52
|
+
stale: O(B),
|
|
53
|
+
staleReason: O(S),
|
|
54
|
+
worktreeBranch: O(S),
|
|
55
|
+
position: O(typebox.Type.Object({
|
|
56
|
+
job: S,
|
|
57
|
+
step: O(S),
|
|
58
|
+
index: O(N),
|
|
59
|
+
total: O(N)
|
|
60
|
+
})),
|
|
61
|
+
jobs: typebox.Type.Array(typebox.Type.Object({
|
|
62
|
+
...Step,
|
|
63
|
+
phase: values([
|
|
64
|
+
"pre",
|
|
65
|
+
"job",
|
|
66
|
+
"post"
|
|
67
|
+
]),
|
|
68
|
+
index: O(N),
|
|
69
|
+
total: O(N),
|
|
70
|
+
steps: typebox.Type.Array(typebox.Type.Object(Step))
|
|
71
|
+
}))
|
|
72
|
+
});
|
|
73
|
+
const WorkflowRunsSchema = typebox.Type.Object({ runs: typebox.Type.Array(Run) });
|
|
74
|
+
const Artifact = {
|
|
75
|
+
path: S,
|
|
76
|
+
kind: values(["file", "directory"]),
|
|
77
|
+
description: S,
|
|
78
|
+
producedBy: typebox.Type.Array(S)
|
|
79
|
+
};
|
|
80
|
+
const WorkflowCatalogSchema = typebox.Type.Object({
|
|
81
|
+
cwd: S,
|
|
82
|
+
warning: O(S),
|
|
83
|
+
workflows: typebox.Type.Array(typebox.Type.Object({
|
|
84
|
+
path: S,
|
|
85
|
+
relativePath: S,
|
|
86
|
+
name: S,
|
|
87
|
+
description: S,
|
|
88
|
+
tags: typebox.Type.Array(S),
|
|
89
|
+
triggers: typebox.Type.Array(S),
|
|
90
|
+
inputs: typebox.Type.Array(typebox.Type.Object({
|
|
91
|
+
name: S,
|
|
92
|
+
description: O(S),
|
|
93
|
+
required: O(B),
|
|
94
|
+
default: O(S),
|
|
95
|
+
type: O(S),
|
|
96
|
+
options: O(typebox.Type.Array(S))
|
|
97
|
+
})),
|
|
98
|
+
jobs: typebox.Type.Array(typebox.Type.Object({
|
|
99
|
+
name: S,
|
|
100
|
+
steps: typebox.Type.Array(S)
|
|
101
|
+
})),
|
|
102
|
+
artifacts: typebox.Type.Array(typebox.Type.Object(Artifact)),
|
|
103
|
+
runners: O(typebox.Type.Array(S)),
|
|
104
|
+
error: O(S)
|
|
105
|
+
}))
|
|
106
|
+
});
|
|
107
|
+
const Screen = typebox.Type.Object({
|
|
108
|
+
lines: typebox.Type.Array(S),
|
|
109
|
+
capabilities: typebox.Type.Object({
|
|
110
|
+
readable: B,
|
|
111
|
+
writable: B,
|
|
112
|
+
resizable: B,
|
|
113
|
+
reason: O(S)
|
|
114
|
+
}),
|
|
115
|
+
ended: O(B)
|
|
116
|
+
});
|
|
117
|
+
const Control = typebox.Type.Object({
|
|
118
|
+
held: B,
|
|
119
|
+
token: O(S),
|
|
120
|
+
reason: O(S)
|
|
121
|
+
});
|
|
122
|
+
const root = "/runs/{workspace}/{runKey}";
|
|
123
|
+
const apiContracts = (0, _agimon_ai_doompi_core_api_contracts.defineApiContract)({
|
|
124
|
+
version: 1,
|
|
125
|
+
dynamic: [],
|
|
126
|
+
http: [
|
|
127
|
+
"global",
|
|
128
|
+
"workspace",
|
|
129
|
+
"session"
|
|
130
|
+
].flatMap((scope) => [
|
|
131
|
+
{
|
|
132
|
+
id: "workflow.screen",
|
|
133
|
+
scope,
|
|
134
|
+
basePath: "workflow",
|
|
135
|
+
path: `${root}/screen/stream`,
|
|
136
|
+
method: "GET",
|
|
137
|
+
authentication: "owner",
|
|
138
|
+
description: "Follow the workflow terminal.",
|
|
139
|
+
responses: {
|
|
140
|
+
"200": {
|
|
141
|
+
description: "SSE stream with JSON screen events.",
|
|
142
|
+
contentType: "text/event-stream",
|
|
143
|
+
schema: S,
|
|
144
|
+
events: { screen: Screen }
|
|
145
|
+
},
|
|
146
|
+
"404": {
|
|
147
|
+
description: "Run unavailable.",
|
|
148
|
+
schema: typebox.Type.Object({ error: S })
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
id: "workflow.control",
|
|
154
|
+
scope,
|
|
155
|
+
basePath: "workflow",
|
|
156
|
+
path: `${root}/control`,
|
|
157
|
+
method: "POST",
|
|
158
|
+
authentication: "owner",
|
|
159
|
+
description: "Take or release the keyboard.",
|
|
160
|
+
body: {
|
|
161
|
+
required: true,
|
|
162
|
+
contentType: "application/json",
|
|
163
|
+
schema: typebox.Type.Object({
|
|
164
|
+
release: O(B),
|
|
165
|
+
token: O(S)
|
|
166
|
+
})
|
|
167
|
+
},
|
|
168
|
+
responses: {
|
|
169
|
+
...(0, _agimon_ai_doompi_core_api_contracts.jsonApiResponses)(Control),
|
|
170
|
+
"409": {
|
|
171
|
+
description: "Keyboard unavailable.",
|
|
172
|
+
schema: Control
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
id: "workflow.keys",
|
|
178
|
+
scope,
|
|
179
|
+
basePath: "workflow",
|
|
180
|
+
path: `${root}/keys`,
|
|
181
|
+
method: "POST",
|
|
182
|
+
authentication: "owner",
|
|
183
|
+
description: "Write terminal data with the control token.",
|
|
184
|
+
body: {
|
|
185
|
+
required: true,
|
|
186
|
+
contentType: "application/json",
|
|
187
|
+
schema: typebox.Type.Object({
|
|
188
|
+
token: S,
|
|
189
|
+
data: S
|
|
190
|
+
})
|
|
191
|
+
},
|
|
192
|
+
responses: {
|
|
193
|
+
"204": { description: "Data written." },
|
|
194
|
+
"400": {
|
|
195
|
+
description: "Invalid request.",
|
|
196
|
+
schema: typebox.Type.Object({ error: S })
|
|
197
|
+
},
|
|
198
|
+
"409": {
|
|
199
|
+
description: "Write refused.",
|
|
200
|
+
schema: typebox.Type.Object({ error: S })
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
id: "workflow.resize",
|
|
206
|
+
scope,
|
|
207
|
+
basePath: "workflow",
|
|
208
|
+
path: `${root}/resize`,
|
|
209
|
+
method: "POST",
|
|
210
|
+
authentication: "owner",
|
|
211
|
+
description: "Resize the terminal.",
|
|
212
|
+
body: {
|
|
213
|
+
required: true,
|
|
214
|
+
contentType: "application/json",
|
|
215
|
+
schema: typebox.Type.Object({
|
|
216
|
+
token: S,
|
|
217
|
+
columns: N,
|
|
218
|
+
rows: N
|
|
219
|
+
})
|
|
220
|
+
},
|
|
221
|
+
responses: (0, _agimon_ai_doompi_core_api_contracts.jsonApiResponses)(typebox.Type.Object({ resized: B }))
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
id: "workflow.delete",
|
|
225
|
+
scope,
|
|
226
|
+
basePath: "workflow",
|
|
227
|
+
path: root,
|
|
228
|
+
method: "DELETE",
|
|
229
|
+
authentication: "owner",
|
|
230
|
+
description: "Delete a settled run and its directory.",
|
|
231
|
+
responses: (0, _agimon_ai_doompi_core_api_contracts.jsonApiResponses)(typebox.Type.Object({ deleted: typebox.Type.Literal(true) }))
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
id: "workflow.artifacts",
|
|
235
|
+
scope,
|
|
236
|
+
basePath: "workflow",
|
|
237
|
+
path: `${root}/artifacts`,
|
|
238
|
+
method: "GET",
|
|
239
|
+
authentication: "owner",
|
|
240
|
+
description: "List declared and discovered artifacts.",
|
|
241
|
+
responses: (0, _agimon_ai_doompi_core_api_contracts.jsonApiResponses)(typebox.Type.Object({
|
|
242
|
+
runDir: S,
|
|
243
|
+
description: S,
|
|
244
|
+
artifacts: typebox.Type.Array(typebox.Type.Object({
|
|
245
|
+
...Artifact,
|
|
246
|
+
declared: B,
|
|
247
|
+
state: values([
|
|
248
|
+
"written",
|
|
249
|
+
"empty",
|
|
250
|
+
"pending",
|
|
251
|
+
"unreadable"
|
|
252
|
+
]),
|
|
253
|
+
size: O(N),
|
|
254
|
+
modifiedAt: O(S)
|
|
255
|
+
}))
|
|
256
|
+
}))
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
id: "workflow.artifact",
|
|
260
|
+
scope,
|
|
261
|
+
basePath: "workflow",
|
|
262
|
+
path: `${root}/artifacts/{name}`,
|
|
263
|
+
method: "GET",
|
|
264
|
+
authentication: "owner",
|
|
265
|
+
description: "Read artifact metadata and text. name may contain nested path segments. raw=1 streams binary with its media type and supports byte ranges.",
|
|
266
|
+
parameters: [
|
|
267
|
+
{
|
|
268
|
+
name: "raw",
|
|
269
|
+
in: "query",
|
|
270
|
+
required: false,
|
|
271
|
+
schema: values(["0", "1"])
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
name: "download",
|
|
275
|
+
in: "query",
|
|
276
|
+
required: false,
|
|
277
|
+
schema: values(["0", "1"])
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
name: "range",
|
|
281
|
+
in: "header",
|
|
282
|
+
required: false,
|
|
283
|
+
schema: S
|
|
284
|
+
}
|
|
285
|
+
],
|
|
286
|
+
responses: {
|
|
287
|
+
...(0, _agimon_ai_doompi_core_api_contracts.jsonApiResponses)(typebox.Type.Union([typebox.Type.Object({
|
|
288
|
+
path: S,
|
|
289
|
+
size: N,
|
|
290
|
+
modifiedAt: S,
|
|
291
|
+
mimeType: O(S),
|
|
292
|
+
text: O(S),
|
|
293
|
+
truncated: B
|
|
294
|
+
}), S])),
|
|
295
|
+
"206": {
|
|
296
|
+
description: "Partial raw bytes.",
|
|
297
|
+
contentType: "application/octet-stream",
|
|
298
|
+
schema: S
|
|
299
|
+
},
|
|
300
|
+
"416": { description: "Unsatisfiable byte range." }
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
]),
|
|
304
|
+
sockets: ["global", "workspace"].flatMap((scope) => [{
|
|
305
|
+
id: "workflow.runs",
|
|
306
|
+
scope,
|
|
307
|
+
service: "doompi.hub.v1",
|
|
308
|
+
member: "workflow_runs",
|
|
309
|
+
kind: "channel",
|
|
310
|
+
direction: "server-to-client",
|
|
311
|
+
description: "Workflow runs channel payload.",
|
|
312
|
+
input: WorkflowRunsSchema
|
|
313
|
+
}, {
|
|
314
|
+
id: "workflow.catalog",
|
|
315
|
+
scope,
|
|
316
|
+
service: "doompi.hub.v1",
|
|
317
|
+
member: "workflow_catalog",
|
|
318
|
+
kind: "channel",
|
|
319
|
+
direction: "server-to-client",
|
|
320
|
+
description: "Workflow catalog channel payload.",
|
|
321
|
+
input: WorkflowCatalogSchema
|
|
322
|
+
}])
|
|
323
|
+
});
|
|
324
|
+
//#endregion
|
|
325
|
+
exports.WorkflowCatalogSchema = WorkflowCatalogSchema;
|
|
326
|
+
exports.WorkflowRunsSchema = WorkflowRunsSchema;
|
|
327
|
+
exports.apiContracts = apiContracts;
|
|
328
|
+
exports.default = apiContracts;
|
|
329
|
+
|
|
2
330
|
//# sourceMappingURL=apiContracts.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiContracts.cjs","names":["Type","defineApiContract","jsonApiResponses"],"sources":["../../../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract, jsonApiResponses, type DoomHttpContract } from '@agimon-ai/doompi-core/api-contracts';\nimport { Type } from 'typebox';\n\nconst S = Type.String();\nconst N = Type.Number();\nconst B = Type.Boolean();\nconst O = Type.Optional;\nconst values = <T extends string>(items: T[]) => Type.Union(items.map((item) => Type.Literal(item)));\nconst Progress = values(['running', 'completed', 'skipped', 'failed', 'pause_requested', 'paused', 'resumed']);\nconst Step = { name: S, status: Progress, reason: O(S), startedAt: O(S), endedAt: O(S) };\nconst Run = Type.Object({\n runKey: S,\n workspace: S,\n displayName: S,\n workflowName: O(S),\n workflowPath: S,\n stage: values(['running', 'completed', 'error']),\n outcome: O(values(['success', 'skipped', 'failed', 'interrupted'])),\n executionState: O(values(['running', 'pause_requested', 'paused', 'resume_requested'])),\n prompt: O(S),\n startedAt: S,\n finishedAt: O(S),\n errorMessage: O(S),\n failedJob: O(S),\n stale: O(B),\n staleReason: O(S),\n worktreeBranch: O(S),\n position: O(Type.Object({ job: S, step: O(S), index: O(N), total: O(N) })),\n jobs: Type.Array(\n Type.Object({\n ...Step,\n phase: values(['pre', 'job', 'post']),\n index: O(N),\n total: O(N),\n steps: Type.Array(Type.Object(Step)),\n }),\n ),\n});\nexport const WorkflowRunsSchema = Type.Object({ runs: Type.Array(Run) });\nconst Artifact = { path: S, kind: values(['file', 'directory']), description: S, producedBy: Type.Array(S) };\nexport const WorkflowCatalogSchema = Type.Object({\n cwd: S,\n warning: O(S),\n workflows: Type.Array(\n Type.Object({\n path: S,\n relativePath: S,\n name: S,\n description: S,\n tags: Type.Array(S),\n triggers: Type.Array(S),\n inputs: Type.Array(\n Type.Object({\n name: S,\n description: O(S),\n required: O(B),\n default: O(S),\n type: O(S),\n options: O(Type.Array(S)),\n }),\n ),\n jobs: Type.Array(Type.Object({ name: S, steps: Type.Array(S) })),\n artifacts: Type.Array(Type.Object(Artifact)),\n runners: O(Type.Array(S)),\n error: O(S),\n }),\n ),\n});\nconst Screen = Type.Object({\n lines: Type.Array(S),\n capabilities: Type.Object({ readable: B, writable: B, resizable: B, reason: O(S) }),\n ended: O(B),\n});\nconst Control = Type.Object({ held: B, token: O(S), reason: O(S) });\nconst root = '/runs/{workspace}/{runKey}';\nexport const apiContracts = defineApiContract({\n version: 1,\n dynamic: [],\n http: (['global', 'workspace', 'session'] as const).flatMap((scope): DoomHttpContract[] => [\n {\n id: 'workflow.screen',\n scope,\n basePath: 'workflow',\n path: `${root}/screen/stream`,\n method: 'GET',\n authentication: 'owner',\n description: 'Follow the workflow terminal.',\n responses: {\n '200': {\n description: 'SSE stream with JSON screen events.',\n contentType: 'text/event-stream',\n schema: S,\n events: { screen: Screen },\n },\n '404': { description: 'Run unavailable.', schema: Type.Object({ error: S }) },\n },\n },\n {\n id: 'workflow.control',\n scope,\n basePath: 'workflow',\n path: `${root}/control`,\n method: 'POST',\n authentication: 'owner',\n description: 'Take or release the keyboard.',\n body: { required: true, contentType: 'application/json', schema: Type.Object({ release: O(B), token: O(S) }) },\n responses: { ...jsonApiResponses(Control), '409': { description: 'Keyboard unavailable.', schema: Control } },\n },\n {\n id: 'workflow.keys',\n scope,\n basePath: 'workflow',\n path: `${root}/keys`,\n method: 'POST',\n authentication: 'owner',\n description: 'Write terminal data with the control token.',\n body: { required: true, contentType: 'application/json', schema: Type.Object({ token: S, data: S }) },\n responses: {\n '204': { description: 'Data written.' },\n '400': { description: 'Invalid request.', schema: Type.Object({ error: S }) },\n '409': { description: 'Write refused.', schema: Type.Object({ error: S }) },\n },\n },\n {\n id: 'workflow.resize',\n scope,\n basePath: 'workflow',\n path: `${root}/resize`,\n method: 'POST',\n authentication: 'owner',\n description: 'Resize the terminal.',\n body: { required: true, contentType: 'application/json', schema: Type.Object({ token: S, columns: N, rows: N }) },\n responses: jsonApiResponses(Type.Object({ resized: B })),\n },\n {\n id: 'workflow.delete',\n scope,\n basePath: 'workflow',\n path: root,\n method: 'DELETE',\n authentication: 'owner',\n description: 'Delete a settled run and its directory.',\n responses: jsonApiResponses(Type.Object({ deleted: Type.Literal(true) })),\n },\n {\n id: 'workflow.artifacts',\n scope,\n basePath: 'workflow',\n path: `${root}/artifacts`,\n method: 'GET',\n authentication: 'owner',\n description: 'List declared and discovered artifacts.',\n responses: jsonApiResponses(\n Type.Object({\n runDir: S,\n description: S,\n artifacts: Type.Array(\n Type.Object({\n ...Artifact,\n declared: B,\n state: values(['written', 'empty', 'pending', 'unreadable']),\n size: O(N),\n modifiedAt: O(S),\n }),\n ),\n }),\n ),\n },\n {\n id: 'workflow.artifact',\n scope,\n basePath: 'workflow',\n path: `${root}/artifacts/{name}`,\n method: 'GET',\n authentication: 'owner',\n description:\n 'Read artifact metadata and text. name may contain nested path segments. raw=1 streams binary with its media type and supports byte ranges.',\n parameters: [\n { name: 'raw', in: 'query', required: false, schema: values(['0', '1']) },\n { name: 'download', in: 'query', required: false, schema: values(['0', '1']) },\n { name: 'range', in: 'header', required: false, schema: S },\n ],\n responses: {\n ...jsonApiResponses(\n Type.Union([Type.Object({ path: S, size: N, modifiedAt: S, mimeType: O(S), text: O(S), truncated: B }), S]),\n ),\n '206': { description: 'Partial raw bytes.', contentType: 'application/octet-stream', schema: S },\n '416': { description: 'Unsatisfiable byte range.' },\n },\n },\n ]),\n sockets: (['global', 'workspace'] as const).flatMap((scope) => [\n {\n id: 'workflow.runs',\n scope,\n service: 'doompi.hub.v1',\n member: 'workflow_runs',\n kind: 'channel',\n direction: 'server-to-client',\n description: 'Workflow runs channel payload.',\n input: WorkflowRunsSchema,\n },\n {\n id: 'workflow.catalog',\n scope,\n service: 'doompi.hub.v1',\n member: 'workflow_catalog',\n kind: 'channel',\n direction: 'server-to-client',\n description: 'Workflow catalog channel payload.',\n input: WorkflowCatalogSchema,\n },\n ]),\n});\nexport default apiContracts;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"apiContracts.cjs","names":["Type","defineApiContract","jsonApiResponses"],"sources":["../../../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract, jsonApiResponses, type DoomHttpContract } from '@agimon-ai/doompi-core/api-contracts';\nimport { Type } from 'typebox';\n\nconst S = Type.String();\nconst N = Type.Number();\nconst B = Type.Boolean();\nconst O = Type.Optional;\nconst values = <T extends string>(items: T[]) => Type.Union(items.map((item) => Type.Literal(item)));\nconst Progress = values(['running', 'completed', 'skipped', 'failed', 'pause_requested', 'paused', 'resumed']);\nconst Step = { name: S, status: Progress, reason: O(S), startedAt: O(S), endedAt: O(S) };\nconst Run = Type.Object({\n runKey: S,\n workspace: S,\n displayName: S,\n workflowName: O(S),\n workflowPath: S,\n stage: values(['running', 'completed', 'error']),\n outcome: O(values(['success', 'skipped', 'failed', 'interrupted'])),\n executionState: O(values(['running', 'pause_requested', 'paused', 'resume_requested'])),\n prompt: O(S),\n startedAt: S,\n finishedAt: O(S),\n errorMessage: O(S),\n failedJob: O(S),\n stale: O(B),\n staleReason: O(S),\n worktreeBranch: O(S),\n position: O(Type.Object({ job: S, step: O(S), index: O(N), total: O(N) })),\n jobs: Type.Array(\n Type.Object({\n ...Step,\n phase: values(['pre', 'job', 'post']),\n index: O(N),\n total: O(N),\n steps: Type.Array(Type.Object(Step)),\n }),\n ),\n});\nexport const WorkflowRunsSchema = Type.Object({ runs: Type.Array(Run) });\nconst Artifact = { path: S, kind: values(['file', 'directory']), description: S, producedBy: Type.Array(S) };\nexport const WorkflowCatalogSchema = Type.Object({\n cwd: S,\n warning: O(S),\n workflows: Type.Array(\n Type.Object({\n path: S,\n relativePath: S,\n name: S,\n description: S,\n tags: Type.Array(S),\n triggers: Type.Array(S),\n inputs: Type.Array(\n Type.Object({\n name: S,\n description: O(S),\n required: O(B),\n default: O(S),\n type: O(S),\n options: O(Type.Array(S)),\n }),\n ),\n jobs: Type.Array(Type.Object({ name: S, steps: Type.Array(S) })),\n artifacts: Type.Array(Type.Object(Artifact)),\n runners: O(Type.Array(S)),\n error: O(S),\n }),\n ),\n});\nconst Screen = Type.Object({\n lines: Type.Array(S),\n capabilities: Type.Object({ readable: B, writable: B, resizable: B, reason: O(S) }),\n ended: O(B),\n});\nconst Control = Type.Object({ held: B, token: O(S), reason: O(S) });\nconst root = '/runs/{workspace}/{runKey}';\nexport const apiContracts = defineApiContract({\n version: 1,\n dynamic: [],\n http: (['global', 'workspace', 'session'] as const).flatMap((scope): DoomHttpContract[] => [\n {\n id: 'workflow.screen',\n scope,\n basePath: 'workflow',\n path: `${root}/screen/stream`,\n method: 'GET',\n authentication: 'owner',\n description: 'Follow the workflow terminal.',\n responses: {\n '200': {\n description: 'SSE stream with JSON screen events.',\n contentType: 'text/event-stream',\n schema: S,\n events: { screen: Screen },\n },\n '404': { description: 'Run unavailable.', schema: Type.Object({ error: S }) },\n },\n },\n {\n id: 'workflow.control',\n scope,\n basePath: 'workflow',\n path: `${root}/control`,\n method: 'POST',\n authentication: 'owner',\n description: 'Take or release the keyboard.',\n body: { required: true, contentType: 'application/json', schema: Type.Object({ release: O(B), token: O(S) }) },\n responses: { ...jsonApiResponses(Control), '409': { description: 'Keyboard unavailable.', schema: Control } },\n },\n {\n id: 'workflow.keys',\n scope,\n basePath: 'workflow',\n path: `${root}/keys`,\n method: 'POST',\n authentication: 'owner',\n description: 'Write terminal data with the control token.',\n body: { required: true, contentType: 'application/json', schema: Type.Object({ token: S, data: S }) },\n responses: {\n '204': { description: 'Data written.' },\n '400': { description: 'Invalid request.', schema: Type.Object({ error: S }) },\n '409': { description: 'Write refused.', schema: Type.Object({ error: S }) },\n },\n },\n {\n id: 'workflow.resize',\n scope,\n basePath: 'workflow',\n path: `${root}/resize`,\n method: 'POST',\n authentication: 'owner',\n description: 'Resize the terminal.',\n body: { required: true, contentType: 'application/json', schema: Type.Object({ token: S, columns: N, rows: N }) },\n responses: jsonApiResponses(Type.Object({ resized: B })),\n },\n {\n id: 'workflow.delete',\n scope,\n basePath: 'workflow',\n path: root,\n method: 'DELETE',\n authentication: 'owner',\n description: 'Delete a settled run and its directory.',\n responses: jsonApiResponses(Type.Object({ deleted: Type.Literal(true) })),\n },\n {\n id: 'workflow.artifacts',\n scope,\n basePath: 'workflow',\n path: `${root}/artifacts`,\n method: 'GET',\n authentication: 'owner',\n description: 'List declared and discovered artifacts.',\n responses: jsonApiResponses(\n Type.Object({\n runDir: S,\n description: S,\n artifacts: Type.Array(\n Type.Object({\n ...Artifact,\n declared: B,\n state: values(['written', 'empty', 'pending', 'unreadable']),\n size: O(N),\n modifiedAt: O(S),\n }),\n ),\n }),\n ),\n },\n {\n id: 'workflow.artifact',\n scope,\n basePath: 'workflow',\n path: `${root}/artifacts/{name}`,\n method: 'GET',\n authentication: 'owner',\n description:\n 'Read artifact metadata and text. name may contain nested path segments. raw=1 streams binary with its media type and supports byte ranges.',\n parameters: [\n { name: 'raw', in: 'query', required: false, schema: values(['0', '1']) },\n { name: 'download', in: 'query', required: false, schema: values(['0', '1']) },\n { name: 'range', in: 'header', required: false, schema: S },\n ],\n responses: {\n ...jsonApiResponses(\n Type.Union([Type.Object({ path: S, size: N, modifiedAt: S, mimeType: O(S), text: O(S), truncated: B }), S]),\n ),\n '206': { description: 'Partial raw bytes.', contentType: 'application/octet-stream', schema: S },\n '416': { description: 'Unsatisfiable byte range.' },\n },\n },\n ]),\n sockets: (['global', 'workspace'] as const).flatMap((scope) => [\n {\n id: 'workflow.runs',\n scope,\n service: 'doompi.hub.v1',\n member: 'workflow_runs',\n kind: 'channel',\n direction: 'server-to-client',\n description: 'Workflow runs channel payload.',\n input: WorkflowRunsSchema,\n },\n {\n id: 'workflow.catalog',\n scope,\n service: 'doompi.hub.v1',\n member: 'workflow_catalog',\n kind: 'channel',\n direction: 'server-to-client',\n description: 'Workflow catalog channel payload.',\n input: WorkflowCatalogSchema,\n },\n ]),\n});\nexport default apiContracts;\n"],"mappings":";;;AAGA,MAAM,IAAIA,QAAAA,KAAK,OAAO;AACtB,MAAM,IAAIA,QAAAA,KAAK,OAAO;AACtB,MAAM,IAAIA,QAAAA,KAAK,QAAQ;AACvB,MAAM,IAAIA,QAAAA,KAAK;AACf,MAAM,UAA4B,UAAeA,QAAAA,KAAK,MAAM,MAAM,KAAK,SAASA,QAAAA,KAAK,QAAQ,IAAI,CAAC,CAAC;AAEnG,MAAM,OAAO;CAAE,MAAM;CAAG,QADP,OAAO;EAAC;EAAW;EAAa;EAAW;EAAU;EAAmB;EAAU;CAAS,CACrE;CAAG,QAAQ,EAAE,CAAC;CAAG,WAAW,EAAE,CAAC;CAAG,SAAS,EAAE,CAAC;AAAE;AACvF,MAAM,MAAMA,QAAAA,KAAK,OAAO;CACtB,QAAQ;CACR,WAAW;CACX,aAAa;CACb,cAAc,EAAE,CAAC;CACjB,cAAc;CACd,OAAO,OAAO;EAAC;EAAW;EAAa;CAAO,CAAC;CAC/C,SAAS,EAAE,OAAO;EAAC;EAAW;EAAW;EAAU;CAAa,CAAC,CAAC;CAClE,gBAAgB,EAAE,OAAO;EAAC;EAAW;EAAmB;EAAU;CAAkB,CAAC,CAAC;CACtF,QAAQ,EAAE,CAAC;CACX,WAAW;CACX,YAAY,EAAE,CAAC;CACf,cAAc,EAAE,CAAC;CACjB,WAAW,EAAE,CAAC;CACd,OAAO,EAAE,CAAC;CACV,aAAa,EAAE,CAAC;CAChB,gBAAgB,EAAE,CAAC;CACnB,UAAU,EAAEA,QAAAA,KAAK,OAAO;EAAE,KAAK;EAAG,MAAM,EAAE,CAAC;EAAG,OAAO,EAAE,CAAC;EAAG,OAAO,EAAE,CAAC;CAAE,CAAC,CAAC;CACzE,MAAMA,QAAAA,KAAK,MACTA,QAAAA,KAAK,OAAO;EACV,GAAG;EACH,OAAO,OAAO;GAAC;GAAO;GAAO;EAAM,CAAC;EACpC,OAAO,EAAE,CAAC;EACV,OAAO,EAAE,CAAC;EACV,OAAOA,QAAAA,KAAK,MAAMA,QAAAA,KAAK,OAAO,IAAI,CAAC;CACrC,CAAC,CACH;AACF,CAAC;AACD,MAAa,qBAAqBA,QAAAA,KAAK,OAAO,EAAE,MAAMA,QAAAA,KAAK,MAAM,GAAG,EAAE,CAAC;AACvE,MAAM,WAAW;CAAE,MAAM;CAAG,MAAM,OAAO,CAAC,QAAQ,WAAW,CAAC;CAAG,aAAa;CAAG,YAAYA,QAAAA,KAAK,MAAM,CAAC;AAAE;AAC3G,MAAa,wBAAwBA,QAAAA,KAAK,OAAO;CAC/C,KAAK;CACL,SAAS,EAAE,CAAC;CACZ,WAAWA,QAAAA,KAAK,MACdA,QAAAA,KAAK,OAAO;EACV,MAAM;EACN,cAAc;EACd,MAAM;EACN,aAAa;EACb,MAAMA,QAAAA,KAAK,MAAM,CAAC;EAClB,UAAUA,QAAAA,KAAK,MAAM,CAAC;EACtB,QAAQA,QAAAA,KAAK,MACXA,QAAAA,KAAK,OAAO;GACV,MAAM;GACN,aAAa,EAAE,CAAC;GAChB,UAAU,EAAE,CAAC;GACb,SAAS,EAAE,CAAC;GACZ,MAAM,EAAE,CAAC;GACT,SAAS,EAAEA,QAAAA,KAAK,MAAM,CAAC,CAAC;EAC1B,CAAC,CACH;EACA,MAAMA,QAAAA,KAAK,MAAMA,QAAAA,KAAK,OAAO;GAAE,MAAM;GAAG,OAAOA,QAAAA,KAAK,MAAM,CAAC;EAAE,CAAC,CAAC;EAC/D,WAAWA,QAAAA,KAAK,MAAMA,QAAAA,KAAK,OAAO,QAAQ,CAAC;EAC3C,SAAS,EAAEA,QAAAA,KAAK,MAAM,CAAC,CAAC;EACxB,OAAO,EAAE,CAAC;CACZ,CAAC,CACH;AACF,CAAC;AACD,MAAM,SAASA,QAAAA,KAAK,OAAO;CACzB,OAAOA,QAAAA,KAAK,MAAM,CAAC;CACnB,cAAcA,QAAAA,KAAK,OAAO;EAAE,UAAU;EAAG,UAAU;EAAG,WAAW;EAAG,QAAQ,EAAE,CAAC;CAAE,CAAC;CAClF,OAAO,EAAE,CAAC;AACZ,CAAC;AACD,MAAM,UAAUA,QAAAA,KAAK,OAAO;CAAE,MAAM;CAAG,OAAO,EAAE,CAAC;CAAG,QAAQ,EAAE,CAAC;AAAE,CAAC;AAClE,MAAM,OAAO;AACb,MAAa,gBAAA,GAAeC,qCAAAA,kBAAAA,CAAkB;CAC5C,SAAS;CACT,SAAS,CAAC;CACV,MAAO;EAAC;EAAU;EAAa;CAAS,CAAC,CAAW,SAAS,UAA8B;EACzF;GACE,IAAI;GACJ;GACA,UAAU;GACV,MAAM,GAAG,KAAK;GACd,QAAQ;GACR,gBAAgB;GAChB,aAAa;GACb,WAAW;IACT,OAAO;KACL,aAAa;KACb,aAAa;KACb,QAAQ;KACR,QAAQ,EAAE,QAAQ,OAAO;IAC3B;IACA,OAAO;KAAE,aAAa;KAAoB,QAAQD,QAAAA,KAAK,OAAO,EAAE,OAAO,EAAE,CAAC;IAAE;GAC9E;EACF;EACA;GACE,IAAI;GACJ;GACA,UAAU;GACV,MAAM,GAAG,KAAK;GACd,QAAQ;GACR,gBAAgB;GAChB,aAAa;GACb,MAAM;IAAE,UAAU;IAAM,aAAa;IAAoB,QAAQA,QAAAA,KAAK,OAAO;KAAE,SAAS,EAAE,CAAC;KAAG,OAAO,EAAE,CAAC;IAAE,CAAC;GAAE;GAC7G,WAAW;IAAE,IAAA,GAAGE,qCAAAA,iBAAAA,CAAiB,OAAO;IAAG,OAAO;KAAE,aAAa;KAAyB,QAAQ;IAAQ;GAAE;EAC9G;EACA;GACE,IAAI;GACJ;GACA,UAAU;GACV,MAAM,GAAG,KAAK;GACd,QAAQ;GACR,gBAAgB;GAChB,aAAa;GACb,MAAM;IAAE,UAAU;IAAM,aAAa;IAAoB,QAAQF,QAAAA,KAAK,OAAO;KAAE,OAAO;KAAG,MAAM;IAAE,CAAC;GAAE;GACpG,WAAW;IACT,OAAO,EAAE,aAAa,gBAAgB;IACtC,OAAO;KAAE,aAAa;KAAoB,QAAQA,QAAAA,KAAK,OAAO,EAAE,OAAO,EAAE,CAAC;IAAE;IAC5E,OAAO;KAAE,aAAa;KAAkB,QAAQA,QAAAA,KAAK,OAAO,EAAE,OAAO,EAAE,CAAC;IAAE;GAC5E;EACF;EACA;GACE,IAAI;GACJ;GACA,UAAU;GACV,MAAM,GAAG,KAAK;GACd,QAAQ;GACR,gBAAgB;GAChB,aAAa;GACb,MAAM;IAAE,UAAU;IAAM,aAAa;IAAoB,QAAQA,QAAAA,KAAK,OAAO;KAAE,OAAO;KAAG,SAAS;KAAG,MAAM;IAAE,CAAC;GAAE;GAChH,YAAA,GAAWE,qCAAAA,iBAAAA,CAAiBF,QAAAA,KAAK,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;EACzD;EACA;GACE,IAAI;GACJ;GACA,UAAU;GACV,MAAM;GACN,QAAQ;GACR,gBAAgB;GAChB,aAAa;GACb,YAAA,GAAWE,qCAAAA,iBAAAA,CAAiBF,QAAAA,KAAK,OAAO,EAAE,SAASA,QAAAA,KAAK,QAAQ,IAAI,EAAE,CAAC,CAAC;EAC1E;EACA;GACE,IAAI;GACJ;GACA,UAAU;GACV,MAAM,GAAG,KAAK;GACd,QAAQ;GACR,gBAAgB;GAChB,aAAa;GACb,YAAA,GAAWE,qCAAAA,iBAAAA,CACTF,QAAAA,KAAK,OAAO;IACV,QAAQ;IACR,aAAa;IACb,WAAWA,QAAAA,KAAK,MACdA,QAAAA,KAAK,OAAO;KACV,GAAG;KACH,UAAU;KACV,OAAO,OAAO;MAAC;MAAW;MAAS;MAAW;KAAY,CAAC;KAC3D,MAAM,EAAE,CAAC;KACT,YAAY,EAAE,CAAC;IACjB,CAAC,CACH;GACF,CAAC,CACH;EACF;EACA;GACE,IAAI;GACJ;GACA,UAAU;GACV,MAAM,GAAG,KAAK;GACd,QAAQ;GACR,gBAAgB;GAChB,aACE;GACF,YAAY;IACV;KAAE,MAAM;KAAO,IAAI;KAAS,UAAU;KAAO,QAAQ,OAAO,CAAC,KAAK,GAAG,CAAC;IAAE;IACxE;KAAE,MAAM;KAAY,IAAI;KAAS,UAAU;KAAO,QAAQ,OAAO,CAAC,KAAK,GAAG,CAAC;IAAE;IAC7E;KAAE,MAAM;KAAS,IAAI;KAAU,UAAU;KAAO,QAAQ;IAAE;GAC5D;GACA,WAAW;IACT,IAAA,GAAGE,qCAAAA,iBAAAA,CACDF,QAAAA,KAAK,MAAM,CAACA,QAAAA,KAAK,OAAO;KAAE,MAAM;KAAG,MAAM;KAAG,YAAY;KAAG,UAAU,EAAE,CAAC;KAAG,MAAM,EAAE,CAAC;KAAG,WAAW;IAAE,CAAC,GAAG,CAAC,CAAC,CAC5G;IACA,OAAO;KAAE,aAAa;KAAsB,aAAa;KAA4B,QAAQ;IAAE;IAC/F,OAAO,EAAE,aAAa,4BAA4B;GACpD;EACF;CACF,CAAC;CACD,SAAU,CAAC,UAAU,WAAW,CAAC,CAAW,SAAS,UAAU,CAC7D;EACE,IAAI;EACJ;EACA,SAAS;EACT,QAAQ;EACR,MAAM;EACN,WAAW;EACX,aAAa;EACb,OAAO;CACT,GACA;EACE,IAAI;EACJ;EACA,SAAS;EACT,QAAQ;EACR,MAAM;EACN,WAAW;EACX,aAAa;EACb,OAAO;CACT,CACF,CAAC;AACH,CAAC"}
|