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,105 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- FLOW_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
5
- SESSION_SRC="${FLOW_ROOT}/tools/bin/agent-project-run-codex-session"
6
-
7
- tmpdir="$(mktemp -d)"
8
- trap 'rm -rf "$tmpdir"' EXIT
9
-
10
- tools_dir="$tmpdir/tools"
11
- bin_dir="$tmpdir/bin"
12
- worktree="$tmpdir/worktree"
13
- runs_root="$tmpdir/runs"
14
- prompt_file="$tmpdir/prompt.md"
15
- session="fl-codex-stale-sandbox"
16
- run_dir="$runs_root/$session"
17
- sandbox_run_dir="$worktree/.openclaw-artifacts/$session"
18
-
19
- mkdir -p "$tools_dir" "$bin_dir" "$worktree" "$runs_root" "$sandbox_run_dir"
20
- cp "$SESSION_SRC" "$tools_dir/agent-project-run-codex-session"
21
-
22
- printf 'stale-result\n' >"$sandbox_run_dir/result.env"
23
- printf '{"timestamp":"old","status":"pass","command":"stale verification"}\n' >"$sandbox_run_dir/verification.jsonl"
24
- printf 'stale blocker\n' >"$sandbox_run_dir/issue-comment.md"
25
-
26
- cat >"$tools_dir/agent-project-run-codex-resilient" <<'EOF'
27
- #!/usr/bin/env bash
28
- set -euo pipefail
29
-
30
- sandbox_run_dir=""
31
- output_file=""
32
-
33
- while [[ $# -gt 0 ]]; do
34
- case "$1" in
35
- --sandbox-run-dir) sandbox_run_dir="${2:-}"; shift 2 ;;
36
- --output-file) output_file="${2:-}"; shift 2 ;;
37
- *) shift ;;
38
- esac
39
- done
40
-
41
- mkdir -p "$sandbox_run_dir"
42
- cat >"${sandbox_run_dir}/result.env" <<'RESULT'
43
- OUTCOME=implemented
44
- ACTION=host-publish-issue-pr
45
- RESULT
46
- printf '{"timestamp":"new","status":"pass","command":"fresh verification"}\n' >"${sandbox_run_dir}/verification.jsonl"
47
- printf 'mock runner wrote artifacts\n' >>"$output_file"
48
- exit 0
49
- EOF
50
-
51
- cat >"$bin_dir/codex" <<'EOF'
52
- #!/usr/bin/env bash
53
- set -euo pipefail
54
- exit 0
55
- EOF
56
-
57
- chmod +x "$tools_dir/agent-project-run-codex-session" "$tools_dir/agent-project-run-codex-resilient" "$bin_dir/codex"
58
-
59
- git -C "$worktree" init -b test >/dev/null 2>&1
60
- printf 'Prompt body\n' >"$prompt_file"
61
-
62
- bash "$tools_dir/agent-project-run-codex-session" \
63
- --mode safe \
64
- --session "$session" \
65
- --worktree "$worktree" \
66
- --prompt-file "$prompt_file" \
67
- --runs-root "$runs_root" \
68
- --adapter-id alpha \
69
- --task-kind issue \
70
- --task-id 123 \
71
- --safe-profile mock-safe \
72
- --collect-file verification.jsonl \
73
- --collect-file issue-comment.md \
74
- >/dev/null
75
-
76
- for _ in $(seq 1 50); do
77
- if ! tmux has-session -t "$session" 2>/dev/null; then
78
- break
79
- fi
80
- sleep 0.2
81
- done
82
-
83
- if tmux has-session -t "$session" 2>/dev/null; then
84
- echo "tmux session did not exit" >&2
85
- exit 1
86
- fi
87
-
88
- test -f "$run_dir/result.env"
89
- test -f "$run_dir/verification.jsonl"
90
- grep -q '^OUTCOME=implemented$' "$run_dir/result.env"
91
- grep -q 'fresh verification' "$run_dir/verification.jsonl"
92
- if grep -q 'stale verification' "$run_dir/verification.jsonl"; then
93
- echo "stale verification entry leaked into codex cycle" >&2
94
- exit 1
95
- fi
96
- if [[ -e "$run_dir/issue-comment.md" ]]; then
97
- echo "stale codex issue comment leaked into host run dir" >&2
98
- exit 1
99
- fi
100
- if [[ -e "$sandbox_run_dir/issue-comment.md" ]]; then
101
- echo "stale codex sandbox comment artifact was not cleared" >&2
102
- exit 1
103
- fi
104
-
105
- echo "agent-project codex session wrapper clears stale sandbox artifacts test passed"
@@ -1,97 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- FLOW_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
5
- SESSION_SRC="${FLOW_ROOT}/tools/bin/agent-project-run-codex-session"
6
-
7
- tmpdir="$(mktemp -d)"
8
- trap 'rm -rf "$tmpdir"' EXIT
9
-
10
- tools_dir="$tmpdir/tools"
11
- bin_dir="$tmpdir/bin"
12
- worktree="$tmpdir/worktree"
13
- runs_root="$tmpdir/runs"
14
- prompt_file="$tmpdir/prompt.md"
15
- session="fl-pr-wrapper-test"
16
- run_dir="$runs_root/$session"
17
- reconcile_log="$tmpdir/reconcile.log"
18
-
19
- mkdir -p "$tools_dir" "$bin_dir" "$worktree" "$runs_root"
20
- cp "$SESSION_SRC" "$tools_dir/agent-project-run-codex-session"
21
-
22
- cat >"$tools_dir/agent-project-run-codex-resilient" <<'EOF'
23
- #!/usr/bin/env bash
24
- set -euo pipefail
25
-
26
- sandbox_run_dir=""
27
- output_file=""
28
-
29
- while [[ $# -gt 0 ]]; do
30
- case "$1" in
31
- --sandbox-run-dir) sandbox_run_dir="${2:-}"; shift 2 ;;
32
- --output-file) output_file="${2:-}"; shift 2 ;;
33
- *) shift ;;
34
- esac
35
- done
36
-
37
- mkdir -p "$sandbox_run_dir"
38
- cat >"${sandbox_run_dir}/result.env" <<'RESULT'
39
- OUTCOME=blocked
40
- ACTION=host-comment-blocker
41
- RESULT
42
- printf 'artifact-from-runner\n' >"${sandbox_run_dir}/mock.txt"
43
- printf 'mock runner wrote artifacts before failing\n' >>"$output_file"
44
- exit 23
45
- EOF
46
-
47
- cat >"$bin_dir/codex" <<'EOF'
48
- #!/usr/bin/env bash
49
- set -euo pipefail
50
- exit 0
51
- EOF
52
-
53
- chmod +x "$tools_dir/agent-project-run-codex-session" "$bin_dir/codex"
54
-
55
- git -C "$worktree" init -b test >/dev/null 2>&1
56
- printf 'Prompt body\n' >"$prompt_file"
57
-
58
- bash "$tools_dir/agent-project-run-codex-session" \
59
- --mode safe \
60
- --session "$session" \
61
- --worktree "$worktree" \
62
- --prompt-file "$prompt_file" \
63
- --runs-root "$runs_root" \
64
- --adapter-id alpha \
65
- --task-kind pr \
66
- --task-id 123 \
67
- --safe-profile mock-safe \
68
- --collect-file mock.txt \
69
- --reconcile-command "printf 'reconciled\n' >> '$reconcile_log'" \
70
- >/dev/null
71
-
72
- for _ in $(seq 1 50); do
73
- if ! tmux has-session -t "$session" 2>/dev/null; then
74
- break
75
- fi
76
- sleep 0.2
77
- done
78
-
79
- if tmux has-session -t "$session" 2>/dev/null; then
80
- echo "tmux session did not exit" >&2
81
- exit 1
82
- fi
83
-
84
- for _ in $(seq 1 25); do
85
- [[ -f "$reconcile_log" ]] && break
86
- sleep 0.2
87
- done
88
-
89
- test -f "$run_dir/result.env"
90
- test -f "$run_dir/mock.txt"
91
- grep -q '^OUTCOME=blocked$' "$run_dir/result.env"
92
- grep -q '^ACTION=host-comment-blocker$' "$run_dir/result.env"
93
- grep -q 'artifact-from-runner' "$run_dir/mock.txt"
94
- grep -q '__CODEX_EXIT__:23' "$run_dir/$session.log"
95
- grep -q '^reconciled$' "$reconcile_log"
96
-
97
- echo "agent-project codex session wrapper test passed"
@@ -1,81 +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-open-pr-worktree"
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
- bin_dir="$tmpdir/bin"
13
- shim_bin_dir="$tmpdir/shims"
14
- shared_home="$tmpdir/shared-home"
15
- flow_root="$shared_home/skills/openclaw/agent-control-plane"
16
- flow_tools_dir="$flow_root/tools/bin"
17
- flow_assets_dir="$flow_root/assets"
18
- profile_home="$tmpdir/profiles"
19
- capture_file="$tmpdir/capture.log"
20
- repo_root="$tmpdir/repo"
21
- worktree_root="$tmpdir/worktrees"
22
-
23
- mkdir -p "$bin_dir" "$shim_bin_dir" "$flow_tools_dir" "$flow_assets_dir" "$profile_home/demo" "$repo_root" "$worktree_root"
24
- printf '# test skill\n' >"$flow_root/SKILL.md"
25
- cp "$SOURCE_SCRIPT" "$bin_dir/agent-project-open-pr-worktree"
26
- cp "$FLOW_CONFIG_LIB" "$bin_dir/flow-config-lib.sh"
27
- cp "$FLOW_SHELL_LIB" "$bin_dir/flow-shell-lib.sh"
28
-
29
- cat >"$profile_home/demo/control-plane.yaml" <<'EOF'
30
- id: "demo"
31
- session_naming:
32
- pr_worktree_branch_prefix: "agent/acp/pr"
33
- EOF
34
-
35
- cat >"$flow_tools_dir/agent-init-worktree" <<'EOF'
36
- #!/usr/bin/env bash
37
- set -euo pipefail
38
- printf '%s\n' "$*" >"${TEST_CAPTURE_FILE:?}"
39
- path=""
40
- while [[ $# -gt 0 ]]; do
41
- case "$1" in
42
- --path) path="${2:-}"; shift 2 ;;
43
- *) shift ;;
44
- esac
45
- done
46
- mkdir -p "${path:?}"
47
- EOF
48
-
49
- cat >"$shim_bin_dir/git" <<'EOF'
50
- #!/usr/bin/env bash
51
- set -euo pipefail
52
- exit 0
53
- EOF
54
-
55
- chmod +x \
56
- "$bin_dir/agent-project-open-pr-worktree" \
57
- "$bin_dir/flow-config-lib.sh" \
58
- "$bin_dir/flow-shell-lib.sh" \
59
- "$flow_tools_dir/agent-init-worktree" \
60
- "$shim_bin_dir/git"
61
-
62
- output="$(
63
- TEST_CAPTURE_FILE="$capture_file" \
64
- SHARED_AGENT_HOME="$shared_home" \
65
- ACP_ROOT="$flow_root" \
66
- ACP_PROFILE_REGISTRY_ROOT="$profile_home" \
67
- ACP_PROJECT_ID="demo" \
68
- PATH="$shim_bin_dir:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin" \
69
- bash "$bin_dir/agent-project-open-pr-worktree" \
70
- --repo-root "$repo_root" \
71
- --worktree-root "$worktree_root" \
72
- --pr-number 77 \
73
- --head-ref feature/test \
74
- --stamp 20260325-120000
75
- )"
76
-
77
- grep -q -- '--branch agent/acp/pr-77-20260325-120000' "$capture_file"
78
- grep -q -- "--path $worktree_root/pr-77-20260325-120000" "$capture_file"
79
- grep -q -- '^BRANCH=agent/acp/pr-77-20260325-120000$' <<<"$output"
80
-
81
- echo "agent-project open pr worktree config prefix test passed"
@@ -1,109 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- FLOW_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
5
- SESSION_SRC="${FLOW_ROOT}/tools/bin/agent-project-run-openclaw-session"
6
-
7
- tmpdir="$(mktemp -d)"
8
- trap 'rm -rf "$tmpdir"' EXIT
9
-
10
- tools_dir="$tmpdir/tools"
11
- bin_dir="$tmpdir/bin"
12
- worktree="$tmpdir/worktree"
13
- runs_root="$tmpdir/runs"
14
- prompt_file="$tmpdir/prompt.md"
15
- session="fl-issue-openclaw-stale-sandbox"
16
- run_dir="$runs_root/$session"
17
- sandbox_run_dir="$worktree/.openclaw-artifacts/$session"
18
-
19
- mkdir -p "$tools_dir" "$bin_dir" "$worktree" "$runs_root" "$sandbox_run_dir"
20
- cp "$SESSION_SRC" "$tools_dir/agent-project-run-openclaw-session"
21
-
22
- printf 'stale-result\n' >"$sandbox_run_dir/result.env"
23
- printf '{"timestamp":"old","status":"pass","command":"stale verification"}\n' >"$sandbox_run_dir/verification.jsonl"
24
- printf 'stale blocker\n' >"$sandbox_run_dir/issue-comment.md"
25
-
26
- cat >"$bin_dir/openclaw" <<'EOF'
27
- #!/usr/bin/env bash
28
- set -euo pipefail
29
-
30
- cmd="${1:-}"
31
- sub="${2:-}"
32
- case "$cmd:$sub" in
33
- agents:add)
34
- mkdir -p .openclaw
35
- printf 'state\n' >.openclaw/workspace-state.json
36
- : >SOUL.md
37
- : >TOOLS.md
38
- : >IDENTITY.md
39
- : >USER.md
40
- : >HEARTBEAT.md
41
- : >BOOTSTRAP.md
42
- printf '{"agentId":"stub"}\n'
43
- ;;
44
- agent:*)
45
- mkdir -p "${ACP_RUN_DIR:?}"
46
- cat >"${ACP_RESULT_FILE:?}" <<'RESULT'
47
- OUTCOME=implemented
48
- ACTION=host-publish-issue-pr
49
- RESULT
50
- printf '{"timestamp":"new","status":"pass","command":"fresh verification"}\n' >"${ACP_RUN_DIR}/verification.jsonl"
51
- printf '{"payloads":[{"text":"DONE"}]}\n'
52
- ;;
53
- *)
54
- echo "unexpected openclaw args: $*" >&2
55
- exit 64
56
- ;;
57
- esac
58
- EOF
59
-
60
- chmod +x "$tools_dir/agent-project-run-openclaw-session" "$bin_dir/openclaw"
61
-
62
- git -C "$worktree" init -b test >/dev/null 2>&1
63
- git -C "$worktree" config user.name "OpenClaw"
64
- git -C "$worktree" config user.email "openclaw@example.com"
65
- printf 'seed\n' >"$worktree/README.md"
66
- git -C "$worktree" add README.md
67
- git -C "$worktree" commit -m "init" >/dev/null 2>&1
68
- printf 'Prompt body\n' >"$prompt_file"
69
-
70
- PATH="$bin_dir:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin" \
71
- bash "$tools_dir/agent-project-run-openclaw-session" \
72
- --mode safe \
73
- --session "$session" \
74
- --worktree "$worktree" \
75
- --prompt-file "$prompt_file" \
76
- --runs-root "$runs_root" \
77
- --adapter-id alpha \
78
- --task-kind issue \
79
- --task-id 123 \
80
- --openclaw-model mock/model \
81
- --collect-file verification.jsonl \
82
- >/dev/null
83
-
84
- for _ in $(seq 1 50); do
85
- if ! tmux has-session -t "$session" 2>/dev/null; then
86
- break
87
- fi
88
- sleep 0.2
89
- done
90
-
91
- if tmux has-session -t "$session" 2>/dev/null; then
92
- echo "tmux session did not exit" >&2
93
- exit 1
94
- fi
95
-
96
- test -f "$run_dir/result.env"
97
- test -f "$run_dir/verification.jsonl"
98
- grep -q '^OUTCOME=implemented$' "$run_dir/result.env"
99
- grep -q 'fresh verification' "$run_dir/verification.jsonl"
100
- if grep -q 'stale verification' "$run_dir/verification.jsonl"; then
101
- echo "stale verification entry leaked into new cycle" >&2
102
- exit 1
103
- fi
104
- if [[ -e "$sandbox_run_dir/issue-comment.md" ]]; then
105
- echo "stale sandbox comment artifact was not cleared" >&2
106
- exit 1
107
- fi
108
-
109
- echo "agent-project openclaw session wrapper clears stale sandbox artifacts test passed"
@@ -1,89 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- FLOW_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
5
- SESSION_SRC="${FLOW_ROOT}/tools/bin/agent-project-run-openclaw-session"
6
-
7
- tmpdir="$(mktemp -d)"
8
- trap 'rm -rf "$tmpdir"' EXIT
9
-
10
- tools_dir="$tmpdir/tools"
11
- bin_dir="$tmpdir/bin"
12
- worktree="$tmpdir/worktree"
13
- runs_root="$tmpdir/runs"
14
- prompt_file="$tmpdir/prompt.md"
15
- session="infer-blocked-openclaw"
16
- run_dir="$runs_root/$session"
17
-
18
- mkdir -p "$tools_dir" "$bin_dir" "$worktree" "$runs_root"
19
- cp "$SESSION_SRC" "$tools_dir/agent-project-run-openclaw-session"
20
-
21
- cat >"$bin_dir/openclaw" <<'EOF'
22
- #!/usr/bin/env bash
23
- set -euo pipefail
24
-
25
- cmd="${1:-}"
26
- sub="${2:-}"
27
-
28
- case "$cmd:$sub" in
29
- agents:list)
30
- printf '{"agents":[]}\n'
31
- ;;
32
- agents:add)
33
- shift 2 || true
34
- printf '{"agentId":"%s"}\n' "${1:-agent}"
35
- ;;
36
- agent:*)
37
- printf 'BLOCKED: worktree is misaligned with requested issue\n'
38
- ;;
39
- *)
40
- echo "unexpected openclaw args: $cmd $sub $*" >&2
41
- exit 64
42
- ;;
43
- esac
44
- EOF
45
-
46
- chmod +x "$tools_dir/agent-project-run-openclaw-session" "$bin_dir/openclaw"
47
-
48
- git -C "$worktree" init -b test >/dev/null 2>&1
49
- git -C "$worktree" config user.name "OpenClaw"
50
- git -C "$worktree" config user.email "openclaw@example.com"
51
- printf 'seed\n' >"$worktree/README.md"
52
- git -C "$worktree" add README.md
53
- git -C "$worktree" commit -m "init" >/dev/null 2>&1
54
- printf 'Prompt body\n' >"$prompt_file"
55
-
56
- PATH="$bin_dir:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin" \
57
- bash "$tools_dir/agent-project-run-openclaw-session" \
58
- --mode safe \
59
- --session "$session" \
60
- --worktree "$worktree" \
61
- --prompt-file "$prompt_file" \
62
- --runs-root "$runs_root" \
63
- --adapter-id alpha \
64
- --task-kind issue \
65
- --task-id 123 \
66
- --openclaw-model mock/model \
67
- >/dev/null
68
-
69
- for _ in $(seq 1 50); do
70
- if ! tmux has-session -t "$session" 2>/dev/null; then
71
- break
72
- fi
73
- sleep 0.2
74
- done
75
-
76
- if tmux has-session -t "$session" 2>/dev/null; then
77
- echo "tmux session did not exit" >&2
78
- exit 1
79
- fi
80
-
81
- test -f "$run_dir/result.env"
82
- grep -q '^OUTCOME=blocked$' "$run_dir/result.env"
83
- grep -q '^ACTION=host-comment-blocker$' "$run_dir/result.env"
84
- if grep -q '\\n' "$run_dir/result.env"; then
85
- echo "result.env should contain real newlines, not escaped literals" >&2
86
- exit 1
87
- fi
88
-
89
- echo "agent-project openclaw session wrapper infers blocked result contract 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
- SESSION_SRC="${FLOW_ROOT}/tools/bin/agent-project-run-openclaw-session"
6
-
7
- tmpdir="$(mktemp -d)"
8
- trap 'rm -rf "$tmpdir"' EXIT
9
-
10
- tools_dir="$tmpdir/tools"
11
- bin_dir="$tmpdir/bin"
12
- worktree="$tmpdir/worktree"
13
- runs_root="$tmpdir/runs"
14
- prompt_file="$tmpdir/prompt.md"
15
- session="fl-issue-openclaw-literal-env"
16
- run_dir="$runs_root/$session"
17
-
18
- mkdir -p "$tools_dir" "$bin_dir" "$worktree" "$runs_root"
19
- cp "$SESSION_SRC" "$tools_dir/agent-project-run-openclaw-session"
20
-
21
- cat >"$bin_dir/openclaw" <<'EOF'
22
- #!/usr/bin/env bash
23
- set -euo pipefail
24
-
25
- cmd="${1:-}"
26
- sub="${2:-}"
27
- case "$cmd:$sub" in
28
- agents:add)
29
- mkdir -p .openclaw
30
- printf 'state\n' >.openclaw/workspace-state.json
31
- : >SOUL.md
32
- : >TOOLS.md
33
- : >IDENTITY.md
34
- : >USER.md
35
- : >HEARTBEAT.md
36
- : >BOOTSTRAP.md
37
- printf '{"agentId":"stub"}\n'
38
- ;;
39
- agent:*)
40
- mkdir -p "$PWD/\$ACP_RUN_DIR"
41
- cat >"$PWD/\$ACP_RESULT_FILE" <<'RESULT'
42
- OUTCOME=implemented
43
- ACTION=host-publish-issue-pr
44
- RESULT
45
- printf '{"status":"pass","command":"mock verification"}\n' >"$PWD/\$ACP_RUN_DIR/verification.jsonl"
46
- printf 'literal artifact\n' >"$PWD/\$ACP_RUN_DIR/mock.txt"
47
- printf '{"payloads":[{"text":"DONE"}]}\n'
48
- ;;
49
- *)
50
- echo "unexpected openclaw args: $*" >&2
51
- exit 64
52
- ;;
53
- esac
54
- EOF
55
-
56
- chmod +x "$tools_dir/agent-project-run-openclaw-session" "$bin_dir/openclaw"
57
-
58
- git -C "$worktree" init -b test >/dev/null 2>&1
59
- git -C "$worktree" config user.name "OpenClaw"
60
- git -C "$worktree" config user.email "openclaw@example.com"
61
- printf 'seed\n' >"$worktree/README.md"
62
- git -C "$worktree" add README.md
63
- git -C "$worktree" commit -m "init" >/dev/null 2>&1
64
- printf 'Prompt body\n' >"$prompt_file"
65
-
66
- PATH="$bin_dir:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin" \
67
- bash "$tools_dir/agent-project-run-openclaw-session" \
68
- --mode safe \
69
- --session "$session" \
70
- --worktree "$worktree" \
71
- --prompt-file "$prompt_file" \
72
- --runs-root "$runs_root" \
73
- --adapter-id alpha \
74
- --task-kind issue \
75
- --task-id 123 \
76
- --openclaw-model mock/model \
77
- --collect-file verification.jsonl \
78
- --collect-file mock.txt \
79
- >/dev/null
80
-
81
- for _ in $(seq 1 50); do
82
- if ! tmux has-session -t "$session" 2>/dev/null; then
83
- break
84
- fi
85
- sleep 0.2
86
- done
87
-
88
- if tmux has-session -t "$session" 2>/dev/null; then
89
- echo "tmux session did not exit" >&2
90
- exit 1
91
- fi
92
-
93
- test -f "$run_dir/result.env"
94
- test -f "$run_dir/verification.jsonl"
95
- test -f "$run_dir/mock.txt"
96
- grep -q '^OUTCOME=implemented$' "$run_dir/result.env"
97
- grep -q '^ACTION=host-publish-issue-pr$' "$run_dir/result.env"
98
- grep -q '"status":"pass"' "$run_dir/verification.jsonl"
99
- grep -q 'literal artifact' "$run_dir/mock.txt"
100
-
101
- if [[ -e "$worktree/\$ACP_RESULT_FILE" || -e "$worktree/\$ACP_RUN_DIR" ]]; then
102
- echo "literal env alias artifacts should be cleaned up" >&2
103
- exit 1
104
- fi
105
-
106
- status_output="$(git -C "$worktree" status --short)"
107
- if [[ -n "$status_output" ]]; then
108
- echo "worktree unexpectedly dirty:" >&2
109
- printf '%s\n' "$status_output" >&2
110
- exit 1
111
- fi
112
-
113
- echo "agent-project openclaw session wrapper literal env artifact recovery test passed"