prjct-cli 3.96.0 → 3.98.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 (511) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/bin/prjct.cjs +14 -0
  3. package/dist/bin/core-chunks/agent-3N2MSSGT.mjs +31 -0
  4. package/dist/bin/core-chunks/agent-codenames-7N4DU62I.mjs +7 -0
  5. package/dist/bin/core-chunks/agent-identity-4KFRR5OU.mjs +7 -0
  6. package/dist/bin/core-chunks/agent-runtime-registry-3RMVBEV2.mjs +7 -0
  7. package/dist/bin/core-chunks/agent-switch-4SE6GF7R.mjs +7 -0
  8. package/dist/bin/core-chunks/agents-ZPNNCOH7.mjs +10 -0
  9. package/dist/bin/core-chunks/ai-provider-RVXK7D7R.mjs +7 -0
  10. package/dist/bin/core-chunks/analysis-OARMM4AH.mjs +41 -0
  11. package/dist/bin/core-chunks/auth-config-KWLVKHCY.mjs +7 -0
  12. package/dist/bin/core-chunks/auto-flush-XA3V7BJ6.mjs +7 -0
  13. package/dist/bin/core-chunks/auto-updater-PKYQRBGQ.mjs +8 -0
  14. package/dist/bin/core-chunks/bin-commands-FYID6EYI.mjs +21 -0
  15. package/dist/bin/core-chunks/capture-3JJPWIF3.mjs +7 -0
  16. package/dist/bin/core-chunks/capture-gate-G5LGVDME.mjs +7 -0
  17. package/dist/bin/core-chunks/ceremonies-B565WDCA.mjs +19 -0
  18. package/dist/bin/core-chunks/changelog-LPJ4GKB6.mjs +10 -0
  19. package/dist/bin/core-chunks/chunk-225DWS4D.mjs +7 -0
  20. package/dist/bin/core-chunks/chunk-24EN5Y62.mjs +48 -0
  21. package/dist/bin/core-chunks/chunk-2EEMQV7N.mjs +9 -0
  22. package/dist/bin/core-chunks/chunk-2FRLIQKX.mjs +10 -0
  23. package/dist/bin/core-chunks/chunk-2I5PUQWY.mjs +7 -0
  24. package/dist/bin/core-chunks/chunk-2JJM3YMW.mjs +44 -0
  25. package/dist/bin/core-chunks/chunk-2NI4EEK2.mjs +8 -0
  26. package/dist/bin/core-chunks/chunk-2TJRTFIS.mjs +9 -0
  27. package/dist/bin/core-chunks/chunk-2VRS5CUH.mjs +9 -0
  28. package/dist/bin/core-chunks/chunk-2VXPFULA.mjs +7 -0
  29. package/dist/bin/core-chunks/chunk-3OWKIRK6.mjs +7 -0
  30. package/dist/bin/core-chunks/chunk-3TRXQAU4.mjs +7 -0
  31. package/dist/bin/core-chunks/chunk-45LKWJ5D.mjs +7 -0
  32. package/dist/bin/core-chunks/chunk-4IE7LRH3.mjs +7 -0
  33. package/dist/bin/core-chunks/chunk-4MR5XSLO.mjs +8 -0
  34. package/dist/bin/core-chunks/chunk-4PPIE6GA.mjs +102 -0
  35. package/dist/bin/core-chunks/chunk-4PRD4EU2.mjs +7 -0
  36. package/dist/bin/core-chunks/chunk-4T7NGLNQ.mjs +16 -0
  37. package/dist/bin/core-chunks/chunk-5DZ2LTII.mjs +52 -0
  38. package/dist/bin/core-chunks/chunk-5EF5EOCL.mjs +7 -0
  39. package/dist/bin/core-chunks/chunk-5OWPZWEU.mjs +13 -0
  40. package/dist/bin/core-chunks/chunk-5TGZSK4C.mjs +10 -0
  41. package/dist/bin/core-chunks/chunk-5YLI5V3Q.mjs +8 -0
  42. package/dist/bin/core-chunks/chunk-5ZBACKED.mjs +14 -0
  43. package/dist/bin/core-chunks/chunk-623SNKDH.mjs +7 -0
  44. package/dist/bin/core-chunks/chunk-6FUCOGOW.mjs +7 -0
  45. package/dist/bin/core-chunks/chunk-6KNMT46X.mjs +18 -0
  46. package/dist/bin/core-chunks/chunk-6OYLZ4NM.mjs +10 -0
  47. package/dist/bin/core-chunks/chunk-6POAOY5C.mjs +19 -0
  48. package/dist/bin/core-chunks/chunk-6RT2P22O.mjs +7 -0
  49. package/dist/bin/core-chunks/chunk-6U3CYLY5.mjs +7 -0
  50. package/dist/bin/core-chunks/chunk-6U3MV7KZ.mjs +15 -0
  51. package/dist/bin/core-chunks/chunk-6XTLPAPZ.mjs +15 -0
  52. package/dist/bin/core-chunks/chunk-76YMLNLF.mjs +7 -0
  53. package/dist/bin/core-chunks/chunk-7BU6SJBC.mjs +17 -0
  54. package/dist/bin/core-chunks/chunk-7QTE6X4J.mjs +7 -0
  55. package/dist/bin/core-chunks/chunk-7ZHWJSW5.mjs +8 -0
  56. package/dist/bin/core-chunks/chunk-ACIOJQSI.mjs +14 -0
  57. package/dist/bin/core-chunks/chunk-AJXELVNH.mjs +7 -0
  58. package/dist/bin/core-chunks/chunk-ALTQ3KL4.mjs +7 -0
  59. package/dist/bin/core-chunks/chunk-ANBDOI53.mjs +8 -0
  60. package/dist/bin/core-chunks/chunk-ANVCA6LF.mjs +7 -0
  61. package/dist/bin/core-chunks/chunk-AS3LWTQ4.mjs +16 -0
  62. package/dist/bin/core-chunks/chunk-B2HY22OD.mjs +50 -0
  63. package/dist/bin/core-chunks/chunk-B7AQHL7B.mjs +7 -0
  64. package/dist/bin/core-chunks/chunk-BSR3XUBD.mjs +24 -0
  65. package/dist/bin/core-chunks/chunk-BTSHD3XJ.mjs +9 -0
  66. package/dist/bin/core-chunks/chunk-BUD3R6LF.mjs +9 -0
  67. package/dist/bin/core-chunks/chunk-C35JQUWD.mjs +8 -0
  68. package/dist/bin/core-chunks/chunk-C7YBUD4K.mjs +10 -0
  69. package/dist/bin/core-chunks/chunk-CA2VFWFP.mjs +21 -0
  70. package/dist/bin/core-chunks/chunk-CB3CNJTL.mjs +10 -0
  71. package/dist/bin/core-chunks/chunk-CFD6CW7T.mjs +46 -0
  72. package/dist/bin/core-chunks/chunk-CKYBGRCF.mjs +8 -0
  73. package/dist/bin/core-chunks/chunk-CUIB6CTG.mjs +20 -0
  74. package/dist/bin/core-chunks/chunk-CVKMV22J.mjs +17 -0
  75. package/dist/bin/core-chunks/chunk-CWLGRKA7.mjs +6 -0
  76. package/dist/bin/core-chunks/chunk-CXKDKMYE.mjs +9 -0
  77. package/dist/bin/core-chunks/chunk-CXNVDJNN.mjs +7 -0
  78. package/dist/bin/core-chunks/chunk-D62TAZG6.mjs +9 -0
  79. package/dist/bin/core-chunks/chunk-DEYAQEF5.mjs +7 -0
  80. package/dist/bin/core-chunks/chunk-DIEPWXJJ.mjs +7 -0
  81. package/dist/bin/core-chunks/chunk-DMO3ZFUG.mjs +1259 -0
  82. package/dist/bin/core-chunks/chunk-DOJPSIMG.mjs +7 -0
  83. package/dist/bin/core-chunks/chunk-DTMZBK4E.mjs +7 -0
  84. package/dist/bin/core-chunks/chunk-DW4QMD6J.mjs +10 -0
  85. package/dist/bin/core-chunks/chunk-DZDEBDAB.mjs +10 -0
  86. package/dist/bin/core-chunks/chunk-DZVOFEM5.mjs +7 -0
  87. package/dist/bin/core-chunks/chunk-E5QQDYBR.mjs +7 -0
  88. package/dist/bin/core-chunks/chunk-E73HSXCX.mjs +7 -0
  89. package/dist/bin/core-chunks/chunk-EFSPBB4S.mjs +8 -0
  90. package/dist/bin/core-chunks/chunk-EHVU2SMR.mjs +34 -0
  91. package/dist/bin/core-chunks/chunk-ESB4ALH2.mjs +7 -0
  92. package/dist/bin/core-chunks/chunk-EZRNQXCC.mjs +7 -0
  93. package/dist/bin/core-chunks/chunk-F2FKQUYE.mjs +19 -0
  94. package/dist/bin/core-chunks/chunk-F7OOBAJO.mjs +30 -0
  95. package/dist/bin/core-chunks/chunk-FATYLG3L.mjs +14 -0
  96. package/dist/bin/core-chunks/chunk-FOUBHU4X.mjs +7 -0
  97. package/dist/bin/core-chunks/chunk-FOWTB762.mjs +7 -0
  98. package/dist/bin/core-chunks/chunk-GGGDYL4P.mjs +7 -0
  99. package/dist/bin/core-chunks/chunk-GHSRH4GL.mjs +8 -0
  100. package/dist/bin/core-chunks/chunk-GSNQKBHZ.mjs +11 -0
  101. package/dist/bin/core-chunks/chunk-GTG67Z45.mjs +11 -0
  102. package/dist/bin/core-chunks/chunk-H2KNJUPN.mjs +23 -0
  103. package/dist/bin/core-chunks/chunk-HA7Y76GF.mjs +7 -0
  104. package/dist/bin/core-chunks/chunk-HCPQZRR3.mjs +7 -0
  105. package/dist/bin/core-chunks/chunk-HPCSSJXH.mjs +7 -0
  106. package/dist/bin/core-chunks/chunk-HU5ERAAV.mjs +8 -0
  107. package/dist/bin/core-chunks/chunk-HVXWQ2XZ.mjs +7 -0
  108. package/dist/bin/core-chunks/chunk-HYIT7MF5.mjs +8 -0
  109. package/dist/bin/core-chunks/chunk-HYMJVHAX.mjs +13 -0
  110. package/dist/bin/core-chunks/chunk-ID2C2S33.mjs +18 -0
  111. package/dist/bin/core-chunks/chunk-ID5KE74L.mjs +7 -0
  112. package/dist/bin/core-chunks/chunk-IJNKHQIS.mjs +10 -0
  113. package/dist/bin/core-chunks/chunk-INJ5WT2D.mjs +7 -0
  114. package/dist/bin/core-chunks/chunk-IOFCSTGM.mjs +7 -0
  115. package/dist/bin/core-chunks/chunk-J6Y7IVFQ.mjs +7 -0
  116. package/dist/bin/core-chunks/chunk-JCWA7NLM.mjs +7 -0
  117. package/dist/bin/core-chunks/chunk-JGGQSMZC.mjs +8 -0
  118. package/dist/bin/core-chunks/chunk-JPMUJY42.mjs +7 -0
  119. package/dist/bin/core-chunks/chunk-JT4RNQ67.mjs +15 -0
  120. package/dist/bin/core-chunks/chunk-KI4OY3UQ.mjs +18 -0
  121. package/dist/bin/core-chunks/chunk-KPR5TWSN.mjs +7 -0
  122. package/dist/bin/core-chunks/chunk-KUQLXY2P.mjs +11 -0
  123. package/dist/bin/core-chunks/chunk-L3DJN3XD.mjs +12 -0
  124. package/dist/bin/core-chunks/chunk-L4TUXFCL.mjs +7 -0
  125. package/dist/bin/core-chunks/chunk-L5LFLI4R.mjs +7 -0
  126. package/dist/bin/core-chunks/chunk-LFOQ7FCR.mjs +10 -0
  127. package/dist/bin/core-chunks/chunk-LGX2GM45.mjs +7 -0
  128. package/dist/bin/core-chunks/chunk-LTKUTRRL.mjs +7 -0
  129. package/dist/bin/core-chunks/chunk-LZILSE5H.mjs +8 -0
  130. package/dist/bin/core-chunks/chunk-MCY7OXED.mjs +10 -0
  131. package/dist/bin/core-chunks/chunk-MG3YN3AI.mjs +7 -0
  132. package/dist/bin/core-chunks/chunk-MPU3VM6Z.mjs +7 -0
  133. package/dist/bin/core-chunks/chunk-MR5XXHRK.mjs +8 -0
  134. package/dist/bin/core-chunks/chunk-MXJF3FA7.mjs +7 -0
  135. package/dist/bin/core-chunks/chunk-MXJKULJY.mjs +9 -0
  136. package/dist/bin/core-chunks/chunk-NINFE7GS.mjs +9 -0
  137. package/dist/bin/core-chunks/chunk-NNILF7R3.mjs +7 -0
  138. package/dist/bin/core-chunks/chunk-NNOX3UU4.mjs +7 -0
  139. package/dist/bin/core-chunks/chunk-NOHSLOLL.mjs +7 -0
  140. package/dist/bin/core-chunks/chunk-NXUIMC22.mjs +13 -0
  141. package/dist/bin/core-chunks/chunk-NZKUCQZK.mjs +8 -0
  142. package/dist/bin/core-chunks/chunk-O5N6XYPU.mjs +8 -0
  143. package/dist/bin/core-chunks/chunk-O5VCBMEK.mjs +25 -0
  144. package/dist/bin/core-chunks/chunk-OE27RFLJ.mjs +8 -0
  145. package/dist/bin/core-chunks/chunk-OGM34Z6W.mjs +8 -0
  146. package/dist/bin/core-chunks/chunk-OIE3AKKO.mjs +7 -0
  147. package/dist/bin/core-chunks/chunk-OXKGN3HG.mjs +7 -0
  148. package/dist/bin/core-chunks/chunk-P2KU4FFA.mjs +11 -0
  149. package/dist/bin/core-chunks/chunk-PIA26GWG.mjs +7 -0
  150. package/dist/bin/core-chunks/chunk-PPSVWUXC.mjs +15 -0
  151. package/dist/bin/core-chunks/chunk-PQTR6XVW.mjs +7 -0
  152. package/dist/bin/core-chunks/chunk-PWL3KS7Y.mjs +7 -0
  153. package/dist/bin/core-chunks/chunk-Q3LUL6LL.mjs +7 -0
  154. package/dist/bin/core-chunks/chunk-Q6C27OL7.mjs +7 -0
  155. package/dist/bin/core-chunks/chunk-Q7GJIU6D.mjs +8 -0
  156. package/dist/bin/core-chunks/chunk-QAIEAOJF.mjs +7 -0
  157. package/dist/bin/core-chunks/chunk-QWRPJARA.mjs +14 -0
  158. package/dist/bin/core-chunks/chunk-QZ7T2EYR.mjs +25 -0
  159. package/dist/bin/core-chunks/chunk-RACISWUV.mjs +10 -0
  160. package/dist/bin/core-chunks/chunk-RCIWCKL7.mjs +9 -0
  161. package/dist/bin/core-chunks/chunk-ROOCBUKH.mjs +8 -0
  162. package/dist/bin/core-chunks/chunk-RP7F67ZT.mjs +7 -0
  163. package/dist/bin/core-chunks/chunk-RXZJB43D.mjs +7 -0
  164. package/dist/bin/core-chunks/chunk-S6FBPXQL.mjs +9 -0
  165. package/dist/bin/core-chunks/chunk-SLYLGDX7.mjs +8 -0
  166. package/dist/bin/core-chunks/chunk-SO3ZPNWT.mjs +7 -0
  167. package/dist/bin/core-chunks/chunk-SRJEX6XF.mjs +12 -0
  168. package/dist/bin/core-chunks/chunk-SROBBOJB.mjs +11 -0
  169. package/dist/bin/core-chunks/chunk-STFUT7R7.mjs +28 -0
  170. package/dist/bin/core-chunks/chunk-SUXIKMTS.mjs +30 -0
  171. package/dist/bin/core-chunks/chunk-TDTPDVUM.mjs +8 -0
  172. package/dist/bin/core-chunks/chunk-TIBYHZFA.mjs +8 -0
  173. package/dist/bin/core-chunks/chunk-TILUQF6L.mjs +8 -0
  174. package/dist/bin/core-chunks/chunk-TOORPP6K.mjs +7 -0
  175. package/dist/bin/core-chunks/chunk-U24YKPYX.mjs +7 -0
  176. package/dist/bin/core-chunks/chunk-U55OPVYR.mjs +9 -0
  177. package/dist/bin/core-chunks/chunk-UAYTDSYG.mjs +64 -0
  178. package/dist/bin/core-chunks/chunk-UHXV7MDW.mjs +12 -0
  179. package/dist/bin/core-chunks/chunk-UNIBFM6J.mjs +13 -0
  180. package/dist/bin/core-chunks/chunk-UNNY2IWZ.mjs +9 -0
  181. package/dist/bin/core-chunks/chunk-UX2ORID4.mjs +9 -0
  182. package/dist/bin/core-chunks/chunk-UYMZ3NAF.mjs +8 -0
  183. package/dist/bin/core-chunks/chunk-V6L5PLD7.mjs +18 -0
  184. package/dist/bin/core-chunks/chunk-V7R3L54M.mjs +7 -0
  185. package/dist/bin/core-chunks/chunk-V7VA4EQX.mjs +7 -0
  186. package/dist/bin/core-chunks/chunk-VCSESVZ4.mjs +9 -0
  187. package/dist/bin/core-chunks/chunk-VCYVYFWE.mjs +9 -0
  188. package/dist/bin/core-chunks/chunk-VJCTTFKP.mjs +8 -0
  189. package/dist/bin/core-chunks/chunk-VRFYDYQY.mjs +7 -0
  190. package/dist/bin/core-chunks/chunk-VWFVSNQT.mjs +7 -0
  191. package/dist/bin/core-chunks/chunk-W23JLJJZ.mjs +109 -0
  192. package/dist/bin/core-chunks/chunk-WCTVZQBG.mjs +8 -0
  193. package/dist/bin/core-chunks/chunk-WTDUJB4I.mjs +8 -0
  194. package/dist/bin/core-chunks/chunk-WZ6W5ZQ5.mjs +7 -0
  195. package/dist/bin/core-chunks/chunk-X433BB6F.mjs +7 -0
  196. package/dist/bin/core-chunks/chunk-XBR63NJA.mjs +7 -0
  197. package/dist/bin/core-chunks/chunk-XC6YAP36.mjs +7 -0
  198. package/dist/bin/core-chunks/chunk-XJTEPHLC.mjs +7 -0
  199. package/dist/bin/core-chunks/chunk-XLAGA5B7.mjs +10 -0
  200. package/dist/bin/core-chunks/chunk-XLFEWZRA.mjs +7 -0
  201. package/dist/bin/core-chunks/chunk-XSZOHNL4.mjs +7 -0
  202. package/dist/bin/core-chunks/chunk-XWLTEAGN.mjs +7 -0
  203. package/dist/bin/core-chunks/chunk-Y7XOKG4O.mjs +7 -0
  204. package/dist/bin/core-chunks/chunk-YEALP3WX.mjs +7 -0
  205. package/dist/bin/core-chunks/chunk-YJOC2JJK.mjs +12 -0
  206. package/dist/bin/core-chunks/chunk-YLYAYRSJ.mjs +8 -0
  207. package/dist/bin/core-chunks/chunk-YOGI4WE6.mjs +8 -0
  208. package/dist/bin/core-chunks/chunk-YOWW4LHK.mjs +8 -0
  209. package/dist/bin/core-chunks/chunk-YPLFWN62.mjs +7 -0
  210. package/dist/bin/core-chunks/chunk-YQ6HM3YO.mjs +10 -0
  211. package/dist/bin/core-chunks/chunk-YZEO5DZA.mjs +7 -0
  212. package/dist/bin/core-chunks/chunk-ZAUJWUUN.mjs +20 -0
  213. package/dist/bin/core-chunks/chunk-ZBBNCCGV.mjs +12 -0
  214. package/dist/bin/core-chunks/chunk-ZQ2XH76U.mjs +12 -0
  215. package/dist/bin/core-chunks/chunk-ZSANMA7K.mjs +7 -0
  216. package/dist/bin/core-chunks/chunk-ZXTJLMVZ.mjs +7 -0
  217. package/dist/bin/core-chunks/chunk-ZZR3LXCK.mjs +9 -0
  218. package/dist/bin/core-chunks/cleanup-installs-LD43GI4K.mjs +7 -0
  219. package/dist/bin/core-chunks/client-D43KKUYH.mjs +8 -0
  220. package/dist/bin/core-chunks/closest-command-YYNABM7V.mjs +7 -0
  221. package/dist/bin/core-chunks/cloud-RXHFZ7MX.mjs +14 -0
  222. package/dist/bin/core-chunks/code-IYK65A62.mjs +12 -0
  223. package/dist/bin/core-chunks/code-graph-cloud-G3WQBICY.mjs +7 -0
  224. package/dist/bin/core-chunks/codex-hooks-N5UHKK5B.mjs +7 -0
  225. package/dist/bin/core-chunks/codex-mcp-G7WNAT6T.mjs +7 -0
  226. package/dist/bin/core-chunks/codex-skill-IZNP76BJ.mjs +7 -0
  227. package/dist/bin/core-chunks/command-installer-4ENM4GZR.mjs +7 -0
  228. package/dist/bin/core-chunks/config-UVF7YOR6.mjs +8 -0
  229. package/dist/bin/core-chunks/config-manager-QY73WM5U.mjs +7 -0
  230. package/dist/bin/core-chunks/content-bound-stamp-2PJNI4JC.mjs +7 -0
  231. package/dist/bin/core-chunks/context-4GB6ICXK.mjs +38 -0
  232. package/dist/bin/core-chunks/context-MPHOQPXF.mjs +10 -0
  233. package/dist/bin/core-chunks/context-checkpoint-NBI5HKPV.mjs +27 -0
  234. package/dist/bin/core-chunks/context-pressure-5URQVNBC.mjs +7 -0
  235. package/dist/bin/core-chunks/context-tiers-NOKJ75QP.mjs +7 -0
  236. package/dist/bin/core-chunks/context7-service-2MYRUNKY.mjs +7 -0
  237. package/dist/bin/core-chunks/core-WMEHDCOK.mjs +70 -0
  238. package/dist/bin/core-chunks/crew-EYVSIX4L.mjs +24 -0
  239. package/dist/bin/core-chunks/cursor-hooks-DGDJVAI6.mjs +7 -0
  240. package/dist/bin/core-chunks/custom-workflow-storage-EBEIG54R.mjs +7 -0
  241. package/dist/bin/core-chunks/cwd-changed-EUJZOBIC.mjs +7 -0
  242. package/dist/bin/core-chunks/cycle-budget-card-H37XRAIX.mjs +7 -0
  243. package/dist/bin/core-chunks/daemon-QARP3RVX.mjs +13 -0
  244. package/dist/bin/core-chunks/database-UU2ZXSD4.mjs +7 -0
  245. package/dist/bin/core-chunks/delivery-geometry-GSJ6LXUC.mjs +7 -0
  246. package/dist/bin/core-chunks/detect-changes-2YIEX7AY.mjs +7 -0
  247. package/dist/bin/core-chunks/detection-KKDZYWVD.mjs +7 -0
  248. package/dist/bin/core-chunks/developer-evolution-AVAXGDKQ.mjs +11 -0
  249. package/dist/bin/core-chunks/developer-profile-2VSFJGCU.mjs +7 -0
  250. package/dist/bin/core-chunks/discuss-lock-CWXKBBYJ.mjs +7 -0
  251. package/dist/bin/core-chunks/distill-ZF7WHGCZ.mjs +7 -0
  252. package/dist/bin/core-chunks/doctor-heal-XFSVPSEY.mjs +7 -0
  253. package/dist/bin/core-chunks/doctor-service-6ZJBWIXR.mjs +8 -0
  254. package/dist/bin/core-chunks/drift-refresh-XPJAO2B3.mjs +7 -0
  255. package/dist/bin/core-chunks/dynasty-outcomes-KDWIEA4Y.mjs +11 -0
  256. package/dist/bin/core-chunks/editors-config-ELAQA6RV.mjs +7 -0
  257. package/dist/bin/core-chunks/embeddings-354ZYFKX.mjs +7 -0
  258. package/dist/bin/core-chunks/enriched-recall-MKBOXB7M.mjs +7 -0
  259. package/dist/bin/core-chunks/eval-O4YD6YOV.mjs +76 -0
  260. package/dist/bin/core-chunks/exec-34V6SJYO.mjs +7 -0
  261. package/dist/bin/core-chunks/file-helper-LLQKU6YF.mjs +7 -0
  262. package/dist/bin/core-chunks/format-SYVL4CV5.mjs +7 -0
  263. package/dist/bin/core-chunks/gemini-settings-RGD7JLSP.mjs +7 -0
  264. package/dist/bin/core-chunks/git-context-ZSWE3KWM.mjs +8 -0
  265. package/dist/bin/core-chunks/git-helpers-UC53D4FT.mjs +7 -0
  266. package/dist/bin/core-chunks/grok-mcp-IE2RRRRW.mjs +7 -0
  267. package/dist/bin/core-chunks/grok-plugin-SSANHBS7.mjs +7 -0
  268. package/dist/bin/core-chunks/grok-skill-7ZP7R7KO.mjs +7 -0
  269. package/dist/bin/core-chunks/guard-RT7U3LJX.mjs +13 -0
  270. package/dist/bin/core-chunks/guards-AXH6V2IJ.mjs +7 -0
  271. package/dist/bin/core-chunks/handoff-storage-NGUA4Y2L.mjs +7 -0
  272. package/dist/bin/core-chunks/harness-V7J7WIT2.mjs +43 -0
  273. package/dist/bin/core-chunks/health-TNB5OC37.mjs +11 -0
  274. package/dist/bin/core-chunks/help-P7EYELVK.mjs +14 -0
  275. package/dist/bin/core-chunks/hooks-service-REI56DDC.mjs +91 -0
  276. package/dist/bin/core-chunks/infer-memory-file-ATP7PSAQ.mjs +7 -0
  277. package/dist/bin/core-chunks/install-FZQJJWT5.mjs +9 -0
  278. package/dist/bin/core-chunks/judgment-G5KH6QFC.mjs +21 -0
  279. package/dist/bin/core-chunks/judgment-ledger-storage-ZTYXPMM4.mjs +7 -0
  280. package/dist/bin/core-chunks/judgment-orchestrator-E3SO3NVE.mjs +7 -0
  281. package/dist/bin/core-chunks/judgment-receipt-GO6QEZQC.mjs +7 -0
  282. package/dist/bin/core-chunks/kimi-hooks-TR6J3OVG.mjs +7 -0
  283. package/dist/bin/core-chunks/kimi-mcp-ETG7O6O5.mjs +7 -0
  284. package/dist/bin/core-chunks/land-cue-3BUD3KJJ.mjs +8 -0
  285. package/dist/bin/core-chunks/land-rho-MCTQDPRH.mjs +8 -0
  286. package/dist/bin/core-chunks/land-synthesis-MU4EZEYL.mjs +7 -0
  287. package/dist/bin/core-chunks/lean-26BWCUOR.mjs +34 -0
  288. package/dist/bin/core-chunks/legacy-crew-sweep-G5UJT2PM.mjs +23 -0
  289. package/dist/bin/core-chunks/living-context-contract-HZIVBMXX.mjs +7 -0
  290. package/dist/bin/core-chunks/llm-KMVXVBHG.mjs +18 -0
  291. package/dist/bin/core-chunks/mcp-BD5TOTCK.mjs +17 -0
  292. package/dist/bin/core-chunks/memory-dream-6GFV2GXN.mjs +14 -0
  293. package/dist/bin/core-chunks/memory-export-WJ4H7CFV.mjs +13 -0
  294. package/dist/bin/core-chunks/memory-index-7NIU34EI.mjs +7 -0
  295. package/dist/bin/core-chunks/notification-G654IX3O.mjs +7 -0
  296. package/dist/bin/core-chunks/notify-EWYUBKGO.mjs +9 -0
  297. package/dist/bin/core-chunks/nyquist-lite-A23B7G4B.mjs +9 -0
  298. package/dist/bin/core-chunks/one-breath-install-LVNIVN6S.mjs +7 -0
  299. package/dist/bin/core-chunks/opencode-mcp-L7NC77JF.mjs +7 -0
  300. package/dist/bin/core-chunks/output-D27IOQXR.mjs +7 -0
  301. package/dist/bin/core-chunks/pack-integrity-X277OVRB.mjs +9 -0
  302. package/dist/bin/core-chunks/pack-manager-VN7F6R47.mjs +7 -0
  303. package/dist/bin/core-chunks/package-R4FUTGOE.mjs +7 -0
  304. package/dist/bin/core-chunks/package-legitimacy-VHHGI4P7.mjs +7 -0
  305. package/dist/bin/core-chunks/path-manager-E5DCU5LP.mjs +7 -0
  306. package/dist/bin/core-chunks/performance-tracker-BFBNR3LY.mjs +7 -0
  307. package/dist/bin/core-chunks/pi-skill-IZQEUILZ.mjs +7 -0
  308. package/dist/bin/core-chunks/planning-NOWLKZDS.mjs +8 -0
  309. package/dist/bin/core-chunks/post-edit-GTBY32JU.mjs +7 -0
  310. package/dist/bin/core-chunks/pr-convention-37YHTUKM.mjs +7 -0
  311. package/dist/bin/core-chunks/pre-bash-32ZOGNSP.mjs +10 -0
  312. package/dist/bin/core-chunks/pre-commit-7TU2A7H4.mjs +7 -0
  313. package/dist/bin/core-chunks/pre-edit-ASEWA5TS.mjs +8 -0
  314. package/dist/bin/core-chunks/pre-package-ZTZACEBB.mjs +7 -0
  315. package/dist/bin/core-chunks/pre-search-MKDRFJSE.mjs +8 -0
  316. package/dist/bin/core-chunks/pre-secrets-RJELPDFY.mjs +7 -0
  317. package/dist/bin/core-chunks/precision-classifier-AV75OEVA.mjs +7 -0
  318. package/dist/bin/core-chunks/precision-judgment-MCX4MIIG.mjs +7 -0
  319. package/dist/bin/core-chunks/preferences-KO5U2ELK.mjs +31 -0
  320. package/dist/bin/core-chunks/primitives-GNUMBYOK.mjs +13 -0
  321. package/dist/bin/core-chunks/prjct-md-BSFV7OQQ.mjs +7 -0
  322. package/dist/bin/core-chunks/product-GUHSUNIH.mjs +68 -0
  323. package/dist/bin/core-chunks/project-agent-surfaces-BXCJJXB7.mjs +7 -0
  324. package/dist/bin/core-chunks/project-alignment-ADKW3ZWQ.mjs +17 -0
  325. package/dist/bin/core-chunks/project-file-inventory-XIHHJZUP.mjs +7 -0
  326. package/dist/bin/core-chunks/project-memory-L5MDZYST.mjs +7 -0
  327. package/dist/bin/core-chunks/project-style-evolution-HIMSJQQB.mjs +7 -0
  328. package/dist/bin/core-chunks/prompt-47YP5JIR.mjs +25 -0
  329. package/dist/bin/core-chunks/protocol-4AJ4J5SI.mjs +7 -0
  330. package/dist/bin/core-chunks/provider-cache-IWVTFLGT.mjs +7 -0
  331. package/dist/bin/core-chunks/provider-status-HQUBKMH5.mjs +7 -0
  332. package/dist/bin/core-chunks/publish-helper-2T2EHM3V.mjs +7 -0
  333. package/dist/bin/core-chunks/purge-6SJKHKIY.mjs +7 -0
  334. package/dist/bin/core-chunks/queue-storage-BKH5XX2E.mjs +7 -0
  335. package/dist/bin/core-chunks/registry-YM2EYUXY.mjs +7 -0
  336. package/dist/bin/core-chunks/reliability-repair-JMPZWDD4.mjs +20 -0
  337. package/dist/bin/core-chunks/removed-verbs-EU3WPRNK.mjs +7 -0
  338. package/dist/bin/core-chunks/retention-QSXWKE4H.mjs +7 -0
  339. package/dist/bin/core-chunks/retro-B2EBN4TA.mjs +13 -0
  340. package/dist/bin/core-chunks/review-risk-LBPY5M3K.mjs +12 -0
  341. package/dist/bin/core-chunks/run-recorder-EZQ32M55.mjs +7 -0
  342. package/dist/bin/core-chunks/safe-artifacts-PE2TMEZQ.mjs +9 -0
  343. package/dist/bin/core-chunks/sdd-3WNZJ6FU.mjs +9 -0
  344. package/dist/bin/core-chunks/seed-MMDJE2UO.mjs +10 -0
  345. package/dist/bin/core-chunks/self-heal-R5FBXEVQ.mjs +7 -0
  346. package/dist/bin/core-chunks/session-continuity-OQDB5UYI.mjs +10 -0
  347. package/dist/bin/core-chunks/session-start-FM6UL7MT.mjs +7 -0
  348. package/dist/bin/core-chunks/session-tracker-RG2FBWMS.mjs +7 -0
  349. package/dist/bin/core-chunks/settings-installer-4XHM3HAZ.mjs +7 -0
  350. package/dist/bin/core-chunks/setup-BL36ZWPW.mjs +140 -0
  351. package/dist/bin/core-chunks/setup-V75BWRHU.mjs +38 -0
  352. package/dist/bin/core-chunks/shipping-NZVM57JJ.mjs +12 -0
  353. package/dist/bin/core-chunks/signals-digest-P5BG6MZF.mjs +7 -0
  354. package/dist/bin/core-chunks/skill-adherence-JE3N3Y67.mjs +13 -0
  355. package/dist/bin/core-chunks/skill-generator-LKS5BNMY.mjs +7 -0
  356. package/dist/bin/core-chunks/skill-index-L4UWQCQE.mjs +11 -0
  357. package/dist/bin/core-chunks/spec-VC3VTUI3.mjs +27 -0
  358. package/dist/bin/core-chunks/spec-context-inference-KOINWBC7.mjs +9 -0
  359. package/dist/bin/core-chunks/spec-inventory-2TT7BTFZ.mjs +9 -0
  360. package/dist/bin/core-chunks/spec-service-UZ53XL6X.mjs +7 -0
  361. package/dist/bin/core-chunks/spec-task-breakdown-3Y7YXCIQ.mjs +7 -0
  362. package/dist/bin/core-chunks/state-storage-6CGFWW5D.mjs +7 -0
  363. package/dist/bin/core-chunks/stdin-spill-Y2A6WOOW.mjs +7 -0
  364. package/dist/bin/core-chunks/stop-6SH36ULT.mjs +15 -0
  365. package/dist/bin/core-chunks/subagent-start-TVGBV2V2.mjs +7 -0
  366. package/dist/bin/core-chunks/subagent-stop-APWY6KMX.mjs +7 -0
  367. package/dist/bin/core-chunks/surface-attribution-CQVM2SWY.mjs +7 -0
  368. package/dist/bin/core-chunks/symbol-graph-PCS43SHZ.mjs +7 -0
  369. package/dist/bin/core-chunks/sync-analyzer-M37Q4LE4.mjs +7 -0
  370. package/dist/bin/core-chunks/sync-client-6TAOTJWR.mjs +7 -0
  371. package/dist/bin/core-chunks/sync-cursor-storage-GKO4X2QN.mjs +18 -0
  372. package/dist/bin/core-chunks/task-orchestration-GS4J4KGS.mjs +7 -0
  373. package/dist/bin/core-chunks/task-overview-XSMK7YEN.mjs +7 -0
  374. package/dist/bin/core-chunks/task-service-KFYL5NT4.mjs +7 -0
  375. package/dist/bin/core-chunks/tdd-P2PP4RR4.mjs +9 -0
  376. package/dist/bin/core-chunks/team-WKAAOEFE.mjs +42 -0
  377. package/dist/bin/core-chunks/template-loader-H4FE37HV.mjs +7 -0
  378. package/dist/bin/core-chunks/token-backfill-WPXXD5MP.mjs +12 -0
  379. package/dist/bin/core-chunks/token-economics-JZAQJUET.mjs +7 -0
  380. package/dist/bin/core-chunks/transcript-jsonl-OC7TH4Q3.mjs +7 -0
  381. package/dist/bin/core-chunks/trust-boundary-24F662RM.mjs +7 -0
  382. package/dist/bin/core-chunks/uninstall-W6EAUS7N.mjs +13 -0
  383. package/dist/bin/core-chunks/update-PSHEJJI5.mjs +11 -0
  384. package/dist/bin/core-chunks/update-checker-LZCUPWQB.mjs +7 -0
  385. package/dist/bin/core-chunks/usefulness-A3GRKFL3.mjs +7 -0
  386. package/dist/bin/core-chunks/user-home-BODIAXR4.mjs +7 -0
  387. package/dist/bin/core-chunks/vault-retire-notice-FDRT7BJG.mjs +8 -0
  388. package/dist/bin/core-chunks/velocity-storage-5T7RYOWH.mjs +7 -0
  389. package/dist/bin/core-chunks/verb-names-QWGYABFH.mjs +7 -0
  390. package/dist/bin/core-chunks/version-B5DBRVGQ.mjs +7 -0
  391. package/dist/bin/core-chunks/watch-service-7V3O52TW.mjs +9 -0
  392. package/dist/bin/core-chunks/weak-frontier-demo-ZCDTMYRO.mjs +7 -0
  393. package/dist/bin/core-chunks/weak-model-mode-LOAPFJPQ.mjs +7 -0
  394. package/dist/bin/core-chunks/work-graph-WHMCFN6U.mjs +7 -0
  395. package/dist/bin/core-chunks/work-graph-ZNV7S6EU.mjs +16 -0
  396. package/dist/bin/core-chunks/work-scope-XXPUH6TU.mjs +7 -0
  397. package/dist/bin/core-chunks/workflow-XM77QYRF.mjs +61 -0
  398. package/dist/bin/core-chunks/workflows-reference-T7RH7IGJ.mjs +7 -0
  399. package/dist/bin/core-chunks/workspace-occupancy-JUXKZBUZ.mjs +7 -0
  400. package/dist/bin/core-chunks/worktree-service-YRRPFU57.mjs +11 -0
  401. package/dist/bin/core-chunks/world-model-impact-FAGGNUGN.mjs +7 -0
  402. package/dist/bin/hook-chunks/{agent-switch-I4MTVE56.mjs → agent-switch-TAJWH2ZD.mjs} +1 -1
  403. package/dist/bin/hook-chunks/{analysis-VN7APBHR.mjs → analysis-34WDLUXK.mjs} +2 -2
  404. package/dist/bin/hook-chunks/{auto-flush-DX3FVSQE.mjs → auto-flush-7TIEBPPQ.mjs} +1 -1
  405. package/dist/bin/hook-chunks/{capture-gate-MEIQD7ZS.mjs → capture-gate-JFVGG7RB.mjs} +1 -1
  406. package/dist/bin/hook-chunks/{chunk-UVATSTRF.mjs → chunk-22CBVTZ3.mjs} +1 -1
  407. package/dist/bin/hook-chunks/{chunk-MW54MTLB.mjs → chunk-3JOZN7YJ.mjs} +1 -1
  408. package/dist/bin/hook-chunks/{chunk-E7NA34VQ.mjs → chunk-4X3KUIXK.mjs} +1 -1
  409. package/dist/bin/hook-chunks/{chunk-3AHW4XQH.mjs → chunk-5ALQBNIZ.mjs} +1 -1
  410. package/dist/bin/hook-chunks/{chunk-H2DGDAQP.mjs → chunk-5VPZI2ZF.mjs} +1 -1
  411. package/dist/bin/hook-chunks/{chunk-XYKVWO23.mjs → chunk-6EHYPQ5U.mjs} +1 -1
  412. package/dist/bin/hook-chunks/chunk-6NMHVPAI.mjs +35 -0
  413. package/dist/bin/hook-chunks/chunk-7H5UVM6X.mjs +9 -0
  414. package/dist/bin/hook-chunks/{chunk-LR24AIEW.mjs → chunk-A3R47SP6.mjs} +1 -1
  415. package/dist/bin/hook-chunks/chunk-AFGXKRRP.mjs +12 -0
  416. package/dist/bin/hook-chunks/{chunk-64ZEBHDX.mjs → chunk-CGAKJDKT.mjs} +1 -1
  417. package/dist/bin/hook-chunks/{chunk-EI6VQZOX.mjs → chunk-CJY4Y5SO.mjs} +1 -1
  418. package/dist/bin/hook-chunks/chunk-FSFURDAE.mjs +16 -0
  419. package/dist/bin/hook-chunks/{chunk-ZZBNFNMG.mjs → chunk-FTBBQHI4.mjs} +1 -1
  420. package/dist/bin/hook-chunks/chunk-G4VJKPG7.mjs +69 -0
  421. package/dist/bin/hook-chunks/{chunk-7PBWIO4K.mjs → chunk-GAJOSSB4.mjs} +2 -2
  422. package/dist/bin/hook-chunks/{chunk-DB226JIV.mjs → chunk-GER6HFWV.mjs} +1 -1
  423. package/dist/bin/hook-chunks/{chunk-LQLCYBFF.mjs → chunk-H3GIYI4Q.mjs} +2 -2
  424. package/dist/bin/hook-chunks/{chunk-KDNUQPAK.mjs → chunk-HRU2KNEB.mjs} +1 -1
  425. package/dist/bin/hook-chunks/{chunk-33BHU4OM.mjs → chunk-LCGWETJ6.mjs} +1 -1
  426. package/dist/bin/hook-chunks/{chunk-WL6PKX3U.mjs → chunk-MG2DNP4Z.mjs} +1 -1
  427. package/dist/bin/hook-chunks/{chunk-XV2LJVYB.mjs → chunk-MIJZT4ZR.mjs} +1 -1
  428. package/dist/bin/hook-chunks/chunk-NGB6JNSB.mjs +18 -0
  429. package/dist/bin/hook-chunks/{chunk-IJ523YO2.mjs → chunk-OALZUWC6.mjs} +1 -1
  430. package/dist/bin/hook-chunks/{chunk-EGCYDLSO.mjs → chunk-PZMBZ6GE.mjs} +1 -1
  431. package/dist/bin/hook-chunks/{chunk-RT2DFIWF.mjs → chunk-QIB6Y6AH.mjs} +2 -2
  432. package/dist/bin/hook-chunks/{chunk-ZQI4TJ5C.mjs → chunk-QMNZPNVY.mjs} +1 -1
  433. package/dist/bin/hook-chunks/{chunk-YLOK4WRR.mjs → chunk-R4YDE3GU.mjs} +1 -1
  434. package/dist/bin/hook-chunks/{chunk-WJV24WE6.mjs → chunk-RFKRKUHB.mjs} +1 -1
  435. package/dist/bin/hook-chunks/{chunk-SWJ7TLBD.mjs → chunk-RGOTJCZU.mjs} +1 -1
  436. package/dist/bin/hook-chunks/{chunk-FZS3XGEA.mjs → chunk-RLKYEL3F.mjs} +1 -1
  437. package/dist/bin/hook-chunks/{chunk-LF3S3MYE.mjs → chunk-T2KVL6PZ.mjs} +1 -1
  438. package/dist/bin/hook-chunks/{chunk-NLL5AV2G.mjs → chunk-T7DRHVK3.mjs} +2 -2
  439. package/dist/bin/hook-chunks/{chunk-KV4NXLPT.mjs → chunk-TWFLW6OJ.mjs} +1 -1
  440. package/dist/bin/hook-chunks/{chunk-ADYTBOCZ.mjs → chunk-UJIOGFNP.mjs} +1 -1
  441. package/dist/bin/hook-chunks/{chunk-Y3RHBU2R.mjs → chunk-UK24P7PV.mjs} +2 -2
  442. package/dist/bin/hook-chunks/{chunk-OLQAMCYV.mjs → chunk-ULNGKZB6.mjs} +5 -5
  443. package/dist/bin/hook-chunks/{chunk-UMJ5D5I6.mjs → chunk-UWHVPO6X.mjs} +2 -2
  444. package/dist/bin/hook-chunks/{chunk-YHOZTAZH.mjs → chunk-V6GGH6H5.mjs} +1 -1
  445. package/dist/bin/hook-chunks/{chunk-EXVL2OFE.mjs → chunk-XC2BSGWF.mjs} +1 -1
  446. package/dist/bin/hook-chunks/{chunk-JZDZH6IV.mjs → chunk-YATXTHDL.mjs} +1 -1
  447. package/dist/bin/hook-chunks/{chunk-DCHIPMOG.mjs → chunk-ZF2EVMY7.mjs} +1 -1
  448. package/dist/bin/hook-chunks/{chunk-PVCEWFHS.mjs → chunk-ZPAY2NSF.mjs} +2 -2
  449. package/dist/bin/hook-chunks/{codex-skill-6CRFUF3A.mjs → codex-skill-BFRU5FTP.mjs} +1 -1
  450. package/dist/bin/hook-chunks/{command-installer-MUHZWDZA.mjs → command-installer-3XOZGKOQ.mjs} +1 -1
  451. package/dist/bin/hook-chunks/{config-manager-2JJPCLKC.mjs → config-manager-UPB7NEXF.mjs} +1 -1
  452. package/dist/bin/hook-chunks/{context7-service-NH4BMGSJ.mjs → context7-service-7VFXEQVN.mjs} +1 -1
  453. package/dist/bin/hook-chunks/{cwd-changed-UTD6Y4MS.mjs → cwd-changed-USNJYUH7.mjs} +1 -1
  454. package/dist/bin/hook-chunks/{distill-5TNAM3LY.mjs → distill-47YVL7IH.mjs} +1 -1
  455. package/dist/bin/hook-chunks/{enriched-recall-6VOIUNLN.mjs → enriched-recall-CVYI52NO.mjs} +1 -1
  456. package/dist/bin/hook-chunks/{format-IIOFTSBF.mjs → format-DPIN45EG.mjs} +1 -1
  457. package/dist/bin/hook-chunks/{judgment-receipt-QLV3MYFT.mjs → judgment-receipt-G2DKQR7U.mjs} +1 -1
  458. package/dist/bin/hook-chunks/{land-cue-57B23PEL.mjs → land-cue-3JD2TXFP.mjs} +1 -1
  459. package/dist/bin/hook-chunks/{land-synthesis-ZVPFJERV.mjs → land-synthesis-5C4KGCTB.mjs} +1 -1
  460. package/dist/bin/hook-chunks/{legacy-crew-sweep-GR6HRSHX.mjs → legacy-crew-sweep-XQNXNZES.mjs} +2 -2
  461. package/dist/bin/hook-chunks/{memory-index-XE2MWKQS.mjs → memory-index-LL6SQJ2N.mjs} +1 -1
  462. package/dist/bin/hook-chunks/{notification-GU2ZJP5K.mjs → notification-ACQBRJG3.mjs} +1 -1
  463. package/dist/bin/hook-chunks/{pack-integrity-WV5U3AFF.mjs → pack-integrity-DCXVRRJZ.mjs} +1 -1
  464. package/dist/bin/hook-chunks/{pack-manager-QLFQKP24.mjs → pack-manager-KYWKNYUY.mjs} +1 -1
  465. package/dist/bin/hook-chunks/{planning-VPAX5DZL.mjs → planning-KOU3XKWS.mjs} +2 -2
  466. package/dist/bin/hook-chunks/{post-edit-UXCFSR3Y.mjs → post-edit-CK2MYQEN.mjs} +1 -1
  467. package/dist/bin/hook-chunks/{pre-bash-MB4JNNYG.mjs → pre-bash-W5A5CTR3.mjs} +1 -1
  468. package/dist/bin/hook-chunks/{pre-commit-U7TRFKWX.mjs → pre-commit-5Q24RM4S.mjs} +1 -1
  469. package/dist/bin/hook-chunks/{pre-edit-MDCQXI5F.mjs → pre-edit-YIJ4BCYL.mjs} +1 -1
  470. package/dist/bin/hook-chunks/{pre-package-A6ZI5R64.mjs → pre-package-O4RMVA4T.mjs} +1 -1
  471. package/dist/bin/hook-chunks/{pre-search-ZZO3LGXJ.mjs → pre-search-WYOWC3D6.mjs} +1 -1
  472. package/dist/bin/hook-chunks/{prjct-md-MS52YLI2.mjs → prjct-md-2UVHFYTJ.mjs} +1 -1
  473. package/dist/bin/hook-chunks/{project-agent-surfaces-6AIW7KL6.mjs → project-agent-surfaces-BKFYUMRV.mjs} +1 -1
  474. package/dist/bin/hook-chunks/{project-memory-UDH56VFP.mjs → project-memory-OC5GTJPY.mjs} +1 -1
  475. package/dist/bin/hook-chunks/{project-style-evolution-IJXT2MCP.mjs → project-style-evolution-2IFJCACQ.mjs} +1 -1
  476. package/dist/bin/hook-chunks/prompt-JIWMP563.mjs +26 -0
  477. package/dist/bin/hook-chunks/{purge-N2WN6NDB.mjs → purge-FQK3Z4QS.mjs} +1 -1
  478. package/dist/bin/hook-chunks/{retention-RET4P2RO.mjs → retention-2FETBJFG.mjs} +1 -1
  479. package/dist/bin/hook-chunks/{sdd-PB6WKSLE.mjs → sdd-V43TSJ2P.mjs} +1 -1
  480. package/dist/bin/hook-chunks/{session-continuity-BIJXMN44.mjs → session-continuity-RO2ACICF.mjs} +1 -1
  481. package/dist/bin/hook-chunks/{session-start-R2VMKW2L.mjs → session-start-FKKFMKQ5.mjs} +1 -1
  482. package/dist/bin/hook-chunks/{setup-PPIZHVXS.mjs → setup-YV2DKG5L.mjs} +2 -2
  483. package/dist/bin/hook-chunks/{shipping-C637PCOF.mjs → shipping-SCNFEXBY.mjs} +4 -4
  484. package/dist/bin/hook-chunks/{spec-context-inference-RTTDOZZO.mjs → spec-context-inference-BD3ANTXA.mjs} +1 -1
  485. package/dist/bin/hook-chunks/{spec-service-ENLAAMVL.mjs → spec-service-OWYOAGXS.mjs} +2 -2
  486. package/dist/bin/hook-chunks/{spec-task-breakdown-RUDEP3AY.mjs → spec-task-breakdown-HOTLUFDM.mjs} +1 -1
  487. package/dist/bin/hook-chunks/{state-storage-AJUPG7J5.mjs → state-storage-EMWLIFQJ.mjs} +1 -1
  488. package/dist/bin/hook-chunks/{stop-DPXAWJFN.mjs → stop-MIXT7WXA.mjs} +3 -3
  489. package/dist/bin/hook-chunks/{subagent-start-AFHPXL2S.mjs → subagent-start-NO3TN65K.mjs} +1 -1
  490. package/dist/bin/hook-chunks/{subagent-stop-5BMV63ML.mjs → subagent-stop-CKWIXX7W.mjs} +1 -1
  491. package/dist/bin/hook-chunks/{surface-attribution-EGIKCVMF.mjs → surface-attribution-BYESPLXM.mjs} +1 -1
  492. package/dist/bin/hook-chunks/{task-overview-F3GB77OA.mjs → task-overview-P3VRH2FD.mjs} +1 -1
  493. package/dist/bin/hook-chunks/{task-service-FZABHPFV.mjs → task-service-5ONSBKKP.mjs} +1 -1
  494. package/dist/bin/hook-chunks/{tdd-TAMBOPN3.mjs → tdd-SESB4IG3.mjs} +1 -1
  495. package/dist/bin/hook-chunks/{template-loader-MXOMU4XH.mjs → template-loader-KO67FVHO.mjs} +1 -1
  496. package/dist/bin/hook-chunks/{weak-model-mode-BMSPGEQY.mjs → weak-model-mode-HPXBKXJT.mjs} +1 -1
  497. package/dist/bin/hook-chunks/{work-scope-YCS4GTXW.mjs → work-scope-RNPGACPA.mjs} +1 -1
  498. package/dist/bin/hook-chunks/{workspace-occupancy-JOBYNNXV.mjs → workspace-occupancy-3NEAXILW.mjs} +1 -1
  499. package/dist/bin/prjct-core.mjs +9 -3323
  500. package/dist/bin/prjct-hooks.mjs +1 -1
  501. package/dist/bin/prjct.mjs +7 -1
  502. package/dist/daemon/entry.mjs +591 -582
  503. package/dist/mcp/server.mjs +320 -313
  504. package/package.json +4 -2
  505. package/dist/bin/hook-chunks/chunk-3UB6SFRA.mjs +0 -11
  506. package/dist/bin/hook-chunks/chunk-D7DQABWO.mjs +0 -35
  507. package/dist/bin/hook-chunks/chunk-IWUF2LGO.mjs +0 -18
  508. package/dist/bin/hook-chunks/chunk-M4YM7Z3F.mjs +0 -69
  509. package/dist/bin/hook-chunks/chunk-TB57OYGW.mjs +0 -16
  510. package/dist/bin/hook-chunks/chunk-ZYCNW75E.mjs +0 -9
  511. package/dist/bin/hook-chunks/prompt-7VZLYONO.mjs +0 -24
