@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,6 +1,23 @@
|
|
|
1
|
+
import type { ResourceIdentity } from '../platform/resource-identity.ts';
|
|
2
|
+
import { isLegacyCompatibilityEnabled, legacyCompatibilityError, VERSION } from '../version.ts';
|
|
3
|
+
import {
|
|
4
|
+
isResourceIdentity,
|
|
5
|
+
parseResourceIdentity,
|
|
6
|
+
resourceIdentityNumber,
|
|
7
|
+
serializeResourceIdentity
|
|
8
|
+
} from '../platform/resource-identity.ts';
|
|
9
|
+
|
|
1
10
|
const PR_DELIVERY_FACT_KEY = 'pr_delivery_fact';
|
|
2
11
|
|
|
3
12
|
type PrDeliveryIdentity = {
|
|
13
|
+
resource: ResourceIdentity;
|
|
14
|
+
repository: string;
|
|
15
|
+
url: string;
|
|
16
|
+
head: { repository: string; ref: string; sha: string };
|
|
17
|
+
base: { repository: string; ref: string; sha: string };
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
type LegacyPrDeliveryIdentity = {
|
|
4
21
|
repository: string;
|
|
5
22
|
number: number;
|
|
6
23
|
nodeId: string;
|
|
@@ -8,33 +25,30 @@ type PrDeliveryIdentity = {
|
|
|
8
25
|
head: { repository: string; ref: string; sha: string };
|
|
9
26
|
base: { repository: string; ref: string; sha: string };
|
|
10
27
|
};
|
|
28
|
+
type CurrentPrDeliveryIdentityInput = {
|
|
29
|
+
resource: ResourceIdentity;
|
|
30
|
+
repository: string;
|
|
31
|
+
url: string;
|
|
32
|
+
head: { repository: string; ref: string; sha: string };
|
|
33
|
+
base: { repository: string; ref: string; sha: string };
|
|
34
|
+
};
|
|
35
|
+
type PrDeliveryIdentityInput = CurrentPrDeliveryIdentityInput;
|
|
11
36
|
|
|
12
|
-
type PrDeliveryBindingSource =
|
|
13
|
-
|
|
14
|
-
| 'reused'
|
|
15
|
-
| 'explicit-bind'
|
|
16
|
-
| 'external-unique'
|
|
17
|
-
| 'external-explicit';
|
|
18
|
-
|
|
19
|
-
type PrDeliveryProvenance =
|
|
20
|
-
| 'create-post'
|
|
21
|
-
| 'reuse'
|
|
22
|
-
| 'explicit-bind'
|
|
23
|
-
| 'external-unique'
|
|
24
|
-
| 'external-explicit';
|
|
37
|
+
type PrDeliveryBindingSource = 'created' | 'reused' | 'explicit-bind' | 'external-unique' | 'external-explicit';
|
|
38
|
+
type PrDeliveryProvenance = 'create-post' | 'reuse' | 'explicit-bind' | 'external-unique' | 'external-explicit';
|
|
25
39
|
|
|
26
40
|
type PrDeliveryFact =
|
|
27
|
-
| { version:
|
|
28
|
-
| { version:
|
|
41
|
+
| { version: 2; state: 'unbound'; reason: 'initial' }
|
|
42
|
+
| { version: 2; state: 'skipped'; reason: 'explicit'; decidedAt: string }
|
|
29
43
|
| {
|
|
30
|
-
version:
|
|
44
|
+
version: 2;
|
|
31
45
|
state: 'bound';
|
|
32
46
|
identity: PrDeliveryIdentity;
|
|
33
47
|
binding: {
|
|
34
48
|
status: 'verified';
|
|
35
49
|
source: PrDeliveryBindingSource;
|
|
36
50
|
verifiedAt: string;
|
|
37
|
-
|
|
51
|
+
issueIdentity: ResourceIdentity | null;
|
|
38
52
|
remoteState: 'open' | 'closed';
|
|
39
53
|
mergedAt: string | null;
|
|
40
54
|
mergeCommitSha: string | null;
|
|
@@ -50,205 +64,174 @@ type CreationOutcome =
|
|
|
50
64
|
| { kind: 'no-op'; createdByCurrentOperation: false }
|
|
51
65
|
| { kind: 'unknown'; errorCode: 'PR_CREATE_OUTCOME_UNKNOWN' };
|
|
52
66
|
|
|
67
|
+
type PrDeliveryFactError = Error & { code: string };
|
|
53
68
|
type PrDeliveryFactReadResult =
|
|
54
69
|
| { status: 'valid'; fact: PrDeliveryFact }
|
|
55
70
|
| { status: 'missing'; fact: null }
|
|
56
|
-
| { status: 'invalid'; fact: null; error:
|
|
71
|
+
| { status: 'invalid'; fact: null; error: PrDeliveryFactError };
|
|
57
72
|
|
|
58
73
|
function factError(message: string): Error & { code: string } {
|
|
59
74
|
return Object.assign(new Error(`PR_DELIVERY_FACT_INVALID: ${message}`), { code: 'PR_DELIVERY_FACT_INVALID' });
|
|
60
75
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
return
|
|
76
|
+
function asFactError(error: unknown): PrDeliveryFactError {
|
|
77
|
+
if (error instanceof Error && typeof (error as { code?: unknown }).code === 'string') return error as PrDeliveryFactError;
|
|
78
|
+
return factError(error instanceof Error ? error.message : String(error));
|
|
64
79
|
}
|
|
65
|
-
|
|
80
|
+
function isRecord(value: unknown): value is Record<string, unknown> { return Boolean(value) && typeof value === 'object' && !Array.isArray(value); }
|
|
66
81
|
function exactKeys(value: Record<string, unknown>, keys: readonly string[], label: string): void {
|
|
67
82
|
const actual = Object.keys(value).sort();
|
|
68
83
|
const expected = [...keys].sort();
|
|
69
|
-
if (actual.length !== expected.length || actual.some((key, index) => key !== expected[index])) {
|
|
70
|
-
throw factError(`${label} has an invalid field set`);
|
|
71
|
-
}
|
|
84
|
+
if (actual.length !== expected.length || actual.some((key, index) => key !== expected[index])) throw factError(`${label} has an invalid field set`);
|
|
72
85
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
if (typeof value !== 'string' || !value || value.trim() !== value) throw factError(`${label} must be a non-empty string`);
|
|
86
|
+
function text(value: unknown, label: string, allowEmpty = false): string {
|
|
87
|
+
if (typeof value !== 'string' || (!allowEmpty && !value) || value.trim() !== value) throw factError(`${label} must be a string`);
|
|
76
88
|
return value;
|
|
77
89
|
}
|
|
78
|
-
|
|
79
|
-
function
|
|
80
|
-
|
|
90
|
+
function nullableText(value: unknown, label: string): string | null { return value === null ? null : text(value, label); }
|
|
91
|
+
function timestamp(value: unknown, label: string): string {
|
|
92
|
+
const result = text(value, label);
|
|
93
|
+
if (Number.isNaN(Date.parse(result))) throw factError(`${label} must be a valid timestamp`);
|
|
94
|
+
return new Date(result).toISOString();
|
|
81
95
|
}
|
|
82
|
-
|
|
83
96
|
function positiveNumber(value: unknown, label: string): number {
|
|
84
97
|
if (!Number.isSafeInteger(value) || (value as number) <= 0) throw factError(`${label} must be a positive integer`);
|
|
85
98
|
return value as number;
|
|
86
99
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
return result;
|
|
100
|
+
function parseRef(value: unknown, label: string): { repository: string; ref: string; sha: string } {
|
|
101
|
+
if (!isRecord(value)) throw factError(`${label} must be an object`);
|
|
102
|
+
exactKeys(value, ['repository', 'ref', 'sha'], label);
|
|
103
|
+
return { repository: text(value.repository, `${label}.repository`), ref: text(value.ref, `${label}.ref`), sha: text(value.sha, `${label}.sha`) };
|
|
92
104
|
}
|
|
93
105
|
|
|
94
|
-
function
|
|
106
|
+
function canonicalIdentity(value: unknown): PrDeliveryIdentity {
|
|
95
107
|
if (!isRecord(value)) throw factError('identity must be an object');
|
|
96
|
-
exactKeys(value, ['
|
|
97
|
-
const head = parseRef(value.head, 'head');
|
|
98
|
-
const base = parseRef(value.base, 'base');
|
|
108
|
+
exactKeys(value, ['resource', 'repository', 'url', 'head', 'base'], 'identity');
|
|
99
109
|
return {
|
|
110
|
+
resource: parseResourceIdentity(value.resource, 'identity.resource'),
|
|
100
111
|
repository: text(value.repository, 'identity.repository'),
|
|
101
|
-
number: positiveNumber(value.number, 'identity.number'),
|
|
102
|
-
nodeId: text(value.nodeId, 'identity.nodeId'),
|
|
103
112
|
url: text(value.url, 'identity.url'),
|
|
104
|
-
head,
|
|
105
|
-
base
|
|
113
|
+
head: parseRef(value.head, 'identity.head'),
|
|
114
|
+
base: parseRef(value.base, 'identity.base')
|
|
106
115
|
};
|
|
107
116
|
}
|
|
108
117
|
|
|
109
|
-
function
|
|
110
|
-
if (!isRecord(value)) throw factError(
|
|
111
|
-
|
|
118
|
+
function decodeLegacyIdentity(value: unknown): PrDeliveryIdentity {
|
|
119
|
+
if (!isRecord(value)) throw factError('legacy identity must be an object');
|
|
120
|
+
// TODO(compat): Remove the v1 identity decoder before the first stable v1.0.0 release.
|
|
121
|
+
exactKeys(value, ['repository', 'number', 'nodeId', 'url', 'head', 'base'], 'legacy identity');
|
|
122
|
+
const legacy = {
|
|
123
|
+
number: positiveNumber(value.number, 'legacy identity.number'),
|
|
124
|
+
repository: text(value.repository, 'identity.repository'),
|
|
125
|
+
nodeId: text(value.nodeId, 'legacy identity.nodeId'),
|
|
126
|
+
url: text(value.url, 'identity.url'),
|
|
127
|
+
head: parseRef(value.head, 'identity.head'),
|
|
128
|
+
base: parseRef(value.base, 'identity.base')
|
|
129
|
+
} satisfies LegacyPrDeliveryIdentity;
|
|
112
130
|
return {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
131
|
+
resource: { kind: 'number', value: legacy.number },
|
|
132
|
+
repository: legacy.repository,
|
|
133
|
+
url: legacy.url,
|
|
134
|
+
head: legacy.head,
|
|
135
|
+
base: legacy.base
|
|
116
136
|
};
|
|
117
137
|
}
|
|
118
138
|
|
|
119
|
-
function
|
|
139
|
+
function provenanceForSource(source: PrDeliveryBindingSource): PrDeliveryProvenance { return source === 'created' ? 'create-post' : source === 'reused' ? 'reuse' : source; }
|
|
140
|
+
|
|
141
|
+
function parseFact(value: unknown, runtimeVersion = VERSION): PrDeliveryFact {
|
|
120
142
|
if (!isRecord(value)) throw factError('fact must be an object');
|
|
121
|
-
if (value.version !== 1 || typeof value.state !== 'string') throw factError('version or state is invalid');
|
|
143
|
+
if ((value.version !== 1 && value.version !== 2) || typeof value.state !== 'string') throw factError('version or state is invalid');
|
|
144
|
+
if (value.version === 1 && !isLegacyCompatibilityEnabled(runtimeVersion)) {
|
|
145
|
+
throw legacyCompatibilityError('v1 PR delivery fact', runtimeVersion);
|
|
146
|
+
}
|
|
122
147
|
if (value.state === 'unbound') {
|
|
123
148
|
exactKeys(value, ['version', 'state', 'reason'], 'unbound fact');
|
|
124
149
|
if (value.reason !== 'initial') throw factError('unbound reason is invalid');
|
|
125
|
-
return { version:
|
|
150
|
+
return { version: 2, state: 'unbound', reason: 'initial' };
|
|
126
151
|
}
|
|
127
152
|
if (value.state === 'skipped') {
|
|
128
153
|
exactKeys(value, ['version', 'state', 'reason', 'decidedAt'], 'skipped fact');
|
|
129
154
|
if (value.reason !== 'explicit') throw factError('skipped reason is invalid');
|
|
130
|
-
|
|
131
|
-
if (Number.isNaN(Date.parse(decidedAt))) throw factError('skipped.decidedAt must be a valid timestamp');
|
|
132
|
-
return { version: 1, state: 'skipped', reason: 'explicit', decidedAt };
|
|
155
|
+
return { version: 2, state: 'skipped', reason: 'explicit', decidedAt: timestamp(value.decidedAt, 'skipped.decidedAt') };
|
|
133
156
|
}
|
|
134
157
|
if (value.state !== 'bound') throw factError('state is invalid');
|
|
158
|
+
if (value.version === 1) {
|
|
159
|
+
// TODO(compat): Remove this v1-to-v2 shape conversion before the first stable v1.0.0 release.
|
|
160
|
+
exactKeys(value, ['version', 'state', 'identity', 'binding', 'provenance'], 'legacy bound fact');
|
|
161
|
+
if (!isRecord(value.binding) || !isRecord(value.provenance)) throw factError('legacy binding or provenance is invalid');
|
|
162
|
+
exactKeys(value.binding, ['status', 'source', 'verifiedAt', 'issueNumber', 'remoteState', 'mergedAt', 'mergeCommitSha'], 'legacy binding');
|
|
163
|
+
const issueNumber = value.binding.issueNumber === null ? null : positiveNumber(value.binding.issueNumber, 'legacy binding.issueNumber');
|
|
164
|
+
return parseFact({
|
|
165
|
+
version: 2,
|
|
166
|
+
state: 'bound',
|
|
167
|
+
identity: decodeLegacyIdentity(value.identity),
|
|
168
|
+
binding: {
|
|
169
|
+
status: 'verified', source: value.binding.source, verifiedAt: timestamp(value.binding.verifiedAt, 'binding.verifiedAt'),
|
|
170
|
+
issueIdentity: issueNumber === null ? null : { kind: 'number', value: issueNumber }, remoteState: value.binding.remoteState,
|
|
171
|
+
mergedAt: value.binding.mergedAt === null ? null : timestamp(value.binding.mergedAt, 'binding.mergedAt'), mergeCommitSha: nullableText(value.binding.mergeCommitSha, 'binding.mergeCommitSha')
|
|
172
|
+
},
|
|
173
|
+
provenance: value.provenance
|
|
174
|
+
}, runtimeVersion);
|
|
175
|
+
}
|
|
135
176
|
exactKeys(value, ['version', 'state', 'identity', 'binding', 'provenance'], 'bound fact');
|
|
136
|
-
if (!isRecord(value.binding)) throw factError('binding
|
|
137
|
-
exactKeys(value.binding, ['status', 'source', 'verifiedAt', '
|
|
177
|
+
if (!isRecord(value.binding) || !isRecord(value.provenance)) throw factError('binding or provenance is invalid');
|
|
178
|
+
exactKeys(value.binding, ['status', 'source', 'verifiedAt', 'issueIdentity', 'remoteState', 'mergedAt', 'mergeCommitSha'], 'binding');
|
|
138
179
|
if (value.binding.status !== 'verified') throw factError('binding status is invalid');
|
|
139
180
|
const sources: readonly PrDeliveryBindingSource[] = ['created', 'reused', 'explicit-bind', 'external-unique', 'external-explicit'];
|
|
140
181
|
if (!sources.includes(value.binding.source as PrDeliveryBindingSource)) throw factError('binding source is invalid');
|
|
141
|
-
const
|
|
142
|
-
if (Number.isNaN(Date.parse(verifiedAt))) throw factError('binding.verifiedAt must be a valid timestamp');
|
|
143
|
-
const issueNumber = value.binding.issueNumber === null ? null : positiveNumber(value.binding.issueNumber, 'binding.issueNumber');
|
|
182
|
+
const issueIdentity = value.binding.issueIdentity === null ? null : parseResourceIdentity(value.binding.issueIdentity, 'binding.issueIdentity');
|
|
144
183
|
if (value.binding.remoteState !== 'open' && value.binding.remoteState !== 'closed') throw factError('binding.remoteState is invalid');
|
|
145
|
-
const mergedAt =
|
|
184
|
+
const mergedAt = value.binding.mergedAt === null ? null : timestamp(value.binding.mergedAt, 'binding.mergedAt');
|
|
146
185
|
const mergeCommitSha = nullableText(value.binding.mergeCommitSha, 'binding.mergeCommitSha');
|
|
147
186
|
if (Boolean(mergedAt) !== Boolean(mergeCommitSha)) throw factError('mergedAt and mergeCommitSha must be paired');
|
|
148
|
-
if (!isRecord(value.provenance)) throw factError('provenance must be an object');
|
|
149
187
|
exactKeys(value.provenance, ['establishedBy'], 'provenance');
|
|
150
|
-
const
|
|
151
|
-
if (!
|
|
152
|
-
if (value.provenance.establishedBy !== provenanceForSource(value.binding.source as PrDeliveryBindingSource))
|
|
153
|
-
throw factError('binding.source and provenance.establishedBy do not match');
|
|
154
|
-
}
|
|
188
|
+
const provenances: readonly PrDeliveryProvenance[] = ['create-post', 'reuse', 'explicit-bind', 'external-unique', 'external-explicit'];
|
|
189
|
+
if (!provenances.includes(value.provenance.establishedBy as PrDeliveryProvenance)) throw factError('provenance.establishedBy is invalid');
|
|
190
|
+
if (value.provenance.establishedBy !== provenanceForSource(value.binding.source as PrDeliveryBindingSource)) throw factError('binding.source and provenance.establishedBy do not match');
|
|
155
191
|
return {
|
|
156
|
-
version:
|
|
157
|
-
|
|
158
|
-
identity: parseIdentity(value.identity),
|
|
159
|
-
binding: {
|
|
160
|
-
status: 'verified',
|
|
161
|
-
source: value.binding.source as PrDeliveryBindingSource,
|
|
162
|
-
verifiedAt,
|
|
163
|
-
issueNumber,
|
|
164
|
-
remoteState: value.binding.remoteState,
|
|
165
|
-
mergedAt,
|
|
166
|
-
mergeCommitSha
|
|
167
|
-
},
|
|
192
|
+
version: 2, state: 'bound', identity: canonicalIdentity(value.identity),
|
|
193
|
+
binding: { status: 'verified', source: value.binding.source as PrDeliveryBindingSource, verifiedAt: timestamp(value.binding.verifiedAt, 'binding.verifiedAt'), issueIdentity, remoteState: value.binding.remoteState, mergedAt, mergeCommitSha },
|
|
168
194
|
provenance: { establishedBy: value.provenance.establishedBy as PrDeliveryProvenance }
|
|
169
195
|
};
|
|
170
196
|
}
|
|
171
197
|
|
|
172
|
-
function decodePrDeliveryFact(value: unknown): PrDeliveryFact {
|
|
198
|
+
function decodePrDeliveryFact(value: unknown, runtimeVersion = VERSION): PrDeliveryFact {
|
|
173
199
|
if (typeof value === 'string') {
|
|
174
|
-
|
|
175
|
-
|
|
200
|
+
let decoded: unknown;
|
|
201
|
+
try { decoded = JSON.parse(value); }
|
|
202
|
+
catch { throw factError('value is not valid JSON'); }
|
|
203
|
+
return parseFact(decoded, runtimeVersion);
|
|
176
204
|
}
|
|
177
|
-
return parseFact(value);
|
|
205
|
+
return parseFact(value, runtimeVersion);
|
|
178
206
|
}
|
|
179
|
-
|
|
180
|
-
function
|
|
181
|
-
return JSON.stringify(parseFact(fact));
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
function readPrDeliveryFact(metadata: Record<string, unknown>): PrDeliveryFactReadResult {
|
|
207
|
+
function encodePrDeliveryFact(fact: PrDeliveryFact): string { return JSON.stringify(parseFact(fact)); }
|
|
208
|
+
function readPrDeliveryFact(metadata: Record<string, unknown>, runtimeVersion = VERSION): PrDeliveryFactReadResult {
|
|
185
209
|
if (!Object.hasOwn(metadata, PR_DELIVERY_FACT_KEY) || metadata[PR_DELIVERY_FACT_KEY] === '') return { status: 'missing', fact: null };
|
|
186
|
-
try { return { status: 'valid', fact: decodePrDeliveryFact(metadata[PR_DELIVERY_FACT_KEY]) }; }
|
|
187
|
-
catch (error) { return { status: 'invalid', fact: null, error:
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
function buildUnboundFact(): PrDeliveryFact {
|
|
191
|
-
return { version: 1, state: 'unbound', reason: 'initial' };
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
function buildSkippedFact(decidedAt: string): PrDeliveryFact {
|
|
195
|
-
return parseFact({ version: 1, state: 'skipped', reason: 'explicit', decidedAt });
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
function provenanceForSource(source: PrDeliveryBindingSource): PrDeliveryProvenance {
|
|
199
|
-
return source === 'created' ? 'create-post' : source === 'reused' ? 'reuse' : source;
|
|
210
|
+
try { return { status: 'valid', fact: decodePrDeliveryFact(metadata[PR_DELIVERY_FACT_KEY], runtimeVersion) }; }
|
|
211
|
+
catch (error) { return { status: 'invalid', fact: null, error: asFactError(error) }; }
|
|
200
212
|
}
|
|
213
|
+
function buildUnboundFact(): PrDeliveryFact { return { version: 2, state: 'unbound', reason: 'initial' }; }
|
|
214
|
+
function buildSkippedFact(decidedAt: string): PrDeliveryFact { return parseFact({ version: 2, state: 'skipped', reason: 'explicit', decidedAt }); }
|
|
201
215
|
|
|
202
216
|
function buildBoundFact(input: {
|
|
203
|
-
identity:
|
|
217
|
+
identity: CurrentPrDeliveryIdentityInput;
|
|
204
218
|
source: PrDeliveryBindingSource;
|
|
205
219
|
verifiedAt: string;
|
|
206
|
-
|
|
220
|
+
issueIdentity?: ResourceIdentity | null;
|
|
207
221
|
remoteState: 'open' | 'closed';
|
|
208
222
|
mergedAt?: string | null;
|
|
209
223
|
mergeCommitSha?: string | null;
|
|
210
224
|
}): PrDeliveryFact {
|
|
211
|
-
return parseFact({
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
status: 'verified',
|
|
217
|
-
source: input.source,
|
|
218
|
-
verifiedAt: input.verifiedAt,
|
|
219
|
-
issueNumber: input.issueNumber ?? null,
|
|
220
|
-
remoteState: input.remoteState,
|
|
221
|
-
mergedAt: input.mergedAt ?? null,
|
|
222
|
-
mergeCommitSha: input.mergeCommitSha ?? null
|
|
223
|
-
},
|
|
224
|
-
provenance: { establishedBy: provenanceForSource(input.source) }
|
|
225
|
-
});
|
|
225
|
+
return parseFact({ version: 2, state: 'bound', identity: input.identity, binding: {
|
|
226
|
+
status: 'verified', source: input.source, verifiedAt: input.verifiedAt,
|
|
227
|
+
issueIdentity: input.issueIdentity === undefined ? null : input.issueIdentity,
|
|
228
|
+
remoteState: input.remoteState, mergedAt: input.mergedAt ?? null, mergeCommitSha: input.mergeCommitSha ?? null
|
|
229
|
+
}, provenance: { establishedBy: provenanceForSource(input.source) } });
|
|
226
230
|
}
|
|
227
|
-
|
|
228
|
-
function
|
|
229
|
-
return
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
function identityFromPullRequest(pullRequest: PrDeliveryIdentity): PrDeliveryIdentity {
|
|
233
|
-
return parseIdentity(pullRequest);
|
|
231
|
+
function factFrontmatterMutation(fact: PrDeliveryFact): { set: { [PR_DELIVERY_FACT_KEY]: string } } { return { set: { [PR_DELIVERY_FACT_KEY]: encodePrDeliveryFact(fact) } }; }
|
|
232
|
+
function identityFromPullRequest(pullRequest: PrDeliveryIdentityInput): PrDeliveryIdentity {
|
|
233
|
+
return canonicalIdentity(pullRequest);
|
|
234
234
|
}
|
|
235
235
|
|
|
236
|
-
export {
|
|
237
|
-
|
|
238
|
-
buildBoundFact,
|
|
239
|
-
buildSkippedFact,
|
|
240
|
-
buildUnboundFact,
|
|
241
|
-
decodePrDeliveryFact,
|
|
242
|
-
encodePrDeliveryFact,
|
|
243
|
-
factFrontmatterMutation,
|
|
244
|
-
identityFromPullRequest,
|
|
245
|
-
readPrDeliveryFact
|
|
246
|
-
};
|
|
247
|
-
export type {
|
|
248
|
-
CreationOutcome,
|
|
249
|
-
PrDeliveryBindingSource,
|
|
250
|
-
PrDeliveryFact,
|
|
251
|
-
PrDeliveryFactReadResult,
|
|
252
|
-
PrDeliveryIdentity,
|
|
253
|
-
PrDeliveryProvenance
|
|
254
|
-
};
|
|
236
|
+
export { PR_DELIVERY_FACT_KEY, buildBoundFact, buildSkippedFact, buildUnboundFact, decodePrDeliveryFact, encodePrDeliveryFact, factFrontmatterMutation, identityFromPullRequest, readPrDeliveryFact, serializeResourceIdentity };
|
|
237
|
+
export type { CreationOutcome, PrDeliveryBindingSource, PrDeliveryFact, PrDeliveryFactError, PrDeliveryFactReadResult, PrDeliveryIdentity, PrDeliveryIdentityInput, PrDeliveryProvenance };
|