@xhulz/nina 0.68.1 → 0.69.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 (266) hide show
  1. package/package.json +1 -1
  2. package/releases/0.68.2/core/GAPS.md +125 -0
  3. package/releases/0.68.2/core/answered.json +80 -0
  4. package/releases/0.68.2/core/defaults/tree/.claude/agents/architect.md +1 -0
  5. package/releases/0.68.2/core/defaults/tree/.claude/agents/dba.md +3 -0
  6. package/releases/0.68.2/core/defaults/tree/.claude/agents/devops.md +1 -0
  7. package/releases/0.68.2/core/defaults/tree/.claude/agents/implementer.md +1 -0
  8. package/releases/0.68.2/core/defaults/tree/.claude/agents/integration-tester.md +3 -0
  9. package/releases/0.68.2/core/defaults/tree/.claude/agents/qa.md +7 -0
  10. package/releases/0.68.2/core/defaults/tree/.claude/agents/reviewer.md +3 -0
  11. package/releases/0.68.2/core/defaults/tree/.claude/agents/secops.md +3 -0
  12. package/releases/0.68.2/core/defaults/tree/.claude/agents/solidity-auditor.md +3 -0
  13. package/releases/0.68.2/core/defaults/tree/.claude/agents/solidity-dev.md +3 -0
  14. package/releases/0.68.2/core/tree/.claude/agents/architect.md +134 -0
  15. package/releases/0.68.2/core/tree/.claude/agents/dba.md +119 -0
  16. package/releases/0.68.2/core/tree/.claude/agents/design-reviewer.md +76 -0
  17. package/releases/0.68.2/core/tree/.claude/agents/devops.md +118 -0
  18. package/releases/0.68.2/core/tree/.claude/agents/implementer.md +178 -0
  19. package/releases/0.68.2/core/tree/.claude/agents/integration-tester.md +170 -0
  20. package/releases/0.68.2/core/tree/.claude/agents/planner.md +132 -0
  21. package/releases/0.68.2/core/tree/.claude/agents/qa.md +150 -0
  22. package/releases/0.68.2/core/tree/.claude/agents/reviewer.md +187 -0
  23. package/releases/0.68.2/core/tree/.claude/agents/secops.md +120 -0
  24. package/releases/0.68.2/core/tree/.claude/agents/solidity-auditor.md +126 -0
  25. package/releases/0.68.2/core/tree/.claude/agents/solidity-dev.md +123 -0
  26. package/releases/0.68.2/core/tree/.claude/agents-overview.md +65 -0
  27. package/releases/0.68.2/core/tree/.claude/frontend.md +10 -0
  28. package/releases/0.68.2/core/tree/.claude/graph.md +79 -0
  29. package/releases/0.68.2/core/tree/.claude/patterns.md +252 -0
  30. package/releases/0.68.2/core/tree/.claude/pills/README.md +150 -0
  31. package/releases/0.68.2/core/tree/.claude/pipeline.md +101 -0
  32. package/releases/0.68.2/core/tree/.claude/retrieval.md +103 -0
  33. package/releases/0.68.2/core/tree/.claude/router.md +218 -0
  34. package/releases/0.68.2/core/tree/.claude/templates/integration.md +48 -0
  35. package/releases/0.68.2/core/tree/CLAUDE.md +166 -0
  36. package/releases/0.68.2/core/tree/scripts/cost-watch.mjs +25 -0
  37. package/releases/0.68.2/core/tree/scripts/edit-guard.mjs +24 -0
  38. package/releases/0.68.2/core/tree/scripts/harness-check.mjs +81 -0
  39. package/releases/0.68.2/core/tree/scripts/loop-gate.mjs +19 -0
  40. package/releases/0.68.2/core/vocabulary.json +14 -0
  41. package/releases/0.68.2/surfaces/blockchain/tree/.claude/agents/architect.md +5 -0
  42. package/releases/0.68.2/surfaces/blockchain/tree/.claude/agents/devops.md +5 -0
  43. package/releases/0.68.2/surfaces/blockchain/tree/.claude/agents/reviewer.md +5 -0
  44. package/releases/0.68.2/surfaces/blockchain/tree/.claude/agents/solidity-auditor.md +18 -0
  45. package/releases/0.68.2/surfaces/blockchain/tree/.claude/agents/solidity-dev.md +16 -0
  46. package/releases/0.68.2/surfaces/blockchain/tree/.claude/agents-overview.md +6 -0
  47. package/releases/0.68.2/surfaces/blockchain/tree/.claude/graph.md +11 -0
  48. package/releases/0.68.2/surfaces/blockchain/tree/.claude/router.md +6 -0
  49. package/releases/0.68.2/surfaces/blockchain/tree/CLAUDE.md +12 -0
  50. package/releases/0.68.2/surfaces/d1/tree/.claude/agents/dba.md +15 -0
  51. package/releases/0.68.2/surfaces/d1/tree/.claude/agents/devops.md +2 -0
  52. package/releases/0.68.2/surfaces/d1/tree/.claude/agents/implementer.md +2 -0
  53. package/releases/0.68.2/surfaces/d1/tree/.claude/patterns.md +8 -0
  54. package/releases/0.68.2/surfaces/d1/tree/CLAUDE.md +2 -0
  55. package/releases/0.68.2/surfaces/db/tree/.claude/agents/architect.md +5 -0
  56. package/releases/0.68.2/surfaces/db/tree/.claude/agents/dba.md +54 -0
  57. package/releases/0.68.2/surfaces/db/tree/.claude/agents/devops.md +5 -0
  58. package/releases/0.68.2/surfaces/db/tree/.claude/agents/implementer.md +2 -0
  59. package/releases/0.68.2/surfaces/db/tree/.claude/agents/integration-tester.md +10 -0
  60. package/releases/0.68.2/surfaces/db/tree/.claude/agents/planner.md +2 -0
  61. package/releases/0.68.2/surfaces/db/tree/.claude/agents/reviewer.md +22 -0
  62. package/releases/0.68.2/surfaces/db/tree/.claude/agents/secops.md +2 -0
  63. package/releases/0.68.2/surfaces/db/tree/.claude/agents-overview.md +5 -0
  64. package/releases/0.68.2/surfaces/db/tree/.claude/graph.md +8 -0
  65. package/releases/0.68.2/surfaces/db/tree/.claude/patterns.md +22 -0
  66. package/releases/0.68.2/surfaces/db/tree/.claude/pipeline.md +13 -0
  67. package/releases/0.68.2/surfaces/db/tree/.claude/retrieval.md +5 -0
  68. package/releases/0.68.2/surfaces/db/tree/.claude/router.md +4 -0
  69. package/releases/0.68.2/surfaces/db/tree/CLAUDE.md +17 -0
  70. package/releases/0.68.2/surfaces/drizzle/tree/.claude/agents/dba.md +9 -0
  71. package/releases/0.68.2/surfaces/drizzle/tree/.claude/agents/devops.md +5 -0
  72. package/releases/0.68.2/surfaces/drizzle/tree/.claude/agents/implementer.md +2 -0
  73. package/releases/0.68.2/surfaces/drizzle/tree/.claude/patterns.md +7 -0
  74. package/releases/0.68.2/surfaces/edge-cf/tree/.claude/agents/architect.md +14 -0
  75. package/releases/0.68.2/surfaces/edge-cf/tree/.claude/agents/dba.md +2 -0
  76. package/releases/0.68.2/surfaces/edge-cf/tree/.claude/agents/devops.md +29 -0
  77. package/releases/0.68.2/surfaces/edge-cf/tree/.claude/agents/implementer.md +14 -0
  78. package/releases/0.68.2/surfaces/edge-cf/tree/.claude/agents/integration-tester.md +11 -0
  79. package/releases/0.68.2/surfaces/edge-cf/tree/.claude/agents/qa.md +3 -0
  80. package/releases/0.68.2/surfaces/edge-cf/tree/.claude/agents/reviewer.md +8 -0
  81. package/releases/0.68.2/surfaces/edge-cf/tree/.claude/agents/secops.md +8 -0
  82. package/releases/0.68.2/surfaces/edge-cf/tree/.claude/patterns.md +17 -0
  83. package/releases/0.68.2/surfaces/edge-cf/tree/.claude/retrieval.md +8 -0
  84. package/releases/0.68.2/surfaces/edge-cf/tree/CLAUDE.md +27 -0
  85. package/releases/0.68.2/surfaces/frontend/tree/.claude/agents/architect.md +20 -0
  86. package/releases/0.68.2/surfaces/frontend/tree/.claude/agents/devops.md +28 -0
  87. package/releases/0.68.2/surfaces/frontend/tree/.claude/agents/implementer.md +25 -0
  88. package/releases/0.68.2/surfaces/frontend/tree/.claude/agents/qa.md +17 -0
  89. package/releases/0.68.2/surfaces/frontend/tree/.claude/agents/reviewer.md +56 -0
  90. package/releases/0.68.2/surfaces/frontend/tree/.claude/patterns.md +8 -0
  91. package/releases/0.68.2/surfaces/frontend/tree/.claude/retrieval.md +2 -0
  92. package/releases/0.68.2/surfaces/frontend/tree/.claude/router.md +14 -0
  93. package/releases/0.68.2/surfaces/frontend/tree/CLAUDE.md +5 -0
  94. package/releases/0.68.2/surfaces/integrations/tree/.claude/agents/architect.md +16 -0
  95. package/releases/0.68.2/surfaces/integrations/tree/.claude/agents/implementer.md +12 -0
  96. package/releases/0.68.2/surfaces/integrations/tree/.claude/agents/integration-tester.md +20 -0
  97. package/releases/0.68.2/surfaces/integrations/tree/.claude/agents/planner.md +2 -0
  98. package/releases/0.68.2/surfaces/integrations/tree/.claude/agents/reviewer.md +21 -0
  99. package/releases/0.68.2/surfaces/integrations/tree/.claude/agents/secops.md +2 -0
  100. package/releases/0.68.2/surfaces/integrations/tree/.claude/agents-overview.md +8 -0
  101. package/releases/0.68.2/surfaces/integrations/tree/.claude/graph.md +10 -0
  102. package/releases/0.68.2/surfaces/integrations/tree/.claude/patterns.md +38 -0
  103. package/releases/0.68.2/surfaces/integrations/tree/.claude/pipeline.md +16 -0
  104. package/releases/0.68.2/surfaces/integrations/tree/.claude/retrieval.md +16 -0
  105. package/releases/0.68.2/surfaces/integrations/tree/.claude/router.md +6 -0
  106. package/releases/0.68.2/surfaces/integrations/tree/CLAUDE.md +17 -0
  107. package/releases/0.68.2/surfaces/money/tree/.claude/agents/architect.md +12 -0
  108. package/releases/0.68.2/surfaces/money/tree/.claude/agents/dba.md +14 -0
  109. package/releases/0.68.2/surfaces/money/tree/.claude/agents/implementer.md +11 -0
  110. package/releases/0.68.2/surfaces/money/tree/.claude/agents/integration-tester.md +3 -0
  111. package/releases/0.68.2/surfaces/money/tree/.claude/agents/reviewer.md +23 -0
  112. package/releases/0.68.2/surfaces/money/tree/.claude/agents/secops.md +5 -0
  113. package/releases/0.68.2/surfaces/money/tree/.claude/agents/solidity-auditor.md +4 -0
  114. package/releases/0.68.2/surfaces/money/tree/.claude/agents/solidity-dev.md +4 -0
  115. package/releases/0.68.2/surfaces/money/tree/.claude/graph.md +2 -0
  116. package/releases/0.68.2/surfaces/money/tree/.claude/patterns.md +49 -0
  117. package/releases/0.68.2/surfaces/money/tree/.claude/pipeline.md +2 -0
  118. package/releases/0.68.2/surfaces/money/tree/.claude/retrieval.md +2 -0
  119. package/releases/0.68.2/surfaces/money/tree/CLAUDE.md +11 -0
  120. package/releases/0.68.2/surfaces/pii/tree/.claude/agents/dba.md +2 -0
  121. package/releases/0.68.2/surfaces/pii/tree/.claude/agents/devops.md +8 -0
  122. package/releases/0.68.2/surfaces/pii/tree/.claude/agents/reviewer.md +8 -0
  123. package/releases/0.68.2/surfaces/pii/tree/.claude/agents/secops.md +2 -0
  124. package/releases/0.68.2/surfaces/pii/tree/.claude/agents/solidity-auditor.md +5 -0
  125. package/releases/0.68.2/surfaces/pii/tree/CLAUDE.md +5 -0
  126. package/releases/0.68.2/surfaces/prisma/tree/.claude/agents/architect.md +2 -0
  127. package/releases/0.68.2/surfaces/prisma/tree/.claude/agents/dba.md +42 -0
  128. package/releases/0.68.2/surfaces/prisma/tree/.claude/agents/devops.md +11 -0
  129. package/releases/0.68.2/surfaces/prisma/tree/.claude/agents/implementer.md +2 -0
  130. package/releases/0.68.2/surfaces/prisma/tree/.claude/agents/integration-tester.md +2 -0
  131. package/releases/0.68.2/surfaces/prisma/tree/.claude/agents/reviewer.md +2 -0
  132. package/releases/0.68.2/surfaces/prisma/tree/.claude/patterns.md +15 -0
  133. package/releases/0.68.2/surfaces/prisma/tree/CLAUDE.md +5 -0
  134. package/releases/0.69.0/core/GAPS.md +125 -0
  135. package/releases/0.69.0/core/answered.json +83 -0
  136. package/releases/0.69.0/core/defaults/tree/.claude/agents/architect.md +1 -0
  137. package/releases/0.69.0/core/defaults/tree/.claude/agents/dba.md +3 -0
  138. package/releases/0.69.0/core/defaults/tree/.claude/agents/devops.md +1 -0
  139. package/releases/0.69.0/core/defaults/tree/.claude/agents/implementer.md +1 -0
  140. package/releases/0.69.0/core/defaults/tree/.claude/agents/integration-tester.md +3 -0
  141. package/releases/0.69.0/core/defaults/tree/.claude/agents/qa.md +7 -0
  142. package/releases/0.69.0/core/defaults/tree/.claude/agents/reviewer.md +3 -0
  143. package/releases/0.69.0/core/defaults/tree/.claude/agents/secops.md +3 -0
  144. package/releases/0.69.0/core/defaults/tree/.claude/agents/solidity-auditor.md +3 -0
  145. package/releases/0.69.0/core/defaults/tree/.claude/agents/solidity-dev.md +3 -0
  146. package/releases/0.69.0/core/tree/.claude/agents/architect.md +135 -0
  147. package/releases/0.69.0/core/tree/.claude/agents/dba.md +119 -0
  148. package/releases/0.69.0/core/tree/.claude/agents/design-reviewer.md +78 -0
  149. package/releases/0.69.0/core/tree/.claude/agents/devops.md +118 -0
  150. package/releases/0.69.0/core/tree/.claude/agents/implementer.md +178 -0
  151. package/releases/0.69.0/core/tree/.claude/agents/integration-tester.md +170 -0
  152. package/releases/0.69.0/core/tree/.claude/agents/planner.md +132 -0
  153. package/releases/0.69.0/core/tree/.claude/agents/qa.md +150 -0
  154. package/releases/0.69.0/core/tree/.claude/agents/reviewer.md +187 -0
  155. package/releases/0.69.0/core/tree/.claude/agents/secops.md +120 -0
  156. package/releases/0.69.0/core/tree/.claude/agents/solidity-auditor.md +126 -0
  157. package/releases/0.69.0/core/tree/.claude/agents/solidity-dev.md +123 -0
  158. package/releases/0.69.0/core/tree/.claude/agents-overview.md +65 -0
  159. package/releases/0.69.0/core/tree/.claude/frontend.md +10 -0
  160. package/releases/0.69.0/core/tree/.claude/graph.md +79 -0
  161. package/releases/0.69.0/core/tree/.claude/patterns.md +252 -0
  162. package/releases/0.69.0/core/tree/.claude/pills/README.md +150 -0
  163. package/releases/0.69.0/core/tree/.claude/pipeline.md +101 -0
  164. package/releases/0.69.0/core/tree/.claude/retrieval.md +103 -0
  165. package/releases/0.69.0/core/tree/.claude/router.md +219 -0
  166. package/releases/0.69.0/core/tree/.claude/templates/integration.md +48 -0
  167. package/releases/0.69.0/core/tree/CLAUDE.md +166 -0
  168. package/releases/0.69.0/core/tree/scripts/cost-watch.mjs +25 -0
  169. package/releases/0.69.0/core/tree/scripts/edit-guard.mjs +24 -0
  170. package/releases/0.69.0/core/tree/scripts/harness-check.mjs +81 -0
  171. package/releases/0.69.0/core/tree/scripts/loop-gate.mjs +19 -0
  172. package/releases/0.69.0/core/vocabulary.json +14 -0
  173. package/releases/0.69.0/surfaces/blockchain/tree/.claude/agents/architect.md +5 -0
  174. package/releases/0.69.0/surfaces/blockchain/tree/.claude/agents/devops.md +5 -0
  175. package/releases/0.69.0/surfaces/blockchain/tree/.claude/agents/reviewer.md +5 -0
  176. package/releases/0.69.0/surfaces/blockchain/tree/.claude/agents/solidity-auditor.md +18 -0
  177. package/releases/0.69.0/surfaces/blockchain/tree/.claude/agents/solidity-dev.md +16 -0
  178. package/releases/0.69.0/surfaces/blockchain/tree/.claude/agents-overview.md +6 -0
  179. package/releases/0.69.0/surfaces/blockchain/tree/.claude/graph.md +11 -0
  180. package/releases/0.69.0/surfaces/blockchain/tree/.claude/router.md +6 -0
  181. package/releases/0.69.0/surfaces/blockchain/tree/CLAUDE.md +12 -0
  182. package/releases/0.69.0/surfaces/d1/tree/.claude/agents/dba.md +15 -0
  183. package/releases/0.69.0/surfaces/d1/tree/.claude/agents/devops.md +2 -0
  184. package/releases/0.69.0/surfaces/d1/tree/.claude/agents/implementer.md +2 -0
  185. package/releases/0.69.0/surfaces/d1/tree/.claude/patterns.md +8 -0
  186. package/releases/0.69.0/surfaces/d1/tree/CLAUDE.md +2 -0
  187. package/releases/0.69.0/surfaces/db/tree/.claude/agents/architect.md +5 -0
  188. package/releases/0.69.0/surfaces/db/tree/.claude/agents/dba.md +54 -0
  189. package/releases/0.69.0/surfaces/db/tree/.claude/agents/devops.md +5 -0
  190. package/releases/0.69.0/surfaces/db/tree/.claude/agents/implementer.md +2 -0
  191. package/releases/0.69.0/surfaces/db/tree/.claude/agents/integration-tester.md +10 -0
  192. package/releases/0.69.0/surfaces/db/tree/.claude/agents/planner.md +2 -0
  193. package/releases/0.69.0/surfaces/db/tree/.claude/agents/reviewer.md +22 -0
  194. package/releases/0.69.0/surfaces/db/tree/.claude/agents/secops.md +2 -0
  195. package/releases/0.69.0/surfaces/db/tree/.claude/agents-overview.md +5 -0
  196. package/releases/0.69.0/surfaces/db/tree/.claude/graph.md +8 -0
  197. package/releases/0.69.0/surfaces/db/tree/.claude/patterns.md +22 -0
  198. package/releases/0.69.0/surfaces/db/tree/.claude/pipeline.md +13 -0
  199. package/releases/0.69.0/surfaces/db/tree/.claude/retrieval.md +5 -0
  200. package/releases/0.69.0/surfaces/db/tree/.claude/router.md +4 -0
  201. package/releases/0.69.0/surfaces/db/tree/CLAUDE.md +17 -0
  202. package/releases/0.69.0/surfaces/drizzle/tree/.claude/agents/dba.md +9 -0
  203. package/releases/0.69.0/surfaces/drizzle/tree/.claude/agents/devops.md +5 -0
  204. package/releases/0.69.0/surfaces/drizzle/tree/.claude/agents/implementer.md +2 -0
  205. package/releases/0.69.0/surfaces/drizzle/tree/.claude/patterns.md +7 -0
  206. package/releases/0.69.0/surfaces/edge-cf/tree/.claude/agents/architect.md +14 -0
  207. package/releases/0.69.0/surfaces/edge-cf/tree/.claude/agents/dba.md +2 -0
  208. package/releases/0.69.0/surfaces/edge-cf/tree/.claude/agents/devops.md +29 -0
  209. package/releases/0.69.0/surfaces/edge-cf/tree/.claude/agents/implementer.md +14 -0
  210. package/releases/0.69.0/surfaces/edge-cf/tree/.claude/agents/integration-tester.md +11 -0
  211. package/releases/0.69.0/surfaces/edge-cf/tree/.claude/agents/qa.md +3 -0
  212. package/releases/0.69.0/surfaces/edge-cf/tree/.claude/agents/reviewer.md +8 -0
  213. package/releases/0.69.0/surfaces/edge-cf/tree/.claude/agents/secops.md +8 -0
  214. package/releases/0.69.0/surfaces/edge-cf/tree/.claude/patterns.md +17 -0
  215. package/releases/0.69.0/surfaces/edge-cf/tree/.claude/retrieval.md +8 -0
  216. package/releases/0.69.0/surfaces/edge-cf/tree/CLAUDE.md +27 -0
  217. package/releases/0.69.0/surfaces/frontend/tree/.claude/agents/architect.md +20 -0
  218. package/releases/0.69.0/surfaces/frontend/tree/.claude/agents/devops.md +28 -0
  219. package/releases/0.69.0/surfaces/frontend/tree/.claude/agents/implementer.md +25 -0
  220. package/releases/0.69.0/surfaces/frontend/tree/.claude/agents/qa.md +17 -0
  221. package/releases/0.69.0/surfaces/frontend/tree/.claude/agents/reviewer.md +56 -0
  222. package/releases/0.69.0/surfaces/frontend/tree/.claude/patterns.md +8 -0
  223. package/releases/0.69.0/surfaces/frontend/tree/.claude/retrieval.md +2 -0
  224. package/releases/0.69.0/surfaces/frontend/tree/.claude/router.md +14 -0
  225. package/releases/0.69.0/surfaces/frontend/tree/CLAUDE.md +5 -0
  226. package/releases/0.69.0/surfaces/integrations/tree/.claude/agents/architect.md +16 -0
  227. package/releases/0.69.0/surfaces/integrations/tree/.claude/agents/implementer.md +12 -0
  228. package/releases/0.69.0/surfaces/integrations/tree/.claude/agents/integration-tester.md +20 -0
  229. package/releases/0.69.0/surfaces/integrations/tree/.claude/agents/planner.md +2 -0
  230. package/releases/0.69.0/surfaces/integrations/tree/.claude/agents/reviewer.md +21 -0
  231. package/releases/0.69.0/surfaces/integrations/tree/.claude/agents/secops.md +2 -0
  232. package/releases/0.69.0/surfaces/integrations/tree/.claude/agents-overview.md +8 -0
  233. package/releases/0.69.0/surfaces/integrations/tree/.claude/graph.md +10 -0
  234. package/releases/0.69.0/surfaces/integrations/tree/.claude/patterns.md +38 -0
  235. package/releases/0.69.0/surfaces/integrations/tree/.claude/pipeline.md +16 -0
  236. package/releases/0.69.0/surfaces/integrations/tree/.claude/retrieval.md +16 -0
  237. package/releases/0.69.0/surfaces/integrations/tree/.claude/router.md +6 -0
  238. package/releases/0.69.0/surfaces/integrations/tree/CLAUDE.md +17 -0
  239. package/releases/0.69.0/surfaces/money/tree/.claude/agents/architect.md +12 -0
  240. package/releases/0.69.0/surfaces/money/tree/.claude/agents/dba.md +14 -0
  241. package/releases/0.69.0/surfaces/money/tree/.claude/agents/implementer.md +11 -0
  242. package/releases/0.69.0/surfaces/money/tree/.claude/agents/integration-tester.md +3 -0
  243. package/releases/0.69.0/surfaces/money/tree/.claude/agents/reviewer.md +23 -0
  244. package/releases/0.69.0/surfaces/money/tree/.claude/agents/secops.md +5 -0
  245. package/releases/0.69.0/surfaces/money/tree/.claude/agents/solidity-auditor.md +4 -0
  246. package/releases/0.69.0/surfaces/money/tree/.claude/agents/solidity-dev.md +4 -0
  247. package/releases/0.69.0/surfaces/money/tree/.claude/graph.md +2 -0
  248. package/releases/0.69.0/surfaces/money/tree/.claude/patterns.md +49 -0
  249. package/releases/0.69.0/surfaces/money/tree/.claude/pipeline.md +2 -0
  250. package/releases/0.69.0/surfaces/money/tree/.claude/retrieval.md +2 -0
  251. package/releases/0.69.0/surfaces/money/tree/CLAUDE.md +11 -0
  252. package/releases/0.69.0/surfaces/pii/tree/.claude/agents/dba.md +2 -0
  253. package/releases/0.69.0/surfaces/pii/tree/.claude/agents/devops.md +8 -0
  254. package/releases/0.69.0/surfaces/pii/tree/.claude/agents/reviewer.md +8 -0
  255. package/releases/0.69.0/surfaces/pii/tree/.claude/agents/secops.md +2 -0
  256. package/releases/0.69.0/surfaces/pii/tree/.claude/agents/solidity-auditor.md +5 -0
  257. package/releases/0.69.0/surfaces/pii/tree/CLAUDE.md +5 -0
  258. package/releases/0.69.0/surfaces/prisma/tree/.claude/agents/architect.md +2 -0
  259. package/releases/0.69.0/surfaces/prisma/tree/.claude/agents/dba.md +42 -0
  260. package/releases/0.69.0/surfaces/prisma/tree/.claude/agents/devops.md +11 -0
  261. package/releases/0.69.0/surfaces/prisma/tree/.claude/agents/implementer.md +2 -0
  262. package/releases/0.69.0/surfaces/prisma/tree/.claude/agents/integration-tester.md +2 -0
  263. package/releases/0.69.0/surfaces/prisma/tree/.claude/agents/reviewer.md +2 -0
  264. package/releases/0.69.0/surfaces/prisma/tree/.claude/patterns.md +15 -0
  265. package/releases/0.69.0/surfaces/prisma/tree/CLAUDE.md +5 -0
  266. package/src/office.mjs +139 -20
