@cluesmith/codev 2.0.0-rc.7 → 2.0.0-rc.70

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 (456) 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-C7FtNK6Y.css +32 -0
  5. package/dashboard/dist/assets/index-CDAINZKT.js +131 -0
  6. package/dashboard/dist/assets/index-CDAINZKT.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 +173 -118
  10. package/dist/agent-farm/cli.js.map +1 -1
  11. package/dist/agent-farm/commands/architect.d.ts +3 -3
  12. package/dist/agent-farm/commands/architect.d.ts.map +1 -1
  13. package/dist/agent-farm/commands/architect.js +20 -147
  14. package/dist/agent-farm/commands/architect.js.map +1 -1
  15. package/dist/agent-farm/commands/attach.d.ts +13 -0
  16. package/dist/agent-farm/commands/attach.d.ts.map +1 -0
  17. package/dist/agent-farm/commands/attach.js +144 -0
  18. package/dist/agent-farm/commands/attach.js.map +1 -0
  19. package/dist/agent-farm/commands/cleanup.d.ts.map +1 -1
  20. package/dist/agent-farm/commands/cleanup.js +35 -19
  21. package/dist/agent-farm/commands/cleanup.js.map +1 -1
  22. package/dist/agent-farm/commands/consult.d.ts +3 -4
  23. package/dist/agent-farm/commands/consult.d.ts.map +1 -1
  24. package/dist/agent-farm/commands/consult.js +27 -37
  25. package/dist/agent-farm/commands/consult.js.map +1 -1
  26. package/dist/agent-farm/commands/index.d.ts +2 -2
  27. package/dist/agent-farm/commands/index.d.ts.map +1 -1
  28. package/dist/agent-farm/commands/index.js +2 -2
  29. package/dist/agent-farm/commands/index.js.map +1 -1
  30. package/dist/agent-farm/commands/open.d.ts +4 -2
  31. package/dist/agent-farm/commands/open.d.ts.map +1 -1
  32. package/dist/agent-farm/commands/open.js +33 -83
  33. package/dist/agent-farm/commands/open.js.map +1 -1
  34. package/dist/agent-farm/commands/send.d.ts +1 -1
  35. package/dist/agent-farm/commands/send.d.ts.map +1 -1
  36. package/dist/agent-farm/commands/send.js +60 -79
  37. package/dist/agent-farm/commands/send.js.map +1 -1
  38. package/dist/agent-farm/commands/shell.d.ts +15 -0
  39. package/dist/agent-farm/commands/shell.d.ts.map +1 -0
  40. package/dist/agent-farm/commands/shell.js +50 -0
  41. package/dist/agent-farm/commands/shell.js.map +1 -0
  42. package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
  43. package/dist/agent-farm/commands/spawn.js +597 -281
  44. package/dist/agent-farm/commands/spawn.js.map +1 -1
  45. package/dist/agent-farm/commands/start.d.ts +10 -20
  46. package/dist/agent-farm/commands/start.d.ts.map +1 -1
  47. package/dist/agent-farm/commands/start.js +45 -491
  48. package/dist/agent-farm/commands/start.js.map +1 -1
  49. package/dist/agent-farm/commands/status.d.ts +2 -0
  50. package/dist/agent-farm/commands/status.d.ts.map +1 -1
  51. package/dist/agent-farm/commands/status.js +75 -24
  52. package/dist/agent-farm/commands/status.js.map +1 -1
  53. package/dist/agent-farm/commands/stop.d.ts +6 -0
  54. package/dist/agent-farm/commands/stop.d.ts.map +1 -1
  55. package/dist/agent-farm/commands/stop.js +49 -109
  56. package/dist/agent-farm/commands/stop.js.map +1 -1
  57. package/dist/agent-farm/commands/tower-cloud.d.ts +48 -0
  58. package/dist/agent-farm/commands/tower-cloud.d.ts.map +1 -0
  59. package/dist/agent-farm/commands/tower-cloud.js +334 -0
  60. package/dist/agent-farm/commands/tower-cloud.js.map +1 -0
  61. package/dist/agent-farm/commands/tower.d.ts +9 -0
  62. package/dist/agent-farm/commands/tower.d.ts.map +1 -1
  63. package/dist/agent-farm/commands/tower.js +59 -19
  64. package/dist/agent-farm/commands/tower.js.map +1 -1
  65. package/dist/agent-farm/db/index.d.ts +6 -2
  66. package/dist/agent-farm/db/index.d.ts.map +1 -1
  67. package/dist/agent-farm/db/index.js +246 -18
  68. package/dist/agent-farm/db/index.js.map +1 -1
  69. package/dist/agent-farm/db/migrate.d.ts +0 -4
  70. package/dist/agent-farm/db/migrate.d.ts.map +1 -1
  71. package/dist/agent-farm/db/migrate.js +6 -55
  72. package/dist/agent-farm/db/migrate.js.map +1 -1
  73. package/dist/agent-farm/db/schema.d.ts +3 -3
  74. package/dist/agent-farm/db/schema.d.ts.map +1 -1
  75. package/dist/agent-farm/db/schema.js +25 -19
  76. package/dist/agent-farm/db/schema.js.map +1 -1
  77. package/dist/agent-farm/db/types.d.ts +3 -13
  78. package/dist/agent-farm/db/types.d.ts.map +1 -1
  79. package/dist/agent-farm/db/types.js +3 -11
  80. package/dist/agent-farm/db/types.js.map +1 -1
  81. package/dist/agent-farm/hq-connector.d.ts +2 -6
  82. package/dist/agent-farm/hq-connector.d.ts.map +1 -1
  83. package/dist/agent-farm/hq-connector.js +2 -17
  84. package/dist/agent-farm/hq-connector.js.map +1 -1
  85. package/dist/agent-farm/lib/cloud-config.d.ts +59 -0
  86. package/dist/agent-farm/lib/cloud-config.d.ts.map +1 -0
  87. package/dist/agent-farm/lib/cloud-config.js +143 -0
  88. package/dist/agent-farm/lib/cloud-config.js.map +1 -0
  89. package/dist/agent-farm/lib/tower-client.d.ts +163 -0
  90. package/dist/agent-farm/lib/tower-client.d.ts.map +1 -0
  91. package/dist/agent-farm/lib/tower-client.js +233 -0
  92. package/dist/agent-farm/lib/tower-client.js.map +1 -0
  93. package/dist/agent-farm/lib/tunnel-client.d.ts +117 -0
  94. package/dist/agent-farm/lib/tunnel-client.d.ts.map +1 -0
  95. package/dist/agent-farm/lib/tunnel-client.js +504 -0
  96. package/dist/agent-farm/lib/tunnel-client.js.map +1 -0
  97. package/dist/agent-farm/servers/tower-server.js +2650 -185
  98. package/dist/agent-farm/servers/tower-server.js.map +1 -1
  99. package/dist/agent-farm/state.d.ts +6 -12
  100. package/dist/agent-farm/state.d.ts.map +1 -1
  101. package/dist/agent-farm/state.js +34 -49
  102. package/dist/agent-farm/state.js.map +1 -1
  103. package/dist/agent-farm/types.d.ts +49 -26
  104. package/dist/agent-farm/types.d.ts.map +1 -1
  105. package/dist/agent-farm/utils/config.d.ts +0 -5
  106. package/dist/agent-farm/utils/config.d.ts.map +1 -1
  107. package/dist/agent-farm/utils/config.js +12 -44
  108. package/dist/agent-farm/utils/config.js.map +1 -1
  109. package/dist/agent-farm/utils/deps.d.ts.map +1 -1
  110. package/dist/agent-farm/utils/deps.js +0 -32
  111. package/dist/agent-farm/utils/deps.js.map +1 -1
  112. package/dist/agent-farm/utils/file-tabs.d.ts +27 -0
  113. package/dist/agent-farm/utils/file-tabs.d.ts.map +1 -0
  114. package/dist/agent-farm/utils/file-tabs.js +46 -0
  115. package/dist/agent-farm/utils/file-tabs.js.map +1 -0
  116. package/dist/agent-farm/utils/gate-status.d.ts +16 -0
  117. package/dist/agent-farm/utils/gate-status.d.ts.map +1 -0
  118. package/dist/agent-farm/utils/gate-status.js +79 -0
  119. package/dist/agent-farm/utils/gate-status.js.map +1 -0
  120. package/dist/agent-farm/utils/gate-watcher.d.ts +38 -0
  121. package/dist/agent-farm/utils/gate-watcher.d.ts.map +1 -0
  122. package/dist/agent-farm/utils/gate-watcher.js +122 -0
  123. package/dist/agent-farm/utils/gate-watcher.js.map +1 -0
  124. package/dist/agent-farm/utils/index.d.ts +0 -1
  125. package/dist/agent-farm/utils/index.d.ts.map +1 -1
  126. package/dist/agent-farm/utils/index.js +0 -1
  127. package/dist/agent-farm/utils/index.js.map +1 -1
  128. package/dist/agent-farm/utils/notifications.d.ts +30 -0
  129. package/dist/agent-farm/utils/notifications.d.ts.map +1 -0
  130. package/dist/agent-farm/utils/notifications.js +121 -0
  131. package/dist/agent-farm/utils/notifications.js.map +1 -0
  132. package/dist/agent-farm/utils/server-utils.d.ts +5 -5
  133. package/dist/agent-farm/utils/server-utils.d.ts.map +1 -1
  134. package/dist/agent-farm/utils/server-utils.js +5 -16
  135. package/dist/agent-farm/utils/server-utils.js.map +1 -1
  136. package/dist/agent-farm/utils/session.d.ts +32 -0
  137. package/dist/agent-farm/utils/session.d.ts.map +1 -0
  138. package/dist/agent-farm/utils/session.js +57 -0
  139. package/dist/agent-farm/utils/session.js.map +1 -0
  140. package/dist/agent-farm/utils/shell.d.ts +9 -22
  141. package/dist/agent-farm/utils/shell.d.ts.map +1 -1
  142. package/dist/agent-farm/utils/shell.js +34 -34
  143. package/dist/agent-farm/utils/shell.js.map +1 -1
  144. package/dist/cli.d.ts.map +1 -1
  145. package/dist/cli.js +11 -54
  146. package/dist/cli.js.map +1 -1
  147. package/dist/commands/adopt.d.ts.map +1 -1
  148. package/dist/commands/adopt.js +49 -4
  149. package/dist/commands/adopt.js.map +1 -1
  150. package/dist/commands/consult/index.d.ts +13 -2
  151. package/dist/commands/consult/index.d.ts.map +1 -1
  152. package/dist/commands/consult/index.js +245 -29
  153. package/dist/commands/consult/index.js.map +1 -1
  154. package/dist/commands/doctor.d.ts.map +1 -1
  155. package/dist/commands/doctor.js +96 -79
  156. package/dist/commands/doctor.js.map +1 -1
  157. package/dist/commands/init.d.ts.map +1 -1
  158. package/dist/commands/init.js +41 -2
  159. package/dist/commands/init.js.map +1 -1
  160. package/dist/commands/porch/build-counter.d.ts +5 -0
  161. package/dist/commands/porch/build-counter.d.ts.map +1 -0
  162. package/dist/commands/porch/build-counter.js +5 -0
  163. package/dist/commands/porch/build-counter.js.map +1 -0
  164. package/dist/commands/porch/checks.d.ts +17 -29
  165. package/dist/commands/porch/checks.d.ts.map +1 -1
  166. package/dist/commands/porch/checks.js +96 -144
  167. package/dist/commands/porch/checks.js.map +1 -1
  168. package/dist/commands/porch/index.d.ts +25 -43
  169. package/dist/commands/porch/index.d.ts.map +1 -1
  170. package/dist/commands/porch/index.js +463 -1116
  171. package/dist/commands/porch/index.js.map +1 -1
  172. package/dist/commands/porch/next.d.ts +22 -0
  173. package/dist/commands/porch/next.d.ts.map +1 -0
  174. package/dist/commands/porch/next.js +571 -0
  175. package/dist/commands/porch/next.js.map +1 -0
  176. package/dist/commands/porch/plan.d.ts +70 -0
  177. package/dist/commands/porch/plan.d.ts.map +1 -0
  178. package/dist/commands/porch/plan.js +190 -0
  179. package/dist/commands/porch/plan.js.map +1 -0
  180. package/dist/commands/porch/prompts.d.ts +19 -0
  181. package/dist/commands/porch/prompts.d.ts.map +1 -0
  182. package/dist/commands/porch/prompts.js +277 -0
  183. package/dist/commands/porch/prompts.js.map +1 -0
  184. package/dist/commands/porch/protocol.d.ts +59 -0
  185. package/dist/commands/porch/protocol.d.ts.map +1 -0
  186. package/dist/commands/porch/protocol.js +294 -0
  187. package/dist/commands/porch/protocol.js.map +1 -0
  188. package/dist/commands/porch/state.d.ts +36 -107
  189. package/dist/commands/porch/state.d.ts.map +1 -1
  190. package/dist/commands/porch/state.js +120 -699
  191. package/dist/commands/porch/state.js.map +1 -1
  192. package/dist/commands/porch/types.d.ts +99 -164
  193. package/dist/commands/porch/types.d.ts.map +1 -1
  194. package/dist/commands/porch/types.js +2 -1
  195. package/dist/commands/porch/types.js.map +1 -1
  196. package/dist/commands/porch/verdict.d.ts +31 -0
  197. package/dist/commands/porch/verdict.d.ts.map +1 -0
  198. package/dist/commands/porch/verdict.js +59 -0
  199. package/dist/commands/porch/verdict.js.map +1 -0
  200. package/dist/commands/update.d.ts.map +1 -1
  201. package/dist/commands/update.js +31 -0
  202. package/dist/commands/update.js.map +1 -1
  203. package/dist/lib/scaffold.d.ts +37 -0
  204. package/dist/lib/scaffold.d.ts.map +1 -1
  205. package/dist/lib/scaffold.js +114 -0
  206. package/dist/lib/scaffold.js.map +1 -1
  207. package/dist/terminal/index.d.ts +8 -0
  208. package/dist/terminal/index.d.ts.map +1 -0
  209. package/dist/terminal/index.js +5 -0
  210. package/dist/terminal/index.js.map +1 -0
  211. package/dist/terminal/pty-manager.d.ts +69 -0
  212. package/dist/terminal/pty-manager.d.ts.map +1 -0
  213. package/dist/terminal/pty-manager.js +377 -0
  214. package/dist/terminal/pty-manager.js.map +1 -0
  215. package/dist/terminal/pty-session.d.ts +104 -0
  216. package/dist/terminal/pty-session.d.ts.map +1 -0
  217. package/dist/terminal/pty-session.js +327 -0
  218. package/dist/terminal/pty-session.js.map +1 -0
  219. package/dist/terminal/ring-buffer.d.ts +34 -0
  220. package/dist/terminal/ring-buffer.d.ts.map +1 -0
  221. package/dist/terminal/ring-buffer.js +94 -0
  222. package/dist/terminal/ring-buffer.js.map +1 -0
  223. package/dist/terminal/session-manager.d.ts +115 -0
  224. package/dist/terminal/session-manager.d.ts.map +1 -0
  225. package/dist/terminal/session-manager.js +582 -0
  226. package/dist/terminal/session-manager.js.map +1 -0
  227. package/dist/terminal/shepherd-client.d.ts +58 -0
  228. package/dist/terminal/shepherd-client.d.ts.map +1 -0
  229. package/dist/terminal/shepherd-client.js +212 -0
  230. package/dist/terminal/shepherd-client.js.map +1 -0
  231. package/dist/terminal/shepherd-main.d.ts +19 -0
  232. package/dist/terminal/shepherd-main.d.ts.map +1 -0
  233. package/dist/terminal/shepherd-main.js +153 -0
  234. package/dist/terminal/shepherd-main.js.map +1 -0
  235. package/dist/terminal/shepherd-process.d.ts +75 -0
  236. package/dist/terminal/shepherd-process.d.ts.map +1 -0
  237. package/dist/terminal/shepherd-process.js +279 -0
  238. package/dist/terminal/shepherd-process.js.map +1 -0
  239. package/dist/terminal/shepherd-protocol.d.ts +115 -0
  240. package/dist/terminal/shepherd-protocol.d.ts.map +1 -0
  241. package/dist/terminal/shepherd-protocol.js +214 -0
  242. package/dist/terminal/shepherd-protocol.js.map +1 -0
  243. package/dist/terminal/shepherd-replay-buffer.d.ts +38 -0
  244. package/dist/terminal/shepherd-replay-buffer.d.ts.map +1 -0
  245. package/dist/terminal/shepherd-replay-buffer.js +94 -0
  246. package/dist/terminal/shepherd-replay-buffer.js.map +1 -0
  247. package/dist/terminal/ws-protocol.d.ts +27 -0
  248. package/dist/terminal/ws-protocol.d.ts.map +1 -0
  249. package/dist/terminal/ws-protocol.js +44 -0
  250. package/dist/terminal/ws-protocol.js.map +1 -0
  251. package/package.json +19 -5
  252. package/skeleton/.claude/skills/af/SKILL.md +89 -0
  253. package/skeleton/.claude/skills/codev/SKILL.md +41 -0
  254. package/skeleton/.claude/skills/consult/SKILL.md +81 -0
  255. package/skeleton/.claude/skills/generate-image/SKILL.md +56 -0
  256. package/skeleton/DEPENDENCIES.md +4 -62
  257. package/skeleton/builders.md +1 -1
  258. package/skeleton/consult-types/impl-review.md +18 -9
  259. package/skeleton/consult-types/integration-review.md +1 -1
  260. package/skeleton/consult-types/plan-review.md +1 -1
  261. package/skeleton/consult-types/pr-ready.md +1 -1
  262. package/skeleton/consult-types/spec-review.md +1 -1
  263. package/skeleton/porch/prompts/defend.md +1 -1
  264. package/skeleton/porch/prompts/evaluate.md +2 -2
  265. package/skeleton/porch/prompts/implement.md +1 -1
  266. package/skeleton/porch/prompts/plan.md +1 -1
  267. package/skeleton/porch/prompts/review.md +4 -4
  268. package/skeleton/porch/prompts/specify.md +1 -1
  269. package/skeleton/porch/prompts/understand.md +2 -2
  270. package/skeleton/protocol-schema.json +282 -0
  271. package/skeleton/protocols/bugfix/builder-prompt.md +54 -0
  272. package/skeleton/protocols/bugfix/prompts/fix.md +77 -0
  273. package/skeleton/protocols/bugfix/prompts/investigate.md +77 -0
  274. package/skeleton/protocols/bugfix/prompts/pr.md +84 -0
  275. package/skeleton/protocols/bugfix/protocol.json +20 -33
  276. package/skeleton/protocols/experiment/builder-prompt.md +52 -0
  277. package/skeleton/protocols/experiment/protocol.json +101 -0
  278. package/skeleton/protocols/experiment/protocol.md +3 -3
  279. package/skeleton/protocols/experiment/templates/notes.md +1 -1
  280. package/skeleton/protocols/maintain/builder-prompt.md +46 -0
  281. package/skeleton/protocols/maintain/prompts/audit.md +111 -0
  282. package/skeleton/protocols/maintain/prompts/clean.md +91 -0
  283. package/skeleton/protocols/maintain/prompts/sync.md +113 -0
  284. package/skeleton/protocols/maintain/prompts/verify.md +110 -0
  285. package/skeleton/protocols/maintain/protocol.json +141 -0
  286. package/skeleton/protocols/maintain/protocol.md +17 -11
  287. package/skeleton/protocols/protocol-schema.json +54 -1
  288. package/skeleton/protocols/spir/builder-prompt.md +59 -0
  289. package/skeleton/protocols/spir/prompts/implement.md +208 -0
  290. package/skeleton/protocols/{spider → spir}/prompts/plan.md +6 -70
  291. package/skeleton/protocols/{spider → spir}/prompts/review.md +20 -39
  292. package/skeleton/protocols/{spider → spir}/prompts/specify.md +33 -61
  293. package/skeleton/protocols/spir/protocol.json +156 -0
  294. package/skeleton/protocols/{spider → spir}/protocol.md +35 -21
  295. package/skeleton/protocols/{spider → spir}/templates/plan.md +14 -0
  296. package/skeleton/protocols/spir/templates/review.md +89 -0
  297. package/skeleton/protocols/tick/builder-prompt.md +56 -0
  298. package/skeleton/protocols/tick/protocol.json +7 -2
  299. package/skeleton/protocols/tick/protocol.md +18 -18
  300. package/skeleton/protocols/tick/templates/review.md +1 -1
  301. package/skeleton/resources/commands/agent-farm.md +63 -46
  302. package/skeleton/resources/commands/codev.md +0 -2
  303. package/skeleton/resources/commands/overview.md +7 -17
  304. package/skeleton/resources/workflow-reference.md +4 -4
  305. package/skeleton/roles/architect.md +152 -315
  306. package/skeleton/roles/builder.md +110 -218
  307. package/skeleton/roles/consultant.md +6 -6
  308. package/skeleton/templates/AGENTS.md +2 -2
  309. package/skeleton/templates/CLAUDE.md +2 -2
  310. package/skeleton/templates/cheatsheet.md +7 -5
  311. package/skeleton/templates/projectlist.md +1 -1
  312. package/templates/dashboard/index.html +17 -43
  313. package/templates/dashboard/js/dialogs.js +7 -7
  314. package/templates/dashboard/js/files.js +2 -2
  315. package/templates/dashboard/js/main.js +4 -4
  316. package/templates/dashboard/js/projects.js +3 -3
  317. package/templates/dashboard/js/tabs.js +1 -1
  318. package/templates/dashboard/js/utils.js +22 -87
  319. package/templates/open.html +26 -0
  320. package/templates/tower.html +642 -36
  321. package/dist/agent-farm/commands/kickoff.d.ts +0 -20
  322. package/dist/agent-farm/commands/kickoff.d.ts.map +0 -1
  323. package/dist/agent-farm/commands/kickoff.js +0 -337
  324. package/dist/agent-farm/commands/kickoff.js.map +0 -1
  325. package/dist/agent-farm/commands/rename.d.ts +0 -13
  326. package/dist/agent-farm/commands/rename.d.ts.map +0 -1
  327. package/dist/agent-farm/commands/rename.js +0 -33
  328. package/dist/agent-farm/commands/rename.js.map +0 -1
  329. package/dist/agent-farm/commands/tutorial.d.ts +0 -10
  330. package/dist/agent-farm/commands/tutorial.d.ts.map +0 -1
  331. package/dist/agent-farm/commands/tutorial.js +0 -49
  332. package/dist/agent-farm/commands/tutorial.js.map +0 -1
  333. package/dist/agent-farm/commands/util.d.ts +0 -15
  334. package/dist/agent-farm/commands/util.d.ts.map +0 -1
  335. package/dist/agent-farm/commands/util.js +0 -108
  336. package/dist/agent-farm/commands/util.js.map +0 -1
  337. package/dist/agent-farm/servers/dashboard-server.d.ts +0 -7
  338. package/dist/agent-farm/servers/dashboard-server.d.ts.map +0 -1
  339. package/dist/agent-farm/servers/dashboard-server.js +0 -1872
  340. package/dist/agent-farm/servers/dashboard-server.js.map +0 -1
  341. package/dist/agent-farm/servers/open-server.d.ts +0 -7
  342. package/dist/agent-farm/servers/open-server.d.ts.map +0 -1
  343. package/dist/agent-farm/servers/open-server.js +0 -315
  344. package/dist/agent-farm/servers/open-server.js.map +0 -1
  345. package/dist/agent-farm/tutorial/index.d.ts +0 -8
  346. package/dist/agent-farm/tutorial/index.d.ts.map +0 -1
  347. package/dist/agent-farm/tutorial/index.js +0 -8
  348. package/dist/agent-farm/tutorial/index.js.map +0 -1
  349. package/dist/agent-farm/tutorial/prompts.d.ts +0 -57
  350. package/dist/agent-farm/tutorial/prompts.d.ts.map +0 -1
  351. package/dist/agent-farm/tutorial/prompts.js +0 -147
  352. package/dist/agent-farm/tutorial/prompts.js.map +0 -1
  353. package/dist/agent-farm/tutorial/runner.d.ts +0 -52
  354. package/dist/agent-farm/tutorial/runner.d.ts.map +0 -1
  355. package/dist/agent-farm/tutorial/runner.js +0 -204
  356. package/dist/agent-farm/tutorial/runner.js.map +0 -1
  357. package/dist/agent-farm/tutorial/state.d.ts +0 -26
  358. package/dist/agent-farm/tutorial/state.d.ts.map +0 -1
  359. package/dist/agent-farm/tutorial/state.js +0 -89
  360. package/dist/agent-farm/tutorial/state.js.map +0 -1
  361. package/dist/agent-farm/tutorial/steps/first-spec.d.ts +0 -7
  362. package/dist/agent-farm/tutorial/steps/first-spec.d.ts.map +0 -1
  363. package/dist/agent-farm/tutorial/steps/first-spec.js +0 -136
  364. package/dist/agent-farm/tutorial/steps/first-spec.js.map +0 -1
  365. package/dist/agent-farm/tutorial/steps/implementation.d.ts +0 -7
  366. package/dist/agent-farm/tutorial/steps/implementation.d.ts.map +0 -1
  367. package/dist/agent-farm/tutorial/steps/implementation.js +0 -76
  368. package/dist/agent-farm/tutorial/steps/implementation.js.map +0 -1
  369. package/dist/agent-farm/tutorial/steps/index.d.ts +0 -10
  370. package/dist/agent-farm/tutorial/steps/index.d.ts.map +0 -1
  371. package/dist/agent-farm/tutorial/steps/index.js +0 -10
  372. package/dist/agent-farm/tutorial/steps/index.js.map +0 -1
  373. package/dist/agent-farm/tutorial/steps/planning.d.ts +0 -7
  374. package/dist/agent-farm/tutorial/steps/planning.d.ts.map +0 -1
  375. package/dist/agent-farm/tutorial/steps/planning.js +0 -143
  376. package/dist/agent-farm/tutorial/steps/planning.js.map +0 -1
  377. package/dist/agent-farm/tutorial/steps/review.d.ts +0 -7
  378. package/dist/agent-farm/tutorial/steps/review.d.ts.map +0 -1
  379. package/dist/agent-farm/tutorial/steps/review.js +0 -78
  380. package/dist/agent-farm/tutorial/steps/review.js.map +0 -1
  381. package/dist/agent-farm/tutorial/steps/setup.d.ts +0 -7
  382. package/dist/agent-farm/tutorial/steps/setup.d.ts.map +0 -1
  383. package/dist/agent-farm/tutorial/steps/setup.js +0 -126
  384. package/dist/agent-farm/tutorial/steps/setup.js.map +0 -1
  385. package/dist/agent-farm/tutorial/steps/welcome.d.ts +0 -7
  386. package/dist/agent-farm/tutorial/steps/welcome.d.ts.map +0 -1
  387. package/dist/agent-farm/tutorial/steps/welcome.js +0 -50
  388. package/dist/agent-farm/tutorial/steps/welcome.js.map +0 -1
  389. package/dist/agent-farm/utils/orphan-handler.d.ts +0 -27
  390. package/dist/agent-farm/utils/orphan-handler.d.ts.map +0 -1
  391. package/dist/agent-farm/utils/orphan-handler.js +0 -149
  392. package/dist/agent-farm/utils/orphan-handler.js.map +0 -1
  393. package/dist/agent-farm/utils/port-registry.d.ts +0 -58
  394. package/dist/agent-farm/utils/port-registry.d.ts.map +0 -1
  395. package/dist/agent-farm/utils/port-registry.js +0 -166
  396. package/dist/agent-farm/utils/port-registry.js.map +0 -1
  397. package/dist/agent-farm/utils/terminal-ports.d.ts +0 -18
  398. package/dist/agent-farm/utils/terminal-ports.d.ts.map +0 -1
  399. package/dist/agent-farm/utils/terminal-ports.js +0 -35
  400. package/dist/agent-farm/utils/terminal-ports.js.map +0 -1
  401. package/dist/commands/pcheck/cache.d.ts +0 -48
  402. package/dist/commands/pcheck/cache.d.ts.map +0 -1
  403. package/dist/commands/pcheck/cache.js +0 -170
  404. package/dist/commands/pcheck/cache.js.map +0 -1
  405. package/dist/commands/pcheck/evaluator.d.ts +0 -15
  406. package/dist/commands/pcheck/evaluator.d.ts.map +0 -1
  407. package/dist/commands/pcheck/evaluator.js +0 -246
  408. package/dist/commands/pcheck/evaluator.js.map +0 -1
  409. package/dist/commands/pcheck/index.d.ts +0 -12
  410. package/dist/commands/pcheck/index.d.ts.map +0 -1
  411. package/dist/commands/pcheck/index.js +0 -249
  412. package/dist/commands/pcheck/index.js.map +0 -1
  413. package/dist/commands/pcheck/parser.d.ts +0 -39
  414. package/dist/commands/pcheck/parser.d.ts.map +0 -1
  415. package/dist/commands/pcheck/parser.js +0 -155
  416. package/dist/commands/pcheck/parser.js.map +0 -1
  417. package/dist/commands/pcheck/types.d.ts +0 -82
  418. package/dist/commands/pcheck/types.d.ts.map +0 -1
  419. package/dist/commands/pcheck/types.js +0 -5
  420. package/dist/commands/pcheck/types.js.map +0 -1
  421. package/dist/commands/porch/consultation.d.ts +0 -56
  422. package/dist/commands/porch/consultation.d.ts.map +0 -1
  423. package/dist/commands/porch/consultation.js +0 -330
  424. package/dist/commands/porch/consultation.js.map +0 -1
  425. package/dist/commands/porch/notifications.d.ts +0 -99
  426. package/dist/commands/porch/notifications.d.ts.map +0 -1
  427. package/dist/commands/porch/notifications.js +0 -223
  428. package/dist/commands/porch/notifications.js.map +0 -1
  429. package/dist/commands/porch/plan-parser.d.ts +0 -38
  430. package/dist/commands/porch/plan-parser.d.ts.map +0 -1
  431. package/dist/commands/porch/plan-parser.js +0 -166
  432. package/dist/commands/porch/plan-parser.js.map +0 -1
  433. package/dist/commands/porch/protocol-loader.d.ts +0 -46
  434. package/dist/commands/porch/protocol-loader.d.ts.map +0 -1
  435. package/dist/commands/porch/protocol-loader.js +0 -253
  436. package/dist/commands/porch/protocol-loader.js.map +0 -1
  437. package/dist/commands/porch/signal-parser.d.ts +0 -88
  438. package/dist/commands/porch/signal-parser.d.ts.map +0 -1
  439. package/dist/commands/porch/signal-parser.js +0 -148
  440. package/dist/commands/porch/signal-parser.js.map +0 -1
  441. package/dist/commands/tower.d.ts +0 -16
  442. package/dist/commands/tower.d.ts.map +0 -1
  443. package/dist/commands/tower.js +0 -21
  444. package/dist/commands/tower.js.map +0 -1
  445. package/skeleton/config.json +0 -7
  446. package/skeleton/porch/protocols/bugfix.json +0 -85
  447. package/skeleton/porch/protocols/spider.json +0 -135
  448. package/skeleton/porch/protocols/tick.json +0 -76
  449. package/skeleton/protocols/spider/prompts/defend.md +0 -215
  450. package/skeleton/protocols/spider/prompts/evaluate.md +0 -241
  451. package/skeleton/protocols/spider/prompts/implement.md +0 -149
  452. package/skeleton/protocols/spider/protocol.json +0 -210
  453. package/skeleton/protocols/spider/templates/review.md +0 -207
  454. package/templates/dashboard/css/activity.css +0 -151
  455. package/templates/dashboard/js/activity.js +0 -112
  456. /package/skeleton/protocols/{spider → spir}/templates/spec.md +0 -0
