@travisliu/open-dynamic-workflow 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/LICENSE +21 -0
- package/README.md +312 -0
- package/dist/agents/antigravity-cli.d.ts +19 -0
- package/dist/agents/antigravity-cli.js +177 -0
- package/dist/agents/antigravity-cli.js.map +1 -0
- package/dist/agents/codex-exec.d.ts +12 -0
- package/dist/agents/codex-exec.js +283 -0
- package/dist/agents/codex-exec.js.map +1 -0
- package/dist/agents/execute-agent.d.ts +21 -0
- package/dist/agents/execute-agent.js +593 -0
- package/dist/agents/execute-agent.js.map +1 -0
- package/dist/agents/execution-types.d.ts +20 -0
- package/dist/agents/execution-types.js +2 -0
- package/dist/agents/execution-types.js.map +1 -0
- package/dist/agents/gemini-cli.d.ts +14 -0
- package/dist/agents/gemini-cli.js +176 -0
- package/dist/agents/gemini-cli.js.map +1 -0
- package/dist/agents/github-copilot-cli.d.ts +16 -0
- package/dist/agents/github-copilot-cli.js +256 -0
- package/dist/agents/github-copilot-cli.js.map +1 -0
- package/dist/agents/mock-adapter.d.ts +12 -0
- package/dist/agents/mock-adapter.js +66 -0
- package/dist/agents/mock-adapter.js.map +1 -0
- package/dist/agents/model-args.d.ts +2 -0
- package/dist/agents/model-args.js +15 -0
- package/dist/agents/model-args.js.map +1 -0
- package/dist/agents/opencode-cli.d.ts +22 -0
- package/dist/agents/opencode-cli.js +245 -0
- package/dist/agents/opencode-cli.js.map +1 -0
- package/dist/agents/pi-coding-agent.d.ts +31 -0
- package/dist/agents/pi-coding-agent.js +317 -0
- package/dist/agents/pi-coding-agent.js.map +1 -0
- package/dist/agents/process-runner.d.ts +2 -0
- package/dist/agents/process-runner.js +130 -0
- package/dist/agents/process-runner.js.map +1 -0
- package/dist/agents/provider-health.d.ts +3 -0
- package/dist/agents/provider-health.js +30 -0
- package/dist/agents/provider-health.js.map +1 -0
- package/dist/agents/registry.d.ts +12 -0
- package/dist/agents/registry.js +45 -0
- package/dist/agents/registry.js.map +1 -0
- package/dist/agents/resolve-model.d.ts +11 -0
- package/dist/agents/resolve-model.js +30 -0
- package/dist/agents/resolve-model.js.map +1 -0
- package/dist/agents/types.d.ts +2 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/artifacts/call-cache.d.ts +117 -0
- package/dist/artifacts/call-cache.js +449 -0
- package/dist/artifacts/call-cache.js.map +1 -0
- package/dist/artifacts/logs.d.ts +13 -0
- package/dist/artifacts/logs.js +24 -0
- package/dist/artifacts/logs.js.map +1 -0
- package/dist/artifacts/manifest.d.ts +18 -0
- package/dist/artifacts/manifest.js +29 -0
- package/dist/artifacts/manifest.js.map +1 -0
- package/dist/artifacts/run-store.d.ts +22 -0
- package/dist/artifacts/run-store.js +148 -0
- package/dist/artifacts/run-store.js.map +1 -0
- package/dist/bin/open-dynamic-workflow.d.ts +2 -0
- package/dist/bin/open-dynamic-workflow.js +45 -0
- package/dist/bin/open-dynamic-workflow.js.map +1 -0
- package/dist/cli/args.d.ts +36 -0
- package/dist/cli/args.js +68 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +9 -0
- package/dist/cli/commands/doctor.js +109 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/init.d.ts +23 -0
- package/dist/cli/commands/init.js +147 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/list.d.ts +12 -0
- package/dist/cli/commands/list.js +65 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/resume.d.ts +5 -0
- package/dist/cli/commands/resume.js +81 -0
- package/dist/cli/commands/resume.js.map +1 -0
- package/dist/cli/commands/run.d.ts +18 -0
- package/dist/cli/commands/run.js +318 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +14 -0
- package/dist/cli/commands/validate.js +66 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +169 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init/defaults.d.ts +12 -0
- package/dist/cli/init/defaults.js +54 -0
- package/dist/cli/init/defaults.js.map +1 -0
- package/dist/cli/init/planner.d.ts +10 -0
- package/dist/cli/init/planner.js +163 -0
- package/dist/cli/init/planner.js.map +1 -0
- package/dist/cli/init/prompts.d.ts +15 -0
- package/dist/cli/init/prompts.js +83 -0
- package/dist/cli/init/prompts.js.map +1 -0
- package/dist/cli/init/providers.d.ts +13 -0
- package/dist/cli/init/providers.js +100 -0
- package/dist/cli/init/providers.js.map +1 -0
- package/dist/cli/init/renderer.d.ts +8 -0
- package/dist/cli/init/renderer.js +84 -0
- package/dist/cli/init/renderer.js.map +1 -0
- package/dist/cli/init/smoke-test.d.ts +15 -0
- package/dist/cli/init/smoke-test.js +47 -0
- package/dist/cli/init/smoke-test.js.map +1 -0
- package/dist/cli/init/summary.d.ts +11 -0
- package/dist/cli/init/summary.js +65 -0
- package/dist/cli/init/summary.js.map +1 -0
- package/dist/cli/init/types.d.ts +81 -0
- package/dist/cli/init/types.js +2 -0
- package/dist/cli/init/types.js.map +1 -0
- package/dist/cli/init/writer.d.ts +3 -0
- package/dist/cli/init/writer.js +57 -0
- package/dist/cli/init/writer.js.map +1 -0
- package/dist/cli/package-info.d.ts +1 -0
- package/dist/cli/package-info.js +13 -0
- package/dist/cli/package-info.js.map +1 -0
- package/dist/cli/paths.d.ts +2 -0
- package/dist/cli/paths.js +8 -0
- package/dist/cli/paths.js.map +1 -0
- package/dist/cli/print.d.ts +22 -0
- package/dist/cli/print.js +48 -0
- package/dist/cli/print.js.map +1 -0
- package/dist/config/defaults.d.ts +3 -0
- package/dist/config/defaults.js +116 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/load.d.ts +10 -0
- package/dist/config/load.js +72 -0
- package/dist/config/load.js.map +1 -0
- package/dist/config/merge.d.ts +10 -0
- package/dist/config/merge.js +58 -0
- package/dist/config/merge.js.map +1 -0
- package/dist/config/schema.d.ts +2 -0
- package/dist/config/schema.js +236 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/types.d.ts +93 -0
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -0
- package/dist/discovery/collect-files.d.ts +10 -0
- package/dist/discovery/collect-files.js +189 -0
- package/dist/discovery/collect-files.js.map +1 -0
- package/dist/discovery/definition-call.d.ts +10 -0
- package/dist/discovery/definition-call.js +37 -0
- package/dist/discovery/definition-call.js.map +1 -0
- package/dist/discovery/diagnostics.d.ts +17 -0
- package/dist/discovery/diagnostics.js +32 -0
- package/dist/discovery/diagnostics.js.map +1 -0
- package/dist/discovery/directories.d.ts +8 -0
- package/dist/discovery/directories.js +32 -0
- package/dist/discovery/directories.js.map +1 -0
- package/dist/discovery/duplicate-detector.d.ts +8 -0
- package/dist/discovery/duplicate-detector.js +40 -0
- package/dist/discovery/duplicate-detector.js.map +1 -0
- package/dist/discovery/extract-agent.d.ts +2 -0
- package/dist/discovery/extract-agent.js +166 -0
- package/dist/discovery/extract-agent.js.map +1 -0
- package/dist/discovery/extract-tool.d.ts +2 -0
- package/dist/discovery/extract-tool.js +188 -0
- package/dist/discovery/extract-tool.js.map +1 -0
- package/dist/discovery/extract-workflow.d.ts +2 -0
- package/dist/discovery/extract-workflow.js +180 -0
- package/dist/discovery/extract-workflow.js.map +1 -0
- package/dist/discovery/file-patterns.d.ts +3 -0
- package/dist/discovery/file-patterns.js +93 -0
- package/dist/discovery/file-patterns.js.map +1 -0
- package/dist/discovery/index.d.ts +7 -0
- package/dist/discovery/index.js +8 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/discovery/schema-summary.d.ts +13 -0
- package/dist/discovery/schema-summary.js +37 -0
- package/dist/discovery/schema-summary.js.map +1 -0
- package/dist/discovery/service.d.ts +4 -0
- package/dist/discovery/service.js +135 -0
- package/dist/discovery/service.js.map +1 -0
- package/dist/discovery/static-values.d.ts +13 -0
- package/dist/discovery/static-values.js +68 -0
- package/dist/discovery/static-values.js.map +1 -0
- package/dist/discovery/types.d.ts +95 -0
- package/dist/discovery/types.js +2 -0
- package/dist/discovery/types.js.map +1 -0
- package/dist/doctors/public.d.ts +15 -0
- package/dist/doctors/public.js +2 -0
- package/dist/doctors/public.js.map +1 -0
- package/dist/errors/codes.d.ts +53 -0
- package/dist/errors/codes.js +53 -0
- package/dist/errors/codes.js.map +1 -0
- package/dist/errors/exit-codes.d.ts +13 -0
- package/dist/errors/exit-codes.js +72 -0
- package/dist/errors/exit-codes.js.map +1 -0
- package/dist/errors/list-errors.d.ts +4 -0
- package/dist/errors/list-errors.js +11 -0
- package/dist/errors/list-errors.js.map +1 -0
- package/dist/errors/serialize.d.ts +2 -0
- package/dist/errors/serialize.js +38 -0
- package/dist/errors/serialize.js.map +1 -0
- package/dist/errors/types.d.ts +15 -0
- package/dist/errors/types.js +13 -0
- package/dist/errors/types.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/orchestration/cancellation.d.ts +13 -0
- package/dist/orchestration/cancellation.js +41 -0
- package/dist/orchestration/cancellation.js.map +1 -0
- package/dist/orchestration/event-bus.d.ts +24 -0
- package/dist/orchestration/event-bus.js +50 -0
- package/dist/orchestration/event-bus.js.map +1 -0
- package/dist/orchestration/fail-fast.d.ts +8 -0
- package/dist/orchestration/fail-fast.js +21 -0
- package/dist/orchestration/fail-fast.js.map +1 -0
- package/dist/orchestration/scheduler.d.ts +37 -0
- package/dist/orchestration/scheduler.js +330 -0
- package/dist/orchestration/scheduler.js.map +1 -0
- package/dist/orchestration/tool-limiter.d.ts +10 -0
- package/dist/orchestration/tool-limiter.js +62 -0
- package/dist/orchestration/tool-limiter.js.map +1 -0
- package/dist/output/events.d.ts +290 -0
- package/dist/output/events.js +10 -0
- package/dist/output/events.js.map +1 -0
- package/dist/output/failed-artifacts.d.ts +5 -0
- package/dist/output/failed-artifacts.js +62 -0
- package/dist/output/failed-artifacts.js.map +1 -0
- package/dist/output/json-reporter.d.ts +13 -0
- package/dist/output/json-reporter.js +31 -0
- package/dist/output/json-reporter.js.map +1 -0
- package/dist/output/jsonl-reporter.d.ts +12 -0
- package/dist/output/jsonl-reporter.js +29 -0
- package/dist/output/jsonl-reporter.js.map +1 -0
- package/dist/output/list-json-reporter.d.ts +9 -0
- package/dist/output/list-json-reporter.js +22 -0
- package/dist/output/list-json-reporter.js.map +1 -0
- package/dist/output/list-jsonl-reporter.d.ts +9 -0
- package/dist/output/list-jsonl-reporter.js +43 -0
- package/dist/output/list-jsonl-reporter.js.map +1 -0
- package/dist/output/list-pretty-reporter.d.ts +13 -0
- package/dist/output/list-pretty-reporter.js +120 -0
- package/dist/output/list-pretty-reporter.js.map +1 -0
- package/dist/output/list-reporter.d.ts +14 -0
- package/dist/output/list-reporter.js +20 -0
- package/dist/output/list-reporter.js.map +1 -0
- package/dist/output/pretty-format.d.ts +19 -0
- package/dist/output/pretty-format.js +75 -0
- package/dist/output/pretty-format.js.map +1 -0
- package/dist/output/pretty-renderer.d.ts +2 -0
- package/dist/output/pretty-renderer.js +97 -0
- package/dist/output/pretty-renderer.js.map +1 -0
- package/dist/output/pretty-reporter.d.ts +14 -0
- package/dist/output/pretty-reporter.js +155 -0
- package/dist/output/pretty-reporter.js.map +1 -0
- package/dist/output/pretty-view-builder.d.ts +26 -0
- package/dist/output/pretty-view-builder.js +374 -0
- package/dist/output/pretty-view-builder.js.map +1 -0
- package/dist/output/pretty-view.d.ts +85 -0
- package/dist/output/pretty-view.js +6 -0
- package/dist/output/pretty-view.js.map +1 -0
- package/dist/output/reporter.d.ts +34 -0
- package/dist/output/reporter.js +24 -0
- package/dist/output/reporter.js.map +1 -0
- package/dist/output/verbose-formatter.d.ts +6 -0
- package/dist/output/verbose-formatter.js +137 -0
- package/dist/output/verbose-formatter.js.map +1 -0
- package/dist/pipeline/artifacts.d.ts +6 -0
- package/dist/pipeline/artifacts.js +44 -0
- package/dist/pipeline/artifacts.js.map +1 -0
- package/dist/pipeline/concurrency.d.ts +11 -0
- package/dist/pipeline/concurrency.js +60 -0
- package/dist/pipeline/concurrency.js.map +1 -0
- package/dist/pipeline/context.d.ts +15 -0
- package/dist/pipeline/context.js +17 -0
- package/dist/pipeline/context.js.map +1 -0
- package/dist/pipeline/events.d.ts +10 -0
- package/dist/pipeline/events.js +83 -0
- package/dist/pipeline/events.js.map +1 -0
- package/dist/pipeline/id.d.ts +10 -0
- package/dist/pipeline/id.js +61 -0
- package/dist/pipeline/id.js.map +1 -0
- package/dist/pipeline/item-streaming.d.ts +3 -0
- package/dist/pipeline/item-streaming.js +122 -0
- package/dist/pipeline/item-streaming.js.map +1 -0
- package/dist/pipeline/results.d.ts +10 -0
- package/dist/pipeline/results.js +88 -0
- package/dist/pipeline/results.js.map +1 -0
- package/dist/pipeline/run.d.ts +10 -0
- package/dist/pipeline/run.js +93 -0
- package/dist/pipeline/run.js.map +1 -0
- package/dist/pipeline/stage-barrier.d.ts +3 -0
- package/dist/pipeline/stage-barrier.js +135 -0
- package/dist/pipeline/stage-barrier.js.map +1 -0
- package/dist/pipeline/stage-runner.d.ts +13 -0
- package/dist/pipeline/stage-runner.js +185 -0
- package/dist/pipeline/stage-runner.js.map +1 -0
- package/dist/pipeline/summary.d.ts +12 -0
- package/dist/pipeline/summary.js +24 -0
- package/dist/pipeline/summary.js.map +1 -0
- package/dist/pipeline/types.d.ts +92 -0
- package/dist/pipeline/types.js +2 -0
- package/dist/pipeline/types.js.map +1 -0
- package/dist/pipeline/validate.d.ts +11 -0
- package/dist/pipeline/validate.js +139 -0
- package/dist/pipeline/validate.js.map +1 -0
- package/dist/runtime/public.d.ts +3 -0
- package/dist/runtime/public.js +4 -0
- package/dist/runtime/public.js.map +1 -0
- package/dist/security/env.d.ts +38 -0
- package/dist/security/env.js +186 -0
- package/dist/security/env.js.map +1 -0
- package/dist/security/metadata.d.ts +6 -0
- package/dist/security/metadata.js +41 -0
- package/dist/security/metadata.js.map +1 -0
- package/dist/shared-agents/context.d.ts +2 -0
- package/dist/shared-agents/context.js +5 -0
- package/dist/shared-agents/context.js.map +1 -0
- package/dist/shared-agents/define-agent.d.ts +3 -0
- package/dist/shared-agents/define-agent.js +15 -0
- package/dist/shared-agents/define-agent.js.map +1 -0
- package/dist/shared-agents/execute.d.ts +24 -0
- package/dist/shared-agents/execute.js +63 -0
- package/dist/shared-agents/execute.js.map +1 -0
- package/dist/shared-agents/index.d.ts +5 -0
- package/dist/shared-agents/index.js +6 -0
- package/dist/shared-agents/index.js.map +1 -0
- package/dist/shared-agents/load.d.ts +8 -0
- package/dist/shared-agents/load.js +141 -0
- package/dist/shared-agents/load.js.map +1 -0
- package/dist/shared-agents/registry.d.ts +8 -0
- package/dist/shared-agents/registry.js +25 -0
- package/dist/shared-agents/registry.js.map +1 -0
- package/dist/shared-agents/render.d.ts +11 -0
- package/dist/shared-agents/render.js +31 -0
- package/dist/shared-agents/render.js.map +1 -0
- package/dist/shared-agents/resolver.d.ts +7 -0
- package/dist/shared-agents/resolver.js +22 -0
- package/dist/shared-agents/resolver.js.map +1 -0
- package/dist/shared-agents/types.d.ts +33 -0
- package/dist/shared-agents/types.js +2 -0
- package/dist/shared-agents/types.js.map +1 -0
- package/dist/shared-agents/validate.d.ts +7 -0
- package/dist/shared-agents/validate.js +223 -0
- package/dist/shared-agents/validate.js.map +1 -0
- package/dist/structured/extract-json.d.ts +11 -0
- package/dist/structured/extract-json.js +79 -0
- package/dist/structured/extract-json.js.map +1 -0
- package/dist/structured/normalize-agent-output.d.ts +18 -0
- package/dist/structured/normalize-agent-output.js +89 -0
- package/dist/structured/normalize-agent-output.js.map +1 -0
- package/dist/structured/structured-output.d.ts +14 -0
- package/dist/structured/structured-output.js +51 -0
- package/dist/structured/structured-output.js.map +1 -0
- package/dist/structured/validate-json.d.ts +13 -0
- package/dist/structured/validate-json.js +32 -0
- package/dist/structured/validate-json.js.map +1 -0
- package/dist/tools/artifacts.d.ts +8 -0
- package/dist/tools/artifacts.js +31 -0
- package/dist/tools/artifacts.js.map +1 -0
- package/dist/tools/define-tool.d.ts +10 -0
- package/dist/tools/define-tool.js +24 -0
- package/dist/tools/define-tool.js.map +1 -0
- package/dist/tools/executor-types.d.ts +40 -0
- package/dist/tools/executor-types.js +2 -0
- package/dist/tools/executor-types.js.map +1 -0
- package/dist/tools/executor.d.ts +23 -0
- package/dist/tools/executor.js +455 -0
- package/dist/tools/executor.js.map +1 -0
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.js +5 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/load.d.ts +7 -0
- package/dist/tools/load.js +133 -0
- package/dist/tools/load.js.map +1 -0
- package/dist/tools/registry.d.ts +9 -0
- package/dist/tools/registry.js +97 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/serialization.d.ts +11 -0
- package/dist/tools/serialization.js +68 -0
- package/dist/tools/serialization.js.map +1 -0
- package/dist/tools/validate.d.ts +18 -0
- package/dist/tools/validate.js +55 -0
- package/dist/tools/validate.js.map +1 -0
- package/dist/types/agent.d.ts +136 -0
- package/dist/types/agent.js +2 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/artifacts.d.ts +88 -0
- package/dist/types/artifacts.js +2 -0
- package/dist/types/artifacts.js.map +1 -0
- package/dist/types/common.d.ts +15 -0
- package/dist/types/common.js +2 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/config.d.ts +119 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/errors.d.ts +21 -0
- package/dist/types/errors.js +50 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/events.d.ts +4 -0
- package/dist/types/events.js +2 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/index.js +12 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/process.d.ts +20 -0
- package/dist/types/process.js +2 -0
- package/dist/types/process.js.map +1 -0
- package/dist/types/reporter.d.ts +1 -0
- package/dist/types/reporter.js +2 -0
- package/dist/types/reporter.js.map +1 -0
- package/dist/types/scheduler.d.ts +30 -0
- package/dist/types/scheduler.js +2 -0
- package/dist/types/scheduler.js.map +1 -0
- package/dist/types/tool.d.ts +129 -0
- package/dist/types/tool.js +2 -0
- package/dist/types/tool.js.map +1 -0
- package/dist/types/workflow.d.ts +127 -0
- package/dist/types/workflow.js +2 -0
- package/dist/types/workflow.js.map +1 -0
- package/dist/workflow/discovery.d.ts +15 -0
- package/dist/workflow/discovery.js +134 -0
- package/dist/workflow/discovery.js.map +1 -0
- package/dist/workflow/dsl.d.ts +13 -0
- package/dist/workflow/dsl.js +683 -0
- package/dist/workflow/dsl.js.map +1 -0
- package/dist/workflow/errors.d.ts +18 -0
- package/dist/workflow/errors.js +33 -0
- package/dist/workflow/errors.js.map +1 -0
- package/dist/workflow/invocation-artifacts.d.ts +42 -0
- package/dist/workflow/invocation-artifacts.js +114 -0
- package/dist/workflow/invocation-artifacts.js.map +1 -0
- package/dist/workflow/invocation-manager.d.ts +31 -0
- package/dist/workflow/invocation-manager.js +516 -0
- package/dist/workflow/invocation-manager.js.map +1 -0
- package/dist/workflow/invocation-types.d.ts +63 -0
- package/dist/workflow/invocation-types.js +15 -0
- package/dist/workflow/invocation-types.js.map +1 -0
- package/dist/workflow/json.d.ts +10 -0
- package/dist/workflow/json.js +117 -0
- package/dist/workflow/json.js.map +1 -0
- package/dist/workflow/load.d.ts +2 -0
- package/dist/workflow/load.js +18 -0
- package/dist/workflow/load.js.map +1 -0
- package/dist/workflow/parse.d.ts +2 -0
- package/dist/workflow/parse.js +135 -0
- package/dist/workflow/parse.js.map +1 -0
- package/dist/workflow/registry.d.ts +18 -0
- package/dist/workflow/registry.js +55 -0
- package/dist/workflow/registry.js.map +1 -0
- package/dist/workflow/resolve-target.d.ts +45 -0
- package/dist/workflow/resolve-target.js +162 -0
- package/dist/workflow/resolve-target.js.map +1 -0
- package/dist/workflow/runtime.d.ts +46 -0
- package/dist/workflow/runtime.js +398 -0
- package/dist/workflow/runtime.js.map +1 -0
- package/dist/workflow/sandbox.d.ts +14 -0
- package/dist/workflow/sandbox.js +79 -0
- package/dist/workflow/sandbox.js.map +1 -0
- package/dist/workflow/scope.d.ts +18 -0
- package/dist/workflow/scope.js +108 -0
- package/dist/workflow/scope.js.map +1 -0
- package/dist/workflow/types.d.ts +65 -0
- package/dist/workflow/types.js +2 -0
- package/dist/workflow/types.js.map +1 -0
- package/dist/workflow/validate.d.ts +28 -0
- package/dist/workflow/validate.js +1059 -0
- package/dist/workflow/validate.js.map +1 -0
- package/dist/workflow/workflow-call.d.ts +12 -0
- package/dist/workflow/workflow-call.js +61 -0
- package/dist/workflow/workflow-call.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { Command } from "commander";
|
|
4
|
+
import { initCommand } from "./commands/init.js";
|
|
5
|
+
import { runCommand } from "./commands/run.js";
|
|
6
|
+
import { resumeCommand } from "./commands/resume.js";
|
|
7
|
+
import { validateCommand } from "./commands/validate.js";
|
|
8
|
+
import { doctorCommand } from "./commands/doctor.js";
|
|
9
|
+
import { listCommand } from "./commands/list.js";
|
|
10
|
+
import { OpenDynamicWorkflowError } from "../errors/types.js";
|
|
11
|
+
import { ErrorCode } from "../errors/codes.js";
|
|
12
|
+
import { getPackageVersion } from "./package-info.js";
|
|
13
|
+
function collectArgs(value, previous) {
|
|
14
|
+
return previous.concat([value]);
|
|
15
|
+
}
|
|
16
|
+
export async function main(argv) {
|
|
17
|
+
const program = new Command();
|
|
18
|
+
const version = await getPackageVersion();
|
|
19
|
+
// Detect if invoked via odw or the full name
|
|
20
|
+
const binName = argv[1] ? path.basename(argv[1]) : "odw";
|
|
21
|
+
const displayName = binName.startsWith("odw") ? "odw" : "open-dynamic-workflow";
|
|
22
|
+
program
|
|
23
|
+
.name(displayName)
|
|
24
|
+
.description("Orchestrate coding-agent CLI workflows (alias: odw)")
|
|
25
|
+
.version(version)
|
|
26
|
+
.exitOverride((err) => {
|
|
27
|
+
if (err.code === "commander.helpDisplayed" || err.code === "commander.help" || err.code === "commander.version") {
|
|
28
|
+
throw err;
|
|
29
|
+
}
|
|
30
|
+
// Throw CLI usage error on command parsing errors
|
|
31
|
+
throw new OpenDynamicWorkflowError(ErrorCode.CLI_USAGE_ERROR, err.message, { cause: err });
|
|
32
|
+
});
|
|
33
|
+
program
|
|
34
|
+
.command("init")
|
|
35
|
+
.description("Initialize a project for Open Dynamic Workflow")
|
|
36
|
+
.option("--yes", "Run non-interactively with defaults")
|
|
37
|
+
.option("--provider <name>", "Default provider for generated config")
|
|
38
|
+
.option("--force", "Overwrite generated files if they already exist")
|
|
39
|
+
.option("--strict", "Fail before writing if any target path already exists")
|
|
40
|
+
.option("--run-smoke-test", "Validate and run the generated example workflow with mock")
|
|
41
|
+
.option("-r, --report <mode>", "Smoke-test report mode (pretty, json)")
|
|
42
|
+
.option("--cwd <path>", "Project working directory")
|
|
43
|
+
.option("--workflows-dir <path>", "Generated workflows directory")
|
|
44
|
+
.option("--agents-dir <path>", "Shared agents directory")
|
|
45
|
+
.option("--tools-dir <path>", "Tools directory")
|
|
46
|
+
.addHelpText("after", `
|
|
47
|
+
Examples:
|
|
48
|
+
${displayName} init
|
|
49
|
+
${displayName} init --yes
|
|
50
|
+
${displayName} init --yes --run-smoke-test
|
|
51
|
+
${displayName} init --strict
|
|
52
|
+
${displayName} init --force --provider codex
|
|
53
|
+
`)
|
|
54
|
+
.action(async (options) => {
|
|
55
|
+
await initCommand({ rawOptions: options });
|
|
56
|
+
});
|
|
57
|
+
program
|
|
58
|
+
.command("list [resourceType]")
|
|
59
|
+
.description("List discoverable workflows, shared agents, and tools")
|
|
60
|
+
.option("--dir <path>", "Directory to scan for targeted list commands")
|
|
61
|
+
.option("--workflows-dir <path>", "Directory to scan for workflows")
|
|
62
|
+
.option("--agents-dir <path>", "Directory to scan for shared agents")
|
|
63
|
+
.option("--tools-dir <path>", "Directory to scan for tools")
|
|
64
|
+
.option("-r, --report <mode>", "Output format (pretty, json, jsonl)")
|
|
65
|
+
.option("-v, --verbose", "Show extended metadata")
|
|
66
|
+
.option("--strict", "Fail if any discovered file is invalid")
|
|
67
|
+
.option("-c, --config <path>", "Path to config file")
|
|
68
|
+
.option("--cwd <path>", "Project working directory")
|
|
69
|
+
.addHelpText("after", `
|
|
70
|
+
Examples:
|
|
71
|
+
${displayName} list
|
|
72
|
+
${displayName} list workflows
|
|
73
|
+
${displayName} list agents --verbose
|
|
74
|
+
${displayName} list tools --report json
|
|
75
|
+
${displayName} list --strict
|
|
76
|
+
${displayName} list workflows --dir examples/workflows
|
|
77
|
+
`)
|
|
78
|
+
.action(async (resourceType, options) => {
|
|
79
|
+
await listCommand({ resourceType, rawOptions: options });
|
|
80
|
+
});
|
|
81
|
+
program
|
|
82
|
+
.command("run")
|
|
83
|
+
.argument("<workflow-name-or-file>", "Workflow name or workflow file path")
|
|
84
|
+
.option("-p, --provider <name>", "Default agent provider name")
|
|
85
|
+
.option("-m, --model <model>", "Default model for agent calls")
|
|
86
|
+
.option("-a, --arg <key=value>", "Workflow input argument (can be repeated)", collectArgs, [])
|
|
87
|
+
.option("-c, --config <path>", "Path to config file")
|
|
88
|
+
.option("--cwd <path>", "Custom working directory")
|
|
89
|
+
.option("-o, --out <path>", "Runs artifact directory")
|
|
90
|
+
.option("-r, --report <mode>", "Reporter mode (pretty, json, jsonl)")
|
|
91
|
+
.option("--concurrency <number>", "Maximum parallel concurrency")
|
|
92
|
+
.option("--timeout-ms <ms>", "Workflow run timeout in ms")
|
|
93
|
+
.option("--resume <run-id-or-path>", "Resume from a previous run cache")
|
|
94
|
+
.option("--no-cache", "Disable resume/cache lookup and cache index updates")
|
|
95
|
+
.option("--dry-run", "Validate and print summary without invoking providers")
|
|
96
|
+
.option("--fail-fast", "Stop immediately on first agent step failure")
|
|
97
|
+
.option("-v, --verbose", "Enable verbose logging")
|
|
98
|
+
.addHelpText("after", `
|
|
99
|
+
Examples:
|
|
100
|
+
${displayName} run my-workflow
|
|
101
|
+
${displayName} run my-workflow --provider gemini
|
|
102
|
+
${displayName} run my-workflow --arg key1=val1 --arg key2=val2
|
|
103
|
+
${displayName} run my-workflow --report json
|
|
104
|
+
${displayName} run my-workflow --dry-run
|
|
105
|
+
`)
|
|
106
|
+
.action(async (workflowFile, options) => {
|
|
107
|
+
await runCommand({ workflowFile, rawOptions: options });
|
|
108
|
+
});
|
|
109
|
+
program
|
|
110
|
+
.command("resume")
|
|
111
|
+
.argument("<run-id-or-path>", "Previous run id or run directory path")
|
|
112
|
+
.option("--cwd <path>", "Custom working directory")
|
|
113
|
+
.option("-o, --out <path>", "Runs artifact directory")
|
|
114
|
+
.option("-r, --report <mode>", "Reporter mode (pretty, json, jsonl)")
|
|
115
|
+
.option("--no-cache", "Disable resume/cache lookup and cache index updates")
|
|
116
|
+
.addHelpText("after", `
|
|
117
|
+
Examples:
|
|
118
|
+
${displayName} resume last-run
|
|
119
|
+
${displayName} resume .open-dynamic-workflow/runs/2025-01-01T00-00-00Z
|
|
120
|
+
${displayName} resume last-run --report pretty
|
|
121
|
+
`)
|
|
122
|
+
.action(async (runIdOrPath, options) => {
|
|
123
|
+
await resumeCommand({ runIdOrPath, rawOptions: options });
|
|
124
|
+
});
|
|
125
|
+
program
|
|
126
|
+
.command("validate")
|
|
127
|
+
.argument("<workflow-name-or-file>", "Workflow name or workflow file path")
|
|
128
|
+
.option("-c, --config <path>", "Path to config file")
|
|
129
|
+
.option("--cwd <path>", "Custom working directory")
|
|
130
|
+
.option("-v, --verbose", "Enable verbose logging")
|
|
131
|
+
.addHelpText("after", `
|
|
132
|
+
Examples:
|
|
133
|
+
${displayName} validate my-workflow
|
|
134
|
+
${displayName} validate workflows/my-workflow.ts
|
|
135
|
+
${displayName} validate my-workflow --verbose
|
|
136
|
+
`)
|
|
137
|
+
.action(async (target, options) => {
|
|
138
|
+
if (!target) {
|
|
139
|
+
throw new OpenDynamicWorkflowError(ErrorCode.CLI_USAGE_ERROR, "Missing <workflow-name-or-file>");
|
|
140
|
+
}
|
|
141
|
+
await validateCommand({ workflowFile: target, rawOptions: options });
|
|
142
|
+
});
|
|
143
|
+
program
|
|
144
|
+
.command("doctor")
|
|
145
|
+
.option("-c, --config <path>", "Path to config file")
|
|
146
|
+
.option("--cwd <path>", "Custom working directory")
|
|
147
|
+
.option("-v, --verbose", "Enable verbose logging")
|
|
148
|
+
.addHelpText("after", `
|
|
149
|
+
Examples:
|
|
150
|
+
${displayName} doctor
|
|
151
|
+
${displayName} doctor --verbose
|
|
152
|
+
`)
|
|
153
|
+
.action(async (options) => {
|
|
154
|
+
await doctorCommand({ rawOptions: options });
|
|
155
|
+
});
|
|
156
|
+
let parseOptions = undefined;
|
|
157
|
+
if (argv.length >= 2 &&
|
|
158
|
+
(argv[0] === "node" ||
|
|
159
|
+
argv[0]?.endsWith("node") ||
|
|
160
|
+
argv[0]?.endsWith("npm") ||
|
|
161
|
+
argv[0]?.includes("/bin/"))) {
|
|
162
|
+
parseOptions = { from: "node" };
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
parseOptions = { from: "user" };
|
|
166
|
+
}
|
|
167
|
+
await program.parseAsync(argv, parseOptions);
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,SAAS,WAAW,CAAC,KAAa,EAAE,QAAkB;IACpD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAc;IACvC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAE1C,6CAA6C;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACzD,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,uBAAuB,CAAC;IAEhF,OAAO;SACJ,IAAI,CAAC,WAAW,CAAC;SACjB,WAAW,CAAC,qDAAqD,CAAC;SAClE,OAAO,CAAC,OAAO,CAAC;SAChB,YAAY,CAAC,CAAC,GAAG,EAAE,EAAE;QACpB,IAAI,GAAG,CAAC,IAAI,KAAK,yBAAyB,IAAI,GAAG,CAAC,IAAI,KAAK,gBAAgB,IAAI,GAAG,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YAChH,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,kDAAkD;QAClD,MAAM,IAAI,wBAAwB,CAAC,SAAS,CAAC,eAAe,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,OAAO,EAAE,qCAAqC,CAAC;SACtD,MAAM,CAAC,mBAAmB,EAAE,uCAAuC,CAAC;SACpE,MAAM,CAAC,SAAS,EAAE,iDAAiD,CAAC;SACpE,MAAM,CAAC,UAAU,EAAE,uDAAuD,CAAC;SAC3E,MAAM,CAAC,kBAAkB,EAAE,2DAA2D,CAAC;SACvF,MAAM,CAAC,qBAAqB,EAAE,uCAAuC,CAAC;SACtE,MAAM,CAAC,cAAc,EAAE,2BAA2B,CAAC;SACnD,MAAM,CAAC,wBAAwB,EAAE,+BAA+B,CAAC;SACjE,MAAM,CAAC,qBAAqB,EAAE,yBAAyB,CAAC;SACxD,MAAM,CAAC,oBAAoB,EAAE,iBAAiB,CAAC;SAC/C,WAAW,CACV,OAAO,EACP;;IAEF,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;CACd,CACI;SACA,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,WAAW,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,qBAAqB,CAAC;SAC9B,WAAW,CAAC,uDAAuD,CAAC;SACpE,MAAM,CAAC,cAAc,EAAE,8CAA8C,CAAC;SACtE,MAAM,CAAC,wBAAwB,EAAE,iCAAiC,CAAC;SACnE,MAAM,CAAC,qBAAqB,EAAE,qCAAqC,CAAC;SACpE,MAAM,CAAC,oBAAoB,EAAE,6BAA6B,CAAC;SAC3D,MAAM,CAAC,qBAAqB,EAAE,qCAAqC,CAAC;SACpE,MAAM,CAAC,eAAe,EAAE,wBAAwB,CAAC;SACjD,MAAM,CAAC,UAAU,EAAE,wCAAwC,CAAC;SAC5D,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;SACpD,MAAM,CAAC,cAAc,EAAE,2BAA2B,CAAC;SACnD,WAAW,CACV,OAAO,EACP;;IAEF,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;CACd,CACI;SACA,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE;QACtC,MAAM,WAAW,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,yBAAyB,EAAE,qCAAqC,CAAC;SAC1E,MAAM,CAAC,uBAAuB,EAAE,6BAA6B,CAAC;SAC9D,MAAM,CAAC,qBAAqB,EAAE,+BAA+B,CAAC;SAC9D,MAAM,CAAC,uBAAuB,EAAE,2CAA2C,EAAE,WAAW,EAAE,EAAE,CAAC;SAC7F,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;SACpD,MAAM,CAAC,cAAc,EAAE,0BAA0B,CAAC;SAClD,MAAM,CAAC,kBAAkB,EAAE,yBAAyB,CAAC;SACrD,MAAM,CAAC,qBAAqB,EAAE,qCAAqC,CAAC;SACpE,MAAM,CAAC,wBAAwB,EAAE,8BAA8B,CAAC;SAChE,MAAM,CAAC,mBAAmB,EAAE,4BAA4B,CAAC;SACzD,MAAM,CAAC,2BAA2B,EAAE,kCAAkC,CAAC;SACvE,MAAM,CAAC,YAAY,EAAE,qDAAqD,CAAC;SAC3E,MAAM,CAAC,WAAW,EAAE,uDAAuD,CAAC;SAC5E,MAAM,CAAC,aAAa,EAAE,8CAA8C,CAAC;SACrE,MAAM,CAAC,eAAe,EAAE,wBAAwB,CAAC;SACjD,WAAW,CACV,OAAO,EACP;;IAEF,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;CACd,CACI;SACA,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE;QACtC,MAAM,UAAU,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,QAAQ,CAAC,kBAAkB,EAAE,uCAAuC,CAAC;SACrE,MAAM,CAAC,cAAc,EAAE,0BAA0B,CAAC;SAClD,MAAM,CAAC,kBAAkB,EAAE,yBAAyB,CAAC;SACrD,MAAM,CAAC,qBAAqB,EAAE,qCAAqC,CAAC;SACpE,MAAM,CAAC,YAAY,EAAE,qDAAqD,CAAC;SAC3E,WAAW,CACV,OAAO,EACP;;IAEF,WAAW;IACX,WAAW;IACX,WAAW;CACd,CACI;SACA,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE;QACrC,MAAM,aAAa,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,QAAQ,CAAC,yBAAyB,EAAE,qCAAqC,CAAC;SAC1E,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;SACpD,MAAM,CAAC,cAAc,EAAE,0BAA0B,CAAC;SAClD,MAAM,CAAC,eAAe,EAAE,wBAAwB,CAAC;SACjD,WAAW,CACV,OAAO,EACP;;IAEF,WAAW;IACX,WAAW;IACX,WAAW;CACd,CACI;SACA,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QAChC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,wBAAwB,CAAC,SAAS,CAAC,eAAe,EAAE,iCAAiC,CAAC,CAAC;QACnG,CAAC;QACD,MAAM,eAAe,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;SACpD,MAAM,CAAC,cAAc,EAAE,0BAA0B,CAAC;SAClD,MAAM,CAAC,eAAe,EAAE,wBAAwB,CAAC;SACjD,WAAW,CACV,OAAO,EACP;;IAEF,WAAW;IACX,WAAW;CACd,CACI;SACA,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,aAAa,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEL,IAAI,YAAY,GAA0C,SAAS,CAAC;IACpE,IACE,IAAI,CAAC,MAAM,IAAI,CAAC;QAChB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM;YACjB,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC;YACzB,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;YACxB,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,EAC7B,CAAC;QACD,YAAY,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,YAAY,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAClC,CAAC;IAED,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { SupportedInitProvider, ProviderCandidate } from "./types.js";
|
|
2
|
+
export declare const SUPPORTED_INIT_PROVIDERS: SupportedInitProvider[];
|
|
3
|
+
export declare const RECOMMENDATION_ORDER: SupportedInitProvider[];
|
|
4
|
+
export declare const PROVIDER_CANDIDATES: Omit<ProviderCandidate, "detected">[];
|
|
5
|
+
export declare const DEFAULT_INIT_WORKFLOWS_DIR = "workflows";
|
|
6
|
+
export declare const DEFAULT_INIT_AGENTS_DIR = ".open-dynamic-workflow/agents";
|
|
7
|
+
export declare const DEFAULT_INIT_TOOLS_DIR = ".open-dynamic-workflow/tools";
|
|
8
|
+
export declare const DEFAULT_INIT_CONFIG_PATH = ".open-dynamic-workflow/config.yaml";
|
|
9
|
+
export declare const DEFAULT_INIT_EXAMPLE_FILE = "example.ts";
|
|
10
|
+
export declare function toDisplayPath(cwd: string, absolutePath: string): string;
|
|
11
|
+
export declare function resolveProjectPath(cwd: string, value: string, optionName: string): string;
|
|
12
|
+
export declare function workflowIncludePattern(workflowsDirDisplay: string): string;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { join, isAbsolute, relative, normalize } from "node:path";
|
|
2
|
+
import { ErrorCode } from "../../errors/codes.js";
|
|
3
|
+
import { OpenDynamicWorkflowError } from "../../errors/types.js";
|
|
4
|
+
export const SUPPORTED_INIT_PROVIDERS = [
|
|
5
|
+
"mock",
|
|
6
|
+
"codex",
|
|
7
|
+
"gemini",
|
|
8
|
+
"copilot",
|
|
9
|
+
"opencode",
|
|
10
|
+
"antigravity",
|
|
11
|
+
"pi"
|
|
12
|
+
];
|
|
13
|
+
export const RECOMMENDATION_ORDER = [
|
|
14
|
+
"codex",
|
|
15
|
+
"gemini",
|
|
16
|
+
"copilot",
|
|
17
|
+
"opencode",
|
|
18
|
+
"antigravity",
|
|
19
|
+
"pi",
|
|
20
|
+
"mock"
|
|
21
|
+
];
|
|
22
|
+
export const PROVIDER_CANDIDATES = [
|
|
23
|
+
{ name: "mock", command: null, builtIn: true, recommendedRank: 6 },
|
|
24
|
+
{ name: "codex", command: "codex", builtIn: false, recommendedRank: 0 },
|
|
25
|
+
{ name: "gemini", command: "gemini", builtIn: false, recommendedRank: 1 },
|
|
26
|
+
{ name: "copilot", command: "copilot", builtIn: false, recommendedRank: 2 },
|
|
27
|
+
{ name: "opencode", command: "opencode", builtIn: false, recommendedRank: 3 },
|
|
28
|
+
{ name: "antigravity", command: "agy", builtIn: false, recommendedRank: 4 },
|
|
29
|
+
{ name: "pi", command: "pi", builtIn: false, recommendedRank: 5 }
|
|
30
|
+
];
|
|
31
|
+
export const DEFAULT_INIT_WORKFLOWS_DIR = "workflows";
|
|
32
|
+
export const DEFAULT_INIT_AGENTS_DIR = ".open-dynamic-workflow/agents";
|
|
33
|
+
export const DEFAULT_INIT_TOOLS_DIR = ".open-dynamic-workflow/tools";
|
|
34
|
+
export const DEFAULT_INIT_CONFIG_PATH = ".open-dynamic-workflow/config.yaml";
|
|
35
|
+
export const DEFAULT_INIT_EXAMPLE_FILE = "example.ts";
|
|
36
|
+
export function toDisplayPath(cwd, absolutePath) {
|
|
37
|
+
const rel = relative(cwd, absolutePath);
|
|
38
|
+
return rel.split(/[\\/]/).join("/") || ".";
|
|
39
|
+
}
|
|
40
|
+
export function resolveProjectPath(cwd, value, optionName) {
|
|
41
|
+
if (!value) {
|
|
42
|
+
throw new OpenDynamicWorkflowError(ErrorCode.CLI_USAGE_ERROR, `Option "${optionName}" cannot be empty.`);
|
|
43
|
+
}
|
|
44
|
+
const absolute = isAbsolute(value) ? normalize(value) : join(cwd, value);
|
|
45
|
+
const rel = relative(cwd, absolute);
|
|
46
|
+
if (rel.startsWith("..") || isAbsolute(rel)) {
|
|
47
|
+
throw new OpenDynamicWorkflowError(ErrorCode.CLI_USAGE_ERROR, `Path "${value}" for "${optionName}" must be inside the project directory "${cwd}".`);
|
|
48
|
+
}
|
|
49
|
+
return absolute;
|
|
50
|
+
}
|
|
51
|
+
export function workflowIncludePattern(workflowsDirDisplay) {
|
|
52
|
+
return `${workflowsDirDisplay}/**/*.ts`;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../../src/cli/init/defaults.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ResolvedInitOptions, ProviderSelection, InitPlan, InitTarget, InitWriteAction } from "./types.js";
|
|
2
|
+
export declare function buildInitPlan(input: {
|
|
3
|
+
options: ResolvedInitOptions;
|
|
4
|
+
providerSelection: ProviderSelection;
|
|
5
|
+
}): Promise<InitPlan>;
|
|
6
|
+
export declare function resolveAction(target: InitTarget, exists: boolean, options: ResolvedInitOptions): InitWriteAction;
|
|
7
|
+
export declare function buildNextSteps(input: {
|
|
8
|
+
options: ResolvedInitOptions;
|
|
9
|
+
providerSelection: ProviderSelection;
|
|
10
|
+
}): string[];
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { join, dirname, relative, sep } from "node:path";
|
|
2
|
+
import { stat } from "node:fs/promises";
|
|
3
|
+
import { toDisplayPath, DEFAULT_INIT_CONFIG_PATH, DEFAULT_INIT_EXAMPLE_FILE } from "./defaults.js";
|
|
4
|
+
import { buildGeneratedConfig, renderGeneratedConfigYaml, renderExampleWorkflow } from "./renderer.js";
|
|
5
|
+
export async function buildInitPlan(input) {
|
|
6
|
+
const { options, providerSelection } = input;
|
|
7
|
+
const { cwd } = options;
|
|
8
|
+
const config = buildGeneratedConfig({
|
|
9
|
+
options,
|
|
10
|
+
selectedProvider: providerSelection.defaultProvider
|
|
11
|
+
});
|
|
12
|
+
const configYaml = renderGeneratedConfigYaml(config);
|
|
13
|
+
const workflowContent = renderExampleWorkflow();
|
|
14
|
+
const targets = [
|
|
15
|
+
{
|
|
16
|
+
kind: "file",
|
|
17
|
+
path: join(cwd, DEFAULT_INIT_CONFIG_PATH),
|
|
18
|
+
displayPath: DEFAULT_INIT_CONFIG_PATH,
|
|
19
|
+
content: configYaml,
|
|
20
|
+
overwrite: options.force,
|
|
21
|
+
requiredForStrict: true
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
kind: "directory",
|
|
25
|
+
path: options.agentsDir,
|
|
26
|
+
displayPath: toDisplayPath(cwd, options.agentsDir),
|
|
27
|
+
overwrite: false,
|
|
28
|
+
requiredForStrict: true
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
kind: "directory",
|
|
32
|
+
path: options.toolsDir,
|
|
33
|
+
displayPath: toDisplayPath(cwd, options.toolsDir),
|
|
34
|
+
overwrite: false,
|
|
35
|
+
requiredForStrict: true
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
kind: "directory",
|
|
39
|
+
path: options.workflowsDir,
|
|
40
|
+
displayPath: toDisplayPath(cwd, options.workflowsDir),
|
|
41
|
+
overwrite: false,
|
|
42
|
+
requiredForStrict: true
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
kind: "file",
|
|
46
|
+
path: join(options.workflowsDir, DEFAULT_INIT_EXAMPLE_FILE),
|
|
47
|
+
displayPath: join(toDisplayPath(cwd, options.workflowsDir), DEFAULT_INIT_EXAMPLE_FILE).split(/[\\/]/).join("/"),
|
|
48
|
+
content: workflowContent,
|
|
49
|
+
overwrite: options.force,
|
|
50
|
+
requiredForStrict: true
|
|
51
|
+
}
|
|
52
|
+
];
|
|
53
|
+
const plannedTargets = await Promise.all(targets.map(async (target) => {
|
|
54
|
+
let exists = false;
|
|
55
|
+
let existingKind;
|
|
56
|
+
try {
|
|
57
|
+
const stats = await stat(target.path);
|
|
58
|
+
exists = true;
|
|
59
|
+
if (stats.isDirectory()) {
|
|
60
|
+
existingKind = "directory";
|
|
61
|
+
}
|
|
62
|
+
else if (stats.isFile()) {
|
|
63
|
+
existingKind = "file";
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
existingKind = "other";
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// Does not exist
|
|
71
|
+
}
|
|
72
|
+
const action = resolveAction(target, exists, options);
|
|
73
|
+
let conflictReason;
|
|
74
|
+
if (target.kind === "directory" && exists && existingKind !== "directory") {
|
|
75
|
+
conflictReason = `Cannot reuse "${target.displayPath}" as a directory because it is a ${existingKind}.`;
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
...target,
|
|
79
|
+
exists,
|
|
80
|
+
existingKind,
|
|
81
|
+
action,
|
|
82
|
+
conflictReason
|
|
83
|
+
};
|
|
84
|
+
}));
|
|
85
|
+
// Secondary pass for all parent-path conflicts (including unplanned parents)
|
|
86
|
+
for (const target of plannedTargets) {
|
|
87
|
+
if (target.conflictReason)
|
|
88
|
+
continue;
|
|
89
|
+
const ancestors = getAncestors(cwd, target.path);
|
|
90
|
+
for (const ancestorPath of ancestors) {
|
|
91
|
+
try {
|
|
92
|
+
const stats = await stat(ancestorPath);
|
|
93
|
+
if (!stats.isDirectory()) {
|
|
94
|
+
const kind = stats.isFile() ? "file" : "other";
|
|
95
|
+
const ancestorDisplay = toDisplayPath(cwd, ancestorPath);
|
|
96
|
+
target.conflictReason = `Cannot create "${target.displayPath}" because parent path "${ancestorDisplay}" is a ${kind}, not a directory.`;
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// Parent does not exist, which is fine (it will be created)
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const strictConflicts = options.strict
|
|
106
|
+
? plannedTargets.filter((t) => t.requiredForStrict && t.exists)
|
|
107
|
+
: [];
|
|
108
|
+
const pathConflicts = plannedTargets.filter((t) => !!t.conflictReason);
|
|
109
|
+
const nextSteps = buildNextSteps({
|
|
110
|
+
options,
|
|
111
|
+
providerSelection
|
|
112
|
+
});
|
|
113
|
+
return {
|
|
114
|
+
cwd,
|
|
115
|
+
providerSelection,
|
|
116
|
+
targets: plannedTargets,
|
|
117
|
+
strictConflicts,
|
|
118
|
+
pathConflicts,
|
|
119
|
+
nextSteps
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
function getAncestors(cwd, targetPath) {
|
|
123
|
+
const ancestors = [];
|
|
124
|
+
let current = dirname(targetPath);
|
|
125
|
+
while (current !== cwd && current.length < targetPath.length) {
|
|
126
|
+
const rel = relative(cwd, current);
|
|
127
|
+
if (rel === ".." || rel.startsWith(".." + sep)) {
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
ancestors.push(current);
|
|
131
|
+
const parent = dirname(current);
|
|
132
|
+
if (parent === current)
|
|
133
|
+
break;
|
|
134
|
+
current = parent;
|
|
135
|
+
}
|
|
136
|
+
return ancestors.reverse(); // Top-down
|
|
137
|
+
}
|
|
138
|
+
export function resolveAction(target, exists, options) {
|
|
139
|
+
if (target.kind === "directory") {
|
|
140
|
+
if (!exists)
|
|
141
|
+
return "create";
|
|
142
|
+
return "reuse-directory";
|
|
143
|
+
}
|
|
144
|
+
if (!exists)
|
|
145
|
+
return "create";
|
|
146
|
+
if (options.force)
|
|
147
|
+
return "overwrite";
|
|
148
|
+
return "skip";
|
|
149
|
+
}
|
|
150
|
+
export function buildNextSteps(input) {
|
|
151
|
+
const { options, providerSelection } = input;
|
|
152
|
+
const workflowPath = toDisplayPath(options.cwd, join(options.workflowsDir, DEFAULT_INIT_EXAMPLE_FILE));
|
|
153
|
+
const steps = [
|
|
154
|
+
"odw doctor",
|
|
155
|
+
`odw validate ${workflowPath}`,
|
|
156
|
+
`odw run ${workflowPath} --provider mock`
|
|
157
|
+
];
|
|
158
|
+
if (providerSelection.defaultProvider !== "mock") {
|
|
159
|
+
steps.push(`odw run ${workflowPath} --provider ${providerSelection.defaultProvider}`);
|
|
160
|
+
}
|
|
161
|
+
return steps;
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=planner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planner.js","sourceRoot":"","sources":["../../../src/cli/init/planner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ProviderCandidate, ProviderSelection, InitPlan } from "./types.js";
|
|
2
|
+
export interface PromptInput {
|
|
3
|
+
stdin: NodeJS.ReadStream;
|
|
4
|
+
stdout: NodeJS.WritableStream;
|
|
5
|
+
}
|
|
6
|
+
export declare function promptProviderSelection({ stdin, stdout, candidates }: PromptInput & {
|
|
7
|
+
candidates: ProviderCandidate[];
|
|
8
|
+
}): Promise<ProviderSelection | "cancel">;
|
|
9
|
+
export declare function promptUnavailableRequestedProvider({ stdin, stdout, requested, candidates }: PromptInput & {
|
|
10
|
+
requested: string;
|
|
11
|
+
candidates: ProviderCandidate[];
|
|
12
|
+
}): Promise<ProviderSelection | "cancel">;
|
|
13
|
+
export declare function confirmInitPlan({ stdin, stdout, plan }: PromptInput & {
|
|
14
|
+
plan: InitPlan;
|
|
15
|
+
}): Promise<boolean>;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import * as readline from "node:readline/promises";
|
|
2
|
+
export async function promptProviderSelection({ stdin, stdout, candidates }) {
|
|
3
|
+
const rl = readline.createInterface({ input: stdin, output: stdout });
|
|
4
|
+
stdout.write("Detected provider CLIs:\n");
|
|
5
|
+
candidates.forEach(c => {
|
|
6
|
+
const status = c.detected ? "✓" : "✕";
|
|
7
|
+
stdout.write(` ${status} ${c.name.padEnd(12)} ${c.command || ""}\n`);
|
|
8
|
+
});
|
|
9
|
+
stdout.write("\n");
|
|
10
|
+
const recommendation = candidates.find(c => c.detected && !c.builtIn)?.name || "mock";
|
|
11
|
+
stdout.write(`Recommended default provider: ${recommendation}\n`);
|
|
12
|
+
const options = candidates.map(c => c.name);
|
|
13
|
+
const prompt = `Choose a default provider (${options.join("/")}) [${recommendation}] or 'c' to cancel: `;
|
|
14
|
+
try {
|
|
15
|
+
const answer = (await rl.question(prompt)).trim().toLowerCase();
|
|
16
|
+
rl.close();
|
|
17
|
+
if (answer === "c" || answer === "cancel")
|
|
18
|
+
return "cancel";
|
|
19
|
+
if (answer === "")
|
|
20
|
+
return { defaultProvider: recommendation, selectedReason: "interactive-choice" };
|
|
21
|
+
const selected = candidates.find(c => c.name === answer);
|
|
22
|
+
if (selected) {
|
|
23
|
+
return {
|
|
24
|
+
defaultProvider: selected.name,
|
|
25
|
+
selectedReason: "interactive-choice"
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
stdout.write(`Invalid selection: ${answer}. Falling back to recommendation.\n`);
|
|
29
|
+
return { defaultProvider: recommendation, selectedReason: "interactive-choice" };
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
rl.close();
|
|
33
|
+
return "cancel";
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export async function promptUnavailableRequestedProvider({ stdin, stdout, requested, candidates }) {
|
|
37
|
+
const rl = readline.createInterface({ input: stdin, output: stdout });
|
|
38
|
+
stdout.write(`Warning: requested provider "${requested}" was not found in PATH.\n`);
|
|
39
|
+
const prompt = `Options: (1) Continue with ${requested} anyway, (2) Switch to mock, (c) Cancel: `;
|
|
40
|
+
try {
|
|
41
|
+
const answer = (await rl.question(prompt)).trim().toLowerCase();
|
|
42
|
+
rl.close();
|
|
43
|
+
if (answer === "1")
|
|
44
|
+
return {
|
|
45
|
+
defaultProvider: requested,
|
|
46
|
+
requestedProvider: requested,
|
|
47
|
+
selectedReason: "explicit-undetected-interactive-continue"
|
|
48
|
+
};
|
|
49
|
+
if (answer === "2")
|
|
50
|
+
return {
|
|
51
|
+
defaultProvider: "mock",
|
|
52
|
+
requestedProvider: requested,
|
|
53
|
+
selectedReason: "interactive-choice"
|
|
54
|
+
};
|
|
55
|
+
return "cancel";
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
rl.close();
|
|
59
|
+
return "cancel";
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export async function confirmInitPlan({ stdin, stdout, plan }) {
|
|
63
|
+
const rl = readline.createInterface({ input: stdin, output: stdout });
|
|
64
|
+
stdout.write("\nOpenDynamicWorkflow will create:\n");
|
|
65
|
+
plan.targets.forEach(t => {
|
|
66
|
+
if (t.action === "create" || t.action === "overwrite") {
|
|
67
|
+
stdout.write(` ${t.displayPath}\n`);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
stdout.write(`\nDefault provider: ${plan.providerSelection.defaultProvider}\n`);
|
|
71
|
+
stdout.write("Existing files will be skipped.\n");
|
|
72
|
+
stdout.write("Package scripts will not be modified.\n");
|
|
73
|
+
try {
|
|
74
|
+
const answer = (await rl.question("\nContinue? (y/n) [y]: ")).trim().toLowerCase();
|
|
75
|
+
rl.close();
|
|
76
|
+
return answer === "" || answer === "y" || answer === "yes";
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
rl.close();
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/cli/init/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { SupportedInitProvider, ProviderCandidate, ProviderSelection } from "./types.js";
|
|
2
|
+
export declare function isSupportedInitProvider(value: string): value is SupportedInitProvider;
|
|
3
|
+
export declare function isExecutableOnPath(command: string, envPath?: string, platform?: NodeJS.Platform): Promise<boolean>;
|
|
4
|
+
export declare function detectProviders(input?: {
|
|
5
|
+
envPath?: string;
|
|
6
|
+
platform?: NodeJS.Platform;
|
|
7
|
+
}): Promise<ProviderCandidate[]>;
|
|
8
|
+
export declare function recommendProvider(candidates: ProviderCandidate[]): SupportedInitProvider;
|
|
9
|
+
export declare function selectProviderNonInteractive(input: {
|
|
10
|
+
requestedProvider?: SupportedInitProvider;
|
|
11
|
+
candidates: ProviderCandidate[];
|
|
12
|
+
}): ProviderSelection;
|
|
13
|
+
export declare function findProviderCandidate(candidates: ProviderCandidate[], provider: SupportedInitProvider): ProviderCandidate | undefined;
|