@xhulz/nina 0.69.0 → 0.71.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 (276) hide show
  1. package/bin/nina.mjs +2 -1
  2. package/package.json +1 -1
  3. package/releases/0.70.0/core/GAPS.md +125 -0
  4. package/releases/0.70.0/core/answered.json +89 -0
  5. package/releases/0.70.0/core/defaults/tree/.claude/agents/architect.md +1 -0
  6. package/releases/0.70.0/core/defaults/tree/.claude/agents/dba.md +3 -0
  7. package/releases/0.70.0/core/defaults/tree/.claude/agents/devops.md +1 -0
  8. package/releases/0.70.0/core/defaults/tree/.claude/agents/implementer.md +1 -0
  9. package/releases/0.70.0/core/defaults/tree/.claude/agents/integration-tester.md +3 -0
  10. package/releases/0.70.0/core/defaults/tree/.claude/agents/qa.md +7 -0
  11. package/releases/0.70.0/core/defaults/tree/.claude/agents/reviewer.md +3 -0
  12. package/releases/0.70.0/core/defaults/tree/.claude/agents/secops.md +3 -0
  13. package/releases/0.70.0/core/defaults/tree/.claude/agents/solidity-auditor.md +3 -0
  14. package/releases/0.70.0/core/defaults/tree/.claude/agents/solidity-dev.md +3 -0
  15. package/releases/0.70.0/core/tree/.claude/agents/architect.md +135 -0
  16. package/releases/0.70.0/core/tree/.claude/agents/dba.md +119 -0
  17. package/releases/0.70.0/core/tree/.claude/agents/design-reviewer.md +78 -0
  18. package/releases/0.70.0/core/tree/.claude/agents/devops.md +118 -0
  19. package/releases/0.70.0/core/tree/.claude/agents/implementer.md +178 -0
  20. package/releases/0.70.0/core/tree/.claude/agents/integration-tester.md +170 -0
  21. package/releases/0.70.0/core/tree/.claude/agents/planner.md +132 -0
  22. package/releases/0.70.0/core/tree/.claude/agents/qa.md +150 -0
  23. package/releases/0.70.0/core/tree/.claude/agents/reviewer.md +187 -0
  24. package/releases/0.70.0/core/tree/.claude/agents/secops.md +120 -0
  25. package/releases/0.70.0/core/tree/.claude/agents/solidity-auditor.md +126 -0
  26. package/releases/0.70.0/core/tree/.claude/agents/solidity-dev.md +123 -0
  27. package/releases/0.70.0/core/tree/.claude/agents-overview.md +65 -0
  28. package/releases/0.70.0/core/tree/.claude/frontend.md +10 -0
  29. package/releases/0.70.0/core/tree/.claude/graph.md +79 -0
  30. package/releases/0.70.0/core/tree/.claude/patterns.md +252 -0
  31. package/releases/0.70.0/core/tree/.claude/pills/README.md +150 -0
  32. package/releases/0.70.0/core/tree/.claude/pipeline.md +101 -0
  33. package/releases/0.70.0/core/tree/.claude/retrieval.md +103 -0
  34. package/releases/0.70.0/core/tree/.claude/router.md +221 -0
  35. package/releases/0.70.0/core/tree/.claude/templates/integration.md +48 -0
  36. package/releases/0.70.0/core/tree/CLAUDE.md +167 -0
  37. package/releases/0.70.0/core/tree/scripts/cost-watch.mjs +25 -0
  38. package/releases/0.70.0/core/tree/scripts/edit-guard.mjs +24 -0
  39. package/releases/0.70.0/core/tree/scripts/harness-check.mjs +82 -0
  40. package/releases/0.70.0/core/tree/scripts/loop-gate.mjs +19 -0
  41. package/releases/0.70.0/core/vocabulary.json +14 -0
  42. package/releases/0.70.0/surfaces/blockchain/tree/.claude/agents/architect.md +5 -0
  43. package/releases/0.70.0/surfaces/blockchain/tree/.claude/agents/devops.md +5 -0
  44. package/releases/0.70.0/surfaces/blockchain/tree/.claude/agents/reviewer.md +5 -0
  45. package/releases/0.70.0/surfaces/blockchain/tree/.claude/agents/solidity-auditor.md +18 -0
  46. package/releases/0.70.0/surfaces/blockchain/tree/.claude/agents/solidity-dev.md +16 -0
  47. package/releases/0.70.0/surfaces/blockchain/tree/.claude/agents-overview.md +6 -0
  48. package/releases/0.70.0/surfaces/blockchain/tree/.claude/graph.md +11 -0
  49. package/releases/0.70.0/surfaces/blockchain/tree/.claude/router.md +6 -0
  50. package/releases/0.70.0/surfaces/blockchain/tree/CLAUDE.md +12 -0
  51. package/releases/0.70.0/surfaces/d1/tree/.claude/agents/dba.md +15 -0
  52. package/releases/0.70.0/surfaces/d1/tree/.claude/agents/devops.md +2 -0
  53. package/releases/0.70.0/surfaces/d1/tree/.claude/agents/implementer.md +2 -0
  54. package/releases/0.70.0/surfaces/d1/tree/.claude/patterns.md +8 -0
  55. package/releases/0.70.0/surfaces/d1/tree/CLAUDE.md +2 -0
  56. package/releases/0.70.0/surfaces/db/tree/.claude/agents/architect.md +5 -0
  57. package/releases/0.70.0/surfaces/db/tree/.claude/agents/dba.md +54 -0
  58. package/releases/0.70.0/surfaces/db/tree/.claude/agents/devops.md +5 -0
  59. package/releases/0.70.0/surfaces/db/tree/.claude/agents/implementer.md +2 -0
  60. package/releases/0.70.0/surfaces/db/tree/.claude/agents/integration-tester.md +10 -0
  61. package/releases/0.70.0/surfaces/db/tree/.claude/agents/planner.md +2 -0
  62. package/releases/0.70.0/surfaces/db/tree/.claude/agents/reviewer.md +22 -0
  63. package/releases/0.70.0/surfaces/db/tree/.claude/agents/secops.md +2 -0
  64. package/releases/0.70.0/surfaces/db/tree/.claude/agents-overview.md +5 -0
  65. package/releases/0.70.0/surfaces/db/tree/.claude/graph.md +8 -0
  66. package/releases/0.70.0/surfaces/db/tree/.claude/patterns.md +22 -0
  67. package/releases/0.70.0/surfaces/db/tree/.claude/pipeline.md +13 -0
  68. package/releases/0.70.0/surfaces/db/tree/.claude/retrieval.md +5 -0
  69. package/releases/0.70.0/surfaces/db/tree/.claude/router.md +4 -0
  70. package/releases/0.70.0/surfaces/db/tree/CLAUDE.md +17 -0
  71. package/releases/0.70.0/surfaces/drizzle/tree/.claude/agents/dba.md +9 -0
  72. package/releases/0.70.0/surfaces/drizzle/tree/.claude/agents/devops.md +5 -0
  73. package/releases/0.70.0/surfaces/drizzle/tree/.claude/agents/implementer.md +2 -0
  74. package/releases/0.70.0/surfaces/drizzle/tree/.claude/patterns.md +7 -0
  75. package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/architect.md +14 -0
  76. package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/dba.md +2 -0
  77. package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/devops.md +29 -0
  78. package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/implementer.md +14 -0
  79. package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/integration-tester.md +11 -0
  80. package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/qa.md +3 -0
  81. package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/reviewer.md +8 -0
  82. package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/secops.md +8 -0
  83. package/releases/0.70.0/surfaces/edge-cf/tree/.claude/patterns.md +17 -0
  84. package/releases/0.70.0/surfaces/edge-cf/tree/.claude/retrieval.md +8 -0
  85. package/releases/0.70.0/surfaces/edge-cf/tree/CLAUDE.md +29 -0
  86. package/releases/0.70.0/surfaces/frontend/tree/.claude/agents/architect.md +20 -0
  87. package/releases/0.70.0/surfaces/frontend/tree/.claude/agents/devops.md +28 -0
  88. package/releases/0.70.0/surfaces/frontend/tree/.claude/agents/implementer.md +25 -0
  89. package/releases/0.70.0/surfaces/frontend/tree/.claude/agents/qa.md +17 -0
  90. package/releases/0.70.0/surfaces/frontend/tree/.claude/agents/reviewer.md +56 -0
  91. package/releases/0.70.0/surfaces/frontend/tree/.claude/patterns.md +8 -0
  92. package/releases/0.70.0/surfaces/frontend/tree/.claude/retrieval.md +2 -0
  93. package/releases/0.70.0/surfaces/frontend/tree/.claude/router.md +14 -0
  94. package/releases/0.70.0/surfaces/frontend/tree/CLAUDE.md +5 -0
  95. package/releases/0.70.0/surfaces/integrations/tree/.claude/agents/architect.md +16 -0
  96. package/releases/0.70.0/surfaces/integrations/tree/.claude/agents/implementer.md +12 -0
  97. package/releases/0.70.0/surfaces/integrations/tree/.claude/agents/integration-tester.md +20 -0
  98. package/releases/0.70.0/surfaces/integrations/tree/.claude/agents/planner.md +2 -0
  99. package/releases/0.70.0/surfaces/integrations/tree/.claude/agents/reviewer.md +21 -0
  100. package/releases/0.70.0/surfaces/integrations/tree/.claude/agents/secops.md +2 -0
  101. package/releases/0.70.0/surfaces/integrations/tree/.claude/agents-overview.md +8 -0
  102. package/releases/0.70.0/surfaces/integrations/tree/.claude/graph.md +10 -0
  103. package/releases/0.70.0/surfaces/integrations/tree/.claude/patterns.md +38 -0
  104. package/releases/0.70.0/surfaces/integrations/tree/.claude/pipeline.md +16 -0
  105. package/releases/0.70.0/surfaces/integrations/tree/.claude/retrieval.md +16 -0
  106. package/releases/0.70.0/surfaces/integrations/tree/.claude/router.md +6 -0
  107. package/releases/0.70.0/surfaces/integrations/tree/CLAUDE.md +17 -0
  108. package/releases/0.70.0/surfaces/money/tree/.claude/agents/architect.md +12 -0
  109. package/releases/0.70.0/surfaces/money/tree/.claude/agents/dba.md +14 -0
  110. package/releases/0.70.0/surfaces/money/tree/.claude/agents/implementer.md +11 -0
  111. package/releases/0.70.0/surfaces/money/tree/.claude/agents/integration-tester.md +3 -0
  112. package/releases/0.70.0/surfaces/money/tree/.claude/agents/reviewer.md +23 -0
  113. package/releases/0.70.0/surfaces/money/tree/.claude/agents/secops.md +5 -0
  114. package/releases/0.70.0/surfaces/money/tree/.claude/agents/solidity-auditor.md +4 -0
  115. package/releases/0.70.0/surfaces/money/tree/.claude/agents/solidity-dev.md +4 -0
  116. package/releases/0.70.0/surfaces/money/tree/.claude/graph.md +2 -0
  117. package/releases/0.70.0/surfaces/money/tree/.claude/patterns.md +49 -0
  118. package/releases/0.70.0/surfaces/money/tree/.claude/pipeline.md +2 -0
  119. package/releases/0.70.0/surfaces/money/tree/.claude/retrieval.md +2 -0
  120. package/releases/0.70.0/surfaces/money/tree/CLAUDE.md +11 -0
  121. package/releases/0.70.0/surfaces/pii/tree/.claude/agents/dba.md +2 -0
  122. package/releases/0.70.0/surfaces/pii/tree/.claude/agents/devops.md +8 -0
  123. package/releases/0.70.0/surfaces/pii/tree/.claude/agents/reviewer.md +8 -0
  124. package/releases/0.70.0/surfaces/pii/tree/.claude/agents/secops.md +2 -0
  125. package/releases/0.70.0/surfaces/pii/tree/.claude/agents/solidity-auditor.md +5 -0
  126. package/releases/0.70.0/surfaces/pii/tree/CLAUDE.md +5 -0
  127. package/releases/0.70.0/surfaces/prisma/tree/.claude/agents/architect.md +2 -0
  128. package/releases/0.70.0/surfaces/prisma/tree/.claude/agents/dba.md +42 -0
  129. package/releases/0.70.0/surfaces/prisma/tree/.claude/agents/devops.md +11 -0
  130. package/releases/0.70.0/surfaces/prisma/tree/.claude/agents/implementer.md +2 -0
  131. package/releases/0.70.0/surfaces/prisma/tree/.claude/agents/integration-tester.md +2 -0
  132. package/releases/0.70.0/surfaces/prisma/tree/.claude/agents/reviewer.md +2 -0
  133. package/releases/0.70.0/surfaces/prisma/tree/.claude/patterns.md +15 -0
  134. package/releases/0.70.0/surfaces/prisma/tree/CLAUDE.md +5 -0
  135. package/releases/0.71.0/core/GAPS.md +125 -0
  136. package/releases/0.71.0/core/answered.json +89 -0
  137. package/releases/0.71.0/core/defaults/tree/.claude/agents/architect.md +1 -0
  138. package/releases/0.71.0/core/defaults/tree/.claude/agents/dba.md +3 -0
  139. package/releases/0.71.0/core/defaults/tree/.claude/agents/devops.md +1 -0
  140. package/releases/0.71.0/core/defaults/tree/.claude/agents/implementer.md +1 -0
  141. package/releases/0.71.0/core/defaults/tree/.claude/agents/integration-tester.md +3 -0
  142. package/releases/0.71.0/core/defaults/tree/.claude/agents/qa.md +7 -0
  143. package/releases/0.71.0/core/defaults/tree/.claude/agents/reviewer.md +3 -0
  144. package/releases/0.71.0/core/defaults/tree/.claude/agents/secops.md +3 -0
  145. package/releases/0.71.0/core/defaults/tree/.claude/agents/solidity-auditor.md +3 -0
  146. package/releases/0.71.0/core/defaults/tree/.claude/agents/solidity-dev.md +3 -0
  147. package/releases/0.71.0/core/tree/.claude/agents/architect.md +135 -0
  148. package/releases/0.71.0/core/tree/.claude/agents/dba.md +119 -0
  149. package/releases/0.71.0/core/tree/.claude/agents/design-reviewer.md +78 -0
  150. package/releases/0.71.0/core/tree/.claude/agents/devops.md +118 -0
  151. package/releases/0.71.0/core/tree/.claude/agents/implementer.md +178 -0
  152. package/releases/0.71.0/core/tree/.claude/agents/integration-tester.md +170 -0
  153. package/releases/0.71.0/core/tree/.claude/agents/planner.md +132 -0
  154. package/releases/0.71.0/core/tree/.claude/agents/qa.md +150 -0
  155. package/releases/0.71.0/core/tree/.claude/agents/reviewer.md +187 -0
  156. package/releases/0.71.0/core/tree/.claude/agents/secops.md +120 -0
  157. package/releases/0.71.0/core/tree/.claude/agents/solidity-auditor.md +126 -0
  158. package/releases/0.71.0/core/tree/.claude/agents/solidity-dev.md +123 -0
  159. package/releases/0.71.0/core/tree/.claude/agents-overview.md +65 -0
  160. package/releases/0.71.0/core/tree/.claude/frontend.md +10 -0
  161. package/releases/0.71.0/core/tree/.claude/graph.md +79 -0
  162. package/releases/0.71.0/core/tree/.claude/patterns.md +252 -0
  163. package/releases/0.71.0/core/tree/.claude/pills/README.md +150 -0
  164. package/releases/0.71.0/core/tree/.claude/pipeline.md +101 -0
  165. package/releases/0.71.0/core/tree/.claude/retrieval.md +103 -0
  166. package/releases/0.71.0/core/tree/.claude/router.md +221 -0
  167. package/releases/0.71.0/core/tree/.claude/templates/integration.md +48 -0
  168. package/releases/0.71.0/core/tree/CLAUDE.md +167 -0
  169. package/releases/0.71.0/core/tree/scripts/cost-watch.mjs +27 -0
  170. package/releases/0.71.0/core/tree/scripts/edit-guard.mjs +24 -0
  171. package/releases/0.71.0/core/tree/scripts/harness-check.mjs +82 -0
  172. package/releases/0.71.0/core/tree/scripts/loop-gate.mjs +19 -0
  173. package/releases/0.71.0/core/vocabulary.json +15 -0
  174. package/releases/0.71.0/surfaces/blockchain/tree/.claude/agents/architect.md +5 -0
  175. package/releases/0.71.0/surfaces/blockchain/tree/.claude/agents/devops.md +5 -0
  176. package/releases/0.71.0/surfaces/blockchain/tree/.claude/agents/reviewer.md +5 -0
  177. package/releases/0.71.0/surfaces/blockchain/tree/.claude/agents/solidity-auditor.md +18 -0
  178. package/releases/0.71.0/surfaces/blockchain/tree/.claude/agents/solidity-dev.md +16 -0
  179. package/releases/0.71.0/surfaces/blockchain/tree/.claude/agents-overview.md +6 -0
  180. package/releases/0.71.0/surfaces/blockchain/tree/.claude/graph.md +11 -0
  181. package/releases/0.71.0/surfaces/blockchain/tree/.claude/router.md +6 -0
  182. package/releases/0.71.0/surfaces/blockchain/tree/CLAUDE.md +12 -0
  183. package/releases/0.71.0/surfaces/d1/tree/.claude/agents/dba.md +15 -0
  184. package/releases/0.71.0/surfaces/d1/tree/.claude/agents/devops.md +2 -0
  185. package/releases/0.71.0/surfaces/d1/tree/.claude/agents/implementer.md +2 -0
  186. package/releases/0.71.0/surfaces/d1/tree/.claude/patterns.md +8 -0
  187. package/releases/0.71.0/surfaces/d1/tree/CLAUDE.md +2 -0
  188. package/releases/0.71.0/surfaces/db/tree/.claude/agents/architect.md +5 -0
  189. package/releases/0.71.0/surfaces/db/tree/.claude/agents/dba.md +54 -0
  190. package/releases/0.71.0/surfaces/db/tree/.claude/agents/devops.md +5 -0
  191. package/releases/0.71.0/surfaces/db/tree/.claude/agents/implementer.md +2 -0
  192. package/releases/0.71.0/surfaces/db/tree/.claude/agents/integration-tester.md +10 -0
  193. package/releases/0.71.0/surfaces/db/tree/.claude/agents/planner.md +2 -0
  194. package/releases/0.71.0/surfaces/db/tree/.claude/agents/reviewer.md +22 -0
  195. package/releases/0.71.0/surfaces/db/tree/.claude/agents/secops.md +2 -0
  196. package/releases/0.71.0/surfaces/db/tree/.claude/agents-overview.md +5 -0
  197. package/releases/0.71.0/surfaces/db/tree/.claude/graph.md +8 -0
  198. package/releases/0.71.0/surfaces/db/tree/.claude/patterns.md +22 -0
  199. package/releases/0.71.0/surfaces/db/tree/.claude/pipeline.md +13 -0
  200. package/releases/0.71.0/surfaces/db/tree/.claude/retrieval.md +5 -0
  201. package/releases/0.71.0/surfaces/db/tree/.claude/router.md +4 -0
  202. package/releases/0.71.0/surfaces/db/tree/CLAUDE.md +17 -0
  203. package/releases/0.71.0/surfaces/drizzle/tree/.claude/agents/dba.md +9 -0
  204. package/releases/0.71.0/surfaces/drizzle/tree/.claude/agents/devops.md +5 -0
  205. package/releases/0.71.0/surfaces/drizzle/tree/.claude/agents/implementer.md +2 -0
  206. package/releases/0.71.0/surfaces/drizzle/tree/.claude/patterns.md +7 -0
  207. package/releases/0.71.0/surfaces/edge-cf/tree/.claude/agents/architect.md +14 -0
  208. package/releases/0.71.0/surfaces/edge-cf/tree/.claude/agents/dba.md +2 -0
  209. package/releases/0.71.0/surfaces/edge-cf/tree/.claude/agents/devops.md +29 -0
  210. package/releases/0.71.0/surfaces/edge-cf/tree/.claude/agents/implementer.md +14 -0
  211. package/releases/0.71.0/surfaces/edge-cf/tree/.claude/agents/integration-tester.md +11 -0
  212. package/releases/0.71.0/surfaces/edge-cf/tree/.claude/agents/qa.md +3 -0
  213. package/releases/0.71.0/surfaces/edge-cf/tree/.claude/agents/reviewer.md +8 -0
  214. package/releases/0.71.0/surfaces/edge-cf/tree/.claude/agents/secops.md +8 -0
  215. package/releases/0.71.0/surfaces/edge-cf/tree/.claude/patterns.md +17 -0
  216. package/releases/0.71.0/surfaces/edge-cf/tree/.claude/retrieval.md +8 -0
  217. package/releases/0.71.0/surfaces/edge-cf/tree/CLAUDE.md +29 -0
  218. package/releases/0.71.0/surfaces/frontend/tree/.claude/agents/architect.md +20 -0
  219. package/releases/0.71.0/surfaces/frontend/tree/.claude/agents/devops.md +28 -0
  220. package/releases/0.71.0/surfaces/frontend/tree/.claude/agents/implementer.md +25 -0
  221. package/releases/0.71.0/surfaces/frontend/tree/.claude/agents/qa.md +17 -0
  222. package/releases/0.71.0/surfaces/frontend/tree/.claude/agents/reviewer.md +56 -0
  223. package/releases/0.71.0/surfaces/frontend/tree/.claude/patterns.md +8 -0
  224. package/releases/0.71.0/surfaces/frontend/tree/.claude/retrieval.md +2 -0
  225. package/releases/0.71.0/surfaces/frontend/tree/.claude/router.md +14 -0
  226. package/releases/0.71.0/surfaces/frontend/tree/CLAUDE.md +5 -0
  227. package/releases/0.71.0/surfaces/integrations/tree/.claude/agents/architect.md +16 -0
  228. package/releases/0.71.0/surfaces/integrations/tree/.claude/agents/implementer.md +12 -0
  229. package/releases/0.71.0/surfaces/integrations/tree/.claude/agents/integration-tester.md +20 -0
  230. package/releases/0.71.0/surfaces/integrations/tree/.claude/agents/planner.md +2 -0
  231. package/releases/0.71.0/surfaces/integrations/tree/.claude/agents/reviewer.md +21 -0
  232. package/releases/0.71.0/surfaces/integrations/tree/.claude/agents/secops.md +2 -0
  233. package/releases/0.71.0/surfaces/integrations/tree/.claude/agents-overview.md +8 -0
  234. package/releases/0.71.0/surfaces/integrations/tree/.claude/graph.md +10 -0
  235. package/releases/0.71.0/surfaces/integrations/tree/.claude/patterns.md +38 -0
  236. package/releases/0.71.0/surfaces/integrations/tree/.claude/pipeline.md +16 -0
  237. package/releases/0.71.0/surfaces/integrations/tree/.claude/retrieval.md +16 -0
  238. package/releases/0.71.0/surfaces/integrations/tree/.claude/router.md +6 -0
  239. package/releases/0.71.0/surfaces/integrations/tree/CLAUDE.md +17 -0
  240. package/releases/0.71.0/surfaces/money/tree/.claude/agents/architect.md +12 -0
  241. package/releases/0.71.0/surfaces/money/tree/.claude/agents/dba.md +14 -0
  242. package/releases/0.71.0/surfaces/money/tree/.claude/agents/implementer.md +11 -0
  243. package/releases/0.71.0/surfaces/money/tree/.claude/agents/integration-tester.md +3 -0
  244. package/releases/0.71.0/surfaces/money/tree/.claude/agents/reviewer.md +23 -0
  245. package/releases/0.71.0/surfaces/money/tree/.claude/agents/secops.md +5 -0
  246. package/releases/0.71.0/surfaces/money/tree/.claude/agents/solidity-auditor.md +4 -0
  247. package/releases/0.71.0/surfaces/money/tree/.claude/agents/solidity-dev.md +4 -0
  248. package/releases/0.71.0/surfaces/money/tree/.claude/graph.md +2 -0
  249. package/releases/0.71.0/surfaces/money/tree/.claude/patterns.md +49 -0
  250. package/releases/0.71.0/surfaces/money/tree/.claude/pipeline.md +2 -0
  251. package/releases/0.71.0/surfaces/money/tree/.claude/retrieval.md +2 -0
  252. package/releases/0.71.0/surfaces/money/tree/CLAUDE.md +11 -0
  253. package/releases/0.71.0/surfaces/pii/tree/.claude/agents/dba.md +2 -0
  254. package/releases/0.71.0/surfaces/pii/tree/.claude/agents/devops.md +8 -0
  255. package/releases/0.71.0/surfaces/pii/tree/.claude/agents/reviewer.md +8 -0
  256. package/releases/0.71.0/surfaces/pii/tree/.claude/agents/secops.md +2 -0
  257. package/releases/0.71.0/surfaces/pii/tree/.claude/agents/solidity-auditor.md +5 -0
  258. package/releases/0.71.0/surfaces/pii/tree/CLAUDE.md +5 -0
  259. package/releases/0.71.0/surfaces/prisma/tree/.claude/agents/architect.md +2 -0
  260. package/releases/0.71.0/surfaces/prisma/tree/.claude/agents/dba.md +42 -0
  261. package/releases/0.71.0/surfaces/prisma/tree/.claude/agents/devops.md +11 -0
  262. package/releases/0.71.0/surfaces/prisma/tree/.claude/agents/implementer.md +2 -0
  263. package/releases/0.71.0/surfaces/prisma/tree/.claude/agents/integration-tester.md +2 -0
  264. package/releases/0.71.0/surfaces/prisma/tree/.claude/agents/reviewer.md +2 -0
  265. package/releases/0.71.0/surfaces/prisma/tree/.claude/patterns.md +15 -0
  266. package/releases/0.71.0/surfaces/prisma/tree/CLAUDE.md +5 -0
  267. package/src/commands/learn.mjs +44 -13
  268. package/src/commands/sizes.mjs +94 -24
  269. package/src/commands/stats.mjs +57 -1
  270. package/src/commands/upgrade.mjs +3 -3
  271. package/src/cost.mjs +174 -19
  272. package/src/dashboard.html +3 -1
  273. package/src/gate.mjs +10 -4
  274. package/src/langfuse.mjs +5 -2
  275. package/src/transcripts.mjs +45 -7
  276. package/src/wiring.mjs +33 -5
