@a-company/paradigm 5.37.0 → 5.37.1

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 (194) hide show
  1. package/dist/{accept-orchestration-36AP7HTX.js → accept-orchestration-SBZVK3H4.js} +1 -1
  2. package/dist/{add-FGKNJS3F.js → add-P76GEMGF.js} +1 -1
  3. package/dist/{agent-E7LDKJ4O.js → agent-X6I2YWOB.js} +1 -1
  4. package/dist/{agent-loader-2HXKVL6J.js → agent-loader-RIVI6QPP.js} +1 -1
  5. package/dist/{agent-loader-XS6LIMUG.js → agent-loader-RJRVO5GQ.js} +1 -1
  6. package/dist/{agent-state-L7LCPRC3.js → agent-state-KSQ3S7OB.js} +1 -1
  7. package/dist/{agents-suggest-Y5D6AALG.js → agents-suggest-HYTFMQD3.js} +1 -1
  8. package/dist/{aggregate-OZJRRAQR.js → aggregate-W66DM3GA.js} +1 -1
  9. package/dist/{ambient-4NSPAQDJ.js → ambient-GJAEXF7B.js} +4 -4
  10. package/dist/{assess-AMPVSWK7.js → assess-UFPYEJKP.js} +1 -1
  11. package/dist/{auto-A7VUHCUC.js → auto-RHJXOZFL.js} +1 -1
  12. package/dist/{beacon-YBLUUTYY.js → beacon-5QVYV5DF.js} +1 -1
  13. package/dist/{calibration-FQ4YVOE4.js → calibration-OLJYB5HN.js} +1 -1
  14. package/dist/{check-46QL3KMQ.js → check-THVGY4R5.js} +1 -1
  15. package/dist/{chunk-EMMMBAID.js → chunk-3KVVC4WV.js} +1 -1
  16. package/dist/{chunk-3QMRDN65.js → chunk-4Q7XYPL4.js} +2 -2
  17. package/dist/{chunk-3OMJI5TT.js → chunk-4SCKMGTB.js} +2 -2
  18. package/dist/chunk-5TAVYPOV.js +2 -0
  19. package/dist/{chunk-6PP2RPIZ.js → chunk-74SGKSRQ.js} +2 -2
  20. package/dist/{chunk-RN35IVA2.js → chunk-BV5PRPLB.js} +1 -1
  21. package/dist/{chunk-YG5G5GEQ.js → chunk-CMCQHU46.js} +13 -13
  22. package/dist/{chunk-JIF7OSGH.js → chunk-CVPKQ3JH.js} +1 -1
  23. package/dist/{chunk-RLJ5K3J5.js → chunk-D6ZXAI26.js} +1 -1
  24. package/dist/chunk-EK4ZRIFJ.js +3 -0
  25. package/dist/{chunk-X54WXWCX.js → chunk-FILLU77P.js} +5 -5
  26. package/dist/{chunk-7PB7AXQE.js → chunk-J6KWGCHN.js} +1 -1
  27. package/dist/{chunk-BCOPNVPY.js → chunk-JOHAOLEC.js} +2 -2
  28. package/dist/{chunk-JUOOVKK6.js → chunk-KFNHCQ4R.js} +1 -1
  29. package/dist/{chunk-77WX6HGV.js → chunk-LBQBWIEX.js} +1 -1
  30. package/dist/chunk-MBPLJKE5.js +3 -0
  31. package/dist/{chunk-W6WVJLHO.js → chunk-ODVKPZZ4.js} +1 -1
  32. package/dist/{chunk-5YHR77AL.js → chunk-ORDKEGII.js} +1 -1
  33. package/dist/chunk-QGZRM6ZB.js +2 -0
  34. package/dist/chunk-QO7YPQXC.js +2 -0
  35. package/dist/{chunk-DG3VCY43.js → chunk-SUU6M4JH.js} +1 -1
  36. package/dist/{chunk-XNB4TZTD.js → chunk-UNHTQLYO.js} +1 -1
  37. package/dist/chunk-UPFCBVXY.js +3 -0
  38. package/dist/{chunk-6QKCUEEY.js → chunk-VCKKJDLP.js} +1 -1
  39. package/dist/{chunk-4W5TBL3O.js → chunk-VG7FN2TU.js} +1 -1
  40. package/dist/{chunk-7YTAA6XA.js → chunk-WS2N27RX.js} +1 -1
  41. package/dist/{chunk-7SGNNVE5.js → chunk-X3U3IGYT.js} +2 -2
  42. package/dist/{chunk-IW5K3RNR.js → chunk-ZUAUFZRJ.js} +1 -1
  43. package/dist/{claude-OX54QSLC.js → claude-4LR3LJQZ.js} +1 -1
  44. package/dist/{claude-cli-FHLJQVJC.js → claude-cli-UP6HGH7C.js} +1 -1
  45. package/dist/{claude-code-GVGU3A3B.js → claude-code-RLJ4GX77.js} +1 -1
  46. package/dist/{claude-code-teams-ZRHPTGPP.js → claude-code-teams-R37HJY3Y.js} +1 -1
  47. package/dist/{compliance-PHSPVYK2.js → compliance-BPGQMQAX.js} +3 -3
  48. package/dist/{compliance-health-HCZTJDN7.js → compliance-health-JNP3P35P.js} +1 -1
  49. package/dist/{conductor-LYBMM66Z.js → conductor-Y5IXELTL.js} +1 -1
  50. package/dist/{config-schema-URJW6UZH.js → config-schema-GUQY2QN7.js} +1 -1
  51. package/dist/{constellation-PX3ZKMWQ.js → constellation-CG7C4WFE.js} +1 -1
  52. package/dist/{context-audit-APFKELFT.js → context-audit-XRPT3OU2.js} +2 -2
  53. package/dist/{cost-B5SAHPOJ.js → cost-IDNVMAEV.js} +1 -1
  54. package/dist/{cost-MMWUDGZC.js → cost-PK4KIF7R.js} +1 -1
  55. package/dist/{cursor-cli-Q2HLQ5TE.js → cursor-cli-QKF7Z6M2.js} +1 -1
  56. package/dist/{cursorrules-3BW6K6D5.js → cursorrules-U5O4G5T4.js} +1 -1
  57. package/dist/{decision-loader-4KMQVAXZ.js → decision-loader-2XPZE4EZ.js} +1 -1
  58. package/dist/{delete-7PQZUERZ.js → delete-P5VULXR4.js} +1 -1
  59. package/dist/{diff-F2HUO2H3.js → diff-JVEYCXUC.js} +1 -1
  60. package/dist/{discipline-ARFFIXQL.js → discipline-H7LDI6NT.js} +1 -1
  61. package/dist/{dist-MRZDZ5SX.js → dist-3ZCH25SG.js} +1 -1
  62. package/dist/{dist-KGRCLBJP-R5CCPPXN.js → dist-KGRCLBJP-2QAPFYNF.js} +1 -1
  63. package/dist/{dist-YUXXIXB3.js → dist-QBTQW4ZW.js} +1 -1
  64. package/dist/{dist-OKM6BXTH.js → dist-VGFSP3XM.js} +1 -1
  65. package/dist/{dist-VWC6FA46.js → dist-VXCZWVVJ.js} +1 -1
  66. package/dist/{dist-5IUWRFG6.js → dist-W3XCATBJ.js} +1 -1
  67. package/dist/{docs-6WOQILZS.js → docs-EDQ2STFK.js} +1 -1
  68. package/dist/{docs-BI2DO7B2.js → docs-USDAF26F.js} +2 -2
  69. package/dist/doctor-G37LCXG5.js +2 -0
  70. package/dist/{drift-6QPDKKUO.js → drift-ILZE5BFJ.js} +1 -1
  71. package/dist/{echo-3JJDKCNF.js → echo-UPTQUEDU.js} +1 -1
  72. package/dist/{edit-PLCGL5OV.js → edit-GUU3HBVW.js} +1 -1
  73. package/dist/{enforcement-IWABOHMY.js → enforcement-46XWPNSA.js} +1 -1
  74. package/dist/{enforcement-5MHSQAXE.js → enforcement-BEGPQIUN.js} +1 -1
  75. package/dist/{event-5J3GBWKT.js → event-Y3VXC2RV.js} +1 -1
  76. package/dist/{explain-files-LPHTJL4N.js → explain-files-3GPZUETV.js} +1 -1
  77. package/dist/{export-NXUFTFPW.js → export-CV5KCTPS.js} +1 -1
  78. package/dist/{flow-IT2IVXXT.js → flow-POQP27WA.js} +1 -1
  79. package/dist/{gap-narrator-DVXPWNFN.js → gap-narrator-NTXLUI7I.js} +1 -1
  80. package/dist/{global-J2VTYKCC.js → global-C44FW4G2.js} +1 -1
  81. package/dist/{graduate-N2HF4JT6.js → graduate-3BBSC27A.js} +1 -1
  82. package/dist/graph-CNDE5TAT.js +2 -0
  83. package/dist/{graph-server-TBHHBFOM.js → graph-server-COZR5C3Z.js} +1 -1
  84. package/dist/{habits-JTMWGVPH.js → habits-BX2IRSUI.js} +3 -3
  85. package/dist/{history-FHS7EC3Z.js → history-UW454SDP.js} +1 -1
  86. package/dist/{hooks-BL6CXRVK.js → hooks-BNWRGACA.js} +1 -1
  87. package/dist/index.js +5 -5
  88. package/dist/init-EHVSM7YY.js +2 -0
  89. package/dist/{integrity-UBMZCB77.js → integrity-UYDOOJDP.js} +1 -1
  90. package/dist/{integrity-checker-VSR3ITBL.js → integrity-checker-DHGMZQDG.js} +1 -1
  91. package/dist/journal-loader-GLH7XFTK.js +2 -0
  92. package/dist/{lint-KQQ2RMSJ.js → lint-IGKE6UPS.js} +1 -1
  93. package/dist/{list-37UCWCOQ.js → list-5IUGP3ZB.js} +1 -1
  94. package/dist/{list-6WY4CFUR.js → list-YKIQNKGB.js} +1 -1
  95. package/dist/lore-loader-RVQI5GXL.js +2 -0
  96. package/dist/{lore-loader-PBUDKXAJ.js → lore-loader-XY5MZRR2.js} +1 -1
  97. package/dist/{lore-server-A3KKZLSY.js → lore-server-FC2GMDLT.js} +1 -1
  98. package/dist/{manual-HKI6OXB4.js → manual-RXSPSFLL.js} +1 -1
  99. package/dist/mcp.js +1 -1
  100. package/dist/{migrate-W3KCXLDS.js → migrate-YQG2FG3J.js} +2 -2
  101. package/dist/{migrate-assessments-D2TOBJ5V.js → migrate-assessments-GEI5WMI2.js} +1 -1
  102. package/dist/{model-discovery-TWX4A4YD.js → model-discovery-HMB3YI4L.js} +1 -1
  103. package/dist/{nomination-engine-A24774W4.js → nomination-engine-KNSOAT4W.js} +1 -1
  104. package/dist/{notebook-LXJ2LHUA.js → notebook-PE3JSYZI.js} +1 -1
  105. package/dist/notebook-loader-CENTDDUJ.js +2 -0
  106. package/dist/{orchestrate-WFCNV2II.js → orchestrate-RCAMBOIB.js} +1 -1
  107. package/dist/{peers-7TPZTKH7.js → peers-P2KXU7ZK.js} +1 -1
  108. package/dist/{persona-UGTCFEGT.js → persona-STQWZH5P.js} +1 -1
  109. package/dist/{pipeline-7PZ6ILWX.js → pipeline-MZUITRVN.js} +1 -1
  110. package/dist/{platform-server-YIBX4YDJ.js → platform-server-DNAMH4YI.js} +2 -2
  111. package/dist/{plugin-update-checker-2EM4K45U.js → plugin-update-checker-M7PW434O.js} +1 -1
  112. package/dist/{portal-check-YSDJRZUR.js → portal-check-Z3OCQEQR.js} +1 -1
  113. package/dist/{portal-compliance-OBPK2IR5.js → portal-compliance-4MG5F2GI.js} +1 -1
  114. package/dist/{probe-WKXR3IN4.js → probe-B22G2JKF.js} +1 -1
  115. package/dist/{project-type-MRBJAKC7.js → project-type-EUCFKEAZ.js} +1 -1
  116. package/dist/{promote-VHBA56KW.js → promote-NJQDZBZA.js} +2 -2
  117. package/dist/{providers-RX7SBLHZ.js → providers-AWA7WLLM.js} +1 -1
  118. package/dist/{quiz-3SQNPRJ3.js → quiz-FE5UGAY2.js} +1 -1
  119. package/dist/{record-7QJPZZP7.js → record-YXPB34MY.js} +1 -1
  120. package/dist/{registry-LR5QACRK.js → registry-KOOKFUWD.js} +2 -2
  121. package/dist/reindex-O3WUCEE2.js +2 -0
  122. package/dist/{remember-SFGBTTEE.js → remember-MJRNTXYS.js} +1 -1
  123. package/dist/{retag-GFXUYP7S.js → retag-N5XF3KXP.js} +1 -1
  124. package/dist/{review-6KKZWV3A.js → review-6UAH6V3R.js} +1 -1
  125. package/dist/{review-GEBSYOZB.js → review-77QI6VOC.js} +1 -1
  126. package/dist/{ripple-4F5ZCXS4.js → ripple-ZGDITCGB.js} +1 -1
  127. package/dist/{roster-RI3UC2YI.js → roster-HV5KYUOI.js} +1 -1
  128. package/dist/{scaffold-WA4L2K7J.js → scaffold-D57JXPCC.js} +1 -1
  129. package/dist/{scopes-commands-5FFIUDRC.js → scopes-commands-NSPERZWV.js} +1 -1
  130. package/dist/{sentinel-37ZEEWT7.js → sentinel-HYAZ3CO5.js} +2 -2
  131. package/dist/{sentinel-bridge-EZGFRVFH.js → sentinel-bridge-VR357PKL.js} +1 -1
  132. package/dist/{serve-2BXDL35A.js → serve-L52ZUTU6.js} +2 -2
  133. package/dist/{serve-5JME5QEM.js → serve-OY6XYL7F.js} +2 -2
  134. package/dist/{serve-2LSTQFFQ.js → serve-U47GULB6.js} +2 -2
  135. package/dist/{server-XLHIYDTZ.js → server-2MNROHF6.js} +1 -1
  136. package/dist/{server-AIXFROYL.js → server-4YNUIK4W.js} +1 -1
  137. package/dist/session-tracker-D2CH7RJF.js +2 -0
  138. package/dist/{session-work-log-6GKGUQ5C.js → session-work-log-BX434ZLK.js} +1 -1
  139. package/dist/{session-work-log-UYMIWWOX.js → session-work-log-NQA7WJEC.js} +1 -1
  140. package/dist/{setup-ZM4JFV5D.js → setup-3F5IK7MO.js} +2 -2
  141. package/dist/{setup-F2N4LUR7.js → setup-KPIMRZ4Q.js} +1 -1
  142. package/dist/{shift-DDYVQJ75.js → shift-RRNL6E4O.js} +3 -3
  143. package/dist/{show-RFOIR2GQ.js → show-BOAVWZPZ.js} +1 -1
  144. package/dist/{show-CZLVYLM5.js → show-PJ5LFLIL.js} +1 -1
  145. package/dist/{snapshot-6N564OUJ.js → snapshot-L2G56RPL.js} +1 -1
  146. package/dist/{spawn-HYARN3RL.js → spawn-M5BAV252.js} +1 -1
  147. package/dist/{status-WBJ6D7BD.js → status-77M3SDIF.js} +1 -1
  148. package/dist/{status-CUG3PKGC.js → status-A37ECYNJ.js} +1 -1
  149. package/dist/{summary-2AM4QVPW.js → summary-LXLHFRN7.js} +1 -1
  150. package/dist/{sweep-WHDT7ENV.js → sweep-HU74OPVW.js} +1 -1
  151. package/dist/{switch-HBGIFNF6.js → switch-CTW4PDGI.js} +1 -1
  152. package/dist/{symphony-CWKKMFAS.js → symphony-7INZR43F.js} +5 -5
  153. package/dist/{symphony-VTHVTE57.js → symphony-G6IENE4K.js} +1 -1
  154. package/dist/{symphony-loader-RYFZOQJS.js → symphony-loader-VA4UREOM.js} +1 -1
  155. package/dist/{symphony-peers-LWBUQ3T4.js → symphony-peers-U4KHMKGI.js} +1 -1
  156. package/dist/{symphony-peers-ISJPKX7W.js → symphony-peers-X5NGWXFP.js} +1 -1
  157. package/dist/{symphony-relay-L3BY6RGM.js → symphony-relay-2RHG25Z4.js} +1 -1
  158. package/dist/{sync-WIFD7UCL.js → sync-DLUBV5HQ.js} +1 -1
  159. package/dist/{sync-llms-MZ3RQWFX.js → sync-llms-7CAI74QL.js} +1 -1
  160. package/dist/{task-loader-EU7JLTR3.js → task-loader-NZFDTUQ5.js} +1 -1
  161. package/dist/{team-C3PWO7XL.js → team-NSP6PMPS.js} +1 -1
  162. package/dist/{test-6MUL4EXS.js → test-BQJMS4Y2.js} +1 -1
  163. package/dist/{thread-K6UHDIUW.js → thread-HFXK65D4.js} +1 -1
  164. package/dist/{timeline-S26CQWHT.js → timeline-K3ZFKJ3R.js} +1 -1
  165. package/dist/tools-NNPANZRA.js +2 -0
  166. package/dist/{triage-YF6WYZY4.js → triage-FCWOZASE.js} +1 -1
  167. package/dist/{tutorial-UEBX7Z2G.js → tutorial-UC6YQMNN.js} +1 -1
  168. package/dist/{university-UMT7PAKE.js → university-FJ7OCOA3.js} +1 -1
  169. package/dist/{upgrade-USW7YJEX.js → upgrade-GX56QE3C.js} +1 -1
  170. package/dist/{validate-VZGBVTPM.js → validate-C6SMKGYD.js} +1 -1
  171. package/dist/{validate-2PZTNYSS.js → validate-LSCDOLBO.js} +1 -1
  172. package/dist/{validate-KW3YFGTV.js → validate-VZXTJHGO.js} +1 -1
  173. package/dist/{watch-KQU3S7KE.js → watch-PZCCUP6K.js} +1 -1
  174. package/dist/{watch-HL3ZOALL.js → watch-YCODNIET.js} +1 -1
  175. package/dist/{wisdom-UU7HOE3M.js → wisdom-XZ3QKPNP.js} +1 -1
  176. package/dist/{work-log-loader-J27XSFCE.js → work-log-loader-DL5GZ2BQ.js} +1 -1
  177. package/dist/workspace-MKSQN7B2.js +2 -0
  178. package/package.json +1 -1
  179. package/dist/chunk-BRHQJLTG.js +0 -2
  180. package/dist/chunk-DSYEGRQ2.js +0 -3
  181. package/dist/chunk-F5BSUC2L.js +0 -3
  182. package/dist/chunk-NFQLONFY.js +0 -3
  183. package/dist/chunk-OVDYPOHR.js +0 -2
  184. package/dist/chunk-XHJ27CER.js +0 -2
  185. package/dist/doctor-JLTCBMS4.js +0 -2
  186. package/dist/graph-VLMP6DW2.js +0 -2
  187. package/dist/init-ZS7RAR7L.js +0 -2
  188. package/dist/journal-loader-EELDB4P2.js +0 -2
  189. package/dist/lore-loader-CP5RUJ4A.js +0 -2
  190. package/dist/notebook-loader-CF52PNZC.js +0 -2
  191. package/dist/reindex-F7EV3Z34.js +0 -2
  192. package/dist/session-tracker-VSFRNFRL.js +0 -2
  193. package/dist/tools-4WKLLDFU.js +0 -2
  194. package/dist/workspace-CE6LNXVI.js +0 -2
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import {a}from'./chunk-7SWEOPWF.js';import {a as a$1}from'./chunk-DSYEGRQ2.js';import*as s from'fs';import*as o from'path';import*as x from'os';import*as l from'crypto';function Y(t){return t.contentType!==void 0&&a.includes(t.contentType)}function st(t,n,e){try{let r={id:l.randomUUID(),timestamp:new Date().toISOString(),agent:t,boundary:e,data_category:n.contentType,action:"blocked",destination_ring:"network-public",details:n.id},i=o.join(x.homedir(),".paradigm","events","audit-ring1.jsonl");F(i,r);}catch(r){a$1.component("#symphony-loader").warn(`Ring 1 audit write failed: ${r}`);}}var g=o.join(x.homedir(),".paradigm","score"),D=o.join(x.homedir(),".paradigm","mail"),y=o.join(g,"agents"),h=o.join(g,"threads"),S=o.join(g,"file-requests"),w=o.join(g,"trust.yaml"),Q=3600*1e3,P={users:{},defaults:{level:"restricted",autoApprove:[],neverApprove:[".env*","**/*.key","**/*.pem","**/credentials*","**/secrets/**"]}};function V(){if(s.existsSync(D)&&!s.existsSync(g))try{s.renameSync(D,g);}catch{}}function d(){V();for(let t of [y,h,S])s.existsSync(t)||s.mkdirSync(t,{recursive:true});}function p(t){return o.join(y,t)}function R(t){let n=p(t);return s.existsSync(n)||s.mkdirSync(n,{recursive:true}),n}function m(t){if(!s.existsSync(t))return [];let e=s.readFileSync(t,"utf-8").split(`
2
+ import {a}from'./chunk-7SWEOPWF.js';import {a as a$1}from'./chunk-MBPLJKE5.js';import*as s from'fs';import*as o from'path';import*as x from'os';import*as l from'crypto';function Y(t){return t.contentType!==void 0&&a.includes(t.contentType)}function st(t,n,e){try{let r={id:l.randomUUID(),timestamp:new Date().toISOString(),agent:t,boundary:e,data_category:n.contentType,action:"blocked",destination_ring:"network-public",details:n.id},i=o.join(x.homedir(),".paradigm","events","audit-ring1.jsonl");F(i,r);}catch(r){a$1.component("#symphony-loader").warn(`Ring 1 audit write failed: ${r}`);}}var g=o.join(x.homedir(),".paradigm","score"),D=o.join(x.homedir(),".paradigm","mail"),y=o.join(g,"agents"),h=o.join(g,"threads"),S=o.join(g,"file-requests"),w=o.join(g,"trust.yaml"),Q=3600*1e3,P={users:{},defaults:{level:"restricted",autoApprove:[],neverApprove:[".env*","**/*.key","**/*.pem","**/credentials*","**/secrets/**"]}};function V(){if(s.existsSync(D)&&!s.existsSync(g))try{s.renameSync(D,g);}catch{}}function d(){V();for(let t of [y,h,S])s.existsSync(t)||s.mkdirSync(t,{recursive:true});}function p(t){return o.join(y,t)}function R(t){let n=p(t);return s.existsSync(n)||s.mkdirSync(n,{recursive:true}),n}function m(t){if(!s.existsSync(t))return [];let e=s.readFileSync(t,"utf-8").split(`
3
3
  `).filter(i=>i.trim().length>0),r=[];for(let i of e)try{r.push(JSON.parse(i));}catch{}return r}function F(t,n){let e=o.dirname(t);s.existsSync(e)||s.mkdirSync(e,{recursive:true}),s.appendFileSync(t,JSON.stringify(n)+`
4
4
  `,"utf-8");}function N(t){return t.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").slice(0,40)||"unknown"}function J(t){try{let n=o.join(t,".paradigm","config.yaml");if(s.existsSync(n)){let r=s.readFileSync(n,"utf-8").match(/^project:\s*(.+)$/m);if(r)return N(r[1].trim().replace(/["']/g,""))}}catch{}return N(o.basename(t))}function $(t,n){return `${J(t)}/${n||"core"}`}function it(t,n,e){d();let r=$(t,n),i=R(r),a=J(t),c={id:r,name:e||`${a} (${n||"core"})`,type:"agent",project:a,role:n||"core",pid:process.pid,startedAt:new Date().toISOString(),label:e};return s.writeFileSync(o.join(i,"identity.json"),JSON.stringify(c,null,2),"utf-8"),c}function Z(t){let n=p(t);if(!s.existsSync(n))return false;try{return s.rmSync(n,{recursive:!0,force:!0}),!0}catch{return false}}function A(){if(d(),!s.existsSync(y))return [];let t=[],n=s.readdirSync(y,{withFileTypes:true}).filter(e=>e.isDirectory());for(let e of n){let r=o.join(y,e.name),i=s.readdirSync(r,{withFileTypes:true}).filter(a=>a.isDirectory());for(let a of i){let c=o.join(r,a.name,"identity.json");if(s.existsSync(c))try{let u=s.readFileSync(c,"utf-8"),f=JSON.parse(u);t.push(f);}catch{}}}return t}function ot(){let t=A(),n=0;for(let e of t)b(e.pid)||(Z(e.id),n++);return n}function at(t){let n=$(t),e=o.join(p(n),"identity.json");if(!s.existsSync(e))return null;try{return JSON.parse(s.readFileSync(e,"utf-8"))}catch{return null}}function ct(t,n){let e=o.join(p(t),"identity.json");if(s.existsSync(e))try{let r=JSON.parse(s.readFileSync(e,"utf-8"));r.lastPoll=new Date().toISOString(),n!==void 0&&(r.statusBlurb=n||void 0),s.writeFileSync(e,JSON.stringify(r,null,2),"utf-8");}catch{}}function ut(t,n=6e4){if(!t.lastPoll)return true;let e=new Date(t.lastPoll).getTime();return Date.now()-e>n}function ft(){let n=A().filter(e=>b(e.pid));try{let e=o.join(x.homedir(),".conductor","sessions");if(s.existsSync(e)){let r=s.readdirSync(e).filter(i=>i.endsWith(".json"));for(let i of r)try{let a=s.readFileSync(o.join(e,i),"utf-8"),c=JSON.parse(a),u=parseInt(o.basename(i,".json"),10);!n.some(f=>f.pid===u)&&b(u)&&n.push({id:`conductor/${u}`,name:c.label||`Session ${u}`,type:"agent",project:c.projectDir?o.basename(c.projectDir):"unknown",role:"conductor",pid:u,startedAt:c.registeredAt||new Date().toISOString()});}catch{}}}catch{}return n}function T(t){return o.join(p(t),"inbox.jsonl")}function I(t){return o.join(p(t),"outbox.jsonl")}function _(t){return o.join(p(t),"ack.json")}function E(t,n){R(t),F(T(t),n);}function lt(t,n){let e=m(T(t));if(!n){let i=z(t);if(i){let a=e.findIndex(c=>c.id===i);if(a>=0)return e.slice(a+1)}return e}let r=e.findIndex(i=>i.id===n);return r>=0?e.slice(r+1):e}function X(t,n){R(t),F(I(t),n);}function dt(t){return m(I(t))}function pt(t,n){let e=_(t);R(t),s.writeFileSync(e,JSON.stringify({lastAck:n}),"utf-8");}function z(t){let n=_(t);if(!s.existsSync(n))return null;try{return JSON.parse(s.readFileSync(n,"utf-8")).lastAck||null}catch{return null}}function gt(t){let n=z(t);if(!n)return 0;let e=T(t),r=m(e),i=r.findIndex(u=>u.id===n);if(i<0)return 0;let a=r.slice(i+1),c=r.length-a.length;return a.length===0?s.existsSync(e)&&s.writeFileSync(e,"","utf-8"):s.writeFileSync(e,a.map(u=>JSON.stringify(u)).join(`
5
5
  `)+`
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import {b}from'./chunk-77WX6HGV.js';import {a as a$2,g as g$1,h,d as d$1,f}from'./chunk-UIKLE3WD.js';import {g}from'./chunk-T6IDXUUA.js';import {c}from'./chunk-JIXHEBGK.js';import {c as c$1,d,e}from'./chunk-DOCDDDTD.js';import {a as a$1}from'./chunk-LKAT7IAK.js';import*as o from'fs';import*as a from'path';import {fileURLToPath}from'url';import t from'chalk';import U from'ora';function w(s){try{return o.readFileSync(s,"utf8").split(`
2
+ import {b}from'./chunk-LBQBWIEX.js';import {a as a$2,g as g$1,h,d as d$1,f}from'./chunk-UIKLE3WD.js';import {g}from'./chunk-T6IDXUUA.js';import {c}from'./chunk-JIXHEBGK.js';import {c as c$1,d,e}from'./chunk-DOCDDDTD.js';import {a as a$1}from'./chunk-LKAT7IAK.js';import*as o from'fs';import*as a from'path';import {fileURLToPath}from'url';import t from'chalk';import U from'ora';function w(s){try{return o.readFileSync(s,"utf8").split(`
3
3
  `).length}catch{return 0}}function W(s){let i=g$1(s);if(i&&f[i])return f[i].name;let e=a$2(s);if(e!=="backend")return e.charAt(0).toUpperCase()+e.slice(1)}function _(s){let i=[],e=0,n={name:"cursor",displayName:"Cursor"},d=a.join(s,".cursorrules"),r=a.join(s,".cursor","rules");if(o.existsSync(d)){let c=w(d);n.legacy={path:".cursorrules",lines:c,type:"legacy"},e+=c;}if(o.existsSync(r)){let c=o.readdirSync(r).filter(m=>m.endsWith(".mdc"));c.length>0&&(n.modern=c.map(m=>{let x=a.join(r,m),j=w(x);return e+=j,{path:`.cursor/rules/${m}`,lines:j,type:"modern"}}));}(n.legacy||n.modern)&&i.push(n);let u={name:"copilot",displayName:"GitHub Copilot"},l=a.join(s,".github","copilot-instructions.md"),f=a.join(s,".github","instructions");if(o.existsSync(l)){let c=w(l);u.legacy={path:".github/copilot-instructions.md",lines:c,type:"legacy"},e+=c;}if(o.existsSync(f)){let c=o.readdirSync(f).filter(m=>m.endsWith(".md"));c.length>0&&(u.modern=c.map(m=>{let x=a.join(f,m),j=w(x);return e+=j,{path:`.github/instructions/${m}`,lines:j,type:"modern"}}));}(u.legacy||u.modern)&&i.push(u);let h=a.join(s,".windsurfrules");if(o.existsSync(h)){let c=w(h);i.push({name:"windsurf",displayName:"Windsurf",legacy:{path:".windsurfrules",lines:c,type:"legacy"}}),e+=c;}let b=a.join(s,"CLAUDE.md");if(o.existsSync(b)){let c=w(b);i.push({name:"claude",displayName:"Claude",legacy:{path:"CLAUDE.md",lines:c,type:"legacy"}}),e+=c;}let p=a.join(s,"AGENTS.md");if(o.existsSync(p)){let c=w(p);i.push({name:"agents",displayName:"AGENTS.md",legacy:{path:"AGENTS.md",lines:c,type:"legacy"}}),e+=c;}let y=a$2(s),g=g$1(s);return {ides:i,hasExisting:i.length>0,totalLines:e,projectType:W(s),discipline:y!=="backend"?y:void 0,stack:g||void 0}}function O(s,i){let e=[];e.push("# Migrate IDE Instructions to Paradigm Format"),e.push(""),e.push("## Overview"),e.push(""),e.push(`Migrate existing IDE instruction files for **${i}** to Paradigm's managed, scoped format.`),e.push(""),e.push("## Source Files Found"),e.push("");for(let n of s.ides)if(n.legacy&&e.push(`- \`${n.legacy.path}\` (${n.legacy.lines} lines) - ${n.displayName} ${n.legacy.type} format`),n.modern)for(let d of n.modern)e.push(`- \`${d.path}\` (${d.lines} lines) - ${n.displayName} modern format`);return e.push(""),s.ides.some(n=>n.name==="cursor")&&(e.push("## Cursor Migration \u2192 `.cursor/rules/*.mdc`"),e.push(""),e.push("Split the existing `.cursorrules` into scoped `.mdc` files with YAML frontmatter:"),e.push(""),e.push("### File Structure"),e.push(""),e.push("```"),e.push(".cursor/rules/"),e.push("\u251C\u2500\u2500 project-core.mdc # Always applies - project overview, architecture"),e.push("\u251C\u2500\u2500 code-style.mdc # globs: **/*.{ts,tsx,js,jsx} - naming, formatting"),e.push("\u251C\u2500\u2500 components.mdc # globs: **/components/**/* - component patterns"),e.push("\u251C\u2500\u2500 api-patterns.mdc # globs: **/api/**/* - API conventions"),e.push("\u251C\u2500\u2500 testing.mdc # globs: **/*.test.* - testing guidelines"),e.push("\u2514\u2500\u2500 custom.mdc # Any project-specific rules"),e.push("```"),e.push(""),e.push("### Frontmatter Format"),e.push(""),e.push("```yaml"),e.push("---"),e.push("description: Brief description of what these rules cover"),e.push('globs: "**/*.ts" # File pattern (OR use alwaysApply)'),e.push("alwaysApply: true # Apply to all files (OR use globs)"),e.push("---"),e.push("```"),e.push("")),s.ides.some(n=>n.name==="copilot")&&(e.push("## Copilot Migration \u2192 `.github/instructions/*.instructions.md`"),e.push(""),e.push("Split into scoped instruction files with `applyTo` frontmatter:"),e.push(""),e.push("### File Structure"),e.push(""),e.push("```"),e.push(".github/"),e.push("\u251C\u2500\u2500 copilot-instructions.md # Always applies - core rules"),e.push("\u2514\u2500\u2500 instructions/"),e.push(" \u251C\u2500\u2500 typescript.instructions.md # applyTo: **/*.ts"),e.push(" \u251C\u2500\u2500 react.instructions.md # applyTo: **/*.tsx"),e.push(" \u251C\u2500\u2500 api.instructions.md # applyTo: **/api/**"),e.push(" \u2514\u2500\u2500 testing.instructions.md # applyTo: **/*.test.*"),e.push("```"),e.push(""),e.push("### Frontmatter Format"),e.push(""),e.push("```yaml"),e.push("---"),e.push('applyTo: "**/*.ts"'),e.push("---"),e.push("```"),e.push("")),e.push("## Migration Steps"),e.push(""),e.push("1. **Read each source file** and identify logical sections:"),e.push(" - Project overview / architecture"),e.push(" - Code style / naming conventions"),e.push(" - Language-specific patterns"),e.push(" - Framework-specific rules"),e.push(" - Testing guidelines"),e.push(" - API patterns"),e.push(""),e.push("2. **Create scoped target files** with appropriate frontmatter"),e.push(""),e.push("3. **Backup originals** by renaming to `.bak`:"),e.push(" - `.cursorrules` \u2192 `.cursorrules.bak`"),e.push(" - `.github/copilot-instructions.md` \u2192 `.github/copilot-instructions.md.bak`"),e.push(""),e.push("4. **Verify** the migration by checking that rules apply correctly"),e.push(""),e.push("## Tips"),e.push(""),e.push("- **Prefer specific globs** over `alwaysApply` when possible"),e.push("- **Keep files focused** - one concern per file"),e.push("- **Use descriptive names** that indicate the scope"),e.push("- **Paradigm will generate its own rules** - keep custom rules separate"),e.push("- After migration, run `paradigm sync` to add Paradigm-managed rules"),e.push(""),e.push("---"),e.push(""),e.push("*Generated by `paradigm init --migrate`*"),e.join(`
4
4
  `)}function G(){let s=fileURLToPath(import.meta.url),i=a.dirname(s),e=[a.join(i,"..","..","templates","paradigm"),a.join(i,"..","templates","paradigm"),a.join(i,"..","..","src","templates","paradigm")];for(let n of e)if(o.existsSync(n))return n;return a.join(i,"..","templates","paradigm")}var A={directories:["prompts"],files:["echoes.yaml","docs/commands.md","docs/queries.md","specs/disciplines.md","specs/scan.md","specs/context-tracking.md"]};function z(s){for(let i of A.directories)if(s===i||s.startsWith(i+"/"))return true;return !!A.files.includes(s)}function M(s,i,e,n=""){o.existsSync(i)||o.mkdirSync(i,{recursive:true});let d=o.readdirSync(s,{withFileTypes:true});for(let r of d){let u=a.join(s,r.name),l=a.join(i,r.name),f=n?`${n}/${r.name}`:r.name;if(!z(f))if(r.isDirectory())M(u,l,e,f);else {let h=o.readFileSync(u,"utf8");h=h.replace(/\{\{PROJECT_NAME\}\}/g,e),o.writeFileSync(l,h,"utf8");}}}function L(s,i){if(console.log(t.blue(`
5
5
  \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510`)),console.log(t.blue("\u2502")+t.white.bold(" Welcome to Paradigm ")+t.blue("\u2502")),console.log(t.blue("\u2502")+t.gray(" Let's set up your project ")+t.blue("\u2502")),console.log(t.blue(`\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import {b as b$1}from'./chunk-5TAVYPOV.js';import {AsyncLocalStorage}from'async_hooks';function v(){let t=new Date,r=String(t.getHours()).padStart(2,"0"),e=String(t.getMinutes()).padStart(2,"0"),s=String(t.getSeconds()).padStart(2,"0"),o=String(t.getMilliseconds()).padStart(3,"0");return `${r}:${e}:${s}.${o}`}function S(t){return !t||Object.keys(t).length===0?"":" "+JSON.stringify(t)}function b(t,r,e,s,o,i){let n=d[t],a=t.toUpperCase().padEnd(5),f=v(),g=S(i?{correlationId:i,...o}:o);return `${n}${f}${c} ${y}${r}${c} ${n}${a}${c} ${s}${g}`}function w(t,r,e,s,o,i){let n={timestamp:new Date().toISOString(),level:t,symbol:r,symbolType:e,message:s,...o};return i&&(n.correlationId=i),JSON.stringify(n)}function O(){return L.getStore()}function T(){let t=typeof process<"u"?process.env:{},r=t.LOG_LEVEL;return r&&m[r]!==void 0?r:t.NODE_ENV==="production"?"info":"debug"}function D(){let t=typeof process<"u"?process.env:{};return t.PARADIGM_LOG_FORMAT==="json"||t.NODE_ENV==="production"?"json":"pretty"}function E(){let r=(typeof process<"u"?process.env:{}).PARADIGM_SYMBOLS;return r?r.split(",").map(e=>e.trim()).filter(Boolean):null}var d,y,c,L,m,I,h,u,p=b$1(()=>{d={debug:"\x1B[90m",info:"\x1B[36m",warn:"\x1B[33m",error:"\x1B[31m"},y="\x1B[1m",c="\x1B[0m";L=new AsyncLocalStorage;m={debug:0,info:1,warn:2,error:3};I=class{constructor(t){this.emit=t,this.startTime=Date.now();}startTime;success(t,r){this.end("info",t,r);}error(t,r){this.end("error",t,r);}end(t,r,e){let s=Date.now()-this.startTime;this.emit(t,r,{...e,duration:`${s}ms`});}},h=class{constructor(t,r,e,s,o,i,n=[]){this.symbol=t,this.symbolType=r,this.minLevel=e,this.symbolFilter=s,this.format=o,this.output=i,this.transports=n;}debug(t,r){this.emit("debug",t,r);}info(t,r){this.emit("info",t,r);}warn(t,r){this.emit("warn",t,r);}error(t,r){this.emit("error",t,r);}start(t,r){return this.emit("info",t,r),new I((e,s,o)=>this.emit(e,s,o))}emit(t,r,e){if(m[t]<m[this.minLevel])return;if(this.symbolFilter){let n=this.symbol.charAt(0);if(!this.symbolFilter.includes(n))return}let s=O(),i=(this.format==="json"?w:b)(t,this.symbol,this.symbolType,r,e,s);if(this.output(i),this.transports.length>0){let n={level:t,symbol:this.symbol,symbolType:this.symbolType,message:r,data:e,correlationId:s,timestamp:new Date().toISOString()};for(let a of this.transports)a.send(n);}}},u=class{level;symbolFilter;format;output;transports;constructor(t){this.level=t?.level??T(),this.symbolFilter=t?.symbols??E(),this.format=t?.format??D(),this.output=t?.output??(r=>console.log(r)),this.transports=t?.transports??[];}addTransport(t){this.transports.push(t);}removeTransport(t){let r=this.transports.indexOf(t);r!==-1&&this.transports.splice(r,1);}component(t){return this.create(t,"component","#")}gate(t){return this.create(t,"gate","^")}signal(t){return this.create(t,"signal","!")}flow(t){return this.create(t,"flow","$")}aspect(t){return this.create(t,"aspect","~")}raw(t){return new h(t,"raw",this.level,this.symbolFilter,this.format,this.output,this.transports)}create(t,r,e){let s=t.startsWith(e)?t:`${e}${t}`;return new h(s,r,this.level,this.symbolFilter,this.format,this.output,this.transports)}},new u;});var j,x=b$1(()=>{p();j=new u({output:t=>process.stderr.write(t+`
3
+ `)});});export{j as a,x as b};
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import {a as a$1,b as b$3,c as c$1}from'./chunk-M4UMM6DC.js';import {j,b as b$2,a as a$2}from'./chunk-W6WVJLHO.js';import {j as j$1,a,c,b as b$1,k as k$1}from'./chunk-NFQLONFY.js';import {d,b,f}from'./chunk-XHJ27CER.js';import*as x from'fs';import*as k from'path';import*as J from'crypto';import {execSync}from'child_process';import*as F from'js-yaml';import {z}from'zod';import {glob}from'glob';import*as ye from'os';import hs from'sql.js';var Nt={};d(Nt,{contentSearch:()=>ms,detectFileRename:()=>Ot,generateFingerprint:()=>At,levenshteinDistance:()=>Lt,levenshteinSimilarity:()=>Fe,searchSiblingFiles:()=>Ft,slidingWindowSearch:()=>be});function At(t){let e=t.split(`
2
+ import {a as a$1,b as b$3,c as c$2}from'./chunk-M4UMM6DC.js';import {j,b as b$2,a as a$2}from'./chunk-ODVKPZZ4.js';import {j as j$1,a,c as c$1,b as b$1,k as k$1}from'./chunk-UPFCBVXY.js';import {c,b,d}from'./chunk-5TAVYPOV.js';import*as x from'fs';import*as k from'path';import*as J from'crypto';import {execSync}from'child_process';import*as F from'js-yaml';import {z}from'zod';import {glob}from'glob';import*as ye from'os';import hs from'sql.js';var Nt={};c(Nt,{contentSearch:()=>ms,detectFileRename:()=>Ot,generateFingerprint:()=>At,levenshteinDistance:()=>Lt,levenshteinSimilarity:()=>Fe,searchSiblingFiles:()=>Ft,slidingWindowSearch:()=>be});function At(t){let e=t.split(`
3
3
  `).filter(s=>s.trim()!=="");return {firstLine:we(e[0]||""),lastLine:we(e[e.length-1]||""),lineCount:e.length,structuralHash:jt(e)}}function jt(t){let e=t.map(s=>s.trim()).filter(s=>Pt.test(s)).map(s=>{let n=s.match(Pt);return n?n[1].trim():""}).join("|");return J.createHash("sha256").update(e).digest("hex").slice(0,16)}function we(t){return t.trim().replace(/\s+/g," ").toLowerCase()}function Lt(t,e){if(t===e)return 0;if(t.length===0)return e.length;if(e.length===0)return t.length;t.length>e.length&&([t,e]=[e,t]);let s=t.length,n=e.length;if(s>5e3||n>5e3)return Math.abs(s-n);let o=new Array(s+1),r=new Array(s+1);for(let i=0;i<=s;i++)o[i]=i;for(let i=1;i<=n;i++){r[0]=i;for(let a=1;a<=s;a++){let c=t[a-1]===e[i-1]?0:1;r[a]=Math.min(o[a]+1,r[a-1]+1,o[a-1]+c);}[o,r]=[r,o];}return o[s]}function Fe(t,e){if(t.length===0&&e.length===0)return 1;let s=Math.max(t.length,e.length);return 1-Lt(t,e)/s}function be(t,e,s,n=3){let{lineCount:o}=e,r=Math.max(1,Math.floor(o*.8)),i=Math.ceil(o*1.2),a=[],c=Oe(s);for(let d of [o,r,i])if(!(d>t.length))for(let u=0;u<=t.length-d;u++){let p=t.slice(u,u+d),m=gs(p,e,c);if(m>=.5){let g=p.join(`
4
4
  `);a.push({windowStart:u+1,windowEnd:u+d,similarity:Fe(Oe(g),c),score:m});}}let l=new Map;for(let d of a){let u=l.get(d.windowStart);(!u||d.score>u.score)&&l.set(d.windowStart,d);}return Array.from(l.values()).sort((d,u)=>u.score-d.score).slice(0,n)}function gs(t,e,s){let n=t.filter(p=>p.trim()!=="");if(n.length===0)return 0;let o=0,r=we(n[0]),i=we(n[n.length-1]),a=0;r===e.firstLine&&(a+=.5),i===e.lastLine&&(a+=.5),o+=a*ds,jt(n)===e.structuralHash&&(o+=us);let l=n.join(`
5
5
  `),d=Fe(Oe(l),s);d>=.8&&(o+=(d-.8)/.2*ps);let u=n.length/e.lineCount;if(u>=.8&&u<=1.2){let p=1-Math.abs(1-u)/.2;o+=p*fs;}return o}function Oe(t){return t.split(`
@@ -21,7 +21,7 @@ ${r.map((T,E)=>`${E+1}. ${T}`).join(`
21
21
  - Modified files: ${a$1.length>0?a$1.join(", "):"(not specified)"}
22
22
  - Symbols touched: ${c.length>0?c.join(", "):"(not specified)"}
23
23
  - Open questions: ${l.length>0?l.join(", "):"(none)"}
24
- `;return os(),{handled:true,text:JSON.stringify({handoff:g,markdownSummary:v,persisted:h,recovery:"The next session will automatically receive this handoff via paradigm_session_recover."},null,2)}}if(t==="paradigm_session_stats"){let o=n.getStats(),r=n.getCostBreakdown(),i=n.getDurationMinutes();return {handled:true,text:JSON.stringify({session:{startTime:new Date(o.startTime).toISOString(),durationMinutes:i,lastActivity:new Date(o.lastActivity).toISOString()},model:{name:r.model,id:r.modelId,pricing:{inputPerMillion:`$${r.pricing.input.toFixed(2)}`,outputPerMillion:`$${r.pricing.output.toFixed(2)}`}},interactions:{toolCalls:o.totals.toolCallCount,resourceReads:o.totals.resourceReadCount,totalInteractions:o.totals.toolCallCount+o.totals.resourceReadCount},tokens:{total:o.totals.totalTokens,byCategory:{resources:r.resources.tokens,tools:r.tools.tokens}},cost:{totalUsd:`$${r.total.costUsd.toFixed(4)}`,breakdown:{resources:`$${r.resources.costUsd.toFixed(4)}`,tools:`$${r.tools.costUsd.toFixed(4)}`},note:"Cost is for MCP output tokens only (responses sent to model)"},details:{resourcesByType:r.resources.byType,toolsByName:r.tools.byName}},null,2)}}if(t==="paradigm_session_recover"){let{checkpoint:o,pendingHandoffs:r,previousSession:i}=$t(s.rootDir);if(!i&&r.length===0&&!o)return {handled:true,text:JSON.stringify({found:false,message:"No previous session breadcrumbs, checkpoints, or pending handoffs found.",tip:"Breadcrumbs persist to ~/.paradigm/sessions/ and handoffs persist via paradigm_handoff_prepare. Checkpoints persist via paradigm_session_checkpoint."},null,2)};let a={found:true};if(o){let l=Date.now()-o.timestamp,d=Math.round(l/6e4),u=Math.round(l/36e5);a.checkpoint={phase:o.phase,context:o.context,age:u>1?`${u} hours ago`:`${d} minutes ago`,timestamp:new Date(o.timestamp).toISOString(),sessionId:o.sessionId,plan:o.plan,modifiedFiles:o.modifiedFiles,symbolsTouched:o.symbolsTouched,decisions:o.decisions,recentBreadcrumbs:o.recentBreadcrumbs?.map(p=>({time:new Date(p.timestamp).toISOString(),action:p.action,tool:p.tool,symbol:p.symbol,summary:p.summary}))};}if(i){let l=Date.now()-i.lastActivity,d=Math.round(l/6e4),u=Math.round(l/36e5),m=i.breadcrumbs.slice(-10).map(g=>({time:new Date(g.timestamp).toISOString(),action:g.action,tool:g.tool,symbol:g.symbol,summary:g.summary}));a.previousSession={sessionId:i.sessionId,startTime:new Date(i.startTime).toISOString(),lastActivity:new Date(i.lastActivity).toISOString(),age:u>1?`${u} hours ago`:`${d} minutes ago`},a.context={symbolsModified:i.symbolsModified,filesExplored:i.filesExplored},a.recentActions=m;}if(r.length>0){a.pendingHandoffs=r.map(l=>({id:l.id,timestamp:l.timestamp,from:l.from,to:l.to,summary:l.summary,nextSteps:l.nextSteps,modifiedFiles:l.modifiedFiles,symbolsTouched:l.symbolsTouched,openQuestions:l.openQuestions}));for(let l of r)try{c(s.rootDir,l.id);}catch{}}let c$1="Continue where the previous session left off.";if(o)c$1=`Previous session was in "${o.phase}" phase: ${o.context}`,o.decisions?.length&&(c$1+=` Key decisions: ${o.decisions.slice(0,2).join("; ")}`);else if(r.length>0){let l=r[r.length-1];c$1=`Handoff received: "${l.summary}". `,l.nextSteps.length>0&&(c$1+=`Start with: ${l.nextSteps[0]}`);}else if(i){let l=i.breadcrumbs.slice(-10);if(l.length>0){let d=l[l.length-1];d.symbol&&(c$1=`Last work involved ${d.symbol}. Consider checking its current state with paradigm_ripple.`);}}return a.suggestion=c$1,a.agentInstruction="Present a brief summary of the previous session, then ask the user what they would like to do: (1) Continue \u2014 pick up where the last session left off, (2) Discard \u2014 ignore the previous session and start fresh, or (3) let them describe what they want to work on instead. Do NOT automatically continue without asking.",n.markRecovered(),{handled:true,text:JSON.stringify(a,null,2)}}if(t==="paradigm_session_checkpoint"){n.setRootDir(s.rootDir);let o=e.phase,r=e.context,i=e.externalId,a=e.plan,c=e.modifiedFiles,l=e.symbolsTouched,d=e.decisions,{checkpoint:u,persisted:p}=n.saveCheckpoint({phase:o,context:r,externalId:i,plan:a,modifiedFiles:c,symbolsTouched:l,decisions:d}),m=p.local||p.global;return {handled:true,text:JSON.stringify({saved:m,persisted:p,checkpoint:{phase:u.phase,context:u.context,sessionId:u.sessionId,...u.externalId?{externalId:u.externalId}:{},timestamp:new Date(u.timestamp).toISOString(),modifiedFiles:u.modifiedFiles?.length||0,symbolsTouched:u.symbolsTouched?.length||0,decisions:u.decisions?.length||0,recentBreadcrumbs:u.recentBreadcrumbs?.length||0},...m?{note:"Checkpoint saved. Recovery data will be auto-surfaced on the first tool call of the next session."}:{warning:"Checkpoint was NOT persisted to disk. Both local and global writes failed. Check MCP server stderr for details."}},null,2)}}return {handled:false,text:""}}function $t(t){let e=j$1();e.setRootDir(t);let s=e.loadCheckpoint(),n=e.loadPreviousSession(),o=[];try{o=b$1(t);}catch{}return {checkpoint:s,pendingHandoffs:o,previousSession:n}}async function Go(t){let{checkpoint:e,pendingHandoffs:s}=$t(t);if(!e&&s.length===0)return null;let n=[];if(n.push("--- SESSION RECOVERY ---"),e){let o=Date.now()-e.timestamp,r=Math.round(o/6e4),i=Math.round(o/36e5),a=i>1?`${i}h ago`:`${r}m ago`;n.push(`Previous session was in "${e.phase}" phase (${a}): ${e.context}`),e.modifiedFiles?.length&&n.push(`Modified files: ${e.modifiedFiles.join(", ")}`),e.symbolsTouched?.length&&n.push(`Symbols: ${e.symbolsTouched.join(", ")}`),e.decisions?.length&&n.push(`Decisions: ${e.decisions.join("; ")}`),e.plan&&n.push(`Plan: ${e.plan.slice(0,200)}`);}if(s.length>0){let o=s[s.length-1];n.push(`Pending handoff: "${o.summary}"`),o.nextSteps.length>0&&n.push(`Next steps: ${o.nextSteps.slice(0,3).join(", ")}`);}try{let{loadTasks:o}=await import('./task-loader-EU7JLTR3.js'),r=await o(t,{status:"open",limit:5});if(r.length>0){n.push(""),n.push("Open tasks:");for(let i of r){let a=i.tags.length>0?` [${i.tags.join(", ")}]`:"";n.push(` [${i.priority}] ${i.id}: ${i.blurb}${a}`);}}}catch{}try{let{loadLoreEntries:o}=await import('./lore-loader-CP5RUJ4A.js'),i=(await o(t,{limit:10})).filter(a=>a.tags?.some(c=>c.startsWith("arc:")));if(i.length>0){let a=new Map;for(let d of i){let u=d.tags?.find(p=>p.startsWith("arc:"))||"";a.set(u,(a.get(u)||0)+1);}let c=e?.symbolsTouched||[];if((c.length>0?i.filter(d=>d.symbols_touched?.some(u=>c.includes(u))):i.slice(0,3)).length>0||a.size>0){n.push(""),n.push("Active lore arcs:");for(let[d,u]of a)n.push(` ${d} (${u} entries)`);}}}catch{}try{let{loadNominations:o}=await import('./nomination-engine-A24774W4.js'),r=o(t,{pending_only:!0}).filter(i=>i.urgency==="critical"||i.urgency==="high");if(r.length>0){n.push(""),n.push("Ambient nominations (urgent):");for(let i of r.slice(0,5))n.push(` [${i.urgency}] ${i.brief}`);r.length>5&&n.push(` ... and ${r.length-5} more. Use paradigm_ambient_nominations to see all.`);}}catch{}return n.push(""),n.push("IMPORTANT: Present a brief summary of this recovery data to the user, then ask what they would like to do: (1) Continue \u2014 pick up where the last session left off, (2) Discard \u2014 ignore the previous session and start fresh, or (3) let them describe what they want to work on instead. Do NOT automatically continue without asking."),n.push("---"),n.join(`
24
+ `;return os(),{handled:true,text:JSON.stringify({handoff:g,markdownSummary:v,persisted:h,recovery:"The next session will automatically receive this handoff via paradigm_session_recover."},null,2)}}if(t==="paradigm_session_stats"){let o=n.getStats(),r=n.getCostBreakdown(),i=n.getDurationMinutes();return {handled:true,text:JSON.stringify({session:{startTime:new Date(o.startTime).toISOString(),durationMinutes:i,lastActivity:new Date(o.lastActivity).toISOString()},model:{name:r.model,id:r.modelId,pricing:{inputPerMillion:`$${r.pricing.input.toFixed(2)}`,outputPerMillion:`$${r.pricing.output.toFixed(2)}`}},interactions:{toolCalls:o.totals.toolCallCount,resourceReads:o.totals.resourceReadCount,totalInteractions:o.totals.toolCallCount+o.totals.resourceReadCount},tokens:{total:o.totals.totalTokens,byCategory:{resources:r.resources.tokens,tools:r.tools.tokens}},cost:{totalUsd:`$${r.total.costUsd.toFixed(4)}`,breakdown:{resources:`$${r.resources.costUsd.toFixed(4)}`,tools:`$${r.tools.costUsd.toFixed(4)}`},note:"Cost is for MCP output tokens only (responses sent to model)"},details:{resourcesByType:r.resources.byType,toolsByName:r.tools.byName}},null,2)}}if(t==="paradigm_session_recover"){let{checkpoint:o,pendingHandoffs:r,previousSession:i}=$t(s.rootDir);if(!i&&r.length===0&&!o)return {handled:true,text:JSON.stringify({found:false,message:"No previous session breadcrumbs, checkpoints, or pending handoffs found.",tip:"Breadcrumbs persist to ~/.paradigm/sessions/ and handoffs persist via paradigm_handoff_prepare. Checkpoints persist via paradigm_session_checkpoint."},null,2)};let a={found:true};if(o){let l=Date.now()-o.timestamp,d=Math.round(l/6e4),u=Math.round(l/36e5);a.checkpoint={phase:o.phase,context:o.context,age:u>1?`${u} hours ago`:`${d} minutes ago`,timestamp:new Date(o.timestamp).toISOString(),sessionId:o.sessionId,plan:o.plan,modifiedFiles:o.modifiedFiles,symbolsTouched:o.symbolsTouched,decisions:o.decisions,recentBreadcrumbs:o.recentBreadcrumbs?.map(p=>({time:new Date(p.timestamp).toISOString(),action:p.action,tool:p.tool,symbol:p.symbol,summary:p.summary}))};}if(i){let l=Date.now()-i.lastActivity,d=Math.round(l/6e4),u=Math.round(l/36e5),m=i.breadcrumbs.slice(-10).map(g=>({time:new Date(g.timestamp).toISOString(),action:g.action,tool:g.tool,symbol:g.symbol,summary:g.summary}));a.previousSession={sessionId:i.sessionId,startTime:new Date(i.startTime).toISOString(),lastActivity:new Date(i.lastActivity).toISOString(),age:u>1?`${u} hours ago`:`${d} minutes ago`},a.context={symbolsModified:i.symbolsModified,filesExplored:i.filesExplored},a.recentActions=m;}if(r.length>0){a.pendingHandoffs=r.map(l=>({id:l.id,timestamp:l.timestamp,from:l.from,to:l.to,summary:l.summary,nextSteps:l.nextSteps,modifiedFiles:l.modifiedFiles,symbolsTouched:l.symbolsTouched,openQuestions:l.openQuestions}));for(let l of r)try{c$1(s.rootDir,l.id);}catch{}}let c="Continue where the previous session left off.";if(o)c=`Previous session was in "${o.phase}" phase: ${o.context}`,o.decisions?.length&&(c+=` Key decisions: ${o.decisions.slice(0,2).join("; ")}`);else if(r.length>0){let l=r[r.length-1];c=`Handoff received: "${l.summary}". `,l.nextSteps.length>0&&(c+=`Start with: ${l.nextSteps[0]}`);}else if(i){let l=i.breadcrumbs.slice(-10);if(l.length>0){let d=l[l.length-1];d.symbol&&(c=`Last work involved ${d.symbol}. Consider checking its current state with paradigm_ripple.`);}}return a.suggestion=c,a.agentInstruction="Present a brief summary of the previous session, then ask the user what they would like to do: (1) Continue \u2014 pick up where the last session left off, (2) Discard \u2014 ignore the previous session and start fresh, or (3) let them describe what they want to work on instead. Do NOT automatically continue without asking.",n.markRecovered(),{handled:true,text:JSON.stringify(a,null,2)}}if(t==="paradigm_session_checkpoint"){n.setRootDir(s.rootDir);let o=e.phase,r=e.context,i=e.externalId,a=e.plan,c=e.modifiedFiles,l=e.symbolsTouched,d=e.decisions,{checkpoint:u,persisted:p}=n.saveCheckpoint({phase:o,context:r,externalId:i,plan:a,modifiedFiles:c,symbolsTouched:l,decisions:d}),m=p.local||p.global;return {handled:true,text:JSON.stringify({saved:m,persisted:p,checkpoint:{phase:u.phase,context:u.context,sessionId:u.sessionId,...u.externalId?{externalId:u.externalId}:{},timestamp:new Date(u.timestamp).toISOString(),modifiedFiles:u.modifiedFiles?.length||0,symbolsTouched:u.symbolsTouched?.length||0,decisions:u.decisions?.length||0,recentBreadcrumbs:u.recentBreadcrumbs?.length||0},...m?{note:"Checkpoint saved. Recovery data will be auto-surfaced on the first tool call of the next session."}:{warning:"Checkpoint was NOT persisted to disk. Both local and global writes failed. Check MCP server stderr for details."}},null,2)}}return {handled:false,text:""}}function $t(t){let e=j$1();e.setRootDir(t);let s=e.loadCheckpoint(),n=e.loadPreviousSession(),o=[];try{o=b$1(t);}catch{}return {checkpoint:s,pendingHandoffs:o,previousSession:n}}async function Go(t){let{checkpoint:e,pendingHandoffs:s}=$t(t);if(!e&&s.length===0)return null;let n=[];if(n.push("--- SESSION RECOVERY ---"),e){let o=Date.now()-e.timestamp,r=Math.round(o/6e4),i=Math.round(o/36e5),a=i>1?`${i}h ago`:`${r}m ago`;n.push(`Previous session was in "${e.phase}" phase (${a}): ${e.context}`),e.modifiedFiles?.length&&n.push(`Modified files: ${e.modifiedFiles.join(", ")}`),e.symbolsTouched?.length&&n.push(`Symbols: ${e.symbolsTouched.join(", ")}`),e.decisions?.length&&n.push(`Decisions: ${e.decisions.join("; ")}`),e.plan&&n.push(`Plan: ${e.plan.slice(0,200)}`);}if(s.length>0){let o=s[s.length-1];n.push(`Pending handoff: "${o.summary}"`),o.nextSteps.length>0&&n.push(`Next steps: ${o.nextSteps.slice(0,3).join(", ")}`);}try{let{loadTasks:o}=await import('./task-loader-NZFDTUQ5.js'),r=await o(t,{status:"open",limit:5});if(r.length>0){n.push(""),n.push("Open tasks:");for(let i of r){let a=i.tags.length>0?` [${i.tags.join(", ")}]`:"";n.push(` [${i.priority}] ${i.id}: ${i.blurb}${a}`);}}}catch{}try{let{loadLoreEntries:o}=await import('./lore-loader-RVQI5GXL.js'),i=(await o(t,{limit:10})).filter(a=>a.tags?.some(c=>c.startsWith("arc:")));if(i.length>0){let a=new Map;for(let d of i){let u=d.tags?.find(p=>p.startsWith("arc:"))||"";a.set(u,(a.get(u)||0)+1);}let c=e?.symbolsTouched||[];if((c.length>0?i.filter(d=>d.symbols_touched?.some(u=>c.includes(u))):i.slice(0,3)).length>0||a.size>0){n.push(""),n.push("Active lore arcs:");for(let[d,u]of a)n.push(` ${d} (${u} entries)`);}}}catch{}try{let{loadNominations:o}=await import('./nomination-engine-KNSOAT4W.js'),r=o(t,{pending_only:!0}).filter(i=>i.urgency==="critical"||i.urgency==="high");if(r.length>0){n.push(""),n.push("Ambient nominations (urgent):");for(let i of r.slice(0,5))n.push(` [${i.urgency}] ${i.brief}`);r.length>5&&n.push(` ... and ${r.length-5} more. Use paradigm_ambient_nominations to see all.`);}}catch{}return n.push(""),n.push("IMPORTANT: Present a brief summary of this recovery data to the user, then ask what they would like to do: (1) Continue \u2014 pick up where the last session left off, (2) Discard \u2014 ignore the previous session and start fresh, or (3) let them describe what they want to work on instead. Do NOT automatically continue without asking."),n.push("---"),n.join(`
25
25
  `)}var Le=class{cache=new Map;ttlMs;constructor(e=3e4){this.ttlMs=e;}async getOrCompute(e,s){let n=this.cache.get(e);if(n&&Date.now()-n.createdAt<this.ttlMs)return n.data;let o=await s();return this.cache.set(e,{data:o,createdAt:Date.now()}),o}invalidate(e){this.cache.delete(e);}invalidatePrefix(e){for(let s of this.cache.keys())s.startsWith(e)&&this.cache.delete(s);}clear(){this.cache.clear();}stats(){return {size:this.cache.size,ttlMs:this.ttlMs}}},Rt=new Le(3e4);var is=300*1e3,ae=null;function kt(){ae=null;}function G(t,e){return x.existsSync(k.join(t,e))}function Y(t,e){return x.existsSync(k.join(t,e))}function as(t,e,s){let n=t;try{if(!x.existsSync(n))return !1;let o=x.readdirSync(n,{withFileTypes:!0});for(let r of o){if(r.isFile()&&r.name.endsWith(e))return !0;if(r.isDirectory())try{if(x.readdirSync(k.join(n,r.name)).some(a=>a.endsWith(e)))return !0}catch{}}}catch{}return false}var cs={wisdom:t=>G(t,".paradigm/wisdom"),history:t=>G(t,".paradigm/history"),lore:t=>G(t,".paradigm/lore"),habits:t=>Y(t,".paradigm/habits.yaml"),sentinel:t=>{try{let e=k.join(t,".paradigm","config.yaml");return x.existsSync(e)?x.readFileSync(e,"utf-8").includes("sentinel"):!1}catch{return false}},flows:t=>Y(t,".paradigm/flow-index.json")||Y(t,".paradigm/flows.yaml"),fixtures:t=>Y(t,".paradigm/fixtures.yaml"),orchestration:t=>Y(t,".paradigm/agents.yaml"),tasks:t=>G(t,".paradigm/tasks"),assessment:t=>G(t,".paradigm/lore"),personas:t=>as(t,".persona"),protocols:t=>G(t,".paradigm/protocols"),symphony:()=>{let t=k.join(ye.homedir(),".paradigm","score");return x.existsSync(t)},university:t=>G(t,".paradigm/university"),agents:t=>{let e=k.join(ye.homedir(),".paradigm","agents");return G(t,".paradigm/agents")||x.existsSync(e)},"aspect-graph":t=>Y(t,".paradigm/aspect-graph.db"),pan:t=>Y(t,".pan")||Y(t,"nevr.yaml"),notebooks:t=>{let e=k.join(ye.homedir(),".paradigm","notebooks");return G(t,".paradigm/notebooks")||x.existsSync(e)}},It=class{modules=new Map;activatedAdvanced=new Set;rootDir;constructor(e){this.rootDir=e;}register(e){this.modules.set(e.key,e);}registerAll(e){for(let s of e)this.register(s);}detectActiveFeatures(){if(ae&&Date.now()-ae.timestamp<is)return ae.features;let e=new Set;for(let[s,n]of this.modules){if(n.tier==="core"){e.add(s);continue}if(n.tier==="advanced"){this.activatedAdvanced.has(s)&&e.add(s);continue}let o=n.detect||cs[s];if(o)try{o(this.rootDir)&&e.add(s);}catch{}else e.add(s);}return ae={features:e,timestamp:Date.now()},e}getActiveTools(){let e=this.detectActiveFeatures(),s=[];for(let[n,o]of this.modules)e.has(n)&&s.push(...o.getToolsList());return s}activateAdvanced(e){let s=this.modules.get(e);return !s||s.tier!=="advanced"?null:(this.activatedAdvanced.add(e),s.getToolsList())}getAvailableAdvanced(){let e=[];for(let[s,n]of this.modules)n.tier==="advanced"&&!this.activatedAdvanced.has(s)&&e.push({key:s,toolCount:n.getToolsList().length});return e}async dispatch(e,s,n,o){let r=this.detectActiveFeatures();for(let[i,a]of this.modules)if(r.has(i))try{let c=await a.handleTool(e,s,n,o);if(c.handled)return c}catch(c){return {handled:true,text:JSON.stringify({error:`Tool handler error in module "${i}"`,message:c.message},null,2)}}return null}get size(){return this.modules.size}getRegistryInfo(){let e=this.detectActiveFeatures(),s={core:0,feature:0,advanced:0};for(let n of this.modules.values())s[n.tier]++;return {total:this.modules.size,byTier:s,activeFeatures:[...e],availableAdvanced:[...this.modules.entries()].filter(([n,o])=>o.tier==="advanced"&&!this.activatedAdvanced.has(n)).map(([n])=>n)}}};var Ne=null;async function ys(){return Ne||(Ne=await hs()),Ne}var ws=[`CREATE TABLE IF NOT EXISTS aspects (
26
26
  id TEXT PRIMARY KEY,
27
27
  description TEXT NOT NULL,
@@ -99,13 +99,13 @@ ${r.map((T,E)=>`${E+1}. ${T}`).join(`
99
99
  DO UPDATE SET count = count + 1, last_accessed = ?`,[e,s,n,n]);}function sr(t,e=20,s){return s?H(t,"SELECT * FROM heatmap WHERE access_type = ? ORDER BY count DESC LIMIT ?",[s,e]):H(t,"SELECT * FROM heatmap ORDER BY count DESC LIMIT ?",[e])}function or(t,e,s,n=true,o=.7,r=.85){let i=s?H(t,"SELECT * FROM anchors WHERE aspect_id = ?",[s]):H(t,"SELECT * FROM anchors"),a=[];for(let c of i){let l=k.isAbsolute(c.file_path)?c.file_path:k.join(e,c.file_path);if(!x.existsSync(l)){a.push({aspectId:c.aspect_id,path:c.file_path,startLine:c.start_line,endLine:c.end_line,status:"missing",resolvedBy:"none",exists:false,drifted:true});continue}try{let u=x.readFileSync(l,"utf8").split(`
100
100
  `),p=Math.max(0,c.start_line-1),m=Math.min(u.length,c.end_line),g=u.slice(p,m).join(`
101
101
  `),h=J.createHash("sha256").update(g).digest("hex");if(c.content_hash!=null&&h===c.content_hash){a.push({aspectId:c.aspect_id,path:c.file_path,startLine:c.start_line,endLine:c.end_line,status:"clean",resolvedBy:"exact-hash",exists:!0,drifted:!1}),c.drifted===1&&t.run("UPDATE anchors SET drifted = 0 WHERE id = ?",[c.id]);continue}let v=J.createHash("sha256").update(Me(g)).digest("hex");if(c.normalized_hash!=null&&v===c.normalized_hash){t.run("UPDATE anchors SET content_hash = ?, drifted = 0 WHERE id = ?",[h,c.id]),a.push({aspectId:c.aspect_id,path:c.file_path,startLine:c.start_line,endLine:c.end_line,status:"cosmetic",resolvedBy:"normalized-hash",exists:!0,drifted:!1});continue}if(c.content_hash==null&&c.normalized_hash==null){t.run("UPDATE anchors SET content_hash = ?, normalized_hash = ?, drifted = 0 WHERE id = ?",[h,v,c.id]),a.push({aspectId:c.aspect_id,path:c.file_path,startLine:c.start_line,endLine:c.end_line,status:"clean",resolvedBy:"exact-hash",exists:!0,drifted:!1});continue}let T=!1;if(c.materialized_at_commit){let E=Es(e,c.file_path,c.materialized_at_commit,c.start_line,c.end_line);if(E){let _=Math.max(0,E.currentStart-1),S=Math.min(u.length,E.currentEnd),b=u.slice(_,S).join(`
102
- `),w=J.createHash("sha256").update(b).digest("hex");if(c.content_hash!=null&&w===c.content_hash){let I=n;if(I){t.run("UPDATE anchors SET start_line = ?, end_line = ?, drifted = 0 WHERE id = ?",[E.currentStart,E.currentEnd,c.id]);let N=H(t,"SELECT defined_in FROM aspects WHERE id = ?",[c.aspect_id]);N.length>0&&De(e,N[0].defined_in,c.file_path,c.start_line,c.end_line,E.currentStart,E.currentEnd);}a.push({aspectId:c.aspect_id,path:c.file_path,startLine:I?E.currentStart:c.start_line,endLine:I?E.currentEnd:c.end_line,status:"shifted",resolvedBy:"git-line-mapping",exists:!0,drifted:!1,suggestedStart:E.currentStart,suggestedEnd:E.currentEnd,autoHealed:I}),T=!0;}else {let I=J.createHash("sha256").update(Me(b)).digest("hex");if(c.normalized_hash!=null&&I===c.normalized_hash){if(n){let N=J.createHash("sha256").update(b).digest("hex");t.run("UPDATE anchors SET start_line = ?, end_line = ?, content_hash = ?, drifted = 0 WHERE id = ?",[E.currentStart,E.currentEnd,N,c.id]);let ue=H(t,"SELECT defined_in FROM aspects WHERE id = ?",[c.aspect_id]);ue.length>0&&De(e,ue[0].defined_in,c.file_path,c.start_line,c.end_line,E.currentStart,E.currentEnd);}a.push({aspectId:c.aspect_id,path:c.file_path,startLine:n?E.currentStart:c.start_line,endLine:n?E.currentEnd:c.end_line,status:"shifted",resolvedBy:"git-line-mapping",exists:!0,drifted:!1,suggestedStart:E.currentStart,suggestedEnd:E.currentEnd,autoHealed:n}),T=!0;}}}}if(T)continue;if(c.original_content){let{contentSearch:E}=(Dt(),f(Nt)),_=E(e,c.file_path,c.original_content,n);if(_.found&&_.score>=o){if(n&&_.score>=r&&!_.suggestedPath&&_.suggestedStart&&_.suggestedEnd){t.run("UPDATE anchors SET start_line = ?, end_line = ?, drifted = 0 WHERE id = ?",[_.suggestedStart,_.suggestedEnd,c.id]);try{t.run(`INSERT INTO anchor_history (anchor_id, action, old_start, old_end, new_start, new_end, confidence, healed_at)
102
+ `),w=J.createHash("sha256").update(b).digest("hex");if(c.content_hash!=null&&w===c.content_hash){let I=n;if(I){t.run("UPDATE anchors SET start_line = ?, end_line = ?, drifted = 0 WHERE id = ?",[E.currentStart,E.currentEnd,c.id]);let N=H(t,"SELECT defined_in FROM aspects WHERE id = ?",[c.aspect_id]);N.length>0&&De(e,N[0].defined_in,c.file_path,c.start_line,c.end_line,E.currentStart,E.currentEnd);}a.push({aspectId:c.aspect_id,path:c.file_path,startLine:I?E.currentStart:c.start_line,endLine:I?E.currentEnd:c.end_line,status:"shifted",resolvedBy:"git-line-mapping",exists:!0,drifted:!1,suggestedStart:E.currentStart,suggestedEnd:E.currentEnd,autoHealed:I}),T=!0;}else {let I=J.createHash("sha256").update(Me(b)).digest("hex");if(c.normalized_hash!=null&&I===c.normalized_hash){if(n){let N=J.createHash("sha256").update(b).digest("hex");t.run("UPDATE anchors SET start_line = ?, end_line = ?, content_hash = ?, drifted = 0 WHERE id = ?",[E.currentStart,E.currentEnd,N,c.id]);let ue=H(t,"SELECT defined_in FROM aspects WHERE id = ?",[c.aspect_id]);ue.length>0&&De(e,ue[0].defined_in,c.file_path,c.start_line,c.end_line,E.currentStart,E.currentEnd);}a.push({aspectId:c.aspect_id,path:c.file_path,startLine:n?E.currentStart:c.start_line,endLine:n?E.currentEnd:c.end_line,status:"shifted",resolvedBy:"git-line-mapping",exists:!0,drifted:!1,suggestedStart:E.currentStart,suggestedEnd:E.currentEnd,autoHealed:n}),T=!0;}}}}if(T)continue;if(c.original_content){let{contentSearch:E}=(Dt(),d(Nt)),_=E(e,c.file_path,c.original_content,n);if(_.found&&_.score>=o){if(n&&_.score>=r&&!_.suggestedPath&&_.suggestedStart&&_.suggestedEnd){t.run("UPDATE anchors SET start_line = ?, end_line = ?, drifted = 0 WHERE id = ?",[_.suggestedStart,_.suggestedEnd,c.id]);try{t.run(`INSERT INTO anchor_history (anchor_id, action, old_start, old_end, new_start, new_end, confidence, healed_at)
103
103
  VALUES (?, 'relocated', ?, ?, ?, ?, ?, ?)`,[c.id,c.start_line,c.end_line,_.suggestedStart,_.suggestedEnd,_.score,new Date().toISOString()]);}catch{}let b=H(t,"SELECT defined_in FROM aspects WHERE id = ?",[c.aspect_id]);b.length>0&&De(e,b[0].defined_in,c.file_path,c.start_line,c.end_line,_.suggestedStart,_.suggestedEnd),a.push({aspectId:c.aspect_id,path:c.file_path,startLine:_.suggestedStart,endLine:_.suggestedEnd,status:"relocated",resolvedBy:"content-search",exists:!0,similarity:_.similarity,suggestedStart:_.suggestedStart,suggestedEnd:_.suggestedEnd,autoHealed:!0,drifted:!1});continue}a.push({aspectId:c.aspect_id,path:_.suggestedPath||c.file_path,startLine:c.start_line,endLine:c.end_line,status:"relocated",resolvedBy:"content-search",exists:!0,similarity:_.similarity,suggestedStart:_.suggestedStart,suggestedEnd:_.suggestedEnd,autoHealed:!1,drifted:!0});continue}}t.run("UPDATE anchors SET drifted = 1 WHERE id = ?",[c.id]),a.push({aspectId:c.aspect_id,path:c.file_path,startLine:c.start_line,endLine:c.end_line,status:"modified",resolvedBy:"none",exists:!0,currentContent:g,drifted:!0});}catch{a.push({aspectId:c.aspect_id,path:c.file_path,startLine:c.start_line,endLine:c.end_line,status:"modified",resolvedBy:"none",exists:true,drifted:true});}}return a}function Wt(t){let{lines:e}=t;return typeof e=="number"?{startLine:e,endLine:e}:Array.isArray(e)?e.length===2?{startLine:e[0],endLine:e[1]}:{startLine:Math.min(...e),endLine:Math.max(...e)}:{startLine:1,endLine:1}}function vs(t){let e=[],s=/^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/gm,n;for(;(n=s.exec(t))!==null;)e.push({oldStart:parseInt(n[1],10),oldCount:n[2]!==void 0?parseInt(n[2],10):1,newStart:parseInt(n[3],10),newCount:n[4]!==void 0?parseInt(n[4],10):1});return e}function Es(t,e,s,n,o){let r;try{r=execSync(`git diff ${s}..HEAD --unified=0 -- "${e}"`,{cwd:t,encoding:"utf8",timeout:5e3});}catch{return null}if(!r.trim())return {originalStart:n,originalEnd:o,currentStart:n,currentEnd:o};let i=vs(r),a=0;for(let c of i){if(c.oldStart+c.oldCount<=n){a+=c.newCount-c.oldCount;continue}if(c.oldStart<o)return null;break}return a===0?null:{originalStart:n,originalEnd:o,currentStart:n+a,currentEnd:o+a}}function De(t,e,s,n,o,r,i){let a=k.isAbsolute(e)?e:k.join(t,e);if(!x.existsSync(a))return false;try{let c=x.readFileSync(a,"utf8"),l=n===o?`${s}:${n}`:`${s}:${n}-${o}`,d=r===i?`${s}:${r}`:`${s}:${r}-${i}`;if(!c.includes(l))return !1;let u=c.replace(l,d);return x.writeFileSync(a,u,"utf8"),!0}catch{return false}}function Me(t){return t.split(`
104
104
  `).map(e=>e.trimEnd()).filter(e=>e.trim()!=="").map(e=>e.replace(/\s+/g," ")).join(`
105
105
  `)}function Ts(t,e){return {exact:null,normalized:null,normalizedContent:null};}function _s(t,e){if(typeof t.category=="string")return t.category;let s=(e.description??"").toLowerCase();return /\b(must|require|always)\b/.test(s)?"rule":/\b(decided|chose)\b/.test(s)?"decision":/\b(limit|cannot)\b/.test(s)?"constraint":/\b(set to|configured|value)\b/.test(s)?"configuration":"rule"}function $s(t,e){if(typeof t.severity=="string")return t.severity;let s=e.tags??[];return s.includes("critical")?"critical":s.includes("security")||s.includes("compliance")?"high":"medium"}j();var Rs=/L-\d{4}-\d{2}-\d{2}-\d{3}/g;async function Gt(t,e){t.run("DELETE FROM lore_links");let s=await a$2(e);if(s.length===0)return 0;let n=Is(s),o=new Map;for(let l of s)o.set(l.id,l);let r=new Set,i=t.exec("SELECT id, enforcement FROM aspects");if(i.length>0){let{columns:l,values:d}=i[0],u=l.indexOf("id"),p=l.indexOf("enforcement");for(let m of d){let g=String(m[u]),h=m[p];if(h&&typeof h=="string"){let v=h.match(Rs);if(v)for(let T of v)o.has(T)&&r.add(`${g}\0${T}`);}}}let a=t.exec("SELECT source, target FROM edges");if(a.length>0&&i.length>0){let l=ks(t,a);for(let[d,u]of l)for(let p of u){let m=n.get(p);if(m)for(let g of m)r.add(`${d}\0${g}`);}}if(r.size===0)return 0;let c=t.prepare("INSERT OR IGNORE INTO lore_links (aspect_id, lore_id) VALUES (?, ?)");try{for(let l of r){let[d,u]=l.split("\0");c.bind([d,u]),c.step(),c.reset();}}finally{c.free();}return r.size}async function ar(t,e,s){let n=t.exec("SELECT lore_id FROM lore_links WHERE aspect_id = ?",[s]);if(n.length===0||n[0].values.length===0)return [];let o=n[0].values.map(r=>String(r[0]));return Ps(e,o)}async function Bt(t,e){let s=await a$2(e);if(s.length===0)return 0;let n=t.exec("SELECT id FROM aspects"),o=new Set;if(n.length>0)for(let c of n[0].values)o.add(String(c[0]));if(o.size<2)return 0;let r=new Date().toISOString(),i=0,a=t.prepare(`INSERT OR IGNORE INTO edges (source, target, relation, weight, origin, created_at)
106
- VALUES (?, ?, 'related-to', 0.3, 'learned', ?)`);try{for(let c of s){if(!c.symbols_touched||c.symbols_touched.length<2)continue;let l=[];for(let d of c.symbols_touched){let u=d.startsWith("~")?d.slice(1):d;o.has(u)&&l.push(u);}for(let d=0;d<l.length;d++)for(let u=d+1;u<l.length;u++){let[p,m]=l[d]<l[u]?[l[d],l[u]]:[l[u],l[d]];a.bind([p,m,r]),a.step(),a.reset(),i++;}}}finally{a.free();}return i}function Is(t){let e=new Map;for(let s of t)if(s.symbols_touched)for(let n of s.symbols_touched){let o=e.get(n);o||(o=new Set,e.set(n,o)),o.add(s.id);}return e}function ks(t,e){let s=t.exec("SELECT id FROM aspects"),n=new Set;if(s.length>0)for(let l of s[0].values)n.add(String(l[0]));let o=new Map;if(e.length===0)return o;let{columns:r,values:i}=e[0],a=r.indexOf("source"),c=r.indexOf("target");for(let l of i){let d=String(l[a]),u=String(l[c]);if(n.has(d)){let p=o.get(d);p||(p=new Set,o.set(d,p)),p.add(u),p.add(`~${d}`);}if(n.has(u)){let p=o.get(u);p||(p=new Set,o.set(u,p)),p.add(d),p.add(`~${u}`);}}return o}async function Ps(t,e){let s=new Set,n=[];for(let o of e){if(s.has(o))continue;s.add(o);let r=await b$2(t,o);r&&n.push(Cs(r));}return n}function Cs(t){return {id:t.id,title:t.title,summary:t.summary,timestamp:t.timestamp,symbolsTouched:t.symbols_touched}}var oe=".paradigm/personas",As="index.yaml";async function ce(t,e){let s=k.join(t,oe);if(!x.existsSync(s))return [];let n=x.readdirSync(s).filter(r=>r.endsWith(".persona")),o=[];for(let r of n)try{let i=x.readFileSync(k.join(s,r),"utf8"),a=F.load(i);a&&a.id&&o.push(a);}catch{}return js(o,e)}async function le(t,e){let s=k.join(t,oe,`${e}.persona`);if(!x.existsSync(s))return null;try{return F.load(x.readFileSync(s,"utf8"))}catch{return null}}function js(t,e){if(!e)return t;let s=t;return e.tag&&(s=s.filter(n=>n.tags?.includes(e.tag))),e.trigger_type&&(s=s.filter(n=>n.trigger.type===e.trigger_type)),e.gate&&(s=s.filter(n=>n.journey.some(o=>o.gates.includes(e.gate)))),e.flow&&(s=s.filter(n=>n.journey.some(o=>o.flow===e.flow))),e.limit&&(s=s.slice(0,e.limit)),s}async function lr(t,e){let s=k.join(t,oe);x.mkdirSync(s,{recursive:true});let n=k.join(s,`${e.id}.persona`);if(x.existsSync(n))throw new Error(`Persona ${e.id} already exists`);let o=new Date().toISOString(),r={version:"1.0",id:e.id,name:e.name,description:e.description,traits:e.traits,trigger:e.trigger,fixtures:e.fixtures,tags:e.tags||[],journey:e.journey||[],created:o,updated:o};return x.writeFileSync(n,F.dump(r,{indent:2,lineWidth:120,noRefs:true,sortKeys:false})),await de(t),e.id}async function Xt(t,e,s){let n=await le(t,e);if(!n)return false;let o=k.join(t,oe,`${e}.persona`),r={...n,...s,id:n.id,version:n.version,created:n.created,updated:new Date().toISOString()};return x.writeFileSync(o,F.dump(r,{indent:2,lineWidth:120,noRefs:true,sortKeys:false})),await de(t),true}async function dr(t,e){let s=k.join(t,oe,`${e}.persona`);if(!x.existsSync(s))return {deleted:false,warnings:[]};let n=[],o=await ce(t);for(let r of o)if(r.id!==e){r.trigger.spawned_by?.startsWith(e+".")&&n.push(`Persona ${r.id} is spawned by ${e} \u2014 it will become orphaned`);for(let i of r.journey)i.spawns?.some(a=>a.persona===e)&&n.push(`Persona ${r.id} step ${i.id} spawns ${e} \u2014 spawn will break`);}return x.unlinkSync(s),await de(t),{deleted:true,warnings:n}}async function ur(t,e,s,n){let o=await le(t,e);if(!o)return false;if(o.journey.some(r=>r.id===s.id))throw new Error(`Step ${s.id} already exists in persona ${e}`);if(n){let r=o.journey.findIndex(i=>i.id===n);if(r===-1)throw new Error(`Step ${n} not found in persona ${e}`);o.journey.splice(r+1,0,s);}else o.journey.push(s);return Xt(t,e,{journey:o.journey})}async function pr(t,e,s){let n=await le(t,e);if(!n)return {removed:false,warnings:[]};let o=n.journey.findIndex(a=>a.id===s);if(o===-1)return {removed:false,warnings:[]};let r=n.journey[o],i=[];if(r.produces)for(let a of Object.keys(r.produces)){let c=`{{produces.${a}}}`;for(let l=o+1;l<n.journey.length;l++){let d=n.journey[l];JSON.stringify(d).includes(c)&&i.push(`Step ${d.id} consumes {{produces.${a}}} from this step`);}}if(r.spawns&&r.spawns.length>0)for(let a of r.spawns)i.push(`Step spawns persona ${a.persona} \u2014 spawn chain will break`);return n.journey.splice(o,1),await Xt(t,e,{journey:n.journey}),{removed:true,warnings:i}}var Ls=/^[a-z][a-z0-9-]*$/,Os=/^[a-z][a-z0-9-]*$/,Fs=/^(GET|POST|PUT|PATCH|DELETE)\s+\//;async function fr(t,e,s=false){let n=[],o=[];Ls.test(e.id)||n.push({type:"invalid-id",detail:`ID "${e.id}" must match /^[a-z][a-z0-9-]*$/`}),(!e.name||e.name.trim()==="")&&n.push({type:"missing-name",detail:"Name is required"}),(!e.trigger||!e.trigger.type)&&n.push({type:"missing-trigger",detail:"Trigger with type is required"}),e.trigger.type!=="root"&&!e.trigger.spawned_by&&n.push({type:"missing-spawned-by",detail:`Non-root trigger type "${e.trigger.type}" requires spawned_by`}),(!e.journey||e.journey.length===0)&&n.push({type:"empty-journey",detail:"Journey must have at least one step"});let r=new Set,i=new Set;for(let a of e.journey){Os.test(a.id)||n.push({type:"invalid-step-id",step:a.id,detail:"Step ID must match /^[a-z][a-z0-9-]*$/"}),r.has(a.id)&&n.push({type:"duplicate-step-id",step:a.id,detail:`Duplicate step ID "${a.id}"`}),r.add(a.id),Fs.test(a.route)||n.push({type:"invalid-route",step:a.id,route:a.route,detail:'Route must match "METHOD /path" (e.g., "POST /api/auth/signup")'}),(!a.gates||a.gates.length===0)&&n.push({type:"missing-gates",step:a.id,detail:"Step must have at least one gate"}),(!a.expect||a.expect.status===void 0)&&n.push({type:"missing-expect",step:a.id,detail:"Step must have expect with status"});let l=JSON.stringify(a).match(/\{\{produces\.([^}]+)\}\}/g)||[];for(let d of l){let u=d.replace("{{produces.","").replace("}}","");i.has(u)||n.push({type:"unresolved-produces",step:a.id,key:u,detail:`{{produces.${u}}} used but not produced by a prior step`});}if(a.produces)for(let d of Object.keys(a.produces))i.add(d);}if(s){let a=k.join(t,"portal.yaml"),c=[],l=[];if(x.existsSync(a))try{let u=F.load(x.readFileSync(a,"utf8"));u.gates&&typeof u.gates=="object"&&(c=Object.keys(u.gates)),u.routes&&typeof u.routes=="object"&&(l=Object.keys(u.routes));}catch{}for(let u of e.journey)for(let p of u.gates)c.length>0&&!c.includes(p)&&n.push({type:"gate-not-found",step:u.id,gate:p,detail:`Gate ${p} not defined in portal.yaml`});for(let u of e.journey)if(l.length>0){let p=u.route;l.some(g=>Ue(g,p))||o.push({type:"route-not-in-portal",detail:`Route "${p}" (step ${u.id}) not found in portal.yaml`});}for(let u of e.journey)if(u.spawns)for(let p of u.spawns)await le(t,p.persona)||n.push({type:"spawn-target-missing",step:u.id,detail:`Spawn target persona "${p.persona}" does not exist`});let d=await Ns(t,e.id);if(d&&n.push({type:"spawn-cycle",detail:`Circular spawn dependency: ${d.join(" \u2192 ")}`}),l.length>0||c.length>0){let u=await ce(t),p=new Set,m=new Set;for(let T of u)for(let E of T.journey){for(let _ of E.gates)p.add(_);m.add(E.route);}let g=[],h=k.join(t,".paradigm","flow-index.json");if(x.existsSync(h))try{let T=JSON.parse(x.readFileSync(h,"utf8"));g=Object.keys(T.flows||{});}catch{}let v=new Set;for(let T of u)for(let E of T.journey)E.flow&&v.add(E.flow);return {persona:e.id,valid:n.length===0,errors:n,warnings:o,coverage:{routes:{covered:m.size,total:l.length,uncovered:l.filter(T=>!m.has(T))},gates:{covered:p.size,total:c.length,uncovered:c.filter(T=>!p.has(T))},flows:{covered:v.size,total:g.length,uncovered:g.filter(T=>!v.has(T))}}}}}return {persona:e.id,valid:n.length===0,errors:n,warnings:o}}function Ue(t,e){let s=n=>n.replace(/:[a-zA-Z_]+/g,":param").replace(/\{\{[^}]+\}\}/g,":param");return s(t)===s(e)}async function Ns(t,e){let s=new Set,n=[];async function o(r){if(s.has(r)){let a=n.indexOf(r);return a!==-1?[...n.slice(a),r]:null}s.add(r),n.push(r);let i=await le(t,r);if(i){for(let a of i.journey)if(a.spawns)for(let c of a.spawns){let l=await o(c.persona);if(l)return l}}return n.pop(),null}return o(e)}async function de(t){let e=k.join(t,oe);x.mkdirSync(e,{recursive:true});let s=await ce(t),n={},o={},r={};for(let u of s){let p=new Set,m=new Set,g=[],h=new Set;for(let v of u.journey){for(let T of v.gates)p.add(T);if(v.flow&&m.add(v.flow),g.push(v.route),v.spawns)for(let T of v.spawns)h.add(T.persona);}n[u.id]={name:u.name,trigger:u.trigger.type,spawned_by:u.trigger.spawned_by,steps:u.journey.length,gates:[...p],flows:[...m],routes:g,spawns:[...h],tags:u.tags||[]};for(let v of p)o[v]||(o[v]=[]),o[v].push(u.id);for(let v of g)r[v]||(r[v]=[]),r[v].push(u.id);}let i=[],a=k.join(t,"portal.yaml");if(x.existsSync(a))try{let u=F.load(x.readFileSync(a,"utf8"));u.routes&&typeof u.routes=="object"&&(i=Object.keys(u.routes).filter(m=>!Object.keys(r).some(g=>Ue(m,g))));}catch{}let c={},l=k.join(e,"chains");if(x.existsSync(l)){let u=x.readdirSync(l).filter(p=>p.endsWith(".yaml"));for(let p of u)try{let m=x.readFileSync(k.join(l,p),"utf8"),g=F.load(m);if(g&&g.id){let h=g.order.map(E=>E.persona),v=0,T=new Set;for(let E of h){let _=n[E];if(_){v+=_.steps;for(let S of _.gates)T.add(S);}}c[g.id]={description:g.description||"",order:h,total_steps:v,total_gates:T.size};}}catch{}}let d={version:"1.0",generated:new Date().toISOString(),personas:n,chains:c,gate_coverage:o,route_coverage:r,uncovered_routes:i};return x.writeFileSync(k.join(e,As),F.dump(d,{indent:2,lineWidth:120,noRefs:true,sortKeys:false})),d}async function gr(t){let e=await ce(t),s=new Set,n=new Set,o=new Set;for(let d of e)for(let u of d.journey){for(let p of u.gates)s.add(p);n.add(u.route),u.flow&&o.add(u.flow);}let r=[],i=[],a=k.join(t,"portal.yaml");if(x.existsSync(a))try{let d=F.load(x.readFileSync(a,"utf8"));d.gates&&typeof d.gates=="object"&&(r=Object.keys(d.gates)),d.routes&&typeof d.routes=="object"&&(i=Object.keys(d.routes));}catch{}let c=[],l=k.join(t,".paradigm","flow-index.json");if(x.existsSync(l))try{let d=JSON.parse(x.readFileSync(l,"utf8"));c=Object.keys(d.flows||{});}catch{}return {routes:{covered:n.size,total:i.length,uncovered:i.filter(d=>!Array.from(n).some(u=>Ue(d,u)))},gates:{covered:s.size,total:r.length,uncovered:r.filter(d=>!s.has(d))},flows:{covered:o.size,total:c.length,uncovered:c.filter(d=>!o.has(d))},personas:e.length}}async function mr(t,e){let s=await ce(t),n=[];for(let o of s){let r=[],i=[];for(let a of o.journey)if((a.gates.includes(e)||a.flow===e||a.route===e||a.signals?.includes(e))&&(r.push(a.id),a.spawns))for(let l of a.spawns)i.push(l.persona);r.length>0&&n.push({persona:o.id,steps:r,spawns_blocked:i});}return n}function Ds(t,e){let s=e.split(/[.\[\]]+/).filter(Boolean),n=t;for(let o of s){if(n==null||typeof n!="object")return;n=n[o];}return n}function Ms(t,e){let s=[];if(e.status!==t.expect.status&&s.push({type:"status",field:"status",expected:t.expect.status,actual:e.status,message:`Step ${t.id}: status is ${e.status}, expected ${t.expect.status}`}),t.expect.body?.has){let n=e.body;for(let o of t.expect.body.has)(!n||typeof n!="object"||!(o in n))&&s.push({type:"body.has",field:o,expected:true,actual:false,message:`Step ${t.id}: body missing key '${o}'`});}if(t.expect.body?.match){let n=e.body;for(let[o,r]of Object.entries(t.expect.body.match)){let i=n?Ds(n,o):void 0;JSON.stringify(i)!==JSON.stringify(r)&&s.push({type:"body.match",field:o,expected:r,actual:i??null,message:`Step ${t.id}: '${o}' is ${JSON.stringify(i??null)}, expected ${JSON.stringify(r)}`});}}if(t.signals&&t.signals.length>0){let n=e.signals_fired||[];for(let o of t.signals)n.includes(o)||s.push({type:"signal",field:"signals_fired",expected:o,actual:n,message:`Step ${t.id}: signal '${o}' was not fired`});}if(t.gates.length>0&&e.gates_traversed)for(let n of t.gates)e.gates_traversed.includes(n)||s.push({type:"gate",field:"gates_traversed",expected:n,actual:e.gates_traversed,message:`Step ${t.id}: gate '${n}' was not traversed`});return s}async function hr(t,e={}){let s=[];try{let{SentinelStorage:a}=await import('./dist-5IUWRFG6.js'),c=new a,d=(c.queryEvents?.({schemaId:"paradigm-personas",eventType:"persona.step.complete",scopeValue:t.id,limit:500})||[]).filter(g=>{let h=JSON.parse(g.data_json||"{}");return !(e.run_id&&h.run_id!==e.run_id||e.chain_id&&h.chain_id!==e.chain_id||e.environment&&h.environment!==e.environment)}),p=(c.queryEvents?.({schemaId:"paradigm-personas",eventType:"persona.step.fail",scopeValue:t.id,limit:500})||[]).filter(g=>{let h=JSON.parse(g.data_json||"{}");return !(e.run_id&&h.run_id!==e.run_id||e.chain_id&&h.chain_id!==e.chain_id||e.environment&&h.environment!==e.environment)}),m=new Map;for(let g of [...d,...p]){let h=JSON.parse(g.data_json||"{}");h.step_id&&m.set(h.step_id,h);}for(let g of t.journey){let h=m.get(g.id);if(!h){s.push({step_id:g.id,matched:!1,assertions:[],message:`No Sentinel event found for step '${g.id}' \u2014 step was never exercised`});continue}let v=Ms(g,{status:h.status,body:h.body,gates_traversed:h.gates_traversed,signals_fired:h.signals_fired});s.push({step_id:g.id,matched:!0,passed:v.length===0,assertions:v});}}catch{for(let a of t.journey)s.push({step_id:a.id,matched:false,assertions:[],message:"Sentinel unavailable \u2014 cannot validate events"});}let n=s.filter(a=>a.matched).length,o=s.filter(a=>a.passed).length,r=s.filter(a=>a.matched&&!a.passed).length,i=s.reduce((a,c)=>a+c.assertions.length,0);return {run_id:e.run_id,environment:e.environment,steps:s,summary:{total_steps:t.journey.length,matched:n,unmatched:t.journey.length-n,passed:o,failed:r,assertion_failures:i}}}var te=".paradigm/protocols",qt="index.yaml";async function ze(t){let e=k.join(t,te);if(!x.existsSync(e))return [];let s=x.readdirSync(e).filter(o=>o.endsWith(".protocol")).sort(),n=[];for(let o of s)try{let r=x.readFileSync(k.join(e,o),"utf8"),i=F.load(r);i?.id&&i?.name&&n.push(i);}catch{}return n}async function Us(t,e){let s=e.replace(/^P-/,""),n=k.join(t,te,`${s}.protocol`);if(x.existsSync(n))try{let r=x.readFileSync(n,"utf8");return F.load(r)}catch{return null}return (await ze(t)).find(r=>r.id===e)||null}async function wr(t){let e=k.join(t,te,qt);if(!x.existsSync(e))return null;try{let s=x.readFileSync(e,"utf8");return F.load(s)}catch{return null}}async function br(t,e,s=3){let n=await ze(t);if(n.length===0)return [];let o=Hs(e);if(o.length===0)return [];let r=[];for(let i of n){let a=0;for(let d of i.trigger){let u=d.toLowerCase();for(let p of o)u.includes(p)&&(a+=3);}for(let d of i.tags){let u=d.toLowerCase();for(let p of o)(u.includes(p)||p.includes(u))&&(a+=2);}let c=i.name.toLowerCase(),l=i.description.toLowerCase();for(let d of o)c.includes(d)&&(a+=1),l.includes(d)&&(a+=1);for(let d of i.steps)if(d.notes){let u=d.notes.toLowerCase();for(let p of o)u.includes(p)&&(a+=.5);}a>0&&r.push({protocol:i,score:a});}return r.sort((i,a)=>a.score-i.score),r.slice(0,s)}async function Sr(t,e){let s=k.join(t,te);x.existsSync(s)||x.mkdirSync(s,{recursive:true});let n=Gs(e.name),o=`P-${n}`,r=new Date().toISOString(),i={id:o,name:e.name,description:e.description,trigger:e.trigger,tags:e.tags,symbols:e.symbols||[],exemplar:e.exemplar,steps:e.steps,recorded_from:e.recorded_from,recorded_at:r,last_verified:r,verified_by:e.verified_by||"claude-opus-4-6",status:"current"},a=k.join(s,`${n}.protocol`);return x.writeFileSync(a,F.dump(i,{lineWidth:-1,noRefs:true}),"utf8"),o}async function xr(t,e,s,n=false){let o=await Us(t,e);if(!o)return false;s.name!==void 0&&(o.name=s.name),s.description!==void 0&&(o.description=s.description),s.trigger!==void 0&&(o.trigger=s.trigger),s.tags!==void 0&&(o.tags=s.tags),s.symbols!==void 0&&(o.symbols=s.symbols),s.exemplar!==void 0&&(o.exemplar=s.exemplar),s.steps!==void 0&&(o.steps=s.steps),s.status!==void 0&&(o.status=s.status),s.verified_by!==void 0&&(o.verified_by=s.verified_by),n&&(o.last_verified=new Date().toISOString(),o.verified_by=s.verified_by||"claude-opus-4-6");let r=e.replace(/^P-/,""),i=k.join(t,te,`${r}.protocol`);return x.writeFileSync(i,F.dump(o,{lineWidth:-1,noRefs:true}),"utf8"),true}function zs(t,e){let s=[],n="current";if(e.exemplar){let o=k.join(t,e.exemplar);x.existsSync(o)?x.statSync(o).mtime.toISOString()>e.last_verified&&(s.push(`Exemplar modified since last verified: ${e.exemplar}`),n!=="broken"&&(n="stale")):(s.push(`Exemplar missing: ${e.exemplar}`),n="broken");}for(let o of e.steps){if(o.template_from){let r=k.join(t,o.template_from);x.existsSync(r)||(s.push(`Template file missing: ${o.template_from}`),n="broken");}if(o.action==="modify"&&o.target){let r=k.join(t,o.target);!o.target.includes("{")&&!x.existsSync(r)&&(s.push(`Modify target missing: ${o.target}`),n="broken");}}return {status:n,issues:s}}async function Vt(t){let e=await ze(t),s=[],n=0,o=0,r=0;for(let c of e){let l=zs(t,c);if(c.status!==l.status){c.status=l.status;let d=c.id.replace(/^P-/,""),u=k.join(t,te,`${d}.protocol`);x.existsSync(u)&&x.writeFileSync(u,F.dump(c,{lineWidth:-1,noRefs:true}),"utf8");}switch(l.status){case "current":n++;break;case "stale":o++;break;case "broken":r++;break}s.push({id:c.id,name:c.name,status:l.status,last_verified:c.last_verified,trigger:c.trigger,tags:c.tags});}let i={version:"1.0",generated:new Date().toISOString(),protocols:s,health:{total:e.length,current:n,stale:o,broken:r}},a=k.join(t,te);if(e.length>0){x.existsSync(a)||x.mkdirSync(a,{recursive:true});let c=k.join(a,qt);x.writeFileSync(c,F.dump(i,{lineWidth:-1,noRefs:true}),"utf8");}return i}function vr(t,e,s){if(!e||e.length<2)return null;let n={};for(let o of e){let r=k.dirname(o);n[r]||(n[r]=[]),n[r].push(o);}for(let[o,r]of Object.entries(n)){if(r.length<2)continue;let i=k.join(t,o);if(!x.existsSync(i))continue;let c=x.readdirSync(i).filter(l=>{let d=k.extname(l);return [".ts",".tsx",".js",".jsx",".rs",".py"].includes(d)}).filter(l=>!r.some(d=>k.basename(d)===l));if(c.length>0){let l=k.join(o,c[0]),d=[...r.map(u=>({action:"create",target:u})),...s.map(u=>({action:"modify",target:u}))];return {hint:`This session created ${r.length} new files in ${o}/ following existing patterns. Consider recording a protocol.`,draft:{name:`Add a ${k.basename(o).replace(/s$/,"")}`,exemplar:l,steps:d}}}}return null}function Hs(t){return t.toLowerCase().replace(/[^a-z0-9\s-]/g," ").split(/\s+/).filter(e=>e.length>1).filter(e=>!Ws.has(e))}var Ws=new Set(["a","an","the","is","are","was","were","be","been","to","of","in","for","on","with","at","by","from","it","this","that","and","or","but","if","then","so","as","do","does","did","will","would","can","could","should","may","might","must","shall","i","me","my","we","our","you","your","he","she","how","what","when","where","which","who","whom"]);function Gs(t){return t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}var Q=".paradigm/university",K="content",We="notes",Se="policies",xe="quizzes",ve="paths",Yt="diplomas",Jt="index.yaml",Bs="config.yaml",Kt={name:"Project University",tagline:"Learn the codebase",institution:"Paradigm"},Qt={primary:"#6366f1",secondary:"#8b5cf6",accent:"#f59e0b",background:"#0f172a",surface:"#1e293b",text:"#f8fafc",textMuted:"#94a3b8",success:"#22c55e",error:"#ef4444",font:"Inter, system-ui, sans-serif"},He={branding:Kt,theme:Qt,content:{categories:[],defaultDifficulty:"beginner",requireApproval:false},diplomas:{includeGlobalPLSAT:true,customCertStyle:null}};function Ge(t){let e=k.join(t,Q,Bs);if(!x.existsSync(e))return {...He};try{let s=x.readFileSync(e,"utf8"),n=F.load(s);return n?{branding:{...Kt,...n.branding||{}},theme:{...Qt,...n.theme||{}},content:{categories:n.content?.categories||[],defaultDifficulty:n.content?.defaultDifficulty||"beginner",requireApproval:n.content?.requireApproval??!1,defaultCategory:n.content?.defaultCategory},diplomas:{includeGlobalPLSAT:n.diplomas?.includeGlobalPLSAT??!0,customCertStyle:n.diplomas?.customCertStyle??null}}:{...He}}catch{return {...He}}}function Ee(t){let e=k.join(t,Q,Jt);if(!x.existsSync(e))return null;try{let s=x.readFileSync(e,"utf8");return F.load(s)}catch{return null}}function Zt(t){let e=t.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);if(!e)return null;try{return {frontmatter:F.load(e[1]),body:e[2].trim()}}catch{return null}}function Xs(t,e){return `---
106
+ VALUES (?, ?, 'related-to', 0.3, 'learned', ?)`);try{for(let c of s){if(!c.symbols_touched||c.symbols_touched.length<2)continue;let l=[];for(let d of c.symbols_touched){let u=d.startsWith("~")?d.slice(1):d;o.has(u)&&l.push(u);}for(let d=0;d<l.length;d++)for(let u=d+1;u<l.length;u++){let[p,m]=l[d]<l[u]?[l[d],l[u]]:[l[u],l[d]];a.bind([p,m,r]),a.step(),a.reset(),i++;}}}finally{a.free();}return i}function Is(t){let e=new Map;for(let s of t)if(s.symbols_touched)for(let n of s.symbols_touched){let o=e.get(n);o||(o=new Set,e.set(n,o)),o.add(s.id);}return e}function ks(t,e){let s=t.exec("SELECT id FROM aspects"),n=new Set;if(s.length>0)for(let l of s[0].values)n.add(String(l[0]));let o=new Map;if(e.length===0)return o;let{columns:r,values:i}=e[0],a=r.indexOf("source"),c=r.indexOf("target");for(let l of i){let d=String(l[a]),u=String(l[c]);if(n.has(d)){let p=o.get(d);p||(p=new Set,o.set(d,p)),p.add(u),p.add(`~${d}`);}if(n.has(u)){let p=o.get(u);p||(p=new Set,o.set(u,p)),p.add(d),p.add(`~${u}`);}}return o}async function Ps(t,e){let s=new Set,n=[];for(let o of e){if(s.has(o))continue;s.add(o);let r=await b$2(t,o);r&&n.push(Cs(r));}return n}function Cs(t){return {id:t.id,title:t.title,summary:t.summary,timestamp:t.timestamp,symbolsTouched:t.symbols_touched}}var oe=".paradigm/personas",As="index.yaml";async function ce(t,e){let s=k.join(t,oe);if(!x.existsSync(s))return [];let n=x.readdirSync(s).filter(r=>r.endsWith(".persona")),o=[];for(let r of n)try{let i=x.readFileSync(k.join(s,r),"utf8"),a=F.load(i);a&&a.id&&o.push(a);}catch{}return js(o,e)}async function le(t,e){let s=k.join(t,oe,`${e}.persona`);if(!x.existsSync(s))return null;try{return F.load(x.readFileSync(s,"utf8"))}catch{return null}}function js(t,e){if(!e)return t;let s=t;return e.tag&&(s=s.filter(n=>n.tags?.includes(e.tag))),e.trigger_type&&(s=s.filter(n=>n.trigger.type===e.trigger_type)),e.gate&&(s=s.filter(n=>n.journey.some(o=>o.gates.includes(e.gate)))),e.flow&&(s=s.filter(n=>n.journey.some(o=>o.flow===e.flow))),e.limit&&(s=s.slice(0,e.limit)),s}async function lr(t,e){let s=k.join(t,oe);x.mkdirSync(s,{recursive:true});let n=k.join(s,`${e.id}.persona`);if(x.existsSync(n))throw new Error(`Persona ${e.id} already exists`);let o=new Date().toISOString(),r={version:"1.0",id:e.id,name:e.name,description:e.description,traits:e.traits,trigger:e.trigger,fixtures:e.fixtures,tags:e.tags||[],journey:e.journey||[],created:o,updated:o};return x.writeFileSync(n,F.dump(r,{indent:2,lineWidth:120,noRefs:true,sortKeys:false})),await de(t),e.id}async function Xt(t,e,s){let n=await le(t,e);if(!n)return false;let o=k.join(t,oe,`${e}.persona`),r={...n,...s,id:n.id,version:n.version,created:n.created,updated:new Date().toISOString()};return x.writeFileSync(o,F.dump(r,{indent:2,lineWidth:120,noRefs:true,sortKeys:false})),await de(t),true}async function dr(t,e){let s=k.join(t,oe,`${e}.persona`);if(!x.existsSync(s))return {deleted:false,warnings:[]};let n=[],o=await ce(t);for(let r of o)if(r.id!==e){r.trigger.spawned_by?.startsWith(e+".")&&n.push(`Persona ${r.id} is spawned by ${e} \u2014 it will become orphaned`);for(let i of r.journey)i.spawns?.some(a=>a.persona===e)&&n.push(`Persona ${r.id} step ${i.id} spawns ${e} \u2014 spawn will break`);}return x.unlinkSync(s),await de(t),{deleted:true,warnings:n}}async function ur(t,e,s,n){let o=await le(t,e);if(!o)return false;if(o.journey.some(r=>r.id===s.id))throw new Error(`Step ${s.id} already exists in persona ${e}`);if(n){let r=o.journey.findIndex(i=>i.id===n);if(r===-1)throw new Error(`Step ${n} not found in persona ${e}`);o.journey.splice(r+1,0,s);}else o.journey.push(s);return Xt(t,e,{journey:o.journey})}async function pr(t,e,s){let n=await le(t,e);if(!n)return {removed:false,warnings:[]};let o=n.journey.findIndex(a=>a.id===s);if(o===-1)return {removed:false,warnings:[]};let r=n.journey[o],i=[];if(r.produces)for(let a of Object.keys(r.produces)){let c=`{{produces.${a}}}`;for(let l=o+1;l<n.journey.length;l++){let d=n.journey[l];JSON.stringify(d).includes(c)&&i.push(`Step ${d.id} consumes {{produces.${a}}} from this step`);}}if(r.spawns&&r.spawns.length>0)for(let a of r.spawns)i.push(`Step spawns persona ${a.persona} \u2014 spawn chain will break`);return n.journey.splice(o,1),await Xt(t,e,{journey:n.journey}),{removed:true,warnings:i}}var Ls=/^[a-z][a-z0-9-]*$/,Os=/^[a-z][a-z0-9-]*$/,Fs=/^(GET|POST|PUT|PATCH|DELETE)\s+\//;async function fr(t,e,s=false){let n=[],o=[];Ls.test(e.id)||n.push({type:"invalid-id",detail:`ID "${e.id}" must match /^[a-z][a-z0-9-]*$/`}),(!e.name||e.name.trim()==="")&&n.push({type:"missing-name",detail:"Name is required"}),(!e.trigger||!e.trigger.type)&&n.push({type:"missing-trigger",detail:"Trigger with type is required"}),e.trigger.type!=="root"&&!e.trigger.spawned_by&&n.push({type:"missing-spawned-by",detail:`Non-root trigger type "${e.trigger.type}" requires spawned_by`}),(!e.journey||e.journey.length===0)&&n.push({type:"empty-journey",detail:"Journey must have at least one step"});let r=new Set,i=new Set;for(let a of e.journey){Os.test(a.id)||n.push({type:"invalid-step-id",step:a.id,detail:"Step ID must match /^[a-z][a-z0-9-]*$/"}),r.has(a.id)&&n.push({type:"duplicate-step-id",step:a.id,detail:`Duplicate step ID "${a.id}"`}),r.add(a.id),Fs.test(a.route)||n.push({type:"invalid-route",step:a.id,route:a.route,detail:'Route must match "METHOD /path" (e.g., "POST /api/auth/signup")'}),(!a.gates||a.gates.length===0)&&n.push({type:"missing-gates",step:a.id,detail:"Step must have at least one gate"}),(!a.expect||a.expect.status===void 0)&&n.push({type:"missing-expect",step:a.id,detail:"Step must have expect with status"});let l=JSON.stringify(a).match(/\{\{produces\.([^}]+)\}\}/g)||[];for(let d of l){let u=d.replace("{{produces.","").replace("}}","");i.has(u)||n.push({type:"unresolved-produces",step:a.id,key:u,detail:`{{produces.${u}}} used but not produced by a prior step`});}if(a.produces)for(let d of Object.keys(a.produces))i.add(d);}if(s){let a=k.join(t,"portal.yaml"),c=[],l=[];if(x.existsSync(a))try{let u=F.load(x.readFileSync(a,"utf8"));u.gates&&typeof u.gates=="object"&&(c=Object.keys(u.gates)),u.routes&&typeof u.routes=="object"&&(l=Object.keys(u.routes));}catch{}for(let u of e.journey)for(let p of u.gates)c.length>0&&!c.includes(p)&&n.push({type:"gate-not-found",step:u.id,gate:p,detail:`Gate ${p} not defined in portal.yaml`});for(let u of e.journey)if(l.length>0){let p=u.route;l.some(g=>Ue(g,p))||o.push({type:"route-not-in-portal",detail:`Route "${p}" (step ${u.id}) not found in portal.yaml`});}for(let u of e.journey)if(u.spawns)for(let p of u.spawns)await le(t,p.persona)||n.push({type:"spawn-target-missing",step:u.id,detail:`Spawn target persona "${p.persona}" does not exist`});let d=await Ns(t,e.id);if(d&&n.push({type:"spawn-cycle",detail:`Circular spawn dependency: ${d.join(" \u2192 ")}`}),l.length>0||c.length>0){let u=await ce(t),p=new Set,m=new Set;for(let T of u)for(let E of T.journey){for(let _ of E.gates)p.add(_);m.add(E.route);}let g=[],h=k.join(t,".paradigm","flow-index.json");if(x.existsSync(h))try{let T=JSON.parse(x.readFileSync(h,"utf8"));g=Object.keys(T.flows||{});}catch{}let v=new Set;for(let T of u)for(let E of T.journey)E.flow&&v.add(E.flow);return {persona:e.id,valid:n.length===0,errors:n,warnings:o,coverage:{routes:{covered:m.size,total:l.length,uncovered:l.filter(T=>!m.has(T))},gates:{covered:p.size,total:c.length,uncovered:c.filter(T=>!p.has(T))},flows:{covered:v.size,total:g.length,uncovered:g.filter(T=>!v.has(T))}}}}}return {persona:e.id,valid:n.length===0,errors:n,warnings:o}}function Ue(t,e){let s=n=>n.replace(/:[a-zA-Z_]+/g,":param").replace(/\{\{[^}]+\}\}/g,":param");return s(t)===s(e)}async function Ns(t,e){let s=new Set,n=[];async function o(r){if(s.has(r)){let a=n.indexOf(r);return a!==-1?[...n.slice(a),r]:null}s.add(r),n.push(r);let i=await le(t,r);if(i){for(let a of i.journey)if(a.spawns)for(let c of a.spawns){let l=await o(c.persona);if(l)return l}}return n.pop(),null}return o(e)}async function de(t){let e=k.join(t,oe);x.mkdirSync(e,{recursive:true});let s=await ce(t),n={},o={},r={};for(let u of s){let p=new Set,m=new Set,g=[],h=new Set;for(let v of u.journey){for(let T of v.gates)p.add(T);if(v.flow&&m.add(v.flow),g.push(v.route),v.spawns)for(let T of v.spawns)h.add(T.persona);}n[u.id]={name:u.name,trigger:u.trigger.type,spawned_by:u.trigger.spawned_by,steps:u.journey.length,gates:[...p],flows:[...m],routes:g,spawns:[...h],tags:u.tags||[]};for(let v of p)o[v]||(o[v]=[]),o[v].push(u.id);for(let v of g)r[v]||(r[v]=[]),r[v].push(u.id);}let i=[],a=k.join(t,"portal.yaml");if(x.existsSync(a))try{let u=F.load(x.readFileSync(a,"utf8"));u.routes&&typeof u.routes=="object"&&(i=Object.keys(u.routes).filter(m=>!Object.keys(r).some(g=>Ue(m,g))));}catch{}let c={},l=k.join(e,"chains");if(x.existsSync(l)){let u=x.readdirSync(l).filter(p=>p.endsWith(".yaml"));for(let p of u)try{let m=x.readFileSync(k.join(l,p),"utf8"),g=F.load(m);if(g&&g.id){let h=g.order.map(E=>E.persona),v=0,T=new Set;for(let E of h){let _=n[E];if(_){v+=_.steps;for(let S of _.gates)T.add(S);}}c[g.id]={description:g.description||"",order:h,total_steps:v,total_gates:T.size};}}catch{}}let d={version:"1.0",generated:new Date().toISOString(),personas:n,chains:c,gate_coverage:o,route_coverage:r,uncovered_routes:i};return x.writeFileSync(k.join(e,As),F.dump(d,{indent:2,lineWidth:120,noRefs:true,sortKeys:false})),d}async function gr(t){let e=await ce(t),s=new Set,n=new Set,o=new Set;for(let d of e)for(let u of d.journey){for(let p of u.gates)s.add(p);n.add(u.route),u.flow&&o.add(u.flow);}let r=[],i=[],a=k.join(t,"portal.yaml");if(x.existsSync(a))try{let d=F.load(x.readFileSync(a,"utf8"));d.gates&&typeof d.gates=="object"&&(r=Object.keys(d.gates)),d.routes&&typeof d.routes=="object"&&(i=Object.keys(d.routes));}catch{}let c=[],l=k.join(t,".paradigm","flow-index.json");if(x.existsSync(l))try{let d=JSON.parse(x.readFileSync(l,"utf8"));c=Object.keys(d.flows||{});}catch{}return {routes:{covered:n.size,total:i.length,uncovered:i.filter(d=>!Array.from(n).some(u=>Ue(d,u)))},gates:{covered:s.size,total:r.length,uncovered:r.filter(d=>!s.has(d))},flows:{covered:o.size,total:c.length,uncovered:c.filter(d=>!o.has(d))},personas:e.length}}async function mr(t,e){let s=await ce(t),n=[];for(let o of s){let r=[],i=[];for(let a of o.journey)if((a.gates.includes(e)||a.flow===e||a.route===e||a.signals?.includes(e))&&(r.push(a.id),a.spawns))for(let l of a.spawns)i.push(l.persona);r.length>0&&n.push({persona:o.id,steps:r,spawns_blocked:i});}return n}function Ds(t,e){let s=e.split(/[.\[\]]+/).filter(Boolean),n=t;for(let o of s){if(n==null||typeof n!="object")return;n=n[o];}return n}function Ms(t,e){let s=[];if(e.status!==t.expect.status&&s.push({type:"status",field:"status",expected:t.expect.status,actual:e.status,message:`Step ${t.id}: status is ${e.status}, expected ${t.expect.status}`}),t.expect.body?.has){let n=e.body;for(let o of t.expect.body.has)(!n||typeof n!="object"||!(o in n))&&s.push({type:"body.has",field:o,expected:true,actual:false,message:`Step ${t.id}: body missing key '${o}'`});}if(t.expect.body?.match){let n=e.body;for(let[o,r]of Object.entries(t.expect.body.match)){let i=n?Ds(n,o):void 0;JSON.stringify(i)!==JSON.stringify(r)&&s.push({type:"body.match",field:o,expected:r,actual:i??null,message:`Step ${t.id}: '${o}' is ${JSON.stringify(i??null)}, expected ${JSON.stringify(r)}`});}}if(t.signals&&t.signals.length>0){let n=e.signals_fired||[];for(let o of t.signals)n.includes(o)||s.push({type:"signal",field:"signals_fired",expected:o,actual:n,message:`Step ${t.id}: signal '${o}' was not fired`});}if(t.gates.length>0&&e.gates_traversed)for(let n of t.gates)e.gates_traversed.includes(n)||s.push({type:"gate",field:"gates_traversed",expected:n,actual:e.gates_traversed,message:`Step ${t.id}: gate '${n}' was not traversed`});return s}async function hr(t,e={}){let s=[];try{let{SentinelStorage:a}=await import('./dist-W3XCATBJ.js'),c=new a,d=(c.queryEvents?.({schemaId:"paradigm-personas",eventType:"persona.step.complete",scopeValue:t.id,limit:500})||[]).filter(g=>{let h=JSON.parse(g.data_json||"{}");return !(e.run_id&&h.run_id!==e.run_id||e.chain_id&&h.chain_id!==e.chain_id||e.environment&&h.environment!==e.environment)}),p=(c.queryEvents?.({schemaId:"paradigm-personas",eventType:"persona.step.fail",scopeValue:t.id,limit:500})||[]).filter(g=>{let h=JSON.parse(g.data_json||"{}");return !(e.run_id&&h.run_id!==e.run_id||e.chain_id&&h.chain_id!==e.chain_id||e.environment&&h.environment!==e.environment)}),m=new Map;for(let g of [...d,...p]){let h=JSON.parse(g.data_json||"{}");h.step_id&&m.set(h.step_id,h);}for(let g of t.journey){let h=m.get(g.id);if(!h){s.push({step_id:g.id,matched:!1,assertions:[],message:`No Sentinel event found for step '${g.id}' \u2014 step was never exercised`});continue}let v=Ms(g,{status:h.status,body:h.body,gates_traversed:h.gates_traversed,signals_fired:h.signals_fired});s.push({step_id:g.id,matched:!0,passed:v.length===0,assertions:v});}}catch{for(let a of t.journey)s.push({step_id:a.id,matched:false,assertions:[],message:"Sentinel unavailable \u2014 cannot validate events"});}let n=s.filter(a=>a.matched).length,o=s.filter(a=>a.passed).length,r=s.filter(a=>a.matched&&!a.passed).length,i=s.reduce((a,c)=>a+c.assertions.length,0);return {run_id:e.run_id,environment:e.environment,steps:s,summary:{total_steps:t.journey.length,matched:n,unmatched:t.journey.length-n,passed:o,failed:r,assertion_failures:i}}}var te=".paradigm/protocols",qt="index.yaml";async function ze(t){let e=k.join(t,te);if(!x.existsSync(e))return [];let s=x.readdirSync(e).filter(o=>o.endsWith(".protocol")).sort(),n=[];for(let o of s)try{let r=x.readFileSync(k.join(e,o),"utf8"),i=F.load(r);i?.id&&i?.name&&n.push(i);}catch{}return n}async function Us(t,e){let s=e.replace(/^P-/,""),n=k.join(t,te,`${s}.protocol`);if(x.existsSync(n))try{let r=x.readFileSync(n,"utf8");return F.load(r)}catch{return null}return (await ze(t)).find(r=>r.id===e)||null}async function wr(t){let e=k.join(t,te,qt);if(!x.existsSync(e))return null;try{let s=x.readFileSync(e,"utf8");return F.load(s)}catch{return null}}async function br(t,e,s=3){let n=await ze(t);if(n.length===0)return [];let o=Hs(e);if(o.length===0)return [];let r=[];for(let i of n){let a=0;for(let d of i.trigger){let u=d.toLowerCase();for(let p of o)u.includes(p)&&(a+=3);}for(let d of i.tags){let u=d.toLowerCase();for(let p of o)(u.includes(p)||p.includes(u))&&(a+=2);}let c=i.name.toLowerCase(),l=i.description.toLowerCase();for(let d of o)c.includes(d)&&(a+=1),l.includes(d)&&(a+=1);for(let d of i.steps)if(d.notes){let u=d.notes.toLowerCase();for(let p of o)u.includes(p)&&(a+=.5);}a>0&&r.push({protocol:i,score:a});}return r.sort((i,a)=>a.score-i.score),r.slice(0,s)}async function Sr(t,e){let s=k.join(t,te);x.existsSync(s)||x.mkdirSync(s,{recursive:true});let n=Gs(e.name),o=`P-${n}`,r=new Date().toISOString(),i={id:o,name:e.name,description:e.description,trigger:e.trigger,tags:e.tags,symbols:e.symbols||[],exemplar:e.exemplar,steps:e.steps,recorded_from:e.recorded_from,recorded_at:r,last_verified:r,verified_by:e.verified_by||"claude-opus-4-6",status:"current"},a=k.join(s,`${n}.protocol`);return x.writeFileSync(a,F.dump(i,{lineWidth:-1,noRefs:true}),"utf8"),o}async function xr(t,e,s,n=false){let o=await Us(t,e);if(!o)return false;s.name!==void 0&&(o.name=s.name),s.description!==void 0&&(o.description=s.description),s.trigger!==void 0&&(o.trigger=s.trigger),s.tags!==void 0&&(o.tags=s.tags),s.symbols!==void 0&&(o.symbols=s.symbols),s.exemplar!==void 0&&(o.exemplar=s.exemplar),s.steps!==void 0&&(o.steps=s.steps),s.status!==void 0&&(o.status=s.status),s.verified_by!==void 0&&(o.verified_by=s.verified_by),n&&(o.last_verified=new Date().toISOString(),o.verified_by=s.verified_by||"claude-opus-4-6");let r=e.replace(/^P-/,""),i=k.join(t,te,`${r}.protocol`);return x.writeFileSync(i,F.dump(o,{lineWidth:-1,noRefs:true}),"utf8"),true}function zs(t,e){let s=[],n="current";if(e.exemplar){let o=k.join(t,e.exemplar);x.existsSync(o)?x.statSync(o).mtime.toISOString()>e.last_verified&&(s.push(`Exemplar modified since last verified: ${e.exemplar}`),n!=="broken"&&(n="stale")):(s.push(`Exemplar missing: ${e.exemplar}`),n="broken");}for(let o of e.steps){if(o.template_from){let r=k.join(t,o.template_from);x.existsSync(r)||(s.push(`Template file missing: ${o.template_from}`),n="broken");}if(o.action==="modify"&&o.target){let r=k.join(t,o.target);!o.target.includes("{")&&!x.existsSync(r)&&(s.push(`Modify target missing: ${o.target}`),n="broken");}}return {status:n,issues:s}}async function Vt(t){let e=await ze(t),s=[],n=0,o=0,r=0;for(let c of e){let l=zs(t,c);if(c.status!==l.status){c.status=l.status;let d=c.id.replace(/^P-/,""),u=k.join(t,te,`${d}.protocol`);x.existsSync(u)&&x.writeFileSync(u,F.dump(c,{lineWidth:-1,noRefs:true}),"utf8");}switch(l.status){case "current":n++;break;case "stale":o++;break;case "broken":r++;break}s.push({id:c.id,name:c.name,status:l.status,last_verified:c.last_verified,trigger:c.trigger,tags:c.tags});}let i={version:"1.0",generated:new Date().toISOString(),protocols:s,health:{total:e.length,current:n,stale:o,broken:r}},a=k.join(t,te);if(e.length>0){x.existsSync(a)||x.mkdirSync(a,{recursive:true});let c=k.join(a,qt);x.writeFileSync(c,F.dump(i,{lineWidth:-1,noRefs:true}),"utf8");}return i}function vr(t,e,s){if(!e||e.length<2)return null;let n={};for(let o of e){let r=k.dirname(o);n[r]||(n[r]=[]),n[r].push(o);}for(let[o,r]of Object.entries(n)){if(r.length<2)continue;let i=k.join(t,o);if(!x.existsSync(i))continue;let c=x.readdirSync(i).filter(l=>{let d=k.extname(l);return [".ts",".tsx",".js",".jsx",".rs",".py"].includes(d)}).filter(l=>!r.some(d=>k.basename(d)===l));if(c.length>0){let l=k.join(o,c[0]),d=[...r.map(u=>({action:"create",target:u})),...s.map(u=>({action:"modify",target:u}))];return {hint:`This session created ${r.length} new files in ${o}/ following existing patterns. Consider recording a protocol.`,draft:{name:`Add a ${k.basename(o).replace(/s$/,"")}`,exemplar:l,steps:d}}}}return null}function Hs(t){return t.toLowerCase().replace(/[^a-z0-9\s-]/g," ").split(/\s+/).filter(e=>e.length>1).filter(e=>!Ws.has(e))}var Ws=new Set(["a","an","the","is","are","was","were","be","been","to","of","in","for","on","with","at","by","from","it","this","that","and","or","but","if","then","so","as","do","does","did","will","would","can","could","should","may","might","must","shall","i","me","my","we","our","you","your","he","she","how","what","when","where","which","who","whom"]);function Gs(t){return t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}var Q=".paradigm/university",K="content",We="notes",Se="policies",xe="quizzes",ve="paths",Yt="diplomas",Jt="index.yaml",Bs="config.yaml",Kt={name:"Project University",tagline:"Learn the codebase",institution:"Paradigm"},Qt={primary:"#6366f1",secondary:"#8b5cf6",accent:"#f59e0b",background:"#0f172a",surface:"#1e293b",text:"#f8fafc",textMuted:"#94a3b8",success:"#22c55e",error:"#ef4444",font:"Inter, system-ui, sans-serif"},He={branding:Kt,theme:Qt,content:{categories:[],defaultDifficulty:"beginner",requireApproval:false},diplomas:{includeGlobalPLSAT:true,customCertStyle:null}};function Ge(t){let e=k.join(t,Q,Bs);if(!x.existsSync(e))return {...He};try{let s=x.readFileSync(e,"utf8"),n=F.load(s);return n?{branding:{...Kt,...n.branding||{}},theme:{...Qt,...n.theme||{}},content:{categories:n.content?.categories||[],defaultDifficulty:n.content?.defaultDifficulty||"beginner",requireApproval:n.content?.requireApproval??!1,defaultCategory:n.content?.defaultCategory},diplomas:{includeGlobalPLSAT:n.diplomas?.includeGlobalPLSAT??!0,customCertStyle:n.diplomas?.customCertStyle??null}}:{...He}}catch{return {...He}}}function Ee(t){let e=k.join(t,Q,Jt);if(!x.existsSync(e))return null;try{let s=x.readFileSync(e,"utf8");return F.load(s)}catch{return null}}function Zt(t){let e=t.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);if(!e)return null;try{return {frontmatter:F.load(e[1]),body:e[2].trim()}}catch{return null}}function Xs(t,e){return `---
107
107
  ${F.dump(t,{lineWidth:-1,noRefs:true,sortKeys:false})}---
108
108
 
109
109
  ${e}
110
- `}function Tr(t,e){let s=Xe(t,e,".md");if(!s)return null;try{let n=x.readFileSync(s,"utf8"),o=Zt(n);if(!o)return null;let r=o.frontmatter;return {frontmatter:Js(r),body:o.body}}catch{return null}}function _r(t,e,s){let n=e.type==="policy"?Se:We,o=k.join(t,Q,K,n);x.mkdirSync(o,{recursive:true});let r=k.join(o,`${e.id}.md`),i=Xs(e,s);return x.writeFileSync(r,i,"utf8"),r}function qs(t,e){let s=Xe(t,e,".yaml");if(!s)return null;try{let n=x.readFileSync(s,"utf8"),o=F.load(n);return !o||!o.id?null:Ks(o)}catch{return null}}function $r(t,e){let s=k.join(t,Q,K,xe);x.mkdirSync(s,{recursive:true});let n=k.join(s,`${e.id}.yaml`);return x.writeFileSync(n,F.dump(e,{lineWidth:-1,noRefs:true}),"utf8"),n}function en(t,e){let s=Xe(t,e,".yaml");if(!s)return null;try{let n=x.readFileSync(s,"utf8"),o=F.load(n);return !o||!o.id?null:o}catch{return null}}function Rr(t,e){let s=k.join(t,Q,K,ve);x.mkdirSync(s,{recursive:true});let n=k.join(s,`${e.id}.yaml`);return x.writeFileSync(n,F.dump(e,{lineWidth:-1,noRefs:true}),"utf8"),n}function tn(t,e){let s=k.join(t,Q,Yt);if(!x.existsSync(s))return [];let n=[];try{let o=x.readdirSync(s).filter(r=>r.endsWith(".yaml"));for(let r of o)try{let i=x.readFileSync(k.join(s,r),"utf8"),a=F.load(i);if(!a||!a.id||e?.student&&a.student!==e.student||e?.type&&a.type!==e.type)continue;n.push(a);}catch{}}catch{}return n.sort((o,r)=>r.earnedAt.localeCompare(o.earnedAt))}function Ir(t,e){let s=Ee(t);if(!s)return [];let n=[...s.entries];if(e.type&&(n=n.filter(r=>r.type===e.type)),e.tag&&(n=n.filter(r=>r.tags.some(i=>i.startsWith(e.tag)))),e.difficulty&&(n=n.filter(r=>r.difficulty===e.difficulty)),e.symbol&&(n=n.filter(r=>r.symbols.some(i=>i===e.symbol))),e.author&&(n=n.filter(r=>r.author===e.author)),e.query){let r=e.query.toLowerCase();n=n.filter(i=>i.title.toLowerCase().includes(r)||i.id.toLowerCase().includes(r)||i.tags.some(a=>a.toLowerCase().includes(r)));}if(e.category&&(n=n.filter(r=>r.category===e.category)),e.track){let r=Ge(t),i=new Map;for(let a of r.content.categories)i.set(a.id,a.track||"core");n=n.filter(a=>(a.category&&i.get(a.category)||"core")===e.track);}let o=e.limit||20;return n.slice(0,o)}function Be(t){let e=k.join(t,Q),s=k.join(e,K),n=[];for(let d of [We,Se]){let u=k.join(s,d);if(x.existsSync(u))try{for(let p of x.readdirSync(u).filter(m=>m.endsWith(".md")))try{let m=x.readFileSync(k.join(u,p),"utf8"),g=Zt(m);if(!g)continue;let h=g.frontmatter;n.push({id:h.id||p.replace(".md",""),title:h.title||p,type:h.type||(d===Se?"policy":"note"),author:h.author||"unknown",created:h.created||"",updated:h.updated||"",tags:Array.isArray(h.tags)?h.tags:[],symbols:Array.isArray(h.symbols)?h.symbols:[],difficulty:h.difficulty||"beginner",file:`${K}/${d}/${p}`,...h.category?{category:h.category}:{}});}catch{}}catch{}}let o=k.join(s,xe);if(x.existsSync(o))try{for(let d of x.readdirSync(o).filter(u=>u.endsWith(".yaml")))try{let u=x.readFileSync(k.join(o,d),"utf8"),p=F.load(u);if(!p||!p.id)continue;n.push({id:p.id,title:p.title||d,type:"quiz",author:p.author||"unknown",created:p.created||"",updated:p.updated||"",tags:p.tags||[],symbols:p.symbols||[],difficulty:p.difficulty||"beginner",file:`${K}/${xe}/${d}`,...p.category?{category:p.category}:{}});}catch{}}catch{}let r=k.join(s,ve);if(x.existsSync(r))try{for(let d of x.readdirSync(r).filter(u=>u.endsWith(".yaml")))try{let u=x.readFileSync(k.join(r,d),"utf8"),p=F.load(u);if(!p||!p.id)continue;n.push({id:p.id,title:p.title||d,type:"path",author:p.author||"unknown",created:p.created||"",updated:p.updated||"",tags:p.tags||[],symbols:[],file:`${K}/${ve}/${d}`,...p.category?{category:p.category}:{}});}catch{}}catch{}let i=0,a=k.join(e,Yt);if(x.existsSync(a))try{i=x.readdirSync(a).filter(d=>d.endsWith(".yaml")).length;}catch{}let c={version:"1.0",generatedAt:new Date().toISOString(),totalContent:n.length,entries:n,diplomaCount:i};x.mkdirSync(e,{recursive:true});let l=k.join(e,Jt);return x.writeFileSync(l,F.dump(c,{lineWidth:-1,noRefs:true}),"utf8"),c}function kr(t,e){let s=Ee(t)||Be(t),n=[],o=s.entries;e?.id&&(o=o.filter(l=>l.id===e.id));let r=null;e?.deep&&(r=nn(t));let i=new Set(s.entries.map(l=>l.id));for(let l of o){if(l.title||n.push({contentId:l.id,severity:"error",check:"missing-title",message:"Content is missing a title",fix:"Add a title field to the content frontmatter"}),l.type==="quiz"&&Vs(t,l.id,n),l.type==="path"&&Ys(t,l.id,i,n),r&&l.symbols.length>0){Ge(t).content.categories.find(m=>m.id===l.category)?.validationStrictness==="relaxed";for(let m of l.symbols)r.has(m)||n.push({contentId:l.id,severity:"warning",check:"broken-symbol-ref",message:`Symbol "${m}" not found in scan-index`,fix:`Remove or update the symbol reference in ${l.id}`});}e?.deep&&l.symbols.length>0&&l.updated&&Zs(t,l,n);}let a=tn(t);for(let l of a)if(l.total>0&&l.percentage!==Math.round(l.score/l.total*1e4)/100){let d=Math.round(l.score/l.total*1e4)/100;Math.abs(l.percentage-d)>.1&&n.push({contentId:l.id,severity:"warning",check:"diploma-score-mismatch",message:`Diploma percentage ${l.percentage} doesn't match score ${l.score}/${l.total} (expected ${d})`});}let c=Qs(t,s);return {status:n.some(l=>l.severity==="error")?"errors":n.length>0?"warnings":"healthy",totalContent:s.totalContent,checked:o.length,issues:n,symbolCoverage:c}}function Vs(t,e,s){let n=qs(t,e);if(!n){s.push({contentId:e,severity:"error",check:"unreadable-quiz",message:"Quiz file could not be parsed"});return}(!n.passThreshold||n.passThreshold<0||n.passThreshold>1)&&s.push({contentId:e,severity:"warning",check:"invalid-pass-threshold",message:`passThreshold should be between 0 and 1, got ${n.passThreshold}`,fix:"Set passThreshold to a value between 0.0 and 1.0"});for(let o of n.questions){if(!o.choices||typeof o.choices!="object"){s.push({contentId:e,severity:"error",check:"invalid-quiz-choices",message:`Question ${o.id} has no choices defined`});continue}(!o.correct||!(o.correct in o.choices))&&s.push({contentId:e,severity:"error",check:"invalid-quiz-answer",message:`Question ${o.id}: correct answer "${o.correct}" not found in choices [${Object.keys(o.choices).join(", ")}]`,fix:`Set correct to one of: ${Object.keys(o.choices).join(", ")}`});}}function Ys(t,e,s,n){let o=en(t,e);if(!o){n.push({contentId:e,severity:"error",check:"unreadable-path",message:"Learning path file could not be parsed"});return}for(let r of o.steps)r.content.startsWith("plsat:")||s.has(r.content)||n.push({contentId:e,severity:"error",check:"broken-path-step",message:`Learning path step references "${r.content}" which doesn't exist`,fix:`Create content with id "${r.content}" or remove this step`});}function Pr(t,e){let s=Ee(t);if(!s)return [];let n=[];for(let o of s.entries)if(o.symbols.includes(e)){let r=sn(t,o,e);n.push({id:o.id,title:o.title,type:o.type,stale:r});}return n}function Cr(t,e){let s=Ee(t);if(!s)return {paths:[],suggestedContent:[],extracurricular:[],diplomaCount:0,totalContent:0};let n=Ge(t),o=new Set;for(let p of n.content.categories)p.excludeFromOnboarding&&o.add(p.id);let r=s.entries.filter(p=>!p.category||!o.has(p.category)),i=s.entries.filter(p=>p.category&&o.has(p.category)),a=r.filter(p=>p.type==="path"),c=e?tn(t,{student:e}):[],l=new Set(c.map(p=>p.source)),d=a.map(p=>{let m=en(t,p.id);return {id:p.id,title:p.title,steps:m?.steps.length||0,completed:l.has(p.id)}}),u=r.filter(p=>p.type!=="path"&&(p.difficulty==="beginner"||p.tags.includes("onboarding"))).slice(0,10);return {paths:d,suggestedContent:u,extracurricular:i,diplomaCount:c.length,totalContent:s.totalContent}}function Xe(t,e,s){let n=k.join(t,Q,K);for(let o of [We,Se,xe,ve]){let r=k.join(n,o,`${e}${s}`);if(x.existsSync(r))return r}return null}function Js(t){return {id:t.id||"",title:t.title||"",type:t.type||"note",author:t.author||"unknown",created:t.created||"",updated:t.updated||"",tags:Array.isArray(t.tags)?t.tags:[],symbols:Array.isArray(t.symbols)?t.symbols:[],difficulty:t.difficulty||"beginner",estimatedMinutes:t.estimatedMinutes,prerequisites:Array.isArray(t.prerequisites)?t.prerequisites:[],...t.category?{category:t.category}:{}}}function Ks(t){return {...t,tags:t.tags||[],symbols:t.symbols||[],difficulty:t.difficulty||"beginner",passThreshold:t.passThreshold??.7,questions:t.questions||[]}}function nn(t){let e=new Set,s=k.join(t,".paradigm","scan-index.json");if(!x.existsSync(s))return e;try{let n=x.readFileSync(s,"utf8"),o=JSON.parse(n);if(o.symbols&&Array.isArray(o.symbols))for(let r of o.symbols)r.symbol&&e.add(r.symbol);}catch{}return e}function Qs(t,e){let s=nn(t),n=new Set;for(let r of e.entries)for(let i of r.symbols)s.has(i)&&n.add(i);let o=s.size;return {totalSymbols:o,coveredByContent:n.size,percentage:o>0?Math.round(n.size/o*100):0}}function sn(t,e,s){if(!e.updated)return false;let n=new Date(e.updated).getTime();if(isNaN(n))return false;let o=k.join(t,".paradigm","scan-index.json");if(!x.existsSync(o))return false;try{let r=x.readFileSync(o,"utf8"),i=JSON.parse(r);if(i.symbols&&Array.isArray(i.symbols)){for(let a of i.symbols)if(a.symbol===s&&a.filePath){let c=k.join(t,a.filePath);if(x.existsSync(c)&&x.statSync(c).mtime.getTime()>n)return !0}}}catch{}return false}function Zs(t,e,s){for(let n of e.symbols)if(sn(t,e,n)){s.push({contentId:e.id,severity:"warning",check:"stale-content",message:`Content may be stale: symbol "${n}" was updated after content was last modified`,fix:`Review and update ${e.id} to reflect changes to ${n}`});break}}var eo={"@":{category:"features",prefix:"@"},"#":{category:"components",prefix:"#"},"^":{category:"gates",prefix:"^"},$:{category:"flows",prefix:"$"},"&":{category:"integrations",prefix:"&"},"!":{category:"signals",prefix:"!"},"%":{category:"state",prefix:"%"}},to={features:["src/features/","features/","app/","src/app/","src/modules/","modules/"],components:["src/components/","components/","src/lib/","lib/","src/ui/","ui/"],gates:["middleware/","src/middleware/","auth/","src/auth/","guards/","src/guards/"],flows:["flows/","src/flows/","workflows/","src/workflows/","sagas/","src/sagas/"],integrations:["integrations/","src/integrations/","external/","src/external/","vendors/"],signals:["events/","src/events/","handlers/","src/handlers/"],state:["stores/","src/stores/","state/","src/state/","reducers/","src/reducers/"]},no={config:[".paradigm/config.yaml","package.json","tsconfig.json",".env.example"],entry:["src/index.ts","src/index.tsx","src/main.ts","src/main.tsx","index.ts","main.ts","src/app.ts","src/app.tsx"],types:["src/types/","types/","src/types.ts","types.ts"]},qe={always:["node_modules/","dist/","build/",".git/",".next/",".nuxt/",".cache/","*.lock","*.log"],unless_testing:["**/*.test.ts","**/*.test.tsx","**/*.spec.ts","**/*.spec.tsx","__tests__/","test/","tests/"],unless_docs:["docs/","*.md","README*","CHANGELOG*"]};function Br(){return [{name:"paradigm_reindex",description:"Rebuild scan-index.json, navigator.yaml, and flow-index.json from .purpose files. Call after modifying paradigm files or at the end of a work session to ensure static index files are fresh. Returns counts of indexed symbols, files processed, and any errors. ~150 tokens.",inputSchema:{type:"object",properties:{}},annotations:{readOnlyHint:false,destructiveHint:true},aliases:["rebuild","refresh","rescan","regenerate index","update index"]}]}async function Xr(t,e,s,n){if(t!=="paradigm_reindex")return {handled:false,text:""};try{let o=await so(s.rootDir,s);await n(),Rt.clear(),kt();let r=(o.integrityReport?.brokenReferences?.length||0)+(o.integrityReport?.duplicateSymbols?.length||0)+(o.componentAnchorIssues||0)+(o.crossFileIssues||0),i={success:!0,symbolCount:o.symbolCount,breakdown:o.breakdown,flowCount:o.flowCount,filesWritten:o.filesWritten.length,...o.aspectGraphStats?{aspects:o.aspectGraphStats.aspects,loreLinks:o.aspectGraphStats.loreLinks}:{},...o.protocolHealth?{protocols:o.protocolHealth.total,staleProtocols:o.protocolHealth.stale}:{},...r>0?{issues:r}:{}},a=JSON.stringify(i,null,2);return je(a.length,t),{handled:!0,text:a}}catch(o){let r=JSON.stringify({error:o.message},null,2);return je(r.length,t),{handled:true,text:r}}}async function so(t,e){let s=[],n;e?n=e.aggregation:n=await Tt(t);let o=e?.projectName||k.basename(t),r=k.join(t,".paradigm");x.existsSync(r)||x.mkdirSync(r,{recursive:true});let i=Ce({symbols:n.symbols,purposeFiles:n.purposeFiles,portalFiles:n.portalFiles},{projectName:o}),a=k.join(r,"scan-index.json");x.writeFileSync(a,Ae(i),"utf8"),s.push(".paradigm/scan-index.json");let c=oo(t,n),l=k.join(r,"navigator.yaml");x.writeFileSync(l,F.dump(c,{indent:2,lineWidth:120,noRefs:true,sortKeys:false}),"utf8"),s.push(".paradigm/navigator.yaml");let d=uo(t,n.purposeFiles),u=0;if(d&&Object.keys(d.flows).length>0){let w=k.join(r,"flow-index.json");x.writeFileSync(w,JSON.stringify(d,null,2),"utf8"),s.push(".paradigm/flow-index.json"),u=Object.keys(d.flows).length;}let p;try{let w=await Ut(t);Ht(w,n.symbols,t);let I=await Gt(w,t),N=await Bt(w,t),ue=w.exec("SELECT COUNT(*) FROM aspects")[0]?.values[0]?.[0]??0,an=w.exec("SELECT COUNT(*) FROM anchors")[0]?.values[0]?.[0]??0,cn=w.exec("SELECT COUNT(*) FROM edges")[0]?.values[0]?.[0]??0;zt(w,t),s.push(".paradigm/aspect-graph.db"),p={aspects:ue,anchors:an,edges:cn,loreLinks:I};}catch{}let m=0;try{let w=await de(t);m=Object.keys(w.personas).length,m>0&&s.push(".paradigm/personas/index.yaml");}catch{}let g;try{let w=await Vt(t);w.health.total>0&&(g=w.health,s.push(".paradigm/protocols/index.yaml"));}catch{}let h;try{let w=k.join(t,".paradigm","university");if(x.existsSync(w)){let I=Be(t);(I.totalContent>0||I.diplomaCount>0)&&(h={totalContent:I.totalContent,diplomaCount:I.diplomaCount},s.push(".paradigm/university/index.yaml"));}}catch{}let v;try{v=a$1(n,t);}catch{}let T;try{let w=b$3(n.symbols,t),I=w.missing+w.outOfBounds;I>0&&(T=I);}catch{}let E;try{E=c$1(n.purposeFiles,t);}catch{}let _;try{let w=[];for(let I of n.purposeFiles){let N=Ie(I);N.data&&w.push({filePath:I,data:N.data});}if(w.length>0){let N=ht(w).issues.length;N>0&&(_=N);}}catch{}let S={};for(let w of n.symbols)S[w.type]=(S[w.type]||0)+1;let b={};for(let w of n.symbols)w.type==="component"&&w.componentType&&(b[w.componentType]=(b[w.componentType]||0)+1);return {action:"reindex",filesWritten:s,symbolCount:n.symbols.length,breakdown:S,flowCount:u,aspectGraphStats:p,personaCount:m,protocolHealth:g,...Object.keys(b).length>0?{componentTypeBreakdown:b}:{},...h?{universityStats:h}:{},...v?{integrityReport:v}:{},...T!==void 0?{componentAnchorIssues:T}:{},...E?{purposeHealth:E}:{},..._!==void 0?{crossFileIssues:_}:{}}}function oo(t,e){let s={};for(let n of e.symbols)if(n.type==="component"&&n.componentType){let o=n.componentType;s[o]||(s[o]=[]),s[o].push(n.symbol);}return {version:"1.0",generated:new Date().toISOString(),structure:ro(t),key_files:io(t),skip_patterns:ao(t),symbols:lo(e.symbols,e.purposeFiles),...Object.keys(s).length>0?{symbolsByComponentType:s}:{}}}function ro(t){let e={};for(let[s,n]of Object.entries(to)){let o=n.filter(r=>x.existsSync(k.join(t,r)));if(o.length>0){let r=Object.values(eo).find(i=>i.category===s);e[s]={paths:o,symbol:r?.prefix||"@"};}}return e}function io(t){let e={};for(let[s,n]of Object.entries(no)){let o=n.filter(r=>x.existsSync(k.join(t,r)));o.length>0&&(e[s]=o);}return e.config||(e.config=[]),e.entry||(e.entry=[]),e.types||(e.types=[]),e}function ao(t){let e={always:[...qe.always],unless_testing:[...qe.unless_testing],unless_docs:[...qe.unless_docs]},s=k.join(t,".gitignore");if(x.existsSync(s))try{let o=x.readFileSync(s,"utf8").split(`
110
+ `}function Tr(t,e){let s=Xe(t,e,".md");if(!s)return null;try{let n=x.readFileSync(s,"utf8"),o=Zt(n);if(!o)return null;let r=o.frontmatter;return {frontmatter:Js(r),body:o.body}}catch{return null}}function _r(t,e,s){let n=e.type==="policy"?Se:We,o=k.join(t,Q,K,n);x.mkdirSync(o,{recursive:true});let r=k.join(o,`${e.id}.md`),i=Xs(e,s);return x.writeFileSync(r,i,"utf8"),r}function qs(t,e){let s=Xe(t,e,".yaml");if(!s)return null;try{let n=x.readFileSync(s,"utf8"),o=F.load(n);return !o||!o.id?null:Ks(o)}catch{return null}}function $r(t,e){let s=k.join(t,Q,K,xe);x.mkdirSync(s,{recursive:true});let n=k.join(s,`${e.id}.yaml`);return x.writeFileSync(n,F.dump(e,{lineWidth:-1,noRefs:true}),"utf8"),n}function en(t,e){let s=Xe(t,e,".yaml");if(!s)return null;try{let n=x.readFileSync(s,"utf8"),o=F.load(n);return !o||!o.id?null:o}catch{return null}}function Rr(t,e){let s=k.join(t,Q,K,ve);x.mkdirSync(s,{recursive:true});let n=k.join(s,`${e.id}.yaml`);return x.writeFileSync(n,F.dump(e,{lineWidth:-1,noRefs:true}),"utf8"),n}function tn(t,e){let s=k.join(t,Q,Yt);if(!x.existsSync(s))return [];let n=[];try{let o=x.readdirSync(s).filter(r=>r.endsWith(".yaml"));for(let r of o)try{let i=x.readFileSync(k.join(s,r),"utf8"),a=F.load(i);if(!a||!a.id||e?.student&&a.student!==e.student||e?.type&&a.type!==e.type)continue;n.push(a);}catch{}}catch{}return n.sort((o,r)=>r.earnedAt.localeCompare(o.earnedAt))}function Ir(t,e){let s=Ee(t);if(!s)return [];let n=[...s.entries];if(e.type&&(n=n.filter(r=>r.type===e.type)),e.tag&&(n=n.filter(r=>r.tags.some(i=>i.startsWith(e.tag)))),e.difficulty&&(n=n.filter(r=>r.difficulty===e.difficulty)),e.symbol&&(n=n.filter(r=>r.symbols.some(i=>i===e.symbol))),e.author&&(n=n.filter(r=>r.author===e.author)),e.query){let r=e.query.toLowerCase();n=n.filter(i=>i.title.toLowerCase().includes(r)||i.id.toLowerCase().includes(r)||i.tags.some(a=>a.toLowerCase().includes(r)));}if(e.category&&(n=n.filter(r=>r.category===e.category)),e.track){let r=Ge(t),i=new Map;for(let a of r.content.categories)i.set(a.id,a.track||"core");n=n.filter(a=>(a.category&&i.get(a.category)||"core")===e.track);}let o=e.limit||20;return n.slice(0,o)}function Be(t){let e=k.join(t,Q),s=k.join(e,K),n=[];for(let d of [We,Se]){let u=k.join(s,d);if(x.existsSync(u))try{for(let p of x.readdirSync(u).filter(m=>m.endsWith(".md")))try{let m=x.readFileSync(k.join(u,p),"utf8"),g=Zt(m);if(!g)continue;let h=g.frontmatter;n.push({id:h.id||p.replace(".md",""),title:h.title||p,type:h.type||(d===Se?"policy":"note"),author:h.author||"unknown",created:h.created||"",updated:h.updated||"",tags:Array.isArray(h.tags)?h.tags:[],symbols:Array.isArray(h.symbols)?h.symbols:[],difficulty:h.difficulty||"beginner",file:`${K}/${d}/${p}`,...h.category?{category:h.category}:{}});}catch{}}catch{}}let o=k.join(s,xe);if(x.existsSync(o))try{for(let d of x.readdirSync(o).filter(u=>u.endsWith(".yaml")))try{let u=x.readFileSync(k.join(o,d),"utf8"),p=F.load(u);if(!p||!p.id)continue;n.push({id:p.id,title:p.title||d,type:"quiz",author:p.author||"unknown",created:p.created||"",updated:p.updated||"",tags:p.tags||[],symbols:p.symbols||[],difficulty:p.difficulty||"beginner",file:`${K}/${xe}/${d}`,...p.category?{category:p.category}:{}});}catch{}}catch{}let r=k.join(s,ve);if(x.existsSync(r))try{for(let d of x.readdirSync(r).filter(u=>u.endsWith(".yaml")))try{let u=x.readFileSync(k.join(r,d),"utf8"),p=F.load(u);if(!p||!p.id)continue;n.push({id:p.id,title:p.title||d,type:"path",author:p.author||"unknown",created:p.created||"",updated:p.updated||"",tags:p.tags||[],symbols:[],file:`${K}/${ve}/${d}`,...p.category?{category:p.category}:{}});}catch{}}catch{}let i=0,a=k.join(e,Yt);if(x.existsSync(a))try{i=x.readdirSync(a).filter(d=>d.endsWith(".yaml")).length;}catch{}let c={version:"1.0",generatedAt:new Date().toISOString(),totalContent:n.length,entries:n,diplomaCount:i};x.mkdirSync(e,{recursive:true});let l=k.join(e,Jt);return x.writeFileSync(l,F.dump(c,{lineWidth:-1,noRefs:true}),"utf8"),c}function kr(t,e){let s=Ee(t)||Be(t),n=[],o=s.entries;e?.id&&(o=o.filter(l=>l.id===e.id));let r=null;e?.deep&&(r=nn(t));let i=new Set(s.entries.map(l=>l.id));for(let l of o){if(l.title||n.push({contentId:l.id,severity:"error",check:"missing-title",message:"Content is missing a title",fix:"Add a title field to the content frontmatter"}),l.type==="quiz"&&Vs(t,l.id,n),l.type==="path"&&Ys(t,l.id,i,n),r&&l.symbols.length>0){Ge(t).content.categories.find(m=>m.id===l.category)?.validationStrictness==="relaxed";for(let m of l.symbols)r.has(m)||n.push({contentId:l.id,severity:"warning",check:"broken-symbol-ref",message:`Symbol "${m}" not found in scan-index`,fix:`Remove or update the symbol reference in ${l.id}`});}e?.deep&&l.symbols.length>0&&l.updated&&Zs(t,l,n);}let a=tn(t);for(let l of a)if(l.total>0&&l.percentage!==Math.round(l.score/l.total*1e4)/100){let d=Math.round(l.score/l.total*1e4)/100;Math.abs(l.percentage-d)>.1&&n.push({contentId:l.id,severity:"warning",check:"diploma-score-mismatch",message:`Diploma percentage ${l.percentage} doesn't match score ${l.score}/${l.total} (expected ${d})`});}let c=Qs(t,s);return {status:n.some(l=>l.severity==="error")?"errors":n.length>0?"warnings":"healthy",totalContent:s.totalContent,checked:o.length,issues:n,symbolCoverage:c}}function Vs(t,e,s){let n=qs(t,e);if(!n){s.push({contentId:e,severity:"error",check:"unreadable-quiz",message:"Quiz file could not be parsed"});return}(!n.passThreshold||n.passThreshold<0||n.passThreshold>1)&&s.push({contentId:e,severity:"warning",check:"invalid-pass-threshold",message:`passThreshold should be between 0 and 1, got ${n.passThreshold}`,fix:"Set passThreshold to a value between 0.0 and 1.0"});for(let o of n.questions){if(!o.choices||typeof o.choices!="object"){s.push({contentId:e,severity:"error",check:"invalid-quiz-choices",message:`Question ${o.id} has no choices defined`});continue}(!o.correct||!(o.correct in o.choices))&&s.push({contentId:e,severity:"error",check:"invalid-quiz-answer",message:`Question ${o.id}: correct answer "${o.correct}" not found in choices [${Object.keys(o.choices).join(", ")}]`,fix:`Set correct to one of: ${Object.keys(o.choices).join(", ")}`});}}function Ys(t,e,s,n){let o=en(t,e);if(!o){n.push({contentId:e,severity:"error",check:"unreadable-path",message:"Learning path file could not be parsed"});return}for(let r of o.steps)r.content.startsWith("plsat:")||s.has(r.content)||n.push({contentId:e,severity:"error",check:"broken-path-step",message:`Learning path step references "${r.content}" which doesn't exist`,fix:`Create content with id "${r.content}" or remove this step`});}function Pr(t,e){let s=Ee(t);if(!s)return [];let n=[];for(let o of s.entries)if(o.symbols.includes(e)){let r=sn(t,o,e);n.push({id:o.id,title:o.title,type:o.type,stale:r});}return n}function Cr(t,e){let s=Ee(t);if(!s)return {paths:[],suggestedContent:[],extracurricular:[],diplomaCount:0,totalContent:0};let n=Ge(t),o=new Set;for(let p of n.content.categories)p.excludeFromOnboarding&&o.add(p.id);let r=s.entries.filter(p=>!p.category||!o.has(p.category)),i=s.entries.filter(p=>p.category&&o.has(p.category)),a=r.filter(p=>p.type==="path"),c=e?tn(t,{student:e}):[],l=new Set(c.map(p=>p.source)),d=a.map(p=>{let m=en(t,p.id);return {id:p.id,title:p.title,steps:m?.steps.length||0,completed:l.has(p.id)}}),u=r.filter(p=>p.type!=="path"&&(p.difficulty==="beginner"||p.tags.includes("onboarding"))).slice(0,10);return {paths:d,suggestedContent:u,extracurricular:i,diplomaCount:c.length,totalContent:s.totalContent}}function Xe(t,e,s){let n=k.join(t,Q,K);for(let o of [We,Se,xe,ve]){let r=k.join(n,o,`${e}${s}`);if(x.existsSync(r))return r}return null}function Js(t){return {id:t.id||"",title:t.title||"",type:t.type||"note",author:t.author||"unknown",created:t.created||"",updated:t.updated||"",tags:Array.isArray(t.tags)?t.tags:[],symbols:Array.isArray(t.symbols)?t.symbols:[],difficulty:t.difficulty||"beginner",estimatedMinutes:t.estimatedMinutes,prerequisites:Array.isArray(t.prerequisites)?t.prerequisites:[],...t.category?{category:t.category}:{}}}function Ks(t){return {...t,tags:t.tags||[],symbols:t.symbols||[],difficulty:t.difficulty||"beginner",passThreshold:t.passThreshold??.7,questions:t.questions||[]}}function nn(t){let e=new Set,s=k.join(t,".paradigm","scan-index.json");if(!x.existsSync(s))return e;try{let n=x.readFileSync(s,"utf8"),o=JSON.parse(n);if(o.symbols&&Array.isArray(o.symbols))for(let r of o.symbols)r.symbol&&e.add(r.symbol);}catch{}return e}function Qs(t,e){let s=nn(t),n=new Set;for(let r of e.entries)for(let i of r.symbols)s.has(i)&&n.add(i);let o=s.size;return {totalSymbols:o,coveredByContent:n.size,percentage:o>0?Math.round(n.size/o*100):0}}function sn(t,e,s){if(!e.updated)return false;let n=new Date(e.updated).getTime();if(isNaN(n))return false;let o=k.join(t,".paradigm","scan-index.json");if(!x.existsSync(o))return false;try{let r=x.readFileSync(o,"utf8"),i=JSON.parse(r);if(i.symbols&&Array.isArray(i.symbols)){for(let a of i.symbols)if(a.symbol===s&&a.filePath){let c=k.join(t,a.filePath);if(x.existsSync(c)&&x.statSync(c).mtime.getTime()>n)return !0}}}catch{}return false}function Zs(t,e,s){for(let n of e.symbols)if(sn(t,e,n)){s.push({contentId:e.id,severity:"warning",check:"stale-content",message:`Content may be stale: symbol "${n}" was updated after content was last modified`,fix:`Review and update ${e.id} to reflect changes to ${n}`});break}}var eo={"@":{category:"features",prefix:"@"},"#":{category:"components",prefix:"#"},"^":{category:"gates",prefix:"^"},$:{category:"flows",prefix:"$"},"&":{category:"integrations",prefix:"&"},"!":{category:"signals",prefix:"!"},"%":{category:"state",prefix:"%"}},to={features:["src/features/","features/","app/","src/app/","src/modules/","modules/"],components:["src/components/","components/","src/lib/","lib/","src/ui/","ui/"],gates:["middleware/","src/middleware/","auth/","src/auth/","guards/","src/guards/"],flows:["flows/","src/flows/","workflows/","src/workflows/","sagas/","src/sagas/"],integrations:["integrations/","src/integrations/","external/","src/external/","vendors/"],signals:["events/","src/events/","handlers/","src/handlers/"],state:["stores/","src/stores/","state/","src/state/","reducers/","src/reducers/"]},no={config:[".paradigm/config.yaml","package.json","tsconfig.json",".env.example"],entry:["src/index.ts","src/index.tsx","src/main.ts","src/main.tsx","index.ts","main.ts","src/app.ts","src/app.tsx"],types:["src/types/","types/","src/types.ts","types.ts"]},qe={always:["node_modules/","dist/","build/",".git/",".next/",".nuxt/",".cache/","*.lock","*.log"],unless_testing:["**/*.test.ts","**/*.test.tsx","**/*.spec.ts","**/*.spec.tsx","__tests__/","test/","tests/"],unless_docs:["docs/","*.md","README*","CHANGELOG*"]};function Br(){return [{name:"paradigm_reindex",description:"Rebuild scan-index.json, navigator.yaml, and flow-index.json from .purpose files. Call after modifying paradigm files or at the end of a work session to ensure static index files are fresh. Returns counts of indexed symbols, files processed, and any errors. ~150 tokens.",inputSchema:{type:"object",properties:{}},annotations:{readOnlyHint:false,destructiveHint:true},aliases:["rebuild","refresh","rescan","regenerate index","update index"]}]}async function Xr(t,e,s,n){if(t!=="paradigm_reindex")return {handled:false,text:""};try{let o=await so(s.rootDir,s);await n(),Rt.clear(),kt();let r=(o.integrityReport?.brokenReferences?.length||0)+(o.integrityReport?.duplicateSymbols?.length||0)+(o.componentAnchorIssues||0)+(o.crossFileIssues||0),i={success:!0,symbolCount:o.symbolCount,breakdown:o.breakdown,flowCount:o.flowCount,filesWritten:o.filesWritten.length,...o.aspectGraphStats?{aspects:o.aspectGraphStats.aspects,loreLinks:o.aspectGraphStats.loreLinks}:{},...o.protocolHealth?{protocols:o.protocolHealth.total,staleProtocols:o.protocolHealth.stale}:{},...r>0?{issues:r}:{}},a=JSON.stringify(i,null,2);return je(a.length,t),{handled:!0,text:a}}catch(o){let r=JSON.stringify({error:o.message},null,2);return je(r.length,t),{handled:true,text:r}}}async function so(t,e){let s=[],n;e?n=e.aggregation:n=await Tt(t);let o=e?.projectName||k.basename(t),r=k.join(t,".paradigm");x.existsSync(r)||x.mkdirSync(r,{recursive:true});let i=Ce({symbols:n.symbols,purposeFiles:n.purposeFiles,portalFiles:n.portalFiles},{projectName:o}),a=k.join(r,"scan-index.json");x.writeFileSync(a,Ae(i),"utf8"),s.push(".paradigm/scan-index.json");let c=oo(t,n),l=k.join(r,"navigator.yaml");x.writeFileSync(l,F.dump(c,{indent:2,lineWidth:120,noRefs:true,sortKeys:false}),"utf8"),s.push(".paradigm/navigator.yaml");let d=uo(t,n.purposeFiles),u=0;if(d&&Object.keys(d.flows).length>0){let w=k.join(r,"flow-index.json");x.writeFileSync(w,JSON.stringify(d,null,2),"utf8"),s.push(".paradigm/flow-index.json"),u=Object.keys(d.flows).length;}let p;try{let w=await Ut(t);Ht(w,n.symbols,t);let I=await Gt(w,t),N=await Bt(w,t),ue=w.exec("SELECT COUNT(*) FROM aspects")[0]?.values[0]?.[0]??0,an=w.exec("SELECT COUNT(*) FROM anchors")[0]?.values[0]?.[0]??0,cn=w.exec("SELECT COUNT(*) FROM edges")[0]?.values[0]?.[0]??0;zt(w,t),s.push(".paradigm/aspect-graph.db"),p={aspects:ue,anchors:an,edges:cn,loreLinks:I};}catch{}let m=0;try{let w=await de(t);m=Object.keys(w.personas).length,m>0&&s.push(".paradigm/personas/index.yaml");}catch{}let g;try{let w=await Vt(t);w.health.total>0&&(g=w.health,s.push(".paradigm/protocols/index.yaml"));}catch{}let h;try{let w=k.join(t,".paradigm","university");if(x.existsSync(w)){let I=Be(t);(I.totalContent>0||I.diplomaCount>0)&&(h={totalContent:I.totalContent,diplomaCount:I.diplomaCount},s.push(".paradigm/university/index.yaml"));}}catch{}let v;try{v=a$1(n,t);}catch{}let T;try{let w=b$3(n.symbols,t),I=w.missing+w.outOfBounds;I>0&&(T=I);}catch{}let E;try{E=c$2(n.purposeFiles,t);}catch{}let _;try{let w=[];for(let I of n.purposeFiles){let N=Ie(I);N.data&&w.push({filePath:I,data:N.data});}if(w.length>0){let N=ht(w).issues.length;N>0&&(_=N);}}catch{}let S={};for(let w of n.symbols)S[w.type]=(S[w.type]||0)+1;let b={};for(let w of n.symbols)w.type==="component"&&w.componentType&&(b[w.componentType]=(b[w.componentType]||0)+1);return {action:"reindex",filesWritten:s,symbolCount:n.symbols.length,breakdown:S,flowCount:u,aspectGraphStats:p,personaCount:m,protocolHealth:g,...Object.keys(b).length>0?{componentTypeBreakdown:b}:{},...h?{universityStats:h}:{},...v?{integrityReport:v}:{},...T!==void 0?{componentAnchorIssues:T}:{},...E?{purposeHealth:E}:{},..._!==void 0?{crossFileIssues:_}:{}}}function oo(t,e){let s={};for(let n of e.symbols)if(n.type==="component"&&n.componentType){let o=n.componentType;s[o]||(s[o]=[]),s[o].push(n.symbol);}return {version:"1.0",generated:new Date().toISOString(),structure:ro(t),key_files:io(t),skip_patterns:ao(t),symbols:lo(e.symbols,e.purposeFiles),...Object.keys(s).length>0?{symbolsByComponentType:s}:{}}}function ro(t){let e={};for(let[s,n]of Object.entries(to)){let o=n.filter(r=>x.existsSync(k.join(t,r)));if(o.length>0){let r=Object.values(eo).find(i=>i.category===s);e[s]={paths:o,symbol:r?.prefix||"@"};}}return e}function io(t){let e={};for(let[s,n]of Object.entries(no)){let o=n.filter(r=>x.existsSync(k.join(t,r)));o.length>0&&(e[s]=o);}return e.config||(e.config=[]),e.entry||(e.entry=[]),e.types||(e.types=[]),e}function ao(t){let e={always:[...qe.always],unless_testing:[...qe.unless_testing],unless_docs:[...qe.unless_docs]},s=k.join(t,".gitignore");if(x.existsSync(s))try{let o=x.readFileSync(s,"utf8").split(`
111
111
  `).map(r=>r.trim()).filter(r=>r&&!r.startsWith("#")).filter(r=>r.endsWith("/")||r.includes("*")||["node_modules","dist","build",".cache"].some(i=>r.includes(i))).slice(0,20);for(let r of o)e.always.includes(r)||e.always.push(r);}catch{}return e}function co(t){switch(t){case "feature":return "@";case "component":return "#";case "gate":return "^";case "flow":return "$";case "integration":return "&";case "signal":return "!";case "state":return "%";case "idea":return "?";case "deprecated":return "~";case "aspect":return "~";default:return "@"}}function lo(t,e,s){let n={};for(let o of t){let i=`${co(o.type)}${o.id}`;if(o.filePath)n[i]=o.filePath;else {let a=e.find(c=>k.dirname(c).toLowerCase().includes(o.id.toLowerCase()));a&&(n[i]=k.dirname(a)+"/");}}return n}function uo(t,e){let s={},n={};for(let o of e)try{let r=x.readFileSync(o,"utf8"),i=F.load(r);if(!i?.flows)continue;if(Array.isArray(i.flows))for(let a of i.flows){let c=a;if(!c.name)continue;let l=`$${c.name}`,d=on(c.steps);d.length>0&&(s[l]={id:l,description:c.description||"",steps:d,definedIn:k.relative(t,o)},rn(l,d,n));}else for(let[a,c]of Object.entries(i.flows)){let l=a.startsWith("$")?a:`$${a}`,d=on(c.steps);d.length>0&&(s[l]={id:l,description:c.description||"",trigger:c.trigger,steps:d,validation:c.validation,definedIn:k.relative(t,o)},rn(l,d,n));}}catch{}return Object.keys(s).length===0?null:{version:"1.0",generatedAt:new Date().toISOString(),flows:s,symbolToFlows:n}}function on(t){if(!t||!Array.isArray(t))return [];let e=[];for(let s=0;s<t.length;s++){let n=t[s];if(typeof n=="object"&&n!==null){let o=n,r=o.action||o.description||o.component||"";r&&e.push({id:o.id||`step-${s+1}`,action:r,symbol:o.symbol||o.component,expect:o.expect});}}return e}function rn(t,e,s){for(let n of e)n.symbol&&(s[n.symbol]||(s[n.symbol]=[]),s[n.symbol].includes(t)||s[n.symbol].push(t));}export{Ut as $,dr as A,ur as B,pr as C,fr as D,gr as E,mr as F,hr as G,Ge as H,Tr as I,_r as J,qs as K,$r as L,en as M,Rr as N,Ir as O,Be as P,kr as Q,Pr as R,Cr as S,ze as T,Us as U,wr as V,br as W,Sr as X,xr as Y,zs as Z,vr as _,_n as a,zt as aa,fo as b,Ko as ba,Rn as c,Qo as ca,mo as d,Zo as da,me as e,er as ea,Tt as f,tr as fa,Eo as g,nr as ga,he as h,sr as ha,To as i,or as ia,_o as j,ar as ja,$o as k,Br as ka,Ro as l,Xr as la,Io as m,so as ma,ko as n,je as o,Uo as p,zo as q,Ho as r,Wo as s,Go as t,It as u,Rt as v,ce as w,le as x,lr as y,Xt as z};
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import {a as a$3}from'./chunk-TYWB5IQJ.js';import {b,a as a$1}from'./chunk-5YHR77AL.js';import {e}from'./chunk-AO7ZSRME.js';import {a}from'./chunk-FYDRENK7.js';import {b as b$1}from'./chunk-EKZDFEJW.js';import {a as a$2,b as b$2}from'./chunk-SHD27BQX.js';import {o,t,x}from'./chunk-T6IDXUUA.js';import'minimatch';import*as w from'fs';import*as C from'path';import*as F from'js-yaml';import {spawn}from'child_process';var ee=["should","what","how","why","recommend","analyze","compare","evaluate","assess","review","explain","describe","investigate","which","best practice","trade-off","tradeoff","pros and cons","decision"],te=["document","write docs","readme",".purpose","purpose file","jsdoc","tsdoc","comments","docstring","api docs","changelog","architecture doc"],se=["bug","fix","broken","not working","issue","error","crash","fails","failing","wrong","incorrect","doesn't work","doesn't","cant","can't","regression","patch"],re=["rename","refactor","migrate","restructure","move","reorganize","clean up","cleanup","consolidate","extract","inline","simplify","modularize","decouple","split","merge"],ne=["auth","authentication","authorization","permission","admin","delete","purge","password","credential","token","secret","key","encrypt","decrypt","hash","session","oauth","jwt","api key","role","access","gate","portal","sensitive","private","security","vulnerability","xss","sql injection","csrf"],oe=/[@#$%^!?&~][a-zA-Z0-9_-]+/g,Y={analysis:{agents:["architect"],models:{architect:"opus"},costMultiplier:{min:.3,max:.5}},documentation:{agents:["architect"],models:{architect:"sonnet"},costMultiplier:{min:.25,max:.45}},bugfix:{agents:["security","builder"],models:{security:"opus",builder:"haiku"},costMultiplier:{min:.5,max:.8}},refactor:{agents:["architect","builder"],models:{architect:"opus",builder:"haiku"},costMultiplier:{min:.6,max:.85}},feature:{agents:["architect","security","builder","tester"],models:{architect:"opus",security:"opus",builder:"haiku",tester:"haiku"},costMultiplier:{min:.8,max:1.2}}};function ie(f){let s=f.match(oe)||[];return [...new Set(s)]}function $(f,s){let e=f.toLowerCase();return s.filter(t=>e.includes(t.toLowerCase()))}function ae(f,s,e,t){let n=0;e.length>=5?n+=2:e.length>=2&&(n+=1);let o=f.split(/\s+/).length;o>=100?n+=2:o>=50&&(n+=1);let r=new Set(e.map(a=>a[0]));return r.size>=4?n+=2:r.size>=2&&(n+=1),e.some(a=>a.startsWith("^"))&&(n+=1),e.some(a=>a.startsWith("$"))&&(n+=1),s==="feature"&&(n+=1),s==="refactor"&&(n+=1),n>=5?"high":n>=2?"medium":"low"}function le(f,s,e){if($(f,ne).length>0||s.some(n=>n.startsWith("^")))return true;return false}function K(f,s){let e=ie(f),t=$(f,ee),n=$(f,te),o=$(f,se),r=$(f,re),a,i;t.length>0&&o.length===0&&r.length===0?(a="analysis",i=t):n.length>0&&o.length===0?(a="documentation",i=n):o.length>0?(a="bugfix",i=o):r.length>0?(a="refactor",i=r):(a="feature",i=[]);let l=Y[a],g=le(f,e),c=[...l.agents];g&&!c.includes("security")&&(c=["security",...c]);let p=ae(f,a,e),h={...l.costMultiplier};return p==="high"?(h.min*=1.2,h.max*=1.3):p==="low"&&(h.min*=.8,h.max*=.9),g&&!l.agents.includes("security")&&(h.min+=.15,h.max+=.2),{type:a,complexity:p,recommendedAgents:c,securityRequired:g,costMultiplier:h,matchedKeywords:i,symbols:e}}function B(f,s){let e=Y[s.type];return f==="security"&&s.securityRequired?"opus":e.models[f]||"sonnet"}var ce=/[@#$%^!?&~][a-zA-Z][a-zA-Z0-9_-]*/g,ue=[/\.(get|post|put|patch|delete)\s*\(\s*['"`]([^'"`]+)['"`]/gi,/export\s+(async\s+)?function\s+(GET|POST|PUT|PATCH|DELETE)/gi,/export\s+(async\s+)?function\s+(GET|POST|PUT|PATCH|DELETE)/gi,/\.(get|post|put|patch|delete)\s*\(\s*['"`]([^'"`]+)['"`]/gi],de=["endpoint","route","api","handler","get","post","put","patch","delete","rest","crud","controller"];function V(f,s,e$1){let t$1=f.toLowerCase(),n=f.match(ce)||[],o=[...new Set(n)],r=o.map(d=>{let u=t(e$1,d),y=u.length>0?u[0]:null;return {symbol:d,exists:!!y,type:y?.type,description:y?.description}}),a=r.filter(d=>d.exists).map(d=>{let u=x(e$1,d.symbol),y=new Set;for(let b of u){let S=x(e$1,b.symbol);for(let O of S)O.symbol!==d.symbol&&!u.find(v=>v.symbol===O.symbol)&&y.add(O.symbol);}let k=u.length+y.size,m="low";return k>10?m="high":k>3&&(m="medium"),{symbol:d.symbol,directDependents:u.length,indirectDependents:y.size,impact:m}}),i=a$2(s),l={exists:!!i,gateCount:i?b$2(i).length:0,gates:i?b$2(i).map(d=>`^${d}`):[],routeCount:i?.routes?Object.keys(i.routes).length:0},g=de.some(d=>t$1.includes(d)),c=e(s),p=c?a$3(f,c.agents).map(d=>({name:d.name,confidence:d.confidence,reason:d.reason})):[],h=[];return r.some(d=>d.exists)&&h.push("ripple-analysis"),g&&h.push("portal-compliance"),o.some(d=>d.startsWith("^"))&&h.push("gate-validation"),o.some(d=>d.startsWith("!"))&&h.push("signal-registration"),h.push("purpose-coverage"),{affectedSymbols:r,rippleAnalysis:a,portalStatus:l,taskAddsRoutes:g,suggestedAgents:p,requiredChecks:h}}function H(f,s,e,t$1){let n=[],o=a$2(e),r=o?b$2(o):[],a=o?.routes?Object.keys(o.routes):[];for(let p of f){let h=C.isAbsolute(p)?p:C.join(e,p);if(!w.existsSync(h))continue;let d;try{d=w.readFileSync(h,"utf-8");}catch{continue}for(let u of ue){u.lastIndex=0;let y;for(;(y=u.exec(d))!==null;){let k=y[2]||y[0];k&&k.startsWith("/")&&(!a.some(b=>b.replace(/\s+(GET|POST|PUT|PATCH|DELETE)\s*$/,"").trim()===k)&&o?n.push({type:"missing-portal-gate",severity:"warning",message:`Route "${k}" found in ${C.relative(e,h)} but not declared in portal.yaml`,file:C.relative(e,h),suggestion:"Add this route to portal.yaml with appropriate ^gates. Run paradigm_gates_for_route to get suggestions."}):!o&&k.startsWith("/api/")&&n.push({type:"missing-portal-gate",severity:"warning",message:`API route "${k}" found but no portal.yaml exists`,file:C.relative(e,h),suggestion:"Create portal.yaml to declare gates for API routes. Run: paradigm portal init"}));}}}for(let p of s)t(t$1,p).length===0&&n.push({type:"unregistered-symbol",severity:"error",message:`Symbol "${p}" was touched but is not registered in any .purpose file`,suggestion:`Add "${p}" to the nearest .purpose file. Use paradigm_purpose_add_component or paradigm_purpose_add_signal.`});for(let p of s)if(p.startsWith("^")){let h=p.slice(1);r.includes(h)||n.push({type:"missing-portal-gate",severity:"error",message:`Gate "${p}" is referenced but not declared in portal.yaml`,suggestion:`Add ${p} to portal.yaml with description and check expression.`});}f.length>=5&&s.length>=3&&n.push({type:"uncaptured-wisdom",severity:"warning",message:`Large change (${f.length} files, ${s.length} symbols) \u2014 consider recording architectural decisions`,suggestion:"Use paradigm_wisdom_record to capture any decisions or antipatterns discovered during this task."});let i=n.filter(p=>p.severity==="error").length,l=n.filter(p=>p.severity==="warning").length,g=4,c="pass";return i>0?c="violations":l>0&&(c="warnings"),{status:c,violations:n,summary:{totalChecks:g,passed:g-(i>0?1:0)-(l>0?1:0),warnings:l,errors:i},blocksCompletion:i>0}}var pe={architect:"opus",security:"opus",reviewer:"sonnet",builder:"haiku",tester:"haiku"},he=["auth","permission","admin","delete","purge","password","credential","token","secret","key","encrypt","decrypt","hash","session","oauth","jwt","role","access control","vulnerability","injection","xss","csrf"];function me(f,s){let e=f.toLowerCase(),t=he.some(r=>e.includes(r.toLowerCase())),n=f.includes("^"),o=false;return t||n||o}var ye=["rename","refactor","migrate","restructure","move","reorganize"];function be(f){let s=f.toLowerCase();return ye.some(e=>s.includes(e))}var E=class{spawner;auditLogger;rootDir;constructor(s){this.rootDir=s,this.spawner=new b(s),this.auditLogger=new a(s);}async initialize(){await this.spawner.initialize();}async orchestrate(s,e={}){let t=e.mode||"faceted",n=Date.now(),o$1=this.generateOrchestrationId(),r={success:false,mode:t,orchestrationId:o$1,task:s,agentsSpawned:0,totalTokens:{input:0,output:0,total:0},totalCost:0,duration_ms:0,agentResults:[]};try{let a;if(e.pmGovernance?.enabled)try{let{aggregateFromDirectory:l}=await import('./dist-MRZDZ5SX.js'),g=await l(this.rootDir),c=o(g);a=V(s,this.rootDir,c);}catch{}if(t==="solo"){let l=await this.runSoloMode(s,e);r.agentsSpawned=1,r.agentResults=[l],r.success=l.success,l.relay&&(r.totalTokens=l.relay.metrics.tokens_used,r.totalCost=b$1(r.totalTokens,e.orchestratorModel||"opus"));}else {let l=await this.runFacetedMode(s,e);r.agentsSpawned=l.results.length,r.agentResults=l.results,r.totalTokens=l.totalTokens,r.totalCost=l.totalCost,r.success=l.success,r.parallelBuilderStats=l.parallelBuilderStats;}if(e.pmGovernance?.enabled&&a)try{let{aggregateFromDirectory:l}=await import('./dist-MRZDZ5SX.js'),g=await l(this.rootDir),c=o(g),p=[],h=[];for(let u of r.agentResults)u.relay?.outputs?.artifacts&&p.push(...u.relay.outputs.artifacts.map(y=>y.path));for(let u of a.affectedSymbols)h.push(u.symbol);let d=H(p,h,this.rootDir,c);r.complianceReport={preflight:a,postflight:d},e.pmGovernance.blockOnViolations&&d.blocksCompletion&&(r.success=!1);}catch{r.complianceReport={preflight:a};}r.duration_ms=Date.now()-n;let i=this.auditLogger.startOrchestration(o$1,s,t);return i.completed=new Date().toISOString(),i.status=r.success?"success":"failed",i.totals={duration_ms:r.duration_ms,tokens:r.totalTokens.total,cost_usd:r.totalCost,agents_spawned:r.agentsSpawned,files_created:0,files_modified:0},this.auditLogger.saveOrchestration(i),r.log=i,r}catch(a){return r.error=a instanceof Error?a.message:String(a),r.duration_ms=Date.now()-n,r}}async compare(s,e={}){let t=await this.orchestrate(s,{...e,mode:"solo"}),n=await this.orchestrate(s,{...e,mode:"faceted"}),o=t.totalTokens.total-n.totalTokens.total,r=t.totalCost-n.totalCost,a=t.duration_ms-n.duration_ms,i="tie";return n.success&&!t.success?i="faceted":t.success&&!n.success?i="solo":n.totalCost<t.totalCost*.8?i="faceted":t.totalCost<n.totalCost*.8&&(i="solo"),{solo:t,faceted:n,comparison:{winner:i,tokensSaved:o,costDiff:r,timeDiff:a,soloSucceeded:t.success,facetedSucceeded:n.success}}}async runSoloMode(s,e$1){let n=e(this.rootDir)?.team.default_agent||"architect",o=e$1.orchestratorModel||"opus",r={model:o,workingDirectory:e$1.workingDirectory||this.rootDir,mcpServerPath:e$1.mcpServerPath,budget:e$1.budget,onMessage:e$1.onMessage?i=>e$1.onMessage("solo",i):void 0,onCheckpoint:e$1.onCheckpoint};e$1.onAgentStart&&e$1.onAgentStart("solo",s,o);let a=await this.spawner.spawn(n,s,r);return e$1.onAgentComplete&&e$1.onAgentComplete("solo",a,o),a}async runFacetedMode(s,e$1){let t=e(this.rootDir);if(!t)return {success:false,results:[],totalTokens:{input:0,output:0,total:0},totalCost:0};let n="";if(be(s)){let d=a$1(s);if(d.length>0){let u=[];u.push(`## Auto-Ripple Analysis
2
+ import {a as a$3}from'./chunk-TYWB5IQJ.js';import {b,a as a$1}from'./chunk-ORDKEGII.js';import {e}from'./chunk-AO7ZSRME.js';import {a}from'./chunk-FYDRENK7.js';import {b as b$1}from'./chunk-EKZDFEJW.js';import {a as a$2,b as b$2}from'./chunk-SHD27BQX.js';import {o,t,x}from'./chunk-T6IDXUUA.js';import'minimatch';import*as w from'fs';import*as C from'path';import*as F from'js-yaml';import {spawn}from'child_process';var ee=["should","what","how","why","recommend","analyze","compare","evaluate","assess","review","explain","describe","investigate","which","best practice","trade-off","tradeoff","pros and cons","decision"],te=["document","write docs","readme",".purpose","purpose file","jsdoc","tsdoc","comments","docstring","api docs","changelog","architecture doc"],se=["bug","fix","broken","not working","issue","error","crash","fails","failing","wrong","incorrect","doesn't work","doesn't","cant","can't","regression","patch"],re=["rename","refactor","migrate","restructure","move","reorganize","clean up","cleanup","consolidate","extract","inline","simplify","modularize","decouple","split","merge"],ne=["auth","authentication","authorization","permission","admin","delete","purge","password","credential","token","secret","key","encrypt","decrypt","hash","session","oauth","jwt","api key","role","access","gate","portal","sensitive","private","security","vulnerability","xss","sql injection","csrf"],oe=/[@#$%^!?&~][a-zA-Z0-9_-]+/g,Y={analysis:{agents:["architect"],models:{architect:"opus"},costMultiplier:{min:.3,max:.5}},documentation:{agents:["architect"],models:{architect:"sonnet"},costMultiplier:{min:.25,max:.45}},bugfix:{agents:["security","builder"],models:{security:"opus",builder:"haiku"},costMultiplier:{min:.5,max:.8}},refactor:{agents:["architect","builder"],models:{architect:"opus",builder:"haiku"},costMultiplier:{min:.6,max:.85}},feature:{agents:["architect","security","builder","tester"],models:{architect:"opus",security:"opus",builder:"haiku",tester:"haiku"},costMultiplier:{min:.8,max:1.2}}};function ie(f){let s=f.match(oe)||[];return [...new Set(s)]}function $(f,s){let e=f.toLowerCase();return s.filter(t=>e.includes(t.toLowerCase()))}function ae(f,s,e,t){let n=0;e.length>=5?n+=2:e.length>=2&&(n+=1);let o=f.split(/\s+/).length;o>=100?n+=2:o>=50&&(n+=1);let r=new Set(e.map(a=>a[0]));return r.size>=4?n+=2:r.size>=2&&(n+=1),e.some(a=>a.startsWith("^"))&&(n+=1),e.some(a=>a.startsWith("$"))&&(n+=1),s==="feature"&&(n+=1),s==="refactor"&&(n+=1),n>=5?"high":n>=2?"medium":"low"}function le(f,s,e){if($(f,ne).length>0||s.some(n=>n.startsWith("^")))return true;return false}function K(f,s){let e=ie(f),t=$(f,ee),n=$(f,te),o=$(f,se),r=$(f,re),a,i;t.length>0&&o.length===0&&r.length===0?(a="analysis",i=t):n.length>0&&o.length===0?(a="documentation",i=n):o.length>0?(a="bugfix",i=o):r.length>0?(a="refactor",i=r):(a="feature",i=[]);let l=Y[a],g=le(f,e),c=[...l.agents];g&&!c.includes("security")&&(c=["security",...c]);let p=ae(f,a,e),h={...l.costMultiplier};return p==="high"?(h.min*=1.2,h.max*=1.3):p==="low"&&(h.min*=.8,h.max*=.9),g&&!l.agents.includes("security")&&(h.min+=.15,h.max+=.2),{type:a,complexity:p,recommendedAgents:c,securityRequired:g,costMultiplier:h,matchedKeywords:i,symbols:e}}function B(f,s){let e=Y[s.type];return f==="security"&&s.securityRequired?"opus":e.models[f]||"sonnet"}var ce=/[@#$%^!?&~][a-zA-Z][a-zA-Z0-9_-]*/g,ue=[/\.(get|post|put|patch|delete)\s*\(\s*['"`]([^'"`]+)['"`]/gi,/export\s+(async\s+)?function\s+(GET|POST|PUT|PATCH|DELETE)/gi,/export\s+(async\s+)?function\s+(GET|POST|PUT|PATCH|DELETE)/gi,/\.(get|post|put|patch|delete)\s*\(\s*['"`]([^'"`]+)['"`]/gi],de=["endpoint","route","api","handler","get","post","put","patch","delete","rest","crud","controller"];function V(f,s,e$1){let t$1=f.toLowerCase(),n=f.match(ce)||[],o=[...new Set(n)],r=o.map(d=>{let u=t(e$1,d),y=u.length>0?u[0]:null;return {symbol:d,exists:!!y,type:y?.type,description:y?.description}}),a=r.filter(d=>d.exists).map(d=>{let u=x(e$1,d.symbol),y=new Set;for(let b of u){let S=x(e$1,b.symbol);for(let O of S)O.symbol!==d.symbol&&!u.find(v=>v.symbol===O.symbol)&&y.add(O.symbol);}let k=u.length+y.size,m="low";return k>10?m="high":k>3&&(m="medium"),{symbol:d.symbol,directDependents:u.length,indirectDependents:y.size,impact:m}}),i=a$2(s),l={exists:!!i,gateCount:i?b$2(i).length:0,gates:i?b$2(i).map(d=>`^${d}`):[],routeCount:i?.routes?Object.keys(i.routes).length:0},g=de.some(d=>t$1.includes(d)),c=e(s),p=c?a$3(f,c.agents).map(d=>({name:d.name,confidence:d.confidence,reason:d.reason})):[],h=[];return r.some(d=>d.exists)&&h.push("ripple-analysis"),g&&h.push("portal-compliance"),o.some(d=>d.startsWith("^"))&&h.push("gate-validation"),o.some(d=>d.startsWith("!"))&&h.push("signal-registration"),h.push("purpose-coverage"),{affectedSymbols:r,rippleAnalysis:a,portalStatus:l,taskAddsRoutes:g,suggestedAgents:p,requiredChecks:h}}function H(f,s,e,t$1){let n=[],o=a$2(e),r=o?b$2(o):[],a=o?.routes?Object.keys(o.routes):[];for(let p of f){let h=C.isAbsolute(p)?p:C.join(e,p);if(!w.existsSync(h))continue;let d;try{d=w.readFileSync(h,"utf-8");}catch{continue}for(let u of ue){u.lastIndex=0;let y;for(;(y=u.exec(d))!==null;){let k=y[2]||y[0];k&&k.startsWith("/")&&(!a.some(b=>b.replace(/\s+(GET|POST|PUT|PATCH|DELETE)\s*$/,"").trim()===k)&&o?n.push({type:"missing-portal-gate",severity:"warning",message:`Route "${k}" found in ${C.relative(e,h)} but not declared in portal.yaml`,file:C.relative(e,h),suggestion:"Add this route to portal.yaml with appropriate ^gates. Run paradigm_gates_for_route to get suggestions."}):!o&&k.startsWith("/api/")&&n.push({type:"missing-portal-gate",severity:"warning",message:`API route "${k}" found but no portal.yaml exists`,file:C.relative(e,h),suggestion:"Create portal.yaml to declare gates for API routes. Run: paradigm portal init"}));}}}for(let p of s)t(t$1,p).length===0&&n.push({type:"unregistered-symbol",severity:"error",message:`Symbol "${p}" was touched but is not registered in any .purpose file`,suggestion:`Add "${p}" to the nearest .purpose file. Use paradigm_purpose_add_component or paradigm_purpose_add_signal.`});for(let p of s)if(p.startsWith("^")){let h=p.slice(1);r.includes(h)||n.push({type:"missing-portal-gate",severity:"error",message:`Gate "${p}" is referenced but not declared in portal.yaml`,suggestion:`Add ${p} to portal.yaml with description and check expression.`});}f.length>=5&&s.length>=3&&n.push({type:"uncaptured-wisdom",severity:"warning",message:`Large change (${f.length} files, ${s.length} symbols) \u2014 consider recording architectural decisions`,suggestion:"Use paradigm_wisdom_record to capture any decisions or antipatterns discovered during this task."});let i=n.filter(p=>p.severity==="error").length,l=n.filter(p=>p.severity==="warning").length,g=4,c="pass";return i>0?c="violations":l>0&&(c="warnings"),{status:c,violations:n,summary:{totalChecks:g,passed:g-(i>0?1:0)-(l>0?1:0),warnings:l,errors:i},blocksCompletion:i>0}}var pe={architect:"opus",security:"opus",reviewer:"sonnet",builder:"haiku",tester:"haiku"},he=["auth","permission","admin","delete","purge","password","credential","token","secret","key","encrypt","decrypt","hash","session","oauth","jwt","role","access control","vulnerability","injection","xss","csrf"];function me(f,s){let e=f.toLowerCase(),t=he.some(r=>e.includes(r.toLowerCase())),n=f.includes("^"),o=false;return t||n||o}var ye=["rename","refactor","migrate","restructure","move","reorganize"];function be(f){let s=f.toLowerCase();return ye.some(e=>s.includes(e))}var E=class{spawner;auditLogger;rootDir;constructor(s){this.rootDir=s,this.spawner=new b(s),this.auditLogger=new a(s);}async initialize(){await this.spawner.initialize();}async orchestrate(s,e={}){let t=e.mode||"faceted",n=Date.now(),o$1=this.generateOrchestrationId(),r={success:false,mode:t,orchestrationId:o$1,task:s,agentsSpawned:0,totalTokens:{input:0,output:0,total:0},totalCost:0,duration_ms:0,agentResults:[]};try{let a;if(e.pmGovernance?.enabled)try{let{aggregateFromDirectory:l}=await import('./dist-3ZCH25SG.js'),g=await l(this.rootDir),c=o(g);a=V(s,this.rootDir,c);}catch{}if(t==="solo"){let l=await this.runSoloMode(s,e);r.agentsSpawned=1,r.agentResults=[l],r.success=l.success,l.relay&&(r.totalTokens=l.relay.metrics.tokens_used,r.totalCost=b$1(r.totalTokens,e.orchestratorModel||"opus"));}else {let l=await this.runFacetedMode(s,e);r.agentsSpawned=l.results.length,r.agentResults=l.results,r.totalTokens=l.totalTokens,r.totalCost=l.totalCost,r.success=l.success,r.parallelBuilderStats=l.parallelBuilderStats;}if(e.pmGovernance?.enabled&&a)try{let{aggregateFromDirectory:l}=await import('./dist-3ZCH25SG.js'),g=await l(this.rootDir),c=o(g),p=[],h=[];for(let u of r.agentResults)u.relay?.outputs?.artifacts&&p.push(...u.relay.outputs.artifacts.map(y=>y.path));for(let u of a.affectedSymbols)h.push(u.symbol);let d=H(p,h,this.rootDir,c);r.complianceReport={preflight:a,postflight:d},e.pmGovernance.blockOnViolations&&d.blocksCompletion&&(r.success=!1);}catch{r.complianceReport={preflight:a};}r.duration_ms=Date.now()-n;let i=this.auditLogger.startOrchestration(o$1,s,t);return i.completed=new Date().toISOString(),i.status=r.success?"success":"failed",i.totals={duration_ms:r.duration_ms,tokens:r.totalTokens.total,cost_usd:r.totalCost,agents_spawned:r.agentsSpawned,files_created:0,files_modified:0},this.auditLogger.saveOrchestration(i),r.log=i,r}catch(a){return r.error=a instanceof Error?a.message:String(a),r.duration_ms=Date.now()-n,r}}async compare(s,e={}){let t=await this.orchestrate(s,{...e,mode:"solo"}),n=await this.orchestrate(s,{...e,mode:"faceted"}),o=t.totalTokens.total-n.totalTokens.total,r=t.totalCost-n.totalCost,a=t.duration_ms-n.duration_ms,i="tie";return n.success&&!t.success?i="faceted":t.success&&!n.success?i="solo":n.totalCost<t.totalCost*.8?i="faceted":t.totalCost<n.totalCost*.8&&(i="solo"),{solo:t,faceted:n,comparison:{winner:i,tokensSaved:o,costDiff:r,timeDiff:a,soloSucceeded:t.success,facetedSucceeded:n.success}}}async runSoloMode(s,e$1){let n=e(this.rootDir)?.team.default_agent||"architect",o=e$1.orchestratorModel||"opus",r={model:o,workingDirectory:e$1.workingDirectory||this.rootDir,mcpServerPath:e$1.mcpServerPath,budget:e$1.budget,onMessage:e$1.onMessage?i=>e$1.onMessage("solo",i):void 0,onCheckpoint:e$1.onCheckpoint};e$1.onAgentStart&&e$1.onAgentStart("solo",s,o);let a=await this.spawner.spawn(n,s,r);return e$1.onAgentComplete&&e$1.onAgentComplete("solo",a,o),a}async runFacetedMode(s,e$1){let t=e(this.rootDir);if(!t)return {success:false,results:[],totalTokens:{input:0,output:0,total:0},totalCost:0};let n="";if(be(s)){let d=a$1(s);if(d.length>0){let u=[];u.push(`## Auto-Ripple Analysis
3
3
  `),u.push("The following symbols are affected by this refactoring:"),u.push("");for(let y of d.slice(0,5))u.push(`- **${y}**: Check dependencies before renaming/moving`);u.push(""),u.push("**Recommendation:** Run `paradigm_ripple` for each symbol before making changes."),n=u.join(`
4
4
  `);}}let o=this.planAgentSequence(s,t.agents),r=this.groupByStage(o),a=[],i={input:0,output:0,total:0},l=0,g=new Map,c=true,p,h=Array.from(r.keys()).sort((d,u)=>d-u);for(let d of h){let u=r.get(d)||[];if(u.length===0)continue;if(e$1.checkpoints?.beforeAgentSpawn&&e$1.onCheckpoint){let m=u.map(S=>S.agent).join(", ");if(!await e$1.onCheckpoint(`Stage ${d}: Spawn ${m}${u.length>1?" (parallel)":""}`)){c=false;break}}let y=u.map(async m=>{let b=e$1.agentBudgets?.[m.agent]?.maxTokens?"haiku":m.model||pe[m.agent]||"sonnet",S="";if(m.dependsOn.length>0){let R=m.dependsOn.map(I=>g.get(I)).filter(Boolean);R.length>0&&(S=R.join(`
5
5
 
@@ -3,9 +3,9 @@ import {c,a as a$1}from'./chunk-DOCDDDTD.js';import {e as e$1}from'./chunk-JQKKV
3
3
  \u{1FA7A} Paradigm Doctor
4
4
  `)),console.log(N?l.gray(`Running context audit checks...
5
5
  `):l.gray(`Checking Paradigm setup...
6
- `)));let I=a.command("doctor").start("Running health checks");if(!N){let E=function(t){let a=[];try{let n=e.readdirSync(t,{withFileTypes:!0});for(let r of n){if(r.name==="node_modules"||r.name==="dist"||r.name===".git")continue;let f=i.join(t,r.name);r.isDirectory()?a.push(...E(f)):r.name===".purpose"&&a.push(f);}}catch{}return a};let o=i.join(p,".paradigm");if(e.existsSync(o))if(e.statSync(o).isFile())s.push({name:".paradigm",status:"warn",message:"Legacy file format (should be directory)",fix:"paradigm upgrade --all"});else {s.push({name:".paradigm/",status:"ok",message:"Directory exists"});let a=i.join(o,"config.yaml");if(e.existsSync(a))try{let g=e.readFileSync(a,"utf8");e$1(g),s.push({name:".paradigm/config.yaml",status:"ok",message:"Valid YAML"});}catch(g){s.push({name:".paradigm/config.yaml",status:"error",message:`Invalid YAML: ${g.message}`,fix:"Check YAML syntax"});}else s.push({name:".paradigm/config.yaml",status:"missing",message:"Config file not found",fix:"paradigm init --force"});let n=["logger.md","scan.md","symbols.md"],r=i.join(o,"specs");if(e.existsSync(r))for(let g of n){let x=i.join(r,g);e.existsSync(x)?s.push({name:`.paradigm/specs/${g}`,status:"ok",message:"Present"}):s.push({name:`.paradigm/specs/${g}`,status:"missing",message:"Spec file not found",fix:"paradigm upgrade --all"});}else s.push({name:".paradigm/specs/",status:"missing",message:"Specs directory not found",fix:"paradigm upgrade --all"});let f=i.join(o,"docs");e.existsSync(f)?s.push({name:".paradigm/docs/",status:"ok",message:"Directory exists"}):s.push({name:".paradigm/docs/",status:"missing",message:"Docs directory not found",fix:"paradigm upgrade --all"});let h=i.join(o,"prompts");e.existsSync(h)?s.push({name:".paradigm/prompts/",status:"ok",message:"Directory exists"}):s.push({name:".paradigm/prompts/",status:"missing",message:"Prompts directory not found",fix:"paradigm upgrade --all"});let u=["specs","implementation-guides","prompts","decisions"],d=[];for(let g of u){let x=i.join(o,g);if(e.existsSync(x)&&e.statSync(x).isDirectory()){let k=i.join(x,".index.yaml");e.existsSync(k)||d.push(`.paradigm/${g}/`);}}d.length>0?s.push({name:"Docs-class indexes",status:"warn",message:`${d.length} director${d.length===1?"y":"ies"} missing .index.yaml: ${d.join(", ")}`,fix:"paradigm docs scaffold"}):s.push({name:"Docs-class indexes",status:"ok",message:"All docs-class directories have .index.yaml"});let y=i.join(o,"scan-index.json"),F=i.join(p,".paradigm-scan-index.json");if(e.existsSync(y)){let g=e.statSync(y),x=Date.now()-g.mtime.getTime(),k=Math.floor(x/(1e3*60*60));k>24?s.push({name:".paradigm/scan-index.json",status:"warn",message:`Stale (${k} hours old)`,fix:"paradigm index"}):s.push({name:".paradigm/scan-index.json",status:"ok",message:k>0?`${k} hours old`:"Fresh"});}else e.existsSync(F)?s.push({name:"scan-index",status:"warn",message:"Using legacy location",fix:"paradigm index"}):s.push({name:".paradigm/scan-index.json",status:"missing",message:"Not generated",fix:"paradigm index"});}else s.push({name:".paradigm/",status:"missing",message:"Not initialized",fix:"paradigm init"});let m=c(p);if(m.detected){let t=a$1(m.detected);if(t){let a=i.join(p,t.outputPath);e.existsSync(a)?s.push({name:t.outputPath,status:"ok",message:`Present (${m.detected})`}):s.push({name:t.outputPath,status:"missing",message:`Not generated for ${m.detected}`,fix:"paradigm sync"});}}let c$1=i.join(p,".premise");e.existsSync(c$1)?s.push({name:".premise",status:"ok",message:"Present"}):s.push({name:".premise",status:"missing",message:"Not found (optional)"});let v=i.join(p,".purpose");e.existsSync(v)?s.push({name:".purpose",status:"ok",message:"Present"}):s.push({name:".purpose",status:"warn",message:"Root .purpose not found",fix:"paradigm init"});let A=i.join(p,".paradigm","config.yaml");if(e.existsSync(A))try{let t=e.readFileSync(A,"utf8"),n=S.load(t)?.["purpose-required"];if(n&&Array.isArray(n)){let r=[];for(let f of n){if(!f.pattern)continue;let{glob:h}=await import('glob'),u=await h(f.pattern,{cwd:p,nodir:!1});for(let d of u){let y=i.join(p,d);try{e.statSync(y).isDirectory()&&!e.existsSync(i.join(y,".purpose"))&&r.push(d);}catch{}}}r.length>0?s.push({name:"Purpose-required",status:"warn",message:`${r.length} director${r.length===1?"y":"ies"} missing .purpose: ${r.join(", ")}`,fix:"Create .purpose files with paradigm_purpose_init + paradigm_purpose_add_component"}):s.push({name:"Purpose-required",status:"ok",message:"All required directories have .purpose files"});}}catch{}let q=/\[NEEDS CLARIFICATION:\s*[^\]]+\]/gi,R=0,Y=E(p);for(let t of Y)try{let n=e.readFileSync(t,"utf8").match(q);n&&(R+=n.length);}catch{}R>0?s.push({name:"Clarification markers",status:"warn",message:`${R} [NEEDS CLARIFICATION] marker${R>1?"s":""} found in .purpose files`,fix:"Resolve open clarification markers before shipping"}):Y.length>0&&s.push({name:"Clarification markers",status:"ok",message:"No unresolved markers"});let L=i.join(p,"portal.yaml");if(e.existsSync(L))try{let t=e.readFileSync(L,"utf8"),a=S.load(t);if(a?.version&&a?.gates){let n=Object.keys(a.gates||{}).length,r=Object.keys(a.routes||{}).length;s.push({name:"portal.yaml",status:"ok",message:`Valid (${n} gates, ${r} routes)`});}else s.push({name:"portal.yaml",status:"warn",message:"Missing version or gates section",fix:'Add version: "1.0" and gates: {} to portal.yaml'});}catch(t){s.push({name:"portal.yaml",status:"error",message:`Invalid YAML: ${t.message}`,fix:"Check YAML syntax in portal.yaml"});}if(e.existsSync(L))try{let{checkPortalCompliance:t,getComplianceSummary:a}=await import('./portal-compliance-OBPK2IR5.js'),n=await t(p),r=a(n);s.push({name:"Portal compliance",status:r.status,message:r.message,fix:r.status!=="ok"?"paradigm portal check":void 0});}catch{}let U=i.join(p,".paradigm","flows.yaml");if(e.existsSync(U))try{let t=e.readFileSync(U,"utf8"),a=S.load(t);if(a?.version&&a?.flows){let n=Object.keys(a.flows||{}).length,r=Object.entries(a.flows||{}).filter(([,f])=>!f?.steps||(f.steps?.length??0)===0);r.length>0?s.push({name:".paradigm/flows.yaml",status:"warn",message:`${n} flows defined, ${r.length} have no steps`,fix:"Add steps to empty flow definitions"}):s.push({name:".paradigm/flows.yaml",status:"ok",message:`Valid (${n} flows)`});}else s.push({name:".paradigm/flows.yaml",status:"warn",message:"Missing version or flows section",fix:'Ensure flows.yaml has version: "1.0" and flows: {}'});}catch(t){s.push({name:".paradigm/flows.yaml",status:"error",message:`Invalid YAML: ${t.message}`,fix:"Check YAML syntax in flows.yaml"});}let H=i.join(p,".paradigm","lore");if(e.existsSync(H))try{let t=e.readdirSync(H).filter(a=>a.endsWith(".yaml"));t.length===0?s.push({name:"Lore entries",status:"warn",message:"Lore directory exists but no entries found",fix:"Record a lore entry: paradigm lore record"}):s.push({name:"Lore entries",status:"ok",message:`${t.length} lore file${t.length>1?"s":""}`});}catch{s.push({name:"Lore entries",status:"warn",message:"Could not read lore directory"});}let G=i.join(p,".paradigm","university");if(e.existsSync(G))try{let t=i.join(G,"content"),a=0,n=0;if(e.existsSync(t))for(let r of ["notes","policies","quizzes","paths"]){let f=i.join(t,r);e.existsSync(f)&&(a+=e.readdirSync(f).filter(h=>h.endsWith(".md")||h.endsWith(".yaml")).length);}if(a===0)s.push({name:"University content",status:"warn",message:"University directory exists but no content found",fix:'Add content: paradigm university add note --title "Getting Started"'});else {let r=i.join(t,"quizzes");if(e.existsSync(r))for(let h of e.readdirSync(r).filter(u=>u.endsWith(".yaml")))try{let u=S.load(e.readFileSync(i.join(r,h),"utf8"));if(u?.questions)for(let d of u.questions)d.choices&&d.correct&&!(d.correct in d.choices)&&n++;}catch{}let f=i.join(t,"paths");if(e.existsSync(f))for(let h of e.readdirSync(f).filter(u=>u.endsWith(".yaml")))try{let u=S.load(e.readFileSync(i.join(f,h),"utf8"));if(u?.steps){for(let d of u.steps)if(d.content&&!d.content.startsWith("plsat:")){let y=!1;for(let F of ["notes","policies","quizzes","paths"]){let g=i.join(t,F);if(e.existsSync(g)&&e.readdirSync(g).some(k=>k.startsWith(d.content))){y=!0;break}}y||n++;}}}catch{}n>0?s.push({name:"University content",status:"warn",message:`${a} items, ${n} issue${n>1?"s":""}`,fix:"Run: paradigm university validate --deep"}):s.push({name:"University content",status:"ok",message:`${a} content item${a>1?"s":""}`});}}catch{s.push({name:"University content",status:"warn",message:"Could not read university directory"});}let _=i.join(p,".claude","hooks.json"),ss=i.join(p,"plugins","paradigm","hooks.json");if(e.existsSync(_)){let t=e.statSync(_),a=Date.now()-t.mtime.getTime(),n=Math.floor(a/(1e3*60*60*24));n>30?s.push({name:"Claude Code hooks",status:"warn",message:`Hooks are ${n} days old \u2014 may be outdated`,fix:"paradigm hooks install"}):s.push({name:"Claude Code hooks",status:"ok",message:n>0?`${n} days old`:"Fresh"});}else e.existsSync(ss)?s.push({name:"Claude Code hooks",status:"ok",message:"Using plugin hooks"}):s.push({name:"Claude Code hooks",status:"missing",message:"No hooks installed",fix:"paradigm hooks install"});let V=i.join(p,".paradigm","habits.yaml");if(e.existsSync(V))try{let t=e.readFileSync(V,"utf8"),a=S.load(t);if(a?.version&&Array.isArray(a?.habits)){let n=a.habits.filter(r=>r.enabled!==!1).length;s.push({name:"Habits config",status:"ok",message:`Valid (${n}/${a.habits.length} enabled)`});}else s.push({name:"Habits config",status:"warn",message:"Missing version or habits array",fix:"Regenerate habits.yaml with paradigm habits init"});}catch(t){s.push({name:"Habits config",status:"error",message:`Invalid YAML: ${t.message}`,fix:"Check YAML syntax in habits.yaml"});}let J=i.join(p,"AGENTS.md");if(e.existsSync(J)){let t=e.statSync(J),a=Date.now()-t.mtime.getTime(),n=Math.floor(a/(1e3*60*60*24));n>60?s.push({name:"AGENTS.md",status:"warn",message:`${n} days since last update \u2014 may be stale`,fix:"paradigm sync"}):s.push({name:"AGENTS.md",status:"ok",message:n>0?`Updated ${n} days ago`:"Fresh"});}}let W=0,z=0,$=0;for(let o of s){let m,c;switch(o.status){case "ok":m="\u2713",c=l.green;break;case "warn":m="\u26A0",c=l.yellow,z++;break;case "error":m="\u2717",c=l.red,W++;break;case "missing":m="\u25CB",c=l.gray,$++;break}if(!w){let v=o.name.padEnd(30);console.log(` ${c(m)} ${v} ${c(o.message)}`),o.fix&&console.log(l.gray(` \u2514\u2500 Fix: ${o.fix}`));}}let{runContextAudit:Z}=await import('./context-audit-APFKELFT.js'),M=await Z(p,{quiet:w}),O=0,T=0,C=0;!w&&M.length>0&&(console.log(""),console.log(l.blue(" Context Audit")),console.log(l.gray(" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500")));for(let o of M){let m,c;switch(o.status){case "ok":m="\u2713",c=l.green;break;case "warn":m="\u26A0",c=l.yellow,T++;break;case "error":m="\u2717",c=l.red,O++;break;case "advisory":m="\u2139",c=l.cyan,C++;break}if(!w){let v=o.check.padEnd(30);if(console.log(` ${c(m)} ${v} ${c(o.message)}`),o.details&&o.details.length>0){let A=o.details.slice(0,5);for(let q of A)console.log(l.gray(` \u2502 ${q}`));o.details.length>5&&console.log(l.gray(` \u2502 ... and ${o.details.length-5} more`));}o.fix&&console.log(l.gray(` \u2514\u2500 Fix: ${o.fix}`));}}let b=W+O,j=z+T,D=b+j+$===0;if(!w)if(console.log(""),D)console.log(l.green(`\u2728 All checks passed!
6
+ `)));let I=a.command("doctor").start("Running health checks");if(!N){let E=function(t){let a=[];try{let n=e.readdirSync(t,{withFileTypes:!0});for(let r of n){if(r.name==="node_modules"||r.name==="dist"||r.name===".git")continue;let f=i.join(t,r.name);r.isDirectory()?a.push(...E(f)):r.name===".purpose"&&a.push(f);}}catch{}return a};let o=i.join(p,".paradigm");if(e.existsSync(o))if(e.statSync(o).isFile())s.push({name:".paradigm",status:"warn",message:"Legacy file format (should be directory)",fix:"paradigm upgrade --all"});else {s.push({name:".paradigm/",status:"ok",message:"Directory exists"});let a=i.join(o,"config.yaml");if(e.existsSync(a))try{let g=e.readFileSync(a,"utf8");e$1(g),s.push({name:".paradigm/config.yaml",status:"ok",message:"Valid YAML"});}catch(g){s.push({name:".paradigm/config.yaml",status:"error",message:`Invalid YAML: ${g.message}`,fix:"Check YAML syntax"});}else s.push({name:".paradigm/config.yaml",status:"missing",message:"Config file not found",fix:"paradigm init --force"});let n=["logger.md","scan.md","symbols.md"],r=i.join(o,"specs");if(e.existsSync(r))for(let g of n){let x=i.join(r,g);e.existsSync(x)?s.push({name:`.paradigm/specs/${g}`,status:"ok",message:"Present"}):s.push({name:`.paradigm/specs/${g}`,status:"missing",message:"Spec file not found",fix:"paradigm upgrade --all"});}else s.push({name:".paradigm/specs/",status:"missing",message:"Specs directory not found",fix:"paradigm upgrade --all"});let f=i.join(o,"docs");e.existsSync(f)?s.push({name:".paradigm/docs/",status:"ok",message:"Directory exists"}):s.push({name:".paradigm/docs/",status:"missing",message:"Docs directory not found",fix:"paradigm upgrade --all"});let h=i.join(o,"prompts");e.existsSync(h)?s.push({name:".paradigm/prompts/",status:"ok",message:"Directory exists"}):s.push({name:".paradigm/prompts/",status:"missing",message:"Prompts directory not found",fix:"paradigm upgrade --all"});let u=["specs","implementation-guides","prompts","decisions"],d=[];for(let g of u){let x=i.join(o,g);if(e.existsSync(x)&&e.statSync(x).isDirectory()){let k=i.join(x,".index.yaml");e.existsSync(k)||d.push(`.paradigm/${g}/`);}}d.length>0?s.push({name:"Docs-class indexes",status:"warn",message:`${d.length} director${d.length===1?"y":"ies"} missing .index.yaml: ${d.join(", ")}`,fix:"paradigm docs scaffold"}):s.push({name:"Docs-class indexes",status:"ok",message:"All docs-class directories have .index.yaml"});let y=i.join(o,"scan-index.json"),F=i.join(p,".paradigm-scan-index.json");if(e.existsSync(y)){let g=e.statSync(y),x=Date.now()-g.mtime.getTime(),k=Math.floor(x/(1e3*60*60));k>24?s.push({name:".paradigm/scan-index.json",status:"warn",message:`Stale (${k} hours old)`,fix:"paradigm index"}):s.push({name:".paradigm/scan-index.json",status:"ok",message:k>0?`${k} hours old`:"Fresh"});}else e.existsSync(F)?s.push({name:"scan-index",status:"warn",message:"Using legacy location",fix:"paradigm index"}):s.push({name:".paradigm/scan-index.json",status:"missing",message:"Not generated",fix:"paradigm index"});}else s.push({name:".paradigm/",status:"missing",message:"Not initialized",fix:"paradigm init"});let m=c(p);if(m.detected){let t=a$1(m.detected);if(t){let a=i.join(p,t.outputPath);e.existsSync(a)?s.push({name:t.outputPath,status:"ok",message:`Present (${m.detected})`}):s.push({name:t.outputPath,status:"missing",message:`Not generated for ${m.detected}`,fix:"paradigm sync"});}}let c$1=i.join(p,".premise");e.existsSync(c$1)?s.push({name:".premise",status:"ok",message:"Present"}):s.push({name:".premise",status:"missing",message:"Not found (optional)"});let v=i.join(p,".purpose");e.existsSync(v)?s.push({name:".purpose",status:"ok",message:"Present"}):s.push({name:".purpose",status:"warn",message:"Root .purpose not found",fix:"paradigm init"});let A=i.join(p,".paradigm","config.yaml");if(e.existsSync(A))try{let t=e.readFileSync(A,"utf8"),n=S.load(t)?.["purpose-required"];if(n&&Array.isArray(n)){let r=[];for(let f of n){if(!f.pattern)continue;let{glob:h}=await import('glob'),u=await h(f.pattern,{cwd:p,nodir:!1});for(let d of u){let y=i.join(p,d);try{e.statSync(y).isDirectory()&&!e.existsSync(i.join(y,".purpose"))&&r.push(d);}catch{}}}r.length>0?s.push({name:"Purpose-required",status:"warn",message:`${r.length} director${r.length===1?"y":"ies"} missing .purpose: ${r.join(", ")}`,fix:"Create .purpose files with paradigm_purpose_init + paradigm_purpose_add_component"}):s.push({name:"Purpose-required",status:"ok",message:"All required directories have .purpose files"});}}catch{}let q=/\[NEEDS CLARIFICATION:\s*[^\]]+\]/gi,R=0,Y=E(p);for(let t of Y)try{let n=e.readFileSync(t,"utf8").match(q);n&&(R+=n.length);}catch{}R>0?s.push({name:"Clarification markers",status:"warn",message:`${R} [NEEDS CLARIFICATION] marker${R>1?"s":""} found in .purpose files`,fix:"Resolve open clarification markers before shipping"}):Y.length>0&&s.push({name:"Clarification markers",status:"ok",message:"No unresolved markers"});let L=i.join(p,"portal.yaml");if(e.existsSync(L))try{let t=e.readFileSync(L,"utf8"),a=S.load(t);if(a?.version&&a?.gates){let n=Object.keys(a.gates||{}).length,r=Object.keys(a.routes||{}).length;s.push({name:"portal.yaml",status:"ok",message:`Valid (${n} gates, ${r} routes)`});}else s.push({name:"portal.yaml",status:"warn",message:"Missing version or gates section",fix:'Add version: "1.0" and gates: {} to portal.yaml'});}catch(t){s.push({name:"portal.yaml",status:"error",message:`Invalid YAML: ${t.message}`,fix:"Check YAML syntax in portal.yaml"});}if(e.existsSync(L))try{let{checkPortalCompliance:t,getComplianceSummary:a}=await import('./portal-compliance-4MG5F2GI.js'),n=await t(p),r=a(n);s.push({name:"Portal compliance",status:r.status,message:r.message,fix:r.status!=="ok"?"paradigm portal check":void 0});}catch{}let U=i.join(p,".paradigm","flows.yaml");if(e.existsSync(U))try{let t=e.readFileSync(U,"utf8"),a=S.load(t);if(a?.version&&a?.flows){let n=Object.keys(a.flows||{}).length,r=Object.entries(a.flows||{}).filter(([,f])=>!f?.steps||(f.steps?.length??0)===0);r.length>0?s.push({name:".paradigm/flows.yaml",status:"warn",message:`${n} flows defined, ${r.length} have no steps`,fix:"Add steps to empty flow definitions"}):s.push({name:".paradigm/flows.yaml",status:"ok",message:`Valid (${n} flows)`});}else s.push({name:".paradigm/flows.yaml",status:"warn",message:"Missing version or flows section",fix:'Ensure flows.yaml has version: "1.0" and flows: {}'});}catch(t){s.push({name:".paradigm/flows.yaml",status:"error",message:`Invalid YAML: ${t.message}`,fix:"Check YAML syntax in flows.yaml"});}let H=i.join(p,".paradigm","lore");if(e.existsSync(H))try{let t=e.readdirSync(H).filter(a=>a.endsWith(".yaml"));t.length===0?s.push({name:"Lore entries",status:"warn",message:"Lore directory exists but no entries found",fix:"Record a lore entry: paradigm lore record"}):s.push({name:"Lore entries",status:"ok",message:`${t.length} lore file${t.length>1?"s":""}`});}catch{s.push({name:"Lore entries",status:"warn",message:"Could not read lore directory"});}let G=i.join(p,".paradigm","university");if(e.existsSync(G))try{let t=i.join(G,"content"),a=0,n=0;if(e.existsSync(t))for(let r of ["notes","policies","quizzes","paths"]){let f=i.join(t,r);e.existsSync(f)&&(a+=e.readdirSync(f).filter(h=>h.endsWith(".md")||h.endsWith(".yaml")).length);}if(a===0)s.push({name:"University content",status:"warn",message:"University directory exists but no content found",fix:'Add content: paradigm university add note --title "Getting Started"'});else {let r=i.join(t,"quizzes");if(e.existsSync(r))for(let h of e.readdirSync(r).filter(u=>u.endsWith(".yaml")))try{let u=S.load(e.readFileSync(i.join(r,h),"utf8"));if(u?.questions)for(let d of u.questions)d.choices&&d.correct&&!(d.correct in d.choices)&&n++;}catch{}let f=i.join(t,"paths");if(e.existsSync(f))for(let h of e.readdirSync(f).filter(u=>u.endsWith(".yaml")))try{let u=S.load(e.readFileSync(i.join(f,h),"utf8"));if(u?.steps){for(let d of u.steps)if(d.content&&!d.content.startsWith("plsat:")){let y=!1;for(let F of ["notes","policies","quizzes","paths"]){let g=i.join(t,F);if(e.existsSync(g)&&e.readdirSync(g).some(k=>k.startsWith(d.content))){y=!0;break}}y||n++;}}}catch{}n>0?s.push({name:"University content",status:"warn",message:`${a} items, ${n} issue${n>1?"s":""}`,fix:"Run: paradigm university validate --deep"}):s.push({name:"University content",status:"ok",message:`${a} content item${a>1?"s":""}`});}}catch{s.push({name:"University content",status:"warn",message:"Could not read university directory"});}let _=i.join(p,".claude","hooks.json"),ss=i.join(p,"plugins","paradigm","hooks.json");if(e.existsSync(_)){let t=e.statSync(_),a=Date.now()-t.mtime.getTime(),n=Math.floor(a/(1e3*60*60*24));n>30?s.push({name:"Claude Code hooks",status:"warn",message:`Hooks are ${n} days old \u2014 may be outdated`,fix:"paradigm hooks install"}):s.push({name:"Claude Code hooks",status:"ok",message:n>0?`${n} days old`:"Fresh"});}else e.existsSync(ss)?s.push({name:"Claude Code hooks",status:"ok",message:"Using plugin hooks"}):s.push({name:"Claude Code hooks",status:"missing",message:"No hooks installed",fix:"paradigm hooks install"});let V=i.join(p,".paradigm","habits.yaml");if(e.existsSync(V))try{let t=e.readFileSync(V,"utf8"),a=S.load(t);if(a?.version&&Array.isArray(a?.habits)){let n=a.habits.filter(r=>r.enabled!==!1).length;s.push({name:"Habits config",status:"ok",message:`Valid (${n}/${a.habits.length} enabled)`});}else s.push({name:"Habits config",status:"warn",message:"Missing version or habits array",fix:"Regenerate habits.yaml with paradigm habits init"});}catch(t){s.push({name:"Habits config",status:"error",message:`Invalid YAML: ${t.message}`,fix:"Check YAML syntax in habits.yaml"});}let J=i.join(p,"AGENTS.md");if(e.existsSync(J)){let t=e.statSync(J),a=Date.now()-t.mtime.getTime(),n=Math.floor(a/(1e3*60*60*24));n>60?s.push({name:"AGENTS.md",status:"warn",message:`${n} days since last update \u2014 may be stale`,fix:"paradigm sync"}):s.push({name:"AGENTS.md",status:"ok",message:n>0?`Updated ${n} days ago`:"Fresh"});}}let W=0,z=0,$=0;for(let o of s){let m,c;switch(o.status){case "ok":m="\u2713",c=l.green;break;case "warn":m="\u26A0",c=l.yellow,z++;break;case "error":m="\u2717",c=l.red,W++;break;case "missing":m="\u25CB",c=l.gray,$++;break}if(!w){let v=o.name.padEnd(30);console.log(` ${c(m)} ${v} ${c(o.message)}`),o.fix&&console.log(l.gray(` \u2514\u2500 Fix: ${o.fix}`));}}let{runContextAudit:Z}=await import('./context-audit-XRPT3OU2.js'),M=await Z(p,{quiet:w}),O=0,T=0,C=0;!w&&M.length>0&&(console.log(""),console.log(l.blue(" Context Audit")),console.log(l.gray(" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500")));for(let o of M){let m,c;switch(o.status){case "ok":m="\u2713",c=l.green;break;case "warn":m="\u26A0",c=l.yellow,T++;break;case "error":m="\u2717",c=l.red,O++;break;case "advisory":m="\u2139",c=l.cyan,C++;break}if(!w){let v=o.check.padEnd(30);if(console.log(` ${c(m)} ${v} ${c(o.message)}`),o.details&&o.details.length>0){let A=o.details.slice(0,5);for(let q of A)console.log(l.gray(` \u2502 ${q}`));o.details.length>5&&console.log(l.gray(` \u2502 ... and ${o.details.length-5} more`));}o.fix&&console.log(l.gray(` \u2514\u2500 Fix: ${o.fix}`));}}let b=W+O,j=z+T,D=b+j+$===0;if(!w)if(console.log(""),D)console.log(l.green(`\u2728 All checks passed!
7
7
  `));else {let o=[];b>0&&o.push(l.red(`${b} error${b>1?"s":""}`)),j>0&&o.push(l.yellow(`${j} warning${j>1?"s":""}`)),$>0&&o.push(l.gray(`${$} missing`)),C>0&&o.push(l.cyan(`${C} advisor${C>1?"ies":"y"}`)),console.log(`${o.join(", ")} found.
8
8
  `),console.log(l.gray(`Run the suggested commands to fix issues.
9
- `));}if(!w&&P.explain&&!D)try{let{narrateAllGaps:o}=await import('./gap-narrator-DVXPWNFN.js'),m=[];for(let c of s)c.status!=="ok"&&(c.name===".purpose"||c.name.startsWith("Purpose-required")?m.push({type:"missing-purpose",target:c.name,severity:"improvement"}):c.name===".paradigm/scan-index.json"&&c.status==="warn"?m.push({type:"index-stale",target:c.name,severity:"improvement"}):c.name==="Portal compliance"?m.push({type:"portal-mismatch",target:c.name,severity:c.status==="error"?"blocking":"improvement"}):c.name==="Clarification markers"&&m.push({type:"missing-description",target:c.name,severity:"improvement"}));if(m.length>0){let c=o(m);console.log(l.blue(`
9
+ `));}if(!w&&P.explain&&!D)try{let{narrateAllGaps:o}=await import('./gap-narrator-NTXLUI7I.js'),m=[];for(let c of s)c.status!=="ok"&&(c.name===".purpose"||c.name.startsWith("Purpose-required")?m.push({type:"missing-purpose",target:c.name,severity:"improvement"}):c.name===".paradigm/scan-index.json"&&c.status==="warn"?m.push({type:"index-stale",target:c.name,severity:"improvement"}):c.name==="Portal compliance"?m.push({type:"portal-mismatch",target:c.name,severity:c.status==="error"?"blocking":"improvement"}):c.name==="Clarification markers"&&m.push({type:"missing-description",target:c.name,severity:"improvement"}));if(m.length>0){let c=o(m);console.log(l.blue(`
10
10
  Gap Narrations (--explain)
11
11
  `)),console.log(l.gray(c.narrative)),console.log("");}}catch{}return D?I.success("All health checks passed",{total:s.length+M.length}):I.error("Health checks found issues",{errors:b,warnings:j,missing:$,advisories:C}),D}export{rs as a};
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import {b}from'./chunk-7PB7AXQE.js';import {e,f,c,d,l,h,g,k,i,m as m$1,o,n,j,b as b$1,a as a$1}from'./chunk-AO7ZSRME.js';import {a}from'./chunk-Y4XFVDZC.js';import*as $ from'fs';import*as m from'path';import e$1 from'chalk';import E from'prompts';function F(){return process.env.CLAUDE_CODE==="1"||process.env.TERM_PROGRAM==="claude"?false:!!(process.env.TERM_PROGRAM==="cursor"||process.env.CURSOR_SESSION||process.env.CURSOR_TRACE_ID||process.env.VSCODE_CWD&&process.env.VSCODE_CWD.toLowerCase().includes("cursor")||process.env.VSCODE_NLS_CONFIG&&process.env.VSCODE_NLS_CONFIG.toLowerCase().includes("cursor")||process.env.TERM_PROGRAM==="vscode"&&process.env.VSCODE_GIT_ASKPASS_NODE?.toLowerCase().includes("cursor")||process.stdin.isTTY)}async function T(g){let n=new a(g),c=await n.discover();console.log(e$1.cyan(`
2
+ import {b}from'./chunk-J6KWGCHN.js';import {e,f,c,d,l,h,g,k,i,m as m$1,o,n,j,b as b$1,a as a$1}from'./chunk-AO7ZSRME.js';import {a}from'./chunk-Y4XFVDZC.js';import*as $ from'fs';import*as m from'path';import e$1 from'chalk';import E from'prompts';function F(){return process.env.CLAUDE_CODE==="1"||process.env.TERM_PROGRAM==="claude"?false:!!(process.env.TERM_PROGRAM==="cursor"||process.env.CURSOR_SESSION||process.env.CURSOR_TRACE_ID||process.env.VSCODE_CWD&&process.env.VSCODE_CWD.toLowerCase().includes("cursor")||process.env.VSCODE_NLS_CONFIG&&process.env.VSCODE_NLS_CONFIG.toLowerCase().includes("cursor")||process.env.TERM_PROGRAM==="vscode"&&process.env.VSCODE_GIT_ASKPASS_NODE?.toLowerCase().includes("cursor")||process.stdin.isTTY)}async function T(g){let n=new a(g),c=await n.discover();console.log(e$1.cyan(`
3
3
  Configure Agent Models
4
4
  `)),console.log(e$1.gray(` Environment: ${c.source}`)),console.log(e$1.gray(` Available: ${c.models.length} models
5
5
  `));let i={},o=n.groupByTier(c.models),a$2=t=>{let r=a$1[t],s=r.tier==="high"?o.high:r.tier==="medium"?o.medium:o.low,l=[];for(let f of s){let P=l.length===0;l.push({title:P?`${f.name} (recommended)`:f.name,value:f.id,description:`${f.provider} - ${r.tier} tier`});}let u=o.high.filter(f=>!s.includes(f)),y=o.medium.filter(f=>!s.includes(f)),v=o.low.filter(f=>!s.includes(f));for(let f of u)l.push({title:f.name,value:f.id,description:`${f.provider} - high tier`});for(let f of y)l.push({title:f.name,value:f.id,description:`${f.provider} - medium tier`});for(let f of v)l.push({title:f.name,value:f.id,description:`${f.provider} - low tier`});return l};for(let t of ["architect","builder","tester","reviewer","security"]){let r=a$1[t],s=t.charAt(0).toUpperCase()+t.slice(1),l=a$2(t),u=await E({type:"select",name:"model",message:`${s} (${r.description})`,choices:l,initial:0},{onCancel:()=>{console.log(e$1.yellow(`
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import {a,b}from'./chunk-4TXOVRWD.js';import {b as b$1}from'./chunk-6QKCUEEY.js';import {m}from'./chunk-T6IDXUUA.js';import*as u from'fs';import*as p from'path';import*as $ from'js-yaml';import g from'chalk';import q from'ora';var _={"@":{category:"features",prefix:"@"},"#":{category:"components",prefix:"#"},"^":{category:"gates",prefix:"^"},$:{category:"flows",prefix:"$"},"&":{category:"integrations",prefix:"&"},"!":{category:"signals",prefix:"!"},"%":{category:"state",prefix:"%"}},N={features:["src/features/","features/","app/","src/app/","src/modules/","modules/"],components:["src/components/","components/","src/lib/","lib/","src/ui/","ui/"],gates:["middleware/","src/middleware/","auth/","src/auth/","guards/","src/guards/"],flows:["flows/","src/flows/","workflows/","src/workflows/","sagas/","src/sagas/"],integrations:["integrations/","src/integrations/","external/","src/external/","vendors/"],signals:["events/","src/events/","handlers/","src/handlers/"],state:["stores/","src/stores/","state/","src/state/","reducers/","src/reducers/"]},z={config:[".paradigm/config.yaml","package.json","tsconfig.json",".env.example"],entry:["src/index.ts","src/index.tsx","src/main.ts","src/main.tsx","index.ts","main.ts","src/app.ts","src/app.tsx"],types:["src/types/","types/","src/types.ts","types.ts"]},G={always:["node_modules/","dist/","build/",".git/",".next/",".nuxt/",".cache/","*.lock","*.log"],unless_testing:["**/*.test.ts","**/*.test.tsx","**/*.spec.ts","**/*.spec.tsx","__tests__/","test/","tests/"],unless_docs:["docs/","*.md","README*","CHANGELOG*"]};async function A(o,t,n={}){let r=n.quiet?null:q();r?.start("Generating navigator.yaml...");let s=M(o),e=L(o),c=H(o),i=U(t.symbols,t.purposeFiles),f={version:"1.0",generated:new Date().toISOString(),structure:s,key_files:e,skip_patterns:c,symbols:i},a=p.join(o,".paradigm"),l=p.join(a,"navigator.yaml");u.existsSync(a)||u.mkdirSync(a,{recursive:true}),u.writeFileSync(l,$.dump(f,{indent:2,lineWidth:120,noRefs:true,sortKeys:false}),"utf8"),r?.succeed(g.green("Navigator generated")),n.quiet||(console.log(g.gray(` Output: ${l}`)),console.log(g.gray(` Structure categories: ${Object.keys(s).length}`)),console.log(g.gray(` Symbol mappings: ${Object.keys(i).length}`)),console.log());}function M(o){let t={};for(let[n,r]of Object.entries(N)){let s=r.filter(e=>{let c=p.join(o,e);return u.existsSync(c)});if(s.length>0){let e=Object.values(_).find(c=>c.category===n);t[n]={paths:s,symbol:e?.prefix||"@"};}}return t}function L(o){let t={};for(let[n,r]of Object.entries(z)){let s=r.filter(e=>{let c=p.join(o,e);return u.existsSync(c)});s.length>0&&(t[n]=s);}return t.config||(t.config=[]),t.entry||(t.entry=[]),t.types||(t.types=[]),t}function H(o){let t={...G},n=p.join(o,".gitignore");if(u.existsSync(n))try{let s=u.readFileSync(n,"utf8").split(`
2
+ import {a,b}from'./chunk-4TXOVRWD.js';import {b as b$1}from'./chunk-VCKKJDLP.js';import {m}from'./chunk-T6IDXUUA.js';import*as u from'fs';import*as p from'path';import*as $ from'js-yaml';import g from'chalk';import q from'ora';var _={"@":{category:"features",prefix:"@"},"#":{category:"components",prefix:"#"},"^":{category:"gates",prefix:"^"},$:{category:"flows",prefix:"$"},"&":{category:"integrations",prefix:"&"},"!":{category:"signals",prefix:"!"},"%":{category:"state",prefix:"%"}},N={features:["src/features/","features/","app/","src/app/","src/modules/","modules/"],components:["src/components/","components/","src/lib/","lib/","src/ui/","ui/"],gates:["middleware/","src/middleware/","auth/","src/auth/","guards/","src/guards/"],flows:["flows/","src/flows/","workflows/","src/workflows/","sagas/","src/sagas/"],integrations:["integrations/","src/integrations/","external/","src/external/","vendors/"],signals:["events/","src/events/","handlers/","src/handlers/"],state:["stores/","src/stores/","state/","src/state/","reducers/","src/reducers/"]},z={config:[".paradigm/config.yaml","package.json","tsconfig.json",".env.example"],entry:["src/index.ts","src/index.tsx","src/main.ts","src/main.tsx","index.ts","main.ts","src/app.ts","src/app.tsx"],types:["src/types/","types/","src/types.ts","types.ts"]},G={always:["node_modules/","dist/","build/",".git/",".next/",".nuxt/",".cache/","*.lock","*.log"],unless_testing:["**/*.test.ts","**/*.test.tsx","**/*.spec.ts","**/*.spec.tsx","__tests__/","test/","tests/"],unless_docs:["docs/","*.md","README*","CHANGELOG*"]};async function A(o,t,n={}){let r=n.quiet?null:q();r?.start("Generating navigator.yaml...");let s=M(o),e=L(o),c=H(o),i=U(t.symbols,t.purposeFiles),f={version:"1.0",generated:new Date().toISOString(),structure:s,key_files:e,skip_patterns:c,symbols:i},a=p.join(o,".paradigm"),l=p.join(a,"navigator.yaml");u.existsSync(a)||u.mkdirSync(a,{recursive:true}),u.writeFileSync(l,$.dump(f,{indent:2,lineWidth:120,noRefs:true,sortKeys:false}),"utf8"),r?.succeed(g.green("Navigator generated")),n.quiet||(console.log(g.gray(` Output: ${l}`)),console.log(g.gray(` Structure categories: ${Object.keys(s).length}`)),console.log(g.gray(` Symbol mappings: ${Object.keys(i).length}`)),console.log());}function M(o){let t={};for(let[n,r]of Object.entries(N)){let s=r.filter(e=>{let c=p.join(o,e);return u.existsSync(c)});if(s.length>0){let e=Object.values(_).find(c=>c.category===n);t[n]={paths:s,symbol:e?.prefix||"@"};}}return t}function L(o){let t={};for(let[n,r]of Object.entries(z)){let s=r.filter(e=>{let c=p.join(o,e);return u.existsSync(c)});s.length>0&&(t[n]=s);}return t.config||(t.config=[]),t.entry||(t.entry=[]),t.types||(t.types=[]),t}function H(o){let t={...G},n=p.join(o,".gitignore");if(u.existsSync(n))try{let s=u.readFileSync(n,"utf8").split(`
3
3
  `).map(e=>e.trim()).filter(e=>e&&!e.startsWith("#")).filter(e=>e.endsWith("/")||e.includes("*")||["node_modules","dist","build",".cache"].some(c=>e.includes(c))).slice(0,20);for(let e of s)t.always.includes(e)||t.always.push(e);}catch{}return t}function U(o,t,n){let r={},s=new Map;for(let e of t){let c=p.dirname(e);s.set(e,c);}for(let e of o){let i=`${W(e.type)}${e.id}`;if(e.path)r[i]=e.path;else if(e.directory)r[i]=e.directory;else {let f=t.find(a=>{let l=p.dirname(a),y=e.id.toLowerCase();return l.toLowerCase().includes(y)});f&&(r[i]=p.dirname(f)+"/");}}return r}function W(o){switch(o){case "feature":return "@";case "component":return "#";case "gate":return "^";case "flow":return "$";case "integration":return "&";case "signal":return "!";case "state":return "%";case "idea":return "?";case "deprecated":return "~";default:return "@"}}function P(o){return $.load(o)}async function ce(o,t){let n=o?p.resolve(o):process.cwd(),r=p.basename(n),s=q(),e=p.join(n,".paradigm"),c=u.existsSync(e)&&u.statSync(e).isFile(),i;t.output?i=p.resolve(t.output):c?i=p.join(n,".paradigm-scan-index.json"):(i=p.join(n,".paradigm","scan-index.json"),u.existsSync(p.dirname(i))||u.mkdirSync(p.dirname(i),{recursive:true})),t.quiet||console.log(g.blue(`
4
4
  \u{1F52D} Generating Paradigm Scan Index
5
5
  `));let f,a$1,l,y=[p.join(n,".paradigm"),p.join(n,".paradigm","config.yaml")];for(let h of y)if(u.existsSync(h)&&u.statSync(h).isFile())try{let m=u.readFileSync(h,"utf8"),F=P(m);f=F.scan,a$1=F.graph,l=F.context?.tiers;break}catch{}s.start("Aggregating symbols from purpose and portal files...");let d;try{d=await m(n);}catch(h){s.fail(g.red("Failed to aggregate symbols")),console.error(g.gray(h.message)),process.exit(1);}if(s.succeed(`Found ${d.symbols.length} symbols`),!t.quiet){let h={components:d.symbols.filter(m=>m.type==="component").length,flows:d.symbols.filter(m=>m.type==="flow").length,gates:d.symbols.filter(m=>m.type==="gate").length,signals:d.symbols.filter(m=>m.type==="signal").length,aspects:d.symbols.filter(m=>m.type==="aspect").length};console.log(g.gray(" Breakdown:"));for(let[m,S]of Object.entries(h))S>0&&console.log(g.gray(` ${m}: ${S}`));console.log();}s.start("Generating scan index...");let b$2=a({symbols:d.symbols,purposeFiles:d.purposeFiles,portalFiles:d.portalFiles},{projectName:r,visualTagMappings:f?.visualTagMappings,screenDefinitions:f?.screens});K(b$2,{hot:l?.["hot-threshold"],warm:l?.["warm-threshold"]});try{u.writeFileSync(i,b(b$2),"utf8"),s.succeed(g.green("Scan index generated"));}catch(h){s.fail(g.red("Failed to write scan index")),console.error(g.gray(h.message)),process.exit(1);}await A(n,d,{quiet:t.quiet});let j=await Y(n,d.purposeFiles,{quiet:t.quiet});if(j&&Object.keys(j.flows).length>0){let h=p.join(n,".paradigm","flow-index.json");u.writeFileSync(h,JSON.stringify(j,null,2),"utf8"),t.quiet||s.succeed(g.green(`Flow index generated (${Object.keys(j.flows).length} flows)`));}if(a$1?.["auto-generate"]!==false)try{let h=b$1(n),m=p.join(n,".paradigm","graphs");u.existsSync(m)||u.mkdirSync(m,{recursive:!0});let S=p.join(m,"auto.graph.json");u.writeFileSync(S,JSON.stringify(h,null,2),"utf8"),t.quiet||s.succeed(g.green(`Symbol graph updated (${h.nodes.length} nodes)`));}catch{t.quiet||s.warn(g.yellow("Could not auto-generate symbol graph"));}return t.quiet||(console.log(g.gray(`
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import {AsyncLocalStorage}from'async_hooks';var f={debug:"\x1B[90m",info:"\x1B[36m",warn:"\x1B[33m",error:"\x1B[31m"},g="\x1B[1m",c="\x1B[0m";function d(){let t=new Date,r=String(t.getHours()).padStart(2,"0"),e=String(t.getMinutes()).padStart(2,"0"),s=String(t.getSeconds()).padStart(2,"0"),o=String(t.getMilliseconds()).padStart(3,"0");return `${r}:${e}:${s}.${o}`}function y(t){return !t||Object.keys(t).length===0?"":" "+JSON.stringify(t)}function v(t,r,e,s,o,i){let n=f[t],a=t.toUpperCase().padEnd(5),h=d(),p=y(i?{correlationId:i,...o}:o);return `${n}${h}${c} ${g}${r}${c} ${n}${a}${c} ${s}${p}`}function S(t,r,e,s,o,i){let n={timestamp:new Date().toISOString(),level:t,symbol:r,symbolType:e,message:s,...o};return i&&(n.correlationId=i),JSON.stringify(n)}var w=new AsyncLocalStorage;function $(){return w.getStore()}var m={debug:0,info:1,warn:2,error:3};function L(){let t=typeof process<"u"?process.env:{},r=t.LOG_LEVEL;return r&&m[r]!==void 0?r:t.NODE_ENV==="production"?"info":"debug"}function O(){let t=typeof process<"u"?process.env:{};return t.PARADIGM_LOG_FORMAT==="json"||t.NODE_ENV==="production"?"json":"pretty"}function T(){let r=(typeof process<"u"?process.env:{}).PARADIGM_SYMBOLS;return r?r.split(",").map(e=>e.trim()).filter(Boolean):null}var D=class{constructor(t){this.emit=t,this.startTime=Date.now();}startTime;success(t,r){this.end("info",t,r);}error(t,r){this.end("error",t,r);}end(t,r,e){let s=Date.now()-this.startTime;this.emit(t,r,{...e,duration:`${s}ms`});}},l=class{constructor(t,r,e,s,o,i,n=[]){this.symbol=t,this.symbolType=r,this.minLevel=e,this.symbolFilter=s,this.format=o,this.output=i,this.transports=n;}debug(t,r){this.emit("debug",t,r);}info(t,r){this.emit("info",t,r);}warn(t,r){this.emit("warn",t,r);}error(t,r){this.emit("error",t,r);}start(t,r){return this.emit("info",t,r),new D((e,s,o)=>this.emit(e,s,o))}emit(t,r,e){if(m[t]<m[this.minLevel])return;if(this.symbolFilter){let n=this.symbol.charAt(0);if(!this.symbolFilter.includes(n))return}let s=$(),i=(this.format==="json"?S:v)(t,this.symbol,this.symbolType,r,e,s);if(this.output(i),this.transports.length>0){let n={level:t,symbol:this.symbol,symbolType:this.symbolType,message:r,data:e,correlationId:s,timestamp:new Date().toISOString()};for(let a of this.transports)a.send(n);}}},u=class{level;symbolFilter;format;output;transports;constructor(t){this.level=t?.level??L(),this.symbolFilter=t?.symbols??T(),this.format=t?.format??O(),this.output=t?.output??(r=>console.log(r)),this.transports=t?.transports??[];}addTransport(t){this.transports.push(t);}removeTransport(t){let r=this.transports.indexOf(t);r!==-1&&this.transports.splice(r,1);}component(t){return this.create(t,"component","#")}gate(t){return this.create(t,"gate","^")}signal(t){return this.create(t,"signal","!")}flow(t){return this.create(t,"flow","$")}aspect(t){return this.create(t,"aspect","~")}raw(t){return new l(t,"raw",this.level,this.symbolFilter,this.format,this.output,this.transports)}create(t,r,e){let s=t.startsWith(e)?t:`${e}${t}`;return new l(s,r,this.level,this.symbolFilter,this.format,this.output,this.transports)}};new u;var N=new u({output:t=>process.stderr.write(t+`
3
+ `)});export{N as a};