package/src/office.mjs CHANGED
@@ -22,16 +22,16 @@
22
22
  * a click on a link, beside the conversation once `workbench.browser.openLocalhostLinks` is on (1.140).
23
23
  */
24
24
 
25
- import { readFileSync, statSync } from 'node:fs';
25
+ import { readFileSync, readdirSync, realpathSync, statSync } from 'node:fs';
26
26
  import { createServer } from 'node:http';
27
27
  import { basename, dirname, join } from 'node:path';
28
28
  import { fileURLToPath } from 'node:url';
29
29
  import { TERMINALS, parseGraph } from './graph.mjs';
30
30
  import { readLedger, sessionLedgers } from './gate.mjs';
31
- import { readProfile } from './paths.mjs';
31
+ import { readProfile, slugFor } from './paths.mjs';
32
32
  import { projectStoreFile, readStoreFile } from './store.mjs';
33
33
  import { CYCLE_ENDS, IN_FLIGHT, cyclesOf } from './commands/stats.mjs';
34
- import { isLoopBack } from './transcripts.mjs';
34
+ import { isLoopBack, transcriptsOf } from './transcripts.mjs';
35
35
  import { shapeOf } from './commands/pipeline.mjs';
36
36
  import { listenHere, openInBrowser, refuseElsewhere, untilStopped } from './serve.mjs';
