sudocode 1.0.0 → 1.1.1
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/README.md +222 -0
- package/build.js +75 -0
- package/node_modules/@sudocode-ai/cli/README.md +330 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/feedback-commands.d.ts +53 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/feedback-commands.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/feedback-commands.js +274 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/feedback-commands.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/init-commands.d.ts +22 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/init-commands.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/init-commands.js +148 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/init-commands.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/issue-commands.d.ts +45 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/issue-commands.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/issue-commands.js +310 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/issue-commands.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/query-commands.d.ts +18 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/query-commands.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/query-commands.js +61 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/query-commands.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/reference-commands.d.ts +22 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/reference-commands.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/reference-commands.js +136 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/reference-commands.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/relationship-commands.d.ts +14 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/relationship-commands.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/relationship-commands.js +76 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/relationship-commands.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/server-commands.d.ts +17 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/server-commands.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/server-commands.js +99 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/server-commands.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/spec-commands.d.ts +38 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/spec-commands.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/spec-commands.js +321 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/spec-commands.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/status-commands.d.ts +17 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/status-commands.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/status-commands.js +131 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/status-commands.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/sync-commands.d.ts +24 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/sync-commands.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/sync-commands.js +416 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/sync-commands.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/update-commands.d.ts +12 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/update-commands.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/update-commands.js +78 -0
- package/node_modules/@sudocode-ai/cli/dist/cli/update-commands.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/cli.d.ts +6 -0
- package/node_modules/@sudocode-ai/cli/dist/cli.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/cli.js +426 -0
- package/node_modules/@sudocode-ai/cli/dist/cli.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/db.d.ts +21 -0
- package/node_modules/@sudocode-ai/cli/dist/db.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/db.js +54 -0
- package/node_modules/@sudocode-ai/cli/dist/db.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/export.d.ts +79 -0
- package/node_modules/@sudocode-ai/cli/dist/export.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/export.js +195 -0
- package/node_modules/@sudocode-ai/cli/dist/export.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/filename-generator.d.ts +30 -0
- package/node_modules/@sudocode-ai/cli/dist/filename-generator.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/filename-generator.js +93 -0
- package/node_modules/@sudocode-ai/cli/dist/filename-generator.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/id-generator.d.ts +26 -0
- package/node_modules/@sudocode-ai/cli/dist/id-generator.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/id-generator.js +123 -0
- package/node_modules/@sudocode-ai/cli/dist/id-generator.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/import.d.ts +118 -0
- package/node_modules/@sudocode-ai/cli/dist/import.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/import.js +608 -0
- package/node_modules/@sudocode-ai/cli/dist/import.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/index.d.ts +13 -0
- package/node_modules/@sudocode-ai/cli/dist/index.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/index.js +13 -0
- package/node_modules/@sudocode-ai/cli/dist/index.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/jsonl.d.ts +69 -0
- package/node_modules/@sudocode-ai/cli/dist/jsonl.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/jsonl.js +333 -0
- package/node_modules/@sudocode-ai/cli/dist/jsonl.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/markdown.d.ts +146 -0
- package/node_modules/@sudocode-ai/cli/dist/markdown.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/markdown.js +357 -0
- package/node_modules/@sudocode-ai/cli/dist/markdown.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/migrations.d.ts +23 -0
- package/node_modules/@sudocode-ai/cli/dist/migrations.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/migrations.js +57 -0
- package/node_modules/@sudocode-ai/cli/dist/migrations.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/events.d.ts +53 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/events.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/events.js +108 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/events.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/feedback-anchors.d.ts +92 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/feedback-anchors.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/feedback-anchors.js +444 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/feedback-anchors.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/feedback.d.ts +76 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/feedback.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/feedback.js +234 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/feedback.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/index.d.ts +10 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/index.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/index.js +10 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/index.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/issues.d.ts +82 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/issues.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/issues.js +411 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/issues.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/references.d.ts +34 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/references.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/references.js +117 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/references.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/relationships.d.ts +57 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/relationships.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/relationships.js +236 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/relationships.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/specs.d.ts +64 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/specs.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/specs.js +290 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/specs.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/tags.d.ts +42 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/tags.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/tags.js +127 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/tags.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/transactions.d.ts +41 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/transactions.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/transactions.js +111 -0
- package/node_modules/@sudocode-ai/cli/dist/operations/transactions.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/sync.d.ts +47 -0
- package/node_modules/@sudocode-ai/cli/dist/sync.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/sync.js +442 -0
- package/node_modules/@sudocode-ai/cli/dist/sync.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/test-schema.d.ts +5 -0
- package/node_modules/@sudocode-ai/cli/dist/test-schema.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/test-schema.js +46 -0
- package/node_modules/@sudocode-ai/cli/dist/test-schema.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/types.d.ts +7 -0
- package/node_modules/@sudocode-ai/cli/dist/types.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/types.js +7 -0
- package/node_modules/@sudocode-ai/cli/dist/types.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/update-checker.d.ts +24 -0
- package/node_modules/@sudocode-ai/cli/dist/update-checker.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/update-checker.js +151 -0
- package/node_modules/@sudocode-ai/cli/dist/update-checker.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/version.d.ts +12 -0
- package/node_modules/@sudocode-ai/cli/dist/version.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/version.js +23 -0
- package/node_modules/@sudocode-ai/cli/dist/version.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/watcher.d.ts +63 -0
- package/node_modules/@sudocode-ai/cli/dist/watcher.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/cli/dist/watcher.js +438 -0
- package/node_modules/@sudocode-ai/cli/dist/watcher.js.map +1 -0
- package/node_modules/@sudocode-ai/cli/package.json +65 -0
- package/node_modules/@sudocode-ai/local-server/README.md +19 -0
- package/node_modules/@sudocode-ai/local-server/dist/cli.d.ts +7 -0
- package/node_modules/@sudocode-ai/local-server/dist/cli.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/cli.js +7 -0
- package/node_modules/@sudocode-ai/local-server/dist/cli.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/engine/engine.d.ts +103 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/engine/engine.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/engine/engine.js +10 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/engine/engine.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/engine/simple-engine.d.ts +190 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/engine/simple-engine.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/engine/simple-engine.js +611 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/engine/simple-engine.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/engine/types.d.ts +116 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/engine/types.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/engine/types.js +10 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/engine/types.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/output/ag-ui-adapter.d.ts +176 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/output/ag-ui-adapter.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/output/ag-ui-adapter.js +438 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/output/ag-ui-adapter.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/output/ag-ui-integration.d.ts +96 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/output/ag-ui-integration.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/output/ag-ui-integration.js +96 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/output/ag-ui-integration.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/output/claude-code-output-processor.d.ts +321 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/output/claude-code-output-processor.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/output/claude-code-output-processor.js +769 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/output/claude-code-output-processor.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/output/index.d.ts +18 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/output/index.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/output/index.js +15 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/output/index.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/output/types.d.ts +421 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/output/types.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/output/types.js +22 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/output/types.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/process/builders/claude.d.ts +86 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/process/builders/claude.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/process/builders/claude.js +59 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/process/builders/claude.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/process/index.d.ts +15 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/process/index.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/process/index.js +15 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/process/index.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/process/manager.d.ts +133 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/process/manager.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/process/manager.js +10 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/process/manager.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/process/simple-manager.d.ts +102 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/process/simple-manager.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/process/simple-manager.js +336 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/process/simple-manager.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/process/types.d.ts +105 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/process/types.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/process/types.js +10 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/process/types.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/process/utils.d.ts +53 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/process/utils.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/process/utils.js +97 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/process/utils.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/circuit-breaker.d.ts +170 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/circuit-breaker.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/circuit-breaker.js +291 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/circuit-breaker.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/executor.d.ts +109 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/executor.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/executor.js +10 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/executor.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/index.d.ts +14 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/index.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/index.js +15 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/index.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/resilient-executor.d.ts +86 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/resilient-executor.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/resilient-executor.js +261 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/resilient-executor.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/retry.d.ts +161 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/retry.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/retry.js +234 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/retry.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/types.d.ts +226 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/types.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/types.js +30 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/types.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/transport/event-buffer.d.ts +119 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/transport/event-buffer.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/transport/event-buffer.js +208 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/transport/event-buffer.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/transport/index.d.ts +10 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/transport/index.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/transport/index.js +10 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/transport/index.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/transport/sse-transport.d.ts +146 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/transport/sse-transport.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/transport/sse-transport.js +282 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/transport/sse-transport.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/transport/transport-manager.d.ts +176 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/transport/transport-manager.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/transport/transport-manager.js +231 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/transport/transport-manager.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/index.d.ts +13 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/index.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/index.js +13 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/index.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/linear-orchestrator.d.ts +216 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/linear-orchestrator.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/linear-orchestrator.js +683 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/linear-orchestrator.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/memory-storage.d.ts +54 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/memory-storage.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/memory-storage.js +68 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/memory-storage.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/orchestrator.d.ts +158 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/orchestrator.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/orchestrator.js +9 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/orchestrator.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/types.d.ts +172 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/types.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/types.js +9 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/types.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/utils.d.ts +89 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/utils.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/utils.js +152 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/utils.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/config.d.ts +74 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/config.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/config.js +280 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/config.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/git-cli.d.ts +151 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/git-cli.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/git-cli.js +189 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/git-cli.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/index.d.ts +16 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/index.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/index.js +15 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/index.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/manager.d.ts +184 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/manager.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/manager.js +452 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/manager.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/types.d.ts +90 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/types.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/types.js +42 -0
- package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/types.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/index.d.ts +8 -0
- package/node_modules/@sudocode-ai/local-server/dist/index.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/index.js +356 -0
- package/node_modules/@sudocode-ai/local-server/dist/index.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/public/assets/index-C4SmlXoo.js +568 -0
- package/node_modules/@sudocode-ai/local-server/dist/public/assets/index-C4SmlXoo.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/public/assets/index-DE59j7ti.css +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/public/assets/react-vendor-LX0UoTxg.js +60 -0
- package/node_modules/@sudocode-ai/local-server/dist/public/assets/react-vendor-LX0UoTxg.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/public/assets/ui-vendor-_cxVHaqZ.js +54 -0
- package/node_modules/@sudocode-ai/local-server/dist/public/assets/ui-vendor-_cxVHaqZ.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/public/favicon.ico +0 -0
- package/node_modules/@sudocode-ai/local-server/dist/public/index.html +16 -0
- package/node_modules/@sudocode-ai/local-server/dist/public/logo.png +0 -0
- package/node_modules/@sudocode-ai/local-server/dist/routes/executions-stream.d.ts +24 -0
- package/node_modules/@sudocode-ai/local-server/dist/routes/executions-stream.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/routes/executions-stream.js +55 -0
- package/node_modules/@sudocode-ai/local-server/dist/routes/executions-stream.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/routes/executions.d.ts +19 -0
- package/node_modules/@sudocode-ai/local-server/dist/routes/executions.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/routes/executions.js +267 -0
- package/node_modules/@sudocode-ai/local-server/dist/routes/executions.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/routes/feedback.d.ts +7 -0
- package/node_modules/@sudocode-ai/local-server/dist/routes/feedback.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/routes/feedback.js +329 -0
- package/node_modules/@sudocode-ai/local-server/dist/routes/feedback.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/routes/issues.d.ts +7 -0
- package/node_modules/@sudocode-ai/local-server/dist/routes/issues.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/routes/issues.js +280 -0
- package/node_modules/@sudocode-ai/local-server/dist/routes/issues.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/routes/relationships.d.ts +7 -0
- package/node_modules/@sudocode-ai/local-server/dist/routes/relationships.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/routes/relationships.js +308 -0
- package/node_modules/@sudocode-ai/local-server/dist/routes/relationships.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/routes/specs.d.ts +7 -0
- package/node_modules/@sudocode-ai/local-server/dist/routes/specs.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/routes/specs.js +270 -0
- package/node_modules/@sudocode-ai/local-server/dist/routes/specs.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/db.d.ts +33 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/db.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/db.js +85 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/db.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/execution-lifecycle.d.ts +108 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/execution-lifecycle.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/execution-lifecycle.js +286 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/execution-lifecycle.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/execution-service.d.ts +185 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/execution-service.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/execution-service.js +676 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/execution-service.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/executions.d.ts +59 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/executions.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/executions.js +164 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/executions.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/export.d.ts +24 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/export.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/export.js +106 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/export.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/feedback.d.ts +40 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/feedback.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/feedback.js +54 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/feedback.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/issues.d.ts +27 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/issues.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/issues.js +35 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/issues.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/prompt-template-engine.d.ts +108 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/prompt-template-engine.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/prompt-template-engine.js +212 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/prompt-template-engine.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/prompt-templates.d.ts +97 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/prompt-templates.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/prompt-templates.js +236 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/prompt-templates.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/relationships.d.ts +35 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/relationships.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/relationships.js +42 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/relationships.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/specs.d.ts +27 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/specs.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/specs.js +35 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/specs.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/watcher.d.ts +50 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/watcher.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/watcher.js +69 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/watcher.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/websocket.d.ts +127 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/websocket.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/websocket.js +389 -0
- package/node_modules/@sudocode-ai/local-server/dist/services/websocket.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/utils/sudocode-dir.d.ts +6 -0
- package/node_modules/@sudocode-ai/local-server/dist/utils/sudocode-dir.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/local-server/dist/utils/sudocode-dir.js +9 -0
- package/node_modules/@sudocode-ai/local-server/dist/utils/sudocode-dir.js.map +1 -0
- package/node_modules/@sudocode-ai/local-server/package.json +72 -0
- package/node_modules/@sudocode-ai/mcp/LICENSE +21 -0
- package/node_modules/@sudocode-ai/mcp/README.md +226 -0
- package/node_modules/@sudocode-ai/mcp/dist/client.d.ts +33 -0
- package/node_modules/@sudocode-ai/mcp/dist/client.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/mcp/dist/client.js +159 -0
- package/node_modules/@sudocode-ai/mcp/dist/client.js.map +1 -0
- package/node_modules/@sudocode-ai/mcp/dist/index.d.ts +6 -0
- package/node_modules/@sudocode-ai/mcp/dist/index.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/mcp/dist/index.js +64 -0
- package/node_modules/@sudocode-ai/mcp/dist/index.js.map +1 -0
- package/node_modules/@sudocode-ai/mcp/dist/server.d.ts +26 -0
- package/node_modules/@sudocode-ai/mcp/dist/server.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/mcp/dist/server.js +575 -0
- package/node_modules/@sudocode-ai/mcp/dist/server.js.map +1 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/analytics.d.ts +41 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/analytics.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/analytics.js +21 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/analytics.js.map +1 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/feedback.d.ts +19 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/feedback.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/feedback.js +24 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/feedback.js.map +1 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/init.d.ts +17 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/init.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/init.js +15 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/init.js.map +1 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/issues.d.ts +44 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/issues.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/issues.js +106 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/issues.js.map +1 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/references.d.ts +21 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/references.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/references.js +49 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/references.js.map +1 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/relationships.d.ts +15 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/relationships.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/relationships.js +18 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/relationships.js.map +1 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/specs.d.ts +35 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/specs.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/specs.js +85 -0
- package/node_modules/@sudocode-ai/mcp/dist/tools/specs.js.map +1 -0
- package/node_modules/@sudocode-ai/mcp/dist/types.d.ts +35 -0
- package/node_modules/@sudocode-ai/mcp/dist/types.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/mcp/dist/types.js +21 -0
- package/node_modules/@sudocode-ai/mcp/dist/types.js.map +1 -0
- package/node_modules/@sudocode-ai/mcp/package.json +67 -0
- package/node_modules/@sudocode-ai/types/README.md +7 -0
- package/node_modules/@sudocode-ai/types/dist/schema.d.ts +45 -0
- package/node_modules/@sudocode-ai/types/dist/schema.d.ts.map +1 -0
- package/node_modules/@sudocode-ai/types/dist/schema.js +338 -0
- package/node_modules/@sudocode-ai/types/dist/schema.js.map +1 -0
- package/node_modules/@sudocode-ai/types/package.json +46 -0
- package/package.json +51 -12
- package/index.js +0 -5
|
@@ -0,0 +1,683 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Linear Workflow Orchestrator Implementation
|
|
3
|
+
*
|
|
4
|
+
* Executes workflow steps sequentially with state management and checkpointing.
|
|
5
|
+
*
|
|
6
|
+
* @module execution/workflow/linear-orchestrator
|
|
7
|
+
*/
|
|
8
|
+
import { renderTemplate, generateId, extractValue, evaluateCondition, } from "./utils.js";
|
|
9
|
+
/**
|
|
10
|
+
* LinearOrchestrator - Sequential workflow execution with state management
|
|
11
|
+
*
|
|
12
|
+
* Implements the IWorkflowOrchestrator interface to provide:
|
|
13
|
+
* - Sequential step execution
|
|
14
|
+
* - State persistence via checkpoints
|
|
15
|
+
* - Crash recovery and resumption
|
|
16
|
+
* - Event-driven monitoring
|
|
17
|
+
*/
|
|
18
|
+
export class LinearOrchestrator {
|
|
19
|
+
// Internal state
|
|
20
|
+
_executions = new Map();
|
|
21
|
+
_cleanedUpExecutions = new Set(); // Track which executions have been cleaned up
|
|
22
|
+
_storage;
|
|
23
|
+
_executor;
|
|
24
|
+
_agUiAdapter;
|
|
25
|
+
_lifecycleService;
|
|
26
|
+
// Event handlers
|
|
27
|
+
_workflowStartHandlers = [];
|
|
28
|
+
_workflowCompleteHandlers = [];
|
|
29
|
+
_workflowFailedHandlers = [];
|
|
30
|
+
_stepStartHandlers = [];
|
|
31
|
+
_stepCompleteHandlers = [];
|
|
32
|
+
_stepFailedHandlers = [];
|
|
33
|
+
_checkpointHandlers = [];
|
|
34
|
+
_resumeHandlers = [];
|
|
35
|
+
_pauseHandlers = [];
|
|
36
|
+
_cancelHandlers = [];
|
|
37
|
+
/**
|
|
38
|
+
* Create a new LinearOrchestrator
|
|
39
|
+
*
|
|
40
|
+
* @param executor - Resilient executor for running tasks
|
|
41
|
+
* @param storage - Optional storage for checkpoints
|
|
42
|
+
* @param agUiAdapter - Optional AG-UI event adapter for real-time event streaming
|
|
43
|
+
* @param lifecycleService - Optional execution lifecycle service for worktree management
|
|
44
|
+
*/
|
|
45
|
+
constructor(executor, storage, agUiAdapter, lifecycleService) {
|
|
46
|
+
this._executor = executor;
|
|
47
|
+
this._storage = storage;
|
|
48
|
+
this._agUiAdapter = agUiAdapter;
|
|
49
|
+
this._lifecycleService = lifecycleService;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Start a new workflow execution
|
|
53
|
+
*
|
|
54
|
+
* @param workflow - Workflow definition to execute
|
|
55
|
+
* @param workDir - Working directory for task execution
|
|
56
|
+
* @param options - Execution options (executionId is required)
|
|
57
|
+
* @returns Promise resolving to execution ID
|
|
58
|
+
*/
|
|
59
|
+
async startWorkflow(workflow, workDir, options) {
|
|
60
|
+
// 1. Create execution
|
|
61
|
+
const execution = {
|
|
62
|
+
executionId: options.executionId,
|
|
63
|
+
workflowId: workflow.id,
|
|
64
|
+
definition: workflow,
|
|
65
|
+
status: "pending",
|
|
66
|
+
currentStepIndex: 0,
|
|
67
|
+
context: options?.initialContext || workflow.initialContext || {},
|
|
68
|
+
stepResults: [],
|
|
69
|
+
startedAt: new Date(),
|
|
70
|
+
};
|
|
71
|
+
// 2. Store execution
|
|
72
|
+
this._executions.set(execution.executionId, execution);
|
|
73
|
+
// 3. Start execution in background (non-blocking)
|
|
74
|
+
this._executeWorkflow(workflow, execution, workDir, options?.checkpointInterval).catch((error) => {
|
|
75
|
+
execution.status = "failed";
|
|
76
|
+
execution.completedAt = new Date();
|
|
77
|
+
execution.error = error.message;
|
|
78
|
+
// Emit workflow failed event
|
|
79
|
+
this._workflowFailedHandlers.forEach((handler) => {
|
|
80
|
+
handler(execution.executionId, error);
|
|
81
|
+
});
|
|
82
|
+
// Emit AG-UI RUN_ERROR event
|
|
83
|
+
if (this._agUiAdapter) {
|
|
84
|
+
this._agUiAdapter.emitRunError(error.message, error.stack);
|
|
85
|
+
}
|
|
86
|
+
// Cleanup execution resources (worktree)
|
|
87
|
+
this._cleanupExecution(execution).catch(() => {
|
|
88
|
+
// Error already logged in _cleanupExecution
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
// 4. Return execution ID immediately
|
|
92
|
+
return execution.executionId;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Resume a workflow from a checkpoint
|
|
96
|
+
*
|
|
97
|
+
* @param executionId - Execution ID to resume
|
|
98
|
+
* @param options - Resume options
|
|
99
|
+
* @returns Promise resolving to execution ID
|
|
100
|
+
*/
|
|
101
|
+
async resumeWorkflow(executionId, options) {
|
|
102
|
+
if (!this._storage) {
|
|
103
|
+
throw new Error("Cannot resume workflow: no storage configured");
|
|
104
|
+
}
|
|
105
|
+
// Load checkpoint
|
|
106
|
+
const checkpoint = await this._storage.loadCheckpoint(executionId);
|
|
107
|
+
if (!checkpoint) {
|
|
108
|
+
throw new Error(`No checkpoint found for execution ${executionId}`);
|
|
109
|
+
}
|
|
110
|
+
// Restore execution state
|
|
111
|
+
const execution = {
|
|
112
|
+
workflowId: checkpoint.workflowId,
|
|
113
|
+
executionId: checkpoint.executionId,
|
|
114
|
+
definition: checkpoint.definition,
|
|
115
|
+
status: "running",
|
|
116
|
+
currentStepIndex: checkpoint.state.currentStepIndex,
|
|
117
|
+
context: { ...checkpoint.state.context },
|
|
118
|
+
stepResults: [...checkpoint.state.stepResults],
|
|
119
|
+
startedAt: checkpoint.state.startedAt,
|
|
120
|
+
resumedAt: new Date(),
|
|
121
|
+
};
|
|
122
|
+
this._executions.set(executionId, execution);
|
|
123
|
+
// Emit resume event
|
|
124
|
+
this._resumeHandlers.forEach((handler) => {
|
|
125
|
+
handler(executionId, checkpoint);
|
|
126
|
+
});
|
|
127
|
+
// Get workDir from workflow metadata or use default
|
|
128
|
+
const workDir = checkpoint.definition.metadata?.workDir || process.cwd();
|
|
129
|
+
// Continue execution from saved point
|
|
130
|
+
this._executeWorkflow(checkpoint.definition, execution, workDir, options?.checkpointInterval).catch((error) => {
|
|
131
|
+
execution.status = "failed";
|
|
132
|
+
execution.completedAt = new Date();
|
|
133
|
+
execution.error = error.message;
|
|
134
|
+
// Emit workflow failed event
|
|
135
|
+
this._workflowFailedHandlers.forEach((handler) => {
|
|
136
|
+
handler(execution.executionId, error);
|
|
137
|
+
});
|
|
138
|
+
// Emit AG-UI RUN_ERROR event
|
|
139
|
+
if (this._agUiAdapter) {
|
|
140
|
+
this._agUiAdapter.emitRunError(error.message, error.stack);
|
|
141
|
+
}
|
|
142
|
+
// Cleanup execution resources (worktree)
|
|
143
|
+
this._cleanupExecution(execution).catch(() => {
|
|
144
|
+
// Error already logged in _cleanupExecution
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
return executionId;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Pause a running workflow
|
|
151
|
+
*
|
|
152
|
+
* @param executionId - Execution ID to pause
|
|
153
|
+
*/
|
|
154
|
+
async pauseWorkflow(executionId) {
|
|
155
|
+
const execution = this._executions.get(executionId);
|
|
156
|
+
if (!execution) {
|
|
157
|
+
return; // Silently ignore non-existent executions
|
|
158
|
+
}
|
|
159
|
+
if (execution.status !== "running") {
|
|
160
|
+
throw new Error(`Cannot pause workflow in ${execution.status} state`);
|
|
161
|
+
}
|
|
162
|
+
execution.status = "paused";
|
|
163
|
+
execution.pausedAt = new Date();
|
|
164
|
+
// Wait for any currently executing step to complete and update state
|
|
165
|
+
// This prevents race condition where step is submitted to executor but result not yet saved
|
|
166
|
+
// 250ms is enough for typical step execution (MockResilientExecutor uses 200ms in tests)
|
|
167
|
+
await new Promise((resolve) => setTimeout(resolve, 250));
|
|
168
|
+
// Now save checkpoint with current state
|
|
169
|
+
if (this._storage) {
|
|
170
|
+
await this._saveCheckpoint(execution);
|
|
171
|
+
}
|
|
172
|
+
// Emit pause event
|
|
173
|
+
this._pauseHandlers.forEach((handler) => {
|
|
174
|
+
handler(executionId);
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Cancel a running workflow
|
|
179
|
+
*
|
|
180
|
+
* @param executionId - Execution ID to cancel
|
|
181
|
+
*/
|
|
182
|
+
async cancelWorkflow(executionId) {
|
|
183
|
+
const execution = this._executions.get(executionId);
|
|
184
|
+
if (!execution) {
|
|
185
|
+
return; // Silently ignore non-existent executions
|
|
186
|
+
}
|
|
187
|
+
if (["completed", "cancelled"].includes(execution.status)) {
|
|
188
|
+
return; // Already done
|
|
189
|
+
}
|
|
190
|
+
execution.status = "cancelled";
|
|
191
|
+
execution.completedAt = new Date();
|
|
192
|
+
// Create final checkpoint (currentStepIndex is already up-to-date)
|
|
193
|
+
if (this._storage) {
|
|
194
|
+
await this._saveCheckpoint(execution);
|
|
195
|
+
}
|
|
196
|
+
// Emit cancel event
|
|
197
|
+
this._cancelHandlers.forEach((handler) => {
|
|
198
|
+
handler(executionId);
|
|
199
|
+
});
|
|
200
|
+
// Cleanup execution resources (worktree)
|
|
201
|
+
await this._cleanupExecution(execution);
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Get current execution state
|
|
205
|
+
*
|
|
206
|
+
* @param executionId - Execution ID to query
|
|
207
|
+
* @returns Execution state or null if not found
|
|
208
|
+
*/
|
|
209
|
+
getExecution(executionId) {
|
|
210
|
+
return this._executions.get(executionId) || null;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Get status of a specific step
|
|
214
|
+
*
|
|
215
|
+
* @param executionId - Execution ID
|
|
216
|
+
* @param stepId - Step ID to query
|
|
217
|
+
* @returns Step status or null if not found
|
|
218
|
+
*/
|
|
219
|
+
getStepStatus(executionId, stepId) {
|
|
220
|
+
const execution = this._executions.get(executionId);
|
|
221
|
+
if (!execution) {
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
// Find step index
|
|
225
|
+
const stepIndex = execution.definition.steps.findIndex((s) => s.id === stepId);
|
|
226
|
+
if (stepIndex === -1) {
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
229
|
+
// Determine status based on execution state
|
|
230
|
+
let status;
|
|
231
|
+
const result = execution.stepResults[stepIndex];
|
|
232
|
+
// Check if result exists first (step has been executed)
|
|
233
|
+
if (result !== undefined) {
|
|
234
|
+
// Step has a result, so it's either completed or failed
|
|
235
|
+
status = result.success ? "completed" : "failed";
|
|
236
|
+
}
|
|
237
|
+
else if (stepIndex === execution.currentStepIndex) {
|
|
238
|
+
// Currently executing (no result yet)
|
|
239
|
+
status = "running";
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
// Not yet executed
|
|
243
|
+
status = "pending";
|
|
244
|
+
}
|
|
245
|
+
return {
|
|
246
|
+
stepId,
|
|
247
|
+
status,
|
|
248
|
+
result,
|
|
249
|
+
attempts: 1, // TODO: Track actual attempts
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Wait for workflow to complete
|
|
254
|
+
*
|
|
255
|
+
* @param executionId - Execution ID to wait for
|
|
256
|
+
* @returns Promise resolving to workflow execution
|
|
257
|
+
*/
|
|
258
|
+
async waitForWorkflow(executionId) {
|
|
259
|
+
const execution = this._executions.get(executionId);
|
|
260
|
+
if (!execution) {
|
|
261
|
+
throw new Error(`Workflow execution ${executionId} not found`);
|
|
262
|
+
}
|
|
263
|
+
// If already completed/failed/cancelled, return immediately
|
|
264
|
+
if (["completed", "failed", "cancelled"].includes(execution.status)) {
|
|
265
|
+
return execution;
|
|
266
|
+
}
|
|
267
|
+
// Wait for completion by polling
|
|
268
|
+
return new Promise((resolve, reject) => {
|
|
269
|
+
const checkInterval = setInterval(() => {
|
|
270
|
+
const current = this._executions.get(executionId);
|
|
271
|
+
if (!current) {
|
|
272
|
+
clearInterval(checkInterval);
|
|
273
|
+
reject(new Error(`Workflow execution ${executionId} not found`));
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
if (["completed", "failed", "cancelled"].includes(current.status)) {
|
|
277
|
+
clearInterval(checkInterval);
|
|
278
|
+
resolve(current);
|
|
279
|
+
}
|
|
280
|
+
}, 100);
|
|
281
|
+
// Timeout after 5 minutes
|
|
282
|
+
setTimeout(() => {
|
|
283
|
+
clearInterval(checkInterval);
|
|
284
|
+
reject(new Error(`Timeout waiting for workflow ${executionId}`));
|
|
285
|
+
}, 300000);
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* List all checkpoints for a workflow
|
|
290
|
+
*
|
|
291
|
+
* @param workflowId - Optional workflow ID to filter by
|
|
292
|
+
* @returns Promise resolving to list of checkpoints
|
|
293
|
+
*/
|
|
294
|
+
async listCheckpoints(workflowId) {
|
|
295
|
+
if (!this._storage) {
|
|
296
|
+
return [];
|
|
297
|
+
}
|
|
298
|
+
return this._storage.listCheckpoints(workflowId);
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Register handler for workflow start events
|
|
302
|
+
*/
|
|
303
|
+
onWorkflowStart(handler) {
|
|
304
|
+
this._workflowStartHandlers.push(handler);
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Register handler for workflow completion events
|
|
308
|
+
*/
|
|
309
|
+
onWorkflowComplete(handler) {
|
|
310
|
+
this._workflowCompleteHandlers.push(handler);
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Register handler for workflow failure events
|
|
314
|
+
*/
|
|
315
|
+
onWorkflowFailed(handler) {
|
|
316
|
+
this._workflowFailedHandlers.push(handler);
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Register handler for step start events
|
|
320
|
+
*/
|
|
321
|
+
onStepStart(handler) {
|
|
322
|
+
this._stepStartHandlers.push(handler);
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Register handler for step completion events
|
|
326
|
+
*/
|
|
327
|
+
onStepComplete(handler) {
|
|
328
|
+
this._stepCompleteHandlers.push(handler);
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Register handler for step failure events
|
|
332
|
+
*/
|
|
333
|
+
onStepFailed(handler) {
|
|
334
|
+
this._stepFailedHandlers.push(handler);
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Register handler for checkpoint events
|
|
338
|
+
*/
|
|
339
|
+
onCheckpoint(handler) {
|
|
340
|
+
this._checkpointHandlers.push(handler);
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Register handler for resume events
|
|
344
|
+
*/
|
|
345
|
+
onResume(handler) {
|
|
346
|
+
this._resumeHandlers.push(handler);
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Register handler for pause events
|
|
350
|
+
*/
|
|
351
|
+
onPause(handler) {
|
|
352
|
+
this._pauseHandlers.push(handler);
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Register handler for cancel events
|
|
356
|
+
*/
|
|
357
|
+
onCancel(handler) {
|
|
358
|
+
this._cancelHandlers.push(handler);
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Execute workflow (main execution loop)
|
|
362
|
+
*
|
|
363
|
+
* @param workflow - Workflow definition
|
|
364
|
+
* @param execution - Workflow execution state
|
|
365
|
+
* @param workDir - Working directory for task execution
|
|
366
|
+
* @param checkpointInterval - Optional checkpoint interval (in steps)
|
|
367
|
+
* @returns Promise that resolves when workflow completes
|
|
368
|
+
* @private
|
|
369
|
+
*/
|
|
370
|
+
async _executeWorkflow(workflow, execution, workDir, checkpointInterval) {
|
|
371
|
+
// 1. Set status to running
|
|
372
|
+
execution.status = "running";
|
|
373
|
+
// Emit workflow start event
|
|
374
|
+
this._workflowStartHandlers.forEach((handler) => {
|
|
375
|
+
handler(execution.executionId, workflow.id);
|
|
376
|
+
});
|
|
377
|
+
// Emit AG-UI RUN_STARTED event
|
|
378
|
+
if (this._agUiAdapter) {
|
|
379
|
+
this._agUiAdapter.emitRunStarted({
|
|
380
|
+
workflowId: workflow.id,
|
|
381
|
+
executionId: execution.executionId,
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
// 2. Execute steps sequentially
|
|
385
|
+
for (let i = execution.currentStepIndex; i < workflow.steps.length; i++) {
|
|
386
|
+
const step = workflow.steps[i];
|
|
387
|
+
// Check if paused or cancelled before starting each step
|
|
388
|
+
// Note: Status can be changed externally via pauseWorkflow/cancelWorkflow
|
|
389
|
+
if (["paused", "cancelled"].includes(execution.status)) {
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
392
|
+
// Skip steps that have already been executed (for resumed workflows)
|
|
393
|
+
if (execution.stepResults[i] && execution.stepResults[i].success) {
|
|
394
|
+
// Update currentStepIndex to skip completed step
|
|
395
|
+
execution.currentStepIndex = i + 1;
|
|
396
|
+
continue;
|
|
397
|
+
}
|
|
398
|
+
// Check dependencies
|
|
399
|
+
if (!this._areDependenciesMet(step, execution)) {
|
|
400
|
+
const error = new Error(`Dependencies not met for step ${step.id}`);
|
|
401
|
+
// Emit step failed event
|
|
402
|
+
this._stepFailedHandlers.forEach((handler) => {
|
|
403
|
+
handler(execution.executionId, step.id, error);
|
|
404
|
+
});
|
|
405
|
+
if (!workflow.config?.continueOnStepFailure) {
|
|
406
|
+
execution.status = "failed";
|
|
407
|
+
execution.completedAt = new Date();
|
|
408
|
+
execution.error = error.message;
|
|
409
|
+
// Emit workflow failed event
|
|
410
|
+
this._workflowFailedHandlers.forEach((handler) => {
|
|
411
|
+
handler(execution.executionId, error);
|
|
412
|
+
});
|
|
413
|
+
// Cleanup execution resources (worktree)
|
|
414
|
+
await this._cleanupExecution(execution);
|
|
415
|
+
return;
|
|
416
|
+
}
|
|
417
|
+
// Update currentStepIndex to point to next step before continuing
|
|
418
|
+
execution.currentStepIndex = i + 1;
|
|
419
|
+
continue;
|
|
420
|
+
}
|
|
421
|
+
// Check condition
|
|
422
|
+
if (!this._shouldExecuteStep(step, execution.context)) {
|
|
423
|
+
// Step condition not met, skip it
|
|
424
|
+
// Update currentStepIndex to point to next step before continuing
|
|
425
|
+
execution.currentStepIndex = i + 1;
|
|
426
|
+
continue;
|
|
427
|
+
}
|
|
428
|
+
// Emit step start event
|
|
429
|
+
this._stepStartHandlers.forEach((handler) => {
|
|
430
|
+
handler(execution.executionId, step.id, i);
|
|
431
|
+
});
|
|
432
|
+
// Emit AG-UI STEP_STARTED event
|
|
433
|
+
if (this._agUiAdapter) {
|
|
434
|
+
this._agUiAdapter.emitStepStarted(step.id, step.taskType || `Step ${i + 1}`);
|
|
435
|
+
}
|
|
436
|
+
// Execute step
|
|
437
|
+
try {
|
|
438
|
+
const result = await this._executeStep(step, execution, workDir);
|
|
439
|
+
// Store result
|
|
440
|
+
execution.stepResults[i] = result;
|
|
441
|
+
// Check if step failed
|
|
442
|
+
if (!result.success) {
|
|
443
|
+
const error = new Error(result.error || `Step ${step.id} failed`);
|
|
444
|
+
// Emit step failed event
|
|
445
|
+
this._stepFailedHandlers.forEach((handler) => {
|
|
446
|
+
handler(execution.executionId, step.id, error);
|
|
447
|
+
});
|
|
448
|
+
if (!workflow.config?.continueOnStepFailure) {
|
|
449
|
+
execution.status = "failed";
|
|
450
|
+
execution.completedAt = new Date();
|
|
451
|
+
execution.error = error.message;
|
|
452
|
+
// Emit workflow failed event
|
|
453
|
+
this._workflowFailedHandlers.forEach((handler) => {
|
|
454
|
+
handler(execution.executionId, error);
|
|
455
|
+
});
|
|
456
|
+
// Cleanup execution resources (worktree)
|
|
457
|
+
await this._cleanupExecution(execution);
|
|
458
|
+
return;
|
|
459
|
+
}
|
|
460
|
+
// Update currentStepIndex to point to next step before continuing
|
|
461
|
+
execution.currentStepIndex = i + 1;
|
|
462
|
+
continue;
|
|
463
|
+
}
|
|
464
|
+
// Apply output mapping (only for successful steps)
|
|
465
|
+
this._applyOutputMapping(step, result, execution.context);
|
|
466
|
+
// Emit step complete event
|
|
467
|
+
this._stepCompleteHandlers.forEach((handler) => {
|
|
468
|
+
handler(execution.executionId, step.id, result);
|
|
469
|
+
});
|
|
470
|
+
// Emit AG-UI STEP_FINISHED event (success)
|
|
471
|
+
if (this._agUiAdapter) {
|
|
472
|
+
this._agUiAdapter.emitStepFinished(step.id, "success", result.output);
|
|
473
|
+
}
|
|
474
|
+
// Update currentStepIndex to point to next step after successful completion
|
|
475
|
+
execution.currentStepIndex = i + 1;
|
|
476
|
+
// Checkpoint if configured
|
|
477
|
+
if (checkpointInterval &&
|
|
478
|
+
this._storage &&
|
|
479
|
+
(i + 1) % checkpointInterval === 0) {
|
|
480
|
+
await this._saveCheckpoint(execution);
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
catch (error) {
|
|
484
|
+
// Emit step failed event
|
|
485
|
+
this._stepFailedHandlers.forEach((handler) => {
|
|
486
|
+
handler(execution.executionId, step.id, error);
|
|
487
|
+
});
|
|
488
|
+
// Emit AG-UI STEP_FINISHED event (error)
|
|
489
|
+
if (this._agUiAdapter) {
|
|
490
|
+
this._agUiAdapter.emitStepFinished(step.id, "error");
|
|
491
|
+
}
|
|
492
|
+
if (!workflow.config?.continueOnStepFailure) {
|
|
493
|
+
execution.status = "failed";
|
|
494
|
+
execution.completedAt = new Date();
|
|
495
|
+
execution.error = error.message;
|
|
496
|
+
// Emit workflow failed event
|
|
497
|
+
this._workflowFailedHandlers.forEach((handler) => {
|
|
498
|
+
handler(execution.executionId, error);
|
|
499
|
+
});
|
|
500
|
+
// Emit AG-UI RUN_ERROR event
|
|
501
|
+
if (this._agUiAdapter) {
|
|
502
|
+
this._agUiAdapter.emitRunError(error.message, error.stack);
|
|
503
|
+
}
|
|
504
|
+
// Cleanup execution resources (worktree)
|
|
505
|
+
await this._cleanupExecution(execution);
|
|
506
|
+
return;
|
|
507
|
+
}
|
|
508
|
+
// Update currentStepIndex when continuing after error (for checkpoint consistency)
|
|
509
|
+
execution.currentStepIndex = i + 1;
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
// 3. Workflow completed
|
|
513
|
+
execution.status = "completed";
|
|
514
|
+
execution.completedAt = new Date();
|
|
515
|
+
// 4. Emit workflow complete event
|
|
516
|
+
const result = {
|
|
517
|
+
executionId: execution.executionId,
|
|
518
|
+
success: execution.stepResults.every((r) => r.success),
|
|
519
|
+
completedSteps: execution.stepResults.filter((r) => r.success).length,
|
|
520
|
+
failedSteps: execution.stepResults.filter((r) => !r.success).length,
|
|
521
|
+
skippedSteps: 0, // TODO: Track skipped steps properly
|
|
522
|
+
outputs: execution.context,
|
|
523
|
+
duration: execution.completedAt.getTime() - execution.startedAt.getTime(),
|
|
524
|
+
};
|
|
525
|
+
this._workflowCompleteHandlers.forEach((handler) => {
|
|
526
|
+
handler(execution.executionId, result);
|
|
527
|
+
});
|
|
528
|
+
// Emit AG-UI RUN_FINISHED event
|
|
529
|
+
if (this._agUiAdapter) {
|
|
530
|
+
this._agUiAdapter.emitRunFinished(result);
|
|
531
|
+
}
|
|
532
|
+
// 5. Cleanup execution resources (worktree)
|
|
533
|
+
await this._cleanupExecution(execution);
|
|
534
|
+
}
|
|
535
|
+
/**
|
|
536
|
+
* Save checkpoint to storage
|
|
537
|
+
*
|
|
538
|
+
* @param execution - Workflow execution to checkpoint
|
|
539
|
+
* @private
|
|
540
|
+
*/
|
|
541
|
+
async _saveCheckpoint(execution) {
|
|
542
|
+
if (!this._storage) {
|
|
543
|
+
return;
|
|
544
|
+
}
|
|
545
|
+
const checkpoint = {
|
|
546
|
+
workflowId: execution.workflowId,
|
|
547
|
+
executionId: execution.executionId,
|
|
548
|
+
definition: execution.definition,
|
|
549
|
+
state: {
|
|
550
|
+
status: execution.status,
|
|
551
|
+
currentStepIndex: execution.currentStepIndex,
|
|
552
|
+
context: execution.context,
|
|
553
|
+
stepResults: execution.stepResults,
|
|
554
|
+
error: execution.error,
|
|
555
|
+
startedAt: execution.startedAt,
|
|
556
|
+
completedAt: execution.completedAt,
|
|
557
|
+
},
|
|
558
|
+
createdAt: new Date(),
|
|
559
|
+
};
|
|
560
|
+
await this._storage.saveCheckpoint(checkpoint);
|
|
561
|
+
// Emit checkpoint event
|
|
562
|
+
this._checkpointHandlers.forEach((handler) => {
|
|
563
|
+
handler(checkpoint);
|
|
564
|
+
});
|
|
565
|
+
}
|
|
566
|
+
/**
|
|
567
|
+
* Clean up execution resources (worktree)
|
|
568
|
+
* Ensures cleanup is called only once per execution
|
|
569
|
+
*
|
|
570
|
+
* @param execution - Workflow execution to cleanup
|
|
571
|
+
* @private
|
|
572
|
+
*/
|
|
573
|
+
async _cleanupExecution(execution) {
|
|
574
|
+
// Skip if no lifecycle service or no execution ID
|
|
575
|
+
if (!this._lifecycleService || !execution.executionId) {
|
|
576
|
+
return;
|
|
577
|
+
}
|
|
578
|
+
// Skip if already cleaned up
|
|
579
|
+
if (this._cleanedUpExecutions.has(execution.executionId)) {
|
|
580
|
+
return;
|
|
581
|
+
}
|
|
582
|
+
// Mark as cleaned up before calling cleanup (to prevent race conditions)
|
|
583
|
+
this._cleanedUpExecutions.add(execution.executionId);
|
|
584
|
+
try {
|
|
585
|
+
await this._lifecycleService.cleanupExecution(execution.executionId);
|
|
586
|
+
}
|
|
587
|
+
catch (error) {
|
|
588
|
+
// Log error but don't fail
|
|
589
|
+
console.error(`Failed to cleanup execution ${execution.executionId}:`, error);
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
/**
|
|
593
|
+
* Execute a single workflow step
|
|
594
|
+
*
|
|
595
|
+
* @param step - Workflow step to execute
|
|
596
|
+
* @param execution - Current workflow execution state
|
|
597
|
+
* @param workDir - Working directory for task execution
|
|
598
|
+
* @returns Promise resolving to execution result
|
|
599
|
+
* @private
|
|
600
|
+
*/
|
|
601
|
+
async _executeStep(step, execution, workDir) {
|
|
602
|
+
// 1. Render prompt template with context
|
|
603
|
+
const prompt = renderTemplate(step.prompt, execution.context);
|
|
604
|
+
// 2. Build execution task
|
|
605
|
+
const task = {
|
|
606
|
+
id: generateId("task"),
|
|
607
|
+
type: step.taskType,
|
|
608
|
+
prompt,
|
|
609
|
+
workDir,
|
|
610
|
+
priority: 0,
|
|
611
|
+
dependencies: [],
|
|
612
|
+
createdAt: new Date(),
|
|
613
|
+
config: step.taskConfig || {},
|
|
614
|
+
};
|
|
615
|
+
// 3. Execute with resilience (includes retry logic)
|
|
616
|
+
const result = await this._executor.executeTask(task, step.retryPolicy);
|
|
617
|
+
return result;
|
|
618
|
+
}
|
|
619
|
+
/**
|
|
620
|
+
* Apply output mapping from step result to workflow context
|
|
621
|
+
*
|
|
622
|
+
* @param step - Workflow step with output mapping
|
|
623
|
+
* @param result - Execution result from step
|
|
624
|
+
* @param context - Workflow context to update
|
|
625
|
+
* @private
|
|
626
|
+
*/
|
|
627
|
+
_applyOutputMapping(step, result, context) {
|
|
628
|
+
if (!step.outputMapping) {
|
|
629
|
+
return;
|
|
630
|
+
}
|
|
631
|
+
// Map each output from result to context
|
|
632
|
+
for (const [contextKey, resultPath] of Object.entries(step.outputMapping)) {
|
|
633
|
+
const value = extractValue(result, resultPath);
|
|
634
|
+
context[contextKey] = value;
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
/**
|
|
638
|
+
* Check if all step dependencies are met
|
|
639
|
+
*
|
|
640
|
+
* @param step - Workflow step to check
|
|
641
|
+
* @param execution - Current workflow execution state
|
|
642
|
+
* @returns True if all dependencies are met, false otherwise
|
|
643
|
+
* @private
|
|
644
|
+
*/
|
|
645
|
+
_areDependenciesMet(step, execution) {
|
|
646
|
+
if (!step.dependencies || step.dependencies.length === 0) {
|
|
647
|
+
return true; // No dependencies
|
|
648
|
+
}
|
|
649
|
+
// Check if all dependencies are in completed steps
|
|
650
|
+
for (const depId of step.dependencies) {
|
|
651
|
+
const depIndex = execution.definition.steps.findIndex((s) => s.id === depId);
|
|
652
|
+
if (depIndex === -1) {
|
|
653
|
+
// Dependency not found in workflow
|
|
654
|
+
return false;
|
|
655
|
+
}
|
|
656
|
+
if (depIndex >= execution.currentStepIndex) {
|
|
657
|
+
// Dependency hasn't been executed yet
|
|
658
|
+
return false;
|
|
659
|
+
}
|
|
660
|
+
const depResult = execution.stepResults[depIndex];
|
|
661
|
+
if (!depResult || !depResult.success) {
|
|
662
|
+
// Dependency failed or hasn't completed
|
|
663
|
+
return false;
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
return true;
|
|
667
|
+
}
|
|
668
|
+
/**
|
|
669
|
+
* Evaluate a step condition
|
|
670
|
+
*
|
|
671
|
+
* @param step - Workflow step with condition
|
|
672
|
+
* @param context - Workflow context
|
|
673
|
+
* @returns True if condition evaluates to true or no condition exists
|
|
674
|
+
* @private
|
|
675
|
+
*/
|
|
676
|
+
_shouldExecuteStep(step, context) {
|
|
677
|
+
if (!step.condition) {
|
|
678
|
+
return true; // No condition means always execute
|
|
679
|
+
}
|
|
680
|
+
return evaluateCondition(step.condition, context);
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
//# sourceMappingURL=linear-orchestrator.js.map
|