@cluesmith/codev 2.0.0-rc.5 → 2.0.0-rc.50

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 (330) hide show
  1. package/bin/af.js +2 -2
  2. package/bin/consult.js +1 -1
  3. package/bin/porch.js +6 -35
  4. package/dashboard/dist/assets/index-BIHeqvy0.css +32 -0
  5. package/dashboard/dist/assets/index-VvUWRPNP.js +120 -0
  6. package/dashboard/dist/assets/index-VvUWRPNP.js.map +1 -0
  7. package/dashboard/dist/index.html +14 -0
  8. package/dist/agent-farm/cli.d.ts.map +1 -1
  9. package/dist/agent-farm/cli.js +93 -64
  10. package/dist/agent-farm/cli.js.map +1 -1
  11. package/dist/agent-farm/commands/architect.d.ts.map +1 -1
  12. package/dist/agent-farm/commands/architect.js +13 -6
  13. package/dist/agent-farm/commands/architect.js.map +1 -1
  14. package/dist/agent-farm/commands/attach.d.ts +13 -0
  15. package/dist/agent-farm/commands/attach.d.ts.map +1 -0
  16. package/dist/agent-farm/commands/attach.js +179 -0
  17. package/dist/agent-farm/commands/attach.js.map +1 -0
  18. package/dist/agent-farm/commands/cleanup.d.ts.map +1 -1
  19. package/dist/agent-farm/commands/cleanup.js +30 -3
  20. package/dist/agent-farm/commands/cleanup.js.map +1 -1
  21. package/dist/agent-farm/commands/consult.js +1 -1
  22. package/dist/agent-farm/commands/consult.js.map +1 -1
  23. package/dist/agent-farm/commands/index.d.ts +2 -2
  24. package/dist/agent-farm/commands/index.d.ts.map +1 -1
  25. package/dist/agent-farm/commands/index.js +2 -2
  26. package/dist/agent-farm/commands/index.js.map +1 -1
  27. package/dist/agent-farm/commands/{util.d.ts → shell.d.ts} +5 -5
  28. package/dist/agent-farm/commands/shell.d.ts.map +1 -0
  29. package/dist/agent-farm/commands/{util.js → shell.js} +23 -36
  30. package/dist/agent-farm/commands/shell.js.map +1 -0
  31. package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
  32. package/dist/agent-farm/commands/spawn.js +455 -217
  33. package/dist/agent-farm/commands/spawn.js.map +1 -1
  34. package/dist/agent-farm/commands/start.d.ts +3 -0
  35. package/dist/agent-farm/commands/start.d.ts.map +1 -1
  36. package/dist/agent-farm/commands/start.js +92 -79
  37. package/dist/agent-farm/commands/start.js.map +1 -1
  38. package/dist/agent-farm/commands/status.d.ts +2 -0
  39. package/dist/agent-farm/commands/status.d.ts.map +1 -1
  40. package/dist/agent-farm/commands/status.js +56 -1
  41. package/dist/agent-farm/commands/status.js.map +1 -1
  42. package/dist/agent-farm/commands/stop.d.ts +6 -0
  43. package/dist/agent-farm/commands/stop.d.ts.map +1 -1
  44. package/dist/agent-farm/commands/stop.js +115 -11
  45. package/dist/agent-farm/commands/stop.js.map +1 -1
  46. package/dist/agent-farm/commands/tower.d.ts +9 -0
  47. package/dist/agent-farm/commands/tower.d.ts.map +1 -1
  48. package/dist/agent-farm/commands/tower.js +59 -19
  49. package/dist/agent-farm/commands/tower.js.map +1 -1
  50. package/dist/agent-farm/db/index.d.ts.map +1 -1
  51. package/dist/agent-farm/db/index.js +59 -0
  52. package/dist/agent-farm/db/index.js.map +1 -1
  53. package/dist/agent-farm/db/schema.d.ts +2 -2
  54. package/dist/agent-farm/db/schema.d.ts.map +1 -1
  55. package/dist/agent-farm/db/schema.js +8 -3
  56. package/dist/agent-farm/db/schema.js.map +1 -1
  57. package/dist/agent-farm/db/types.d.ts +3 -0
  58. package/dist/agent-farm/db/types.d.ts.map +1 -1
  59. package/dist/agent-farm/db/types.js +3 -0
  60. package/dist/agent-farm/db/types.js.map +1 -1
  61. package/dist/agent-farm/hq-connector.d.ts +2 -2
  62. package/dist/agent-farm/hq-connector.js +2 -2
  63. package/dist/agent-farm/lib/tower-client.d.ts +157 -0
  64. package/dist/agent-farm/lib/tower-client.d.ts.map +1 -0
  65. package/dist/agent-farm/lib/tower-client.js +223 -0
  66. package/dist/agent-farm/lib/tower-client.js.map +1 -0
  67. package/dist/agent-farm/servers/tower-server.js +1152 -95
  68. package/dist/agent-farm/servers/tower-server.js.map +1 -1
  69. package/dist/agent-farm/state.d.ts +4 -10
  70. package/dist/agent-farm/state.d.ts.map +1 -1
  71. package/dist/agent-farm/state.js +30 -31
  72. package/dist/agent-farm/state.js.map +1 -1
  73. package/dist/agent-farm/types.d.ts +48 -0
  74. package/dist/agent-farm/types.d.ts.map +1 -1
  75. package/dist/agent-farm/utils/config.d.ts.map +1 -1
  76. package/dist/agent-farm/utils/config.js +12 -11
  77. package/dist/agent-farm/utils/config.js.map +1 -1
  78. package/dist/agent-farm/utils/deps.d.ts.map +1 -1
  79. package/dist/agent-farm/utils/deps.js +0 -16
  80. package/dist/agent-farm/utils/deps.js.map +1 -1
  81. package/dist/agent-farm/utils/notifications.d.ts +30 -0
  82. package/dist/agent-farm/utils/notifications.d.ts.map +1 -0
  83. package/dist/agent-farm/utils/notifications.js +121 -0
  84. package/dist/agent-farm/utils/notifications.js.map +1 -0
  85. package/dist/agent-farm/utils/server-utils.d.ts +2 -1
  86. package/dist/agent-farm/utils/server-utils.d.ts.map +1 -1
  87. package/dist/agent-farm/utils/server-utils.js +11 -1
  88. package/dist/agent-farm/utils/server-utils.js.map +1 -1
  89. package/dist/agent-farm/utils/shell.d.ts +9 -22
  90. package/dist/agent-farm/utils/shell.d.ts.map +1 -1
  91. package/dist/agent-farm/utils/shell.js +34 -34
  92. package/dist/agent-farm/utils/shell.js.map +1 -1
  93. package/dist/agent-farm/utils/terminal-ports.d.ts +1 -1
  94. package/dist/agent-farm/utils/terminal-ports.js +1 -1
  95. package/dist/cli.d.ts.map +1 -1
  96. package/dist/cli.js +5 -54
  97. package/dist/cli.js.map +1 -1
  98. package/dist/commands/adopt.d.ts.map +1 -1
  99. package/dist/commands/adopt.js +39 -4
  100. package/dist/commands/adopt.js.map +1 -1
  101. package/dist/commands/consult/index.d.ts.map +1 -1
  102. package/dist/commands/consult/index.js +63 -3
  103. package/dist/commands/consult/index.js.map +1 -1
  104. package/dist/commands/doctor.d.ts.map +1 -1
  105. package/dist/commands/doctor.js +0 -15
  106. package/dist/commands/doctor.js.map +1 -1
  107. package/dist/commands/init.d.ts.map +1 -1
  108. package/dist/commands/init.js +31 -2
  109. package/dist/commands/init.js.map +1 -1
  110. package/dist/commands/porch/build-counter.d.ts +5 -0
  111. package/dist/commands/porch/build-counter.d.ts.map +1 -0
  112. package/dist/commands/porch/build-counter.js +5 -0
  113. package/dist/commands/porch/build-counter.js.map +1 -0
  114. package/dist/commands/porch/checks.d.ts +16 -29
  115. package/dist/commands/porch/checks.d.ts.map +1 -1
  116. package/dist/commands/porch/checks.js +90 -144
  117. package/dist/commands/porch/checks.js.map +1 -1
  118. package/dist/commands/porch/claude.d.ts +27 -0
  119. package/dist/commands/porch/claude.d.ts.map +1 -0
  120. package/dist/commands/porch/claude.js +107 -0
  121. package/dist/commands/porch/claude.js.map +1 -0
  122. package/dist/commands/porch/index.d.ts +21 -43
  123. package/dist/commands/porch/index.d.ts.map +1 -1
  124. package/dist/commands/porch/index.js +456 -1015
  125. package/dist/commands/porch/index.js.map +1 -1
  126. package/dist/commands/porch/plan.d.ts +70 -0
  127. package/dist/commands/porch/plan.d.ts.map +1 -0
  128. package/dist/commands/porch/plan.js +190 -0
  129. package/dist/commands/porch/plan.js.map +1 -0
  130. package/dist/commands/porch/prompts.d.ts +19 -0
  131. package/dist/commands/porch/prompts.d.ts.map +1 -0
  132. package/dist/commands/porch/prompts.js +250 -0
  133. package/dist/commands/porch/prompts.js.map +1 -0
  134. package/dist/commands/porch/protocol.d.ts +59 -0
  135. package/dist/commands/porch/protocol.d.ts.map +1 -0
  136. package/dist/commands/porch/protocol.js +260 -0
  137. package/dist/commands/porch/protocol.js.map +1 -0
  138. package/dist/commands/porch/run.d.ts +40 -0
  139. package/dist/commands/porch/run.d.ts.map +1 -0
  140. package/dist/commands/porch/run.js +893 -0
  141. package/dist/commands/porch/run.js.map +1 -0
  142. package/dist/commands/porch/state.d.ts +23 -112
  143. package/dist/commands/porch/state.d.ts.map +1 -1
  144. package/dist/commands/porch/state.js +81 -699
  145. package/dist/commands/porch/state.js.map +1 -1
  146. package/dist/commands/porch/types.d.ts +72 -173
  147. package/dist/commands/porch/types.d.ts.map +1 -1
  148. package/dist/commands/porch/types.js +2 -1
  149. package/dist/commands/porch/types.js.map +1 -1
  150. package/dist/commands/update.d.ts.map +1 -1
  151. package/dist/commands/update.js +22 -0
  152. package/dist/commands/update.js.map +1 -1
  153. package/dist/lib/scaffold.d.ts +24 -0
  154. package/dist/lib/scaffold.d.ts.map +1 -1
  155. package/dist/lib/scaffold.js +78 -0
  156. package/dist/lib/scaffold.js.map +1 -1
  157. package/dist/terminal/index.d.ts +8 -0
  158. package/dist/terminal/index.d.ts.map +1 -0
  159. package/dist/terminal/index.js +5 -0
  160. package/dist/terminal/index.js.map +1 -0
  161. package/dist/terminal/pty-manager.d.ts +60 -0
  162. package/dist/terminal/pty-manager.d.ts.map +1 -0
  163. package/dist/terminal/pty-manager.js +334 -0
  164. package/dist/terminal/pty-manager.js.map +1 -0
  165. package/dist/terminal/pty-session.d.ts +79 -0
  166. package/dist/terminal/pty-session.d.ts.map +1 -0
  167. package/dist/terminal/pty-session.js +215 -0
  168. package/dist/terminal/pty-session.js.map +1 -0
  169. package/dist/terminal/ring-buffer.d.ts +27 -0
  170. package/dist/terminal/ring-buffer.d.ts.map +1 -0
  171. package/dist/terminal/ring-buffer.js +74 -0
  172. package/dist/terminal/ring-buffer.js.map +1 -0
  173. package/dist/terminal/ws-protocol.d.ts +27 -0
  174. package/dist/terminal/ws-protocol.d.ts.map +1 -0
  175. package/dist/terminal/ws-protocol.js +44 -0
  176. package/dist/terminal/ws-protocol.js.map +1 -0
  177. package/package.json +18 -3
  178. package/skeleton/DEPENDENCIES.md +3 -29
  179. package/skeleton/builders.md +1 -1
  180. package/skeleton/protocol-schema.json +282 -0
  181. package/skeleton/protocols/bugfix/builder-prompt.md +49 -0
  182. package/skeleton/protocols/bugfix/protocol.json +14 -2
  183. package/skeleton/protocols/experiment/builder-prompt.md +47 -0
  184. package/skeleton/protocols/experiment/protocol.json +101 -0
  185. package/skeleton/protocols/maintain/builder-prompt.md +41 -0
  186. package/skeleton/protocols/maintain/prompts/audit.md +111 -0
  187. package/skeleton/protocols/maintain/prompts/clean.md +91 -0
  188. package/skeleton/protocols/maintain/prompts/sync.md +113 -0
  189. package/skeleton/protocols/maintain/prompts/verify.md +110 -0
  190. package/skeleton/protocols/maintain/protocol.json +141 -0
  191. package/skeleton/protocols/maintain/protocol.md +13 -7
  192. package/skeleton/protocols/protocol-schema.json +53 -0
  193. package/skeleton/protocols/spider/builder-prompt.md +53 -0
  194. package/skeleton/protocols/spider/prompts/implement.md +109 -50
  195. package/skeleton/protocols/spider/prompts/specify.md +29 -4
  196. package/skeleton/protocols/spider/protocol.json +96 -154
  197. package/skeleton/protocols/spider/protocol.md +26 -16
  198. package/skeleton/protocols/spider/templates/plan.md +14 -0
  199. package/skeleton/protocols/tick/builder-prompt.md +51 -0
  200. package/skeleton/protocols/tick/protocol.json +7 -2
  201. package/skeleton/resources/commands/agent-farm.md +25 -43
  202. package/skeleton/resources/commands/overview.md +6 -16
  203. package/skeleton/resources/workflow-reference.md +2 -2
  204. package/skeleton/roles/architect.md +152 -315
  205. package/skeleton/roles/builder.md +109 -218
  206. package/skeleton/templates/AGENTS.md +1 -1
  207. package/skeleton/templates/CLAUDE.md +1 -1
  208. package/skeleton/templates/cheatsheet.md +4 -2
  209. package/templates/dashboard/index.html +17 -43
  210. package/templates/dashboard/js/dialogs.js +7 -7
  211. package/templates/dashboard/js/files.js +2 -2
  212. package/templates/dashboard/js/main.js +3 -3
  213. package/templates/dashboard/js/projects.js +3 -3
  214. package/templates/dashboard/js/tabs.js +1 -1
  215. package/templates/dashboard/js/utils.js +22 -87
  216. package/templates/tower.html +542 -27
  217. package/dist/agent-farm/commands/kickoff.d.ts +0 -19
  218. package/dist/agent-farm/commands/kickoff.d.ts.map +0 -1
  219. package/dist/agent-farm/commands/kickoff.js +0 -331
  220. package/dist/agent-farm/commands/kickoff.js.map +0 -1
  221. package/dist/agent-farm/commands/rename.d.ts +0 -13
  222. package/dist/agent-farm/commands/rename.d.ts.map +0 -1
  223. package/dist/agent-farm/commands/rename.js +0 -33
  224. package/dist/agent-farm/commands/rename.js.map +0 -1
  225. package/dist/agent-farm/commands/tutorial.d.ts +0 -10
  226. package/dist/agent-farm/commands/tutorial.d.ts.map +0 -1
  227. package/dist/agent-farm/commands/tutorial.js +0 -49
  228. package/dist/agent-farm/commands/tutorial.js.map +0 -1
  229. package/dist/agent-farm/commands/util.d.ts.map +0 -1
  230. package/dist/agent-farm/commands/util.js.map +0 -1
  231. package/dist/agent-farm/servers/dashboard-server.d.ts +0 -7
  232. package/dist/agent-farm/servers/dashboard-server.d.ts.map +0 -1
  233. package/dist/agent-farm/servers/dashboard-server.js +0 -1872
  234. package/dist/agent-farm/servers/dashboard-server.js.map +0 -1
  235. package/dist/agent-farm/tutorial/index.d.ts +0 -8
  236. package/dist/agent-farm/tutorial/index.d.ts.map +0 -1
  237. package/dist/agent-farm/tutorial/index.js +0 -8
  238. package/dist/agent-farm/tutorial/index.js.map +0 -1
  239. package/dist/agent-farm/tutorial/prompts.d.ts +0 -57
  240. package/dist/agent-farm/tutorial/prompts.d.ts.map +0 -1
  241. package/dist/agent-farm/tutorial/prompts.js +0 -147
  242. package/dist/agent-farm/tutorial/prompts.js.map +0 -1
  243. package/dist/agent-farm/tutorial/runner.d.ts +0 -52
  244. package/dist/agent-farm/tutorial/runner.d.ts.map +0 -1
  245. package/dist/agent-farm/tutorial/runner.js +0 -204
  246. package/dist/agent-farm/tutorial/runner.js.map +0 -1
  247. package/dist/agent-farm/tutorial/state.d.ts +0 -26
  248. package/dist/agent-farm/tutorial/state.d.ts.map +0 -1
  249. package/dist/agent-farm/tutorial/state.js +0 -89
  250. package/dist/agent-farm/tutorial/state.js.map +0 -1
  251. package/dist/agent-farm/tutorial/steps/first-spec.d.ts +0 -7
  252. package/dist/agent-farm/tutorial/steps/first-spec.d.ts.map +0 -1
  253. package/dist/agent-farm/tutorial/steps/first-spec.js +0 -136
  254. package/dist/agent-farm/tutorial/steps/first-spec.js.map +0 -1
  255. package/dist/agent-farm/tutorial/steps/implementation.d.ts +0 -7
  256. package/dist/agent-farm/tutorial/steps/implementation.d.ts.map +0 -1
  257. package/dist/agent-farm/tutorial/steps/implementation.js +0 -76
  258. package/dist/agent-farm/tutorial/steps/implementation.js.map +0 -1
  259. package/dist/agent-farm/tutorial/steps/index.d.ts +0 -10
  260. package/dist/agent-farm/tutorial/steps/index.d.ts.map +0 -1
  261. package/dist/agent-farm/tutorial/steps/index.js +0 -10
  262. package/dist/agent-farm/tutorial/steps/index.js.map +0 -1
  263. package/dist/agent-farm/tutorial/steps/planning.d.ts +0 -7
  264. package/dist/agent-farm/tutorial/steps/planning.d.ts.map +0 -1
  265. package/dist/agent-farm/tutorial/steps/planning.js +0 -143
  266. package/dist/agent-farm/tutorial/steps/planning.js.map +0 -1
  267. package/dist/agent-farm/tutorial/steps/review.d.ts +0 -7
  268. package/dist/agent-farm/tutorial/steps/review.d.ts.map +0 -1
  269. package/dist/agent-farm/tutorial/steps/review.js +0 -78
  270. package/dist/agent-farm/tutorial/steps/review.js.map +0 -1
  271. package/dist/agent-farm/tutorial/steps/setup.d.ts +0 -7
  272. package/dist/agent-farm/tutorial/steps/setup.d.ts.map +0 -1
  273. package/dist/agent-farm/tutorial/steps/setup.js +0 -126
  274. package/dist/agent-farm/tutorial/steps/setup.js.map +0 -1
  275. package/dist/agent-farm/tutorial/steps/welcome.d.ts +0 -7
  276. package/dist/agent-farm/tutorial/steps/welcome.d.ts.map +0 -1
  277. package/dist/agent-farm/tutorial/steps/welcome.js +0 -50
  278. package/dist/agent-farm/tutorial/steps/welcome.js.map +0 -1
  279. package/dist/commands/pcheck/cache.d.ts +0 -48
  280. package/dist/commands/pcheck/cache.d.ts.map +0 -1
  281. package/dist/commands/pcheck/cache.js +0 -170
  282. package/dist/commands/pcheck/cache.js.map +0 -1
  283. package/dist/commands/pcheck/evaluator.d.ts +0 -15
  284. package/dist/commands/pcheck/evaluator.d.ts.map +0 -1
  285. package/dist/commands/pcheck/evaluator.js +0 -246
  286. package/dist/commands/pcheck/evaluator.js.map +0 -1
  287. package/dist/commands/pcheck/index.d.ts +0 -12
  288. package/dist/commands/pcheck/index.d.ts.map +0 -1
  289. package/dist/commands/pcheck/index.js +0 -249
  290. package/dist/commands/pcheck/index.js.map +0 -1
  291. package/dist/commands/pcheck/parser.d.ts +0 -39
  292. package/dist/commands/pcheck/parser.d.ts.map +0 -1
  293. package/dist/commands/pcheck/parser.js +0 -155
  294. package/dist/commands/pcheck/parser.js.map +0 -1
  295. package/dist/commands/pcheck/types.d.ts +0 -82
  296. package/dist/commands/pcheck/types.d.ts.map +0 -1
  297. package/dist/commands/pcheck/types.js +0 -5
  298. package/dist/commands/pcheck/types.js.map +0 -1
  299. package/dist/commands/porch/consultation.d.ts +0 -56
  300. package/dist/commands/porch/consultation.d.ts.map +0 -1
  301. package/dist/commands/porch/consultation.js +0 -330
  302. package/dist/commands/porch/consultation.js.map +0 -1
  303. package/dist/commands/porch/notifications.d.ts +0 -99
  304. package/dist/commands/porch/notifications.d.ts.map +0 -1
  305. package/dist/commands/porch/notifications.js +0 -223
  306. package/dist/commands/porch/notifications.js.map +0 -1
  307. package/dist/commands/porch/plan-parser.d.ts +0 -38
  308. package/dist/commands/porch/plan-parser.d.ts.map +0 -1
  309. package/dist/commands/porch/plan-parser.js +0 -166
  310. package/dist/commands/porch/plan-parser.js.map +0 -1
  311. package/dist/commands/porch/protocol-loader.d.ts +0 -46
  312. package/dist/commands/porch/protocol-loader.d.ts.map +0 -1
  313. package/dist/commands/porch/protocol-loader.js +0 -253
  314. package/dist/commands/porch/protocol-loader.js.map +0 -1
  315. package/dist/commands/porch/signal-parser.d.ts +0 -88
  316. package/dist/commands/porch/signal-parser.d.ts.map +0 -1
  317. package/dist/commands/porch/signal-parser.js +0 -148
  318. package/dist/commands/porch/signal-parser.js.map +0 -1
  319. package/dist/commands/tower.d.ts +0 -16
  320. package/dist/commands/tower.d.ts.map +0 -1
  321. package/dist/commands/tower.js +0 -21
  322. package/dist/commands/tower.js.map +0 -1
  323. package/skeleton/config.json +0 -7
  324. package/skeleton/porch/protocols/bugfix.json +0 -85
  325. package/skeleton/porch/protocols/spider.json +0 -135
  326. package/skeleton/porch/protocols/tick.json +0 -76
  327. package/skeleton/protocols/spider/prompts/defend.md +0 -215
  328. package/skeleton/protocols/spider/prompts/evaluate.md +0 -241
  329. package/templates/dashboard/css/activity.css +0 -151
  330. package/templates/dashboard/js/activity.js +0 -112
