agent-control-plane 0.1.1 → 0.1.3

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.
Files changed (184) hide show
  1. package/README.md +6 -0
  2. package/npm/bin/agent-control-plane.js +149 -5
  3. package/package.json +2 -3
  4. package/tools/vendor/codex-quota/README.md +8 -16
  5. package/tools/vendor/codex-quota/lib/claude-accounts.js +2 -68
  6. package/tools/vendor/codex-quota/lib/claude-usage.js +76 -667
  7. package/tools/vendor/codex-quota/lib/display.js +6 -14
  8. package/tools/vendor/codex-quota/lib/handlers.js +32 -117
  9. package/tools/vendor/codex-quota/lib/sync.js +9 -14
  10. package/tools/tests/test-agent-control-plane-npm-cli.sh +0 -280
  11. package/tools/tests/test-agent-github-update-labels-falls-back-to-repository-id.sh +0 -56
  12. package/tools/tests/test-agent-project-claude-session-wrapper-clears-stale-sandbox-artifacts.sh +0 -89
  13. package/tools/tests/test-agent-project-claude-session-wrapper-does-not-retry-provider-quota.sh +0 -82
  14. package/tools/tests/test-agent-project-claude-session-wrapper-retries-transient-failures.sh +0 -90
  15. package/tools/tests/test-agent-project-claude-session-wrapper-times-out.sh +0 -73
  16. package/tools/tests/test-agent-project-claude-session-wrapper.sh +0 -103
  17. package/tools/tests/test-agent-project-cleanup-session-orphan-fallback.sh +0 -90
  18. package/tools/tests/test-agent-project-cleanup-session-skip-worktree-cleanup.sh +0 -90
  19. package/tools/tests/test-agent-project-codex-live-thread-persist.sh +0 -76
  20. package/tools/tests/test-agent-project-codex-recovery.sh +0 -731
  21. package/tools/tests/test-agent-project-codex-session-wrapper-clears-stale-sandbox-artifacts.sh +0 -105
  22. package/tools/tests/test-agent-project-codex-session-wrapper.sh +0 -97
  23. package/tools/tests/test-agent-project-open-pr-worktree-config-prefix.sh +0 -81
  24. package/tools/tests/test-agent-project-openclaw-session-wrapper-clears-stale-sandbox-artifacts.sh +0 -109
  25. package/tools/tests/test-agent-project-openclaw-session-wrapper-infers-blocked-result-contract.sh +0 -89
  26. package/tools/tests/test-agent-project-openclaw-session-wrapper-recovers-literal-env-artifacts.sh +0 -113
  27. package/tools/tests/test-agent-project-openclaw-session-wrapper-recovers-version-mismatch.sh +0 -135
  28. package/tools/tests/test-agent-project-openclaw-session-wrapper-resident.sh +0 -179
  29. package/tools/tests/test-agent-project-openclaw-session-wrapper-reuses-existing-agent-after-add-race.sh +0 -119
  30. package/tools/tests/test-agent-project-openclaw-session-wrapper-terminates-rate-limit-hang.sh +0 -91
  31. package/tools/tests/test-agent-project-openclaw-session-wrapper.sh +0 -117
  32. package/tools/tests/test-agent-project-publish-issue-pr-prunes-stale-worktree-entry.sh +0 -148
  33. package/tools/tests/test-agent-project-publish-issue-pr-reads-archived-session.sh +0 -146
  34. package/tools/tests/test-agent-project-publish-issue-pr-recovers-final-head.sh +0 -145
  35. package/tools/tests/test-agent-project-publish-issue-pr-reuses-existing-worktree.sh +0 -147
  36. package/tools/tests/test-agent-project-reconcile-failure-reason.sh +0 -456
  37. package/tools/tests/test-agent-project-reconcile-issue-archived-session-fallback.sh +0 -96
  38. package/tools/tests/test-agent-project-reconcile-issue-before-blocked.sh +0 -90
  39. package/tools/tests/test-agent-project-reconcile-issue-host-verification-recovery-uses-recovered-worktree.sh +0 -212
  40. package/tools/tests/test-agent-project-reconcile-issue-host-verification-recovery.sh +0 -207
  41. package/tools/tests/test-agent-project-reconcile-issue-provider-quota-schedules-provider-cooldown.sh +0 -101
  42. package/tools/tests/test-agent-project-reconcile-issue-session-backfills-lane-metadata-from-worker-key.sh +0 -113
  43. package/tools/tests/test-agent-project-reconcile-issue-session-clears-stale-failed-summary.sh +0 -117
  44. package/tools/tests/test-agent-project-reconcile-issue-session-initializes-shared-agent-home.sh +0 -55
  45. package/tools/tests/test-agent-project-reconcile-issue-session-normalizes-runner-state.sh +0 -125
  46. package/tools/tests/test-agent-project-reconcile-issue-session-records-invalid-contract-summary.sh +0 -118
  47. package/tools/tests/test-agent-project-reconcile-issue-session-skips-duplicate-blocked-comment.sh +0 -144
  48. package/tools/tests/test-agent-project-reconcile-issue-session-standardizes-no-commits-blocker.sh +0 -145
  49. package/tools/tests/test-agent-project-reconcile-issue-session-synthesizes-blocked-comment.sh +0 -139
  50. package/tools/tests/test-agent-project-reconcile-pr-blocked-host-recovery.sh +0 -242
  51. package/tools/tests/test-agent-project-reconcile-pr-guard-blocked-no-commit.sh +0 -142
  52. package/tools/tests/test-agent-project-reconcile-pr-provider-quota-schedules-provider-cooldown.sh +0 -106
  53. package/tools/tests/test-agent-project-reconcile-pr-session-initializes-shared-agent-home.sh +0 -66
  54. package/tools/tests/test-agent-project-reconcile-pr-updated-branch-noop.sh +0 -129
  55. package/tools/tests/test-audit-agent-worktrees-active-launch-skips-git-inspection.sh +0 -69
  56. package/tools/tests/test-audit-agent-worktrees-broken-worktree.sh +0 -43
  57. package/tools/tests/test-audit-agent-worktrees-pending-launch-owner.sh +0 -46
  58. package/tools/tests/test-audit-agent-worktrees-unreconciled-owner.sh +0 -79
  59. package/tools/tests/test-audit-issue-routing-managed-branch-globs.sh +0 -56
  60. package/tools/tests/test-branch-verification-guard-generated-artifacts.sh +0 -72
  61. package/tools/tests/test-branch-verification-guard-targeted-coverage.sh +0 -125
  62. package/tools/tests/test-codex-quota-manager-failure-driven-rotation.sh +0 -178
  63. package/tools/tests/test-codex-quota-wrapper.sh +0 -37
  64. package/tools/tests/test-contribution-docs.sh +0 -18
  65. package/tools/tests/test-control-plane-dashboard-runtime-smoke.sh +0 -343
  66. package/tools/tests/test-create-follow-up-issue.sh +0 -73
  67. package/tools/tests/test-dashboard-launchd-bootstrap.sh +0 -55
  68. package/tools/tests/test-flow-export-execution-env-exports-repo-id.sh +0 -30
  69. package/tools/tests/test-flow-export-github-cli-auth-env-prefers-git-credential.sh +0 -48
  70. package/tools/tests/test-flow-github-api-repo-fallback-preserves-input.sh +0 -85
  71. package/tools/tests/test-flow-github-api-repo-prefers-explicit-repository-id.sh +0 -60
  72. package/tools/tests/test-flow-github-issue-list-falls-back-to-repository-id.sh +0 -64
  73. package/tools/tests/test-flow-github-pr-list-falls-back-to-repository-id.sh +0 -77
  74. package/tools/tests/test-flow-resident-can-reuse-does-not-leak-metadata.sh +0 -52
  75. package/tools/tests/test-flow-resident-reap-stale-controllers.sh +0 -63
  76. package/tools/tests/test-flow-resolve-codex-quota-tools.sh +0 -104
  77. package/tools/tests/test-flow-runtime-doctor-profile-selection.sh +0 -27
  78. package/tools/tests/test-heartbeat-codex-pr-linked-issue-exclusion.sh +0 -79
  79. package/tools/tests/test-heartbeat-hooks-enqueue-resident-issue-for-idle-controller.sh +0 -115
  80. package/tools/tests/test-heartbeat-hooks-enqueue-resident-issue-for-live-lane-controller.sh +0 -117
  81. package/tools/tests/test-heartbeat-hooks-start-resident-issue-loop-claude.sh +0 -96
  82. package/tools/tests/test-heartbeat-hooks-start-resident-issue-loop-codex.sh +0 -96
  83. package/tools/tests/test-heartbeat-hooks-start-resident-issue-loop.sh +0 -96
  84. package/tools/tests/test-heartbeat-loop-auth-wait-does-not-consume-capacity.sh +0 -170
  85. package/tools/tests/test-heartbeat-loop-blocked-recovery-lane.sh +0 -201
  86. package/tools/tests/test-heartbeat-loop-blocked-recovery-vs-pr-reservation.sh +0 -201
  87. package/tools/tests/test-heartbeat-loop-idle-resident-controller-does-not-block-launches.sh +0 -160
  88. package/tools/tests/test-heartbeat-loop-pr-launch-dedup.sh +0 -133
  89. package/tools/tests/test-heartbeat-loop-provider-cooldown-suppresses-launches.sh +0 -157
  90. package/tools/tests/test-heartbeat-loop-reaps-stale-resident-controller.sh +0 -181
  91. package/tools/tests/test-heartbeat-loop-waiting-provider-resident-controller-does-not-block-launches.sh +0 -160
  92. package/tools/tests/test-heartbeat-ready-issues-blocked-recovery.sh +0 -134
  93. package/tools/tests/test-heartbeat-safe-auto-dynamic-concurrency.sh +0 -162
  94. package/tools/tests/test-heartbeat-safe-auto-no-tmux-sessions.sh +0 -136
  95. package/tools/tests/test-heartbeat-safe-auto-openclaw-skips-codex-quota.sh +0 -139
  96. package/tools/tests/test-heartbeat-safe-auto-quota-health-signal.sh +0 -119
  97. package/tools/tests/test-heartbeat-safe-auto-stale-shared-loop-pid-does-not-skip.sh +0 -140
  98. package/tools/tests/test-heartbeat-safe-auto-static-capacity-without-quota-cache.sh +0 -142
  99. package/tools/tests/test-heartbeat-safe-auto-zero-healthy-pools.sh +0 -141
  100. package/tools/tests/test-heartbeat-sync-issue-labels-empty-schedule.sh +0 -65
  101. package/tools/tests/test-heartbeat-sync-open-agent-prs-terminal-clears-running.sh +0 -179
  102. package/tools/tests/test-install-dashboard-launchd.sh +0 -78
  103. package/tools/tests/test-install-project-launchd-adds-tool-paths.sh +0 -87
  104. package/tools/tests/test-install-project-launchd.sh +0 -110
  105. package/tools/tests/test-issue-local-workspace-install-policy.sh +0 -81
  106. package/tools/tests/test-issue-publish-scope-guard-docs-signal.sh +0 -70
  107. package/tools/tests/test-issue-reconcile-hooks-success-clears-blocked.sh +0 -36
  108. package/tools/tests/test-kick-scheduler-requires-explicit-profile.sh +0 -47
  109. package/tools/tests/test-label-follow-up-issues-falls-back-to-repository-id.sh +0 -132
  110. package/tools/tests/test-manual-operator-entrypoints-require-explicit-profile.sh +0 -64
  111. package/tools/tests/test-package-funding-metadata.sh +0 -21
  112. package/tools/tests/test-package-public-metadata.sh +0 -62
  113. package/tools/tests/test-placeholder-worker-adapters.sh +0 -38
  114. package/tools/tests/test-pr-reconcile-hooks-refreshes-recurring-issue-checklist.sh +0 -110
  115. package/tools/tests/test-pr-risk-cohesive-mobile-locale-scope.sh +0 -70
  116. package/tools/tests/test-pr-risk-fix-label-semantics.sh +0 -114
  117. package/tools/tests/test-pr-risk-local-first-no-checks.sh +0 -70
  118. package/tools/tests/test-prepare-worktree-simple-repo-baseline.sh +0 -67
  119. package/tools/tests/test-profile-activate.sh +0 -33
  120. package/tools/tests/test-profile-adopt-allow-missing-repo.sh +0 -68
  121. package/tools/tests/test-profile-adopt-skip-workspace-sync-missing-file.sh +0 -61
  122. package/tools/tests/test-profile-adopt-syncs-anchor-and-workspace.sh +0 -90
  123. package/tools/tests/test-profile-smoke-collision.sh +0 -44
  124. package/tools/tests/test-profile-smoke-invalid-claude-config.sh +0 -31
  125. package/tools/tests/test-profile-smoke-invalid-provider-pool.sh +0 -68
  126. package/tools/tests/test-profile-smoke-repo-slug-mismatch.sh +0 -36
  127. package/tools/tests/test-profile-smoke.sh +0 -45
  128. package/tools/tests/test-project-init-force-and-skip-sync.sh +0 -61
  129. package/tools/tests/test-project-init-repo-slug-mismatch.sh +0 -29
  130. package/tools/tests/test-project-init.sh +0 -66
  131. package/tools/tests/test-project-launchd-bootstrap.sh +0 -66
  132. package/tools/tests/test-project-remove.sh +0 -150
  133. package/tools/tests/test-project-runtime-supervisor.sh +0 -47
  134. package/tools/tests/test-project-runtimectl-launchd.sh +0 -115
  135. package/tools/tests/test-project-runtimectl-missing-profile.sh +0 -54
  136. package/tools/tests/test-project-runtimectl-start-falls-back-to-bootstrap.sh +0 -108
  137. package/tools/tests/test-project-runtimectl-status-reports-supervisor-as-heartbeat-parent.sh +0 -95
  138. package/tools/tests/test-project-runtimectl-status-supervisor-running.sh +0 -59
  139. package/tools/tests/test-project-runtimectl-stop-cancels-pending-kick.sh +0 -85
  140. package/tools/tests/test-project-runtimectl-stop-clears-running-labels.sh +0 -78
  141. package/tools/tests/test-project-runtimectl.sh +0 -212
  142. package/tools/tests/test-provider-cooldown-state-prefers-runtime-worker-context.sh +0 -39
  143. package/tools/tests/test-provider-cooldown-state.sh +0 -59
  144. package/tools/tests/test-public-repo-docs.sh +0 -160
  145. package/tools/tests/test-reconcile-pr-worker-acp-config-routing.sh +0 -75
  146. package/tools/tests/test-render-dashboard-snapshot.sh +0 -149
  147. package/tools/tests/test-render-flow-config-demo-profile.sh +0 -36
  148. package/tools/tests/test-render-flow-config-provider-pool-fallback.sh +0 -81
  149. package/tools/tests/test-render-flow-config.sh +0 -52
  150. package/tools/tests/test-run-codex-task-claude-routing.sh +0 -125
  151. package/tools/tests/test-run-codex-task-codex-resident-routing.sh +0 -108
  152. package/tools/tests/test-run-codex-task-kilo-routing.sh +0 -98
  153. package/tools/tests/test-run-codex-task-openclaw-resident-routing.sh +0 -117
  154. package/tools/tests/test-run-codex-task-openclaw-routing.sh +0 -113
  155. package/tools/tests/test-run-codex-task-opencode-routing.sh +0 -98
  156. package/tools/tests/test-run-codex-task-provider-pool-fallback-routing.sh +0 -146
  157. package/tools/tests/test-scaffold-profile.sh +0 -108
  158. package/tools/tests/test-serve-dashboard.sh +0 -93
  159. package/tools/tests/test-start-issue-worker-blocked-context.sh +0 -129
  160. package/tools/tests/test-start-issue-worker-blocks-complete-recurring-checklist.sh +0 -189
  161. package/tools/tests/test-start-issue-worker-local-install-routing.sh +0 -157
  162. package/tools/tests/test-start-issue-worker-profile-template-routing.sh +0 -149
  163. package/tools/tests/test-start-issue-worker-recurring-resident-reuse-codex.sh +0 -212
  164. package/tools/tests/test-start-issue-worker-recurring-resident-reuse.sh +0 -219
  165. package/tools/tests/test-start-issue-worker-renders-verification-snippet.sh +0 -155
  166. package/tools/tests/test-start-issue-worker-resident-reuse-falls-back-to-new-worktree.sh +0 -199
  167. package/tools/tests/test-start-pr-fix-worker-host-blocker-context.sh +0 -275
  168. package/tools/tests/test-start-resident-issue-loop-adopts-next-recurring-issue.sh +0 -185
  169. package/tools/tests/test-start-resident-issue-loop-clears-pending-while-waiting-due.sh +0 -152
  170. package/tools/tests/test-start-resident-issue-loop-consumes-queued-lease.sh +0 -186
  171. package/tools/tests/test-start-resident-issue-loop-fails-over-provider-pool.sh +0 -212
  172. package/tools/tests/test-start-resident-issue-loop-immediate-cycles.sh +0 -148
  173. package/tools/tests/test-start-resident-issue-loop-waits-for-provider.sh +0 -194
  174. package/tools/tests/test-start-resident-issue-loop-waits-for-terminal-reconcile-status.sh +0 -198
  175. package/tools/tests/test-start-resident-issue-loop-yields-to-live-lane-controller.sh +0 -145
  176. package/tools/tests/test-sync-pr-labels-fix-lane-uses-repair-queued.sh +0 -67
  177. package/tools/tests/test-sync-recurring-issue-checklist-backfills-workflow-complete-blocker.sh +0 -70
  178. package/tools/tests/test-sync-recurring-issue-checklist.sh +0 -95
  179. package/tools/tests/test-sync-shared-agent-home-local-source-root.sh +0 -66
  180. package/tools/tests/test-sync-shared-agent-home-preserves-unrelated-workflow-catalog-skill.sh +0 -47
  181. package/tools/tests/test-test-smoke.sh +0 -86
  182. package/tools/tests/test-uninstall-project-launchd.sh +0 -37
  183. package/tools/tests/test-update-github-labels-prefers-sibling-helper.sh +0 -49
  184. package/tools/tests/test-workflow-catalog.sh +0 -43