@@ -860,7 +860,7 @@ async function attachAgentDetail(projectDir, dispatches) {
860
860
  if (
861
861
  run.agent_read_bytes === size &&
862
862
  !('resumes' in run) &&
863
- [...records, ...later].every((r) => settled(r) && 'round' in r && 'lessons_read' in r && 'tokens' in r && 'files_touched' in r && 'lines_written' in r && 'shell_writes' in r && 'effort' in r && 'turns' in r && 'prompt_chars' in r)
863
+ [...records, ...later].every((r) => settled(r) && 'round' in r && 'lessons_read' in r && 'tokens' in r && 'files_touched' in r && 'lines_written' in r && 'shell_writes' in r && 'effort' in r && 'turns' in r && 'prompt_chars' in r && 'cache_rewrites' in r && 'clipped' in r)
864
864
  ) {
865
865
  continue;
866
866
  }
@@ -899,6 +899,8 @@ async function attachAgentDetail(projectDir, dispatches) {
899
899
  calls: new Set(),
900
900
  /** How long the prompt that opened the round was, in characters; never the prompt. */
901
901
  promptChars: null,
902
+ /** The tool results the cost watch clipped to a file, so they were never re-read whole. */
903
+ clipped: 0,
902
904
  });
903
905
  const rounds = [fresh()];
