@fitlab-ai/agent-infra 0.9.12 → 0.9.14
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 +11 -11
- package/README.zh-CN.md +11 -11
- package/bin/cli.ts +26 -9
- package/dist/bin/cli.js +173 -157
- package/dist/bin/internal-cli.js +66 -40
- package/dist/lib/agent-client.js +5 -0
- package/dist/lib/agent-clients/next-steps.js +6 -1
- package/dist/lib/decide.js +3 -3
- package/dist/lib/internal/agent-client.js +5 -2
- package/dist/lib/internal/cli-route-inventory.js +152 -0
- package/dist/lib/internal/codex-lifecycle.js +9 -6
- package/dist/lib/internal/codex-sandbox-controller.js +8 -2
- package/dist/lib/internal/git-workflow.js +10 -6
- package/dist/lib/internal/platform-checks.js +19 -7
- package/dist/lib/internal/platform-comment.js +25 -13
- package/dist/lib/internal/platform-context.js +6 -3
- package/dist/lib/internal/platform-issue.js +20 -13
- package/dist/lib/internal/platform-metadata.js +88 -0
- package/dist/lib/internal/platform-pr-review.js +26 -13
- package/dist/lib/internal/platform-pr.js +84 -31
- package/dist/lib/internal/platform-release-notes.js +9 -6
- package/dist/lib/internal/platform-security.js +93 -0
- package/dist/lib/internal/pr-review-grade.js +25 -12
- package/dist/lib/internal/release-workflow.js +23 -9
- package/dist/lib/internal/sandbox-control.js +50 -7
- package/dist/lib/internal/task-activity.js +16 -7
- package/dist/lib/internal/task-artifact.js +235 -24
- package/dist/lib/internal/task-context.js +4 -1
- package/dist/lib/internal/task-create.js +50 -17
- package/dist/lib/internal/task-delivery.js +4 -1
- package/dist/lib/internal/task-event.js +10 -4
- package/dist/lib/internal/task-finalization.js +6 -3
- package/dist/lib/internal/task-invalidation.js +63 -0
- package/dist/lib/internal/task-ledger.js +20 -6
- package/dist/lib/internal/task-lifecycle.js +6 -3
- package/dist/lib/internal/task-operation-registry.js +421 -0
- package/dist/lib/internal/task-orchestration.js +12 -0
- package/dist/lib/internal/task-override.js +14 -7
- package/dist/lib/internal/task-qualification.js +90 -0
- package/dist/lib/internal/task-review.js +7 -4
- 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 +7 -2
- package/dist/lib/internal/task-verify.js +11 -7
- package/dist/lib/internal/task-warning.js +11 -4
- package/dist/lib/platform/adapters.js +1 -3
- package/dist/lib/platform/change-request-git-evidence.js +27 -7
- package/dist/lib/platform/comment-safety.js +226 -0
- package/dist/lib/platform/completion-backfill.js +6 -5
- package/dist/lib/platform/context.js +70 -130
- package/dist/lib/platform/github-client.js +1 -1
- package/dist/lib/platform/github-provider.js +1130 -0
- package/dist/lib/platform/in-label-sync.js +143 -0
- package/dist/lib/platform/issue-comments.js +237 -72
- 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 +545 -0
- package/dist/lib/platform/pr-checks.js +119 -104
- package/dist/lib/platform/pr-review.js +88 -72
- package/dist/lib/platform/pr-summary.js +541 -50
- package/dist/lib/platform/provider-bridge.js +45 -0
- package/dist/lib/platform/provider-contract.d.ts +553 -0
- package/dist/lib/platform/provider-contract.js +99 -0
- package/dist/lib/platform/provider-loader.js +251 -0
- package/dist/lib/platform/provider-validation.js +577 -0
- package/dist/lib/platform/pull-request-metadata.js +8 -6
- package/dist/lib/platform/pull-requests.js +734 -543
- package/dist/lib/platform/release-notes.js +78 -55
- package/dist/lib/platform/releases.js +79 -50
- package/dist/lib/platform/repository-metadata.js +377 -0
- package/dist/lib/platform/resource-identity.d.ts +26 -0
- package/dist/lib/platform/resource-identity.js +92 -0
- package/dist/lib/platform/security-alerts.js +155 -0
- package/dist/lib/platform/task-identities.js +31 -0
- package/dist/lib/platform/verification-required.js +11 -12
- package/dist/lib/platform/verification-sync.js +129 -248
- package/dist/lib/pr-review/evidence-grading.js +19 -6
- package/dist/lib/process-data/index.js +7 -0
- package/dist/lib/run/index.js +68 -23
- package/dist/lib/sandbox/commands/control-status.js +22 -0
- package/dist/lib/sandbox/commands/create.js +32 -6
- package/dist/lib/sandbox/commands/ls.js +5 -0
- package/dist/lib/sandbox/commands/rm.js +827 -120
- package/dist/lib/sandbox/commands/show.js +16 -0
- package/dist/lib/sandbox/control/client.js +174 -19
- 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 +151 -16
- package/dist/lib/sandbox/control/lifecycle.js +621 -127
- package/dist/lib/sandbox/control/native-file-lock.js +177 -0
- package/dist/lib/sandbox/control/protocol.js +77 -0
- package/dist/lib/sandbox/control/server.js +677 -34
- package/dist/lib/sandbox/control/state.js +209 -4
- package/dist/lib/sandbox/control/task-view.js +183 -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 +5 -0
- package/dist/lib/sandbox/recovery.js +21 -1
- package/dist/lib/sandbox/workspace-view.js +2 -1
- package/dist/lib/sandbox/worktree-safety.js +4 -1
- package/dist/lib/server/index.js +8 -0
- package/dist/lib/server/protocol.js +38 -1
- package/dist/lib/task/activity-log.js +8 -1
- package/dist/lib/task/artifact-lifecycle.js +75 -18
- package/dist/lib/task/artifact-operations.js +520 -0
- package/dist/lib/task/artifact-repair-intent.js +59 -0
- package/dist/lib/task/artifact-schema.js +135 -0
- package/dist/lib/task/capabilities.js +310 -0
- package/dist/lib/task/commands/status.js +32 -0
- package/dist/lib/task/commit-operation.js +12 -1
- package/dist/lib/task/control-authority.js +12 -5
- package/dist/lib/task/create-service.js +111 -12
- package/dist/lib/task/create.js +25 -0
- package/dist/lib/task/current-contract.js +5 -1
- package/dist/lib/task/decision-details.js +1 -1
- package/dist/lib/task/events.js +416 -17
- package/dist/lib/task/finalization.js +37 -13
- package/dist/lib/task/human-override.js +58 -36
- package/dist/lib/task/index.js +11 -3
- 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/local-artifact-finalization.js +299 -0
- package/dist/lib/task/orchestration.js +240 -144
- package/dist/lib/task/pr-delivery-fact.js +102 -101
- package/dist/lib/task/qualification-audit.js +490 -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 +22 -23
- package/dist/lib/task/review-finalization.js +121 -4
- package/dist/lib/task/review-fingerprint.js +24 -2
- package/dist/lib/task/rework-intent.js +138 -0
- package/dist/lib/task/sections.js +6 -4
- package/dist/lib/task/skill-scope.js +23 -0
- package/dist/lib/task/task-execution-lock.js +27 -17
- package/dist/lib/task/verification-config.js +11 -0
- package/dist/lib/task/verification-engine.js +93 -16
- 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/version.js +11 -1
- package/dist/lifecycle-build-manifest.json +3 -3
- package/lib/agent-client.ts +9 -0
- package/lib/agent-clients/next-steps.ts +6 -1
- package/lib/decide.ts +3 -3
- package/lib/init.ts +1 -1
- package/lib/internal/agent-client.ts +4 -2
- package/lib/internal/cli-route-inventory.ts +140 -0
- package/lib/internal/codex-lifecycle.ts +8 -6
- package/lib/internal/codex-sandbox-controller.ts +7 -2
- package/lib/internal/git-workflow.ts +9 -6
- package/lib/internal/platform-checks.ts +14 -6
- package/lib/internal/platform-comment.ts +20 -12
- package/lib/internal/platform-context.ts +5 -3
- package/lib/internal/platform-issue.ts +17 -11
- package/lib/internal/platform-metadata.ts +70 -0
- package/lib/internal/platform-pr-review.ts +23 -12
- package/lib/internal/platform-pr.ts +65 -27
- package/lib/internal/platform-release-notes.ts +8 -6
- package/lib/internal/platform-security.ts +83 -0
- package/lib/internal/pr-review-grade.ts +20 -11
- package/lib/internal/release-workflow.ts +21 -9
- package/lib/internal/sandbox-control.ts +44 -6
- package/lib/internal/task-activity.ts +15 -7
- package/lib/internal/task-artifact.ts +204 -22
- package/lib/internal/task-context.ts +3 -1
- package/lib/internal/task-create.ts +78 -17
- package/lib/internal/task-delivery.ts +3 -1
- package/lib/internal/task-event.ts +9 -4
- package/lib/internal/task-finalization.ts +6 -4
- package/lib/internal/task-invalidation.ts +41 -0
- package/lib/internal/task-ledger.ts +21 -8
- package/lib/internal/task-lifecycle.ts +5 -3
- package/lib/internal/task-operation-registry.ts +482 -0
- package/lib/internal/task-orchestration.ts +12 -0
- package/lib/internal/task-override.ts +15 -9
- package/lib/internal/task-qualification.ts +61 -0
- package/lib/internal/task-review.ts +6 -4
- package/lib/internal/task-short-id.ts +10 -1
- package/lib/internal/task-snapshot.ts +3 -1
- package/lib/internal/task-validate.ts +6 -2
- package/lib/internal/task-verify.ts +10 -7
- package/lib/internal/task-warning.ts +10 -4
- package/lib/platform/adapters.ts +3 -2
- package/lib/platform/change-request-git-evidence.ts +36 -9
- package/lib/platform/comment-safety.ts +250 -0
- package/lib/platform/completion-backfill.ts +9 -8
- package/lib/platform/context.ts +97 -134
- package/lib/platform/github-client.ts +2 -2
- package/lib/platform/github-provider.ts +1132 -0
- package/lib/platform/in-label-sync.ts +208 -0
- package/lib/platform/issue-comments.ts +255 -80
- 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 +639 -0
- package/lib/platform/pr-checks.ts +126 -106
- package/lib/platform/pr-review.ts +88 -85
- package/lib/platform/pr-summary.ts +581 -53
- package/lib/platform/provider-bridge.ts +82 -0
- package/lib/platform/provider-contract.ts +611 -0
- package/lib/platform/provider-loader.ts +307 -0
- package/lib/platform/provider-validation.ts +611 -0
- package/lib/platform/pull-request-metadata.ts +10 -7
- package/lib/platform/pull-requests.ts +781 -550
- package/lib/platform/release-notes.ts +76 -59
- package/lib/platform/releases.ts +77 -43
- package/lib/platform/repository-metadata.ts +453 -0
- package/lib/platform/resource-identity.ts +121 -0
- package/lib/platform/security-alerts.ts +191 -0
- package/lib/platform/task-identities.ts +40 -0
- package/lib/platform/types.ts +4 -2
- package/lib/platform/verification-required.ts +11 -13
- package/lib/platform/verification-sync.ts +128 -304
- package/lib/pr-review/evidence-grading.ts +25 -8
- package/lib/process-data/index.ts +7 -0
- package/lib/run/index.ts +62 -22
- package/lib/sandbox/commands/control-status.ts +26 -0
- package/lib/sandbox/commands/create.ts +46 -6
- package/lib/sandbox/commands/ls.ts +7 -0
- package/lib/sandbox/commands/rm.ts +1000 -87
- package/lib/sandbox/commands/show.ts +16 -0
- package/lib/sandbox/control/client.ts +203 -19
- package/lib/sandbox/control/completed-reentry.ts +98 -0
- package/lib/sandbox/control/container-identity.ts +27 -43
- package/lib/sandbox/control/executor.ts +180 -15
- package/lib/sandbox/control/lifecycle.ts +629 -17
- package/lib/sandbox/control/native-file-lock.ts +209 -0
- package/lib/sandbox/control/protocol.ts +118 -2
- package/lib/sandbox/control/server.ts +724 -34
- package/lib/sandbox/control/state.ts +257 -4
- package/lib/sandbox/control/task-view.ts +240 -0
- package/lib/sandbox/engines/authority.ts +365 -0
- package/lib/sandbox/engines/docker-exact-discovery.ts +132 -0
- package/lib/sandbox/index.ts +7 -0
- package/lib/sandbox/recovery.ts +21 -1
- package/lib/sandbox/workspace-view.ts +9 -3
- package/lib/sandbox/worktree-safety.ts +4 -1
- package/lib/server/index.ts +10 -0
- package/lib/server/protocol.ts +36 -1
- package/lib/task/activity-log.ts +8 -0
- package/lib/task/artifact-lifecycle.ts +70 -22
- package/lib/task/artifact-operations.ts +626 -0
- package/lib/task/artifact-repair-intent.ts +71 -0
- package/lib/task/artifact-schema.ts +192 -0
- package/lib/task/capabilities.ts +331 -0
- package/lib/task/commands/status.ts +38 -0
- package/lib/task/commit-operation.ts +12 -1
- package/lib/task/control-authority.ts +22 -9
- package/lib/task/create-service.ts +139 -14
- package/lib/task/create.ts +27 -0
- package/lib/task/current-contract.ts +6 -1
- package/lib/task/decision-details.ts +6 -2
- package/lib/task/events.ts +392 -16
- package/lib/task/finalization.ts +50 -14
- package/lib/task/human-override.ts +70 -46
- package/lib/task/index.ts +16 -3
- 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/local-artifact-finalization.ts +432 -0
- package/lib/task/orchestration.ts +223 -133
- package/lib/task/pr-delivery-fact.ts +131 -148
- package/lib/task/qualification-audit.ts +599 -0
- package/lib/task/qualification-confirmation.ts +117 -0
- package/lib/task/qualification-intents.ts +150 -0
- package/lib/task/review-artifacts.ts +21 -22
- package/lib/task/review-finalization.ts +133 -4
- package/lib/task/review-fingerprint.ts +23 -2
- package/lib/task/rework-intent.ts +165 -0
- package/lib/task/sections.ts +6 -4
- package/lib/task/skill-scope.ts +24 -0
- package/lib/task/task-execution-lock.ts +23 -14
- package/lib/task/verification-config.ts +12 -0
- package/lib/task/verification-engine.ts +103 -17
- 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 +1 -1
- package/lib/version.ts +15 -1
- package/package.json +12 -1
- package/templates/.agents/rules/README.en.md +3 -1
- package/templates/.agents/rules/README.zh-CN.md +3 -1
- 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/issue-pr-commands.en.md +1 -1
- package/templates/.agents/rules/issue-pr-commands.zh-CN.md +1 -1
- package/templates/.agents/rules/issue-sync.en.md +2 -0
- package/templates/.agents/rules/issue-sync.zh-CN.md +2 -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 +13 -2
- package/templates/.agents/rules/local-artifact-repair.zh-CN.md +13 -2
- package/templates/.agents/rules/pr-sync.en.md +10 -4
- package/templates/.agents/rules/pr-sync.zh-CN.md +17 -4
- 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/task-short-id.en.md +1 -4
- package/templates/.agents/rules/task-short-id.zh-CN.md +1 -3
- package/templates/.agents/skills/analyze-task/SKILL.en.md +28 -5
- package/templates/.agents/skills/analyze-task/SKILL.zh-CN.md +29 -5
- 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/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 +41 -9
- package/templates/.agents/skills/code-task/SKILL.zh-CN.md +43 -11
- package/templates/.agents/skills/code-task/config/verify.en.json +6 -14
- package/templates/.agents/skills/code-task/config/verify.zh-CN.json +6 -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/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 +3 -3
- package/templates/.agents/skills/commit/reference/pr-summary-sync.zh-CN.md +3 -3
- package/templates/.agents/skills/complete-manual-validation/SKILL.en.md +10 -4
- package/templates/.agents/skills/complete-manual-validation/SKILL.zh-CN.md +10 -4
- package/templates/.agents/skills/complete-manual-validation/reference/report-template.en.md +2 -0
- package/templates/.agents/skills/complete-manual-validation/reference/report-template.zh-CN.md +2 -0
- package/templates/.agents/skills/complete-manual-validation/reference/summary-update.en.md +4 -3
- package/templates/.agents/skills/complete-manual-validation/reference/summary-update.zh-CN.md +4 -3
- package/templates/.agents/skills/complete-task/SKILL.en.md +26 -21
- package/templates/.agents/skills/complete-task/SKILL.zh-CN.md +25 -21
- package/templates/.agents/skills/create-pr/SKILL.en.md +7 -6
- package/templates/.agents/skills/create-pr/SKILL.zh-CN.md +7 -7
- 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 +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 +27 -4
- package/templates/.agents/skills/plan-task/SKILL.zh-CN.md +26 -4
- 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/review-analysis/SKILL.en.md +17 -4
- package/templates/.agents/skills/review-analysis/SKILL.zh-CN.md +17 -4
- 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 +18 -5
- package/templates/.agents/skills/review-code/SKILL.zh-CN.md +18 -5
- 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 +17 -4
- package/templates/.agents/skills/review-plan/SKILL.zh-CN.md +17 -4
- 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 +9 -3
- package/templates/.agents/skills/run-manual-validation/SKILL.zh-CN.md +9 -3
- package/templates/.agents/skills/run-manual-validation/reference/report-template.en.md +3 -1
- package/templates/.agents/skills/run-manual-validation/reference/report-template.zh-CN.md +3 -1
- package/templates/.agents/skills/test/SKILL.en.md +13 -2
- package/templates/.agents/skills/test/SKILL.zh-CN.md +13 -2
- package/templates/.agents/skills/update-agent-infra/scripts/sync-templates.js +14 -0
- package/templates/.agents/skills/watch-pr/SKILL.en.md +2 -2
- package/templates/.agents/skills/watch-pr/SKILL.zh-CN.md +2 -2
- 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 +24 -1
- package/templates/.agents/templates/task.zh-CN.md +24 -1
- package/templates/.github/workflows/pr-label.yml +7 -26
- 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,5 +1,6 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import { fetchPlatformCheckLogs, inspectPullRequestReadiness, resolvePlatformCheckRun, watchPullRequestReadiness } from '../platform/pr-checks.js';
|
|
3
|
+
import { ensureInternalHandlerRoute, internalHandlerRoute } from './cli-route-inventory.js';
|
|
3
4
|
const USAGE = `Usage: agent-infra-internal platform-checks inspect <task-ref> [--cwd <path>]
|
|
4
5
|
agent-infra-internal platform-checks watch <task-ref> --interval-seconds <N> --deadline-seconds <N> [--cwd <path>]
|
|
5
6
|
agent-infra-internal platform-checks resolve-run <task-ref> --check-name <name> [--details-url <url>] [--cwd <path>]
|
|
@@ -43,12 +44,19 @@ function positive(value) {
|
|
|
43
44
|
return Number.isFinite(number) && number > 0 ? number : null;
|
|
44
45
|
}
|
|
45
46
|
async function platformChecks(args = []) {
|
|
47
|
+
if (!ensureInternalHandlerRoute('platform-checks', args))
|
|
48
|
+
return;
|
|
46
49
|
if (args[0] === '--help' || args[0] === '-h') {
|
|
47
50
|
process.stdout.write(USAGE);
|
|
48
51
|
return;
|
|
49
52
|
}
|
|
50
53
|
const operation = args[0];
|
|
51
|
-
if (!operation || ![
|
|
54
|
+
if (!operation || ![
|
|
55
|
+
internalHandlerRoute('platform-checks', 'inspect', operation),
|
|
56
|
+
internalHandlerRoute('platform-checks', 'watch', operation),
|
|
57
|
+
internalHandlerRoute('platform-checks', 'resolve-run', operation),
|
|
58
|
+
internalHandlerRoute('platform-checks', 'logs', operation)
|
|
59
|
+
].some(Boolean)) {
|
|
52
60
|
fail('a valid operation is required');
|
|
53
61
|
return;
|
|
54
62
|
}
|
|
@@ -75,26 +83,30 @@ async function platformChecks(args = []) {
|
|
|
75
83
|
fail(`${operation} does not accept --${unexpected}`);
|
|
76
84
|
return;
|
|
77
85
|
}
|
|
78
|
-
if (
|
|
79
|
-
finish(inspectPullRequestReadiness(taskRef, { cwd }));
|
|
86
|
+
if (internalHandlerRoute('platform-checks', 'inspect', operation)) {
|
|
87
|
+
finish(await inspectPullRequestReadiness(taskRef, { cwd }));
|
|
80
88
|
return;
|
|
81
89
|
}
|
|
82
|
-
if (
|
|
90
|
+
if (internalHandlerRoute('platform-checks', 'resolve-run', operation)) {
|
|
83
91
|
if (!values.checkName) {
|
|
84
92
|
fail('resolve-run requires --check-name');
|
|
85
93
|
return;
|
|
86
94
|
}
|
|
87
|
-
finish(resolvePlatformCheckRun(taskRef, { cwd, checkName: values.checkName, detailsUrl: values.detailsUrl }));
|
|
95
|
+
finish(await resolvePlatformCheckRun(taskRef, { cwd, checkName: values.checkName, detailsUrl: values.detailsUrl }));
|
|
88
96
|
return;
|
|
89
97
|
}
|
|
90
|
-
if (
|
|
98
|
+
if (internalHandlerRoute('platform-checks', 'logs', operation)) {
|
|
91
99
|
const run = positive(values.run);
|
|
92
100
|
const job = values.job === undefined ? undefined : positive(values.job);
|
|
93
101
|
if (!run || values.job !== undefined && !job) {
|
|
94
102
|
fail('logs requires a positive --run and optional positive --job');
|
|
95
103
|
return;
|
|
96
104
|
}
|
|
97
|
-
finish(fetchPlatformCheckLogs(taskRef, { cwd, run, job: job || undefined }));
|
|
105
|
+
finish(await fetchPlatformCheckLogs(taskRef, { cwd, run, job: job || undefined }));
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (!internalHandlerRoute('platform-checks', 'watch', operation)) {
|
|
109
|
+
fail('operation is not registered');
|
|
98
110
|
return;
|
|
99
111
|
}
|
|
100
112
|
const intervalSeconds = positive(values.intervalSeconds);
|
|
@@ -3,7 +3,8 @@ import path from 'node:path';
|
|
|
3
3
|
import { normalizeAgentToken, AGENT_USAGE_HINT } from '../agent-clients/tokens.js';
|
|
4
4
|
import { checkPlatformCommentOwner, listPlatformComments, syncPlatformComment } from '../platform/issue-comments.js';
|
|
5
5
|
import { backfillCompletionComments } from '../platform/completion-backfill.js';
|
|
6
|
-
|
|
6
|
+
import { ensureInternalHandlerRoute, internalHandlerRoute } from './cli-route-inventory.js';
|
|
7
|
+
const USAGE = `Usage: agent-infra-internal platform-comment list --issue <token> [--cwd <path>]
|
|
7
8
|
agent-infra-internal platform-comment owner <task-ref> [--cwd <path>]
|
|
8
9
|
agent-infra-internal platform-comment backfill <task-ref> --agent <agent> [--cwd <path>]
|
|
9
10
|
agent-infra-internal platform-comment sync <task-ref> --kind <kind> --agent <agent> [--artifact <file>] [--body-file <path|->] [--status-label <label>] [--backfill] [--cwd <path>]
|
|
@@ -47,13 +48,20 @@ function readBodyFile(value, cwd) {
|
|
|
47
48
|
return fs.readFileSync(0, 'utf8');
|
|
48
49
|
return fs.readFileSync(path.resolve(cwd, value), 'utf8');
|
|
49
50
|
}
|
|
50
|
-
function platformComment(args = []) {
|
|
51
|
+
async function platformComment(args = []) {
|
|
52
|
+
if (!ensureInternalHandlerRoute('platform-comment', args))
|
|
53
|
+
return;
|
|
51
54
|
if (args[0] === '--help' || args[0] === '-h') {
|
|
52
55
|
process.stdout.write(USAGE);
|
|
53
56
|
return;
|
|
54
57
|
}
|
|
55
58
|
const operation = args[0];
|
|
56
|
-
if (!operation || ![
|
|
59
|
+
if (!operation || ![
|
|
60
|
+
internalHandlerRoute('platform-comment', 'list', operation),
|
|
61
|
+
internalHandlerRoute('platform-comment', 'owner', operation),
|
|
62
|
+
internalHandlerRoute('platform-comment', 'backfill', operation),
|
|
63
|
+
internalHandlerRoute('platform-comment', 'sync', operation)
|
|
64
|
+
].some(Boolean)) {
|
|
57
65
|
fail('a valid operation is required');
|
|
58
66
|
return;
|
|
59
67
|
}
|
|
@@ -69,10 +77,10 @@ function platformComment(args = []) {
|
|
|
69
77
|
return;
|
|
70
78
|
}
|
|
71
79
|
const cwd = path.resolve(typeof parsed.values.cwd === 'string' ? parsed.values.cwd : process.cwd());
|
|
72
|
-
if (
|
|
73
|
-
const issue =
|
|
74
|
-
if (
|
|
75
|
-
fail('list requires
|
|
80
|
+
if (internalHandlerRoute('platform-comment', 'list', operation)) {
|
|
81
|
+
const issue = parsed.values.issue;
|
|
82
|
+
if (typeof issue !== 'string' || !issue) {
|
|
83
|
+
fail('list requires --issue <token>');
|
|
76
84
|
return;
|
|
77
85
|
}
|
|
78
86
|
const unexpected = Object.keys(parsed.values).find((key) => !['issue', 'cwd'].includes(key));
|
|
@@ -80,19 +88,19 @@ function platformComment(args = []) {
|
|
|
80
88
|
fail(`list does not accept '--${unexpected}'`);
|
|
81
89
|
return;
|
|
82
90
|
}
|
|
83
|
-
finish(listPlatformComments(issue, cwd));
|
|
91
|
+
finish(await listPlatformComments(issue, cwd));
|
|
84
92
|
return;
|
|
85
93
|
}
|
|
86
|
-
if (
|
|
94
|
+
if (internalHandlerRoute('platform-comment', 'owner', operation)) {
|
|
87
95
|
const unexpected = Object.keys(parsed.values).find((key) => key !== 'cwd');
|
|
88
96
|
if (unexpected) {
|
|
89
97
|
fail(`owner does not accept '--${unexpected}'`);
|
|
90
98
|
return;
|
|
91
99
|
}
|
|
92
|
-
finish(checkPlatformCommentOwner(taskRef, { cwd }));
|
|
100
|
+
finish(await checkPlatformCommentOwner(taskRef, { cwd }));
|
|
93
101
|
return;
|
|
94
102
|
}
|
|
95
|
-
if (
|
|
103
|
+
if (internalHandlerRoute('platform-comment', 'backfill', operation)) {
|
|
96
104
|
const unexpected = Object.keys(parsed.values).find((key) => !['cwd', 'agent'].includes(key));
|
|
97
105
|
if (unexpected) {
|
|
98
106
|
fail(`backfill does not accept '--${unexpected}'`);
|
|
@@ -108,7 +116,11 @@ function platformComment(args = []) {
|
|
|
108
116
|
fail(`invalid --agent '${agent}': ${AGENT_USAGE_HINT}`);
|
|
109
117
|
return;
|
|
110
118
|
}
|
|
111
|
-
finish(backfillCompletionComments(taskRef, { cwd, agent: normalizedAgent }));
|
|
119
|
+
finish(await backfillCompletionComments(taskRef, { cwd, agent: normalizedAgent }));
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
if (!internalHandlerRoute('platform-comment', 'sync', operation)) {
|
|
123
|
+
fail('operation is not registered');
|
|
112
124
|
return;
|
|
113
125
|
}
|
|
114
126
|
const kind = parsed.values.kind;
|
|
@@ -143,7 +155,7 @@ function platformComment(args = []) {
|
|
|
143
155
|
fail(`unable to read body file: ${error instanceof Error ? error.message : String(error)}`);
|
|
144
156
|
return;
|
|
145
157
|
}
|
|
146
|
-
finish(syncPlatformComment(taskRef, {
|
|
158
|
+
finish(await syncPlatformComment(taskRef, {
|
|
147
159
|
kind: kind,
|
|
148
160
|
agent: normalizedAgent,
|
|
149
161
|
artifact: typeof parsed.values.artifact === 'string' ? parsed.values.artifact : undefined,
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import { resolvePlatformContext } from '../platform/context.js';
|
|
3
|
+
import { ensureInternalHandlerRoute, internalHandlerRoute } from './cli-route-inventory.js';
|
|
3
4
|
const USAGE = 'Usage: agent-infra-internal platform-context resolve [--cwd <path>]\n';
|
|
4
5
|
function fail(message) {
|
|
5
6
|
process.stdout.write(`${JSON.stringify({ status: 'failed', changed: false, error: { code: 'PLATFORM_PAYLOAD_INVALID', message } })}\n`);
|
|
6
7
|
process.stderr.write(USAGE);
|
|
7
8
|
process.exitCode = 1;
|
|
8
9
|
}
|
|
9
|
-
function platformContext(args = []) {
|
|
10
|
+
async function platformContext(args = []) {
|
|
11
|
+
if (!ensureInternalHandlerRoute('platform-context', args))
|
|
12
|
+
return;
|
|
10
13
|
if (args[0] === '--help' || args[0] === '-h') {
|
|
11
14
|
process.stdout.write(USAGE);
|
|
12
15
|
return;
|
|
13
16
|
}
|
|
14
|
-
if (args[0]
|
|
17
|
+
if (!internalHandlerRoute('platform-context', 'resolve', args[0] ?? '')) {
|
|
15
18
|
fail("operation must be 'resolve'");
|
|
16
19
|
return;
|
|
17
20
|
}
|
|
@@ -35,7 +38,7 @@ function platformContext(args = []) {
|
|
|
35
38
|
seen.add(flag);
|
|
36
39
|
cwd = path.resolve(value);
|
|
37
40
|
}
|
|
38
|
-
const result = resolvePlatformContext({ cwd });
|
|
41
|
+
const result = await resolvePlatformContext({ cwd });
|
|
39
42
|
process.stdout.write(`${JSON.stringify(result)}\n`);
|
|
40
43
|
if (result.status === 'failed')
|
|
41
44
|
process.exitCode = 1;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import { normalizeAgentToken, AGENT_USAGE_HINT } from '../agent-clients/tokens.js';
|
|
3
3
|
import { bindPlatformIssue, createPlatformIssue, inspectPlatformIssue, syncPlatformIssue } from '../platform/issues.js';
|
|
4
|
+
import { ensureInternalHandlerRoute, internalHandlerRoute } from './cli-route-inventory.js';
|
|
4
5
|
const USAGE = `Usage: agent-infra-internal platform-issue inspect <task-ref> [--cwd <path>]
|
|
5
6
|
agent-infra-internal platform-issue create <task-ref> --agent <agent> [--dry-run] [--cwd <path>]
|
|
6
|
-
agent-infra-internal platform-issue bind <task-ref> --issue <
|
|
7
|
+
agent-infra-internal platform-issue bind <task-ref> --issue <token> --agent <agent> [--dry-run] [--cwd <path>]
|
|
7
8
|
agent-infra-internal platform-issue sync <task-ref> --agent <agent> [--status <suffix|none>] [--assignees current|none] [--milestone initial|specific|none] [--issue-type] [--fields] [--requirements] [--in-labels from-diff|none] [--base <branch>] [--state open|closed] [--close-reason completed|not_planned] [--dry-run] [--cwd <path>]
|
|
8
9
|
`;
|
|
9
10
|
const BOOLEAN_FLAGS = new Set(['--dry-run', '--issue-type', '--fields', '--requirements']);
|
|
@@ -54,13 +55,20 @@ function oneOf(values, name, allowed) {
|
|
|
54
55
|
throw new Error(`--${name.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)} must be one of ${allowed.join('|')}`);
|
|
55
56
|
return value;
|
|
56
57
|
}
|
|
57
|
-
function platformIssue(args = []) {
|
|
58
|
+
async function platformIssue(args = []) {
|
|
59
|
+
if (!ensureInternalHandlerRoute('platform-issue', args))
|
|
60
|
+
return;
|
|
58
61
|
if (args[0] === '--help' || args[0] === '-h') {
|
|
59
62
|
process.stdout.write(USAGE);
|
|
60
63
|
return;
|
|
61
64
|
}
|
|
62
65
|
const operation = args[0];
|
|
63
|
-
if (!operation || ![
|
|
66
|
+
if (!operation || ![
|
|
67
|
+
internalHandlerRoute('platform-issue', 'inspect', operation),
|
|
68
|
+
internalHandlerRoute('platform-issue', 'create', operation),
|
|
69
|
+
internalHandlerRoute('platform-issue', 'bind', operation),
|
|
70
|
+
internalHandlerRoute('platform-issue', 'sync', operation)
|
|
71
|
+
].some(Boolean)) {
|
|
64
72
|
fail('a valid operation is required');
|
|
65
73
|
return;
|
|
66
74
|
}
|
|
@@ -85,8 +93,8 @@ function platformIssue(args = []) {
|
|
|
85
93
|
fail(`${operation} does not accept --${unexpected}`);
|
|
86
94
|
return;
|
|
87
95
|
}
|
|
88
|
-
if (
|
|
89
|
-
finish(inspectPlatformIssue(taskRef, { cwd }));
|
|
96
|
+
if (internalHandlerRoute('platform-issue', 'inspect', operation)) {
|
|
97
|
+
finish(await inspectPlatformIssue(taskRef, { cwd }));
|
|
90
98
|
return;
|
|
91
99
|
}
|
|
92
100
|
if (typeof values.agent !== 'string' || !values.agent) {
|
|
@@ -99,17 +107,16 @@ function platformIssue(args = []) {
|
|
|
99
107
|
return;
|
|
100
108
|
}
|
|
101
109
|
values.agent = agent;
|
|
102
|
-
if (
|
|
103
|
-
finish(createPlatformIssue(taskRef, { cwd, agent: values.agent, dryRun: values.dryRun === true }));
|
|
110
|
+
if (internalHandlerRoute('platform-issue', 'create', operation)) {
|
|
111
|
+
finish(await createPlatformIssue(taskRef, { cwd, agent: values.agent, dryRun: values.dryRun === true }));
|
|
104
112
|
return;
|
|
105
113
|
}
|
|
106
|
-
if (
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
fail('bind requires a positive --issue');
|
|
114
|
+
if (internalHandlerRoute('platform-issue', 'bind', operation)) {
|
|
115
|
+
if (typeof values.issue !== 'string' || !values.issue) {
|
|
116
|
+
fail('bind requires --issue <token>');
|
|
110
117
|
return;
|
|
111
118
|
}
|
|
112
|
-
finish(bindPlatformIssue(taskRef, { cwd, agent: values.agent, issue, dryRun: values.dryRun === true }));
|
|
119
|
+
finish(await bindPlatformIssue(taskRef, { cwd, agent: values.agent, issue: values.issue, dryRun: values.dryRun === true }));
|
|
113
120
|
return;
|
|
114
121
|
}
|
|
115
122
|
try {
|
|
@@ -127,7 +134,7 @@ function platformIssue(args = []) {
|
|
|
127
134
|
const desiredKeys = ['status', 'assignees', 'milestone', 'issueType', 'fields', 'requirements', 'inLabels', 'state'];
|
|
128
135
|
if (!desiredKeys.some((name) => values[name] !== undefined))
|
|
129
136
|
throw new Error('sync requires at least one desired-state option');
|
|
130
|
-
finish(syncPlatformIssue(taskRef, {
|
|
137
|
+
finish(await syncPlatformIssue(taskRef, {
|
|
131
138
|
cwd, agent: values.agent, dryRun: values.dryRun === true,
|
|
132
139
|
status: typeof values.status === 'string' ? values.status : undefined,
|
|
133
140
|
assignees: assignees,
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { initializeLabels, initializeMilestones } from '../platform/repository-metadata.js';
|
|
3
|
+
import { ensureInternalHandlerRoute, internalHandlerRoute } from './cli-route-inventory.js';
|
|
4
|
+
const USAGE = `Usage: agent-infra-internal platform-metadata init-labels [--cleanup-stale-in] [--cwd <path>]
|
|
5
|
+
agent-infra-internal platform-metadata init-milestones [--history] [--cwd <path>]
|
|
6
|
+
`;
|
|
7
|
+
function fail(message) {
|
|
8
|
+
process.stdout.write(`${JSON.stringify({ status: 'failed', changed: false, error: { code: 'METADATA_INPUT_INVALID', message, retryable: false } })}\n`);
|
|
9
|
+
process.stderr.write(USAGE);
|
|
10
|
+
process.exitCode = 1;
|
|
11
|
+
}
|
|
12
|
+
function finish(result, preserveMilestoneFallback = false) {
|
|
13
|
+
if (preserveMilestoneFallback && result.error && typeof result.error === 'object'
|
|
14
|
+
&& result.error.code === 'PLATFORM_CAPABILITY_UNSUPPORTED') {
|
|
15
|
+
process.stderr.write('Milestone initialization skipped for unsupported platform.\n');
|
|
16
|
+
process.exitCode = 0;
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
process.stdout.write(`${JSON.stringify(result)}\n`);
|
|
20
|
+
process.exitCode = result.status === 'blocked' ? 2 : result.status === 'failed' ? 1 : 0;
|
|
21
|
+
}
|
|
22
|
+
function parseOptions(args) {
|
|
23
|
+
let cwd = process.cwd();
|
|
24
|
+
let cleanup = false;
|
|
25
|
+
let history = false;
|
|
26
|
+
const seen = new Set();
|
|
27
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
28
|
+
const flag = args[index];
|
|
29
|
+
if (seen.has(flag))
|
|
30
|
+
return null;
|
|
31
|
+
seen.add(flag);
|
|
32
|
+
if (flag === '--cleanup-stale-in') {
|
|
33
|
+
cleanup = true;
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
if (flag === '--history') {
|
|
37
|
+
history = true;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (flag === '--cwd') {
|
|
41
|
+
const value = args[++index];
|
|
42
|
+
if (!value || value.startsWith('--'))
|
|
43
|
+
return null;
|
|
44
|
+
cwd = path.resolve(value);
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
return { cwd: path.resolve(cwd), cleanup, history };
|
|
50
|
+
}
|
|
51
|
+
async function platformMetadata(args = []) {
|
|
52
|
+
if (!ensureInternalHandlerRoute('platform-metadata', args))
|
|
53
|
+
return;
|
|
54
|
+
if (args[0] === '--help' || args[0] === '-h') {
|
|
55
|
+
process.stdout.write(USAGE);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const action = args[0];
|
|
59
|
+
if (!internalHandlerRoute('platform-metadata', 'init-labels', action ?? '')
|
|
60
|
+
&& !internalHandlerRoute('platform-metadata', 'init-milestones', action ?? '')) {
|
|
61
|
+
fail('a valid operation is required');
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (action !== 'init-labels' && action !== 'init-milestones') {
|
|
65
|
+
fail('a valid operation is required');
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const parsed = parseOptions(args.slice(1));
|
|
69
|
+
if (!parsed) {
|
|
70
|
+
fail('invalid metadata options');
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
if (action === 'init-labels' && parsed.history) {
|
|
74
|
+
fail('init-labels does not accept --history');
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (action === 'init-milestones' && parsed.cleanup) {
|
|
78
|
+
fail('init-milestones does not accept --cleanup-stale-in');
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (action === 'init-labels') {
|
|
82
|
+
finish(await initializeLabels({ cleanupStaleIn: parsed.cleanup }, { cwd: parsed.cwd }));
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
finish(await initializeMilestones({ history: parsed.history }, { cwd: parsed.cwd }), true);
|
|
86
|
+
}
|
|
87
|
+
export { platformMetadata };
|
|
88
|
+
//# sourceMappingURL=platform-metadata.js.map
|
|
@@ -2,9 +2,10 @@ import fs from 'node:fs';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { inspectPlatformPullRequestByNumber } from '../platform/pull-requests.js';
|
|
4
4
|
import { listPrReviews, publishPrReview } from '../platform/pr-review.js';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
agent-infra-internal platform-pr-review
|
|
5
|
+
import { ensureInternalHandlerRoute, internalHandlerRoute } from './cli-route-inventory.js';
|
|
6
|
+
const USAGE = `Usage: agent-infra-internal platform-pr-review inspect --pr <token> [--cwd <path>]
|
|
7
|
+
agent-infra-internal platform-pr-review list --pr <token> [--cwd <path>]
|
|
8
|
+
agent-infra-internal platform-pr-review publish --pr <token> --scope <taskId|pr{N}> --round <N> --commit <sha> --event <COMMENT|APPROVE|REQUEST_CHANGES> --body-file <path|-> [--dry-run] [--cwd <path>]
|
|
8
9
|
`;
|
|
9
10
|
const BOOLEAN_FLAGS = new Set(['--dry-run']);
|
|
10
11
|
const VALUE_FLAGS = new Set(['--cwd', '--pr', '--scope', '--round', '--commit', '--event', '--body-file']);
|
|
@@ -47,13 +48,19 @@ function parse(args, start) {
|
|
|
47
48
|
function readBodyFile(value, cwd) {
|
|
48
49
|
return value === '-' ? fs.readFileSync(0, 'utf8') : fs.readFileSync(path.resolve(cwd, value), 'utf8');
|
|
49
50
|
}
|
|
50
|
-
function platformPrReview(args = []) {
|
|
51
|
+
async function platformPrReview(args = []) {
|
|
52
|
+
if (!ensureInternalHandlerRoute('platform-pr-review', args))
|
|
53
|
+
return;
|
|
51
54
|
if (args[0] === '--help' || args[0] === '-h') {
|
|
52
55
|
process.stdout.write(USAGE);
|
|
53
56
|
return;
|
|
54
57
|
}
|
|
55
58
|
const operation = args[0];
|
|
56
|
-
if (!operation || ![
|
|
59
|
+
if (!operation || ![
|
|
60
|
+
internalHandlerRoute('platform-pr-review', 'inspect', operation),
|
|
61
|
+
internalHandlerRoute('platform-pr-review', 'list', operation),
|
|
62
|
+
operation === 'publish'
|
|
63
|
+
].some(Boolean)) {
|
|
57
64
|
fail('a valid operation is required');
|
|
58
65
|
return;
|
|
59
66
|
}
|
|
@@ -74,20 +81,21 @@ function platformPrReview(args = []) {
|
|
|
74
81
|
fail(`${operation} does not accept --${unexpected}`);
|
|
75
82
|
return;
|
|
76
83
|
}
|
|
77
|
-
const pr =
|
|
78
|
-
if (
|
|
79
|
-
fail(`${operation} requires
|
|
84
|
+
const pr = values.pr;
|
|
85
|
+
if (typeof pr !== 'string' || !pr) {
|
|
86
|
+
fail(`${operation} requires --pr <token>`);
|
|
80
87
|
return;
|
|
81
88
|
}
|
|
82
|
-
if (
|
|
83
|
-
finish(inspectPlatformPullRequestByNumber(pr, { cwd }));
|
|
89
|
+
if (internalHandlerRoute('platform-pr-review', 'inspect', operation)) {
|
|
90
|
+
finish(await inspectPlatformPullRequestByNumber(pr, { cwd }));
|
|
84
91
|
return;
|
|
85
92
|
}
|
|
86
|
-
if (
|
|
87
|
-
finish(listPrReviews(pr, { cwd }));
|
|
93
|
+
if (internalHandlerRoute('platform-pr-review', 'list', operation)) {
|
|
94
|
+
finish(await listPrReviews(pr, { cwd }));
|
|
88
95
|
return;
|
|
89
96
|
}
|
|
90
97
|
const scope = typeof values.scope === 'string' ? values.scope : '';
|
|
98
|
+
const publishSelector = /^TASK-\d{8}-\d{6}$/u.test(scope) ? 'publish-task' : /^pr\d+$/u.test(scope) ? 'publish-pr' : '';
|
|
91
99
|
const round = Number(values.round);
|
|
92
100
|
const commit = typeof values.commit === 'string' ? values.commit : '';
|
|
93
101
|
const event = values.event;
|
|
@@ -95,6 +103,11 @@ function platformPrReview(args = []) {
|
|
|
95
103
|
fail('publish requires --scope <taskId|pr{N}>');
|
|
96
104
|
return;
|
|
97
105
|
}
|
|
106
|
+
if (!internalHandlerRoute('platform-pr-review', 'publish-task', publishSelector)
|
|
107
|
+
&& !internalHandlerRoute('platform-pr-review', 'publish-pr', publishSelector)) {
|
|
108
|
+
fail('publish scope is not registered');
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
98
111
|
if (!Number.isInteger(round) || round <= 0) {
|
|
99
112
|
fail('publish requires a positive --round');
|
|
100
113
|
return;
|
|
@@ -119,7 +132,7 @@ function platformPrReview(args = []) {
|
|
|
119
132
|
fail(`unable to read body file: ${error instanceof Error ? error.message : String(error)}`);
|
|
120
133
|
return;
|
|
121
134
|
}
|
|
122
|
-
finish(publishPrReview({
|
|
135
|
+
finish(await publishPrReview({
|
|
123
136
|
cwd,
|
|
124
137
|
prNumber: pr,
|
|
125
138
|
identity: { scope, round, commitSha: commit },
|
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { normalizeAgentToken, AGENT_USAGE_HINT } from '../agent-clients/tokens.js';
|
|
4
|
-
import { bindPlatformPullRequest, createPlatformPullRequest, inspectPlatformPullRequest, resolveExternalPullRequest, skipPlatformPullRequestFact, syncPlatformPullRequest } from '../platform/pull-requests.js';
|
|
5
|
-
import { summaryContext, syncPullRequestSummary } from '../platform/pr-summary.js';
|
|
4
|
+
import { bindPlatformPullRequest, createPlatformPullRequest, inspectPlatformPullRequest, resolveExternalPullRequest, skipPlatformPullRequestFact, syncPlatformPullRequest, syncPlatformPullRequestInLabels } from '../platform/pull-requests.js';
|
|
5
|
+
import { reportWrite, summaryContext, syncPullRequestSummary } from '../platform/pr-summary.js';
|
|
6
|
+
import { ensureInternalHandlerRoute, internalHandlerRoute } from './cli-route-inventory.js';
|
|
6
7
|
const USAGE = `Usage: agent-infra-internal platform-pr inspect <task-ref> [--cwd <path>]
|
|
7
|
-
agent-infra-internal platform-pr resolve-external <task-ref> --agent <agent> [--pr <
|
|
8
|
+
agent-infra-internal platform-pr resolve-external <task-ref> --agent <agent> [--pr <token>] [--dry-run] [--cwd <path>]
|
|
8
9
|
agent-infra-internal platform-pr create <task-ref> --agent <agent> --base <branch> --head <branch> --title-file <path|-> --body-file <path|-> [--draft] [--dry-run] [--cwd <path>]
|
|
9
|
-
agent-infra-internal platform-pr bind <task-ref> --pr <
|
|
10
|
+
agent-infra-internal platform-pr bind <task-ref> --pr <token> --agent <agent> [--dry-run] [--cwd <path>]
|
|
10
11
|
agent-infra-internal platform-pr skip <task-ref> --agent <agent> [--dry-run] [--cwd <path>]
|
|
11
12
|
agent-infra-internal platform-pr sync <task-ref> --agent <agent> [--metadata] [--closing-issue] --result <pr_created|pr_reused|no_op> [--dry-run] [--cwd <path>]
|
|
13
|
+
agent-infra-internal platform-pr sync-in-labels --pr <N> [--dry-run] [--cwd <path>]
|
|
12
14
|
agent-infra-internal platform-pr summary-context <task-ref> [--cwd <path>]
|
|
13
|
-
agent-infra-internal platform-pr
|
|
15
|
+
agent-infra-internal platform-pr change-report <task-ref> --agent <agent> --mechanical-file <path> --precheck-file <path> [--dry-run] [--cwd <path>]
|
|
16
|
+
agent-infra-internal platform-pr summary-sync <task-ref> --agent <agent> --body-file <path|-> --change-report-file <path> --result <pr_created|pr_reused|no_op> [--strict] [--dry-run] [--cwd <path>]
|
|
14
17
|
`;
|
|
15
|
-
const BOOLEAN_FLAGS = new Set(['--draft', '--dry-run', '--metadata', '--closing-issue']);
|
|
16
|
-
const VALUE_FLAGS = new Set(['--cwd', '--agent', '--base', '--head', '--title-file', '--body-file', '--pr', '--result']);
|
|
18
|
+
const BOOLEAN_FLAGS = new Set(['--draft', '--dry-run', '--metadata', '--closing-issue', '--strict']);
|
|
19
|
+
const VALUE_FLAGS = new Set(['--cwd', '--agent', '--base', '--head', '--title-file', '--body-file', '--change-report-file', '--mechanical-file', '--precheck-file', '--pr', '--result']);
|
|
17
20
|
function key(flag) {
|
|
18
21
|
return flag.slice(2).replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
19
22
|
}
|
|
@@ -53,16 +56,50 @@ function parse(args, start) {
|
|
|
53
56
|
function readFile(value, cwd) {
|
|
54
57
|
return value === '-' ? fs.readFileSync(0, 'utf8') : fs.readFileSync(path.resolve(cwd, value), 'utf8');
|
|
55
58
|
}
|
|
56
|
-
function platformPr(args = []) {
|
|
59
|
+
async function platformPr(args = []) {
|
|
60
|
+
if (!ensureInternalHandlerRoute('platform-pr', args))
|
|
61
|
+
return;
|
|
57
62
|
if (args[0] === '--help' || args[0] === '-h') {
|
|
58
63
|
process.stdout.write(USAGE);
|
|
59
64
|
return;
|
|
60
65
|
}
|
|
61
66
|
const operation = args[0];
|
|
62
|
-
if (!operation || ![
|
|
67
|
+
if (!operation || ![
|
|
68
|
+
internalHandlerRoute('platform-pr', 'inspect', operation),
|
|
69
|
+
internalHandlerRoute('platform-pr', 'resolve-external', operation),
|
|
70
|
+
internalHandlerRoute('platform-pr', 'create', operation),
|
|
71
|
+
internalHandlerRoute('platform-pr', 'bind', operation),
|
|
72
|
+
internalHandlerRoute('platform-pr', 'skip', operation),
|
|
73
|
+
internalHandlerRoute('platform-pr', 'sync', operation),
|
|
74
|
+
internalHandlerRoute('platform-pr', 'sync-in-labels', operation),
|
|
75
|
+
internalHandlerRoute('platform-pr', 'summary-context', operation),
|
|
76
|
+
internalHandlerRoute('platform-pr', 'change-report', operation),
|
|
77
|
+
internalHandlerRoute('platform-pr', 'summary-sync', operation)
|
|
78
|
+
].some(Boolean)) {
|
|
63
79
|
fail('a valid operation is required');
|
|
64
80
|
return;
|
|
65
81
|
}
|
|
82
|
+
if (internalHandlerRoute('platform-pr', 'sync-in-labels', operation)) {
|
|
83
|
+
const parsed = parse(args, 1);
|
|
84
|
+
if (parsed.error) {
|
|
85
|
+
fail(parsed.error);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const values = parsed.values;
|
|
89
|
+
const unexpected = Object.keys(values).find((name) => !['cwd', 'pr', 'dryRun'].includes(name));
|
|
90
|
+
if (unexpected) {
|
|
91
|
+
fail(`sync-in-labels does not accept --${unexpected}`);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const pr = Number(values.pr);
|
|
95
|
+
if (!Number.isInteger(pr) || pr <= 0) {
|
|
96
|
+
fail('sync-in-labels requires a positive --pr');
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const cwd = path.resolve(typeof values.cwd === 'string' ? values.cwd : process.cwd());
|
|
100
|
+
finish(await syncPlatformPullRequestInLabels(pr, { cwd, dryRun: values.dryRun === true }));
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
66
103
|
const taskRef = args[1];
|
|
67
104
|
if (!taskRef || taskRef.startsWith('--')) {
|
|
68
105
|
fail(`${operation} requires a task ref`);
|
|
@@ -82,20 +119,22 @@ function platformPr(args = []) {
|
|
|
82
119
|
bind: ['cwd', 'agent', 'pr', 'dryRun'],
|
|
83
120
|
skip: ['cwd', 'agent', 'dryRun'],
|
|
84
121
|
sync: ['cwd', 'agent', 'metadata', 'closingIssue', 'result', 'dryRun'],
|
|
122
|
+
'sync-in-labels': ['cwd', 'pr', 'dryRun'],
|
|
85
123
|
'summary-context': ['cwd'],
|
|
86
|
-
'
|
|
124
|
+
'change-report': ['cwd', 'agent', 'mechanicalFile', 'precheckFile', 'dryRun'],
|
|
125
|
+
'summary-sync': ['cwd', 'agent', 'bodyFile', 'changeReportFile', 'result', 'dryRun', 'strict']
|
|
87
126
|
};
|
|
88
127
|
const unexpected = Object.keys(values).find((name) => !allowed[operation].includes(name));
|
|
89
128
|
if (unexpected) {
|
|
90
129
|
fail(`${operation} does not accept --${unexpected}`);
|
|
91
130
|
return;
|
|
92
131
|
}
|
|
93
|
-
if (
|
|
94
|
-
finish(inspectPlatformPullRequest(taskRef, { cwd }));
|
|
132
|
+
if (internalHandlerRoute('platform-pr', 'inspect', operation)) {
|
|
133
|
+
finish(await inspectPlatformPullRequest(taskRef, { cwd }));
|
|
95
134
|
return;
|
|
96
135
|
}
|
|
97
|
-
if (
|
|
98
|
-
finish(summaryContext(taskRef, { cwd }));
|
|
136
|
+
if (internalHandlerRoute('platform-pr', 'summary-context', operation)) {
|
|
137
|
+
finish(await summaryContext(taskRef, { cwd }));
|
|
99
138
|
return;
|
|
100
139
|
}
|
|
101
140
|
if (typeof values.agent !== 'string' || !values.agent) {
|
|
@@ -108,8 +147,18 @@ function platformPr(args = []) {
|
|
|
108
147
|
return;
|
|
109
148
|
}
|
|
110
149
|
values.agent = agent;
|
|
111
|
-
if (
|
|
112
|
-
|
|
150
|
+
if (internalHandlerRoute('platform-pr', 'change-report', operation)) {
|
|
151
|
+
if (typeof values.mechanicalFile !== 'string' || typeof values.precheckFile !== 'string') {
|
|
152
|
+
fail('change-report requires --mechanical-file and --precheck-file');
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
finish(await reportWrite(taskRef, {
|
|
156
|
+
cwd, agent: values.agent, mechanicalFile: values.mechanicalFile, precheckFile: values.precheckFile, dryRun: values.dryRun === true
|
|
157
|
+
}));
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
if (internalHandlerRoute('platform-pr', 'skip', operation)) {
|
|
161
|
+
finish(await skipPlatformPullRequestFact(taskRef, { cwd, agent, dryRun: values.dryRun === true }));
|
|
113
162
|
return;
|
|
114
163
|
}
|
|
115
164
|
const primaryResult = values.result === undefined ? undefined : values.result;
|
|
@@ -117,25 +166,25 @@ function platformPr(args = []) {
|
|
|
117
166
|
fail('--result must be pr_created, pr_reused, or no_op');
|
|
118
167
|
return;
|
|
119
168
|
}
|
|
120
|
-
if (
|
|
121
|
-
const pr = values.pr === undefined ? undefined :
|
|
122
|
-
if (pr !== undefined && (
|
|
123
|
-
fail('resolve-external requires
|
|
169
|
+
if (internalHandlerRoute('platform-pr', 'resolve-external', operation)) {
|
|
170
|
+
const pr = values.pr === undefined ? undefined : values.pr;
|
|
171
|
+
if (pr !== undefined && (typeof pr !== 'string' || !pr)) {
|
|
172
|
+
fail('resolve-external requires --pr <token>');
|
|
124
173
|
return;
|
|
125
174
|
}
|
|
126
|
-
finish(resolveExternalPullRequest(taskRef, { cwd, agent: values.agent, pr, dryRun: values.dryRun === true }));
|
|
175
|
+
finish(await resolveExternalPullRequest(taskRef, { cwd, agent: values.agent, pr, dryRun: values.dryRun === true }));
|
|
127
176
|
return;
|
|
128
177
|
}
|
|
129
|
-
if (
|
|
130
|
-
const pr =
|
|
131
|
-
if (
|
|
132
|
-
fail('bind requires
|
|
178
|
+
if (internalHandlerRoute('platform-pr', 'bind', operation)) {
|
|
179
|
+
const pr = values.pr;
|
|
180
|
+
if (typeof pr !== 'string' || !pr) {
|
|
181
|
+
fail('bind requires --pr <token>');
|
|
133
182
|
return;
|
|
134
183
|
}
|
|
135
|
-
finish(bindPlatformPullRequest(taskRef, { cwd, agent: values.agent, pr, dryRun: values.dryRun === true }));
|
|
184
|
+
finish(await bindPlatformPullRequest(taskRef, { cwd, agent: values.agent, pr, dryRun: values.dryRun === true }));
|
|
136
185
|
return;
|
|
137
186
|
}
|
|
138
|
-
if (
|
|
187
|
+
if (internalHandlerRoute('platform-pr', 'sync', operation)) {
|
|
139
188
|
if (values.metadata !== true && values.closingIssue !== true) {
|
|
140
189
|
fail('sync requires --metadata or --closing-issue');
|
|
141
190
|
return;
|
|
@@ -144,20 +193,24 @@ function platformPr(args = []) {
|
|
|
144
193
|
fail('sync requires --result pr_created, pr_reused, or no_op');
|
|
145
194
|
return;
|
|
146
195
|
}
|
|
147
|
-
finish(syncPlatformPullRequest(taskRef, { cwd, agent: values.agent, metadata: values.metadata === true, closingIssue: values.closingIssue === true, primaryResult: primaryResult, dryRun: values.dryRun === true }));
|
|
196
|
+
finish(await syncPlatformPullRequest(taskRef, { cwd, agent: values.agent, metadata: values.metadata === true, closingIssue: values.closingIssue === true, primaryResult: primaryResult, dryRun: values.dryRun === true }));
|
|
148
197
|
return;
|
|
149
198
|
}
|
|
150
|
-
if (
|
|
199
|
+
if (internalHandlerRoute('platform-pr', 'summary-sync', operation)) {
|
|
151
200
|
if (typeof values.bodyFile !== 'string') {
|
|
152
201
|
fail('summary-sync requires --body-file');
|
|
153
202
|
return;
|
|
154
203
|
}
|
|
204
|
+
if (typeof values.changeReportFile !== 'string') {
|
|
205
|
+
fail('summary-sync requires --change-report-file');
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
155
208
|
if (!primaryResult) {
|
|
156
209
|
fail('summary-sync requires --result pr_created, pr_reused, or no_op');
|
|
157
210
|
return;
|
|
158
211
|
}
|
|
159
212
|
try {
|
|
160
|
-
finish(syncPullRequestSummary(taskRef, { cwd, agent: values.agent, body: readFile(values.bodyFile, cwd), primaryResult: primaryResult, dryRun: values.dryRun === true }));
|
|
213
|
+
finish(await syncPullRequestSummary(taskRef, { cwd, agent: values.agent, body: readFile(values.bodyFile, cwd), changeReportFile: values.changeReportFile, primaryResult: primaryResult, dryRun: values.dryRun === true, strict: values.strict === true }));
|
|
161
214
|
}
|
|
162
215
|
catch (error) {
|
|
163
216
|
fail(`unable to read body file: ${error instanceof Error ? error.message : String(error)}`);
|
|
@@ -169,7 +222,7 @@ function platformPr(args = []) {
|
|
|
169
222
|
return;
|
|
170
223
|
}
|
|
171
224
|
try {
|
|
172
|
-
finish(createPlatformPullRequest(taskRef, {
|
|
225
|
+
finish(await createPlatformPullRequest(taskRef, {
|
|
173
226
|
cwd, agent: values.agent, base: values.base, head: values.head,
|
|
174
227
|
title: readFile(values.titleFile, cwd), body: readFile(values.bodyFile, cwd),
|
|
175
228
|
draft: values.draft === true, dryRun: values.dryRun === true
|