37
37
 
@@ -52,12 +52,113 @@ export const PARTY_QUIET_MS = 20_000;
52
52
  const SWITCH_GRACE_MS = 10_000;
53
53
 
54
54
  /**
55
- * How long a run may go without reporting before the office stops counting it as at work: the longest of 227 runs
56
- * measured across three projects took 108 minutes, and the 99th percentile 73. A run that stopped without a verdict
57
- * kept every later party away for the rest of its session.
55
+ * How long a run whose own transcript cannot be read may go without reporting before the office stops counting it as
56
+ * at work: the longest of 227 runs measured across three projects took 108 minutes, and the 99th percentile 73. A run
57
+ * that stopped without a verdict kept every later party away for the rest of its session.
58
58
  */
59
59
  export const STALE_MS = 3 * 60 * 60 * 1000;
60
60
 
61
+ /**
62
+ * How long a run whose transcript can be read may go without writing to it before the office stops counting it as at
63
+ * work. Runs grew past `STALE_MS`: an implementer three hours into a step, still writing, got up from its desk and
64
+ * left the office, and sat down again only when the orchestrator sent it a message. The longest silence inside a run,
65
+ * in 299,030 measured across three projects, was 20 minutes — a battery waited on, a long thought.
66
+ */
67
+ export const SILENT_MS = 45 * 60 * 1000;
68
+
69
+ /**
70
+ * When a run with no verdict stops counting as at work: once its transcript has been quiet `SILENT_MS`, or `STALE_MS`
71
+ * after it started when there is none to read.
72
+ *
73
+ * @param {{at: number}} start - The run.
74
+ * @param {number|null} heard - When its transcript was last written, or null.
75
+ * @returns {number}
76
+ */
77
+ const staleAt = (start, heard) => (heard === null ? start.at + STALE_MS : Math.max(start.at, heard) + SILENT_MS);
78
+
79
+ /**
80
+ * When each run of a session last wrote its own transcript, so that a run still writing is at work however long it
81
+ * takes. A run is found by its agent's id once the gate knows it, and before that — a foreground run still going — by
82
+ * the tool_use id that launched it, which its transcript's `.meta.json` keeps.
83
+ *
84
+ * @param {string} target - The project directory.
85
+ * @returns {(session: string|null) => (start: {agent: string|null, id: string|null}) => number|null}
86
+ */
87
+ export function runClock(target) {
88
+ // Named as the gate names the project's ledgers, by where it really is: reached through a link, it is the same one.
89
+ let real = target;
90
+ try {
91
+ real = realpathSync(target);
92
+ } catch {
93
+ // A project that does not exist has no transcripts either way.
94
+ }
95
+ /** The tool_use id each `.meta.json` names, read once: it never changes. */
96
+ const launchedBy = new Map();
97
+ return (session) => {
98
+ if (!session) return () => null;
99
+ const dir = join(transcriptsOf(slugFor(real)), session, 'subagents');
100
+ let names;
101
+ try {
102
+ names = readdirSync(dir);
103
+ } catch {
104
+ return () => null;
105
+ }
106
+ const byAgent = new Map();
107
+ const byLaunch = new Map();
108
+ for (const name of names) {
109
+ if (!name.startsWith('agent-')) continue;
110
+ if (name.endsWith('.jsonl')) byAgent.set(name.slice('agent-'.length, -'.jsonl'.length), join(dir, name));
111
+ if (!name.endsWith('.meta.json')) continue;
112
+ const file = join(dir, `${name.slice(0, -'.meta.json'.length)}.jsonl`);
113
+ const meta = join(dir, name);
114
+ if (!launchedBy.has(meta)) {
115
+ try {
116
+ const id = JSON.parse(readFileSync(meta, 'utf8')).toolUseId;
117
+ if (typeof id === 'string') launchedBy.set(meta, id);
118
+ } catch {
119
+ // Half written: read again at the next look.
120
+ }
121
+ }
122
+ if (launchedBy.has(meta)) byLaunch.set(launchedBy.get(meta), file);
123
+ }
124
+ const written = new Map();
125
+ return (start) => {
126
+ const file = (start.agent && byAgent.get(start.agent)) || (start.id && byLaunch.get(start.id)) || null;
127
+ if (!file) return null;
128
+ if (!written.has(file)) {
129
+ try {
130
+ written.set(file, statSync(file).mtimeMs);
131
+ } catch {
132
+ written.set(file, null);
133
+ }
134
+ }
135
+ return written.get(file);
136
+ };
137
+ };
138
+ }
139
+
140
+ /** A wait between two of the office's looks this much longer than it asks for is the machine having slept. */
141
+ const SLEPT_MS = 60_000;
142
+
143
+ /**
144
+ * When the machine last woke, told by the office's own looks at the ledger: one that comes long after the last, the
145
+ * process was not running between them, and neither was any run, so a transcript's silence across it is not a run's.
146
+ * A laptop closed for an hour with an implementer at work woke to an office that sent the implementer home before it
147
+ * had written again.
148
+ *
149
+ * @param {number} [first] - The first look.
150
+ * @returns {(now: number) => number} Given each look, the moment the machine last woke, or `-Infinity`.
151
+ */
152
+ export function wakeClock(first = Date.now()) {
153
+ let last = first;
154
+ let woke = Number.NEGATIVE_INFINITY;
155
+ return (now) => {
156
+ if (now - last > SLEPT_MS) woke = now;
157
+ last = now;
158
+ return woke;
159
+ };
160
+ }
161
+
61
162
  /**
62
163
  * A dispatch the gate asked about that wrote no `dispatch` entry is taken as refused once the orchestrator launched
63
164
  * something else this long after it. A foreground run still going holds the orchestrator, so nothing else goes out;
@@ -117,7 +218,7 @@ function readStarts(ledger) {
117
218
 
118
219
  // Each start, and how it ends: by a verdict from its agent, or from its stage while its agent is not known yet —
119
220
  // the page binds them the same way; refused, when the gate asked, no dispatch was written, and the orchestrator
120
- // went on to something else; or stale, a run that never reported within `STALE_MS`.
221
+ // went on to something else; or stale, a run that never reported and has gone quiet (`staleAt`).
121
222
  const starts = [];
122
223
  entries.forEach((e, i) => {
123
224
  if (!startsWork(e)) return;
@@ -132,7 +233,7 @@ function readStarts(ledger) {
132
233
  // whether the agent it names had reported since it last started.
133
234
  const message = launched?.via === 'SendMessage' && (launched.resumed === undefined ? Boolean(launched.agent) && Boolean(ranBefore(launched.agent)) : !launched.resumed);
134
235
  const after = e.k === 'pre' && e.id && asked.has(e.id) && !dispatches.has(e.id) ? entries.slice(i + 1).find((x) => x.k === 'pre' && time(x) > at + REFUSED_AFTER_MS) : null;
135
- starts.push({ i, at, role: e.role, agent: launched?.agent ?? null, message, refusedAt: after ? time(after) : null });
236
+ starts.push({ i, at, id: e.id ?? null, role: e.role, agent: launched?.agent ?? null, message, refusedAt: after ? time(after) : null });
136
237
  });
137
238
  const verdictOf = (s) => verdicts.find((x) => time(x) >= s.at && (s.agent ? x.agent === s.agent : x.role === s.role)) ?? null;
138
239
  for (const s of starts) {
@@ -160,12 +261,19 @@ function readStarts(ledger) {
160
261
  * @param {object[]} entries - The ledger, oldest first.
161
262
  * @param {{edges: {from: string, to: string, token: string}[]}} graph - The project's parsed graph.
162
263
  * @param {number} [now] - The time a waiting party is judged against; `Infinity` for a session that has ended.
264
+ * @param {(start: object) => number|null} [heard] - When a run last wrote its transcript (`runClock`), or null.
163
265
  * @returns {object[]} Beats, each `{id, at, type, ...}`; the id is stable as the ledger grows.
164
266
  */
