agent-control-plane 0.1.0
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/LICENSE +21 -0
- package/README.md +589 -0
- package/SKILL.md +149 -0
- package/assets/workflow-catalog.json +57 -0
- package/bin/audit-issue-routing.sh +74 -0
- package/bin/issue-resource-class.sh +58 -0
- package/bin/label-follow-up-issues.sh +114 -0
- package/bin/pr-risk.sh +532 -0
- package/bin/sync-pr-labels.sh +112 -0
- package/hooks/heartbeat-hooks.sh +573 -0
- package/hooks/issue-reconcile-hooks.sh +217 -0
- package/hooks/pr-reconcile-hooks.sh +225 -0
- package/npm/bin/agent-control-plane.js +1984 -0
- package/npm/public-bin/agent-control-plane +3 -0
- package/package.json +61 -0
- package/tools/bin/agent-cleanup-worktree +247 -0
- package/tools/bin/agent-github-update-labels +66 -0
- package/tools/bin/agent-init-worktree +216 -0
- package/tools/bin/agent-project-archive-run +52 -0
- package/tools/bin/agent-project-capture-worker +46 -0
- package/tools/bin/agent-project-catch-up-merged-prs +137 -0
- package/tools/bin/agent-project-cleanup-session +244 -0
- package/tools/bin/agent-project-detached-launch +107 -0
- package/tools/bin/agent-project-heartbeat-loop +2347 -0
- package/tools/bin/agent-project-open-issue-worktree +89 -0
- package/tools/bin/agent-project-open-pr-worktree +80 -0
- package/tools/bin/agent-project-publish-issue-pr +349 -0
- package/tools/bin/agent-project-reconcile-issue-session +1128 -0
- package/tools/bin/agent-project-reconcile-pr-session +1005 -0
- package/tools/bin/agent-project-retry-state +147 -0
- package/tools/bin/agent-project-run-claude-session +657 -0
- package/tools/bin/agent-project-run-codex-resilient +718 -0
- package/tools/bin/agent-project-run-codex-session +316 -0
- package/tools/bin/agent-project-run-kilo-session +27 -0
- package/tools/bin/agent-project-run-openclaw-session +984 -0
- package/tools/bin/agent-project-run-opencode-session +27 -0
- package/tools/bin/agent-project-sync-anchor-repo +128 -0
- package/tools/bin/agent-project-worker-status +143 -0
- package/tools/bin/audit-agent-worktrees.sh +310 -0
- package/tools/bin/audit-issue-routing.sh +11 -0
- package/tools/bin/audit-retained-layout.sh +58 -0
- package/tools/bin/audit-retained-overlap.sh +135 -0
- package/tools/bin/audit-retained-worktrees.sh +228 -0
- package/tools/bin/branch-verification-guard.sh +351 -0
- package/tools/bin/capture-worker.sh +18 -0
- package/tools/bin/check-skill-contracts.sh +324 -0
- package/tools/bin/cleanup-worktree.sh +44 -0
- package/tools/bin/codex-quota +31 -0
- package/tools/bin/create-follow-up-issue.sh +114 -0
- package/tools/bin/dashboard-launchd-bootstrap.sh +38 -0
- package/tools/bin/flow-config-lib.sh +2127 -0
- package/tools/bin/flow-resident-worker-lib.sh +683 -0
- package/tools/bin/flow-runtime-doctor.sh +97 -0
- package/tools/bin/flow-shell-lib.sh +266 -0
- package/tools/bin/heartbeat-recovery-preflight.sh +106 -0
- package/tools/bin/heartbeat-safe-auto.sh +551 -0
- package/tools/bin/install-dashboard-launchd.sh +152 -0
- package/tools/bin/install-project-launchd.sh +219 -0
- package/tools/bin/issue-publish-scope-guard.sh +242 -0
- package/tools/bin/issue-requires-local-workspace-install.sh +31 -0
- package/tools/bin/issue-resource-class.sh +12 -0
- package/tools/bin/kick-scheduler.sh +75 -0
- package/tools/bin/label-follow-up-issues.sh +14 -0
- package/tools/bin/new-pr-worktree.sh +50 -0
- package/tools/bin/new-worktree.sh +49 -0
- package/tools/bin/pr-risk.sh +12 -0
- package/tools/bin/prepare-worktree.sh +140 -0
- package/tools/bin/profile-activate.sh +109 -0
- package/tools/bin/profile-adopt.sh +219 -0
- package/tools/bin/profile-smoke.sh +461 -0
- package/tools/bin/project-init.sh +189 -0
- package/tools/bin/project-launchd-bootstrap.sh +54 -0
- package/tools/bin/project-remove.sh +155 -0
- package/tools/bin/project-runtime-supervisor.sh +56 -0
- package/tools/bin/project-runtimectl.sh +586 -0
- package/tools/bin/provider-cooldown-state.sh +166 -0
- package/tools/bin/publish-issue-worker.sh +31 -0
- package/tools/bin/reconcile-issue-worker.sh +34 -0
- package/tools/bin/reconcile-pr-worker.sh +34 -0
- package/tools/bin/record-verification.sh +71 -0
- package/tools/bin/render-architecture-infographics.sh +110 -0
- package/tools/bin/render-dashboard-demo-media.sh +333 -0
- package/tools/bin/render-dashboard-snapshot.py +16 -0
- package/tools/bin/render-flow-config.sh +86 -0
- package/tools/bin/retry-state.sh +31 -0
- package/tools/bin/reuse-issue-worktree.sh +75 -0
- package/tools/bin/run-codex-bypass.sh +3 -0
- package/tools/bin/run-codex-safe.sh +3 -0
- package/tools/bin/run-codex-task.sh +231 -0
- package/tools/bin/scaffold-profile.sh +374 -0
- package/tools/bin/serve-dashboard.sh +5 -0
- package/tools/bin/split-retained-slice.sh +124 -0
- package/tools/bin/start-issue-worker.sh +796 -0
- package/tools/bin/start-pr-fix-worker.sh +458 -0
- package/tools/bin/start-pr-merge-repair-worker.sh +8 -0
- package/tools/bin/start-pr-review-worker.sh +227 -0
- package/tools/bin/start-resident-issue-loop.sh +908 -0
- package/tools/bin/sync-agent-repo.sh +52 -0
- package/tools/bin/sync-dependency-baseline.sh +247 -0
- package/tools/bin/sync-pr-labels.sh +12 -0
- package/tools/bin/sync-recurring-issue-checklist.sh +274 -0
- package/tools/bin/sync-shared-agent-home.sh +214 -0
- package/tools/bin/sync-vscode-workspace.sh +157 -0
- package/tools/bin/test-smoke.sh +63 -0
- package/tools/bin/uninstall-project-launchd.sh +55 -0
- package/tools/bin/update-github-labels.sh +14 -0
- package/tools/bin/worker-status.sh +19 -0
- package/tools/bin/workflow-catalog.sh +77 -0
- package/tools/dashboard/app.js +286 -0
- package/tools/dashboard/dashboard_snapshot.py +466 -0
- package/tools/dashboard/index.html +41 -0
- package/tools/dashboard/server.py +64 -0
- package/tools/dashboard/styles.css +351 -0
- package/tools/templates/issue-prompt-template.md +109 -0
- package/tools/templates/pr-fix-template.md +120 -0
- package/tools/templates/pr-merge-repair-template.md +91 -0
- package/tools/templates/pr-review-template.md +62 -0
- package/tools/templates/scheduled-issue-prompt-template.md +62 -0
- package/tools/tests/test-agent-control-plane-npm-cli.sh +279 -0
- package/tools/tests/test-agent-github-update-labels-falls-back-to-repository-id.sh +56 -0
- package/tools/tests/test-agent-project-claude-session-wrapper-clears-stale-sandbox-artifacts.sh +89 -0
- package/tools/tests/test-agent-project-claude-session-wrapper-does-not-retry-provider-quota.sh +82 -0
- package/tools/tests/test-agent-project-claude-session-wrapper-retries-transient-failures.sh +90 -0
- package/tools/tests/test-agent-project-claude-session-wrapper-times-out.sh +73 -0
- package/tools/tests/test-agent-project-claude-session-wrapper.sh +103 -0
- package/tools/tests/test-agent-project-cleanup-session-orphan-fallback.sh +90 -0
- package/tools/tests/test-agent-project-cleanup-session-skip-worktree-cleanup.sh +90 -0
- package/tools/tests/test-agent-project-codex-live-thread-persist.sh +76 -0
- package/tools/tests/test-agent-project-codex-recovery.sh +731 -0
- package/tools/tests/test-agent-project-codex-session-wrapper-clears-stale-sandbox-artifacts.sh +105 -0
- package/tools/tests/test-agent-project-codex-session-wrapper.sh +97 -0
- package/tools/tests/test-agent-project-open-pr-worktree-config-prefix.sh +81 -0
- package/tools/tests/test-agent-project-openclaw-session-wrapper-clears-stale-sandbox-artifacts.sh +109 -0
- package/tools/tests/test-agent-project-openclaw-session-wrapper-infers-blocked-result-contract.sh +89 -0
- package/tools/tests/test-agent-project-openclaw-session-wrapper-recovers-literal-env-artifacts.sh +113 -0
- package/tools/tests/test-agent-project-openclaw-session-wrapper-recovers-version-mismatch.sh +135 -0
- package/tools/tests/test-agent-project-openclaw-session-wrapper-resident.sh +179 -0
- package/tools/tests/test-agent-project-openclaw-session-wrapper-reuses-existing-agent-after-add-race.sh +119 -0
- package/tools/tests/test-agent-project-openclaw-session-wrapper-terminates-rate-limit-hang.sh +91 -0
- package/tools/tests/test-agent-project-openclaw-session-wrapper.sh +117 -0
- package/tools/tests/test-agent-project-publish-issue-pr-prunes-stale-worktree-entry.sh +148 -0
- package/tools/tests/test-agent-project-publish-issue-pr-reads-archived-session.sh +146 -0
- package/tools/tests/test-agent-project-publish-issue-pr-recovers-final-head.sh +145 -0
- package/tools/tests/test-agent-project-publish-issue-pr-reuses-existing-worktree.sh +147 -0
- package/tools/tests/test-agent-project-reconcile-failure-reason.sh +456 -0
- package/tools/tests/test-agent-project-reconcile-issue-archived-session-fallback.sh +96 -0
- package/tools/tests/test-agent-project-reconcile-issue-before-blocked.sh +90 -0
- package/tools/tests/test-agent-project-reconcile-issue-host-verification-recovery-uses-recovered-worktree.sh +212 -0
- package/tools/tests/test-agent-project-reconcile-issue-host-verification-recovery.sh +207 -0
- package/tools/tests/test-agent-project-reconcile-issue-provider-quota-schedules-provider-cooldown.sh +101 -0
- package/tools/tests/test-agent-project-reconcile-issue-session-backfills-lane-metadata-from-worker-key.sh +113 -0
- package/tools/tests/test-agent-project-reconcile-issue-session-clears-stale-failed-summary.sh +117 -0
- package/tools/tests/test-agent-project-reconcile-issue-session-initializes-shared-agent-home.sh +55 -0
- package/tools/tests/test-agent-project-reconcile-issue-session-normalizes-runner-state.sh +125 -0
- package/tools/tests/test-agent-project-reconcile-issue-session-records-invalid-contract-summary.sh +118 -0
- package/tools/tests/test-agent-project-reconcile-issue-session-skips-duplicate-blocked-comment.sh +144 -0
- package/tools/tests/test-agent-project-reconcile-issue-session-standardizes-no-commits-blocker.sh +145 -0
- package/tools/tests/test-agent-project-reconcile-issue-session-synthesizes-blocked-comment.sh +139 -0
- package/tools/tests/test-agent-project-reconcile-pr-blocked-host-recovery.sh +242 -0
- package/tools/tests/test-agent-project-reconcile-pr-guard-blocked-no-commit.sh +142 -0
- package/tools/tests/test-agent-project-reconcile-pr-provider-quota-schedules-provider-cooldown.sh +106 -0
- package/tools/tests/test-agent-project-reconcile-pr-session-initializes-shared-agent-home.sh +66 -0
- package/tools/tests/test-agent-project-reconcile-pr-updated-branch-noop.sh +129 -0
- package/tools/tests/test-audit-agent-worktrees-active-launch-skips-git-inspection.sh +69 -0
- package/tools/tests/test-audit-agent-worktrees-broken-worktree.sh +43 -0
- package/tools/tests/test-audit-agent-worktrees-pending-launch-owner.sh +46 -0
- package/tools/tests/test-audit-agent-worktrees-unreconciled-owner.sh +79 -0
- package/tools/tests/test-audit-issue-routing-managed-branch-globs.sh +56 -0
- package/tools/tests/test-branch-verification-guard-generated-artifacts.sh +72 -0
- package/tools/tests/test-branch-verification-guard-targeted-coverage.sh +125 -0
- package/tools/tests/test-codex-quota-manager-failure-driven-rotation.sh +178 -0
- package/tools/tests/test-codex-quota-wrapper.sh +37 -0
- package/tools/tests/test-contribution-docs.sh +18 -0
- package/tools/tests/test-control-plane-dashboard-runtime-smoke.sh +343 -0
- package/tools/tests/test-create-follow-up-issue.sh +73 -0
- package/tools/tests/test-dashboard-launchd-bootstrap.sh +55 -0
- package/tools/tests/test-flow-export-execution-env-exports-repo-id.sh +30 -0
- package/tools/tests/test-flow-export-github-cli-auth-env-prefers-git-credential.sh +48 -0
- package/tools/tests/test-flow-github-api-repo-fallback-preserves-input.sh +85 -0
- package/tools/tests/test-flow-github-api-repo-prefers-explicit-repository-id.sh +60 -0
- package/tools/tests/test-flow-github-issue-list-falls-back-to-repository-id.sh +64 -0
- package/tools/tests/test-flow-github-pr-list-falls-back-to-repository-id.sh +77 -0
- package/tools/tests/test-flow-resident-can-reuse-does-not-leak-metadata.sh +52 -0
- package/tools/tests/test-flow-resident-reap-stale-controllers.sh +63 -0
- package/tools/tests/test-flow-resolve-codex-quota-tools.sh +104 -0
- package/tools/tests/test-flow-runtime-doctor-profile-selection.sh +27 -0
- package/tools/tests/test-heartbeat-codex-pr-linked-issue-exclusion.sh +79 -0
- package/tools/tests/test-heartbeat-hooks-enqueue-resident-issue-for-idle-controller.sh +115 -0
- package/tools/tests/test-heartbeat-hooks-enqueue-resident-issue-for-live-lane-controller.sh +117 -0
- package/tools/tests/test-heartbeat-hooks-start-resident-issue-loop-claude.sh +96 -0
- package/tools/tests/test-heartbeat-hooks-start-resident-issue-loop-codex.sh +96 -0
- package/tools/tests/test-heartbeat-hooks-start-resident-issue-loop.sh +96 -0
- package/tools/tests/test-heartbeat-loop-auth-wait-does-not-consume-capacity.sh +170 -0
- package/tools/tests/test-heartbeat-loop-blocked-recovery-lane.sh +201 -0
- package/tools/tests/test-heartbeat-loop-blocked-recovery-vs-pr-reservation.sh +201 -0
- package/tools/tests/test-heartbeat-loop-idle-resident-controller-does-not-block-launches.sh +160 -0
- package/tools/tests/test-heartbeat-loop-pr-launch-dedup.sh +133 -0
- package/tools/tests/test-heartbeat-loop-provider-cooldown-suppresses-launches.sh +157 -0
- package/tools/tests/test-heartbeat-loop-reaps-stale-resident-controller.sh +181 -0
- package/tools/tests/test-heartbeat-loop-waiting-provider-resident-controller-does-not-block-launches.sh +160 -0
- package/tools/tests/test-heartbeat-ready-issues-blocked-recovery.sh +134 -0
- package/tools/tests/test-heartbeat-safe-auto-dynamic-concurrency.sh +162 -0
- package/tools/tests/test-heartbeat-safe-auto-no-tmux-sessions.sh +136 -0
- package/tools/tests/test-heartbeat-safe-auto-openclaw-skips-codex-quota.sh +139 -0
- package/tools/tests/test-heartbeat-safe-auto-quota-health-signal.sh +119 -0
- package/tools/tests/test-heartbeat-safe-auto-stale-shared-loop-pid-does-not-skip.sh +140 -0
- package/tools/tests/test-heartbeat-safe-auto-static-capacity-without-quota-cache.sh +142 -0
- package/tools/tests/test-heartbeat-safe-auto-zero-healthy-pools.sh +141 -0
- package/tools/tests/test-heartbeat-sync-issue-labels-empty-schedule.sh +65 -0
- package/tools/tests/test-heartbeat-sync-open-agent-prs-terminal-clears-running.sh +179 -0
- package/tools/tests/test-install-dashboard-launchd.sh +78 -0
- package/tools/tests/test-install-project-launchd-adds-tool-paths.sh +87 -0
- package/tools/tests/test-install-project-launchd.sh +110 -0
- package/tools/tests/test-issue-local-workspace-install-policy.sh +81 -0
- package/tools/tests/test-issue-publish-scope-guard-docs-signal.sh +70 -0
- package/tools/tests/test-issue-reconcile-hooks-success-clears-blocked.sh +36 -0
- package/tools/tests/test-kick-scheduler-requires-explicit-profile.sh +47 -0
- package/tools/tests/test-label-follow-up-issues-falls-back-to-repository-id.sh +132 -0
- package/tools/tests/test-manual-operator-entrypoints-require-explicit-profile.sh +64 -0
- package/tools/tests/test-package-funding-metadata.sh +21 -0
- package/tools/tests/test-package-public-metadata.sh +62 -0
- package/tools/tests/test-placeholder-worker-adapters.sh +38 -0
- package/tools/tests/test-pr-reconcile-hooks-refreshes-recurring-issue-checklist.sh +110 -0
- package/tools/tests/test-pr-risk-cohesive-mobile-locale-scope.sh +70 -0
- package/tools/tests/test-pr-risk-fix-label-semantics.sh +114 -0
- package/tools/tests/test-pr-risk-local-first-no-checks.sh +70 -0
- package/tools/tests/test-prepare-worktree-simple-repo-baseline.sh +67 -0
- package/tools/tests/test-profile-activate.sh +33 -0
- package/tools/tests/test-profile-adopt-allow-missing-repo.sh +68 -0
- package/tools/tests/test-profile-adopt-skip-workspace-sync-missing-file.sh +61 -0
- package/tools/tests/test-profile-adopt-syncs-anchor-and-workspace.sh +90 -0
- package/tools/tests/test-profile-smoke-collision.sh +44 -0
- package/tools/tests/test-profile-smoke-invalid-claude-config.sh +31 -0
- package/tools/tests/test-profile-smoke-invalid-provider-pool.sh +68 -0
- package/tools/tests/test-profile-smoke-repo-slug-mismatch.sh +36 -0
- package/tools/tests/test-profile-smoke.sh +45 -0
- package/tools/tests/test-project-init-force-and-skip-sync.sh +61 -0
- package/tools/tests/test-project-init-repo-slug-mismatch.sh +29 -0
- package/tools/tests/test-project-init.sh +66 -0
- package/tools/tests/test-project-launchd-bootstrap.sh +66 -0
- package/tools/tests/test-project-remove.sh +150 -0
- package/tools/tests/test-project-runtime-supervisor.sh +47 -0
- package/tools/tests/test-project-runtimectl-launchd.sh +115 -0
- package/tools/tests/test-project-runtimectl-missing-profile.sh +54 -0
- package/tools/tests/test-project-runtimectl-start-falls-back-to-bootstrap.sh +108 -0
- package/tools/tests/test-project-runtimectl-status-reports-supervisor-as-heartbeat-parent.sh +95 -0
- package/tools/tests/test-project-runtimectl-status-supervisor-running.sh +59 -0
- package/tools/tests/test-project-runtimectl-stop-cancels-pending-kick.sh +85 -0
- package/tools/tests/test-project-runtimectl-stop-clears-running-labels.sh +78 -0
- package/tools/tests/test-project-runtimectl.sh +212 -0
- package/tools/tests/test-provider-cooldown-state-prefers-runtime-worker-context.sh +39 -0
- package/tools/tests/test-provider-cooldown-state.sh +59 -0
- package/tools/tests/test-public-repo-docs.sh +159 -0
- package/tools/tests/test-reconcile-pr-worker-acp-config-routing.sh +75 -0
- package/tools/tests/test-render-dashboard-snapshot.sh +149 -0
- package/tools/tests/test-render-flow-config-demo-profile.sh +36 -0
- package/tools/tests/test-render-flow-config-provider-pool-fallback.sh +81 -0
- package/tools/tests/test-render-flow-config.sh +52 -0
- package/tools/tests/test-run-codex-task-claude-routing.sh +125 -0
- package/tools/tests/test-run-codex-task-codex-resident-routing.sh +108 -0
- package/tools/tests/test-run-codex-task-kilo-routing.sh +98 -0
- package/tools/tests/test-run-codex-task-openclaw-resident-routing.sh +117 -0
- package/tools/tests/test-run-codex-task-openclaw-routing.sh +113 -0
- package/tools/tests/test-run-codex-task-opencode-routing.sh +98 -0
- package/tools/tests/test-run-codex-task-provider-pool-fallback-routing.sh +146 -0
- package/tools/tests/test-scaffold-profile.sh +108 -0
- package/tools/tests/test-serve-dashboard.sh +93 -0
- package/tools/tests/test-start-issue-worker-blocked-context.sh +129 -0
- package/tools/tests/test-start-issue-worker-blocks-complete-recurring-checklist.sh +189 -0
- package/tools/tests/test-start-issue-worker-local-install-routing.sh +157 -0
- package/tools/tests/test-start-issue-worker-profile-template-routing.sh +149 -0
- package/tools/tests/test-start-issue-worker-recurring-resident-reuse-codex.sh +212 -0
- package/tools/tests/test-start-issue-worker-recurring-resident-reuse.sh +219 -0
- package/tools/tests/test-start-issue-worker-renders-verification-snippet.sh +155 -0
- package/tools/tests/test-start-issue-worker-resident-reuse-falls-back-to-new-worktree.sh +199 -0
- package/tools/tests/test-start-pr-fix-worker-host-blocker-context.sh +275 -0
- package/tools/tests/test-start-resident-issue-loop-adopts-next-recurring-issue.sh +185 -0
- package/tools/tests/test-start-resident-issue-loop-clears-pending-while-waiting-due.sh +152 -0
- package/tools/tests/test-start-resident-issue-loop-consumes-queued-lease.sh +186 -0
- package/tools/tests/test-start-resident-issue-loop-fails-over-provider-pool.sh +212 -0
- package/tools/tests/test-start-resident-issue-loop-immediate-cycles.sh +148 -0
- package/tools/tests/test-start-resident-issue-loop-waits-for-provider.sh +194 -0
- package/tools/tests/test-start-resident-issue-loop-waits-for-terminal-reconcile-status.sh +198 -0
- package/tools/tests/test-start-resident-issue-loop-yields-to-live-lane-controller.sh +145 -0
- package/tools/tests/test-sync-pr-labels-fix-lane-uses-repair-queued.sh +67 -0
- package/tools/tests/test-sync-recurring-issue-checklist-backfills-workflow-complete-blocker.sh +70 -0
- package/tools/tests/test-sync-recurring-issue-checklist.sh +95 -0
- package/tools/tests/test-sync-shared-agent-home-local-source-root.sh +66 -0
- package/tools/tests/test-sync-shared-agent-home-preserves-unrelated-workflow-catalog-skill.sh +47 -0
- package/tools/tests/test-test-smoke.sh +86 -0
- package/tools/tests/test-uninstall-project-launchd.sh +37 -0
- package/tools/tests/test-update-github-labels-prefers-sibling-helper.sh +49 -0
- package/tools/tests/test-workflow-catalog.sh +43 -0
- package/tools/vendor/codex-quota/LICENSE +21 -0
- package/tools/vendor/codex-quota/README.md +459 -0
- package/tools/vendor/codex-quota/codex-quota.js +261 -0
- package/tools/vendor/codex-quota/lib/claude-accounts.js +226 -0
- package/tools/vendor/codex-quota/lib/claude-oauth.js +174 -0
- package/tools/vendor/codex-quota/lib/claude-tokens.js +471 -0
- package/tools/vendor/codex-quota/lib/claude-usage.js +929 -0
- package/tools/vendor/codex-quota/lib/codex-accounts.js +205 -0
- package/tools/vendor/codex-quota/lib/codex-tokens.js +326 -0
- package/tools/vendor/codex-quota/lib/codex-usage.js +32 -0
- package/tools/vendor/codex-quota/lib/color.js +72 -0
- package/tools/vendor/codex-quota/lib/constants.js +57 -0
- package/tools/vendor/codex-quota/lib/container.js +143 -0
- package/tools/vendor/codex-quota/lib/display.js +1111 -0
- package/tools/vendor/codex-quota/lib/fs.js +63 -0
- package/tools/vendor/codex-quota/lib/handlers.js +2060 -0
- package/tools/vendor/codex-quota/lib/jwt.js +33 -0
- package/tools/vendor/codex-quota/lib/oauth.js +486 -0
- package/tools/vendor/codex-quota/lib/paths.js +34 -0
- package/tools/vendor/codex-quota/lib/prompts.js +44 -0
- package/tools/vendor/codex-quota/lib/sync.js +1438 -0
- package/tools/vendor/codex-quota/lib/token-match.js +96 -0
- package/tools/vendor/codex-quota-manager/scripts/auto-switch.sh +500 -0
- package/tools/vendor/codex-quota-manager/scripts/batch-add.sh +123 -0
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
--bg: #f4f3ee;
|
|
3
|
+
--panel: #fffdf7;
|
|
4
|
+
--panel-strong: #f8f4e6;
|
|
5
|
+
--ink: #192126;
|
|
6
|
+
--muted: #5a6872;
|
|
7
|
+
--line: #d7d0c0;
|
|
8
|
+
--accent: #0f766e;
|
|
9
|
+
--accent-soft: #d8f1ec;
|
|
10
|
+
--warn: #a16207;
|
|
11
|
+
--warn-soft: #fce7b2;
|
|
12
|
+
--danger: #b42318;
|
|
13
|
+
--danger-soft: #fdd8d2;
|
|
14
|
+
--shadow: 0 18px 50px rgba(25, 33, 38, 0.08);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
* {
|
|
18
|
+
box-sizing: border-box;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
body {
|
|
22
|
+
margin: 0;
|
|
23
|
+
font-family: "Iowan Old Style", "Palatino Linotype", "Book Antiqua", serif;
|
|
24
|
+
background:
|
|
25
|
+
radial-gradient(circle at top right, rgba(15, 118, 110, 0.08), transparent 34%),
|
|
26
|
+
linear-gradient(180deg, #faf7ef 0%, var(--bg) 100%);
|
|
27
|
+
color: var(--ink);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.page {
|
|
31
|
+
max-width: 1440px;
|
|
32
|
+
margin: 0 auto;
|
|
33
|
+
padding: 32px 20px 48px;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.hero {
|
|
37
|
+
display: flex;
|
|
38
|
+
justify-content: space-between;
|
|
39
|
+
gap: 24px;
|
|
40
|
+
align-items: flex-start;
|
|
41
|
+
padding: 24px;
|
|
42
|
+
border: 1px solid var(--line);
|
|
43
|
+
border-radius: 28px;
|
|
44
|
+
background: rgba(255, 253, 247, 0.92);
|
|
45
|
+
box-shadow: var(--shadow);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.eyebrow {
|
|
49
|
+
margin: 0 0 8px;
|
|
50
|
+
text-transform: uppercase;
|
|
51
|
+
letter-spacing: 0.08em;
|
|
52
|
+
font-size: 12px;
|
|
53
|
+
color: var(--accent);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.hero h1 {
|
|
57
|
+
margin: 0;
|
|
58
|
+
font-size: clamp(34px, 5vw, 56px);
|
|
59
|
+
line-height: 0.95;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.subtitle {
|
|
63
|
+
max-width: 760px;
|
|
64
|
+
margin: 16px 0 0;
|
|
65
|
+
color: var(--muted);
|
|
66
|
+
font-size: 18px;
|
|
67
|
+
line-height: 1.45;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.hero-actions {
|
|
71
|
+
min-width: 220px;
|
|
72
|
+
display: flex;
|
|
73
|
+
flex-direction: column;
|
|
74
|
+
gap: 14px;
|
|
75
|
+
align-items: flex-end;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
button {
|
|
79
|
+
appearance: none;
|
|
80
|
+
border: 0;
|
|
81
|
+
border-radius: 999px;
|
|
82
|
+
padding: 12px 18px;
|
|
83
|
+
font: inherit;
|
|
84
|
+
background: var(--ink);
|
|
85
|
+
color: white;
|
|
86
|
+
cursor: pointer;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
button:hover {
|
|
90
|
+
background: #0f1720;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.meta {
|
|
94
|
+
text-align: right;
|
|
95
|
+
color: var(--muted);
|
|
96
|
+
font-size: 14px;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.overview {
|
|
100
|
+
margin-top: 24px;
|
|
101
|
+
display: grid;
|
|
102
|
+
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
|
|
103
|
+
gap: 14px;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.card {
|
|
107
|
+
padding: 18px;
|
|
108
|
+
border-radius: 22px;
|
|
109
|
+
border: 1px solid var(--line);
|
|
110
|
+
background: var(--panel);
|
|
111
|
+
box-shadow: var(--shadow);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.stat-label {
|
|
115
|
+
color: var(--muted);
|
|
116
|
+
font-size: 13px;
|
|
117
|
+
text-transform: uppercase;
|
|
118
|
+
letter-spacing: 0.06em;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.stat-value {
|
|
122
|
+
margin-top: 8px;
|
|
123
|
+
font-size: 34px;
|
|
124
|
+
font-weight: 700;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.profiles {
|
|
128
|
+
margin-top: 28px;
|
|
129
|
+
display: flex;
|
|
130
|
+
flex-direction: column;
|
|
131
|
+
gap: 22px;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.profile {
|
|
135
|
+
padding: 22px;
|
|
136
|
+
border-radius: 28px;
|
|
137
|
+
border: 1px solid var(--line);
|
|
138
|
+
background: rgba(255, 253, 247, 0.94);
|
|
139
|
+
box-shadow: var(--shadow);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.profile-header {
|
|
143
|
+
display: flex;
|
|
144
|
+
justify-content: space-between;
|
|
145
|
+
gap: 16px;
|
|
146
|
+
align-items: flex-start;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.profile-title {
|
|
150
|
+
display: flex;
|
|
151
|
+
flex-wrap: wrap;
|
|
152
|
+
gap: 10px;
|
|
153
|
+
align-items: center;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.profile-title h2 {
|
|
157
|
+
margin: 0;
|
|
158
|
+
font-size: 28px;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.profile-subtitle {
|
|
162
|
+
margin-top: 8px;
|
|
163
|
+
color: var(--muted);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.badge-row {
|
|
167
|
+
display: flex;
|
|
168
|
+
flex-wrap: wrap;
|
|
169
|
+
gap: 8px;
|
|
170
|
+
justify-content: flex-end;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.badge {
|
|
174
|
+
display: inline-flex;
|
|
175
|
+
align-items: center;
|
|
176
|
+
gap: 6px;
|
|
177
|
+
padding: 7px 10px;
|
|
178
|
+
border-radius: 999px;
|
|
179
|
+
font-size: 13px;
|
|
180
|
+
border: 1px solid transparent;
|
|
181
|
+
background: var(--panel-strong);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
.badge.good {
|
|
185
|
+
background: var(--accent-soft);
|
|
186
|
+
color: #0d5a54;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
.badge.warn {
|
|
190
|
+
background: var(--warn-soft);
|
|
191
|
+
color: #855500;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
.badge.danger {
|
|
195
|
+
background: var(--danger-soft);
|
|
196
|
+
color: var(--danger);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
.profile-grid {
|
|
200
|
+
margin-top: 18px;
|
|
201
|
+
display: grid;
|
|
202
|
+
grid-template-columns: repeat(12, minmax(0, 1fr));
|
|
203
|
+
gap: 14px;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.panel {
|
|
207
|
+
grid-column: span 12;
|
|
208
|
+
padding: 16px;
|
|
209
|
+
border-radius: 22px;
|
|
210
|
+
border: 1px solid var(--line);
|
|
211
|
+
background: var(--panel);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
.panel.half {
|
|
215
|
+
grid-column: span 6;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.panel.third {
|
|
219
|
+
grid-column: span 4;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
.panel h3 {
|
|
223
|
+
margin: 0 0 12px;
|
|
224
|
+
font-size: 18px;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.panel-subtitle {
|
|
228
|
+
margin: -6px 0 12px;
|
|
229
|
+
color: var(--muted);
|
|
230
|
+
font-size: 14px;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
.table-wrap {
|
|
234
|
+
overflow-x: auto;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
table {
|
|
238
|
+
width: 100%;
|
|
239
|
+
border-collapse: collapse;
|
|
240
|
+
font-size: 14px;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
th,
|
|
244
|
+
td {
|
|
245
|
+
padding: 10px 8px;
|
|
246
|
+
text-align: left;
|
|
247
|
+
vertical-align: top;
|
|
248
|
+
border-top: 1px solid var(--line);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
th {
|
|
252
|
+
color: var(--muted);
|
|
253
|
+
font-size: 12px;
|
|
254
|
+
text-transform: uppercase;
|
|
255
|
+
letter-spacing: 0.06em;
|
|
256
|
+
border-top: 0;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
.mono {
|
|
260
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
261
|
+
font-size: 12px;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
.muted {
|
|
265
|
+
color: var(--muted);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
.status-pill {
|
|
269
|
+
display: inline-flex;
|
|
270
|
+
align-items: center;
|
|
271
|
+
padding: 4px 8px;
|
|
272
|
+
border-radius: 999px;
|
|
273
|
+
font-size: 12px;
|
|
274
|
+
font-weight: 700;
|
|
275
|
+
background: var(--panel-strong);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
.status-pill.RUNNING,
|
|
279
|
+
.status-pill.waiting-worker,
|
|
280
|
+
.status-pill.launching,
|
|
281
|
+
.status-pill.reconciling {
|
|
282
|
+
background: var(--accent-soft);
|
|
283
|
+
color: #0d5a54;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
.status-pill.waiting-provider,
|
|
287
|
+
.status-pill.waiting-due,
|
|
288
|
+
.status-pill.waiting-open-pr,
|
|
289
|
+
.status-pill.idle,
|
|
290
|
+
.status-pill.sleeping {
|
|
291
|
+
background: var(--warn-soft);
|
|
292
|
+
color: #855500;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
.status-pill.FAILED,
|
|
296
|
+
.status-pill.stopped,
|
|
297
|
+
.status-pill.launch-failed {
|
|
298
|
+
background: var(--danger-soft);
|
|
299
|
+
color: var(--danger);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
.status-pill.implemented {
|
|
303
|
+
background: #dcfce7;
|
|
304
|
+
color: #166534;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
.status-pill.reported,
|
|
308
|
+
.status-pill.completed {
|
|
309
|
+
background: #dbeafe;
|
|
310
|
+
color: #1d4ed8;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
.status-pill.blocked {
|
|
314
|
+
background: #fef3c7;
|
|
315
|
+
color: #92400e;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
.status-pill.failed,
|
|
319
|
+
.status-pill.unknown {
|
|
320
|
+
background: var(--danger-soft);
|
|
321
|
+
color: var(--danger);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
.status-pill.running {
|
|
325
|
+
background: var(--accent-soft);
|
|
326
|
+
color: #0d5a54;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
.empty-state {
|
|
330
|
+
color: var(--muted);
|
|
331
|
+
padding: 10px 4px;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
@media (max-width: 960px) {
|
|
335
|
+
.hero,
|
|
336
|
+
.profile-header {
|
|
337
|
+
flex-direction: column;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
.hero-actions,
|
|
341
|
+
.badge-row {
|
|
342
|
+
align-items: flex-start;
|
|
343
|
+
justify-content: flex-start;
|
|
344
|
+
text-align: left;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
.panel.half,
|
|
348
|
+
.panel.third {
|
|
349
|
+
grid-column: span 12;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Task
|
|
2
|
+
|
|
3
|
+
Implement issue #{ISSUE_ID} in `{REPO_SLUG}`.
|
|
4
|
+
|
|
5
|
+
# Issue Context
|
|
6
|
+
|
|
7
|
+
- Title: {ISSUE_TITLE}
|
|
8
|
+
- URL: {ISSUE_URL}
|
|
9
|
+
- Auto-merge requested: {ISSUE_AUTOMERGE}
|
|
10
|
+
|
|
11
|
+
{ISSUE_BODY}
|
|
12
|
+
{ISSUE_RECURRING_CONTEXT}
|
|
13
|
+
{ISSUE_BLOCKER_CONTEXT}
|
|
14
|
+
|
|
15
|
+
# MANDATORY WORKFLOW (follow in order, no skipping)
|
|
16
|
+
|
|
17
|
+
You MUST complete ALL 5 phases in order. Do not skip any phase. Do not commit until Phase 4 passes.
|
|
18
|
+
|
|
19
|
+
## Phase 1: READ & SCOPE
|
|
20
|
+
|
|
21
|
+
- Read the repo instructions: `AGENTS.md`, relevant spec or design docs, and any repo conventions tied to this issue.
|
|
22
|
+
- Identify the single primary product surface you will touch.
|
|
23
|
+
- If the issue spans multiple surfaces, pick ONE and create follow-up issues for the rest using:
|
|
24
|
+
```bash
|
|
25
|
+
bash "$ACP_FLOW_TOOLS_DIR/create-follow-up-issue.sh" --parent {ISSUE_ID} --title "..." --body-file /tmp/follow-up.md
|
|
26
|
+
```
|
|
27
|
+
- Treat a broad umbrella issue as a coordination brief rather than permission to ship every slice in one PR.
|
|
28
|
+
- Write down your scope decision before coding.
|
|
29
|
+
|
|
30
|
+
## Phase 2: IMPLEMENT
|
|
31
|
+
|
|
32
|
+
- Make the smallest root-cause fix that satisfies the issue.
|
|
33
|
+
- Work only inside the dedicated worktree.
|
|
34
|
+
- Add or update tests when feasible.
|
|
35
|
+
- STOP after implementation. Do not commit yet.
|
|
36
|
+
|
|
37
|
+
## Phase 3: VERIFY (MANDATORY)
|
|
38
|
+
|
|
39
|
+
After implementing, you MUST run verification commands and record each one.
|
|
40
|
+
Every successful command must be recorded or the host publish will fail.
|
|
41
|
+
After each successful verification command, record it with `record-verification.sh`.
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
{ISSUE_VERIFICATION_COMMAND_SNIPPET}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Required verification coverage:
|
|
48
|
+
- Run the narrowest repo-supported `typecheck`, `build`, `test`, or `lint` command that proves the touched surface is safe.
|
|
49
|
+
- If you changed tests only, run the most relevant targeted test command and record it.
|
|
50
|
+
- If you changed localization resources or user-facing copy, run repo locale validation or hardcoded-copy scans if the repo provides them.
|
|
51
|
+
- If a verification command fails, fix the issue and rerun until it passes.
|
|
52
|
+
|
|
53
|
+
CRITICAL: `verification.jsonl` must exist in `$ACP_RUN_DIR` with at least one `pass` entry before you can write `OUTCOME=implemented`.
|
|
54
|
+
|
|
55
|
+
## Phase 4: SELF-REVIEW (MANDATORY)
|
|
56
|
+
|
|
57
|
+
Before committing, perform this checklist:
|
|
58
|
+
|
|
59
|
+
- [ ] Run `git diff --check`.
|
|
60
|
+
- [ ] Count non-test product files: if the change is broad, stop and split scope instead of publishing one large PR.
|
|
61
|
+
- [ ] If you touched auth, login, session, or reset flows, verify existing users and legacy data still behave correctly.
|
|
62
|
+
- [ ] If you touched public endpoints, public routes, or operator workflows, search downstream consumers in `scripts/`, `docs/`, and specs.
|
|
63
|
+
- [ ] If you changed localization resources or user-facing copy, confirm localization coverage and scanning are still valid.
|
|
64
|
+
- [ ] If you touched mobile routes or screens, keep route scope narrow and verify loading, empty, and error states.
|
|
65
|
+
|
|
66
|
+
Before committing, verify the journal exists:
|
|
67
|
+
```bash
|
|
68
|
+
test -s "$ACP_RUN_DIR/verification.jsonl" && echo "OK: verification.jsonl exists" || echo "BLOCKED: missing verification.jsonl"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Phase 5: COMMIT & REPORT
|
|
72
|
+
|
|
73
|
+
- Commit with a conventional commit message.
|
|
74
|
+
- Do NOT push or open a PR; the host handles that.
|
|
75
|
+
- Write `$ACP_RESULT_FILE`:
|
|
76
|
+
```bash
|
|
77
|
+
cat > "$ACP_RESULT_FILE" <<'OUTER_EOF'
|
|
78
|
+
OUTCOME=implemented
|
|
79
|
+
ACTION=host-publish-issue-pr
|
|
80
|
+
ISSUE_ID={ISSUE_ID}
|
|
81
|
+
OUTER_EOF
|
|
82
|
+
```
|
|
83
|
+
- In your final output, include the changed files, verification commands actually run, and one short self-review note naming the main regression risk you checked.
|
|
84
|
+
|
|
85
|
+
# STOP CONDITIONS
|
|
86
|
+
|
|
87
|
+
Stop and report blocked if:
|
|
88
|
+
- The issue is ambiguous, blocked by missing credentials, or expands into high-risk scope.
|
|
89
|
+
- You cannot complete verification successfully.
|
|
90
|
+
- The issue needs full decomposition into focused follow-up issues.
|
|
91
|
+
|
|
92
|
+
If stopped blocked, write `$ACP_RUN_DIR/issue-comment.md` with a blocker summary, then:
|
|
93
|
+
```bash
|
|
94
|
+
cat > "$ACP_RESULT_FILE" <<'OUTER_EOF'
|
|
95
|
+
OUTCOME=blocked
|
|
96
|
+
ACTION=host-comment-blocker
|
|
97
|
+
ISSUE_ID={ISSUE_ID}
|
|
98
|
+
OUTER_EOF
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
If fully decomposed into follow-up issues, start the first line of `issue-comment.md` with exactly:
|
|
102
|
+
`Superseded by focused follow-up issues: #...`
|
|
103
|
+
|
|
104
|
+
# Git Rules
|
|
105
|
+
|
|
106
|
+
- Do NOT push the branch from inside the worker.
|
|
107
|
+
- Do NOT open a PR from inside the worker.
|
|
108
|
+
- Do NOT comment on the source issue with a PR URL from inside the worker.
|
|
109
|
+
- Exit successfully after writing the result file.
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
You are the PR repair worker for `{REPO_SLUG}`.
|
|
2
|
+
|
|
3
|
+
Before making any change:
|
|
4
|
+
|
|
5
|
+
1. Read `{REPO_ROOT}/AGENTS.md`.
|
|
6
|
+
2. Read `{REPO_ROOT}/openspec/AGENT_RULES.md`.
|
|
7
|
+
3. Read `{REPO_ROOT}/openspec/AGENTS.md`.
|
|
8
|
+
4. Read `{REPO_ROOT}/openspec/project.md`.
|
|
9
|
+
5. Read `{REPO_ROOT}/openspec/CONVENTIONS.md`.
|
|
10
|
+
6. Read `{REPO_ROOT}/docs/TESTING_AND_SEED_POLICY.md`.
|
|
11
|
+
7. Stay on this PR branch worktree. Do not push or mutate GitHub from inside the worker.
|
|
12
|
+
|
|
13
|
+
PR metadata:
|
|
14
|
+
|
|
15
|
+
- PR: {PR_NUMBER} - {PR_TITLE}
|
|
16
|
+
- URL: {PR_URL}
|
|
17
|
+
- Base branch: {PR_BASE_REF}
|
|
18
|
+
- Head branch: {PR_HEAD_REF}
|
|
19
|
+
- Linked issue: {PR_LINKED_ISSUE_ID}
|
|
20
|
+
- Risk classification: {PR_RISK}
|
|
21
|
+
- Risk reason: {PR_RISK_REASON}
|
|
22
|
+
- Merge state: {PR_MERGE_STATE_STATUS}
|
|
23
|
+
- Mergeable: {PR_MERGEABLE_STATUS}
|
|
24
|
+
|
|
25
|
+
Changed files:
|
|
26
|
+
{PR_FILES_TEXT}
|
|
27
|
+
|
|
28
|
+
Required targeted verification coverage before `updated-branch`:
|
|
29
|
+
{PR_REQUIRED_TARGETED_VERIFICATION_TEXT}
|
|
30
|
+
|
|
31
|
+
Pre-approved local verification fallbacks:
|
|
32
|
+
{PR_PREAPPROVED_VERIFICATION_FALLBACKS_TEXT}
|
|
33
|
+
|
|
34
|
+
Current CI / merge blockers:
|
|
35
|
+
{PR_CHECK_FAILURES_TEXT}
|
|
36
|
+
|
|
37
|
+
Current GitHub checks:
|
|
38
|
+
{PR_CHECKS_TEXT}
|
|
39
|
+
|
|
40
|
+
Current missing reasons:
|
|
41
|
+
{PR_MISSING_REASONS_TEXT}
|
|
42
|
+
|
|
43
|
+
Current local merge-conflict paths:
|
|
44
|
+
{PR_CONFLICT_PATHS_TEXT}
|
|
45
|
+
|
|
46
|
+
Actionable current-head review findings:
|
|
47
|
+
{PR_REVIEW_FINDINGS_TEXT}
|
|
48
|
+
|
|
49
|
+
Current host-side publish blocker summary:
|
|
50
|
+
{PR_LOCAL_HOST_BLOCKER_SUMMARY_TEXT}
|
|
51
|
+
|
|
52
|
+
Current final-review blocker summary:
|
|
53
|
+
{PR_BLOCKER_SUMMARY_TEXT}
|
|
54
|
+
|
|
55
|
+
PR body:
|
|
56
|
+
{PR_BODY}
|
|
57
|
+
|
|
58
|
+
Required flow:
|
|
59
|
+
|
|
60
|
+
1. Inspect the current diff and the failing/pending CI signals first:
|
|
61
|
+
- `openspec list`
|
|
62
|
+
- `git diff --stat origin/main...HEAD`
|
|
63
|
+
- `git status --short`
|
|
64
|
+
- if `Merge state` is not `CLEAN` or `Mergeable` is `FALSE`, treat branch drift/conflicts as the concrete blocker first
|
|
65
|
+
- if `Actionable current-head review findings` is not `- none`, treat those findings as the concrete blockers to address first
|
|
66
|
+
- otherwise, if `Current host-side publish blocker summary` is not `- none`, treat that summary as the concrete blocker to address first
|
|
67
|
+
- otherwise, if `Current final-review blocker summary` is not `- none`, treat that summary as the concrete blocker to address first
|
|
68
|
+
2. Never run dependency bootstrap or workspace-mutating commands here:
|
|
69
|
+
- do not run `pnpm install`, `npm install`, `yarn install`, or `bun install`
|
|
70
|
+
- do not mutate the retained dependency checkout under `{DEPENDENCY_SOURCE_ROOT}`
|
|
71
|
+
- do not repair the shared `node_modules` baseline from this worker
|
|
72
|
+
- do not run `git fetch`, `git merge`, `git rebase`, `git commit`, `git push`, or other Git metadata-writing commands from inside this worker; host-side wrappers own those steps
|
|
73
|
+
3. If the blocker is branch drift or a merge conflict, use the already-prepared local refs and make the smallest branch-local source update needed to restore mergeability on this PR branch. Keep the resolution scoped to the PR intent; do not rewrite unrelated code.
|
|
74
|
+
- Treat `Current local merge-conflict paths` as the authoritative conflict list to clear.
|
|
75
|
+
- Do not stop after fixing only one file if other conflict paths remain.
|
|
76
|
+
- Before you declare success, rerun local merge simulation and confirm there are no remaining conflict paths for this branch against `{PR_BASE_REF}`.
|
|
77
|
+
4. Make the smallest change that fixes the concrete PR blockers on this existing branch.
|
|
78
|
+
5. Run the narrowest verification that proves the fix for the blocker you changed.
|
|
79
|
+
- This is an unattended automated repair run. Do not ask the user for clarification, approval, or a next-step choice from inside the worker. Treat this prompt as the full execution contract for the run.
|
|
80
|
+
- After each successful verification command, record it with:
|
|
81
|
+
`bash "$ACP_FLOW_TOOLS_DIR/record-verification.sh" --run-dir "$ACP_RUN_DIR" --status pass --command "<exact command>"`
|
|
82
|
+
- If you changed a `*.spec.*` or `*.test.*` file, include a targeted test command for that file or the directly related surface.
|
|
83
|
+
- The host verification guard is literal. If `Required targeted verification coverage before updated-branch` is not `- none`, every listed file must have at least one recorded successful command whose command text clearly names that file, its direct stem, or the scoped e2e/mobile runner you used for that exact spec.
|
|
84
|
+
- If a changed web Playwright spec hits a local bind/listen failure while starting Next or Playwright (for example `listen EPERM ... 0.0.0.0:3000`), retry exactly once with the matching command from `Pre-approved local verification fallbacks` before declaring the run blocked.
|
|
85
|
+
- Do not write `updated-branch` until every listed coverage item is satisfied in `verification.jsonl`.
|
|
86
|
+
6. If you make source changes, leave them as local file edits in this worktree. Do not run Git staging/commit/push commands yourself; host reconcile will stage, commit, validate mergeability, and push only if the branch is actually clean.
|
|
87
|
+
7. Write a short markdown summary for the PR to `$ACP_RUN_DIR/pr-comment.md`.
|
|
88
|
+
8. If the reported blocker is already resolved on the current PR branch and no code change is needed, or the only remaining blocker is external worktree dependency state while the branch diff itself already satisfies the requested fix:
|
|
89
|
+
- make that explicit in `$ACP_RUN_DIR/pr-comment.md`
|
|
90
|
+
- write `$ACP_RESULT_FILE` exactly like this:
|
|
91
|
+
```bash
|
|
92
|
+
cat > "$ACP_RESULT_FILE" <<'EOF'
|
|
93
|
+
OUTCOME=no-change-needed
|
|
94
|
+
ACTION=host-refresh-pr-state
|
|
95
|
+
PR_NUMBER={PR_NUMBER}
|
|
96
|
+
ISSUE_ID={PR_LINKED_ISSUE_ID}
|
|
97
|
+
EOF
|
|
98
|
+
```
|
|
99
|
+
- exit successfully after saving the summary comment
|
|
100
|
+
9. If you are blocked or cannot fix the branch safely after addressing any actionable review findings and running the narrowest feasible verification, write `$ACP_RESULT_FILE` exactly like this:
|
|
101
|
+
```bash
|
|
102
|
+
cat > "$ACP_RESULT_FILE" <<'EOF'
|
|
103
|
+
OUTCOME=blocked
|
|
104
|
+
ACTION=host-comment-pr-blocker
|
|
105
|
+
PR_NUMBER={PR_NUMBER}
|
|
106
|
+
ISSUE_ID={PR_LINKED_ISSUE_ID}
|
|
107
|
+
EOF
|
|
108
|
+
```
|
|
109
|
+
Then exit successfully after saving the blocker summary in `$ACP_RUN_DIR/pr-comment.md`. Do not stop after printing a question or suggestion; always finish by writing one of the allowed result contracts.
|
|
110
|
+
10. If you fixed the branch and left only the intended source changes ready for host-side commit/push, write `$ACP_RESULT_FILE` exactly like this:
|
|
111
|
+
```bash
|
|
112
|
+
cat > "$ACP_RESULT_FILE" <<'EOF'
|
|
113
|
+
OUTCOME=updated-branch
|
|
114
|
+
ACTION=host-push-pr-branch
|
|
115
|
+
PR_NUMBER={PR_NUMBER}
|
|
116
|
+
ISSUE_ID={PR_LINKED_ISSUE_ID}
|
|
117
|
+
EOF
|
|
118
|
+
```
|
|
119
|
+
Only use this outcome after you have confirmed the branch no longer has remaining local merge-conflict paths against `{PR_BASE_REF}`, you did not run Git commit/push commands yourself, and `$ACP_RUN_DIR/verification.jsonl` contains the successful verification commands you actually ran.
|
|
120
|
+
11. Exit after writing the result file. The host reconciler will push the updated branch, comment on the PR, refresh labels, and leave CI to rerun on GitHub. Never end this run with a question to the user instead of a result file.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
You are the PR merge-repair worker for `{REPO_SLUG}`.
|
|
2
|
+
|
|
3
|
+
Before making any change:
|
|
4
|
+
|
|
5
|
+
1. Read `{REPO_ROOT}/AGENTS.md`.
|
|
6
|
+
2. Read `{REPO_ROOT}/openspec/AGENT_RULES.md`.
|
|
7
|
+
3. Read `{REPO_ROOT}/openspec/AGENTS.md`.
|
|
8
|
+
4. Read `{REPO_ROOT}/openspec/project.md`.
|
|
9
|
+
5. Read `{REPO_ROOT}/openspec/CONVENTIONS.md`.
|
|
10
|
+
6. Read `{REPO_ROOT}/docs/TESTING_AND_SEED_POLICY.md`.
|
|
11
|
+
7. Stay on this PR branch worktree. Do not push or mutate GitHub from inside the worker.
|
|
12
|
+
|
|
13
|
+
PR metadata:
|
|
14
|
+
|
|
15
|
+
- PR: {PR_NUMBER} - {PR_TITLE}
|
|
16
|
+
- URL: {PR_URL}
|
|
17
|
+
- Base branch: {PR_BASE_REF}
|
|
18
|
+
- Head branch: {PR_HEAD_REF}
|
|
19
|
+
- Linked issue: {PR_LINKED_ISSUE_ID}
|
|
20
|
+
- Risk classification: {PR_RISK}
|
|
21
|
+
- Risk reason: {PR_RISK_REASON}
|
|
22
|
+
- Merge state: {PR_MERGE_STATE_STATUS}
|
|
23
|
+
- Mergeable: {PR_MERGEABLE_STATUS}
|
|
24
|
+
- Host-prepared merge status: {PR_HOST_MERGE_STATUS}
|
|
25
|
+
|
|
26
|
+
Changed files:
|
|
27
|
+
{PR_FILES_TEXT}
|
|
28
|
+
|
|
29
|
+
Current unresolved merge-conflict paths:
|
|
30
|
+
{PR_CONFLICT_PATHS_TEXT}
|
|
31
|
+
|
|
32
|
+
Host merge preparation notes:
|
|
33
|
+
{PR_HOST_MERGE_SUMMARY_TEXT}
|
|
34
|
+
|
|
35
|
+
Current GitHub checks:
|
|
36
|
+
{PR_CHECKS_TEXT}
|
|
37
|
+
|
|
38
|
+
Current missing reasons:
|
|
39
|
+
{PR_MISSING_REASONS_TEXT}
|
|
40
|
+
|
|
41
|
+
Actionable current-head review findings:
|
|
42
|
+
{PR_REVIEW_FINDINGS_TEXT}
|
|
43
|
+
|
|
44
|
+
PR body:
|
|
45
|
+
{PR_BODY}
|
|
46
|
+
|
|
47
|
+
Required flow:
|
|
48
|
+
|
|
49
|
+
1. Treat this worktree as an already-prepared merge repair state from host control-plane.
|
|
50
|
+
- `origin/{PR_BASE_REF}` has already been merged into this worktree locally.
|
|
51
|
+
- if `Current unresolved merge-conflict paths` is not `- none detected after host merge preparation`, resolve those files first.
|
|
52
|
+
2. Never run Git control commands from inside the worker:
|
|
53
|
+
- do not run `git fetch`, `git pull`, `git merge`, `git rebase`, `git commit`, `git push`, or any command that writes Git metadata
|
|
54
|
+
- do not abort or restart the prepared merge state
|
|
55
|
+
3. Inspect only the concrete branch-repair state you were given:
|
|
56
|
+
- `openspec list`
|
|
57
|
+
- `git status --short`
|
|
58
|
+
- `git diff --check`
|
|
59
|
+
- `git diff --name-only --diff-filter=U`
|
|
60
|
+
- if you need context for a conflicted file, inspect the local conflict markers and surrounding source in this worktree
|
|
61
|
+
4. Make the smallest source-only edits needed to finish the merge repair while preserving the PR intent.
|
|
62
|
+
- keep unrelated auto-merged files alone
|
|
63
|
+
- do not reformat broad areas or rewrite unrelated logic
|
|
64
|
+
5. Run the narrowest verification that proves the repaired conflict is safe.
|
|
65
|
+
- After each successful verification command, record it with:
|
|
66
|
+
`bash "$ACP_FLOW_TOOLS_DIR/record-verification.sh" --run-dir "$ACP_RUN_DIR" --status pass --command "<exact command>"`
|
|
67
|
+
- If you changed a `*.spec.*` or `*.test.*` file while resolving the merge, include a targeted test command for that file or the directly related surface.
|
|
68
|
+
6. If host already prepared a clean merge state and no unresolved conflict paths remain, do not use `no-change-needed`.
|
|
69
|
+
- write `updated-branch` so host reconcile can commit and push the prepared merge repair
|
|
70
|
+
7. Save a short markdown summary to `$ACP_RUN_DIR/pr-comment.md`.
|
|
71
|
+
8. If you cannot safely resolve the prepared merge state, write `$ACP_RESULT_FILE` exactly like this:
|
|
72
|
+
```bash
|
|
73
|
+
cat > "$ACP_RESULT_FILE" <<'EOF'
|
|
74
|
+
OUTCOME=blocked
|
|
75
|
+
ACTION=host-comment-pr-blocker
|
|
76
|
+
PR_NUMBER={PR_NUMBER}
|
|
77
|
+
ISSUE_ID={PR_LINKED_ISSUE_ID}
|
|
78
|
+
EOF
|
|
79
|
+
```
|
|
80
|
+
Then exit successfully after saving the blocker summary.
|
|
81
|
+
9. If the prepared merge state is now clean and ready for host commit/push, write `$ACP_RESULT_FILE` exactly like this:
|
|
82
|
+
```bash
|
|
83
|
+
cat > "$ACP_RESULT_FILE" <<'EOF'
|
|
84
|
+
OUTCOME=updated-branch
|
|
85
|
+
ACTION=host-push-pr-branch
|
|
86
|
+
PR_NUMBER={PR_NUMBER}
|
|
87
|
+
ISSUE_ID={PR_LINKED_ISSUE_ID}
|
|
88
|
+
EOF
|
|
89
|
+
```
|
|
90
|
+
Only use this outcome after `$ACP_RUN_DIR/verification.jsonl` contains the successful verification commands you actually ran.
|
|
91
|
+
10. Exit after writing the result file. Host reconcile owns the commit/push/label refresh.
|