@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,117 @@
|
|
|
1
|
+
import { ErrorCode } from "../errors/codes.js";
|
|
2
|
+
import { OpenDynamicWorkflowError } from "../errors/types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Clones a value while ensuring it is strictly JSON-compatible.
|
|
5
|
+
* Throws InvalidDslCallError (or similar) if the value contains non-JSON types or circular references.
|
|
6
|
+
*/
|
|
7
|
+
export function cloneJsonValue(value, label) {
|
|
8
|
+
return cloneRecursive(value, label, new Set());
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Clones an object while ensuring it is strictly JSON-compatible.
|
|
12
|
+
*/
|
|
13
|
+
export function cloneJsonObject(value, label) {
|
|
14
|
+
const cloned = cloneJsonValue(value, label);
|
|
15
|
+
if (cloned === null || typeof cloned !== "object" || Array.isArray(cloned)) {
|
|
16
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_INVALID_CALL, `${label} must be a plain object.`);
|
|
17
|
+
}
|
|
18
|
+
return cloned;
|
|
19
|
+
}
|
|
20
|
+
function cloneRecursive(value, label, seen) {
|
|
21
|
+
// Primitives
|
|
22
|
+
if (value === null)
|
|
23
|
+
return null;
|
|
24
|
+
if (typeof value === "string")
|
|
25
|
+
return value;
|
|
26
|
+
if (typeof value === "boolean")
|
|
27
|
+
return value;
|
|
28
|
+
if (typeof value === "number") {
|
|
29
|
+
if (!Number.isFinite(value)) {
|
|
30
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_INVALID_CALL, `${label} contains non-finite number: ${value}`);
|
|
31
|
+
}
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
// Reject explicitly unsupported types
|
|
35
|
+
if (value === undefined) {
|
|
36
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_INVALID_CALL, `${label} cannot be undefined.`);
|
|
37
|
+
}
|
|
38
|
+
if (typeof value === "function") {
|
|
39
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_INVALID_CALL, `${label} contains a function.`);
|
|
40
|
+
}
|
|
41
|
+
if (typeof value === "symbol") {
|
|
42
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_INVALID_CALL, `${label} contains a symbol.`);
|
|
43
|
+
}
|
|
44
|
+
if (typeof value === "bigint") {
|
|
45
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_INVALID_CALL, `${label} contains a bigint.`);
|
|
46
|
+
}
|
|
47
|
+
// Circular reference detection
|
|
48
|
+
if (seen.has(value)) {
|
|
49
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_INVALID_CALL, `${label} contains a circular reference.`);
|
|
50
|
+
}
|
|
51
|
+
// Arrays
|
|
52
|
+
if (Array.isArray(value)) {
|
|
53
|
+
seen.add(value);
|
|
54
|
+
const cloned = value.map((item, index) => {
|
|
55
|
+
const result = cloneRecursive(item, `${label}[${index}]`, seen);
|
|
56
|
+
return result === undefined ? null : result;
|
|
57
|
+
});
|
|
58
|
+
seen.delete(value);
|
|
59
|
+
return cloned;
|
|
60
|
+
}
|
|
61
|
+
// Objects
|
|
62
|
+
if (typeof value === "object") {
|
|
63
|
+
// Check for "thenables" or Promises
|
|
64
|
+
if ("then" in value && typeof value.then === "function") {
|
|
65
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_INVALID_CALL, `${label} contains a Promise or thenable.`);
|
|
66
|
+
}
|
|
67
|
+
// Check for other non-plain objects
|
|
68
|
+
const proto = Object.getPrototypeOf(value);
|
|
69
|
+
if (proto !== null && proto !== Object.prototype) {
|
|
70
|
+
// In some environments (like VM contexts), proto might be Object.prototype from a different context.
|
|
71
|
+
// We check if it's still a "plain" object by looking at the constructor name.
|
|
72
|
+
if (proto.constructor?.name === "Object") {
|
|
73
|
+
// Fall through to plain object handling
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
// It's a class instance, Map, Set, Date, Buffer, etc.
|
|
77
|
+
if (value instanceof Date) {
|
|
78
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_INVALID_CALL, `${label} contains a Date.`);
|
|
79
|
+
}
|
|
80
|
+
if (value instanceof Map) {
|
|
81
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_INVALID_CALL, `${label} contains a Map.`);
|
|
82
|
+
}
|
|
83
|
+
if (value instanceof Set) {
|
|
84
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_INVALID_CALL, `${label} contains a Set.`);
|
|
85
|
+
}
|
|
86
|
+
if (value instanceof Error) {
|
|
87
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_INVALID_CALL, `${label} contains an Error.`);
|
|
88
|
+
}
|
|
89
|
+
if (globalThis.Buffer && value instanceof globalThis.Buffer) {
|
|
90
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_INVALID_CALL, `${label} contains a Buffer.`);
|
|
91
|
+
}
|
|
92
|
+
if (ArrayBuffer.isView(value)) {
|
|
93
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_INVALID_CALL, `${label} contains a TypedArray or DataView.`);
|
|
94
|
+
}
|
|
95
|
+
// General rejection for class instances or complex types
|
|
96
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_INVALID_CALL, `${label} contains an unsupported object type: ${value.constructor?.name || "Unknown"}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
seen.add(value);
|
|
100
|
+
const cloned = {};
|
|
101
|
+
for (const key of Object.keys(value)) {
|
|
102
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
103
|
+
if (descriptor?.get || descriptor?.set) {
|
|
104
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_INVALID_CALL, `${label}.${key} contains accessors.`);
|
|
105
|
+
}
|
|
106
|
+
const val = cloneRecursive(value[key], `${label}.${key}`, seen);
|
|
107
|
+
if (val !== undefined) {
|
|
108
|
+
cloned[key] = val;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
seen.delete(value);
|
|
112
|
+
return cloned;
|
|
113
|
+
}
|
|
114
|
+
// Fallback for anything else (shouldn't really happen with above checks)
|
|
115
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_INVALID_CALL, `${label} contains an unsupported value: ${value}`);
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/workflow/json.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { ErrorCode } from "../errors/codes.js";
|
|
4
|
+
import { OpenDynamicWorkflowError } from "../errors/types.js";
|
|
5
|
+
export async function loadWorkflow(pathInput, cwd) {
|
|
6
|
+
const sourcePath = resolve(cwd, pathInput);
|
|
7
|
+
try {
|
|
8
|
+
const sourceText = await readFile(sourcePath, "utf8");
|
|
9
|
+
return {
|
|
10
|
+
sourcePath,
|
|
11
|
+
sourceText: sourceText.replace(/\r\n/g, "\n")
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
catch (cause) {
|
|
15
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_PARSE_ERROR, `Unable to read workflow file: ${sourcePath}`, { cause });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=load.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/workflow/load.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,SAAiB,EAAE,GAAW;IAC/D,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAE3C,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACtD,OAAO;YACL,UAAU;YACV,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;SAC9C,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,wBAAwB,CAChC,SAAS,CAAC,oBAAoB,EAC9B,iCAAiC,UAAU,EAAE,EAC7C,EAAE,KAAK,EAAE,CACV,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import ts from "typescript";
|
|
3
|
+
import { ErrorCode } from "../errors/codes.js";
|
|
4
|
+
import { OpenDynamicWorkflowError } from "../errors/types.js";
|
|
5
|
+
function hashSource(sourceText) {
|
|
6
|
+
return createHash("sha256").update(sourceText).digest("hex");
|
|
7
|
+
}
|
|
8
|
+
function parseJsonLiteral(node) {
|
|
9
|
+
if (ts.isStringLiteral(node))
|
|
10
|
+
return node.text;
|
|
11
|
+
if (ts.isNumericLiteral(node))
|
|
12
|
+
return Number(node.text);
|
|
13
|
+
if (node.kind === ts.SyntaxKind.TrueKeyword)
|
|
14
|
+
return true;
|
|
15
|
+
if (node.kind === ts.SyntaxKind.FalseKeyword)
|
|
16
|
+
return false;
|
|
17
|
+
if (node.kind === ts.SyntaxKind.NullKeyword)
|
|
18
|
+
return null;
|
|
19
|
+
if (ts.isArrayLiteralExpression(node)) {
|
|
20
|
+
return node.elements.map(element => {
|
|
21
|
+
if (ts.isSpreadElement(element)) {
|
|
22
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_PARSE_ERROR, "Metadata inputSchema must be a static JSON object.");
|
|
23
|
+
}
|
|
24
|
+
return parseJsonLiteral(element);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
if (ts.isObjectLiteralExpression(node)) {
|
|
28
|
+
const result = {};
|
|
29
|
+
for (const prop of node.properties) {
|
|
30
|
+
if (!ts.isPropertyAssignment(prop)) {
|
|
31
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_PARSE_ERROR, "Metadata inputSchema must be a static JSON object.");
|
|
32
|
+
}
|
|
33
|
+
if (!ts.isIdentifier(prop.name) && !ts.isStringLiteral(prop.name)) {
|
|
34
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_PARSE_ERROR, "Metadata inputSchema keys must be identifiers or string literals.");
|
|
35
|
+
}
|
|
36
|
+
result[prop.name.text] = parseJsonLiteral(prop.initializer);
|
|
37
|
+
}
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_PARSE_ERROR, "Metadata inputSchema must be a static JSON object.");
|
|
41
|
+
}
|
|
42
|
+
export function parseWorkflow(loaded) {
|
|
43
|
+
const sourceFile = ts.createSourceFile(loaded.sourcePath, loaded.sourceText, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
44
|
+
if (sourceFile.statements.length === 0) {
|
|
45
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_PARSE_ERROR, "Workflow file is empty.");
|
|
46
|
+
}
|
|
47
|
+
const statement = sourceFile.statements[0];
|
|
48
|
+
const isVariable = statement && ts.isVariableStatement(statement);
|
|
49
|
+
const modifiers = isVariable ? ts.getModifiers(statement) : undefined;
|
|
50
|
+
const hasExport = isVariable && modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword);
|
|
51
|
+
const declarations = isVariable ? statement.declarationList.declarations : [];
|
|
52
|
+
const firstDecl = declarations[0];
|
|
53
|
+
const hasMetaName = declarations.length === 1 &&
|
|
54
|
+
firstDecl &&
|
|
55
|
+
ts.isIdentifier(firstDecl.name) &&
|
|
56
|
+
firstDecl.name.text === "meta";
|
|
57
|
+
if (!isVariable || !hasExport || !hasMetaName) {
|
|
58
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_PARSE_ERROR, "Metadata ('export const meta') must be the first top-level statement.");
|
|
59
|
+
}
|
|
60
|
+
const initializer = firstDecl?.initializer;
|
|
61
|
+
if (!initializer || !ts.isObjectLiteralExpression(initializer)) {
|
|
62
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_PARSE_ERROR, "Metadata must be a literal object.");
|
|
63
|
+
}
|
|
64
|
+
const meta = {};
|
|
65
|
+
for (const property of initializer.properties) {
|
|
66
|
+
if (!ts.isPropertyAssignment(property)) {
|
|
67
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_PARSE_ERROR, "Metadata properties must be standard property assignments.");
|
|
68
|
+
}
|
|
69
|
+
let keyName;
|
|
70
|
+
if (ts.isIdentifier(property.name)) {
|
|
71
|
+
keyName = property.name.text;
|
|
72
|
+
}
|
|
73
|
+
else if (ts.isStringLiteral(property.name)) {
|
|
74
|
+
keyName = property.name.text;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_PARSE_ERROR, "Metadata keys must be identifiers or string literals.");
|
|
78
|
+
}
|
|
79
|
+
const value = property.initializer;
|
|
80
|
+
if (keyName === "phases") {
|
|
81
|
+
if (!ts.isArrayLiteralExpression(value)) {
|
|
82
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_PARSE_ERROR, "Metadata phases must be an array literal of string literals.");
|
|
83
|
+
}
|
|
84
|
+
const phases = [];
|
|
85
|
+
for (const element of value.elements) {
|
|
86
|
+
if (!ts.isStringLiteral(element)) {
|
|
87
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_PARSE_ERROR, "Metadata phases must contain only string literals.");
|
|
88
|
+
}
|
|
89
|
+
phases.push(element.text);
|
|
90
|
+
}
|
|
91
|
+
meta[keyName] = phases;
|
|
92
|
+
}
|
|
93
|
+
else if (keyName === "tags") {
|
|
94
|
+
if (!ts.isArrayLiteralExpression(value)) {
|
|
95
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_PARSE_ERROR, "Metadata tags must be an array literal of string literals.");
|
|
96
|
+
}
|
|
97
|
+
const tags = [];
|
|
98
|
+
for (const element of value.elements) {
|
|
99
|
+
if (!ts.isStringLiteral(element)) {
|
|
100
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_PARSE_ERROR, "Metadata tags must contain only string literals.");
|
|
101
|
+
}
|
|
102
|
+
tags.push(element.text);
|
|
103
|
+
}
|
|
104
|
+
meta[keyName] = tags;
|
|
105
|
+
}
|
|
106
|
+
else if (keyName === "name" || keyName === "description" || keyName === "version") {
|
|
107
|
+
if (!ts.isStringLiteral(value)) {
|
|
108
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_PARSE_ERROR, `Metadata ${keyName} must be a string literal.`);
|
|
109
|
+
}
|
|
110
|
+
meta[keyName] = value.text;
|
|
111
|
+
}
|
|
112
|
+
else if (keyName === "inputSchema") {
|
|
113
|
+
meta[keyName] = parseJsonLiteral(value);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_PARSE_ERROR, `Unexpected metadata property: ${keyName}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (!meta.name || meta.name.trim() === "") {
|
|
120
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_PARSE_ERROR, "Metadata name is required and cannot be empty.");
|
|
121
|
+
}
|
|
122
|
+
if (!meta.description || meta.description.trim() === "") {
|
|
123
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_PARSE_ERROR, "Metadata description is required and cannot be empty.");
|
|
124
|
+
}
|
|
125
|
+
const body = loaded.sourceText.substring(statement.end).trim();
|
|
126
|
+
const sourceHash = hashSource(loaded.sourceText);
|
|
127
|
+
return {
|
|
128
|
+
meta: meta,
|
|
129
|
+
body,
|
|
130
|
+
sourcePath: loaded.sourcePath,
|
|
131
|
+
sourceText: loaded.sourceText,
|
|
132
|
+
sourceHash
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/workflow/parse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ParsedWorkflow, WorkflowMeta } from "../types/workflow.js";
|
|
2
|
+
export interface WorkflowDefinition {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
sourcePath: string;
|
|
6
|
+
meta: WorkflowMeta;
|
|
7
|
+
parsedWorkflow: ParsedWorkflow;
|
|
8
|
+
inputSchema?: unknown;
|
|
9
|
+
}
|
|
10
|
+
export interface WorkflowRegistry {
|
|
11
|
+
get(name: string): WorkflowDefinition | undefined;
|
|
12
|
+
require(name: string): WorkflowDefinition;
|
|
13
|
+
list(): readonly WorkflowDefinition[];
|
|
14
|
+
names(): ReadonlySet<string>;
|
|
15
|
+
inputSchemas(): ReadonlyMap<string, unknown>;
|
|
16
|
+
}
|
|
17
|
+
export declare function createWorkflowRegistry(definitions: readonly WorkflowDefinition[]): WorkflowRegistry;
|
|
18
|
+
export declare function createRootWorkflowRegistry(parsedWorkflow: ParsedWorkflow): WorkflowRegistry;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { ErrorCode } from "../errors/codes.js";
|
|
2
|
+
import { OpenDynamicWorkflowError } from "../errors/types.js";
|
|
3
|
+
class DefaultWorkflowRegistry {
|
|
4
|
+
definitions;
|
|
5
|
+
constructor(definitions) {
|
|
6
|
+
this.definitions = new Map();
|
|
7
|
+
for (const def of definitions) {
|
|
8
|
+
if (this.definitions.has(def.name)) {
|
|
9
|
+
const existing = this.definitions.get(def.name);
|
|
10
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_DUPLICATE_DEFINITION, `Duplicate workflow name '${def.name}' found in:\n - ${existing.sourcePath}\n - ${def.sourcePath}`);
|
|
11
|
+
}
|
|
12
|
+
this.definitions.set(def.name, def);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
get(name) {
|
|
16
|
+
return this.definitions.get(name);
|
|
17
|
+
}
|
|
18
|
+
require(name) {
|
|
19
|
+
const def = this.get(name);
|
|
20
|
+
if (!def) {
|
|
21
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_DEFINITION_NOT_FOUND, `Workflow definition '${name}' not found.`);
|
|
22
|
+
}
|
|
23
|
+
return def;
|
|
24
|
+
}
|
|
25
|
+
list() {
|
|
26
|
+
return Array.from(this.definitions.values());
|
|
27
|
+
}
|
|
28
|
+
names() {
|
|
29
|
+
return new Set(this.definitions.keys());
|
|
30
|
+
}
|
|
31
|
+
inputSchemas() {
|
|
32
|
+
const schemas = new Map();
|
|
33
|
+
for (const [name, def] of this.definitions) {
|
|
34
|
+
if (def.inputSchema) {
|
|
35
|
+
schemas.set(name, def.inputSchema);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return schemas;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export function createWorkflowRegistry(definitions) {
|
|
42
|
+
return new DefaultWorkflowRegistry(definitions);
|
|
43
|
+
}
|
|
44
|
+
export function createRootWorkflowRegistry(parsedWorkflow) {
|
|
45
|
+
const definition = {
|
|
46
|
+
name: parsedWorkflow.meta.name,
|
|
47
|
+
description: parsedWorkflow.meta.description,
|
|
48
|
+
sourcePath: parsedWorkflow.sourcePath,
|
|
49
|
+
meta: parsedWorkflow.meta,
|
|
50
|
+
parsedWorkflow,
|
|
51
|
+
inputSchema: parsedWorkflow.meta.inputSchema
|
|
52
|
+
};
|
|
53
|
+
return createWorkflowRegistry([definition]);
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/workflow/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAoB9D,MAAM,uBAAuB;IACV,WAAW,CAAkC;IAE9D,YAAY,WAA0C;QACpD,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;QAC7B,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;gBACjD,MAAM,IAAI,wBAAwB,CAChC,SAAS,CAAC,6BAA6B,EACvC,4BAA4B,GAAG,CAAC,IAAI,oBAAoB,QAAQ,CAAC,UAAU,SAAS,GAAG,CAAC,UAAU,EAAE,CACrG,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,CAAC,IAAY;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,wBAAwB,CAChC,SAAS,CAAC,6BAA6B,EACvC,wBAAwB,IAAI,cAAc,CAC3C,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK;QACH,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,YAAY;QACV,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;QAC3C,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC3C,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAED,MAAM,UAAU,sBAAsB,CAAC,WAA0C;IAC/E,OAAO,IAAI,uBAAuB,CAAC,WAAW,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,cAA8B;IACvE,MAAM,UAAU,GAAuB;QACrC,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI;QAC9B,WAAW,EAAE,cAAc,CAAC,IAAI,CAAC,WAAW;QAC5C,UAAU,EAAE,cAAc,CAAC,UAAU;QACrC,IAAI,EAAE,cAAc,CAAC,IAAI;QACzB,cAAc;QACd,WAAW,EAAE,cAAc,CAAC,IAAI,CAAC,WAAW;KAC7C,CAAC;IACF,OAAO,sBAAsB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { ResolvedOpenDynamicWorkflowConfig } from "../config/types.js";
|
|
2
|
+
export type WorkflowTargetKind = "workflow-name" | "workflow-file";
|
|
3
|
+
export type WorkflowDiscoverySource = "list-discovery" | "file-path" | "resume-recorded-file";
|
|
4
|
+
export interface WorkflowTargetMetadata {
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
phases?: string[] | undefined;
|
|
8
|
+
version?: string | undefined;
|
|
9
|
+
tags?: string[] | undefined;
|
|
10
|
+
inputSchema?: unknown;
|
|
11
|
+
}
|
|
12
|
+
export interface ResolvedWorkflowTarget {
|
|
13
|
+
requestedTarget: string;
|
|
14
|
+
targetKind: WorkflowTargetKind;
|
|
15
|
+
workflowName: string;
|
|
16
|
+
workflowFile: string;
|
|
17
|
+
workflowFileRelative: string;
|
|
18
|
+
cwd: string;
|
|
19
|
+
configPath?: string | undefined;
|
|
20
|
+
discoverySource: WorkflowDiscoverySource;
|
|
21
|
+
metadata: WorkflowTargetMetadata;
|
|
22
|
+
candidatePaths?: string[] | undefined;
|
|
23
|
+
}
|
|
24
|
+
export interface ResolveWorkflowTargetInput {
|
|
25
|
+
target: string;
|
|
26
|
+
cwd: string;
|
|
27
|
+
config: ResolvedOpenDynamicWorkflowConfig;
|
|
28
|
+
mode: "run" | "validate";
|
|
29
|
+
allowPathLikeFastPath?: boolean | undefined;
|
|
30
|
+
}
|
|
31
|
+
export interface ResolveWorkflowFileTargetInput {
|
|
32
|
+
target: string;
|
|
33
|
+
cwd: string;
|
|
34
|
+
config: ResolvedOpenDynamicWorkflowConfig;
|
|
35
|
+
fallbackFromName?: boolean | undefined;
|
|
36
|
+
}
|
|
37
|
+
export interface ResolveWorkflowNameTargetInput {
|
|
38
|
+
name: string;
|
|
39
|
+
cwd: string;
|
|
40
|
+
config: ResolvedOpenDynamicWorkflowConfig;
|
|
41
|
+
}
|
|
42
|
+
export declare function isPathLikeWorkflowTarget(target: string): boolean;
|
|
43
|
+
export declare function resolveWorkflowTarget(input: ResolveWorkflowTargetInput): Promise<ResolvedWorkflowTarget>;
|
|
44
|
+
export declare function resolveWorkflowFileTarget(input: ResolveWorkflowFileTargetInput): Promise<ResolvedWorkflowTarget>;
|
|
45
|
+
export declare function resolveWorkflowNameTarget(input: ResolveWorkflowNameTargetInput): Promise<ResolvedWorkflowTarget | null>;
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { resolve, relative, isAbsolute } from "node:path";
|
|
2
|
+
import { realpath } from "node:fs/promises";
|
|
3
|
+
import { ErrorCode } from "../errors/codes.js";
|
|
4
|
+
import { OpenDynamicWorkflowError } from "../errors/types.js";
|
|
5
|
+
import { resolveDiscoveryDirectories } from "../discovery/directories.js";
|
|
6
|
+
import { createDiscoveryService } from "../discovery/service.js";
|
|
7
|
+
import { loadWorkflow } from "./load.js";
|
|
8
|
+
import { parseWorkflow } from "./parse.js";
|
|
9
|
+
export function isPathLikeWorkflowTarget(target) {
|
|
10
|
+
if (isAbsolute(target))
|
|
11
|
+
return true;
|
|
12
|
+
if (target.includes("/") || target.includes("\\"))
|
|
13
|
+
return true;
|
|
14
|
+
if (target.startsWith("./") || target.startsWith("../"))
|
|
15
|
+
return true;
|
|
16
|
+
const lower = target.toLowerCase();
|
|
17
|
+
return (lower.endsWith(".ts") ||
|
|
18
|
+
lower.endsWith(".js") ||
|
|
19
|
+
lower.endsWith(".mts") ||
|
|
20
|
+
lower.endsWith(".mjs") ||
|
|
21
|
+
lower.endsWith(".cts") ||
|
|
22
|
+
lower.endsWith(".cjs"));
|
|
23
|
+
}
|
|
24
|
+
export async function resolveWorkflowTarget(input) {
|
|
25
|
+
const { target, cwd, config, allowPathLikeFastPath = true } = input;
|
|
26
|
+
if (!target || target.trim() === "") {
|
|
27
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_TARGET_NOT_FOUND, "Workflow target is required.");
|
|
28
|
+
}
|
|
29
|
+
// 1. Path-like fast-path
|
|
30
|
+
if (allowPathLikeFastPath && isPathLikeWorkflowTarget(target)) {
|
|
31
|
+
return resolveWorkflowFileTarget({ target, cwd, config });
|
|
32
|
+
}
|
|
33
|
+
// 2. Bare name lookup
|
|
34
|
+
const resolvedByName = await resolveWorkflowNameTarget({
|
|
35
|
+
name: target,
|
|
36
|
+
cwd,
|
|
37
|
+
config,
|
|
38
|
+
});
|
|
39
|
+
if (resolvedByName) {
|
|
40
|
+
return resolvedByName;
|
|
41
|
+
}
|
|
42
|
+
// 3. Fallback to file target if bare name didn't match anything
|
|
43
|
+
try {
|
|
44
|
+
return await resolveWorkflowFileTarget({
|
|
45
|
+
target,
|
|
46
|
+
cwd,
|
|
47
|
+
config,
|
|
48
|
+
fallbackFromName: true,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
// If fallback fails, throw a target-not-found error that suggests list
|
|
53
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_TARGET_NOT_FOUND, `Workflow "${target}" not found by name or file path. Try "open-dynamic-workflow list workflows" to see available workflows.`, { cause: err });
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export async function resolveWorkflowFileTarget(input) {
|
|
57
|
+
const { target, cwd, config, fallbackFromName = false } = input;
|
|
58
|
+
const absolutePath = resolve(cwd, target);
|
|
59
|
+
let canonicalPath;
|
|
60
|
+
try {
|
|
61
|
+
canonicalPath = await realpath(absolutePath);
|
|
62
|
+
}
|
|
63
|
+
catch (cause) {
|
|
64
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_FILE_NOT_FOUND, `Workflow file not found: ${absolutePath}`, { cause });
|
|
65
|
+
}
|
|
66
|
+
const canonicalCwd = await realpath(resolve(cwd)).catch(() => resolve(cwd));
|
|
67
|
+
const rel = relative(canonicalCwd, canonicalPath);
|
|
68
|
+
if (rel.startsWith("..") || isAbsolute(rel)) {
|
|
69
|
+
throw new OpenDynamicWorkflowError(ErrorCode.SECURITY_POLICY_VIOLATION, `Workflow file outside project root: ${canonicalPath}`);
|
|
70
|
+
}
|
|
71
|
+
const loaded = await loadWorkflow(absolutePath, cwd);
|
|
72
|
+
const parsed = parseWorkflow(loaded);
|
|
73
|
+
return {
|
|
74
|
+
requestedTarget: target,
|
|
75
|
+
targetKind: "workflow-file",
|
|
76
|
+
workflowName: parsed.meta.name,
|
|
77
|
+
workflowFile: absolutePath,
|
|
78
|
+
workflowFileRelative: relative(cwd, absolutePath),
|
|
79
|
+
cwd,
|
|
80
|
+
configPath: config.configPath,
|
|
81
|
+
discoverySource: "file-path",
|
|
82
|
+
metadata: {
|
|
83
|
+
name: parsed.meta.name,
|
|
84
|
+
description: parsed.meta.description,
|
|
85
|
+
phases: parsed.meta.phases,
|
|
86
|
+
version: parsed.meta.version,
|
|
87
|
+
tags: parsed.meta.tags,
|
|
88
|
+
inputSchema: parsed.meta.inputSchema,
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
export async function resolveWorkflowNameTarget(input) {
|
|
93
|
+
const { name, cwd, config } = input;
|
|
94
|
+
const directories = resolveDiscoveryDirectories({
|
|
95
|
+
resourceType: "workflow",
|
|
96
|
+
rawOptions: {},
|
|
97
|
+
config,
|
|
98
|
+
cwd,
|
|
99
|
+
});
|
|
100
|
+
const discoveryService = createDiscoveryService();
|
|
101
|
+
const discoveryResult = await discoveryService.discover({
|
|
102
|
+
cwd,
|
|
103
|
+
resourceTypes: ["workflow"],
|
|
104
|
+
directories,
|
|
105
|
+
verbose: false,
|
|
106
|
+
strict: false,
|
|
107
|
+
});
|
|
108
|
+
if (discoveryResult.status === "failed") {
|
|
109
|
+
const allDiags = [...discoveryResult.errors, ...discoveryResult.warnings];
|
|
110
|
+
const errorDetails = allDiags.length > 0
|
|
111
|
+
? allDiags.map((e) => `- ${e.path || "unknown"}: ${e.message}`).join("\n")
|
|
112
|
+
: "- unknown error during directory scan";
|
|
113
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_DISCOVERY_FAILED, `Could not resolve workflow target "${name}" because workflow discovery failed.\n\nDiscovery errors:\n${errorDetails}\n\nCheck --cwd, --config, and workflow.discovery.include.`);
|
|
114
|
+
}
|
|
115
|
+
const matches = discoveryResult.resources.filter((r) => r.type === "workflow" && r.name === name);
|
|
116
|
+
if (matches.length === 0) {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
if (matches.length > 1) {
|
|
120
|
+
const paths = matches.map((m) => m.path).join(", ");
|
|
121
|
+
throw new OpenDynamicWorkflowError(ErrorCode.WORKFLOW_DUPLICATE_NAME, `Multiple workflows found with name "${name}": ${paths}`);
|
|
122
|
+
}
|
|
123
|
+
const match = matches[0];
|
|
124
|
+
const absolutePath = isAbsolute(match.path) ? match.path : resolve(cwd, match.path);
|
|
125
|
+
// Build candidatePaths from valid statically discovered workflows.
|
|
126
|
+
// We only include workflows with unique names to avoid registry collisions,
|
|
127
|
+
// unless it's the specific workflow we matched (which is unique anyway if we reached here).
|
|
128
|
+
const nameCounts = new Map();
|
|
129
|
+
for (const r of discoveryResult.resources) {
|
|
130
|
+
if (r.type === "workflow" && r.valid) {
|
|
131
|
+
nameCounts.set(r.name, (nameCounts.get(r.name) || 0) + 1);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
const candidatePaths = discoveryResult.resources
|
|
135
|
+
.filter((r) => {
|
|
136
|
+
if (r.type !== "workflow" || !r.valid)
|
|
137
|
+
return false;
|
|
138
|
+
// Include it if it's the one we matched, or if its name is unique
|
|
139
|
+
return r.name === name || (nameCounts.get(r.name) || 0) === 1;
|
|
140
|
+
})
|
|
141
|
+
.map((r) => (isAbsolute(r.path) ? r.path : resolve(cwd, r.path)));
|
|
142
|
+
return {
|
|
143
|
+
requestedTarget: name,
|
|
144
|
+
targetKind: "workflow-name",
|
|
145
|
+
workflowName: match.name,
|
|
146
|
+
workflowFile: absolutePath,
|
|
147
|
+
workflowFileRelative: relative(cwd, absolutePath),
|
|
148
|
+
cwd,
|
|
149
|
+
configPath: config.configPath,
|
|
150
|
+
discoverySource: "list-discovery",
|
|
151
|
+
metadata: {
|
|
152
|
+
name: match.name,
|
|
153
|
+
description: match.description,
|
|
154
|
+
phases: match.phases,
|
|
155
|
+
version: match.version,
|
|
156
|
+
tags: match.tags,
|
|
157
|
+
inputSchema: match.inputSchema,
|
|
158
|
+
},
|
|
159
|
+
candidatePaths,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=resolve-target.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-target.js","sourceRoot":"","sources":["../../src/workflow/resolve-target.ts"],"names":[],"mappings":"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"}
|