@@ -0,0 +1,7 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import{b as e,p as s}from"./chunk-D62TAZG6.mjs";import{a as i}from"./chunk-3TRXQAU4.mjs";s();var p=["on","off"];function a(t){let n=t?.notify?.mode;if(n==="on"||n==="off")return n;let o=process.env.PRJCT_NOTIFY_MODE?.toLowerCase();return o==="on"||o==="off"?o:"on"}i(a,"effectiveNotifyMode");function f(t){return t.replace(/["\\]/g,"").replace(/[\r\n]+/g," ").trim().slice(0,180)}i(f,"sanitize");async function l(t,n){try{let o=f(t)||"prjct",r=f(n);process.platform==="darwin"?await e("osascript",["-e",`display notification "${r}" with title "${o}"`]):process.platform==="linux"&&await e("notify-send",[o,r])}catch{}}i(l,"notifyDesktop");export{p as a,a as b,l as c};
@@ -0,0 +1,7 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import{a as u,c as m}from"./chunk-RXZJB43D.mjs";import{b as f}from"./chunk-XSZOHNL4.mjs";import{a as d}from"./chunk-3TRXQAU4.mjs";async function P(t){let i=await import("node:fs/promises"),n=await import("node:path"),s=new Set(["daily"]),o=["package.json","go.mod","Cargo.toml","pyproject.toml","Gemfile","pom.xml","build.gradle"];for(let e of o)try{await i.stat(n.join(t,e)),s.add("code");break}catch{}return[...s]}d(P,"detectSuggestedPacks");async function C(t){let i=await f.readConfig(t);if(!i)return{healed:!1,activated:[],reason:"no-config"};if(i.judgment?.conflictMode==="off")return{healed:!1,activated:[],reason:"conflictMode-off"};let n=i.persona?.packs??[];if(n.includes("code")||n.includes("code-strict"))return!i.judgment?.conflictMode&&n.includes("code")?(await f.writeConfig(t,{...i,judgment:{...i.judgment,conflictMode:"advisory"}}),{healed:!0,activated:[],reason:"conflictMode-healed"}):{healed:!1,activated:[],reason:"already-coding-pack"};if(!(await P(t)).includes("code"))return{healed:!1,activated:[],reason:"not-code-repo"};let e=await y(t,["code"],{suggestPersona:!0});return e.activated.includes("code")?{healed:!0,activated:e.activated,reason:"activated-code"}:{healed:!1,activated:[],reason:"noop"}}d(C,"ensureCodingAnticipationDefaults");async function y(t,i,n={}){let s=[],o=[],e=await f.readConfig(t);if(!e)throw new Error("No prjct project here \u2014 run `prjct init` first.");let a=e.persona??{role:"DEV"},r=new Set(a.packs??[]);for(let g of i){if(!u[g]){o.push(g);continue}r.has(g)||(r.add(g),s.push(g))}let l=[...r],c={...a,packs:l};n.suggestPersona&&s.length>0&&k(c,s);let p={...e,persona:c,...v(e,s)};if(await f.writeConfig(t,p),s.length>0&&e.projectId)try{let{stampPackInstalls:g}=await import("./pack-integrity-X277OVRB.mjs");g(e.projectId,s)}catch{}return{activated:s,skipped:o}}d(y,"activatePacks");function v(t,i){let n={};for(let s of i){let o=u[s]?.configDefaults;o&&(o.sdd&&!t.sdd&&(n.sdd={mode:o.sdd}),o.tdd&&!t.tdd&&(n.tdd={mode:o.tdd}),o.maxTurnsPerCycle!=null&&t.maxTurnsPerCycle==null&&n.maxTurnsPerCycle==null&&(n.maxTurnsPerCycle=o.maxTurnsPerCycle),o.deliveryGeometry&&!t.deliveryGeometry&&(n.deliveryGeometry={mode:o.deliveryGeometry}),o.land&&!t.land&&(n.land={mode:o.land}),o.conflictMode&&!t.judgment?.conflictMode&&(n.judgment={...t.judgment,...n.judgment,conflictMode:o.conflictMode}))}return n}d(v,"packConfigDefaults");async function j(t,i){let n=await f.readConfig(t);if(!n)throw new Error("No prjct project here \u2014 run `prjct init` first.");let s=n.persona??{role:"DEV"},o=new Set(s.packs??[]),e=[],a=[];for(let c of i)o.delete(c)?e.push(c):a.push(c);let r={...s,packs:[...o]},l={...n,persona:r};if(await f.writeConfig(t,l),e.length>0&&n.projectId)try{let{clearPackInstalls:c}=await import("./pack-integrity-X277OVRB.mjs");c(n.projectId,e)}catch{}return{deactivated:e,notActive:a}}d(j,"deactivatePacks");async function M(t){let n=(await f.readConfig(t))?.persona?.packs??[],s=await import("./pack-integrity-X277OVRB.mjs").then(({buildPackCatalog:a})=>a(t)).catch(()=>[]),o=Object.fromEntries(s.filter(a=>a.active).map(a=>[a.name,{version:a.version,integrity:a.integrity,status:a.status}])),e=[];for(let a of n){let r=u[a];if(!r){let c=o[a];e.push({name:a,description:"Unknown pack (not in built-in catalog)",memoryTypes:[],slots:[],version:c?.version,integrity:c?.integrity,status:c?.status??"unknown"});continue}let l=o[a];e.push({name:r.name,description:r.description,memoryTypes:r.memoryTypes,slots:Object.keys(r.workflowSlots),version:l?.version??r.version,integrity:l?.integrity,status:l?.status??"active"})}return e}d(M,"listActivePacks");function k(t,i){let n=t.role&&t.role!=="DEV",s=t.mcps&&t.mcps.length>0;for(let o of i){let e=m(o);if(e?.suggestedPersona&&(!n&&e.suggestedPersona.role&&(t.role=e.suggestedPersona.role),!t.focus&&e.suggestedPersona.focus&&(t.focus=e.suggestedPersona.focus),!s&&e.suggestedPersona.mcps&&(t.mcps=[...e.suggestedPersona.mcps]),t.role&&t.role!=="DEV"))break}}d(k,"applyPersonaSuggestion");export{P as a,C as b,y as c,j as d,M as e};
@@ -0,0 +1,10 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import{a as h,b as a}from"./chunk-5YLI5V3Q.mjs";import{g as p}from"./chunk-BUD3R6LF.mjs";import{a as o}from"./chunk-3TRXQAU4.mjs";var k=25,$=15,g=10,m=6;function E(n){return h(n.replace(/\s+/g," ").trim(),200)}o(E,"teaser");function b(n){return a(n,240)}o(b,"frictionLine");function x(n,s=m){let r=[],i=new Set,c=o((e,t,f)=>{let u=d(e);if(!u||u.length<12)return;let l=u.toLowerCase();i.has(l)||(i.add(l),r.push({rule:u,sourceId:t,kind:f}))},"push");for(let e of n.filter(t=>t.type==="feedback")){if(r.length>=s)break;c(e.content,e.id,"preference")}for(let e of n.filter(t=>t.type==="improvement-signal"&&t.tags?.source==="friction-detector")){if(r.length>=s)break;let t=y(e.content)??v(e.content);t&&c(t,e.id,"friction")}return r}o(x,"extractDeveloperRules");function d(n){return n.replace(/\s+/g," ").trim().replace(/^[-*•]\s+/,"")}o(d,"normalizeRule");function y(n){return n.match(/^Next action:\s*(.+)$/im)?.[1]?.trim()||null}o(y,"extractNextAction");function v(n){let s=n.split(`
8
+ `).map(i=>i.trim())[0]??"",r=s.match(/^\[[^\]]+\]\s+Lesson:\s*(.+)$/i);return r?.[1]?r[1].trim():/^\[[^\]]+\]/.test(s)&&s.length>20?s:null}o(v,"extractLesson");function w(n,s=g){let r=[],i=new Set;for(let c of n.filter(e=>e.type==="improvement-signal"&&e.tags?.source==="friction-detector")){let e=y(c.content);if(!e)continue;let t=d(e),f=t.toLowerCase();if(!(i.has(f)||t.length<12)&&(i.add(f),r.push(t),r.length>=s))break}return r}o(w,"extractWorkingPrinciples");function R(n){let s=n.filter(t=>t.type==="feedback").slice(0,k),r=n.filter(t=>t.type==="improvement-signal"&&t.tags?.source==="friction-detector").slice(0,$);if(s.length===0&&r.length===0)return null;let i=x(n,m),c=w(n,g),e=["# Developer profile",""];if(e.push("> Synthesized from the developer\u2019s stated feedback and their pushback.","> Read this to act as they would \u2014 match these preferences without being asked.",""),i.length>0){e.push("## Act as this developer \u2014 rules in force","");for(let t of i){let f=t.kind==="preference"?"said":"showed";e.push(`- ${t.rule} \`${t.sourceId}\` _(${f})_`)}e.push("")}if(s.length>0){e.push("## Preferences & guidance \u2014 the rules to follow","");for(let t of s)e.push(`- **${p(t)}** \u2014 ${E(t.content)} \`${t.id}\``);e.push("")}if(c.length>0){e.push("## Working principles \u2014 from their pushback (do this instead)","");for(let t of c)e.push(`- ${t}`);e.push("")}if(r.length>0){e.push("## Friction history \u2014 what frustrated them, do not repeat","");for(let t of r)e.push(`- ${b(t.content)} \`${t.id}\``);e.push("")}return`${e.join(`
9
+ `)}
10
+ `}o(R,"buildDeveloperProfile");export{x as a,R as b};
@@ -0,0 +1,7 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import{a as r}from"./chunk-3TRXQAU4.mjs";function n(e){return e.normalize("NFD").replace(/[̀-ͯ]/g,"")}r(n,"deburr");export{n as a};
@@ -0,0 +1,7 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import{a as v}from"./chunk-OIE3AKKO.mjs";import{F as s,G as k,e as u,l as E}from"./chunk-HU5ERAAV.mjs";import{a as y,b as P,p as G}from"./chunk-D62TAZG6.mjs";import{d as w,e as S}from"./chunk-623SNKDH.mjs";import{d as C,g as j}from"./chunk-XWLTEAGN.mjs";import{g as b,p as $}from"./chunk-HYIT7MF5.mjs";import{a as f,g as M}from"./chunk-225DWS4D.mjs";import{a as c}from"./chunk-3TRXQAU4.mjs";S();import h from"node:fs/promises";import H from"node:path";import*as d from"jsonc-parser";G();import D from"node:crypto";var F="6f9b2c1a-3d4e-5f60-8a7b-1c2d3e4f5a6b";function N(r,t=F){let n=Buffer.from(t.replace(/-/g,""),"hex"),i=D.createHash("sha1").update(n).update(r,"utf8").digest().subarray(0,16);i[6]=i[6]&15|80,i[8]=i[8]&63|128;let e=i.toString("hex");return`${e.slice(0,8)}-${e.slice(8,12)}-${e.slice(12,16)}-${e.slice(16,20)}-${e.slice(20,32)}`}c(N,"uuidv5");async function R(r){let t=await P("git",["remote","get-url","origin"],{cwd:r}).then(({stdout:i})=>i.trim()||null).catch(()=>null);if(!t)return null;let{provider:n,repoSlug:o}=v(t);return!n||!o?null:`${n}:${o}`.toLowerCase()}c(R,"repoKey");async function x(r){let t=await R(r);return t?N(t):null}c(x,"deriveProjectId");M();E();$();j();G();async function m(r){try{let{stdout:t}=await y(r,{timeout:5e3});return{success:!0,output:t.trim()}}catch{return{success:!1,output:""}}}c(m,"execCommand");async function T(){let r=await m("gh api user --jq .login");if(r.success&&r.output)return r.output;let t=await m("git config --global github.user");return t.success&&t.output?t.output:null}c(T,"detectGitHubUsername");async function U(){let r=await m("git config user.name");return r.success&&r.output?r.output:null}c(U,"detectGitName");async function J(){let r=await m("git config user.email");return r.success&&r.output?r.output:null}c(J,"detectGitEmail");async function A(){let[r,t,n]=await Promise.all([T(),U(),J()]);return{github:r,email:n,name:t||r||"Unknown"}}c(A,"detect");k();function I(r){let t=[],n=d.parse(r,t,{allowTrailingComma:!0,disallowComments:!1});if(t.length>0){let o=t[0];throw new SyntaxError(`JSON parse error at offset ${o.offset}: ${d.printParseErrorCode(o.error)}`)}return n}c(I,"parseJsonc");var l=new Map,p=class{static{c(this,"ConfigManager")}async readConfig(t){let n=s.getLocalConfigPath(t),o=await h.stat(n).catch(()=>null);if(!o)return l.delete(n),null;let i=o.mtimeMs,e=l.get(n);if(e&&e.mtimeMs===i)return e.config;try{let a=await h.readFile(n,"utf-8"),g=I(a);return l.size>32&&l.clear(),l.set(n,{mtimeMs:i,config:g}),g}catch(a){return f(a)?(l.delete(n),null):(console.warn(`Warning: Could not read config at ${t}: ${w(a)}`),null)}}async writeConfig(t,n){let o=s.getLocalConfigPath(t);await b(o,n),l.delete(o)}async readGlobalConfig(t){try{let n=s.getGlobalProjectConfigPath(t),o=await h.readFile(n,"utf-8");return I(o)}catch(n){return f(n)||console.warn(`Warning: Could not read global config for ${t}: ${w(n)}`),null}}async writeGlobalConfig(t,n){let o=s.getGlobalProjectConfigPath(t);await b(o,n)}async ensureGlobalConfig(t){let n=await this.readGlobalConfig(t),o=n??(()=>{let i=u();return{projectId:t,authors:[],version:C,lastSync:i}})();return n||await this.writeGlobalConfig(t,o),o}async createConfig(t,n){let o=await x(t)??s.generateProjectId(t),i=s.getGlobalProjectPath(o),e=s.getDisplayPath(i),a=u(),g={projectId:o,dataPath:e,showMetrics:!0};await this.writeConfig(t,g);let L={projectId:o,authors:[{name:n.name||"Unknown",email:n.email||"",github:n.github||"",firstContribution:a,lastActivity:a}],version:C,created:a,lastSync:a};return await this.writeGlobalConfig(o,L),g}async updateLastSync(t){let n=await this.getProjectId(t),o=await this.readGlobalConfig(n);o&&(o.lastSync=u(),await this.writeGlobalConfig(n,o))}validateConfig(t){return!(!t||!t.projectId||!t.dataPath)}async needsMigration(t){if(!await s.hasLegacyStructure(t))return!1;if(!await s.hasConfig(t))return!0;let i=await this.readConfig(t);if(!i||!i.projectId)return!0;let e=s.getGlobalProjectPath(i.projectId);try{return(await h.readdir(H.join(e,"core"))).length===0}catch(a){return f(a),!0}}async getProjectId(t){let n=await this.readConfig(t);if(n?.projectId)return n.projectId;try{let{worktreeService:o}=await import("./worktree-service-YRRPFU57.mjs");if(await o.detect(t)){let e=await o.getMainWorktree(t);if(e!==t){let a=await this.readConfig(e);if(a?.projectId)return a.projectId}}}catch{}return""}async findAuthor(t,n){let o=await this.readGlobalConfig(t);return!o||!o.authors?null:o.authors.find(i=>i.github===n)||null}async addAuthor(t,n){let o=await this.ensureGlobalConfig(t);if(o.authors.some(a=>a.github===n.github))return;let e=u();o.authors.push({name:n.name||"Unknown",email:n.email||"",github:n.github||"",firstContribution:e,lastActivity:e}),o.lastSync=e,await this.writeGlobalConfig(t,o)}async updateAuthorActivity(t,n){let o=await this.readGlobalConfig(t);if(!o||!o.authors)return;let i=o.authors.find(e=>e.github===n);i&&(i.lastActivity=u(),o.lastSync=i.lastActivity,await this.writeGlobalConfig(t,o))}async getCurrentAuthor(t){let n=await A(),o=await this.getProjectId(t);return await this.addAuthor(o,{name:n.name??void 0,email:n.email??void 0,github:n.github??void 0}),n.github||n.name||"Unknown"}async isConfigured(t){let n=await this.readConfig(t);return this.validateConfig(n)}async getShowMetrics(t){return(await this.readConfig(t))?.showMetrics??!0}async setShowMetrics(t,n){let o=await this.readConfig(t);o&&(o.showMetrics=n,await this.writeConfig(t,o))}async getConfigWithDefaults(t){let n=await this.readConfig(t);if(n)return n;let o=s.generateProjectId(t);return{projectId:o,dataPath:s.getDisplayPath(s.getGlobalProjectPath(o))}}},O=new p,at=O;export{A as a,at as b};
@@ -0,0 +1,7 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import{e as g,g as l}from"./chunk-225DWS4D.mjs";import{a as r,c as u,d as f}from"./chunk-3TRXQAU4.mjs";var m={};f(m,{PACKAGE_ROOT:()=>d,VERSION:()=>R,getPackageRoot:()=>i,getVersion:()=>p,resetPackageRoot:()=>v});import a from"node:fs";import s from"node:path";function i(){if(n.packageRoot)return n.packageRoot;let o=r((e,t)=>{if(t>=5)return null;let c=s.join(e,"package.json");if(a.existsSync(c))try{if(JSON.parse(a.readFileSync(c,"utf-8")).name==="prjct-cli")return e}catch{}return o(s.dirname(e),t+1)},"findPackageRoot");return n.packageRoot=o(__dirname,0)??s.join(__dirname,"..","..",".."),n.packageRoot}function p(){if(n.version)return n.version;let o="3.98.0";if(o&&/^\d+\.\d+\.\d+/.test(o))return n.version=o,n.version;try{let e=s.join(i(),"package.json"),t=JSON.parse(a.readFileSync(e,"utf-8"));return n.version=t.version,n.version}catch(e){return process.env.PRJCT_DEBUG==="1"&&console.error("Failed to read version from package.json:",g(e)),"0.0.0"}}function v(o){n.packageRoot=o,n.version=null}var n,R,d,P=u(()=>{l();n={version:null,packageRoot:null};r(i,"getPackageRoot");r(p,"getVersion");r(v,"resetPackageRoot");R=p(),d=i()});export{i as a,p as b,v as c,R as d,d as e,m as f,P as g};
@@ -0,0 +1,7 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import{a as f,b as g,g as p,h as b,i as y}from"./chunk-QZ7T2EYR.mjs";import{g as c,i as A}from"./chunk-DMO3ZFUG.mjs";import{F as m,G as S}from"./chunk-HU5ERAAV.mjs";import{a as s}from"./chunk-3TRXQAU4.mjs";import u from"node:fs/promises";import h from"node:path";import{gunzipSync as G,gzipSync as x}from"node:zlib";S();A();var w="code-graph.json.gz";function C(e){return h.join(m.getGlobalProjectPath(e),w)}s(C,"artifactPath");async function P(e){if(!p(e))return null;let t=y(e),n=g(e),r=b(e)??{symbolCount:t.length,edgeCount:n.length,fileCount:new Set(t.map(d=>d.file)).size,builtAt:new Date().toISOString()},o={version:1,projectId:e,exportedAt:new Date().toISOString(),meta:r,symbols:t,edges:n},a=Buffer.from(JSON.stringify(o),"utf-8"),i=x(a,{level:6}),l=C(e);return await u.mkdir(h.dirname(l),{recursive:!0}),await u.writeFile(l,i),{path:l,bytes:i.length,symbols:t.length,edges:n.length}}s(P,"exportCodeGraphArtifact");async function k(e){let t=C(e),n=await u.readFile(t).catch(()=>null);if(!n)return{imported:!1,symbols:0,edges:0,reason:"no per-project artifact"};let r=(()=>{try{let a=G(n).toString("utf-8");return{payload:JSON.parse(a)}}catch(a){return{error:`corrupt artifact: ${a instanceof Error?a.message:String(a)}`}}})();if("error"in r)return{imported:!1,symbols:0,edges:0,reason:r.error};let o=r.payload;return o.version!==1||!Array.isArray(o.symbols)?{imported:!1,symbols:0,edges:0,reason:"unsupported artifact version"}:o.projectId&&o.projectId!==e?{imported:!1,symbols:0,edges:0,reason:`artifact projectId mismatch (got ${o.projectId}, expected ${e})`}:(f(e,{symbols:o.symbols,edges:o.edges}),c.setDoc(e,"symbol-graph",{...o.meta,builtAt:o.meta.builtAt??o.exportedAt}),{imported:!0,symbols:o.symbols.length,edges:o.edges.length})}s(k,"importCodeGraphArtifact");async function F(e){if(p(e))return{bootstrapped:!1,detail:"local index already present"};let t=await k(e);return t.imported?{bootstrapped:!0,detail:`imported ${t.symbols} symbols / ${t.edges} edges from per-project cache`}:{bootstrapped:!1,detail:t.reason??"import failed"}}s(F,"bootstrapCodeGraphFromArtifact");function O(e){return e?.cloud?.enabled===!0&&e.cloud.paused!==!0}s(O,"shouldAutoUploadCodeGraph");async function j(e,t){try{await P(e)}catch{}if(t.uploadToCloud)try{await D(e,t.uploadDependencies)}catch{}}s(j,"maybeExportAfterIndex");async function D(e,t={}){let n=await import("./code-graph-cloud-G3WQBICY.mjs"),r=(t.buildSnapshot??n.buildCloudCodeGraphSnapshot)(e);if(!n.isUploadableGraph(r))return{uploaded:!1,reason:"no symbol index or empty graph"};try{let a=await(t.upload??(async(i,l)=>{let{default:d}=await import("./sync-client-6TAOTJWR.mjs");return d.uploadCodeGraph(i,l)}))(e,r);return a.ok?{uploaded:!0,nodes:a.nodes??r.nodes.length,links:a.links??r.links.length}:{uploaded:!1,reason:a.reason??"upload failed or unauthenticated",nodes:r.nodes.length,links:r.links.length}}catch(o){return{uploaded:!1,reason:o instanceof Error?o.message:String(o)}}}s(D,"maybeUploadCodeGraphToCloud");export{P as a,k as b,F as c,O as d,j as e,D as f};
@@ -0,0 +1,7 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import{g as u,i as C}from"./chunk-DMO3ZFUG.mjs";import{a as E,b as _,c as A,d as w,e as v,p as b}from"./chunk-HYIT7MF5.mjs";import{a as c}from"./chunk-3TRXQAU4.mjs";A();C();b();import I from"node:fs/promises";import d from"node:path";function O(t){let r=new RegExp(_.source,"g");return[...t.matchAll(r)].map(e=>e[1]).filter(e=>e.startsWith(".")||e.startsWith("@/"))}c(O,"extractImportSources");async function R(t,r,e){let n=t.startsWith("@/")?d.join(e,"src",t.slice(2)):d.resolve(d.dirname(d.join(e,r)),t);for(let o of E){let i=n+o;try{if((await I.stat(i)).isFile())return d.relative(e,i)}catch{}}return null}c(R,"resolveImport");async function x(t){let r=await w(t),e={},n={},o=await v(r,50,async i=>{let s=await G(t,i);return s&&s.imports.length>0?s:null});for(let{filePath:i,imports:s}of o){e[i]=s;for(let f of s)n[f]||(n[f]=[]),n[f].push(i)}return{forward:e,reverse:n,fileCount:r.length,edgeCount:o.reduce((i,s)=>i+s.imports.length,0),builtAt:new Date().toISOString()}}c(x,"buildGraph");function B(t,r,e=2){let n=new Set(t),o=new Map,i=[];for(let s of t){let f=r.forward[s]||[],a=r.reverse[s]||[];for(let p of[...f,...a])n.has(p)||i.push({file:p,depth:1})}for(let{file:s,depth:f}of i){if(f>e)continue;let a=1/(f+1),p=o.get(s);if(p){a>p.score&&o.set(s,{score:a,depth:f});continue}if(o.set(s,{score:a,depth:f}),f<e){let g=r.forward[s]||[],y=r.reverse[s]||[];for(let h of[...g,...y])!n.has(h)&&!o.has(h)&&i.push({file:h,depth:f+1})}}return Array.from(o.entries()).map(([s,{score:f,depth:a}])=>({path:s,score:f,depth:a})).sort((s,f)=>f.score-s.score)}c(B,"scoreFromSeeds");var l="import-graph",m=new Map;function D(t){return Object.values(t).reduce((r,e)=>r+e.length,0)}c(D,"countEdges");function T(t,r){let e=t.forward[r]||[];delete t.forward[r];for(let n of e){let o=(t.reverse[n]||[]).filter(i=>i!==r);o.length===0?delete t.reverse[n]:t.reverse[n]=o}}c(T,"removeOutgoingEdges");function P(t,r){let e=t.reverse[r]||[];delete t.reverse[r];let n=[];for(let o of e){let i=(t.forward[o]||[]).filter(s=>s!==r);i.length===0?delete t.forward[o]:t.forward[o]=i,n.push(o)}return n}c(P,"removeIncomingEdges");function M(t,r,e){if(e.length===0)return;let n=Array.from(new Set(e));t.forward[r]=n;for(let o of n)t.reverse[o]||(t.reverse[o]=[]),t.reverse[o].includes(r)||t.reverse[o].push(r)}c(M,"addEdges");async function G(t,r){try{let e=await I.readFile(d.join(t,r),"utf-8"),n=O(e),o=[];for(let i of n){let s=await R(i,r,t);s&&s!==r&&o.push(s)}return{filePath:r,imports:o}}catch{return null}}c(G,"importsForFile");function S(t){return{schemaVersion:2,fileCount:t.fileCount,edgeCount:t.edgeCount,builtAt:t.builtAt}}c(S,"graphMetadata");function F(t,r){try{u.transaction(t,e=>{e.prepare("DELETE FROM import_graph_edges").run();let n=e.prepare("INSERT INTO import_graph_edges (from_path, to_path, sort_order) VALUES (?, ?, ?)");for(let[o,i]of Object.entries(r.forward))for(let[s,f]of i.entries())n.run(o,f,s)})}catch{}}c(F,"replacePerFileEdges");function L(t,r,e,n){try{u.transaction(t,o=>{let i=o.prepare("DELETE FROM import_graph_edges WHERE from_path = ?"),s=o.prepare("INSERT INTO import_graph_edges (from_path, to_path, sort_order) VALUES (?, ?, ?)");for(let f of new Set([...e,...n]))i.run(f);for(let f of e){let a=r.forward[f]||[];for(let[p,g]of a.entries())s.run(f,g,p)}})}catch{}}c(L,"updatePerFileEdges");function N(t,r,e){try{let n=u.query(t,"SELECT from_path, to_path FROM import_graph_edges ORDER BY from_path, sort_order, to_path");if(n.length===0){if(e?.edgeCount===0){let a={forward:{},reverse:{},fileCount:e.fileCount,edgeCount:0,builtAt:e.builtAt};return m.set(t,{graph:a,updatedAt:r}),a}return null}let o={},i={};for(let a of n)o[a.from_path]||(o[a.from_path]=[]),o[a.from_path].push(a.to_path),i[a.to_path]||(i[a.to_path]=[]),i[a.to_path].push(a.from_path);let s=new Set;for(let[a,p]of Object.entries(o)){s.add(a);for(let g of p)s.add(g)}let f={forward:o,reverse:i,fileCount:e?.fileCount??s.size,edgeCount:n.length,builtAt:e?.builtAt??r};return m.set(t,{graph:f,updatedAt:r}),f}catch{return null}}c(N,"loadGraphFromPerFileEdges");function V(t,r){u.setDoc(t,l,S(r)),F(t,r),m.delete(t)}c(V,"saveGraph");function W(t,r,e,n){u.setDoc(t,l,S(r)),L(t,r,e,n),m.delete(t)}c(W,"saveGraphUpdate");function k(t){let r=u.get(t,"SELECT updated_at FROM kv_store WHERE key = ?",l);if(!r)return m.delete(t),null;let e=m.get(t);if(e&&e.updatedAt===r.updated_at)return e.graph;let n=u.getDoc(t,l),o=N(t,r.updated_at,n);if(o)return o;if(!n?.forward||!n?.reverse)return null;let i={forward:n.forward,reverse:n.reverse,fileCount:n.fileCount,edgeCount:n.edgeCount,builtAt:n.builtAt};return m.set(t,{graph:i,updatedAt:r.updated_at}),i}c(k,"loadGraph");async function q(t,r){let e=await x(t);return V(r,e),e}c(q,"indexImports");async function K(t,r,e,n=[]){let o=k(r);if(!o)return q(t,r);let i=new Set([...e,...n]);for(let a of i)T(o,a);let s=new Set;for(let a of n)for(let p of P(o,a))s.add(p);let f=await v(e,50,a=>G(t,a));for(let a of f)M(o,a.filePath,a.imports);return o.edgeCount=D(o.forward),o.builtAt=new Date().toISOString(),W(r,o,[...e,...s],n),o}c(K,"updateImportGraph");export{B as a,k as b,q as c,K as d};
@@ -0,0 +1,12 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import{a as N}from"./chunk-L4TUXFCL.mjs";import{b as q}from"./chunk-Q6C27OL7.mjs";import{g as u,i as M}from"./chunk-DMO3ZFUG.mjs";import{a as D,b as k}from"./chunk-RP7F67ZT.mjs";import{e as m,l as x}from"./chunk-HU5ERAAV.mjs";import{a as d}from"./chunk-3TRXQAU4.mjs";import{z as r}from"zod";var R=["draft","reviewed","in_progress","shipped","archived"];var P=r.object({verdict:r.enum(["pass","fail"]),notes:r.string(),ts:r.string(),candidateHash:r.string().optional()}),$=r.object({risk:r.string().min(1),mitigation:r.string().min(1)}),L=r.object({name:r.string().min(1),given:r.array(r.string()).default([]),when:r.array(r.string()).default([]),then:r.array(r.string()).default([])}),b=r.object({slug:r.string().min(1),name:r.string().min(1),statement:r.string().min(1),scenarios:r.array(L).default([])}),H=r.object({added:r.array(b).default([]),modified:r.array(b).default([]),removed:r.array(r.string().min(1)).default([])}),W=r.object({id:r.string().min(1),ts:r.string(),ops:H}),h=r.object({goal:r.string().min(1),eli10:r.string().default(""),stakes:r.string().default(""),acceptance_criteria:r.array(r.string().min(1)).default([]),scope:r.array(r.string()).default([]),out_of_scope:r.array(r.string()).default([]),risks:r.array($).default([]),test_plan:r.array(r.string()).default([]),reviews:r.record(r.string(),P).optional(),selected_reviewers:r.array(r.string()).default([]),linked_tasks:r.array(r.string()).default([]),notes:r.string().default(""),tasks_created_at:r.string().nullable().default(null),audit_candidate_hash:r.string().nullable().default(null),scenarios:r.record(r.string(),r.array(L)).default({}),delta_log:r.array(W).default([])});import{createHash as F}from"node:crypto";x();function z(c){return c.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}d(z,"slugifyRequirement");function J(c){return`delta-${F("sha256").update(c.trim()).digest("hex").slice(0,12)}`}d(J,"deltaIdFor");function v(c){return[...c].sort((t,e)=>t.ts===e.ts?t.id<e.id?-1:t.id>e.id?1:0:t.ts<e.ts?-1:1)}d(v,"sortDeltaLog");function U(c,t){let e=new Map;for(let n of[...c,...t])e.has(n.id)||e.set(n.id,n);return v([...e.values()])}d(U,"mergeDeltaLogs");function A(c){let t=new Set;for(let e of c)for(let n of[...e.ops.added,...e.ops.modified])t.add(n.statement);return t}d(A,"allDeltaStatements");function O(c){let t={order:[],statements:new Map,scenarios:new Map},e=d(n=>{t.statements.has(n.slug)||t.order.push(n.slug),t.statements.set(n.slug,n.statement),n.scenarios.length>0?t.scenarios.set(n.slug,n.scenarios):t.scenarios.delete(n.slug)},"upsert");for(let n of v(c)){for(let s of n.ops.added)e(s);for(let s of n.ops.modified)e(s);for(let s of n.ops.removed){t.statements.delete(s),t.scenarios.delete(s);let i=t.order.indexOf(s);i>=0&&t.order.splice(i,1)}}return t}d(O,"foldEntries");function Z(c){return O(c).statements}d(Z,"requirementStatements");function T(c){let t=O(c),e={};for(let n of t.order){let s=t.scenarios.get(n);s&&(e[n]=s)}return{acceptance_criteria:t.order.map(n=>t.statements.get(n)??""),scenarios:e}}d(T,"materializeDeltas");function V(c){let t=[],e=[],n=[],s={section:null,req:null,scenario:null},i=d(()=>{s.scenario&&s.req&&s.req.scenarios.push({name:s.scenario.name,given:s.scenario.given,when:s.scenario.when,then:s.scenario.then}),s.scenario=null},"flushScenario"),l=d(()=>{i();let a=s.req;if(s.req=null,!a)return;let o=z(a.name);if(!o)throw new Error(`DELTA_PARSE: requirement name yields an empty slug: "${a.name}"`);if(s.section==="removed"){n.push(o);return}let g=a.statementLines.join(`
8
+ `).trim();if(!g)throw new Error(`DELTA_PARSE: requirement "${a.name}" has no SHALL statement`);(s.section==="modified"?e:t).push({slug:o,name:a.name,statement:g,scenarios:a.scenarios})},"flushReq");for(let a of c.split(`
9
+ `)){let o=a.trim(),g=o.match(/^##\s+(ADDED|MODIFIED|REMOVED)\s+Requirements\s*$/i);if(g){l(),s.section=g[1].toLowerCase();continue}if(/^#{1,2}\s/.test(o)){l(),s.section=null;continue}let f=o.match(/^###\s+Requirement:\s*(.+)$/i);if(f){if(l(),!s.section)throw new Error('DELTA_PARSE: "### Requirement:" outside an ADDED/MODIFIED/REMOVED Requirements section');s.req={name:f[1].trim(),statementLines:[],scenarios:[]};continue}let S=o.match(/^####\s+Scenario:\s*(.+)$/i);if(S){if(i(),!s.req)throw new Error('DELTA_PARSE: "#### Scenario:" outside a "### Requirement:" block');s.scenario={name:S[1].trim(),given:[],when:[],then:[],last:null};continue}if(s.scenario&&o.startsWith("-")){let p=o.replace(/^-\s+/,"").match(/^(?:\*\*)?(GIVEN|WHEN|THEN|AND)\b\s*:?\s*(?:\*\*)?\s*(.*)$/i);if(p){let _=p[1].toUpperCase(),y=_==="AND"?s.scenario.last??"when":_.toLowerCase();s.scenario[y].push(p[2].trim()),s.scenario.last=y}continue}s.req&&!s.scenario&&o!==""&&s.req.statementLines.push(o)}if(l(),t.length+e.length+n.length===0)throw new Error("DELTA_EMPTY: no ADDED/MODIFIED/REMOVED Requirements sections found");return{added:t,modified:e,removed:n}}d(V,"parseDelta");function I(c,t,e={}){let n=V(t),s=e.id??J(t);if(c.delta_log.some(p=>p.id===s))return c;let i=O(c.delta_log).statements,l=new Set(n.added.map(p=>p.slug));for(let p of n.modified)if(!i.has(p.slug)&&!l.has(p.slug))throw new Error(`DELTA_UNKNOWN_REQUIREMENT: MODIFIED target "${p.name}" (slug: ${p.slug}) does not exist`);for(let p of n.removed)if(!i.has(p)&&!l.has(p))throw new Error(`DELTA_UNKNOWN_REQUIREMENT: REMOVED target slug "${p}" does not exist`);let a={id:s,ts:e.ts??m(),ops:n},o=v([...c.delta_log,a]),g=A(o),f=c.acceptance_criteria.filter(p=>!g.has(p)),S=T(o);return h.parse({...c,acceptance_criteria:[...f,...S.acceptance_criteria],scenarios:S.scenarios,delta_log:o})}d(I,"applyDelta");x();k();M();var E=class extends Error{constructor(e,n){super(`spec relational projection failed for ${e} (content write rolled back): ${n instanceof Error?n.message:String(n)}`);this.specId=e;this.name="SpecProjectionError"}specId;static{d(this,"SpecProjectionError")}};function w(c,t,e){try{u.run(c,"DELETE FROM spec_review WHERE spec_id = ?",t),u.run(c,"DELETE FROM spec_selected_reviewer WHERE spec_id = ?",t);for(let[n,s]of Object.entries(e.reviews??{}))u.run(c,"INSERT INTO spec_review (id, spec_id, lens, verdict, notes, created_at) VALUES (?, ?, ?, ?, ?, ?)",`${t}-rev-${n}`,t,n,s.verdict,s.notes??null,Date.now());for(let n of e.selected_reviewers)u.run(c,"INSERT OR IGNORE INTO spec_selected_reviewer (spec_id, lens) VALUES (?, ?)",t,n)}catch(n){throw new E(t,n)}}d(w,"projectSpecRelational");var C=class{static{d(this,"SpecStorage")}nextUpdatedAt(t,e){let n=m(),i=u.get(t,"SELECT updated_at FROM specs WHERE id = ?",e)?.updated_at;return!i||n>i?n:new Date(new Date(i).getTime()+1).toISOString()}create(t,e){let n=N(),s=m(),i=h.parse(e.content);try{u.transaction(t,()=>{u.run(t,`INSERT INTO specs (id, title, status, content, tags, created_at, updated_at)
10
+ VALUES (?, ?, 'draft', ?, ?, ?, ?)`,n,e.title,JSON.stringify(i),e.tags?JSON.stringify(e.tags):null,s,s),w(t,n,i)})}catch(a){if(a instanceof E)D.warn(a.message);else throw a}let l={id:n,title:e.title,status:"draft",content:i,tags:e.tags??{},createdAt:s,updatedAt:s,shippedAt:null,shippedPr:null,shippedSha:null,archivedAt:null};return this.publishSync(t,l),l}get(t,e){let n=u.get(t,"SELECT * FROM specs WHERE id = ?",e);return n?this.rowToSpec(n):null}list(t,e={}){let n=[];e.status&&n.push(e.status);let i=`SELECT * FROM specs WHERE 1=1${e.status?" AND status = ?":e.includeArchived?"":" AND status != 'archived'"} ORDER BY created_at DESC`;return u.query(t,i,...n).map(a=>this.rowToSpec(a))}search(t,e){let n=`%${e}%`;return u.query(t,"SELECT * FROM specs WHERE title LIKE ? OR content LIKE ? ORDER BY created_at DESC",n,n).map(i=>this.rowToSpec(i))}updateContent(t,e,n){let s=h.parse(n),i=this.nextUpdatedAt(t,e);try{u.transaction(t,()=>{u.run(t,"UPDATE specs SET content = ?, updated_at = ? WHERE id = ?",JSON.stringify(s),i,e),w(t,e,s)})}catch(a){if(a instanceof E)D.warn(a.message);else throw a}let l=this.get(t,e);return l&&this.publishSync(t,l),l}casUpdate(t,e,n,s){let i=h.parse(n),l=this.nextUpdatedAt(t,e),a=(()=>{try{return u.transaction(t,()=>{let g=u.run(t,"UPDATE specs SET content = ?, updated_at = ? WHERE id = ? AND updated_at = ?",JSON.stringify(i),l,e,s).changes===1;return g&&w(t,e,i),g})}catch(o){if(o instanceof E)return D.warn(o.message),!1;throw o}})();if(a){let o=this.get(t,e);o&&this.publishSync(t,o)}return a}setStatus(t,e,n){if(!R.includes(n))throw new Error(`invalid spec status: ${n}`);let s=this.nextUpdatedAt(t,e),i=[],l=[n,s];n==="shipped"&&(i.push("shipped_at = ?"),l.push(s)),n==="archived"&&(i.push("archived_at = ?"),l.push(s));let a=["status = ?","updated_at = ?",...i].join(", ");l.push(e),u.run(t,`UPDATE specs SET ${a} WHERE id = ?`,...l);let o=this.get(t,e);return o&&this.publishSync(t,o),o}setShippedPr(t,e,n){u.run(t,"UPDATE specs SET shipped_pr = ?, updated_at = ? WHERE id = ?",n,this.nextUpdatedAt(t,e),e);let s=this.get(t,e);return s&&this.publishSync(t,s),s}setShippedSha(t,e,n){u.run(t,"UPDATE specs SET shipped_sha = ?, updated_at = ? WHERE id = ?",n,this.nextUpdatedAt(t,e),e);let s=this.get(t,e);return s&&this.publishSync(t,s),s}linkTask(t,e,n){let s=this.get(t,e);if(!s)return null;if(s.content.linked_tasks.includes(n))return s;let i={...s.content,linked_tasks:[...s.content.linked_tasks,n]};return this.updateContent(t,e,i)}delete(t,e){let n=this.get(t,e);return n?(u.run(t,"DELETE FROM specs WHERE id = ?",e),this.publishSync(t,n,"delete"),!0):!1}applyRemote(t,e){if(!e.id)return;let n=typeof e.content=="string"?e.content:JSON.stringify(e.content??{}),s=R.includes(e.status)?e.status:"draft",i=e.tags==null?null:typeof e.tags=="string"?e.tags:JSON.stringify(e.tags),l=m();if(u.run(t,`INSERT INTO specs (id, title, status, content, tags, created_at, updated_at)
11
+ VALUES (?, ?, ?, ?, ?, ?, ?)
12
+ ON CONFLICT(id) DO NOTHING`,e.id,e.title??"",s,n,i,e.created_at||l,e.updated_at||l).changes>0){try{let o=h.parse(JSON.parse(n));w(t,e.id,o)}catch{}return}this.mergeRemoteContent(t,e.id,n,e.updated_at)}mergeRemoteContent(t,e,n,s){let i=this.get(t,e);if(!i)return;let l=(()=>{try{return h.parse(JSON.parse(n))}catch{return null}})();if(!l||i.content.delta_log.length===0||l.delta_log.length===0)return;let a=U(i.content.delta_log,l.delta_log),o=(s??"")>i.updatedAt?l:i.content,g=A(a),f=o.acceptance_criteria.filter(y=>!g.has(y)),S=T(a),p=a.length===i.content.delta_log.length&&a.length===l.delta_log.length,_={...o,acceptance_criteria:[...f,...S.acceptance_criteria],scenarios:S.scenarios,delta_log:a,reviews:p?i.content.reviews:{},selected_reviewers:p?i.content.selected_reviewers:[],audit_candidate_hash:p?i.content.audit_candidate_hash:null};JSON.stringify(_)!==JSON.stringify(i.content)&&this.casUpdate(t,e,_,i.updatedAt)}count(t){let e=u.query(t,"SELECT status, COUNT(*) AS n FROM specs GROUP BY status"),n={total:0,draft:0,shipped:0};for(let s of e)n.total+=s.n,s.status==="draft"&&(n.draft=s.n),s.status==="shipped"&&(n.shipped=s.n);return n}publishSync(t,e,n="upsert"){q({projectId:t,entityType:"specs",entityId:e.id,eventType:n,data:{id:e.id,title:e.title,status:e.status,content:e.content,tags:e.tags,created_at:e.createdAt,updated_at:e.updatedAt,shipped_at:e.shippedAt,shipped_pr:e.shippedPr,shipped_sha:e.shippedSha,archived_at:e.archivedAt}})}rowToSpec(t){return{id:t.id,title:t.title,status:R.includes(t.status)?t.status:"draft",content:h.parse(JSON.parse(t.content)),tags:t.tags?JSON.parse(t.tags):{},createdAt:t.created_at,updatedAt:t.updated_at,shippedAt:t.shipped_at,shippedPr:t.shipped_pr,shippedSha:t.shipped_sha,archivedAt:t.archived_at}}},ct=new C;export{R as a,h as b,v as c,A as d,Z as e,I as f,ct as g};
@@ -0,0 +1,8 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import{a as r}from"./chunk-3TRXQAU4.mjs";import k from"node:fs/promises";import w from"node:os";import P from"node:path";import{existsSync as v}from"node:fs";import h from"node:path";function x(){if(process.platform==="win32")return null;let t=process.execPath;if(!t)return null;let e=__dirname,o=[h.join(e,"prjct.mjs"),h.resolve(e,"..","prjct.mjs"),h.resolve(e,"..","..","dist","bin","prjct.mjs")].find(c=>v(c));return o?`${h.basename(t).includes("bun")?"":'NODE_OPTIONS="--experimental-sqlite${NODE_OPTIONS:+ $NODE_OPTIONS}" '}"${t}" "${o}"`:null}r(x,"directHookPrefix");function j(){if(process.platform==="win32")return null;let t=__dirname,e=`hook-fast-${process.platform}-${process.arch}`;return[h.join(t,e),h.resolve(t,"..",e),h.resolve(t,"..","..","dist","bin",e)].find(o=>v(o))??null}r(j,"nativeHookFastBinary");function S(t,e){let o=process.env.PRJCT_BIN??"prjct",s=e?`${e} `:"",c=`command -v ${o} >/dev/null 2>&1 && ${s}${o} hook ${t} || exit 0`;if(process.env.PRJCT_BIN)return c;let n=x();if(!n)return c;let i=`${s}${n} hook ${t}`,m=j();return`${m?`${s}"${m}" ${t} || ${i}`:i} || { ${c.replace(" || exit 0","")}; } || exit 0`}r(S,"hookCommandChain");function f(){let t=process.env.HOME||w.homedir();return P.join(t,".claude","settings.json")}r(f,"settingsPath");var p="_prjctManaged",R=10,g=[{event:"SessionStart",matcher:"",subcommand:"session-start"},{event:"UserPromptSubmit",matcher:"",subcommand:"prompt"},{event:"PreToolUse",matcher:"Bash",subcommand:"pre-bash"},{event:"PreToolUse",matcher:"Edit|Write",subcommand:"pre-edit"},{event:"PreToolUse",matcher:"Grep|Glob",subcommand:"pre-search"},{event:"PostToolUse",matcher:"Edit|Write",subcommand:"post-edit"},{event:"Stop",matcher:"",subcommand:"stop"},{event:"SubagentStart",matcher:"",subcommand:"subagent-start"},{event:"SubagentStop",matcher:"",subcommand:"subagent-stop"},{event:"Notification",matcher:"",subcommand:"notification"},{event:"CwdChanged",matcher:"",subcommand:"cwd-changed"}];function H(t){let e=t.command?.match(/\bhook\s+(\S+)/);return e?e[1]:null}r(H,"subcommandOf");function N(t){let e=new Set(g.map(s=>s.subcommand)),o=[];for(let s of Object.keys(t)){let c=t[s],n=[];for(let i of c)i.hooks=i.hooks.filter(m=>{if(!d(m))return!0;let u=H(m);return u&&!e.has(u)?(o.push(m),!1):!0}),i.hooks.length>0&&n.push(i);n.length>0?t[s]=n:delete t[s]}return o.length}r(N,"pruneOrphanedManagedHooks");async function b(){try{let t=await k.readFile(f(),"utf-8"),e=JSON.parse(t);return e&&typeof e=="object"?e:{}}catch(t){if(t.code==="ENOENT")return{};throw t}}r(b,"readSettings");async function O(t){await k.mkdir(P.dirname(f()),{recursive:!0}),await k.writeFile(f(),`${JSON.stringify(t,null,2)}
8
+ `,"utf-8")}r(O,"writeSettings");function M(t){return S(t)}r(M,"hookCommand");function d(t){return t[p]===!0}r(d,"isPrjctHook");function _(t){if(t[p]===!0)return!1;let e=t.command?.trim()??"";return/(^|\/|\s)prjct\s+hook\s+\S+/.test(e)}r(_,"isLegacyPrjctHook");function y(t){let e={type:"command",command:M(t.subcommand),timeout:R,[p]:!0},o="ifClause"in t?t.ifClause:void 0;return typeof o=="string"&&o&&(e.if=o),e}r(y,"hookEntryFor");async function D(){let t=await b(),e=t.hooks??{},o=[],s=[];for(let n of g){let i=e[n.event]??[],m=i.find(a=>(a.matcher??"")===n.matcher),u=m??{matcher:n.matcher,hooks:[]};m||i.push(u);let E=u.hooks.length;u.hooks=u.hooks.filter(a=>!_(a));let $=E-u.hooks.length,l=u.hooks.find(a=>d(a)&&H(a)===n.subcommand);if(l){let a=y(n);l.command===a.command&&l.if===a.if&&l.timeout===a.timeout&&$===0?s.push(n):(l.command=a.command,l.if=a.if,l.timeout=a.timeout,o.push(n))}else u.hooks.push(y(n)),o.push(n);e[n.event]=i}let c=N(e);return t.hooks=e,await O(t),{settingsPath:f(),hooksWritten:o.length,alreadyPresent:s.length,hooksPruned:c}}r(D,"install");async function K(){let t=await b();if(!t.hooks)return{settingsPath:f(),hooksRemoved:0};let e=[];for(let[o,s]of Object.entries(t.hooks)){let c=[];for(let n of s){let i=n.hooks.filter(m=>d(m)?(e.push(m),!1):!0);i.length>0&&c.push({...n,hooks:i})}c.length>0?t.hooks[o]=c:delete t.hooks[o]}return Object.keys(t.hooks).length===0&&delete t.hooks,await O(t),{settingsPath:f(),hooksRemoved:e.length}}r(K,"uninstall");async function G(){let e=(await b()).hooks??{};return{installed:Object.values(e).flat().flatMap(s=>s.hooks).filter(d).length,expected:g.length}}r(G,"status");export{S as a,R as b,g as c,D as d,K as e,G as f};
@@ -0,0 +1,8 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import{a as o}from"./chunk-3TRXQAU4.mjs";function l(n){n.token&&(n.args.push(n.token),n.token="")}o(l,"commitToken");function u(n){l(n),n.args.length!==0&&(n.commands.push(n.args),n.args=[])}o(u,"commitCommand");function m(n){let t={commands:[],args:[],token:"",quote:null,escaped:!1,skipSeparatorTwin:!1},s=[...n];return s.forEach((e,r)=>{if(t.skipSeparatorTwin){t.skipSeparatorTwin=!1;return}if(t.escaped){t.token+=e,t.escaped=!1;return}if(e==="\\"&&t.quote!=="'"){t.escaped=!0;return}if(t.quote){e===t.quote?t.quote=null:t.token+=e;return}if(e==="'"||e==='"'){t.quote=e;return}if(/\s/.test(e)){l(t),e===`
8
+ `&&u(t);return}if(e===";"||e==="|"||e==="&"){u(t),t.skipSeparatorTwin=(e==="|"||e==="&")&&s[r+1]===e;return}t.token+=e}),u(t),t.commands}o(m,"shellCommands");var a=new Set(["-u","--unset","-C","--chdir"]),p=new Set(["u","C"]),S=new Set(["-C","--close-from","-D","--chdir","-g","--group","-h","--host","-p","--prompt","-R","--chroot","-r","--role","-T","--command-timeout","-t","--type","-u","--user"]),c=new Set(["C","D","g","h","p","R","r","T","t","u"]);function i(n,t,s=new Set){for(;n[0]?.startsWith("-");){let e=n.shift();if(e==="--")return;if(t.has(e)){n.shift();continue}let r=e.startsWith("--"),f=e.at(-1);!r&&f&&s.has(f)&&n.shift()}}o(i,"discardWrapperOptions");function d(n){let t=[...n];for(;t.length>0;){let s=t[0],e=s.split("/").at(-1)?.toLowerCase();if(/^[A-Za-z_][A-Za-z0-9_]*=/.test(s))t.shift();else if(e==="sudo")t.shift(),i(t,S,c);else if(e==="env")for(t.shift(),i(t,a,p);t[0]?.includes("=");)t.shift();else if(e==="command"){if(t.shift(),t[0]==="-v"||t[0]==="-V")return[];i(t,new Set)}else if(e==="nohup")t.shift(),i(t,new Set);else return t}return t}o(d,"unwrapCommand");export{m as a,d as b};
@@ -0,0 +1,8 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import{b as te}from"./chunk-5OWPZWEU.mjs";import{a as re}from"./chunk-SLYLGDX7.mjs";import{a as ce}from"./chunk-JGGQSMZC.mjs";import{a as ee}from"./chunk-O5VCBMEK.mjs";import{a as oe,b as ne,e as _}from"./chunk-DZDEBDAB.mjs";import{a as ie}from"./chunk-LFOQ7FCR.mjs";import{a as Z}from"./chunk-5TGZSK4C.mjs";import{a as X}from"./chunk-HVXWQ2XZ.mjs";import{d as a,e as co}from"./chunk-6RT2P22O.mjs";import{a as V}from"./chunk-5ZBACKED.mjs";import{a as z,c as ro}from"./chunk-DOJPSIMG.mjs";import{a as r}from"./chunk-3TRXQAU4.mjs";import ae from"node:fs/promises";import n from"node:path";ro();co();async function t(e){try{return await ae.access(e),!0}catch{return!1}}r(t,"fileExists");async function c(e){try{return await ae.readFile(e,"utf-8")}catch{return null}}r(c,"readText");function h(e){return e?e.includes("_prjctManaged")||e.includes("PRJCT_HOOK_HOST="):!1}r(h,"hasPrjctManagedJson");function p(e){return e?/prjct\s+hook\s+/.test(e):!1}r(p,"hasPrjctHookCommand");function G(e){if(!e)return!1;try{return!!JSON.parse(e).mcpServers?.prjct}catch{return e.includes('"prjct"')&&e.includes("mcp-server")}}r(G,"hasPrjctMcpJson");function se(e){return e?/\[mcp_servers\.prjct\]/.test(e)||/# prjct:mcp:start/.test(e):!1}r(se,"hasPrjctMcpToml");function so(e){return e?e.includes("# prjct-managed")||e.includes("PRJCT_HOOK_HOST="):!1}r(so,"hasPrjctManagedToml");function g(e,o,i,L=!1){return e?L&&(o||i)?"inherited":o&&i?"full":o||i?"partial":"none":"absent"}r(g,"organicOf");function ao(e,o,i){return i===0||o>=4&&e>=90?5:o>=3&&e>=75?4.5:o>=2&&e>=50?4:o>=1?3:1.5}r(ao,"gradeFrom");async function bo(e=process.cwd()){let o=z(),i=n.join(o,".claude","settings.json"),L=n.join(o,".claude","mcp.json"),le=te(),de=V(),me=ce(),ue=re(),pe=n.join(o,".grok"),ge=X(),ke=Z(),fe=n.join(ee(),"plugin.json"),ve=n.join(e,".cursor"),je=oe(),Ce=ne(),he=n.join(o,".config","opencode"),Le=n.join(e,".opencode"),Pe=n.join(o,".pi"),be=n.join(o,".pi","agent"),He=ie(),xe=n.join(e,".pi"),P=n.join(o,".kimi-code"),ye=n.join(P,"config.toml"),Me=n.join(P,"mcp.json"),Se=n.join(o,".agents","skills","prjct","SKILL.md"),[Te,Oe,Be,De,$e,we,E,Ne,K,Je,b,A,Re,Ie,_e,Ge,Ee,Ke,Ae,Fe,Qe,Ue,We,Ye,qe,ze,F,Ve,Xe,Ze]=await Promise.all([a("claude"),a("codex"),a("gemini"),a("grok"),a("opencode"),a("pi"),c(i),c(L),c(le),c(de),c(me),c(ue),c(ge),t(ke),t(fe),t(pe),t(ve),c(je),c(Ce),t(he),t(Le),t(Pe),t(be),t(He),t(xe),a("kimi"),c(ye),c(Me),t(Se),t(P)]),H=Te||await t(n.join(o,".claude")),l=h(E)||p(E),d=G(Ne),x=Oe||await t(n.join(o,".codex")),y=h(K)||p(K),M=se(Je),S=Be||await t(n.join(o,".gemini")),T=h(b)||p(b),O=G(b),B=Ee||await t(n.join(o,".cursor")),D=h(A)||p(A),$=De||Ge,k=se(Re),w=!!Ie,u=!!_e,eo=k||w||u,Q=!!l,U=k||d,N=!!($e||Fe||Qe),J=_(Ke)||_(Ae),R=!!(we||Ue||We||qe),W=!!Ye,I=!!(ze||Ze),f=so(F)||p(F),v=G(Ve),oo=!!Xe,Y=[{id:"claude",displayName:"Claude Code",detected:!!H,hooksLive:l,mcpLive:d,organic:g(!!H,l,d),evidence:l&&d?"~/.claude/settings.json + mcp.json":l?"hooks only":d?"mcp only":H?"detected, not wired":"not installed"},{id:"codex",displayName:"OpenAI Codex",detected:!!x,hooksLive:y,mcpLive:M,organic:g(!!x,y,M),evidence:y&&M?"~/.codex/hooks.json + config.toml MCP":x?"detected, incomplete wire":"not installed"},{id:"gemini",displayName:"Gemini CLI",detected:!!S,hooksLive:T,mcpLive:O,organic:g(!!S,T,O),evidence:T&&O?"~/.gemini/settings.json (hooks+MCP)":S?"detected, incomplete wire":"not installed"},{id:"cursor",displayName:"Cursor",detected:!!B,hooksLive:D,mcpLive:!1,organic:B?D?"full":"none":"absent",evidence:D?"~/.cursor/hooks.json":B?"detected, hooks not wired":"not installed"},{id:"grok",displayName:"xAI Grok Build",detected:!!$,hooksLive:Q,mcpLive:U,organic:g(!!$,Q,U,!eo&&(l||d)),evidence:$?k&&(w||u)?`~/.grok/config.toml MCP + ${u?"plugins/prjct":"skills/prjct"} (hooks via Claude compat)`:k?"~/.grok/config.toml MCP (hooks via Claude compat)":w||u?`${u?"plugins/prjct":"skills/prjct"} (MCP via Claude compat or missing)`:l||d?"Claude-compat only \u2014 run prjct install for native Grok MCP+skill+plugin":"detected \u2014 run prjct install":"not installed"},{id:"opencode",displayName:"OpenCode",detected:N,hooksLive:!1,mcpLive:J,organic:N?J?"full":"none":"absent",evidence:J?"~/.config/opencode/opencode.json mcp.prjct":N?"detected \u2014 run prjct install for OpenCode MCP":"not installed"},{id:"pi",displayName:"Pi",detected:R,hooksLive:!1,mcpLive:!1,organic:R?W?"full":"none":"absent",evidence:W?"~/.pi/agent/skills/prjct/SKILL.md":R?"detected \u2014 run prjct install for Pi skill":"not installed"},{id:"kimi-cli",displayName:"Kimi Code CLI",detected:I,hooksLive:f,mcpLive:v,organic:g(I,f,v),evidence:f&&v?`~/.kimi-code/config.toml [[hooks]] + mcp.json${oo?" + ~/.agents/skills":""}`:f||v?"partial wire \u2014 run prjct install":I?"detected, not wired \u2014 run prjct install":"not installed"}],q=Y.filter(C=>C.detected),no=q.filter(C=>C.organic==="full"||C.organic==="inherited"),s=q.length,m=no.length,j=s===0?100:Math.round(m/s*100),io=ao(j,m,s),to=s===0?"No benchmark CLI/IDE detected \u2014 install Claude, Codex, Gemini, Cursor, OpenCode, Pi, Kimi Code, or Grok, then `prjct install`.":m===s?`Organic full board: ${m}/${s} detected runtimes live (${j}%). Same SQLite brain, multi-surface wire.`:`Organic board ${m}/${s} live (${j}%). Run \`prjct install\` to close gaps \u2014 one command, all surfaces.`;return{runtimes:Y,detectedCount:s,liveCount:m,organicPct:j,grade:io,summary:to}}r(bo,"probeHarnessCoverage");function Ho(e){let o=["## Organic multi-runtime board","",`_Same judgment memory + code gates \xB7 ${e.liveCount}/${e.detectedCount} live \xB7 ${e.organicPct}% \xB7 grade ${e.grade}/5_`,"","| Runtime | Detected | Hooks | MCP | Organic | Evidence |","|---|---:|---:|---:|---|---|"];for(let i of e.runtimes)o.push(`| ${i.displayName} | ${i.detected?"yes":"\u2014"} | ${i.hooksLive?"\u25CF":"\u25CB"} | ${i.mcpLive?"\u25CF":i.id==="cursor"?"IDE":i.id==="pi"?"skill":"\u25CB"} | \`${i.organic}\` | ${i.evidence} |`);return o.push("",e.summary,""),o.push("_Moat: not \u201Canother skill pack\u201D \u2014 compound WHY in SQLite, code-enforced gates, and one install that lights every agent surface without ceremony._",""),o.join(`
8
+ `)}r(Ho,"renderHarnessCoverageMd");export{bo as a,Ho as b};
@@ -0,0 +1,7 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import{c as y}from"./chunk-F2FKQUYE.mjs";import{m as T}from"./chunk-ZQ2XH76U.mjs";import{b as g}from"./chunk-B2HY22OD.mjs";import{b as A}from"./chunk-EHVU2SMR.mjs";import{b as _}from"./chunk-XSZOHNL4.mjs";import{d as b,g as M,j as R}from"./chunk-KPR5TWSN.mjs";import{a as x}from"./chunk-3TRXQAU4.mjs";R();var D=new Set(["decision","gotcha","learning","fact","feedback","spec"]);async function B(C,r,p={}){let{topic:c,types:i,tags:a}=p,l=p.limit??30,w=c?(()=>{let e=c.split(/\s+/).filter(Boolean);try{return g.searchFts(r,e,l).filter(t=>(!i||i.includes(t.type))&&(!a||M(t,a)))}catch{return[]}})():[],m=w.length>0?w:g.recall(r,{topic:c,types:i,tags:a,limit:l}).slice(0,l),d=(c?await(async()=>{try{let e=await _.readConfig(C);if(e&&T.isEnabled(e)){let n=await T.semanticSearch(r,c,e,10);if(n.length>0){let t=new Set(m.map(o=>o.id));return[...n.filter(o=>!t.has(o.id)&&(!i||i.includes(o.type))&&(!a||M(o,a))),...m].slice(0,l)}}return m}catch{return m}})():m).filter(e=>b(e)||(i?.includes(e.type)??!1)),h=i?.includes("improvement-signal")?d:await(async()=>{try{let{isAutoSource:e}=await import("./purge-6SJKHKIY.mjs"),n=45*864e5,t=Date.now(),u=d.filter(s=>{if(!e(s.tags?.source)||D.has(s.type)&&!e(s.tags?.source))return!0;let S=Date.parse(s.rememberedAt);return Number.isFinite(S)?t-S<n:!0}),o=u.filter(s=>!e(s.tags?.source)),O=u.filter(s=>e(s.tags?.source));return[...o,...O].slice(0,Math.max(l,u.length))}catch{return d}})(),f=h.length>1?y.rerank(r,h):h,k=p.expandLinks!==!1&&f.length>0?g.expandWithLinks(r,f,5):[],E=k.length>0?f.concat(k):f;try{let e=await A.getCurrentTask(r),n=new Date().toISOString();e?.id&&y.recordSurfaced(r,E.map(t=>t.id),e.id,n,{queryText:c,surface:"context-memory"});for(let t of E)y.recordFetch(r,t.id,n)}catch{}return E}x(B,"enrichedRecall");export{B as a};
@@ -0,0 +1,10 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import{a as u}from"./chunk-XLFEWZRA.mjs";import{a as r}from"./chunk-3TRXQAU4.mjs";import{readSync as c}from"node:fs";import{isatty as d}from"node:tty";var p=new Set(["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse"]);function T(e,t){return{hookSpecificOutput:{hookEventName:e,permissionDecision:"deny",permissionDecisionReason:a(t)}}}r(T,"buildDenyOutput");function f(e){let t=(e??"claude").trim().toLowerCase();return t==="gemini"||t==="codex"||t==="cursor"||t==="kimi"?t:"claude"}r(f,"hookHostFrom");function g(){return f(process.env.PRJCT_HOOK_HOST)}r(g,"currentHookHost");function m(e,t=g()){return t==="claude"||t==="codex"||!e||Object.keys(e).length===0?e:t==="gemini"?h(e):t==="cursor"?k(e):t==="kimi"?l(e):e}r(m,"adaptHookOutputForHost");function l(e){if(e.hookSpecificOutput?.permissionDecision==="deny")return e;let n=e;return n.hookSpecificOutput?.additionalContext?n.hookSpecificOutput.additionalContext:n.systemMessage?n.systemMessage:e}r(l,"adaptForKimi");function h(e){let t=e;if(t.hookSpecificOutput?.permissionDecision==="deny")return{decision:"deny",reason:t.hookSpecificOutput.permissionDecisionReason??"blocked by prjct"};let n=e,o=n.hookSpecificOutput;return o?.additionalContext?{hookSpecificOutput:{hookEventName:y(o.hookEventName),additionalContext:o.additionalContext}}:n.systemMessage?{systemMessage:n.systemMessage}:e}r(h,"adaptForGemini");function k(e){let t=e;if(t.hookSpecificOutput?.permissionDecision==="deny")return{decision:"deny",reason:t.hookSpecificOutput.permissionDecisionReason??"blocked by prjct",permissionDecision:"deny",permissionDecisionReason:t.hookSpecificOutput.permissionDecisionReason??"blocked by prjct"};let n=e,o=n.hookSpecificOutput;return o?.additionalContext?{hookSpecificOutput:{hookEventName:S(o.hookEventName),additional_context:o.additionalContext},additional_context:o.additionalContext}:n.systemMessage?{systemMessage:n.systemMessage}:e}r(k,"adaptForCursor");function y(e){switch(e){case"UserPromptSubmit":return"BeforeAgent";case"PreToolUse":return"BeforeTool";case"PostToolUse":return"AfterTool";case"Stop":return"AfterAgent";default:return e}}r(y,"mapClaudeEventToGemini");function S(e){switch(e){case"SessionStart":return"sessionStart";case"UserPromptSubmit":return"beforeSubmitPrompt";case"PreToolUse":return"preToolUse";case"PostToolUse":return"postToolUse";case"Stop":return"stop";case"SubagentStart":return"subagentStart";case"SubagentStop":return"subagentStop";default:return e.charAt(0).toLowerCase()+e.slice(1)}}r(S,"mapClaudeEventToCursor");function O(e){if(d(0))return Buffer.alloc(0);try{process.stdin.fd}catch{}let t=Date.now()+e,n=new Int32Array(new SharedArrayBuffer(4)),o=Buffer.alloc(65536),i=[];for(;;)try{let s=c(0,o,0,o.length,null);if(s===0)break;i.push(Buffer.from(o.subarray(0,s)))}catch(s){if(s.code==="EAGAIN"&&Date.now()<t){Atomics.wait(n,0,0,1);continue}break}return Buffer.concat(i)}r(O,"readStdinRaw");function C(){try{let e=O(200).toString("utf-8").trim();return e?JSON.parse(e):{}}catch{return{}}}r(C,"readStdinSafe");function w(e){let t=m(e);process.stdout.write(typeof t=="string"?`${t}
8
+ `:`${JSON.stringify(t)}
9
+ `)}r(w,"emit");function D(){w({})}r(D,"emitEmpty");async function v(e){try{await e()}catch{D()}}r(v,"safeRun");var b=new Set(["this","that","with","from","have","your","please","would","about","there","these","those","what","when","where","which","while","will","been","were","they","them","their","que","como","cuando","donde","porque","para","pero","por","con","sin","los","las","del","una","uno","unos","unas","este","esta","esto","estos","estas","eso","esos","esas","mas","muy","todo","toda","todos","todas","sobre","entre","hasta","desde","hace","hacer","tiene","tienen","debe","deben","puede","pueden","estan","ser","son","algo","ahora","aqui","bien","cada","dale"]);function E(e,t=8){let n=u(e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1 $2")).toLowerCase(),o=new Set,i=[];for(let s of n.split(/[^\p{L}\p{N}]+/u))if(!(s.length<3)&&!b.has(s)&&!o.has(s)&&(o.add(s),i.push(s),i.length>=t))break;return i}r(E,"extractKeywords");function a(e){return e.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g,"\uFFFD")}r(a,"stripLoneSurrogates");function A(e,t,n=`
10
+ \u2026 [truncated]`){if(e.length<=t)return e;let o=Math.max(0,t-n.length),i=e.charCodeAt(o-1),s=i>=55296&&i<=56319?o-1:o;return e.slice(0,Math.max(0,s))+n}r(A,"safeTruncate");function N(e,t){if(!t)return{};let n=a(t);return p.has(e)?{hookSpecificOutput:{hookEventName:e,additionalContext:n}}:{systemMessage:n}}r(N,"buildHookOutput");export{T as a,f as b,g as c,m as d,C as e,w as f,v as g,E as h,A as i,N as j};
@@ -0,0 +1,7 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import{a as f}from"./chunk-3TRXQAU4.mjs";function r(n,i){let t=n.indexOf(`--${i}`);if(t>=0&&n[t+1])return n[t+1];let e=n.find(d=>d.startsWith(`--${i}=`));return e?e.slice(i.length+3):void 0}f(r,"flag");export{r as a};
@@ -0,0 +1,20 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import{b as P}from"./chunk-V7VA4EQX.mjs";import{b,f as I,g as p}from"./chunk-YJOC2JJK.mjs";import{a as j,b as $,c as T,e as D}from"./chunk-MXJKULJY.mjs";import{b as _}from"./chunk-B2HY22OD.mjs";import{b as C}from"./chunk-XSZOHNL4.mjs";import{g as v,i as N}from"./chunk-DMO3ZFUG.mjs";import{e as k,l as O}from"./chunk-HU5ERAAV.mjs";import{b as E,p as L}from"./chunk-D62TAZG6.mjs";import{a as f}from"./chunk-3TRXQAU4.mjs";O();L();N();import{createHash as F}from"node:crypto";function S(n){let s={goal:n.goal,eli10:n.eli10,stakes:n.stakes,acceptance_criteria:n.acceptance_criteria,scope:n.scope,out_of_scope:n.out_of_scope,risks:n.risks,test_plan:n.test_plan,scenarios:n.scenarios};return F("sha256").update(JSON.stringify(s)).digest("hex")}f(S,"computeAuditCandidateHash");function G(n,s,e){if(n.keywords.some(r=>r&&s.includes(r.toLowerCase())))return!0;for(let r of n.filePatterns)if(r.split("/").filter(t=>t&&!t.includes("*")).some(t=>e.some(a=>a.includes(t))))return!0;return!1}f(G,"domainMatchesSpec");function W(n,s=[]){let e=new Set(["architecture"]),r=[n.goal,n.eli10,n.stakes,...n.scope,...n.out_of_scope,...n.acceptance_criteria,...n.risks.flatMap(i=>[i.risk,i.mitigation])].join(" ").toLowerCase();if((n.stakes.trim()!==""||n.scope.length>=4||n.risks.length>=2)&&e.add("strategic"),/\b(cli|command|ui|ux|api|endpoint|flag|output|render|prompt)\b/.test(r)&&e.add("design"),/\b(auth|secret|token|crypto|password|payment|pii|permission|sandbox|exec|network)\b/.test(r)&&e.add("security"),/\b(schema|migration|sql|db|database|query|index|table|storage)\b/.test(r)&&e.add("data"),/\b(perf|latency|throughput|hot path|scale|cache|cold start)\b/.test(r)&&e.add("performance"),s.length>0){let i=P(n.scope);for(let t of s)j[t.name]||G(t,r,i)&&e.add(t.name)}return[...e]}f(W,"selectReviewers");function x(n,s){let e=v.get(n,"SELECT content FROM specs WHERE id = ?",s),r=(()=>{if(!e?.content)return null;try{return JSON.parse(e.content)}catch{return null}})(),i=v.query(n,"SELECT lens FROM spec_selected_reviewer WHERE spec_id = ?",s).map(c=>c.lens),t=new Set(v.query(n,"SELECT lens FROM spec_review WHERE spec_id = ? AND verdict = 'pass'",s).map(c=>c.lens));if(!(i.length>0?i.every(c=>t.has(c)):t.has("strategic")&&t.has("architecture")&&t.has("design")))return!1;let l=r?.audit_candidate_hash;if(!l)return!0;if(S(r)!==l)return!1;let u=r?.reviews??{};for(let c of i.length>0?i:Object.keys(u)){let h=u[c];if(!(!h||h.verdict!=="pass")&&h.candidateHash!==l)return!1}for(let c of i.length>0?i:["strategic","architecture","design"]){if(!t.has(c))continue;let h=u[c];if(!h||h.candidateHash!==l)return!1}return!0}f(x,"reviewsGatePassedRelational");async function X(n,s,e,r,i,t=[]){let a=await D(i),l=r&&r.length>0?r:W(e,t),u=new Map(t.map(d=>[d.name,d])),c=P(e.scope),h=c.length>0?`
8
+
9
+ ## Codebase paths to read (from spec.scope)
10
+ ${c.map(d=>`- \`${d}\``).join(`
11
+ `)}
12
+
13
+ Each reviewer SHOULD use the Read tool on these paths (cap 10 per reviewer) to ground the verdict in the actual code. Cite specific symbols / files / line numbers in notes when applicable.`:`
14
+
15
+ ## Codebase paths
16
+ _No path-shaped scope entries found. Reviewers judge the spec body alone._`,o=[];l.forEach((d,g)=>{let w=j[d],y=u.get(d),A=w?w.label:y?"domain expert":"custom lens",M=w?w.rubric:y?T(y):$,q=String.fromCharCode(65+g%26),H=w?.capabilityClass?` ${a.modelDirective("spec-review",w.capabilityClass)}`:"";o.push(`## Reviewer ${q} \u2014 ${d} (${A})`,`Reviewer prompt: "First run \`prjct spec show ${n} --md\` to read the spec. ${M} Return verdict (pass|fail) and 2-4 sentence notes."${H}`,"")});let m=a.runLine(l.length);return[`# audit-spec dispatch \u2014 ${s}`,"",`Spec id: \`${n}\``,"",`Selected lenses for this spec: **${l.join(", ")}**. This is the baseline prjct computed from the spec \u2014 re-run \`prjct spec audit ${n} --lenses <comma,separated>\` to adjust the set before dispatching (add a lens the risk surface demands, drop one that is irrelevant).`,"",m,"","## Where the spec lives \u2014 read it from prjct, it is NOT in this prompt",`The plan lives in prjct (SQLite), never duplicated into a dispatch payload. Each reviewer runs \`prjct spec show ${n} --md\` itself, fresh, to read the full spec. Do NOT paste the spec body into the prompts \u2014 point them at that command. (Same rule for any memory the reviewer wants: \`prjct context memory <topic>\` \u2014 pulled by the reviewer, not pre-pasted by you.)`,"","## Model policy (perf \u2014 read before dispatching)",`${a.modelDirective("spec-review")} The same applies to every lens \u2014 they judge a spec, they do not implement, so they run on a review-tier model, not the heaviest one. Hand reviewers the spec-read COMMAND and the codebase PATHS + the Read tool \u2014 never paste spec body or file contents into their prompts.`,h,"",...o,"## After dispatch","For each lens that returns:",` prjct spec record-review ${n} --reviewer <${l.join("|")}> --verdict <pass|fail> --notes "<their notes>"`,"",`When all selected lenses (${l.join(", ")}) are recorded with verdict=pass, the spec auto-promotes from \`draft\` \u2192 \`reviewed\`.`].join(`
17
+ `)}f(X,"renderAuditDispatch");async function B(n){try{let{stdout:s}=await E("git",["rev-parse","HEAD"],{cwd:n}),e=s.trim();return/^[0-9a-f]{7,40}$/.test(e)?e:null}catch{return null}}f(B,"readGitHead");var R=class{static{f(this,"SpecService")}async create(s,e){let r=await this.requireProjectId(s),{classifySpecCreate:i,shouldMirrorSpecToMemory:t}=await import("./precision-classifier-AV75OEVA.mjs"),a=i(e.title,e.content.goal);if(a.action==="refuse")throw new Error(`Cannot create empty spec (${a.reasonCode}): ${a.reason}`);let l=e.autoContext!==!1,u=e.content.notes??"",c=l&&!u.trim()?await import("./spec-context-inference-KOINWBC7.mjs").then(async({inferSpecContext:m,warnNoContextMatch:d})=>{let g=await m(e.title,r,s);return g.empty&&d(e.title),g.empty?u:g.notesBlock}):u,h=b.parse({goal:e.content.goal,eli10:e.content.eli10??"",stakes:e.content.stakes??"",acceptance_criteria:e.content.acceptance_criteria??[],scope:e.content.scope??[],out_of_scope:e.content.out_of_scope??[],risks:e.content.risks??[],test_plan:e.content.test_plan??[],reviews:e.content.reviews,linked_tasks:e.content.linked_tasks??[],notes:c}),o=p.create(r,{title:e.title,content:h,tags:e.tags});return t(o.title,o.content.goal)&&await _.remember(s,{type:"spec",content:`${o.title}
18
+
19
+ Goal: ${o.content.goal}`,tags:{...e.tags??{},spec_id:o.id,status:o.status},source:o.id,provenance:"declared"}),o}async get(s,e){let r=await this.requireProjectId(s);return p.get(r,e)}async list(s,e={}){let r=await this.requireProjectId(s);return p.list(r,e)}async setStatus(s,e,r){let i=await this.requireProjectId(s),t=p.setStatus(i,e,r);return t&&await _.remember(s,{type:"spec",content:`Spec status \u2192 ${r}: ${t.title}`,tags:{spec_id:e,status:r,event:"status_change"},source:e}),t}async patch(s,e,r){let i=await this.requireProjectId(s),t=p.get(i,e);if(!t)return null;let a=b.parse({...t.content,...r});return this.update(s,e,a)}async applyDelta(s,e,r){let i=await this.requireProjectId(s),t=p.get(i,e);if(!t)return null;let a=I(t.content,r);return a===t.content?t:this.update(s,e,a)}async update(s,e,r){let i=await this.requireProjectId(s),t=p.get(i,e);if(!t)return null;let a=S(t.content),l=S(r),u=a!==l,c=u?{...r,reviews:{},selected_reviewers:[],audit_candidate_hash:null}:r;return u&&(t.status==="reviewed"||t.status==="in_progress")&&p.setStatus(i,e,"draft"),p.updateContent(i,e,c)}async recordReview(s,e,r,i){let t=await this.requireProjectId(s),a=3,l=50,u=f(async h=>{let o=p.get(t,e);if(!o)return null;let m=o.content.audit_candidate_hash??S(o.content);if(o.content.audit_candidate_hash&&S(o.content)!==o.content.audit_candidate_hash)throw new Error(`SPEC_CANDIDATE_DRIFT: body no longer matches audit_candidate_hash. Re-run \`prjct spec audit ${e}\` then re-record reviews.`);let d={...i,ts:k(),candidateHash:m},g={...o.content,audit_candidate_hash:m,reviews:{...o.content.reviews??{},[r]:d}};if(p.casUpdate(t,e,g,o.updatedAt))return p.get(t,e);if(h+1>=a)throw new Error(`SPEC_RECORD_REVIEW_CONFLICT_RETRY_EXHAUSTED: ${a} retries failed for spec ${e}`);return await new Promise(y=>setTimeout(y,l)),u(h+1)},"attemptReview"),c=await u(0);if(c&&x(t,e)&&c.status==="draft"){let{assessAcceptanceCriteria:h}=await import("./nyquist-lite-A23B7G4B.mjs"),o=h(c.content.acceptance_criteria??[]);if(!o.ok&&o.message){let d=await C.readConfig(s).catch(()=>null),g=d?.tdd?.mode==="strict",w=d?.sdd?.mode==="strict";if(g||w)throw new Error(`NYQUIST_LITE_BLOCK: ${o.message}
20
+ Rewrite acceptance criteria with verifiable signals, then re-record the last review.`);try{await _.remember(s,{type:"improvement-signal",content:o.message,tags:{source:"nyquist-lite",spec:e},provenance:"extracted",projectId:t})}catch{}}let m=p.setStatus(t,e,"reviewed");if(m){let{breakdownSpecToTasks:d}=await import("./spec-task-breakdown-3Y7YXCIQ.mjs");return await d(t,s,m),p.get(t,e)}return m}return c}async linkTask(s,e,r){let i=await this.requireProjectId(s);return p.linkTask(i,e,r)}async ship(s,e,r){let i=await this.requireProjectId(s);r!==void 0&&p.setShippedPr(i,e,r);let t=await B(s);return t&&p.setShippedSha(i,e,t),p.setStatus(i,e,"shipped")}unmetCriteria(s,e=new Set){return s.content.acceptance_criteria.filter(r=>!e.has(r))}async setSelectedReviewers(s,e,r){let i=await this.requireProjectId(s),t=p.get(i,e);if(!t)return null;let a=S(t.content);return p.updateContent(i,e,{...t.content,selected_reviewers:r,audit_candidate_hash:a,reviews:{}})}async requireProjectId(s){let e=await C.readConfig(s);if(!e?.projectId)throw new Error("not a prjct project (run `prjct init` first)");return e.projectId}},ae=new R;export{W as a,X as b,ae as c};
@@ -0,0 +1,12 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import{a as R,b as z}from"./chunk-RP7F67ZT.mjs";import{a as O,p as C}from"./chunk-D62TAZG6.mjs";import{a as k,e as M,g as $}from"./chunk-225DWS4D.mjs";import{a as p}from"./chunk-3TRXQAU4.mjs";$();C();z();import L from"node:fs/promises";import x from"node:path";var E={frontend:["component","page","view","ui","layout","style","css","scss","sass","hook","context","store","redux","zustand","react","vue","svelte","angular","next","nuxt","app","client"],backend:["api","route","controller","service","middleware","handler","resolver","schema","model","entity","repository","server","socket","graphql","rest","trpc"],database:["migration","seed","schema","model","entity","repository","prisma","drizzle","sequelize","typeorm","mongoose","knex","sql","db"],auth:["auth","login","logout","session","token","jwt","oauth","passport","credential","permission","role","user","account"],testing:["test","spec","e2e","integration","unit","mock","fixture","stub","jest","vitest","cypress","playwright"],config:["config","env","setting","constant","option","tsconfig","eslint","prettier","vite","webpack","rollup"],infra:["docker","compose","kubernetes","k8s","ci","cd","github","gitlab","jenkins","terraform","ansible","deploy"],util:["util","helper","lib","common","shared","core","base","abstract"]},j=new Set([".ts",".tsx",".js",".jsx",".mjs",".cjs",".py",".go",".rs",".java",".kt",".swift",".rb",".php",".c",".cpp",".h",".hpp",".cs",".vue",".svelte"]),A=new Set(["node_modules",".git","dist","build",".next",".nuxt",".output","coverage",".cache","__pycache__",".pytest_cache","vendor","target",".turbo",".vercel"]),T=new Set(["a","an","the","and","or","but","is","are","was","were","be","been","being","have","has","had","do","does","did","will","would","could","should","may","might","must","shall","can","need","to","of","in","for","on","with","at","by","from","as","into","through","during","before","after","above","below","between","under","again","further","then","once","here","there","when","where","why","how","all","each","few","more","most","other","some","such","no","nor","not","only","own","same","so","than","too","very","just","add","create","make","implement","fix","update","change","modify","remove","delete","new"]);async function Z(s,e,o={}){let a=Date.now(),r=o.maxFiles??30,n=o.minScore??.1,t=o.includeTests??!1,m=W(s),l=await P(e),i=await B(e),c=[];for(let h of l){if(!t&&G(h))continue;let u=q(h,m,i,o.historicalBoosts);u.score>=n&&c.push(u)}c.sort((h,u)=>u.score-h.score);let g=c.slice(0,r);return{files:g,metrics:{filesScanned:l.length,filesReturned:g.length,scanDuration:Date.now()-a}}}p(Z,"findRelevantFiles");function W(s){return s.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean).filter(o=>!T.has(o)&&o.length>2)}p(W,"extractKeywords");async function P(s){let e=[];async function o(a,r=""){try{let n=await L.readdir(a,{withFileTypes:!0});for(let t of n){let m=x.join(a,t.name),l=x.join(r,t.name);if(t.isDirectory()){if(A.has(t.name)||t.name.startsWith("."))continue;await o(m,l)}else if(t.isFile()){let i=x.extname(t.name).toLowerCase();j.has(i)&&e.push(l)}}}catch(n){k(n)||R.debug(`files-tool: skipped unreadable path during walk: ${M(n)}`)}}return p(o,"walk"),await o(s),e}p(P,"getAllCodeFiles");async function B(s){let e=new Map;try{let{stdout:o}=await O(`git log -30 --pretty=format:"%H %ct" --name-only | awk '
8
+ /^[a-f0-9]{40}/ { commit=$1; timestamp=$2; next }
9
+ NF { files[$0]++; if (!lastmod[$0]) lastmod[$0]=timestamp }
10
+ END { for (const f in files) print files[f], lastmod[f], f }
11
+ '`,{cwd:s,maxBuffer:10485760}),a=Math.floor(Date.now()/1e3),r=o.trim().split(`
12
+ `).filter(Boolean);for(let n of r){let t=n.match(/^(\d+)\s+(\d+)\s+(.+)$/);if(t){let m=parseInt(t[1],10),l=parseInt(t[2],10),i=t[3],c=Math.floor((a-l)/86400);e.set(i,{commits:m,daysAgo:c})}}}catch{}return e}p(B,"getGitRecency");function q(s,e,o,a){let r=[],n=s.toLowerCase(),t=n.split("/").join(" ").split(/[^a-z0-9]+/),m=Math.min(1,e.reduce((_,d)=>{let y=n.includes(d);y&&r.push(`keyword:${d}`);let S=t.some(w=>w.includes(d)||d.includes(w));return _+(y?.3:0)+(S?.15:0)},0)),l=Math.min(1,Object.entries(E).reduce((_,[d,y])=>{let S=y.some(b=>n.includes(b)),w=e.some(b=>y.includes(b)||b.includes(d)||d.includes(b));return S&&w&&r.push(`domain:${d}`),_+(S&&w?.4:0)},0)),i=o.get(s),c=i?i.daysAgo<=1?1:i.daysAgo<=3?.8:i.daysAgo<=7?.6:i.daysAgo<=30?.3:0:0,g=c===1?"recent:1d":c===.8?"recent:3d":c===.6?"recent:1w":c===.3?"recent:1m":null;g&&r.push(g);let h=Math.min(1,c+(i&&i.commits>=5?.2:0)),u=x.basename(s).toLowerCase(),v=u.includes("index")||u.includes("main")||u.includes("app")||u.includes("entry"),F=n.includes("/core/")||n.includes("/shared/")||n.includes("/lib/"),D=v?.5:F?.3:0;v?r.push("import:0"):F&&r.push("import:1");let f=a?.get(s),N=f===void 0?0:(f+1)/2;f!==void 0&&f>0?r.push("history:boosted"):f!==void 0&&f<0&&r.push("history:penalized");let I=a&&a.size>0?m*.54+l*.18+h*.13+D*.05+N*.1:m*.6+l*.2+h*.15+D*.05;return{path:s,score:Math.min(1,I),reasons:[...new Set(r)]}}p(q,"scoreFile");function G(s){let e=s.toLowerCase();return e.includes(".test.")||e.includes(".spec.")||e.includes("__tests__")||e.includes("__mocks__")||e.includes("/tests/")||e.includes("/test/")||e.endsWith("_test.go")||e.endsWith("_test.py")}p(G,"isTestFile");export{Z as a};
@@ -0,0 +1,12 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import{b as R}from"./chunk-B2HY22OD.mjs";import{g as E,i as se}from"./chunk-DMO3ZFUG.mjs";import{a as f,c}from"./chunk-TIBYHZFA.mjs";import{a as V,b as te}from"./chunk-U24YKPYX.mjs";import{b as w,p as ie}from"./chunk-D62TAZG6.mjs";import{d as D,j as oe}from"./chunk-KPR5TWSN.mjs";import{a as o}from"./chunk-3TRXQAU4.mjs";var O="https://api.openai.com/v1",$="text-embedding-3-small";function C(e,r){return/openrouter\.ai/i.test(r)&&e&&!e.includes("/")?`openai/${e}`:e}o(C,"normalizeModelForBaseUrl");function de(e){let r=e.trim();if(/^sk-or-/i.test(r))return{baseUrl:"https://openrouter.ai/api/v1",provider:"OpenRouter"};if(!/^sk-ant-/i.test(r)&&!/^(gsk_|gpg_)/i.test(r)){if(/^sk-/i.test(r))return{baseUrl:"https://api.openai.com/v1",provider:"OpenAI"};if(/^pa-/i.test(r))return{baseUrl:"https://api.voyageai.com/v1",provider:"Voyage"}}}o(de,"detectBaseUrlFromKey");var P="embeddings.provider",H="embeddings.baseUrl",v="embeddings.model",k="embeddings.authHeader",F="embeddings.authScheme",T="embeddings.headers",B="embeddings.query";function ae(e){if(!(typeof e!="string"||!e.trim()))try{let r=JSON.parse(e);if(r&&typeof r=="object"&&!Array.isArray(r)){let n={};for(let[t,i]of Object.entries(r))n[t]=String(i);return Object.keys(n).length?n:void 0}}catch{}}o(ae,"parseHeaders");function _(){let e=f(P),r=f(v);if(e!=="openai-compatible"||!r)return null;let n=f(F),t=f(k),i=f(B),s=String(f(H)??O);return{provider:"openai-compatible",baseUrl:s,model:C(String(r),s),authHeader:t!=null?String(t):void 0,authScheme:n!=null?String(n):void 0,extraHeaders:ae(f(T)),query:i!=null?String(i):void 0}}o(_,"resolveGlobalEmbeddings");function ce(e){let r=_();if(c(P,"openai-compatible"),e.baseUrl?.trim()?c(H,e.baseUrl.trim()):r||c(H,O),e.model?.trim()?c(v,e.model.trim()):r||c(v,$),e.authHeader!==void 0&&c(k,e.authHeader.trim()||void 0),e.authScheme!==void 0&&c(F,e.authScheme),e.query!==void 0&&c(B,e.query.trim()||void 0),e.extraHeaders!==void 0){let i=Object.keys(e.extraHeaders).length>0;c(T,i?JSON.stringify(e.extraHeaders):void 0)}let t=_();return t.model!==f(v)&&c(v,t.model),t}o(ce,"setGlobalEmbeddings");function ue(){c(P,void 0),c(H,void 0),c(v,void 0),c(k,void 0),c(F,void 0),c(T,void 0),c(B,void 0)}o(ue,"clearGlobalEmbeddings");te();ie();import x from"node:fs";import Y from"node:path";var K="PRJCT_EMBEDDINGS_API_KEY",q="prjct-embeddings",I="prjct";function A(){return Y.join(V(),"config","embeddings.key")}o(A,"keyFilePath");var S={value:void 0};function N(){return process.platform==="darwin"}o(N,"isDarwin");async function j(){try{let{stdout:e}=await w("security",["find-generic-password","-a",I,"-s",q,"-w"]);return e.trim()||null}catch{return null}}o(j,"readKeychain");function z(){try{return x.readFileSync(A(),"utf-8").trim()||null}catch{return null}}o(z,"readFileKey");async function W(){if(S.value!==void 0)return S.value;let e=process.env[K]?.trim();if(e)return S.value=e,e;let r=(N()?await j():null)??z();return S.value=r,r}o(W,"getEmbeddingsKey");async function He(){return process.env[K]?.trim()?"env":N()&&await j()?"keychain":z()?"file":"none"}o(He,"getKeyLocation");async function Ne(e){let r=e.trim();if(S.value=r,N())try{return await w("security",["add-generic-password","-U","-a",I,"-s",q,"-w",r]),"keychain"}catch{}x.mkdirSync(Y.dirname(A()),{recursive:!0}),x.writeFileSync(A(),r,{mode:384});try{x.chmodSync(A(),384)}catch{}return"file"}o(Ne,"setEmbeddingsKey");async function Le(){if(S.value=null,N())try{await w("security",["delete-generic-password","-a",I,"-s",q])}catch{}try{x.rmSync(A())}catch{}}o(Le,"clearEmbeddingsKey");oe();se();function me(e){let r=e?.embeddings;return!r||!r.provider||!r.model?null:r.provider==="openai-compatible"?new L(r.baseUrl??"https://api.openai.com/v1",r.model,{authHeader:r.authHeader,authScheme:r.authScheme,extraHeaders:r.headers,query:r.query}):null}o(me,"resolveProvider");function le(e,r,n,t,i={}){let s=e.replace(/\/+$/,""),a=i.query?.trim().replace(/^\?/,""),m=`${s}/embeddings${a?`?${a}`:""}`,g=C(r,s),b={"content-type":"application/json",...i.extraHeaders??{}};if(t){let y=i.authHeader?.trim()||"authorization",l=i.authScheme??"Bearer";b[y]=l?`${l} ${t}`:t}return{url:m,init:{method:"POST",headers:b,body:JSON.stringify({model:g,input:n})}}}o(le,"buildEmbeddingsRequest");var L=class{constructor(r,n,t={}){this.baseUrl=r;this.model=n;this.auth=t}baseUrl;model;auth;static{o(this,"HttpEmbeddingProvider")}async embed(r){if(r.length===0)return[];let n=await W(),{url:t,init:i}=le(this.baseUrl,this.model,r,n,this.auth),s=await fetch(t,i);if(!s.ok)throw new Error(`embeddings endpoint ${s.status}: ${await s.text().catch(()=>"")}`);return((await s.json()).data??[]).map(m=>m.embedding)}},ge="local-subword-v1",J=256,fe=800;function be(e){return Array.from({length:e.length},(n,t)=>e.charCodeAt(t)).reduce((n,t)=>Math.imul(n^t,16777619),2166136261)>>>0}o(be,"fnv1a");function ye(e,r,n){let t=[];if(e.length<r)return t.push(e),t;for(let i of Array.from({length:n-r+1},(s,a)=>r+a))t.push(...Array.from({length:Math.max(0,e.length-i+1)},(s,a)=>e.slice(a,a+i)));return t}o(ye,"charNGrams");function Z(e){let r=new Float64Array(J),n=(e.toLowerCase().match(/[\p{L}\p{N}]+/gu)??[]).slice(0,fe);for(let i of n){let s=ye(`<${i}>`,3,5);s.push(i);for(let a of s){let m=be(a),g=m%J,b=m&65536?1:-1;r[g]+=b}}let t=Math.sqrt(r.reduce((i,s)=>i+s*s,0))||1;return Array.from(r,i=>i/t)}o(Z,"embedLocal");function Te(e){return Z(e)}o(Te,"embedLocalText");var G=class{static{o(this,"LocalSubwordEmbeddingProvider")}model=ge;isLocal=!0;async embed(r){return r.map(n=>Z(n))}};function X(e){let r=me(e);if(r)return r;let n=_();return n?new L(n.baseUrl,n.model,{authHeader:n.authHeader,authScheme:n.authScheme,extraHeaders:n.extraHeaders,query:n.query}):new G}o(X,"resolveActiveProvider");function he(e){return Buffer.from(new Float32Array(e).buffer)}o(he,"packVector");function pe(e){let r=Uint8Array.from(e);return new Float32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4))}o(pe,"unpackVector");function Be(e,r){let n=M(e)*M(r);return n===0?0:ee(e,r)/n}o(Be,"cosineSimilarity");function M(e){return Math.sqrt(e.reduce((r,n)=>r+n*n,0))}o(M,"l2Norm");function ee(e,r){let n=Math.min(e.length,r.length);return e.reduce((t,i,s)=>s<n?t+i*r[s]:t,0)}o(ee,"dot");var Ee=2e3,ve=10,Q=new Map,Ke={isEnabled(e){return!0},store(e,r,n,t,i){E.run(e,`INSERT INTO memory_embeddings (memory_id, vector, model, dims, norm, created_at)
8
+ VALUES (?, ?, ?, ?, ?, ?)
9
+ ON CONFLICT(memory_id) DO UPDATE SET
10
+ vector = excluded.vector, model = excluded.model,
11
+ dims = excluded.dims, norm = excluded.norm, created_at = excluded.created_at`,r,he(n),t,n.length,M(n),i)},embeddedIds(e,r){try{let n=E.query(e,"SELECT memory_id FROM memory_embeddings WHERE model = ?",r);return new Set(n.map(t=>t.memory_id))}catch{return new Set}},async backfill(e,r,n,t={}){let i=t.provider??X(r),s=t.batchSize??64,a=await(async()=>{try{let{evaluateRetention:d}=await import("./retention-QSXWKE4H.mjs");return d(e,Date.now()).byId}catch{return null}})(),m=R.unembeddedEntriesForIndex(e,i.model).filter(d=>{if(!D(d)||d.content.trim().length===0)return!1;let u=a?.get(d.id);return!(u&&u.verdict!=="active")});if(this.shouldPruneThisRun(e)){let u=R.allEntriesForIndex(e).filter(p=>{if(!D(p))return!0;let h=a?.get(p.id);return h!=null&&h.verdict!=="active"}).map(p=>p.id);this.pruneNonModelVectors(e,u)}let g=this.countByModel(e,i.model),b=Array.from({length:Math.ceil(m.length/s)},(d,u)=>m.slice(u*s,(u+1)*s)),y=[];for(let d of b)try{let u=await i.embed(d.map(h=>h.content)),p=d.reduce((h,re,ne)=>{let U=u[ne];return!U||U.length===0?h:(this.store(e,re.id,U,i.model,n),h+1)},0);y.push(p)}catch{}return{embedded:y.reduce((d,u)=>d+u,0),skipped:g,total:g+m.length}},countByModel(e,r){try{return E.get(e,"SELECT COUNT(*) AS n FROM memory_embeddings WHERE model = ?",r)?.n??0}catch{return 0}},shouldPruneThisRun(e){let r=Q.get(e)??0;return Q.set(e,(r+1)%ve),r===0},pruneNonModelVectors(e,r){if(r.length!==0)try{let n=r.map(()=>"?").join(",");E.run(e,`DELETE FROM memory_embeddings WHERE memory_id IN (${n})`,...r)}catch{}},async semanticSearch(e,r,n,t=10,i){let s=i??X(n);if(!r.trim())return[];let a=await(async()=>{try{return(await s.embed([r]))[0]}catch{return}})();if(!a||a.length===0)return[];let m=(()=>{try{return E.query(e,`SELECT memory_id, vector, norm FROM memory_embeddings
12
+ WHERE model = ? ORDER BY rowid DESC LIMIT ?`,s.model,Ee)}catch{return null}})();if(!m)return[];let g=M(a);if(g===0)return[];let b=m.map(l=>{let d=pe(l.vector),u=g*(l.norm??M(d));return{id:l.memory_id,score:u===0?0:ee(a,d)/u}}).sort((l,d)=>d.score-l.score).slice(0,t),y=[];for(let l of b){let d=R.getById(e,l.id);d&&y.push(d)}return y}};export{$ as a,de as b,_ as c,ce as d,ue as e,He as f,Ne as g,Le as h,Te as i,X as j,Be as k,ee as l,Ke as m};
@@ -0,0 +1,7 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import{b as k}from"./chunk-HA7Y76GF.mjs";import{b as P}from"./chunk-AJXELVNH.mjs";import{b as O,c as U}from"./chunk-F2FKQUYE.mjs";import{a as Y}from"./chunk-L3DJN3XD.mjs";import{c as A,f as T,g as C}from"./chunk-OXKGN3HG.mjs";import{a as $,b as x}from"./chunk-B2HY22OD.mjs";import{b as D}from"./chunk-B7AQHL7B.mjs";import{a as I,h as L}from"./chunk-UNNY2IWZ.mjs";import{a as F,b as G,g as S,i as z}from"./chunk-DMO3ZFUG.mjs";import{d as M,i as w,j as H}from"./chunk-KPR5TWSN.mjs";import{a as l}from"./chunk-3TRXQAU4.mjs";G();H();z();var X=new Set(["decision","gotcha","learning","feedback","fact","shipped","spec"]),J=30,q=50,K=20,Q=45,Z=25,j=15,ee=180,V=90,te=25,ne=.12,re=40,se=40,oe=30,ie=20,ce=35,ae=.12,de=864e5,ue=100,le=50,pe=25,me=15,fe=/\b[\w.-]+(?:\/[\w.-]+)+\.(?:ts|tsx|js|jsx|mjs|cjs|json|md|sh|toml|yml|yaml)\b/g;function he(e,t){let s=x.allEntriesForIndex(e),r=new Set;for(let a of s)for(let p of O(a.tags))r.add(p);let n=(()=>{try{let a=P(e);return a?new Set(Object.keys(a.documents)):null}catch{return null}})(),i=A(s),c=T(i);return{entries:s,usefulness:U.decayedScores(e,t),supersededIds:w(s),correctedIds:r,indexedPaths:n,nowMs:t,refIndex:c}}l(he,"collectRetentionInputs");function ge(e){let t=new Map,s=new Set,r=[...e].sort((n,i)=>i.rememberedAt.localeCompare(n.rememberedAt));for(let n of r){let i=F(n.content);t.has(i)?s.add(n.id):t.set(i,n)}return s}l(ge,"collectDuplicateIds");function xe(e,t){let s=e.content.match(fe);return!s||s.length===0?!1:!s.some(r=>t.has(r))}l(xe,"isUngrounded");function Ee(e,t,s){let r=[],n=C(e.content,t.refIndex,e.id),i=s.has(e.id);i&&!n.exactDup&&r.push("duplicate of newer entry"),r.push(`excess ${n.excess.toFixed(2)} (sim ${n.maxSim.toFixed(2)})`);let c=n.exactDup||n.nearDup||n.excess<ae;c&&r.push(n.exactDup?`exact dup of ${n.nearestId}`:n.nearDup?`near-dup of ${n.nearestId}`:"low excess vs reference");let a=t.usefulness.get(e.id)??0,p=Math.min(Z,Math.max(0,a*8));a>0&&r.push(`used (+${Math.round(p)})`);let u=Math.max(0,(t.nowMs-Date.parse(e.rememberedAt))/de),h=Number.isFinite(u)?Math.max(0,j*(1-u/ee)):0,o=a<=0&&Number.isFinite(u)&&u>V?Math.min(te,(u-V)*ne):0;o>0&&r.push(`idle ${Math.round(u)}d`);let f=t.supersededIds.has(e.id);f&&r.push("superseded");let m=t.correctedIds.has(e.id);m&&r.push("corrected");let b=!M(e)||k(e);b&&r.push("generated noise");let E=!!(t.indexedPaths&&xe(e,t.indexedPaths));E&&r.push("cites files missing at HEAD");let g=Math.max(0,Math.min(100,n.excess*Q+p+h-(c?ce:0)-o-(f?re:0)-(m?se:0)-(b?oe:0)-(E?ie:0)-(i?20:0))),R=g>=q?"active":g>=K?"archive":"delete",_=i||n.exactDup||n.nearDup||f,y=R!=="active"&&u<J&&!_?"active":R;y!==R&&r.push("grace period");let d=y==="delete"&&X.has(e.type)?"archive":y;return d!==y&&r.push("protected type"),{id:e.id,type:e.type,verdict:d,score:Math.round(g),reasons:r,excess:n.excess,maxSim:n.maxSim,nearestId:n.nearestId}}l(Ee,"scoreEntry");function ye(e,t){let s=he(e,t),r=ge(s.entries),n={evaluated:s.entries.length,active:0,archive:0,delete:0,referenceSize:s.refIndex.entries.length,flagged:[],byId:new Map};for(let i of s.entries){let c=Ee(i,s,r);n[c.verdict]++,n.byId.set(c.id,c),c.verdict!=="active"&&n.flagged.push(c)}return n.flagged.sort((i,c)=>i.score-c.score),n}l(ye,"evaluateRetention");var Re=6e4,W=new Map;function B(e,t){let s=Math.floor(t/Re),r=(()=>{try{return $(e)}catch{return null}})();if(r!==null){let i=W.get(e);if(i&&i.bucket===s&&i.stamp===r)return i.report}let n=ye(e,t);return r!==null&&W.set(e,{bucket:s,stamp:r,report:n}),n}l(B,"evaluateRetentionShared");function He(e,t){return!(!M(e)||e.content.trim().length===0||t&&t.verdict!=="active"||t&&t.excess!==void 0&&t.excess<.05)}l(He,"shouldEmbedEntry");function v(e,t){if(t.startsWith("ship_"))return ve(e,t);if(x.forget(e,t))return!0;try{return(S.run(e,"UPDATE memory_entries SET deleted_at = ? WHERE id = ? AND deleted_at IS NULL",Date.now(),t).changes??0)>0}catch{return!1}}l(v,"forgetEntry");function N(e){return e.startsWith("mem_")||e.startsWith("ship_")||/^\d+$/.test(e)}l(N,"isRetentionRemovableId");function ve(e,t){let s=t.startsWith("ship_")?t.slice(5):t;if(!s)return!1;try{let r=S.get(e,"SELECT * FROM shipped_features WHERE id = ?",s);if(!r)return!1;try{D.archive(e,{entityType:"shipped",entityId:s,entityData:r,summary:`retention archive shipped [${r.name}]`,reason:"retention-archive"})}catch{}return(S.run(e,"DELETE FROM shipped_features WHERE id = ?",s).changes??0)>0}catch{return!1}}l(ve,"forgetShippedFeature");function be(e,t={}){let s=t.dryRun===!0,r=t.nowMs??Date.now(),n=t.maxArchive??ue,i=t.maxDelete??le,c=B(e,r),a=c.flagged.filter(o=>o.verdict==="archive"&&N(o.id)),p=c.flagged.filter(o=>o.verdict==="delete"&&N(o.id)),u=c.flagged.filter(o=>(o.verdict==="archive"||o.verdict==="delete")&&!N(o.id)).length,h=s?{archived:0,deleted:0,skipped:u}:(()=>{let o=a.slice(0,n),f=o.map(d=>{if(!d.id.startsWith("ship_"))try{D.archive(e,{entityType:"memory_entry",entityId:d.id,entityData:{id:d.id,type:d.type,score:d.score,excess:d.excess,reasons:d.reasons,verdict:d.verdict},summary:`retention archive [${d.type}] excess=${d.excess?.toFixed(2)??"?"} score=${d.score}`,reason:"retention-archive"})}catch{}return v(e,d.id)}),m=f.filter(Boolean).length,b=Math.max(0,a.length-o.length)+f.filter(d=>!d).length,E=p.slice(0,i),g=E.filter(d=>!X.has(d.type)).map(d=>d.id),R=E.length-g.length,_=g.length>0?Y(e,g):0,y=Math.max(0,p.length-E.length)+R+g.length-_;return{archived:m,deleted:_,skipped:u+b+y}})();return{evaluated:c.evaluated,active:c.active,wouldArchive:a.length,wouldDelete:p.length,archived:h.archived,deleted:h.deleted,skipped:h.skipped,dryRun:s,samples:c.flagged.slice(0,10),referenceSize:c.referenceSize}}l(be,"applyRetention");function Ge(e){return be(e,{maxArchive:pe,maxDelete:me})}l(Ge,"applyRetentionIncremental");function ze(e,t={}){let s=t.max??50,r=t.types??["inbox","context","idea","todo","question","gotcha","spec"],n=[],i=[];try{let c=x.allEntriesForIndex(e);for(let a of c){if(n.length>=s)break;if(!r.includes(a.type))continue;let p=I(a.content,a.type),u=L(a.content,a.type);(p.junk||u.action==="refuse"||a.type==="gotcha"&&u.action==="demote")&&v(e,a.id)&&(n.push(a),i.length<8&&i.push(`${a.id}:${p.junk?p.reason:u.reasonCode}`))}}catch{return{forgotten:0,samples:[]}}return{forgotten:n.length,samples:i}}l(ze,"forgetJunkCaptures");function Je(e,t=Date.now()){let r=x.allEntriesForIndex(e).filter(o=>o.type==="inbox");if(r.length===0)return{merged:0,archived:0,junkForgotten:0};let n=r.filter(o=>I(o.content,o.type).junk&&v(e,o.id)).length,i=x.allEntriesForIndex(e).filter(o=>o.type==="inbox");if(i.length===0)return{merged:0,archived:0,junkForgotten:n};let c=A(x.allEntriesForIndex(e)),a=T(c),p=B(e,t),u=[],h=[];for(let o of i){let f=C(o.content,a);if(f.exactDup||f.nearDup||f.excess<.15){v(e,o.id)&&u.push(o.id);continue}let m=p.byId.get(o.id);if(m&&m.verdict!=="active"){try{D.archive(e,{entityType:"memory_entry",entityId:o.id,entityData:{id:o.id,type:"inbox",score:m.score,excess:m.excess,reasons:m.reasons},summary:`inbox triage excess=${m.excess?.toFixed(2)??"?"}`,reason:"retention-inbox"})}catch{}v(e,o.id)&&h.push(o.id)}}return{merged:u.length,archived:h.length,junkForgotten:n}}l(Je,"triageInbox");export{X as a,he as b,ge as c,Ee as d,ye as e,B as f,He as g,N as h,ve as i,be as j,Ge as k,ze as l,Je as m};
@@ -0,0 +1,7 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import{c as _}from"./chunk-3TRXQAU4.mjs";var T=_(()=>{"use strict"});export{T as a};
@@ -0,0 +1,9 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import{a as f}from"./chunk-MCY7OXED.mjs";import{i as a}from"./chunk-YQ6HM3YO.mjs";import{j as u}from"./chunk-BUD3R6LF.mjs";import{b as m}from"./chunk-B2HY22OD.mjs";import{b as l}from"./chunk-XSZOHNL4.mjs";import{a as i}from"./chunk-3TRXQAU4.mjs";import{execSync as d}from"node:child_process";var h=1200,y=3;function C(t){try{return d("git diff --cached --name-only",{cwd:t,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).split(`
8
+ `).map(o=>o.trim()).filter(Boolean)}catch{return[]}}i(C,"stagedFiles");function b(t){let o=new Set;for(let r of t){let n=r.split("/").filter(Boolean);for(let s of n){let e=s.replace(/\.[^.]+$/,"").toLowerCase();e.length>=3&&o.add(e)}}return[...o]}i(b,"pathFragments");function k(t,o){let r=t.content.toLowerCase();if(o.some(n=>r.includes(n)))return!0;for(let n of Object.values(t.tags)){let s=n.toLowerCase();if(o.some(e=>s.includes(e)))return!0}return!1}i(k,"mentionsFragment");async function I(t){let o=await l.readConfig(t);if(!o?.projectId)return null;let r=C(t);if(r.length===0)return null;let n=b(r);if(n.length===0)return null;let s=(()=>{try{return m.recall(o.projectId,{types:["anti-pattern","gotcha"],limit:50})}catch{return null}})();if(!s)return null;let e=s.filter(g=>k(g,n)).slice(0,y);if(e.length===0)return null;let c=["# prjct: heads-up for this commit",""];c.push(`${e.length} anti-pattern/gotcha entr${e.length===1?"y":"ies"} match the staged files.`),c.push(""),c.push(u(e)),c.push(""),c.push("> Nudge, not block. Proceed if you think it still applies.");let p=c.join(`
9
+ `);return a(p,h)}i(I,"buildPreCommitContext");function _(t=process.cwd(),o){return f({event:"PreToolUse",projectPath:t,build:i(async(r,n)=>w(r)?I(n):null,"build")},o)}i(_,"runPreCommitHook");function w(t){return/\bgit\s+commit\b/.test(t.tool_input?.command??"")}i(w,"isCommitInput");export{I as a,_ as b,w as c};
@@ -0,0 +1,7 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import{h as a,i as b,j as c,k as d,l as e,m as f}from"./chunk-OGM34Z6W.mjs";import"./chunk-6RT2P22O.mjs";import"./chunk-D62TAZG6.mjs";import"./chunk-OE27RFLJ.mjs";import"./chunk-FATYLG3L.mjs";import"./chunk-2EEMQV7N.mjs";import"./chunk-KPR5TWSN.mjs";import"./chunk-623SNKDH.mjs";import"./chunk-XWLTEAGN.mjs";import"./chunk-225DWS4D.mjs";import"./chunk-3TRXQAU4.mjs";export{f as consolidateInstalls,c as isBrewWinnerPath,b as locationOwnsWinner,a as normalizePathForCompare,e as planCleanup,d as planCleanupFrom};
@@ -0,0 +1,8 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import{h as O,i as _}from"./chunk-GHSRH4GL.mjs";import{c as w,d as u,k as T,m as E}from"./chunk-WTDUJB4I.mjs";import{b as R,c as N}from"./chunk-NNOX3UU4.mjs";import"./chunk-U24YKPYX.mjs";import{a as i}from"./chunk-3TRXQAU4.mjs";N();import b from"node:crypto";import t from"node:fs";import{connect as M}from"node:net";import k from"node:path";function U(e){if(!e||typeof e!="object"||!("code"in e))return null;let n=e.code;return typeof n=="string"?n:null}i(U,"systemErrorCode");function q(e){let n=U(e);return n==="ENOENT"||n==="ECONNREFUSED"}i(q,"shouldUnlinkDaemonSocket");async function f(){let e=u.socket(),n=w(e);if(!n&&!t.existsSync(e))return!1;try{return(await D({id:b.randomUUID(),command:"__ping",args:[],options:{},cwd:process.cwd()},{timeoutMs:1e3})).success}catch(r){if(!n&&q(r))try{t.unlinkSync(e)}catch{}return!1}}i(f,"isDaemonRunning");async function J(){let e=u.socket(),n=u.pid();if(!w(e)&&!t.existsSync(e))return{running:!1};try{let o=await D({id:b.randomUUID(),command:"daemon",args:["status"],options:{},cwd:process.cwd()});if(o.success&&o.result)return o.result}catch{}return t.existsSync(n)?{running:!1,pid:parseInt(t.readFileSync(n,"utf-8").trim(),10),socketPath:e}:{running:!1}}i(J,"getDaemonStatus");function D(e,n={}){let r=n.timeoutMs??T(e.command);return new Promise((o,a)=>{let m=u.socket(),s=M(m),p=[],c=new AbortController,d=setTimeout(()=>{c.signal.aborted||(c.abort(),s.destroy(),a(new Error("Daemon request timed out")))},r);s.on("connect",()=>{s.write(E(e))}),s.on("data",y=>{p.push(y.toString());let l=p.join("");if(l.length>8*1024*1024){c.signal.aborted||(c.abort(),clearTimeout(d),s.destroy(),a(new Error("Daemon response too large")));return}let g=l.indexOf(`
8
+ `);if(g!==-1){let I=l.slice(0,g);p.splice(0,p.length,l.slice(g+1));try{let S=JSON.parse(I);c.abort(),clearTimeout(d),s.end(),o(S)}catch(S){c.abort(),clearTimeout(d),s.end(),a(new Error(`Invalid daemon response: ${S.message}`))}}}),s.on("error",y=>{c.signal.aborted||(c.abort(),clearTimeout(d),a(y))}),s.on("close",()=>{c.signal.aborted||(c.abort(),clearTimeout(d),a(new Error("Connection closed before response")))})})}i(D,"sendRequest");async function V(e,n,r,o,a,m=!0){let s=u.socket();if(!w(s)&&!t.existsSync(s))return m&&P().catch(()=>{}),null;try{return await D({id:b.randomUUID(),command:e,args:n,options:r,cwd:o,perfStartNs:a})}catch{return m&&P().catch(()=>{}),null}}i(V,"executeViaDaemon");async function C(){try{return(await D({id:b.randomUUID(),command:"daemon",args:["stop"],options:{},cwd:process.cwd()})).success}catch{return!1}}i(C,"stopDaemon");function x(){let e=u.pid(),n=u.socket(),r=(()=>{if(!t.existsSync(e))return{killed:!1,safeToCleanOwnership:!0};let o=parseInt(t.readFileSync(e,"utf-8").trim(),10);if(Number.isNaN(o))return{killed:!1,safeToCleanOwnership:!0};try{return process.kill(o,"SIGKILL"),{killed:!0,safeToCleanOwnership:!0}}catch(a){return{killed:!1,safeToCleanOwnership:U(a)==="ESRCH"}}})();if(!r.safeToCleanOwnership)return!1;try{t.existsSync(e)&&t.unlinkSync(e)}catch{}if(!w(n))try{t.existsSync(n)&&t.unlinkSync(n)}catch{}return r.killed}i(x,"forceKillDaemon");var h={inFlight:null};async function P(){return h.inFlight||(h.inFlight=v().finally(()=>{h.inFlight=null})),h.inFlight}i(P,"spawnDaemon");async function v(){if(await f())return!0;let e=O();if(!e)return await F(3e3);try{if(await f())return!0;let{spawn:n}=await import("node:child_process"),r=k.join(__dirname,"entry.ts"),o=k.join(__dirname,"..","daemon","entry.mjs"),a=k.join(__dirname,"..","dist","daemon","entry.mjs"),m=process.platform!=="win32"&&R(),s=t.existsSync(r)?{entryPath:r,runtime:"bun"}:t.existsSync(o)?{entryPath:o,runtime:m?"bun":"node"}:t.existsSync(a)?{entryPath:a,runtime:m?"bun":"node"}:null;if(!s)return!1;let{entryPath:p,runtime:c}=s,d=u.runDir();t.mkdirSync(d,{recursive:!0});let y=u.log(),l=t.openSync(y,"a");return n(c,[p],{detached:!0,stdio:["ignore",l,l],env:process.env}).unref(),t.closeSync(l),await F(3e3)}finally{_(e)}}i(v,"spawnDaemonExclusive");async function F(e){let n=Date.now()+e,r=i(async o=>Date.now()>=n?f():await f()?!0:(await new Promise(a=>setTimeout(a,o)),r(Math.min(o*2,250))),"poll");return r(40)}i(F,"waitUntilDaemonRunning");async function $(){try{return await f()?(await C()||x(),await new Promise(n=>setTimeout(n,300)),await P()):!1}catch{return!1}}i($,"restartDaemon");async function z(){return await f()?(await C()||x(),await new Promise(n=>setTimeout(n,300))):x(),await P()}i(z,"forceRestartDaemon");export{V as executeViaDaemon,x as forceKillDaemon,z as forceRestartDaemon,J as getDaemonStatus,f as isDaemonRunning,$ as restartDaemon,D as sendRequest,q as shouldUnlinkDaemonSocket,P as spawnDaemon,C as stopDaemon};
@@ -0,0 +1,7 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import{a}from"./chunk-QAIEAOJF.mjs";import"./chunk-76YMLNLF.mjs";import"./chunk-3TRXQAU4.mjs";export{a as findClosestCommand};
@@ -0,0 +1,14 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import{a as L,b as E,c as q,e as j}from"./chunk-PQTR6XVW.mjs";import{a as k}from"./chunk-F7OOBAJO.mjs";import"./chunk-JT4RNQ67.mjs";import"./chunk-VCSESVZ4.mjs";import"./chunk-YJOC2JJK.mjs";import{a as u}from"./chunk-6POAOY5C.mjs";import{a as A}from"./chunk-5DZ2LTII.mjs";import{d as m,e as f}from"./chunk-FOWTB762.mjs";import"./chunk-6U3CYLY5.mjs";import"./chunk-X433BB6F.mjs";import"./chunk-EZRNQXCC.mjs";import"./chunk-KUQLXY2P.mjs";import"./chunk-HCPQZRR3.mjs";import"./chunk-EHVU2SMR.mjs";import"./chunk-HPCSSJXH.mjs";import"./chunk-E5QQDYBR.mjs";import"./chunk-B7AQHL7B.mjs";import"./chunk-L4TUXFCL.mjs";import{h as i}from"./chunk-ID2C2S33.mjs";import{b as h}from"./chunk-XSZOHNL4.mjs";import{b as T}from"./chunk-OIE3AKKO.mjs";import{b as x,e as w}from"./chunk-7QTE6X4J.mjs";import{c as C}from"./chunk-4PPIE6GA.mjs";import"./chunk-Q6C27OL7.mjs";import{a as v}from"./chunk-NXUIMC22.mjs";import"./chunk-DZVOFEM5.mjs";import"./chunk-5EF5EOCL.mjs";import{g as S,i as W}from"./chunk-DMO3ZFUG.mjs";import"./chunk-NNOX3UU4.mjs";import"./chunk-RP7F67ZT.mjs";import"./chunk-INJ5WT2D.mjs";import{F as D,G as _}from"./chunk-HU5ERAAV.mjs";import"./chunk-6RT2P22O.mjs";import"./chunk-ZXTJLMVZ.mjs";import"./chunk-VWFVSNQT.mjs";import"./chunk-U24YKPYX.mjs";import"./chunk-D62TAZG6.mjs";import"./chunk-623SNKDH.mjs";import"./chunk-XWLTEAGN.mjs";import"./chunk-DOJPSIMG.mjs";import"./chunk-HYIT7MF5.mjs";import{e as O,g as U}from"./chunk-225DWS4D.mjs";import{a as g}from"./chunk-3TRXQAU4.mjs";import H from"node:path";import*as B from"node:readline/promises";import Q from"node:fs/promises";import R from"node:path";_();W();async function Y(a){try{return(await Q.stat(a)).isDirectory()}catch{return!1}}g(Y,"pathExists");async function G(a){try{let o=S.getDoc(a,"project"),t=o?.repoPath||o?.path||null;return t&&await Y(t)?{path:t,name:o?.name||R.basename(t)}:{path:null,name:o?.name||a.slice(0,8)}}catch{return{path:null,name:a.slice(0,8)}}}g(G,"resolveFromDoc");async function $(){let a=new Map,o=await L();for(let e of o){let n=await Y(e.projectPath),c=n?await h.readConfig(e.projectPath).catch(()=>null):null;a.set(e.projectId,{projectId:e.projectId,projectPath:n?e.projectPath:null,name:n?R.basename(e.projectPath):e.projectId.slice(0,8),connected:!!c?.cloud?.enabled||n,paused:!!c?.cloud?.paused})}let t=await D.listProjects();for(let e of t){if(a.has(e)){let d=a.get(e);if(d.projectPath){let y=await h.readConfig(d.projectPath).catch(()=>null);y?.cloud&&(d.connected=!!y.cloud.enabled,d.paused=!!y.cloud.paused)}continue}let n=await G(e),c=n.path?await h.readConfig(n.path).catch(()=>null):null,r=!!(c?.projectId===e||c?.projectId),s=r&&!!c?.cloud?.enabled,p=r&&!!c?.cloud?.paused,l=r&&n.path?R.basename(n.path):n.name;a.set(e,{projectId:e,projectPath:n.path,name:l,connected:s,paused:p})}return[...a.values()].sort((e,n)=>e.name.localeCompare(n.name))}g($,"listCloudProjectCandidates");function I(a,o){return a.filter(t=>t.projectPath?o==="connect"?!t.connected:t.connected:!1)}g(I,"actionableCandidates");U();var z=["link","unlink","status","sync","pull","pause","resume","projects","list"];function M(a){return{all:a.includes("--all"),yes:a.includes("--yes")||a.includes("-y"),interactive:a.includes("--interactive")||a.includes("-i")}}g(M,"parseBulkFlags");var F=class extends A{static{g(this,"CloudCommands")}async connect(o=null,t=process.cwd(),e={}){let n=M((o??"").trim().split(/\s+/).filter(Boolean));return n.all||n.interactive?this.linkBulk(n,e):this.link(t,e)}async disconnect(o=null,t=process.cwd(),e={}){let n=M((o??"").trim().split(/\s+/).filter(Boolean));return n.all||n.interactive?this.unlinkBulk(n,e):this.unlink(t,e)}async cloud(o=null,t=process.cwd(),e={}){let n=(o??"").trim().split(/\s+/).filter(Boolean),c=(n[0]??"").toLowerCase(),r=n.slice(1),s=M(r);if(!c||c==="status"||c==="show")return this.status(t,e);switch(c){case"link":case"connect":return s.all||s.interactive?this.linkBulk(s,e):this.link(t,e);case"unlink":case"disconnect":return s.all||s.interactive?this.unlinkBulk(s,e):this.unlink(t,e);case"projects":case"list":return this.listProjects(e);case"sync":return this.runSync(t,e);case"pull":return this.runPull(t,e);case"pause":return this.setPaused(!0,t,e);case"resume":return this.setPaused(!1,t,e);default:return m(`Unknown cloud subcommand "${c}". Use: ${z.join(", ")}.`,e)}}async readProject(o){let t=await h.readConfig(o).catch(()=>null);return t?.projectId?t:null}async link(o,t){let e=await this.readProject(o);if(!e)return f("No prjct project here \u2014 run `prjct init` first.",t);if(!await C.hasAuth())return f("Not authenticated. Run `prjct login`, then `prjct connect` (or `prjct cloud link`).",t);let n={enabled:!0,paused:!1,linkedAt:e.cloud?.linkedAt??new Date().toISOString(),include:e.cloud?.include},c=await T(e.projectId).catch(()=>{}),r=await w.linkProject(e.projectId,H.basename(o),c);if(e.cloud=n,await h.writeConfig(o,e),r.syncStatus==="active"){await E(e.projectId,o),await j.start(e.projectId,o).catch(()=>{});let s=await k.sync(e.projectId,{include:e.cloud.include??{}});return this.reportSync("Connected",s,t,{extra:"Project is now connected. It will also sync on `prjct ship` and at session end. Disconnect with `prjct disconnect`."})}return this.subscriptionRequired(r.message,t,{title:r.syncStatus==="payment_pending"?"Cloud sync waiting for payment":"Cloud sync waiting for subscription",prefix:`Repo connected to your prjct account. Billing: ${r.billingUrl}`})}async unlink(o,t){let e=await this.readProject(o);if(!e)return f("No prjct project here \u2014 run `prjct init` first.",t);if(!e.cloud?.enabled){let c="Already local-only \u2014 nothing to disconnect.";return console.log(t.md?u("## Cloud",`> ${c}`):c),{success:!0,linked:!1}}e.cloud={...e.cloud,enabled:!1,paused:!1},await h.writeConfig(o,e),j.stop(e.projectId),await q(e.projectId),await w.setCloudLifecycle(e.projectId,"unlink").catch(()=>{});let n="Disconnected \u2014 this project is local-only again. Cloud history kept; local data untouched. Re-connect with `prjct connect`.";return t.md?console.log(u("## Cloud",`> ${n}`)):i.done(n),{success:!0,linked:!1}}async listProjects(o){let t=await $();if(t.length===0){let n="No local prjct projects found. Run `prjct sync` inside a git repo, then `prjct connect`.";return o.md?console.log(u("## Cloud projects",`> ${n}`)):i.info(n),{success:!0,projects:[]}}let e=t.map(n=>{let c=n.connected?n.paused?"connected,paused":"connected":"local-only",r=n.projectPath??"(path unknown)";return`- **${n.name}** \xB7 ${c} \xB7 \`${r}\` \xB7 \`${n.projectId.slice(0,8)}\``});if(o.md)console.log(u("## Cloud projects",`> ${t.length} local project(s)`,e.join(`
8
+ `)));else{i.info(`Cloud projects (${t.length})`);for(let n of t){let c=n.connected?n.paused?"connected \xB7 paused":"connected":"local-only";i.info(` ${n.name.padEnd(24)} ${c.padEnd(18)} ${n.projectPath??"(path unknown)"}`)}i.info("Connect: prjct connect | Disconnect: prjct disconnect | Bulk: \u2026 --all --yes")}return{success:!0,projects:t.map(n=>({projectId:n.projectId,name:n.name,path:n.projectPath,connected:n.connected,paused:n.paused}))}}async linkBulk(o,t){if(!await C.hasAuth())return f("Not authenticated. Run `prjct login` first.",t);let e=await $(),n=I(e,"connect");if(n.length===0){let r="No unconnected projects with a known path. Open each repo and run `prjct connect`, or `prjct sync` first so paths are recorded.";return t.md?console.log(u("## Connect",`> ${r}`)):i.info(r),{success:!0,connected:0,skipped:0}}let c=o.interactive&&!o.all?await this.pickInteractively(n,"connect",t):n;if(c===null)return m("No TTY for one-by-one prompts. Confirm with the human, then run `prjct cloud link --all --yes`, or `cd <path> && prjct connect` per project.",t);if(o.interactive&&!o.all){if(c.length===0){let s="No projects selected.";return t.md?console.log(u("## Connect",`> ${s}`)):i.info(s),{success:!0,connected:0}}}else if(!await this.confirmBulk(`Connect ${c.length} project(s) to Cloud Sync?`,c,o.yes,t))return m(`Would connect ${c.length} project(s). Confirm with the human, then re-run with --yes.`,t);return this.runBulk(c,"connect",t)}async unlinkBulk(o,t){let e=await $(),n=I(e,"disconnect");if(n.length===0){let r="No connected projects with a known path to disconnect.";return t.md?console.log(u("## Disconnect",`> ${r}`)):i.info(r),{success:!0,disconnected:0}}let c=o.interactive&&!o.all?await this.pickInteractively(n,"disconnect",t):n;if(c===null)return m("No TTY for one-by-one prompts. Confirm with the human, then run `prjct cloud unlink --all --yes`, or `cd <path> && prjct disconnect` per project.",t);if(o.interactive&&!o.all){if(c.length===0){let s="No projects selected.";return t.md?console.log(u("## Disconnect",`> ${s}`)):i.info(s),{success:!0,disconnected:0}}}else if(!await this.confirmBulk(`Disconnect ${c.length} project(s)? Cloud history kept; local vaults untouched.`,c,o.yes,t))return m(`Would disconnect ${c.length} project(s). Confirm with the human, then re-run with --yes.`,t);return this.runBulk(c,"disconnect",t)}async runBulk(o,t,e){let n=[],c=[],r=[];for(let l of o){if(!l.projectPath)continue;let d=t==="connect"?await this.link(l.projectPath,{...e,md:!0}):await this.unlink(l.projectPath,{...e,md:!0});d.success||t==="connect"&&d.paymentRequired?(n.push(l),e.md||i.done(`${t==="connect"?"Connected":"Disconnected"}: ${l.name} (${l.projectPath})`)):(c.push(l),r.push(`${l.name}: ${d.error??d.message??"failed"}`),e.md||i.warn(`Failed: ${l.name} \u2014 ${d.error??d.message??"failed"}`))}let p=`${t==="connect"?"Connected":"Disconnected"} ${n.length} project(s)${c.length?` \xB7 ${c.length} failed`:""}.`;return e.md?console.log(u(`## Cloud ${t}`,`> ${p}`,...r.length?[r.map(l=>`- ${l}`).join(`
9
+ `)]:[])):i.done(p),{success:c.length===0,[t==="connect"?"connected":"disconnected"]:n.length,failed:c.length,errors:r}}async pickInteractively(o,t,e){if(!process.stdin.isTTY||!process.stdout.isTTY)return null;e.md||i.info(t==="connect"?"Connect projects one by one (y/N). Local data never leaves until you say yes.":"Disconnect projects one by one (y/N). Cloud history kept; local vault untouched.");let n=[],c=B.createInterface({input:process.stdin,output:process.stdout});try{for(let r of o){let s=`${t==="connect"?"Connect":"Disconnect"} ${r.name} (${r.projectPath})? [y/N] `,p=(await c.question(s)).trim().toLowerCase();(p==="y"||p==="yes")&&n.push(r)}}finally{c.close()}return n}async confirmBulk(o,t,e,n){if(e)return!0;let c=t.map(s=>` - ${s.name}: ${s.projectPath}`);if(n.md)console.log(u("## Confirm",`> ${o}`,c.join(`
10
+ `)));else{i.info(o);for(let s of c)i.info(s)}if(!process.stdin.isTTY||!process.stdout.isTTY)return!1;let r=B.createInterface({input:process.stdin,output:process.stdout});try{let s=(await r.question("Proceed? [y/N] ")).trim().toLowerCase();return s==="y"||s==="yes"}finally{r.close()}}async runSync(o,t){let e=await this.readProject(o);if(!e)return f("No prjct project here \u2014 run `prjct init` first.",t);let n=this.gate(e,t);if(n)return n;let c=await k.sync(e.projectId,{include:e.cloud?.include??{}});return this.reportSync("Synced",c,t)}async runPull(o,t){let e=await this.readProject(o);if(!e)return f("No prjct project here \u2014 run `prjct init` first.",t);let n=this.gate(e,t);if(n)return n;try{let c=await k.pull(e.projectId);if(!c.success)return c.code==="PAYMENT_REQUIRED"?this.subscriptionRequired(c.error,t):m(`Pull failed: ${c.error??"unknown error"}`,t);let r=`Pulled ${c.count??0} change(s) (${c.applied??0} applied).`;return t.md?console.log(u("## Cloud pull",`> ${r}`)):i.done(r),{success:!0,pulled:c.count??0,applied:c.applied??0}}catch(c){return f(O(c),t)}}async setPaused(o,t,e){let n=await this.readProject(t);if(!n)return f("No prjct project here \u2014 run `prjct init` first.",e);if(!n.cloud?.enabled)return m("Not connected \u2014 nothing to pause/resume. Run `prjct connect` first.",e);n.cloud={...n.cloud,paused:o},await h.writeConfig(t,n),o?j.stop(n.projectId):await j.start(n.projectId,t).catch(()=>{}),await w.setCloudLifecycle(n.projectId,o?"pause":"resume").catch(()=>{});let c=o?"Cloud sync paused (still connected). Resume with `prjct cloud resume`. Disconnect with `prjct disconnect`.":"Cloud sync resumed.";return e.md?console.log(u("## Cloud",`> ${c}`)):i.done(c),{success:!0,paused:o}}async status(o,t){let e=await this.readProject(o);if(!e)return f("No prjct project here \u2014 run `prjct init` first.",t);let n=await C.hasAuth(),c=e.cloud,r=!!c?.enabled,s=!!c?.paused,p=(await v.getPending(e.projectId)).length,l=await v.getLastSync(e.projectId),d={...x,...c?.include??{}},y=Object.entries(d).filter(([,b])=>b).map(([b])=>b),N=n?r?s?"connected, paused":"connected, active":"local-only (run `prjct connect`)":"not authenticated (run `prjct login`)",P=r?j.available()?j.status(e.projectId):"requires daemon":"n/a";return t.md?console.log(u("## Cloud status",`> **State**: ${N}`,[`- Authenticated: ${n?"yes":"no"}`,`- Connected: ${r?"yes":"no"}${c?.linkedAt?` (since ${c.linkedAt})`:""}`,`- Realtime: ${P}`,`- Pending events: ${p}`,`- Last sync: ${l?.timestamp??"never"}`,`- Syncing groups: ${y.join(", ")}`].join(`
11
+ `))):i.info([`Cloud \u2014 ${N}`,` Authenticated: ${n?"yes":"no"}`,` Connected: ${r?"yes":"no"}${c?.linkedAt?` (since ${c.linkedAt})`:""}`,` Realtime: ${P}`,` Pending events: ${p}`,` Last sync: ${l?.timestamp??"never"}`,` Syncing groups: ${y.join(", ")}`].join(`
12
+ `)),{success:!0,linked:r,paused:s,authed:n,pending:p,realtime:P}}gate(o,t){return o.cloud?.enabled?o.cloud.paused?m("Cloud sync is paused. Run `prjct cloud resume` first.",t):null:m("This project is not connected. Run `prjct connect` first.",t)}subscriptionRequired(o,t,e){let n=o??"Cloud sync needs an active prjct subscription. Your local data is safe \u2014 only cloud backup is paused.";return t.md?console.log(u(`## ${e?.title??"Subscription required"}`,`> \u{1F4B3} ${e?.prefix?`${e.prefix}
13
+
14
+ ${n}`:n}`)):(i.warn(e?.title??"Cloud backup paused \u2014 subscription required"),e?.prefix&&i.info(e.prefix),i.info(n)),{success:!1,paymentRequired:!0,message:n}}reportSync(o,t,e,n){if(!t.success)return t.code==="PAYMENT_REQUIRED"?this.subscriptionRequired(t.error,e):m(`${o} with errors: ${t.error??"unknown error"}`,e);let c=t.pushed?.count??0,r=t.pulled?.count??0,s=`${o} \u2014 ${c} pushed, ${r} pulled.`;return e.md?console.log(u("## Cloud",`> ${s}`,...n?.extra?[n.extra]:[])):(i.done(s),n?.extra&&i.info(n.extra)),{success:!0,pushed:c,pulled:r}}};export{F as CloudCommands};
@@ -0,0 +1,12 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import{a as H,b as J,c as K}from"./chunk-SRJEX6XF.mjs";import{c as E,d as I,e as G}from"./chunk-V6L5PLD7.mjs";import{a as L,b as P,d as T,e as F,f as D}from"./chunk-Y7XOKG4O.mjs";import{b as p}from"./chunk-J6Y7IVFQ.mjs";import"./chunk-UAYTDSYG.mjs";import"./chunk-NNILF7R3.mjs";import"./chunk-NZKUCQZK.mjs";import"./chunk-H2KNJUPN.mjs";import{a as b}from"./chunk-6POAOY5C.mjs";import{a as U}from"./chunk-5DZ2LTII.mjs";import{d,e as j}from"./chunk-FOWTB762.mjs";import"./chunk-6FUCOGOW.mjs";import"./chunk-6U3CYLY5.mjs";import"./chunk-Q3LUL6LL.mjs";import"./chunk-C7YBUD4K.mjs";import"./chunk-IOFCSTGM.mjs";import"./chunk-S6FBPXQL.mjs";import"./chunk-NOHSLOLL.mjs";import"./chunk-RCIWCKL7.mjs";import"./chunk-E73HSXCX.mjs";import"./chunk-76YMLNLF.mjs";import"./chunk-O5N6XYPU.mjs";import"./chunk-SROBBOJB.mjs";import"./chunk-CB3CNJTL.mjs";import"./chunk-LZILSE5H.mjs";import"./chunk-6OYLZ4NM.mjs";import"./chunk-SO3ZPNWT.mjs";import"./chunk-V7R3L54M.mjs";import{a as B,b as _,c as N}from"./chunk-UHXV7MDW.mjs";import"./chunk-YEALP3WX.mjs";import{e as M,g,h as A,i as R,j as S,m as O}from"./chunk-QZ7T2EYR.mjs";import"./chunk-UYMZ3NAF.mjs";import"./chunk-AJXELVNH.mjs";import"./chunk-CWLGRKA7.mjs";import"./chunk-2NI4EEK2.mjs";import"./chunk-BUD3R6LF.mjs";import"./chunk-ZQ2XH76U.mjs";import"./chunk-B2HY22OD.mjs";import"./chunk-XLFEWZRA.mjs";import"./chunk-X433BB6F.mjs";import"./chunk-EZRNQXCC.mjs";import"./chunk-HCPQZRR3.mjs";import"./chunk-EHVU2SMR.mjs";import"./chunk-HPCSSJXH.mjs";import"./chunk-E5QQDYBR.mjs";import"./chunk-B7AQHL7B.mjs";import"./chunk-L4TUXFCL.mjs";import{h as l}from"./chunk-ID2C2S33.mjs";import"./chunk-RACISWUV.mjs";import"./chunk-DIEPWXJJ.mjs";import"./chunk-NINFE7GS.mjs";import"./chunk-UNNY2IWZ.mjs";import{b as k}from"./chunk-XSZOHNL4.mjs";import"./chunk-OIE3AKKO.mjs";import"./chunk-Q6C27OL7.mjs";import"./chunk-NXUIMC22.mjs";import"./chunk-DZVOFEM5.mjs";import"./chunk-5EF5EOCL.mjs";import"./chunk-DMO3ZFUG.mjs";import"./chunk-NNOX3UU4.mjs";import"./chunk-INJ5WT2D.mjs";import"./chunk-HU5ERAAV.mjs";import"./chunk-6RT2P22O.mjs";import"./chunk-ZXTJLMVZ.mjs";import"./chunk-TIBYHZFA.mjs";import"./chunk-VWFVSNQT.mjs";import"./chunk-U24YKPYX.mjs";import{b as h,p as z}from"./chunk-D62TAZG6.mjs";import"./chunk-KPR5TWSN.mjs";import"./chunk-623SNKDH.mjs";import"./chunk-XWLTEAGN.mjs";import"./chunk-DOJPSIMG.mjs";import"./chunk-HYIT7MF5.mjs";import{e as v,g as Q}from"./chunk-225DWS4D.mjs";import{a as f}from"./chunk-3TRXQAU4.mjs";z();import $ from"node:path";async function q(i){try{let{stdout:s}=await h(process.platform==="win32"?"where":"which",[i],{timeout:2e3});return s.trim().split(/\r?\n/)[0]||null}catch{return null}}f(q,"which");async function y(){let i=await q("codebase-memory-mcp");if(!i)return{available:!1,path:null,version:null,note:"CBM not on PATH. Native prjct symbol graph is active. Install: https://github.com/DeusData/codebase-memory-mcp"};let s=await h(i,["--version"],{timeout:3e3}).catch(()=>h(i,["version"],{timeout:3e3})).then(({stdout:n,stderr:r})=>(n||r).trim().split(/\r?\n/)[0]||null).catch(()=>"unknown");return{available:!0,path:i,version:s,note:"CBM available. prjct native graph remains default; use CBM for polyglot Hybrid-LSP depth when needed."}}f(y,"detectCbm");function x(i){return i.available?`CBM: ${i.path}${i.version?` (${i.version})`:""} \u2014 ${i.note}`:`CBM: not installed \u2014 ${i.note}`}f(x,"formatCbmStatus");async function C(i,s,n={}){let r=await q("codebase-memory-mcp");if(!r)return{ok:!1,stdout:"",stderr:"",error:"codebase-memory-mcp not on PATH"};try{let{stdout:e,stderr:t}=await h(r,["cli",i,JSON.stringify(s)],{timeout:n.timeoutMs??3e4,maxBuffer:4194304});return{ok:!0,stdout:e.trim(),stderr:t.trim()}}catch(e){let t=e;return{ok:!1,stdout:(t.stdout??"").toString(),stderr:(t.stderr??"").toString(),error:t.message??String(e)}}}f(C,"cbmCli");async function V(i){let s=$.resolve(i),n=await C("list_projects",{});if(!n.ok||!n.stdout)return null;try{let r=JSON.parse(n.stdout),e=X(r);for(let t of e){let a=typeof t.path=="string"?$.resolve(t.path):"",o=typeof t.name=="string"?t.name:typeof t.project=="string"?t.project:null;if(o&&a&&(a===s||s.startsWith(a+$.sep))||o&&typeof t.repo_path=="string"&&$.resolve(t.repo_path)===s)return o}if(e.length===1){let t=e[0];return typeof t.name=="string"&&t.name||typeof t.project=="string"&&t.project||null}}catch{}return null}f(V,"cbmProjectName");function X(i){if(Array.isArray(i))return i;if(i&&typeof i=="object"){let s=i;if(Array.isArray(s.projects))return s.projects;if(Array.isArray(s.results))return s.results}return[]}f(X,"extractProjectsList");async function w(i,s,n={}){if(!(await y()).available)return null;let e=await V(s),t=e?{project:e}:{};if(i==="trace"&&!n.name)return null;let[a,o]=i==="trace"?["trace_path",{...t,function_name:n.name,direction:"both"}]:i==="architecture"?["get_architecture",{...t}]:["search_graph",{...t,name_pattern:n.pattern?`.*${Y(n.pattern)}.*`:".*",limit:30}],m=await C(a,o,{timeoutMs:2e4});if(!m.ok)return null;let c=m.stdout||m.stderr;return!c||c.length<2?null:{source:"cbm",text:[i==="trace"?`## Trace (CBM fallback): \`${n.name}\``:i==="architecture"?"## Architecture (CBM fallback)":`## Symbols (CBM fallback)${n.pattern?`: \`${n.pattern}\``:""}`,"","_Native prjct graph had no/weak hit \u2014 results from codebase-memory-mcp (Hybrid LSP / polyglot)._","","```",c.slice(0,12e3),c.length>12e3?"\u2026(truncated)\u2026":"","```"].filter(Boolean).join(`
8
+ `)}}f(w,"cbmFallback");function Y(i){return i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}f(Y,"escapeRegex");Q();var W=class extends U{static{f(this,"CodeCommands")}async code(s=null,n=process.cwd(),r={}){try{let e=(s??"").trim().split(/\s+/).filter(Boolean),t=(e[0]??"").toLowerCase(),a=e.slice(1).join(" ");return!t||t==="status"||t==="stats"?this.showStats(n,r):t==="symbols"||t==="search"?this.symbols(a,n,r):t==="trace"?this.trace(a,n,r):t==="impact"||t==="detect"||t==="changes"?this.impact(n,r):t==="architecture"||t==="arch"?this.architecture(n,r):t==="export"?this.exportArtifact(n,r):t==="import"||t==="bootstrap"?this.importArtifact(n,r):t==="push-graph"||t==="push"||t==="upload-graph"?this.pushGraph(n,r):t==="reindex"||t==="index"?this.reindex(n,r):t==="dead"?this.dead(n,r):t==="cbm"?this.cbmCmd(a,r):d(`Unknown code subcommand "${t}". Use: symbols | trace | impact | architecture | dead | export | import | push-graph | reindex | cbm`,r)}catch(e){return j(v(e),r)}}async showStats(s,n){let r=await p(s,n);if(!r.ok)return r.result;let e=A(r.value),t=g(r.value),a=await y().catch(()=>null),o=a?x(a):null;return n.md?console.log(b("## Code symbol graph",t?[`- **Symbols**: ${e?.symbolCount??"?"}`,`- **Edges**: ${e?.edgeCount??"?"}`,`- **Files**: ${e?.fileCount??"?"}`,`- **Built**: ${e?.builtAt??"unknown"}`,o?`- **${o}**`:"","","Commands: `symbols` \xB7 `trace` \xB7 `impact` \xB7 `architecture` \xB7 `dead` \xB7 `export` \xB7 `import` \xB7 `reindex` \xB7 `cbm`"].filter(Boolean).join(`
9
+ `):["> No symbol index yet. Run `prjct sync` or `prjct code reindex`.",o?`> ${o}`:""].filter(Boolean).join(`
10
+ `))):(t?(l.info(`Code graph: ${e?.symbolCount??0} symbols \xB7 ${e?.edgeCount??0} edges \xB7 ${e?.fileCount??0} files (built ${e?.builtAt??"?"})`),l.info(" symbols | trace | impact | architecture | dead | export | import | reindex | cbm")):l.info("Code graph: empty \u2014 run `prjct sync` or `prjct code reindex`"),o&&l.info(` ${o}`)),{success:!0,ready:t,meta:e,cbm:a}}async symbols(s,n,r){let e=await p(n,r);if(!e.ok)return e.result;if(!g(e.value))return d("No symbol index \u2014 run `prjct sync` or `prjct code reindex` first.",r);let t=s.trim(),a=t?S(e.value,t,{limit:40}):R(e.value).filter(o=>o.exported).slice(0,40);if(a.length===0&&t){let o=await w("search",n,{pattern:t});if(o)return console.log(o.text),{success:!0,count:0,source:"cbm",symbols:[]}}if(r.md){let o=[`## Symbols${t?`: \`${t}\``:" (exported sample)"}`,"","| Kind | Name | File | Line |","|---|---|---|---:|"];for(let m of a)o.push(`| ${m.kind} | \`${m.name}\` | \`${m.file}\` | ${m.startLine} |`);a.length===0&&o.push("| \u2014 | _no matches_ | | |"),console.log(o.join(`
11
+ `))}else if(a.length===0)l.info("No symbols matched.");else{l.info(`${a.length} symbol(s)${t?` matching "${t}"`:""}:`);for(let o of a)l.info(` ${o.kind.padEnd(9)} ${o.name} ${o.file}:${o.startLine}`)}return{success:!0,count:a.length,symbols:a}}async trace(s,n,r){let e=await p(n,r);if(!e.ok)return e.result;let t=s.trim();if(!t)return d("Usage: prjct code trace <functionOrClassName>",r);let a=g(e.value),o=a?O(e.value,t,{direction:"both",depth:3}):null;if(!o||o.inbound.length===0&&o.outbound.length===0&&o.root.length===0){let c=await w("trace",n,{name:t});if(c)return console.log(c.text),{success:!0,source:"cbm",inbound:0,outbound:0}}if(!o)return d(a?`No symbol named "${t}". Try \`prjct code symbols ${t}\`${(await y()).available?" or index the repo in CBM for polyglot depth":""}.`:"No symbol index \u2014 run `prjct sync` or `prjct code reindex` first.",r);if(r.md){let c=[`## Trace: \`${t}\``,"","### Roots",...o.root.map(u=>`- \`${u.kind}\` **${u.name}** \u2014 \`${u.file}:${u.startLine}\``),"",`### Inbound callers (${o.inbound.length})`,...o.inbound.length===0?["_none_"]:o.inbound.map(u=>`- d${u.depth} \`${u.symbol.name}\` (${u.symbol.kind}) \u2014 \`${u.symbol.file}:${u.symbol.startLine}\``),"",`### Outbound callees (${o.outbound.length})`,...o.outbound.length===0?["_none_"]:o.outbound.map(u=>`- d${u.depth} \`${u.symbol.name}\` (${u.symbol.kind}) \u2014 \`${u.symbol.file}:${u.symbol.startLine}\``)];console.log(c.join(`
12
+ `))}else{l.info(`Trace ${t}:`);for(let c of o.root)l.info(` root: ${c.kind} ${c.name} @ ${c.file}:${c.startLine}`);l.info(` inbound (${o.inbound.length}):`);for(let c of o.inbound.slice(0,20))l.info(` d${c.depth} ${c.symbol.name} \u2190 ${c.symbol.file}`);l.info(` outbound (${o.outbound.length}):`);for(let c of o.outbound.slice(0,20))l.info(` d${c.depth} ${c.symbol.name} \u2192 ${c.symbol.file}`)}return{success:!0,source:"native",root:o.root,inbound:o.inbound.length,outbound:o.outbound.length}}async impact(s,n){let r=await p(s,n);if(!r.ok)return r.result;let e=await E(s,r.value,{source:"auto"});return console.log(n.md?I(e):G(e)),{success:!0,...e}}async architecture(s,n){let r=await p(s,n);if(!r.ok)return r.result;let e=B(r.value);if(!e.ready||e.symbols===0){let t=await w("architecture",s);if(t)return console.log(t.text),{success:!0,source:"cbm",ready:!1}}return console.log(n.md?_(e):N(e)),{success:!0,source:"native",...e}}async exportArtifact(s,n){let r=await p(s,n);if(!r.ok)return r.result;if(!g(r.value))return d("No symbol index \u2014 run `prjct code reindex` first.",n);let e=await L(r.value);if(!e)return d("Export failed.",n);let t=`Cached ${e.symbols} symbols \xB7 ${e.edges} edges \u2192 ${e.path} (${e.bytes} bytes gzip) [per-project, not in client repo]`;return n.md?console.log(b("## Code graph cache",`> ${t}`)):l.success(t),{success:!0,...e}}async importArtifact(s,n){let r=await p(s,n);if(!r.ok)return r.result;let e=await P(r.value);if(!e.imported)return d(e.reason??"Import failed",n);let t=`Restored ${e.symbols} symbols \xB7 ${e.edges} edges from per-project cache`;return n.md?console.log(b("## Code graph restore",`> ${t}`)):l.success(t),{success:!0,...e}}async pushGraph(s,n){let r=await p(s,n);if(!r.ok)return r.result;if(!g(r.value))return d("No symbol index \u2014 run `prjct code reindex` first.",n);let e=await D(r.value);if(!e.uploaded)return d(e.reason??"Cloud upload failed (login with `prjct login` if offline).",n);let t=`Uploaded full structural graph \xB7 ${e.nodes??0} nodes \xB7 ${e.links??0} links (Function/Class/File + CALLS/IMPORTS \u2014 uncapped)`;return n.md?console.log(b("## Code graph cloud",`> ${t}`)):l.success(t),{success:!0,...e}}async reindex(s,n){let r=await p(s,n);if(!r.ok)return r.result;let e=await M(s,r.value),t=await k.readConfig(s).catch(()=>null);await F(r.value,{uploadToCloud:T(t)});let a=`Indexed ${e.symbolCount} symbols \xB7 ${e.edgeCount} edges \xB7 ${e.fileCount} files`;return n.md?console.log(b("## Code reindex",`> ${a}`)):l.success(a),{success:!0,meta:e}}async dead(s,n){let r=await p(s,n);if(!r.ok)return r.result;let e=H(r.value,{limit:50});return console.log(n.md?J(e):K(e)),{success:!0,count:e.dead.length,...e}}async cbmCmd(s,n){let r=s.trim().split(/\s+/).filter(Boolean);if(r[0]==="cli"&&r[1]){let a=r[1],o=r.slice(2).join(" "),m=o?(()=>{try{return JSON.parse(o)}catch{return null}})():{};if(!m)return d("cbm cli args must be JSON object",n);let c=await C(a,m);return c.ok?(console.log(c.stdout||c.stderr),{success:!0,stdout:c.stdout}):d(c.error??c.stderr??"CBM cli failed",n)}let e=await y(),t=x(e);return n.md?console.log(b("## CBM bridge",`> ${t}`,e.available?'Execute: `prjct code cbm cli <tool> \'{"key":"val"}\'` (see CBM docs for tools).':"")):(l.info(t),e.available&&l.info(` Execute: prjct code cbm cli <tool> '{"\u2026}'`)),{success:!0,...e}}};export{W as CodeCommands};