agent-control-plane 0.1.2 → 0.1.4

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 (182) hide show
  1. package/README.md +6 -0
  2. package/npm/bin/agent-control-plane.js +149 -5
  3. package/package.json +1 -2
  4. package/tools/bin/render-architecture-infographics.sh +0 -110
  5. package/tools/bin/render-dashboard-demo-media.sh +0 -333
  6. package/tools/tests/test-agent-control-plane-npm-cli.sh +0 -280
  7. package/tools/tests/test-agent-github-update-labels-falls-back-to-repository-id.sh +0 -56
  8. package/tools/tests/test-agent-project-claude-session-wrapper-clears-stale-sandbox-artifacts.sh +0 -89
  9. package/tools/tests/test-agent-project-claude-session-wrapper-does-not-retry-provider-quota.sh +0 -82
  10. package/tools/tests/test-agent-project-claude-session-wrapper-retries-transient-failures.sh +0 -90
  11. package/tools/tests/test-agent-project-claude-session-wrapper-times-out.sh +0 -73
  12. package/tools/tests/test-agent-project-claude-session-wrapper.sh +0 -103
  13. package/tools/tests/test-agent-project-cleanup-session-orphan-fallback.sh +0 -90
  14. package/tools/tests/test-agent-project-cleanup-session-skip-worktree-cleanup.sh +0 -90
  15. package/tools/tests/test-agent-project-codex-live-thread-persist.sh +0 -76
  16. package/tools/tests/test-agent-project-codex-recovery.sh +0 -731
  17. package/tools/tests/test-agent-project-codex-session-wrapper-clears-stale-sandbox-artifacts.sh +0 -105
  18. package/tools/tests/test-agent-project-codex-session-wrapper.sh +0 -97
  19. package/tools/tests/test-agent-project-open-pr-worktree-config-prefix.sh +0 -81
  20. package/tools/tests/test-agent-project-openclaw-session-wrapper-clears-stale-sandbox-artifacts.sh +0 -109
  21. package/tools/tests/test-agent-project-openclaw-session-wrapper-infers-blocked-result-contract.sh +0 -89
  22. package/tools/tests/test-agent-project-openclaw-session-wrapper-recovers-literal-env-artifacts.sh +0 -113
  23. package/tools/tests/test-agent-project-openclaw-session-wrapper-recovers-version-mismatch.sh +0 -135
  24. package/tools/tests/test-agent-project-openclaw-session-wrapper-resident.sh +0 -179
  25. package/tools/tests/test-agent-project-openclaw-session-wrapper-reuses-existing-agent-after-add-race.sh +0 -119
  26. package/tools/tests/test-agent-project-openclaw-session-wrapper-terminates-rate-limit-hang.sh +0 -91
  27. package/tools/tests/test-agent-project-openclaw-session-wrapper.sh +0 -117
  28. package/tools/tests/test-agent-project-publish-issue-pr-prunes-stale-worktree-entry.sh +0 -148
  29. package/tools/tests/test-agent-project-publish-issue-pr-reads-archived-session.sh +0 -146
  30. package/tools/tests/test-agent-project-publish-issue-pr-recovers-final-head.sh +0 -145
  31. package/tools/tests/test-agent-project-publish-issue-pr-reuses-existing-worktree.sh +0 -147
  32. package/tools/tests/test-agent-project-reconcile-failure-reason.sh +0 -456
  33. package/tools/tests/test-agent-project-reconcile-issue-archived-session-fallback.sh +0 -96
  34. package/tools/tests/test-agent-project-reconcile-issue-before-blocked.sh +0 -90
  35. package/tools/tests/test-agent-project-reconcile-issue-host-verification-recovery-uses-recovered-worktree.sh +0 -212
  36. package/tools/tests/test-agent-project-reconcile-issue-host-verification-recovery.sh +0 -207
  37. package/tools/tests/test-agent-project-reconcile-issue-provider-quota-schedules-provider-cooldown.sh +0 -101
  38. package/tools/tests/test-agent-project-reconcile-issue-session-backfills-lane-metadata-from-worker-key.sh +0 -113
  39. package/tools/tests/test-agent-project-reconcile-issue-session-clears-stale-failed-summary.sh +0 -117
  40. package/tools/tests/test-agent-project-reconcile-issue-session-initializes-shared-agent-home.sh +0 -55
  41. package/tools/tests/test-agent-project-reconcile-issue-session-normalizes-runner-state.sh +0 -125
  42. package/tools/tests/test-agent-project-reconcile-issue-session-records-invalid-contract-summary.sh +0 -118
  43. package/tools/tests/test-agent-project-reconcile-issue-session-skips-duplicate-blocked-comment.sh +0 -144
  44. package/tools/tests/test-agent-project-reconcile-issue-session-standardizes-no-commits-blocker.sh +0 -145
  45. package/tools/tests/test-agent-project-reconcile-issue-session-synthesizes-blocked-comment.sh +0 -139
  46. package/tools/tests/test-agent-project-reconcile-pr-blocked-host-recovery.sh +0 -242
  47. package/tools/tests/test-agent-project-reconcile-pr-guard-blocked-no-commit.sh +0 -142
  48. package/tools/tests/test-agent-project-reconcile-pr-provider-quota-schedules-provider-cooldown.sh +0 -106
  49. package/tools/tests/test-agent-project-reconcile-pr-session-initializes-shared-agent-home.sh +0 -66
  50. package/tools/tests/test-agent-project-reconcile-pr-updated-branch-noop.sh +0 -129
  51. package/tools/tests/test-audit-agent-worktrees-active-launch-skips-git-inspection.sh +0 -69
  52. package/tools/tests/test-audit-agent-worktrees-broken-worktree.sh +0 -43
  53. package/tools/tests/test-audit-agent-worktrees-pending-launch-owner.sh +0 -46
  54. package/tools/tests/test-audit-agent-worktrees-unreconciled-owner.sh +0 -79
  55. package/tools/tests/test-audit-issue-routing-managed-branch-globs.sh +0 -56
  56. package/tools/tests/test-branch-verification-guard-generated-artifacts.sh +0 -72
  57. package/tools/tests/test-branch-verification-guard-targeted-coverage.sh +0 -125
  58. package/tools/tests/test-codex-quota-manager-failure-driven-rotation.sh +0 -178
  59. package/tools/tests/test-codex-quota-wrapper.sh +0 -37
  60. package/tools/tests/test-contribution-docs.sh +0 -18
  61. package/tools/tests/test-control-plane-dashboard-runtime-smoke.sh +0 -343
  62. package/tools/tests/test-create-follow-up-issue.sh +0 -73
  63. package/tools/tests/test-dashboard-launchd-bootstrap.sh +0 -55
  64. package/tools/tests/test-flow-export-execution-env-exports-repo-id.sh +0 -30
  65. package/tools/tests/test-flow-export-github-cli-auth-env-prefers-git-credential.sh +0 -48
  66. package/tools/tests/test-flow-github-api-repo-fallback-preserves-input.sh +0 -85
  67. package/tools/tests/test-flow-github-api-repo-prefers-explicit-repository-id.sh +0 -60
  68. package/tools/tests/test-flow-github-issue-list-falls-back-to-repository-id.sh +0 -64
  69. package/tools/tests/test-flow-github-pr-list-falls-back-to-repository-id.sh +0 -77
  70. package/tools/tests/test-flow-resident-can-reuse-does-not-leak-metadata.sh +0 -52
  71. package/tools/tests/test-flow-resident-reap-stale-controllers.sh +0 -63
  72. package/tools/tests/test-flow-resolve-codex-quota-tools.sh +0 -104
  73. package/tools/tests/test-flow-runtime-doctor-profile-selection.sh +0 -27
  74. package/tools/tests/test-heartbeat-codex-pr-linked-issue-exclusion.sh +0 -79
  75. package/tools/tests/test-heartbeat-hooks-enqueue-resident-issue-for-idle-controller.sh +0 -115
  76. package/tools/tests/test-heartbeat-hooks-enqueue-resident-issue-for-live-lane-controller.sh +0 -117
  77. package/tools/tests/test-heartbeat-hooks-start-resident-issue-loop-claude.sh +0 -96
  78. package/tools/tests/test-heartbeat-hooks-start-resident-issue-loop-codex.sh +0 -96
  79. package/tools/tests/test-heartbeat-hooks-start-resident-issue-loop.sh +0 -96
  80. package/tools/tests/test-heartbeat-loop-auth-wait-does-not-consume-capacity.sh +0 -170
  81. package/tools/tests/test-heartbeat-loop-blocked-recovery-lane.sh +0 -201
  82. package/tools/tests/test-heartbeat-loop-blocked-recovery-vs-pr-reservation.sh +0 -201
  83. package/tools/tests/test-heartbeat-loop-idle-resident-controller-does-not-block-launches.sh +0 -160
  84. package/tools/tests/test-heartbeat-loop-pr-launch-dedup.sh +0 -133
  85. package/tools/tests/test-heartbeat-loop-provider-cooldown-suppresses-launches.sh +0 -157
  86. package/tools/tests/test-heartbeat-loop-reaps-stale-resident-controller.sh +0 -181
  87. package/tools/tests/test-heartbeat-loop-waiting-provider-resident-controller-does-not-block-launches.sh +0 -160
  88. package/tools/tests/test-heartbeat-ready-issues-blocked-recovery.sh +0 -134
  89. package/tools/tests/test-heartbeat-safe-auto-dynamic-concurrency.sh +0 -162
  90. package/tools/tests/test-heartbeat-safe-auto-no-tmux-sessions.sh +0 -136
  91. package/tools/tests/test-heartbeat-safe-auto-openclaw-skips-codex-quota.sh +0 -139
  92. package/tools/tests/test-heartbeat-safe-auto-quota-health-signal.sh +0 -119
  93. package/tools/tests/test-heartbeat-safe-auto-stale-shared-loop-pid-does-not-skip.sh +0 -140
  94. package/tools/tests/test-heartbeat-safe-auto-static-capacity-without-quota-cache.sh +0 -142
  95. package/tools/tests/test-heartbeat-safe-auto-zero-healthy-pools.sh +0 -141
  96. package/tools/tests/test-heartbeat-sync-issue-labels-empty-schedule.sh +0 -65
  97. package/tools/tests/test-heartbeat-sync-open-agent-prs-terminal-clears-running.sh +0 -179
  98. package/tools/tests/test-install-dashboard-launchd.sh +0 -78
  99. package/tools/tests/test-install-project-launchd-adds-tool-paths.sh +0 -87
  100. package/tools/tests/test-install-project-launchd.sh +0 -110
  101. package/tools/tests/test-issue-local-workspace-install-policy.sh +0 -81
  102. package/tools/tests/test-issue-publish-scope-guard-docs-signal.sh +0 -70
  103. package/tools/tests/test-issue-reconcile-hooks-success-clears-blocked.sh +0 -36
  104. package/tools/tests/test-kick-scheduler-requires-explicit-profile.sh +0 -47
  105. package/tools/tests/test-label-follow-up-issues-falls-back-to-repository-id.sh +0 -132
  106. package/tools/tests/test-manual-operator-entrypoints-require-explicit-profile.sh +0 -64
  107. package/tools/tests/test-package-funding-metadata.sh +0 -21
  108. package/tools/tests/test-package-public-metadata.sh +0 -62
  109. package/tools/tests/test-placeholder-worker-adapters.sh +0 -38
  110. package/tools/tests/test-pr-reconcile-hooks-refreshes-recurring-issue-checklist.sh +0 -110
  111. package/tools/tests/test-pr-risk-cohesive-mobile-locale-scope.sh +0 -70
  112. package/tools/tests/test-pr-risk-fix-label-semantics.sh +0 -114
  113. package/tools/tests/test-pr-risk-local-first-no-checks.sh +0 -70
  114. package/tools/tests/test-prepare-worktree-simple-repo-baseline.sh +0 -67
  115. package/tools/tests/test-profile-activate.sh +0 -33
  116. package/tools/tests/test-profile-adopt-allow-missing-repo.sh +0 -68
  117. package/tools/tests/test-profile-adopt-skip-workspace-sync-missing-file.sh +0 -61
  118. package/tools/tests/test-profile-adopt-syncs-anchor-and-workspace.sh +0 -90
  119. package/tools/tests/test-profile-smoke-collision.sh +0 -44
  120. package/tools/tests/test-profile-smoke-invalid-claude-config.sh +0 -31
  121. package/tools/tests/test-profile-smoke-invalid-provider-pool.sh +0 -68
  122. package/tools/tests/test-profile-smoke-repo-slug-mismatch.sh +0 -36
  123. package/tools/tests/test-profile-smoke.sh +0 -45
  124. package/tools/tests/test-project-init-force-and-skip-sync.sh +0 -61
  125. package/tools/tests/test-project-init-repo-slug-mismatch.sh +0 -29
  126. package/tools/tests/test-project-init.sh +0 -66
  127. package/tools/tests/test-project-launchd-bootstrap.sh +0 -66
  128. package/tools/tests/test-project-remove.sh +0 -150
  129. package/tools/tests/test-project-runtime-supervisor.sh +0 -47
  130. package/tools/tests/test-project-runtimectl-launchd.sh +0 -115
  131. package/tools/tests/test-project-runtimectl-missing-profile.sh +0 -54
  132. package/tools/tests/test-project-runtimectl-start-falls-back-to-bootstrap.sh +0 -108
  133. package/tools/tests/test-project-runtimectl-status-reports-supervisor-as-heartbeat-parent.sh +0 -95
  134. package/tools/tests/test-project-runtimectl-status-supervisor-running.sh +0 -59
  135. package/tools/tests/test-project-runtimectl-stop-cancels-pending-kick.sh +0 -85
  136. package/tools/tests/test-project-runtimectl-stop-clears-running-labels.sh +0 -78
  137. package/tools/tests/test-project-runtimectl.sh +0 -212
  138. package/tools/tests/test-provider-cooldown-state-prefers-runtime-worker-context.sh +0 -39
  139. package/tools/tests/test-provider-cooldown-state.sh +0 -59
  140. package/tools/tests/test-public-repo-docs.sh +0 -161
  141. package/tools/tests/test-reconcile-pr-worker-acp-config-routing.sh +0 -75
  142. package/tools/tests/test-render-dashboard-snapshot.sh +0 -149
  143. package/tools/tests/test-render-flow-config-demo-profile.sh +0 -36
  144. package/tools/tests/test-render-flow-config-provider-pool-fallback.sh +0 -81
  145. package/tools/tests/test-render-flow-config.sh +0 -52
  146. package/tools/tests/test-run-codex-task-claude-routing.sh +0 -125
  147. package/tools/tests/test-run-codex-task-codex-resident-routing.sh +0 -108
  148. package/tools/tests/test-run-codex-task-kilo-routing.sh +0 -98
  149. package/tools/tests/test-run-codex-task-openclaw-resident-routing.sh +0 -117
  150. package/tools/tests/test-run-codex-task-openclaw-routing.sh +0 -113
  151. package/tools/tests/test-run-codex-task-opencode-routing.sh +0 -98
  152. package/tools/tests/test-run-codex-task-provider-pool-fallback-routing.sh +0 -146
  153. package/tools/tests/test-scaffold-profile.sh +0 -108
  154. package/tools/tests/test-serve-dashboard.sh +0 -93
  155. package/tools/tests/test-start-issue-worker-blocked-context.sh +0 -129
  156. package/tools/tests/test-start-issue-worker-blocks-complete-recurring-checklist.sh +0 -189
  157. package/tools/tests/test-start-issue-worker-local-install-routing.sh +0 -157
  158. package/tools/tests/test-start-issue-worker-profile-template-routing.sh +0 -149
  159. package/tools/tests/test-start-issue-worker-recurring-resident-reuse-codex.sh +0 -212
  160. package/tools/tests/test-start-issue-worker-recurring-resident-reuse.sh +0 -219
  161. package/tools/tests/test-start-issue-worker-renders-verification-snippet.sh +0 -155
  162. package/tools/tests/test-start-issue-worker-resident-reuse-falls-back-to-new-worktree.sh +0 -199
  163. package/tools/tests/test-start-pr-fix-worker-host-blocker-context.sh +0 -275
  164. package/tools/tests/test-start-resident-issue-loop-adopts-next-recurring-issue.sh +0 -185
  165. package/tools/tests/test-start-resident-issue-loop-clears-pending-while-waiting-due.sh +0 -152
  166. package/tools/tests/test-start-resident-issue-loop-consumes-queued-lease.sh +0 -186
  167. package/tools/tests/test-start-resident-issue-loop-fails-over-provider-pool.sh +0 -212
  168. package/tools/tests/test-start-resident-issue-loop-immediate-cycles.sh +0 -148
  169. package/tools/tests/test-start-resident-issue-loop-waits-for-provider.sh +0 -194
  170. package/tools/tests/test-start-resident-issue-loop-waits-for-terminal-reconcile-status.sh +0 -198
  171. package/tools/tests/test-start-resident-issue-loop-yields-to-live-lane-controller.sh +0 -145
  172. package/tools/tests/test-sync-pr-labels-fix-lane-uses-repair-queued.sh +0 -67
  173. package/tools/tests/test-sync-recurring-issue-checklist-backfills-workflow-complete-blocker.sh +0 -70
  174. package/tools/tests/test-sync-recurring-issue-checklist.sh +0 -95
  175. package/tools/tests/test-sync-shared-agent-home-local-source-root.sh +0 -66
  176. package/tools/tests/test-sync-shared-agent-home-preserves-unrelated-workflow-catalog-skill.sh +0 -47
  177. package/tools/tests/test-test-smoke.sh +0 -86
  178. package/tools/tests/test-uninstall-project-launchd.sh +0 -37
  179. package/tools/tests/test-update-github-labels-prefers-sibling-helper.sh +0 -49
  180. package/tools/tests/test-vendored-codex-quota-claude-oauth-only.sh +0 -38
  181. package/tools/tests/test-workflow-catalog.sh +0 -43
  182. package/tools/vendor/codex-quota/README.md +0 -451
