@deksden-com/dd-flow-cli 0.9.0-beta.15 → 0.9.0-beta.151
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 +907 -0
- package/README.md +139 -10
- package/dist/build-info.json +8 -8
- package/dist/cli/argument-values.js +38 -0
- package/dist/cli/command-inputs.js +386 -0
- package/dist/cli/command-metadata.js +232 -0
- package/dist/cli/command-option-descriptions.js +192 -0
- package/dist/cli/completion-cli.js +70 -0
- package/dist/cli/completion.js +57 -0
- package/dist/cli/diagnostic-invocation.js +46 -0
- package/dist/cli/diagnostic.js +120 -0
- package/dist/cli/error-output.js +52 -0
- package/dist/cli/executor-onboarding.js +76 -0
- package/dist/cli/flows.js +29 -0
- package/dist/cli/harnesses.js +84 -0
- package/dist/cli/help.js +396 -19
- package/dist/cli/hook-ingress.js +102 -0
- package/dist/cli/input-preparation.js +165 -0
- package/dist/cli/memory-flow-admission.js +50 -0
- package/dist/cli/memory-init-invocation.js +85 -0
- package/dist/cli/memory-init.js +249 -0
- package/dist/cli/memory-storage-admission.js +54 -0
- package/dist/cli/memory-storage-qualification.js +105 -0
- package/dist/cli/memory-storage-transition.js +123 -0
- package/dist/cli/memory-upgrade.js +189 -0
- package/dist/cli/models.js +39 -0
- package/dist/cli/native-hook-ingress.js +90 -0
- package/dist/cli/native-hook-preparation.js +55 -0
- package/dist/cli/operator-profiles.js +61 -0
- package/dist/cli/output-options.js +35 -0
- package/dist/cli/response-file.js +72 -0
- package/dist/cli/run-cli.js +1734 -550
- package/dist/cli/runtime-maintenance-diagnostics.js +46 -0
- package/dist/cli/runtime-maintenance-ingress.js +52 -0
- package/dist/cli/runtime-process.js +153 -0
- package/dist/cli/setup.js +150 -0
- package/dist/cli.js +89 -2
- package/dist/domain/diagnostic-aspects.js +103 -0
- package/dist/domain/diagnostic-flows.js +8 -0
- package/dist/domain/stage-catalog.js +1 -1
- package/dist/domain/stage-handler-identities.js +28 -0
- package/dist/harness-runtime/DD-ZCODE.md +112 -0
- package/dist/harness-runtime/OPENCODE-LICENSE.txt +24 -0
- package/dist/harness-runtime/bin/dd-agy.mjs +56 -0
- package/dist/harness-runtime/bin/dd-codex.mjs +27 -0
- package/dist/harness-runtime/bin/dd-droid.mjs +34 -0
- package/dist/harness-runtime/bin/dd-grok.mjs +40 -0
- package/dist/harness-runtime/bin/dd-opencode.mjs +22 -0
- package/dist/harness-runtime/bin/dd-zcode.mjs +87 -0
- package/dist/harness-runtime/lib/adapter-timeouts.d.mts +5 -0
- package/dist/harness-runtime/lib/adapter-timeouts.mjs +34 -0
- package/dist/harness-runtime/lib/agy-error-boundary.mjs +79 -0
- package/dist/harness-runtime/lib/agy-hooks.d.mts +1 -0
- package/dist/harness-runtime/lib/agy-hooks.mjs +9 -0
- package/dist/harness-runtime/lib/agy-native-inspection.mjs +216 -0
- package/dist/harness-runtime/lib/agy-native_pb.js +117 -0
- package/dist/harness-runtime/lib/agy-terminal-envelope.mjs +67 -0
- package/dist/harness-runtime/lib/daemon-observation.d.mts +2 -0
- package/dist/harness-runtime/lib/daemon-observation.mjs +163 -0
- package/dist/harness-runtime/lib/daemon-operations.d.mts +2 -0
- package/dist/harness-runtime/lib/daemon-operations.mjs +462 -0
- package/dist/harness-runtime/lib/dd-agy-daemon.d.mts +6 -0
- package/dist/harness-runtime/lib/dd-agy-daemon.mjs +1092 -0
- package/dist/harness-runtime/lib/dd-agy.mjs +86 -0
- package/dist/harness-runtime/lib/dd-codex-daemon.d.mts +1 -0
- package/dist/harness-runtime/lib/dd-codex-daemon.mjs +231 -0
- package/dist/harness-runtime/lib/dd-codex.d.mts +1 -0
- package/dist/harness-runtime/lib/dd-codex.mjs +954 -0
- package/dist/harness-runtime/lib/dd-droid-daemon.mjs +141 -0
- package/dist/harness-runtime/lib/dd-droid.mjs +626 -0
- package/dist/harness-runtime/lib/dd-grok-daemon.mjs +555 -0
- package/dist/harness-runtime/lib/dd-grok.mjs +180 -0
- package/dist/harness-runtime/lib/dd-opencode-daemon.mjs +627 -0
- package/dist/harness-runtime/lib/dd-opencode.mjs +390 -0
- package/dist/harness-runtime/lib/dd-zcode-daemon.mjs +752 -0
- package/dist/harness-runtime/lib/dd-zcode.mjs +1200 -0
- package/dist/harness-runtime/lib/delegation-instructions.d.mts +14 -0
- package/dist/harness-runtime/lib/delegation-instructions.mjs +166 -0
- package/dist/harness-runtime/lib/dispatch-fence.mjs +14 -0
- package/dist/harness-runtime/lib/driver-recovery.mjs +140 -0
- package/dist/harness-runtime/lib/droid-observation.mjs +66 -0
- package/dist/harness-runtime/lib/entity-references.d.mts +2 -0
- package/dist/harness-runtime/lib/entity-references.mjs +9 -0
- package/dist/harness-runtime/lib/lease-renewal.d.mts +8 -0
- package/dist/harness-runtime/lib/lease-renewal.mjs +37 -0
- package/dist/harness-runtime/lib/lifecycle-command.d.mts +20 -0
- package/dist/harness-runtime/lib/lifecycle-command.mjs +273 -0
- package/dist/harness-runtime/lib/lifecycle-contract.d.mts +10 -0
- package/dist/harness-runtime/lib/lifecycle-contract.mjs +19 -0
- package/dist/harness-runtime/lib/managed-daemon.d.mts +16 -0
- package/dist/harness-runtime/lib/managed-daemon.mjs +698 -0
- package/dist/harness-runtime/lib/managed-flow-env.mjs +15 -0
- package/dist/harness-runtime/lib/model-observations.mjs +113 -0
- package/dist/harness-runtime/lib/native-children.d.mts +34 -0
- package/dist/harness-runtime/lib/native-children.mjs +265 -0
- package/dist/harness-runtime/lib/native-hook-command.d.mts +7 -0
- package/dist/harness-runtime/lib/native-hook-command.mjs +251 -0
- package/dist/harness-runtime/lib/native-request-proof.d.mts +2 -0
- package/dist/harness-runtime/lib/native-request-proof.mjs +65 -0
- package/dist/harness-runtime/lib/native-streams.mjs +45 -0
- package/dist/harness-runtime/lib/observation-clock.d.mts +18 -0
- package/dist/harness-runtime/lib/observation-clock.mjs +95 -0
- package/dist/harness-runtime/lib/opencode-plugin.mjs +85 -0
- package/dist/harness-runtime/lib/operation-context.mjs +5 -0
- package/dist/harness-runtime/lib/operation-errors.d.mts +16 -0
- package/dist/harness-runtime/lib/operation-errors.mjs +127 -0
- package/dist/harness-runtime/lib/operation-progress.d.mts +7 -0
- package/dist/harness-runtime/lib/operation-progress.mjs +114 -0
- package/dist/harness-runtime/lib/process-json.d.mts +5 -0
- package/dist/harness-runtime/lib/process-json.mjs +201 -0
- package/dist/harness-runtime/lib/process-snapshot.mjs +10 -0
- package/dist/harness-runtime/lib/provider-overload-policy.d.mts +23 -0
- package/dist/harness-runtime/lib/provider-overload-policy.mjs +242 -0
- package/dist/harness-runtime/lib/runner-events.mjs +202 -0
- package/dist/harness-runtime/lib/runner-lock.mjs +42 -0
- package/dist/harness-runtime/lib/session-settlement.mjs +30 -0
- package/dist/harness-runtime/lib/setup-progress.d.mts +9 -0
- package/dist/harness-runtime/lib/setup-progress.mjs +53 -0
- package/dist/harness-runtime/lib/tool-observations.d.mts +21 -0
- package/dist/harness-runtime/lib/tool-observations.mjs +228 -0
- package/dist/harness-runtime/lib/zcode-usage.mjs +55 -0
- package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-1y4a697q.js +81 -0
- package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-2ny4vxct.js +92 -0
- package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-6mptkzbc.js +0 -0
- package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-7x67cf1q.js +52 -0
- package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-9rqn6x4v.js +16 -0
- package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-9vdz0zwn.js +1661 -0
- package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-ecs5ftka.js +1466 -0
- package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-frbwqjmf.js +145 -0
- package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-gne7h7mq.js +50 -0
- package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-gx9wnkzr.js +105 -0
- package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-m2eywc8w.js +0 -0
- package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-nwcpakzx.js +12 -0
- package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-q4g3afnw.js +623 -0
- package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-qav6mfdz.js +0 -0
- package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-sxt88q69.js +12 -0
- package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-t1xa31vm.js +39 -0
- package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-ve4aws36.js +103 -0
- package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-vmytr4q8.js +4 -0
- package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-vt9jbch8.js +36 -0
- package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-vyas3vgt.js +0 -0
- package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-wjyeq25y.js +30 -0
- package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-xgnj2w4v.js +20 -0
- package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-y2etg5bs.js +9 -0
- package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-ydhz1zrh.js +238 -0
- package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-z6qdwcsf.js +62 -0
- package/dist/harness-runtime/vendor/opencode-client/contract.d.ts +1 -0
- package/dist/harness-runtime/vendor/opencode-client/contract.js +12 -0
- package/dist/harness-runtime/vendor/opencode-client/effect/api/api.d.ts +2806 -0
- package/dist/harness-runtime/vendor/opencode-client/effect/api/api.js +0 -0
- package/dist/harness-runtime/vendor/opencode-client/effect/api.d.ts +4 -0
- package/dist/harness-runtime/vendor/opencode-client/effect/api.js +0 -0
- package/dist/harness-runtime/vendor/opencode-client/effect/client.d.ts +2530 -0
- package/dist/harness-runtime/vendor/opencode-client/effect/client.js +15 -0
- package/dist/harness-runtime/vendor/opencode-client/effect/generated/client-error.d.ts +7 -0
- package/dist/harness-runtime/vendor/opencode-client/effect/generated/client-error.js +6 -0
- package/dist/harness-runtime/vendor/opencode-client/effect/generated/client.d.ts +2529 -0
- package/dist/harness-runtime/vendor/opencode-client/effect/generated/client.js +8 -0
- package/dist/harness-runtime/vendor/opencode-client/effect/generated/index.d.ts +2 -0
- package/dist/harness-runtime/vendor/opencode-client/effect/generated/index.js +12 -0
- package/dist/harness-runtime/vendor/opencode-client/effect/index.d.ts +35 -0
- package/dist/harness-runtime/vendor/opencode-client/effect/index.js +75 -0
- package/dist/harness-runtime/vendor/opencode-client/effect/rpc.d.ts +20 -0
- package/dist/harness-runtime/vendor/opencode-client/effect/rpc.js +11 -0
- package/dist/harness-runtime/vendor/opencode-client/effect/service.d.ts +90 -0
- package/dist/harness-runtime/vendor/opencode-client/effect/service.js +187 -0
- package/dist/harness-runtime/vendor/opencode-client/package.json +84 -0
- package/dist/harness-runtime/vendor/opencode-client/promise/api.d.ts +21 -0
- package/dist/harness-runtime/vendor/opencode-client/promise/api.js +0 -0
- package/dist/harness-runtime/vendor/opencode-client/promise/client.d.ts +252 -0
- package/dist/harness-runtime/vendor/opencode-client/promise/client.js +14 -0
- package/dist/harness-runtime/vendor/opencode-client/promise/generated/client-error.d.ts +8 -0
- package/dist/harness-runtime/vendor/opencode-client/promise/generated/client-error.js +6 -0
- package/dist/harness-runtime/vendor/opencode-client/promise/generated/client.d.ts +259 -0
- package/dist/harness-runtime/vendor/opencode-client/promise/generated/client.js +7 -0
- package/dist/harness-runtime/vendor/opencode-client/promise/generated/index.d.ts +3 -0
- package/dist/harness-runtime/vendor/opencode-client/promise/generated/index.js +79 -0
- package/dist/harness-runtime/vendor/opencode-client/promise/generated/types.d.ts +8932 -0
- package/dist/harness-runtime/vendor/opencode-client/promise/generated/types.js +70 -0
- package/dist/harness-runtime/vendor/opencode-client/promise/index.d.ts +6 -0
- package/dist/harness-runtime/vendor/opencode-client/promise/index.js +83 -0
- package/dist/harness-runtime/vendor/opencode-client/promise/rpc.d.ts +32 -0
- package/dist/harness-runtime/vendor/opencode-client/promise/rpc.js +7 -0
- package/dist/harness-runtime/vendor/opencode-client/promise/service.d.ts +24 -0
- package/dist/harness-runtime/vendor/opencode-client/promise/service.js +187 -0
- package/dist/harness-runtime/vendor/opencode-client/pty-handoff.d.ts +12 -0
- package/dist/harness-runtime/vendor/opencode-client/pty-handoff.js +14 -0
- package/dist/harness-runtime/vendor/opencode-client/rpc-runtime.d.ts +20 -0
- package/dist/harness-runtime/vendor/opencode-client/rpc-runtime.js +14 -0
- package/dist/harness-runtime/vendor/opencode-client/service-contender.d.ts +37 -0
- package/dist/harness-runtime/vendor/opencode-client/service-contender.js +10 -0
- package/dist/harness-runtime/vendor/opencode-client/service-probe.d.ts +70 -0
- package/dist/harness-runtime/vendor/opencode-client/service-probe.js +16 -0
- package/dist/harness-runtime/vendor/opencode-client/service-timing.d.ts +12 -0
- package/dist/harness-runtime/vendor/opencode-client/service-timing.js +10 -0
- package/dist/harness-runtime/vendor/opencode-client/service-version.d.ts +2 -0
- package/dist/harness-runtime/vendor/opencode-client/service-version.js +6 -0
- package/dist/harness-runtime/vendor/opencode-client/service.d.ts +52 -0
- package/dist/harness-runtime/vendor/opencode-client/service.js +1 -0
- package/dist/harness-runtime/vendor/opencode-client/shared-events.d.ts +11 -0
- package/dist/harness-runtime/vendor/opencode-client/shared-events.js +8 -0
- package/dist/harness-runtime/vendor/opencode-client/solid/connection.d.ts +37 -0
- package/dist/harness-runtime/vendor/opencode-client/solid/connection.js +10 -0
- package/dist/harness-runtime/vendor/opencode-client/solid/data.d.ts +211 -0
- package/dist/harness-runtime/vendor/opencode-client/solid/data.js +18 -0
- package/dist/harness-runtime/vendor/opencode-client/solid/index.d.ts +3 -0
- package/dist/harness-runtime/vendor/opencode-client/solid/index.js +32 -0
- package/dist/harness-runtime/vendor/opencode-client/solid/pty.d.ts +22 -0
- package/dist/harness-runtime/vendor/opencode-client/solid/pty.js +8 -0
- package/dist/harness-runtime/vendor/opencode-plugin.mjs +3 -0
- package/dist/protocol/local-files.js +18 -9
- package/dist/runtime/context.js +8 -4
- package/dist/schemas/agent-profile.schema.json +1 -1
- package/dist/schemas/code-review-decision.schema.json +9 -0
- package/dist/schemas/code-review-result.schema.json +1 -1
- package/dist/schemas/code-verification.schema.json +7 -5
- package/dist/schemas/code-work-batch.schema.json +2 -2
- package/dist/schemas/diagnostic-stage-result.schema.json +354 -0
- package/dist/schemas/diagnostic-work-result.schema.json +296 -0
- package/dist/schemas/discovery-result.schema.json +184 -0
- package/dist/schemas/execution-bundle.schema.json +211 -0
- package/dist/schemas/execution-settings.schema.json +162 -0
- package/dist/schemas/flow-descriptor.schema.json +54 -0
- package/dist/schemas/flow-run.schema.json +29 -0
- package/dist/schemas/harness-catalog.schema.json +80 -0
- package/dist/schemas/mb-init-compose-result.schema.json +457 -0
- package/dist/schemas/mb-init-discover-result.schema.json +500 -0
- package/dist/schemas/mb-init-finish-result.schema.json +422 -0
- package/dist/schemas/mb-init-preflight-result.schema.json +367 -0
- package/dist/schemas/mb-init-review-result.schema.json +396 -0
- package/dist/schemas/mb-init-verify-result.schema.json +391 -0
- package/dist/schemas/mb-upgrade-stage-result.schema.json +863 -0
- package/dist/schemas/memory-bootstrap-receipt-v2.schema.json +67 -0
- package/dist/schemas/memory-bootstrap-receipt.schema.json +354 -0
- package/dist/schemas/memory-composition-work-result.schema.json +38 -0
- package/dist/schemas/memory-repair-work-result.schema.json +56 -0
- package/dist/schemas/memory-review-correction-plan.schema.json +30 -0
- package/dist/schemas/memory-review-work-result.schema.json +43 -0
- package/dist/schemas/model-catalog.schema.json +153 -0
- package/dist/schemas/plan-review-decision.schema.json +12 -3
- package/dist/schemas/plan-review-result.schema.json +2 -2
- package/dist/schemas/profile-settings.schema.json +122 -0
- package/dist/schemas/project-flow-pack-manifest.schema.json +1 -1
- package/dist/schemas/release-impact.schema.json +3 -3
- package/dist/schemas/release-manifest.schema.json +291 -0
- package/dist/schemas/run-control-receipt.schema.json +118 -0
- package/dist/schemas/run-control-request.schema.json +36 -0
- package/dist/schemas/run-engine-binding.schema.json +1 -1
- package/dist/schemas/stage-start-response.schema.json +4 -0
- package/dist/schemas/vnext-protocol-plan.schema.json +2 -2
- package/dist/services/accepted-intent.js +139 -0
- package/dist/services/branch-context.js +3 -3
- package/dist/services/canon.js +54 -15
- package/dist/services/check-environment.js +21 -0
- package/dist/services/check-runner-evidence.js +277 -0
- package/dist/services/check-runner-proof.js +305 -0
- package/dist/services/cleanup.js +133 -40
- package/dist/services/cli-operation-classifier.js +26 -63
- package/dist/services/cli-upgrade-allowlist.js +27 -0
- package/dist/services/code-checks.js +1401 -119
- package/dist/services/codex-hook-delivery.js +32 -0
- package/dist/services/command-context.js +80 -0
- package/dist/services/compatibility-preflight.js +16 -3
- package/dist/services/config.js +11 -8
- package/dist/services/continuation-outcome.js +20 -0
- package/dist/services/controller-child-capacity.js +71 -0
- package/dist/services/controller-child-observer.js +121 -0
- package/dist/services/controller-execution.js +94 -0
- package/dist/services/controller-fanout.js +226 -0
- package/dist/services/controller-memory-task.js +45 -0
- package/dist/services/controller-memory-worker.js +49 -0
- package/dist/services/dashboard.js +143 -58
- package/dist/services/descriptor-coordinator-session.js +35 -0
- package/dist/services/descriptor-root-work.js +53 -0
- package/dist/services/descriptor-run-settlement.js +107 -0
- package/dist/services/descriptor-run-start.js +475 -0
- package/dist/services/descriptor-stage-coordinator.js +250 -0
- package/dist/services/descriptor-stage-settlement.js +223 -0
- package/dist/services/descriptor-stage-start.js +175 -0
- package/dist/services/diagnostic-evidence.js +73 -0
- package/dist/services/diagnostic-report-publication.js +72 -0
- package/dist/services/diagnostic-report.js +67 -0
- package/dist/services/diagnostic-run-bundle.js +74 -0
- package/dist/services/diagnostic-snapshot.js +159 -0
- package/dist/services/diagnostic-stage-handlers.js +108 -0
- package/dist/services/diagnostic-stage-results.js +132 -0
- package/dist/services/diagnostic-start.js +84 -0
- package/dist/services/diagnostic-work-batch.js +34 -0
- package/dist/services/diagnostic-work-collection.js +97 -0
- package/dist/services/diagnostic-work-registration.js +101 -0
- package/dist/services/diagnostic-work-results.js +93 -0
- package/dist/services/discovery/agy-discovery.js +2 -0
- package/dist/services/discovery/codex-discovery.js +2 -0
- package/dist/services/discovery/droid-discovery.js +2 -0
- package/dist/services/discovery/grok-discovery.js +2 -0
- package/dist/services/discovery/opencode-discovery.js +2 -0
- package/dist/services/discovery/static.js +31 -0
- package/dist/services/discovery/zcode-discovery.js +2 -0
- package/dist/services/engines.js +354 -163
- package/dist/services/eval-snapshots.js +1316 -150
- package/dist/services/execution-bundles.js +275 -0
- package/dist/services/execution-policy.js +185 -0
- package/dist/services/executor-onboarding.js +56 -0
- package/dist/services/external-work-launch.js +310 -0
- package/dist/services/flow-catalog.js +30 -0
- package/dist/services/flow-descriptors.js +82 -0
- package/dist/services/frozen-engine.js +387 -0
- package/dist/services/generic-execution.js +164 -0
- package/dist/services/harness-adapter.js +355 -36
- package/dist/services/harness-config.js +2 -0
- package/dist/services/harness-discovery.js +29 -0
- package/dist/services/harness-doctor.js +75 -0
- package/dist/services/harness-probe-effects.js +51 -0
- package/dist/services/harness-version-probe.js +100 -0
- package/dist/services/hook-memory-routing.js +188 -0
- package/dist/services/hook-recovery-guard.js +14 -0
- package/dist/services/hook-session-observation.js +24 -0
- package/dist/services/hooks.js +791 -326
- package/dist/services/hybrid-contracts.js +474 -0
- package/dist/services/hybrid-digest.js +14 -0
- package/dist/services/ids.js +29 -1
- package/dist/services/installation-lock.js +95 -0
- package/dist/services/installed-flow-source.js +226 -0
- package/dist/services/lanes.js +78 -65
- package/dist/services/lifecycle-command.js +1 -288
- package/dist/services/lifecycle-contract.js +1 -0
- package/dist/services/lifecycle-invocations.js +2148 -0
- package/dist/services/managed-daemon-binding.js +38 -0
- package/dist/services/managed-lease-monitor.js +133 -0
- package/dist/services/managed-processes.js +449 -69
- package/dist/services/memory-accepted-composition.js +78 -0
- package/dist/services/memory-baseline-preservation.js +65 -0
- package/dist/services/memory-completed-correction-wave.js +328 -0
- package/dist/services/memory-compose-handler.js +400 -0
- package/dist/services/memory-composition-acceptance.js +375 -0
- package/dist/services/memory-composition-graph.js +165 -0
- package/dist/services/memory-composition-registration.js +161 -0
- package/dist/services/memory-composition-work-custody.js +156 -0
- package/dist/services/memory-composition-work-results.js +108 -0
- package/dist/services/memory-corrected-review-acceptance.js +129 -0
- package/dist/services/memory-corrected-review-batch.js +37 -0
- package/dist/services/memory-corrected-review-findings.js +108 -0
- package/dist/services/memory-corrected-review-inputs.js +215 -0
- package/dist/services/memory-corrected-review-projection.js +78 -0
- package/dist/services/memory-corrected-review-receipt.js +178 -0
- package/dist/services/memory-corrected-review-registration.js +192 -0
- package/dist/services/memory-correction-check-receipt.js +235 -0
- package/dist/services/memory-correction-input-owner.js +6 -0
- package/dist/services/memory-custody-snapshot.js +36 -0
- package/dist/services/memory-discover-handler.js +104 -0
- package/dist/services/memory-finish-evidence.js +457 -0
- package/dist/services/memory-finish-handler.js +229 -0
- package/dist/services/memory-finish-integration.js +450 -0
- package/dist/services/memory-finish-readiness.js +169 -0
- package/dist/services/memory-git-integration.js +220 -0
- package/dist/services/memory-historical-corrected-review.js +212 -0
- package/dist/services/memory-historical-original-review.js +143 -0
- package/dist/services/memory-historical-repair-registration.js +105 -0
- package/dist/services/memory-historical-second-review.js +147 -0
- package/dist/services/memory-init-bootstrap-readiness.js +210 -0
- package/dist/services/memory-init-contexts.js +131 -0
- package/dist/services/memory-init-controller-start.js +103 -0
- package/dist/services/memory-init-engine-release.js +223 -0
- package/dist/services/memory-init-git-policy.js +165 -0
- package/dist/services/memory-init-lint-capability.js +203 -0
- package/dist/services/memory-init-native-capacity.js +309 -0
- package/dist/services/memory-init-preflight.js +334 -0
- package/dist/services/memory-init-project-bootstrap.js +599 -0
- package/dist/services/memory-init-request-candidate.js +213 -0
- package/dist/services/memory-init-request-input.js +82 -0
- package/dist/services/memory-init-resource-storage.js +125 -0
- package/dist/services/memory-init-run-allocation.js +81 -0
- package/dist/services/memory-init-run-bundle.js +135 -0
- package/dist/services/memory-init-start.js +181 -0
- package/dist/services/memory-init-startup-custody.js +80 -0
- package/dist/services/memory-init-startup-input.js +240 -0
- package/dist/services/memory-init-storage.js +91 -0
- package/dist/services/memory-init-stores.js +359 -0
- package/dist/services/memory-init-worktrunk-capability.js +174 -0
- package/dist/services/memory-layer-publication.js +611 -0
- package/dist/services/memory-layer.js +221 -0
- package/dist/services/memory-lint-config.js +194 -0
- package/dist/services/memory-native-review-copy.js +103 -0
- package/dist/services/memory-normal-flow-entry.js +87 -0
- package/dist/services/memory-ordinary-defaults.js +129 -0
- package/dist/services/memory-preflight-bootstrap-custody.js +115 -0
- package/dist/services/memory-preflight-handler.js +274 -0
- package/dist/services/memory-repair-current-view.js +299 -0
- package/dist/services/memory-repair-document-delta.js +488 -0
- package/dist/services/memory-repair-history.js +496 -0
- package/dist/services/memory-repair-physical-binding.js +194 -0
- package/dist/services/memory-repair-publication-files.js +152 -0
- package/dist/services/memory-repair-publication-intent.js +27 -0
- package/dist/services/memory-repair-publication-plan.js +162 -0
- package/dist/services/memory-repair-publication-source.js +225 -0
- package/dist/services/memory-repair-publication.js +795 -0
- package/dist/services/memory-repair-registration.js +240 -0
- package/dist/services/memory-repair-work-baseline.js +415 -0
- package/dist/services/memory-repair-work-completion.js +117 -0
- package/dist/services/memory-repair-work-custody.js +73 -0
- package/dist/services/memory-repair-work-results.js +108 -0
- package/dist/services/memory-repair-workspace.js +261 -0
- package/dist/services/memory-repair-writer-copy.js +736 -0
- package/dist/services/memory-result-binding.js +239 -0
- package/dist/services/memory-retained-review-authority.js +138 -0
- package/dist/services/memory-retained-review-results.js +70 -0
- package/dist/services/memory-retained-second-baseline.js +102 -0
- package/dist/services/memory-retained-second-repairs.js +162 -0
- package/dist/services/memory-review-acceptance.js +214 -0
- package/dist/services/memory-review-correction-plan.js +206 -0
- package/dist/services/memory-review-handler.js +585 -0
- package/dist/services/memory-review-inputs.js +246 -0
- package/dist/services/memory-review-limits.js +10 -0
- package/dist/services/memory-review-receipt.js +180 -0
- package/dist/services/memory-review-registration.js +117 -0
- package/dist/services/memory-review-work-custody.js +126 -0
- package/dist/services/memory-review-work-input.js +91 -0
- package/dist/services/memory-review-work-results.js +95 -0
- package/dist/services/memory-second-corrected-review-inputs.js +167 -0
- package/dist/services/memory-second-correction-plan.js +77 -0
- package/dist/services/memory-second-repair-baseline.js +91 -0
- package/dist/services/memory-second-repair-launch.js +614 -0
- package/dist/services/memory-second-repair-registration.js +88 -0
- package/dist/services/memory-second-repair-source.js +187 -0
- package/dist/services/memory-second-review-acceptance.js +115 -0
- package/dist/services/memory-source-observations.js +117 -0
- package/dist/services/memory-stage-dispatch.js +65 -0
- package/dist/services/memory-stage-results.js +290 -0
- package/dist/services/memory-tool-probe.js +25 -0
- package/dist/services/memory-upgrade-analysis-handler.js +243 -0
- package/dist/services/memory-upgrade-bootstrap-readiness.js +251 -0
- package/dist/services/memory-upgrade-evidence.js +100 -0
- package/dist/services/memory-upgrade-inventory.js +442 -0
- package/dist/services/memory-upgrade-publication-custody.js +73 -0
- package/dist/services/memory-upgrade-publication.js +413 -0
- package/dist/services/memory-upgrade-selection.js +430 -0
- package/dist/services/memory-upgrade-start.js +60 -0
- package/dist/services/memory-upgrade-storage-readiness.js +340 -0
- package/dist/services/memory-verification-acceptance.js +156 -0
- package/dist/services/memory-verification-checks.js +317 -0
- package/dist/services/memory-verification-receipt.js +160 -0
- package/dist/services/memory-verify-handler.js +137 -0
- package/dist/services/memory-work-result-json.js +12 -0
- package/dist/services/memory-work-result-preparation.js +64 -0
- package/dist/services/merge-queue.js +228 -149
- package/dist/services/merge-server.js +163 -35
- package/dist/services/migrations.js +164 -114
- package/dist/services/model-catalog.js +109 -0
- package/dist/services/model-discovery.js +46 -0
- package/dist/services/native-daemon-history.js +50 -0
- package/dist/services/native-session-control.js +39 -0
- package/dist/services/operator-profiles.js +236 -0
- package/dist/services/physical-startup.js +45 -0
- package/dist/services/plan-runtime.js +26 -11
- package/dist/services/plans.js +28 -25
- package/dist/services/project-registry.js +97 -0
- package/dist/services/project-summary.js +1 -1
- package/dist/services/projects.js +17 -87
- package/dist/services/prompt-delivery.js +71 -0
- package/dist/services/prompts.js +28 -17
- package/dist/services/protocols.js +163 -87
- package/dist/services/provider-capacity.js +463 -0
- package/dist/services/recovery-observation-budget.js +121 -0
- package/dist/services/recovery-snapshot-database.js +588 -0
- package/dist/services/release-archive-producer.js +52 -0
- package/dist/services/release-archive.js +143 -0
- package/dist/services/release-cache.js +150 -0
- package/dist/services/release-compatibility.js +18 -0
- package/dist/services/release-download.js +67 -0
- package/dist/services/release-envelope.js +104 -0
- package/dist/services/release-manifest.js +45 -0
- package/dist/services/release-payload.js +114 -0
- package/dist/services/release-producer.js +63 -0
- package/dist/services/release-provenance.js +160 -0
- package/dist/services/release-registry.js +66 -0
- package/dist/services/release-source.js +194 -0
- package/dist/services/repair-intents.js +31 -0
- package/dist/services/repair-receipt.js +13 -0
- package/dist/services/review-copy.js +165 -0
- package/dist/services/review-deferral.js +23 -0
- package/dist/services/run-control-receipt.js +56 -0
- package/dist/services/run-control-worker.js +428 -0
- package/dist/services/run-control.js +1092 -0
- package/dist/services/run-controller-adapter.js +400 -0
- package/dist/services/run-controller-capture.js +186 -0
- package/dist/services/run-controller-process.js +205 -0
- package/dist/services/run-controller-recovery.js +295 -0
- package/dist/services/run-controller-state.js +97 -0
- package/dist/services/run-controller.js +1395 -0
- package/dist/services/run-engine-bindings.js +1 -1
- package/dist/services/run-fork.js +147 -0
- package/dist/services/run-health.js +149 -0
- package/dist/services/run-observations.js +152 -0
- package/dist/services/run-projection.js +22 -64
- package/dist/services/run-recovery-guard.js +107 -0
- package/dist/services/run-recovery-runtime.js +112 -0
- package/dist/services/run-recovery.js +456 -0
- package/dist/services/run-start-custody.js +189 -0
- package/dist/services/runs.js +1023 -246
- package/dist/services/runtime-budget.js +446 -0
- package/dist/services/runtime-command.js +43 -0
- package/dist/services/runtime-scope-capture.js +52 -0
- package/dist/services/runtime-scope-control.js +468 -0
- package/dist/services/runtime-scope-resume.js +605 -0
- package/dist/services/runtime-scope-stop.js +211 -0
- package/dist/services/runtime-scope-worker.js +314 -0
- package/dist/services/runtime-service.js +19 -14
- package/dist/services/schema-validation.js +10 -8
- package/dist/services/scope-writer-cleanup.js +27 -0
- package/dist/services/sessions.js +36 -91
- package/dist/services/setup.js +427 -0
- package/dist/services/stage-blocker.js +17 -7
- package/dist/services/stage-context.js +240 -18
- package/dist/services/stage-handlers.js +89 -0
- package/dist/services/stage-lifecycle.js +152 -116
- package/dist/services/stage-pause.js +202 -91
- package/dist/services/stage-report-renderer.js +234 -6
- package/dist/services/stage-work-graph.js +52 -0
- package/dist/services/tooling.js +41 -30
- package/dist/services/usage.js +49 -101
- package/dist/services/verification-matrix.js +393 -0
- package/dist/services/version-status.js +1 -1
- package/dist/services/vnext-code-review.js +235 -88
- package/dist/services/vnext-code.js +327 -226
- package/dist/services/vnext-contracts.js +10 -1
- package/dist/services/vnext-execution-profile.js +80 -5
- package/dist/services/vnext-fanout.js +355 -21
- package/dist/services/vnext-merge.js +332 -111
- package/dist/services/vnext-plan-review.js +287 -132
- package/dist/services/vnext-plan.js +228 -104
- package/dist/services/vnext-protocolize.js +533 -95
- package/dist/services/vnext-specify.js +123 -81
- package/dist/services/vnext-workspace-policy.js +7 -2
- package/dist/services/work-registry.js +1706 -200
- package/dist/services/workspace-bootstrap.js +53 -15
- package/dist/services/workspace-files.js +85 -0
- package/dist/services/worktrees.js +105 -48
- package/dist/shared/entity-references.js +1 -0
- package/dist/shared/errors.js +27 -0
- package/dist/storage/agent-output.js +26 -0
- package/dist/storage/data-preservation.js +65 -0
- package/dist/storage/database.js +930 -40
- package/dist/storage/foreign-key-transaction.js +39 -0
- package/dist/storage/immutable-input.js +45 -0
- package/dist/storage/import-guard.js +159 -0
- package/dist/storage/memory-upgrade-schema-bootstrap.js +38 -0
- package/dist/storage/native-cleanup.js +52 -0
- package/dist/storage/paired-writer-migration.js +424 -0
- package/dist/storage/paths.js +17 -4
- package/dist/storage/projection-lock.js +73 -0
- package/dist/storage/work-references.js +23 -0
- package/dist/storage/writer-contract.js +96 -0
- package/dist/storage/writer-migration.js +346 -0
- package/dist/storage/writer-restore.js +217 -0
- package/dist/verification-components.json +299 -0
- package/package.json +51 -13
- package/tools/create-canon-release.mjs +33 -0
- package/tools/probe-codex-history.mjs +37 -0
- package/tools/produce-hybrid-release.mjs +41 -0
- package/tools/repair-paused-run-status.mjs +84 -0
package/README.md
CHANGED
|
@@ -1,5 +1,71 @@
|
|
|
1
1
|
# dd-flow-cli
|
|
2
2
|
|
|
3
|
+
See [dd-zcode integration](src/harness-runtime/DD-ZCODE.md) for native transport,
|
|
4
|
+
adapter ownership and the versioned bridge contract.
|
|
5
|
+
|
|
6
|
+
## OpenCode v2
|
|
7
|
+
|
|
8
|
+
`dd-opencode` supports OpenCode v2 only; the final v1 source is tagged
|
|
9
|
+
`archive/opencode-v1-final-beta134`. Client/plugin build inputs are pinned to
|
|
10
|
+
2.0.28; build copies the unmodified self-contained upstream Promise assets.
|
|
11
|
+
Optional AI/Effect/TUI dependency graphs are not production engine dependencies.
|
|
12
|
+
Select the native executable with `--opencode-bin`, portable JSON/JSONC provider
|
|
13
|
+
config with `--config-path` and selected credentials with `--auth-path` (legacy
|
|
14
|
+
provider auth map or native v2 credential-list JSON). Credentials are loaded and
|
|
15
|
+
verified in the owned private DB, never copied from the user's Session DB.
|
|
16
|
+
|
|
17
|
+
The adapter owns an unregistered loopback `serve` instance, private XDG paths,
|
|
18
|
+
DB and launch-bound dd-flow plugin. It does not install a global user plugin or
|
|
19
|
+
load third-party plugins. `doctor` checks the native instance and productive
|
|
20
|
+
plugin separately from model qualification. No-flow probes load only the owned
|
|
21
|
+
secret-stripping security definition, without lifecycle admission. V1 states/archives are rejected
|
|
22
|
+
without migration; use a fresh v2 state directory.
|
|
23
|
+
|
|
24
|
+
Prompt acknowledgement means inbox admission, not success. Lost replies are
|
|
25
|
+
reconciled read-only against the same message ID; `session resume` never wakes
|
|
26
|
+
execution. Native projected user/idle records prove delivery/outcome because
|
|
27
|
+
CLI v2 does not persist full event payloads by default. Model/tool deltas and
|
|
28
|
+
new owned shell output sustain the shared sliding observer. Proven terminal
|
|
29
|
+
overload uses the shared continuation policy; quota/auth and unknown effects
|
|
30
|
+
do not authorize a prompt replay. `session fork --message-id` means **before**
|
|
31
|
+
that message, recorded in the native boundary receipt.
|
|
32
|
+
|
|
33
|
+
Technical native probes use a local stub, not scored EVALs:
|
|
34
|
+
`DD_TEST_OPENCODE_V2=<absolute-v2-binary> node --test test/fixtures/opencode-v2-native.mjs test/fixtures/opencode-v2-plugin-native.mjs`.
|
|
35
|
+
Add `DD_TEST_OPENCODE_LONG=1` to prove shell progress beyond the old 120s cutoff.
|
|
36
|
+
|
|
37
|
+
## Native daemon shutdown
|
|
38
|
+
|
|
39
|
+
Managed native shells use the launch-bound `DD_FLOW_DAEMON_ID`, `DD_FLOW_HOME`,
|
|
40
|
+
`DD_FLOW_BIN` and resource path. Inherited invocation/control authority is
|
|
41
|
+
cleared; security-only launches do not borrow a previous RUN's identity.
|
|
42
|
+
Compact lifecycle commands resolve private arguments from the issued assignment
|
|
43
|
+
and its native receipt, not from a model-supplied ID or the latest matching row.
|
|
44
|
+
A lost managed binding is a tooling failure, not permission to replay a short
|
|
45
|
+
command. Corrective retries are scoped to the action, Session and Stage attempt;
|
|
46
|
+
exact native event re-delivery returns the retained outcome.
|
|
47
|
+
|
|
48
|
+
`daemon.stop` fences productive dispatch before awaiting settlement. A successful
|
|
49
|
+
durable stop receipt follows native tree settlement, physical provider exit,
|
|
50
|
+
journal drain and required resource/auth finalization. The endpoint then retires
|
|
51
|
+
before ACK; clients also verify the retained daemon PID has exited. A missing
|
|
52
|
+
socket alone is not physical shutdown proof.
|
|
53
|
+
|
|
54
|
+
Partial cleanup preserves the same incarnation's completed phases in
|
|
55
|
+
`daemon.json` (`dd-flow/daemon-shutdown@1`). A fresh control operation can finish
|
|
56
|
+
remaining cleanup without replaying agent work or inspecting a closed pipe.
|
|
57
|
+
Failed operation IDs remain immutable. Unknown ownership and persistent EPERM
|
|
58
|
+
remain failures; never remove sockets or repair runtime databases manually to
|
|
59
|
+
make an outcome look clean.
|
|
60
|
+
|
|
61
|
+
Shutdown proof records `required_phases`; every recorded phase must be complete,
|
|
62
|
+
including native tree and daemon resource settlement. A `clean` label without
|
|
63
|
+
this proof cannot authorize retained restart. `stopping`, `cleanup_failed` and
|
|
64
|
+
`unclean` cannot start a replacement native bridge. Forced AGY termination
|
|
65
|
+
without a current native terminal receipt is unclean, even after a previous
|
|
66
|
+
successful Turn. Mandatory stream-journal failures remain failures after
|
|
67
|
+
physical cleanup. Listener retirement must not unlink a replacement endpoint.
|
|
68
|
+
|
|
3
69
|
## Managed temporary HTTP services
|
|
4
70
|
|
|
5
71
|
For an interactive scenario, `runtime process start --run <RUN-ID>
|
|
@@ -17,6 +83,36 @@ Never use a broad `pkill`/`killall`. A failed owned stop retains resources.
|
|
|
17
83
|
|
|
18
84
|
It does not replace Memory Bank prompts and does not make product, design, merge, or verification judgments. Prompts own intent, route selection, planning depth, evidence meaning, and semantic readiness. The CLI owns explicit local state: projects, protocols, Codex session bindings, transitions, worktree records, lanes, locks, merge queue jobs, hook records, and audit events.
|
|
19
85
|
|
|
86
|
+
## Factory Droid harness
|
|
87
|
+
|
|
88
|
+
Configure `droid-cli` in `~/.dd-flow/harnesses.json` with absolute
|
|
89
|
+
`adapter_command` (`dd-droid`) and `runtime_command` (`droid`) paths. Agent
|
|
90
|
+
profiles use the `droid` alias; the adapter receives `--droid-bin`.
|
|
91
|
+
|
|
92
|
+
The controlled adapter sends `dd-flow/droid-tool-event@1` JSON to
|
|
93
|
+
`dd-flow droid event handle --project-root <root> --json`. Events include a
|
|
94
|
+
stable `event_id`, `daemon_id`, `phase` (`before` or `after`), native Session
|
|
95
|
+
identity and parent, absolute Session directory, `Execute` input, observed
|
|
96
|
+
profile and transcript path. Before a lifecycle invocation, the returned
|
|
97
|
+
`hookSpecificOutput.updatedInput` adds its one-use `--hook-event-id` receipt.
|
|
98
|
+
The event ID belongs to the native hook invocation and is reused only for
|
|
99
|
+
transport retries. Session success is established by the Work contract.
|
|
100
|
+
|
|
101
|
+
`dd-flow droid usage ingest --project-root <root> --json` accepts cumulative
|
|
102
|
+
per-Session counters with explicit `usage_scope: physical_session` and
|
|
103
|
+
`completeness: complete|partial`. Inclusive root counters are rejected;
|
|
104
|
+
partial windows remain unavailable in RUN totals until complete evidence
|
|
105
|
+
arrives. Keep inclusive provider totals in adapter evidence for reconciliation.
|
|
106
|
+
|
|
107
|
+
## Check evidence
|
|
108
|
+
|
|
109
|
+
Checks write evidence into their invocation's `DD_FLOW_EVIDENCE_DIR`. Receipts
|
|
110
|
+
retain and hash every regular file in that directory, including nested files.
|
|
111
|
+
`required_artifacts` specifies the minimum files needed to pass, so an empty
|
|
112
|
+
list still permits supplemental screenshots or reports. Missing required files
|
|
113
|
+
fail the check. Symlinks are not followed or registered. The same collection
|
|
114
|
+
rules apply when recovering a detached check from its completion marker.
|
|
115
|
+
|
|
20
116
|
## Runtime Model
|
|
21
117
|
|
|
22
118
|
Root local database:
|
|
@@ -65,6 +161,8 @@ dd-flow canon status --json
|
|
|
65
161
|
|
|
66
162
|
`canon resolve` checks explicit `--root`, then `DD_MEMORYBANK`, then the globally registered value in `DD_FLOW_HOME`, then known nearby `dd-memorybank` checkouts from the current working directory. If two different valid canonical roots are discovered, it fails closed with structured blockers and bootstrap hints. Use `DD_MEMORYBANK` for the local canonical `dd-memorybank` checkout.
|
|
67
163
|
|
|
164
|
+
With no explicit, environment or registered source, the release installed by `setup` in `DD_FLOW_HOME` takes precedence over nearby checkouts. Archive provenance comes from its retained release manifest. A degraded installation does not silently fall back to a local checkout. Discovery remains read-only and does not open SQLite before runtime context admission.
|
|
165
|
+
|
|
68
166
|
Register a project:
|
|
69
167
|
|
|
70
168
|
```bash
|
|
@@ -412,13 +510,44 @@ remain invalid and receive a standalone retry.
|
|
|
412
510
|
|
|
413
511
|
## Verification
|
|
414
512
|
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
513
|
+
Checks follow changed contracts, not a merge/release/EVAL event. Inspect
|
|
514
|
+
`pnpm verify:plan`, then run `pnpm test` (or `pnpm gate:merge`) for only missing
|
|
515
|
+
affected contracts. `scripts/verification-policy.mjs` owns impact selection;
|
|
516
|
+
existing Node/Vitest runners retain complete selected-file/case evidence.
|
|
517
|
+
Unknown impact requires an explicit policy mapping, never a full-suite fallback.
|
|
518
|
+
|
|
519
|
+
There is no mandatory full release gate. Freeze source/canon, build and pack the
|
|
520
|
+
exact artifact, then accept with `DD_FLOW_VERIFICATION_RECEIPT` pointing to the
|
|
521
|
+
scoped verification receipt. Preserve receipts outside the checkout. Unchanged
|
|
522
|
+
contract inputs reuse intact reports; commit/version/build time alone do not
|
|
523
|
+
invalidate behavior evidence. Failed/unknown attempts require investigation,
|
|
524
|
+
not automatic retries. Package identity and registry readback remain mandatory.
|
|
525
|
+
GitHub CI is disabled. Publication does not repeat the accepted package's smoke
|
|
526
|
+
after identical registry tar readback. EVAL preparation is resource readiness,
|
|
527
|
+
not another engine or product test suite.
|
|
528
|
+
The [verification runbook](https://github.com/deksden-com/dd-eval/blob/main/runbooks/flow-test-suite-verification.md)
|
|
529
|
+
owns the local procedure. A scoped PASS is not a claim that every test ran.
|
|
530
|
+
|
|
531
|
+
### RUN status during recovery
|
|
532
|
+
|
|
533
|
+
A controller failure pauses the logical RUN without rewriting its Stage/Work
|
|
534
|
+
outcomes. Accepted pause/stop or recovery intent immediately persists `paused` in the RUN row,
|
|
535
|
+
`index_json`, and `run.json`. A trusted recovery acknowledgement restores the
|
|
536
|
+
operational status; an existing Stage/Work pause remains paused. Terminal RUNs
|
|
537
|
+
are never reopened. Physical tree settlement remains a separate control receipt.
|
|
538
|
+
|
|
539
|
+
Legacy stores with a fenced recovery may still contain `running`. After building,
|
|
540
|
+
inspect one exact RUN with:
|
|
541
|
+
|
|
542
|
+
```sh
|
|
543
|
+
node tools/repair-paused-run-status.mjs --home /path/to/dd-flow-home --project PRJ-001-project --run RUN-001-eval-subject
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
Add `--apply` to repair it. This requires the latest recovery to be draining, sealed or resuming, saves the original row and runtime JSON
|
|
547
|
+
beside `run.json`, and changes no schema, engine binding or recovery capture.
|
|
548
|
+
It does not claim physical settlement or alter its receipts. `--cancel-abandoned`
|
|
549
|
+
explicitly cancels an abandoned fixture only when the project directory is absent
|
|
550
|
+
and it has no Work, Session, controller or recovery history. Historical experiment
|
|
551
|
+
engine snapshots remain pinned; rebuild/release the engine for future executions.
|
|
552
|
+
|
|
553
|
+
`dd-flow run reconcile [RUN] --json` проверяет сохранённые статусы без dispatch; `--apply` сохраняет согласованную health-проекцию. Возраст записи даёт предупреждение, а не доказательство ошибки. Ожидания и потеря владельца различаются; обслуживание не сигналит процессам и не перехватывает leases.
|
package/dist/build-info.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"cli_package": "@deksden-com/dd-flow-cli",
|
|
3
|
-
"cli_version": "0.9.0-beta.
|
|
4
|
-
"cli_commit": "
|
|
5
|
-
"built_at": "2026-
|
|
3
|
+
"cli_version": "0.9.0-beta.151",
|
|
4
|
+
"cli_commit": "89cad0d654601de59b12929240eee4e958b74207",
|
|
5
|
+
"built_at": "2026-10-25T10:59:05.638Z",
|
|
6
6
|
"built_with_canon": {
|
|
7
|
-
"version": "4.
|
|
8
|
-
"commit": "
|
|
7
|
+
"version": "4.1.2",
|
|
8
|
+
"commit": "925ef10ecc0b683f7feba6f74913e15560842500",
|
|
9
9
|
"flow_contract": "dd-flow-canonical-2026-08",
|
|
10
|
-
"repo_root": "/Users/deksden/Documents/_Projects/dd-memorybank",
|
|
11
|
-
"memorybank_root": "/Users/deksden/Documents/_Projects/dd-memorybank/.memory-bank",
|
|
12
|
-
"flow_root": "/Users/deksden/Documents/_Projects/dd-memorybank/.memory-bank/dd-flow",
|
|
10
|
+
"repo_root": "/Users/deksden/Documents/_Projects/_worktrees/dd-memorybank-cp253",
|
|
11
|
+
"memorybank_root": "/Users/deksden/Documents/_Projects/_worktrees/dd-memorybank-cp253/.memory-bank",
|
|
12
|
+
"flow_root": "/Users/deksden/Documents/_Projects/_worktrees/dd-memorybank-cp253/.memory-bank/dd-flow",
|
|
13
13
|
"layout": "dot_memory_bank"
|
|
14
14
|
}
|
|
15
15
|
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { AppError } from "../shared/errors.js";
|
|
2
|
+
const flagValue = "__dd_flow_flag__";
|
|
3
|
+
export function optionalOption(parsed, key) {
|
|
4
|
+
const values = parsed.options.get(key);
|
|
5
|
+
const value = values?.[values.length - 1];
|
|
6
|
+
if (value === flagValue)
|
|
7
|
+
throw new AppError("usage", `--${key} requires a value`, 2, { parameter: key, reason: "missing_option_value" });
|
|
8
|
+
if (value !== undefined && !value.trim())
|
|
9
|
+
throw new AppError("usage", `--${key} requires a non-empty value`, 2, { parameter: key, reason: "empty_option_value" });
|
|
10
|
+
return value;
|
|
11
|
+
}
|
|
12
|
+
export function requiredOption(parsed, key) {
|
|
13
|
+
const value = optionalOption(parsed, key);
|
|
14
|
+
if (!value) {
|
|
15
|
+
throw new AppError("usage", `Missing required option: --${key}`, 2, { parameter: key, reason: "missing_required_option" });
|
|
16
|
+
}
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
export function optionalNumber(parsed, key) {
|
|
20
|
+
const value = optionalOption(parsed, key);
|
|
21
|
+
if (typeof value === "undefined") {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
const parsedNumber = Number(value);
|
|
25
|
+
if (!Number.isFinite(parsedNumber)) {
|
|
26
|
+
throw new AppError("validation", `--${key} must be a number`, 2, { parameter: key, reason: "invalid_number" });
|
|
27
|
+
}
|
|
28
|
+
return parsedNumber;
|
|
29
|
+
}
|
|
30
|
+
export function optionalPositiveNumber(parsed, key, integer = false) {
|
|
31
|
+
const value = optionalNumber(parsed, key);
|
|
32
|
+
if (typeof value === "undefined")
|
|
33
|
+
return undefined;
|
|
34
|
+
if (value <= 0 || (integer && !Number.isInteger(value))) {
|
|
35
|
+
throw new AppError("validation", `--${key} must be a positive${integer ? " integer" : ""} number`, 2, { parameter: key, reason: "invalid_number" });
|
|
36
|
+
}
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
import { AppError } from "../shared/errors.js";
|
|
2
|
+
import { parseCommandArgs } from "../services/lifecycle-command.js";
|
|
3
|
+
import { lifecycleInternalOptions, lifecycleRouteForOperation } from "../services/lifecycle-contract.js";
|
|
4
|
+
import { isUpgradeAllowlisted } from "../services/cli-upgrade-allowlist.js";
|
|
5
|
+
const words = (value) => value.split(" ").filter(Boolean);
|
|
6
|
+
const route = (positions, required = "", values = "", switches = "", repeatable = "", enums = {}) => ({
|
|
7
|
+
positions: typeof positions === "number" ? [positions, positions] : positions,
|
|
8
|
+
required: words(required), values: words(`${required} ${values}`), switches: words(switches), repeatable: words(repeatable), enums
|
|
9
|
+
});
|
|
10
|
+
const project = "project-root";
|
|
11
|
+
const scoped = "project-root"; // Optional when the router resolves a unique retained scope.
|
|
12
|
+
const lifecycle = lifecycleInternalOptions.join(" ");
|
|
13
|
+
const worker = "worker-id";
|
|
14
|
+
const control = "project-root run";
|
|
15
|
+
const protocolTransitionInput = route(1, "to", `${scoped} payload-file json-file reason`, "force");
|
|
16
|
+
const setupInput = route(0, "request-id trust-file", "canon-source canon-version release-registry channel profile profile-file save-profile-intent", "non-interactive skip-agent-setup", "", { channel: ["stable", "preview", "development"] });
|
|
17
|
+
const memoryInitInput = route(0, "project-root workspace-root request-id", "intake-file intake-sha256 profile profile-file stage-profile work-profile max-parallel delegation native-config-home git-route integration-branch", "detach non-interactive prepare-only allow-live-probe", "stage-profile work-profile", { "git-route": ["integration_branch_direct", "feature_worktree"], delegation: ["external", "native"] });
|
|
18
|
+
const diagnosticInput = route(0, "project-root request-id", "intake-file profile profile-file stage-profile work-profile max-parallel", "detach non-interactive prepare-only", "stage-profile work-profile");
|
|
19
|
+
export const commandAliases = { transition: "protocol transition", init: "flow mb-init", upgrade: "flow mb-upgrade", review: "flow project-review" };
|
|
20
|
+
/** Path-shaped arguments default to physical paths unless the route explicitly
|
|
21
|
+
* opts into contextualPaths. This inventory does not expand arbitrary strings. */
|
|
22
|
+
export const physicalPathOptions = new Set(words("canon-source trust-file root project-root workspace-root workspace-path workspace-path path dir file schema-dir output result-file semantic-file data decision-file verification-file reason-file task-file intake-file context-file observations-file observation-file summary-file question-file answer-file payload-file json-file task-profile-file execution-routing-file protocol-override-file manifest-file routing-file config-file input-file report-file snapshot-file output-dir state-dir capture-root capture-path destination source archive snapshot plan-file backup-path database backup source-home target-home stdout stderr adapter-executable memory-bank flow stage-report dashboard report"));
|
|
23
|
+
physicalPathOptions.add("profile-file");
|
|
24
|
+
physicalPathOptions.add("save-profile-intent");
|
|
25
|
+
physicalPathOptions.add("model-observation-file");
|
|
26
|
+
physicalPathOptions.add("release-registry");
|
|
27
|
+
physicalPathOptions.add("seed-file");
|
|
28
|
+
physicalPathOptions.add("native-executable");
|
|
29
|
+
physicalPathOptions.add("native-config-home");
|
|
30
|
+
physicalPathOptions.add("operational-decision-file");
|
|
31
|
+
export const commandInputs = {
|
|
32
|
+
"version": route(0),
|
|
33
|
+
"flow list": route(0),
|
|
34
|
+
"flow show": route(1),
|
|
35
|
+
"flow mb-init": memoryInitInput,
|
|
36
|
+
"init": memoryInitInput,
|
|
37
|
+
"flow mb-upgrade": memoryInitInput,
|
|
38
|
+
"upgrade": memoryInitInput,
|
|
39
|
+
"flow mb-audit": diagnosticInput,
|
|
40
|
+
"flow project-review": diagnosticInput,
|
|
41
|
+
"review": diagnosticInput,
|
|
42
|
+
"runtime storage admit": route(0, "operation", "", "", "", { operation: ["memory-init", "memory-upgrade"] }),
|
|
43
|
+
"runtime storage qualify": route(0, "operation", "", "", "", { operation: ["memory-upgrade"] }),
|
|
44
|
+
"runtime storage transition": route(0, "action project-root workspace-root request-id selection-sha256", "expected-sha256 recovery-id", "offline", "", { action: ["plan", "apply", "status", "recovery-plan", "recover", "recovery-status"] }),
|
|
45
|
+
"runtime flow admit": route(0, "operation", "", "", "", { operation: ["memory-init", "memory-upgrade", "mb-audit", "project-review"] }),
|
|
46
|
+
"completion bash": route(0),
|
|
47
|
+
"completion zsh": route(0),
|
|
48
|
+
"completion fish": route(0),
|
|
49
|
+
"completion candidates": route([0, 1000]),
|
|
50
|
+
"harnesses list": route(0),
|
|
51
|
+
"models list": route(0, "", "harness provider account-sha256 seed-file observation-file", "", "", { harness: ["codex", "zcode", "agy", "opencode", "grok", "droid"] }),
|
|
52
|
+
"models show": route(1, "", "harness provider account-sha256 seed-file observation-file", "", "", { harness: ["codex", "zcode", "agy", "opencode", "grok", "droid"] }),
|
|
53
|
+
"harnesses show": route(1),
|
|
54
|
+
"harnesses discover": route(0, "", "harness executable", "", "", { harness: ["codex", "zcode", "agy", "opencode", "grok", "droid"] }),
|
|
55
|
+
"harnesses probe-version": route(0, "harness", "executable timeout-ms", "allow-processes allow-credentials allow-writes", "", { harness: ["codex", "zcode", "agy", "opencode", "grok", "droid"] }),
|
|
56
|
+
"harnesses doctor": route(0, "harness", "executable native-executable state-dir timeout-ms provider account-sha256 model-observation-file", "allow-processes allow-services allow-credentials allow-writes", "", { harness: ["codex", "zcode", "agy", "opencode", "grok", "droid"] }),
|
|
57
|
+
"setup": setupInput,
|
|
58
|
+
"setup update": setupInput,
|
|
59
|
+
"setup status": route(0),
|
|
60
|
+
"profiles list": route(0),
|
|
61
|
+
"profiles show": route(1),
|
|
62
|
+
"profiles create": route(0, "file expected-revision", "", "set-default"),
|
|
63
|
+
"profiles edit": route(0, "file expected-revision"),
|
|
64
|
+
"profiles remove": route(1, "expected-revision"),
|
|
65
|
+
"profiles alias": route(1, "expected-revision", "target", "remove"),
|
|
66
|
+
"profiles set-default": route([0, 1], "expected-revision", "", "clear"),
|
|
67
|
+
"status": route(0, "", "root project-root", "check-registry"),
|
|
68
|
+
"project register": route(0, "root"),
|
|
69
|
+
"project status": route(0, "root"),
|
|
70
|
+
"project summary": route(0, project, "write"),
|
|
71
|
+
"project resolve": route(1),
|
|
72
|
+
"project archive": route([0, 1], "reason", "root"),
|
|
73
|
+
"project migrate-ids": route(0, "root", "", "apply"),
|
|
74
|
+
"project config status": route(0, project),
|
|
75
|
+
"project config set": route(0, `${project} key value`),
|
|
76
|
+
"protocol register": route(1, project, "workspace-path"),
|
|
77
|
+
"protocol status": route(1, "", scoped),
|
|
78
|
+
"protocol branch-status": route([0, 1], "", `${scoped} path`),
|
|
79
|
+
"protocol ready": route(0, project),
|
|
80
|
+
"protocol blockers": route(1, project),
|
|
81
|
+
"protocol implement": route(1, "", `${scoped} reason`, "force"),
|
|
82
|
+
"protocol ready-for-merge": route(1, "", scoped),
|
|
83
|
+
"protocol transition": protocolTransitionInput,
|
|
84
|
+
"transition": protocolTransitionInput,
|
|
85
|
+
"protocol sync-from-run": route(1, "run", `${scoped} target`),
|
|
86
|
+
"protocol cancel": route(1, "reason", `${scoped} close-sessions cancel-queue release-locks worktree`, "force"),
|
|
87
|
+
"plan status": route(1, "", scoped),
|
|
88
|
+
"plan reviews": { ...route(0), retired: "PLAN review dispatch moved to: dd-flow plan-review dispatch <RUN>" },
|
|
89
|
+
"plan item start": route(2, "", scoped),
|
|
90
|
+
"plan item done": route(2, "summary", `${scoped} evidence`, "", "evidence"),
|
|
91
|
+
"plan item block": route(2, "reason user-required", scoped),
|
|
92
|
+
"plan item skip": route(2, "reason", scoped),
|
|
93
|
+
"plan-review dispatch": route(1, "", scoped),
|
|
94
|
+
"prompt render": { ...route(0, `${project} run stage profile`, "workspace-root task-file plan-item"), contextualPaths: words("project-root workspace-root task-file") },
|
|
95
|
+
"stage start": { ...route([0, 1], `${project} stage`, `${lifecycle} dir subject intake-file context-file context-sha256`, "bootstrap intake-stdin require-session-binding"), contextualPaths: words("project-root intake-file context-file") },
|
|
96
|
+
"stage finish": { ...route(1, `${project} stage`, `${lifecycle} dir semantic-file data result-file outcome decision-file verification-file retry-check reason reason-file request work`, "result-stdin"), contextualPaths: words("project-root semantic-file result-file decision-file verification-file reason-file") },
|
|
97
|
+
"stage pause": { ...route(1, `${project} stage work`, `${lifecycle} question-file`, "question-stdin"), contextualPaths: words("project-root question-file") },
|
|
98
|
+
"stage resume": { ...route(1, `${project} stage work`, `${lifecycle} answer-file`, "answer-stdin"), contextualPaths: words("project-root answer-file") },
|
|
99
|
+
"stage block": { ...route(1, `${project} stage work kind code`, "summary-file", "summary-stdin retryable", "", { kind: ["engine", "harness", "environment"] }), contextualPaths: words("project-root summary-file") },
|
|
100
|
+
"stage unblock": route(1, `${project} stage work`),
|
|
101
|
+
"stage fanout status": route(1, "stage", scoped),
|
|
102
|
+
"stage fanout dispatch": route(1, "stage", scoped),
|
|
103
|
+
"stage fanout reconcile": { ...route(1, "stage observations-file", scoped), contextualPaths: words("project-root observations-file") },
|
|
104
|
+
"stage native observe": { ...route(1, "stage observations-file", scoped), contextualPaths: words("project-root observations-file") },
|
|
105
|
+
"work status": route(1, project),
|
|
106
|
+
"work add-batch": { ...route(0, "parent file", `${scoped} stage request-key`), contextualPaths: words("project-root file") },
|
|
107
|
+
"work ls": route(0, "", `${scoped} run parent status limit`, "ready include-results", "", { status: ["created", "running", "paused", "completed", "failed", "cancelled"] }),
|
|
108
|
+
"work show": route(1, "", scoped),
|
|
109
|
+
"work repair add": { ...route(0, "run", `${scoped} origin-work from-check from-finding from-unresolved check-ref verification-file task-file`, "task-stdin", "origin-work from-finding from-unresolved check-ref"), contextualPaths: words("project-root verification-file task-file") },
|
|
110
|
+
"work deps add": route(1, "on", scoped, "", "on"),
|
|
111
|
+
"work deps remove": route(1, "on", scoped, "", "on"),
|
|
112
|
+
"work deps list": route(1, "", scoped),
|
|
113
|
+
"work deps clear": route(1, "", scoped),
|
|
114
|
+
"work delete": route(1, "", scoped),
|
|
115
|
+
"work launch": route(1, "", `${scoped} stage`),
|
|
116
|
+
"work start": { ...route(1, "", `${scoped} ${lifecycle} recovery-id`), contextualPaths: ["project-root"] },
|
|
117
|
+
"work finish": { ...route(1, "", `${scoped} ${lifecycle} result-file retry-check reason reason-file`, "result-stdin"), contextualPaths: words("project-root result-file reason-file") },
|
|
118
|
+
"work fail": { ...route(1, "reason", `${scoped} ${lifecycle}`), contextualPaths: ["project-root"] },
|
|
119
|
+
"work cancel": route(1, "reason", scoped),
|
|
120
|
+
"work retry": route(1, "reason", scoped),
|
|
121
|
+
"session register": { ...route(0, "", `${scoped} ${lifecycle} payload-base64 payload-json payload-file session-id`), contextualPaths: words("project-root payload-file") },
|
|
122
|
+
"session status": route(0, project, "session-id worker-id"),
|
|
123
|
+
"session stop": route(0, `${project} session-id reason`),
|
|
124
|
+
"session stop-worker": route(0, `${project} worker-id reason`),
|
|
125
|
+
"session usage sync": route(0, project, "session-id"),
|
|
126
|
+
"run start": route(0, `${project} flow-kind subject-type subject-id slug`, "workspace-root next-action preset task-profile-file execution-routing-file protocol-override-file flag", "", "flag"),
|
|
127
|
+
"run prepare-vnext-specify": route(0, `${project} slug`, "execution-routing-file"),
|
|
128
|
+
"run status": route(1, project),
|
|
129
|
+
"run reconcile": route([0, 1], "", "project-root no-progress-ms", "apply"),
|
|
130
|
+
"run list": route(0, project),
|
|
131
|
+
"run timeline": route(1, project, "hide", "", "hide"),
|
|
132
|
+
"run config status": route(1, project),
|
|
133
|
+
"run config set": route(1, `${project} key value reason`),
|
|
134
|
+
"run vars ls": route(1, project),
|
|
135
|
+
"run vars get": route(1, `${project} key`),
|
|
136
|
+
"run vars set": route(1, `${project} key value`),
|
|
137
|
+
"run flags status": route(1, project),
|
|
138
|
+
"run flags revise": route(1, `${project} expected-revision idempotency-key`, "flag preset reason", "allow-downgrade", "flag"),
|
|
139
|
+
"run attach-stage": route(1, `${project} stage dir status`, "data-schema-id"),
|
|
140
|
+
"run complete-stage": route(1, `${project} stage status`, "stage-report dashboard data data-schema-id report alias", "", "alias"),
|
|
141
|
+
"run complete": { ...route(0), retired: "run complete is retired; only an operator may use run override" },
|
|
142
|
+
"run override": route(1, `${project} status reason`, "verdict next-action", "", "", { status: ["cancelled", "failed"] }),
|
|
143
|
+
"run capacity record": route(1, `${project} available-slots`),
|
|
144
|
+
"run recovery inspect": route(1, project),
|
|
145
|
+
"run recovery begin": route(1, `${project} interruption-json`),
|
|
146
|
+
"run recovery seal": route(1, `${project} recovery-id settlement-json`),
|
|
147
|
+
"run recovery capture": route(1, `${project} recovery-id capture-path`),
|
|
148
|
+
"run recovery resume": route(1, `${project} recovery-id daemon-id harness native-session-id`),
|
|
149
|
+
"run recovery accept": { ...route(1, `${project} recovery-id`, lifecycle), contextualPaths: ["project-root"] },
|
|
150
|
+
"run snapshot bootstrap create": route(0, `${project} output flow`),
|
|
151
|
+
"run snapshot bootstrap restore": route(0, `${project} snapshot`),
|
|
152
|
+
"run snapshot create": route(1, `${project} output`, "recovery-id stage-entry", "candidate incomplete"),
|
|
153
|
+
"run snapshot restore": route(0, `${project} snapshot`, "execution-routing-file operational-decision-file recovery-id"),
|
|
154
|
+
"run fork": route(0, "from output engine-version request-id", "integrity-checksum operational-decision-file"),
|
|
155
|
+
"run drive status": route(0, control, "after"),
|
|
156
|
+
"run drive launch": route(0, `${control} request-id context-file context-sha256`, "stop-after capture-root"),
|
|
157
|
+
"run drive serve": route(0, `${control} controller-id`),
|
|
158
|
+
"run drive answer": route(0, `${control} request-id pause-id answer-file`),
|
|
159
|
+
"run drive context": route(0, `${control} controller-id request-id stage context-file context-sha256`),
|
|
160
|
+
"run control status": route(0, control),
|
|
161
|
+
"run control reconcile": route(0, `${control} control-id request-id`),
|
|
162
|
+
"run control resume": route(0, `${control} request-id from`, "wait-ms"),
|
|
163
|
+
"run control serve": route(0, `${control} control-id`),
|
|
164
|
+
"run control pause": route(0, `${control} request-id`, "grace-ms wait-ms escalate", "force"),
|
|
165
|
+
"run control stop": route(0, `${control} request-id`, "grace-ms wait-ms escalate", "force"),
|
|
166
|
+
"runtime scope fence": route(0, "scope-id request-id"),
|
|
167
|
+
"runtime scope status": route(0, "", "scope-id scope-ids-json"),
|
|
168
|
+
"runtime scope stop": route(0, "scope-id request-id"),
|
|
169
|
+
"runtime scope control": route(0, "scope-id request-id mode", "manifest-json", "", "", { mode: ["pause", "stop"] }),
|
|
170
|
+
"runtime scope serve": route(0, "scope-id generation"),
|
|
171
|
+
"runtime scope resume": route(0, "scope-id request-id generation capture-key"),
|
|
172
|
+
"runtime scope reconcile": route(0, "scope-id generation request-id"),
|
|
173
|
+
"runtime process check-admission": route(0, "id lease-token"),
|
|
174
|
+
"runtime process start": route(0, `${control} command ports ready-port`, "ready-path ready-timeout-ms"),
|
|
175
|
+
"runtime process stop": route(0, "id lease-token", "grace-ms"),
|
|
176
|
+
"runtime process register": route(0, "kind owner", "id lease-ms budget-json project-id run pid process-group-id owner-pid work check operation stdout stderr harness dispatch-barrier role state-dir adapter-executable"),
|
|
177
|
+
"runtime process confirm": route(0, "id lease-token pid", "owner-pid lease-ms process-group-id"),
|
|
178
|
+
"runtime process heartbeat": route(0, "id lease-token", "lease-ms registration-sha256"),
|
|
179
|
+
"runtime process admission": route(0, "id lease-token owner state-dir", "daemon-id operation-id operation native-session-id prompt-sha256"),
|
|
180
|
+
"runtime process release-turn": route(0, "id lease-token owner daemon-id", "operation-id observation-file"),
|
|
181
|
+
"runtime process finish": route(0, "id lease-token state", "reason", "", "", { state: ["stopped", "failed"] }),
|
|
182
|
+
"runtime process status": route(0, "", "id lease-token registration-sha256"),
|
|
183
|
+
"runtime process reconcile": route(0, "owner", "grace-ms"),
|
|
184
|
+
"lane status": route(0, project, "lane"),
|
|
185
|
+
"lane waiters": route(0, project, "lane"),
|
|
186
|
+
"lane waiter cancel": route(0, `${project} lane ${worker} reason`),
|
|
187
|
+
"lane workspace set": route(0, `${project} lane path`, "branch"),
|
|
188
|
+
"lane workspace check": route(0, `${project} lane path`),
|
|
189
|
+
"lane lock acquire": route(0, `${project} lane ${worker} reason`, "path ttl"),
|
|
190
|
+
"lane lock heartbeat": route(0, `${project} lane ${worker}`, "path lease-token ttl"),
|
|
191
|
+
"lane lock release": route(0, `${project} lane ${worker} reason`, "path lease-token"),
|
|
192
|
+
"lane lock status": route(0, `${project} lane`),
|
|
193
|
+
"lane lock wait": route(0, `${project} lane ${worker}`, "path timeout poll-interval"),
|
|
194
|
+
"lane lock wait-acquire": route(0, `${project} lane ${worker} reason`, "path timeout poll-interval ttl"),
|
|
195
|
+
"merge-queue status": route(0, "", scoped),
|
|
196
|
+
"merge-queue next": route(0, worker, `${scoped} path`),
|
|
197
|
+
"merge-queue claim": route(1, worker, `${scoped} path`),
|
|
198
|
+
"merge-queue wait-next": route(0, worker, `${scoped} path timeout poll-interval acquire-lock`),
|
|
199
|
+
"merge-queue complete": route(1, `${worker} summary`, `${scoped} path`),
|
|
200
|
+
"merge-queue fail": route(1, `${worker} reason requeue`, `${scoped} path`),
|
|
201
|
+
"merge-queue note": route(1, `${worker} summary`, scoped),
|
|
202
|
+
"merge-queue cancel": route(1, "reason", `${scoped} worker-id path`, "force"),
|
|
203
|
+
"merge serve": route(0, "agent-profile", "poll-seconds max-parallel-projects", "once"),
|
|
204
|
+
"merge server status": route(0),
|
|
205
|
+
"merge server stop": route(1),
|
|
206
|
+
"merge apply": route(1, `${project} work`, lifecycle),
|
|
207
|
+
"merge repair": route(1, project, lifecycle),
|
|
208
|
+
"merge request status": route(1, project),
|
|
209
|
+
"merge request route": route(1, `${project} mode reason`, "", "", "", { mode: ["same_session", "server"] }),
|
|
210
|
+
"merge status": route(0, project, "path"),
|
|
211
|
+
"merge bundle status": route(0, project, "path"),
|
|
212
|
+
"merge bundle claim": route(0, `${project} ${worker}`, "path"),
|
|
213
|
+
"merge bundle complete": route(0, `${project} ${worker} summary`, "path"),
|
|
214
|
+
"merge bundle fail": route(0, `${project} ${worker} reason requeue`, "path"),
|
|
215
|
+
"merge one-shot": route(0, `${project} ${worker}`, "path"),
|
|
216
|
+
"merge-worker status": route(0, project),
|
|
217
|
+
"merge-worker start": route(0, `${project} ${worker}`, "path branch"),
|
|
218
|
+
"merge-worker stop": route(0, `${project} reason`, worker),
|
|
219
|
+
"engine install": route(0, "", "", "force"),
|
|
220
|
+
"engine list": route(0),
|
|
221
|
+
"engine info": route(0, "", "package version"),
|
|
222
|
+
"engine resolve": route(0, "", "root project-root"),
|
|
223
|
+
"engine doctor": route(0, "", "root project-root"),
|
|
224
|
+
"engine bind-run": route(1, `${project} engine-version reason`, "package integrity-checksum"),
|
|
225
|
+
"canon register": route(0, "root"),
|
|
226
|
+
"canon status": route(0, "", "root"),
|
|
227
|
+
"canon resolve": route(0, "", "root"),
|
|
228
|
+
"migration impact": route(0, project, "target-version mode"),
|
|
229
|
+
"migration readiness": route(0, `${project} workspace-root request-id`),
|
|
230
|
+
"migration plan": route(0, project, "source-version target-version run backup-path backup-created-at"),
|
|
231
|
+
"migration report": route(0, project, "source-version target-version run backup-path backup-created-at"),
|
|
232
|
+
"migration verify": route(0, "file"),
|
|
233
|
+
"migration apply": route(0, project, "source-version target-version run backup-path backup-created-at file"),
|
|
234
|
+
"storage migrate-writer": route(0, "database backup", "", "offline"),
|
|
235
|
+
"cleanup scan": route(0, project),
|
|
236
|
+
"cleanup apply": route(0, `${project} plan-file reason`, "", "force"),
|
|
237
|
+
"worktree plan": route(0, "protocol-id", scoped),
|
|
238
|
+
"worktree create": route(0, "protocol-id branch base path", scoped),
|
|
239
|
+
"worktree status": route(0, "protocol-id", scoped),
|
|
240
|
+
"worktree bootstrap": route(0, "protocol-id", scoped),
|
|
241
|
+
"worktree close": route(0, "protocol-id mode", scoped, "", "", { mode: ["keep", "remove"] }),
|
|
242
|
+
"codex home plan": route(0, project, "profile source-home target-home"),
|
|
243
|
+
"codex home init": route(0, project, "profile source-home target-home"),
|
|
244
|
+
"codex home status": route(0, project, "profile"),
|
|
245
|
+
"codex home print-env": route(0, project, "profile"),
|
|
246
|
+
"codex home remove": route(0, `${project} mode`, "profile"),
|
|
247
|
+
"codex hooks print": route(0, project, "target profile"),
|
|
248
|
+
"codex hooks status": route(0, project, "target profile"),
|
|
249
|
+
"codex hooks install": route(0, project, "target profile", "yes"),
|
|
250
|
+
"codex hooks remove": route(0, project, "target profile", "yes"),
|
|
251
|
+
"codex hook handle": route(0, "event", scoped),
|
|
252
|
+
"zcode hook handle": route(0, project),
|
|
253
|
+
"zcode invocation prepare": route(0),
|
|
254
|
+
"zcode event handle": route(0, project),
|
|
255
|
+
"zcode usage ingest": route(0, project),
|
|
256
|
+
"grok event handle": route(0, project),
|
|
257
|
+
"grok usage ingest": route(0, project),
|
|
258
|
+
"opencode event handle": route(0, project),
|
|
259
|
+
"opencode usage ingest": route(0, project),
|
|
260
|
+
"droid event handle": route(0, project),
|
|
261
|
+
"droid usage ingest": route(0, project),
|
|
262
|
+
"agy event handle": route(0, project),
|
|
263
|
+
"agy usage ingest": route(0, project),
|
|
264
|
+
"stat usage": route(0, `${project} run`, "group-by session stage"),
|
|
265
|
+
"stat run sessions ls": route(0, `${project} run`),
|
|
266
|
+
"id next": route(0, `${project} type slug`, "", "", "", { type: ["protocol", "prt", "run", "work", "wrk"] }),
|
|
267
|
+
"integration cmux status": route(0, project),
|
|
268
|
+
"dashboard data": route(0, "", "project project-root protocol", "global"),
|
|
269
|
+
"dashboard render": route(0, "", "project project-root protocol output format"),
|
|
270
|
+
"dashboard render-global": route(0, "", "output format"),
|
|
271
|
+
"dashboard open": route(0, "", "project project-root protocol viewer format"),
|
|
272
|
+
"dashboard refresh": route(0, "", "project project-root protocol open format output", "all"),
|
|
273
|
+
"dashboard refresh-global": route(0, "", "output format"),
|
|
274
|
+
"schema validate": { ...route(0, "schema file", "schema-dir project-root run"), contextualPaths: words("project-root file") },
|
|
275
|
+
"memory permissions preflight": route(0, "root memory-bank flow mode", "tasks"),
|
|
276
|
+
"memory compose register": route(0, "project-root run request-key result-file"),
|
|
277
|
+
"memory upgrade publish": route(0, "project-root run"),
|
|
278
|
+
"memory verify checks": route(0, "project-root run"),
|
|
279
|
+
"memory review register": route(0, "project-root run"),
|
|
280
|
+
"memory review collect": route(0, "project-root run"),
|
|
281
|
+
"memory finish evidence": route(0, "project-root run"),
|
|
282
|
+
"memory finish integrate": route(0, "project-root run"),
|
|
283
|
+
"memory corrections register": route(0, "project-root run wave result-file", "", "", "", { wave: ["1", "2"] }),
|
|
284
|
+
"memory corrections checks": route(0, "project-root run wave", "", "", "", { wave: ["1", "2"] }),
|
|
285
|
+
"memory review selective-register": route(0, "project-root run wave", "", "", "", { wave: ["1", "2"] }),
|
|
286
|
+
"memory review selective-collect": route(0, "project-root run wave", "", "", "", { wave: ["1", "2"] }),
|
|
287
|
+
"memory repair baseline": route(0, "project-root run wave work", "", "", "", { wave: ["1", "2"] }),
|
|
288
|
+
"memory repair copy-reserve": route(0, "project-root run wave work", "", "", "", { wave: ["1", "2"] }),
|
|
289
|
+
"memory repair copy-materialize": route(0, "project-root run wave work", "", "", "", { wave: ["1", "2"] }),
|
|
290
|
+
"memory repair copy-dispatch": route(0, "project-root run wave work", "", "", "", { wave: ["1", "2"] }),
|
|
291
|
+
"memory repair current-view": route(0, "project-root run wave work workspace-root", "", "", "", { wave: ["1", "2"] }),
|
|
292
|
+
"memory repair publication-source": route(0, "project-root run wave work workspace-root work-session", "", "", "", { wave: ["1"] }),
|
|
293
|
+
"memory repair publication-reserve": route(0, "project-root run wave work workspace-root work-session result-file", "", "", "", { wave: ["1", "2"] }),
|
|
294
|
+
"memory repair publication-apply": route(0, "project-root run wave work workspace-root work-session", "", "", "", { wave: ["1", "2"] }),
|
|
295
|
+
"memory repair publication-finish": route(0, "project-root run wave work workspace-root work-session", "", "", "", { wave: ["1", "2"] })
|
|
296
|
+
};
|
|
297
|
+
export function contextualPathOptionsForLifecycle(operation) {
|
|
298
|
+
const key = lifecycleRouteForOperation(operation);
|
|
299
|
+
return new Set(commandInputs[key]?.contextualPaths ?? []);
|
|
300
|
+
}
|
|
301
|
+
const flag = "__dd_flow_flag__";
|
|
302
|
+
const positiveInteger = new Set(words("limit lease-ms pid owner-pid process-group-id ready-timeout-ms max-parallel max-parallel-projects expected-revision"));
|
|
303
|
+
const nonnegativeInteger = new Set(words("after generation wait-ms grace-ms available-slots"));
|
|
304
|
+
const positiveNumber = new Set(words("ttl poll-interval poll-seconds"));
|
|
305
|
+
const booleans = new Set(words("write close-sessions cancel-queue release-locks user-required requeue acquire-lock"));
|
|
306
|
+
export function prepareCommandRoute(args) {
|
|
307
|
+
const parsed = parseCommandArgs(args);
|
|
308
|
+
const key = Object.keys(commandInputs).filter(key => key.split(" ").every((part, index) => parsed.positional[index] === part))
|
|
309
|
+
.sort((a, b) => b.split(" ").length - a.split(" ").length)[0];
|
|
310
|
+
const reject = (message, parameter, reason = "invalid_argument") => { throw new AppError("usage", message, 2, { phase: "prepare", effect: "no_effect", recoverable: true, reason, ...(parameter ? { parameter } : {}) }); };
|
|
311
|
+
if (!key)
|
|
312
|
+
return reject("Unknown command; use dd-flow --help");
|
|
313
|
+
const contract = commandInputs[key];
|
|
314
|
+
if (contract.retired)
|
|
315
|
+
reject(contract.retired);
|
|
316
|
+
const prefixLength = key.split(" ").length;
|
|
317
|
+
const positionCount = parsed.positional.length - prefixLength;
|
|
318
|
+
if (positionCount < contract.positions[0] || positionCount > contract.positions[1])
|
|
319
|
+
reject(`${key} expects ${contract.positions[0] === contract.positions[1] ? contract.positions[0] : `${contract.positions[0]}..${contract.positions[1]}`} positional argument(s)`);
|
|
320
|
+
for (const [name, values] of parsed.options) {
|
|
321
|
+
if (key.startsWith("merge-queue ") && name === "session-id")
|
|
322
|
+
reject("--session-id is no longer accepted on merge-queue commands; use --worker-id", name);
|
|
323
|
+
const upgrade = ["compatibility-mode", "mb-upgrade-mode"].includes(name);
|
|
324
|
+
if (upgrade && !isUpgradeAllowlisted(args))
|
|
325
|
+
reject(`${key} does not support explicit upgrade mode`, name);
|
|
326
|
+
if (!upgrade && !contract.values.includes(name) && !contract.switches.includes(name))
|
|
327
|
+
reject(`${key} does not accept --${name}`, name);
|
|
328
|
+
if (values.length > 1 && !contract.repeatable.includes(name))
|
|
329
|
+
reject(`--${name} must occur once`, name, "duplicate_option");
|
|
330
|
+
for (const value of values) {
|
|
331
|
+
if (contract.switches.includes(name) || name === "mb-upgrade-mode") {
|
|
332
|
+
if (value !== flag)
|
|
333
|
+
reject(`--${name} is a switch and does not take a value`, name);
|
|
334
|
+
continue;
|
|
335
|
+
}
|
|
336
|
+
if (value === flag || !value.trim())
|
|
337
|
+
reject(`--${name} requires a non-empty value`, name, value === flag ? "missing_option_value" : "empty_option_value");
|
|
338
|
+
if (name === "compatibility-mode" && value !== "mb-upgrade")
|
|
339
|
+
reject("--compatibility-mode must be mb-upgrade", name, "invalid_choice");
|
|
340
|
+
const choices = contract.enums[name];
|
|
341
|
+
if (choices && !choices.includes(key === "id next" && name === "type" ? value.toLowerCase() : value))
|
|
342
|
+
reject(`--${name} must be ${choices.join(" or ")}`, name, "invalid_choice");
|
|
343
|
+
if (booleans.has(name) && !["true", "false"].includes(value))
|
|
344
|
+
reject(`--${name} must be true or false`, name, "invalid_choice");
|
|
345
|
+
const number = Number(value);
|
|
346
|
+
const profileRevision = key.startsWith("profiles ") && name === "expected-revision";
|
|
347
|
+
if (profileRevision && !/^[a-f0-9]{64}$/.test(value))
|
|
348
|
+
reject("--expected-revision requires the SHA-256 returned by profiles list", name);
|
|
349
|
+
if (!profileRevision && positiveInteger.has(name) && (!/^[0-9]+$/.test(value) || !Number.isSafeInteger(number) || number <= 0)
|
|
350
|
+
|| nonnegativeInteger.has(name) && (!/^[0-9]+$/.test(value) || !Number.isSafeInteger(number) || number < 0)
|
|
351
|
+
|| positiveNumber.has(name) && (!Number.isFinite(number) || number <= 0)
|
|
352
|
+
|| name === "timeout" && (!Number.isFinite(number) || number < 0)
|
|
353
|
+
|| name === "available-slots" && number > 15
|
|
354
|
+
|| name === "max-parallel" && number > 256)
|
|
355
|
+
reject(`Invalid numeric value for --${name}`, name, "invalid_number");
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
for (const name of contract.required)
|
|
359
|
+
if (!parsed.options.has(name))
|
|
360
|
+
reject(`Missing required option: --${name}`, name, "missing_required_option");
|
|
361
|
+
if (key === "work add-batch" && parsed.options.has("request-key")) {
|
|
362
|
+
const requestKey = parsed.options.get("request-key")[0];
|
|
363
|
+
const stage = parsed.options.get("stage")?.[0];
|
|
364
|
+
if (!/^[A-Za-z0-9][A-Za-z0-9_.-]{0,95}$/.test(requestKey))
|
|
365
|
+
reject("--request-key requires a bounded identifier (1..96 characters)", "request-key");
|
|
366
|
+
if (!stage || !/^[A-Za-z0-9][A-Za-z0-9_.-]{0,127}$/.test(stage))
|
|
367
|
+
reject("--request-key requires an explicit bounded --stage", "stage");
|
|
368
|
+
}
|
|
369
|
+
for (const aliases of [
|
|
370
|
+
["root", "project-root"], ["payload-file", "json-file"],
|
|
371
|
+
["payload-file", "payload-json", "payload-base64"], ["semantic-file", "data", "result-file", "result-stdin"],
|
|
372
|
+
["stage-report", "dashboard"], ["task-file", "plan-item"], ["project", "project-root"],
|
|
373
|
+
["intake-file", "intake-stdin", "context-file"], ["question-file", "question-stdin"], ["answer-file", "answer-stdin"],
|
|
374
|
+
["summary-file", "summary-stdin"], ["task-file", "task-stdin"], ["reason", "reason-file"]
|
|
375
|
+
]) {
|
|
376
|
+
const present = aliases.filter(name => parsed.options.has(name));
|
|
377
|
+
if (present.length > 1)
|
|
378
|
+
reject(`Use only one of ${present.map(name => `--${name}`).join(", ")}`, [...present].sort(), "duplicate_option");
|
|
379
|
+
}
|
|
380
|
+
if (contract.values.includes("retry-check") && parsed.options.has("retry-check") !== (parsed.options.has("reason") || parsed.options.has("reason-file")))
|
|
381
|
+
reject("--retry-check requires exactly one of --reason or --reason-file");
|
|
382
|
+
// Retain the dispatcher's historic offsets for nested action positions.
|
|
383
|
+
const family = parsed.positional[0];
|
|
384
|
+
const singleWord = ["status", "version", "transition", "init"].includes(family);
|
|
385
|
+
return { key, family, command: singleWord ? undefined : parsed.positional[1], parsed: { options: parsed.options, positional: parsed.positional.slice(singleWord ? 1 : 2) } };
|
|
386
|
+
}
|