@@ -1,212 +0,0 @@
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/agent-project-reconcile-issue-session"
6
- RECORD_VERIFICATION_SCRIPT="${FLOW_ROOT}/tools/bin/record-verification.sh"
7
- RESIDENT_LIB="${FLOW_ROOT}/tools/bin/flow-resident-worker-lib.sh"
8
- FLOW_CONFIG_LIB="${FLOW_ROOT}/tools/bin/flow-config-lib.sh"
9
- FLOW_SHELL_LIB="${FLOW_ROOT}/tools/bin/flow-shell-lib.sh"
10
-
11
- tmpdir="$(mktemp -d)"
12
- trap 'rm -rf "$tmpdir"' EXIT
13
-
14
- shared_home="$tmpdir/shared-home"
15
- shared_bin="$shared_home/tools/bin"
16
- runs_root="$tmpdir/runs"
17
- repo_root="$tmpdir/repo"
18
- origin_root="$tmpdir/origin.git"
19
- recovery_worktree="$tmpdir/recovery-worktree"
20
- session="demo-issue-13"
21
- run_dir="$runs_root/$session"
22
- capture_file="$tmpdir/publish-attempts.log"
23
-
24
- mkdir -p "$shared_bin" "$runs_root" "$repo_root" "$run_dir"
25
- cp "$SOURCE_SCRIPT" "$shared_bin/agent-project-reconcile-issue-session"
26
- cp "$RECORD_VERIFICATION_SCRIPT" "$shared_bin/record-verification.sh"
27
- cp "$RESIDENT_LIB" "$shared_bin/flow-resident-worker-lib.sh"
28
- cp "$FLOW_CONFIG_LIB" "$shared_bin/flow-config-lib.sh"
29
- cp "$FLOW_SHELL_LIB" "$shared_bin/flow-shell-lib.sh"
30
-
31
- cat >"$shared_bin/agent-project-worker-status" <<EOF_STATUS
32
- #!/usr/bin/env bash
33
- set -euo pipefail
34
- printf 'SESSION=%s\n' "$session"
35
- printf 'STATUS=SUCCEEDED\n'
36
- printf 'META_FILE=%s\n' "$run_dir/run.env"
37
- EOF_STATUS
38
-
39
- cat >"$shared_bin/agent-project-publish-issue-pr" <<'EOF_PUBLISH'
40
- #!/usr/bin/env bash
41
- set -euo pipefail
42
-
43
- runs_root=""
44
- session=""
45
-
46
- while [[ $# -gt 0 ]]; do
47
- case "$1" in
48
- --runs-root) runs_root="${2:-}"; shift 2 ;;
49
- --session) session="${2:-}"; shift 2 ;;
50
- *) shift ;;
51
- esac
52
- done
53
-
54
- run_dir="${runs_root}/${session}"
55
- verification_file="${run_dir}/verification.jsonl"
56
- attempt_count="$(wc -l <"${TEST_CAPTURE_FILE:?}" 2>/dev/null || echo 0)"
57
- printf 'ATTEMPT\n' >>"${TEST_CAPTURE_FILE:?}"
58
-
59
- if [[ "$attempt_count" == "0" ]]; then
60
- printf 'WORKTREE_RECOVERY=created\n' >&2
61
- printf 'RECOVERY_WORKTREE=%s\n' "${TEST_RECOVERY_WORKTREE:?}" >&2
62
- printf 'Verification guard blocked branch publication.\n' >&2
63
- exit 1
64
- fi
65
-
66
- if [[ ! -f "$verification_file" ]]; then
67
- printf 'Verification guard blocked branch publication.\n' >&2
68
- exit 1
69
- fi
70
- if ! grep -Fq '"command":"npm test"' "$verification_file"; then
71
- printf 'Verification guard blocked branch publication.\n' >&2
72
- exit 1
73
- fi
74
- if ! grep -Fq '"command":"node --test test/task-metrics.test.js"' "$verification_file"; then
75
- printf 'Verification guard blocked branch publication.\n' >&2
76
- exit 1
77
- fi
78
-
79
- printf 'PUBLISH_STATUS=created-pr\n'
80
- printf 'PR_NUMBER=45\n'
81
- printf 'PR_URL=https://github.com/example/repo/pull/45\n'
82
- EOF_PUBLISH
83
-
84
- cat >"$shared_bin/agent-project-cleanup-session" <<'EOF_CLEANUP'
85
- #!/usr/bin/env bash
86
- set -euo pipefail
87
- exit 0
88
- EOF_CLEANUP
89
-
90
- cat >"$shared_bin/gh" <<'EOF_GH'
91
- #!/usr/bin/env bash
92
- set -euo pipefail
93
-
94
- case "${1:-}:${2:-}" in
95
- api:user)
96
- printf 'tester\n'
97
- ;;
98
- *)
99
- exit 0
100
- ;;
101
- esac
102
- EOF_GH
103
-
104
- chmod +x \
105
- "$shared_bin/agent-project-reconcile-issue-session" \
106
- "$shared_bin/record-verification.sh" \
107
- "$shared_bin/agent-project-worker-status" \
108
- "$shared_bin/agent-project-publish-issue-pr" \
109
- "$shared_bin/agent-project-cleanup-session" \
110
- "$shared_bin/gh"
111
-
112
- git init --bare "$origin_root" >/dev/null 2>&1
113
- git -C "$repo_root" init -b main >/dev/null 2>&1
114
- git -C "$repo_root" config user.name "Test"
115
- git -C "$repo_root" config user.email "test@example.com"
116
-
117
- cat >"$repo_root/package.json" <<'EOF_PACKAGE'
118
- {
119
- "name": "demo-repo",
120
- "private": true,
121
- "type": "module",
122
- "scripts": {
123
- "test": "node --test"
124
- }
125
- }
126
- EOF_PACKAGE
127
-
128
- mkdir -p "$repo_root/src" "$repo_root/test"
129
- cat >"$repo_root/src/task-metrics.js" <<'EOF_SRC'
130
- export function metricValue() {
131
- return 1;
132
- }
133
- EOF_SRC
134
- cat >"$repo_root/test/task-metrics.test.js" <<'EOF_TEST'
135
- import test from 'node:test';
136
- import assert from 'node:assert/strict';
137
- import { metricValue } from '../src/task-metrics.js';
138
-
139
- test('metricValue returns branch value', () => {
140
- assert.equal(metricValue(), 2);
141
- });
142
- EOF_TEST
143
- git -C "$repo_root" add package.json src/task-metrics.js test/task-metrics.test.js
144
- git -C "$repo_root" commit -m "init" >/dev/null 2>&1
145
- git -C "$repo_root" remote add origin "$origin_root"
146
- git -C "$repo_root" push -u origin main >/dev/null 2>&1
147
-
148
- git -C "$repo_root" checkout -b agent/demo/issue-13 >/dev/null 2>&1
149
- cat >"$repo_root/src/task-metrics.js" <<'EOF_SRC_BRANCH'
150
- export function metricValue() {
151
- return 2;
152
- }
153
- EOF_SRC_BRANCH
154
- cat >"$repo_root/test/task-metrics.test.js" <<'EOF_TEST_BRANCH'
155
- import test from 'node:test';
156
- import assert from 'node:assert/strict';
157
- import { metricValue } from '../src/task-metrics.js';
158
-
159
- test('metricValue returns updated branch value', () => {
160
- assert.equal(metricValue(), 2);
161
- });
162
- EOF_TEST_BRANCH
163
- git -C "$repo_root" add src/task-metrics.js test/task-metrics.test.js
164
- git -C "$repo_root" commit -m "feat: update metric value" >/dev/null 2>&1
165
-
166
- git clone "$repo_root" "$recovery_worktree" >/dev/null 2>&1
167
- git -C "$recovery_worktree" checkout agent/demo/issue-13 >/dev/null 2>&1
168
-
169
- cat >"$run_dir/run.env" <<EOF_RUN
170
- ISSUE_ID=13
171
- BRANCH=agent/demo/issue-13
172
- WORKTREE=$tmpdir/missing-worktree
173
- EOF_RUN
174
-
175
- cat >"$run_dir/result.env" <<'EOF_RESULT'
176
- OUTCOME=implemented
177
- ACTION=host-publish-issue-pr
178
- ISSUE_ID=13
179
- EOF_RESULT
180
-
181
- cat >"$run_dir/prompt.md" <<'EOF_PROMPT'
182
- # Task
183
-
184
- Rules for each cycle:
185
- - Run `npm test` after code changes.
186
-
187
- Target files:
188
- - `src/task-metrics.js`
189
- - `test/task-metrics.test.js`
190
- EOF_PROMPT
191
-
192
- output="$(
193
- TEST_CAPTURE_FILE="$capture_file" \
194
- TEST_RECOVERY_WORKTREE="$recovery_worktree" \
195
- PATH="$shared_bin:$PATH" \
196
- bash "$shared_bin/agent-project-reconcile-issue-session" \
197
- --session "$session" \
198
- --repo-slug example/repo \
199
- --repo-root "$repo_root" \
200
- --runs-root "$runs_root" \
201
- --history-root "$tmpdir/history"
202
- )"
203
-
204
- grep -q '^STATUS=SUCCEEDED$' <<<"$output"
205
- grep -q '^PR_NUMBER=45$' <<<"$output"
206
- grep -q '^RESULT_CONTRACT_NOTE=host-recovered-verification-guard-blocked$' <<<"$output"
207
- grep -q '"command":"npm test"' "$run_dir/verification.jsonl"
208
- grep -q '"command":"node --test test/task-metrics.test.js"' "$run_dir/verification.jsonl"
209
- attempt_count="$(wc -l <"$capture_file" | tr -d ' ')"
210
- [[ "$attempt_count" == "2" ]]
211
-
212
- echo "agent-project reconcile issue host verification recovery uses recovered worktree test passed"
@@ -1,207 +0,0 @@
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/agent-project-reconcile-issue-session"
6
- RECORD_VERIFICATION_SCRIPT="${FLOW_ROOT}/tools/bin/record-verification.sh"
7
- RESIDENT_LIB="${FLOW_ROOT}/tools/bin/flow-resident-worker-lib.sh"
8
- FLOW_CONFIG_LIB="${FLOW_ROOT}/tools/bin/flow-config-lib.sh"
9
- FLOW_SHELL_LIB="${FLOW_ROOT}/tools/bin/flow-shell-lib.sh"
10
-
11
- tmpdir="$(mktemp -d)"
12
- trap 'rm -rf "$tmpdir"' EXIT
13
-
14
- shared_home="$tmpdir/shared-home"
15
- shared_bin="$shared_home/tools/bin"
16
- shared_assets="$shared_home/assets"
17
- runs_root="$tmpdir/runs"
18
- repo_root="$tmpdir/repo"
19
- origin_root="$tmpdir/origin.git"
20
- session="demo-issue-12"
21
- run_dir="$runs_root/$session"
22
- capture_file="$tmpdir/publish-attempts.log"
23
-
24
- mkdir -p "$shared_bin" "$shared_assets" "$runs_root" "$repo_root" "$run_dir"
25
- printf '{}\n' >"$shared_assets/workflow-catalog.json"
26
- cp "$SOURCE_SCRIPT" "$shared_bin/agent-project-reconcile-issue-session"
27
- cp "$RECORD_VERIFICATION_SCRIPT" "$shared_bin/record-verification.sh"
28
- cp "$RESIDENT_LIB" "$shared_bin/flow-resident-worker-lib.sh"
29
- cp "$FLOW_CONFIG_LIB" "$shared_bin/flow-config-lib.sh"
30
- cp "$FLOW_SHELL_LIB" "$shared_bin/flow-shell-lib.sh"
31
-
32
- cat >"$shared_bin/agent-project-worker-status" <<EOF_STATUS
33
- #!/usr/bin/env bash
34
- set -euo pipefail
35
- printf 'SESSION=%s\n' "$session"
36
- printf 'STATUS=SUCCEEDED\n'
37
- printf 'META_FILE=%s\n' "$run_dir/run.env"
38
- EOF_STATUS
39
-
40
- cat >"$shared_bin/agent-project-publish-issue-pr" <<'EOF_PUBLISH'
41
- #!/usr/bin/env bash
42
- set -euo pipefail
43
-
44
- runs_root=""
45
- session=""
46
-
47
- while [[ $# -gt 0 ]]; do
48
- case "$1" in
49
- --runs-root) runs_root="${2:-}"; shift 2 ;;
50
- --session) session="${2:-}"; shift 2 ;;
51
- *) shift ;;
52
- esac
53
- done
54
-
55
- run_dir="${runs_root}/${session}"
56
- verification_file="${run_dir}/verification.jsonl"
57
- printf 'ATTEMPT\n' >>"${TEST_CAPTURE_FILE:?}"
58
- if [[ ! -f "$verification_file" ]]; then
59
- printf 'Verification guard blocked branch publication.\n' >&2
60
- exit 1
61
- fi
62
- if ! grep -Fq '"command":"npm test"' "$verification_file"; then
63
- printf 'Verification guard blocked branch publication.\n' >&2
64
- exit 1
65
- fi
66
- if ! grep -Fq '"command":"node --test test/task-metrics.test.js"' "$verification_file"; then
67
- printf 'Verification guard blocked branch publication.\n' >&2
68
- exit 1
69
- fi
70
-
71
- printf 'PUBLISH_STATUS=created-pr\n'
72
- printf 'PR_NUMBER=44\n'
73
- printf 'PR_URL=https://github.com/example/repo/pull/44\n'
74
- EOF_PUBLISH
75
-
76
- cat >"$shared_bin/agent-project-cleanup-session" <<'EOF_CLEANUP'
77
- #!/usr/bin/env bash
78
- set -euo pipefail
79
- exit 0
80
- EOF_CLEANUP
81
-
82
- cat >"$shared_bin/gh" <<'EOF_GH'
83
- #!/usr/bin/env bash
84
- set -euo pipefail
85
-
86
- case "${1:-}:${2:-}" in
87
- api:user)
88
- printf 'tester\n'
89
- ;;
90
- *)
91
- exit 0
92
- ;;
93
- esac
94
- EOF_GH
95
-
96
- chmod +x \
97
- "$shared_bin/agent-project-reconcile-issue-session" \
98
- "$shared_bin/record-verification.sh" \
99
- "$shared_bin/flow-shell-lib.sh" \
100
- "$shared_bin/flow-config-lib.sh" \
101
- "$shared_bin/flow-resident-worker-lib.sh" \
102
- "$shared_bin/agent-project-worker-status" \
103
- "$shared_bin/agent-project-publish-issue-pr" \
104
- "$shared_bin/agent-project-cleanup-session" \
105
- "$shared_bin/gh"
106
-
107
- git init --bare "$origin_root" >/dev/null 2>&1
108
- git -C "$repo_root" init -b main >/dev/null 2>&1
109
- git -C "$repo_root" config user.name "Test"
110
- git -C "$repo_root" config user.email "test@example.com"
111
-
112
- cat >"$repo_root/package.json" <<'EOF_PACKAGE'
113
- {
114
- "name": "demo-repo",
115
- "private": true,
116
- "type": "module",
117
- "scripts": {
118
- "test": "node --test"
119
- }
120
- }
121
- EOF_PACKAGE
122
-
123
- mkdir -p "$repo_root/src" "$repo_root/test"
124
- cat >"$repo_root/src/task-metrics.js" <<'EOF_SRC'
125
- export function metricValue() {
126
- return 1;
127
- }
128
- EOF_SRC
129
- cat >"$repo_root/test/task-metrics.test.js" <<'EOF_TEST'
130
- import test from 'node:test';
131
- import assert from 'node:assert/strict';
132
- import { metricValue } from '../src/task-metrics.js';
133
-
134
- test('metricValue returns branch value', () => {
135
- assert.equal(metricValue(), 2);
136
- });
137
- EOF_TEST
138
- git -C "$repo_root" add package.json src/task-metrics.js test/task-metrics.test.js
139
- git -C "$repo_root" commit -m "init" >/dev/null 2>&1
140
- git -C "$repo_root" remote add origin "$origin_root"
141
- git -C "$repo_root" push -u origin main >/dev/null 2>&1
142
-
143
- git -C "$repo_root" checkout -b agent/demo/issue-12 >/dev/null 2>&1
144
- cat >"$repo_root/src/task-metrics.js" <<'EOF_SRC_BRANCH'
145
- export function metricValue() {
146
- return 2;
147
- }
148
- EOF_SRC_BRANCH
149
- cat >"$repo_root/test/task-metrics.test.js" <<'EOF_TEST_BRANCH'
150
- import test from 'node:test';
151
- import assert from 'node:assert/strict';
152
- import { metricValue } from '../src/task-metrics.js';
153
-
154
- test('metricValue returns updated branch value', () => {
155
- assert.equal(metricValue(), 2);
156
- });
157
- EOF_TEST_BRANCH
158
- git -C "$repo_root" add src/task-metrics.js test/task-metrics.test.js
159
- git -C "$repo_root" commit -m "feat: update metric value" >/dev/null 2>&1
160
-
161
- cat >"$run_dir/run.env" <<EOF_RUN
162
- ISSUE_ID=12
163
- BRANCH=agent/demo/issue-12
164
- WORKTREE=$repo_root
165
- EOF_RUN
166
-
167
- cat >"$run_dir/result.env" <<'EOF_RESULT'
168
- OUTCOME=implemented
169
- ACTION=host-publish-issue-pr
170
- ISSUE_ID=12
171
- EOF_RESULT
172
-
173
- cat >"$run_dir/prompt.md" <<'EOF_PROMPT'
174
- # Task
175
-
176
- Rules for each cycle:
177
- - Run `npm test` after code changes.
178
- - If the CLI or fixtures change, also run `npm run smoke`.
179
-
180
- ## Phase 3
181
-
182
- Example verification:
183
- pnpm test
184
- bash "$ACP_FLOW_TOOLS_DIR/record-verification.sh" --run-dir "$ACP_RUN_DIR" --status pass --command "pnpm test"
185
- EOF_PROMPT
186
-
187
- output="$(
188
- AGENT_CONTROL_PLANE_ROOT="$shared_home" \
189
- TEST_CAPTURE_FILE="$capture_file" \
190
- PATH="$shared_bin:$PATH" \
191
- bash "$shared_bin/agent-project-reconcile-issue-session" \
192
- --session "$session" \
193
- --repo-slug example/repo \
194
- --repo-root "$repo_root" \
195
- --runs-root "$runs_root" \
196
- --history-root "$tmpdir/history"
197
- )"
198
-
199
- grep -q '^STATUS=SUCCEEDED$' <<<"$output"
200
- grep -q '^PR_NUMBER=44$' <<<"$output"
201
- grep -q '^RESULT_CONTRACT_NOTE=host-recovered-missing-worker-verification$' <<<"$output"
202
- grep -q '"command":"npm test"' "$run_dir/verification.jsonl"
203
- grep -q '"command":"node --test test/task-metrics.test.js"' "$run_dir/verification.jsonl"
204
- attempt_count="$(wc -l <"$capture_file" | tr -d ' ')"
205
- [[ "$attempt_count" == "1" ]]
206
-
207
- echo "agent-project reconcile issue host verification recovery test passed"
@@ -1,101 +0,0 @@
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/agent-project-reconcile-issue-session"
6
-
7
- tmpdir="$(mktemp -d)"
8
- trap 'rm -rf "$tmpdir"' EXIT
9
-
10
- shared_home="$tmpdir/shared-home"
11
- shared_bin="$shared_home/tools/bin"
12
- runs_root="$tmpdir/runs"
13
- history_root="$tmpdir/history"
14
- repo_root="$tmpdir/repo"
15
- bin_dir="$tmpdir/bin"
16
- hook_file="$tmpdir/hooks.sh"
17
- provider_log="$tmpdir/provider.log"
18
- retry_reason_file="$tmpdir/retry-reason.txt"
19
- ready_flag="$tmpdir/ready.flag"
20
-
21
- mkdir -p "$shared_bin" "$runs_root/fl-issue-77" "$history_root" "$repo_root" "$bin_dir"
22
- git -C "$repo_root" init -b main >/dev/null 2>&1
23
-
24
- cat >"$runs_root/fl-issue-77/run.env" <<'EOF'
25
- ISSUE_ID=77
26
- SESSION=fl-issue-77
27
- CODING_WORKER=openclaw
28
- OPENCLAW_MODEL=openrouter/stepfun/step-3.5-flash:free
29
- WORKTREE=/tmp/mock-worktree
30
- EOF
31
-
32
- cat >"$shared_bin/agent-project-worker-status" <<EOF
33
- #!/usr/bin/env bash
34
- set -euo pipefail
35
- cat <<OUT
36
- STATUS=FAILED
37
- FAILURE_REASON=provider-quota-limit
38
- META_FILE=${runs_root}/fl-issue-77/run.env
39
- OUT
40
- EOF
41
-
42
- cat >"$shared_bin/agent-project-cleanup-session" <<'EOF'
43
- #!/usr/bin/env bash
44
- set -euo pipefail
45
- exit 0
46
- EOF
47
-
48
- cat >"$shared_bin/flow-resident-worker-lib.sh" <<'EOF'
49
- #!/usr/bin/env bash
50
- set -euo pipefail
51
- EOF
52
-
53
- cat >"$shared_bin/provider-cooldown-state.sh" <<EOF
54
- #!/usr/bin/env bash
55
- set -euo pipefail
56
- printf '%s\n' "\$*" >>"${provider_log}"
57
- printf 'READY=no\n'
58
- EOF
59
-
60
- cat >"$hook_file" <<EOF
61
- issue_schedule_retry() {
62
- printf '%s\n' "\$1" >"${retry_reason_file}"
63
- }
64
- issue_mark_ready() {
65
- : >"${ready_flag}"
66
- }
67
- issue_after_reconciled() { :; }
68
- EOF
69
-
70
- cat >"$bin_dir/gh" <<'EOF'
71
- #!/usr/bin/env bash
72
- set -euo pipefail
73
- exit 0
74
- EOF
75
-
76
- chmod +x \
77
- "$shared_bin/agent-project-worker-status" \
78
- "$shared_bin/agent-project-cleanup-session" \
79
- "$shared_bin/flow-resident-worker-lib.sh" \
80
- "$shared_bin/provider-cooldown-state.sh" \
81
- "$bin_dir/gh"
82
-
83
- output="$(
84
- PATH="$bin_dir:$PATH" \
85
- SHARED_AGENT_HOME="$shared_home" \
86
- bash "$SCRIPT" \
87
- --session fl-issue-77 \
88
- --repo-slug example/repo \
89
- --repo-root "$repo_root" \
90
- --runs-root "$runs_root" \
91
- --history-root "$history_root" \
92
- --hook-file "$hook_file"
93
- )"
94
-
95
- grep -q '^schedule provider-quota-limit$' "$provider_log"
96
- test "$(cat "$retry_reason_file")" = "provider-quota-limit"
97
- test -f "$ready_flag"
98
- grep -q '^STATUS=FAILED$' <<<"$output"
99
- grep -q '^FAILURE_REASON=provider-quota-limit$' <<<"$output"
100
-
101
- echo "issue reconcile provider cooldown scheduling test passed"
@@ -1,113 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- FLOW_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
5
- ISSUE_RECONCILE_SRC="${FLOW_ROOT}/tools/bin/agent-project-reconcile-issue-session"
6
- FLOW_SHELL_LIB="${FLOW_ROOT}/tools/bin/flow-shell-lib.sh"
7
- RESIDENT_LIB="${FLOW_ROOT}/tools/bin/flow-resident-worker-lib.sh"
8
- FLOW_CONFIG_LIB="${FLOW_ROOT}/tools/bin/flow-config-lib.sh"
9
-
10
- tmpdir="$(mktemp -d)"
11
- trap 'rm -rf "$tmpdir"' EXIT
12
-
13
- shared_agent_home="$tmpdir/shared-agent-home"
14
- shared_bin="$shared_agent_home/tools/bin"
15
- shared_assets="$shared_agent_home/assets"
16
- runs_root="$tmpdir/runs"
17
- history_root="$tmpdir/history"
18
- repo_root="$tmpdir/repo"
19
- metadata_file="$tmpdir/resident/metadata.env"
20
-
21
- mkdir -p \
22
- "$shared_bin" \
23
- "$shared_assets" \
24
- "$runs_root/demo-issue-903" \
25
- "$history_root" \
26
- "$repo_root" \
27
- "$(dirname "$metadata_file")" \
28
- "$tmpdir/worktree"
29
-
30
- cp "$ISSUE_RECONCILE_SRC" "$shared_bin/agent-project-reconcile-issue-session"
31
- cp "$FLOW_SHELL_LIB" "$shared_bin/flow-shell-lib.sh"
32
- cp "$RESIDENT_LIB" "$shared_bin/flow-resident-worker-lib.sh"
33
- cp "$FLOW_CONFIG_LIB" "$shared_bin/flow-config-lib.sh"
34
- printf '{}\n' >"$shared_assets/workflow-catalog.json"
35
-
36
- cat >"$shared_bin/agent-project-worker-status" <<EOF
37
- #!/usr/bin/env bash
38
- set -euo pipefail
39
- printf 'SESSION=demo-issue-903\n'
40
- printf 'STATUS=FAILED\n'
41
- printf 'FAILURE_REASON=provider-quota-limit\n'
42
- printf 'META_FILE=%s\n' "$runs_root/demo-issue-903/run.env"
43
- EOF
44
-
45
- cat >"$shared_bin/agent-project-cleanup-session" <<'EOF'
46
- #!/usr/bin/env bash
47
- set -euo pipefail
48
- exit 0
49
- EOF
50
-
51
- chmod +x \
52
- "$shared_bin/agent-project-reconcile-issue-session" \
53
- "$shared_bin/flow-shell-lib.sh" \
54
- "$shared_bin/flow-resident-worker-lib.sh" \
55
- "$shared_bin/flow-config-lib.sh" \
56
- "$shared_bin/agent-project-worker-status" \
57
- "$shared_bin/agent-project-cleanup-session"
58
-
59
- cat >"$runs_root/demo-issue-903/run.env" <<EOF
60
- ISSUE_ID=903
61
- WORKTREE=$tmpdir/worktree
62
- BRANCH=agent/demo/issue-903
63
- RESIDENT_WORKER_ENABLED=yes
64
- RESIDENT_WORKER_SCOPE=lane
65
- RESIDENT_WORKER_KEY=issue-lane-scheduled-1800-openclaw-safe
66
- RESIDENT_WORKER_META_FILE=$metadata_file
67
- EOF
68
-
69
- cat >"$runs_root/demo-issue-903/result.env" <<'EOF'
70
- OUTCOME=reported
71
- ACTION=host-comment-scheduled-report
72
- EOF
73
-
74
- cat >"$metadata_file" <<'EOF'
75
- RESIDENT_WORKER_KIND=issue
76
- RESIDENT_WORKER_SCOPE=lane
77
- RESIDENT_WORKER_KEY=issue-lane-scheduled-1800-openclaw-safe
78
- RESIDENT_LANE_KIND=''
79
- RESIDENT_LANE_VALUE=''
80
- ISSUE_ID=903
81
- LAST_STATUS=RUNNING
82
- LAST_OUTCOME=''
83
- LAST_ACTION=''
84
- LAST_FAILURE_REASON=''
85
- LAST_WORKTREE_REUSED=yes
86
- EOF
87
-
88
- cat >"$tmpdir/issue-hook.sh" <<'EOF'
89
- #!/usr/bin/env bash
90
- set -euo pipefail
91
- issue_schedule_retry() { :; }
92
- issue_mark_ready() { :; }
93
- issue_after_reconciled() { :; }
94
- EOF
95
- chmod +x "$tmpdir/issue-hook.sh"
96
-
97
- output="$(
98
- SHARED_AGENT_HOME="$shared_agent_home" \
99
- bash "$shared_bin/agent-project-reconcile-issue-session" \
100
- --session demo-issue-903 \
101
- --repo-slug example/demo \
102
- --repo-root "$repo_root" \
103
- --runs-root "$runs_root" \
104
- --history-root "$history_root" \
105
- --hook-file "$tmpdir/issue-hook.sh"
106
- )"
107
-
108
- grep -q '^STATUS=FAILED$' <<<"$output"
109
- grep -q '^FAILURE_REASON=provider-quota-limit$' <<<"$output"
110
- grep -q '^RESIDENT_LANE_KIND=scheduled$' "$metadata_file"
111
- grep -q '^RESIDENT_LANE_VALUE=1800$' "$metadata_file"
112
-
113
- echo "agent-project reconcile issue session backfills lane metadata from worker key test passed"