@@ -1,330 +0,0 @@
1
- /**
2
- * Multi-Agent Consultation
3
- *
4
- * Runs parallel 3-way consultations with external AI models (gemini, codex, claude)
5
- * and collects feedback with APPROVE/REQUEST_CHANGES verdicts.
6
- */
7
- import { spawn } from 'node:child_process';
8
- import chalk from 'chalk';
9
- /**
10
- * Default consultation timeout (ms)
11
- */
12
- const DEFAULT_TIMEOUT = 300000; // 5 minutes
13
- /**
14
- * Run a single consultation with an AI model
15
- */
16
- async function runConsultation(model, command, args, options = {}) {
17
- const timeout = options.timeout || DEFAULT_TIMEOUT;
18
- return new Promise((resolve) => {
19
- const proc = spawn(command, args, {
20
- cwd: options.cwd,
21
- shell: true,
22
- stdio: ['ignore', 'pipe', 'pipe'],
23
- });
24
- let output = '';
25
- let stderr = '';
26
- let timedOut = false;
27
- const timeoutId = setTimeout(() => {
28
- timedOut = true;
29
- proc.kill('SIGTERM');
30
- }, timeout);
31
- proc.stdout.on('data', (data) => {
32
- output += data.toString();
33
- });
34
- proc.stderr.on('data', (data) => {
35
- stderr += data.toString();
36
- });
37
- proc.on('close', (code) => {
38
- clearTimeout(timeoutId);
39
- if (timedOut) {
40
- resolve({
41
- output,
42
- error: `Consultation timed out after ${timeout}ms`,
43
- success: false,
44
- });
45
- }
46
- else {
47
- resolve({
48
- output: output + stderr,
49
- error: code !== 0 ? `Exit code: ${code}` : undefined,
50
- success: code === 0,
51
- });
52
- }
53
- });
54
- proc.on('error', (err) => {
55
- clearTimeout(timeoutId);
56
- resolve({
57
- output: '',
58
- error: err.message,
59
- success: false,
60
- });
61
- });
62
- });
63
- }
64
- /**
65
- * Parse verdict from consultation output
66
- * Looks for APPROVE or REQUEST_CHANGES markers
67
- */
68
- export function parseVerdict(output) {
69
- // Look for explicit verdict markers
70
- if (/verdict:\s*approve/i.test(output) || /\[APPROVE\]/i.test(output)) {
71
- return 'APPROVE';
72
- }
73
- if (/verdict:\s*request_changes/i.test(output) || /\[REQUEST_CHANGES\]/i.test(output)) {
74
- return 'REQUEST_CHANGES';
75
- }
76
- // Look for implicit approval signals
77
- if (/looks good/i.test(output) && !/but|however|should|could/i.test(output.slice(output.search(/looks good/i), output.search(/looks good/i) + 100))) {
78
- return 'APPROVE';
79
- }
80
- if (/approved?/i.test(output) && !/not approved/i.test(output)) {
81
- return 'APPROVE';
82
- }
83
- // Look for implicit change request signals
84
- if (/must\s+(be\s+)?fix|should\s+(be\s+)?fix|need(s)?\s+to\s+fix|critical\s+issue|blocking\s+issue/i.test(output)) {
85
- return 'REQUEST_CHANGES';
86
- }
87
- // Default to approve if no clear signal (lenient mode)
88
- return 'APPROVE';
89
- }
90
- /**
91
- * Extract summary from consultation output
92
- * Takes the first paragraph or bullet points
93
- */
94
- export function extractSummary(output, maxLength = 500) {
95
- // Try to find a summary section
96
- const summaryMatch = output.match(/##?\s*Summary\s*\n([\s\S]*?)(?=\n##|\n\*\*|$)/i);
97
- if (summaryMatch) {
98
- return truncate(summaryMatch[1].trim(), maxLength);
99
- }
100
- // Try to find verdict section
101
- const verdictMatch = output.match(/##?\s*Verdict\s*\n([\s\S]*?)(?=\n##|\n\*\*|$)/i);
102
- if (verdictMatch) {
103
- return truncate(verdictMatch[1].trim(), maxLength);
104
- }
105
- // Fall back to first paragraph
106
- const paragraphs = output.split(/\n\n+/);
107
- for (const p of paragraphs) {
108
- const trimmed = p.trim();
109
- if (trimmed.length > 50 && !trimmed.startsWith('#') && !trimmed.startsWith('```')) {
110
- return truncate(trimmed, maxLength);
111
- }
112
- }
113
- return truncate(output.trim(), maxLength);
114
- }
115
- function truncate(text, maxLength) {
116
- if (text.length <= maxLength)
117
- return text;
118
- return text.slice(0, maxLength - 3) + '...';
119
- }
120
- /**
121
- * Build the consult command for a model
122
- */
123
- function buildConsultCommand(model, subcommand, identifier, reviewType) {
124
- const args = ['--model', model, subcommand, identifier];
125
- if (reviewType) {
126
- args.push('--type', reviewType);
127
- }
128
- return {
129
- command: 'consult',
130
- args,
131
- };
132
- }
133
- /**
134
- * Run parallel 3-way consultation
135
- */
136
- export async function runParallelConsultation(config, context) {
137
- const { subcommand, identifier, cwd, timeout = DEFAULT_TIMEOUT, dryRun } = context;
138
- const { models, type: reviewType, parallel = true } = config;
139
- if (dryRun) {
140
- console.log(chalk.yellow(`[consultation] [DRY RUN] Would run ${models.length}-way consultation:`));
141
- for (const model of models) {
142
- const { command, args } = buildConsultCommand(model, subcommand, identifier, reviewType);
143
- console.log(chalk.yellow(` ${command} ${args.join(' ')}`));
144
- }
145
- return models.map(model => ({
146
- model,
147
- verdict: 'APPROVE',
148
- summary: '[DRY RUN] Simulated approval',
149
- }));
150
- }
151
- console.log(chalk.blue(`[consultation] Running ${models.length}-way parallel consultation...`));
152
- const startTime = Date.now();
153
- // Build commands for each model
154
- const consultations = models.map(model => {
155
- const { command, args } = buildConsultCommand(model, subcommand, identifier, reviewType);
156
- console.log(chalk.blue(`[consultation] Starting ${model}...`));
157
- return {
158
- model,
159
- promise: runConsultation(model, command, args, { timeout, cwd }),
160
- };
161
- });
162
- // Run in parallel or sequentially based on config
163
- const results = [];
164
- if (parallel) {
165
- // Run all in parallel
166
- const outputs = await Promise.all(consultations.map(c => c.promise));
167
- for (let i = 0; i < consultations.length; i++) {
168
- const { model } = consultations[i];
169
- const output = outputs[i];
170
- if (!output.success) {
171
- console.log(chalk.yellow(`[consultation] ${model} failed: ${output.error}`));
172
- results.push({
173
- model,
174
- verdict: 'APPROVE', // Default to approve on failure (lenient)
175
- summary: `Consultation failed: ${output.error}`,
176
- });
177
- }
178
- else {
179
- const verdict = parseVerdict(output.output);
180
- const summary = extractSummary(output.output);
181
- const duration = Date.now() - startTime;
182
- console.log(chalk.blue(`[consultation] ${model} completed (${duration}ms): ${verdict}`));
183
- results.push({ model, verdict, summary });
184
- }
185
- }
186
- }
187
- else {
188
- // Run sequentially
189
- for (const { model, promise } of consultations) {
190
- const output = await promise;
191
- const duration = Date.now() - startTime;
192
- if (!output.success) {
193
- console.log(chalk.yellow(`[consultation] ${model} failed: ${output.error}`));
194
- results.push({
195
- model,
196
- verdict: 'APPROVE',
197
- summary: `Consultation failed: ${output.error}`,
198
- });
199
- }
200
- else {
201
- const verdict = parseVerdict(output.output);
202
- const summary = extractSummary(output.output);
203
- console.log(chalk.blue(`[consultation] ${model} completed (${duration}ms): ${verdict}`));
204
- results.push({ model, verdict, summary });
205
- }
206
- }
207
- }
208
- const totalDuration = Date.now() - startTime;
209
- console.log(chalk.blue(`[consultation] All consultations complete (${totalDuration}ms)`));
210
- return results;
211
- }
212
- /**
213
- * Run consultation loop with revision support
214
- *
215
- * If any model returns REQUEST_CHANGES, allows revision and re-consultation
216
- * up to max_rounds times.
217
- */
218
- export async function runConsultationLoop(config, context) {
219
- const maxRounds = config.max_rounds || 3;
220
- let round = 1;
221
- while (round <= maxRounds) {
222
- console.log(chalk.blue(`[consultation] Round ${round}/${maxRounds}`));
223
- const feedback = await runParallelConsultation(config, context);
224
- // Check if all approved
225
- const allApproved = feedback.every(f => f.verdict === 'APPROVE');
226
- if (allApproved) {
227
- console.log(chalk.green(`[consultation] All models approved!`));
228
- return { round, feedback, allApproved: true };
229
- }
230
- // Some models requested changes
231
- const changeRequests = feedback.filter(f => f.verdict === 'REQUEST_CHANGES');
232
- console.log(chalk.yellow(`[consultation] ${changeRequests.length} model(s) requested changes:`));
233
- for (const req of changeRequests) {
234
- console.log(chalk.yellow(` ${req.model}: ${req.summary}`));
235
- }
236
- // Check if we've reached max rounds
237
- if (round >= maxRounds) {
238
- console.log(chalk.red(`[consultation] Max rounds (${maxRounds}) reached without full approval`));
239
- return { round, feedback, allApproved: false };
240
- }
241
- // Call revision callback if provided
242
- if (context.onRevisionNeeded) {
243
- const shouldContinue = await context.onRevisionNeeded(feedback);
244
- if (!shouldContinue) {
245
- console.log(chalk.yellow(`[consultation] Revision declined, stopping consultation loop`));
246
- return { round, feedback, allApproved: false };
247
- }
248
- }
249
- else {
250
- // No revision callback - just report and exit
251
- console.log(chalk.yellow(`[consultation] Changes requested but no revision handler`));
252
- return { round, feedback, allApproved: false };
253
- }
254
- round++;
255
- }
256
- // Should not reach here
257
- return { round, feedback: [], allApproved: false };
258
- }
259
- /**
260
- * Format consultation results for display
261
- */
262
- export function formatConsultationResults(result) {
263
- const lines = [
264
- `Consultation Results (Round ${result.round}):`,
265
- result.allApproved ? chalk.green(' ✓ All models approved') : chalk.yellow(' ⚠ Not all models approved'),
266
- '',
267
- ];
268
- for (const feedback of result.feedback) {
269
- const icon = feedback.verdict === 'APPROVE' ? '✓' : '✗';
270
- const color = feedback.verdict === 'APPROVE' ? chalk.green : chalk.yellow;
271
- lines.push(color(` ${icon} ${feedback.model}: ${feedback.verdict}`));
272
- if (feedback.summary) {
273
- lines.push(` ${feedback.summary.slice(0, 100)}...`);
274
- }
275
- }
276
- return lines.join('\n');
277
- }
278
- /**
279
- * Check if a phase has consultation configured
280
- */
281
- export function hasConsultation(phaseConfig) {
282
- return phaseConfig.consultation !== undefined &&
283
- phaseConfig.consultation.models !== undefined &&
284
- phaseConfig.consultation.models.length > 0;
285
- }
286
- /**
287
- * Get the default consultation config for common review types
288
- */
289
- export function getDefaultConsultationConfig(type) {
290
- const defaultModels = ['gemini', 'codex', 'claude'];
291
- switch (type) {
292
- case 'spec-review':
293
- return {
294
- on: 'review',
295
- models: defaultModels,
296
- type: 'spec-review',
297
- parallel: true,
298
- max_rounds: 3,
299
- next: 'plan',
300
- };
301
- case 'plan-review':
302
- return {
303
- on: 'review',
304
- models: defaultModels,
305
- type: 'plan-review',
306
- parallel: true,
307
- max_rounds: 3,
308
- next: 'implement',
309
- };
310
- case 'impl-review':
311
- return {
312
- on: 'complete',
313
- models: defaultModels,
314
- type: 'impl-review',
315
- parallel: true,
316
- max_rounds: 2,
317
- next: 'defend',
318
- };
319
- default:
320
- return {
321
- on: 'review',
322
- models: defaultModels,
323
- type: type,
324
- parallel: true,
325
- max_rounds: 2,
326
- next: '',
327
- };
328
- }
329
- }
330
- //# sourceMappingURL=consultation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"consultation.js","sourceRoot":"","sources":["../../../src/commands/porch/consultation.ts"],"names":[],"mappings":"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"}
@@ -1,99 +0,0 @@
1
- /**
2
- * Porch Notifications
3
- *
4
- * Simple notification system for porch events.
5
- * Supports console logging and optional desktop notifications.
6
- */
7
- import type { ConsultationFeedback } from './types.js';
8
- /**
9
- * Notification event types
10
- */
11
- export type NotificationEvent = 'phase-start' | 'phase-complete' | 'gate-pending' | 'gate-approved' | 'consultation-start' | 'consultation-complete' | 'check-failed' | 'blocked' | 'error';
12
- /**
13
- * Notification payload
14
- */
15
- export interface NotificationPayload {
16
- event: NotificationEvent;
17
- projectId: string;
18
- phase?: string;
19
- message: string;
20
- details?: string;
21
- }
22
- /**
23
- * Send a notification
24
- */
25
- export declare function notify(payload: NotificationPayload, options?: {
26
- desktop?: boolean;
27
- }): Promise<void>;
28
- /**
29
- * Notify phase start
30
- */
31
- export declare function notifyPhaseStart(projectId: string, phase: string, options?: {
32
- desktop?: boolean;
33
- }): Promise<void>;
34
- /**
35
- * Notify phase complete
36
- */
37
- export declare function notifyPhaseComplete(projectId: string, phase: string, options?: {
38
- desktop?: boolean;
39
- }): Promise<void>;
40
- /**
41
- * Notify gate pending approval
42
- */
43
- export declare function notifyGatePending(projectId: string, phase: string, gateName: string, options?: {
44
- desktop?: boolean;
45
- }): Promise<void>;
46
- /**
47
- * Notify gate approved
48
- */
49
- export declare function notifyGateApproved(projectId: string, gateName: string, options?: {
50
- desktop?: boolean;
51
- }): Promise<void>;
52
- /**
53
- * Notify consultation start
54
- */
55
- export declare function notifyConsultationStart(projectId: string, phase: string, models: string[], options?: {
56
- desktop?: boolean;
57
- }): Promise<void>;
58
- /**
59
- * Notify consultation complete
60
- */
61
- export declare function notifyConsultationComplete(projectId: string, phase: string, feedback: ConsultationFeedback[], allApproved: boolean, options?: {
62
- desktop?: boolean;
63
- }): Promise<void>;
64
- /**
65
- * Notify check failed
66
- */
67
- export declare function notifyCheckFailed(projectId: string, phase: string, checkName: string, error: string, options?: {
68
- desktop?: boolean;
69
- }): Promise<void>;
70
- /**
71
- * Notify blocked
72
- */
73
- export declare function notifyBlocked(projectId: string, reason: string, options?: {
74
- desktop?: boolean;
75
- }): Promise<void>;
76
- /**
77
- * Notify error
78
- */
79
- export declare function notifyError(projectId: string, error: string, options?: {
80
- desktop?: boolean;
81
- }): Promise<void>;
82
- /**
83
- * Create a notification context for a project
84
- * Returns bound notification functions
85
- */
86
- export declare function createNotifier(projectId: string, options?: {
87
- desktop?: boolean;
88
- }): {
89
- phaseStart: (phase: string) => Promise<void>;
90
- phaseComplete: (phase: string) => Promise<void>;
91
- gatePending: (phase: string, gateName: string) => Promise<void>;
92
- gateApproved: (gateName: string) => Promise<void>;
93
- consultationStart: (phase: string, models: string[]) => Promise<void>;
94
- consultationComplete: (phase: string, feedback: ConsultationFeedback[], allApproved: boolean) => Promise<void>;
95
- checkFailed: (phase: string, checkName: string, error: string) => Promise<void>;
96
- blocked: (reason: string) => Promise<void>;
97
- error: (error: string) => Promise<void>;
98
- };
99
- //# sourceMappingURL=notifications.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/notifications.ts"],"names":[],"mappings":"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"}
@@ -1,223 +0,0 @@
1
- /**
2
- * Porch Notifications
3
- *
4
- * Simple notification system for porch events.
5
- * Supports console logging and optional desktop notifications.
6
- */
7
- import { spawn } from 'node:child_process';
8
- import chalk from 'chalk';
9
- /**
10
- * Send a desktop notification (macOS only)
11
- * Fails silently if osascript is not available
12
- */
13
- async function sendDesktopNotification(title, message) {
14
- if (process.platform !== 'darwin') {
15
- return;
16
- }
17
- return new Promise((resolve) => {
18
- const script = `display notification "${message.replace(/"/g, '\\"')}" with title "${title.replace(/"/g, '\\"')}"`;
19
- const proc = spawn('osascript', ['-e', script], { stdio: 'ignore' });
20
- proc.on('close', () => resolve());
21
- proc.on('error', () => resolve());
22
- // Don't wait forever
23
- setTimeout(() => resolve(), 2000);
24
- });
25
- }
26
- /**
27
- * Format and log a notification to console
28
- */
29
- function logNotification(payload) {
30
- const { event, projectId, phase, message, details } = payload;
31
- let icon;
32
- let color;
33
- switch (event) {
34
- case 'phase-start':
35
- icon = '>';
36
- color = chalk.blue;
37
- break;
38
- case 'phase-complete':
39
- icon = '✓';
40
- color = chalk.green;
41
- break;
42
- case 'gate-pending':
43
- icon = '◉';
44
- color = chalk.yellow;
45
- break;
46
- case 'gate-approved':
47
- icon = '✓';
48
- color = chalk.green;
49
- break;
50
- case 'consultation-start':
51
- icon = '⟳';
52
- color = chalk.blue;
53
- break;
54
- case 'consultation-complete':
55
- icon = '✓';
56
- color = chalk.green;
57
- break;
58
- case 'check-failed':
59
- icon = '✗';
60
- color = chalk.red;
61
- break;
62
- case 'blocked':
63
- icon = '!';
64
- color = chalk.yellow;
65
- break;
66
- case 'error':
67
- icon = '✗';
68
- color = chalk.red;
69
- break;
70
- default:
71
- icon = '•';
72
- color = chalk.gray;
73
- }
74
- const prefix = phase
75
- ? `[porch:${projectId}:${phase}]`
76
- : `[porch:${projectId}]`;
77
- console.log(color(`${icon} ${prefix} ${message}`));
78
- if (details) {
79
- console.log(chalk.gray(` ${details}`));
80
- }
81
- }
82
- /**
83
- * Send a notification
84
- */
85
- export async function notify(payload, options = {}) {
86
- // Always log to console
87
- logNotification(payload);
88
- // Desktop notification for important events
89
- if (options.desktop) {
90
- const shouldNotify = payload.event === 'gate-pending' ||
91
- payload.event === 'consultation-complete' ||
92
- payload.event === 'check-failed' ||
93
- payload.event === 'blocked' ||
94
- payload.event === 'error';
95
- if (shouldNotify) {
96
- const title = `Porch: ${payload.projectId}`;
97
- await sendDesktopNotification(title, payload.message);
98
- }
99
- }
100
- }
101
- /**
102
- * Notify phase start
103
- */
104
- export async function notifyPhaseStart(projectId, phase, options = {}) {
105
- await notify({
106
- event: 'phase-start',
107
- projectId,
108
- phase,
109
- message: `Starting phase: ${phase}`,
110
- }, options);
111
- }
112
- /**
113
- * Notify phase complete
114
- */
115
- export async function notifyPhaseComplete(projectId, phase, options = {}) {
116
- await notify({
117
- event: 'phase-complete',
118
- projectId,
119
- phase,
120
- message: `Completed phase: ${phase}`,
121
- }, options);
122
- }
123
- /**
124
- * Notify gate pending approval
125
- */
126
- export async function notifyGatePending(projectId, phase, gateName, options = {}) {
127
- await notify({
128
- event: 'gate-pending',
129
- projectId,
130
- phase,
131
- message: `Gate pending: ${gateName}`,
132
- details: `Run: porch approve ${projectId} ${gateName}`,
133
- }, options);
134
- }
135
- /**
136
- * Notify gate approved
137
- */
138
- export async function notifyGateApproved(projectId, gateName, options = {}) {
139
- await notify({
140
- event: 'gate-approved',
141
- projectId,
142
- message: `Gate approved: ${gateName}`,
143
- }, options);
144
- }
145
- /**
146
- * Notify consultation start
147
- */
148
- export async function notifyConsultationStart(projectId, phase, models, options = {}) {
149
- await notify({
150
- event: 'consultation-start',
151
- projectId,
152
- phase,
153
- message: `Starting ${models.length}-way consultation`,
154
- details: `Models: ${models.join(', ')}`,
155
- }, options);
156
- }
157
- /**
158
- * Notify consultation complete
159
- */
160
- export async function notifyConsultationComplete(projectId, phase, feedback, allApproved, options = {}) {
161
- const approveCount = feedback.filter((f) => f.verdict === 'APPROVE').length;
162
- const changeCount = feedback.filter((f) => f.verdict === 'REQUEST_CHANGES').length;
163
- const message = allApproved
164
- ? `Consultation complete: All ${approveCount} models approved`
165
- : `Consultation complete: ${approveCount} approved, ${changeCount} requested changes`;
166
- await notify({
167
- event: 'consultation-complete',
168
- projectId,
169
- phase,
170
- message,
171
- details: feedback.map((f) => `${f.model}: ${f.verdict}`).join(', '),
172
- }, options);
173
- }
174
- /**
175
- * Notify check failed
176
- */
177
- export async function notifyCheckFailed(projectId, phase, checkName, error, options = {}) {
178
- await notify({
179
- event: 'check-failed',
180
- projectId,
181
- phase,
182
- message: `Check failed: ${checkName}`,
183
- details: error,
184
- }, options);
185
- }
186
- /**
187
- * Notify blocked
188
- */
189
- export async function notifyBlocked(projectId, reason, options = {}) {
190
- await notify({
191
- event: 'blocked',
192
- projectId,
193
- message: `Blocked: ${reason}`,
194
- }, options);
195
- }
196
- /**
197
- * Notify error
198
- */
199
- export async function notifyError(projectId, error, options = {}) {
200
- await notify({
201
- event: 'error',
202
- projectId,
203
- message: `Error: ${error}`,
204
- }, options);
205
- }
206
- /**
207
- * Create a notification context for a project
208
- * Returns bound notification functions
209
- */
210
- export function createNotifier(projectId, options = {}) {
211
- return {
212
- phaseStart: (phase) => notifyPhaseStart(projectId, phase, options),
213
- phaseComplete: (phase) => notifyPhaseComplete(projectId, phase, options),
214
- gatePending: (phase, gateName) => notifyGatePending(projectId, phase, gateName, options),
215
- gateApproved: (gateName) => notifyGateApproved(projectId, gateName, options),
216
- consultationStart: (phase, models) => notifyConsultationStart(projectId, phase, models, options),
217
- consultationComplete: (phase, feedback, allApproved) => notifyConsultationComplete(projectId, phase, feedback, allApproved, options),
218
- checkFailed: (phase, checkName, error) => notifyCheckFailed(projectId, phase, checkName, error, options),
219
- blocked: (reason) => notifyBlocked(projectId, reason, options),
220
- error: (error) => notifyError(projectId, error, options),
221
- };
222
- }
223
- //# sourceMappingURL=notifications.js.map