904
906
  const roundOf = roundsOf();
@@ -942,6 +944,19 @@ async function attachAgentDetail(projectDir, dispatches) {
942
944
  // A torn line loses one edit, not the run's.
943
945
  }
944
946
  }
947
+ if (line.includes(CLIP_MARK) && line.includes('"tool_result"')) {
948
+ try {
949
+ const row = JSON.parse(line);
950
+ const content = row?.type === 'user' ? row.message?.content : null;
951
+ for (const block of Array.isArray(content) ? content : []) {
952
+ const said = block?.type === 'tool_result' ? block.content : null;
953
+ const text = typeof said === 'string' ? said : Array.isArray(said) ? said.map((x) => x?.text ?? '').join('') : '';
954
+ if (text.includes(CLIP_MARK)) round.clipped += 1;
955
+ }
956
+ } catch {
957
+ // A torn line loses one count.
958
+ }
959
+ }
945
960
  if (line.includes('"name":"Bash"')) {
946
961
  try {
947
962
  for (const block of JSON.parse(line)?.message?.content ?? []) {
@@ -1028,6 +1043,9 @@ async function attachAgentDetail(projectDir, dispatches) {
1028
1043
  record.tool_calls = round.calls.size;
1029
1044
  record.context_start = shape.start;
1030
1045
  record.context_peak = shape.peak;
1046
+ record.cache_rewrites = shape.rewrites;
1047
+ record.cache_rewritten = shape.rewritten;
1048
+ record.clipped = round.clipped;
1031
1049
  record.prompt_chars = round.promptChars;
1032
1050
  record.usage_model = spent.model;
1033
1051
  record.effort = spent.effort;
@@ -1078,20 +1096,40 @@ export function promptOf(row, round) {
1078
1096
  return row?.type === 'user' && (round > 1 || !row.isMeta) && typeof content === 'string' ? content : null;
1079
1097
  }
1080
1098
 
1099
+ /** The smallest context whose loss counts as a rewrite: below it, a turn writing most of it is the round beginning. */
1100
+ const REWRITE_FLOOR = 30_000;
1101
+
1081
1102
  /**
1082
- * How a round spent its context: how many turns it took, and how large the context each turn re-read was
1083
- * when the round began and at its largest. Every turn is billed the whole context again, so a round that
1084
- * begins where a long one ended — a run resumed for a fix — pays for everything before it on each turn.
1103
+ * How a round spent its context: how many turns it took, how large the context each turn re-read was
1104
+ * when the round began and at its largest, and how often its cache had expired. Every turn is billed the
1105
+ * whole context again, so a round that begins where a long one ended — a run resumed for a fix — pays for
1106
+ * everything before it on each turn.
1107
+ *
1108
+ * A turn reads its context from the cache only while the cache is alive — five minutes after the turn
1109
+ * before, for a subagent — and past that writes all of it again, at twelve times a read's price. So a turn
1110
+ * that wrote more than half of a context of at least {@link REWRITE_FLOOR} tokens is counted a rewrite.
1085
1111
  *
1086
1112
  * @param {Map<string, {usage: object}>} usage - Message id → its final usage, in the order the round sent them.
1087
- * @returns {{turns: number, start: number|null, peak: number|null}} Context sizes in tokens.
1113
+ * @returns {{turns: number, start: number|null, peak: number|null, rewrites: number, rewritten: number}} Context sizes in tokens.
1088
1114
  */
1089
1115
  export function contextOf(usage) {
1090
1116
  const n = (v) => (typeof v === 'number' ? v : 0);
1091
- const sizes = [...usage.values()].map(({ usage: u }) => n(u.input_tokens) + n(u.cache_read_input_tokens) + n(u.cache_creation_input_tokens));
1092
- return { turns: sizes.length, start: sizes[0] ?? null, peak: sizes.length > 0 ? Math.max(...sizes) : null };
1117
+ const turns = [...usage.values()].map(({ usage: u }) => ({ size: n(u.input_tokens) + n(u.cache_read_input_tokens) + n(u.cache_creation_input_tokens), written: n(u.cache_creation_input_tokens) }));
1118
+ const sizes = turns.map((t) => t.size);
1119
+ let rewrites = 0;
1120
+ let rewritten = 0;
1121
+ for (let i = 1; i < turns.length; i += 1) {
1122
+ if (sizes[i - 1] >= REWRITE_FLOOR && turns[i].written > sizes[i - 1] / 2) {
1123
+ rewrites += 1;
1124
+ rewritten += turns[i].written;
1125
+ }
1126
+ }
1127
+ return { turns: sizes.length, start: sizes[0] ?? null, peak: sizes.length > 0 ? Math.max(...sizes) : null, rewrites, rewritten };
1093
1128
  }
1094
1129
 
1130
+ /** How the cost watch opens an output it clipped (`src/cost.mjs`), which is how a snapshot counts them. */
1131
+ export const CLIP_MARK = '[NINA clipped this output';
1132
+
1095
1133
  /**
1096
1134
  * What a run spent, from each of its messages' final usage: tokens by kind, and the model and effort
1097
1135
  * level that most of its messages ran at. Metadata — counts, a model id and a level, never a message.
package/src/wiring.mjs CHANGED
@@ -146,6 +146,23 @@ const HOOKS = [
146
146
  /** Where a project's hooks can live: Claude Code reads both, so a hook kept in the local file counts. */
147
147
  const SETTINGS_FILES = ['.claude/settings.json', '.claude/settings.local.json'];
148
148
 
149
+ /**
150
+ * Settings a project's `.claude/settings.json` carries beside its hooks, each shipped with the script whose
151
+ * concern it is. `why` is what `check` says when one is missing. A key the owner already wrote, in either
152
+ * settings file and with whatever value, is theirs: `wire` adds a missing one and never changes one.
153
+ *
154
+ * The skill listing is every installed skill's description, sized at a hundredth of the model's context
155
+ * window, and every stage whose tools include `Skill` re-reads it on every turn: 32k characters in two
156
+ * projects, a twentieth of what their stages re-read. The skills a stage must use are named in its spec,
157
+ * and every skill's name stays listed however small the budget, so the descriptions buy a stage nothing.
158
+ */
159
+ const SETTINGS = [
160
+ {
161
+ key: 'skillListingBudgetFraction', value: 0.001, script: COST,
162
+ why: "every stage that may invoke a skill re-reads every installed skill's description on every turn, about 9k tokens",
163
+ },
164
+ ];
165
+
149
166
  /** The scripts some hook runs — `check` asks for these by hook, not by npm script. */
150
167
  export const HOOK_SCRIPTS = new Set(HOOKS.map((h) => h.script));
151
168
 
@@ -252,11 +269,13 @@ function covered(hooks, h) {
252
269
  *
253
270
  * @param {string} target - The project directory.
254
271
  * @param {(event: string) => boolean} [wanted] - Events whose malformed lists are worth a problem.
255
- * @returns {Promise<{merged: Record<string, object[]>, problems: string[]}>} Each merged group says `from` which file.
272
+ * @returns {Promise<{merged: Record<string, object[]>, problems: string[], keys: Set<string>}>} Each merged group says
273
+ * `from` which file; `keys` holds every top-level key either file sets.
256
274
  */
257
275
  async function projectHooks(target, wanted = () => false) {
258
276
  const merged = {};
259
277
  const problems = [];
278
+ const keys = new Set();
260
279
  for (const rel of SETTINGS_FILES) {
261
280
  const path = join(target, rel);
262
281
  if (!existsSync(path)) continue;
@@ -267,6 +286,7 @@ async function projectHooks(target, wanted = () => false) {
267
286
  problems.push(`${rel} is not valid JSON — ${error.message}`);
268
287
  continue;
269
288
  }
289
+ if (settings && typeof settings === 'object' && !Array.isArray(settings)) for (const key of Object.keys(settings)) keys.add(key);
270
290
  const shape = settings?.hooks;
271
291
  if (shape === undefined || shape === null) continue;
272
292
  if (typeof shape !== 'object' || Array.isArray(shape)) {
@@ -278,7 +298,7 @@ async function projectHooks(target, wanted = () => false) {
278
298
  else if (wanted(event)) problems.push(`${rel}'s hooks.${event} is not a list — no hook in it can run`);
279
299
  }
280
300
  }
281
- return { merged, problems };
301
+ return { merged, problems, keys };
282
302
  }
283
303
 
284
304
  /** The command settings run for a hook, when they run one — the selftest runs it the same way. */
@@ -298,7 +318,8 @@ export function hookCommand(settings, event, script) {
298
318
  * @returns {string}
299
319
  */
300
320
  export function settingsFile(shipped = HOOK_SCRIPTS) {
301
- return `${JSON.stringify({ hooks: settingsHooks(HOOKS.filter((h) => shipped.has(h.script))) }, null, 2)}\n`;
321
+ const values = Object.fromEntries(SETTINGS.filter((x) => shipped.has(x.script)).map((x) => [x.key, x.value]));
322
+ return `${JSON.stringify({ ...values, hooks: settingsHooks(HOOKS.filter((h) => shipped.has(h.script))) }, null, 2)}\n`;
302
323
  }
303
324
 
304
325
  /** Hooks as settings JSON, grouped by event. */
@@ -369,8 +390,11 @@ export async function missingWiring(target, shipped) {
369
390
  }
370
391
  const wanted = HOOKS.filter((h) => shipped.has(h.script));
371
392
  if (wanted.length === 0) return out;
372
- const { merged, problems } = await projectHooks(target, (event) => wanted.some((h) => h.event === event));
393
+ const { merged, problems, keys } = await projectHooks(target, (event) => wanted.some((h) => h.event === event));
373
394
  out.push(...problems);
395
+ for (const x of SETTINGS.filter((x) => shipped.has(x.script) && !keys.has(x.key))) {
396
+ out.push(`.claude/settings.json has no "${x.key}" — without it ${x.why}; \`nina wire --apply\` sets it to ${x.value}`);
397
+ }
374
398
  for (const h of wanted) {
375
399
  const running = (merged[h.event] ?? []).filter((g) => runs(g, h));
376
400
  if (doubled(running)) {
@@ -468,7 +492,11 @@ export async function applyWiring(target, shipped, { settings: editSettings = tr
468
492
  if (readable) {
469
493
  const hooks = settings.hooks ?? {};
470
494
  const added = [];
471
- const { merged } = await projectHooks(target);
495
+ const { merged, keys } = await projectHooks(target);
496
+ for (const x of SETTINGS.filter((x) => shipped.has(x.script) && !keys.has(x.key))) {
497
+ settings[x.key] = x.value;
498
+ added.push(`"${x.key}": ${x.value}`);
499
+ }
472
500
  for (const h of HOOKS.filter((h) => shipped.has(h.script))) {
473
501
  const running = (merged[h.event] ?? []).filter((g) => runs(g, h));
474
502
  if (covered(merged, h) && !doubled(running)) continue;