@cluesmith/codev 3.0.0-rc.0 → 3.0.0-rc.10

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 (331) hide show
  1. package/LICENSE +201 -0
  2. package/bin/af.js +2 -2
  3. package/bin/afx.js +8 -0
  4. package/bin/consult.js +2 -1
  5. package/bin/team.js +8 -0
  6. package/{dashboard/dist/assets/index-nr0cXxtf.css → dashboard-dist/assets/index-Bs8I7N2s.css} +1 -1
  7. package/dashboard-dist/assets/index-CkNo2z6t.js +195 -0
  8. package/dashboard-dist/assets/index-CkNo2z6t.js.map +1 -0
  9. package/dashboard-dist/dist/assets/index-Bs8I7N2s.css +32 -0
  10. package/dashboard-dist/dist/assets/index-CkNo2z6t.js +195 -0
  11. package/dashboard-dist/dist/assets/index-CkNo2z6t.js.map +1 -0
  12. package/{dashboard → dashboard-dist}/dist/index.html +2 -2
  13. package/dashboard-dist/index.html +14 -0
  14. package/dist/agent-farm/cli.d.ts.map +1 -1
  15. package/dist/agent-farm/cli.js +21 -13
  16. package/dist/agent-farm/cli.js.map +1 -1
  17. package/dist/agent-farm/commands/architect.d.ts +4 -4
  18. package/dist/agent-farm/commands/architect.d.ts.map +1 -1
  19. package/dist/agent-farm/commands/architect.js +23 -12
  20. package/dist/agent-farm/commands/architect.js.map +1 -1
  21. package/dist/agent-farm/commands/attach.js +8 -8
  22. package/dist/agent-farm/commands/attach.js.map +1 -1
  23. package/dist/agent-farm/commands/bench.d.ts +1 -1
  24. package/dist/agent-farm/commands/bench.js +1 -1
  25. package/dist/agent-farm/commands/cleanup.d.ts.map +1 -1
  26. package/dist/agent-farm/commands/cleanup.js +10 -5
  27. package/dist/agent-farm/commands/cleanup.js.map +1 -1
  28. package/dist/agent-farm/commands/cron.js +1 -1
  29. package/dist/agent-farm/commands/cron.js.map +1 -1
  30. package/dist/agent-farm/commands/db.d.ts +3 -3
  31. package/dist/agent-farm/commands/db.js +4 -4
  32. package/dist/agent-farm/commands/db.js.map +1 -1
  33. package/dist/agent-farm/commands/open.js +2 -2
  34. package/dist/agent-farm/commands/open.js.map +1 -1
  35. package/dist/agent-farm/commands/rename.js +1 -1
  36. package/dist/agent-farm/commands/rename.js.map +1 -1
  37. package/dist/agent-farm/commands/send.d.ts +4 -1
  38. package/dist/agent-farm/commands/send.d.ts.map +1 -1
  39. package/dist/agent-farm/commands/send.js +8 -5
  40. package/dist/agent-farm/commands/send.js.map +1 -1
  41. package/dist/agent-farm/commands/shell.js +3 -3
  42. package/dist/agent-farm/commands/shell.js.map +1 -1
  43. package/dist/agent-farm/commands/spawn-roles.d.ts +2 -1
  44. package/dist/agent-farm/commands/spawn-roles.d.ts.map +1 -1
  45. package/dist/agent-farm/commands/spawn-roles.js +1 -1
  46. package/dist/agent-farm/commands/spawn-roles.js.map +1 -1
  47. package/dist/agent-farm/commands/spawn-worktree.d.ts +49 -10
  48. package/dist/agent-farm/commands/spawn-worktree.d.ts.map +1 -1
  49. package/dist/agent-farm/commands/spawn-worktree.js +357 -49
  50. package/dist/agent-farm/commands/spawn-worktree.js.map +1 -1
  51. package/dist/agent-farm/commands/spawn.d.ts +6 -6
  52. package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
  53. package/dist/agent-farm/commands/spawn.js +182 -74
  54. package/dist/agent-farm/commands/spawn.js.map +1 -1
  55. package/dist/agent-farm/commands/status.d.ts.map +1 -1
  56. package/dist/agent-farm/commands/status.js +48 -3
  57. package/dist/agent-farm/commands/status.js.map +1 -1
  58. package/dist/agent-farm/commands/team-update.d.ts +1 -1
  59. package/dist/agent-farm/commands/team-update.d.ts.map +1 -1
  60. package/dist/agent-farm/commands/team-update.js +8 -5
  61. package/dist/agent-farm/commands/team-update.js.map +1 -1
  62. package/dist/agent-farm/commands/team.d.ts +7 -1
  63. package/dist/agent-farm/commands/team.d.ts.map +1 -1
  64. package/dist/agent-farm/commands/team.js +36 -4
  65. package/dist/agent-farm/commands/team.js.map +1 -1
  66. package/dist/agent-farm/commands/tower-cloud.d.ts +2 -2
  67. package/dist/agent-farm/commands/tower-cloud.js +3 -3
  68. package/dist/agent-farm/commands/tower-cloud.js.map +1 -1
  69. package/dist/agent-farm/commands/tower.d.ts +1 -0
  70. package/dist/agent-farm/commands/tower.d.ts.map +1 -1
  71. package/dist/agent-farm/commands/tower.js +54 -3
  72. package/dist/agent-farm/commands/tower.js.map +1 -1
  73. package/dist/agent-farm/lib/cloud-config.js +2 -2
  74. package/dist/agent-farm/lib/cloud-config.js.map +1 -1
  75. package/dist/agent-farm/lib/tower-client.d.ts +6 -230
  76. package/dist/agent-farm/lib/tower-client.d.ts.map +1 -1
  77. package/dist/agent-farm/lib/tower-client.js +6 -293
  78. package/dist/agent-farm/lib/tower-client.js.map +1 -1
  79. package/dist/agent-farm/lib/tunnel-client.js +1 -1
  80. package/dist/agent-farm/lib/tunnel-client.js.map +1 -1
  81. package/dist/agent-farm/servers/message-write.d.ts +24 -0
  82. package/dist/agent-farm/servers/message-write.d.ts.map +1 -0
  83. package/dist/agent-farm/servers/message-write.js +63 -0
  84. package/dist/agent-farm/servers/message-write.js.map +1 -0
  85. package/dist/agent-farm/servers/overview.d.ts +10 -8
  86. package/dist/agent-farm/servers/overview.d.ts.map +1 -1
  87. package/dist/agent-farm/servers/overview.js +78 -38
  88. package/dist/agent-farm/servers/overview.js.map +1 -1
  89. package/dist/agent-farm/servers/send-buffer.d.ts +4 -3
  90. package/dist/agent-farm/servers/send-buffer.d.ts.map +1 -1
  91. package/dist/agent-farm/servers/send-buffer.js +7 -4
  92. package/dist/agent-farm/servers/send-buffer.js.map +1 -1
  93. package/dist/agent-farm/servers/tower-cron-parser.js +1 -1
  94. package/dist/agent-farm/servers/tower-cron-parser.js.map +1 -1
  95. package/dist/agent-farm/servers/tower-cron.d.ts.map +1 -1
  96. package/dist/agent-farm/servers/tower-cron.js +4 -5
  97. package/dist/agent-farm/servers/tower-cron.js.map +1 -1
  98. package/dist/agent-farm/servers/tower-instances.d.ts.map +1 -1
  99. package/dist/agent-farm/servers/tower-instances.js +24 -15
  100. package/dist/agent-farm/servers/tower-instances.js.map +1 -1
  101. package/dist/agent-farm/servers/tower-routes.d.ts.map +1 -1
  102. package/dist/agent-farm/servers/tower-routes.js +9 -16
  103. package/dist/agent-farm/servers/tower-routes.js.map +1 -1
  104. package/dist/agent-farm/servers/tower-server.js +15 -1
  105. package/dist/agent-farm/servers/tower-server.js.map +1 -1
  106. package/dist/agent-farm/servers/tower-terminals.d.ts +2 -2
  107. package/dist/agent-farm/servers/tower-terminals.d.ts.map +1 -1
  108. package/dist/agent-farm/servers/tower-terminals.js +64 -36
  109. package/dist/agent-farm/servers/tower-terminals.js.map +1 -1
  110. package/dist/agent-farm/servers/tower-tunnel.js +2 -2
  111. package/dist/agent-farm/servers/tower-tunnel.js.map +1 -1
  112. package/dist/agent-farm/servers/tower-utils.d.ts +9 -6
  113. package/dist/agent-farm/servers/tower-utils.d.ts.map +1 -1
  114. package/dist/agent-farm/servers/tower-utils.js +13 -7
  115. package/dist/agent-farm/servers/tower-utils.js.map +1 -1
  116. package/dist/agent-farm/types.d.ts +13 -0
  117. package/dist/agent-farm/types.d.ts.map +1 -1
  118. package/dist/agent-farm/utils/config.d.ts +11 -0
  119. package/dist/agent-farm/utils/config.d.ts.map +1 -1
  120. package/dist/agent-farm/utils/config.js +39 -17
  121. package/dist/agent-farm/utils/config.js.map +1 -1
  122. package/dist/agent-farm/utils/harness.d.ts +85 -0
  123. package/dist/agent-farm/utils/harness.d.ts.map +1 -0
  124. package/dist/agent-farm/utils/harness.js +212 -0
  125. package/dist/agent-farm/utils/harness.js.map +1 -0
  126. package/dist/agent-farm/utils/roles.d.ts +11 -4
  127. package/dist/agent-farm/utils/roles.d.ts.map +1 -1
  128. package/dist/agent-farm/utils/roles.js +21 -6
  129. package/dist/agent-farm/utils/roles.js.map +1 -1
  130. package/dist/cli.d.ts +1 -1
  131. package/dist/cli.d.ts.map +1 -1
  132. package/dist/cli.js +118 -5
  133. package/dist/cli.js.map +1 -1
  134. package/dist/commands/adopt.d.ts.map +1 -1
  135. package/dist/commands/adopt.js +16 -45
  136. package/dist/commands/adopt.js.map +1 -1
  137. package/dist/commands/consult/index.d.ts +6 -2
  138. package/dist/commands/consult/index.d.ts.map +1 -1
  139. package/dist/commands/consult/index.js +231 -183
  140. package/dist/commands/consult/index.js.map +1 -1
  141. package/dist/commands/doctor.d.ts.map +1 -1
  142. package/dist/commands/doctor.js +121 -31
  143. package/dist/commands/doctor.js.map +1 -1
  144. package/dist/commands/init.d.ts.map +1 -1
  145. package/dist/commands/init.js +13 -43
  146. package/dist/commands/init.js.map +1 -1
  147. package/dist/commands/porch/artifacts.d.ts +69 -0
  148. package/dist/commands/porch/artifacts.d.ts.map +1 -0
  149. package/dist/commands/porch/artifacts.js +368 -0
  150. package/dist/commands/porch/artifacts.js.map +1 -0
  151. package/dist/commands/porch/checks.d.ts +14 -3
  152. package/dist/commands/porch/checks.d.ts.map +1 -1
  153. package/dist/commands/porch/checks.js +150 -4
  154. package/dist/commands/porch/checks.js.map +1 -1
  155. package/dist/commands/porch/config.d.ts +6 -9
  156. package/dist/commands/porch/config.d.ts.map +1 -1
  157. package/dist/commands/porch/config.js +12 -37
  158. package/dist/commands/porch/config.js.map +1 -1
  159. package/dist/commands/porch/index.d.ts +12 -7
  160. package/dist/commands/porch/index.d.ts.map +1 -1
  161. package/dist/commands/porch/index.js +273 -82
  162. package/dist/commands/porch/index.js.map +1 -1
  163. package/dist/commands/porch/next.d.ts.map +1 -1
  164. package/dist/commands/porch/next.js +142 -75
  165. package/dist/commands/porch/next.js.map +1 -1
  166. package/dist/commands/porch/notify.d.ts +2 -2
  167. package/dist/commands/porch/notify.js +5 -5
  168. package/dist/commands/porch/notify.js.map +1 -1
  169. package/dist/commands/porch/prompts.d.ts +2 -1
  170. package/dist/commands/porch/prompts.d.ts.map +1 -1
  171. package/dist/commands/porch/prompts.js +34 -38
  172. package/dist/commands/porch/prompts.js.map +1 -1
  173. package/dist/commands/porch/protocol.d.ts +4 -3
  174. package/dist/commands/porch/protocol.d.ts.map +1 -1
  175. package/dist/commands/porch/protocol.js +21 -21
  176. package/dist/commands/porch/protocol.js.map +1 -1
  177. package/dist/commands/porch/state.d.ts +27 -2
  178. package/dist/commands/porch/state.d.ts.map +1 -1
  179. package/dist/commands/porch/state.js +100 -9
  180. package/dist/commands/porch/state.js.map +1 -1
  181. package/dist/commands/porch/types.d.ts +10 -2
  182. package/dist/commands/porch/types.d.ts.map +1 -1
  183. package/dist/commands/sync.d.ts +26 -0
  184. package/dist/commands/sync.d.ts.map +1 -0
  185. package/dist/commands/sync.js +207 -0
  186. package/dist/commands/sync.js.map +1 -0
  187. package/dist/commands/update.d.ts +15 -2
  188. package/dist/commands/update.d.ts.map +1 -1
  189. package/dist/commands/update.js +159 -202
  190. package/dist/commands/update.js.map +1 -1
  191. package/dist/lib/config.d.ts +96 -0
  192. package/dist/lib/config.d.ts.map +1 -0
  193. package/dist/lib/config.js +165 -0
  194. package/dist/lib/config.js.map +1 -0
  195. package/dist/lib/forge-contracts.d.ts +100 -0
  196. package/dist/lib/forge-contracts.d.ts.map +1 -0
  197. package/dist/lib/forge-contracts.js +35 -0
  198. package/dist/lib/forge-contracts.js.map +1 -0
  199. package/dist/lib/forge.d.ts +102 -0
  200. package/dist/lib/forge.d.ts.map +1 -0
  201. package/dist/lib/forge.js +376 -0
  202. package/dist/lib/forge.js.map +1 -0
  203. package/dist/lib/github.d.ts +68 -60
  204. package/dist/lib/github.d.ts.map +1 -1
  205. package/dist/lib/github.js +160 -169
  206. package/dist/lib/github.js.map +1 -1
  207. package/dist/lib/skeleton.d.ts +15 -5
  208. package/dist/lib/skeleton.d.ts.map +1 -1
  209. package/dist/lib/skeleton.js +82 -7
  210. package/dist/lib/skeleton.js.map +1 -1
  211. package/dist/lib/team-github.d.ts +7 -3
  212. package/dist/lib/team-github.d.ts.map +1 -1
  213. package/dist/lib/team-github.js +29 -19
  214. package/dist/lib/team-github.js.map +1 -1
  215. package/dist/lib/team.d.ts.map +1 -1
  216. package/dist/lib/team.js +4 -1
  217. package/dist/lib/team.js.map +1 -1
  218. package/dist/terminal/pty-manager.d.ts.map +1 -1
  219. package/dist/terminal/pty-manager.js +2 -0
  220. package/dist/terminal/pty-manager.js.map +1 -1
  221. package/dist/terminal/ws-protocol.d.ts +10 -8
  222. package/dist/terminal/ws-protocol.d.ts.map +1 -1
  223. package/dist/terminal/ws-protocol.js +3 -0
  224. package/dist/terminal/ws-protocol.js.map +1 -1
  225. package/package.json +28 -24
  226. package/scripts/forge/gitea/auth-status.sh +3 -0
  227. package/scripts/forge/gitea/issue-comment.sh +3 -0
  228. package/scripts/forge/gitea/issue-list.sh +3 -0
  229. package/scripts/forge/gitea/issue-view.sh +3 -0
  230. package/scripts/forge/gitea/pr-exists.sh +6 -0
  231. package/scripts/forge/gitea/pr-list.sh +3 -0
  232. package/scripts/forge/gitea/pr-merge.sh +3 -0
  233. package/scripts/forge/gitea/pr-view.sh +3 -0
  234. package/scripts/forge/gitea/recently-closed.sh +3 -0
  235. package/scripts/forge/gitea/recently-merged.sh +3 -0
  236. package/scripts/forge/gitea/repo-archive.sh +11 -0
  237. package/scripts/forge/gitea/user-identity.sh +3 -0
  238. package/scripts/forge/github/auth-status.sh +4 -0
  239. package/scripts/forge/github/issue-comment.sh +5 -0
  240. package/scripts/forge/github/issue-list.sh +4 -0
  241. package/scripts/forge/github/issue-view.sh +5 -0
  242. package/scripts/forge/github/on-it-timestamps.sh +8 -0
  243. package/scripts/forge/github/pr-diff.sh +10 -0
  244. package/scripts/forge/github/pr-exists.sh +7 -0
  245. package/scripts/forge/github/pr-list.sh +4 -0
  246. package/scripts/forge/github/pr-merge.sh +5 -0
  247. package/scripts/forge/github/pr-search.sh +5 -0
  248. package/scripts/forge/github/pr-view.sh +11 -0
  249. package/scripts/forge/github/recently-closed.sh +15 -0
  250. package/scripts/forge/github/recently-merged.sh +15 -0
  251. package/scripts/forge/github/repo-archive.sh +10 -0
  252. package/scripts/forge/github/team-activity.sh +5 -0
  253. package/scripts/forge/github/user-identity.sh +4 -0
  254. package/scripts/forge/gitlab/auth-status.sh +3 -0
  255. package/scripts/forge/gitlab/issue-comment.sh +3 -0
  256. package/scripts/forge/gitlab/issue-list.sh +3 -0
  257. package/scripts/forge/gitlab/issue-view.sh +3 -0
  258. package/scripts/forge/gitlab/pr-diff.sh +3 -0
  259. package/scripts/forge/gitlab/pr-exists.sh +5 -0
  260. package/scripts/forge/gitlab/pr-list.sh +3 -0
  261. package/scripts/forge/gitlab/pr-merge.sh +3 -0
  262. package/scripts/forge/gitlab/pr-search.sh +3 -0
  263. package/scripts/forge/gitlab/pr-view.sh +3 -0
  264. package/scripts/forge/gitlab/recently-closed.sh +3 -0
  265. package/scripts/forge/gitlab/recently-merged.sh +3 -0
  266. package/scripts/forge/gitlab/repo-archive.sh +12 -0
  267. package/scripts/forge/gitlab/user-identity.sh +3 -0
  268. package/skeleton/.claude/skills/afx/SKILL.md +144 -0
  269. package/skeleton/.claude/skills/codev/SKILL.md +3 -3
  270. package/skeleton/.claude/skills/consult/SKILL.md +1 -1
  271. package/skeleton/.claude/skills/porch/SKILL.md +2 -2
  272. package/skeleton/DEPENDENCIES.md +1 -1
  273. package/skeleton/builders.md +4 -4
  274. package/skeleton/protocol-schema.json +2 -2
  275. package/skeleton/protocols/air/builder-prompt.md +6 -6
  276. package/skeleton/protocols/air/prompts/pr.md +2 -2
  277. package/skeleton/protocols/air/protocol.md +1 -2
  278. package/skeleton/protocols/aspir/builder-prompt.md +28 -6
  279. package/skeleton/protocols/aspir/protocol.json +9 -1
  280. package/skeleton/protocols/aspir/protocol.md +1 -1
  281. package/skeleton/protocols/aspir/templates/plan.md +0 -20
  282. package/skeleton/protocols/aspir/templates/spec.md +0 -28
  283. package/skeleton/protocols/bugfix/builder-prompt.md +6 -6
  284. package/skeleton/protocols/bugfix/prompts/pr.md +1 -1
  285. package/skeleton/protocols/experiment/protocol.md +1 -6
  286. package/skeleton/protocols/maintain/builder-prompt.md +12 -11
  287. package/skeleton/protocols/maintain/prompts/maintain.md +88 -0
  288. package/skeleton/protocols/maintain/prompts/review.md +72 -0
  289. package/skeleton/protocols/maintain/protocol.json +14 -68
  290. package/skeleton/protocols/maintain/protocol.md +111 -409
  291. package/skeleton/protocols/maintain/templates/maintenance-run.md +18 -49
  292. package/skeleton/protocols/protocol-schema.json +1 -1
  293. package/skeleton/protocols/spike/builder-prompt.md +1 -1
  294. package/skeleton/protocols/spike/protocol.md +4 -4
  295. package/skeleton/protocols/spir/builder-prompt.md +28 -5
  296. package/skeleton/protocols/spir/protocol.json +9 -1
  297. package/skeleton/protocols/spir/protocol.md +2 -2
  298. package/skeleton/protocols/spir/templates/plan.md +0 -20
  299. package/skeleton/protocols/spir/templates/spec.md +0 -28
  300. package/skeleton/resources/commands/agent-farm.md +84 -84
  301. package/skeleton/resources/commands/codev.md +1 -1
  302. package/skeleton/resources/commands/consult.md +16 -7
  303. package/skeleton/resources/commands/overview.md +14 -15
  304. package/skeleton/resources/risk-triage.md +1 -1
  305. package/skeleton/resources/workflow-reference.md +14 -14
  306. package/skeleton/roles/architect.md +55 -43
  307. package/skeleton/roles/builder.md +22 -14
  308. package/skeleton/templates/AGENTS.md +4 -3
  309. package/skeleton/templates/CLAUDE.md +4 -3
  310. package/skeleton/templates/cheatsheet.md +11 -12
  311. package/templates/3d-viewer.html +16 -18
  312. package/templates/tower.html +1 -1
  313. package/dashboard/dist/assets/index-CiIBsixF.js +0 -194
  314. package/dashboard/dist/assets/index-CiIBsixF.js.map +0 -1
  315. package/skeleton/.claude/skills/af/SKILL.md +0 -146
  316. package/skeleton/porch/prompts/understand.md +0 -61
  317. package/skeleton/porch/prompts/verify.md +0 -58
  318. package/skeleton/protocols/maintain/prompts/audit.md +0 -111
  319. package/skeleton/protocols/maintain/prompts/clean.md +0 -91
  320. package/skeleton/protocols/maintain/prompts/sync.md +0 -113
  321. package/skeleton/protocols/maintain/prompts/verify.md +0 -110
  322. package/skeleton/protocols/tick/builder-prompt.md +0 -65
  323. package/skeleton/protocols/tick/consult-types/impl-review.md +0 -72
  324. package/skeleton/protocols/tick/consult-types/plan-review.md +0 -59
  325. package/skeleton/protocols/tick/consult-types/pr-review.md +0 -72
  326. package/skeleton/protocols/tick/consult-types/spec-review.md +0 -55
  327. package/skeleton/protocols/tick/protocol.json +0 -151
  328. package/skeleton/protocols/tick/protocol.md +0 -277
  329. package/skeleton/protocols/tick/templates/plan.md +0 -67
  330. package/skeleton/protocols/tick/templates/review.md +0 -89
  331. package/skeleton/protocols/tick/templates/spec.md +0 -61
