@fitlab-ai/agent-infra 0.9.11 → 0.9.13
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 +13 -13
- package/README.zh-CN.md +13 -13
- package/dist/bin/internal-cli.js +29 -19
- package/dist/lib/agent-clients/adapters/codex-lifecycle/build-identity.js +71 -10
- package/dist/lib/agent-clients/next-steps.js +6 -1
- package/dist/lib/decide.js +3 -3
- package/dist/lib/defaults.json +4 -0
- package/dist/lib/git/workflow.js +43 -1
- package/dist/lib/init.js +1 -0
- package/dist/lib/internal/git-workflow.js +8 -1
- package/dist/lib/internal/platform-checks.js +3 -3
- package/dist/lib/internal/platform-comment.js +9 -9
- package/dist/lib/internal/platform-context.js +2 -2
- package/dist/lib/internal/platform-issue.js +8 -9
- package/dist/lib/internal/platform-pr-review.js +10 -10
- package/dist/lib/internal/platform-pr.js +68 -23
- package/dist/lib/internal/platform-release-notes.js +3 -3
- package/dist/lib/internal/pr-review-grade.js +11 -9
- package/dist/lib/internal/release-workflow.js +4 -4
- package/dist/lib/internal/sandbox-control.js +30 -4
- package/dist/lib/internal/task-activity.js +3 -3
- package/dist/lib/internal/task-artifact.js +76 -24
- package/dist/lib/internal/task-create.js +2 -2
- package/dist/lib/internal/task-delivery.js +59 -0
- package/dist/lib/internal/task-event.js +6 -3
- package/dist/lib/internal/task-finalization.js +2 -2
- package/dist/lib/internal/task-invalidation.js +60 -0
- package/dist/lib/internal/task-ledger.js +9 -6
- package/dist/lib/internal/task-lifecycle.js +2 -2
- package/dist/lib/internal/task-override.js +4 -4
- package/dist/lib/internal/task-review.js +3 -3
- package/dist/lib/internal/task-verify.js +6 -6
- package/dist/lib/internal/task-warning.js +3 -3
- package/dist/lib/platform/adapters.js +1 -3
- package/dist/lib/platform/change-request-git-evidence.js +27 -7
- package/dist/lib/platform/completion-backfill.js +6 -5
- package/dist/lib/platform/context.js +70 -130
- package/dist/lib/platform/github-client.js +8 -2
- package/dist/lib/platform/github-provider.js +903 -0
- package/dist/lib/platform/in-label-sync.js +143 -0
- package/dist/lib/platform/issue-comments.js +94 -41
- package/dist/lib/platform/issues.js +335 -189
- package/dist/lib/platform/metadata-labels.js +6 -2
- package/dist/lib/platform/none-provider.js +28 -0
- package/dist/lib/platform/pr-change-report.js +551 -0
- package/dist/lib/platform/pr-checks.js +124 -106
- package/dist/lib/platform/pr-review.js +88 -72
- package/dist/lib/platform/pr-summary.js +523 -49
- package/dist/lib/platform/provider-bridge.js +45 -0
- package/dist/lib/platform/provider-contract.d.ts +487 -0
- package/dist/lib/platform/provider-contract.js +95 -0
- package/dist/lib/platform/provider-loader.js +251 -0
- package/dist/lib/platform/provider-validation.js +504 -0
- package/dist/lib/platform/pull-request-metadata.js +8 -6
- package/dist/lib/platform/pull-requests.js +1050 -502
- package/dist/lib/platform/release-notes.js +78 -55
- package/dist/lib/platform/releases.js +79 -50
- package/dist/lib/platform/resource-identity.d.ts +26 -0
- package/dist/lib/platform/resource-identity.js +92 -0
- package/dist/lib/platform/task-identities.js +31 -0
- package/dist/lib/platform/verification-required.js +22 -12
- package/dist/lib/platform/verification-sync.js +118 -239
- package/dist/lib/pr-review/evidence-grading.js +30 -9
- package/dist/lib/run/index.js +63 -23
- package/dist/lib/sandbox/config.js +5 -0
- package/dist/lib/sandbox/control/client.js +96 -15
- package/dist/lib/sandbox/control/executor.js +3 -3
- package/dist/lib/sandbox/control/lifecycle.js +29 -7
- package/dist/lib/sandbox/control/protocol.js +77 -0
- package/dist/lib/sandbox/control/server.js +398 -25
- package/dist/lib/sandbox/control/state.js +204 -1
- package/dist/lib/server/process-state.js +2 -2
- package/dist/lib/server/protocol.js +38 -1
- package/dist/lib/task/activity-log.js +8 -1
- package/dist/lib/task/artifact-lifecycle.js +35 -7
- package/dist/lib/task/capabilities.js +239 -0
- package/dist/lib/task/commands/status.js +32 -0
- package/dist/lib/task/commit-intent.js +100 -0
- package/dist/lib/task/commit-operation.js +207 -102
- package/dist/lib/task/control-authority.js +8 -5
- package/dist/lib/task/create-service.js +8 -8
- package/dist/lib/task/create.js +33 -7
- package/dist/lib/task/current-contract.js +5 -1
- package/dist/lib/task/decision-details.js +3 -48
- package/dist/lib/task/delivery-target.js +97 -0
- package/dist/lib/task/delivery.js +153 -0
- package/dist/lib/task/events.js +297 -17
- package/dist/lib/task/finalization.js +37 -13
- package/dist/lib/task/human-override.js +61 -36
- package/dist/lib/task/invalidation-command.js +86 -0
- package/dist/lib/task/invalidation.js +260 -0
- package/dist/lib/task/ledger-intents.js +37 -0
- package/dist/lib/task/lifecycle.js +106 -9
- package/dist/lib/task/local-artifact-finalization.js +374 -0
- package/dist/lib/task/orchestration.js +100 -151
- package/dist/lib/task/pr-delivery-fact.js +183 -0
- package/dist/lib/task/review-finalization.js +4 -8
- package/dist/lib/task/review-fingerprint.js +32 -2
- package/dist/lib/task/rework-intent.js +138 -0
- package/dist/lib/task/skill-scope.js +23 -0
- package/dist/lib/task/task-execution-lock.js +27 -17
- package/dist/lib/task/verification-engine.js +89 -38
- package/dist/lib/task/verification-review.js +1 -1
- package/dist/lib/task/verification.js +3 -3
- package/dist/lib/task/workflow-warning-intents.js +1 -1
- package/dist/lib/task/write.js +11 -0
- package/dist/lib/update.js +9 -0
- package/dist/lib/version.js +11 -1
- package/dist/lifecycle-build-manifest.json +3 -3
- package/lib/agent-clients/adapters/codex-lifecycle/build-identity.ts +105 -10
- package/lib/agent-clients/adapters/codex-lifecycle/manifest-files.json +12 -1
- package/lib/agent-clients/next-steps.ts +6 -1
- package/lib/decide.ts +3 -3
- package/lib/defaults.json +4 -0
- package/lib/git/workflow.ts +38 -1
- package/lib/init.ts +4 -1
- package/lib/internal/git-workflow.ts +7 -1
- package/lib/internal/platform-checks.ts +3 -3
- package/lib/internal/platform-comment.ts +8 -8
- package/lib/internal/platform-context.ts +2 -2
- package/lib/internal/platform-issue.ts +7 -8
- package/lib/internal/platform-pr-review.ts +9 -9
- package/lib/internal/platform-pr.ts +53 -21
- package/lib/internal/platform-release-notes.ts +3 -3
- package/lib/internal/pr-review-grade.ts +10 -8
- package/lib/internal/release-workflow.ts +4 -4
- package/lib/internal/sandbox-control.ts +27 -3
- package/lib/internal/task-activity.ts +3 -3
- package/lib/internal/task-artifact.ts +65 -22
- package/lib/internal/task-create.ts +2 -2
- package/lib/internal/task-delivery.ts +53 -0
- package/lib/internal/task-event.ts +6 -3
- package/lib/internal/task-finalization.ts +3 -3
- package/lib/internal/task-invalidation.ts +39 -0
- package/lib/internal/task-ledger.ts +11 -8
- package/lib/internal/task-lifecycle.ts +2 -2
- package/lib/internal/task-override.ts +6 -6
- package/lib/internal/task-review.ts +3 -3
- package/lib/internal/task-verify.ts +6 -6
- package/lib/internal/task-warning.ts +3 -3
- package/lib/platform/adapters.ts +3 -2
- package/lib/platform/change-request-git-evidence.ts +36 -9
- package/lib/platform/completion-backfill.ts +9 -8
- package/lib/platform/context.ts +97 -134
- package/lib/platform/github-client.ts +10 -3
- package/lib/platform/github-provider.ts +910 -0
- package/lib/platform/in-label-sync.ts +208 -0
- package/lib/platform/issue-comments.ts +97 -47
- package/lib/platform/issues.ts +344 -174
- package/lib/platform/metadata-labels.ts +5 -2
- package/lib/platform/none-provider.ts +35 -0
- package/lib/platform/pr-change-report.ts +645 -0
- package/lib/platform/pr-checks.ts +129 -107
- package/lib/platform/pr-review.ts +88 -85
- package/lib/platform/pr-summary.ts +562 -52
- package/lib/platform/provider-bridge.ts +82 -0
- package/lib/platform/provider-contract.ts +536 -0
- package/lib/platform/provider-loader.ts +307 -0
- package/lib/platform/provider-validation.ts +529 -0
- package/lib/platform/pull-request-metadata.ts +10 -7
- package/lib/platform/pull-requests.ts +1126 -505
- package/lib/platform/release-notes.ts +76 -59
- package/lib/platform/releases.ts +77 -43
- package/lib/platform/resource-identity.ts +121 -0
- package/lib/platform/task-identities.ts +40 -0
- package/lib/platform/types.ts +4 -2
- package/lib/platform/verification-required.ts +21 -13
- package/lib/platform/verification-sync.ts +118 -293
- package/lib/pr-review/evidence-grading.ts +31 -11
- package/lib/run/index.ts +57 -22
- package/lib/sandbox/config.ts +7 -0
- package/lib/sandbox/control/client.ts +105 -15
- package/lib/sandbox/control/executor.ts +4 -4
- package/lib/sandbox/control/lifecycle.ts +30 -8
- package/lib/sandbox/control/protocol.ts +113 -0
- package/lib/sandbox/control/server.ts +431 -23
- package/lib/sandbox/control/state.ts +251 -1
- package/lib/server/process-state.ts +2 -2
- package/lib/server/protocol.ts +36 -1
- package/lib/task/activity-log.ts +8 -0
- package/lib/task/artifact-lifecycle.ts +34 -8
- package/lib/task/capabilities.ts +262 -0
- package/lib/task/commands/status.ts +38 -0
- package/lib/task/commit-intent.ts +137 -0
- package/lib/task/commit-operation.ts +186 -88
- package/lib/task/control-authority.ts +11 -8
- package/lib/task/create-service.ts +8 -8
- package/lib/task/create.ts +34 -9
- package/lib/task/current-contract.ts +6 -1
- package/lib/task/decision-details.ts +8 -64
- package/lib/task/delivery-target.ts +130 -0
- package/lib/task/delivery.ts +160 -0
- package/lib/task/events.ts +296 -16
- package/lib/task/finalization.ts +50 -14
- package/lib/task/human-override.ts +73 -46
- package/lib/task/invalidation-command.ts +86 -0
- package/lib/task/invalidation.ts +332 -0
- package/lib/task/ledger-intents.ts +35 -1
- package/lib/task/lifecycle.ts +93 -4
- package/lib/task/local-artifact-finalization.ts +563 -0
- package/lib/task/orchestration.ts +110 -146
- package/lib/task/pr-delivery-fact.ts +237 -0
- package/lib/task/review-finalization.ts +4 -14
- package/lib/task/review-fingerprint.ts +33 -2
- package/lib/task/rework-intent.ts +165 -0
- package/lib/task/skill-scope.ts +24 -0
- package/lib/task/task-execution-lock.ts +23 -14
- package/lib/task/verification-engine.ts +95 -43
- package/lib/task/verification-review.ts +2 -0
- package/lib/task/verification.ts +4 -4
- package/lib/task/workflow-warning-intents.ts +1 -1
- package/lib/task/write.ts +19 -0
- package/lib/update.ts +11 -1
- package/lib/version.ts +15 -1
- package/package.json +7 -1
- package/templates/.agents/rules/README.en.md +4 -2
- package/templates/.agents/rules/README.zh-CN.md +4 -2
- package/templates/.agents/rules/create-issue.en.md +11 -2
- package/templates/.agents/rules/create-issue.zh-CN.md +24 -2
- package/templates/.agents/rules/issue-pr-commands.en.md +4 -17
- package/templates/.agents/rules/issue-pr-commands.zh-CN.md +1 -1
- package/templates/.agents/rules/issue-sync.en.md +28 -5
- package/templates/.agents/rules/issue-sync.zh-CN.md +64 -5
- package/templates/.agents/rules/label-milestone-setup.en.md +15 -2
- package/templates/.agents/rules/label-milestone-setup.zh-CN.md +15 -2
- package/templates/.agents/rules/local-artifact-repair.en.md +53 -0
- package/templates/.agents/rules/local-artifact-repair.zh-CN.md +53 -0
- package/templates/.agents/rules/milestone-inference.en.md +12 -2
- package/templates/.agents/rules/milestone-inference.zh-CN.md +25 -3
- package/templates/.agents/rules/pr-sync.en.md +28 -13
- package/templates/.agents/rules/pr-sync.zh-CN.md +39 -5
- package/templates/.agents/rules/release-commands.en.md +42 -3
- package/templates/.agents/rules/release-commands.zh-CN.md +42 -3
- package/templates/.agents/rules/security-alerts.en.md +17 -2
- package/templates/.agents/rules/security-alerts.zh-CN.md +17 -2
- package/templates/.agents/rules/sync-content-generation.en.md +8 -0
- package/templates/.agents/rules/sync-content-generation.zh-CN.md +8 -0
- package/templates/.agents/rules/task-management.en.md +1 -1
- package/templates/.agents/rules/task-management.zh-CN.md +1 -1
- package/templates/.agents/rules/task-short-id.en.md +1 -4
- package/templates/.agents/rules/task-short-id.zh-CN.md +1 -3
- package/templates/.agents/scripts/security-alerts.github.sh +151 -0
- package/templates/.agents/scripts/security-alerts.sh +31 -0
- package/templates/.agents/skills/analyze-task/SKILL.en.md +14 -3
- package/templates/.agents/skills/analyze-task/SKILL.zh-CN.md +11 -3
- package/templates/.agents/skills/check-task/SKILL.en.md +16 -37
- package/templates/.agents/skills/check-task/SKILL.zh-CN.md +16 -37
- 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 +32 -10
- package/templates/.agents/skills/code-task/SKILL.zh-CN.md +35 -13
- package/templates/.agents/skills/code-task/config/verify.en.json +1 -0
- package/templates/.agents/skills/code-task/config/verify.zh-CN.json +1 -0
- package/templates/.agents/skills/commit/SKILL.en.md +3 -3
- package/templates/.agents/skills/commit/SKILL.zh-CN.md +3 -3
- package/templates/.agents/skills/commit/config/verify.json +1 -1
- package/templates/.agents/skills/commit/reference/commit-orchestration.en.md +3 -3
- package/templates/.agents/skills/commit/reference/commit-orchestration.zh-CN.md +3 -3
- package/templates/.agents/skills/commit/reference/issue-metadata-sync.en.md +2 -0
- package/templates/.agents/skills/commit/reference/issue-metadata-sync.zh-CN.md +2 -0
- package/templates/.agents/skills/commit/reference/pr-summary-sync.en.md +4 -4
- package/templates/.agents/skills/commit/reference/pr-summary-sync.zh-CN.md +4 -4
- package/templates/.agents/skills/commit/reference/task-status-update.en.md +2 -2
- package/templates/.agents/skills/commit/reference/task-status-update.zh-CN.md +2 -2
- package/templates/.agents/skills/complete-manual-validation/SKILL.en.md +7 -4
- package/templates/.agents/skills/complete-manual-validation/SKILL.zh-CN.md +7 -4
- 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/summary-update.en.md +5 -4
- package/templates/.agents/skills/complete-manual-validation/reference/summary-update.zh-CN.md +5 -4
- package/templates/.agents/skills/complete-task/SKILL.en.md +31 -13
- package/templates/.agents/skills/complete-task/SKILL.zh-CN.md +30 -13
- package/templates/.agents/skills/complete-task/reference/external-delivery.en.md +2 -2
- package/templates/.agents/skills/complete-task/reference/external-delivery.zh-CN.md +2 -2
- package/templates/.agents/skills/create-pr/SKILL.en.md +11 -10
- package/templates/.agents/skills/create-pr/SKILL.zh-CN.md +11 -11
- package/templates/.agents/skills/create-pr/config/verify.json +1 -0
- package/templates/.agents/skills/create-pr/reference/change-report.en.md +16 -4
- package/templates/.agents/skills/create-pr/reference/change-report.zh-CN.md +16 -4
- package/templates/.agents/skills/create-pr/reference/comment-publish.en.md +5 -3
- package/templates/.agents/skills/create-pr/reference/comment-publish.zh-CN.md +5 -3
- package/templates/.agents/skills/create-pr/reference/pr-body-template.en.md +1 -1
- package/templates/.agents/skills/create-pr/reference/pr-body-template.zh-CN.md +1 -1
- package/templates/.agents/skills/create-pr/scripts/change-report.mjs +3 -0
- package/templates/.agents/skills/create-task/SKILL.en.md +1 -0
- package/templates/.agents/skills/create-task/SKILL.zh-CN.md +1 -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 +9 -10
- package/templates/.agents/skills/init-labels/SKILL.zh-CN.md +9 -10
- package/templates/.agents/skills/init-labels/scripts/init-labels.github.sh +57 -1
- package/templates/.agents/skills/init-labels/scripts/init-labels.sh +27 -1
- package/templates/.agents/skills/init-milestones/SKILL.en.md +3 -5
- package/templates/.agents/skills/init-milestones/SKILL.zh-CN.md +3 -5
- package/templates/.agents/skills/plan-task/SKILL.en.md +14 -3
- package/templates/.agents/skills/plan-task/SKILL.zh-CN.md +11 -3
- package/templates/.agents/skills/review-analysis/SKILL.en.md +6 -5
- package/templates/.agents/skills/review-analysis/SKILL.zh-CN.md +6 -5
- package/templates/.agents/skills/review-analysis/reference/output-templates.en.md +18 -0
- package/templates/.agents/skills/review-analysis/reference/output-templates.zh-CN.md +18 -0
- package/templates/.agents/skills/review-code/SKILL.en.md +10 -9
- package/templates/.agents/skills/review-code/SKILL.zh-CN.md +10 -9
- package/templates/.agents/skills/review-code/reference/output-templates.en.md +19 -1
- package/templates/.agents/skills/review-code/reference/output-templates.zh-CN.md +19 -1
- package/templates/.agents/skills/review-code/reference/report-template.en.md +4 -2
- package/templates/.agents/skills/review-code/reference/report-template.zh-CN.md +4 -2
- package/templates/.agents/skills/review-plan/SKILL.en.md +6 -5
- package/templates/.agents/skills/review-plan/SKILL.zh-CN.md +6 -5
- package/templates/.agents/skills/review-plan/reference/output-templates.en.md +18 -0
- package/templates/.agents/skills/review-plan/reference/output-templates.zh-CN.md +18 -0
- package/templates/.agents/skills/review-pr/SKILL.en.md +1 -0
- package/templates/.agents/skills/review-pr/SKILL.zh-CN.md +1 -0
- package/templates/.agents/skills/review-pr/reference/evidence-grading.en.md +2 -2
- package/templates/.agents/skills/review-pr/reference/evidence-grading.zh-CN.md +2 -2
- package/templates/.agents/skills/run-manual-validation/SKILL.en.md +5 -2
- package/templates/.agents/skills/run-manual-validation/SKILL.zh-CN.md +5 -2
- 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/update-agent-infra/scripts/sync-templates.js +4 -0
- package/templates/.agents/skills/watch-pr/SKILL.en.md +6 -6
- package/templates/.agents/skills/watch-pr/SKILL.zh-CN.md +6 -6
- package/templates/.agents/skills/watch-pr/reference/monitor-and-heal.en.md +6 -0
- package/templates/.agents/skills/watch-pr/reference/monitor-and-heal.zh-CN.md +6 -0
- package/templates/.agents/templates/task.en.md +23 -2
- package/templates/.agents/templates/task.zh-CN.md +23 -2
- package/templates/.agents/workflows/bug-fix.en.yaml +9 -8
- package/templates/.agents/workflows/bug-fix.zh-CN.yaml +9 -8
- package/templates/.agents/workflows/feature-development.en.yaml +9 -8
- package/templates/.agents/workflows/feature-development.zh-CN.yaml +9 -8
- package/templates/.agents/workflows/refactoring.en.yaml +9 -8
- package/templates/.agents/workflows/refactoring.zh-CN.yaml +9 -8
- package/templates/.github/workflows/pr-label.yml +7 -26
- package/templates/.agents/rules/create-issue.github.en.md +0 -14
- package/templates/.agents/rules/create-issue.github.zh-CN.md +0 -27
- package/templates/.agents/rules/issue-pr-commands.github.en.md +0 -34
- package/templates/.agents/rules/issue-pr-commands.github.zh-CN.md +0 -49
- package/templates/.agents/rules/issue-sync.github.en.md +0 -40
- package/templates/.agents/rules/issue-sync.github.zh-CN.md +0 -76
- package/templates/.agents/rules/label-milestone-setup.github.en.md +0 -60
- package/templates/.agents/rules/label-milestone-setup.github.zh-CN.md +0 -60
- package/templates/.agents/rules/milestone-inference.github.en.md +0 -15
- package/templates/.agents/rules/milestone-inference.github.zh-CN.md +0 -27
- package/templates/.agents/rules/pr-checks-commands.github.en.md +0 -18
- package/templates/.agents/rules/pr-checks-commands.github.zh-CN.md +0 -34
- package/templates/.agents/rules/pr-sync.github.en.md +0 -43
- package/templates/.agents/rules/pr-sync.github.zh-CN.md +0 -69
- package/templates/.agents/rules/release-commands.github.en.md +0 -44
- package/templates/.agents/rules/release-commands.github.zh-CN.md +0 -44
- package/templates/.agents/rules/security-alerts.github.en.md +0 -43
- package/templates/.agents/rules/security-alerts.github.zh-CN.md +0 -43
- /package/templates/.agents/rules/{issue-fields.github.en.md → issue-fields.en.md} +0 -0
- /package/templates/.agents/rules/{issue-fields.github.zh-CN.md → issue-fields.zh-CN.md} +0 -0
|
@@ -14,7 +14,7 @@ function output(result) {
|
|
|
14
14
|
process.stdout.write(`${JSON.stringify(result)}\n`);
|
|
15
15
|
process.exitCode = result.status === 'blocked' ? 2 : result.status === 'failed' ? 1 : 0;
|
|
16
16
|
}
|
|
17
|
-
function taskCreate(args) {
|
|
17
|
+
async function taskCreate(args) {
|
|
18
18
|
const inputIndex = args.indexOf('--input');
|
|
19
19
|
const input = inputIndex >= 0 ? args[inputIndex + 1] : undefined;
|
|
20
20
|
if (!input || args.length !== 2 || inputIndex !== 0) {
|
|
@@ -40,7 +40,7 @@ function taskCreate(args) {
|
|
|
40
40
|
process.exitCode = response.exitCode;
|
|
41
41
|
return;
|
|
42
42
|
}
|
|
43
|
-
output(createTask(candidate, { repoRoot: process.cwd() }));
|
|
43
|
+
output(await createTask(candidate, { repoRoot: process.cwd() }));
|
|
44
44
|
}
|
|
45
45
|
catch (error) {
|
|
46
46
|
if (error instanceof SandboxControlClientError) {
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { normalizeAgentToken, AGENT_USAGE_HINT } from '../agent-clients/tokens.js';
|
|
3
|
+
import { deliverTaskBranch } from '../task/delivery.js';
|
|
4
|
+
const USAGE = `Usage: agent-infra-internal task-delivery <task-ref> deliver --agent <agent> [--remote <name>] [--base <branch>] [--dry-run] [--cwd <path>]\n`;
|
|
5
|
+
function taskDelivery(args = []) {
|
|
6
|
+
const taskRef = args[0];
|
|
7
|
+
const operation = args[1];
|
|
8
|
+
if (!taskRef || operation !== 'deliver') {
|
|
9
|
+
process.stdout.write(`${JSON.stringify({ status: 'failed', changed: false, error: { code: 'DELIVERY_PAYLOAD_INVALID', message: 'task ref and deliver operation are required' } })}\n`);
|
|
10
|
+
process.stderr.write(USAGE);
|
|
11
|
+
process.exitCode = 1;
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
let agent = '';
|
|
15
|
+
let remote;
|
|
16
|
+
let baseRef;
|
|
17
|
+
let cwd = process.cwd();
|
|
18
|
+
let dryRun = false;
|
|
19
|
+
for (let index = 2; index < args.length; index += 1) {
|
|
20
|
+
const flag = args[index];
|
|
21
|
+
if (flag === '--dry-run') {
|
|
22
|
+
dryRun = true;
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
const value = args[++index];
|
|
26
|
+
if (value === undefined || value.startsWith('--')) {
|
|
27
|
+
process.stdout.write(`${JSON.stringify({ status: 'failed', changed: false, error: { code: 'DELIVERY_PAYLOAD_INVALID', message: `${flag} requires a value` } })}\n`);
|
|
28
|
+
process.exitCode = 1;
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
if (flag === '--agent')
|
|
32
|
+
agent = value;
|
|
33
|
+
else if (flag === '--remote')
|
|
34
|
+
remote = value;
|
|
35
|
+
else if (flag === '--base')
|
|
36
|
+
baseRef = value;
|
|
37
|
+
else if (flag === '--cwd')
|
|
38
|
+
cwd = path.resolve(value);
|
|
39
|
+
else {
|
|
40
|
+
process.stdout.write(`${JSON.stringify({ status: 'failed', changed: false, error: { code: 'DELIVERY_PAYLOAD_INVALID', message: `unknown option '${flag}'` } })}\n`);
|
|
41
|
+
process.exitCode = 1;
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const normalized = normalizeAgentToken(agent);
|
|
46
|
+
if (!normalized) {
|
|
47
|
+
process.stdout.write(`${JSON.stringify({ status: 'failed', changed: false, error: { code: 'DELIVERY_PAYLOAD_INVALID', message: `invalid --agent '${agent}': ${AGENT_USAGE_HINT}` } })}\n`);
|
|
48
|
+
process.exitCode = 1;
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const result = deliverTaskBranch(taskRef, { repoRoot: cwd, agent: normalized, remote, baseRef, dryRun });
|
|
52
|
+
process.stdout.write(`${JSON.stringify(result)}\n`);
|
|
53
|
+
if (result.status === 'failed')
|
|
54
|
+
process.exitCode = 1;
|
|
55
|
+
if (result.status === 'blocked')
|
|
56
|
+
process.exitCode = 2;
|
|
57
|
+
}
|
|
58
|
+
export { taskDelivery };
|
|
59
|
+
//# sourceMappingURL=task-delivery.js.map
|
|
@@ -10,6 +10,9 @@ Events: ${eventCatalog.join(', ')}
|
|
|
10
10
|
`;
|
|
11
11
|
const FLAGS = {
|
|
12
12
|
'--agent': 'agent', '--round': 'round', '--question': 'question', '--artifact': 'artifact',
|
|
13
|
+
'--artifact-sha256': 'artifactSha256', '--semantic-digest': 'semanticDigest',
|
|
14
|
+
'--initiator': 'initiator', '--request-id': 'requestId', '--reason-code': 'reasonCode',
|
|
15
|
+
'--source-finding': 'sourceFinding', '--source-artifact': 'sourceArtifact', '--source-sha256': 'sourceSha256',
|
|
13
16
|
'--fix-for': 'fixFor', '--implementation-input': 'implementationInput',
|
|
14
17
|
'--verdict': 'verdict', '--blockers': 'blockers', '--major': 'major',
|
|
15
18
|
'--minor': 'minor', '--manual-validation': 'manualValidation', '--files-modified': 'filesModified',
|
|
@@ -22,7 +25,7 @@ function usageFailure(message) {
|
|
|
22
25
|
process.stderr.write(USAGE);
|
|
23
26
|
process.exitCode = 1;
|
|
24
27
|
}
|
|
25
|
-
function taskEvent(args = []) {
|
|
28
|
+
async function taskEvent(args = []) {
|
|
26
29
|
if (args[0] === '--help' || args[0] === '-h') {
|
|
27
30
|
process.stdout.write(USAGE);
|
|
28
31
|
return;
|
|
@@ -95,7 +98,7 @@ function taskEvent(args = []) {
|
|
|
95
98
|
let result;
|
|
96
99
|
let humanOverride = null;
|
|
97
100
|
try {
|
|
98
|
-
result = withTaskExecutionLock(resolved.repoRoot, resolved.taskId, `task-event.${request.event}`, () => {
|
|
101
|
+
result = await withTaskExecutionLock(resolved.repoRoot, resolved.taskId, `task-event.${request.event}`, async () => {
|
|
99
102
|
let current = applyTaskEvent(request, { lockAlreadyHeld: true });
|
|
100
103
|
const values = request;
|
|
101
104
|
if (current.status !== 'failed' || !values.overrideTicket)
|
|
@@ -103,7 +106,7 @@ function taskEvent(args = []) {
|
|
|
103
106
|
if (!values.overrideTarget || !values.overrideScope) {
|
|
104
107
|
return { ...current, humanOverride: { status: 'failed', error: { code: 'OVERRIDE_PAYLOAD_INVALID', message: 'override ticket requires target and scope' } } };
|
|
105
108
|
}
|
|
106
|
-
const consumed = consumeHumanOverride({
|
|
109
|
+
const consumed = await consumeHumanOverride({
|
|
107
110
|
taskRef: request.taskRef,
|
|
108
111
|
ticketId: String(values.overrideTicket),
|
|
109
112
|
failureId: failureId('task-event', current.error?.code ?? 'EVENT_TRANSITION_INVALID'),
|
|
@@ -18,7 +18,7 @@ function parseFailure(error) {
|
|
|
18
18
|
const message = error instanceof Error ? error.message : String(error);
|
|
19
19
|
return message.replace(/^TASK_CONTROL_OPERATION_INVALID: /u, '');
|
|
20
20
|
}
|
|
21
|
-
function taskFinalization(args = []) {
|
|
21
|
+
async function taskFinalization(args = []) {
|
|
22
22
|
if (args[0] === '--help' || args[0] === '-h') {
|
|
23
23
|
process.stdout.write(USAGE);
|
|
24
24
|
return;
|
|
@@ -56,7 +56,7 @@ function taskFinalization(args = []) {
|
|
|
56
56
|
...operation,
|
|
57
57
|
request: { ...operation.request, taskRef: resolved.taskId }
|
|
58
58
|
};
|
|
59
|
-
const result = dispatchTaskControlOperation(createDirectHostExecutionContext({ repoRoot }), boundOperation);
|
|
59
|
+
const result = await dispatchTaskControlOperation(createDirectHostExecutionContext({ repoRoot }), boundOperation);
|
|
60
60
|
process.stdout.write(envelope(result.status, result.changed, true, result, result.error));
|
|
61
61
|
process.exitCode = exitCode(result.status);
|
|
62
62
|
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { reconcileTaskInvalidation } from '../task/invalidation-command.js';
|
|
2
|
+
import { resolveTaskRef } from '../task/resolve-ref.js';
|
|
3
|
+
import { TaskExecutionLockError, withTaskExecutionLock } from '../task/task-execution-lock.js';
|
|
4
|
+
const USAGE = 'Usage: agent-infra-internal task-invalidation <task-ref> reconcile [--max-targets <n>] [--dry-run]\n';
|
|
5
|
+
function taskInvalidation(args = []) {
|
|
6
|
+
if (args[0] === '--help' || args[0] === '-h') {
|
|
7
|
+
process.stdout.write(USAGE);
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
const taskRef = args[0];
|
|
11
|
+
if (!taskRef || args[1] !== 'reconcile') {
|
|
12
|
+
process.stdout.write(`${JSON.stringify({ status: 'failed', changed: false, error: { code: 'INVALIDATION_PAYLOAD_INVALID', message: 'task ref and reconcile are required' } })}\n`);
|
|
13
|
+
process.stderr.write(USAGE);
|
|
14
|
+
process.exitCode = 1;
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
let maxTargets;
|
|
18
|
+
let dryRun = false;
|
|
19
|
+
for (let index = 2; index < args.length; index += 1) {
|
|
20
|
+
const flag = args[index];
|
|
21
|
+
if (flag === '--dry-run') {
|
|
22
|
+
if (dryRun) {
|
|
23
|
+
process.exitCode = 1;
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
dryRun = true;
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
if (flag !== '--max-targets') {
|
|
30
|
+
process.exitCode = 1;
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const value = Number(args[++index]);
|
|
34
|
+
if (!Number.isInteger(value) || value < 1 || maxTargets !== undefined) {
|
|
35
|
+
process.exitCode = 1;
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
maxTargets = value;
|
|
39
|
+
}
|
|
40
|
+
const resolved = resolveTaskRef(taskRef);
|
|
41
|
+
if (!resolved.ok) {
|
|
42
|
+
process.stdout.write(`${JSON.stringify({ status: 'failed', changed: false, error: { code: resolved.code, message: resolved.message } })}\n`);
|
|
43
|
+
process.exitCode = 1;
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
const result = withTaskExecutionLock(resolved.repoRoot, resolved.taskId, 'task-invalidation.reconcile', () => reconcileTaskInvalidation(taskRef, { ...(maxTargets === undefined ? {} : { maxTargets }), dryRun }));
|
|
48
|
+
process.stdout.write(`${JSON.stringify(result)}\n`);
|
|
49
|
+
if (result.status === 'failed')
|
|
50
|
+
process.exitCode = 1;
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
if (!(error instanceof TaskExecutionLockError))
|
|
54
|
+
throw error;
|
|
55
|
+
process.stdout.write(`${JSON.stringify({ status: 'failed', changed: false, error: { code: error.code, message: error.message } })}\n`);
|
|
56
|
+
process.exitCode = 1;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export { taskInvalidation };
|
|
60
|
+
//# sourceMappingURL=task-invalidation.js.map
|
|
@@ -4,11 +4,13 @@ import { consumeHumanOverride, failureId, overrideDryRunConflict } from '../task
|
|
|
4
4
|
import { LEDGER_SECTION_MISSING_CODE, LEDGER_SECTION_MISSING_MESSAGE, isReviewStage, parseLedgerDocument, summarizeLedgerStage, validateLedgerRows } from '../task/ledger.js';
|
|
5
5
|
import { resolveTaskRef } from '../task/resolve-ref.js';
|
|
6
6
|
import { TaskExecutionLockError, withTaskExecutionLock } from '../task/task-execution-lock.js';
|
|
7
|
-
const USAGE = `Usage: agent-infra-internal task-ledger <task-ref> <intent> [intent flags] [--dry-run]\n\nIntents: finding-upsert, finding-respond, finding-review, decision-next-id, decision-upsert, stage-status\n`;
|
|
7
|
+
const USAGE = `Usage: agent-infra-internal task-ledger <task-ref> <intent> [intent flags] [--dry-run]\n\nIntents: finding-upsert, finding-respond, finding-review, decision-next-id, decision-upsert, rework-intent-upsert, stage-status\n`;
|
|
8
8
|
const FLAGS = {
|
|
9
9
|
'--stage': 'stage', '--review-artifact': 'reviewArtifact', '--ordinal': 'ordinal',
|
|
10
10
|
'--severity': 'severity', '--evidence': 'evidence', '--id': 'id', '--round': 'round',
|
|
11
11
|
'--status': 'status', '--artifact': 'artifact', '--needs-implementation': 'needsImplementation',
|
|
12
|
+
'--intent-id': 'intentId', '--finding-id': 'findingId', '--source-artifact': 'sourceArtifact',
|
|
13
|
+
'--source-sha256': 'sourceSha256', '--target': 'target',
|
|
12
14
|
'--override-ticket': 'overrideTicket', '--override-target': 'overrideTarget', '--override-scope': 'overrideScope'
|
|
13
15
|
};
|
|
14
16
|
const NUMERIC = new Set(['ordinal', 'round']);
|
|
@@ -18,7 +20,7 @@ function usageFailure(message) {
|
|
|
18
20
|
process.stderr.write(USAGE);
|
|
19
21
|
process.exitCode = 1;
|
|
20
22
|
}
|
|
21
|
-
function taskLedger(args = []) {
|
|
23
|
+
async function taskLedger(args = []) {
|
|
22
24
|
if (args[0] === '--help' || args[0] === '-h') {
|
|
23
25
|
process.stdout.write(USAGE);
|
|
24
26
|
return;
|
|
@@ -28,7 +30,7 @@ function taskLedger(args = []) {
|
|
|
28
30
|
usageFailure('task ref and intent are required');
|
|
29
31
|
return;
|
|
30
32
|
}
|
|
31
|
-
if (!['finding-upsert', 'finding-respond', 'finding-review', 'decision-next-id', 'decision-upsert', 'stage-status'].includes(kind)) {
|
|
33
|
+
if (!['finding-upsert', 'finding-respond', 'finding-review', 'decision-next-id', 'decision-upsert', 'rework-intent-upsert', 'stage-status'].includes(kind)) {
|
|
32
34
|
usageFailure(`unknown ledger intent '${kind}'`);
|
|
33
35
|
return;
|
|
34
36
|
}
|
|
@@ -72,13 +74,14 @@ function taskLedger(args = []) {
|
|
|
72
74
|
'finding-review': ['id', 'status', 'evidence'],
|
|
73
75
|
'decision-next-id': [],
|
|
74
76
|
'decision-upsert': ['id', 'stage', 'artifact'],
|
|
77
|
+
'rework-intent-upsert': ['intentId', 'findingId', 'sourceArtifact', 'sourceSha256', 'target'],
|
|
75
78
|
'stage-status': ['stage']
|
|
76
79
|
};
|
|
77
80
|
const optional = {
|
|
78
81
|
'finding-review': ['needsImplementation'],
|
|
79
82
|
'decision-upsert': ['needsImplementation']
|
|
80
83
|
};
|
|
81
|
-
const overrideFields = kind === 'stage-status' || kind === 'decision-next-id'
|
|
84
|
+
const overrideFields = kind === 'stage-status' || kind === 'decision-next-id' || kind === 'rework-intent-upsert'
|
|
82
85
|
? []
|
|
83
86
|
: ['overrideTicket', 'overrideTarget', 'overrideScope'];
|
|
84
87
|
const allowed = new Set(['kind', 'taskRef', 'dryRun', ...required[kind], ...(optional[kind] ?? []), ...overrideFields]);
|
|
@@ -139,7 +142,7 @@ function taskLedger(args = []) {
|
|
|
139
142
|
let result;
|
|
140
143
|
let humanOverride = null;
|
|
141
144
|
try {
|
|
142
|
-
result = withTaskExecutionLock(lockResolved.repoRoot, lockResolved.taskId, `task-ledger.${kind}`, () => {
|
|
145
|
+
result = await withTaskExecutionLock(lockResolved.repoRoot, lockResolved.taskId, `task-ledger.${kind}`, async () => {
|
|
143
146
|
let current = applyLedgerIntent(values);
|
|
144
147
|
if (current.status !== 'failed' || !values.overrideTicket)
|
|
145
148
|
return current;
|
|
@@ -147,7 +150,7 @@ function taskLedger(args = []) {
|
|
|
147
150
|
usageFailure('override ticket requires target and scope');
|
|
148
151
|
return current;
|
|
149
152
|
}
|
|
150
|
-
const consumed = consumeHumanOverride({
|
|
153
|
+
const consumed = await consumeHumanOverride({
|
|
151
154
|
taskRef,
|
|
152
155
|
ticketId: String(values.overrideTicket),
|
|
153
156
|
failureId: failureId('ledger-intent', current.error?.code ?? 'TASK_STATE_MISMATCH'),
|
|
@@ -11,7 +11,7 @@ function parseFailure(error) {
|
|
|
11
11
|
const message = error instanceof Error ? error.message : String(error);
|
|
12
12
|
return message.replace(/^TASK_CONTROL_OPERATION_INVALID: /u, '');
|
|
13
13
|
}
|
|
14
|
-
function taskLifecycle(args = []) {
|
|
14
|
+
async function taskLifecycle(args = []) {
|
|
15
15
|
if (args[0] === '--help' || args[0] === '-h') {
|
|
16
16
|
process.stdout.write(USAGE);
|
|
17
17
|
return;
|
|
@@ -49,7 +49,7 @@ function taskLifecycle(args = []) {
|
|
|
49
49
|
}
|
|
50
50
|
repoRoot = resolved.repoRoot;
|
|
51
51
|
}
|
|
52
|
-
const result = dispatchTaskControlOperation(createDirectHostExecutionContext({ repoRoot }), operation);
|
|
52
|
+
const result = await dispatchTaskControlOperation(createDirectHostExecutionContext({ repoRoot }), operation);
|
|
53
53
|
process.stdout.write(`${JSON.stringify(result)}\n`);
|
|
54
54
|
if (result.status === 'failed')
|
|
55
55
|
process.exitCode = 1;
|
|
@@ -28,7 +28,7 @@ function usageFailure(message) {
|
|
|
28
28
|
process.stderr.write(USAGE);
|
|
29
29
|
process.exitCode = 1;
|
|
30
30
|
}
|
|
31
|
-
function taskOverride(args = []) {
|
|
31
|
+
async function taskOverride(args = []) {
|
|
32
32
|
if (args[0] === '--help' || args[0] === '-h') {
|
|
33
33
|
process.stdout.write(USAGE);
|
|
34
34
|
return;
|
|
@@ -79,10 +79,10 @@ function taskOverride(args = []) {
|
|
|
79
79
|
let result;
|
|
80
80
|
try {
|
|
81
81
|
if (operation === 'diagnose') {
|
|
82
|
-
result = diagnoseHumanOverrideForTask(taskRef, values.failureId ? String(values.failureId) : undefined, values.target ? String(values.target) : undefined);
|
|
82
|
+
result = await diagnoseHumanOverrideForTask(taskRef, values.failureId ? String(values.failureId) : undefined, values.target ? String(values.target) : undefined);
|
|
83
83
|
}
|
|
84
84
|
else if (operation === 'issue') {
|
|
85
|
-
result = withTaskExecutionLock(resolved.repoRoot, resolved.taskId, 'task-override.issue', () => issueHumanOverride({
|
|
85
|
+
result = await withTaskExecutionLock(resolved.repoRoot, resolved.taskId, 'task-override.issue', async () => issueHumanOverride({
|
|
86
86
|
taskRef,
|
|
87
87
|
failureId: String(values.failureId),
|
|
88
88
|
target: String(values.target),
|
|
@@ -99,7 +99,7 @@ function taskOverride(args = []) {
|
|
|
99
99
|
}));
|
|
100
100
|
}
|
|
101
101
|
else {
|
|
102
|
-
result = withTaskExecutionLock(resolved.repoRoot, resolved.taskId, 'task-override.consume', () => consumeHumanOverride({
|
|
102
|
+
result = await withTaskExecutionLock(resolved.repoRoot, resolved.taskId, 'task-override.consume', async () => consumeHumanOverride({
|
|
103
103
|
taskRef,
|
|
104
104
|
ticketId: String(values.ticketId),
|
|
105
105
|
failureId: String(values.failureId),
|
|
@@ -13,7 +13,7 @@ function failUsage(message) {
|
|
|
13
13
|
process.stderr.write(USAGE);
|
|
14
14
|
process.exitCode = 2;
|
|
15
15
|
}
|
|
16
|
-
function taskReview(args = []) {
|
|
16
|
+
async function taskReview(args = []) {
|
|
17
17
|
if (args[0] === '--help' || args[0] === '-h') {
|
|
18
18
|
process.stdout.write(USAGE);
|
|
19
19
|
return;
|
|
@@ -86,7 +86,7 @@ function taskReview(args = []) {
|
|
|
86
86
|
let result;
|
|
87
87
|
let humanOverride = null;
|
|
88
88
|
try {
|
|
89
|
-
result = withTaskExecutionLock(resolved.repoRoot, resolved.taskId, 'task-review.finalize-summary', () => {
|
|
89
|
+
result = await withTaskExecutionLock(resolved.repoRoot, resolved.taskId, 'task-review.finalize-summary', async () => {
|
|
90
90
|
let current = finalizeReviewSummary({ taskRef: args[0], stage, artifact, orchestrated, dryRun }, { lockAlreadyHeld: true });
|
|
91
91
|
if (current.status !== 'failed' || !overrideTicket)
|
|
92
92
|
return current;
|
|
@@ -94,7 +94,7 @@ function taskReview(args = []) {
|
|
|
94
94
|
failUsage('override ticket requires target and scope');
|
|
95
95
|
return current;
|
|
96
96
|
}
|
|
97
|
-
const consumed = consumeHumanOverride({
|
|
97
|
+
const consumed = await consumeHumanOverride({
|
|
98
98
|
taskRef: args[0], ticketId: overrideTicket,
|
|
99
99
|
failureId: failureId('review-finalization', current.error?.code ?? 'TASK_STATE_MISMATCH'),
|
|
100
100
|
target: overrideTarget, scope: overrideScope
|
|
@@ -8,7 +8,7 @@ function fail(message) {
|
|
|
8
8
|
process.stderr.write(USAGE);
|
|
9
9
|
process.exitCode = 1;
|
|
10
10
|
}
|
|
11
|
-
function taskVerify(args = []) {
|
|
11
|
+
async function taskVerify(args = []) {
|
|
12
12
|
if (args[0] === '--help' || args[0] === '-h') {
|
|
13
13
|
process.stdout.write(USAGE);
|
|
14
14
|
return;
|
|
@@ -64,8 +64,8 @@ function taskVerify(args = []) {
|
|
|
64
64
|
let result;
|
|
65
65
|
let humanOverride = null;
|
|
66
66
|
try {
|
|
67
|
-
result = withTaskExecutionLock(resolved.repoRoot, resolved.taskId, `task-verify.${event}`, () => {
|
|
68
|
-
let current = verifyTaskEvent({ taskRef, event, ...(artifact ? { artifact } : {}) });
|
|
67
|
+
result = await withTaskExecutionLock(resolved.repoRoot, resolved.taskId, `task-verify.${event}`, async () => {
|
|
68
|
+
let current = await verifyTaskEvent({ taskRef, event, ...(artifact ? { artifact } : {}) });
|
|
69
69
|
if (current.status === 'pass' || !overrideTicket)
|
|
70
70
|
return current;
|
|
71
71
|
if (!overrideTarget || !overrideScope) {
|
|
@@ -80,13 +80,13 @@ function taskVerify(args = []) {
|
|
|
80
80
|
: current.status === 'fail'
|
|
81
81
|
? 'CHECK_FAILED'
|
|
82
82
|
: current.error?.code ?? 'VERIFY_TASK_STATE_MISMATCH';
|
|
83
|
-
const consumed = consumeHumanOverride({
|
|
83
|
+
const consumed = await consumeHumanOverride({
|
|
84
84
|
taskRef, ticketId: overrideTicket,
|
|
85
85
|
failureId: failureId(failureProducer, failureCode),
|
|
86
86
|
target: overrideTarget, scope: overrideScope
|
|
87
87
|
}, {
|
|
88
|
-
effectExecutor: (capability) => {
|
|
89
|
-
const retried = verifyTaskEvent({ taskRef, event, ...(artifact ? { artifact } : {}) }, { manualOverride: capability });
|
|
88
|
+
effectExecutor: async (capability) => {
|
|
89
|
+
const retried = await verifyTaskEvent({ taskRef, event, ...(artifact ? { artifact } : {}) }, { manualOverride: capability });
|
|
90
90
|
current = retried;
|
|
91
91
|
return retried.status !== 'pass'
|
|
92
92
|
? { code: 'OVERRIDE_EFFECT_FAILED', message: `${retried.error?.code ?? 'VERIFY_FAILED'}: ${retried.error?.message ?? 'manual verification effect failed'}` }
|
|
@@ -13,7 +13,7 @@ function usageFailure(message) {
|
|
|
13
13
|
process.stderr.write(USAGE);
|
|
14
14
|
process.exitCode = 1;
|
|
15
15
|
}
|
|
16
|
-
function taskWarning(args = []) {
|
|
16
|
+
async function taskWarning(args = []) {
|
|
17
17
|
if (args[0] === '--help' || args[0] === '-h') {
|
|
18
18
|
process.stdout.write(USAGE);
|
|
19
19
|
return;
|
|
@@ -85,7 +85,7 @@ function taskWarning(args = []) {
|
|
|
85
85
|
let result;
|
|
86
86
|
let humanOverride = null;
|
|
87
87
|
try {
|
|
88
|
-
result = withTaskExecutionLock(resolved.repoRoot, resolved.taskId, `task-warning.${kind}`, () => {
|
|
88
|
+
result = await withTaskExecutionLock(resolved.repoRoot, resolved.taskId, `task-warning.${kind}`, async () => {
|
|
89
89
|
let current = applyWorkflowWarningIntent(values);
|
|
90
90
|
if (current.status !== 'failed' || !values.overrideTicket)
|
|
91
91
|
return current;
|
|
@@ -93,7 +93,7 @@ function taskWarning(args = []) {
|
|
|
93
93
|
usageFailure('override ticket requires target and scope');
|
|
94
94
|
return current;
|
|
95
95
|
}
|
|
96
|
-
const consumed = consumeHumanOverride({
|
|
96
|
+
const consumed = await consumeHumanOverride({
|
|
97
97
|
taskRef, ticketId: String(values.overrideTicket),
|
|
98
98
|
failureId: failureId('workflow-warning', current.error?.code ?? 'TASK_STATE_MISMATCH'),
|
|
99
99
|
target: String(values.overrideTarget), scope: String(values.overrideScope)
|
|
@@ -8,9 +8,7 @@ function getPlatformAdapter(type) {
|
|
|
8
8
|
return type ? adapters.get(type) ?? null : null;
|
|
9
9
|
}
|
|
10
10
|
function registerPlatformCapabilities(type, capabilities) {
|
|
11
|
-
const adapter = adapters.get(type);
|
|
12
|
-
if (!adapter)
|
|
13
|
-
throw new Error(`Platform adapter '${type}' must be registered before its capabilities`);
|
|
11
|
+
const adapter = adapters.get(type) ?? { type };
|
|
14
12
|
adapters.set(type, { ...adapter, ...capabilities });
|
|
15
13
|
}
|
|
16
14
|
function hasPlatformCapability(type, capability) {
|
|
@@ -2,7 +2,9 @@ import fs from "node:fs";
|
|
|
2
2
|
import os from "node:os";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { execFileSync, spawnSync } from "node:child_process";
|
|
5
|
-
import {
|
|
5
|
+
import { resolvePlatformProviderContext } from './context.js';
|
|
6
|
+
import { providerError, providerOperationContext, unsupportedProviderOperation } from './provider-bridge.js';
|
|
7
|
+
import { isResourceIdentity } from './resource-identity.js';
|
|
6
8
|
import { resolveReviewedHeadRelation } from "./merged-pr-equivalence.js";
|
|
7
9
|
const SHA_PATTERN = /^[0-9a-f]{40}$/i;
|
|
8
10
|
const REVIEWED_HEAD_REF = "refs/agent-infra/reviewed-head";
|
|
@@ -37,18 +39,36 @@ function validMergeIdentity(lastReviewedCommit, pullRequest) {
|
|
|
37
39
|
}
|
|
38
40
|
return null;
|
|
39
41
|
}
|
|
40
|
-
function resolveMaterializedReviewedHeadRelation(input) {
|
|
42
|
+
async function resolveMaterializedReviewedHeadRelation(input) {
|
|
41
43
|
const identityFailure = validMergeIdentity(input.lastReviewedCommit, input.pullRequest);
|
|
42
44
|
if (identityFailure)
|
|
43
45
|
return identityFailure;
|
|
44
|
-
const
|
|
46
|
+
const loaded = await resolvePlatformProviderContext({
|
|
45
47
|
cwd: input.cwd,
|
|
46
|
-
|
|
47
|
-
number: input.pullRequest.number,
|
|
48
|
-
pullRequest: input.pullRequest
|
|
48
|
+
platformType: input.platformType || undefined
|
|
49
49
|
});
|
|
50
|
+
if (!loaded.ok) {
|
|
51
|
+
return blocked(loaded.context.error?.code || 'PR_MERGE_EVIDENCE_SOURCE_UNAVAILABLE', loaded.context.error?.message || 'Unable to resolve the configured platform provider');
|
|
52
|
+
}
|
|
53
|
+
const target = isResourceIdentity(input.pullRequest.identity)
|
|
54
|
+
? input.pullRequest.identity
|
|
55
|
+
: { kind: 'number', value: input.pullRequest.number };
|
|
56
|
+
const operation = loaded.value.provider.changeRequests?.resolveGitEvidence
|
|
57
|
+
? await loaded.value.provider.changeRequests.resolveGitEvidence({
|
|
58
|
+
context: providerOperationContext(loaded.value),
|
|
59
|
+
target,
|
|
60
|
+
expected: {
|
|
61
|
+
baseSha: input.pullRequest.base.sha,
|
|
62
|
+
headSha: input.pullRequest.head.sha,
|
|
63
|
+
targetBranch: input.pullRequest.base.ref
|
|
64
|
+
}
|
|
65
|
+
})
|
|
66
|
+
: unsupportedProviderOperation(loaded.value.provider, 'changeRequests.resolveGitEvidence');
|
|
67
|
+
const source = operation.ok
|
|
68
|
+
? operation
|
|
69
|
+
: { ok: false, error: providerError(operation.error, 'PR_MERGE_EVIDENCE_SOURCE_UNAVAILABLE') };
|
|
50
70
|
if (!source.ok || !source.value) {
|
|
51
|
-
return blocked(source.error?.code || "PR_MERGE_EVIDENCE_SOURCE_UNAVAILABLE", source.error?.message || "Unable to resolve authoritative PR Git evidence");
|
|
71
|
+
return blocked(('error' in source && source.error?.code) || "PR_MERGE_EVIDENCE_SOURCE_UNAVAILABLE", ('error' in source && source.error?.message) || "Unable to resolve authoritative PR Git evidence");
|
|
52
72
|
}
|
|
53
73
|
if (!source.value.remoteUrl.trim() ||
|
|
54
74
|
source.value.remoteUrl.trimStart().startsWith("-") ||
|
|
@@ -9,6 +9,7 @@ import { applyWorkflowWarningIntent } from '../task/workflow-warning-intents.js'
|
|
|
9
9
|
import { captureTaskWriteMetadata } from '../task/write.js';
|
|
10
10
|
import { syncPlatformComment } from './issue-comments.js';
|
|
11
11
|
import { platformResult } from './types.js';
|
|
12
|
+
import { taskIssueIdentity } from './task-identities.js';
|
|
12
13
|
function result(base, artifacts, warnings) {
|
|
13
14
|
return { ...base, artifacts, warnings };
|
|
14
15
|
}
|
|
@@ -29,7 +30,7 @@ function excludedPrReview(taskDir, message) {
|
|
|
29
30
|
return null;
|
|
30
31
|
}
|
|
31
32
|
}
|
|
32
|
-
function backfillCompletionComments(taskRef, options) {
|
|
33
|
+
async function backfillCompletionComments(taskRef, options) {
|
|
33
34
|
const resolved = resolveTaskRef(taskRef, options.cwd ? { repoRoot: options.cwd } : {});
|
|
34
35
|
if (!resolved.ok)
|
|
35
36
|
return result(platformResult('failed', {
|
|
@@ -45,16 +46,16 @@ function backfillCompletionComments(taskRef, options) {
|
|
|
45
46
|
}
|
|
46
47
|
}), [], []);
|
|
47
48
|
const initialContent = fs.readFileSync(resolved.taskMdPath, 'utf8');
|
|
48
|
-
const
|
|
49
|
-
if (!
|
|
49
|
+
const issueIdentity = taskIssueIdentity(parseTaskFrontmatter(initialContent));
|
|
50
|
+
if (!issueIdentity)
|
|
50
51
|
return result(platformResult('no-op', {
|
|
51
|
-
error: { code: 'ISSUE_NOT_LINKED', message: 'Task has no valid
|
|
52
|
+
error: { code: 'ISSUE_NOT_LINKED', message: 'Task has no valid platform issue identity', retryable: false }
|
|
52
53
|
}), [], []);
|
|
53
54
|
const artifacts = [];
|
|
54
55
|
const operations = [];
|
|
55
56
|
let latest = platformResult('no-op', { error: null });
|
|
56
57
|
for (const artifact of inventory.artifacts) {
|
|
57
|
-
latest = syncPlatformComment(resolved.taskId, {
|
|
58
|
+
latest = await syncPlatformComment(resolved.taskId, {
|
|
58
59
|
kind: 'artifact',
|
|
59
60
|
artifact: artifact.name,
|
|
60
61
|
agent: options.agent,
|