prjct-cli 3.88.0 → 3.91.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 (220) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/bin/hook-chunks/agent-identity-45BYQBU2.mjs +8 -0
  3. package/dist/bin/hook-chunks/agent-switch-IQ5KSRKD.mjs +22 -0
  4. package/dist/bin/hook-chunks/analysis-LBYZSJKT.mjs +42 -0
  5. package/dist/bin/hook-chunks/auth-config-WNUARXTJ.mjs +8 -0
  6. package/dist/bin/hook-chunks/auto-flush-GW3FP763.mjs +8 -0
  7. package/dist/bin/hook-chunks/auto-updater-EHRRMCYY.mjs +9 -0
  8. package/dist/bin/hook-chunks/capture-gate-BQCNMHUC.mjs +8 -0
  9. package/dist/bin/hook-chunks/chunk-2NMSEZTQ.mjs +8 -0
  10. package/dist/bin/hook-chunks/chunk-2OU2MKNS.mjs +8 -0
  11. package/dist/bin/hook-chunks/chunk-2UC4DTDO.mjs +9 -0
  12. package/dist/bin/hook-chunks/chunk-3FBCOCPD.mjs +8 -0
  13. package/dist/bin/hook-chunks/chunk-3JUE6MNF.mjs +8 -0
  14. package/dist/bin/hook-chunks/chunk-3LG3ACQV.mjs +8 -0
  15. package/dist/bin/hook-chunks/chunk-3WKDMAS7.mjs +16 -0
  16. package/dist/bin/hook-chunks/chunk-45I2C2UB.mjs +25 -0
  17. package/dist/bin/hook-chunks/chunk-4DDCWMI6.mjs +8 -0
  18. package/dist/bin/hook-chunks/chunk-4KY2EHXS.mjs +9 -0
  19. package/dist/bin/hook-chunks/chunk-4WHS7CO7.mjs +8 -0
  20. package/dist/bin/hook-chunks/chunk-54LH63LM.mjs +7 -0
  21. package/dist/bin/hook-chunks/chunk-5TBQNW2G.mjs +17 -0
  22. package/dist/bin/hook-chunks/chunk-5WAONIPX.mjs +8 -0
  23. package/dist/bin/hook-chunks/chunk-6AFM6WRB.mjs +13 -0
  24. package/dist/bin/hook-chunks/chunk-6EWGHM32.mjs +9 -0
  25. package/dist/bin/hook-chunks/chunk-6IKHMK2U.mjs +10 -0
  26. package/dist/bin/hook-chunks/chunk-75UJIVMO.mjs +10 -0
  27. package/dist/bin/hook-chunks/chunk-7OZDWT6C.mjs +9 -0
  28. package/dist/bin/hook-chunks/chunk-7SI6X3Z7.mjs +8 -0
  29. package/dist/bin/hook-chunks/chunk-A5MUSARI.mjs +9 -0
  30. package/dist/bin/hook-chunks/chunk-A5RNWWTH.mjs +9 -0
  31. package/dist/bin/hook-chunks/chunk-AEYONUUY.mjs +31 -0
  32. package/dist/bin/hook-chunks/chunk-AKIN5WSQ.mjs +9 -0
  33. package/dist/bin/hook-chunks/chunk-AOPJ4Z6O.mjs +8 -0
  34. package/dist/bin/hook-chunks/chunk-AUUWQH3S.mjs +14 -0
  35. package/dist/bin/hook-chunks/chunk-AW25AWN5.mjs +31 -0
  36. package/dist/bin/hook-chunks/chunk-B7GMU46T.mjs +71 -0
  37. package/dist/bin/hook-chunks/chunk-BISPGBNN.mjs +35 -0
  38. package/dist/bin/hook-chunks/chunk-BUDZL4DW.mjs +8 -0
  39. package/dist/bin/hook-chunks/chunk-CE4RCNC7.mjs +8 -0
  40. package/dist/bin/hook-chunks/chunk-CQHPIYNM.mjs +8 -0
  41. package/dist/bin/hook-chunks/chunk-CREPUNOS.mjs +24 -0
  42. package/dist/bin/hook-chunks/chunk-CTWZQ7YI.mjs +8 -0
  43. package/dist/bin/hook-chunks/chunk-D4S3IRD3.mjs +8 -0
  44. package/dist/bin/hook-chunks/chunk-D6KT763C.mjs +9 -0
  45. package/dist/bin/hook-chunks/chunk-D7TRY3CO.mjs +8 -0
  46. package/dist/bin/hook-chunks/chunk-DGQYQSUK.mjs +19 -0
  47. package/dist/bin/hook-chunks/chunk-DMXFGLZE.mjs +21 -0
  48. package/dist/bin/hook-chunks/chunk-DXQMKW2B.mjs +10 -0
  49. package/dist/bin/hook-chunks/chunk-DYHYDHCW.mjs +8 -0
  50. package/dist/bin/hook-chunks/chunk-E66B27AL.mjs +8 -0
  51. package/dist/bin/hook-chunks/chunk-EHBEHLYN.mjs +15 -0
  52. package/dist/bin/hook-chunks/chunk-EM6ZDJAK.mjs +45 -0
  53. package/dist/bin/hook-chunks/chunk-FEH4IPIC.mjs +15 -0
  54. package/dist/bin/hook-chunks/chunk-FGQZ62ZP.mjs +47 -0
  55. package/dist/bin/hook-chunks/chunk-GAOQHD5S.mjs +8 -0
  56. package/dist/bin/hook-chunks/chunk-GCKILEXJ.mjs +8 -0
  57. package/dist/bin/hook-chunks/chunk-GVNMXVVA.mjs +8 -0
  58. package/dist/bin/hook-chunks/chunk-HBLR7BVG.mjs +11 -0
  59. package/dist/bin/hook-chunks/chunk-HDHVBB6Q.mjs +1260 -0
  60. package/dist/bin/hook-chunks/chunk-HDSS6UB3.mjs +8 -0
  61. package/dist/bin/hook-chunks/chunk-HJ4HEI45.mjs +8 -0
  62. package/dist/bin/hook-chunks/chunk-HZIORCPO.mjs +16 -0
  63. package/dist/bin/hook-chunks/chunk-IKUGYUAI.mjs +8 -0
  64. package/dist/bin/hook-chunks/chunk-J6JZ4PQA.mjs +18 -0
  65. package/dist/bin/hook-chunks/chunk-JQE2F2RK.mjs +8 -0
  66. package/dist/bin/hook-chunks/chunk-KEJ5RMAI.mjs +9 -0
  67. package/dist/bin/hook-chunks/chunk-L4COZ7ZH.mjs +13 -0
  68. package/dist/bin/hook-chunks/chunk-LGJUQEAU.mjs +8 -0
  69. package/dist/bin/hook-chunks/chunk-LJLUP4FF.mjs +8 -0
  70. package/dist/bin/hook-chunks/chunk-LLQUB6YR.mjs +11 -0
  71. package/dist/bin/hook-chunks/chunk-LPB3HUJ2.mjs +19 -0
  72. package/dist/bin/hook-chunks/chunk-LT5WSSQO.mjs +8 -0
  73. package/dist/bin/hook-chunks/chunk-LWCHQIJ7.mjs +11 -0
  74. package/dist/bin/hook-chunks/chunk-M3ZOJVPA.mjs +13 -0
  75. package/dist/bin/hook-chunks/chunk-MEQS4VPO.mjs +8 -0
  76. package/dist/bin/hook-chunks/chunk-MXHX44WF.mjs +9 -0
  77. package/dist/bin/hook-chunks/chunk-N5WOHG36.mjs +8 -0
  78. package/dist/bin/hook-chunks/chunk-NJAMZSHM.mjs +26 -0
  79. package/dist/bin/hook-chunks/chunk-NLG2EW6M.mjs +8 -0
  80. package/dist/bin/hook-chunks/chunk-NWY5M34K.mjs +12 -0
  81. package/dist/bin/hook-chunks/chunk-ODWWIFSN.mjs +9 -0
  82. package/dist/bin/hook-chunks/chunk-OIEZAHLC.mjs +16 -0
  83. package/dist/bin/hook-chunks/chunk-PKDYFXMI.mjs +8 -0
  84. package/dist/bin/hook-chunks/chunk-PSP56GGF.mjs +13 -0
  85. package/dist/bin/hook-chunks/chunk-PSSR7LSW.mjs +8 -0
  86. package/dist/bin/hook-chunks/chunk-PW3KYKVS.mjs +9 -0
  87. package/dist/bin/hook-chunks/chunk-PXJKXBTM.mjs +53 -0
  88. package/dist/bin/hook-chunks/chunk-Q5I2UPD6.mjs +9 -0
  89. package/dist/bin/hook-chunks/chunk-QDQ7DTDV.mjs +8 -0
  90. package/dist/bin/hook-chunks/chunk-QSAA6LZF.mjs +8 -0
  91. package/dist/bin/hook-chunks/chunk-QZSJSXJV.mjs +10 -0
  92. package/dist/bin/hook-chunks/chunk-RAHFKGM6.mjs +19 -0
  93. package/dist/bin/hook-chunks/chunk-RJ2BRRMH.mjs +38 -0
  94. package/dist/bin/hook-chunks/chunk-RRWPDRYR.mjs +43 -0
  95. package/dist/bin/hook-chunks/chunk-SJ75V4WG.mjs +9 -0
  96. package/dist/bin/hook-chunks/chunk-SOPRYWUY.mjs +11 -0
  97. package/dist/bin/hook-chunks/chunk-SVZHJZ5T.mjs +9 -0
  98. package/dist/bin/hook-chunks/chunk-SYHDEUVU.mjs +10 -0
  99. package/dist/bin/hook-chunks/chunk-TFGJVT6F.mjs +8 -0
  100. package/dist/bin/hook-chunks/chunk-TPESWBA7.mjs +8 -0
  101. package/dist/bin/hook-chunks/chunk-TRMBRDKH.mjs +8 -0
  102. package/dist/bin/hook-chunks/chunk-TXJT3G53.mjs +10 -0
  103. package/dist/bin/hook-chunks/chunk-UHW35BPE.mjs +18 -0
  104. package/dist/bin/hook-chunks/chunk-UQVJQME2.mjs +8 -0
  105. package/dist/bin/hook-chunks/chunk-UUULLTQV.mjs +8 -0
  106. package/dist/bin/hook-chunks/chunk-V37VTXDW.mjs +10 -0
  107. package/dist/bin/hook-chunks/chunk-W5OWBOLH.mjs +8 -0
  108. package/dist/bin/hook-chunks/chunk-WDGDFXSB.mjs +10 -0
  109. package/dist/bin/hook-chunks/chunk-WUHGODSQ.mjs +8 -0
  110. package/dist/bin/hook-chunks/chunk-X5RDLFPM.mjs +8 -0
  111. package/dist/bin/hook-chunks/chunk-XEFIIDHM.mjs +11 -0
  112. package/dist/bin/hook-chunks/chunk-Y5NQV46G.mjs +9 -0
  113. package/dist/bin/hook-chunks/chunk-YG7KBQYJ.mjs +16 -0
  114. package/dist/bin/hook-chunks/chunk-YJMWY4Y6.mjs +8 -0
  115. package/dist/bin/hook-chunks/chunk-YKMJI6TF.mjs +14 -0
  116. package/dist/bin/hook-chunks/chunk-YUOTOCKK.mjs +103 -0
  117. package/dist/bin/hook-chunks/chunk-ZTZTVBAZ.mjs +12 -0
  118. package/dist/bin/hook-chunks/chunk-ZX2KFQV5.mjs +11 -0
  119. package/dist/bin/hook-chunks/chunk-ZZ65CN5F.mjs +20 -0
  120. package/dist/bin/hook-chunks/client-SKFMAUI5.mjs +10 -0
  121. package/dist/bin/hook-chunks/code-graph-cloud-65GCWNII.mjs +8 -0
  122. package/dist/bin/hook-chunks/codex-skill-7IURPY6B.mjs +8 -0
  123. package/dist/bin/hook-chunks/command-installer-BVHQUSL4.mjs +8 -0
  124. package/dist/bin/hook-chunks/config-manager-KYC7WUOS.mjs +8 -0
  125. package/dist/bin/hook-chunks/content-bound-stamp-72EQVZLP.mjs +10 -0
  126. package/dist/bin/hook-chunks/context-pressure-OUN5PFMN.mjs +8 -0
  127. package/dist/bin/hook-chunks/context7-service-4C6VNJUS.mjs +8 -0
  128. package/dist/bin/hook-chunks/custom-workflow-storage-M77INP6Z.mjs +8 -0
  129. package/dist/bin/hook-chunks/cwd-changed-56X7BNS6.mjs +8 -0
  130. package/dist/bin/hook-chunks/cycle-budget-card-O5WAGNGC.mjs +9 -0
  131. package/dist/bin/hook-chunks/database-SLDTQXWG.mjs +8 -0
  132. package/dist/bin/hook-chunks/delivery-geometry-VHCURJ7E.mjs +8 -0
  133. package/dist/bin/hook-chunks/detect-changes-6N4DCWXQ.mjs +17 -0
  134. package/dist/bin/hook-chunks/detection-MEYHME4X.mjs +8 -0
  135. package/dist/bin/hook-chunks/developer-evolution-R5BXQH6G.mjs +12 -0
  136. package/dist/bin/hook-chunks/discuss-lock-55GER2LR.mjs +8 -0
  137. package/dist/bin/hook-chunks/distill-6C6YIFOE.mjs +8 -0
  138. package/dist/bin/hook-chunks/drift-refresh-TD3PYPJN.mjs +8 -0
  139. package/dist/bin/hook-chunks/editors-config-3N6VREZR.mjs +8 -0
  140. package/dist/bin/hook-chunks/enriched-recall-6ZZNKAJZ.mjs +8 -0
  141. package/dist/bin/hook-chunks/exec-I7XE7NMD.mjs +8 -0
  142. package/dist/bin/hook-chunks/format-YOYMJSLY.mjs +8 -0
  143. package/dist/bin/hook-chunks/git-helpers-6JLP2OJZ.mjs +8 -0
  144. package/dist/bin/hook-chunks/infer-memory-file-PIAZ542H.mjs +8 -0
  145. package/dist/bin/hook-chunks/judgment-ledger-storage-UKROWRVA.mjs +8 -0
  146. package/dist/bin/hook-chunks/judgment-orchestrator-UFGNBTEK.mjs +8 -0
  147. package/dist/bin/hook-chunks/judgment-receipt-2U7D6HS4.mjs +8 -0
  148. package/dist/bin/hook-chunks/land-cue-SS23JBAX.mjs +9 -0
  149. package/dist/bin/hook-chunks/land-synthesis-OATL5BNP.mjs +8 -0
  150. package/dist/bin/hook-chunks/legacy-crew-sweep-NH5EWEXF.mjs +24 -0
  151. package/dist/bin/hook-chunks/memory-index-677MUBCZ.mjs +10 -0
  152. package/dist/bin/hook-chunks/notification-S2IJJ6JW.mjs +8 -0
  153. package/dist/bin/hook-chunks/nyquist-lite-GE7OAFLC.mjs +10 -0
  154. package/dist/bin/hook-chunks/pack-integrity-L3BL7CGO.mjs +10 -0
  155. package/dist/bin/hook-chunks/pack-manager-SU53HCKK.mjs +8 -0
  156. package/dist/bin/hook-chunks/package-legitimacy-HXC4L73B.mjs +8 -0
  157. package/dist/bin/hook-chunks/path-manager-F2HE2GGK.mjs +8 -0
  158. package/dist/bin/hook-chunks/planning-ZYFCFU7N.mjs +9 -0
  159. package/dist/bin/hook-chunks/post-edit-JD7YFEBZ.mjs +8 -0
  160. package/dist/bin/hook-chunks/pr-convention-7UGI7TFA.mjs +8 -0
  161. package/dist/bin/hook-chunks/pre-bash-VIABNO5E.mjs +11 -0
  162. package/dist/bin/hook-chunks/pre-commit-NVQVXHZQ.mjs +8 -0
  163. package/dist/bin/hook-chunks/pre-edit-V4RD45C4.mjs +11 -0
  164. package/dist/bin/hook-chunks/pre-package-KFJZXI5T.mjs +8 -0
  165. package/dist/bin/hook-chunks/pre-search-7KRU5D2O.mjs +9 -0
  166. package/dist/bin/hook-chunks/pre-secrets-IE5NX5X5.mjs +8 -0
  167. package/dist/bin/hook-chunks/precision-classifier-IVVAXE26.mjs +8 -0
  168. package/dist/bin/hook-chunks/precision-judgment-WPTCNTGV.mjs +8 -0
  169. package/dist/bin/hook-chunks/prjct-md-FMCPUMQT.mjs +8 -0
  170. package/dist/bin/hook-chunks/project-agent-surfaces-TD7BHI25.mjs +8 -0
  171. package/dist/bin/hook-chunks/project-file-inventory-ZAPKPKY6.mjs +8 -0
  172. package/dist/bin/hook-chunks/project-memory-ZVZSLPB5.mjs +8 -0
  173. package/dist/bin/hook-chunks/project-style-evolution-7JS75AUP.mjs +8 -0
  174. package/dist/bin/hook-chunks/prompt-S4MMIXH5.mjs +22 -0
  175. package/dist/bin/hook-chunks/publish-helper-I37V4L7U.mjs +8 -0
  176. package/dist/bin/hook-chunks/purge-BDREPWEE.mjs +8 -0
  177. package/dist/bin/hook-chunks/retention-D2MVQLOF.mjs +8 -0
  178. package/dist/bin/hook-chunks/sdd-ZO4DP23G.mjs +10 -0
  179. package/dist/bin/hook-chunks/session-continuity-FNNUMOXB.mjs +11 -0
  180. package/dist/bin/hook-chunks/session-start-HA7IRBFX.mjs +8 -0
  181. package/dist/bin/hook-chunks/settings-installer-QDM3GB6J.mjs +9 -0
  182. package/dist/bin/hook-chunks/setup-7L3NXNRH.mjs +142 -0
  183. package/dist/bin/hook-chunks/shipping-GX4HFYJ3.mjs +13 -0
  184. package/dist/bin/hook-chunks/skill-index-OOVAXHYJ.mjs +12 -0
  185. package/dist/bin/hook-chunks/spec-context-inference-KER2R3F3.mjs +15 -0
  186. package/dist/bin/hook-chunks/spec-service-G3RLCJ2G.mjs +11 -0
  187. package/dist/bin/hook-chunks/spec-task-breakdown-YPJ76OWR.mjs +8 -0
  188. package/dist/bin/hook-chunks/state-storage-KNGP2CQV.mjs +8 -0
  189. package/dist/bin/hook-chunks/stop-HPZCLDPM.mjs +17 -0
  190. package/dist/bin/hook-chunks/subagent-start-7KZUTKV5.mjs +8 -0
  191. package/dist/bin/hook-chunks/subagent-stop-7C72RWGO.mjs +8 -0
  192. package/dist/bin/hook-chunks/surface-attribution-PDYR6DVA.mjs +8 -0
  193. package/dist/bin/hook-chunks/symbol-graph-LZM4RZXZ.mjs +8 -0
  194. package/dist/bin/hook-chunks/sync-analyzer-FKC57RTV.mjs +8 -0
  195. package/dist/bin/hook-chunks/sync-client-DJWOG2ZQ.mjs +8 -0
  196. package/dist/bin/hook-chunks/sync-cursor-storage-2VKG757H.mjs +19 -0
  197. package/dist/bin/hook-chunks/task-orchestration-MLOCR7GA.mjs +8 -0
  198. package/dist/bin/hook-chunks/task-overview-6ZQKJGSH.mjs +8 -0
  199. package/dist/bin/hook-chunks/task-service-RRFG5P7N.mjs +8 -0
  200. package/dist/bin/hook-chunks/tdd-XQUU4C23.mjs +10 -0
  201. package/dist/bin/hook-chunks/template-loader-4QMIMOBY.mjs +8 -0
  202. package/dist/bin/hook-chunks/transcript-jsonl-6X4DDD6R.mjs +8 -0
  203. package/dist/bin/hook-chunks/trust-boundary-ERMDF2C5.mjs +8 -0
  204. package/dist/bin/hook-chunks/usefulness-253CZLNY.mjs +8 -0
  205. package/dist/bin/hook-chunks/vault-retire-notice-GRT3QRLZ.mjs +9 -0
  206. package/dist/bin/hook-chunks/velocity-storage-UPW6TLK6.mjs +8 -0
  207. package/dist/bin/hook-chunks/weak-model-mode-M6D23IIM.mjs +8 -0
  208. package/dist/bin/hook-chunks/work-graph-QJGNBVIP.mjs +49 -0
  209. package/dist/bin/hook-chunks/work-scope-6FG6PSAV.mjs +8 -0
  210. package/dist/bin/hook-chunks/workspace-occupancy-UVIRHY5Z.mjs +8 -0
  211. package/dist/bin/hook-chunks/worktree-service-XGRN5TTE.mjs +12 -0
  212. package/dist/bin/hook-fast-darwin-arm64 +0 -0
  213. package/dist/bin/hook-fast-darwin-x64 +0 -0
  214. package/dist/bin/hook-fast-linux-x64 +0 -0
  215. package/dist/bin/prjct-core.mjs +625 -624
  216. package/dist/bin/prjct-hooks.mjs +3 -2282
  217. package/dist/bin/prjct.mjs +17 -2
  218. package/dist/daemon/entry.mjs +545 -544
  219. package/dist/mcp/server.mjs +196 -195
  220. package/package.json +1 -1
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __pathDirname } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __pathDirname(__filename);
8
+ import{a as t,c as f}from"./chunk-E66B27AL.mjs";import{z as o}from"zod";function p(e){return s[e]??"balanced"}function u(e){return e==="frontier"?"max":"decent"}function m(e){return{model:n[e][0],effort:u(e)}}function h(e){return m(p(e))}function v(e){let r=i[e];return r?[...new Set([...r.frontier,...r.balanced,...r.fast])]:[]}function R(e){return i[e]?.balanced[0]??null}function x(e,r){let g=e.split(".").map(Number),c=r.split(".").map(Number);for(let a of[0,1,2]){let l=g[a]??0,d=c[a]??0;if(l<d)return-1;if(l>d)return 1}return 0}var i,s,n,y,k,M,A=f(()=>{"use strict";i={claude:{frontier:["opus","sonnet","haiku"],balanced:["sonnet","haiku","opus"],fast:["haiku","sonnet","opus"]},gemini:{frontier:["3.1-pro","2.5-pro","2.5-flash","2.0-flash"],balanced:["2.5-flash","3.1-pro","2.5-pro","2.0-flash"],fast:["2.0-flash","2.5-flash","2.5-pro","3.1-pro"]},openai:{frontier:["gpt-5.5","o3","gpt-4.1","gpt-4o"],balanced:["gpt-4.1","gpt-5.5","gpt-4o","gpt-4.1-mini"],fast:["gpt-4.1-mini","gpt-4o-mini","gpt-4o","gpt-4.1"]},codex:{frontier:["gpt-5.5","o3","gpt-4.1","gpt-4o"],balanced:["gpt-4.1","gpt-5.5","gpt-4o","gpt-4.1-mini"],fast:["gpt-4.1-mini","gpt-4o-mini","gpt-4o","gpt-4.1"]},xai:{frontier:["grok-4","grok-3","grok-2","grok-2-mini"],balanced:["grok-3","grok-4","grok-2","grok-2-mini"],fast:["grok-2-mini","grok-2","grok-3","grok-4"]},grok:{frontier:["grok-4","grok-3","grok-2","grok-2-mini"],balanced:["grok-3","grok-4","grok-2","grok-2-mini"],fast:["grok-2-mini","grok-2","grok-3","grok-4"]},kimi:{frontier:["kimi-k2","kimi-latest","moonshot-v1-128k"],balanced:["kimi-latest","moonshot-v1-128k","moonshot-v1-32k"],fast:["moonshot-v1-32k","moonshot-v1-128k","kimi-latest"]},opencode:{frontier:[],balanced:[],fast:[]},cline:{frontier:[],balanced:[],fast:[]},aider:{frontier:[],balanced:[],fast:[]}},s={implementer:"frontier",orchestrator:"fast","strategic-review":"balanced","architecture-review":"balanced","design-review":"balanced","spec-review":"balanced",review:"balanced",security:"balanced",investigate:"balanced",reviewer:"balanced"};t(p,"capabilityClassForRole");n=i.claude;t(u,"effortForClass");t(m,"policyForClass");t(h,"getAgentModelPolicy");y=Object.fromEntries(Object.keys(s).map(e=>[e,h(e)])),k={opus:n.frontier,sonnet:n.balanced,haiku:n.fast},M=o.object({provider:o.string(),model:o.string(),cliVersion:o.string().optional(),recordedAt:o.string()});t(v,"getSupportedModels");t(R,"getDefaultModel");t(x,"compareSemver")});export{h as a,M as b,v as c,R as d,x as e,A as f};
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __pathDirname } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __pathDirname(__filename);
8
+ import{a as h}from"./chunk-AUUWQH3S.mjs";import{d as c,g as l}from"./chunk-HDHVBB6Q.mjs";import{b as a,e as f,g as d,h as g}from"./chunk-AKIN5WSQ.mjs";import{a as r}from"./chunk-E66B27AL.mjs";import m from"node:crypto";g();f();l();function v(s){let[e,t]=s.split(".");return e?{entityType:e.endsWith("s")?e:`${e}s`,eventType:t==="deleted"||t==="archived"||t==="removed"?"delete":"upsert"}:{}}r(v,"deriveEntityShape");function T(s){if(!s||typeof s!="object")return;let e=s;for(let t of["taskId","task_id","id","feature_id","featureId","specId","spec_id"]){let n=e[t];if(typeof n=="string"&&n.length>0)return n}}r(T,"entityIdOf");function w(s){let e=s&&typeof s=="object"&&!Array.isArray(s)?JSON.stringify(k(s)):JSON.stringify(s);return m.createHash("sha256").update(e).digest("hex")}r(w,"hashPayload");function k(s){let e={};for(let t of Object.keys(s).sort())e[t]=s[t];return e}r(k,"sortKeys");var u={value:null};async function b(){if(u.value)return u.value;try{let{default:s}=await import("./auth-config-WNUARXTJ.mjs"),e=s;if(typeof e.getDeviceId=="function"){let t=await e.getDeviceId();return u.value=t,t}return"unknown-device"}catch{return"unknown-device"}}r(b,"_resolveDeviceId");var y=class{static{r(this,"StorageManager")}filename;cache;constructor(e,t){this.filename=e,this.cache=new d({ttl:5e3,maxSize:50})}getStoreKey(){return this.filename.replace(".json","")}async read(e){if(!(process.env.PRJCT_IN_DAEMON==="1")){let n=this.cache.get(e);if(n!==null)return n}try{let n=c.getDoc(e,this.getStoreKey());if(n!==null)return this.cache.set(e,n),n}catch{}return this.getDefault()}async write(e,t){c.setDoc(e,this.getStoreKey(),t),this.cache.set(e,t)}async update(e,t){let n=this.getStoreKey(),i=c.updateDoc(e,n,t,()=>this.getDefault());return this.cache.set(e,i),i}async publishEvent(e,t,n){let i=v(t),o={type:t,path:[this.filename.replace(".json","")],data:n,timestamp:a(),projectId:e,entityType:i.entityType,entityId:T(n),eventType:i.eventType,contentHash:w(n),deviceId:await b(),revisionCount:1};await h.publish(o)}async publishEntityEvent(e,t,n,i){let o=`${t}.${n}`,p={...i,timestamp:a()};await this.publishEvent(e,o,p)}async exists(e){try{return c.hasDoc(e,this.getStoreKey())}catch{return!1}}clearCache(e){e?this.cache.delete(e):this.cache.clear()}getCacheStats(){return this.cache.stats()}};export{y as a};
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __pathDirname } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __pathDirname(__filename);
8
+ import{a as E}from"./chunk-HJ4HEI45.mjs";import{a as m,b as l,c as y}from"./chunk-3LG3ACQV.mjs";import{d as s,g as v}from"./chunk-HDHVBB6Q.mjs";import{b as u,c as p,e as S}from"./chunk-AKIN5WSQ.mjs";import{a as d}from"./chunk-E66B27AL.mjs";import{z as t}from"zod";var T=t.enum(["low","medium","high"]),R=t.enum(["pending","converted","completed","archived","dormant"]),I=t.enum(["high","medium","low"]),P=t.object({impact:I,effort:I}),f=t.object({frontend:t.string().optional(),backend:t.string().optional(),payments:t.string().optional(),ai:t.string().optional(),deploy:t.string().optional(),other:t.array(t.string()).optional()}),A=t.object({name:t.string(),description:t.string()}),D=t.object({name:t.string(),description:t.string().optional()}),O=t.object({id:t.string(),text:t.string(),details:t.string().optional(),priority:T,status:R,tags:t.array(t.string()),addedAt:t.string(),completedAt:t.string().optional(),convertedTo:t.string().optional(),source:t.string().optional(),sourceFiles:t.array(t.string()).optional(),painPoints:t.array(t.string()).optional(),solutions:t.array(t.string()).optional(),filesAffected:t.array(t.string()).optional(),impactEffort:P.optional(),implementationNotes:t.string().optional(),stack:f.optional(),modules:t.array(A).optional(),roles:t.array(D).optional(),risks:t.array(t.string()).optional(),risksCount:t.number().optional()}),h=t.object({ideas:t.array(O),lastUpdated:t.string()});S();v();function o(n){let e=(()=>{if(!n.tags)return[];try{let i=JSON.parse(n.tags);return Array.isArray(i)?i:[]}catch{return[]}})(),r={...(()=>{if(!n.data)return{};try{return JSON.parse(n.data)}catch{return{}}})(),id:n.id,text:n.text,status:n.status,priority:n.priority,tags:e,addedAt:n.added_at};return n.converted_to!=null&&(r.convertedTo=n.converted_to),n.details!=null&&(r.details=n.details),r}d(o,"rowToIdea");var g=class extends E{static{d(this,"IdeasStorage")}constructor(){super("ideas.json",h)}getDefault(){return{ideas:[],lastUpdated:""}}getEventType(e){return`ideas.${e}d`}async getAll(e){return s.query(e,"SELECT * FROM ideas ORDER BY added_at DESC").map(o)}async getPending(e){return s.query(e,"SELECT * FROM ideas WHERE status = 'pending' ORDER BY added_at DESC").map(o)}async addIdea(e,a,r={}){let i={id:m(),text:a,status:"pending",priority:r.priority||"medium",tags:r.tags||[],addedAt:u()};return s.run(e,`INSERT INTO ideas (id, text, status, priority, tags, added_at, converted_to, details, data)
9
+ VALUES (?, ?, ?, ?, ?, ?, NULL, NULL, NULL)`,i.id,i.text,i.status,i.priority,i.tags.length?JSON.stringify(i.tags):null,i.addedAt),await this.publishEvent(e,"idea.created",{ideaId:i.id,text:i.text,priority:i.priority}),i}async upsertIdea(e,a){s.run(e,`INSERT INTO ideas (id, text, status, priority, tags, added_at)
10
+ VALUES (?, ?, ?, ?, NULL, ?)
11
+ ON CONFLICT(id) DO UPDATE SET
12
+ text = excluded.text,
13
+ status = excluded.status,
14
+ priority = excluded.priority`,a.id,a.text,a.status,a.priority,a.addedAt)}async getById(e,a){let r=s.get(e,"SELECT * FROM ideas WHERE id = ?",a);return r?o(r):void 0}async convertToFeature(e,a,r){s.run(e,"UPDATE ideas SET status = 'converted', converted_to = ? WHERE id = ?",r,a),await this.publishEvent(e,"idea.converted",{ideaId:a,featureId:r})}async archive(e,a){s.run(e,"UPDATE ideas SET status = 'archived' WHERE id = ?",a),await this.publishEvent(e,"idea.archived",{ideaId:a})}async setPriority(e,a,r){s.run(e,"UPDATE ideas SET priority = ? WHERE id = ?",r,a)}async addTags(e,a,r){let i=await this.getById(e,a);if(!i)return;let c=[...new Set([...i.tags,...r])];s.run(e,"UPDATE ideas SET tags = ? WHERE id = ?",c.length?JSON.stringify(c):null,a)}async removeIdea(e,a){s.run(e,"DELETE FROM ideas WHERE id = ?",a)}async getCounts(e){let a=s.query(e,"SELECT status, COUNT(*) AS c FROM ideas GROUP BY status"),r=new Map(a.map(i=>[i.status,i.c]));return{pending:r.get("pending")??0,converted:r.get("converted")??0,archived:r.get("archived")??0}}async cleanup(e){return{removed:s.run(e,`DELETE FROM ideas WHERE status = 'archived' AND id NOT IN (
15
+ SELECT id FROM ideas WHERE status = 'archived' ORDER BY added_at DESC LIMIT 50
16
+ )`).changes}}async markDormantIdeas(e){let a=p(l.IDEA_DORMANT_DAYS).toISOString(),r=s.query(e,"SELECT * FROM ideas WHERE status = 'pending' AND added_at < ?",a).map(o);return r.length===0?0:(y.archiveMany(e,r.map(i=>({entityType:"idea",entityId:i.id,entityData:i,summary:i.text,reason:"dormant"}))),s.run(e,"UPDATE ideas SET status = 'dormant' WHERE status = 'pending' AND added_at < ?",a),await this.publishEvent(e,"ideas.dormant",{count:r.length}),r.length)}},M=new g;export{M as a};
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __pathDirname } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __pathDirname(__filename);
8
+ import{a as x,b as h}from"./chunk-M3ZOJVPA.mjs";import{a as M,h as I}from"./chunk-DXQMKW2B.mjs";import{e as b}from"./chunk-DGQYQSUK.mjs";import{a as S}from"./chunk-RRWPDRYR.mjs";import{a as l,b as D}from"./chunk-HDHVBB6Q.mjs";import{b as R}from"./chunk-GCKILEXJ.mjs";import{a as c}from"./chunk-E66B27AL.mjs";D();var F=.92,v=.18;function d(e){let r=new Map,n=[];for(let s of e){r.set(l(s.content),s.id);let o=x(s.content);n.push(Float64Array.from(o))}return{entries:e,fingerprints:r,vectors:n}}c(d,"buildReferenceIndex");function g(e,r,n){if(!r||r.entries.length===0)return{excess:1,maxSim:0,nearestId:null,exactDup:!1,nearDup:!1};let s=l(e),o=r.fingerprints.get(s);if(o&&o!==n)return{excess:0,maxSim:1,nearestId:o,exactDup:!0,nearDup:!0};let f=x(e),a=r.entries.reduce((t,m,_)=>{if(n&&m.id===n)return t;let E=h(f,r.vectors[_]);return E>t.maxSim?{maxSim:E,nearestId:m.id}:t},{maxSim:0,nearestId:null}),i=Math.max(0,Math.min(1,a.maxSim)),u=a.nearestId,p=i>=F;return{excess:p?0:Math.max(0,Math.min(1,1-i)),maxSim:i,nearestId:u,exactDup:!1,nearDup:p}}c(g,"excessAgainstIndex");function L(e,r,n){return g(e,d(r),n)}c(L,"computeExcess");var $=new Set(["decision","gotcha","learning","fact","feedback","pattern","anti-pattern","identity","voice","glossary","framework","spec","context"]),k=150,N={declared:3,extracted:2,ambiguous:1,inferred:0};function T(e){return e.tags?.context_schema==="living-v2"||e.tags?.synthesis==="model-authored"||e.tags?.synthesis==="deterministic"||e.tags?.source==="land-auto"||e.tags?.capture==="land-v2"}c(T,"isLivingV2");function w(e){return!(!R(e)||e.content.trim().length<40||!$.has(e.type)||e.type==="context"&&!T(e)||e.type==="inbox"||e.type==="todo"||e.type==="idea")}c(w,"isReferenceEligible");function A(e){let r=N[e.provenance]??1,n=e.type==="decision"||e.type==="gotcha"?100:e.type==="learning"||e.type==="fact"?50:e.type==="context"?30:20,s=Date.parse(e.rememberedAt),o=Number.isFinite(s)?s/1e13:0;return n*10+r*3+o}c(A,"referenceRank");function C(e){let r=e.filter(w);return r.sort((n,s)=>A(s)-A(n)),r.slice(0,k)}c(C,"buildReferenceModel");var P=new Set(["decision","gotcha","red-herring","learning","fact","feedback","pattern","anti-pattern","identity","voice","glossary","framework","spec","shipped"]),j=.28;function Q(e,r,n,s){let o=n.trim();if(o.length===0)return{accept:!1,reason:"empty content"};let f=M(o,r);if(f.junk)return{accept:!1,reason:`junk capture: ${f.reason}`};let a=I(o,r,{force:s?.force==="true"||s?.["precision:force"]==="true"});if(a.action==="refuse")return{accept:!1,reason:`precision: ${a.reason}`};if(a.action==="demote")return{accept:!1,reason:`precision demote\u2192${a.demoteTo??"context"}: ${a.reason}`};let i=b(s?.source);if(P.has(r)&&!i)return{accept:!0,reason:"judgment type \u2014 always accept novel content"};let u=(()=>{try{return S.allEntriesForIndex(e)}catch{return null}})();if(!u)return{accept:!0,reason:"gate skipped (read failure)"};if(u.length===0)return{accept:!0,reason:"empty vault \u2014 seed accepted"};let p=C(u);if(p.length===0)return{accept:!0,reason:"empty reference \u2014 accept"};let y=d(p),t=g(o,y),m=i?j:v;return t.exactDup||t.nearDup||t.excess<m?{accept:!1,reason:t.exactDup?`redundant exact match of ${t.nearestId}`:i?`auto-source low excess ${t.excess.toFixed(2)} (floor ${m}) vs R nearest ${t.nearestId}`:`low excess ${t.excess.toFixed(2)} vs reference (nearest ${t.nearestId}, sim ${t.maxSim.toFixed(2)})`,excess:t.excess,nearestId:t.nearestId}:{accept:!0,reason:i?`auto-source excess ${t.excess.toFixed(2)} above floor`:`excess ${t.excess.toFixed(2)} above capture floor`,excess:t.excess,nearestId:t.nearestId}}c(Q,"captureGate");export{k as a,w as b,C as c,F as d,v as e,d as f,g,L as h,Q as i};
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __pathDirname } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __pathDirname(__filename);
8
+ import{b as w,c as te,d as ne}from"./chunk-JQE2F2RK.mjs";import{a as D,b as ee}from"./chunk-WUHGODSQ.mjs";import{g as S,n as A}from"./chunk-SVZHJZ5T.mjs";import{b as R,o as Z}from"./chunk-CTWZQ7YI.mjs";import{a as O,e as h,f as N}from"./chunk-BUDZL4DW.mjs";import{a as i,b as k}from"./chunk-E66B27AL.mjs";ne();ee();N();import{constants as me}from"node:fs";import g from"node:fs/promises";import y from"node:os";import a from"node:path";te();import d from"node:fs/promises";import T from"node:path";N();A();import m from"node:fs";import re from"node:fs/promises";import M from"node:os";import u from"node:path";var _="mcp-remote@0.1.38";var E="prjct: agentic harness with project memory, workflow gates, intent briefs, and performance context. Use prjct_task_start as the MCP entrypoint for a work cycle; prjct retrieves focused context, persists evidence stations, and keeps humans in the loop for risky gates. Agents resume from prjct_task_status/workflow output, create or link reviewed intent/spec briefs when required, and persist synthesized learning instead of raw transcript fragments.";function se(){let e=oe();if(e)return e;if(process.env.PRJCT_MCP_ALLOW_LOCAL==="1"){let t=ie();if(t)return{command:t,args:["mcp-server"],description:E}}return{command:"npx",args:["-y","prjct-cli@latest","mcp-server"],description:E}}i(se,"getPrjctMcpConfig");function I(e){let t=e.replace(/\\/g,"/");return!!(t.includes("/.worktrees/")||t.includes("/prjct-cli/bin/prjct")&&!t.includes("/node_modules/prjct-cli/"))}i(I,"isNonProductionPrjctPath");function oe(){let e=[];try{e.push(u.dirname(k.resolve("prjct-cli/package.json")))}catch{}let t=M.homedir();for(let n of[process.env.NVM_BIN?u.resolve(process.env.NVM_BIN,".."):"",u.join(t,".nvm","versions","node",process.version,"lib"),"/opt/homebrew/lib","/usr/local/lib"].filter(Boolean))e.push(u.join(n,"node_modules","prjct-cli"));for(let n of e){if(I(n))continue;let r=u.join(n,"bin","prjct.cjs"),o=m.existsSync(u.join(n,"dist","bin","prjct.mjs"))||m.existsSync(u.join(n,"dist","bin","prjct-core.mjs"));if(!m.existsSync(r)||!o)continue;let c=[process.execPath,u.join(u.dirname(process.execPath),"node"),u.join(n,"..","..","bin","node")].find(P=>P&&m.existsSync(P)),p=u.resolve(n,"..","..","..","bin","node"),f=m.existsSync(p)?p:c??process.execPath;return{command:f,args:[r,"mcp-server"],env:{PATH:`${u.dirname(f)}${u.delimiter}/usr/bin${u.delimiter}/bin`},description:E}}return null}i(oe,"resolvePublishedPrjctMcpConfig");function ie(){let e=process.argv[1],t=[e?u.resolve(u.dirname(e),"prjct"):"",e?u.resolve(u.dirname(e),"..","bin","prjct"):"",u.resolve(process.cwd(),"bin","prjct")].filter(Boolean);for(let n of t){if(!m.existsSync(n))continue;let r=(()=>{try{return m.realpathSync(n)}catch{return n}})();if(!I(r))return r}return null}i(ie,"resolveLocalPrjctBin");var v={context7:{command:"npx",args:["-y","@upstash/context7-mcp@latest"],description:"Library documentation lookup"},prjct:se(),linear:{command:"npx",args:["-y",_,"https://mcp.linear.app/mcp"],description:"Linear MCP server (OAuth)"},jira:{command:"npx",args:["-y",_,"https://mcp.atlassian.com/v1/mcp"],description:"Atlassian MCP server for Jira (OAuth)"}};function j(){return process.env.PRJCT_TEST_MODE==="1"?u.join(M.tmpdir(),"prjct-context7-test","mcp.json"):u.join(M.homedir(),".claude","mcp.json")}i(j,"getClaudeMcpConfigPath");async function V(e=j()){try{let t=await re.readFile(e,"utf-8");return JSON.parse(t)}catch(t){let n=h(t).toLowerCase();if(n.includes("no such file")||n.includes("enoent"))return{};throw new Error(`Failed to read MCP config at ${e}: ${h(t)}`)}}i(V,"readMcpConfig");async function ce(e,t=j()){await S(t,e)}i(ce,"writeMcpConfig");async function Re(e,t,n=j()){let r=await V(n),o={...r.mcpServers||{}},s=o[e];o[e]=t,r.mcpServers=o;let c=JSON.stringify(s)!==JSON.stringify(t);return await ce(r,n),{path:n,changed:c}}i(Re,"upsertMcpServer");async function Oe(e,t=j()){return!!(await V(t)).mcpServers?.[e]}i(Oe,"hasMcpServer");var $="# prjct:mcp:start - managed by prjct, do not edit between markers",L="# prjct:mcp:end",F="# prjct:mcp:context7:start - managed by prjct, do not edit between markers",J="# prjct:mcp:context7:end",B=["model-with-reasoning","current-dir","git-branch","context-remaining","five-hour-limit","weekly-limit","task-progress"];function x(){return process.env.PRJCT_TEST_MODE==="1"?T.join(w(".prjct-tests"),"codex","config.toml"):w(".codex","config.toml")}i(x,"getCodexConfigTomlPath");function C(e){return`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}i(C,"tomlString");function X(e,t,n,r){let o=(t.args??[]).map(C).join(", "),s=[n,`[mcp_servers.${e}]`,`command = ${C(t.command)}`,`args = [${o}]`];if(t.env&&Object.keys(t.env).length>0){let c=Object.entries(t.env).map(([p,f])=>`${p} = ${C(f)}`).join(", ");s.push(`env = { ${c} }`)}return s.push(r,""),s.join(`
9
+ `)}i(X,"buildMcpTomlBlock");function ae(e=v.prjct){return X("prjct",e,$,L)}i(ae,"buildPrjctMcpTomlBlock");function ue(e=v.context7){return X("context7",e,F,J)}i(ue,"buildContext7McpTomlBlock");function H(e,t,n,r,o){let s=e.indexOf(n),c=e.indexOf(r);if(s!==-1&&c!==-1&&c>s){let p=e.slice(0,s),f=e.slice(c+r.length),P=f.startsWith(`
10
+ `)?f.slice(1):f;return{next:p+t+P}}return new RegExp(`^\\s*\\[mcp_servers\\.${o}\\]`,"m").test(e)?{next:e,skipped:"user-managed"}:e.trim().length>0?{next:`${e.trimEnd()}
11
+
12
+ ${t}`}:{next:t}}i(H,"upsertMarkedBlock");function pe(){return["[tui]",`status_line = [${B.map(C).join(", ")}]`,""].join(`
13
+ `)}i(pe,"buildCodexStatusLineToml");function fe(e){return/^\s*(?:tui\.)?status_line\s*=/m.test(e)}i(fe,"hasCodexStatusLine");function le(e){if(fe(e))return{toml:e,changed:!1};let n=`status_line = [${B.map(C).join(", ")}]
14
+ `,r=/^\s*\[tui\]\s*$/m.exec(e);if(r){let s=r.index+r[0].length,c=e.slice(0,s),p=e.slice(s),f=p.startsWith(`
15
+ `)?p.slice(1):p;return{toml:`${c}
16
+ ${n}${f}`,changed:!0}}let o=pe();return{toml:e.trim().length>0?`${e.trimEnd()}
17
+
18
+ ${o}`:o,changed:!0}}i(le,"ensureCodexStatusLineToml");async function Le(e=x()){let t=await d.readFile(e,"utf-8").catch(()=>""),n=ae(),r=H(t,n,$,L,"prjct"),o=r.skipped,s=le(r.next),c=s.toml;return c===t?{path:e,changed:!1,skipped:o}:(await d.mkdir(T.dirname(e),{recursive:!0}),await d.writeFile(e,c,"utf-8"),{path:e,changed:!0,skipped:o,statusLineChanged:s.changed})}i(Le,"ensureCodexMcpServer");async function K(e=x()){let t=await d.readFile(e,"utf-8").catch(()=>""),n=ue(),{next:r,skipped:o}=H(t,n,F,J,"context7");return r===t?{path:e,changed:!1,skipped:o}:(await d.mkdir(T.dirname(e),{recursive:!0}),await d.writeFile(e,r,"utf-8"),{path:e,changed:!0,skipped:o})}i(K,"ensureCodexContext7Server");async function U(e=x()){try{let t=await d.readFile(e,"utf-8");return/^\s*\[mcp_servers\.context7\]/m.test(t)}catch{return!1}}i(U,"codexHasContext7Server");Z();A();function z(){return process.env.NODE_ENV==="test"?a.join(y.tmpdir(),"prjct-context7-test","verify-cache.json"):a.join(D(),"state","context7-verify.json")}i(z,"getVerifyCachePath");async function de(){try{let e=await g.readFile(z(),"utf-8"),t=JSON.parse(e);if(typeof t?.at=="number"&&t.status)return{...t,provider:t.provider??"claude"}}catch{}return null}i(de,"readPersistedVerify");async function ge(e,t,n){let r=z();try{await g.mkdir(a.dirname(r),{recursive:!0}),await g.writeFile(r,JSON.stringify({at:e,provider:t,status:n}),"utf-8")}catch{}}i(ge,"writePersistedVerify");var Q=v.context7,l={value:null},he=[a.dirname(process.execPath),"/opt/homebrew/bin","/usr/local/bin","/opt/local/bin","/usr/bin","/bin"],ve=[[".bun","bin"],[".local","bin"],[".volta","bin"],[".asdf","shims"],[".local","share","mise","shims"],[".rtx","shims"],[".npm-global","bin"]];async function W(e){try{return(await g.readdir(e,{withFileTypes:!0})).filter(n=>n.isDirectory()).map(n=>n.name)}catch{return[]}}i(W,"listChildDirs");async function Ce(e){let t=[],n=process.env.NVM_DIR||a.join(e,".nvm"),r=a.join(n,"versions","node");for(let c of await W(r))t.push(a.join(r,c,"bin"));let o=process.env.FNM_DIR||a.join(e,".local","share","fnm"),s=a.join(o,"node-versions");for(let c of await W(s))t.push(a.join(s,c,"installation","bin"));return t}i(Ce,"discoverNodeManagerBinDirs");async function xe(e=process.env.PATH||"",t=y.homedir()){let n=new Set,r=[],o=ve.map(c=>a.join(t,...c)),s=[...he,...o,...process.env.NVM_BIN?[process.env.NVM_BIN]:[],...process.env.VOLTA_HOME?[a.join(process.env.VOLTA_HOME,"bin")]:[],...process.env.ASDF_DIR?[a.join(process.env.ASDF_DIR,"shims")]:[],...process.env.MISE_DATA_DIR?[a.join(process.env.MISE_DATA_DIR,"shims")]:[],...await Ce(t)];for(let c of[...e.split(a.delimiter),...s]){let p=c.trim();!p||n.has(p)||(n.add(p),r.push(p))}return r.join(a.delimiter)}i(xe,"buildContext7SmokePath");async function Pe(e,t){if(a.isAbsolute(e)||e.includes(a.sep))return e;let n=process.platform==="win32"?(process.env.PATHEXT||".EXE;.CMD;.BAT;.COM").split(";").filter(Boolean):[""];for(let r of t.split(a.delimiter))if(r)for(let o of n){let s=a.join(r,e+o);try{return await g.access(s,me.X_OK),s}catch{}}return e}i(Pe,"resolveExecutable");function G(){return process.env.PRJCT_CONTEXT7_CONFIG?process.env.PRJCT_CONTEXT7_CONFIG:process.env.NODE_ENV==="test"?a.join(y.tmpdir(),"prjct-context7-test","mcp.json"):a.join(y.homedir(),".claude","mcp.json")}i(G,"getConfigPath");async function Y(e){try{let t=await g.readFile(e,"utf-8");return JSON.parse(t)}catch(t){if(O(t))return{};throw t}}i(Y,"readConfig");async function Se(){if(process.env.PRJCT_SKIP_CONTEXT7_SMOKE==="1"||process.env.NODE_ENV==="test")return;let e=Q,t=[...e.args||[],"--help"],n=await xe(),r=await Pe(e.command||"npx",n);await R(r,t,{timeout:15e3,env:{...process.env,PATH:n}})}i(Se,"runSmokeCheck");var b=class{static{i(this,"Context7Service")}async install(t="claude"){if(t==="codex")return this.installCodex();if(t!=="claude")return{installed:!1,verified:!1,configPath:"",message:`Context7 auto-config not supported for ${t}; skipping`};let n=G(),r=a.dirname(n);await g.mkdir(r,{recursive:!0});let o=await Y(n),s=o.mcpServers||{},c=Q,p=s.context7;return p&&JSON.stringify(p)===JSON.stringify(c)?{installed:!0,verified:!1,configPath:n,message:"Context7 MCP already configured"}:(s.context7=c,o.mcpServers=s,await S(n,o),l.value=null,{installed:!0,verified:!1,configPath:n,message:"Context7 MCP configured"})}async installCodex(){let t=await K();return t.changed&&(l.value=null),{installed:!0,verified:!1,configPath:t.path,message:t.skipped==="user-managed"?"Context7 MCP user-managed in config.toml":"Context7 MCP configured in config.toml"}}async resolveConfigured(t){if(t==="codex"){let c=x();return await U(c)?{ok:!0,configPath:c}:{ok:!1,configPath:c,message:"Context7 MCP not configured in ~/.codex/config.toml"}}if(t!=="claude")return{ok:!1,configPath:"",message:`Context7 not managed for ${t}`};let n=G(),s=((await Y(n)).mcpServers||{}).context7;return!s?.command||!Array.isArray(s.args)||s.args.length===0?{ok:!1,configPath:n,message:"Context7 MCP not configured in ~/.claude/mcp.json"}:{ok:!0,configPath:n}}async verify(t="claude"){let n=Date.now();if(l.value&&l.value.provider===t&&n-l.value.at<3e5)return l.value.status;let r=await de();if(r?.status.verified&&r.provider===t&&n-r.at<3e5)return l.value=r,r.status;let o=await this.resolveConfigured(t);if(!o.ok)return{installed:!1,verified:!1,configPath:o.configPath,message:o.message};try{await Se();let s={installed:!0,verified:!0,configPath:o.configPath};return l.value={at:n,provider:t,status:s},await ge(n,t,s),s}catch(s){let c={installed:!0,verified:!1,configPath:o.configPath,message:`Context7 smoke check failed: ${h(s)}`};return l.value={at:n,provider:t,status:c},c}}async ensureReady(t="claude"){await this.install(t);let n=await this.verify(t);if(!n.verified){let r=n.message||"Context7 MCP is required but not ready. Run `prjct start` to repair configuration.";throw new Error(r)}return n}},je=new b,Ze=je;export{v as a,j as b,Re as c,Oe as d,Le as e,K as f,z as g,xe as h,Ze as i};
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __pathDirname } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __pathDirname(__filename);
8
+ import{a as o,c as e}from"./chunk-E66B27AL.mjs";import s from"node:os";import t from"node:path";function n(){let r=process.env.HOME?.trim()||process.env.USERPROFILE?.trim();return r?t.resolve(r):s.homedir()}function c(...r){return t.join(n(),...r)}var i=e(()=>{"use strict";o(n,"resolveUserHome");o(c,"resolveUserPath")});var p=e(()=>{"use strict"});export{n as a,c as b,i as c,p as d};
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __pathDirname } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __pathDirname(__filename);
8
+ import{a as o}from"./chunk-E66B27AL.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===`
9
+ `&&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,13 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __pathDirname } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __pathDirname(__filename);
8
+ import{a as f}from"./chunk-GAOQHD5S.mjs";import{a as i}from"./chunk-E66B27AL.mjs";import{readSync as k}from"node:fs";import{isatty as y}from"node:tty";var O=new Set(["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse"]);function c(e,t){return{hookSpecificOutput:{hookEventName:e,permissionDecision:"deny",permissionDecisionReason:m(t)}}}i(c,"buildDenyOutput");function S(){let e=(process.env.PRJCT_HOOK_HOST??"claude").toLowerCase();return e==="gemini"||e==="codex"||e==="cursor"?e:"claude"}i(S,"currentHookHost");function a(e,t=S()){return t==="claude"||t==="codex"||!e||Object.keys(e).length===0?e:t==="gemini"?w(e):t==="cursor"?b(e):e}i(a,"adaptHookOutputForHost");function w(e){let t=e;if(t.hookSpecificOutput?.permissionDecision==="deny")return{decision:"deny",reason:t.hookSpecificOutput.permissionDecisionReason??"blocked by prjct"};let o=e,n=o.hookSpecificOutput;return n?.additionalContext?{hookSpecificOutput:{hookEventName:x(n.hookEventName),additionalContext:n.additionalContext}}:o.systemMessage?{systemMessage:o.systemMessage}:e}i(w,"adaptForGemini");function b(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 o=e,n=o.hookSpecificOutput;return n?.additionalContext?{hookSpecificOutput:{hookEventName:D(n.hookEventName),additionalContext:n.additionalContext,additional_context:n.additionalContext},additional_context:n.additionalContext}:o.systemMessage?{systemMessage:o.systemMessage}:e}i(b,"adaptForCursor");function x(e){switch(e){case"UserPromptSubmit":return"BeforeAgent";case"PreToolUse":return"BeforeTool";case"PostToolUse":return"AfterTool";case"Stop":return"AfterAgent";default:return e}}i(x,"mapClaudeEventToGemini");function D(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)}}i(D,"mapClaudeEventToCursor");function p(){if(y(0))return{};try{process.stdin.fd}catch{}let e=Date.now()+200,t=new Int32Array(new SharedArrayBuffer(4)),o=Buffer.alloc(65536),n=[];for(;;)try{let r=k(0,o,0,o.length,null);if(r===0)break;n.push(Buffer.from(o.subarray(0,r)))}catch(r){if(r.code==="EAGAIN"&&Date.now()<e){Atomics.wait(t,0,0,1);continue}break}try{let r=Buffer.concat(n).toString("utf-8").trim();return r?JSON.parse(r):{}}catch{return{}}}i(p,"readStdinSafe");function u(e){let t=a(e);process.stdout.write(`${JSON.stringify(t)}
9
+ `)}i(u,"emit");function E(){u({})}i(E,"emitEmpty");async function l(e){try{await e()}catch{E()}}i(l,"safeRun");var v=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 P(e,t=8){let o=f(e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1 $2")).toLowerCase(),n=new Set,r=[];for(let s of o.split(/[^\p{L}\p{N}]+/u))if(!(s.length<3)&&!v.has(s)&&!n.has(s)&&(n.add(s),r.push(s),r.length>=t))break;return r}i(P,"extractKeywords");function m(e){return e.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g,"\uFFFD")}i(m,"stripLoneSurrogates");function C(e,t,o=`
10
+ \u2026 [truncated]`){if(e.length<=t)return e;let n=Math.max(0,t-o.length),r=e.charCodeAt(n-1),s=r>=55296&&r<=56319?n-1:n;return e.slice(0,Math.max(0,s))+o}i(C,"safeTruncate");function d(e,t){if(!t)return{};let o=m(t);return O.has(e)?{hookSpecificOutput:{hookEventName:e,additionalContext:o}}:{systemMessage:o}}i(d,"buildHookOutput");async function I(e,t){let o=e.projectPath??process.cwd();if(t){try{let n=t.input;if(t.afterEmitOnly){e.afterEmit&&t.detachAfterEmit(()=>e.afterEmit(n,o));return}let r=e.decide?await e.decide(n,o):null;if(r){let h=a(c(e.event,r.deny));t.sink(`${JSON.stringify(h)}
11
+ `);return}let s=e.build?await e.build(n,o):null,g=a(d(e.event,s));t.sink(`${JSON.stringify(g)}
12
+ `),e.afterEmit&&t.detachAfterEmit(()=>e.afterEmit(n,o))}catch{t.sink(`{}
13
+ `)}return}await l(async()=>{let n=p(),r=e.decide?await e.decide(n,o):null;if(r){u(c(e.event,r.deny));return}let s=e.build?await e.build(n,o):null;u(d(e.event,s)),e.afterEmit&&await e.afterEmit(n,o)})}i(I,"runHook");export{P as a,C as b,I as c};
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __pathDirname } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __pathDirname(__filename);
8
+ import{b as x}from"./chunk-SJ75V4WG.mjs";import{d as M}from"./chunk-A5MUSARI.mjs";import{a as f}from"./chunk-RRWPDRYR.mjs";import{b as C}from"./chunk-AOPJ4Z6O.mjs";import{a as o}from"./chunk-E66B27AL.mjs";var q=new Set(["pattern-detector-auto","pattern-detector-recurring","skill-miss-detector","friction-detector"]);function E(t){if(t.type==="improvement-signal")return!0;let e=t.tags?.source;return e!==void 0&&q.has(e)}o(E,"isSignalEntry");var R=85,S=2;async function K(t,e,n={}){let a=n.threshold??R,d=n.maxIterations??S,i=await import("./retention-D2MVQLOF.mjs").then(({evaluateRetention:s})=>s(e,Date.now()).byId).catch(()=>null),h=o(async(s,c,g,m)=>{if(s>=d||c.score>=a)return{...c,irrelevantRemoved:g,repairEntriesCreated:m};let r=f.allEntriesForIndex(e),p=r.filter(l=>{if(!w(l))return!1;let b=i?.get(l.id);return!(b&&b.verdict==="active"&&b.score>=70)}),u=I(r)?0:1;u>0&&await f.remember(t,{type:"context",content:_(r,c),tags:{context_schema:"living-v2",synthesis:"model-authored",feature:"context-quality-cleanup",key_data:`quality_score=${c.score}; threshold=${a}; irrelevant=${p.length}`,model:"prjct sync context-quality analyzer",token_usage:"0 deterministic sync tokens",source:"sync-context-quality"},provenance:"inferred",projectId:e});let y=[];for(let l of p)f.forget(e,l.id)&&(y.push(l.id),await C({projectId:e,entityType:"memories",entityId:l.id,eventType:"delete",data:{id:l.id,type:l.type,content:l.content,tags:l.tags,reason:"context-quality-cleanup"}}));let $={...k(e,a),iterations:s+1,irrelevantRemoved:g+y.length,repairEntriesCreated:m+u};return p.length===0&&u===0?$:h(s+1,$,g+y.length,m+u)},"repairIteration");return h(0,k(e,a),0,0)}o(K,"repairContextQuality");function k(t,e=R){let n=f.allEntriesForIndex(t),a=n.filter(r=>r.type==="context"),d=a.filter(v),i=a.filter(r=>!v(r)),h=n.filter(w),s=[],c=[];n.length>0&&d.length===0&&(c.push(35),s.push("missing living-v2 context synthesis")),h.length>0&&(c.push(Math.min(40,h.length*8)),s.push(`${h.length} irrelevant generated entries in active context`)),i.length>0&&(c.push(Math.min(20,i.length*5)),s.push(`${i.length} legacy context entries need cleanup`));let g=d[0];if(g){let r=x(g.content),u=[r.contextSynthesis,r.keyData,r.model,r.tokenUsage,r.nextImplication].filter(y=>!y).length;u>0&&(c.push(u*4),s.push("latest living context is missing structured UI/LLM fields"))}let m=Math.max(0,Math.min(100,100-c.reduce((r,p)=>r+p,0)));return{score:m,threshold:e,passed:m>=e,iterations:0,livingContextCount:d.length,legacyContextCount:i.length,irrelevantRemoved:0,repairEntriesCreated:0,issues:s}}o(k,"evaluateContextQuality");function w(t){return E(t)?!0:t.tags?.source==="sync-context-quality"||t.type!=="context"||v(t)?!1:L(t)}o(w,"isIrrelevantGeneratedContext");function v(t){if(t.tags?.context_schema==="living-v2")return!0;let e=x(t.content);return!!(e.contextSynthesis&&e.keyData)}o(v,"isLivingV2Context");function I(t){return t.some(e=>e.type==="context"&&v(e))}o(I,"hasUsableLivingContext");function L(t){let e=t.content.trim();if(e.length<260||/User pushback:|raw quote|transcript|hot file|skill-miss/i.test(e))return!0;let n=x(e);return[n.whatHappened,n.whyItMattered,n.pattern,n.antiPattern,n.outcome,n.nextImplication].filter(Boolean).length<3}o(L,"isLowValueLegacyContext");function _(t,e){let n=t.filter(i=>!w(i)).filter(i=>["decision","gotcha","learning","context","shipped"].includes(i.type)).slice(0,8),a=n.length>0?n.map(i=>`${i.type}:${M(i)}`).join("; "):"No high-quality prior context survived cleanup.";return["Context synthesis: Sync repaired historical low-quality project context by removing generated telemetry and preserving the useful project knowledge as a living-v2 synthesis. Future agents should trust this synthesized layer over old raw detector rows or legacy context snippets.",`Key data: ${[`quality_score=${e.score}`,`threshold=${e.threshold}`,`legacy_context=${e.legacyContextCount}`,`issues=${e.issues.join("|")||"none"}`].join("; ")}`,"What happened: prjct sync detected that active context quality was below the required threshold and generated a replacement synthesis before deleting irrelevant generated entries.","Why it mattered: Existing users had accumulated low-signal context over time; leaving it active makes the second brain noisy for both the UI and LLM retrieval.","Who/author: prjct sync","Model: prjct sync context-quality analyzer","Token usage: 0 deterministic sync tokens","Sentiment: cleanup required because raw generated context had become product debt","Related files: generated from existing project memory during sync","Feature/domain: context-quality-cleanup","Pattern: Keep structured key data for UI representation and synthesized context for humans/LLMs.","Anti-pattern: Surfacing raw detector rows, hot-file counters, or short legacy snippets as durable project knowledge.","Decision/trap: Generated garbage is hard-deleted from active recall/vault/search; user-authored decisions, gotchas, learnings, and facts are preserved.",`Outcome: Repair synthesis created from surviving highlights: ${a}`,"Next implication: If quality remains below threshold, run full sync/analysis and inspect remaining user-authored entries manually instead of deleting them blindly."].join(" \xB7 ")}o(_,"buildRepairContext");export{K as a,w as b};
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __pathDirname } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __pathDirname(__filename);
8
+ import{c as r,g as o}from"./chunk-YKMJI6TF.mjs";import{a as i}from"./chunk-E66B27AL.mjs";var s=8;function g(t,e,n=s){return o(r(t,e,n).files)}i(g,"rankLikelyFiles");function u(t,e){let n=r(t,e,s);return n.files.length===0?null:n.agentBlock||null}i(u,"buildIndexedFileCue");export{g as a,u as b};
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __pathDirname } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __pathDirname(__filename);
8
+ import{c as d}from"./chunk-NLG2EW6M.mjs";import{G as u,R as h,d as m}from"./chunk-6IKHMK2U.mjs";import{g,h as f}from"./chunk-75UJIVMO.mjs";import{b as p,e as C}from"./chunk-AKIN5WSQ.mjs";import{a as s}from"./chunk-E66B27AL.mjs";C();var w='Ship: you MAY suggest when ready, but run `prjct ship` ONLY after the user confirms in text this turn (e.g. "ship", "s\xED publ\xEDcalo"). Never ship on silence, Stop, or green tests alone.';function $(t){return t==="skip"?"none":t==="standard"?"standard":"full"}s($,"qualityFromIntensity");function E(t){return t==="none"?"skip":t==="standard"?"standard":"full"}s(E,"intensityFromQuality");async function R(t,e={}){let{files:n,loc:r}=await(async()=>{try{let o=await f(t);if(o&&(o.files>0||o.loc>0))return{files:o.files,loc:o.loc};let l=await g(t);return{files:l?.files??0,loc:l?.loc??0}}catch{return{files:0,loc:0}}})(),{intensity:i}=m({files:n,loc:r},e);return{intensity:i,files:n,loc:r}}s(R,"resolveWorkIntensity");async function N(t){let e=await R(t.projectPath,t.signals??{}),n=t.forceIntensity??e.intensity,r=$(n),i=d.get(t.projectId);if(r==="none"){let a=u(i,n);return{opened:!1,intensity:n,quality:r,ledger:i,next:a}}if(i&&(i.verdict==="in_progress"||i.verdict==="approved")){let a=u(i,i.intensity);return{opened:!1,intensity:i.intensity,quality:r,ledger:i,next:a}}let o=t.target?.trim()||await L(t.projectPath)||`work-${p().slice(0,10)}`,l=await import("./delivery-geometry-VHCURJ7E.mjs").then(({tierOf:a})=>a({files:e.files,loc:e.loc})).catch(()=>{}),x=await(async()=>{try{let{computeCommittedChangeset:a}=await import("./delivery-geometry-VHCURJ7E.mjs"),c=await a(t.projectPath);if(c?.base){let{execFileAsync:I}=await import("./exec-I7XE7NMD.mjs"),{stdout:v}=await I("git",["diff","--name-only",`${c.base}..HEAD`],{cwd:t.projectPath});return v.split(`
9
+ `).map(k=>k.trim()).filter(Boolean)}return c?.dirs?.length?[...c.dirs]:void 0}catch{return}})(),y=h({target:o,intensity:n,deliveryTier:l,now:p(),scopePaths:x});d.set(t.projectId,y);let j=u(y,n);return{opened:!0,intensity:n,quality:r,ledger:y,next:j}}s(N,"ensureJudgmentLedger");function P(t,e){if(t.intensity==="skip")return null;if(e?.verdict==="approved")return["# prjct: quality ready","",`- Judgment ledger \`${e.id.slice(0,8)}\` \u2192 **APPROVED** (intensity=${e.intensity}).`,"- You MAY suggest: work is ready to ship when they want.",`- ${w}`].join(`
10
+ `);if(t.kind==="skip_ship")return null;let n=["# prjct: quality orchestrator (automatic)","",`- **kind**: \`${t.kind}\` \xB7 intensity **${t.intensity}** \xB7 round ${t.fixRound}/${t.maxFixRounds}`,`- **directive**: ${t.directive}`,"","### Steps (run these \u2014 human does not type judgment)",...t.steps.map((r,i)=>`${i+1}. ${r}`),"",`_${w}_`];return t.judgeCharters&&n.push("","### Charters",`RED: ${t.judgeCharters.red}`,"",`BLUE: ${t.judgeCharters.blue}`),t.rankedFixIds.length&&n.push("",`### Blast rank: ${t.rankedFixIds.join(" \u2192 ")}`),n.join(`
11
+ `)}s(P,"formatQualityInject");function Q(t){let e=d.get(t),n=e?.intensity??"skip";if(!e&&n==="skip")return null;let r=u(e,n==="skip"&&e?e.intensity:n);return e?P(r,e):null}s(Q,"qualityInjectForProject");async function L(t){try{let{getGitBranch:e}=await import("./git-helpers-6JLP2OJZ.mjs");return await e(t)??null}catch{return null}}s(L,"defaultBranchTarget");function q(t){return t!=="skip"}s(q,"shipRequiresQuality");export{w as a,$ as b,E as c,R as d,N as e,P as f,Q as g,q as h};
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __pathDirname } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __pathDirname(__filename);
8
+ import{a as j,b as f,d as x,e as D}from"./chunk-7OZDWT6C.mjs";import{b as A}from"./chunk-YJMWY4Y6.mjs";import{e as C,f as M,g as w,h as E,m as R}from"./chunk-NJAMZSHM.mjs";import{a as b}from"./chunk-RRWPDRYR.mjs";import{a as S,b as J,d as m,g as K}from"./chunk-HDHVBB6Q.mjs";import{a as l}from"./chunk-E66B27AL.mjs";J();import g from"node:fs/promises";import d from"node:path";K();var U=/^(main|index|app|server|cli|handler|router|bootstrap|init|start|run|default)$/i;function I(t){let e=M(t);if(!C(t))return{ready:!1,builtAt:e?.builtAt??null,symbols:0,edges:0,files:0,languages:[],kinds:[],routes:[],hotspots:[],entryCandidates:[],packages:[],note:"No symbol index. Run `prjct sync` or `prjct code reindex`."};let r=w(t),s=new Map,a=new Map,o=new Map,p=[],c=[];for(let i of r){s.set(i.kind,(s.get(i.kind)??0)+1),a.set(i.file,(a.get(i.file)??0)+1);let u=i.file.includes(".")?i.file.slice(i.file.lastIndexOf(".")):"(none)";o.set(u,(o.get(u)??0)+1),i.kind==="route"&&p.push({name:i.name,file:i.file,line:i.startLine}),i.exported&&U.test(i.name)&&(i.kind==="function"||i.kind==="class")&&!/__tests__|\.test\.|\.spec\.|fixtures?\//i.test(i.file)&&c.push({name:i.name,file:i.file,kind:i.kind})}let y=[...a.keys()],h=[],W=R(t),Y=y.length>400?y.slice(0,400):y;for(let i of Y){let u=W.get(i)??0;u>0&&h.push({file:i,fanIn:u,symbolCount:a.get(i)??0})}h.sort((i,u)=>u.fanIn-i.fanIn);let k=new Set,v=A(t);if(v)for(let i of Object.keys(v.forward).slice(0,2e3)){let u=i.includes("/")?i.slice(0,i.indexOf("/")):i;u&&!u.startsWith(".")&&k.add(u)}for(let i of y.slice(0,2e3)){let u=i.includes("/")?i.slice(0,i.indexOf("/")):".";u&&u!=="."&&k.add(u)}if(c.length<8)for(let i of r){if(c.length>=12)break;i.exported&&i.kind==="class"&&!c.some(u=>u.file===i.file)&&c.push({name:i.name,file:i.file,kind:i.kind})}return{ready:!0,builtAt:e?.builtAt??null,symbols:e?.symbolCount??r.length,edges:e?.edgeCount??0,files:e?.fileCount??a.size,languages:[...o.entries()].map(([i,u])=>({ext:i,count:u})).sort((i,u)=>u.count-i.count).slice(0,12),kinds:[...s.entries()].map(([i,u])=>({kind:i,count:u})).sort((i,u)=>u.count-i.count),routes:p.slice(0,30),hotspots:h.slice(0,15),entryCandidates:c.slice(0,15),packages:[...k].sort().slice(0,40),note:"Structural only (symbol + import graphs). Narrative architecture lives in prjct analysis / memory decisions."}}l(I,"buildArchitectureSnapshot");function T(t,e){let n=[];if(!t)return{hasChanges:!0,items:[{field:"Project style",type:"added",after:e.summary}],summary:{added:1,removed:0,changed:0},beforeCommit:null,afterCommit:e.commitHash};let r=t.payload,s=e.payload;r.stack.ecosystem!==s.stack.ecosystem&&n.push({field:"Ecosystem",type:"changed",before:r.stack.ecosystem,after:s.stack.ecosystem}),(r.stack.packageManager??"")!==(s.stack.packageManager??"")&&n.push({field:"Package manager",type:"changed",before:r.stack.packageManager??"(none)",after:s.stack.packageManager??"(none)"}),P("Languages",r.stack.languages,s.stack.languages,n),P("Frameworks",r.stack.frameworks,s.stack.frameworks,n),P("Key libraries",r.stack.keyLibraries,s.stack.keyLibraries,n),r.stack.hasTests!==s.stack.hasTests&&n.push({field:"Has tests",type:"changed",before:String(r.stack.hasTests),after:String(s.stack.hasTests)}),_("Pattern",r.patterns.map(c=>[c.key,c.name]),s.patterns.map(c=>[c.key,c.name]),n),_("Anti-pattern",r.antiPatterns.map(c=>[c.key,c.issue]),s.antiPatterns.map(c=>[c.key,c.issue]),n),_("Convention",r.conventions.map(c=>[c.key,c.rule]),s.conventions.map(c=>[c.key,c.rule]),n),r.structural.symbols!==s.structural.symbols&&(r.structural.symbols>0||s.structural.symbols>0)&&n.push({field:"Symbols",type:"changed",before:String(r.structural.symbols),after:String(s.structural.symbols)}),r.structural.files!==s.structural.files&&n.push({field:"Files",type:"changed",before:String(r.structural.files),after:String(s.structural.files)});let a=n.filter(c=>c.type==="added").length,o=n.filter(c=>c.type==="removed").length,p=n.filter(c=>c.type==="changed").length;return{hasChanges:n.length>0,items:n,summary:{added:a,removed:o,changed:p},beforeCommit:t.commitHash,afterCommit:e.commitHash}}l(T,"generateProjectStyleDiff");function O(t){if(!t.hasChanges)return`## Project evolution
9
+
10
+ No style changes since last sync.`;let e=["## Project evolution (this sync)"];(t.beforeCommit||t.afterCommit)&&e.push(`> \`${L(t.beforeCommit)}\` \u2192 \`${L(t.afterCommit)}\``),e.push(""),e.push(`+${t.summary.added} \xB7 \u2212${t.summary.removed} \xB7 ~${t.summary.changed}`),e.push("");for(let n of t.items.slice(0,20)){let r=n.type==="added"?"+":n.type==="removed"?"\u2212":"~";n.type==="changed"?e.push(`- ${r} **${n.field}**: ${n.before} \u2192 ${n.after}`):n.type==="added"?e.push(`- ${r} **${n.field}**: ${n.after}`):e.push(`- ${r} **${n.field}**: ${n.before}`)}return e.join(`
11
+ `)}l(O,"formatProjectStyleDiffMd");function L(t){return t?t.length>7?t.slice(0,7):t:"(none)"}l(L,"short");function P(t,e,n,r){let s=new Set(e.map(o=>o.toLowerCase())),a=new Set(n.map(o=>o.toLowerCase()));for(let o of n)s.has(o.toLowerCase())||r.push({field:t,type:"added",after:o});for(let o of e)a.has(o.toLowerCase())||r.push({field:t,type:"removed",before:o})}l(P,"diffStringArray");function _(t,e,n,r){let s=new Map(e),a=new Map(n);for(let[o,p]of a)s.has(o)?s.get(o)!==p&&r.push({field:t,type:"changed",before:s.get(o),after:p}):r.push({field:t,type:"added",after:p});for(let[o,p]of s)a.has(o)||r.push({field:t,type:"removed",before:p})}l(_,"diffKeyed");var F=50;function B(t){let e=(()=>{try{return JSON.parse(t.payload_json)}catch{return q()}})();return{id:t.id,capturedAt:t.captured_at,commitHash:t.commit_hash,source:t.source||"sync-mechanical",patternCount:t.pattern_count,antiPatternCount:t.anti_pattern_count,conventionCount:t.convention_count,frameworkCount:t.framework_count,symbolCount:t.symbol_count,fileCount:t.file_count,summary:t.summary,payload:e}}l(B,"rowToSnapshot");function q(){return{payloadVersion:1,stack:{ecosystem:"unknown",languages:[],frameworks:[],keyLibraries:[],hasTests:!1,hasDocker:!1},commands:{},conventions:[],patterns:[],antiPatterns:[],structural:{symbols:0,files:0,packages:[]},metrics:{}}}l(q,"emptyPayload");function H(t){try{let e=m.get(t,"SELECT * FROM project_style_snapshots WHERE is_active = 1 ORDER BY captured_at DESC LIMIT 1");return e?B(e):null}catch{return null}}l(H,"getActiveProjectStyle");function G(t,e=12){try{return m.query(t,"SELECT * FROM project_style_snapshots ORDER BY captured_at DESC LIMIT ?",e).map(B)}catch{return[]}}l(G,"getProjectEvolution");function St(t,e=6){let n=G(t,e);if(n.length===0)return null;let r=["## Project evolution"];if(n.length>=2){let s=n[0],a=n[n.length-1],o=s.patternCount-a.patternCount,p=s.conventionCount-a.conventionCount,c=s.fileCount-a.fileCount;r.push(`Over ${n.length} snapshots: patterns ${$(o)}, conventions ${$(p)}, files ${$(c)}.`)}for(let s of n)r.push(`- ${s.capturedAt.slice(0,10)} \u2014 ${s.summary}`);return r.join(`
12
+ `)}l(St,"renderProjectEvolution");function $(t){return t>=0?`+${t}`:`${t}`}l($,"fmtDelta");function V(t,e){m.transaction(t,n=>{n.prepare("UPDATE project_style_snapshots SET is_active = 0 WHERE is_active = 1").run(),n.prepare(`INSERT INTO project_style_snapshots (
13
+ id, captured_at, commit_hash, source,
14
+ pattern_count, anti_pattern_count, convention_count, framework_count,
15
+ symbol_count, file_count, summary, payload_json, is_active
16
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1)`).run(e.id,e.capturedAt,e.commitHash,e.source,e.patternCount,e.antiPatternCount,e.conventionCount,e.frameworkCount,e.symbolCount,e.fileCount,e.summary,JSON.stringify(e.payload));let r=n.prepare("SELECT id FROM project_style_snapshots ORDER BY captured_at DESC").all();if(r.length>F){let s=r.slice(F),a=n.prepare("DELETE FROM project_style_snapshots WHERE id = ?");for(let o of s)a.run(o.id)}})}l(V,"persistProjectStyleSnapshot");async function bt(t){let e=H(t.projectId),n=Q(t.projectId),r=await tt(t.projectPath),s=X(t.projectId),a=Z(t.projectId),o=x({stats:t.stats,stack:t.stack,commands:t.commands,packageDeps:r.deps,packageManager:r.packageManager,llmAnalysis:n,memoryPatterns:a.patterns,memoryAntiPatterns:a.antiPatterns,memoryConventions:a.conventions,structural:s,commitHash:t.commitHash??null,source:t.source??"sync-mechanical"});o.payload.metrics.styleCoverage=z(o),o.payload.metrics.hasRichAnalysis=f(n)?1:0;let p=T(e,o),c=e===null;(c||p.hasChanges)&&V(t.projectId,o);let y=H(t.projectId)??o;return t.bridgeMemory!==!1&&await nt(t.projectPath,t.projectId,y).catch(()=>{}),await st(t.projectId,y).catch(()=>{}),{snapshot:y,delta:p,isFirst:c}}l(bt,"recomputeProjectStyle");function z(t){let e=(t.payload.stack.ecosystem!=="unknown"?25:0)+(t.payload.stack.frameworks.length>0||t.payload.stack.keyLibraries.length>0?20:0)+(t.payload.stack.hasTests?10:0)+Math.min(25,t.conventionCount*5)+Math.min(15,t.patternCount*3)+Math.min(5,t.antiPatternCount);return Math.min(100,e)}l(z,"computeStyleCoverage");function Q(t){try{let e=j.getActive(t);if(f(e))return e;try{let n=j.getAllFull(t);for(let r of n)if(f(r.analysis))return r.analysis}catch{}return e}catch{return null}}l(Q,"pickBestAnalysis");function X(t){try{let e=I(t);return e.ready?{symbols:e.symbols,files:e.files,packages:e.packages.slice(0,20)}:{symbols:0,files:0,packages:[]}}catch{return{symbols:0,files:0,packages:[]}}}l(X,"loadStructural");function Z(t){let e=[],n=[],r=[];try{let s=b.recall(t,{types:["pattern","anti-pattern","decision"],limit:40});for(let a of s){let o=a.tags?.topic??"";!o.startsWith("style:")&&a.type!=="pattern"&&a.type!=="anti-pattern"||(a.type==="pattern"||o.startsWith("style:pattern:")?e.push({name:a.tags?.name||o.replace(/^style:pattern:/,"")||"pattern",description:a.content.slice(0,400)}):a.type==="anti-pattern"||o.startsWith("style:anti:")?n.push({issue:a.tags?.name||o.replace(/^style:anti:/,"")||"anti-pattern",suggestion:a.content.slice(0,400)}):o.startsWith("style:convention:")&&r.push({rule:a.content.slice(0,400),category:a.tags?.category}))}}catch{}return{patterns:e,antiPatterns:n,conventions:r}}l(Z,"loadMemoryStyle");async function tt(t){try{let e=await g.readFile(d.join(t,"package.json"),"utf-8"),n=JSON.parse(e),r={...n.dependencies??{},...n.devDependencies??{}},s=n.packageManager?n.packageManager.split("@")[0]??null:await(async()=>{let a=[["bun.lockb","bun"],["bun.lock","bun"],["pnpm-lock.yaml","pnpm"],["yarn.lock","yarn"],["package-lock.json","npm"]];for(let[o,p]of a)try{return await g.access(d.join(t,o)),p}catch{}return null})();return{deps:r,packageManager:s}}catch{return{deps:{},packageManager:null}}}l(tt,"readPackageMeta");function et(t){let e=t.payload,n=[...e.conventions.slice(0,25).map(s=>({type:"decision",content:s.rule,tags:{topic:`style:convention:${s.key}`,category:s.category??"convention",source:"project-style"}})),...e.patterns.slice(0,25).map(s=>({type:"pattern",content:`${s.name}: ${s.description}`,tags:{topic:`style:pattern:${s.key}`,name:s.name,source:"project-style",...s.category?{category:s.category}:{}}})),...e.antiPatterns.slice(0,25).map(s=>({type:"anti-pattern",content:`${s.issue}. Suggestion: ${s.suggestion}`,tags:{topic:`style:anti:${s.key}`,name:s.issue,source:"project-style",...s.severity?{severity:s.severity}:{}}}))],r=new Set;return n.filter(s=>{let a=`${s.type}\0${S(s.content)}`;return r.has(a)?!1:(r.add(a),!0)})}l(et,"desiredStyleBridgeEntries");function N(t,e,n){return`${t}\0${e}\0${n}`}l(N,"styleBridgeIdentity");async function nt(t,e,n){let r=et(n);if(r.length===0)return 0;let s=(()=>{try{let o=[...new Set(r.map(y=>y.tags.topic))],p=o.map(()=>"?").join(","),c=m.query(e,`SELECT type, topic_key, content_hash
17
+ FROM memory_entries
18
+ WHERE project_id = ? AND deleted_at IS NULL
19
+ AND topic_key IN (${p})`,e,...o);return new Set(c.map(y=>N(y.type,y.topic_key,y.content_hash)))}catch{return null}})(),a=[];for(let o of r){let p=o.tags.topic,c=N(o.type,p,S(o.content));s?.has(c)||(await b.remember(t,{...o,projectId:e,provenance:"extracted"}),a.push(o))}return a.length}l(nt,"bridgeStyleToMemory");async function st(t,e){let{default:n}=await import("./path-manager-F2HE2GGK.mjs"),r=n.getGlobalProjectPath(t),s=d.join(r,"analysis");await g.mkdir(s,{recursive:!0});let a=e.payload.stack,o={ecosystem:a.ecosystem,frameworks:a.frameworks,hasTests:a.hasTests,technologies:[...a.languages,...a.frameworks,...a.keyLibraries].filter((p,c,y)=>y.indexOf(p)===c),packageManager:a.packageManager??null,updatedAt:e.capturedAt,styleSummary:e.summary};await g.writeFile(d.join(s,"repo-analysis.json"),JSON.stringify(o,null,2),"utf-8")}l(st,"writeRepoAnalysisArtifact");function jt(t){let e=t.delta.hasChanges||t.isFirst?O(t.delta):null,n=D(t.snapshot,{maxConventions:4,maxPatterns:3,maxAnti:2});return{evolutionMd:e,digestMd:n,delta:t.delta}}l(jt,"formatProjectStyleForSync");export{H as a,G as b,St as c,V as d,bt as e,nt as f,jt as g};
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __pathDirname } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __pathDirname(__filename);
8
+ import{b as o,f as c}from"./chunk-HDSS6UB3.mjs";c();import{z as e}from"zod";var u=e.enum(["low","medium","high","critical"]),t=e.enum(["feature","bug","improvement","chore"]),l=e.enum(["active","backlog","previously_active"]),m=e.enum(["H0","H1","H2","H3"]),d=e.enum(["bug","feature","refactor","docs","chore","security","research","unknown"]),g=e.enum(["low","medium","high"]),k=e.enum(["regression-test","focused-tests","docs-if-public-behavior","config-preservation","spec-or-design","edge-cases","scope-check"]),y=e.enum(["verify-before-done","scope-check","review-before-ship","spec-before-implementation"]),b=e.enum(["pending","in_progress","completed","blocked","paused","failed","skipped"]),n=e.object({title:e.string(),description:e.string(),filesChanged:e.array(e.object({path:e.string(),action:e.enum(["created","modified","deleted"])})),whatWasDone:e.array(e.string()).min(1),outputForNextAgent:e.string().min(1),notes:e.string().optional()}),I=e.object({output:e.string().min(1,"Subtask output is required"),summary:n}),r=e.object({id:e.string(),description:e.string(),domain:e.string(),agent:e.string(),status:b,dependsOn:e.array(e.string()),startedAt:e.string().optional(),completedAt:e.string().optional(),output:e.string().optional(),summary:n.optional(),skipReason:e.string().optional(),blockReason:e.string().optional(),estimatedPoints:e.number().optional(),estimatedMinutes:e.number().optional()}),i=e.object({completed:e.number(),total:e.number(),percentage:e.number()}),a=e.object({level:m,kind:d,risk:g,expectedEvidence:e.array(k),scopeHints:e.array(e.string()),gates:e.array(y),rationale:e.string(),createdAt:e.string()}),p=e.object({id:e.string(),description:e.string(),type:t.optional(),startedAt:e.string(),sessionId:e.string(),featureId:e.string().optional(),subtasks:e.array(r).optional(),currentSubtaskIndex:e.number().optional(),subtaskProgress:i.optional(),linearId:e.string().optional(),linearUuid:e.string().optional(),linkedSpecId:e.string().optional(),estimatedPoints:e.number().optional(),estimatedMinutes:e.number().optional(),modelMetadata:o.optional(),tokensIn:e.number().optional(),tokensOut:e.number().optional(),parentDescription:e.string().optional(),branch:e.string().optional(),prUrl:e.string().optional(),harness:a.optional(),turnCount:e.number().optional(),turnLimitAcknowledgedAt:e.string().optional(),ownerAgent:e.string().optional(),ownerIdentity:e.string().optional(),ownerSessionId:e.string().optional(),yieldStatus:e.enum(["active","yielded"]).optional(),pendingHandoffId:e.string().optional()}),s=e.object({id:e.string(),description:e.string(),status:e.literal("paused"),startedAt:e.string(),pausedAt:e.string(),pauseReason:e.string().optional(),type:t.optional(),sessionId:e.string().optional(),featureId:e.string().optional(),subtasks:e.array(r).optional(),currentSubtaskIndex:e.number().optional(),subtaskProgress:i.optional(),linearId:e.string().optional(),linearUuid:e.string().optional(),estimatedPoints:e.number().optional(),estimatedMinutes:e.number().optional(),modelMetadata:o.optional(),tokensIn:e.number().optional(),tokensOut:e.number().optional(),harness:a.optional()}),S=e.object({stackConfirmed:e.array(e.string()).optional(),patternsDiscovered:e.array(e.string()).optional(),agentAccuracy:e.array(e.object({agent:e.string(),rating:e.enum(["helpful","neutral","inaccurate"]),note:e.string().optional()})).optional(),issuesEncountered:e.array(e.string()).optional()}),f=e.object({taskId:e.string(),title:e.string(),classification:t,startedAt:e.string(),completedAt:e.string(),subtaskCount:e.number(),subtaskSummaries:e.array(n),outcome:e.string(),branchName:e.string(),linearId:e.string().optional(),linearUuid:e.string().optional(),prUrl:e.string().optional(),feedback:S.optional(),harness:a.optional(),tokensIn:e.number().optional(),tokensOut:e.number().optional()}),h=p.extend({workspaceId:e.string(),worktreePath:e.string().optional(),agentSessionId:e.string().optional(),jiraId:e.string().optional(),jiraUuid:e.string().optional(),dispatchedFrom:e.string().optional()}),z=e.object({currentTask:p.nullable(),previousTask:s.nullable().optional(),pausedTasks:e.array(s).optional(),taskHistory:e.array(f).optional(),activeTasks:e.array(h).optional(),lastUpdated:e.string()}),x=e.object({id:e.string(),description:e.string(),body:e.string().optional(),priority:u,type:t,featureId:e.string().optional(),originFeature:e.string().optional(),completed:e.boolean(),completedAt:e.string().optional(),createdAt:e.string(),section:l,agent:e.string().optional(),groupName:e.string().optional(),groupId:e.string().optional()}),j=e.object({tasks:e.array(x),lastUpdated:e.string()});export{I as a,z as b,j as c};
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __pathDirname } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __pathDirname(__filename);
8
+ import{a as _}from"./chunk-3LG3ACQV.mjs";import{c as R}from"./chunk-AOPJ4Z6O.mjs";import{e as a,g as m}from"./chunk-HDHVBB6Q.mjs";import{b as g,e as y}from"./chunk-AKIN5WSQ.mjs";import{a as l}from"./chunk-E66B27AL.mjs";import{z as i}from"zod";var S=["draft","reviewed","in_progress","shipped","archived"];var T=i.object({verdict:i.enum(["pass","fail"]),notes:i.string(),ts:i.string(),candidateHash:i.string().optional()}),v=i.object({risk:i.string().min(1),mitigation:i.string().min(1)}),u=i.object({goal:i.string().min(1),eli10:i.string().default(""),stakes:i.string().default(""),acceptance_criteria:i.array(i.string().min(1)).default([]),scope:i.array(i.string()).default([]),out_of_scope:i.array(i.string()).default([]),risks:i.array(v).default([]),test_plan:i.array(i.string()).default([]),reviews:i.record(i.string(),T).optional(),selected_reviewers:i.array(i.string()).default([]),linked_tasks:i.array(i.string()).default([]),notes:i.string().default(""),tasks_created_at:i.string().nullable().default(null),audit_candidate_hash:i.string().nullable().default(null)});y();m();function h(d,e,t){try{a.run(d,"DELETE FROM spec_review WHERE spec_id = ?",e),a.run(d,"DELETE FROM spec_selected_reviewer WHERE spec_id = ?",e);for(let[s,n]of Object.entries(t.reviews??{}))a.run(d,"INSERT INTO spec_review (id, spec_id, lens, verdict, notes, created_at) VALUES (?, ?, ?, ?, ?, ?)",`${e}-rev-${s}`,e,s,n.verdict,n.notes??null,Date.now());for(let s of t.selected_reviewers)a.run(d,"INSERT OR IGNORE INTO spec_selected_reviewer (spec_id, lens) VALUES (?, ?)",e,s)}catch{}}l(h,"projectSpecRelational");var E=class{static{l(this,"SpecStorage")}nextUpdatedAt(e,t){let s=g(),r=a.get(e,"SELECT updated_at FROM specs WHERE id = ?",t)?.updated_at;return!r||s>r?s:new Date(new Date(r).getTime()+1).toISOString()}create(e,t){let s=_(),n=g(),r=u.parse(t.content);a.run(e,`INSERT INTO specs (id, title, status, content, tags, created_at, updated_at)
9
+ VALUES (?, ?, 'draft', ?, ?, ?, ?)`,s,t.title,JSON.stringify(r),t.tags?JSON.stringify(t.tags):null,n,n),h(e,s,r);let p={id:s,title:t.title,status:"draft",content:r,tags:t.tags??{},createdAt:n,updatedAt:n,shippedAt:null,shippedPr:null,shippedSha:null,archivedAt:null};return this.publishSync(e,p),p}get(e,t){let s=a.get(e,"SELECT * FROM specs WHERE id = ?",t);return s?this.rowToSpec(s):null}list(e,t={}){let s=[];t.status&&s.push(t.status);let r=`SELECT * FROM specs WHERE 1=1${t.status?" AND status = ?":t.includeArchived?"":" AND status != 'archived'"} ORDER BY created_at DESC`;return a.query(e,r,...s).map(o=>this.rowToSpec(o))}search(e,t){let s=`%${t}%`;return a.query(e,"SELECT * FROM specs WHERE title LIKE ? OR content LIKE ? ORDER BY created_at DESC",s,s).map(r=>this.rowToSpec(r))}updateContent(e,t,s){let n=u.parse(s),r=this.nextUpdatedAt(e,t);a.run(e,"UPDATE specs SET content = ?, updated_at = ? WHERE id = ?",JSON.stringify(n),r,t),h(e,t,n);let p=this.get(e,t);return p&&this.publishSync(e,p),p}casUpdate(e,t,s,n){let r=u.parse(s),p=this.nextUpdatedAt(e,t),c=a.run(e,"UPDATE specs SET content = ?, updated_at = ? WHERE id = ? AND updated_at = ?",JSON.stringify(r),p,t,n).changes===1;if(c){h(e,t,r);let f=this.get(e,t);f&&this.publishSync(e,f)}return c}setStatus(e,t,s){if(!S.includes(s))throw new Error(`invalid spec status: ${s}`);let n=this.nextUpdatedAt(e,t),r=[],p=[s,n];s==="shipped"&&(r.push("shipped_at = ?"),p.push(n)),s==="archived"&&(r.push("archived_at = ?"),p.push(n));let o=["status = ?","updated_at = ?",...r].join(", ");p.push(t),a.run(e,`UPDATE specs SET ${o} WHERE id = ?`,...p);let c=this.get(e,t);return c&&this.publishSync(e,c),c}setShippedPr(e,t,s){a.run(e,"UPDATE specs SET shipped_pr = ?, updated_at = ? WHERE id = ?",s,this.nextUpdatedAt(e,t),t);let n=this.get(e,t);return n&&this.publishSync(e,n),n}setShippedSha(e,t,s){a.run(e,"UPDATE specs SET shipped_sha = ?, updated_at = ? WHERE id = ?",s,this.nextUpdatedAt(e,t),t);let n=this.get(e,t);return n&&this.publishSync(e,n),n}linkTask(e,t,s){let n=this.get(e,t);if(!n)return null;if(n.content.linked_tasks.includes(s))return n;let r={...n.content,linked_tasks:[...n.content.linked_tasks,s]};return this.updateContent(e,t,r)}delete(e,t){let s=this.get(e,t);return s?(a.run(e,"DELETE FROM specs WHERE id = ?",t),this.publishSync(e,s,"delete"),!0):!1}applyRemote(e,t){if(!t.id)return;let s=typeof t.content=="string"?t.content:JSON.stringify(t.content??{}),n=S.includes(t.status)?t.status:"draft",r=t.tags==null?null:typeof t.tags=="string"?t.tags:JSON.stringify(t.tags),p=g();if(a.run(e,`INSERT INTO specs (id, title, status, content, tags, created_at, updated_at)
10
+ VALUES (?, ?, ?, ?, ?, ?, ?)
11
+ ON CONFLICT(id) DO NOTHING`,t.id,t.title??"",n,s,r,t.created_at||p,t.updated_at||p).changes>0)try{let c=u.parse(JSON.parse(s));h(e,t.id,c)}catch{}}count(e){let t=a.query(e,"SELECT status, COUNT(*) AS n FROM specs GROUP BY status"),s={total:0,draft:0,shipped:0};for(let n of t)s.total+=n.n,n.status==="draft"&&(s.draft=n.n),n.status==="shipped"&&(s.shipped=n.n);return s}publishSync(e,t,s="upsert"){R({projectId:e,entityType:"specs",entityId:t.id,eventType:s,data:{id:t.id,title:t.title,status:t.status,content:t.content,tags:t.tags,created_at:t.createdAt,updated_at:t.updatedAt,shipped_at:t.shippedAt,shipped_pr:t.shippedPr,shipped_sha:t.shippedSha,archived_at:t.archivedAt}})}rowToSpec(e){return{id:e.id,title:e.title,status:S.includes(e.status)?e.status:"draft",content:u.parse(JSON.parse(e.content)),tags:e.tags?JSON.parse(e.tags):{},createdAt:e.created_at,updatedAt:e.updated_at,shippedAt:e.shipped_at,shippedPr:e.shipped_pr,shippedSha:e.shipped_sha,archivedAt:e.archived_at}}},x=new E;export{u as a,x as b};
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __pathDirname } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __pathDirname(__filename);
8
+ import{a as f}from"./chunk-Y5NQV46G.mjs";import{a as v}from"./chunk-RRWPDRYR.mjs";import{e as p,g as I}from"./chunk-HDHVBB6Q.mjs";import{a as R,b as q}from"./chunk-WUHGODSQ.mjs";import{b as H,o as F}from"./chunk-CTWZQ7YI.mjs";import{b as x}from"./chunk-GCKILEXJ.mjs";import{a as s}from"./chunk-E66B27AL.mjs";I();var U="https://api.openai.com/v1";function M(r,e){return/openrouter\.ai/i.test(e)&&r&&!r.includes("/")?`openai/${r}`:r}s(M,"normalizeModelForBaseUrl");var G="embeddings.provider",V="embeddings.baseUrl",$="embeddings.model",Y="embeddings.authHeader",j="embeddings.authScheme",z="embeddings.headers",W="embeddings.query";function J(r){if(!(typeof r!="string"||!r.trim()))try{let e=JSON.parse(r);if(e&&typeof e=="object"&&!Array.isArray(e)){let n={};for(let[t,i]of Object.entries(e))n[t]=String(i);return Object.keys(n).length?n:void 0}}catch{}}s(J,"parseHeaders");function w(){let r=f(G),e=f($);if(r!=="openai-compatible"||!e)return null;let n=f(j),t=f(Y),i=f(W),o=String(f(V)??U);return{provider:"openai-compatible",baseUrl:o,model:M(String(e),o),authHeader:t!=null?String(t):void 0,authScheme:n!=null?String(n):void 0,extraHeaders:J(f(z)),query:i!=null?String(i):void 0}}s(w,"resolveGlobalEmbeddings");q();F();import X from"node:fs";import Q from"node:path";var D="PRJCT_EMBEDDINGS_API_KEY",Z="prjct-embeddings",ee="prjct";function re(){return Q.join(R(),"config","embeddings.key")}s(re,"keyFilePath");var S={value:void 0};function ne(){return process.platform==="darwin"}s(ne,"isDarwin");async function te(){try{let{stdout:r}=await H("security",["find-generic-password","-a",ee,"-s",Z,"-w"]);return r.trim()||null}catch{return null}}s(te,"readKeychain");function ie(){try{return X.readFileSync(re(),"utf-8").trim()||null}catch{return null}}s(ie,"readFileKey");async function k(){if(S.value!==void 0)return S.value;let r=process.env[D]?.trim();if(r)return S.value=r,r;let e=(ne()?await te():null)??ie();return S.value=e,e}s(k,"getEmbeddingsKey");function oe(r){let e=r?.embeddings;return!e||!e.provider||!e.model?null:e.provider==="openai-compatible"?new _(e.baseUrl??"https://api.openai.com/v1",e.model,{authHeader:e.authHeader,authScheme:e.authScheme,extraHeaders:e.headers,query:e.query}):null}s(oe,"resolveProvider");function se(r,e,n,t,i={}){let o=r.replace(/\/+$/,""),a=i.query?.trim().replace(/^\?/,""),u=`${o}/embeddings${a?`?${a}`:""}`,l=M(e,o),g={"content-type":"application/json",...i.extraHeaders??{}};if(t){let b=i.authHeader?.trim()||"authorization",m=i.authScheme??"Bearer";g[b]=m?`${m} ${t}`:t}return{url:u,init:{method:"POST",headers:g,body:JSON.stringify({model:l,input:n})}}}s(se,"buildEmbeddingsRequest");var _=class{constructor(e,n,t={}){this.baseUrl=e;this.model=n;this.auth=t}baseUrl;model;auth;static{s(this,"HttpEmbeddingProvider")}async embed(e){if(e.length===0)return[];let n=await k(),{url:t,init:i}=se(this.baseUrl,this.model,e,n,this.auth),o=await fetch(t,i);if(!o.ok)throw new Error(`embeddings endpoint ${o.status}: ${await o.text().catch(()=>"")}`);return((await o.json()).data??[]).map(u=>u.embedding)}},de="local-subword-v1",N=256,ae=800;function ce(r){return r.split("").reduce((n,t)=>Math.imul(n^t.charCodeAt(0),16777619),2166136261)>>>0}s(ce,"fnv1a");function ue(r,e,n){let t=[];if(r.length<e)return t.push(r),t;for(let i of Array.from({length:n-e+1},(o,a)=>e+a))t.push(...Array.from({length:Math.max(0,r.length-i+1)},(o,a)=>r.slice(a,a+i)));return t}s(ue,"charNGrams");function P(r){let e=new Float64Array(N),n=(r.toLowerCase().match(/[\p{L}\p{N}]+/gu)??[]).slice(0,ae);for(let i of n){let o=ue(`<${i}>`,3,5);o.push(i);for(let a of o){let u=ce(a),l=u%N,g=u&65536?1:-1;e[l]+=g}}let t=Math.sqrt(e.reduce((i,o)=>i+o*o,0))||1;return Array.from(e,i=>i/t)}s(P,"embedLocal");function Oe(r){return P(r)}s(Oe,"embedLocalText");var L=class{static{s(this,"LocalSubwordEmbeddingProvider")}model=de;isLocal=!0;async embed(e){return e.map(n=>P(n))}};function O(r){let e=oe(r);if(e)return e;let n=w();return n?new _(n.baseUrl,n.model,{authHeader:n.authHeader,authScheme:n.authScheme,extraHeaders:n.extraHeaders,query:n.query}):new L}s(O,"resolveActiveProvider");function me(r){return Buffer.from(new Float32Array(r).buffer)}s(me,"packVector");function le(r){let e=Uint8Array.from(r);return new Float32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4))}s(le,"unpackVector");function Ce(r,e){let n=E(r)*E(e);return n===0?0:T(r,e)/n}s(Ce,"cosineSimilarity");function E(r){let e=Array.from({length:r.length},(n,t)=>r[t]).reduce((n,t)=>n+t*t,0);return Math.sqrt(e)}s(E,"l2Norm");function T(r,e){let n=Math.min(r.length,e.length);return Array.from({length:n},(t,i)=>r[i]*e[i]).reduce((t,i)=>t+i,0)}s(T,"dot");var ge=2e3,fe=10,C=new Map,Pe={isEnabled(r){return!0},store(r,e,n,t,i){p.run(r,`INSERT INTO memory_embeddings (memory_id, vector, model, dims, norm, created_at)
9
+ VALUES (?, ?, ?, ?, ?, ?)
10
+ ON CONFLICT(memory_id) DO UPDATE SET
11
+ vector = excluded.vector, model = excluded.model,
12
+ dims = excluded.dims, norm = excluded.norm, created_at = excluded.created_at`,e,me(n),t,n.length,E(n),i)},embeddedIds(r,e){try{let n=p.query(r,"SELECT memory_id FROM memory_embeddings WHERE model = ?",e);return new Set(n.map(t=>t.memory_id))}catch{return new Set}},async backfill(r,e,n,t={}){let i=t.provider??O(e),o=t.batchSize??64,a=await(async()=>{try{let{evaluateRetention:d}=await import("./retention-D2MVQLOF.mjs");return d(r,Date.now()).byId}catch{return null}})(),u=v.unembeddedEntriesForIndex(r,i.model).filter(d=>{if(!x(d)||d.content.trim().length===0)return!1;let c=a?.get(d.id);return!(c&&c.verdict!=="active")});if(this.shouldPruneThisRun(r)){let c=v.allEntriesForIndex(r).filter(h=>{if(!x(h))return!0;let y=a?.get(h.id);return y!=null&&y.verdict!=="active"}).map(h=>h.id);this.pruneNonModelVectors(r,c)}let l=this.countByModel(r,i.model),g=Array.from({length:Math.ceil(u.length/o)},(d,c)=>u.slice(c*o,(c+1)*o)),b=[];for(let d of g)try{let c=await i.embed(d.map(y=>y.content)),h=d.reduce((y,B,K)=>{let A=c[K];return!A||A.length===0?y:(this.store(r,B.id,A,i.model,n),y+1)},0);b.push(h)}catch{}return{embedded:b.reduce((d,c)=>d+c,0),skipped:l,total:l+u.length}},countByModel(r,e){try{return p.get(r,"SELECT COUNT(*) AS n FROM memory_embeddings WHERE model = ?",e)?.n??0}catch{return 0}},shouldPruneThisRun(r){let e=C.get(r)??0;return C.set(r,(e+1)%fe),e===0},pruneNonModelVectors(r,e){if(e.length!==0)try{let n=e.map(()=>"?").join(",");p.run(r,`DELETE FROM memory_embeddings WHERE memory_id IN (${n})`,...e)}catch{}},async semanticSearch(r,e,n,t=10,i){let o=i??O(n);if(!e.trim())return[];let a=await(async()=>{try{return(await o.embed([e]))[0]}catch{return}})();if(!a||a.length===0)return[];let u=(()=>{try{return p.query(r,`SELECT memory_id, vector, norm FROM memory_embeddings
13
+ WHERE model = ? ORDER BY rowid DESC LIMIT ?`,o.model,ge)}catch{return null}})();if(!u)return[];let l=E(a);if(l===0)return[];let g=u.map(m=>{let d=le(m.vector),c=l*(m.norm??E(d));return{id:m.memory_id,score:c===0?0:T(a,d)/c}}).sort((m,d)=>d.score-m.score).slice(0,t),b=[];for(let m of g){let d=v.getById(r,m.id);d&&b.push(d)}return b}};export{Oe as a,Ce as b,Pe as c};
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __pathDirname } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __pathDirname(__filename);
8
+ import{d as a,g as h}from"./chunk-HDHVBB6Q.mjs";import{b as u,o as l}from"./chunk-CTWZQ7YI.mjs";import{a as e}from"./chunk-E66B27AL.mjs";h();l();function d(n){let t=n.toLowerCase();return t.includes("github")?"github":t.includes("gitlab")?"gitlab":t.includes("bitbucket")?"bitbucket":"other"}e(d,"providerForHost");function p(n){let t=n.trim();if(!t)return{};let r=t.match(/^[^/@]+@([^:/]+):(.+?)(?:\.git)?\/?$/);if(r)return{provider:d(r[1]),repoSlug:r[2]};try{let o=new URL(t),c=o.pathname.replace(/^\/+/,"").replace(/\.git$/,"").replace(/\/+$/,"");return!o.host||!c?{}:{provider:d(o.host),repoSlug:c}}catch{return{}}}e(p,"parseRemote");async function y(n){try{let{stdout:t}=await u("git",["remote","get-url","origin"],{cwd:n});return t.trim()||void 0}catch{return}}e(y,"gitRemoteUrl");async function b(n){try{let{stdout:t}=await u("git",["symbolic-ref","--short","refs/remotes/origin/HEAD"],{cwd:n});return t.trim().replace(/^origin\//,"")||void 0}catch{return}}e(b,"gitDefaultBranch");function i(n){return typeof n=="string"&&n.length>0?n:void 0}e(i,"str");function g(n){return typeof n=="number"&&Number.isFinite(n)?n:void 0}e(g,"num");function P(n){return Object.fromEntries(Object.entries(n).filter(([,t])=>t!==void 0))}e(P,"compact");async function S(n){let t=a.getDoc(n,"project")||{},r=i(t.repoPath),{provider:o,repoSlug:c}=r?p(await y(r)||""):{},f=r?await b(r):void 0,s=Array.isArray(t.techStack)?t.techStack.filter(m=>typeof m=="string"):void 0;return P({provider:o,repoSlug:c,currentBranch:i(t.currentBranch),defaultBranch:f,stack:i(t.stack),techStack:s&&s.length>0?s:void 0,version:i(t.version),commitCount:g(t.commitCount),fileCount:g(t.fileCount),lastCommit:i(t.lastSyncCommit),hasUncommitted:typeof t.hasUncommittedChanges=="boolean"?t.hasUncommittedChanges:void 0,cliVersion:i(t.cliVersion),syncedAt:i(t.lastSync)})}e(S,"buildProjectMeta");export{p as a,S as b};
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __pathDirname } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __pathDirname(__filename);
8
+ import{a as l,b as c}from"./chunk-KEJ5RMAI.mjs";import{a as o}from"./chunk-E66B27AL.mjs";var p=[{intent:"review",patterns:[/\b(?:address|apply|handle|resolve|respond\s+to)\s+(?:the\s+)?(?:pr\s+)?review(?:\s+(?:feedback|comments?))?\b/i,/\breview\s+(?:feedback|comments?)\b/i]},{intent:"ci-watch",patterns:[/\b(?:watch|monitor|babysit|follow)\s+(?:the\s+)?(?:ci|checks?|builds?)\b/i,/\bci\s+(?:watch|status|checks?)\b/i]},{intent:"pr",patterns:[/\b(?:open|create|file|prepare|draft|update|write)\s+(?:an?\s+)?(?:pull\s+request|pr)\b/i,/\b(?:pull\s+request|pr)\s+(?:title|description)\b/i]},{intent:"merge",patterns:[/\b(?:merge|merging|squash-merge)\b/i]}];function d(i){for(let t of p)if(t.patterns.some(e=>e.test(i)))return t.intent;return null}o(d,"classifyDeliveryIntent");function h(i){let t=d(i);if(!t)return null;let e='- Keep the original goal/spec as the scope boundary; discovered work becomes `prjct capture "<work>" --fromCurrent`.',a={pr:['- Use a human outcome title. Bad: "Refactor websocket transport". Good: "Cut websocket payload size by 70%".',"- Problem/why first, then solution; omit implementation inventories."],review:["- Apply feedback only when it serves the original goal/spec; explain and capture out-of-scope requests separately."],"ci-watch":["- Watch to a terminal result; distinguish a repository failure from an infrastructure flake before changing code or retrying."],merge:["- Merge only with required checks green and current human approval; never bypass protections."]};return[`# prjct: delivery guidance (${t})`,e,...a[t]].join(`
9
+ `)}o(h,"buildDeliveryGuidance");var f="prjct: denied broad process termination. Identify the exact numeric PID, verify the target, then use `kill <PID>` or `kill -TERM <PID>`.",m=/[$`]/;function u(i){for(let t of l(i)){let e=c(t),a=e[0];if(a===void 0)continue;if(m.test(a))return!0;let s=a.split("/").at(-1)?.toLowerCase();if(s==="killall"||s==="pkill")return!0;if((s==="sh"||s==="bash"||s==="zsh")&&e.some(r=>/^-[^-]*c/.test(r))){let r=e.findIndex(n=>/^-[^-]*c/.test(n))+1;if(r>0&&u(e[r]??""))return!0}if(s==="xargs"){let r=o(n=>n.split("/").at(-1)?.toLowerCase(),"nestedName");if(e.some(n=>r(n)==="killall"||r(n)==="pkill")||e.some(n=>r(n)==="kill"))return!0}}return!1}o(u,"classifyBroadProcessTermination");function g(i){return u(i)?f:null}o(g,"broadProcessTerminationDenial");export{d as a,h as b,g as c};
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __pathDirname } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __pathDirname(__filename);
8
+ import{a as e}from"./chunk-E66B27AL.mjs";var t={code:{name:"code",version:"1.1.0",description:"Coding work: features, bugs, refactors, TDD, shipping.",suggestedPersona:{role:"DEV",mcps:["github"]},memoryTypes:["fact","decision","learning","gotcha","pattern","anti-pattern","shipped"],workflowSlots:{ship:{description:"Publish finished work \u2014 tests, commit, push, PR."},review:{description:"Pre-commit or pre-PR review pass."}},hookSignals:[],suggestedTags:{domain:["auth","api","frontend","infra","data"]},configDefaults:{sdd:"advisory",tdd:"assist",maxTurnsPerCycle:25,deliveryGeometry:"advisory",land:"strict",conflictMode:"advisory"}},"code-strict":{name:"code-strict",version:"1.1.0",description:"Ship-grade coding: SDD+TDD strict, delivery-geometry gate, forced land. Opt-in.",suggestedPersona:{role:"DEV",mcps:["github"]},memoryTypes:["fact","decision","learning","gotcha","pattern","anti-pattern","shipped"],workflowSlots:{ship:{description:"Publish finished work \u2014 tests, commit, push, PR."},review:{description:"Pre-commit or pre-PR review pass."}},hookSignals:[],configDefaults:{sdd:"strict",tdd:"strict",maxTurnsPerCycle:25,deliveryGeometry:"strict",land:"strict",conflictMode:"strict"}},daily:{name:"daily",version:"1.0.0",description:"Day-to-day capture + review. GTD-style inbox + weekly review.",memoryTypes:["inbox","todo","idea"],workflowSlots:{morning:{description:"Morning briefing \u2014 pull open todos + upcoming commitments."},clarify:{description:"Reclassify inbox entries to real memory types."},review:{description:"Weekly/biweekly review across memory."}},hookSignals:[]},pm:{name:"pm",version:"1.0.0",description:"Product Management: specs, user interviews, roadmap, backlog triage.",suggestedPersona:{role:"PM",mcps:["linear","posthog"]},memoryTypes:["insight","question","stakeholder","decision","source"],workflowSlots:{spec:{description:"Draft a technical/product spec from captured insights."},triage:{description:"Review Linear backlog and prioritize."},interview:{description:"User interview pre-brief + post-synthesis."}},hookSignals:[{event:"UserPromptSubmit",ifMatches:"spec|requirements?|prd",inject:["type=insight","type=question"]}],suggestedTags:{audience:["team","stakeholders"],quarter:["q1","q2","q3","q4"]}},founder:{name:"founder",version:"1.0.0",description:"Founder ops: strategy, fundraising, hiring, stakeholder comms.",suggestedPersona:{role:"Founder",mcps:["gmail","linear","posthog"]},memoryTypes:["goal","okr","person","stakeholder","decision","shipped"],workflowSlots:{"investor-update":{description:"Monthly investor update draft."},"1on1":{description:"1:1 prep + synthesis."},strategy:{description:"Strategy checkpoint \u2014 OKR progress + pivots."}},hookSignals:[{event:"UserPromptSubmit",ifMatches:"investor|board|update|fundrais",inject:["type=okr","type=shipped","type=stakeholder"]}],suggestedTags:{audience:["board","investors","team"]}},lean:{name:"lean",version:"1.0.0",description:"Anti-over-engineering: minimal-code review, debt ledger, intensity modes.",memoryTypes:["over-engineering","lean-debt"],workflowSlots:{review:{description:"Flag over-engineering in the current diff."},audit:{description:"Repo-wide over-engineering assessment."},debt:{description:"Harvest deferred-simplification (lean:) markers."}},hookSignals:[{event:"UserPromptSubmit",ifMatches:"simplif|over-?engineer|yagni|too complex|leaner",inject:["type=over-engineering","type=lean-debt"]}],suggestedTags:{intensity:["lite","full","ultra"]}},research:{name:"research",version:"1.0.0",description:"Research: deep-dives, literature review, competitive scans.",suggestedPersona:{role:"Research",mcps:["web"]},memoryTypes:["source","claim","question","insight"],workflowSlots:{"lit-review":{description:"Literature review across captured sources."},analyze:{description:"Data analysis run via MCP, persist findings."}},hookSignals:[],suggestedTags:{confidence:["high","medium","low"]}}},r=Object.keys(t);function s(i){return t[i]??null}e(s,"getPackManifest");export{t as a,r as b,s as c};
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __pathDirname } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __pathDirname(__filename);
8
+ import{e as x,g as te}from"./chunk-HDHVBB6Q.mjs";import{a as B,c as Q,d as W,e as $,n as ee}from"./chunk-SVZHJZ5T.mjs";import{a as m}from"./chunk-E66B27AL.mjs";Q();te();ee();import N from"node:fs/promises";import w from"node:path";var D="symbol-graph",ne=new Set([".ts",".tsx",".js",".jsx",".mjs",".cjs",".py",".go",".rs",".java"]),se=new Set(["if","for","while","switch","catch","function","class","return","typeof","new","throw","await","void","super","this","import","require","console","Math","JSON","Object","Array","Promise","Map","Set","Date","Error","Buffer","process","describe","it","test","expect","beforeEach","afterEach","beforeAll","afterAll"]),re=new Set(["if","for","while","switch","catch","return","await","typeof","new","throw","else","case","from","import","export","class","function","const","let","var","get","set","constructor","async","static","public","private","protected","readonly","abstract","extends","implements","interface","type","enum","default","as","of","in","do","try","finally","yield","with"]);function C(e,s){return e.slice(0,Math.min(s,e.length)).split(`
9
+ `).length}m(C,"lineOf");function oe(e,s,t,n){return`${e}#${s}:${t}@${n}`}m(oe,"symbolId");function U(e,s){return`${e.replace(/\.[^.]+$/,"").replace(/[/\\]/g,".")}.${s}`}m(U,"qnameOf");function I(e){let s=w.extname(e).toLowerCase();return ne.has(s)}m(I,"isSourceFile");function O(e){let s=/\/\/[^\n]*(?:\n|$)|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$)|'(?:\\[\s\S]|[^'\\])*(?:'|$)|"(?:\\[\s\S]|[^"\\])*(?:"|$)|`(?:\\[\s\S]|[^`\\])*(?:`|$)/g;return e.replace(s,t=>t.replace(/[^\n]/g," "))}m(O,"stripNoise");function j(e){return{filePath:e,symbols:[],callNames:[],calls:[],importBindings:new Map,resolvedImports:new Map}}m(j,"emptyExtract");function H(e){let s=[...new Set(e.map(t=>t.name))];return{calls:e,callNames:s}}m(H,"finalizeCalls");function ie(e,s){let t=[],n=[],a=new Map,i=O(e),r=[{re:/export\s+(?:async\s+)?function\s+(\w+)/g,kind:"function",nameIdx:1,exported:!0},{re:/(?:^|[^\w.])(?:async\s+)?function\s+(\w+)/g,kind:"function",nameIdx:1},{re:/export\s+(?:const|let|var)\s+(\w+)\s*=\s*(?:async\s*)?(?:\([^)]*\)|[A-Za-z_]\w*)\s*=>/g,kind:"function",nameIdx:1,exported:!0},{re:/(?:^|[\n;])(?:const|let|var)\s+(\w+)\s*=\s*(?:async\s*)?(?:\([^)]*\)|[A-Za-z_]\w*)\s*=>/g,kind:"function",nameIdx:1},{re:/export\s+(?:abstract\s+)?class\s+(\w+)/g,kind:"class",nameIdx:1,exported:!0},{re:/(?:^|[^\w.])(?:abstract\s+)?class\s+(\w+)/g,kind:"class",nameIdx:1},{re:/export\s+interface\s+(\w+)/g,kind:"interface",nameIdx:1,exported:!0},{re:/(?:^|[^\w.])interface\s+(\w+)/g,kind:"interface",nameIdx:1},{re:/export\s+type\s+(\w+)\s*[=<]/g,kind:"type",nameIdx:1,exported:!0},{re:/(?:^|[^\w.])type\s+(\w+)\s*[=<]/g,kind:"type",nameIdx:1},{re:/export\s+enum\s+(\w+)/g,kind:"enum",nameIdx:1,exported:!0},{re:/(?:^|[^\w.])enum\s+(\w+)/g,kind:"enum",nameIdx:1},{re:/export\s+(?:const|let|var)\s+(\w+)\s*[:=]/g,kind:"const",nameIdx:1,exported:!0},{re:/(?:^|\n)[ \t]+(?:(?:public|private|protected|static|async|readonly)\s+)*(\w+)\s*\([^)]{0,200}\)\s*[:{]/g,kind:"method",nameIdx:1}],o=new Set;for(let{re:d,kind:y,nameIdx:h,exported:L}of r){d.lastIndex=0;for(let M of i.matchAll(d)){let S=M[h];if(!S||S.length<2||re.has(S))continue;let b=C(i,M.index),T=`${y}:${S}@${b}`;o.has(T)||(o.add(T),t.push({kind:y,name:S,startLine:b,endLine:null,exported:L===!0}))}}let l=/import\s+(?:type\s+)?(?:\{([^}]+)\}|(\w+)(?:\s*,\s*\{([^}]+)\})?|\*\s+as\s+(\w+))\s+from\s+['"]([^'"]+)['"]/g;for(let d of e.matchAll(l)){let y=d[5],h=m(L=>{if(L)for(let M of L.split(",")){let S=M.trim().replace(/^type\s+/,"").split(/\s+as\s+/),b=(S[1]??S[0])?.trim();b&&/^[A-Za-z_][\w]*$/.test(b)&&a.set(b,y)}},"bindNamed");h(d[1]),h(d[3]),d[2]&&a.set(d[2],y),d[4]&&a.set(d[4],y)}let c=/(?:const|let|var)\s+(\w+)\s*=\s*require\s*\(\s*['"]([^'"]+)['"]\s*\)/g;for(let d of e.matchAll(c))a.set(d[1],d[2]);let f=/\b([A-Za-z_][\w]*)\s*\(/g,p=400;for(let d of i.matchAll(f)){let y=d[1];if(se.has(y)||y.length<2)continue;let h=C(i,d.index);if(n.push({name:y,line:h}),n.length>=p)break}let g=/\.(?:get|post|put|patch|delete|options|head|all)\s*\(\s*['"`](\/[^'"`]*)['"`]/gi;for(let d of e.matchAll(g)){let h=d[1].replace(/[^\w/.-]/g,"").slice(0,64)||"route";t.push({kind:"route",name:h,startLine:C(e,d.index),endLine:null,exported:!0})}let E=/@(?:app|router|api|bp)\.(?:get|post|put|patch|delete|options|head|api_route)\s*\(\s*['"`](\/[^'"`]*)['"`]/gi;for(let d of e.matchAll(E)){let h=d[1].replace(/[^\w/.-]/g,"").slice(0,64)||"route";t.push({kind:"route",name:h,startLine:C(e,d.index),endLine:null,exported:!0})}if(/(?:^|\/)route\.(ts|js|tsx|jsx)$/.test(s.replace(/\\/g,"/"))){let d=/\bexport\s+(?:async\s+)?function\s+(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)\b/g;for(let y of e.matchAll(d))t.push({kind:"route",name:`${y[1]} ${s.replace(/\\/g,"/")}`,startLine:C(e,y.index),endLine:null,exported:!0})}let u=H(n);return{filePath:s,symbols:t,callNames:u.callNames,calls:u.calls,importBindings:a,resolvedImports:new Map}}m(ie,"extractTsJs");function ae(e,s){let t=[],n=[],a=O(e),i=/^(?:async\s+)?def\s+(\w+)\s*\(/gm,r=/^class\s+(\w+)/gm;for(let c of a.matchAll(i))t.push({kind:"function",name:c[1],startLine:C(a,c.index),endLine:null,exported:!c[1].startsWith("_")});for(let c of a.matchAll(r))t.push({kind:"class",name:c[1],startLine:C(a,c.index),endLine:null,exported:!c[1].startsWith("_")});let o=/\b([A-Za-z_][\w]*)\s*\(/g;for(let c of a.matchAll(o)){let f=c[1];/^(if|for|while|return|print|len|range|str|int|list|dict|set|super|self)$/.test(f)||n.push({name:f,line:C(a,c.index)})}let l=H(n);return{filePath:s,symbols:t,callNames:l.callNames,calls:l.calls,importBindings:new Map,resolvedImports:new Map}}m(ae,"extractPython");function le(e,s){let t=[],n=O(e),a=/^func\s+(?:\([^)]+\)\s+)?(\w+)\s*\(/gm,i=/^type\s+(\w+)\s+(?:struct|interface)/gm;for(let r of n.matchAll(a)){let o=r[1];t.push({kind:"function",name:o,startLine:C(n,r.index),endLine:null,exported:o[0]===o[0].toUpperCase()})}for(let r of n.matchAll(i))t.push({kind:"type",name:r[1],startLine:C(n,r.index),endLine:null,exported:r[1][0]===r[1][0].toUpperCase()});return{filePath:s,symbols:t,callNames:[],calls:[],importBindings:new Map,resolvedImports:new Map}}m(le,"extractGo");function ce(e,s){let t=[],n=O(e),a=/^(?:pub\s+)?(?:async\s+)?fn\s+(\w+)/gm,i=/^(?:pub\s+)?struct\s+(\w+)/gm,r=/^(?:pub\s+)?trait\s+(\w+)/gm,o=/^(?:pub\s+)?enum\s+(\w+)/gm;for(let[l,c]of[[a,"function"],[i,"class"],[r,"interface"],[o,"enum"]])for(let f of n.matchAll(l))t.push({kind:c,name:f[1],startLine:C(n,f.index),endLine:null,exported:/^pub\b/.test(f[0])});return{filePath:s,symbols:t,callNames:[],calls:[],importBindings:new Map,resolvedImports:new Map}}m(ce,"extractRust");function de(e,s){let t=[],n=O(e),a=/(?:public\s+|private\s+|protected\s+)?(?:abstract\s+|final\s+)?class\s+(\w+)/g,i=/(?:public\s+)?interface\s+(\w+)/g,r=/(?:public|private|protected)\s+(?:static\s+)?(?:final\s+)?[\w.<>,[\]\s]+\s+(\w+)\s*\(/g;for(let o of n.matchAll(a))t.push({kind:"class",name:o[1],startLine:C(n,o.index),endLine:null,exported:!0});for(let o of n.matchAll(i))t.push({kind:"interface",name:o[1],startLine:C(n,o.index),endLine:null,exported:!0});for(let o of n.matchAll(r))/^(if|for|while|switch|catch|return|new)$/.test(o[1])||t.push({kind:"method",name:o[1],startLine:C(n,o.index),endLine:null,exported:!0});return{filePath:s,symbols:t,callNames:[],calls:[],importBindings:new Map,resolvedImports:new Map}}m(de,"extractJava");function me(e,s){let t=w.extname(s).toLowerCase();return[".ts",".tsx",".js",".jsx",".mjs",".cjs"].includes(t)?ie(e,s):t===".py"?ae(e,s):t===".go"?le(e,s):t===".rs"?ce(e,s):t===".java"?de(e,s):j(s)}m(me,"extractFile");async function ue(e){let s=[];for(let t of["tsconfig.json","jsconfig.json"])try{let a=(await N.readFile(w.join(e,t),"utf-8")).replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/[^\n]*/g,""),i=JSON.parse(a),r=i.compilerOptions?.paths,o=i.compilerOptions?.baseUrl??".";if(!r)continue;for(let[l,c]of Object.entries(r))s.push({pattern:l,targets:c.map(f=>w.posix.join(o.replace(/\\/g,"/"),f))});break}catch{}return s}m(ue,"loadTsPathMap");function fe(e,s){let t=[];for(let{pattern:n,targets:a}of s)if(n.endsWith("/*")){let i=n.slice(0,-1),r=n.slice(0,-2);if(e===r||e.startsWith(`${r}/`)){let o=e.slice(r.length).replace(/^\//,"");for(let l of a){let c=l.endsWith("/*")?l.slice(0,-1):l;t.push(w.posix.join(c.replace(/\*$/,""),o).replace(/\\/g,"/"))}}}else if(e===n)for(let i of a)t.push(i.replace(/\*$/,""));return t}m(fe,"applyTsPath");async function ge(e,s,t,n){let a=[];if(t.startsWith(".")){let i=w.dirname(w.join(e,s));a.push(w.resolve(i,t))}else if(t.startsWith("@/"))a.push(w.join(e,"src",t.slice(2))),a.push(w.join(e,t.slice(2)));else{for(let i of fe(t,n))a.push(w.join(e,i));a.push(w.join(e,"packages",t)),a.push(w.join(e,"src",t))}for(let i of a)for(let r of B){let o=i+r;try{if((await N.stat(o)).isFile())return w.relative(e,o).replace(/\\/g,"/")}catch{}}return null}m(ge,"resolveSpecifierToFile");async function pe(e,s,t){for(let[n,a]of s.importBindings){let i=await ge(e,s.filePath,a,t);i&&s.resolvedImports.set(n,i)}}m(pe,"resolveImportsForExtract");function G(e,s){let t=e.replace(/\\/g,"/"),n=s.replace(/\\/g,"/").replace(/\.(ts|tsx|js|jsx|mjs|cjs)$/,"");return t===s||t.replace(/\.(ts|tsx|js|jsx|mjs|cjs)$/,"")===n||t===`${n}.ts`||t===`${n}.tsx`||t===`${n}.js`||t===`${n}.jsx`||t===`${n}/index.ts`||t===`${n}/index.tsx`||t===`${n}/index.js`}m(G,"matchFileToMod");function K(e,s){return e.filter(n=>n.kind==="function"||n.kind==="method"||n.kind==="class").reduce((n,a)=>a.startLine<=s&&(!n||a.startLine>n.startLine)?a:n,null)}m(K,"enclosingSymbol");function z(e,s,t,n){let a=t.filter(o=>o.name===e);if(a.length===1)return{targets:a,confidence:.95};if(a.length>1){let o=a.filter(l=>l.exported);if(o.length===1)return{targets:o,confidence:.9}}let i=s.resolvedImports.get(e);if(i){let o=(n.get(e)??[]).filter(f=>G(f.file,i));if(o.length>0)return{targets:o,confidence:.9};let l=[...n.values()].flat().filter(f=>G(f.file,i)&&f.exported),c=l.find(f=>f.kind==="function"||f.kind==="class")??l[0];if(c)return{targets:[c],confidence:.65}}let r=n.get(e)??[];if(r.length===1)return{targets:r,confidence:.75};if(r.length>1){let o=r.filter(l=>l.exported);if(o.length===1)return{targets:o,confidence:.7}}return{targets:[],confidence:0}}m(z,"resolveCallTargets");function Y(e){let s=[],t=[],n=new Map,a=new Map;for(let o of e){let l=[];for(let c of o.symbols){let f=oe(o.filePath,c.kind,c.name,c.startLine),p={id:f,file:o.filePath,kind:c.kind,name:c.name,qname:U(o.filePath,c.name),startLine:c.startLine,endLine:c.endLine,exported:c.exported};s.push(p),l.push(p);let g=n.get(c.name)??[];g.push(p),n.set(c.name,g),t.push({src:`file:${o.filePath}`,dst:f,edgeType:"DEFINES",confidence:1})}a.set(o.filePath,l)}for(let o of e){let l=a.get(o.filePath)??[],c=new Set;for(let f of o.calls){if(l.some(d=>d.name===f.name&&d.startLine===f.line))continue;let{targets:p,confidence:g}=z(f.name,o,l,n);if(p.length===0)continue;let u=K(l,f.line)?.id??`file:${o.filePath}`;for(let d of p){if(d.id===u)continue;let y=`${u}|${d.id}`;c.has(y)||(c.add(y),t.push({src:u,dst:d.id,edgeType:"CALLS",confidence:g}))}}}let i=new Set,r=[];for(let o of t){let l=`${o.src}|${o.dst}|${o.edgeType}`;i.has(l)||(i.add(l),r.push(o))}return{symbols:s,edges:r,fileCount:e.length}}m(Y,"buildFromExtracts");async function Z(e,s){let n=(s??(await W(e)).filter(r=>I(r)&&!r.includes(".d.ts"))).filter(r=>I(r)&&!r.endsWith(".d.ts")),a=await ue(e),i=await $(n,40,async r=>{try{let o=await N.readFile(w.join(e,r),"utf-8"),l=o.length>4e5?o.slice(0,4e5):o;return me(l,r)}catch{return j(r)}});return await $(i,40,async r=>(await pe(e,r,a),r)),i}m(Z,"extractProject");function ye(e,s){x.transaction(e,n=>{n.prepare("DELETE FROM code_symbols").run(),n.prepare("DELETE FROM code_symbol_edges").run();let a=n.prepare(`INSERT INTO code_symbols (id, file, kind, name, qname, start_line, end_line, exported)
10
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)`),i=n.prepare(`INSERT OR IGNORE INTO code_symbol_edges (src, dst, edge_type, confidence)
11
+ VALUES (?, ?, ?, ?)`);for(let r of s.symbols)a.run(r.id,r.file,r.kind,r.name,r.qname,r.startLine,r.endLine,r.exported?1:0);for(let r of s.edges)i.run(r.src,r.dst,r.edgeType,r.confidence)});let t={symbolCount:s.symbols.length,edgeCount:s.edges.length,fileCount:s.fileCount,builtAt:new Date().toISOString()};x.setDoc(e,D,t)}m(ye,"persistGraph");function he(e,s,t){let n=new Set([...s.map(l=>l.filePath),...t]);if(n.size===0)return V(e);let a=Se(e).filter(l=>!n.has(l.file)),i=Y(s);x.transaction(e,l=>{let c=l.prepare("DELETE FROM code_symbols WHERE file = ?");for(let u of n)l.prepare("DELETE FROM code_symbol_edges WHERE src LIKE ? OR dst LIKE ? OR src = ? OR dst = ?").run(`${u}#%`,`${u}#%`,`file:${u}`,`file:${u}`),c.run(u);let f=l.prepare(`INSERT INTO code_symbols (id, file, kind, name, qname, start_line, end_line, exported)
12
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)`),p=l.prepare(`INSERT OR IGNORE INTO code_symbol_edges (src, dst, edge_type, confidence)
13
+ VALUES (?, ?, ?, ?)`);for(let u of i.symbols)f.run(u.id,u.file,u.kind,u.name,u.qname,u.startLine,u.endLine,u.exported?1:0);let g=new Map;for(let u of[...a,...i.symbols]){let d=g.get(u.name)??[];d.push(u),g.set(u.name,d)}let E=new Map;for(let u of[...a,...i.symbols])E.has(u.file)||E.set(u.file,[]),E.get(u.file).push(u);for(let u of s){let d=E.get(u.filePath)??[];for(let h of d.filter(L=>L.file===u.filePath))p.run(`file:${u.filePath}`,h.id,"DEFINES",1);let y=new Set;for(let h of u.calls){if(d.some(T=>T.name===h.name&&T.startLine===h.line))continue;let{targets:L,confidence:M}=z(h.name,u,d,g);if(L.length===0)continue;let b=K(d,h.line)?.id??`file:${u.filePath}`;for(let T of L){if(T.id===b)continue;let R=`${b}|${T.id}`;y.has(R)||(y.add(R),p.run(b,T.id,"CALLS",M))}}}});let r=x.get(e,`SELECT
14
+ (SELECT COUNT(*) FROM code_symbols) AS sc,
15
+ (SELECT COUNT(*) FROM code_symbol_edges) AS ec,
16
+ (SELECT COUNT(DISTINCT file) FROM code_symbols) AS fc`),o={symbolCount:r?.sc??0,edgeCount:r?.ec??0,fileCount:r?.fc??0,builtAt:new Date().toISOString()};return x.setDoc(e,D,o),o}m(he,"patchGraph");async function be(e,s){let t=await Z(e),n=Y(t);return ye(s,n),{symbolCount:n.symbols.length,edgeCount:n.edges.length,fileCount:n.fileCount,builtAt:new Date().toISOString()}}m(be,"indexSymbols");async function Te(e,s,t,n=[]){if(!J(s))return be(e,s);let a=t.filter(o=>I(o)&&!o.endsWith(".d.ts")),i=n.filter(o=>I(o));if(a.length===0&&i.length===0)return V(s)??{symbolCount:0,edgeCount:0,fileCount:0,builtAt:new Date().toISOString()};let r=await Z(e,a);return he(s,r,i)??{symbolCount:0,edgeCount:0,fileCount:0,builtAt:new Date().toISOString()}}m(Te,"updateSymbols");function J(e){try{return(x.get(e,"SELECT COUNT(*) AS n FROM code_symbols")?.n??0)>0}catch{return!1}}m(J,"hasSymbolIndex");function V(e){return x.getDoc(e,D)}m(V,"loadMeta");function A(e){return{id:e.id,file:e.file,kind:e.kind,name:e.name,qname:e.qname??U(e.file,e.name),startLine:e.start_line,endLine:e.end_line,exported:e.exported===1}}m(A,"rowToSymbol");function Se(e){try{return x.query(e,"SELECT * FROM code_symbols ORDER BY file, start_line").map(A)}catch{return[]}}m(Se,"listAllSymbols");function v(e,s,t={}){let n=t.limit??30,a=`%${s.replace(/[%_]/g,"")}%`;try{return t.kind?x.query(e,`SELECT * FROM code_symbols
17
+ WHERE name LIKE ? COLLATE NOCASE AND kind = ?
18
+ ORDER BY exported DESC, name
19
+ LIMIT ?`,a,t.kind,n).map(A):x.query(e,`SELECT * FROM code_symbols
20
+ WHERE name LIKE ? COLLATE NOCASE OR qname LIKE ? COLLATE NOCASE
21
+ ORDER BY exported DESC, name
22
+ LIMIT ?`,a,a,n).map(A)}catch{return[]}}m(v,"searchSymbols");function Me(e,s,t=20){let n=s.split(/[^A-Za-z0-9_]+/).flatMap(i=>i.replace(/([a-z])([A-Z])/g,"$1 $2").split(/\s+/)).map(i=>i.trim()).filter(i=>i.length>2);if(n.length===0||!J(e))return[];let a=new Map;for(let i of n){let r=v(e,i,{limit:40});for(let o of r){let l=o.name.toLowerCase()===i.toLowerCase()?1:.55,c=o.exported?1.15:1,f=o.kind==="function"||o.kind==="class"||o.kind==="route"?1.1:1,p=l*c*f,g=a.get(o.file)??{score:0,names:new Set};g.score+=p,g.names.add(o.name),a.set(o.file,g)}}return Array.from(a.entries()).map(([i,r])=>({path:i,score:r.score,matchedNames:[...r.names]})).sort((i,r)=>r.score-i.score).slice(0,t)}m(Me,"scoreFilesFromQuery");function q(e,s){try{return x.query(e,"SELECT * FROM code_symbols WHERE file = ? ORDER BY start_line",s).map(A)}catch{return[]}}m(q,"symbolsInFile");function P(e,s="CALLS"){let t=new Map,n=new Map;try{let a=x.query(e,"SELECT src, dst FROM code_symbol_edges WHERE edge_type = ?",s);for(let i of a)t.has(i.src)||t.set(i.src,[]),t.get(i.src).push(i.dst),n.has(i.dst)||n.set(i.dst,[]),n.get(i.dst).push(i.src)}catch{}return{forward:t,reverse:n}}m(P,"loadEdges");function X(e,s){try{let t=x.get(e,"SELECT * FROM code_symbols WHERE id = ?",s);return t?A(t):null}catch{return null}}m(X,"symbolById");function _e(e,s,t={}){let n=t.direction??"both",a=Math.min(Math.max(t.depth??3,1),5),i=v(e,s,{limit:10}).filter(E=>E.name.toLowerCase()===s.toLowerCase()),r=i.length>0?i:v(e,s,{limit:5});if(r.length===0)return null;let{forward:o,reverse:l}=P(e,"CALLS"),c=[],f=[],p=m((E,u,d,y)=>{let h=new Set(E),L=E.map(M=>({id:M,depth:0}));for(let{id:M,depth:S}of L)if(!(S>=y))for(let b of u.get(M)??[]){if(h.has(b))continue;if(h.add(b),b.startsWith("file:")){let R=b.slice(5),F=q(e,R),k=F.find(_=>_.exported&&(_.kind==="function"||_.kind==="class"))??F.find(_=>_.kind==="function"||_.kind==="class")??F[0];k&&!h.has(k.id)&&(h.add(k.id),d.push({symbol:k,depth:S+1,via:"CALLS"}),L.push({id:k.id,depth:S+1})),L.push({id:b,depth:S+1});continue}let T=X(e,b);T&&(d.push({symbol:T,depth:S+1,via:"CALLS"}),L.push({id:b,depth:S+1}))}},"bfs"),g=r.map(E=>E.id);return(n==="inbound"||n==="both")&&p(g,l,c,a),(n==="outbound"||n==="both")&&p(g,o,f,a),{root:r,inbound:c,outbound:f}}m(_e,"tracePath");function ke(e,s){let t=q(e,s);if(t.length===0)return 0;let{reverse:n}=P(e,"CALLS"),a=new Set;for(let i of t)for(let r of n.get(i.id)??[])a.add(r);return a.size}m(ke,"fileFanIn");function Ae(e){try{let s=x.query(e,`SELECT target.file AS file, COUNT(DISTINCT edge.src) AS caller_count
23
+ FROM code_symbol_edges AS edge
24
+ JOIN code_symbols AS target ON target.id = edge.dst
25
+ WHERE edge.edge_type = 'CALLS'
26
+ GROUP BY target.file`);return new Map(s.map(t=>[t.file,t.caller_count]))}catch{return new Map}}m(Ae,"fileFanInByFile");function Oe(e,s,t=2){let n=new Set(s),{reverse:a}=P(e,"CALLS"),i=new Set;for(let l of s)for(let c of q(e,l))i.add(c.id);let r=new Set,o=new Set(i);return Array.from({length:t}).reduce(l=>{let c=[];for(let f of l)for(let p of a.get(f)??[])if(!o.has(p))if(o.add(p),c.push(p),p.startsWith("file:")){let g=p.slice(5);n.has(g)||r.add(g)}else{let g=X(e,p);g&&!n.has(g.file)&&r.add(g.file)}return c},[...i]),[...r]}m(Oe,"filesCallingInto");export{O as a,me as b,be as c,Te as d,J as e,V as f,Se as g,v as h,Me as i,q as j,_e as k,ke as l,Ae as m,Oe as n};
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __pathDirname } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __pathDirname(__filename);
8
+ import{b as r,c as d}from"./chunk-QSAA6LZF.mjs";import{e as o,g as p}from"./chunk-HDHVBB6Q.mjs";import{b as n,e as m}from"./chunk-AKIN5WSQ.mjs";import{a}from"./chunk-E66B27AL.mjs";m();p();var u="judgment:active",c="judgment:ghosts",g=class{static{a(this,"JudgmentLedgerStorage")}get(s){let t=o.getDoc(s,u);if(t===null)return null;let e=r.safeParse(t);return e.success?e.data:null}set(s,t){let e=t.updatedAt||n();return o.updateDoc(s,u,()=>r.parse({...t,updatedAt:e}),()=>r.parse({...t,updatedAt:e}))}clear(s){o.deleteDoc(s,u)}getGhosts(s){let t=o.getDoc(s,c);if(t===null)return{ghosts:[],updatedAt:n()};let e=d.safeParse(t);return e.success?e.data:{ghosts:[],updatedAt:n()}}setGhosts(s,t){let e=d.parse(t);return o.setDoc(s,c,e),e}},w=new g;export{u as a,c as b,w as c};
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __pathDirname } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __pathDirname(__filename);
8
+ import{c as _}from"./chunk-LT5WSSQO.mjs";import{a as k}from"./chunk-HJ4HEI45.mjs";import{a as d,b as y,c as E}from"./chunk-3LG3ACQV.mjs";import{d as u,g as S}from"./chunk-HDHVBB6Q.mjs";import{b as a,c as T,e as P}from"./chunk-AKIN5WSQ.mjs";import{a as o}from"./chunk-E66B27AL.mjs";var f={critical:0,high:1,medium:2,low:3},R={active:0,previously_active:1,backlog:2};function A(i){return[...i].sort((e,t)=>{let s=R[e.section]-R[t.section];return s!==0?s:f[e.priority]-f[t.priority]})}o(A,"sortBySectionAndPriority");function Q(i,e){let t=new Set;return i.filter(s=>{let r=e(s);return t.has(r)?!1:(t.add(r),!0)})}o(Q,"uniqueBy");P();S();function c(i){let e={id:i.id,description:i.description,priority:i.priority??"medium",type:i.type??"feature",section:i.section??"backlog",completed:i.completed===1,createdAt:i.created_at};return i.completed_at!=null&&(e.completedAt=i.completed_at),i.feature_id!=null&&(e.featureId=i.feature_id),i.feature_name!=null&&(e.originFeature=i.feature_name),i.body!=null&&(e.body=i.body),i.agent!=null&&(e.agent=i.agent),i.group_name!=null&&(e.groupName=i.group_name),i.group_id!=null&&(e.groupId=i.group_id),e}o(c,"rowToTask");var p=`INSERT INTO queue_tasks
9
+ (id, description, type, priority, section, created_at, completed, completed_at,
10
+ feature_id, feature_name, body, agent, group_name, group_id)
11
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`;function m(i){return[i.id,i.description,i.type??null,i.priority??null,i.section??"backlog",i.createdAt,i.completed?1:0,i.completedAt??null,i.featureId??null,i.originFeature??null,i.body??null,i.agent??null,i.groupName??null,i.groupId??null]}o(m,"insertParams");var g=class extends k{static{o(this,"QueueStorage")}constructor(){super("queue.json",_)}getDefault(){return{tasks:[],lastUpdated:""}}getEventType(e){return`queue.${e}d`}async getTasks(e){return u.query(e,"SELECT * FROM queue_tasks ORDER BY created_at ASC").map(c)}async getActiveTasks(e){return u.query(e,"SELECT * FROM queue_tasks WHERE section = 'active' AND completed = 0 ORDER BY created_at ASC").map(c)}async getBacklog(e){return u.query(e,"SELECT * FROM queue_tasks WHERE section = 'backlog' AND completed = 0 ORDER BY created_at ASC").map(c)}async getNextTask(e){let t=await this.getActiveTasks(e);return A(t)[0]||null}async addTask(e,t){let s={...t,id:d(),createdAt:a(),completed:!1};return u.run(e,p,...m(s)),await this.publishEvent(e,"queue.task_added",{taskId:s.id,description:s.description,priority:s.priority,section:s.section,created_at:s.createdAt}),s}async addTasks(e,t){let s=a(),r=t.map(n=>({...n,id:d(),createdAt:s,completed:!1}));for(let n of r)u.run(e,p,...m(n));return await this.publishEvent(e,"queue.tasks_added",{count:r.length,tasks:r.map(n=>({id:n.id,description:n.description,created_at:n.createdAt}))}),r}async upsertTask(e,t){let s=await this.getTask(e,t.id);if(s){let n={...s};for(let l of["description","type","priority","section"])t[l]!==void 0&&(n[l]=t[l]);u.run(e,`UPDATE queue_tasks SET description = ?, type = ?, priority = ?, section = ?
12
+ WHERE id = ?`,n.description,n.type??null,n.priority??null,n.section??"backlog",t.id);return}let r={...t,id:t.id,description:t.description,priority:t.priority??"medium",type:t.type??"feature",section:t.section??"backlog",completed:t.completed??!1,createdAt:t.createdAt??a()};u.run(e,p,...m(r))}async removeTask(e,t){u.run(e,"DELETE FROM queue_tasks WHERE id = ?",t),await this.publishEvent(e,"queue.task_removed",{taskId:t})}async deleteByFeatureId(e,t){let r=u.run(e,"DELETE FROM queue_tasks WHERE feature_id = ?",t).changes;return r>0&&await this.publishEvent(e,"queue.tasks_removed_by_feature",{featureId:t,count:r}),r}async completeTask(e,t){let s=a();if(u.run(e,"UPDATE queue_tasks SET completed = 1, completed_at = ? WHERE id = ? AND completed = 0",s,t).changes===0)return null;let n=await this.getTask(e,t);return n&&await this.publishEvent(e,"queue.task_completed",{taskId:t,description:n.description,completedAt:n.completedAt}),n}async moveToSection(e,t,s){u.run(e,"UPDATE queue_tasks SET section = ? WHERE id = ?",s,t)}async setPriority(e,t,s){u.run(e,"UPDATE queue_tasks SET priority = ? WHERE id = ?",s,t)}async getTask(e,t){let s=u.get(e,"SELECT * FROM queue_tasks WHERE id = ?",t);return s?c(s):null}async updateTask(e,t,s){let r=await this.getTask(e,t);if(!r)return null;let n={...r,...s};return u.run(e,"UPDATE queue_tasks SET description = ?, body = ?, type = ?, priority = ?, section = ? WHERE id = ?",n.description,n.body??null,n.type??null,n.priority??null,n.section??"backlog",t),await this.publishEvent(e,"queue.task_updated",{taskId:t}),n}async clearCompleted(e){return u.run(e,"DELETE FROM queue_tasks WHERE completed = 1").changes}async removeStaleCompleted(e){let t=T(y.QUEUE_COMPLETED_DAYS).toISOString(),s=u.query(e,"SELECT * FROM queue_tasks WHERE completed = 1 AND completed_at IS NOT NULL AND completed_at < ?",t).map(c);return s.length===0?0:(E.archiveMany(e,s.map(r=>({entityType:"queue_task",entityId:r.id,entityData:r,summary:r.description,reason:"age"}))),u.run(e,"DELETE FROM queue_tasks WHERE completed = 1 AND completed_at IS NOT NULL AND completed_at < ?",t),await this.publishEvent(e,"queue.stale_removed",{count:s.length}),s.length)}},C=new g;export{Q as a,C as b};
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __pathDirname } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __pathDirname(__filename);
8
+ import{e as r,o as c}from"./chunk-CTWZQ7YI.mjs";import{a as e}from"./chunk-E66B27AL.mjs";c();var s=5e3;async function g(t){let n=await r(["branch","--show-current"],{cwd:t,timeoutMs:s});if(n.ok)return n.stdout.trim()||void 0}e(g,"getGitBranch");async function m(t,n=20){let o=e(i=>i.trim().split(`
9
+ `).filter(f=>f.length>0).slice(0,n),"parse"),u=await r(["diff","--name-only","HEAD"],{cwd:t,timeoutMs:s});if(u.ok){let i=o(u.stdout);if(i.length>0)return i}let d=await r(["diff","--name-only"],{cwd:t,timeoutMs:s});return d.ok?o(d.stdout):[]}e(m,"getModifiedFiles");export{g as a,m as b};
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __pathDirname } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __pathDirname(__filename);
8
+ import{d as b}from"./chunk-SYHDEUVU.mjs";import{a as j}from"./chunk-GCKILEXJ.mjs";import{c as p,e as A}from"./chunk-D4S3IRD3.mjs";import{b as w}from"./chunk-PKDYFXMI.mjs";import{a as e}from"./chunk-E66B27AL.mjs";import g from"node:fs";import H from"node:fs/promises";import m from"node:path";var I=j.join("/"),R="Generated with [p/](https://www.prjct.app/)",P="<!-- prjct:start - DO NOT REMOVE THIS MARKER -->",L="<!-- prjct:end - DO NOT REMOVE THIS MARKER -->",n={rag:"prjct is a RAG-backed project memory harness; do not preload project history.",entrypoint:'Tasks \u2192 `prjct work "\u2026"`. Known cmds (`sync`/`search`/`remember`/\u2026) \u2192 `prjct <cmd>` \u2014 never work-wrap.',pull:"Pull only what surfaces: `prjct search` / `context memory` / `guard` / MCP \u2014 not something to load wholesale.",remember:'Save synthesized memory in English: `prjct remember <decision|learning|gotcha|context> "<text>"`.',kb:`KB (\`${I}\`): \`remember <facet>\` / \`context memory <facet>\` \u2014 on demand, never injected here.`,ship:"Ship only after user OKs: `prjct ship --md`.",loop:"Loop: land; H2+ intent; tip\u2192user SoT; close.",identity:"L0 portable; id=cwd."};function S(){return`${["---","name: prjct","description: prjct work cycles + memory; run prjct verbs, do not preload context.","---","","# prjct","","Run `prjct <cmd> --md` and follow it.","",`- ${n.rag}`,`- ${n.entrypoint}`,`- ${n.pull}`,`- ${n.remember}`,`- ${n.kb}`,`- ${n.ship}`,`- ${n.loop}`,`- ${n.identity}`,"",`Commit footer: \`${R}\``].join(`
9
+ `)}
10
+ `}e(S,"buildCompactSkill");var M=S,_=S;function O(t){return`${["<!-- prjct:start - DO NOT REMOVE THIS MARKER -->","# p/ \u2014 Context layer for AI agents","","Skills auto-activate for: work, intent, ship, sync, guard, remember, search, insights, performance","Other commands: run `prjct <command> --md` and follow CLI output","","Flow: known verbs run as `prjct <cmd> --md` (sync, search, remember, ship, guard, land, prime\u2026).",'`prjct work` is only for task/work cycles \u2014 never wrap a bare verb as work "sync".',"Substantive implementation follows the persisted work-cycle station from `prjct work --md`:","reviewed intent, evidence, tests when required, then code.","Sync analysis: prefer schema v1 JSON via `prjct analysis-save-llm` (markdown = thin notes only).","","Data:","- Persist everything (memories, context, intents) in ENGLISH, whatever language the user speaks",`- ${n.rag}`,`- ${n.entrypoint}`,`- ${n.pull}`,`- Sovereign knowledge base \u2014 ${n.kb}`,`- ${n.remember}`,`- ${n.loop}`,"- On close, save synthesized context; raw quotes, counters, detector rows, and transcript chunks are inputs, not final memory","- prjct remembers and shows the path; the agent decides how to execute with its own native tools","- Treat prjct output as signals, not a prescriptive harness",`- Commit footer: \`${R}\``,"- Path resolution: `.prjct/prjct.config.json` \u2192 `~/.prjct-cli/projects/{projectId}`","- Storage: `prjct` CLI (SQLite internally)","- Worktree hygiene: if working in a git worktree, remove it AFTER its PR merges \u2014 `git worktree remove` from the main worktree; never with uncommitted/unpushed work, never `--force`","",`Crew (opt-in via \`prjct crew install\`): Leader (blue) \xB7 Implementer (purple) \xB7 Reviewer (pink). Subagent dispatch is Claude-Code-only; in ${t}, identify the role you are playing explicitly.`,"","**Auto-managed by prjct-cli** | https://prjct.app","<!-- prjct:end - DO NOT REMOVE THIS MARKER -->"].join(`
11
+ `)}
12
+ `}e(O,"buildGlobalConfig");var F=e(()=>O("Gemini"),"buildGeminiConfig"),K=e(()=>O("Antigravity"),"buildAntigravityConfig");function D(t){return`${["---",t,"---","",P,b,"","**Auto-managed by prjct-cli** | https://prjct.app",L].join(`
13
+ `)}
14
+ `}e(D,"buildIdePointer");var G=e(()=>D(`description: "prjct \u2014 pull project memory + workflow on demand"
15
+ alwaysApply: true`),"buildCursorRule"),T={"codex/SKILL.md":M,"antigravity/SKILL.md":_,"global/GEMINI.md":F,"global/ANTIGRAVITY.md":K,"global/CURSOR.mdc":G},Q=Object.freeze(Object.keys(T));function k(t){return T[t]?.()??null}e(k,"buildEditorSurface");A();var N=50,l=new Map,a=[],s={templates:null,loaded:!1};function h(){if(s.loaded)return s.templates;s.loaded=!0;let t=m.join(p,"dist","templates.json");try{let r=g.readFileSync(t,"utf-8");return s.templates=JSON.parse(r),s.templates}catch{return null}}e(h,"loadBundle");function B(t){let r=a.indexOf(t);r>-1&&a.splice(r,1),a.push(t)}e(B,"updateLruOrder");function U(){for(;l.size>=N&&a.length>0;){let t=a.shift();t&&l.delete(t)}}e(U,"evictLru");function v(t){let r=/^---\n([\s\S]+?)\n---\n([\s\S]*)$/,o=t.match(r);if(!o)return{frontmatter:{},content:t.trim()};let[,i,c]=o,u={};return i.split(`
16
+ `).forEach(C=>{let[f,...y]=C.split(":");if(f&&y.length>0){let d=y.join(":").trim();d.startsWith("[")&&d.endsWith("]")?u[f.trim()]=d.slice(1,-1).split(",").map($=>$.trim()):u[f.trim()]=d.replace(/^["']|["']$/g,"")}}),{frontmatter:u,content:c.trim()}}e(v,"parseFrontmatter");async function E(t){if(l.has(t))return B(t),l.get(t);let i=h()?.[`commands/${t}.md`]??await H.readFile(m.join(p,"templates","commands",`${t}.md`),"utf-8").catch(()=>{throw w.notFound(t)}),c=v(i);return U(),l.set(t,c),a.push(t),c}e(E,"load");async function V(t){return(await E(t)).frontmatter["allowed-tools"]||[]}e(V,"getAllowedTools");function x(){l.clear(),a.length=0}e(x,"clearCache");function st(){s.templates=null,s.loaded=!1,x()}e(st,"resetBundle");function z(t){let r=h();if(r?.[t])return r[t];let o=k(t);if(o)return o;let i=m.join(p,"templates",t);try{return g.readFileSync(i,"utf-8")}catch{return null}}e(z,"getTemplateContent");function W(t){let r=h();if(r)return Object.keys(r).filter(i=>i.startsWith(t));let o=m.join(p,"templates",t);try{return g.readdirSync(o).map(c=>`${t}${c}`)}catch{return[]}}e(W,"listTemplates");var Y={load:E,parseFrontmatter:v,getAllowedTools:V,clearCache:x,getTemplateContent:z,listTemplates:W},at=Y;export{S as a,st as b,z as c,W as d,at as e};
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __pathDirname } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __pathDirname(__filename);
8
+ import{a as e}from"./chunk-E66B27AL.mjs";var i=class extends Error{static{e(this,"PrjctError")}code;isOperational;constructor(r,n="PRJCT_ERROR"){super(r),this.name="PrjctError",this.code=n,this.isOperational=!0,Error.captureStackTrace?.(this,this.constructor)}},s=class t extends i{static{e(this,"ProjectError")}constructor(r,n="PROJECT_ERROR"){super(r,n),this.name="ProjectError"}static notInitialized(){return new t("Project not initialized. Run p. init first.","PROJECT_NOT_INIT")}static notFound(r){return new t(`Project not found: ${r}`,"PROJECT_NOT_FOUND")}static invalidId(r){return new t(`Invalid project ID: ${r}`,"PROJECT_INVALID_ID")}},o=class t extends i{static{e(this,"TemplateError")}constructor(r,n="TEMPLATE_ERROR"){super(r,n),this.name="TemplateError"}static notFound(r){return new t(`Template not found: ${r}.md`,"TEMPLATE_NOT_FOUND")}static parseFailed(r){return new t(`Failed to parse template: ${r}`,"TEMPLATE_PARSE_ERROR")}},a=class t extends i{static{e(this,"AgentError")}constructor(r,n="AGENT_ERROR"){super(r,n),this.name="AgentError"}static notSupported(r){return new t(`Unsupported agent type: ${r}`,"AGENT_NOT_SUPPORTED")}static initFailed(r){return new t(`Agent initialization failed: ${r}`,"AGENT_INIT_FAILED")}};function c(t){return t instanceof i}e(c,"isPrjctError");function u(t){return c(t)||t instanceof Error?t.message:typeof t=="string"?t:"Unknown error"}e(u,"getErrorMessage");export{s as a,o as b,a as c,u as d};