@@ -7,11 +7,15 @@
7
7
  * and terminal session creation via the Tower REST API.
8
8
  */
9
9
  import { resolve } from 'node:path';
10
- import { existsSync, writeFileSync, chmodSync, symlinkSync, readdirSync } from 'node:fs';
10
+ import { execSync } from 'node:child_process';
11
+ import { existsSync, readFileSync, writeFileSync, chmodSync, symlinkSync, readdirSync, mkdirSync } from 'node:fs';
11
12
  import { logger, fatal } from '../utils/logger.js';
13
+ import { getBuilderHarness } from '../utils/config.js';
14
+ import { shellEscapeSingleQuote } from '../utils/harness.js';
12
15
  import { defaultSessionOptions } from '../../terminal/index.js';
13
16
  import { run, commandExists } from '../utils/shell.js';
14
- import { fetchGitHubIssueOrThrow } from '../../lib/github.js';
17
+ import { fetchIssueOrThrow } from '../../lib/github.js';
18
+ import { executeForgeCommand } from '../../lib/forge.js';
15
19
  import { getTowerClient, DEFAULT_TOWER_PORT } from '../lib/tower-client.js';
16
20
  // =============================================================================
17
21
  // Dependency Checks
@@ -27,6 +31,42 @@ export async function checkDependencies() {
27
31
  // =============================================================================
28
32
  // Git Worktree Management
29
33
  // =============================================================================
34
+ /**
35
+ * Symlink config files from workspace root into a worktree (if they exist).
36
+ * Shared by createWorktree() and createWorktreeFromBranch().
37
+ */
38
+ export function symlinkConfigFiles(config, worktreePath) {
39
+ // Symlink .env at root level
40
+ const envRoot = resolve(config.workspaceRoot, '.env');
41
+ const envWorktree = resolve(worktreePath, '.env');
42
+ if (existsSync(envRoot) && !existsSync(envWorktree)) {
43
+ try {
44
+ symlinkSync(envRoot, envWorktree);
45
+ logger.info(`Linked .env from workspace root`);
46
+ }
47
+ catch (error) {
48
+ logger.debug(`Failed to symlink .env: ${error}`);
49
+ }
50
+ }
51
+ // Symlink .codev/config.json
52
+ const configRoot = resolve(config.workspaceRoot, '.codev', 'config.json');
53
+ if (existsSync(configRoot)) {
54
+ const codevDir = resolve(worktreePath, '.codev');
55
+ if (!existsSync(codevDir)) {
56
+ mkdirSync(codevDir, { recursive: true });
57
+ }
58
+ const configWorktree = resolve(codevDir, 'config.json');
59
+ if (!existsSync(configWorktree)) {
60
+ try {
61
+ symlinkSync(configRoot, configWorktree);
62
+ logger.info(`Linked .codev/config.json from workspace root`);
63
+ }
64
+ catch (error) {
65
+ logger.debug(`Failed to symlink .codev/config.json: ${error}`);
66
+ }
67
+ }
68
+ }
69
+ }
30
70
  /**
31
71
  * Create git branch and worktree
32
72
  */
@@ -46,18 +86,209 @@ export async function createWorktree(config, branchName, worktreePath) {
46
86
  catch (error) {
47
87
  fatal(`Failed to create worktree: ${error}`);
48
88
  }
49
- // Symlink .env from workspace root into worktree (if it exists)
50
- const rootEnvPath = resolve(config.workspaceRoot, '.env');
51
- const worktreeEnvPath = resolve(worktreePath, '.env');
52
- if (existsSync(rootEnvPath) && !existsSync(worktreeEnvPath)) {
89
+ symlinkConfigFiles(config, worktreePath);
90
+ }
91
+ /**
92
+ * Validate a branch name for safe use in shell commands.
93
+ * Only allows valid git branch name characters: alphanumeric, dots, hyphens, underscores, slashes.
94
+ * Rejects anything that could be used for shell injection.
95
+ */
96
+ const SAFE_BRANCH_REGEX = /^[a-zA-Z0-9._\/-]+$/;
97
+ export function validateBranchName(name) {
98
+ if (!name || name.length === 0) {
99
+ fatal('--branch requires a branch name');
100
+ }
101
+ if (!SAFE_BRANCH_REGEX.test(name)) {
102
+ fatal(`Invalid branch name: "${name}". Branch names may only contain alphanumeric characters, dots, hyphens, underscores, and slashes.`);
103
+ }
104
+ }
105
+ /**
106
+ * Validate a remote name for safe use in shell commands.
107
+ * Same character restrictions as branch names.
108
+ */
109
+ export function validateRemoteName(name) {
110
+ if (!name || name.length === 0) {
111
+ fatal('--remote requires a remote name');
112
+ }
113
+ if (!SAFE_BRANCH_REGEX.test(name)) {
114
+ fatal(`Invalid remote name: "${name}". Remote names may only contain alphanumeric characters, dots, hyphens, underscores, and slashes.`);
115
+ }
116
+ }
117
+ /**
118
+ * Detect if a branch belongs to a fork PR by querying GitHub.
119
+ * Uses `gh pr list --head <branch>` to find open PRs with this branch name.
120
+ * If a cross-repository (fork) PR is found, returns the fork owner and repo URL.
121
+ * Returns null if no fork PR is found or `gh` is unavailable.
122
+ */
123
+ export async function detectForkRemote(config, branch) {
124
+ // Fetch PR data — network/parse errors return null (graceful degradation)
125
+ let prs;
126
+ try {
127
+ const { stdout } = await run(`gh pr list --head "${branch}" --json number,headRepositoryOwner,headRepository,isCrossRepository --state open`, { cwd: config.workspaceRoot });
128
+ const trimmed = stdout.trim();
129
+ if (!trimmed)
130
+ return null;
131
+ prs = JSON.parse(trimmed);
132
+ if (!Array.isArray(prs) || prs.length === 0)
133
+ return null;
134
+ }
135
+ catch {
136
+ return null;
137
+ }
138
+ // Validation is outside try/catch so fatal() propagates
139
+ const forkPrs = prs.filter((pr) => pr.isCrossRepository);
140
+ if (forkPrs.length === 0)
141
+ return null;
142
+ // Ambiguity check: if multiple forks have the same branch name, require --remote
143
+ if (forkPrs.length > 1) {
144
+ const owners = forkPrs.map((pr) => pr.headRepositoryOwner?.login).filter(Boolean);
145
+ fatal(`Multiple fork PRs found for branch '${branch}' from: ${owners.join(', ')}.\n` +
146
+ `Use --remote <name> to specify which fork to use.`);
147
+ }
148
+ const forkPr = forkPrs[0];
149
+ const owner = forkPr.headRepositoryOwner?.login;
150
+ const repo = forkPr.headRepository?.name;
151
+ if (!owner || !repo)
152
+ return null;
153
+ return {
154
+ owner,
155
+ url: `https://github.com/${owner}/${repo}.git`,
156
+ };
157
+ }
158
+ /**
159
+ * Ensure a git remote exists with the given name and URL.
160
+ * Adds the remote if it doesn't exist. If it exists but points to a
161
+ * different URL, fatals with a clear message to avoid silent misrouting.
162
+ */
163
+ async function ensureRemote(config, name, url) {
164
+ let existingUrl = null;
165
+ try {
166
+ const { stdout } = await run(`git remote get-url "${name}"`, { cwd: config.workspaceRoot });
167
+ existingUrl = stdout.trim();
168
+ }
169
+ catch {
170
+ // Remote doesn't exist — add it
171
+ logger.info(`Adding remote '${name}' → ${url}`);
172
+ await run(`git remote add "${name}" "${url}"`, { cwd: config.workspaceRoot });
173
+ return;
174
+ }
175
+ // Remote exists — verify URL matches (outside try/catch so fatal propagates)
176
+ if (existingUrl !== url) {
177
+ fatal(`Remote '${name}' already exists but points to '${existingUrl}' (expected '${url}').\n` +
178
+ `Remove or update the remote, or use --remote with the correct remote name.`);
179
+ }
180
+ logger.debug(`Remote '${name}' already configured`);
181
+ }
182
+ /**
183
+ * Create a worktree from an existing remote branch (Spec 609).
184
+ * Fetches the branch from the specified remote (or origin by default),
185
+ * checks it's not already checked out, and creates a worktree on it.
186
+ *
187
+ * When the branch doesn't exist on origin and no explicit remote is given,
188
+ * auto-detects fork PRs via `gh pr list` and fetches from the fork remote.
189
+ */
190
+ export async function createWorktreeFromBranch(config, branch, worktreePath, options) {
191
+ validateBranchName(branch);
192
+ if (options?.remote)
193
+ validateRemoteName(options.remote);
194
+ const explicitRemote = options?.remote;
195
+ let remote = explicitRemote || 'origin';
196
+ // Fetch latest from remote
197
+ logger.info(`Fetching from remote '${remote}'...`);
198
+ try {
199
+ await run(`git fetch "${remote}"`, { cwd: config.workspaceRoot });
200
+ }
201
+ catch (error) {
202
+ fatal(`Failed to fetch from remote '${remote}': ${error}`);
203
+ }
204
+ // Verify branch exists on the remote
205
+ let branchExists = false;
206
+ try {
207
+ const { stdout } = await run(`git ls-remote --heads "${remote}" "${branch}"`, { cwd: config.workspaceRoot });
208
+ branchExists = !!stdout.trim();
209
+ }
210
+ catch (error) {
211
+ fatal(`Failed to check remote branch: ${error}`);
212
+ }
213
+ // If branch not found and no explicit remote was given, try fork detection
214
+ if (!branchExists && !explicitRemote) {
215
+ logger.info(`Branch '${branch}' not found on origin. Checking for fork PRs...`);
216
+ const fork = await detectForkRemote(config, branch);
217
+ if (fork) {
218
+ validateRemoteName(fork.owner);
219
+ logger.info(`Found fork PR from '${fork.owner}'. Fetching from fork...`);
220
+ await ensureRemote(config, fork.owner, fork.url);
221
+ remote = fork.owner;
222
+ try {
223
+ await run(`git fetch "${remote}" "${branch}"`, { cwd: config.workspaceRoot });
224
+ }
225
+ catch (error) {
226
+ fatal(`Failed to fetch branch '${branch}' from fork remote '${remote}': ${error}`);
227
+ }
228
+ // Re-verify after fetching from fork
229
+ try {
230
+ const { stdout } = await run(`git ls-remote --heads "${remote}" "${branch}"`, { cwd: config.workspaceRoot });
231
+ branchExists = !!stdout.trim();
232
+ }
233
+ catch {
234
+ // Fall through to error below
235
+ }
236
+ }
237
+ }
238
+ if (!branchExists) {
239
+ if (explicitRemote) {
240
+ fatal(`Branch '${branch}' does not exist on remote '${explicitRemote}'. Check the branch name and try again.`);
241
+ }
242
+ else {
243
+ fatal(`Branch '${branch}' does not exist on the remote. Check the branch name and try again.\n` +
244
+ `If this branch is from a fork, use --remote <name> to specify the fork remote.`);
245
+ }
246
+ }
247
+ // Pre-check: is the branch already checked out in another worktree?
248
+ let alreadyCheckedOutAt = null;
249
+ try {
250
+ const { stdout } = await run('git worktree list --porcelain', { cwd: config.workspaceRoot });
251
+ const lines = stdout.split('\n');
252
+ for (const line of lines) {
253
+ if (line.startsWith('branch refs/heads/') && line === `branch refs/heads/${branch}`) {
254
+ // Find the worktree path for this branch (it's the preceding 'worktree' line)
255
+ const idx = lines.indexOf(line);
256
+ let wtPath = '(unknown)';
257
+ for (let i = idx - 1; i >= 0; i--) {
258
+ if (lines[i].startsWith('worktree ')) {
259
+ wtPath = lines[i].replace('worktree ', '');
260
+ break;
261
+ }
262
+ }
263
+ alreadyCheckedOutAt = wtPath;
264
+ break;
265
+ }
266
+ }
267
+ }
268
+ catch (error) {
269
+ // Non-fatal — git worktree list failing shouldn't block spawn
270
+ logger.debug(`Worktree list check: ${error}`);
271
+ }
272
+ if (alreadyCheckedOutAt) {
273
+ fatal(`Branch '${branch}' is already checked out at '${alreadyCheckedOutAt}'.\n` +
274
+ `Switch that checkout to a different branch first, or use 'afx cleanup' to remove the worktree.`);
275
+ }
276
+ // Create worktree with the existing branch.
277
+ // Try creating a local tracking branch first; if it already exists, use it directly.
278
+ logger.info(`Creating worktree on branch '${branch}'...`);
279
+ try {
280
+ await run(`git worktree add "${worktreePath}" -b "${branch}" "${remote}/${branch}"`, { cwd: config.workspaceRoot });
281
+ }
282
+ catch {
283
+ // Local branch may already exist — try using it directly
53
284
  try {
54
- symlinkSync(rootEnvPath, worktreeEnvPath);
55
- logger.info('Linked .env from workspace root');
285
+ await run(`git worktree add "${worktreePath}" "${branch}"`, { cwd: config.workspaceRoot });
56
286
  }
57
287
  catch (error) {
58
- logger.debug(`Failed to symlink .env: ${error}`);
288
+ fatal(`Failed to create worktree on branch '${branch}': ${error}`);
59
289
  }
60
290
  }
291
+ symlinkConfigFiles(config, worktreePath);
61
292
  }
62
293
  /**
63
294
  * Pre-initialize porch in a worktree so the builder doesn't need to self-correct.
@@ -106,15 +337,18 @@ export function findExistingBugfixWorktree(buildersDir, issueNumber) {
106
337
  }
107
338
  }
108
339
  /**
109
- * Fetch a GitHub issue via gh CLI (fatal on failure).
340
+ * Fetch a GitHub issue via the `issue-view` concept command (fatal on failure).
110
341
  * Delegates to shared github utility but wraps with fatal() for spawn context.
111
342
  */
112
- export async function fetchGitHubIssue(issueNumber) {
343
+ export async function fetchGitHubIssue(issueNumber, options) {
113
344
  try {
114
- return await fetchGitHubIssueOrThrow(issueNumber);
345
+ return await fetchIssueOrThrow(issueNumber, options);
115
346
  }
116
347
  catch (error) {
117
- fatal(`Failed to fetch issue #${issueNumber}. Ensure 'gh' CLI is installed and authenticated.`);
348
+ fatal(`Failed to fetch issue #${issueNumber}. ` +
349
+ `Ensure the 'issue-view' forge concept command is configured ` +
350
+ `(default: 'gh' CLI must be installed and authenticated). ` +
351
+ `Configure forge commands in .codev/config.json if using a non-GitHub forge.`);
118
352
  throw error; // TypeScript doesn't know fatal() never returns
119
353
  }
120
354
  }
@@ -122,43 +356,49 @@ export async function fetchGitHubIssue(issueNumber) {
122
356
  // Bugfix Collision Detection
123
357
  // =============================================================================
124
358
  /**
125
- * Check for collision conditions before spawning bugfix
359
+ * Check for collision conditions before spawning bugfix.
360
+ * Uses forge concept commands for PR search (graceful degradation if unavailable).
126
361
  */
127
- export async function checkBugfixCollisions(issueNumber, worktreePath, issue, force) {
362
+ export async function checkBugfixCollisions(issueNumber, worktreePath, issue, force, forgeConfig) {
128
363
  // 1. Check if worktree already exists
129
364
  if (existsSync(worktreePath)) {
130
- fatal(`Worktree already exists at ${worktreePath}\nRun: af cleanup --issue ${issueNumber}`);
365
+ fatal(`Worktree already exists at ${worktreePath}\nRun: afx cleanup --issue ${issueNumber}`);
131
366
  }
132
367
  // 2. Check for recent "On it" comments (< 24h old)
133
- const onItComments = issue.comments.filter((c) => c.body.toLowerCase().includes('on it'));
134
- if (onItComments.length > 0) {
135
- const lastComment = onItComments[onItComments.length - 1];
136
- const age = Date.now() - new Date(lastComment.createdAt).getTime();
137
- const hoursAgo = Math.round(age / (1000 * 60 * 60));
138
- if (hoursAgo < 24) {
139
- if (!force) {
140
- fatal(`Issue #${issueNumber} has "On it" comment from ${hoursAgo}h ago (by @${lastComment.author.login}).\nSomeone may already be working on this. Use --force to override.`);
368
+ // Depends on issue-view returning comments array; if missing, skip gracefully
369
+ if (issue.comments) {
370
+ const onItComments = issue.comments.filter((c) => c.body.toLowerCase().includes('on it'));
371
+ if (onItComments.length > 0) {
372
+ const lastComment = onItComments[onItComments.length - 1];
373
+ const age = Date.now() - new Date(lastComment.createdAt).getTime();
374
+ const hoursAgo = Math.round(age / (1000 * 60 * 60));
375
+ if (hoursAgo < 24) {
376
+ if (!force) {
377
+ fatal(`Issue #${issueNumber} has "On it" comment from ${hoursAgo}h ago (by @${lastComment.author.login}).\nSomeone may already be working on this. Use --force to override.`);
378
+ }
379
+ logger.warn(`Warning: "On it" comment from ${hoursAgo}h ago - proceeding with --force`);
380
+ }
381
+ else {
382
+ logger.warn(`Warning: Stale "On it" comment (${hoursAgo}h ago). Proceeding.`);
141
383
  }
142
- logger.warn(`Warning: "On it" comment from ${hoursAgo}h ago - proceeding with --force`);
143
- }
144
- else {
145
- logger.warn(`Warning: Stale "On it" comment (${hoursAgo}h ago). Proceeding.`);
146
384
  }
147
385
  }
148
- // 3. Check for open PRs referencing this issue
386
+ // 3. Check for open PRs referencing this issue via pr-search concept
149
387
  try {
150
- const prResult = await run(`gh pr list --search "in:body #${issueNumber}" --json number,title --limit 5`);
151
- const openPRs = JSON.parse(prResult.stdout);
152
- if (openPRs.length > 0) {
388
+ const result = await executeForgeCommand('pr-search', {
389
+ CODEV_SEARCH_QUERY: `in:body #${issueNumber}`,
390
+ }, { forgeConfig });
391
+ if (result && Array.isArray(result) && result.length > 0) {
392
+ const openPRs = result;
153
393
  if (!force) {
154
- const prList = openPRs.map((pr) => ` - PR #${pr.number}: ${pr.title}`).join('\n');
394
+ const prList = openPRs.slice(0, 5).map((pr) => ` - PR #${pr.number}${pr.title ? `: ${pr.title}` : ''}`).join('\n');
155
395
  fatal(`Found ${openPRs.length} open PR(s) referencing issue #${issueNumber}:\n${prList}\nUse --force to proceed anyway.`);
156
396
  }
157
397
  logger.warn(`Warning: Found ${openPRs.length} open PR(s) referencing issue - proceeding with --force`);
158
398
  }
159
399
  }
160
400
  catch {
161
- // Non-fatal: continue if PR check fails
401
+ // Non-fatal: continue if PR search concept unavailable
162
402
  }
163
403
  // 4. Warn if issue is already closed
164
404
  if (issue.state === 'CLOSED') {
@@ -169,8 +409,9 @@ export async function checkBugfixCollisions(issueNumber, worktreePath, issue, fo
169
409
  // Pre-Spawn Hooks
170
410
  // =============================================================================
171
411
  /**
172
- * Execute pre-spawn hooks defined in protocol.json
173
- * Hooks are data-driven but reuse existing implementation logic
412
+ * Execute pre-spawn hooks defined in protocol.json.
413
+ * Hooks are data-driven but reuse existing implementation logic.
414
+ * Uses forge concept commands for collision detection and issue commenting.
174
415
  */
175
416
  export async function executePreSpawnHooks(protocol, context) {
176
417
  if (!protocol?.hooks?.['pre-spawn'])
@@ -178,14 +419,17 @@ export async function executePreSpawnHooks(protocol, context) {
178
419
  const hooks = protocol.hooks['pre-spawn'];
179
420
  // collision-check: reuses existing checkBugfixCollisions() logic
180
421
  if (hooks['collision-check'] && context.issueNumber && context.issue && context.worktreePath) {
181
- await checkBugfixCollisions(context.issueNumber, context.worktreePath, context.issue, !!context.force);
422
+ await checkBugfixCollisions(context.issueNumber, context.worktreePath, context.issue, !!context.force, context.forgeConfig);
182
423
  }
183
- // comment-on-issue: posts comment to GitHub issue
424
+ // comment-on-issue: posts comment via issue-comment concept command
184
425
  if (hooks['comment-on-issue'] && context.issueNumber && !context.noComment) {
185
426
  const message = hooks['comment-on-issue'];
186
427
  logger.info('Commenting on issue...');
187
428
  try {
188
- await run(`gh issue comment ${context.issueNumber} --body "${message}"`);
429
+ await executeForgeCommand('issue-comment', {
430
+ CODEV_ISSUE_ID: String(context.issueNumber),
431
+ CODEV_COMMENT_BODY: message,
432
+ }, { forgeConfig: context.forgeConfig, raw: true });
189
433
  }
190
434
  catch {
191
435
  logger.warn('Warning: Failed to comment on issue (continuing anyway)');
@@ -229,6 +473,48 @@ export async function createPtySession(config, command, args, cwd, registration)
229
473
  }
230
474
  return { terminalId: terminal.id };
231
475
  }
476
+ /**
477
+ * Write harness-provided files to the worktree, merging with existing JSON files.
478
+ * For JSON files: reads existing file, shallow-merges properties, and deduplicates
479
+ * the 'instructions' array. If existing JSON can't be parsed (e.g., JSONC with
480
+ * comments), warns and skips to avoid destroying user config.
481
+ * After writing, marks files with git skip-worktree to prevent accidental commits.
482
+ */
483
+ function writeWorktreeFiles(files, worktreePath) {
484
+ for (const file of files) {
485
+ const targetPath = resolve(worktreePath, file.relativePath);
486
+ if (file.relativePath.endsWith('.json') && existsSync(targetPath)) {
487
+ try {
488
+ const existing = JSON.parse(readFileSync(targetPath, 'utf-8'));
489
+ const incoming = JSON.parse(file.content);
490
+ const merged = { ...existing, ...incoming };
491
+ if (Array.isArray(existing.instructions) && Array.isArray(incoming.instructions)) {
492
+ merged.instructions = [...new Set([...existing.instructions, ...incoming.instructions])];
493
+ }
494
+ writeFileSync(targetPath, JSON.stringify(merged, null, 2) + '\n');
495
+ }
496
+ catch {
497
+ // Existing file is not valid JSON (likely JSONC with comments/trailing commas).
498
+ // Do NOT overwrite — that would destroy user config. Warn and skip.
499
+ logger.warn(`Cannot merge ${file.relativePath}: existing file is not valid JSON. Skipping to preserve user config.`);
500
+ continue;
501
+ }
502
+ }
503
+ else {
504
+ writeFileSync(targetPath, file.content);
505
+ }
506
+ // Prevent generated files from being accidentally committed back to the repo
507
+ try {
508
+ execSync(`git update-index --skip-worktree "${file.relativePath}"`, {
509
+ cwd: worktreePath,
510
+ stdio: 'pipe',
511
+ });
512
+ }
513
+ catch {
514
+ // Non-fatal: file may not be tracked by git yet (new file in worktree)
515
+ }
516
+ }
517
+ }
232
518
  /**
233
519
  * Start a terminal session for a builder
234
520
  */
@@ -241,18 +527,29 @@ export async function startBuilderSession(config, builderId, worktreePath, baseC
241
527
  const scriptPath = resolve(worktreePath, '.builder-start.sh');
242
528
  let scriptContent;
243
529
  if (roleContent) {
244
- // Write role to a file and use $(cat) to avoid shell escaping issues
530
+ // Write role to a file for harness-based injection
245
531
  const roleFile = resolve(worktreePath, '.builder-role.md');
246
532
  // Inject the actual dashboard port into the role prompt
247
533
  const roleWithPort = roleContent.replace(/\{PORT\}/g, String(DEFAULT_TOWER_PORT));
248
534
  writeFileSync(roleFile, roleWithPort);
249
535
  logger.info(`Loaded role (${roleSource})`);
536
+ // Resolve harness provider for role injection
537
+ const harness = getBuilderHarness(config.workspaceRoot);
538
+ const { fragment, env } = harness.buildScriptRoleInjection(roleWithPort, roleFile);
539
+ const envExports = Object.entries(env)
540
+ .map(([k, v]) => `export ${k}='${shellEscapeSingleQuote(v)}'`)
541
+ .join('\n');
542
+ const envBlock = envExports ? `${envExports}\n` : '';
543
+ // Write any harness-specific worktree files (e.g., opencode.json for OpenCode)
544
+ if (harness.getWorktreeFiles) {
545
+ writeWorktreeFiles(harness.getWorktreeFiles(roleWithPort, roleFile), worktreePath);
546
+ }
250
547
  scriptContent = `#!/bin/bash
251
548
  cd "${worktreePath}"
252
- while true; do
253
- ${baseCmd} --append-system-prompt "$(cat '${roleFile}')" "$(cat '${promptFile}')"
549
+ ${envBlock}while true; do
550
+ ${baseCmd} ${fragment} "$(cat '${promptFile}')"
254
551
  echo ""
255
- echo "Claude exited. Restarting in 2 seconds... (Ctrl+C to quit)"
552
+ echo "Agent exited. Restarting in 2 seconds... (Ctrl+C to quit)"
256
553
  sleep 2
257
554
  done
258
555
  `;
@@ -263,7 +560,7 @@ cd "${worktreePath}"
263
560
  while true; do
264
561
  ${baseCmd} "$(cat '${promptFile}')"
265
562
  echo ""
266
- echo "Claude exited. Restarting in 2 seconds... (Ctrl+C to quit)"
563
+ echo "Agent exited. Restarting in 2 seconds... (Ctrl+C to quit)"
267
564
  sleep 2
268
565
  done
269
566
  `;
@@ -289,18 +586,29 @@ export async function startShellSession(config, shellId, baseCmd) {
289
586
  /**
290
587
  * Build a launch script for worktree mode (no initial prompt)
291
588
  */
292
- export function buildWorktreeLaunchScript(worktreePath, baseCmd, role) {
589
+ export function buildWorktreeLaunchScript(worktreePath, baseCmd, role, workspaceRoot) {
293
590
  if (role) {
294
591
  const roleFile = resolve(worktreePath, '.builder-role.md');
295
592
  const roleWithPort = role.content.replace(/\{PORT\}/g, String(DEFAULT_TOWER_PORT));
296
593
  writeFileSync(roleFile, roleWithPort);
297
594
  logger.info(`Loaded role (${role.source})`);
595
+ // Resolve harness provider for role injection
596
+ const harness = getBuilderHarness(workspaceRoot);
597
+ const { fragment, env } = harness.buildScriptRoleInjection(roleWithPort, roleFile);
598
+ const envExports = Object.entries(env)
599
+ .map(([k, v]) => `export ${k}='${shellEscapeSingleQuote(v)}'`)
600
+ .join('\n');
601
+ const envBlock = envExports ? `${envExports}\n` : '';
602
+ // Write any harness-specific worktree files (e.g., opencode.json for OpenCode)
603
+ if (harness.getWorktreeFiles) {
604
+ writeWorktreeFiles(harness.getWorktreeFiles(roleWithPort, roleFile), worktreePath);
605
+ }
298
606
  return `#!/bin/bash
299
607
  cd "${worktreePath}"
300
- while true; do
301
- ${baseCmd} --append-system-prompt "$(cat '${roleFile}')"
608
+ ${envBlock}while true; do
609
+ ${baseCmd} ${fragment}
302
610
  echo ""
303
- echo "Claude exited. Restarting in 2 seconds... (Ctrl+C to quit)"
611
+ echo "Agent exited. Restarting in 2 seconds... (Ctrl+C to quit)"
304
612
  sleep 2
305
613
  done
306
614
  `;
@@ -310,7 +618,7 @@ cd "${worktreePath}"
310
618
  while true; do
311
619
  ${baseCmd}
312
620
  echo ""
313
- echo "Claude exited. Restarting in 2 seconds... (Ctrl+C to quit)"
621
+ echo "Agent exited. Restarting in 2 seconds... (Ctrl+C to quit)"
314
622
  sleep 2
315
623
  done
316
624
  `;
@@ -1 +1 @@
1
- {"version":3,"file":"spawn-worktree.js","sourceRoot":"","sources":["../../../src/agent-farm/commands/spawn-worktree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spawn-worktree.js","sourceRoot":"","sources":["../../../src/agent-farm/commands/spawn-worktree.ts"],"names":[],"mappings":"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"}
@@ -3,12 +3,12 @@
3
3
  * Spec 0126: Project Management Rework — Phase 2 (Spawn CLI Rework)
4
4
  *
5
5
  * Modes (protocol-driven for issue-based spawns):
6
- * - spec: af spawn 315 --protocol spir (feature)
7
- * - bugfix: af spawn 315 --protocol bugfix (bug fix)
8
- * - task: af spawn --task "..." (ad-hoc task)
9
- * - protocol: af spawn --protocol maintain (protocol-only run)
10
- * - shell: af spawn --shell (bare session)
11
- * - worktree: af spawn --worktree (worktree, no prompt)
6
+ * - spec: afx spawn 315 --protocol spir (feature)
7
+ * - bugfix: afx spawn 315 --protocol bugfix (bug fix)
8
+ * - task: afx spawn --task "..." (ad-hoc task)
9
+ * - protocol: afx spawn --protocol maintain (protocol-only run)
10
+ * - shell: afx spawn --shell (bare session)
11
+ * - worktree: afx spawn --worktree (worktree, no prompt)
12
12
  *
13
13
  * Role/prompt logic extracted to spawn-roles.ts.
14
14
  * Worktree/git logic extracted to spawn-worktree.ts.
@@ -1 +1 @@
1
- {"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/commands/spawn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAuB,MAAM,aAAa,CAAC;AAuqBrE;;GAEG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA+ChE"}
1
+ {"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/commands/spawn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAuB,MAAM,aAAa,CAAC;AAywBrE;;GAEG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA+ChE"}