165
- export function officeBeats(ledger, graph, now = Date.now()) {
267
+ export function officeBeats(ledger, graph, now = Date.now(), heard = () => null) {
166
268
  const { entries, time, startsWork, launchOf, starts } = readStarts(ledger);
269
+ // A run's transcript is looked at only for a run that may still be at work.
270
+ const quietMoments = new Map();
271
+ const quietAt = (s) => {
272
+ if (!quietMoments.has(s)) quietMoments.set(s, staleAt(s, heard(s)));
273
+ return quietMoments.get(s);
274
+ };
167
275
  const busyAt = (moment) =>
168
- starts.some((s) => !s.message && s.at <= moment && moment - s.at < STALE_MS && !(s.refusedAt !== null && s.refusedAt <= moment) && !(s.end !== null && s.end <= moment));
276
+ starts.some((s) => !s.message && s.at <= moment && !(s.refusedAt !== null && s.refusedAt <= moment) && !(s.end !== null && s.end <= moment) && moment < quietAt(s));
169
277
 
170
278
  const beats = [];
171
279
  const seen = new Map();
@@ -197,8 +305,8 @@ export function officeBeats(ledger, graph, now = Date.now()) {
197
305
  beats.push({ id: work, at, type: 'work', role: e.role, agent: start.agent, resumed: launched?.via === 'SendMessage' && !start.message, message: start.message, from: handed ? reported : null });
198
306
  if (start.refusedAt !== null) beats.push({ id: `refused:${id}`, at: start.refusedAt, type: 'refused', role: e.role, work });
199
307
  else if (start.stopped !== null) beats.push({ id: `stale:${id}`, at: start.stopped, type: 'stale', role: e.role, agent: start.agent, work: id });
200
- else if (!start.message && (start.end === null || start.end - start.at >= STALE_MS) && now >= start.at + STALE_MS) {
201
- beats.push({ id: `stale:${id}`, at: start.at + STALE_MS, type: 'stale', role: e.role, agent: start.agent, work: id });
308
+ else if (!start.message && (start.end === null || (start.end - start.at >= SILENT_MS && start.end >= quietAt(start))) && now >= quietAt(start)) {
309
+ beats.push({ id: `stale:${id}`, at: quietAt(start), type: 'stale', role: e.role, agent: start.agent, work: id });
202
310
  }
203
311
  return;
204
312
  }
@@ -252,11 +360,12 @@ export function officeBeats(ledger, graph, now = Date.now()) {
252
360
  * — and sent piece by piece, a task that a later fact merged away stayed on the page for good.
253
361
  *
254
362
  * @param {object[]} ledger - The ledger, oldest first.
255
- * @param {number} [now] - The moment it is read at: a run younger than `STALE_MS` with no verdict is still at work.
363
+ * @param {number} [now] - The moment it is read at: a run with no verdict that has not gone quiet is still at work.
256
364
  * @param {Map<string, string>} [names] - Descriptions by dispatch id, for entries that carry none.
365
+ * @param {(start: object) => number|null} [heard] - When a run last wrote its transcript (`runClock`), or null.
257
366
  * @returns {{key: string, name: string|null, start: number, end: number|null, how: string|null, busy: number|null, who: [string, number][]}[]}
258
367
  */
259
- export function officeTimeline(ledger, now = Date.now(), names = new Map()) {
368
+ export function officeTimeline(ledger, now = Date.now(), names = new Map(), heard = () => null) {
260
369
  const { entries, starts, verdictOf } = readStarts(ledger);
261
370
  // A run a message started — an agent resumed after it had reported — is named by the message's summary, or, in a
262
371
  // ledger from before the gate kept one, by the words the agent was launched with: it goes on with that work.
@@ -267,7 +376,7 @@ export function officeTimeline(ledger, now = Date.now(), names = new Map()) {
267
376
  .map((s) => {
268
377
  const e = entries[s.i];
269
378
  const v = verdictOf(s);
270
- return { ts: e.at, role: s.role, verdict: v ? v.verdict : now < s.at + STALE_MS ? IN_FLIGHT : null, desc: e.desc ?? names.get(e.id) ?? (s.agent ? launched.get(s.agent) : undefined) ?? null, start: s, key: e.id ?? `at${s.i}` };
379
+ return { ts: e.at, role: s.role, verdict: v ? v.verdict : now < staleAt(s, heard(s)) ? IN_FLIGHT : null, desc: e.desc ?? names.get(e.id) ?? (s.agent ? launched.get(s.agent) : undefined) ?? null, start: s, key: e.id ?? `at${s.i}` };
271
380
  });
272
381
  return cyclesOf(runs).map((cycle) => {
273
382
  const first = cycle.runs[0];
@@ -396,6 +505,8 @@ export function officeRoutes({ target, wanted, replay = false }) {
396
505
  const timers = new Set();
397
506
 
398
507
  const names = storeNames(target);
508
+ const clock = runClock(target);
509
+ const wake = wakeClock();
399
510
 
400
511
  /** The session to show, and its entries; read again only when its ledger changed. */
401
512
  let cached = { path: null, size: -1, mtime: 0, entries: [] };
@@ -436,12 +547,19 @@ export function officeRoutes({ target, wanted, replay = false }) {
436
547
  };
437
548
 
438
549
  const tick = () => {
550
+ const now = Date.now();
551
+ // Looked at whether anyone watches, so a look long after the last is the machine having slept, not nobody watching.
552
+ const woke = wake(now);
439
553
  // Nobody watching live: nothing to cut or send.
440
554
  if (![...clients].some((client) => !client.replay)) return;
441
555
  const state = current();
442
- const now = Date.now();
443
- const beats = officeBeats(state.entries, graph, now);
444
- const tasks = officeTimeline(state.entries, now, names(state.entries));
556
+ const written = clock(state.session);
557
+ const heard = (start) => {
558
+ const at = written(start);
559
+ return at === null ? null : Math.max(at, woke);
560
+ };
561
+ const beats = officeBeats(state.entries, graph, now, heard);
562
+ const tasks = officeTimeline(state.entries, now, names(state.entries), heard);
445
563
  for (const client of clients) {
446
564
  if (client.replay) continue;
447
565
  if (client.session !== state.session) greet(client, state);
@@ -458,10 +576,11 @@ export function officeRoutes({ target, wanted, replay = false }) {
458
576
  const play = (client) => {
459
577
  const state = current();
460
578
  greet(client, state);
461
- const beats = officeBeats(state.entries, graph, Number.POSITIVE_INFINITY);
579
+ const heard = clock(state.session);
580
+ const beats = officeBeats(state.entries, graph, Number.POSITIVE_INFINITY, heard);
462
581
  // The timeline as it stood at each beat: cut from the ledger up to that moment, so a replay tells nothing early.
463
582
  const known = names(state.entries);
464
- const tasksAt = (moment) => officeTimeline(state.entries.filter((e) => Date.parse(e?.at) <= moment), moment, known);
583
+ const tasksAt = (moment) => officeTimeline(state.entries.filter((e) => Date.parse(e?.at) <= moment), moment, known, heard);
465
584
  // What came before the first dispatch sets the room, at once: a session often opens on many of the owner's
466
585
  // messages, and played out they kept the office empty for a minute.
467
586
  let i = Math.max(0, beats.findIndex((b) => b.type === 'work'));