@@ -1,195 +1,141 @@
1
1
  /**
2
- * Defense Checks
2
+ * Porch Check Runner
3
3
  *
4
- * Runs build/test commands defined in protocol phases.
5
- * Supports retry logic and configurable failure behavior.
4
+ * Runs check commands (npm test, npm run build, etc.)
5
+ * with timeout support.
6
6
  */
7
7
  import { spawn } from 'node:child_process';
8
- import chalk from 'chalk';
8
+ /** Default timeout for checks: 5 minutes */
9
+ const DEFAULT_TIMEOUT_MS = 5 * 60 * 1000;
9
10
  /**
10
- * Run a single command with timeout
11
+ * Run a single check command
11
12
  */
12
- async function runCommand(command, options = {}) {
13
+ export async function runCheck(name, command, cwd, env, timeoutMs = DEFAULT_TIMEOUT_MS) {
13
14
  const startTime = Date.now();
14
- const timeout = options.timeout || 300000; // 5 minutes default
15
15
  return new Promise((resolve) => {
16
- const [cmd, ...args] = command.split(/\s+/);
17
- const proc = spawn(cmd, args, {
18
- cwd: options.cwd,
16
+ let stdout = '';
17
+ let stderr = '';
18
+ let killed = false;
19
+ // Parse command into executable and args
20
+ const parts = command.split(/\s+/);
21
+ const executable = parts[0];
22
+ const args = parts.slice(1);
23
+ const proc = spawn(executable, args, {
24
+ cwd,
19
25
  shell: true,
20
26
  stdio: ['ignore', 'pipe', 'pipe'],
27
+ env: {
28
+ ...process.env,
29
+ PROJECT_ID: env.PROJECT_ID,
30
+ PROJECT_TITLE: env.PROJECT_TITLE,
31
+ },
21
32
  });
22
- let output = '';
23
- let stderr = '';
24
- let timedOut = false;
25
- const timeoutId = setTimeout(() => {
26
- timedOut = true;
33
+ // Set up timeout
34
+ const timeout = setTimeout(() => {
35
+ killed = true;
27
36
  proc.kill('SIGTERM');
28
- }, timeout);
37
+ setTimeout(() => {
38
+ if (!proc.killed) {
39
+ proc.kill('SIGKILL');
40
+ }
41
+ }, 5000);
42
+ }, timeoutMs);
29
43
  proc.stdout.on('data', (data) => {
30
- output += data.toString();
44
+ stdout += data.toString();
31
45
  });
32
46
  proc.stderr.on('data', (data) => {
33
47
  stderr += data.toString();
34
48
  });
35
49
  proc.on('close', (code) => {
36
- clearTimeout(timeoutId);
50
+ clearTimeout(timeout);
37
51
  const duration = Date.now() - startTime;
38
- if (timedOut) {
52
+ if (killed) {
39
53
  resolve({
40
- success: false,
41
- output,
42
- error: `Command timed out after ${timeout}ms`,
43
- duration,
54
+ name,
55
+ command,
56
+ passed: false,
57
+ error: `Timed out after ${timeoutMs / 1000}s`,
58
+ duration_ms: duration,
59
+ });
60
+ }
61
+ else if (code === 0) {
62
+ resolve({
63
+ name,
64
+ command,
65
+ passed: true,
66
+ output: stdout.trim(),
67
+ duration_ms: duration,
44
68
  });
45
69
  }
46
70
  else {
47
71
  resolve({
48
- success: code === 0,
49
- output: output + stderr,
50
- error: code !== 0 ? `Exit code: ${code}` : undefined,
51
- duration,
72
+ name,
73
+ command,
74
+ passed: false,
75
+ output: stdout.trim(),
76
+ error: stderr.trim() || `Exit code ${code}`,
77
+ duration_ms: duration,
52
78
  });
53
79
  }
54
80
  });
55
81
  proc.on('error', (err) => {
56
- clearTimeout(timeoutId);
82
+ clearTimeout(timeout);
57
83
  resolve({
58
- success: false,
59
- output: '',
84
+ name,
85
+ command,
86
+ passed: false,
60
87
  error: err.message,
61
- duration: Date.now() - startTime,
88
+ duration_ms: Date.now() - startTime,
62
89
  });
63
90
  });
64
91
  });
65
92
  }
66
93
  /**
67
- * Run a check with retry logic
94
+ * Run multiple checks for a phase
68
95
  */
69
- async function runCheckWithRetry(name, check, options = {}) {
70
- const maxRetries = check.max_retries || 3;
71
- const retryDelay = check.retry_delay || 5; // seconds
72
- let attempts = 0;
73
- let lastResult = null;
74
- while (attempts < maxRetries) {
75
- attempts++;
76
- console.log(chalk.blue(`[check] Running ${name} (attempt ${attempts}/${maxRetries}): ${check.command}`));
77
- lastResult = await runCommand(check.command, options);
78
- if (lastResult.success) {
79
- console.log(chalk.green(`[check] ${name} passed (${lastResult.duration}ms)`));
80
- return {
81
- name,
82
- success: true,
83
- output: lastResult.output,
84
- attempts,
85
- duration: lastResult.duration,
86
- };
87
- }
88
- console.log(chalk.yellow(`[check] ${name} failed: ${lastResult.error}`));
89
- // Only retry if on_fail is 'retry'
90
- if (check.on_fail !== 'retry' || attempts >= maxRetries) {
96
+ export async function runPhaseChecks(checks, cwd, env, timeoutMs = DEFAULT_TIMEOUT_MS) {
97
+ const results = [];
98
+ for (const [name, command] of Object.entries(checks)) {
99
+ const result = await runCheck(name, command, cwd, env, timeoutMs);
100
+ results.push(result);
101
+ // Stop on first failure
102
+ if (!result.passed) {
91
103
  break;
92
104
  }
93
- console.log(chalk.blue(`[check] Retrying in ${retryDelay}s...`));
94
- await new Promise(r => setTimeout(r, retryDelay * 1000));
95
105
  }
96
- return {
97
- name,
98
- success: false,
99
- output: lastResult?.output || '',
100
- error: lastResult?.error,
101
- attempts,
102
- duration: lastResult?.duration || 0,
103
- };
106
+ return results;
104
107
  }
108
+ // ============================================================================
109
+ // Result Formatting
110
+ // ============================================================================
105
111
  /**
106
- * Run all checks for a phase
112
+ * Format check results for terminal output
107
113
  */
108
- export async function runPhaseChecks(phase, options = {}) {
109
- if (!phase.checks || Object.keys(phase.checks).length === 0) {
110
- return { success: true, checks: [] };
111
- }
112
- if (options.dryRun) {
113
- console.log(chalk.yellow(`[check] [DRY RUN] Would run checks for phase ${phase.id}:`));
114
- for (const [name, check] of Object.entries(phase.checks)) {
115
- console.log(chalk.yellow(` - ${name}: ${check.command}`));
116
- }
117
- return { success: true, checks: [] };
118
- }
119
- const results = [];
120
- let returnTo;
121
- for (const [name, check] of Object.entries(phase.checks)) {
122
- const result = await runCheckWithRetry(name, check, { cwd: options.cwd });
123
- results.push(result);
124
- if (!result.success) {
125
- console.log(chalk.red(`[check] ${name} failed after ${result.attempts} attempts`));
126
- // Determine failure action
127
- if (check.on_fail === 'retry') {
128
- // Already retried, now fail
129
- returnTo = undefined;
114
+ export function formatCheckResults(results) {
115
+ const lines = [];
116
+ for (const result of results) {
117
+ const status = result.passed ? '✓' : '✗';
118
+ const duration = result.duration_ms
119
+ ? ` (${(result.duration_ms / 1000).toFixed(1)}s)`
120
+ : '';
121
+ lines.push(` ${status} ${result.name}${duration}`);
122
+ if (!result.passed && result.error) {
123
+ // Indent error message
124
+ const errorLines = result.error.split('\n').slice(0, 5);
125
+ for (const line of errorLines) {
126
+ lines.push(` ${line}`);
130
127
  }
131
- else {
132
- // on_fail specifies a phase to return to
133
- returnTo = check.on_fail;
128
+ if (result.error.split('\n').length > 5) {
129
+ lines.push(' ...');
134
130
  }
135
- return {
136
- success: false,
137
- checks: results,
138
- returnTo,
139
- };
140
131
  }
141
132
  }
142
- console.log(chalk.green(`[check] All checks passed for phase ${phase.id}`));
143
- return {
144
- success: true,
145
- checks: results,
146
- };
147
- }
148
- /**
149
- * Create default checks for common phases
150
- */
151
- export function getDefaultChecks(phaseName) {
152
- switch (phaseName.toLowerCase()) {
153
- case 'implement':
154
- return {
155
- build: {
156
- command: 'npm run build',
157
- on_fail: 'retry',
158
- max_retries: 2,
159
- },
160
- };
161
- case 'defend':
162
- return {
163
- tests: {
164
- command: 'npm test',
165
- on_fail: 'implement', // Return to implement on test failure
166
- max_retries: 1,
167
- },
168
- };
169
- default:
170
- return {};
171
- }
133
+ return lines.join('\n');
172
134
  }
173
135
  /**
174
- * Format check results for display
136
+ * Check if all results passed
175
137
  */
176
- export function formatCheckResults(results) {
177
- if (results.checks.length === 0) {
178
- return 'No checks ran';
179
- }
180
- const lines = ['Check Results:'];
181
- for (const check of results.checks) {
182
- const status = check.success ? '✓' : '✗';
183
- const duration = `(${check.duration}ms)`;
184
- const attempts = check.attempts > 1 ? ` [${check.attempts} attempts]` : '';
185
- lines.push(` ${status} ${check.name} ${duration}${attempts}`);
186
- if (!check.success && check.error) {
187
- lines.push(` Error: ${check.error}`);
188
- }
189
- }
190
- if (results.returnTo) {
191
- lines.push(` → Returning to phase: ${results.returnTo}`);
192
- }
193
- return lines.join('\n');
138
+ export function allChecksPassed(results) {
139
+ return results.every(r => r.passed);
194
140
  }
195
141
  //# sourceMappingURL=checks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../src/commands/porch/checks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../src/commands/porch/checks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Claude Worker for Porch (Agent SDK)
3
+ *
4
+ * Invokes Claude programmatically via the Anthropic Agent SDK.
5
+ * Replaces the old `claude --print` subprocess approach.
6
+ *
7
+ * The Worker has full tool access (Read, Edit, Bash, Glob, Grep)
8
+ * and runs inside porch's process — no subprocess, no nested CLI.
9
+ */
10
+ export interface BuildResult {
11
+ /** Whether the build completed successfully */
12
+ success: boolean;
13
+ /** Claude's output text */
14
+ output: string;
15
+ /** Total cost in USD (if available) */
16
+ cost?: number;
17
+ /** Duration in milliseconds (if available) */
18
+ duration?: number;
19
+ }
20
+ /**
21
+ * Run a build phase with a timeout.
22
+ *
23
+ * Wraps buildWithSDK with Promise.race against a timeout.
24
+ * On timeout, returns a failure result (does not throw).
25
+ */
26
+ export declare function buildWithTimeout(prompt: string, outputPath: string, cwd: string, timeoutMs: number): Promise<BuildResult>;
27
+ //# sourceMappingURL=claude.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/claude.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,WAAW,WAAW;IAC1B,+CAA+C;IAC/C,OAAO,EAAE,OAAO,CAAC;IACjB,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,CAAC,CAetB"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Claude Worker for Porch (Agent SDK)
3
+ *
4
+ * Invokes Claude programmatically via the Anthropic Agent SDK.
5
+ * Replaces the old `claude --print` subprocess approach.
6
+ *
7
+ * The Worker has full tool access (Read, Edit, Bash, Glob, Grep)
8
+ * and runs inside porch's process — no subprocess, no nested CLI.
9
+ */
10
+ import * as fs from 'node:fs';
11
+ /**
12
+ * Run a build phase with a timeout.
13
+ *
14
+ * Wraps buildWithSDK with Promise.race against a timeout.
15
+ * On timeout, returns a failure result (does not throw).
16
+ */
17
+ export async function buildWithTimeout(prompt, outputPath, cwd, timeoutMs) {
18
+ let timer;
19
+ const timeoutPromise = new Promise((resolve) => {
20
+ timer = setTimeout(() => {
21
+ resolve({
22
+ success: false,
23
+ output: '[TIMEOUT] Build exceeded deadline',
24
+ duration: timeoutMs,
25
+ });
26
+ }, timeoutMs);
27
+ });
28
+ const result = await Promise.race([buildWithSDK(prompt, outputPath, cwd), timeoutPromise]);
29
+ clearTimeout(timer);
30
+ return result;
31
+ }
32
+ /**
33
+ * Run a build phase using the Agent SDK (internal — use buildWithTimeout).
34
+ */
35
+ async function buildWithSDK(prompt, outputPath, cwd) {
36
+ // Save prompt to file for reference
37
+ const promptFile = outputPath.replace(/\.txt$/, '-prompt.txt');
38
+ fs.writeFileSync(promptFile, prompt);
39
+ // Create output file
40
+ fs.writeFileSync(outputPath, '');
41
+ // Dynamically import Agent SDK (it's ESM)
42
+ const { query } = await import('@anthropic-ai/claude-agent-sdk');
43
+ let output = '';
44
+ let cost;
45
+ let duration;
46
+ let success = false;
47
+ try {
48
+ for await (const message of query({
49
+ prompt,
50
+ options: {
51
+ allowedTools: ['Read', 'Edit', 'Write', 'Bash', 'Glob', 'Grep'],
52
+ permissionMode: 'bypassPermissions',
53
+ allowDangerouslySkipPermissions: true,
54
+ cwd,
55
+ maxTurns: 200,
56
+ },
57
+ })) {
58
+ // Stream assistant messages to output file
59
+ if (message.type === 'assistant' && message.message?.content) {
60
+ for (const block of message.message.content) {
61
+ if (block.type === 'text') {
62
+ output += block.text + '\n';
63
+ fs.appendFileSync(outputPath, block.text + '\n');
64
+ }
65
+ else if (block.type === 'tool_use') {
66
+ const toolLine = `\n[tool: ${block.name}](${JSON.stringify(block.input).substring(0, 200)})\n`;
67
+ output += toolLine;
68
+ fs.appendFileSync(outputPath, toolLine);
69
+ }
70
+ }
71
+ }
72
+ // Capture tool progress for observability
73
+ if (message.type === 'tool_progress') {
74
+ const progressLine = `[tool_progress] ${JSON.stringify(message).substring(0, 500)}\n`;
75
+ fs.appendFileSync(outputPath, progressLine);
76
+ }
77
+ // Capture result
78
+ if (message.type === 'result') {
79
+ if (message.subtype === 'success') {
80
+ success = true;
81
+ if (message.result) {
82
+ output += message.result;
83
+ fs.appendFileSync(outputPath, message.result);
84
+ }
85
+ cost = message.total_cost_usd;
86
+ duration = message.duration_ms;
87
+ }
88
+ else {
89
+ // Error result
90
+ success = false;
91
+ const errorMsg = `\n[Agent SDK error: ${message.subtype}]\n`;
92
+ output += errorMsg;
93
+ fs.appendFileSync(outputPath, errorMsg);
94
+ duration = message.duration_ms;
95
+ }
96
+ }
97
+ }
98
+ }
99
+ catch (err) {
100
+ const errorMsg = `\n[Agent SDK exception: ${err.message}]\n`;
101
+ output += errorMsg;
102
+ fs.appendFileSync(outputPath, errorMsg);
103
+ success = false;
104
+ }
105
+ return { success, output, cost, duration };
106
+ }
107
+ //# sourceMappingURL=claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../src/commands/porch/claude.ts"],"names":[],"mappings":"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"}
@@ -1,60 +1,38 @@
1
1
  /**
2
2
  * Porch - Protocol Orchestrator
3
3
  *
4
- * Generic loop orchestrator that reads protocol definitions from JSON
5
- * and executes them with Claude. Implements the Ralph pattern: fresh
6
- * context per iteration with state persisted to files.
4
+ * Claude calls porch as a tool; porch returns prescriptive instructions.
5
+ * All commands produce clear, actionable output.
7
6
  */
8
- import type { Protocol, PorchRunOptions, PorchInitOptions } from './types.js';
9
7
  /**
10
- * List available protocols
11
- * Delegates to protocol-loader.ts for proper conversion
8
+ * porch status <id>
9
+ * Shows current state and prescriptive next steps.
12
10
  */
13
- export declare function listProtocols(projectRoot?: string): string[];
11
+ export declare function status(projectRoot: string, projectId: string): Promise<void>;
14
12
  /**
15
- * Load a protocol definition
16
- * Delegates to protocol-loader.ts which properly converts steps→substates
13
+ * porch check <id>
14
+ * Runs the phase checks and reports results.
17
15
  */
18
- export declare function loadProtocol(name: string, projectRoot?: string): Protocol;
16
+ export declare function check(projectRoot: string, projectId: string): Promise<void>;
19
17
  /**
20
- * Initialize a new project with a protocol
18
+ * porch done <id>
19
+ * Advances to next phase if checks pass. Refuses if checks fail.
21
20
  */
22
- export declare function init(protocolName: string, projectId: string, projectName: string, options?: PorchInitOptions): Promise<void>;
21
+ export declare function done(projectRoot: string, projectId: string): Promise<void>;
23
22
  /**
24
- * Run the protocol loop for a project (Interactive REPL mode)
23
+ * porch gate <id>
24
+ * Requests human approval for current gate.
25
25
  */
26
- export declare function run(projectId: string, options?: PorchRunOptions): Promise<void>;
26
+ export declare function gate(projectRoot: string, projectId: string): Promise<void>;
27
27
  /**
28
- * Approve a gate
28
+ * porch approve <id> <gate> --a-human-explicitly-approved-this
29
+ * Human approves a gate. Requires explicit flag to prevent automated approvals.
29
30
  */
30
- export declare function approve(projectId: string, gateId: string): Promise<void>;
31
+ export declare function approve(projectRoot: string, projectId: string, gateName: string, hasHumanFlag: boolean): Promise<void>;
31
32
  /**
32
- * Show project status
33
+ * porch init <protocol> <id> <name>
34
+ * Initialize a new project.
33
35
  */
34
- export declare function status(projectId?: string): Promise<void>;
35
- /**
36
- * List available protocols
37
- */
38
- export declare function list(): Promise<void>;
39
- /**
40
- * Show protocol definition
41
- */
42
- export declare function show(protocolName: string): Promise<void>;
43
- /**
44
- * Show pending gates across all projects
45
- */
46
- export declare function pending(): Promise<void>;
47
- /**
48
- * Main porch entry point - handles subcommands
49
- */
50
- export interface PorchOptions {
51
- subcommand: string;
52
- args: string[];
53
- dryRun?: boolean;
54
- noClaude?: boolean;
55
- pollInterval?: number;
56
- description?: string;
57
- worktree?: string;
58
- }
59
- export declare function porch(options: PorchOptions): Promise<void>;
36
+ export declare function init(projectRoot: string, protocolName: string, projectId: string, projectName: string): Promise<void>;
37
+ export declare function cli(args: string[]): Promise<void>;
60
38
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,OAAO,KAAK,EACV,QAAQ,EAGR,eAAe,EACf,gBAAgB,EACjB,MAAM,YAAY,CAAC;AA+CpB;;;GAGG;AACH,wBAAgB,aAAa,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAG5D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,QAAQ,CASzE;AA8MD;;GAEG;AACH,wBAAsB,IAAI,CACxB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAiBf;AA2ND;;GAEG;AACH,wBAAsB,GAAG,CACvB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAwdf;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB9E;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6E9D;AAED;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAkB1C;AAED;;GAEG;AACH,wBAAsB,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO9D;AAED;;GAEG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAe7C;AAyDD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAuEhE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAyDH;;;GAGG;AACH,wBAAsB,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6FlF;AAED;;;GAGG;AACH,wBAAsB,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCjF;AAED;;;GAGG;AACH,wBAAsB,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuGhF;AAmED;;;GAGG;AACH,wBAAsB,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDhF;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAC3B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,OAAO,GACpB,OAAO,CAAC,IAAI,CAAC,CA2Df;AAED;;;GAGG;AACH,wBAAsB,IAAI,CACxB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAkBf;AA2DD,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuFvD"}