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,159 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
ROOT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)
|
|
5
|
+
|
|
6
|
+
test -f "$ROOT_DIR/SECURITY.md"
|
|
7
|
+
test -f "$ROOT_DIR/CODE_OF_CONDUCT.md"
|
|
8
|
+
test -f "$ROOT_DIR/CHANGELOG.md"
|
|
9
|
+
test -f "$ROOT_DIR/ROADMAP.md"
|
|
10
|
+
test -f "$ROOT_DIR/references/architecture.md"
|
|
11
|
+
test -f "$ROOT_DIR/references/release-checklist.md"
|
|
12
|
+
test -f "$ROOT_DIR/.github/release-template.md"
|
|
13
|
+
test -f "$ROOT_DIR/.github/workflows/ci.yml"
|
|
14
|
+
test -f "$ROOT_DIR/tools/bin/render-dashboard-demo-media.sh"
|
|
15
|
+
test -f "$ROOT_DIR/tools/bin/render-architecture-infographics.sh"
|
|
16
|
+
test -f "$ROOT_DIR/tools/architecture/architecture-infographics.html"
|
|
17
|
+
test -f "$ROOT_DIR/assets/readme/dashboard-demo.png"
|
|
18
|
+
test -f "$ROOT_DIR/assets/readme/dashboard-demo.gif"
|
|
19
|
+
test -f "$ROOT_DIR/assets/architecture/agent-control-plane-architecture.pdf"
|
|
20
|
+
test -f "$ROOT_DIR/assets/architecture/overview-infographic.png"
|
|
21
|
+
test -f "$ROOT_DIR/assets/architecture/runtime-loop-infographic.png"
|
|
22
|
+
test -f "$ROOT_DIR/assets/architecture/worker-lifecycle-infographic.png"
|
|
23
|
+
test -f "$ROOT_DIR/assets/architecture/state-dashboard-infographic.png"
|
|
24
|
+
|
|
25
|
+
grep -q 'Use GitHub private vulnerability reporting or a GitHub security advisory' "$ROOT_DIR/SECURITY.md"
|
|
26
|
+
grep -q 'For undisclosed security issues, use \[SECURITY.md\](\./SECURITY.md)' "$ROOT_DIR/CODE_OF_CONDUCT.md"
|
|
27
|
+
grep -q '^## \[Unreleased\]$' "$ROOT_DIR/CHANGELOG.md"
|
|
28
|
+
grep -q '^## \[0.1.0\] - 2026-03-27$' "$ROOT_DIR/CHANGELOG.md"
|
|
29
|
+
grep -q '^# Roadmap$' "$ROOT_DIR/ROADMAP.md"
|
|
30
|
+
grep -q '^## Platform Support$' "$ROOT_DIR/ROADMAP.md"
|
|
31
|
+
grep -q '^| Platform | Status | Why it matters next |$' "$ROOT_DIR/ROADMAP.md"
|
|
32
|
+
grep -q '^| `macOS` | best supported today | Current reference platform for setup, launchd, dashboard, and local operator flows\. |$' "$ROOT_DIR/ROADMAP.md"
|
|
33
|
+
grep -q '^| `Linux` | planned next | ACP already knows common Linux package managers; the missing step is first-class runtime/service validation and an operator story as smooth as macOS\. |$' "$ROOT_DIR/ROADMAP.md"
|
|
34
|
+
grep -q '^| `Windows (WSL2)` | exploratory next | A practical bridge for Windows users who still want Unix-like repos, containers, and worker CLIs\. |$' "$ROOT_DIR/ROADMAP.md"
|
|
35
|
+
grep -q '^| `Native Windows` | longer-term | Needs explicit work around services, shell/process management, path handling, and backend compatibility\. |$' "$ROOT_DIR/ROADMAP.md"
|
|
36
|
+
grep -q '^| Backend | Status | Runtime Routing | Profile Scaffolding | Notes |$' "$ROOT_DIR/ROADMAP.md"
|
|
37
|
+
grep -q '^| `codex` | available now | yes | yes | First-class worker path for Codex-backed runs\. |$' "$ROOT_DIR/ROADMAP.md"
|
|
38
|
+
grep -q '^| `opencode` | planned next | placeholder scaffold | no | Adapter stub ships in the package, but live execution is not implemented yet\. |$' "$ROOT_DIR/ROADMAP.md"
|
|
39
|
+
grep -q '^| `kilo` | planned next | placeholder scaffold | no | Adapter stub ships in the package, but live execution is not implemented yet\. |$' "$ROOT_DIR/ROADMAP.md"
|
|
40
|
+
grep -q '^| `gemini-cli` | research next | no | no | Official Google terminal agent and the closest ecosystem fit for a future ACP worker adapter\. |$' "$ROOT_DIR/ROADMAP.md"
|
|
41
|
+
grep -q -- '- `codex`' "$ROOT_DIR/ROADMAP.md"
|
|
42
|
+
grep -q -- '- `claude`' "$ROOT_DIR/ROADMAP.md"
|
|
43
|
+
grep -q -- '- `openclaw`' "$ROOT_DIR/ROADMAP.md"
|
|
44
|
+
grep -q -- '- `opencode`' "$ROOT_DIR/ROADMAP.md"
|
|
45
|
+
grep -q -- '- `kilo`' "$ROOT_DIR/ROADMAP.md"
|
|
46
|
+
grep -q -- '- `gemini-cli`' "$ROOT_DIR/ROADMAP.md"
|
|
47
|
+
grep -q '^## Adjacent Runtime and Model Integrations$' "$ROOT_DIR/ROADMAP.md"
|
|
48
|
+
grep -q '^| Target | Category | Status | Why it matters |$' "$ROOT_DIR/ROADMAP.md"
|
|
49
|
+
grep -q '^| `ollama` | local model runtime | research next | Strong local-first story, cross-platform distribution, and an existing tool-launch surface that already knows about coding tools\. |$' "$ROOT_DIR/ROADMAP.md"
|
|
50
|
+
grep -q '^| `nanoclaw` | containerized assistant runtime | exploratory | Useful reference for container isolation, scheduled tasks, and WSL2-friendly workflows around Claude-powered agents\. |$' "$ROOT_DIR/ROADMAP.md"
|
|
51
|
+
grep -q '^| `picoclaw` | lightweight assistant runtime | exploratory | Interesting for Linux and edge-style deployments, MCP-heavy workflows, and ultra-low-footprint automation\. |$' "$ROOT_DIR/ROADMAP.md"
|
|
52
|
+
grep -q '^# Release Summary$' "$ROOT_DIR/.github/release-template.md"
|
|
53
|
+
grep -q '\[SECURITY.md\](\./SECURITY.md)' "$ROOT_DIR/README.md"
|
|
54
|
+
grep -q '\[CODE_OF_CONDUCT.md\](\./CODE_OF_CONDUCT.md)' "$ROOT_DIR/README.md"
|
|
55
|
+
grep -q '\[CHANGELOG.md\](\./CHANGELOG.md)' "$ROOT_DIR/README.md"
|
|
56
|
+
grep -q '\[ROADMAP.md\](\./ROADMAP.md)' "$ROOT_DIR/README.md"
|
|
57
|
+
grep -q '\[references/architecture.md\](\./references/architecture.md)' "$ROOT_DIR/README.md"
|
|
58
|
+
grep -q '\[references/commands.md\](\./references/commands.md)' "$ROOT_DIR/README.md"
|
|
59
|
+
grep -q 'keep coding agents running reliably without' "$ROOT_DIR/README.md"
|
|
60
|
+
grep -q 'constant human babysitting' "$ROOT_DIR/README.md"
|
|
61
|
+
grep -q 'replace human babysitting with boring runtime ownership: supervisor,' "$ROOT_DIR/README.md"
|
|
62
|
+
grep -q '^## Architecture$' "$ROOT_DIR/README.md"
|
|
63
|
+
grep -q '^### Runtime Loop At A Glance$' "$ROOT_DIR/README.md"
|
|
64
|
+
grep -q '```mermaid' "$ROOT_DIR/README.md"
|
|
65
|
+
grep -q '\[System overview\](\./references/architecture.md#system-overview)' "$ROOT_DIR/README.md"
|
|
66
|
+
grep -q '\[Runtime scheduler loop\](\./references/architecture.md#runtime-scheduler-loop)' "$ROOT_DIR/README.md"
|
|
67
|
+
grep -q '\[Dashboard snapshot pipeline\](\./references/architecture.md#dashboard-snapshot-pipeline)' "$ROOT_DIR/README.md"
|
|
68
|
+
grep -q '\[Architecture deck PDF\](\./assets/architecture/agent-control-plane-architecture.pdf)' "$ROOT_DIR/README.md"
|
|
69
|
+
grep -q '\[Overview infographic\](\./assets/architecture/overview-infographic.png)' "$ROOT_DIR/README.md"
|
|
70
|
+
grep -q '\[Runtime loop infographic\](\./assets/architecture/runtime-loop-infographic.png)' "$ROOT_DIR/README.md"
|
|
71
|
+
grep -q '\[Worker lifecycle infographic\](\./assets/architecture/worker-lifecycle-infographic.png)' "$ROOT_DIR/README.md"
|
|
72
|
+
grep -q '\[State and dashboard infographic\](\./assets/architecture/state-dashboard-infographic.png)' "$ROOT_DIR/README.md"
|
|
73
|
+
grep -q 'planned next: `opencode`, `kilo`, `gemini-cli`' "$ROOT_DIR/README.md"
|
|
74
|
+
grep -q 'platform roadmap now calls out Linux, Windows via WSL2, and the longer-term' "$ROOT_DIR/README.md"
|
|
75
|
+
grep -q 'native Windows story explicitly' "$ROOT_DIR/README.md"
|
|
76
|
+
grep -q 'such as `ollama`, `nanoclaw`, and `picoclaw`' "$ROOT_DIR/README.md"
|
|
77
|
+
grep -q 'roadmap matrix now distinguishes implemented backends from placeholder' "$ROOT_DIR/README.md"
|
|
78
|
+
grep -q '^### Backend Snapshot$' "$ROOT_DIR/README.md"
|
|
79
|
+
grep -q '^| Backend | What You Can Expect Today |$' "$ROOT_DIR/README.md"
|
|
80
|
+
grep -q '^| `codex` | Ready for real ACP workflows today\. |$' "$ROOT_DIR/README.md"
|
|
81
|
+
grep -q '^| `openclaw` | Ready for real ACP workflows today, including resident-style runs\. |$' "$ROOT_DIR/README.md"
|
|
82
|
+
grep -q '^| `opencode` | Scaffolded in the package so routing and docs can evolve, but not implemented for live execution yet\. |$' "$ROOT_DIR/README.md"
|
|
83
|
+
grep -q '^| `kilo` | Scaffolded in the package so routing and docs can evolve, but not implemented for live execution yet\. |$' "$ROOT_DIR/README.md"
|
|
84
|
+
grep -q '^| `gemini-cli` | Not wired into ACP yet, but on the public roadmap as a strong future worker candidate\. |$' "$ROOT_DIR/README.md"
|
|
85
|
+
grep -q '^### Support Matrix$' "$ROOT_DIR/README.md"
|
|
86
|
+
grep -q '^| Target | Kind | ACP Relationship Today | Current Status |$' "$ROOT_DIR/README.md"
|
|
87
|
+
grep -q '^| `codex` | direct worker | First-class ACP worker backend | production-ready path today |$' "$ROOT_DIR/README.md"
|
|
88
|
+
grep -q '^| `openclaw` | direct worker | First-class ACP worker backend with resident workflow support | production-ready path today |$' "$ROOT_DIR/README.md"
|
|
89
|
+
grep -q '^| `gemini-cli` | direct worker | Research target for a future worker adapter | roadmap candidate |$' "$ROOT_DIR/README.md"
|
|
90
|
+
grep -q '^| `ollama` | local model runtime | Candidate local-model substrate behind future ACP integrations | research target |$' "$ROOT_DIR/README.md"
|
|
91
|
+
grep -q '^| `nanoclaw` | adjacent agent shell | Ecosystem reference for containerized and WSL2-friendly workflows | exploratory interoperability target |$' "$ROOT_DIR/README.md"
|
|
92
|
+
grep -q '^| `picoclaw` | adjacent agent shell | Ecosystem reference for lightweight Linux and edge-style agent runtimes | exploratory interoperability target |$' "$ROOT_DIR/README.md"
|
|
93
|
+
grep -q 'If you are trying ACP on a real repo right now, start with `codex`, `claude`,' "$ROOT_DIR/README.md"
|
|
94
|
+
grep -q 'github.com/ducminhuyen0319/agent-control-plane/actions/workflows/ci.yml/badge.svg?branch=main' "$ROOT_DIR/README.md"
|
|
95
|
+
grep -q 'img.shields.io/npm/v/agent-control-plane' "$ROOT_DIR/README.md"
|
|
96
|
+
grep -q 'img.shields.io/node/v/agent-control-plane' "$ROOT_DIR/README.md"
|
|
97
|
+
grep -q 'img.shields.io/npm/l/agent-control-plane' "$ROOT_DIR/README.md"
|
|
98
|
+
grep -q 'https://github.com/ducminhuyen0319/agent-control-plane/actions/workflows/ci.yml' "$ROOT_DIR/README.md"
|
|
99
|
+
grep -q 'https://www.npmjs.com/package/agent-control-plane' "$ROOT_DIR/README.md"
|
|
100
|
+
grep -q '\./assets/readme/dashboard-demo.png' "$ROOT_DIR/README.md"
|
|
101
|
+
grep -q '\./assets/readme/dashboard-demo.gif' "$ROOT_DIR/README.md"
|
|
102
|
+
grep -q '^| Tool | Required | Why ACP uses it | Notes |$' "$ROOT_DIR/README.md"
|
|
103
|
+
grep -q '^| Node.js `>= 18` | yes | Runs the npm package entrypoint and `npx agent-control-plane \.\.\.` wrapper\. |' "$ROOT_DIR/README.md"
|
|
104
|
+
grep -q '^| `jq` | yes | Several runtime and GitHub flows parse JSON from `gh` and worker metadata\. |' "$ROOT_DIR/README.md"
|
|
105
|
+
grep -q '^| Bundled `codex-quota` plus ACP quota manager | automatic for Codex profiles | Improves Codex quota-aware failover and health signals\. |' "$ROOT_DIR/README.md"
|
|
106
|
+
grep -q 'ACP_CODEX_QUOTA_BIN=/path/to/codex-quota' "$ROOT_DIR/README.md"
|
|
107
|
+
grep -q '^| Command | What it is for | Key args and parameters |$' "$ROOT_DIR/README.md"
|
|
108
|
+
grep -q '^```bash$' "$ROOT_DIR/README.md"
|
|
109
|
+
grep -q '^npx agent-control-plane@latest setup$' "$ROOT_DIR/README.md"
|
|
110
|
+
grep -q '`setup` detects the current repo when it can' "$ROOT_DIR/README.md"
|
|
111
|
+
grep -q 'offers to install missing core tools' "$ROOT_DIR/README.md"
|
|
112
|
+
grep -q 'can prompt to run `gh auth login`' "$ROOT_DIR/README.md"
|
|
113
|
+
grep -q 'reports core tool and auth readiness' "$ROOT_DIR/README.md"
|
|
114
|
+
grep -q '^During `setup`, ACP can:$' "$ROOT_DIR/README.md"
|
|
115
|
+
grep -q 'supported package managers such as `brew`, `apt-get`, `dnf`, `yum`,' "$ROOT_DIR/README.md"
|
|
116
|
+
grep -q 'offer to install supported worker backends like `codex`, `claude`, or' "$ROOT_DIR/README.md"
|
|
117
|
+
grep -q 'run one final fix-up summary at the end so you can clear whatever is still' "$ROOT_DIR/README.md"
|
|
118
|
+
grep -q 'The wizard now automates ACP'\''s shell/runtime prerequisites and can also' "$ROOT_DIR/README.md"
|
|
119
|
+
grep -q 'auto-install supported worker CLIs through npm' "$ROOT_DIR/README.md"
|
|
120
|
+
grep -q 'it will tell you what is missing, print' "$ROOT_DIR/README.md"
|
|
121
|
+
grep -q 'backend-specific next steps, and offer to open the right setup docs' "$ROOT_DIR/README.md"
|
|
122
|
+
grep -q '^npx agent-control-plane@latest setup --dry-run$' "$ROOT_DIR/README.md"
|
|
123
|
+
grep -q 'without writing files, installing packages, or launching background services' "$ROOT_DIR/README.md"
|
|
124
|
+
grep -q 'emit exactly one JSON object on `stdout`' "$ROOT_DIR/README.md"
|
|
125
|
+
grep -q 'send progress logs to' "$ROOT_DIR/README.md"
|
|
126
|
+
grep -q '`stderr`, which keeps parsing stable\.' "$ROOT_DIR/README.md"
|
|
127
|
+
grep -q '`--non-interactive`, `--install-missing-deps`, `--gh-auth-login`,' "$ROOT_DIR/README.md"
|
|
128
|
+
grep -q '`--start-runtime`, and `--json`\.' "$ROOT_DIR/README.md"
|
|
129
|
+
grep -q '^| `npx agent-control-plane@latest setup` | Guided bootstrap for one repo profile\. |' "$ROOT_DIR/README.md"
|
|
130
|
+
grep -q 'can install missing core tools, supported worker backends, and run `gh auth login`' "$ROOT_DIR/README.md"
|
|
131
|
+
grep -q 'Add `--json` for one structured JSON result on `stdout`' "$ROOT_DIR/README.md"
|
|
132
|
+
grep -q '^| `npx agent-control-plane@latest setup --dry-run` | Preview exactly what setup would do without changing the machine\. |' "$ROOT_DIR/README.md"
|
|
133
|
+
grep -q 'Add `--json` for a machine-readable plan object\.' "$ROOT_DIR/README.md"
|
|
134
|
+
grep -q '^| `npx agent-control-plane@latest install` | Alias for `sync`\.' "$ROOT_DIR/README.md"
|
|
135
|
+
grep -q '^| `npx agent-control-plane@latest runtime <status\|start\|stop\|restart> --profile-id <id>` | Operate one profile runtime\. |' "$ROOT_DIR/README.md"
|
|
136
|
+
grep -q '\[references/commands.md\](\./references/commands.md)' "$ROOT_DIR/README.md"
|
|
137
|
+
grep -q '^# Architecture Guide$' "$ROOT_DIR/references/architecture.md"
|
|
138
|
+
grep -q '^## System Overview$' "$ROOT_DIR/references/architecture.md"
|
|
139
|
+
grep -q '^## Install and Publication Flow$' "$ROOT_DIR/references/architecture.md"
|
|
140
|
+
grep -q '^## Runtime Scheduler Loop$' "$ROOT_DIR/references/architecture.md"
|
|
141
|
+
grep -q '^## Worker Session Lifecycle$' "$ROOT_DIR/references/architecture.md"
|
|
142
|
+
grep -q '^## Dashboard Snapshot Pipeline$' "$ROOT_DIR/references/architecture.md"
|
|
143
|
+
grep -q '```mermaid' "$ROOT_DIR/references/architecture.md"
|
|
144
|
+
grep -q 'Maintainer checklist for shipping a new public package release' "$ROOT_DIR/references/release-checklist.md"
|
|
145
|
+
grep -q 'npm publish --access public' "$ROOT_DIR/references/release-checklist.md"
|
|
146
|
+
grep -q 'render-dashboard-demo-media.sh' "$ROOT_DIR/references/release-checklist.md"
|
|
147
|
+
grep -q 'if a public GitHub repo now exists, set or verify the `homepage`,' "$ROOT_DIR/references/release-checklist.md"
|
|
148
|
+
grep -q '`repository`, and `bugs` URLs in `package.json`' "$ROOT_DIR/references/release-checklist.md"
|
|
149
|
+
grep -q 'bash tools/bin/test-smoke.sh' "$ROOT_DIR/references/release-checklist.md"
|
|
150
|
+
grep -q '`references/release-checklist.md`' "$ROOT_DIR/references/docs-map.md"
|
|
151
|
+
grep -q '`references/architecture.md`' "$ROOT_DIR/references/docs-map.md"
|
|
152
|
+
grep -q '`CHANGELOG.md`' "$ROOT_DIR/references/docs-map.md"
|
|
153
|
+
grep -q '`ROADMAP.md`' "$ROOT_DIR/references/docs-map.md"
|
|
154
|
+
grep -q '`.github/release-template.md`' "$ROOT_DIR/references/docs-map.md"
|
|
155
|
+
grep -q '`.github/workflows/ci.yml`' "$ROOT_DIR/references/docs-map.md"
|
|
156
|
+
grep -q '`tools/bin/render-dashboard-demo-media.sh`' "$ROOT_DIR/references/docs-map.md"
|
|
157
|
+
grep -q '`tools/bin/render-architecture-infographics.sh`' "$ROOT_DIR/references/docs-map.md"
|
|
158
|
+
|
|
159
|
+
echo "public repo docs test passed"
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
FLOW_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
5
|
+
SOURCE_SCRIPT="${FLOW_ROOT}/tools/bin/reconcile-pr-worker.sh"
|
|
6
|
+
FLOW_CONFIG_LIB="${FLOW_ROOT}/tools/bin/flow-config-lib.sh"
|
|
7
|
+
FLOW_SHELL_LIB="${FLOW_ROOT}/tools/bin/flow-shell-lib.sh"
|
|
8
|
+
|
|
9
|
+
tmpdir="$(mktemp -d)"
|
|
10
|
+
trap 'rm -rf "$tmpdir"' EXIT
|
|
11
|
+
|
|
12
|
+
workspace_bin_dir="$tmpdir/workspace/bin"
|
|
13
|
+
shared_home="$tmpdir/shared-home"
|
|
14
|
+
flow_root="$shared_home/skills/openclaw/agent-control-plane"
|
|
15
|
+
flow_tools_dir="$flow_root/tools/bin"
|
|
16
|
+
flow_assets_dir="$flow_root/assets"
|
|
17
|
+
hooks_dir="$flow_root/hooks"
|
|
18
|
+
profile_home="$tmpdir/profiles"
|
|
19
|
+
capture_file="$tmpdir/capture.log"
|
|
20
|
+
|
|
21
|
+
mkdir -p "$workspace_bin_dir" "$flow_tools_dir" "$flow_assets_dir" "$hooks_dir" "$profile_home/demo"
|
|
22
|
+
cp "$SOURCE_SCRIPT" "$workspace_bin_dir/reconcile-pr-worker.sh"
|
|
23
|
+
cp "$FLOW_CONFIG_LIB" "$workspace_bin_dir/flow-config-lib.sh"
|
|
24
|
+
cp "$FLOW_SHELL_LIB" "$workspace_bin_dir/flow-shell-lib.sh"
|
|
25
|
+
|
|
26
|
+
cat >"$profile_home/demo/control-plane.yaml" <<EOF
|
|
27
|
+
id: "demo"
|
|
28
|
+
repo:
|
|
29
|
+
slug: "example/repo"
|
|
30
|
+
runtime:
|
|
31
|
+
orchestrator_agent_root: "$tmpdir/agent-root"
|
|
32
|
+
agent_repo_root: "$tmpdir/repo"
|
|
33
|
+
runs_root: "$tmpdir/runs"
|
|
34
|
+
EOF
|
|
35
|
+
|
|
36
|
+
cat >"$flow_tools_dir/agent-project-reconcile-pr-session" <<'EOF'
|
|
37
|
+
#!/usr/bin/env bash
|
|
38
|
+
set -euo pipefail
|
|
39
|
+
printf 'ARGV=%s\n' "$*" >"${TEST_CAPTURE_FILE:?}"
|
|
40
|
+
printf 'ACP_RUNS_ROOT=%s\n' "${ACP_RUNS_ROOT:-}" >>"${TEST_CAPTURE_FILE:?}"
|
|
41
|
+
printf 'F_LOSNING_RUNS_ROOT=%s\n' "${F_LOSNING_RUNS_ROOT:-}" >>"${TEST_CAPTURE_FILE:?}"
|
|
42
|
+
EOF
|
|
43
|
+
|
|
44
|
+
cat >"$hooks_dir/pr-reconcile-hooks.sh" <<'EOF'
|
|
45
|
+
#!/usr/bin/env bash
|
|
46
|
+
set -euo pipefail
|
|
47
|
+
exit 0
|
|
48
|
+
EOF
|
|
49
|
+
|
|
50
|
+
chmod +x \
|
|
51
|
+
"$workspace_bin_dir/reconcile-pr-worker.sh" \
|
|
52
|
+
"$workspace_bin_dir/flow-config-lib.sh" \
|
|
53
|
+
"$workspace_bin_dir/flow-shell-lib.sh" \
|
|
54
|
+
"$flow_tools_dir/agent-project-reconcile-pr-session" \
|
|
55
|
+
"$hooks_dir/pr-reconcile-hooks.sh"
|
|
56
|
+
|
|
57
|
+
expected_hook_file="$(cd "$hooks_dir" && pwd -P)/pr-reconcile-hooks.sh"
|
|
58
|
+
|
|
59
|
+
TEST_CAPTURE_FILE="$capture_file" \
|
|
60
|
+
SHARED_AGENT_HOME="$shared_home" \
|
|
61
|
+
ACP_ROOT="$flow_root" \
|
|
62
|
+
ACP_PROFILE_REGISTRY_ROOT="$profile_home" \
|
|
63
|
+
ACP_PROJECT_ID="demo" \
|
|
64
|
+
bash "$workspace_bin_dir/reconcile-pr-worker.sh" "acp-pr-55"
|
|
65
|
+
|
|
66
|
+
grep -q -- '--session acp-pr-55' "$capture_file"
|
|
67
|
+
grep -q -- '--repo-slug example/repo' "$capture_file"
|
|
68
|
+
grep -q -- "--repo-root $tmpdir/repo" "$capture_file"
|
|
69
|
+
grep -q -- "--runs-root $tmpdir/runs" "$capture_file"
|
|
70
|
+
grep -q -- "--history-root $tmpdir/agent-root/history" "$capture_file"
|
|
71
|
+
grep -q -- "--hook-file $expected_hook_file" "$capture_file"
|
|
72
|
+
grep -q -- "^ACP_RUNS_ROOT=$tmpdir/runs$" "$capture_file"
|
|
73
|
+
grep -q -- "^F_LOSNING_RUNS_ROOT=$tmpdir/runs$" "$capture_file"
|
|
74
|
+
|
|
75
|
+
echo "reconcile-pr-worker acp config routing test passed"
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
FLOW_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
5
|
+
SNAPSHOT_BIN="${FLOW_ROOT}/tools/bin/render-dashboard-snapshot.py"
|
|
6
|
+
|
|
7
|
+
tmpdir="$(mktemp -d)"
|
|
8
|
+
trap 'rm -rf "$tmpdir"' EXIT
|
|
9
|
+
|
|
10
|
+
profile_registry_root="$tmpdir/profiles"
|
|
11
|
+
profile_dir="$profile_registry_root/demo"
|
|
12
|
+
runs_root="$tmpdir/runtime/demo/runs"
|
|
13
|
+
state_root="$tmpdir/runtime/demo/state"
|
|
14
|
+
run_dir="$runs_root/demo-issue-1"
|
|
15
|
+
|
|
16
|
+
mkdir -p \
|
|
17
|
+
"$profile_dir" \
|
|
18
|
+
"$run_dir" \
|
|
19
|
+
"$state_root/resident-workers/issues/1" \
|
|
20
|
+
"$state_root/resident-workers/issues/issue-lane-recurring-general-openclaw-safe" \
|
|
21
|
+
"$state_root/retries/providers" \
|
|
22
|
+
"$state_root/scheduled-issues" \
|
|
23
|
+
"$state_root/resident-workers/issue-queue/pending"
|
|
24
|
+
|
|
25
|
+
cat >"$profile_dir/control-plane.yaml" <<EOF
|
|
26
|
+
schema_version: "1"
|
|
27
|
+
id: "demo"
|
|
28
|
+
repo:
|
|
29
|
+
slug: "example/demo-dashboard"
|
|
30
|
+
root: "$tmpdir/repo"
|
|
31
|
+
default_branch: "main"
|
|
32
|
+
runtime:
|
|
33
|
+
orchestrator_agent_root: "$tmpdir/runtime/demo"
|
|
34
|
+
worktree_root: "$tmpdir/worktrees"
|
|
35
|
+
agent_repo_root: "$tmpdir/repo"
|
|
36
|
+
runs_root: "$runs_root"
|
|
37
|
+
state_root: "$state_root"
|
|
38
|
+
history_root: "$tmpdir/runtime/demo/history"
|
|
39
|
+
retained_repo_root: "$tmpdir/repo"
|
|
40
|
+
vscode_workspace_file: "$tmpdir/demo.code-workspace"
|
|
41
|
+
session_naming:
|
|
42
|
+
issue_prefix: "demo-issue-"
|
|
43
|
+
pr_prefix: "demo-pr-"
|
|
44
|
+
execution:
|
|
45
|
+
coding_worker: "openclaw"
|
|
46
|
+
openclaw:
|
|
47
|
+
model: "primary/model"
|
|
48
|
+
thinking: "adaptive"
|
|
49
|
+
timeout_seconds: 900
|
|
50
|
+
EOF
|
|
51
|
+
|
|
52
|
+
cat >"$run_dir/run.env" <<'EOF'
|
|
53
|
+
TASK_KIND=issue
|
|
54
|
+
TASK_ID=1
|
|
55
|
+
SESSION=demo-issue-1
|
|
56
|
+
MODE=safe
|
|
57
|
+
STARTED_AT=2026-03-26T15:00:00Z
|
|
58
|
+
CODING_WORKER=openclaw
|
|
59
|
+
WORKTREE=/tmp/demo-worktree
|
|
60
|
+
BRANCH=agent/demo/issue-1
|
|
61
|
+
RESIDENT_WORKER_KEY=issue-lane-recurring-general-openclaw-safe
|
|
62
|
+
OPENCLAW_MODEL=primary/model
|
|
63
|
+
EOF
|
|
64
|
+
|
|
65
|
+
cat >"$run_dir/runner.env" <<'EOF'
|
|
66
|
+
RUNNER_STATE=succeeded
|
|
67
|
+
THREAD_ID=thread-demo-1
|
|
68
|
+
LAST_EXIT_CODE=0
|
|
69
|
+
LAST_FAILURE_REASON=''
|
|
70
|
+
UPDATED_AT=2026-03-26T15:01:00Z
|
|
71
|
+
EOF
|
|
72
|
+
|
|
73
|
+
cat >"$run_dir/result.env" <<'EOF'
|
|
74
|
+
OUTCOME=implemented
|
|
75
|
+
ACTION=host-publish-issue-pr
|
|
76
|
+
EOF
|
|
77
|
+
|
|
78
|
+
cat >"$state_root/resident-workers/issues/1/controller.env" <<'EOF'
|
|
79
|
+
ISSUE_ID=1
|
|
80
|
+
SESSION=demo-issue-1
|
|
81
|
+
CONTROLLER_PID=1234
|
|
82
|
+
CONTROLLER_MODE=safe
|
|
83
|
+
CONTROLLER_LOOP_COUNT=2
|
|
84
|
+
CONTROLLER_STATE=waiting-provider
|
|
85
|
+
CONTROLLER_REASON=provider-cooldown
|
|
86
|
+
ACTIVE_RESIDENT_WORKER_KEY=issue-lane-recurring-general-openclaw-safe
|
|
87
|
+
ACTIVE_RESIDENT_LANE_KIND=recurring
|
|
88
|
+
ACTIVE_RESIDENT_LANE_VALUE=general
|
|
89
|
+
ACTIVE_PROVIDER_BACKEND=openclaw
|
|
90
|
+
ACTIVE_PROVIDER_MODEL=primary/model
|
|
91
|
+
PROVIDER_SWITCH_COUNT=1
|
|
92
|
+
PROVIDER_FAILOVER_COUNT=1
|
|
93
|
+
PROVIDER_WAIT_COUNT=2
|
|
94
|
+
PROVIDER_WAIT_TOTAL_SECONDS=45
|
|
95
|
+
PROVIDER_LAST_WAIT_SECONDS=21
|
|
96
|
+
UPDATED_AT=2026-03-26T15:02:00Z
|
|
97
|
+
EOF
|
|
98
|
+
|
|
99
|
+
cat >"$state_root/resident-workers/issues/issue-lane-recurring-general-openclaw-safe/metadata.env" <<'EOF'
|
|
100
|
+
RESIDENT_WORKER_KIND=issue
|
|
101
|
+
RESIDENT_WORKER_SCOPE=lane
|
|
102
|
+
RESIDENT_WORKER_KEY=issue-lane-recurring-general-openclaw-safe
|
|
103
|
+
ISSUE_ID=1
|
|
104
|
+
CODING_WORKER=openclaw
|
|
105
|
+
TASK_COUNT=7
|
|
106
|
+
LAST_STATUS=running
|
|
107
|
+
LAST_STARTED_AT=2026-03-26T15:00:00Z
|
|
108
|
+
LAST_RUN_SESSION=demo-issue-1
|
|
109
|
+
EOF
|
|
110
|
+
|
|
111
|
+
cat >"$state_root/retries/providers/openclaw-primary-model.env" <<'EOF'
|
|
112
|
+
ATTEMPTS=2
|
|
113
|
+
NEXT_ATTEMPT_EPOCH=4102444800
|
|
114
|
+
NEXT_ATTEMPT_AT=2100-01-01T00:00:00Z
|
|
115
|
+
LAST_REASON=provider-quota-limit
|
|
116
|
+
UPDATED_AT=2026-03-26T15:03:00Z
|
|
117
|
+
EOF
|
|
118
|
+
|
|
119
|
+
cat >"$state_root/scheduled-issues/1.env" <<'EOF'
|
|
120
|
+
INTERVAL_SECONDS=600
|
|
121
|
+
LAST_STARTED_AT=2026-03-26T15:00:00Z
|
|
122
|
+
NEXT_DUE_AT=2026-03-26T15:10:00Z
|
|
123
|
+
UPDATED_AT=2026-03-26T15:00:00Z
|
|
124
|
+
EOF
|
|
125
|
+
|
|
126
|
+
cat >"$state_root/resident-workers/issue-queue/pending/issue-2.env" <<'EOF'
|
|
127
|
+
ISSUE_ID=2
|
|
128
|
+
SESSION=demo-issue-2
|
|
129
|
+
UPDATED_AT=2026-03-26T15:04:00Z
|
|
130
|
+
EOF
|
|
131
|
+
|
|
132
|
+
snapshot="$(ACP_PROFILE_REGISTRY_ROOT="$profile_registry_root" python3 "$SNAPSHOT_BIN" --pretty)"
|
|
133
|
+
|
|
134
|
+
grep -q '"profile_count": 1' <<<"$snapshot"
|
|
135
|
+
grep -q '"id": "demo"' <<<"$snapshot"
|
|
136
|
+
grep -q '"repo_slug": "example/demo-dashboard"' <<<"$snapshot"
|
|
137
|
+
grep -q '"session": "demo-issue-1"' <<<"$snapshot"
|
|
138
|
+
grep -q '"state": "waiting-provider"' <<<"$snapshot"
|
|
139
|
+
grep -q '"provider_failover_count": 1' <<<"$snapshot"
|
|
140
|
+
grep -q '"provider_wait_total_seconds": 45' <<<"$snapshot"
|
|
141
|
+
grep -q '"provider_key": "openclaw-primary-model"' <<<"$snapshot"
|
|
142
|
+
grep -q '"queued_issues": 1' <<<"$snapshot"
|
|
143
|
+
grep -q '"implemented_runs": 1' <<<"$snapshot"
|
|
144
|
+
grep -q '"live_resident_controllers": 0' <<<"$snapshot"
|
|
145
|
+
grep -q '"controller_live": false' <<<"$snapshot"
|
|
146
|
+
grep -q '"result_kind": "implemented"' <<<"$snapshot"
|
|
147
|
+
grep -q '"result_label": "Implemented"' <<<"$snapshot"
|
|
148
|
+
|
|
149
|
+
echo "render dashboard snapshot test passed"
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
FLOW_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
5
|
+
SCRIPT="${FLOW_ROOT}/tools/bin/render-flow-config.sh"
|
|
6
|
+
SCAFFOLD_SCRIPT="${FLOW_ROOT}/tools/bin/scaffold-profile.sh"
|
|
7
|
+
|
|
8
|
+
tmpdir="$(mktemp -d)"
|
|
9
|
+
trap 'rm -rf "$tmpdir"' EXIT
|
|
10
|
+
|
|
11
|
+
profile_home="$tmpdir/profiles"
|
|
12
|
+
repo_slug="example-owner/alpha"
|
|
13
|
+
|
|
14
|
+
bash "$SCAFFOLD_SCRIPT" --profile-home "$profile_home" --profile-id alpha --repo-slug "$repo_slug" >/dev/null
|
|
15
|
+
bash "$SCAFFOLD_SCRIPT" --profile-home "$profile_home" --profile-id demo --repo-slug example/demo-platform >/dev/null
|
|
16
|
+
profile_notes_real="$(cd "$profile_home/demo" && pwd -P)/README.md"
|
|
17
|
+
|
|
18
|
+
output="$(
|
|
19
|
+
ACP_PROFILE_REGISTRY_ROOT="$profile_home" \
|
|
20
|
+
AGENT_PROJECT_ID="alpha" \
|
|
21
|
+
ACP_PROJECT_ID="demo" \
|
|
22
|
+
bash "$SCRIPT"
|
|
23
|
+
)"
|
|
24
|
+
|
|
25
|
+
grep -q "^CONFIG_YAML=${profile_home}/demo/control-plane.yaml$" <<<"$output"
|
|
26
|
+
grep -q '^PROFILE_ID=demo$' <<<"$output"
|
|
27
|
+
grep -q '^PROFILE_SELECTION_MODE=explicit$' <<<"$output"
|
|
28
|
+
grep -q "^PROFILE_NOTES=${profile_notes_real}$" <<<"$output"
|
|
29
|
+
grep -q '^PROFILE_NOTES_EXISTS=yes$' <<<"$output"
|
|
30
|
+
grep -Eq '^AVAILABLE_PROFILES=(demo,alpha|alpha,demo)$' <<<"$output"
|
|
31
|
+
grep -q '^EFFECTIVE_CODING_WORKER=openclaw$' <<<"$output"
|
|
32
|
+
grep -q '^EFFECTIVE_PROVIDER_QUOTA_COOLDOWNS=300,900,1800,3600$' <<<"$output"
|
|
33
|
+
grep -q '^EFFECTIVE_OPENCLAW_MODEL=openrouter/stepfun/step-3.5-flash:free$' <<<"$output"
|
|
34
|
+
grep -q '^EFFECTIVE_AGENT_REPO_ROOT=/tmp/agent-control-plane-demo/repo$' <<<"$output"
|
|
35
|
+
|
|
36
|
+
echo "render flow config demo profile test passed"
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
FLOW_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
5
|
+
SCRIPT="${FLOW_ROOT}/tools/bin/render-flow-config.sh"
|
|
6
|
+
|
|
7
|
+
tmpdir="$(mktemp -d)"
|
|
8
|
+
trap 'rm -rf "$tmpdir"' EXIT
|
|
9
|
+
|
|
10
|
+
profile_home="$tmpdir/profiles"
|
|
11
|
+
profile_dir="$profile_home/demo"
|
|
12
|
+
state_root="$tmpdir/runtime/demo/state"
|
|
13
|
+
mkdir -p "$profile_dir" "$state_root/retries/providers"
|
|
14
|
+
|
|
15
|
+
cat >"$profile_dir/control-plane.yaml" <<EOF
|
|
16
|
+
id: "demo"
|
|
17
|
+
repo:
|
|
18
|
+
slug: "example/demo"
|
|
19
|
+
root: "${tmpdir}/repo"
|
|
20
|
+
runtime:
|
|
21
|
+
orchestrator_agent_root: "${tmpdir}/runtime/demo"
|
|
22
|
+
agent_repo_root: "${tmpdir}/repo"
|
|
23
|
+
worktree_root: "${tmpdir}/worktrees"
|
|
24
|
+
runs_root: "${tmpdir}/runtime/demo/runs"
|
|
25
|
+
state_root: "${state_root}"
|
|
26
|
+
session_naming:
|
|
27
|
+
issue_prefix: "demo-issue-"
|
|
28
|
+
pr_prefix: "demo-pr-"
|
|
29
|
+
issue_branch_prefix: "agent/demo/issue"
|
|
30
|
+
pr_worktree_branch_prefix: "agent/demo/pr"
|
|
31
|
+
execution:
|
|
32
|
+
coding_worker: "openclaw"
|
|
33
|
+
provider_quota:
|
|
34
|
+
cooldowns: "300,900"
|
|
35
|
+
provider_pool_order: "primary fallback"
|
|
36
|
+
provider_pools:
|
|
37
|
+
primary:
|
|
38
|
+
coding_worker: "openclaw"
|
|
39
|
+
openclaw:
|
|
40
|
+
model: "primary/model"
|
|
41
|
+
thinking: "adaptive"
|
|
42
|
+
timeout_seconds: 321
|
|
43
|
+
fallback:
|
|
44
|
+
coding_worker: "claude"
|
|
45
|
+
claude:
|
|
46
|
+
model: "fallback-sonnet"
|
|
47
|
+
permission_mode: "dontAsk"
|
|
48
|
+
effort: "high"
|
|
49
|
+
timeout_seconds: 777
|
|
50
|
+
max_attempts: 5
|
|
51
|
+
retry_backoff_seconds: 12
|
|
52
|
+
EOF
|
|
53
|
+
|
|
54
|
+
printf '# demo\n' >"$profile_dir/README.md"
|
|
55
|
+
|
|
56
|
+
future_epoch=$(( $(date +%s) + 3600 ))
|
|
57
|
+
cat >"$state_root/retries/providers/openclaw-primary-model.env" <<EOF
|
|
58
|
+
ATTEMPTS=1
|
|
59
|
+
NEXT_ATTEMPT_EPOCH=${future_epoch}
|
|
60
|
+
NEXT_ATTEMPT_AT=2099-01-01T00:00:00Z
|
|
61
|
+
LAST_REASON=provider-quota-limit
|
|
62
|
+
UPDATED_AT=2099-01-01T00:00:00Z
|
|
63
|
+
EOF
|
|
64
|
+
|
|
65
|
+
output="$(
|
|
66
|
+
ACP_PROFILE_REGISTRY_ROOT="$profile_home" \
|
|
67
|
+
ACP_PROJECT_ID="demo" \
|
|
68
|
+
bash "$SCRIPT"
|
|
69
|
+
)"
|
|
70
|
+
|
|
71
|
+
grep -q '^PROFILE_ID=demo$' <<<"$output"
|
|
72
|
+
grep -q '^EFFECTIVE_PROVIDER_POOL_ORDER=primary fallback$' <<<"$output"
|
|
73
|
+
grep -q '^EFFECTIVE_PROVIDER_POOL_NAME=fallback$' <<<"$output"
|
|
74
|
+
grep -q '^EFFECTIVE_PROVIDER_POOL_BACKEND=claude$' <<<"$output"
|
|
75
|
+
grep -q '^EFFECTIVE_PROVIDER_POOL_MODEL=fallback-sonnet$' <<<"$output"
|
|
76
|
+
grep -q '^EFFECTIVE_PROVIDER_POOLS_EXHAUSTED=no$' <<<"$output"
|
|
77
|
+
grep -q '^EFFECTIVE_PROVIDER_POOL_SELECTION_REASON=ready$' <<<"$output"
|
|
78
|
+
grep -q '^EFFECTIVE_CODING_WORKER=claude$' <<<"$output"
|
|
79
|
+
grep -q '^EFFECTIVE_CLAUDE_MODEL=fallback-sonnet$' <<<"$output"
|
|
80
|
+
|
|
81
|
+
echo "render flow config provider pool fallback test passed"
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
FLOW_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
5
|
+
SCRIPT="${FLOW_ROOT}/tools/bin/render-flow-config.sh"
|
|
6
|
+
SCAFFOLD_SCRIPT="${FLOW_ROOT}/tools/bin/scaffold-profile.sh"
|
|
7
|
+
|
|
8
|
+
tmpdir="$(mktemp -d)"
|
|
9
|
+
trap 'rm -rf "$tmpdir"' EXIT
|
|
10
|
+
|
|
11
|
+
profile_home="$tmpdir/profiles"
|
|
12
|
+
repo_slug="example-owner/alpha"
|
|
13
|
+
|
|
14
|
+
bash "$SCAFFOLD_SCRIPT" --profile-home "$profile_home" --profile-id alpha --repo-slug "$repo_slug" >/dev/null
|
|
15
|
+
bash "$SCAFFOLD_SCRIPT" --profile-home "$profile_home" --profile-id demo --repo-slug example/demo-platform >/dev/null
|
|
16
|
+
profile_notes_real="$(cd "$profile_home/alpha" && pwd -P)/README.md"
|
|
17
|
+
|
|
18
|
+
output="$(
|
|
19
|
+
ACP_PROFILE_REGISTRY_ROOT="$profile_home" \
|
|
20
|
+
ACP_AGENT_REPO_ROOT="/tmp/agent-repo" \
|
|
21
|
+
ACP_CODING_WORKER="codex" \
|
|
22
|
+
ACP_CLAUDE_MODEL="sonnet" \
|
|
23
|
+
ACP_CLAUDE_PERMISSION_MODE="dontAsk" \
|
|
24
|
+
ACP_CLAUDE_EFFORT="high" \
|
|
25
|
+
ACP_CLAUDE_TIMEOUT_SECONDS="777" \
|
|
26
|
+
ACP_CLAUDE_MAX_ATTEMPTS="5" \
|
|
27
|
+
ACP_CLAUDE_RETRY_BACKOFF_SECONDS="12" \
|
|
28
|
+
ACP_OPENCLAW_MODEL="override/model" \
|
|
29
|
+
bash "$SCRIPT"
|
|
30
|
+
)"
|
|
31
|
+
|
|
32
|
+
grep -q '^FLOW_SKILL_DIR=' <<<"$output"
|
|
33
|
+
grep -q "^CONFIG_YAML=${profile_home}/alpha/control-plane.yaml$" <<<"$output"
|
|
34
|
+
grep -q '^PROFILE_ID=alpha$' <<<"$output"
|
|
35
|
+
grep -q '^PROFILE_NOTES_EXISTS=yes$' <<<"$output"
|
|
36
|
+
grep -q "^PROFILE_NOTES=${profile_notes_real}$" <<<"$output"
|
|
37
|
+
grep -q '^PROFILE_SELECTION_HINT=Set ACP_PROJECT_ID=<id> or AGENT_PROJECT_ID=<id> when multiple available profiles exist\.$' <<<"$output"
|
|
38
|
+
grep -q '^PROFILE_SELECTION_MODE=implicit-default$' <<<"$output"
|
|
39
|
+
grep -q '^EFFECTIVE_AGENT_REPO_ROOT=/tmp/agent-repo$' <<<"$output"
|
|
40
|
+
grep -q '^EFFECTIVE_CODING_WORKER=codex$' <<<"$output"
|
|
41
|
+
grep -q '^EFFECTIVE_PROVIDER_QUOTA_COOLDOWNS=300,900,1800,3600$' <<<"$output"
|
|
42
|
+
grep -q '^EFFECTIVE_CODEX_PROFILE_SAFE=alpha_safe$' <<<"$output"
|
|
43
|
+
grep -q '^EFFECTIVE_CODEX_PROFILE_BYPASS=alpha_bypass$' <<<"$output"
|
|
44
|
+
grep -q '^EFFECTIVE_CLAUDE_MODEL=sonnet$' <<<"$output"
|
|
45
|
+
grep -q '^EFFECTIVE_CLAUDE_PERMISSION_MODE=dontAsk$' <<<"$output"
|
|
46
|
+
grep -q '^EFFECTIVE_CLAUDE_EFFORT=high$' <<<"$output"
|
|
47
|
+
grep -q '^EFFECTIVE_CLAUDE_TIMEOUT_SECONDS=777$' <<<"$output"
|
|
48
|
+
grep -q '^EFFECTIVE_CLAUDE_MAX_ATTEMPTS=5$' <<<"$output"
|
|
49
|
+
grep -q '^EFFECTIVE_CLAUDE_RETRY_BACKOFF_SECONDS=12$' <<<"$output"
|
|
50
|
+
grep -q '^EFFECTIVE_OPENCLAW_MODEL=override/model$' <<<"$output"
|
|
51
|
+
|
|
52
|
+
echo "render flow config test passed"
|