@cluesmith/codev 3.2.4 → 3.3.0

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 (358) hide show
  1. package/dashboard-dist/assets/index-BZRTEMtH.css +32 -0
  2. package/dashboard-dist/assets/{index-BZ1x7x1X.js → index-JCbkpAcV.js} +33 -33
  3. package/dashboard-dist/assets/index-JCbkpAcV.js.map +1 -0
  4. package/dashboard-dist/index.html +2 -2
  5. package/dist/agent-farm/cli.d.ts.map +1 -1
  6. package/dist/agent-farm/cli.js +142 -0
  7. package/dist/agent-farm/cli.js.map +1 -1
  8. package/dist/agent-farm/commands/cleanup.d.ts.map +1 -1
  9. package/dist/agent-farm/commands/cleanup.js +16 -0
  10. package/dist/agent-farm/commands/cleanup.js.map +1 -1
  11. package/dist/agent-farm/commands/inbox.d.ts +42 -0
  12. package/dist/agent-farm/commands/inbox.d.ts.map +1 -0
  13. package/dist/agent-farm/commands/inbox.js +129 -0
  14. package/dist/agent-farm/commands/inbox.js.map +1 -0
  15. package/dist/agent-farm/commands/interrupt.d.ts +20 -0
  16. package/dist/agent-farm/commands/interrupt.d.ts.map +1 -0
  17. package/dist/agent-farm/commands/interrupt.js +65 -0
  18. package/dist/agent-farm/commands/interrupt.js.map +1 -0
  19. package/dist/agent-farm/commands/reset/constants.d.ts +52 -0
  20. package/dist/agent-farm/commands/reset/constants.d.ts.map +1 -0
  21. package/dist/agent-farm/commands/reset/constants.js +52 -0
  22. package/dist/agent-farm/commands/reset/constants.js.map +1 -0
  23. package/dist/agent-farm/commands/reset/context.d.ts +230 -0
  24. package/dist/agent-farm/commands/reset/context.d.ts.map +1 -0
  25. package/dist/agent-farm/commands/reset/context.js +428 -0
  26. package/dist/agent-farm/commands/reset/context.js.map +1 -0
  27. package/dist/agent-farm/commands/reset/index.d.ts +192 -0
  28. package/dist/agent-farm/commands/reset/index.d.ts.map +1 -0
  29. package/dist/agent-farm/commands/reset/index.js +488 -0
  30. package/dist/agent-farm/commands/reset/index.js.map +1 -0
  31. package/dist/agent-farm/commands/reset/receipt.d.ts +97 -0
  32. package/dist/agent-farm/commands/reset/receipt.d.ts.map +1 -0
  33. package/dist/agent-farm/commands/reset/receipt.js +149 -0
  34. package/dist/agent-farm/commands/reset/receipt.js.map +1 -0
  35. package/dist/agent-farm/commands/reset/reorient.d.ts +117 -0
  36. package/dist/agent-farm/commands/reset/reorient.d.ts.map +1 -0
  37. package/dist/agent-farm/commands/reset/reorient.js +313 -0
  38. package/dist/agent-farm/commands/reset/reorient.js.map +1 -0
  39. package/dist/agent-farm/commands/reset.d.ts +19 -0
  40. package/dist/agent-farm/commands/reset.d.ts.map +1 -0
  41. package/dist/agent-farm/commands/reset.js +292 -0
  42. package/dist/agent-farm/commands/reset.js.map +1 -0
  43. package/dist/agent-farm/commands/send.d.ts.map +1 -1
  44. package/dist/agent-farm/commands/send.js +49 -8
  45. package/dist/agent-farm/commands/send.js.map +1 -1
  46. package/dist/agent-farm/commands/spawn-worktree.d.ts +105 -6
  47. package/dist/agent-farm/commands/spawn-worktree.d.ts.map +1 -1
  48. package/dist/agent-farm/commands/spawn-worktree.js +289 -66
  49. package/dist/agent-farm/commands/spawn-worktree.js.map +1 -1
  50. package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
  51. package/dist/agent-farm/commands/spawn.js +13 -1
  52. package/dist/agent-farm/commands/spawn.js.map +1 -1
  53. package/dist/agent-farm/commands/status.d.ts.map +1 -1
  54. package/dist/agent-farm/commands/status.js +80 -8
  55. package/dist/agent-farm/commands/status.js.map +1 -1
  56. package/dist/agent-farm/db/index.d.ts +1 -1
  57. package/dist/agent-farm/db/index.d.ts.map +1 -1
  58. package/dist/agent-farm/db/index.js +80 -1
  59. package/dist/agent-farm/db/index.js.map +1 -1
  60. package/dist/agent-farm/db/mailbox.d.ts +222 -0
  61. package/dist/agent-farm/db/mailbox.d.ts.map +1 -0
  62. package/dist/agent-farm/db/mailbox.js +304 -0
  63. package/dist/agent-farm/db/mailbox.js.map +1 -0
  64. package/dist/agent-farm/db/schema.d.ts +1 -1
  65. package/dist/agent-farm/db/schema.d.ts.map +1 -1
  66. package/dist/agent-farm/db/schema.js +35 -0
  67. package/dist/agent-farm/db/schema.js.map +1 -1
  68. package/dist/agent-farm/db/types.d.ts +45 -0
  69. package/dist/agent-farm/db/types.d.ts.map +1 -1
  70. package/dist/agent-farm/db/types.js.map +1 -1
  71. package/dist/agent-farm/lib/builder-lookup.d.ts +1 -1
  72. package/dist/agent-farm/lib/builder-lookup.js +2 -2
  73. package/dist/agent-farm/lib/builder-lookup.js.map +1 -1
  74. package/dist/agent-farm/lib/reconnect-backoff.d.ts +54 -0
  75. package/dist/agent-farm/lib/reconnect-backoff.d.ts.map +1 -0
  76. package/dist/agent-farm/lib/reconnect-backoff.js +47 -0
  77. package/dist/agent-farm/lib/reconnect-backoff.js.map +1 -0
  78. package/dist/agent-farm/lib/tower-client.d.ts +16 -6
  79. package/dist/agent-farm/lib/tower-client.d.ts.map +1 -1
  80. package/dist/agent-farm/lib/tower-client.js +37 -6
  81. package/dist/agent-farm/lib/tower-client.js.map +1 -1
  82. package/dist/agent-farm/lib/tunnel-client.d.ts +69 -1
  83. package/dist/agent-farm/lib/tunnel-client.d.ts.map +1 -1
  84. package/dist/agent-farm/lib/tunnel-client.js +218 -27
  85. package/dist/agent-farm/lib/tunnel-client.js.map +1 -1
  86. package/dist/agent-farm/servers/cron-delivery.d.ts +72 -0
  87. package/dist/agent-farm/servers/cron-delivery.d.ts.map +1 -0
  88. package/dist/agent-farm/servers/cron-delivery.js +80 -0
  89. package/dist/agent-farm/servers/cron-delivery.js.map +1 -0
  90. package/dist/agent-farm/servers/delayed-send.d.ts +85 -0
  91. package/dist/agent-farm/servers/delayed-send.d.ts.map +1 -0
  92. package/dist/agent-farm/servers/delayed-send.js +165 -0
  93. package/dist/agent-farm/servers/delayed-send.js.map +1 -0
  94. package/dist/agent-farm/servers/gate-profiles.d.ts +67 -0
  95. package/dist/agent-farm/servers/gate-profiles.d.ts.map +1 -0
  96. package/dist/agent-farm/servers/gate-profiles.js +113 -0
  97. package/dist/agent-farm/servers/gate-profiles.js.map +1 -0
  98. package/dist/agent-farm/servers/mailbox-delivery.d.ts +370 -0
  99. package/dist/agent-farm/servers/mailbox-delivery.d.ts.map +1 -0
  100. package/dist/agent-farm/servers/mailbox-delivery.js +617 -0
  101. package/dist/agent-farm/servers/mailbox-delivery.js.map +1 -0
  102. package/dist/agent-farm/servers/mailbox-wiring.d.ts +125 -0
  103. package/dist/agent-farm/servers/mailbox-wiring.d.ts.map +1 -0
  104. package/dist/agent-farm/servers/mailbox-wiring.js +425 -0
  105. package/dist/agent-farm/servers/mailbox-wiring.js.map +1 -0
  106. package/dist/agent-farm/servers/message-write.d.ts +53 -1
  107. package/dist/agent-farm/servers/message-write.d.ts.map +1 -1
  108. package/dist/agent-farm/servers/message-write.js +63 -0
  109. package/dist/agent-farm/servers/message-write.js.map +1 -1
  110. package/dist/agent-farm/servers/overview.d.ts.map +1 -1
  111. package/dist/agent-farm/servers/overview.js +23 -4
  112. package/dist/agent-farm/servers/overview.js.map +1 -1
  113. package/dist/agent-farm/servers/render-gate.d.ts +141 -0
  114. package/dist/agent-farm/servers/render-gate.d.ts.map +1 -0
  115. package/dist/agent-farm/servers/render-gate.js +251 -0
  116. package/dist/agent-farm/servers/render-gate.js.map +1 -0
  117. package/dist/agent-farm/servers/session-submit.d.ts +90 -0
  118. package/dist/agent-farm/servers/session-submit.d.ts.map +1 -0
  119. package/dist/agent-farm/servers/session-submit.js +127 -0
  120. package/dist/agent-farm/servers/session-submit.js.map +1 -0
  121. package/dist/agent-farm/servers/tower-cron.d.ts +10 -7
  122. package/dist/agent-farm/servers/tower-cron.d.ts.map +1 -1
  123. package/dist/agent-farm/servers/tower-cron.js +58 -53
  124. package/dist/agent-farm/servers/tower-cron.js.map +1 -1
  125. package/dist/agent-farm/servers/tower-instances.d.ts +14 -2
  126. package/dist/agent-farm/servers/tower-instances.d.ts.map +1 -1
  127. package/dist/agent-farm/servers/tower-instances.js +78 -16
  128. package/dist/agent-farm/servers/tower-instances.js.map +1 -1
  129. package/dist/agent-farm/servers/tower-messages.d.ts +38 -1
  130. package/dist/agent-farm/servers/tower-messages.d.ts.map +1 -1
  131. package/dist/agent-farm/servers/tower-messages.js +106 -1
  132. package/dist/agent-farm/servers/tower-messages.js.map +1 -1
  133. package/dist/agent-farm/servers/tower-routes.d.ts +16 -4
  134. package/dist/agent-farm/servers/tower-routes.d.ts.map +1 -1
  135. package/dist/agent-farm/servers/tower-routes.js +670 -105
  136. package/dist/agent-farm/servers/tower-routes.js.map +1 -1
  137. package/dist/agent-farm/servers/tower-server.js +163 -31
  138. package/dist/agent-farm/servers/tower-server.js.map +1 -1
  139. package/dist/agent-farm/servers/tower-terminals.d.ts +17 -2
  140. package/dist/agent-farm/servers/tower-terminals.d.ts.map +1 -1
  141. package/dist/agent-farm/servers/tower-terminals.js +104 -122
  142. package/dist/agent-farm/servers/tower-terminals.js.map +1 -1
  143. package/dist/agent-farm/servers/tower-tunnel.d.ts.map +1 -1
  144. package/dist/agent-farm/servers/tower-tunnel.js +63 -4
  145. package/dist/agent-farm/servers/tower-tunnel.js.map +1 -1
  146. package/dist/agent-farm/servers/tower-types.d.ts +2 -1
  147. package/dist/agent-farm/servers/tower-types.d.ts.map +1 -1
  148. package/dist/agent-farm/servers/tower-utils.d.ts +64 -1
  149. package/dist/agent-farm/servers/tower-utils.d.ts.map +1 -1
  150. package/dist/agent-farm/servers/tower-utils.js +168 -1
  151. package/dist/agent-farm/servers/tower-utils.js.map +1 -1
  152. package/dist/agent-farm/servers/tower-websocket.d.ts.map +1 -1
  153. package/dist/agent-farm/servers/tower-websocket.js +6 -21
  154. package/dist/agent-farm/servers/tower-websocket.js.map +1 -1
  155. package/dist/agent-farm/servers/write-queue.d.ts +35 -0
  156. package/dist/agent-farm/servers/write-queue.d.ts.map +1 -0
  157. package/dist/agent-farm/servers/write-queue.js +56 -0
  158. package/dist/agent-farm/servers/write-queue.js.map +1 -0
  159. package/dist/agent-farm/types.d.ts +39 -0
  160. package/dist/agent-farm/types.d.ts.map +1 -1
  161. package/dist/agent-farm/utils/agent-names.d.ts +2 -2
  162. package/dist/agent-farm/utils/agent-names.d.ts.map +1 -1
  163. package/dist/agent-farm/utils/agent-names.js +3 -3
  164. package/dist/agent-farm/utils/agent-names.js.map +1 -1
  165. package/dist/agent-farm/utils/architect-name.d.ts +2 -2
  166. package/dist/agent-farm/utils/architect-name.d.ts.map +1 -1
  167. package/dist/agent-farm/utils/architect-name.js +3 -3
  168. package/dist/agent-farm/utils/architect-name.js.map +1 -1
  169. package/dist/agent-farm/utils/config.d.ts +13 -0
  170. package/dist/agent-farm/utils/config.d.ts.map +1 -1
  171. package/dist/agent-farm/utils/config.js +33 -1
  172. package/dist/agent-farm/utils/config.js.map +1 -1
  173. package/dist/agent-farm/utils/harness.d.ts +103 -7
  174. package/dist/agent-farm/utils/harness.d.ts.map +1 -1
  175. package/dist/agent-farm/utils/harness.js +126 -19
  176. package/dist/agent-farm/utils/harness.js.map +1 -1
  177. package/dist/cli.d.ts.map +1 -1
  178. package/dist/cli.js +6 -32
  179. package/dist/cli.js.map +1 -1
  180. package/dist/commands/consult/cli-options.d.ts +34 -0
  181. package/dist/commands/consult/cli-options.d.ts.map +1 -0
  182. package/dist/commands/consult/cli-options.js +67 -0
  183. package/dist/commands/consult/cli-options.js.map +1 -0
  184. package/dist/commands/consult/index.d.ts +56 -2
  185. package/dist/commands/consult/index.d.ts.map +1 -1
  186. package/dist/commands/consult/index.js +272 -28
  187. package/dist/commands/consult/index.js.map +1 -1
  188. package/dist/commands/consult/metrics.d.ts +42 -0
  189. package/dist/commands/consult/metrics.d.ts.map +1 -1
  190. package/dist/commands/consult/metrics.js +129 -9
  191. package/dist/commands/consult/metrics.js.map +1 -1
  192. package/dist/commands/doctor.d.ts.map +1 -1
  193. package/dist/commands/doctor.js +71 -19
  194. package/dist/commands/doctor.js.map +1 -1
  195. package/dist/commands/porch/checks.d.ts +23 -0
  196. package/dist/commands/porch/checks.d.ts.map +1 -1
  197. package/dist/commands/porch/checks.js +60 -0
  198. package/dist/commands/porch/checks.js.map +1 -1
  199. package/dist/commands/porch/config.d.ts +20 -0
  200. package/dist/commands/porch/config.d.ts.map +1 -1
  201. package/dist/commands/porch/config.js +20 -0
  202. package/dist/commands/porch/config.js.map +1 -1
  203. package/dist/commands/porch/index.js +21 -28
  204. package/dist/commands/porch/index.js.map +1 -1
  205. package/dist/commands/porch/next.d.ts.map +1 -1
  206. package/dist/commands/porch/next.js +2 -41
  207. package/dist/commands/porch/next.js.map +1 -1
  208. package/dist/lib/config.d.ts +69 -3
  209. package/dist/lib/config.d.ts.map +1 -1
  210. package/dist/lib/config.js +67 -3
  211. package/dist/lib/config.js.map +1 -1
  212. package/dist/lib/consult-lanes.d.ts +149 -0
  213. package/dist/lib/consult-lanes.d.ts.map +1 -0
  214. package/dist/lib/consult-lanes.js +360 -0
  215. package/dist/lib/consult-lanes.js.map +1 -0
  216. package/dist/lib/github.js +1 -1
  217. package/dist/lib/github.js.map +1 -1
  218. package/dist/lib/prompt-behavior-metrics.d.ts +67 -0
  219. package/dist/lib/prompt-behavior-metrics.d.ts.map +1 -0
  220. package/dist/lib/prompt-behavior-metrics.js +290 -0
  221. package/dist/lib/prompt-behavior-metrics.js.map +1 -0
  222. package/dist/lib/skeleton.d.ts +22 -1
  223. package/dist/lib/skeleton.d.ts.map +1 -1
  224. package/dist/lib/skeleton.js +120 -0
  225. package/dist/lib/skeleton.js.map +1 -1
  226. package/dist/lib/test-env.d.ts +74 -0
  227. package/dist/lib/test-env.d.ts.map +1 -0
  228. package/dist/lib/test-env.js +92 -0
  229. package/dist/lib/test-env.js.map +1 -0
  230. package/dist/terminal/pty-manager.d.ts +2 -0
  231. package/dist/terminal/pty-manager.d.ts.map +1 -1
  232. package/dist/terminal/pty-manager.js +16 -6
  233. package/dist/terminal/pty-manager.js.map +1 -1
  234. package/dist/terminal/pty-session.d.ts +131 -0
  235. package/dist/terminal/pty-session.d.ts.map +1 -1
  236. package/dist/terminal/pty-session.js +232 -39
  237. package/dist/terminal/pty-session.js.map +1 -1
  238. package/dist/terminal/ring-buffer.d.ts +39 -6
  239. package/dist/terminal/ring-buffer.d.ts.map +1 -1
  240. package/dist/terminal/ring-buffer.js +74 -6
  241. package/dist/terminal/ring-buffer.js.map +1 -1
  242. package/dist/terminal/session-manager.d.ts +53 -0
  243. package/dist/terminal/session-manager.d.ts.map +1 -1
  244. package/dist/terminal/session-manager.js +94 -9
  245. package/dist/terminal/session-manager.js.map +1 -1
  246. package/dist/terminal/session-screen.d.ts +91 -0
  247. package/dist/terminal/session-screen.d.ts.map +1 -0
  248. package/dist/terminal/session-screen.js +135 -0
  249. package/dist/terminal/session-screen.js.map +1 -0
  250. package/dist/terminal/shellper-main.js +2 -1
  251. package/dist/terminal/shellper-main.js.map +1 -1
  252. package/dist/terminal/shellper-process.d.ts +1 -1
  253. package/dist/terminal/shellper-process.d.ts.map +1 -1
  254. package/dist/terminal/shellper-process.js +17 -8
  255. package/dist/terminal/shellper-process.js.map +1 -1
  256. package/dist/terminal/shellper-replay-buffer.d.ts +69 -7
  257. package/dist/terminal/shellper-replay-buffer.d.ts.map +1 -1
  258. package/dist/terminal/shellper-replay-buffer.js +167 -31
  259. package/dist/terminal/shellper-replay-buffer.js.map +1 -1
  260. package/package.json +8 -6
  261. package/skeleton/.claude/skills/afx/SKILL.md +14 -1
  262. package/skeleton/.claude/skills/arch-init/SKILL.md +22 -9
  263. package/skeleton/.claude/skills/arch-save/SKILL.md +183 -0
  264. package/skeleton/.claude/skills/codev/SKILL.md +31 -0
  265. package/skeleton/.claude/skills/runnable-worktrees/SKILL.md +119 -0
  266. package/skeleton/.codex/skills/afx/SKILL.md +14 -1
  267. package/skeleton/.codex/skills/arch-init/SKILL.md +22 -9
  268. package/skeleton/.codex/skills/arch-save/SKILL.md +183 -0
  269. package/skeleton/.codex/skills/codev/SKILL.md +31 -0
  270. package/skeleton/.codex/skills/runnable-worktrees/SKILL.md +119 -0
  271. package/skeleton/protocols/air/builder-prompt.md +28 -47
  272. package/skeleton/protocols/air/consult-types/impl-review.md +17 -34
  273. package/skeleton/protocols/air/consult-types/pr-review.md +14 -37
  274. package/skeleton/protocols/air/prompts/implement.md +20 -73
  275. package/skeleton/protocols/air/prompts/pr.md +22 -54
  276. package/skeleton/protocols/air/protocol.md +40 -71
  277. package/skeleton/protocols/aspir/builder-prompt.md +29 -66
  278. package/skeleton/protocols/aspir/consult-types/impl-review.md +17 -44
  279. package/skeleton/protocols/aspir/consult-types/phase-review.md +17 -44
  280. package/skeleton/protocols/aspir/consult-types/plan-review.md +14 -38
  281. package/skeleton/protocols/aspir/consult-types/pr-review.md +13 -39
  282. package/skeleton/protocols/aspir/consult-types/spec-review.md +13 -33
  283. package/skeleton/protocols/aspir/prompts/implement.md +27 -196
  284. package/skeleton/protocols/aspir/prompts/plan.md +21 -85
  285. package/skeleton/protocols/aspir/prompts/review.md +29 -228
  286. package/skeleton/protocols/aspir/prompts/specify.md +25 -111
  287. package/skeleton/protocols/aspir/protocol.json +10 -0
  288. package/skeleton/protocols/aspir/protocol.md +36 -82
  289. package/skeleton/protocols/bugfix/builder-prompt.md +23 -45
  290. package/skeleton/protocols/bugfix/consult-types/impl-review.md +21 -45
  291. package/skeleton/protocols/bugfix/consult-types/pr-review.md +18 -52
  292. package/skeleton/protocols/bugfix/prompts/fix.md +16 -61
  293. package/skeleton/protocols/bugfix/prompts/investigate.md +18 -62
  294. package/skeleton/protocols/bugfix/prompts/pr.md +22 -57
  295. package/skeleton/protocols/bugfix/protocol.md +44 -50
  296. package/skeleton/protocols/experiment/builder-prompt.md +25 -58
  297. package/skeleton/protocols/experiment/protocol.md +22 -188
  298. package/skeleton/protocols/experiment/templates/notes.md +11 -71
  299. package/skeleton/protocols/maintain/builder-prompt.md +24 -45
  300. package/skeleton/protocols/maintain/consult-types/impl-review.md +17 -44
  301. package/skeleton/protocols/maintain/consult-types/pr-review.md +13 -39
  302. package/skeleton/protocols/maintain/prompts/maintain.md +1 -1
  303. package/skeleton/protocols/maintain/protocol.md +32 -266
  304. package/skeleton/protocols/maintain/templates/maintenance-run.md +11 -0
  305. package/skeleton/protocols/pir/builder-prompt.md +30 -64
  306. package/skeleton/protocols/pir/consult-types/impl-review.md +17 -50
  307. package/skeleton/protocols/pir/consult-types/pr-review.md +11 -40
  308. package/skeleton/protocols/pir/prompts/implement.md +1 -2
  309. package/skeleton/protocols/pir/prompts/plan.md +0 -3
  310. package/skeleton/protocols/pir/prompts/review.md +1 -1
  311. package/skeleton/protocols/pir/protocol.md +54 -177
  312. package/skeleton/protocols/research/builder-prompt.md +27 -58
  313. package/skeleton/protocols/research/protocol.md +28 -153
  314. package/skeleton/protocols/spike/builder-prompt.md +30 -48
  315. package/skeleton/protocols/spike/protocol.md +24 -107
  316. package/skeleton/protocols/spike/templates/findings.md +9 -39
  317. package/skeleton/protocols/spir/builder-prompt.md +33 -62
  318. package/skeleton/protocols/spir/consult-types/impl-review.md +17 -44
  319. package/skeleton/protocols/spir/consult-types/phase-review.md +17 -44
  320. package/skeleton/protocols/spir/consult-types/plan-review.md +14 -38
  321. package/skeleton/protocols/spir/consult-types/pr-review.md +13 -39
  322. package/skeleton/protocols/spir/consult-types/spec-review.md +13 -33
  323. package/skeleton/protocols/spir/prompts/implement.md +26 -195
  324. package/skeleton/protocols/spir/prompts/plan.md +20 -84
  325. package/skeleton/protocols/spir/prompts/review.md +28 -227
  326. package/skeleton/protocols/spir/prompts/specify.md +24 -110
  327. package/skeleton/protocols/spir/protocol.json +10 -0
  328. package/skeleton/protocols/spir/protocol.md +84 -633
  329. package/skeleton/protocols/spir/templates/plan.md +28 -147
  330. package/skeleton/protocols/spir/templates/review.md +21 -80
  331. package/skeleton/protocols/spir/templates/spec.md +24 -118
  332. package/skeleton/resources/commands/agent-farm.md +259 -0
  333. package/skeleton/resources/commands/consult.md +236 -8
  334. package/skeleton/resources/commands/overview.md +1 -0
  335. package/skeleton/roles/architect.md +67 -317
  336. package/skeleton/roles/builder.md +77 -191
  337. package/skeleton/templates/AGENTS.md +2 -0
  338. package/skeleton/templates/CLAUDE.md +2 -0
  339. package/templates/tower.html +39 -2
  340. package/dashboard-dist/assets/index-BZ1x7x1X.js.map +0 -1
  341. package/dashboard-dist/assets/index-DB1KBSNE.css +0 -32
  342. package/dist/agent-farm/servers/send-buffer.d.ts +0 -59
  343. package/dist/agent-farm/servers/send-buffer.d.ts.map +0 -1
  344. package/dist/agent-farm/servers/send-buffer.js +0 -116
  345. package/dist/agent-farm/servers/send-buffer.js.map +0 -1
  346. package/skeleton/porch/prompts/defend.md +0 -108
  347. package/skeleton/porch/prompts/diagnose.md +0 -70
  348. package/skeleton/porch/prompts/evaluate.md +0 -132
  349. package/skeleton/porch/prompts/fix.md +0 -59
  350. package/skeleton/porch/prompts/implement.md +0 -88
  351. package/skeleton/porch/prompts/plan.md +0 -74
  352. package/skeleton/porch/prompts/pr.md +0 -84
  353. package/skeleton/porch/prompts/review.md +0 -249
  354. package/skeleton/porch/prompts/specify.md +0 -53
  355. package/skeleton/porch/prompts/test.md +0 -63
  356. package/skeleton/protocols/aspir/templates/plan.md +0 -184
  357. package/skeleton/protocols/aspir/templates/review.md +0 -120
  358. package/skeleton/protocols/aspir/templates/spec.md +0 -154
