@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,146 +0,0 @@
|
|
|
1
|
-
#!/bin/sh
|
|
2
|
-
|
|
3
|
-
set -e
|
|
4
|
-
|
|
5
|
-
cleanup_stale_in=false
|
|
6
|
-
while [ "$#" -gt 0 ]; do
|
|
7
|
-
case "$1" in
|
|
8
|
-
--cleanup-stale-in)
|
|
9
|
-
cleanup_stale_in=true
|
|
10
|
-
;;
|
|
11
|
-
*)
|
|
12
|
-
echo "Unknown option: $1" >&2
|
|
13
|
-
exit 2
|
|
14
|
-
;;
|
|
15
|
-
esac
|
|
16
|
-
shift
|
|
17
|
-
done
|
|
18
|
-
|
|
19
|
-
if ! command -v gh >/dev/null 2>&1; then
|
|
20
|
-
echo "GitHub CLI (\`gh\`) is not installed"
|
|
21
|
-
exit 1
|
|
22
|
-
fi
|
|
23
|
-
|
|
24
|
-
if ! gh auth token >/dev/null 2>&1; then
|
|
25
|
-
echo "GitHub CLI is not authenticated"
|
|
26
|
-
exit 1
|
|
27
|
-
fi
|
|
28
|
-
|
|
29
|
-
if ! gh repo view --json nameWithOwner >/dev/null 2>&1; then
|
|
30
|
-
echo "Unable to access the current repository with gh"
|
|
31
|
-
exit 1
|
|
32
|
-
fi
|
|
33
|
-
|
|
34
|
-
tmpdir="$(mktemp -d)"
|
|
35
|
-
trap 'rm -rf "$tmpdir"' EXIT HUP INT TERM
|
|
36
|
-
|
|
37
|
-
gh label list --limit 200 --json name --jq '.[].name' > "$tmpdir/existing-names.txt"
|
|
38
|
-
cp "$tmpdir/existing-names.txt" "$tmpdir/existing.txt"
|
|
39
|
-
echo "Existing labels:"
|
|
40
|
-
cat "$tmpdir/existing-names.txt"
|
|
41
|
-
|
|
42
|
-
cat <<'EOF' > "$tmpdir/common.tsv"
|
|
43
|
-
type: bug DED6F9 A general bug
|
|
44
|
-
type: enhancement DED6F9 A general enhancement
|
|
45
|
-
type: feature DED6F9 A general feature
|
|
46
|
-
type: documentation DED6F9 A documentation task
|
|
47
|
-
type: dependency-upgrade DED6F9 A dependency upgrade
|
|
48
|
-
type: task DED6F9 A general task
|
|
49
|
-
status: waiting-for-triage FCF1C4 An issue we've not yet triaged or decided on
|
|
50
|
-
status: waiting-for-feedback FCF1C4 We need additional information before we can continue
|
|
51
|
-
status: feedback-provided FCF1C4 Feedback has been provided
|
|
52
|
-
status: feedback-reminder FCF1C4 We've sent a reminder that we need additional information before we can continue
|
|
53
|
-
status: pending-design-work FCF1C4 Needs design work before any code can be developed
|
|
54
|
-
status: in-progress FCF1C4 Work is actively being developed
|
|
55
|
-
status: on-hold FCF1C4 We can't start working on this issue yet
|
|
56
|
-
status: blocked FCF1C4 An issue that's blocked on an external project change
|
|
57
|
-
status: declined FCF1C4 A suggestion or change that we don't feel we should currently apply
|
|
58
|
-
status: duplicate FCF1C4 A duplicate of another issue
|
|
59
|
-
status: invalid FCF1C4 An issue that we don't feel is valid
|
|
60
|
-
status: superseded FCF1C4 An issue that has been superseded by another
|
|
61
|
-
status: bulk-closed FCF1C4 An outdated, unresolved issue that's closed in bulk as part of a cleaning process
|
|
62
|
-
status: ideal-for-contribution FCF1C4 An issue that a contributor can help us with
|
|
63
|
-
status: backported FCF1C4 An issue that has been backported to maintenance branches
|
|
64
|
-
status: waiting-for-internal-feedback FCF1C4 An issue that needs input from a member or another team
|
|
65
|
-
good first issue F9D9E6 Good for newcomers
|
|
66
|
-
help wanted 008672 Extra attention is needed
|
|
67
|
-
dependencies 0366d6 Pull requests that update a dependency file
|
|
68
|
-
EOF
|
|
69
|
-
|
|
70
|
-
node - ".agents/.airc.json" > "$tmpdir/in.tsv" <<'NODE'
|
|
71
|
-
const fs = require("node:fs");
|
|
72
|
-
|
|
73
|
-
const configPath = process.argv[2];
|
|
74
|
-
const config = JSON.parse(fs.readFileSync(configPath, "utf8"));
|
|
75
|
-
const mapping = config.labels?.in;
|
|
76
|
-
if (mapping === undefined) process.exit(0);
|
|
77
|
-
if (!mapping || typeof mapping !== "object" || Array.isArray(mapping)) {
|
|
78
|
-
throw new Error("labels.in must be an object");
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
for (const key of Object.keys(mapping).sort()) {
|
|
82
|
-
if (!key || key.includes("\n") || key.includes("\r") || key.includes("\t")) {
|
|
83
|
-
throw new Error("labels.in keys must be non-empty single-line values");
|
|
84
|
-
}
|
|
85
|
-
process.stdout.write(`in: ${key}\tBFD4F2\tModule label for ${key}\n`);
|
|
86
|
-
}
|
|
87
|
-
NODE
|
|
88
|
-
|
|
89
|
-
cut -f1 "$tmpdir/in.tsv" > "$tmpdir/in-names.txt"
|
|
90
|
-
|
|
91
|
-
cat "$tmpdir/in.tsv" >> "$tmpdir/common.tsv"
|
|
92
|
-
|
|
93
|
-
while IFS="$(printf '\t')" read -r name color description; do
|
|
94
|
-
[ -n "$name" ] || continue
|
|
95
|
-
gh label create "$name" --color "$color" --description "$description" --force
|
|
96
|
-
done < "$tmpdir/common.tsv"
|
|
97
|
-
|
|
98
|
-
if [ "$cleanup_stale_in" = true ]; then
|
|
99
|
-
while IFS= read -r name; do
|
|
100
|
-
case "$name" in
|
|
101
|
-
in:*)
|
|
102
|
-
if ! grep -Fqx "$name" "$tmpdir/in-names.txt"; then
|
|
103
|
-
gh label delete "$name" --yes
|
|
104
|
-
fi
|
|
105
|
-
;;
|
|
106
|
-
esac
|
|
107
|
-
done < "$tmpdir/existing-names.txt"
|
|
108
|
-
fi
|
|
109
|
-
|
|
110
|
-
gh label list --limit 200 --json name --jq '.[].name' > "$tmpdir/final-names.txt"
|
|
111
|
-
cp "$tmpdir/final-names.txt" "$tmpdir/final.txt"
|
|
112
|
-
|
|
113
|
-
: > "$tmpdir/unmatched-defaults.txt"
|
|
114
|
-
for label in bug documentation duplicate enhancement invalid question wontfix; do
|
|
115
|
-
if grep -Fqx "$label" "$tmpdir/final-names.txt"; then
|
|
116
|
-
printf '%s\n' "$label" >> "$tmpdir/unmatched-defaults.txt"
|
|
117
|
-
fi
|
|
118
|
-
done
|
|
119
|
-
|
|
120
|
-
common_count="$(wc -l < "$tmpdir/common.tsv" | tr -d ' ')"
|
|
121
|
-
dynamic_count="$(wc -l < "$tmpdir/in.tsv" | tr -d ' ')"
|
|
122
|
-
|
|
123
|
-
echo "GitHub Labels initialized."
|
|
124
|
-
echo
|
|
125
|
-
echo "Summary:"
|
|
126
|
-
echo "- Common labels created or updated: $common_count"
|
|
127
|
-
echo "- in: labels created or updated: $dynamic_count"
|
|
128
|
-
echo "- Exact-match GitHub defaults overwritten: good first issue, help wanted"
|
|
129
|
-
|
|
130
|
-
if [ -s "$tmpdir/unmatched-defaults.txt" ]; then
|
|
131
|
-
echo "- Unmatched GitHub defaults still present:"
|
|
132
|
-
sed 's/^/ - /' "$tmpdir/unmatched-defaults.txt"
|
|
133
|
-
else
|
|
134
|
-
echo "- Unmatched GitHub defaults still present: none"
|
|
135
|
-
fi
|
|
136
|
-
|
|
137
|
-
echo
|
|
138
|
-
echo "Notes:"
|
|
139
|
-
echo "- theme: labels were intentionally not created."
|
|
140
|
-
echo "- The operation is idempotent because every label uses gh label create --force."
|
|
141
|
-
echo "- in: labels are derived from .agents/.airc.json labels.in."
|
|
142
|
-
if [ "$cleanup_stale_in" = true ]; then
|
|
143
|
-
echo "- Stale in: labels were removed only for labels absent from the confirmed mapping."
|
|
144
|
-
else
|
|
145
|
-
echo "- Stale in: labels were preserved; pass --cleanup-stale-in after mapping confirmation to remove them."
|
|
146
|
-
fi
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
#!/bin/sh
|
|
2
|
-
|
|
3
|
-
set -e
|
|
4
|
-
|
|
5
|
-
cleanup_stale_in=false
|
|
6
|
-
while [ "$#" -gt 0 ]; do
|
|
7
|
-
case "$1" in
|
|
8
|
-
--cleanup-stale-in)
|
|
9
|
-
cleanup_stale_in=true
|
|
10
|
-
;;
|
|
11
|
-
*)
|
|
12
|
-
echo "Unknown option: $1" >&2
|
|
13
|
-
exit 2
|
|
14
|
-
;;
|
|
15
|
-
esac
|
|
16
|
-
shift
|
|
17
|
-
done
|
|
18
|
-
|
|
19
|
-
node - "$cleanup_stale_in" <<'NODE'
|
|
20
|
-
const cleanupStaleIn = process.argv[2] === "true";
|
|
21
|
-
process.stdout.write(`${JSON.stringify({
|
|
22
|
-
status: "degraded",
|
|
23
|
-
operation: "init-labels",
|
|
24
|
-
error: {
|
|
25
|
-
code: "PLATFORM_LABELS_UNSUPPORTED",
|
|
26
|
-
message: cleanupStaleIn
|
|
27
|
-
? "The current platform does not provide a label adapter; stale labels were not removed."
|
|
28
|
-
: "The current platform does not provide a label adapter."
|
|
29
|
-
}
|
|
30
|
-
})}\n`);
|
|
31
|
-
NODE
|
|
32
|
-
exit 0
|
|
@@ -1,294 +0,0 @@
|
|
|
1
|
-
#!/bin/sh
|
|
2
|
-
|
|
3
|
-
set -e
|
|
4
|
-
|
|
5
|
-
arguments=""
|
|
6
|
-
if [ "$#" -gt 0 ]; then
|
|
7
|
-
arguments="$*"
|
|
8
|
-
fi
|
|
9
|
-
|
|
10
|
-
if ! command -v gh >/dev/null 2>&1; then
|
|
11
|
-
echo "GitHub CLI (\`gh\`) is not installed"
|
|
12
|
-
exit 1
|
|
13
|
-
fi
|
|
14
|
-
|
|
15
|
-
if ! gh auth token >/dev/null 2>&1; then
|
|
16
|
-
echo "GitHub CLI is not authenticated"
|
|
17
|
-
exit 1
|
|
18
|
-
fi
|
|
19
|
-
|
|
20
|
-
if ! gh repo view --json nameWithOwner >/dev/null 2>&1; then
|
|
21
|
-
echo "Unable to access the current repository with gh"
|
|
22
|
-
exit 1
|
|
23
|
-
fi
|
|
24
|
-
|
|
25
|
-
tmpdir="$(mktemp -d)"
|
|
26
|
-
trap 'rm -rf "$tmpdir"' EXIT HUP INT TERM
|
|
27
|
-
|
|
28
|
-
history_mode="false"
|
|
29
|
-
|
|
30
|
-
case " $arguments " in
|
|
31
|
-
*" --history "*) history_mode="true" ;;
|
|
32
|
-
esac
|
|
33
|
-
|
|
34
|
-
echo "History mode: $history_mode"
|
|
35
|
-
|
|
36
|
-
parse_semver_tags() {
|
|
37
|
-
LC_ALL=C awk -v mode="$1" '
|
|
38
|
-
function valid_core_number(value) {
|
|
39
|
-
return value ~ /^(0|[1-9][0-9]*)$/
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function valid_identifiers(value, prerelease, count, index_, identifiers) {
|
|
43
|
-
if (value == "") return 0
|
|
44
|
-
count = split(value, identifiers, ".")
|
|
45
|
-
for (index_ = 1; index_ <= count; index_++) {
|
|
46
|
-
if (identifiers[index_] !~ /^[0-9A-Za-z-]+$/) return 0
|
|
47
|
-
if (prerelease && identifiers[index_] ~ /^[0-9]+$/ && identifiers[index_] !~ /^(0|[1-9][0-9]*)$/) return 0
|
|
48
|
-
}
|
|
49
|
-
return 1
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
function parse_version(tag, version, main, core, plus_at, dash_at, count) {
|
|
53
|
-
if (substr(tag, 1, 1) != "v") return 0
|
|
54
|
-
version = substr(tag, 2)
|
|
55
|
-
main = version
|
|
56
|
-
parsed_build = ""
|
|
57
|
-
plus_at = index(main, "+")
|
|
58
|
-
if (plus_at > 0) {
|
|
59
|
-
parsed_build = substr(main, plus_at + 1)
|
|
60
|
-
main = substr(main, 1, plus_at - 1)
|
|
61
|
-
if (!valid_identifiers(parsed_build, 0)) return 0
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
parsed_prerelease = ""
|
|
65
|
-
dash_at = index(main, "-")
|
|
66
|
-
if (dash_at > 0) {
|
|
67
|
-
parsed_prerelease = substr(main, dash_at + 1)
|
|
68
|
-
main = substr(main, 1, dash_at - 1)
|
|
69
|
-
if (!valid_identifiers(parsed_prerelease, 1)) return 0
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
count = split(main, core, ".")
|
|
73
|
-
if (count != 3) return 0
|
|
74
|
-
if (!valid_core_number(core[1]) || !valid_core_number(core[2]) || !valid_core_number(core[3])) return 0
|
|
75
|
-
|
|
76
|
-
parsed_tag = tag
|
|
77
|
-
parsed_major = core[1]
|
|
78
|
-
parsed_minor = core[2]
|
|
79
|
-
parsed_patch = core[3]
|
|
80
|
-
return 1
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
function compare_decimal(left, right, index_, left_digit, right_digit) {
|
|
84
|
-
if (length(left) != length(right)) return length(left) > length(right) ? 1 : -1
|
|
85
|
-
for (index_ = 1; index_ <= length(left); index_++) {
|
|
86
|
-
left_digit = substr(left, index_, 1) + 0
|
|
87
|
-
right_digit = substr(right, index_, 1) + 0
|
|
88
|
-
if (left_digit != right_digit) return left_digit > right_digit ? 1 : -1
|
|
89
|
-
}
|
|
90
|
-
return 0
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
function compare_ascii(left, right, alphabet, limit, index_, left_rank, right_rank) {
|
|
94
|
-
alphabet = "+-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
|
|
95
|
-
limit = length(left) < length(right) ? length(left) : length(right)
|
|
96
|
-
for (index_ = 1; index_ <= limit; index_++) {
|
|
97
|
-
left_rank = index(alphabet, substr(left, index_, 1))
|
|
98
|
-
right_rank = index(alphabet, substr(right, index_, 1))
|
|
99
|
-
if (left_rank != right_rank) return left_rank > right_rank ? 1 : -1
|
|
100
|
-
}
|
|
101
|
-
if (length(left) == length(right)) return 0
|
|
102
|
-
return length(left) > length(right) ? 1 : -1
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
function compare_prerelease(left, right, left_count, right_count, limit, index_, comparison, left_numeric, right_numeric, left_ids, right_ids) {
|
|
106
|
-
if (left == "" || right == "") {
|
|
107
|
-
if (left == right) return 0
|
|
108
|
-
return left == "" ? 1 : -1
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
left_count = split(left, left_ids, ".")
|
|
112
|
-
right_count = split(right, right_ids, ".")
|
|
113
|
-
limit = left_count < right_count ? left_count : right_count
|
|
114
|
-
for (index_ = 1; index_ <= limit; index_++) {
|
|
115
|
-
left_numeric = left_ids[index_] ~ /^[0-9]+$/
|
|
116
|
-
right_numeric = right_ids[index_] ~ /^[0-9]+$/
|
|
117
|
-
if (left_numeric && right_numeric) {
|
|
118
|
-
comparison = compare_decimal(left_ids[index_], right_ids[index_])
|
|
119
|
-
} else if (left_numeric != right_numeric) {
|
|
120
|
-
comparison = left_numeric ? -1 : 1
|
|
121
|
-
} else {
|
|
122
|
-
comparison = compare_ascii(left_ids[index_], right_ids[index_])
|
|
123
|
-
}
|
|
124
|
-
if (comparison != 0) return comparison
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
if (left_count == right_count) return 0
|
|
128
|
-
return left_count > right_count ? 1 : -1
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
function candidate_is_higher( comparison) {
|
|
132
|
-
comparison = compare_decimal(parsed_major, best_major)
|
|
133
|
-
if (comparison != 0) return comparison > 0
|
|
134
|
-
comparison = compare_decimal(parsed_minor, best_minor)
|
|
135
|
-
if (comparison != 0) return comparison > 0
|
|
136
|
-
comparison = compare_decimal(parsed_patch, best_patch)
|
|
137
|
-
if (comparison != 0) return comparison > 0
|
|
138
|
-
comparison = compare_prerelease(parsed_prerelease, best_prerelease)
|
|
139
|
-
if (comparison != 0) return comparison > 0
|
|
140
|
-
return compare_ascii(parsed_tag, best_tag) > 0
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
function increment_decimal(value, index_, digit, output) {
|
|
144
|
-
output = ""
|
|
145
|
-
for (index_ = length(value); index_ >= 1; index_--) {
|
|
146
|
-
digit = substr(value, index_, 1) + 0
|
|
147
|
-
if (digit < 9) return substr(value, 1, index_ - 1) (digit + 1) output
|
|
148
|
-
output = "0" output
|
|
149
|
-
}
|
|
150
|
-
return "1" output
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
parse_version($0) {
|
|
154
|
-
if (mode == "history") {
|
|
155
|
-
printf "%s\t%s\t%s\n", parsed_major, parsed_minor, parsed_patch
|
|
156
|
-
next
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
if (!have_best || candidate_is_higher()) {
|
|
160
|
-
have_best = 1
|
|
161
|
-
best_tag = parsed_tag
|
|
162
|
-
best_major = parsed_major
|
|
163
|
-
best_minor = parsed_minor
|
|
164
|
-
best_patch = parsed_patch
|
|
165
|
-
best_prerelease = parsed_prerelease
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
END {
|
|
170
|
-
if (mode == "history") exit
|
|
171
|
-
if (!have_best) {
|
|
172
|
-
best_tag = "-"
|
|
173
|
-
best_major = "0"
|
|
174
|
-
best_minor = "1"
|
|
175
|
-
best_patch = "0"
|
|
176
|
-
}
|
|
177
|
-
printf "%s\t%s\t%s\t%s\t%s\n", best_tag, best_major, best_minor, best_patch, increment_decimal(best_patch)
|
|
178
|
-
}
|
|
179
|
-
'
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
selection="$(git tag --list 'v*' | parse_semver_tags select)"
|
|
183
|
-
previous_ifs="$IFS"
|
|
184
|
-
IFS="$(printf '\t')" read -r selected_tag major minor patch next_patch <<EOF
|
|
185
|
-
$selection
|
|
186
|
-
EOF
|
|
187
|
-
IFS="$previous_ifs"
|
|
188
|
-
|
|
189
|
-
current_version="$major.$minor.$patch"
|
|
190
|
-
if [ "$selected_tag" = "-" ]; then
|
|
191
|
-
version_source="compatibility default"
|
|
192
|
-
version_milestone="$current_version"
|
|
193
|
-
else
|
|
194
|
-
version_source="git tag $selected_tag"
|
|
195
|
-
version_milestone="$major.$minor.$next_patch"
|
|
196
|
-
fi
|
|
197
|
-
|
|
198
|
-
line_milestone="$major.$minor.x"
|
|
199
|
-
|
|
200
|
-
echo "Detected version baseline: $current_version"
|
|
201
|
-
echo "Version baseline source: $version_source"
|
|
202
|
-
echo "Line milestone: $line_milestone"
|
|
203
|
-
echo "Next version milestone: $version_milestone"
|
|
204
|
-
|
|
205
|
-
repo="$(gh repo view --json nameWithOwner --jq '.nameWithOwner')"
|
|
206
|
-
|
|
207
|
-
gh api "repos/$repo/milestones?state=all" --paginate \
|
|
208
|
-
--jq '.[] | [.title, .state] | @tsv' > "$tmpdir/existing.tsv"
|
|
209
|
-
|
|
210
|
-
cut -f1 "$tmpdir/existing.tsv" > "$tmpdir/existing-titles.txt"
|
|
211
|
-
echo "Existing milestones:"
|
|
212
|
-
cat "$tmpdir/existing.tsv"
|
|
213
|
-
|
|
214
|
-
cat <<EOF > "$tmpdir/desired.tsv"
|
|
215
|
-
General Backlog All unsorted backlogged tasks may be completed in a future version. open
|
|
216
|
-
$line_milestone Issues that we want to resolve in $major.$minor line. open
|
|
217
|
-
$version_milestone Issues that we want to release in v$version_milestone. open
|
|
218
|
-
EOF
|
|
219
|
-
|
|
220
|
-
if [ "$history_mode" = "true" ]; then
|
|
221
|
-
git tag --list 'v*' | parse_semver_tags history > "$tmpdir/history-versions.tsv"
|
|
222
|
-
|
|
223
|
-
if [ ! -s "$tmpdir/history-versions.tsv" ]; then
|
|
224
|
-
echo "No valid SemVer history tags found matching v*; only standard milestones will be created."
|
|
225
|
-
else
|
|
226
|
-
while IFS="$(printf '\t')" read -r h_major h_minor h_patch; do
|
|
227
|
-
printf '%s\t%s\t%s\n' \
|
|
228
|
-
"$h_major.$h_minor.x" \
|
|
229
|
-
"Issues that we want to resolve in $h_major.$h_minor line." \
|
|
230
|
-
"open" >> "$tmpdir/desired.tsv"
|
|
231
|
-
|
|
232
|
-
printf '%s\t%s\t%s\n' \
|
|
233
|
-
"$h_major.$h_minor.$h_patch" \
|
|
234
|
-
"Issues that we want to release in v$h_major.$h_minor.$h_patch." \
|
|
235
|
-
"closed" >> "$tmpdir/desired.tsv"
|
|
236
|
-
done < "$tmpdir/history-versions.tsv"
|
|
237
|
-
fi
|
|
238
|
-
fi
|
|
239
|
-
|
|
240
|
-
: > "$tmpdir/created.txt"
|
|
241
|
-
: > "$tmpdir/skipped.txt"
|
|
242
|
-
|
|
243
|
-
while IFS="$(printf '\t')" read -r title description state; do
|
|
244
|
-
[ -n "$title" ] || continue
|
|
245
|
-
state="${state:-open}"
|
|
246
|
-
|
|
247
|
-
if grep -Fqx "$title" "$tmpdir/existing-titles.txt"; then
|
|
248
|
-
printf '%s\n' "$title" >> "$tmpdir/skipped.txt"
|
|
249
|
-
echo "Skip existing milestone: $title"
|
|
250
|
-
continue
|
|
251
|
-
fi
|
|
252
|
-
|
|
253
|
-
gh api "repos/$repo/milestones" \
|
|
254
|
-
-f title="$title" \
|
|
255
|
-
-f description="$description" \
|
|
256
|
-
-f state="$state" >/dev/null
|
|
257
|
-
|
|
258
|
-
printf '%s\n' "$title" >> "$tmpdir/created.txt"
|
|
259
|
-
printf '%s\n' "$title" >> "$tmpdir/existing-titles.txt"
|
|
260
|
-
echo "Created milestone: $title ($state)"
|
|
261
|
-
done < "$tmpdir/desired.tsv"
|
|
262
|
-
|
|
263
|
-
created_count="$(wc -l < "$tmpdir/created.txt" | tr -d ' ')"
|
|
264
|
-
skipped_count="$(wc -l < "$tmpdir/skipped.txt" | tr -d ' ')"
|
|
265
|
-
|
|
266
|
-
echo "GitHub Milestones initialized."
|
|
267
|
-
echo
|
|
268
|
-
echo "Summary:"
|
|
269
|
-
echo "- Version baseline: $current_version"
|
|
270
|
-
echo "- Version baseline source: $version_source"
|
|
271
|
-
echo "- History mode: $history_mode"
|
|
272
|
-
echo "- Created milestones: $created_count"
|
|
273
|
-
echo "- Skipped existing milestones: $skipped_count"
|
|
274
|
-
|
|
275
|
-
if [ -s "$tmpdir/created.txt" ]; then
|
|
276
|
-
echo "- Newly created:"
|
|
277
|
-
sed 's/^/ - /' "$tmpdir/created.txt"
|
|
278
|
-
fi
|
|
279
|
-
|
|
280
|
-
if [ -s "$tmpdir/skipped.txt" ]; then
|
|
281
|
-
echo "- Already present:"
|
|
282
|
-
sed 's/^/ - /' "$tmpdir/skipped.txt"
|
|
283
|
-
fi
|
|
284
|
-
|
|
285
|
-
echo
|
|
286
|
-
echo "Notes:"
|
|
287
|
-
echo "- Milestone titles are treated as the idempotency key."
|
|
288
|
-
echo "- General Backlog is the fallback milestone for unsorted work."
|
|
289
|
-
echo "- Without --history, a single version milestone is created based on the detected baseline."
|
|
290
|
-
|
|
291
|
-
if [ "$history_mode" = "true" ]; then
|
|
292
|
-
echo "- Historical X.Y.Z tags create X.Y.x milestones as open and X.Y.Z milestones as closed."
|
|
293
|
-
echo "- Repositories with many tags may hit the GitHub API rate limit."
|
|
294
|
-
fi
|