@@ -1,78 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- FLOW_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
5
- INSTALL_BIN="${FLOW_ROOT}/tools/bin/install-dashboard-launchd.sh"
6
-
7
- tmpdir="$(mktemp -d)"
8
- trap 'rm -rf "$tmpdir"' EXIT
9
-
10
- home_dir="$tmpdir/home"
11
- workspace_dir="$home_dir/.agent-runtime/control-plane/workspace"
12
- launch_agents_dir="$home_dir/Library/LaunchAgents"
13
- log_dir="$home_dir/.agent-runtime/logs"
14
- source_home="$tmpdir/source-home"
15
- runtime_home="$home_dir/.agent-runtime/runtime-home"
16
- profile_registry_root="$home_dir/.agent-runtime/control-plane/profiles"
17
- sync_script="$tmpdir/sync.sh"
18
- bootstrap_script="$tmpdir/bootstrap.sh"
19
- label="ai.agent.dashboard.test"
20
-
21
- mkdir -p "$workspace_dir" "$launch_agents_dir" "$log_dir" "$source_home" "$runtime_home" "$profile_registry_root"
22
-
23
- cat >"$sync_script" <<'EOF'
24
- #!/usr/bin/env bash
25
- set -euo pipefail
26
- exit 0
27
- EOF
28
- chmod +x "$sync_script"
29
-
30
- cat >"$bootstrap_script" <<'EOF'
31
- #!/usr/bin/env bash
32
- set -euo pipefail
33
- exit 0
34
- EOF
35
- chmod +x "$bootstrap_script"
36
-
37
- output="$(
38
- ACP_DASHBOARD_HOME_DIR="$home_dir" \
39
- ACP_DASHBOARD_SOURCE_HOME="$source_home" \
40
- ACP_DASHBOARD_RUNTIME_HOME="$runtime_home" \
41
- ACP_DASHBOARD_WORKSPACE_DIR="$workspace_dir" \
42
- ACP_DASHBOARD_PROFILE_REGISTRY_ROOT="$profile_registry_root" \
43
- ACP_DASHBOARD_LAUNCH_AGENTS_DIR="$launch_agents_dir" \
44
- ACP_DASHBOARD_LOG_DIR="$log_dir" \
45
- ACP_DASHBOARD_SYNC_SCRIPT="$sync_script" \
46
- ACP_DASHBOARD_BOOTSTRAP_SCRIPT="$bootstrap_script" \
47
- ACP_DASHBOARD_SKIP_LAUNCHCTL=1 \
48
- bash "$INSTALL_BIN" --host 127.0.0.1 --port 9911 --label "$label"
49
- )"
50
-
51
- wrapper_path="$workspace_dir/bin/agent-dashboard-launchd.sh"
52
- plist_path="$launch_agents_dir/$label.plist"
53
-
54
- grep -q '^LAUNCHD_INSTALL_STATUS=skipped-launchctl$' <<<"$output"
55
- grep -q "^LABEL=$label$" <<<"$output"
56
- grep -q "^PLIST=$plist_path$" <<<"$output"
57
- grep -q "^WRAPPER=$wrapper_path$" <<<"$output"
58
- grep -q '^URL=http://127.0.0.1:9911$' <<<"$output"
59
-
60
- test -x "$wrapper_path"
61
- test -f "$plist_path"
62
- grep -q "^export ACP_DASHBOARD_HOME_DIR='$home_dir'$" "$wrapper_path"
63
- grep -q "^export ACP_DASHBOARD_SOURCE_HOME='$source_home'$" "$wrapper_path"
64
- grep -q "^export ACP_DASHBOARD_RUNTIME_HOME='$runtime_home'$" "$wrapper_path"
65
- grep -q "^export ACP_DASHBOARD_PROFILE_REGISTRY_ROOT='$profile_registry_root'$" "$wrapper_path"
66
- grep -q "^export ACP_DASHBOARD_HOST='127.0.0.1'$" "$wrapper_path"
67
- grep -q "^export ACP_DASHBOARD_PORT='9911'$" "$wrapper_path"
68
- grep -q "^export ACP_DASHBOARD_SYNC_SCRIPT='$sync_script'$" "$wrapper_path"
69
- grep -q "exec bash '$bootstrap_script'$" "$wrapper_path"
70
-
71
- grep -q "<string>$label</string>" "$plist_path"
72
- grep -q "<string>$wrapper_path</string>" "$plist_path"
73
- grep -q "<string>$log_dir/agent-dashboard.stderr.log</string>" "$plist_path"
74
- grep -q "<string>$log_dir/agent-dashboard.stdout.log</string>" "$plist_path"
75
- grep -q '<key>KeepAlive</key>' "$plist_path"
76
- grep -q '<true/>' "$plist_path"
77
-
78
- echo "install dashboard launchd test passed"
@@ -1,87 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- FLOW_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
5
- INSTALL_BIN="${FLOW_ROOT}/tools/bin/install-project-launchd.sh"
6
-
7
- tmpdir="$(mktemp -d)"
8
- trap 'rm -rf "$tmpdir"' EXIT
9
-
10
- home_dir="$tmpdir/home"
11
- workspace_dir="$home_dir/.agent-runtime/control-plane/workspace"
12
- launch_agents_dir="$home_dir/Library/LaunchAgents"
13
- log_dir="$home_dir/.agent-runtime/logs"
14
- source_home="$tmpdir/source-home"
15
- runtime_home="$home_dir/.agent-runtime/runtime-home"
16
- profile_registry_root="$home_dir/.agent-runtime/control-plane/profiles"
17
- profile_dir="$profile_registry_root/demo"
18
- shim_dir="$tmpdir/shim"
19
- sync_script="$tmpdir/sync.sh"
20
- bootstrap_script="$tmpdir/bootstrap.sh"
21
- supervisor_script="$tmpdir/supervisor.sh"
22
-
23
- mkdir -p "$workspace_dir" "$launch_agents_dir" "$log_dir" "$source_home" "$runtime_home" "$profile_dir" "$shim_dir"
24
-
25
- cat >"$profile_dir/control-plane.yaml" <<EOF
26
- schema_version: "1"
27
- id: "demo"
28
- repo:
29
- slug: "example/demo"
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: "$tmpdir/runtime/demo/runs"
37
- state_root: "$tmpdir/runtime/demo/state"
38
- history_root: "$tmpdir/runtime/demo/history"
39
- retained_repo_root: "$tmpdir/repo"
40
- vscode_workspace_file: "$tmpdir/demo.code-workspace"
41
- execution:
42
- coding_worker: "openclaw"
43
- openclaw:
44
- model: "primary/model"
45
- thinking: "adaptive"
46
- timeout_seconds: 900
47
- EOF
48
-
49
- for path in "$sync_script" "$bootstrap_script" "$supervisor_script"; do
50
- cat >"$path" <<'EOF'
51
- #!/usr/bin/env bash
52
- set -euo pipefail
53
- exit 0
54
- EOF
55
- chmod +x "$path"
56
- done
57
-
58
- for tool in node gh openclaw; do
59
- cat >"$shim_dir/$tool" <<'EOF'
60
- #!/usr/bin/env bash
61
- set -euo pipefail
62
- exit 0
63
- EOF
64
- chmod +x "$shim_dir/$tool"
65
- done
66
-
67
- PATH="$shim_dir:/usr/bin:/bin:/usr/sbin:/sbin" \
68
- ACP_PROJECT_RUNTIME_HOME_DIR="$home_dir" \
69
- ACP_PROJECT_RUNTIME_SOURCE_HOME="$source_home" \
70
- ACP_PROJECT_RUNTIME_RUNTIME_HOME="$runtime_home" \
71
- ACP_PROJECT_RUNTIME_WORKSPACE_DIR="$workspace_dir" \
72
- ACP_PROJECT_RUNTIME_PROFILE_REGISTRY_ROOT="$profile_registry_root" \
73
- ACP_PROJECT_RUNTIME_LAUNCH_AGENTS_DIR="$launch_agents_dir" \
74
- ACP_PROJECT_RUNTIME_LOG_DIR="$log_dir" \
75
- ACP_PROJECT_RUNTIME_SYNC_SCRIPT="$sync_script" \
76
- ACP_PROJECT_RUNTIME_BOOTSTRAP_SCRIPT="$bootstrap_script" \
77
- ACP_PROJECT_RUNTIME_SUPERVISOR_SCRIPT="$supervisor_script" \
78
- ACP_PROJECT_RUNTIME_SKIP_LAUNCHCTL=1 \
79
- bash "$INSTALL_BIN" --profile-id demo >/dev/null
80
-
81
- wrapper_path="$workspace_dir/bin/agent-project-demo-launchd.sh"
82
- plist_path="$launch_agents_dir/ai.agent.project.demo.plist"
83
-
84
- grep -q "^export ACP_PROJECT_RUNTIME_PATH='.*${shim_dir}.*'$" "$wrapper_path"
85
- grep -q "<string>.*${shim_dir}.*</string>" "$plist_path"
86
-
87
- echo "install project launchd adds tool paths test passed"
@@ -1,110 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- FLOW_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
5
- INSTALL_BIN="${FLOW_ROOT}/tools/bin/install-project-launchd.sh"
6
-
7
- tmpdir="$(mktemp -d)"
8
- trap 'rm -rf "$tmpdir"' EXIT
9
-
10
- home_dir="$tmpdir/home"
11
- workspace_dir="$home_dir/.agent-runtime/control-plane/workspace"
12
- launch_agents_dir="$home_dir/Library/LaunchAgents"
13
- log_dir="$home_dir/.agent-runtime/logs"
14
- source_home="$tmpdir/source-home"
15
- runtime_home="$home_dir/.agent-runtime/runtime-home"
16
- profile_registry_root="$home_dir/.agent-runtime/control-plane/profiles"
17
- profile_dir="$profile_registry_root/demo"
18
- sync_script="$tmpdir/sync.sh"
19
- bootstrap_script="$tmpdir/bootstrap.sh"
20
- supervisor_script="$tmpdir/supervisor.sh"
21
- label="ai.agent.project.demo-test"
22
-
23
- mkdir -p "$workspace_dir" "$launch_agents_dir" "$log_dir" "$source_home" "$runtime_home" "$profile_dir"
24
-
25
- cat >"$profile_dir/control-plane.yaml" <<EOF
26
- schema_version: "1"
27
- id: "demo"
28
- repo:
29
- slug: "example/demo"
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: "$tmpdir/runtime/demo/runs"
37
- state_root: "$tmpdir/runtime/demo/state"
38
- history_root: "$tmpdir/runtime/demo/history"
39
- retained_repo_root: "$tmpdir/repo"
40
- vscode_workspace_file: "$tmpdir/demo.code-workspace"
41
- execution:
42
- coding_worker: "openclaw"
43
- openclaw:
44
- model: "primary/model"
45
- thinking: "adaptive"
46
- timeout_seconds: 900
47
- EOF
48
-
49
- cat >"$sync_script" <<'EOF'
50
- #!/usr/bin/env bash
51
- set -euo pipefail
52
- exit 0
53
- EOF
54
- chmod +x "$sync_script"
55
-
56
- cat >"$bootstrap_script" <<'EOF'
57
- #!/usr/bin/env bash
58
- set -euo pipefail
59
- exit 0
60
- EOF
61
- chmod +x "$bootstrap_script"
62
-
63
- cat >"$supervisor_script" <<'EOF'
64
- #!/usr/bin/env bash
65
- set -euo pipefail
66
- exit 0
67
- EOF
68
- chmod +x "$supervisor_script"
69
-
70
- output="$(
71
- ACP_PROJECT_RUNTIME_HOME_DIR="$home_dir" \
72
- ACP_PROJECT_RUNTIME_SOURCE_HOME="$source_home" \
73
- ACP_PROJECT_RUNTIME_RUNTIME_HOME="$runtime_home" \
74
- ACP_PROJECT_RUNTIME_WORKSPACE_DIR="$workspace_dir" \
75
- ACP_PROJECT_RUNTIME_PROFILE_REGISTRY_ROOT="$profile_registry_root" \
76
- ACP_PROJECT_RUNTIME_LAUNCH_AGENTS_DIR="$launch_agents_dir" \
77
- ACP_PROJECT_RUNTIME_LOG_DIR="$log_dir" \
78
- ACP_PROJECT_RUNTIME_SYNC_SCRIPT="$sync_script" \
79
- ACP_PROJECT_RUNTIME_BOOTSTRAP_SCRIPT="$bootstrap_script" \
80
- ACP_PROJECT_RUNTIME_SUPERVISOR_SCRIPT="$supervisor_script" \
81
- ACP_PROJECT_RUNTIME_SKIP_LAUNCHCTL=1 \
82
- bash "$INSTALL_BIN" --profile-id demo --label "$label" --delay-seconds 3 --interval-seconds 20
83
- )"
84
-
85
- wrapper_path="$workspace_dir/bin/agent-project-demo-launchd.sh"
86
- plist_path="$launch_agents_dir/$label.plist"
87
-
88
- grep -q '^LAUNCHD_INSTALL_STATUS=skipped-launchctl$' <<<"$output"
89
- grep -q '^PROFILE_ID=demo$' <<<"$output"
90
- grep -q "^LABEL=$label$" <<<"$output"
91
- grep -q "^PLIST=$plist_path$" <<<"$output"
92
- grep -q "^WRAPPER=$wrapper_path$" <<<"$output"
93
-
94
- test -x "$wrapper_path"
95
- test -f "$plist_path"
96
- grep -q "^export ACP_PROJECT_RUNTIME_HOME_DIR='$home_dir'$" "$wrapper_path"
97
- grep -q "^export ACP_PROJECT_RUNTIME_SOURCE_HOME='$source_home'$" "$wrapper_path"
98
- grep -q "^export ACP_PROJECT_RUNTIME_RUNTIME_HOME='$runtime_home'$" "$wrapper_path"
99
- grep -q "^export ACP_PROJECT_RUNTIME_PROFILE_ID='demo'$" "$wrapper_path"
100
- grep -q "^export ACP_PROJECT_RUNTIME_ENV_FILE='$profile_dir/runtime.env'$" "$wrapper_path"
101
- grep -q "^export ACP_PROFILE_REGISTRY_ROOT='$profile_registry_root'$" "$wrapper_path"
102
- grep -q "exec bash '$supervisor_script' --bootstrap-script '$bootstrap_script' --pid-file '$tmpdir/runtime/demo/state/runtime-supervisor.pid' --delay-seconds '3' --interval-seconds '20'$" "$wrapper_path"
103
-
104
- grep -q "<string>$label</string>" "$plist_path"
105
- grep -q "<string>$wrapper_path</string>" "$plist_path"
106
- grep -q "<string>$log_dir/agent-project-demo.stderr.log</string>" "$plist_path"
107
- grep -q "<string>$log_dir/agent-project-demo.stdout.log</string>" "$plist_path"
108
- grep -q '<key>KeepAlive</key>' "$plist_path"
109
-
110
- echo "install project launchd 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
- POLICY_BIN="${FLOW_ROOT}/tools/bin/issue-requires-local-workspace-install.sh"
6
-
7
- scheduled_verify_body="$(cat <<'EOF'
8
- ## Summary
9
- Run a recurring read-only verification.
10
-
11
- Schedule: every 1h
12
-
13
- ## Commands
14
- 1. `pnpm run verify:web:main`
15
- EOF
16
- )"
17
-
18
- scheduled_mobile_verify_body="$(cat <<'EOF'
19
- ## Summary
20
- Run a recurring read-only verification.
21
-
22
- Schedule: every 1h
23
-
24
- ## Commands
25
- 1. `pnpm run verify:mobile:main`
26
- EOF
27
- )"
28
-
29
- scheduled_install_body="$(cat <<'EOF'
30
- ## Summary
31
- Rebuild the workspace before running checks.
32
-
33
- Schedule: every 1h
34
-
35
- ## Commands
36
- 1. `pnpm install --frozen-lockfile`
37
- 2. `pnpm run verify:web:main`
38
- EOF
39
- )"
40
-
41
- scheduled_native_body="$(cat <<'EOF'
42
- ## Summary
43
- Prepare iOS workspace before recurring checks.
44
-
45
- Schedule: every 1h
46
-
47
- ## Commands
48
- 1. `expo prebuild --platform ios`
49
- 2. `pnpm run verify:mobile:main`
50
- EOF
51
- )"
52
-
53
- explicit_opt_in_body="$(cat <<'EOF'
54
- ## Summary
55
- Run with local install.
56
-
57
- Schedule: every 1h
58
- Local workspace install: yes
59
-
60
- ## Commands
61
- 1. `pnpm run verify:web:main`
62
- EOF
63
- )"
64
-
65
- unscheduled_install_body="$(cat <<'EOF'
66
- ## Summary
67
- Manual task.
68
-
69
- ## Commands
70
- 1. `pnpm install --frozen-lockfile`
71
- EOF
72
- )"
73
-
74
- [[ "$(ISSUE_BODY="$scheduled_verify_body" bash "$POLICY_BIN")" == "no" ]]
75
- [[ "$(ISSUE_BODY="$scheduled_mobile_verify_body" bash "$POLICY_BIN")" == "no" ]]
76
- [[ "$(ISSUE_BODY="$scheduled_install_body" bash "$POLICY_BIN")" == "yes" ]]
77
- [[ "$(ISSUE_BODY="$scheduled_native_body" bash "$POLICY_BIN")" == "yes" ]]
78
- [[ "$(ISSUE_BODY="$explicit_opt_in_body" bash "$POLICY_BIN")" == "yes" ]]
79
- [[ "$(ISSUE_BODY="$unscheduled_install_body" bash "$POLICY_BIN")" == "no" ]]
80
-
81
- echo "issue local workspace install policy test passed"
@@ -1,70 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- FLOW_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
5
- SCOPE_GUARD_BIN="${FLOW_ROOT}/tools/bin/issue-publish-scope-guard.sh"
6
-
7
- tmpdir="$(mktemp -d)"
8
- trap 'rm -rf "$tmpdir"' EXIT
9
-
10
- repo="$tmpdir/repo"
11
- bin_dir="$tmpdir/bin"
12
- node_bin_dir="$(dirname "$(command -v node)")"
13
- mkdir -p "$bin_dir"
14
-
15
- git init -b main "$repo" >/dev/null 2>&1
16
- mkdir -p "$repo/apps/web/src/app"
17
- printf 'export default function Home() { return null; }\n' >"$repo/apps/web/src/app/page.tsx"
18
- git -C "$repo" add apps/web/src/app/page.tsx
19
- git -C "$repo" -c user.name=Test -c user.email=test@example.com commit -m "init" >/dev/null
20
- git -C "$repo" checkout -b issue-slice >/dev/null 2>&1
21
- printf 'export default function Home() { return \"patched\"; }\n' >"$repo/apps/web/src/app/page.tsx"
22
- git -C "$repo" add apps/web/src/app/page.tsx
23
- git -C "$repo" -c user.name=Test -c user.email=test@example.com commit -m "product slice" >/dev/null
24
-
25
- cat >"$bin_dir/gh" <<'EOF'
26
- #!/usr/bin/env bash
27
- set -euo pipefail
28
-
29
- if [[ "${1:-}" == "issue" && "${2:-}" == "view" ]]; then
30
- issue_id="${3:-}"
31
- case "$issue_id" in
32
- 100)
33
- cat <<'JSON'
34
- {"title":"Align auth page with OpenSpec contract","body":"Context: keep behavior aligned with the latest OpenSpec notes."}
35
- JSON
36
- ;;
37
- 101)
38
- cat <<'JSON'
39
- {"title":"docs: auth page follow-up","body":"Scope: docs only"}
40
- JSON
41
- ;;
42
- *)
43
- echo "unexpected issue id: $issue_id" >&2
44
- exit 1
45
- ;;
46
- esac
47
- exit 0
48
- fi
49
-
50
- echo "unexpected gh args: $*" >&2
51
- exit 1
52
- EOF
53
-
54
- chmod +x "$bin_dir/gh"
55
-
56
- PATH="$bin_dir:$node_bin_dir:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin" \
57
- bash "$SCOPE_GUARD_BIN" --worktree "$repo" --base-ref main --issue-id 100 >/dev/null
58
-
59
- set +e
60
- blocked_output="$(
61
- PATH="$bin_dir:$node_bin_dir:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin" \
62
- bash "$SCOPE_GUARD_BIN" --worktree "$repo" --base-ref main --issue-id 101 2>&1
63
- )"
64
- blocked_status=$?
65
- set -e
66
-
67
- test "$blocked_status" = "42"
68
- grep -q 'docs_declared_scope_contains_product_changes=1' <<<"$blocked_output"
69
-
70
- echo "issue publish scope guard docs signal test passed"
@@ -1,36 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- FLOW_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
5
- HOOK_FILE="${FLOW_ROOT}/hooks/issue-reconcile-hooks.sh"
6
-
7
- tmpdir="$(mktemp -d)"
8
- trap 'rm -rf "$tmpdir"' EXIT
9
-
10
- stub_tools="$tmpdir/tools/bin"
11
- capture_file="$tmpdir/labels.log"
12
- mkdir -p "$stub_tools"
13
-
14
- cat >"$stub_tools/agent-github-update-labels" <<'EOF'
15
- #!/usr/bin/env bash
16
- set -euo pipefail
17
- printf '%s\n' "$*" >"${TEST_CAPTURE_FILE:?}"
18
- EOF
19
- chmod +x "$stub_tools/agent-github-update-labels"
20
-
21
- export ISSUE_ID=42
22
- export TEST_CAPTURE_FILE="$capture_file"
23
-
24
- # shellcheck source=/dev/null
25
- source "$HOOK_FILE"
26
-
27
- FLOW_TOOLS_DIR="$stub_tools"
28
- REPO_SLUG="example/repo"
29
-
30
- issue_remove_running
31
-
32
- grep -q -- '--remove agent-running' "$capture_file"
33
- grep -q -- '--remove agent-ready' "$capture_file"
34
- grep -q -- '--remove agent-blocked' "$capture_file"
35
-
36
- echo "issue reconcile hooks success clears blocked label test passed"
@@ -1,47 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- FLOW_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
5
- KICK_SCRIPT="${FLOW_ROOT}/tools/bin/kick-scheduler.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
- skill_root="$tmpdir/skill"
13
- bin_dir="$skill_root/tools/bin"
14
- assets_dir="$skill_root/assets"
15
- profile_home="$tmpdir/profiles"
16
- mkdir -p "$bin_dir" "$profile_home/alpha" "$profile_home/beta" "$assets_dir"
17
-
18
- cp "$KICK_SCRIPT" "$bin_dir/kick-scheduler.sh"
19
- cp "$FLOW_CONFIG_LIB" "$bin_dir/flow-config-lib.sh"
20
- cp "$FLOW_SHELL_LIB" "$bin_dir/flow-shell-lib.sh"
21
- printf '{}
22
- ' >"$assets_dir/workflow-catalog.json"
23
-
24
- cat >"$profile_home/alpha/control-plane.yaml" <<'EOF'
25
- schema_version: "1"
26
- id: "alpha"
27
- repo:
28
- slug: "example/alpha"
29
- EOF
30
-
31
- cat >"$profile_home/beta/control-plane.yaml" <<'EOF'
32
- schema_version: "1"
33
- id: "beta"
34
- repo:
35
- slug: "example/beta"
36
- EOF
37
-
38
- set +e
39
- output="$(ACP_PROFILE_REGISTRY_ROOT="$profile_home" bash "$bin_dir/kick-scheduler.sh" 1 2>&1)"
40
- status=$?
41
- set -e
42
-
43
- test "$status" -eq 64
44
- grep -q '^explicit profile selection required for kick-scheduler.sh when multiple available profiles exist\.$' <<<"$output"
45
- grep -q '^Set ACP_PROJECT_ID=<id> or AGENT_PROJECT_ID=<id> when multiple available profiles exist\.$' <<<"$output"
46
-
47
- echo "kick scheduler explicit profile guard test passed"
@@ -1,132 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- FLOW_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
5
-
6
- tmpdir="$(mktemp -d)"
7
- trap 'rm -rf "$tmpdir"' EXIT
8
-
9
- workspace_root="$tmpdir/workspace"
10
- adapter_bin_dir="$workspace_root/bin"
11
- tools_bin_dir="$workspace_root/tools/bin"
12
- profile_registry_root="$tmpdir/profile-registry"
13
- profile_dir="$profile_registry_root/demo"
14
- agent_root="$tmpdir/agent"
15
- repo_root="$tmpdir/repo"
16
- shim_dir="$tmpdir/shim"
17
- run_dir="$agent_root/runs/demo-issue-42"
18
- capture_file="$tmpdir/labels.log"
19
-
20
- mkdir -p "$adapter_bin_dir" "$tools_bin_dir" "$profile_dir" "$agent_root/runs" "$agent_root/history" "$agent_root/state" "$repo_root" "$shim_dir" "$run_dir"
21
-
22
- cp "$FLOW_ROOT/bin/label-follow-up-issues.sh" "$adapter_bin_dir/label-follow-up-issues.sh"
23
- cp "$FLOW_ROOT/tools/bin/flow-config-lib.sh" "$tools_bin_dir/flow-config-lib.sh"
24
- cp "$FLOW_ROOT/tools/bin/flow-shell-lib.sh" "$tools_bin_dir/flow-shell-lib.sh"
25
-
26
- cat >"$profile_dir/control-plane.yaml" <<EOF
27
- schema_version: "1"
28
- id: "demo"
29
- repo:
30
- slug: "example/demo"
31
- id: "123"
32
- root: "$repo_root"
33
- default_branch: "main"
34
- runtime:
35
- orchestrator_agent_root: "$agent_root"
36
- worktree_root: "$tmpdir/worktrees"
37
- agent_repo_root: "$repo_root"
38
- runs_root: "$agent_root/runs"
39
- state_root: "$agent_root/state"
40
- history_root: "$agent_root/history"
41
- retained_repo_root: "$repo_root"
42
- vscode_workspace_file: "$tmpdir/demo.code-workspace"
43
- session_naming:
44
- issue_prefix: "demo-issue-"
45
- pr_prefix: "demo-pr-"
46
- issue_branch_prefix: "agent/demo/issue"
47
- pr_worktree_branch_prefix: "agent/demo/pr"
48
- managed_pr_branch_globs: "agent/demo/*"
49
- execution:
50
- coding_worker: "openclaw"
51
- EOF
52
-
53
- cat >"$tools_bin_dir/agent-project-worker-status" <<'EOF'
54
- #!/usr/bin/env bash
55
- set -euo pipefail
56
- cat <<OUT
57
- STATUS=SUCCEEDED
58
- META_FILE=${TEST_RUN_DIR:?}/run.env
59
- OUT
60
- EOF
61
- chmod +x "$tools_bin_dir/agent-project-worker-status"
62
-
63
- cat >"$tools_bin_dir/agent-github-update-labels" <<'EOF'
64
- #!/usr/bin/env bash
65
- set -euo pipefail
66
- printf '%s\n' "$*" >>"${TEST_CAPTURE_FILE:?}"
67
- EOF
68
- chmod +x "$tools_bin_dir/agent-github-update-labels"
69
-
70
- cat >"$adapter_bin_dir/issue-resource-class.sh" <<'EOF'
71
- #!/usr/bin/env bash
72
- set -euo pipefail
73
- cat <<OUT
74
- IS_E2E=yes
75
- OUT
76
- EOF
77
- chmod +x "$adapter_bin_dir/issue-resource-class.sh"
78
-
79
- cat >"$shim_dir/gh" <<'EOF'
80
- #!/usr/bin/env bash
81
- set -euo pipefail
82
-
83
- if [[ "${1:-}" == "issue" && "${2:-}" == "view" ]]; then
84
- issue_id="${3:-0}"
85
- cat <<JSON
86
- {"number":${issue_id},"state":"OPEN","title":"Follow-up issue ${issue_id}","body":"Keep this focused.","url":"https://example.test/issues/${issue_id}","labels":[],"comments":[],"createdAt":"2026-03-28T20:00:00Z","updatedAt":"2026-03-28T20:00:00Z"}
87
- JSON
88
- exit 0
89
- fi
90
-
91
- if [[ "${1:-}" == "api" ]]; then
92
- route="${2:-}"
93
- case "${route}" in
94
- repos/example/demo/issues/42/comments*)
95
- echo "gh: Not Found (HTTP 404)" >&2
96
- exit 1
97
- ;;
98
- repositories/123/issues/42/comments*)
99
- cat <<'JSON'
100
- [{"user":{"login":"tester"},"created_at":"2026-03-28T20:01:00Z","body":"Please follow up in issue #77."}]
101
- JSON
102
- exit 0
103
- ;;
104
- esac
105
- fi
106
-
107
- echo "unexpected gh args: $*" >&2
108
- exit 1
109
- EOF
110
- chmod +x "$shim_dir/gh"
111
-
112
- cat >"$run_dir/run.env" <<'EOF'
113
- ISSUE_ID=42
114
- SESSION=demo-issue-42
115
- STARTED_AT=2026-03-28T20:00:00Z
116
- EOF
117
-
118
- out="$(
119
- PATH="$shim_dir:$PATH" \
120
- ACP_PROJECT_ID="demo" \
121
- ACP_PROFILE_REGISTRY_ROOT="$profile_registry_root" \
122
- TEST_RUN_DIR="$run_dir" \
123
- TEST_CAPTURE_FILE="$capture_file" \
124
- GITHUB_ACTOR="tester" \
125
- bash "$adapter_bin_dir/label-follow-up-issues.sh" demo-issue-42
126
- )"
127
-
128
- grep -q '^LABELED=77$' <<<"$out"
129
- grep -q '^COUNT=1$' <<<"$out"
130
- grep -q -- '--repo-slug example/demo --number 77 --add agent-e2e-heavy' "$capture_file"
131
-
132
- echo "label follow-up issues repository id fallback test passed"