@@ -0,0 +1,67 @@
1
+ export interface ScarHit {
2
+ rule: string;
3
+ file: string;
4
+ line: number;
5
+ excerpt: string;
6
+ }
7
+ export interface BehaviorMetrics {
8
+ /** B1 — share of all CMAP verdicts that are REQUEST_CHANGES. */
9
+ b1_requestChangesRate: number;
10
+ b1_verdictCounts: Record<string, number>;
11
+ b1_totalVerdicts: number;
12
+ /** B2 — review rounds per plan phase: max(iteration) per plan_phase. */
13
+ b2_roundsPerPhaseMean: number;
14
+ b2_roundsPerPhaseMedian: number;
15
+ b2_roundsPerPhaseMax: number;
16
+ b2_phaseCount: number;
17
+ /** B3 — candidate scar-rule violations (REQUIRES HUMAN ADJUDICATION). */
18
+ b3_candidateHits: ScarHit[];
19
+ b3_filesScanned: number;
20
+ /** B4 — review rounds per project. */
21
+ b4_roundsPerProjectMean: number;
22
+ b4_roundsPerProjectMedian: number;
23
+ b4_projectCount: number;
24
+ /** Sample provenance. */
25
+ sampleProjects: string[];
26
+ }
27
+ export interface MeasureOptions {
28
+ /**
29
+ * Project directory names to exclude from B1/B2/B4.
30
+ *
31
+ * The baseline is defined as the PRE-PROJECT state (spec 1252, M12): the
32
+ * project doing the measuring must not contaminate its own baseline. Its
33
+ * review verdicts accumulate in its status.yaml *while it runs*, so an
34
+ * unexcluded rerun mid-project would drift from the committed artifact —
35
+ * which is exactly how this option came to exist (the Phase-1 reproduction
36
+ * test failed the moment this project's own iter-1 review landed).
37
+ */
38
+ excludeProjects?: string[];
39
+ /**
40
+ * Project directory names to measure EXCLUSIVELY (an allowlist), applied
41
+ * before `excludeProjects`. Unset means "every project on disk".
42
+ *
43
+ * A frozen baseline needs a frozen sample: the committed baseline artifact
44
+ * was computed over the projects that existed at baseline time, so a
45
+ * reproduction against live history must pin that set — otherwise every
46
+ * subsequent project that runs consultations perturbs the numbers and the
47
+ * reproduction fails for reasons that have nothing to do with the metrics
48
+ * (discovered when project 1286's first review iteration moved B1 160 → 163).
49
+ */
50
+ includeProjects?: string[];
51
+ /**
52
+ * Basename prefixes excluded from B3's prose scan, for the same reason: this
53
+ * project's own thread/review discuss scar rules at length and grow with
54
+ * every phase, so scanning them makes B3 non-reproducible AND self-inflating.
55
+ */
56
+ excludeFilePrefixes?: string[];
57
+ }
58
+ /** This project's own artifacts — excluded from its own baseline by default. */
59
+ export declare const SELF_PROJECT_DIR = "1252-prompt-architecture-single-own";
60
+ export declare const SELF_FILE_PREFIXES: string[];
61
+ /** Collect all behavioural metrics for a repo root. Deterministic over B1–B4. */
62
+ export declare function measureBehavior(root: string, opts?: MeasureOptions): BehaviorMetrics;
63
+ /** Render metrics as the committed markdown baseline artifact. */
64
+ export declare function render(m: BehaviorMetrics): string;
65
+ /** CLI entry, invoked by `packages/codev/scripts/measure-prompt-behavior.ts`. */
66
+ export declare function runCli(argv: string[], cwd: string): string;
67
+ //# sourceMappingURL=prompt-behavior-metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-behavior-metrics.d.ts","sourceRoot":"","sources":["../../src/lib/prompt-behavior-metrics.ts"],"names":[],"mappings":"AAoEA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,gEAAgE;IAChE,qBAAqB,EAAE,MAAM,CAAC;IAC9B,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,gBAAgB,EAAE,MAAM,CAAC;IACzB,wEAAwE;IACxE,qBAAqB,EAAE,MAAM,CAAC;IAC9B,uBAAuB,EAAE,MAAM,CAAC;IAChC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,gBAAgB,EAAE,OAAO,EAAE,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,sCAAsC;IACtC,uBAAuB,EAAE,MAAM,CAAC;IAChC,yBAAyB,EAAE,MAAM,CAAC;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,yBAAyB;IACzB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAiKD,MAAM,WAAW,cAAc;IAC7B;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B;;;;;;;;;;OAUG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC;AAED,gFAAgF;AAChF,eAAO,MAAM,gBAAgB,wCAAwC,CAAC;AACtE,eAAO,MAAM,kBAAkB,UAA0B,CAAC;AAE1D,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,GAAG,eAAe,CAkBxF;AAMD,kEAAkE;AAClE,wBAAgB,MAAM,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,CA2EjD;AAED,iFAAiF;AACjF,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAK1D"}
@@ -0,0 +1,290 @@
1
+ /**
2
+ * prompt-behavior-metrics.ts — behavioural-impact measurement of prompt changes.
3
+ * Spec 1252, criterion M12 / Appendix D / test T14.
4
+ *
5
+ * Lives in `src/lib/` beside `protocol-drift-audit.ts` and
6
+ * `framework-ref-audit.ts` — same module shape (a measurement library, unit
7
+ * tested), and it needs this package's `js-yaml` dependency, which a root-level
8
+ * `scripts/` file cannot resolve in this pnpm workspace. The runnable entry
9
+ * point is `packages/codev/scripts/measure-prompt-behavior.ts`.
10
+ *
11
+ * ## Why this exists
12
+ *
13
+ * M6 counts words. A word reduction that degrades agent compliance is a loss,
14
+ * and word counts cannot see that. This script measures BEHAVIOUR: how often
15
+ * reviewers demand changes, how many rounds phases take, and whether scar rules
16
+ * are being violated.
17
+ *
18
+ * Run at Phase 1 (before any prompt content changes) to produce the baseline,
19
+ * and again in the post-merge verify phase to compare.
20
+ *
21
+ * ## What is deliberately NOT measured, and why
22
+ *
23
+ * Two metrics were requested and cannot be delivered from committed history.
24
+ * They are omitted rather than faked, because a plausible-looking zero is worse
25
+ * than an absent metric:
26
+ *
27
+ * - GATE REJECTION COUNTS. Across all projects, a gate's `status` only ever
28
+ * takes `approved | complete | in_progress | pending` — there is no
29
+ * `rejected` state — and `requested_at` is a scalar that a re-request
30
+ * OVERWRITES rather than appends to. A rejected-then-approved gate is
31
+ * indistinguishable from a clean first-time approval. (Making this minable
32
+ * would need porch to append gate events; out of scope here.)
33
+ *
34
+ * - HISTORICAL CONSULT TOKENS/COST. Raw consult logs (`codev/projects/*​/*.txt`)
35
+ * are gitignored, and `consult stats` is a rolling 30-day machine-local DB.
36
+ * There is no historical series to baseline against, so B5 is captured as a
37
+ * FORWARD snapshot only — advisory, non-deterministic, and excluded from
38
+ * T14's determinism assertion and from every rollback trigger.
39
+ *
40
+ * Usage (from packages/codev):
41
+ * npx tsx scripts/measure-prompt-behavior.ts [repo-root]
42
+ * npx tsx scripts/measure-prompt-behavior.ts --json
43
+ */
44
+ import * as fs from 'node:fs';
45
+ import * as path from 'node:path';
46
+ import * as yaml from 'js-yaml';
47
+ // ---------------------------------------------------------------------------
48
+ // The eight ratified scar rules (decision D3) and their violation markers.
49
+ //
50
+ // These patterns look for the DANGEROUS COMMAND / ACT, not for the rule text.
51
+ // That is still fuzzy: documentation *about* a rule reads much like a violation
52
+ // of it. Hence excerpts, not just counts — a human adjudicates before the hard
53
+ // rollback trigger fires.
54
+ // ---------------------------------------------------------------------------
55
+ const SCAR_PATTERNS = [
56
+ { rule: 'git-add-all', re: /\bgit\s+add\s+(-A\b|--all\b|\.(?:\s|$))/ },
57
+ { rule: 'destroy-worktree', re: /\bgit\s+worktree\s+remove\b|\bgit\s+branch\s+-D\b/ },
58
+ { rule: 'destructive-git', re: /\bgit\s+(reset\s+--hard|checkout\s+--\s+\.|clean\s+-[a-z]*f|stash\b)/ },
59
+ { rule: 'auto-approve-gate', re: /auto-?approv\w*/i },
60
+ { rule: 'hand-edit-status', re: /(hand|manual\w*)[- ]edit\w*\s+status\.yaml|edited?\s+status\.yaml\s+(directly|by hand)/i },
61
+ { rule: 'afx-from-worktree', re: /\bafx\s+spawn\b[^\n]*\bfrom\s+(inside\s+)?(a\s+)?worktree/i },
62
+ { rule: 'kill-shellper', re: /kill\w*\s+[^\n]{0,40}shellper/i },
63
+ { rule: 'restart-tower', re: /\b(restart|stop)\w*\s+tower\b/i },
64
+ ];
65
+ /** Phrases indicating the surrounding text DESCRIBES a rule rather than reports a breach. */
66
+ const DOCUMENTATION_MARKERS = /\b(never|do not|don'?t|must not|forbidden|prohibited|avoid|rule|policy|reminder|guard|prevent)\b/i;
67
+ // ---------------------------------------------------------------------------
68
+ // Helpers
69
+ // ---------------------------------------------------------------------------
70
+ function mean(xs) {
71
+ return xs.length ? xs.reduce((a, b) => a + b, 0) / xs.length : 0;
72
+ }
73
+ function median(xs) {
74
+ if (!xs.length)
75
+ return 0;
76
+ const s = [...xs].sort((a, b) => a - b);
77
+ const m = Math.floor(s.length / 2);
78
+ return s.length % 2 ? s[m] : (s[m - 1] + s[m]) / 2;
79
+ }
80
+ function round2(n) {
81
+ return Math.round(n * 100) / 100;
82
+ }
83
+ function walk(dir, pred) {
84
+ if (!fs.existsSync(dir))
85
+ return [];
86
+ const out = [];
87
+ for (const e of fs.readdirSync(dir, { withFileTypes: true })) {
88
+ const p = path.join(dir, e.name);
89
+ if (e.isDirectory())
90
+ out.push(...walk(p, pred));
91
+ else if (pred(p))
92
+ out.push(p);
93
+ }
94
+ return out;
95
+ }
96
+ // ---------------------------------------------------------------------------
97
+ // Metric collection
98
+ // ---------------------------------------------------------------------------
99
+ /**
100
+ * B1/B2/B4 — CMAP verdicts and review rounds.
101
+ *
102
+ * Sample: projects whose `status.yaml` has a non-empty `history`. In practice
103
+ * this is SPIR (and one legacy `spider`) — porch only persists per-plan-phase
104
+ * review history for protocols that loop that way, so pir/bugfix/air contribute
105
+ * nothing. Sorted for deterministic output.
106
+ */
107
+ function collectReviewMetrics(root, excludeProjects, includeProjects) {
108
+ const projDir = path.join(root, 'codev', 'projects');
109
+ const files = fs.existsSync(projDir)
110
+ ? fs
111
+ .readdirSync(projDir)
112
+ .filter((d) => (includeProjects ? includeProjects.includes(d) : true))
113
+ .filter((d) => !excludeProjects.includes(d))
114
+ .map((d) => path.join(projDir, d, 'status.yaml'))
115
+ .filter((f) => fs.existsSync(f))
116
+ .sort()
117
+ : [];
118
+ const verdictCounts = {};
119
+ const phaseRounds = [];
120
+ const projectRounds = [];
121
+ const sampleProjects = [];
122
+ for (const f of files) {
123
+ let doc;
124
+ try {
125
+ doc = yaml.load(fs.readFileSync(f, 'utf-8'));
126
+ }
127
+ catch {
128
+ continue; // a malformed status file must not abort the measurement
129
+ }
130
+ const history = doc?.history ?? [];
131
+ if (!history.length)
132
+ continue;
133
+ sampleProjects.push(path.basename(path.dirname(f)));
134
+ const byPhase = new Map();
135
+ for (const item of history) {
136
+ for (const r of item.reviews ?? []) {
137
+ const v = r.verdict ?? 'UNKNOWN';
138
+ verdictCounts[v] = (verdictCounts[v] ?? 0) + 1;
139
+ }
140
+ const ph = item.plan_phase ?? '__none__';
141
+ byPhase.set(ph, Math.max(byPhase.get(ph) ?? 0, item.iteration ?? 0));
142
+ }
143
+ const rounds = [...byPhase.values()];
144
+ phaseRounds.push(...rounds);
145
+ projectRounds.push(rounds.reduce((a, b) => a + b, 0));
146
+ }
147
+ const total = Object.values(verdictCounts).reduce((a, b) => a + b, 0);
148
+ return {
149
+ verdictCounts,
150
+ total,
151
+ rcRate: total ? (verdictCounts['REQUEST_CHANGES'] ?? 0) / total : 0,
152
+ phaseRounds,
153
+ projectRounds,
154
+ sampleProjects: sampleProjects.sort(),
155
+ };
156
+ }
157
+ /**
158
+ * B3 — candidate scar-rule violations mined from committed prose.
159
+ *
160
+ * Scans `codev/reviews/*.md` and `codev/state/*_thread.md`. Emits EXCERPTS, not
161
+ * just counts: the mining cannot distinguish "we violated this" from "never do
162
+ * this", so every hit is a candidate requiring human adjudication. Lines that
163
+ * look like rule documentation are filtered out to cut the obvious noise, but
164
+ * the filter is conservative by design — it is better to hand a human a false
165
+ * positive than to silently drop a real breach.
166
+ */
167
+ function collectScarHits(root, excludeBasenamePrefixes) {
168
+ const excluded = (p) => excludeBasenamePrefixes.some((pre) => path.basename(p).startsWith(pre));
169
+ const targets = [
170
+ ...walk(path.join(root, 'codev', 'reviews'), (p) => p.endsWith('.md')),
171
+ ...walk(path.join(root, 'codev', 'state'), (p) => p.endsWith('_thread.md')),
172
+ ]
173
+ .filter((p) => !excluded(p))
174
+ .sort();
175
+ const hits = [];
176
+ for (const file of targets) {
177
+ const lines = fs.readFileSync(file, 'utf-8').split('\n');
178
+ lines.forEach((line, i) => {
179
+ if (DOCUMENTATION_MARKERS.test(line))
180
+ return; // prescriptive, not a breach report
181
+ for (const { rule, re } of SCAR_PATTERNS) {
182
+ if (re.test(line)) {
183
+ hits.push({
184
+ rule,
185
+ file: path.relative(root, file),
186
+ line: i + 1,
187
+ excerpt: line.trim().slice(0, 200),
188
+ });
189
+ break;
190
+ }
191
+ }
192
+ });
193
+ }
194
+ return { hits, filesScanned: targets.length };
195
+ }
196
+ /** This project's own artifacts — excluded from its own baseline by default. */
197
+ export const SELF_PROJECT_DIR = '1252-prompt-architecture-single-own';
198
+ export const SELF_FILE_PREFIXES = ['spir-1252_', '1252-'];
199
+ /** Collect all behavioural metrics for a repo root. Deterministic over B1–B4. */
200
+ export function measureBehavior(root, opts = {}) {
201
+ const rv = collectReviewMetrics(root, opts.excludeProjects ?? [SELF_PROJECT_DIR], opts.includeProjects);
202
+ const scar = collectScarHits(root, opts.excludeFilePrefixes ?? SELF_FILE_PREFIXES);
203
+ return {
204
+ b1_requestChangesRate: round2(rv.rcRate * 100),
205
+ b1_verdictCounts: rv.verdictCounts,
206
+ b1_totalVerdicts: rv.total,
207
+ b2_roundsPerPhaseMean: round2(mean(rv.phaseRounds)),
208
+ b2_roundsPerPhaseMedian: median(rv.phaseRounds),
209
+ b2_roundsPerPhaseMax: rv.phaseRounds.length ? Math.max(...rv.phaseRounds) : 0,
210
+ b2_phaseCount: rv.phaseRounds.length,
211
+ b3_candidateHits: scar.hits,
212
+ b3_filesScanned: scar.filesScanned,
213
+ b4_roundsPerProjectMean: round2(mean(rv.projectRounds)),
214
+ b4_roundsPerProjectMedian: median(rv.projectRounds),
215
+ b4_projectCount: rv.projectRounds.length,
216
+ sampleProjects: rv.sampleProjects,
217
+ };
218
+ }
219
+ // ---------------------------------------------------------------------------
220
+ // Rendering
221
+ // ---------------------------------------------------------------------------
222
+ /** Render metrics as the committed markdown baseline artifact. */
223
+ export function render(m) {
224
+ const byRule = new Map();
225
+ for (const h of m.b3_candidateHits)
226
+ byRule.set(h.rule, (byRule.get(h.rule) ?? 0) + 1);
227
+ const lines = [
228
+ '# Behavioural metrics (Spec 1252, M12 / Appendix D)',
229
+ '',
230
+ '## B1 — CMAP verdict distribution',
231
+ '',
232
+ `Total verdicts: **${m.b1_totalVerdicts}** across ${m.b4_projectCount} projects with review history.`,
233
+ '',
234
+ '| Verdict | Count | Share |',
235
+ '|---|---:|---:|',
236
+ ...Object.entries(m.b1_verdictCounts)
237
+ .sort((a, b) => b[1] - a[1])
238
+ .map(([v, c]) => `| ${v} | ${c} | ${round2((c / Math.max(m.b1_totalVerdicts, 1)) * 100)}% |`),
239
+ '',
240
+ `**B1 REQUEST_CHANGES rate: ${m.b1_requestChangesRate}%** — the load-bearing metric.`,
241
+ '',
242
+ '## B2 — review rounds per plan phase',
243
+ '',
244
+ `mean **${m.b2_roundsPerPhaseMean}**, median ${m.b2_roundsPerPhaseMedian}, max ${m.b2_roundsPerPhaseMax} (n=${m.b2_phaseCount} phases)`,
245
+ '',
246
+ '> Advisory only. The observed range is too narrow to detect a subtle',
247
+ '> regression. Note also that phases advance on builder *rebuttal*, not on',
248
+ '> unanimous approval — 0 terminal phases in this corpus end with 3x APPROVE —',
249
+ '> so a "rounds to unanimity" metric would never resolve.',
250
+ '',
251
+ '## B4 — review rounds per project',
252
+ '',
253
+ `mean **${m.b4_roundsPerProjectMean}**, median ${m.b4_roundsPerProjectMedian} (n=${m.b4_projectCount} projects). Advisory.`,
254
+ '',
255
+ '## B3 — candidate scar-rule violations',
256
+ '',
257
+ `Scanned **${m.b3_filesScanned}** files (codev/reviews + codev/state threads).`,
258
+ `Candidate hits: **${m.b3_candidateHits.length}**`,
259
+ '',
260
+ '> **These are CANDIDATES, not findings.** Keyword mining cannot distinguish',
261
+ '> "we did this" from "never do this". Every hit requires human adjudication',
262
+ '> before the hard rollback trigger fires. B3 is the metric that matters most —',
263
+ '> it is the only one that would catch a compressed scar rule losing its force.',
264
+ '',
265
+ ];
266
+ if (byRule.size) {
267
+ lines.push('| Rule | Candidate hits |', '|---|---:|');
268
+ for (const [r, c] of [...byRule.entries()].sort((a, b) => b[1] - a[1])) {
269
+ lines.push(`| ${r} | ${c} |`);
270
+ }
271
+ lines.push('', '### Excerpts for adjudication', '');
272
+ for (const h of m.b3_candidateHits.slice(0, 50)) {
273
+ lines.push(`- \`${h.file}:${h.line}\` **[${h.rule}]** — ${h.excerpt}`);
274
+ }
275
+ if (m.b3_candidateHits.length > 50) {
276
+ lines.push(`- …and ${m.b3_candidateHits.length - 50} more (see --json for the full list)`);
277
+ }
278
+ lines.push('');
279
+ }
280
+ lines.push('## B5 — consult cost/duration', '', '**Not captured here.** `consult stats` is a rolling 30-day machine-local DB,', 'so it is not reproducible from a commit. Capture it separately as advisory', 'context; it is excluded from T14 determinism and drives no rollback trigger.', '', '## Sample provenance', '', ...m.sampleProjects.map((p) => `- ${p}`), '');
281
+ return lines.join('\n');
282
+ }
283
+ /** CLI entry, invoked by `packages/codev/scripts/measure-prompt-behavior.ts`. */
284
+ export function runCli(argv, cwd) {
285
+ const json = argv.includes('--json');
286
+ const root = argv.find((a) => !a.startsWith('--')) ?? cwd;
287
+ const m = measureBehavior(path.resolve(root));
288
+ return json ? JSON.stringify(m, null, 2) : render(m);
289
+ }
290
+ //# sourceMappingURL=prompt-behavior-metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-behavior-metrics.js","sourceRoot":"","sources":["../../src/lib/prompt-behavior-metrics.ts"],"names":[],"mappings":"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"}
@@ -57,7 +57,28 @@ export declare function readCodevFile(relativePath: string, workspaceRoot?: stri
57
57
  */
58
58
  export declare function hasLocalOverride(relativePath: string, workspaceRoot?: string): boolean;
59
59
  /**
60
- * List all files in the skeleton directory matching a pattern
60
+ * Every protocol name visible at ANY tier, plus any aliases those protocols declare.
61
+ *
62
+ * Union, not precedence: a name present at any tier is a name porch can run, so configuring it is
63
+ * legitimate. Aliases are included because porch resolves by them (`spir`/`spider`,
64
+ * `maintain`/`maint`, `pir`/`plan-implement-review`), so rejecting an alias would reject config the
65
+ * CLI itself accepts.
66
+ */
67
+ export declare function listProtocolNames(workspaceRoot?: string): Set<string>;
68
+ /**
69
+ * Map a protocol name or alias to its canonical (directory) name.
70
+ *
71
+ * Returns the input unchanged when it is already canonical or cannot be resolved — callers use this
72
+ * for identity comparison, so an unresolvable name simply compares equal only to itself.
73
+ */
74
+ export declare function canonicalProtocolName(workspaceRoot: string | undefined, nameOrAlias: string): string;
75
+ /**
76
+ * Every review type (`phases[].verify.type`) declared by the protocols available here.
77
+ *
78
+ * Unlike listProtocolNames, this reads the RESOLVED protocol.json per name (tier precedence via
79
+ * resolveCodevFile) rather than unioning across tiers: only the file that will actually execute
80
+ * defines which review types can occur, so a shadowed skeleton copy's types must not leak in.
61
81
  */
82
+ export declare function listReviewTypes(workspaceRoot?: string): Set<string>;
62
83
  export declare function listSkeletonFiles(subdir?: string): string[];
63
84
  //# sourceMappingURL=skeleton.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"skeleton.d.ts","sourceRoot":"","sources":["../../src/lib/skeleton.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAKvC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAgB3D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgC5F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,MAAM,EACtB,KAAK,SAAI,GACR,MAAM,CAOR;AAaD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAG7D;AAED,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAEpD;AA0CD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMzF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAItF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAwB3D"}
1
+ {"version":3,"file":"skeleton.d.ts","sourceRoot":"","sources":["../../src/lib/skeleton.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAKvC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAgB3D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgC5F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,MAAM,EACtB,KAAK,SAAI,GACR,MAAM,CAOR;AAaD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAG7D;AAED,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAEpD;AA0CD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMzF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAItF;AAgCD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAoBrE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAsBpG;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAcnE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAwB3D"}
@@ -181,6 +181,126 @@ export function hasLocalOverride(relativePath, workspaceRoot) {
181
181
  /**
182
182
  * List all files in the skeleton directory matching a pattern
183
183
  */
184
+ /**
185
+ * All directories that may contain protocols, in resolution order.
186
+ *
187
+ * NOTE: this includes the framework cache. `porch/protocol.ts`'s alias scan historically checked
188
+ * only three tiers (omitting the cache) — that is a pre-existing inconsistency with
189
+ * resolveCodevFile's four tiers, and is deliberately NOT reproduced here.
190
+ */
191
+ function protocolDirs(workspaceRoot) {
192
+ const root = workspaceRoot || findWorkspaceRoot();
193
+ const dirs = [
194
+ path.join(root, '.codev', 'protocols'),
195
+ path.join(root, 'codev', 'protocols'),
196
+ ];
197
+ const cacheDir = _getFrameworkCacheDir(root);
198
+ if (cacheDir)
199
+ dirs.push(path.join(cacheDir, 'protocols'));
200
+ dirs.push(path.join(getSkeletonDir(), 'protocols'));
201
+ return dirs;
202
+ }
203
+ function readProtocolJson(filePath) {
204
+ try {
205
+ return JSON.parse(fs.readFileSync(filePath, 'utf-8'));
206
+ }
207
+ catch {
208
+ return null; // unreadable or invalid JSON — not this function's error to raise
209
+ }
210
+ }
211
+ /**
212
+ * Every protocol name visible at ANY tier, plus any aliases those protocols declare.
213
+ *
214
+ * Union, not precedence: a name present at any tier is a name porch can run, so configuring it is
215
+ * legitimate. Aliases are included because porch resolves by them (`spir`/`spider`,
216
+ * `maintain`/`maint`, `pir`/`plan-implement-review`), so rejecting an alias would reject config the
217
+ * CLI itself accepts.
218
+ */
219
+ export function listProtocolNames(workspaceRoot) {
220
+ const names = new Set();
221
+ for (const dir of protocolDirs(workspaceRoot)) {
222
+ if (!fs.existsSync(dir))
223
+ continue;
224
+ let entries;
225
+ try {
226
+ entries = fs.readdirSync(dir, { withFileTypes: true }).filter(d => d.isDirectory());
227
+ }
228
+ catch {
229
+ continue;
230
+ }
231
+ for (const entry of entries) {
232
+ const jsonPath = path.join(dir, entry.name, 'protocol.json');
233
+ if (!fs.existsSync(jsonPath))
234
+ continue;
235
+ names.add(entry.name);
236
+ const parsed = readProtocolJson(jsonPath);
237
+ const alias = parsed?.alias;
238
+ if (typeof alias === 'string' && alias.length > 0)
239
+ names.add(alias);
240
+ }
241
+ }
242
+ return names;
243
+ }
244
+ /**
245
+ * Map a protocol name or alias to its canonical (directory) name.
246
+ *
247
+ * Returns the input unchanged when it is already canonical or cannot be resolved — callers use this
248
+ * for identity comparison, so an unresolvable name simply compares equal only to itself.
249
+ */
250
+ export function canonicalProtocolName(workspaceRoot, nameOrAlias) {
251
+ for (const dir of protocolDirs(workspaceRoot)) {
252
+ if (!fs.existsSync(dir))
253
+ continue;
254
+ // A directory of this name is already canonical.
255
+ if (fs.existsSync(path.join(dir, nameOrAlias, 'protocol.json')))
256
+ return nameOrAlias;
257
+ }
258
+ for (const dir of protocolDirs(workspaceRoot)) {
259
+ if (!fs.existsSync(dir))
260
+ continue;
261
+ let entries;
262
+ try {
263
+ entries = fs.readdirSync(dir, { withFileTypes: true }).filter(d => d.isDirectory());
264
+ }
265
+ catch {
266
+ continue;
267
+ }
268
+ for (const entry of entries) {
269
+ const jsonPath = path.join(dir, entry.name, 'protocol.json');
270
+ if (!fs.existsSync(jsonPath))
271
+ continue;
272
+ const parsed = readProtocolJson(jsonPath);
273
+ if (parsed?.alias === nameOrAlias)
274
+ return entry.name;
275
+ }
276
+ }
277
+ return nameOrAlias;
278
+ }
279
+ /**
280
+ * Every review type (`phases[].verify.type`) declared by the protocols available here.
281
+ *
282
+ * Unlike listProtocolNames, this reads the RESOLVED protocol.json per name (tier precedence via
283
+ * resolveCodevFile) rather than unioning across tiers: only the file that will actually execute
284
+ * defines which review types can occur, so a shadowed skeleton copy's types must not leak in.
285
+ */
286
+ export function listReviewTypes(workspaceRoot) {
287
+ const types = new Set();
288
+ for (const name of listProtocolNames(workspaceRoot)) {
289
+ const resolved = resolveCodevFile(`protocols/${name}/protocol.json`, workspaceRoot);
290
+ if (!resolved)
291
+ continue; // alias entries have no directory of their own
292
+ const parsed = readProtocolJson(resolved);
293
+ const phases = parsed?.phases;
294
+ if (!Array.isArray(phases))
295
+ continue;
296
+ for (const phase of phases) {
297
+ const verifyType = phase?.verify?.type;
298
+ if (typeof verifyType === 'string' && verifyType.length > 0)
299
+ types.add(verifyType);
300
+ }
301
+ }
302
+ return types;
303
+ }
184
304
  export function listSkeletonFiles(subdir) {
185
305
  const skeletonDir = getSkeletonDir();
186
306
  const targetDir = subdir ? path.join(skeletonDir, subdir) : skeletonDir;
@@ -1 +1 @@
1
- {"version":3,"file":"skeleton.js","sourceRoot":"","sources":["../../src/lib/skeleton.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skeleton.js","sourceRoot":"","sources":["../../src/lib/skeleton.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Test-runner detection and the escape hatches that go with it (#1323).
3
+ *
4
+ * Two consult side effects are *user-global*: spawning the real `agy` binary
5
+ * (which opens a browser login window when agy is unauthenticated) and writing
6
+ * to `~/.codev/metrics.db`. Both used to be reachable from the test suites by
7
+ * simple omission — a test that never pinned `CODEV_AGY_BIN` resolved the
8
+ * developer's real binary, and every in-process test recorded metrics into the
9
+ * developer's real database.
10
+ *
11
+ * The vitest harness (`vitest-setup.ts`) now pins a sandbox for both. These
12
+ * helpers are the belt-and-braces half: production code consults them so that a
13
+ * *future* test which slips past the harness fails loudly instead of silently
14
+ * reaching the real world.
15
+ */
16
+ /**
17
+ * True when this process is running under a test runner.
18
+ *
19
+ * `VITEST` is set by the runner and covers every suite Codev actually has;
20
+ * CLI-integration and e2e tests spawn `codev` / `consult` children with
21
+ * `{ ...process.env }`, so children inherit it and fall under the same guards.
22
+ *
23
+ * `CODEV_TEST_ISOLATION` is the opt-in for a harness that is not vitest. It is
24
+ * deliberately a name Codev owns: these guards make `consult` *throw*, so a
25
+ * false positive breaks a real consultation. A generic marker like `CODEV_TEST`
26
+ * or `CI` could already be exported in an adopter's environment for unrelated
27
+ * reasons, and inheriting someone else's variable is not worth the blast radius.
28
+ */
29
+ export declare function isUnderTestRunner(): boolean;
30
+ /**
31
+ * Explicit opt-in for deliberately exercising the REAL `agy` binary from a test.
32
+ *
33
+ * Unset by default, so no suite can spawn the real CLI by accident. Set it to
34
+ * run the guarded real-agy integration smoke, or a real-AI e2e benchmark:
35
+ *
36
+ * CODEV_ALLOW_REAL_AGY=1 pnpm --filter @cluesmith/codev test:e2e:cli
37
+ *
38
+ * When set, the vitest harness leaves `CODEV_AGY_BIN` alone and the lane guard
39
+ * stands down — you get the real binary, and the real browser tab if agy's
40
+ * login has lapsed.
41
+ */
42
+ export declare function realAgyOptIn(): boolean;
43
+ /**
44
+ * Guard the gemini (agy) lane against reaching the real binary from a test.
45
+ *
46
+ * Throws when running under a test runner with neither an explicit
47
+ * `CODEV_AGY_BIN` pin nor the real-agy opt-in. Deliberately louder than the
48
+ * lane's usual non-blocking skip: a misconfigured test must fail the suite, not
49
+ * quietly degrade to a COMMENT verdict (which would hide the misconfiguration
50
+ * on a machine where agy simply isn't installed).
51
+ *
52
+ * **Where this is called, and why there.** There is exactly one call site:
53
+ * `resolveAgyBin()`, in the branch taken when `CODEV_AGY_BIN` is unset. That is
54
+ * the chokepoint — every route to the real binary passes through it, and there
55
+ * is more than one route:
56
+ *
57
+ * - `runAgyConsultation()` — the consult lane (`consult -m gemini`)
58
+ * - `doctor.ts:verifyAgy()` — `codev doctor`'s OAuth probe, a second spawn
59
+ * site that issue #1323 did not mention
60
+ * - `doctor.ts:checkAgy()` — presence check; does not spawn, but resolution
61
+ * itself is not passive
62
+ *
63
+ * That last point is the reason the guard sits at resolution rather than at the
64
+ * spawn sites: the unpinned lookup runs `agyRespondsToVersion()`, which
65
+ * *executes* the candidate binary with `--version`. Guarding only the spawns
66
+ * would leave a suite executing the developer's real agy — no browser window
67
+ * from a version print, but a violation of the invariant all the same.
68
+ *
69
+ * Guarding here is safe for the resolution tests because they all pin
70
+ * `CODEV_AGY_BIN` before calling (they are testing override handling), and
71
+ * `agy-integration.e2e.test.ts` short-circuits on the opt-in before resolving.
72
+ */
73
+ export declare function assertAgyLaneAllowedUnderTest(): void;
74
+ //# sourceMappingURL=test-env.d.ts.map