@fitlab-ai/agent-infra 0.9.13 → 0.9.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -0
- package/README.zh-CN.md +10 -0
- package/bin/cli.ts +26 -9
- package/bin/internal-cli.sh +45 -0
- package/dist/bin/cli.js +173 -157
- package/dist/bin/internal-cli.js +126 -42
- package/dist/lib/agent-client.js +5 -0
- package/dist/lib/agent-clients/adapters/codex-lifecycle/capability-store.js +165 -27
- package/dist/lib/agent-clients/adapters/codex-lifecycle/sandbox-controller.js +3 -2
- package/dist/lib/defaults.json +103 -103
- package/dist/lib/fs/durable-write.js +37 -0
- package/dist/lib/fs/file-lock.js +111 -0
- package/dist/lib/host-control/audit.js +19 -0
- package/dist/lib/host-control/client.js +142 -0
- package/dist/lib/host-control/command.js +49 -0
- package/dist/lib/host-control/path.js +160 -0
- package/dist/lib/host-control/secure-fs.js +140 -0
- package/dist/lib/host-control/server.js +159 -0
- package/dist/lib/host-control/service.js +112 -0
- package/dist/lib/init.js +11 -2
- package/dist/lib/internal/agent-client.js +5 -2
- package/dist/lib/internal/cli-route-inventory.js +154 -0
- package/dist/lib/internal/codex-lifecycle.js +15 -12
- package/dist/lib/internal/codex-sandbox-controller.js +8 -2
- package/dist/lib/internal/demo-promotion.js +322 -0
- package/dist/lib/internal/demo-transcript.js +454 -0
- package/dist/lib/internal/git-workflow.js +10 -6
- package/dist/lib/internal/host-control.js +28 -0
- package/dist/lib/internal/manual-validation.js +322 -0
- package/dist/lib/internal/platform-checks.js +16 -4
- package/dist/lib/internal/platform-comment.js +16 -4
- package/dist/lib/internal/platform-context.js +4 -1
- package/dist/lib/internal/platform-issue.js +12 -4
- package/dist/lib/internal/platform-metadata.js +88 -0
- package/dist/lib/internal/platform-pr-review.js +16 -3
- package/dist/lib/internal/platform-pr.js +42 -14
- package/dist/lib/internal/platform-release-notes.js +6 -3
- package/dist/lib/internal/platform-security.js +93 -0
- package/dist/lib/internal/pr-review-grade.js +14 -3
- package/dist/lib/internal/release-workflow.js +82 -89
- package/dist/lib/internal/sandbox-control.js +171 -7
- package/dist/lib/internal/task-activity.js +13 -4
- package/dist/lib/internal/task-artifact.js +19 -107
- package/dist/lib/internal/task-context.js +4 -1
- package/dist/lib/internal/task-create.js +48 -14
- package/dist/lib/internal/task-delivery.js +4 -1
- package/dist/lib/internal/task-event.js +38 -35
- package/dist/lib/internal/task-finalization.js +4 -1
- package/dist/lib/internal/task-invalidation.js +4 -1
- package/dist/lib/internal/task-ledger.js +12 -1
- package/dist/lib/internal/task-lifecycle.js +4 -1
- package/dist/lib/internal/task-operation-registry.js +519 -0
- package/dist/lib/internal/task-orchestration.js +12 -0
- package/dist/lib/internal/task-override.js +10 -3
- package/dist/lib/internal/task-qualification.js +90 -0
- package/dist/lib/internal/task-review.js +10 -52
- package/dist/lib/internal/task-short-id.js +11 -1
- package/dist/lib/internal/task-snapshot.js +4 -1
- package/dist/lib/internal/task-validate.js +37 -12
- package/dist/lib/internal/task-verify.js +5 -1
- package/dist/lib/internal/task-warning.js +8 -1
- package/dist/lib/owned-path.js +33 -0
- package/dist/lib/platform/check-status.js +11 -0
- package/dist/lib/platform/comment-safety.js +229 -0
- package/dist/lib/platform/completion-backfill.js +1 -1
- package/dist/lib/platform/github-data.js +241 -0
- package/dist/lib/platform/github-provider.js +248 -26
- package/dist/lib/platform/issue-comments.js +146 -34
- package/dist/lib/platform/issues.js +1 -179
- package/dist/lib/platform/pr-change-report.js +6 -12
- package/dist/lib/platform/pr-checks.js +12 -65
- package/dist/lib/platform/pr-summary.js +83 -10
- package/dist/lib/platform/provider-contract.d.ts +67 -1
- package/dist/lib/platform/provider-contract.js +6 -2
- package/dist/lib/platform/provider-validation.js +76 -3
- package/dist/lib/platform/pull-requests.js +117 -275
- package/dist/lib/platform/repository-metadata.js +377 -0
- package/dist/lib/platform/security-alerts.js +155 -0
- package/dist/lib/platform/snapshots.js +2 -0
- package/dist/lib/platform/verification-sync.js +154 -162
- package/dist/lib/process-data/index.js +7 -0
- package/dist/lib/release/workflow.js +1 -1
- package/dist/lib/run/index.js +5 -0
- package/dist/lib/sandbox/commands/control-status.js +22 -0
- package/dist/lib/sandbox/commands/create.js +39 -8
- package/dist/lib/sandbox/commands/ls.js +5 -0
- package/dist/lib/sandbox/commands/rm.js +3 -807
- package/dist/lib/sandbox/commands/show.js +16 -0
- package/dist/lib/sandbox/control/audit.js +203 -0
- package/dist/lib/sandbox/control/client.js +125 -12
- package/dist/lib/sandbox/control/completed-reentry.js +85 -0
- package/dist/lib/sandbox/control/container-identity.js +28 -31
- package/dist/lib/sandbox/control/executor.js +233 -34
- package/dist/lib/sandbox/control/finalization-response.js +27 -0
- package/dist/lib/sandbox/control/identity-sentinel.js +107 -0
- package/dist/lib/sandbox/control/lifecycle.js +656 -128
- package/dist/lib/sandbox/control/native-file-lock.js +85 -0
- package/dist/lib/sandbox/control/protocol.js +55 -4
- package/dist/lib/sandbox/control/server.js +720 -79
- package/dist/lib/sandbox/control/state.js +63 -3
- package/dist/lib/sandbox/control/task-view.js +183 -0
- package/dist/lib/sandbox/control/task-workflow.js +74 -0
- package/dist/lib/sandbox/control/workflow-executor.js +99 -0
- package/dist/lib/sandbox/engines/authority.js +289 -0
- package/dist/lib/sandbox/engines/docker-exact-discovery.js +97 -0
- package/dist/lib/sandbox/index.js +7 -2
- package/dist/lib/sandbox/recovery.js +49 -5
- package/dist/lib/sandbox/removal.js +1717 -0
- package/dist/lib/sandbox/task-cleanup.js +217 -0
- package/dist/lib/sandbox/workspace-view.js +15 -15
- package/dist/lib/sandbox/worktree-safety.js +4 -1
- package/dist/lib/server/index.js +8 -0
- package/dist/lib/task/activity-intent.js +2 -1
- package/dist/lib/task/activity-log.js +30 -24
- package/dist/lib/task/artifact-command.js +101 -0
- package/dist/lib/task/artifact-lifecycle.js +71 -40
- package/dist/lib/task/artifact-name.js +36 -0
- package/dist/lib/task/artifact-operations.js +474 -0
- package/dist/lib/task/artifact-receipts.js +3 -15
- package/dist/lib/task/artifact-repair-intent.js +130 -0
- package/dist/lib/task/artifact-schema.js +127 -0
- package/dist/lib/task/capabilities.js +83 -19
- package/dist/lib/task/codex-orchestration.js +71 -25
- package/dist/lib/task/commit-identity.js +28 -0
- package/dist/lib/task/commit-operation.js +2 -16
- package/dist/lib/task/control-authority.js +375 -5
- package/dist/lib/task/control-recovery.js +128 -0
- package/dist/lib/task/create-service.js +103 -4
- package/dist/lib/task/create.js +80 -2
- package/dist/lib/task/decision-details.js +2 -46
- package/dist/lib/task/events.js +306 -76
- package/dist/lib/task/finalization-state.js +9 -0
- package/dist/lib/task/human-override.js +3 -6
- package/dist/lib/task/implementation-inputs.js +3 -3
- package/dist/lib/task/index.js +11 -3
- package/dist/lib/task/intermediate-cleanup.js +383 -0
- package/dist/lib/task/invalidation.js +18 -65
- package/dist/lib/task/ledger-intents.js +7 -22
- package/dist/lib/task/ledger.js +1 -3
- package/dist/lib/task/lifecycle.js +19 -1
- package/dist/lib/task/local-artifact-finalization.js +190 -290
- package/dist/lib/task/manual-validation-completion.js +26 -0
- package/dist/lib/task/manual-validation-evidence.js +130 -0
- package/dist/lib/task/manual-validation-receipt.js +101 -0
- package/dist/lib/task/manual-validation-shared.js +40 -0
- package/dist/lib/task/manual-validation-transaction.js +243 -0
- package/dist/lib/task/markdown.js +47 -0
- package/dist/lib/task/orchestration.js +206 -69
- package/dist/lib/task/qualification-audit.js +476 -0
- package/dist/lib/task/qualification-confirmation.js +109 -0
- package/dist/lib/task/qualification-intents.js +148 -0
- package/dist/lib/task/review-artifacts.js +23 -40
- package/dist/lib/task/review-command.js +25 -0
- package/dist/lib/task/review-finalization.js +146 -97
- package/dist/lib/task/review-fingerprint.js +2 -2
- package/dist/lib/task/sections.js +34 -54
- package/dist/lib/task/verification-config.js +11 -0
- package/dist/lib/task/verification-engine.js +170 -327
- package/dist/lib/task/verification.js +1 -1
- package/dist/lib/task/workflow-command.js +17 -0
- package/dist/lib/task/workflow-warning-intents.js +0 -16
- package/dist/lib/task/workflow-warnings.js +28 -2
- package/dist/lib/update.js +2 -0
- package/dist/lifecycle-build-manifest.json +3 -3
- package/lib/agent-client.ts +9 -0
- package/lib/agent-clients/adapters/codex-lifecycle/capability-store.ts +223 -33
- package/lib/agent-clients/adapters/codex-lifecycle/sandbox-controller.ts +3 -2
- package/lib/fs/durable-write.ts +29 -0
- package/lib/fs/file-lock.ts +113 -0
- package/lib/host-control/audit.ts +22 -0
- package/lib/host-control/client.ts +172 -0
- package/lib/host-control/command.ts +60 -0
- package/lib/host-control/path.ts +167 -0
- package/lib/host-control/secure-fs.ts +135 -0
- package/lib/host-control/server.ts +180 -0
- package/lib/host-control/service.ts +133 -0
- package/lib/init.ts +15 -2
- package/lib/internal/agent-client.ts +4 -2
- package/lib/internal/cli-route-inventory.ts +142 -0
- package/lib/internal/codex-lifecycle.ts +14 -12
- package/lib/internal/codex-sandbox-controller.ts +7 -2
- package/lib/internal/demo-promotion.ts +354 -0
- package/lib/internal/demo-transcript.ts +419 -0
- package/lib/internal/git-workflow.ts +9 -6
- package/lib/internal/host-control.ts +28 -0
- package/lib/internal/manual-validation.ts +306 -0
- package/lib/internal/platform-checks.ts +12 -4
- package/lib/internal/platform-comment.ts +12 -4
- package/lib/internal/platform-context.ts +3 -1
- package/lib/internal/platform-issue.ts +11 -4
- package/lib/internal/platform-metadata.ts +70 -0
- package/lib/internal/platform-pr-review.ts +14 -3
- package/lib/internal/platform-pr.ts +38 -14
- package/lib/internal/platform-release-notes.ts +5 -3
- package/lib/internal/platform-security.ts +83 -0
- package/lib/internal/pr-review-grade.ts +10 -3
- package/lib/internal/release-workflow.ts +91 -87
- package/lib/internal/sandbox-control.ts +181 -6
- package/lib/internal/task-activity.ts +12 -4
- package/lib/internal/task-artifact.ts +15 -79
- package/lib/internal/task-context.ts +3 -1
- package/lib/internal/task-create.ts +76 -15
- package/lib/internal/task-delivery.ts +3 -1
- package/lib/internal/task-event.ts +21 -10
- package/lib/internal/task-finalization.ts +3 -1
- package/lib/internal/task-invalidation.ts +3 -1
- package/lib/internal/task-ledger.ts +11 -1
- package/lib/internal/task-lifecycle.ts +3 -1
- package/lib/internal/task-operation-registry.ts +590 -0
- package/lib/internal/task-orchestration.ts +12 -0
- package/lib/internal/task-override.ts +9 -3
- package/lib/internal/task-qualification.ts +61 -0
- package/lib/internal/task-review.ts +7 -50
- package/lib/internal/task-short-id.ts +10 -1
- package/lib/internal/task-snapshot.ts +3 -1
- package/lib/internal/task-validate.ts +32 -12
- package/lib/internal/task-verify.ts +4 -1
- package/lib/internal/task-warning.ts +7 -1
- package/lib/owned-path.ts +26 -0
- package/lib/platform/check-status.ts +9 -0
- package/lib/platform/comment-safety.ts +255 -0
- package/lib/platform/completion-backfill.ts +1 -1
- package/lib/platform/github-data.ts +322 -0
- package/lib/platform/github-provider.ts +244 -27
- package/lib/platform/issue-comments.ts +159 -35
- package/lib/platform/issues.ts +4 -245
- package/lib/platform/pr-change-report.ts +6 -12
- package/lib/platform/pr-checks.ts +13 -77
- package/lib/platform/pr-summary.ts +88 -11
- package/lib/platform/provider-contract.ts +78 -3
- package/lib/platform/provider-validation.ts +85 -3
- package/lib/platform/pull-requests.ts +129 -348
- package/lib/platform/repository-metadata.ts +453 -0
- package/lib/platform/security-alerts.ts +191 -0
- package/lib/platform/snapshots.ts +53 -0
- package/lib/platform/verification-sync.ts +171 -177
- package/lib/process-data/index.ts +7 -0
- package/lib/release/workflow.ts +3 -3
- package/lib/run/index.ts +5 -0
- package/lib/sandbox/commands/control-status.ts +26 -0
- package/lib/sandbox/commands/create.ts +53 -12
- package/lib/sandbox/commands/ls.ts +7 -0
- package/lib/sandbox/commands/rm.ts +3 -996
- package/lib/sandbox/commands/show.ts +16 -0
- package/lib/sandbox/control/audit.ts +253 -0
- package/lib/sandbox/control/client.ts +150 -13
- package/lib/sandbox/control/completed-reentry.ts +98 -0
- package/lib/sandbox/control/container-identity.ts +27 -43
- package/lib/sandbox/control/executor.ts +262 -37
- package/lib/sandbox/control/finalization-response.ts +29 -0
- package/lib/sandbox/control/identity-sentinel.ts +137 -0
- package/lib/sandbox/control/lifecycle.ts +672 -18
- package/lib/sandbox/control/native-file-lock.ts +108 -0
- package/lib/sandbox/control/protocol.ts +80 -8
- package/lib/sandbox/control/server.ts +779 -82
- package/lib/sandbox/control/state.ts +84 -3
- package/lib/sandbox/control/task-view.ts +240 -0
- package/lib/sandbox/control/task-workflow.ts +95 -0
- package/lib/sandbox/control/workflow-executor.ts +102 -0
- package/lib/sandbox/engines/authority.ts +365 -0
- package/lib/sandbox/engines/docker-exact-discovery.ts +132 -0
- package/lib/sandbox/index.ts +9 -2
- package/lib/sandbox/recovery.ts +49 -6
- package/lib/sandbox/removal.ts +2144 -0
- package/lib/sandbox/task-cleanup.ts +209 -0
- package/lib/sandbox/workspace-view.ts +26 -18
- package/lib/sandbox/worktree-safety.ts +4 -1
- package/lib/server/index.ts +10 -0
- package/lib/task/activity-intent.ts +2 -2
- package/lib/task/activity-log.ts +27 -19
- package/lib/task/artifact-command.ts +104 -0
- package/lib/task/artifact-lifecycle.ts +66 -39
- package/lib/task/artifact-name.ts +55 -0
- package/lib/task/artifact-operations.ts +580 -0
- package/lib/task/artifact-receipts.ts +3 -14
- package/lib/task/artifact-repair-intent.ts +152 -0
- package/lib/task/artifact-schema.ts +163 -0
- package/lib/task/capabilities.ts +82 -22
- package/lib/task/codex-orchestration.ts +85 -24
- package/lib/task/commit-identity.ts +31 -0
- package/lib/task/commit-operation.ts +2 -16
- package/lib/task/control-authority.ts +513 -6
- package/lib/task/control-recovery.ts +174 -0
- package/lib/task/create-service.ts +131 -6
- package/lib/task/create.ts +83 -1
- package/lib/task/decision-details.ts +3 -71
- package/lib/task/events.ts +292 -75
- package/lib/task/finalization-state.ts +11 -0
- package/lib/task/human-override.ts +3 -8
- package/lib/task/implementation-inputs.ts +3 -3
- package/lib/task/index.ts +16 -3
- package/lib/task/intermediate-cleanup.ts +455 -0
- package/lib/task/invalidation.ts +18 -62
- package/lib/task/ledger-intents.ts +7 -24
- package/lib/task/ledger.ts +1 -3
- package/lib/task/lifecycle.ts +17 -1
- package/lib/task/local-artifact-finalization.ts +223 -388
- package/lib/task/manual-validation-completion.ts +40 -0
- package/lib/task/manual-validation-evidence.ts +209 -0
- package/lib/task/manual-validation-receipt.ts +152 -0
- package/lib/task/manual-validation-shared.ts +50 -0
- package/lib/task/manual-validation-transaction.ts +304 -0
- package/lib/task/markdown.ts +70 -0
- package/lib/task/orchestration.ts +191 -68
- package/lib/task/qualification-audit.ts +588 -0
- package/lib/task/qualification-confirmation.ts +117 -0
- package/lib/task/qualification-intents.ts +150 -0
- package/lib/task/review-artifacts.ts +21 -41
- package/lib/task/review-command.ts +23 -0
- package/lib/task/review-finalization.ts +154 -153
- package/lib/task/review-fingerprint.ts +2 -2
- package/lib/task/sections.ts +33 -52
- package/lib/task/verification-config.ts +12 -0
- package/lib/task/verification-engine.ts +165 -370
- package/lib/task/verification-types.ts +17 -0
- package/lib/task/verification.ts +1 -1
- package/lib/task/workflow-command.ts +18 -0
- package/lib/task/workflow-warning-intents.ts +0 -13
- package/lib/task/workflow-warnings.ts +21 -2
- package/lib/update.ts +6 -0
- package/package.json +7 -2
- package/templates/.agents/hooks/lifecycle-delegation.js +6 -6
- package/templates/.agents/rules/README.en.md +2 -0
- package/templates/.agents/rules/README.zh-CN.md +2 -0
- package/templates/.agents/rules/decision-qualification.en.md +22 -0
- package/templates/.agents/rules/decision-qualification.zh-CN.md +22 -0
- package/templates/.agents/rules/evidence-reporting.en.md +28 -0
- package/templates/.agents/rules/evidence-reporting.zh-CN.md +28 -0
- package/templates/.agents/rules/label-milestone-setup.en.md +7 -7
- package/templates/.agents/rules/label-milestone-setup.zh-CN.md +7 -7
- package/templates/.agents/rules/local-artifact-repair.en.md +5 -1
- package/templates/.agents/rules/local-artifact-repair.zh-CN.md +5 -1
- package/templates/.agents/rules/security-alerts.en.md +8 -8
- package/templates/.agents/rules/security-alerts.zh-CN.md +8 -8
- package/templates/.agents/rules/testing-discipline.en.md +2 -0
- package/templates/.agents/rules/testing-discipline.zh-CN.md +2 -0
- package/templates/.agents/scripts/package.json +3 -0
- package/templates/.agents/skills/analyze-task/SKILL.en.md +15 -2
- package/templates/.agents/skills/analyze-task/SKILL.zh-CN.md +19 -2
- package/templates/.agents/skills/analyze-task/config/verify.en.json +1 -12
- package/templates/.agents/skills/analyze-task/config/verify.zh-CN.json +1 -12
- package/templates/.agents/skills/close-codescan/SKILL.en.md +2 -2
- package/templates/.agents/skills/close-codescan/SKILL.zh-CN.md +2 -2
- package/templates/.agents/skills/close-dependabot/SKILL.en.md +2 -2
- package/templates/.agents/skills/close-dependabot/SKILL.zh-CN.md +2 -2
- package/templates/.agents/skills/code-task/SKILL.en.md +14 -1
- package/templates/.agents/skills/code-task/SKILL.zh-CN.md +14 -1
- package/templates/.agents/skills/code-task/config/verify.en.json +5 -14
- package/templates/.agents/skills/code-task/config/verify.zh-CN.json +5 -14
- package/templates/.agents/skills/code-task/reference/code-rules.en.md +5 -4
- package/templates/.agents/skills/code-task/reference/code-rules.zh-CN.md +5 -4
- package/templates/.agents/skills/code-task/reference/dual-mode.en.md +1 -1
- package/templates/.agents/skills/code-task/reference/dual-mode.zh-CN.md +1 -1
- package/templates/.agents/skills/code-task/reference/fix-mode.en.md +3 -1
- package/templates/.agents/skills/code-task/reference/fix-mode.zh-CN.md +3 -1
- package/templates/.agents/skills/code-task/reference/report-template.en.md +42 -15
- package/templates/.agents/skills/code-task/reference/report-template.zh-CN.md +39 -12
- package/templates/.agents/skills/complete-manual-validation/SKILL.en.md +37 -21
- package/templates/.agents/skills/complete-manual-validation/SKILL.zh-CN.md +37 -21
- package/templates/.agents/skills/complete-manual-validation/config/verify.en.json +1 -1
- package/templates/.agents/skills/complete-manual-validation/config/verify.zh-CN.json +1 -1
- package/templates/.agents/skills/complete-manual-validation/reference/report-template.en.md +4 -0
- package/templates/.agents/skills/complete-manual-validation/reference/report-template.zh-CN.md +4 -0
- package/templates/.agents/skills/complete-manual-validation/reference/summary-update.en.md +16 -7
- package/templates/.agents/skills/complete-manual-validation/reference/summary-update.zh-CN.md +16 -7
- package/templates/.agents/skills/complete-task/SKILL.en.md +10 -23
- package/templates/.agents/skills/complete-task/SKILL.zh-CN.md +10 -23
- package/templates/.agents/skills/create-task/SKILL.en.md +8 -0
- package/templates/.agents/skills/create-task/SKILL.zh-CN.md +7 -0
- package/templates/.agents/skills/import-codescan/SKILL.en.md +1 -1
- package/templates/.agents/skills/import-codescan/SKILL.zh-CN.md +1 -1
- package/templates/.agents/skills/import-dependabot/SKILL.en.md +1 -1
- package/templates/.agents/skills/import-dependabot/SKILL.zh-CN.md +1 -1
- package/templates/.agents/skills/init-labels/SKILL.en.md +8 -8
- package/templates/.agents/skills/init-labels/SKILL.zh-CN.md +8 -8
- package/templates/.agents/skills/init-milestones/SKILL.en.md +9 -11
- package/templates/.agents/skills/init-milestones/SKILL.zh-CN.md +9 -11
- package/templates/.agents/skills/plan-task/SKILL.en.md +14 -1
- package/templates/.agents/skills/plan-task/SKILL.zh-CN.md +16 -1
- package/templates/.agents/skills/plan-task/config/verify.en.json +4 -14
- package/templates/.agents/skills/plan-task/config/verify.zh-CN.json +4 -14
- package/templates/.agents/skills/release/SKILL.en.md +7 -3
- package/templates/.agents/skills/release/SKILL.zh-CN.md +7 -3
- package/templates/.agents/skills/review-analysis/SKILL.en.md +14 -1
- package/templates/.agents/skills/review-analysis/SKILL.zh-CN.md +14 -1
- package/templates/.agents/skills/review-analysis/config/verify.en.json +1 -18
- package/templates/.agents/skills/review-analysis/config/verify.zh-CN.json +1 -18
- package/templates/.agents/skills/review-analysis/reference/report-template.en.md +50 -23
- package/templates/.agents/skills/review-analysis/reference/report-template.zh-CN.md +45 -18
- package/templates/.agents/skills/review-code/SKILL.en.md +14 -1
- package/templates/.agents/skills/review-code/SKILL.zh-CN.md +14 -1
- package/templates/.agents/skills/review-code/config/verify.en.json +1 -23
- package/templates/.agents/skills/review-code/config/verify.zh-CN.json +1 -23
- package/templates/.agents/skills/review-code/reference/report-template.en.md +49 -22
- package/templates/.agents/skills/review-code/reference/report-template.zh-CN.md +45 -18
- package/templates/.agents/skills/review-plan/SKILL.en.md +14 -1
- package/templates/.agents/skills/review-plan/SKILL.zh-CN.md +14 -1
- package/templates/.agents/skills/review-plan/config/verify.en.json +1 -18
- package/templates/.agents/skills/review-plan/config/verify.zh-CN.json +1 -18
- package/templates/.agents/skills/review-plan/reference/report-template.en.md +49 -22
- package/templates/.agents/skills/review-plan/reference/report-template.zh-CN.md +45 -18
- package/templates/.agents/skills/review-pr/SKILL.en.md +5 -1
- package/templates/.agents/skills/review-pr/SKILL.zh-CN.md +5 -1
- package/templates/.agents/skills/review-pr/reference/report-template.en.md +4 -3
- package/templates/.agents/skills/review-pr/reference/report-template.zh-CN.md +4 -3
- package/templates/.agents/skills/run-manual-validation/SKILL.en.md +25 -4
- package/templates/.agents/skills/run-manual-validation/SKILL.zh-CN.md +25 -4
- package/templates/.agents/skills/run-manual-validation/reference/discovery-and-execution.en.md +4 -1
- package/templates/.agents/skills/run-manual-validation/reference/discovery-and-execution.zh-CN.md +4 -1
- package/templates/.agents/skills/run-manual-validation/reference/report-template.en.md +5 -1
- package/templates/.agents/skills/run-manual-validation/reference/report-template.zh-CN.md +5 -1
- package/templates/.agents/skills/run-task/SKILL.en.md +1 -1
- package/templates/.agents/skills/run-task/SKILL.zh-CN.md +1 -1
- package/templates/.agents/skills/test/SKILL.en.md +29 -7
- package/templates/.agents/skills/test/SKILL.zh-CN.md +29 -7
- package/templates/.agents/skills/update-agent-infra/scripts/sync-templates.js +14 -0
- package/templates/.agents/templates/task.en.md +6 -0
- package/templates/.agents/templates/task.zh-CN.md +6 -0
- package/templates/.claude/commands/run-manual-validation.en.md +1 -1
- package/templates/.claude/commands/run-manual-validation.zh-CN.md +1 -1
- package/dist/lib/platform/adapters.js +0 -56
- package/lib/platform/adapters.ts +0 -197
- package/templates/.agents/scripts/security-alerts.github.sh +0 -151
- package/templates/.agents/scripts/security-alerts.sh +0 -31
- package/templates/.agents/skills/init-labels/scripts/init-labels.github.sh +0 -146
- package/templates/.agents/skills/init-labels/scripts/init-labels.sh +0 -32
- package/templates/.agents/skills/init-milestones/scripts/init-milestones.github.sh +0 -294
- package/templates/.agents/skills/init-milestones/scripts/init-milestones.sh +0 -6
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
-
import { randomUUID } from 'node:crypto';
|
|
3
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
4
|
+
import { artifactName, maxArtifactRound } from './artifact-name.js';
|
|
4
5
|
import { parseTypedTaskFrontmatter } from './frontmatter.js';
|
|
5
6
|
import { validateCurrentTaskContract } from './current-contract.js';
|
|
6
7
|
import { parseReviewSummary } from './review-artifacts.js';
|
|
@@ -33,10 +34,12 @@ const ORCHESTRATION_STATE_INVALID_MESSAGE = 'orchestration.json does not match t
|
|
|
33
34
|
class OrchestrationStateError extends Error {
|
|
34
35
|
code = 'ORCHESTRATION_STATE_INVALID';
|
|
35
36
|
taskId;
|
|
36
|
-
|
|
37
|
+
reasonCodes;
|
|
38
|
+
constructor(taskId = null, reasonCodes = []) {
|
|
37
39
|
super(ORCHESTRATION_STATE_INVALID_MESSAGE);
|
|
38
40
|
this.name = 'OrchestrationStateError';
|
|
39
41
|
this.taskId = taskId;
|
|
42
|
+
this.reasonCodes = Object.freeze([...reasonCodes]);
|
|
40
43
|
}
|
|
41
44
|
}
|
|
42
45
|
function isRecord(value) {
|
|
@@ -99,7 +102,7 @@ function isRecovery(value) {
|
|
|
99
102
|
&& guards.completionEvidenceAbsent === true
|
|
100
103
|
&& value.resultingStatus === 'running';
|
|
101
104
|
}
|
|
102
|
-
function isCompletionEvidence(value) {
|
|
105
|
+
export function isCompletionEvidence(value) {
|
|
103
106
|
return hasExactKeys(value, [
|
|
104
107
|
'kind', 'observedAt', 'head', 'headTree', 'worktreeTree', 'lastReviewedCommit', 'prNumber', 'prHead'
|
|
105
108
|
])
|
|
@@ -117,48 +120,151 @@ const ORCHESTRATION_RUN_KEYS = [
|
|
|
117
120
|
'modelPolicySource', 'recoveryHistory', 'baseline', 'pendingDelegation', 'receipts',
|
|
118
121
|
'pause', 'commitAuthorization', 'completionEvidence', 'createdAt', 'updatedAt'
|
|
119
122
|
];
|
|
120
|
-
function
|
|
121
|
-
if (!hasExactKeys(value, ORCHESTRATION_RUN_KEYS)
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
123
|
+
function orchestrationStateReasonCodes(value, expectedTaskId) {
|
|
124
|
+
if (!hasExactKeys(value, ORCHESTRATION_RUN_KEYS))
|
|
125
|
+
return ['top-level-keys'];
|
|
126
|
+
const record = value;
|
|
127
|
+
const reasons = [];
|
|
128
|
+
if (!exactText(record.taskId))
|
|
129
|
+
reasons.push('taskId');
|
|
130
|
+
else if (expectedTaskId !== undefined && record.taskId !== expectedTaskId)
|
|
131
|
+
reasons.push('taskId-mismatch');
|
|
132
|
+
if (!exactText(record.runId))
|
|
133
|
+
reasons.push('runId');
|
|
134
|
+
if (!['running', 'paused', 'completed'].includes(record.status))
|
|
135
|
+
reasons.push('status');
|
|
136
|
+
if (!(record.nextStage === null || ['analysis', 'review-analysis', 'plan', 'review-plan', 'code', 'review-code', 'commit'].includes(record.nextStage))) {
|
|
137
|
+
reasons.push('nextStage');
|
|
138
|
+
}
|
|
139
|
+
if (!Number.isSafeInteger(record.stepCount) || record.stepCount < 0)
|
|
140
|
+
reasons.push('stepCount');
|
|
141
|
+
if (!Number.isSafeInteger(record.maxSteps) || record.maxSteps < 1)
|
|
142
|
+
reasons.push('maxSteps');
|
|
143
|
+
if (!isModelPolicy(record.modelPolicy))
|
|
144
|
+
reasons.push('modelPolicy');
|
|
145
|
+
if (!isModelPolicySource(record.modelPolicySource))
|
|
146
|
+
reasons.push('modelPolicySource');
|
|
147
|
+
if (!Array.isArray(record.recoveryHistory) || !record.recoveryHistory.every(isRecovery))
|
|
148
|
+
reasons.push('recoveryHistory');
|
|
149
|
+
if (typeof record.baseline !== 'string')
|
|
150
|
+
reasons.push('baseline');
|
|
151
|
+
if (!(record.pendingDelegation === null || isDelegationReceipt(record.pendingDelegation)))
|
|
152
|
+
reasons.push('pendingDelegation');
|
|
153
|
+
if (!Array.isArray(record.receipts) || !record.receipts.every(isDelegationReceipt))
|
|
154
|
+
reasons.push('receipts');
|
|
155
|
+
if (!(record.pause === null || isPause(record.pause)))
|
|
156
|
+
reasons.push('pause');
|
|
157
|
+
if (!hasExactKeys(record.commitAuthorization, ['issuedAt', 'consumedAt'])) {
|
|
158
|
+
reasons.push('commitAuthorization');
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
if (!nullableText(record.commitAuthorization.issuedAt))
|
|
162
|
+
reasons.push('commitAuthorization.issuedAt');
|
|
163
|
+
if (!nullableText(record.commitAuthorization.consumedAt))
|
|
164
|
+
reasons.push('commitAuthorization.consumedAt');
|
|
165
|
+
}
|
|
166
|
+
if (!(record.completionEvidence === null || isCompletionEvidence(record.completionEvidence)))
|
|
167
|
+
reasons.push('completionEvidence');
|
|
168
|
+
if (!exactText(record.createdAt))
|
|
169
|
+
reasons.push('createdAt');
|
|
170
|
+
if (!exactText(record.updatedAt))
|
|
171
|
+
reasons.push('updatedAt');
|
|
172
|
+
if (Array.isArray(record.receipts) && record.receipts.every(isDelegationReceipt)
|
|
173
|
+
&& (record.pendingDelegation === null || isDelegationReceipt(record.pendingDelegation))) {
|
|
174
|
+
const receipts = [...record.receipts, ...(record.pendingDelegation ? [record.pendingDelegation] : [])];
|
|
175
|
+
if (receipts.some((receipt) => receipt.taskId !== record.taskId || receipt.runId !== record.runId)) {
|
|
176
|
+
reasons.push('receipt-identity');
|
|
177
|
+
}
|
|
147
178
|
}
|
|
179
|
+
return reasons;
|
|
180
|
+
}
|
|
181
|
+
function emitDiagnostic(options, event, fields) {
|
|
182
|
+
try {
|
|
183
|
+
options?.diagnosticLog?.(event, fields);
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
// Diagnostics must never change lifecycle behavior.
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
function fileObservation(file) {
|
|
190
|
+
try {
|
|
191
|
+
const stat = fs.lstatSync(file);
|
|
192
|
+
let realpath = null;
|
|
193
|
+
try {
|
|
194
|
+
realpath = fs.realpathSync.native(file);
|
|
195
|
+
}
|
|
196
|
+
catch { /* retain the lstat observation */ }
|
|
197
|
+
return {
|
|
198
|
+
file,
|
|
199
|
+
exists: true,
|
|
200
|
+
fileType: stat.isFile() ? 'file' : stat.isDirectory() ? 'directory' : 'other',
|
|
201
|
+
symbolicLink: stat.isSymbolicLink(),
|
|
202
|
+
bytes: stat.isFile() ? stat.size : null,
|
|
203
|
+
mtimeMs: stat.mtimeMs,
|
|
204
|
+
device: stat.dev,
|
|
205
|
+
inode: stat.ino,
|
|
206
|
+
realpath
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
return {
|
|
211
|
+
file,
|
|
212
|
+
exists: false,
|
|
213
|
+
fileType: null,
|
|
214
|
+
symbolicLink: null,
|
|
215
|
+
bytes: null,
|
|
216
|
+
mtimeMs: null,
|
|
217
|
+
device: null,
|
|
218
|
+
inode: null,
|
|
219
|
+
realpath: null,
|
|
220
|
+
fsError: error instanceof Error && 'code' in error ? String(error.code) : null
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
function parseOrchestrationRun(value, expectedTaskId) {
|
|
225
|
+
const reasonCodes = orchestrationStateReasonCodes(value, expectedTaskId);
|
|
226
|
+
if (reasonCodes.length > 0)
|
|
227
|
+
throw new OrchestrationStateError(expectedTaskId ?? null, reasonCodes);
|
|
148
228
|
return value;
|
|
149
229
|
}
|
|
150
|
-
function readRun(taskDir) {
|
|
230
|
+
function readRun(taskDir, options = {}) {
|
|
151
231
|
const file = orchestrationPath(taskDir);
|
|
152
|
-
if (!fs.existsSync(file))
|
|
153
|
-
return null;
|
|
154
232
|
const taskId = path.basename(taskDir);
|
|
233
|
+
const observed = options.diagnosticLog ? fileObservation(file) : {};
|
|
234
|
+
if (!fs.existsSync(file)) {
|
|
235
|
+
emitDiagnostic(options, 'orchestration-state-missing', { taskId, taskDir, ...observed });
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
emitDiagnostic(options, 'orchestration-state-read-start', { taskId, taskDir, ...observed });
|
|
239
|
+
let rawBytes = null;
|
|
240
|
+
let rawSha256 = null;
|
|
155
241
|
try {
|
|
156
|
-
|
|
242
|
+
const raw = fs.readFileSync(file, 'utf8');
|
|
243
|
+
if (options.diagnosticLog) {
|
|
244
|
+
rawBytes = Buffer.byteLength(raw, 'utf8');
|
|
245
|
+
rawSha256 = createHash('sha256').update(raw, 'utf8').digest('hex');
|
|
246
|
+
}
|
|
247
|
+
const run = parseOrchestrationRun(JSON.parse(raw), taskId);
|
|
248
|
+
emitDiagnostic(options, 'orchestration-state-read-ok', {
|
|
249
|
+
taskId, taskDir, file, rawBytes, rawSha256, status: run.status, runId: run.runId,
|
|
250
|
+
stepCount: run.stepCount, pendingDelegation: run.pendingDelegation !== null
|
|
251
|
+
});
|
|
252
|
+
return run;
|
|
157
253
|
}
|
|
158
254
|
catch (error) {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
255
|
+
const reasonCodes = error instanceof OrchestrationStateError && error.reasonCodes.length > 0
|
|
256
|
+
? error.reasonCodes
|
|
257
|
+
: [error instanceof SyntaxError ? 'json-parse' : 'file-read'];
|
|
258
|
+
emitDiagnostic(options, 'orchestration-state-read-failed', {
|
|
259
|
+
taskId,
|
|
260
|
+
taskDir,
|
|
261
|
+
...observed,
|
|
262
|
+
rawBytes,
|
|
263
|
+
rawSha256,
|
|
264
|
+
reasonCodes: reasonCodes.join(','),
|
|
265
|
+
errorType: error instanceof Error ? error.name : typeof error,
|
|
266
|
+
});
|
|
267
|
+
throw new OrchestrationStateError(taskId, reasonCodes);
|
|
162
268
|
}
|
|
163
269
|
}
|
|
164
270
|
function atomicWrite(file, value) {
|
|
@@ -232,7 +338,7 @@ function beginOrResumeOrchestration(taskRef, options = {}) {
|
|
|
232
338
|
}
|
|
233
339
|
let existing;
|
|
234
340
|
try {
|
|
235
|
-
existing = readRun(resolved.taskDir);
|
|
341
|
+
existing = readRun(resolved.taskDir, options);
|
|
236
342
|
}
|
|
237
343
|
catch (error) {
|
|
238
344
|
return failed('ORCHESTRATION_STATE_INVALID', error instanceof Error ? error.message : String(error), resolved.taskId);
|
|
@@ -332,18 +438,8 @@ function beginOrResumeOrchestration(taskRef, options = {}) {
|
|
|
332
438
|
atomicWrite(orchestrationPath(resolved.taskDir), run);
|
|
333
439
|
return { status: 'running', changed: true, taskId: resolved.taskId, run, next: null, error: null };
|
|
334
440
|
}
|
|
335
|
-
function highestRound(taskDir, family) {
|
|
336
|
-
const pattern = new RegExp(`^${family}(?:-r(\\d+))?\\.md$`);
|
|
337
|
-
return fs.readdirSync(taskDir).reduce((max, name) => {
|
|
338
|
-
const match = pattern.exec(name);
|
|
339
|
-
return match ? Math.max(max, match[1] ? Number(match[1]) : 1) : max;
|
|
340
|
-
}, 0);
|
|
341
|
-
}
|
|
342
|
-
function artifactName(family, round) {
|
|
343
|
-
return round === 1 ? `${family}.md` : `${family}-r${round}.md`;
|
|
344
|
-
}
|
|
345
441
|
function validateSavedCurrentDiffBase(repoRoot, metadata, taskDir, reviewedHead) {
|
|
346
|
-
const reviewRound =
|
|
442
|
+
const reviewRound = maxArtifactRound(fs.readdirSync(taskDir), 'review-code');
|
|
347
443
|
const reviewContent = fs.readFileSync(path.join(taskDir, artifactName('review-code', reviewRound)), 'utf8');
|
|
348
444
|
const savedTargetHead = extractReviewTargetHead(reviewContent);
|
|
349
445
|
const savedDiffBase = extractReviewDiffBase(reviewContent);
|
|
@@ -387,10 +483,9 @@ function routeFromFacts(facts) {
|
|
|
387
483
|
if (action === 'manual-validation' || action === 'validation-run')
|
|
388
484
|
return null;
|
|
389
485
|
const family = action === 'analysis' ? 'analysis' : action;
|
|
390
|
-
const round =
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
})) + 1;
|
|
486
|
+
const round = maxArtifactRound([
|
|
487
|
+
...(facts.artifacts[family] ?? []), ...(facts.staleArtifacts?.[family] ?? [])
|
|
488
|
+
], family) + 1;
|
|
394
489
|
const command = action === 'analysis' ? 'analyze-task' : action === 'plan' ? 'plan-task' : action === 'code' ? 'code-task' : action;
|
|
395
490
|
const role = action.startsWith('review-') ? 'reviewer' : 'executor';
|
|
396
491
|
return { action: command, role, stage: action, round, artifact: artifactName(family, round) };
|
|
@@ -437,7 +532,7 @@ function routeOrchestration(taskRef, options = {}) {
|
|
|
437
532
|
}
|
|
438
533
|
let run;
|
|
439
534
|
try {
|
|
440
|
-
run = readRun(resolved.taskDir);
|
|
535
|
+
run = readRun(resolved.taskDir, options);
|
|
441
536
|
}
|
|
442
537
|
catch (error) {
|
|
443
538
|
return failed('ORCHESTRATION_STATE_INVALID', error instanceof Error ? error.message : String(error), resolved.taskId);
|
|
@@ -449,7 +544,7 @@ function routeOrchestration(taskRef, options = {}) {
|
|
|
449
544
|
if (!routed)
|
|
450
545
|
return failed('ORCHESTRATION_ROUTE_UNKNOWN', 'cannot determine a unique lifecycle action', resolved.taskId);
|
|
451
546
|
if ('completion' in routed) {
|
|
452
|
-
const reviewRound =
|
|
547
|
+
const reviewRound = maxArtifactRound(fs.readdirSync(resolved.taskDir), 'review-code');
|
|
453
548
|
const review = parseReviewSummary(fs.readFileSync(path.join(resolved.taskDir, artifactName('review-code', reviewRound)), 'utf8'));
|
|
454
549
|
if (!review.ok || review.summary.manualValidation === null) {
|
|
455
550
|
return failed('ORCHESTRATION_REVIEW_INVALID', 'latest code review has no numeric manual-validation count', resolved.taskId);
|
|
@@ -543,7 +638,7 @@ function statusOrchestration(taskRef, options = {}) {
|
|
|
543
638
|
const resolved = resolveTaskRef(taskRef, { repoRoot: options.repoRoot });
|
|
544
639
|
if (!resolved.ok)
|
|
545
640
|
return failed(resolved.code, resolved.message, resolved.taskId);
|
|
546
|
-
const run = readRun(resolved.taskDir);
|
|
641
|
+
const run = readRun(resolved.taskDir, options);
|
|
547
642
|
if (!run)
|
|
548
643
|
return failed('ORCHESTRATION_RUN_MISSING', 'no orchestration run exists', resolved.taskId);
|
|
549
644
|
return { status: run.status, changed: false, taskId: resolved.taskId, run, next: null, error: null };
|
|
@@ -555,7 +650,15 @@ function prepareOrchestrationDelegationUnlocked(taskRef, input, options = {}) {
|
|
|
555
650
|
if (!(options.supportsLifecycleDelegation ?? supportsLifecycleDelegation)(input.client)) {
|
|
556
651
|
return failed('ORCHESTRATION_CLIENT_UNSUPPORTED', `client '${input.client}' does not support lifecycle orchestration`, resolved.taskId);
|
|
557
652
|
}
|
|
558
|
-
|
|
653
|
+
emitDiagnostic(options, 'orchestration-prepare-start', {
|
|
654
|
+
taskId: resolved.taskId,
|
|
655
|
+
taskDir: resolved.taskDir,
|
|
656
|
+
repoRoot: resolved.repoRoot,
|
|
657
|
+
client: input.client,
|
|
658
|
+
requestedModel: input.requestedModel ?? null,
|
|
659
|
+
requestedReasoningEffort: input.requestedReasoningEffort ?? null
|
|
660
|
+
});
|
|
661
|
+
const run = readRun(resolved.taskDir, options);
|
|
559
662
|
if (!run || run.status !== 'running')
|
|
560
663
|
return failed('ORCHESTRATION_RUN_NOT_RUNNING', 'a running orchestration is required', resolved.taskId);
|
|
561
664
|
if (run.pendingDelegation)
|
|
@@ -579,6 +682,13 @@ function prepareOrchestrationDelegationUnlocked(taskRef, input, options = {}) {
|
|
|
579
682
|
if (input.client === 'codex' && !input.lifecycleProvenance) {
|
|
580
683
|
return failed('ORCHESTRATION_CODEX_PROVENANCE_REQUIRED', 'Codex prepare requires lifecycle provenance', resolved.taskId);
|
|
581
684
|
}
|
|
685
|
+
if (input.lifecycleRecoveryAttestation
|
|
686
|
+
&& (input.lifecycleRecoveryAttestation.phase !== 'orchestration.prepare'
|
|
687
|
+
|| input.lifecycleRecoveryAttestation.taskId !== resolved.taskId
|
|
688
|
+
|| input.lifecycleRecoveryAttestation.artifact !== next.artifact
|
|
689
|
+
|| input.lifecycleRecoveryAttestation.round !== next.round)) {
|
|
690
|
+
return failed('LIFECYCLE_AUTHORITY_TUPLE_MISMATCH', 'orchestration authority does not match the routed stage', resolved.taskId);
|
|
691
|
+
}
|
|
582
692
|
const expectedPolicy = run.modelPolicy[next.role];
|
|
583
693
|
if (input.requestedModel !== expectedPolicy.model) {
|
|
584
694
|
return failed('ORCHESTRATION_REQUESTED_MODEL_MISMATCH', `requested model does not match the persisted ${next.role} model`, resolved.taskId);
|
|
@@ -643,7 +753,7 @@ function dispatchOrchestrationDelegationUnlocked(taskRef, options = {}) {
|
|
|
643
753
|
const resolved = resolveTaskRef(taskRef, { repoRoot: options.repoRoot });
|
|
644
754
|
if (!resolved.ok)
|
|
645
755
|
return failed(resolved.code, resolved.message, resolved.taskId);
|
|
646
|
-
const run = readRun(resolved.taskDir);
|
|
756
|
+
const run = readRun(resolved.taskDir, options);
|
|
647
757
|
if (!run?.pendingDelegation)
|
|
648
758
|
return failed('ORCHESTRATION_DELEGATION_MISSING', 'no pending delegation exists', resolved.taskId);
|
|
649
759
|
if (run.status !== 'running') {
|
|
@@ -677,17 +787,44 @@ function matchingDelegations(predicate, options) {
|
|
|
677
787
|
const activeRoot = path.join(repoRoot, '.agents', 'workspace', 'active');
|
|
678
788
|
if (!fs.existsSync(activeRoot))
|
|
679
789
|
return [];
|
|
680
|
-
|
|
790
|
+
emitDiagnostic(options, 'orchestration-active-scan-start', {
|
|
791
|
+
activeRoot
|
|
792
|
+
});
|
|
793
|
+
const matches = fs.readdirSync(activeRoot, { withFileTypes: true })
|
|
681
794
|
.filter((entry) => entry.isDirectory())
|
|
682
795
|
.flatMap((entry) => {
|
|
683
|
-
const
|
|
796
|
+
const candidateTaskId = entry.name;
|
|
797
|
+
const candidateTaskDir = path.join(activeRoot, candidateTaskId);
|
|
798
|
+
emitDiagnostic(options, 'orchestration-active-scan-candidate', {
|
|
799
|
+
candidateTaskId,
|
|
800
|
+
candidateTaskDir,
|
|
801
|
+
orchestrationPath: orchestrationPath(candidateTaskDir)
|
|
802
|
+
});
|
|
803
|
+
let run;
|
|
804
|
+
try {
|
|
805
|
+
run = readRun(candidateTaskDir, options);
|
|
806
|
+
}
|
|
807
|
+
catch (error) {
|
|
808
|
+
emitDiagnostic(options, 'orchestration-active-scan-candidate-failed', {
|
|
809
|
+
candidateTaskId,
|
|
810
|
+
candidateTaskDir,
|
|
811
|
+
errorType: error instanceof Error ? error.name : typeof error,
|
|
812
|
+
reasonCodes: error instanceof OrchestrationStateError ? error.reasonCodes.join(',') : null
|
|
813
|
+
});
|
|
814
|
+
throw error;
|
|
815
|
+
}
|
|
684
816
|
if (!run || run.status !== 'running' || !run.pendingDelegation)
|
|
685
817
|
return [];
|
|
686
818
|
const receipt = run.pendingDelegation;
|
|
687
819
|
return predicate(receipt)
|
|
688
|
-
? [{ taskId:
|
|
820
|
+
? [{ taskId: candidateTaskId, run }]
|
|
689
821
|
: [];
|
|
690
822
|
});
|
|
823
|
+
emitDiagnostic(options, 'orchestration-active-scan-finished', {
|
|
824
|
+
activeRoot,
|
|
825
|
+
matchingDelegations: matches.length
|
|
826
|
+
});
|
|
827
|
+
return matches;
|
|
691
828
|
}
|
|
692
829
|
function uniqueMatchingDelegation(client, predicate, options) {
|
|
693
830
|
const matches = matchingDelegations((receipt) => receipt.client === client && predicate(receipt), options);
|
|
@@ -838,7 +975,7 @@ function activateOrchestrationDelegation(taskRef, event, options = {}) {
|
|
|
838
975
|
const resolved = resolveTaskRef(taskRef, { repoRoot: options.repoRoot });
|
|
839
976
|
if (!resolved.ok)
|
|
840
977
|
return failed(resolved.code, resolved.message, resolved.taskId);
|
|
841
|
-
const run = readRun(resolved.taskDir);
|
|
978
|
+
const run = readRun(resolved.taskDir, options);
|
|
842
979
|
if (!run?.pendingDelegation)
|
|
843
980
|
return failed('ORCHESTRATION_DELEGATION_MISSING', 'no pending delegation exists', resolved.taskId);
|
|
844
981
|
if (run.status !== 'running') {
|
|
@@ -864,7 +1001,7 @@ async function awaitOrchestrationDelegationActivation(taskRef, event, options =
|
|
|
864
1001
|
const resolved = resolveTaskRef(taskRef, { repoRoot: options.repoRoot });
|
|
865
1002
|
if (!resolved.ok)
|
|
866
1003
|
return failed(resolved.code, resolved.message, resolved.taskId);
|
|
867
|
-
const run = readRun(resolved.taskDir);
|
|
1004
|
+
const run = readRun(resolved.taskDir, options);
|
|
868
1005
|
if (!run?.pendingDelegation) {
|
|
869
1006
|
return failed('ORCHESTRATION_DELEGATION_MISSING', 'no pending delegation exists', resolved.taskId);
|
|
870
1007
|
}
|
|
@@ -901,7 +1038,7 @@ function recoverPreparedOrchestrationDelegation(taskRef, options = {}) {
|
|
|
901
1038
|
return failed(resolved.code, resolved.message, resolved.taskId);
|
|
902
1039
|
try {
|
|
903
1040
|
return withTaskExecutionLock(resolved.repoRoot, resolved.taskId, 'task-orchestration.recover-prepared', () => {
|
|
904
|
-
const run = readRun(resolved.taskDir);
|
|
1041
|
+
const run = readRun(resolved.taskDir, options);
|
|
905
1042
|
const receipt = run?.pendingDelegation;
|
|
906
1043
|
if (!run || !receipt) {
|
|
907
1044
|
return failed('ORCHESTRATION_DELEGATION_MISSING', 'no pending delegation exists', resolved.taskId);
|
|
@@ -957,7 +1094,7 @@ function completeOrchestrationStage(taskRef, event, options = {}) {
|
|
|
957
1094
|
const resolved = resolveTaskRef(taskRef, { repoRoot: options.repoRoot });
|
|
958
1095
|
if (!resolved.ok)
|
|
959
1096
|
return failed(resolved.code, resolved.message, resolved.taskId);
|
|
960
|
-
const run = readRun(resolved.taskDir);
|
|
1097
|
+
const run = readRun(resolved.taskDir, options);
|
|
961
1098
|
if (!run)
|
|
962
1099
|
return { status: 'running', changed: false, taskId: resolved.taskId, run: null, next: null, error: null };
|
|
963
1100
|
if (!run.pendingDelegation)
|
|
@@ -975,7 +1112,7 @@ function inspectOrchestrationStage(taskRef, event, options = {}) {
|
|
|
975
1112
|
return failed(resolved.code, resolved.message, resolved.taskId);
|
|
976
1113
|
let run;
|
|
977
1114
|
try {
|
|
978
|
-
run = readRun(resolved.taskDir);
|
|
1115
|
+
run = readRun(resolved.taskDir, options);
|
|
979
1116
|
}
|
|
980
1117
|
catch (error) {
|
|
981
1118
|
return failed('ORCHESTRATION_STATE_INVALID', error instanceof Error ? error.message : String(error), resolved.taskId);
|
|
@@ -1023,7 +1160,7 @@ function sealOrchestrationDelegation(taskRef, event, options = {}) {
|
|
|
1023
1160
|
const resolved = resolveTaskRef(taskRef, { repoRoot: options.repoRoot });
|
|
1024
1161
|
if (!resolved.ok)
|
|
1025
1162
|
return failed(resolved.code, resolved.message, resolved.taskId);
|
|
1026
|
-
const run = readRun(resolved.taskDir);
|
|
1163
|
+
const run = readRun(resolved.taskDir, options);
|
|
1027
1164
|
if (!run?.pendingDelegation)
|
|
1028
1165
|
return failed('ORCHESTRATION_DELEGATION_MISSING', 'no pending delegation exists', resolved.taskId);
|
|
1029
1166
|
const result = sealDelegation(run.pendingDelegation, event, { now: options.now });
|
|
@@ -1037,7 +1174,7 @@ function advanceOrchestration(taskRef, options = {}) {
|
|
|
1037
1174
|
const resolved = resolveTaskRef(taskRef, { repoRoot: options.repoRoot });
|
|
1038
1175
|
if (!resolved.ok)
|
|
1039
1176
|
return failed(resolved.code, resolved.message, resolved.taskId);
|
|
1040
|
-
const run = readRun(resolved.taskDir);
|
|
1177
|
+
const run = readRun(resolved.taskDir, options);
|
|
1041
1178
|
if (!run?.pendingDelegation)
|
|
1042
1179
|
return failed('ORCHESTRATION_DELEGATION_MISSING', 'no pending delegation exists', resolved.taskId);
|
|
1043
1180
|
const result = consumeDelegation(run.pendingDelegation, { now: options.now });
|
|
@@ -1060,7 +1197,7 @@ function pauseOrchestration(taskRef, code, message, recoverable, options = {}) {
|
|
|
1060
1197
|
const resolved = resolveTaskRef(taskRef, { repoRoot: options.repoRoot });
|
|
1061
1198
|
if (!resolved.ok)
|
|
1062
1199
|
return failed(resolved.code, resolved.message, resolved.taskId);
|
|
1063
|
-
const run = readRun(resolved.taskDir);
|
|
1200
|
+
const run = readRun(resolved.taskDir, options);
|
|
1064
1201
|
if (!run)
|
|
1065
1202
|
return failed('ORCHESTRATION_RUN_MISSING', 'no orchestration run exists', resolved.taskId);
|
|
1066
1203
|
const updated = withUpdatedRun(run, { status: 'paused', pause: { code, message, recoverable } });
|