@a-company/paradigm 5.10.0 → 5.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (409) hide show
  1. package/dist/accept-orchestration-IUAWQZUN.js +18 -0
  2. package/dist/add-P76GEMGF.js +8 -0
  3. package/dist/agent-UUTYOFTH.js +33 -0
  4. package/dist/agent-loader-EPXURMO7.js +2 -0
  5. package/dist/agent-loader-PYGPX6D2.js +2 -0
  6. package/dist/agent-state-KSQ3S7OB.js +2 -0
  7. package/dist/agents-suggest-HYTFMQD3.js +10 -0
  8. package/dist/aggregate-W66DM3GA.js +10 -0
  9. package/dist/ambient-HYZR42NX.js +35 -0
  10. package/dist/assess-UFPYEJKP.js +9 -0
  11. package/dist/auto-RHJXOZFL.js +14 -0
  12. package/dist/beacon-5QVYV5DF.js +13 -0
  13. package/dist/calibration-OLJYB5HN.js +7 -0
  14. package/dist/check-THVGY4R5.js +14 -0
  15. package/dist/chunk-22ISTMKI.js +31 -0
  16. package/dist/chunk-2QO33NYK.js +3 -0
  17. package/dist/chunk-33LKBMVK.js +134 -0
  18. package/dist/chunk-4QADCWPU.js +7 -0
  19. package/dist/chunk-4TXOVRWD.js +3 -0
  20. package/dist/chunk-4UJ4NIEQ.js +4 -0
  21. package/dist/chunk-4ZGGWZ32.js +3 -0
  22. package/dist/chunk-5TAVYPOV.js +2 -0
  23. package/dist/chunk-6EX37L4Q.js +8 -0
  24. package/dist/chunk-AD5TAD2A.js +5 -0
  25. package/dist/chunk-AGVAHVUA.js +2 -0
  26. package/dist/chunk-AO7ZSRME.js +13 -0
  27. package/dist/chunk-BFD3GFRK.js +2 -0
  28. package/dist/chunk-D34YFK4M.js +6 -0
  29. package/dist/chunk-DVZWCXB6.js +2 -0
  30. package/dist/chunk-EKZDFEJW.js +2 -0
  31. package/dist/chunk-ET5XJTSX.js +2 -0
  32. package/dist/chunk-FYDRENK7.js +3 -0
  33. package/dist/chunk-HMQ5BHP2.js +743 -0
  34. package/dist/chunk-HXKWL3VK.js +29 -0
  35. package/dist/chunk-IZSBGW6E.js +2 -0
  36. package/dist/chunk-J32OPJEX.js +2 -0
  37. package/dist/chunk-JBDMCRPP.js +7 -0
  38. package/dist/chunk-JIXHEBGK.js +7 -0
  39. package/dist/chunk-JNSJVCTU.js +2 -0
  40. package/dist/chunk-JQKKVAAN.js +2 -0
  41. package/dist/chunk-KLBH26PA.js +429 -0
  42. package/dist/chunk-L6K5HNDL.js +24 -0
  43. package/dist/chunk-LKAT7IAK.js +2 -0
  44. package/dist/chunk-M4UMM6DC.js +5 -0
  45. package/dist/chunk-NKYNHSA5.js +424 -0
  46. package/dist/chunk-NW6OKHE6.js +5 -0
  47. package/dist/chunk-NXRVR37G.js +60 -0
  48. package/dist/chunk-ODVKPZZ4.js +2 -0
  49. package/dist/chunk-PUBB7LIT.js +5 -0
  50. package/dist/chunk-Q2J542ST.js +2 -0
  51. package/dist/chunk-QGZRM6ZB.js +2 -0
  52. package/dist/chunk-QNZEG7IT.js +13 -0
  53. package/dist/chunk-QT2LKB3P.js +7 -0
  54. package/dist/chunk-RVRARWSY.js +9 -0
  55. package/dist/chunk-T6IDXUUA.js +2 -0
  56. package/dist/chunk-TYWB5IQJ.js +3 -0
  57. package/dist/chunk-UIKLE3WD.js +2 -0
  58. package/dist/chunk-V7K6CQVX.js +111 -0
  59. package/dist/chunk-VCKKJDLP.js +8 -0
  60. package/dist/chunk-VG7FN2TU.js +4 -0
  61. package/dist/chunk-W5IWDW4Y.js +16 -0
  62. package/dist/chunk-W7C6FFMO.js +8 -0
  63. package/dist/chunk-WESTEMIM.js +10 -0
  64. package/dist/chunk-WR6D3SC6.js +5 -0
  65. package/dist/chunk-WS2N27RX.js +3 -0
  66. package/dist/chunk-XMAV5AG6.js +2 -0
  67. package/dist/chunk-XROULIQN.js +2 -0
  68. package/dist/chunk-XUFYOXOU.js +3 -0
  69. package/dist/chunk-Y4XFVDZC.js +3 -0
  70. package/dist/chunk-Y6KXTQBG.js +2 -0
  71. package/dist/{chunk-GTR2TBIJ.js → chunk-Z2UZUCY6.js} +237 -1047
  72. package/dist/chunk-Z34K6GY2.js +8 -0
  73. package/dist/claude-4LR3LJQZ.js +13 -0
  74. package/dist/claude-cli-UP6HGH7C.js +6 -0
  75. package/dist/claude-code-RLJ4GX77.js +11 -0
  76. package/dist/claude-code-teams-R37HJY3Y.js +29 -0
  77. package/dist/commands-LMUD5L6R.js +455 -0
  78. package/dist/compliance-GZ7UAOG3.js +6 -0
  79. package/dist/conductor-Y5IXELTL.js +4 -0
  80. package/dist/config-schema-HR7LDEQ6.js +2 -0
  81. package/dist/constellation-CG7C4WFE.js +13 -0
  82. package/dist/context-audit-RSSRX6XC.js +6 -0
  83. package/dist/cost-IDNVMAEV.js +10 -0
  84. package/dist/cost-PK4KIF7R.js +2 -0
  85. package/dist/cursor-cli-QKF7Z6M2.js +4 -0
  86. package/dist/cursorrules-U5O4G5T4.js +14 -0
  87. package/dist/decision-loader-2XPZE4EZ.js +2 -0
  88. package/dist/delete-P5VULXR4.js +14 -0
  89. package/dist/diff-RTFUKJHF.js +9 -0
  90. package/dist/discipline-H7LDI6NT.js +2 -0
  91. package/dist/dist-3ZCH25SG.js +2 -0
  92. package/dist/dist-KGRCLBJP-2QAPFYNF.js +39 -0
  93. package/dist/dist-R3RWD35F.js +2 -0
  94. package/dist/dist-VGFSP3XM.js +2 -0
  95. package/dist/dist-VXCZWVVJ.js +2 -0
  96. package/dist/dist-W3XCATBJ.js +2 -0
  97. package/dist/docs-EDQ2STFK.js +2 -0
  98. package/dist/docs-RXPN6CK7.js +12 -0
  99. package/dist/doctor-2T2QL6VM.js +2 -0
  100. package/dist/drift-ILZE5BFJ.js +13 -0
  101. package/dist/echo-UPTQUEDU.js +46 -0
  102. package/dist/edit-GUU3HBVW.js +9 -0
  103. package/dist/event-Y3VXC2RV.js +3 -0
  104. package/dist/explain-files-3GPZUETV.js +4 -0
  105. package/dist/export-CV5KCTPS.js +2 -0
  106. package/dist/flow-S3RQ4YPY.js +11 -0
  107. package/dist/global-C44FW4G2.js +13 -0
  108. package/dist/graduate-3BBSC27A.js +5 -0
  109. package/dist/graph-CNDE5TAT.js +2 -0
  110. package/dist/graph-server-COZR5C3Z.js +14 -0
  111. package/dist/habits-4J2KRYUL.js +42 -0
  112. package/dist/history-UW454SDP.js +12 -0
  113. package/dist/hooks-XH52VGOU.js +2 -0
  114. package/dist/index.js +15 -1039
  115. package/dist/init-24MAQJFM.js +2 -0
  116. package/dist/integrity-UYDOOJDP.js +7 -0
  117. package/dist/integrity-checker-DHGMZQDG.js +2 -0
  118. package/dist/journal-loader-GLH7XFTK.js +2 -0
  119. package/dist/lint-IGKE6UPS.js +26 -0
  120. package/dist/list-5IUGP3ZB.js +7 -0
  121. package/dist/list-YKIQNKGB.js +6 -0
  122. package/dist/lore-loader-RVQI5GXL.js +2 -0
  123. package/dist/lore-loader-XY5MZRR2.js +2 -0
  124. package/dist/lore-server-FC2GMDLT.js +14 -0
  125. package/dist/manual-RXSPSFLL.js +20 -0
  126. package/dist/mcp.js +93 -20484
  127. package/dist/migrate-X5OMAFAQ.js +59 -0
  128. package/dist/migrate-assessments-GEI5WMI2.js +4 -0
  129. package/dist/model-discovery-HMB3YI4L.js +2 -0
  130. package/dist/nomination-engine-XF7TWPAP.js +2 -0
  131. package/dist/notebook-PE3JSYZI.js +11 -0
  132. package/dist/notebook-loader-CENTDDUJ.js +2 -0
  133. package/dist/orchestrate-35HBQ3O3.js +8 -0
  134. package/dist/peers-P2KXU7ZK.js +5 -0
  135. package/dist/persona-STQWZH5P.js +29 -0
  136. package/dist/pipeline-MZUITRVN.js +4 -0
  137. package/dist/platform-server-2KXHGHFV.js +25 -0
  138. package/dist/plugin-update-checker-M7PW434O.js +2 -0
  139. package/dist/portal-check-3JVNLOEP.js +8 -0
  140. package/dist/portal-compliance-2UG4VKWH.js +2 -0
  141. package/dist/probe-5L5BQDGE.js +6 -0
  142. package/dist/project-type-SURTOIG7.js +2 -0
  143. package/dist/promote-NJQDZBZA.js +8 -0
  144. package/dist/providers-4PXMWA7V.js +8 -0
  145. package/dist/quiz-FE5UGAY2.js +10 -0
  146. package/dist/record-YXPB34MY.js +6 -0
  147. package/dist/reindex-PGDQSM42.js +2 -0
  148. package/dist/remember-MJRNTXYS.js +14 -0
  149. package/dist/retag-N5XF3KXP.js +6 -0
  150. package/dist/review-6UAH6V3R.js +11 -0
  151. package/dist/review-77QI6VOC.js +6 -0
  152. package/dist/ripple-ZGDITCGB.js +10 -0
  153. package/dist/roster-FLRZ5J42.js +2 -0
  154. package/dist/sentinel-HYAZ3CO5.js +19 -0
  155. package/dist/sentinel-bridge-VR357PKL.js +2 -0
  156. package/dist/sentinel-mcp.js +38 -3808
  157. package/dist/sentinel.js +1 -34
  158. package/dist/serve-JE6UF5P2.js +8 -0
  159. package/dist/serve-L52ZUTU6.js +10 -0
  160. package/dist/serve-OY6XYL7F.js +12 -0
  161. package/dist/server-2MNROHF6.js +7 -0
  162. package/dist/server-4YNUIK4W.js +8 -0
  163. package/dist/session-tracker-SKOMBDOW.js +2 -0
  164. package/dist/session-work-log-3MNUDEZ6.js +2 -0
  165. package/dist/session-work-log-J2H5OZBR.js +2 -0
  166. package/dist/setup-3F5IK7MO.js +31 -0
  167. package/dist/setup-KPIMRZ4Q.js +2 -0
  168. package/dist/shift-6GCNH666.js +11 -0
  169. package/dist/show-BOAVWZPZ.js +7 -0
  170. package/dist/show-PJ5LFLIL.js +5 -0
  171. package/dist/snapshot-L2G56RPL.js +8 -0
  172. package/dist/spawn-UH5RENSE.js +12 -0
  173. package/dist/status-77M3SDIF.js +8 -0
  174. package/dist/status-A37ECYNJ.js +6 -0
  175. package/dist/summary-ZJLQ6KHB.js +7 -0
  176. package/dist/sweep-HU74OPVW.js +17 -0
  177. package/dist/switch-CTW4PDGI.js +17 -0
  178. package/dist/symphony-3QMBGCZY.js +2 -0
  179. package/dist/symphony-QI63XL62.js +53 -0
  180. package/dist/symphony-loader-XACVV2E3.js +2 -0
  181. package/dist/symphony-peers-U4KHMKGI.js +2 -0
  182. package/dist/symphony-peers-X5NGWXFP.js +2 -0
  183. package/dist/symphony-relay-5GY5JIPT.js +3 -0
  184. package/dist/sync-QRDSFETO.js +2 -0
  185. package/dist/sync-llms-HL5PPW3M.js +15 -0
  186. package/dist/task-loader-NZFDTUQ5.js +2 -0
  187. package/dist/team-WGERKGNP.js +2 -0
  188. package/dist/test-BQJMS4Y2.js +111 -0
  189. package/dist/thread-HFXK65D4.js +41 -0
  190. package/dist/timeline-K3ZFKJ3R.js +6 -0
  191. package/dist/triage-FCWOZASE.js +18 -0
  192. package/dist/tutorial-UC6YQMNN.js +305 -0
  193. package/dist/university-content/courses/.purpose +74 -5
  194. package/dist/university-content/courses/para-701.json +807 -0
  195. package/dist/university-content/plsat/.purpose +3 -2
  196. package/dist/university-ui/assets/{index-BjewBB6s.js → index-CGFJczb1.js} +2 -2
  197. package/dist/university-ui/assets/{index-BjewBB6s.js.map → index-CGFJczb1.js.map} +1 -1
  198. package/dist/university-ui/index.html +1 -1
  199. package/dist/upgrade-B4IOLZYK.js +53 -0
  200. package/dist/validate-C6SMKGYD.js +9 -0
  201. package/dist/validate-LSCDOLBO.js +13 -0
  202. package/dist/validate-VZXTJHGO.js +6 -0
  203. package/dist/watch-LRM5XD46.js +8 -0
  204. package/dist/watch-PZCCUP6K.js +9 -0
  205. package/dist/wisdom-XZ3QKPNP.js +7 -0
  206. package/dist/work-log-loader-DL5GZ2BQ.js +2 -0
  207. package/dist/workspace-2ODL5WLY.js +2 -0
  208. package/package.json +1 -1
  209. package/platform-ui/dist/assets/AmbientSection-DqQ2mfCO.js +1 -0
  210. package/platform-ui/dist/assets/{CanvasSection-DwPTRdIN.js → CanvasSection-DLW0s-Bu.js} +1 -1
  211. package/platform-ui/dist/assets/{DocsSection-BJc_ws4I.js → DocsSection-BQ9Hi51g.js} +1 -1
  212. package/platform-ui/dist/assets/{GitSection-DhqBo1xc.js → GitSection-QQeUX6o3.js} +1 -1
  213. package/platform-ui/dist/assets/{GraphSection-D9fhVnZ0.js → GraphSection-0c9C-w7K.js} +2 -2
  214. package/platform-ui/dist/assets/{GraphSection-BlgXTl53.css → GraphSection-Bbs2a8sC.css} +1 -1
  215. package/platform-ui/dist/assets/LoreSection--t56kCj2.js +1 -0
  216. package/platform-ui/dist/assets/LoreSection-qnmm3o4y.css +1 -0
  217. package/platform-ui/dist/assets/SentinelSection-C4OoME9U.js +1 -0
  218. package/platform-ui/dist/assets/{SymphonySection-BRoBaUSS.js → SymphonySection-B-rvsLxq.js} +1 -1
  219. package/platform-ui/dist/assets/TeamSection-CBFmNEEo.js +1 -0
  220. package/platform-ui/dist/assets/index-Bxp0TVaf.css +1 -0
  221. package/platform-ui/dist/assets/index-DPpOdAtC.js +57 -0
  222. package/platform-ui/dist/index.html +2 -2
  223. package/dist/accept-orchestration-UQLM7PTQ.js +0 -189
  224. package/dist/add-FZRKEGH4.js +0 -81
  225. package/dist/agent-WERIO2XV.js +0 -523
  226. package/dist/agent-loader-TFIANSF4.js +0 -44
  227. package/dist/agent-state-S5DAWPTF.js +0 -24
  228. package/dist/agents-suggest-DNSYJ6IA.js +0 -83
  229. package/dist/aggregate-H57K7PNV.js +0 -88
  230. package/dist/assess-4WVXZLZQ.js +0 -68
  231. package/dist/auto-QFS5NHQU.js +0 -504
  232. package/dist/beacon-KXZXYQHX.js +0 -251
  233. package/dist/calibration-V46G7JTY.js +0 -135
  234. package/dist/check-OWAIWV23.js +0 -175
  235. package/dist/chunk-2IO7JAG2.js +0 -148
  236. package/dist/chunk-2T6BTYBN.js +0 -712
  237. package/dist/chunk-36TKPM5Z.js +0 -400
  238. package/dist/chunk-45MUDW6E.js +0 -804
  239. package/dist/chunk-4BLYIB7J.js +0 -5701
  240. package/dist/chunk-4L3UTYQX.js +0 -677
  241. package/dist/chunk-4NCFWYGG.js +0 -110
  242. package/dist/chunk-54LTTQBH.js +0 -138
  243. package/dist/chunk-5EWAQHFY.js +0 -269
  244. package/dist/chunk-5JGJACDU.js +0 -37
  245. package/dist/chunk-5OUOLN6M.js +0 -659
  246. package/dist/chunk-5VKJBNJL.js +0 -444
  247. package/dist/chunk-6N3JTACN.js +0 -2260
  248. package/dist/chunk-6QC3YGB6.js +0 -114
  249. package/dist/chunk-7N7GSU6K.js +0 -34
  250. package/dist/chunk-ABVQGRF7.js +0 -268
  251. package/dist/chunk-CL7JSK52.js +0 -129
  252. package/dist/chunk-CSD7IHSN.js +0 -152
  253. package/dist/chunk-EDOAWN7J.js +0 -717
  254. package/dist/chunk-EKGMAM62.js +0 -525
  255. package/dist/chunk-EZ3GOCYC.js +0 -132
  256. package/dist/chunk-F3BCHPYT.js +0 -143
  257. package/dist/chunk-FKJUBQU3.js +0 -3081
  258. package/dist/chunk-GT5QGC2H.js +0 -253
  259. package/dist/chunk-GZDFVP2N.js +0 -540
  260. package/dist/chunk-IRKUEJVW.js +0 -405
  261. package/dist/chunk-J2JEQRT3.js +0 -164
  262. package/dist/chunk-JASGXLK3.js +0 -679
  263. package/dist/chunk-KVDYJLTC.js +0 -121
  264. package/dist/chunk-L27I3CPZ.js +0 -357
  265. package/dist/chunk-LHLIAYQ3.js +0 -185
  266. package/dist/chunk-MCMOGQMU.js +0 -145
  267. package/dist/chunk-NQKQG45G.js +0 -688
  268. package/dist/chunk-PBHIFAL4.js +0 -259
  269. package/dist/chunk-PDX44BCA.js +0 -11
  270. package/dist/chunk-PMXRGPRQ.js +0 -305
  271. package/dist/chunk-RAB5IKPR.js +0 -487
  272. package/dist/chunk-RJE5G7WO.js +0 -590
  273. package/dist/chunk-RTHA3XRE.js +0 -880
  274. package/dist/chunk-S2HO5MLR.js +0 -621
  275. package/dist/chunk-S3ORKP3V.js +0 -716
  276. package/dist/chunk-TAIJOFOE.js +0 -124
  277. package/dist/chunk-TXESEO7Y.js +0 -245
  278. package/dist/chunk-UPLDI7CN.js +0 -1334
  279. package/dist/chunk-VL67H5IC.js +0 -506
  280. package/dist/chunk-VPPK3SY4.js +0 -1136
  281. package/dist/chunk-YMDLDELF.js +0 -314
  282. package/dist/chunk-YO6DVTL7.js +0 -99
  283. package/dist/chunk-YRZ5RPEB.js +0 -1561
  284. package/dist/chunk-ZDHLG5VP.js +0 -5676
  285. package/dist/chunk-ZGUAAVMA.js +0 -756
  286. package/dist/chunk-ZSYVKSY6.js +0 -2602
  287. package/dist/claude-FRRWJSTJ.js +0 -362
  288. package/dist/claude-cli-XJLK2X4L.js +0 -276
  289. package/dist/claude-code-HTBA4XRB.js +0 -126
  290. package/dist/claude-code-teams-T4SP24MD.js +0 -199
  291. package/dist/commands-5N4ILTPH.js +0 -5859
  292. package/dist/conductor-CQVGTEQN.js +0 -161
  293. package/dist/config-schema-EA4XALGG.js +0 -154
  294. package/dist/constellation-A26CCGQS.js +0 -225
  295. package/dist/context-audit-RLO3ETRP.js +0 -682
  296. package/dist/cost-BGM32XJU.js +0 -93
  297. package/dist/cost-VI46A4XL.js +0 -174
  298. package/dist/cursor-cli-JVEZGHWQ.js +0 -269
  299. package/dist/cursorrules-HLIKJJZT.js +0 -84
  300. package/dist/decision-loader-WWCLIQPJ.js +0 -20
  301. package/dist/delete-KBRPQLPC.js +0 -56
  302. package/dist/diff-D4X53HAC.js +0 -126
  303. package/dist/discipline-FA4OZXIS.js +0 -24
  304. package/dist/dist-34NA5RS5.js +0 -74
  305. package/dist/dist-5QE2BB2B-5S3T6Y3T.js +0 -6919
  306. package/dist/dist-77JDTVAY.js +0 -62
  307. package/dist/dist-OGTSAZ55.js +0 -1358
  308. package/dist/dist-QK4SQAK7.js +0 -64
  309. package/dist/dist-TA6LSC2Q.js +0 -20
  310. package/dist/docs-PBZB7LYP.js +0 -89
  311. package/dist/docs-QIYKO3BR.js +0 -155
  312. package/dist/doctor-ULBOHEIC.js +0 -11
  313. package/dist/drift-R5NRKFHI.js +0 -251
  314. package/dist/echo-O2LY7CC2.js +0 -248
  315. package/dist/edit-R2HNLMOG.js +0 -63
  316. package/dist/event-25OJKDCE.js +0 -31
  317. package/dist/export-IWVL7XLF.js +0 -38
  318. package/dist/flow-CRRVV3O3.js +0 -185
  319. package/dist/global-3NG5JXUB.js +0 -136
  320. package/dist/graduate-USAWGBJM.js +0 -160
  321. package/dist/graph-VHUMAAS6.js +0 -12
  322. package/dist/graph-server-YL22VBBN.js +0 -116
  323. package/dist/habits-OL5NGPXO.js +0 -1405
  324. package/dist/history-WOWC573W.js +0 -277
  325. package/dist/hooks-HFWSCGPV.js +0 -12
  326. package/dist/integrity-IHO4FZTS.js +0 -194
  327. package/dist/integrity-checker-PSKJA5SB.js +0 -12
  328. package/dist/journal-loader-5EYSBFFY.js +0 -18
  329. package/dist/lint-K6CJGGPH.js +0 -456
  330. package/dist/list-4YK7QKFF.js +0 -57
  331. package/dist/list-ENR7Q4CR.js +0 -56
  332. package/dist/lore-loader-7NO6N6FT.js +0 -26
  333. package/dist/lore-server-UNJY5KC3.js +0 -118
  334. package/dist/manual-G6FISID5.js +0 -204
  335. package/dist/migrate-LS45DNEV.js +0 -889
  336. package/dist/migrate-assessments-RGH4O6IX.js +0 -97
  337. package/dist/model-discovery-D2H3VBGC.js +0 -8
  338. package/dist/nomination-engine-RV5CNO5B.js +0 -42
  339. package/dist/notebook-YWIYGEHV.js +0 -155
  340. package/dist/orchestrate-JLILBBJE.js +0 -324
  341. package/dist/peers-DEOUIZM6.js +0 -82
  342. package/dist/persona-UHAHIVST.js +0 -390
  343. package/dist/pipeline-L4HCSBGN.js +0 -263
  344. package/dist/platform-server-H5YO3DQD.js +0 -1475
  345. package/dist/plugin-update-checker-KRRSGXMV.js +0 -12
  346. package/dist/portal-check-NPYGII2D.js +0 -42
  347. package/dist/portal-compliance-J7DGAPFX.js +0 -18
  348. package/dist/probe-MHL5HQZ2.js +0 -167
  349. package/dist/promote-F6ZYZZAL.js +0 -182
  350. package/dist/providers-GK7PB2OL.js +0 -104
  351. package/dist/quiz-M66SC7F7.js +0 -99
  352. package/dist/record-RA4WR2BO.js +0 -49
  353. package/dist/reindex-5LTD53ZC.js +0 -16
  354. package/dist/remember-HBWJ655S.js +0 -77
  355. package/dist/retag-3OLCVDEQ.js +0 -62
  356. package/dist/review-27ATYTD2.js +0 -33
  357. package/dist/review-57QMURZV.js +0 -334
  358. package/dist/ripple-JPBXP5I3.js +0 -215
  359. package/dist/sentinel-4XIG4STA.js +0 -63
  360. package/dist/sentinel-bridge-MDUXTQRL.js +0 -109
  361. package/dist/serve-CAH3PHE7.js +0 -33
  362. package/dist/serve-INL7SNBK.js +0 -36
  363. package/dist/serve-KBSE36PL.js +0 -49
  364. package/dist/server-54SKYFFY.js +0 -1647
  365. package/dist/server-XUOIO7E6.js +0 -338
  366. package/dist/session-tracker-C4BMD5WG.js +0 -13
  367. package/dist/session-work-log-MZ47OAPB.js +0 -20
  368. package/dist/setup-EDS27WUR.js +0 -25
  369. package/dist/setup-KO5AFC4K.js +0 -296
  370. package/dist/shift-D2JOHHBF.js +0 -668
  371. package/dist/show-5PV5KFJE.js +0 -176
  372. package/dist/show-NQKYX6WQ.js +0 -82
  373. package/dist/snapshot-BK4RBPCG.js +0 -62
  374. package/dist/spawn-RCHNXDHE.js +0 -196
  375. package/dist/status-WGIAQODY.js +0 -71
  376. package/dist/summary-NIRABMF5.js +0 -140
  377. package/dist/sweep-QMHNSIY5.js +0 -934
  378. package/dist/switch-6EJPZDIA.js +0 -232
  379. package/dist/symphony-4OCY36AI.js +0 -791
  380. package/dist/symphony-B75X2MME.js +0 -326
  381. package/dist/symphony-loader-UZGON56V.js +0 -90
  382. package/dist/symphony-peers-2ZQYLRNI.js +0 -34
  383. package/dist/symphony-peers-OL7F6M5S.js +0 -121
  384. package/dist/symphony-relay-UJYUXN65.js +0 -710
  385. package/dist/sync-VEHUH4OA.js +0 -11
  386. package/dist/sync-llms-YHCFIE6X.js +0 -166
  387. package/dist/task-loader-LDYWQSLM.js +0 -20
  388. package/dist/team-O5MIIFMA.js +0 -34
  389. package/dist/test-566CP5KC.js +0 -1017
  390. package/dist/thread-N754I4D5.js +0 -274
  391. package/dist/timeline-M3CICQFE.js +0 -112
  392. package/dist/triage-HHYGT3HY.js +0 -671
  393. package/dist/tutorial-KD22SUNO.js +0 -666
  394. package/dist/upgrade-H5PF32BW.js +0 -551
  395. package/dist/validate-CNKEKO6A.js +0 -134
  396. package/dist/validate-MB5ULIHS.js +0 -39
  397. package/dist/validate-QH3LADM6.js +0 -64
  398. package/dist/watch-2TKP5PVL.js +0 -199
  399. package/dist/watch-ZF4ML6CD.js +0 -111
  400. package/dist/wisdom-AATMGNFA.js +0 -319
  401. package/dist/work-log-loader-5L45XNYZ.js +0 -14
  402. package/dist/workspace-6E6OSRNU.js +0 -21
  403. package/platform-ui/dist/assets/AmbientSection-WtHfNedO.js +0 -1
  404. package/platform-ui/dist/assets/LoreSection-C3EixkjW.css +0 -1
  405. package/platform-ui/dist/assets/LoreSection-CwDDHrz9.js +0 -1
  406. package/platform-ui/dist/assets/SentinelSection-Cl7e5oZ6.js +0 -1
  407. package/platform-ui/dist/assets/TeamSection-CqSIMrKz.js +0 -1
  408. package/platform-ui/dist/assets/index-CfpZFjea.css +0 -1
  409. package/platform-ui/dist/assets/index-F0KL9xrN.js +0 -57
@@ -0,0 +1,134 @@
1
+ #!/usr/bin/env node
2
+ import {b}from'./chunk-JBDMCRPP.js';import {g}from'./chunk-T6IDXUUA.js';import {c}from'./chunk-JIXHEBGK.js';import {a as a$2,g as g$1,h,d as d$1,f}from'./chunk-UIKLE3WD.js';import {c as c$1,d,e}from'./chunk-HMQ5BHP2.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
+ `).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
+ `)}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
+ \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
6
+ `)),console.log(t.white(" \u{1F4C1} Project: ")+t.cyan(i)+(s.projectType?t.gray(` (${s.projectType} detected)`):"")),s.discipline&&console.log(t.white(" \u{1F3AF} Discipline: ")+t.cyan(s.discipline)+(s.stack?t.gray(` \u2192 stack: ${s.stack}`):"")),console.log(""),s.hasExisting){console.log(t.white(` \u{1F4C4} Found existing IDE instructions:
7
+ `));for(let e of s.ides)if(e.legacy&&console.log(t.green(" \u2713 ")+t.white(e.legacy.path)+t.gray(` (${e.legacy.lines} lines)`)),e.modern)for(let n of e.modern)console.log(t.green(" \u2713 ")+t.white(n.path)+t.gray(` (${n.lines} lines)`));console.log(""),console.log(t.gray(` Total: ${s.totalLines} lines of existing instructions`));}else console.log(t.gray(" \u{1F4C4} No existing IDE instructions found"));console.log(""),console.log(t.gray(" \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")),console.log("");}function B(s,i){let n={cursor:".cursor/rules/",copilot:".github/instructions/",windsurf:".windsurfrules",claude:"CLAUDE.md"}[s]||".cursor/rules/";console.log(t.blue(`
8
+ \u2728 Paradigm initialized!
9
+ `)),console.log(t.white(" Created:")),console.log(t.gray(" \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")),console.log(t.white(" \u{1F4C1} .paradigm/")),console.log(t.gray(" \u251C\u2500\u2500 config.yaml Configuration")),console.log(t.gray(" \u251C\u2500\u2500 specs/ Logger, symbols, context")),console.log(t.gray(" \u2514\u2500\u2500 docs/ Patterns, troubleshooting")),console.log(t.white(" \u{1F4C4} .premise Project overview")),console.log(t.white(" \u{1F4C4} .purpose Feature context")),console.log(t.white(` \u{1F4C4} ${n.padEnd(20)} IDE instructions`)),console.log(""),console.log(t.gray(" Reference content (prompts, commands, etc.) available via MCP")),i.hasExisting&&(console.log(""),console.log(t.yellow(" \u26A0 Your existing IDE files were preserved.")),console.log(t.gray(" Run `paradigm init --migrate` to get a migration prompt."))),console.log(""),console.log(t.white(" Next steps:")),console.log(t.gray(" \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")),console.log(t.white(" 1. ")+t.gray("Review ")+t.cyan(".paradigm/config.yaml")),console.log(t.white(" 2. ")+t.gray("Edit ")+t.cyan(".purpose")+t.gray(" to define your features")),console.log(t.white(" 3. ")+t.gray("Run ")+t.cyan("paradigm beacon")+t.gray(" to generate AI context")),console.log(t.white(" 4. ")+t.gray("Run ")+t.cyan("paradigm doctor")+t.gray(" to verify setup")),console.log(t.white(" 5. ")+t.gray("Run ")+t.cyan("paradigm visualize")+t.gray(" to see your project")),console.log("");}async function ne(s){let i=process.cwd(),e$1=s.name||a.basename(i),n=U(),d$1=a$1.command("init").start("Initializing Paradigm",{project:e$1,quick:!!s.quick}),r=_(i);if(a$1.operation("detect-ide").debug("IDE detection complete",{hasExisting:r.hasExisting}),s.migrate){if(!r.hasExisting){console.log(t.yellow(`
10
+ No existing IDE instruction files found.
11
+ `)),console.log(t.gray(" Run `paradigm init` to create a fresh setup.\n"));return}console.log(t.blue(`
12
+ Migration Prompt
13
+ `)),console.log(t.gray(` Copy the following prompt to an AI agent:
14
+ `)),console.log(t.gray(` \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
15
+ `)),console.log(O(r,e$1)),console.log(t.gray(`
16
+ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
17
+ `));return}if(s.dryRun){L(r,e$1),console.log(t.white(" Would create (dry run):")),console.log(t.gray(" \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")),console.log(t.cyan(" \u{1F4C1} .paradigm/")),console.log(t.cyan(" \u251C\u2500\u2500 config.yaml")),console.log(t.cyan(" \u251C\u2500\u2500 specs/")),console.log(t.cyan(" \u2514\u2500\u2500 docs/")),console.log(t.cyan(" \u{1F4C4} .premise")),console.log(t.cyan(" \u{1F4C4} .purpose")),console.log(t.cyan(" \u{1F4C1} .cursor/rules/*.mdc")),console.log(""),console.log(t.gray(" Reference content (prompts, commands, etc.) served via MCP")),console.log(t.gray(` Run without --dry-run to create these files.
18
+ `));return}s.quick||(L(r,e$1),r.hasExisting&&!s.force&&(console.log(t.white(` What would you like to do?
19
+ `)),console.log(t.cyan(" paradigm init --migrate")),console.log(t.gray(` Get an AI-ready prompt to convert your existing rules
20
+ `)),console.log(t.cyan(" paradigm init --force")),console.log(t.gray(` Create .paradigm/ alongside existing files
21
+ `)),console.log(t.cyan(" paradigm init --dry-run")),console.log(t.gray(` Preview what would be created
22
+ `))));let u=G(),l=a.join(i,".paradigm");if(o.existsSync(l)){let g=o.statSync(l);if(g.isFile()){if(!s.force){console.log(t.yellow(" \u26A0 Legacy .paradigm file found.")),console.log(t.gray(" Run `paradigm upgrade --all` to migrate.\n"));return}o.unlinkSync(l);}else if(g.isDirectory()&&!s.force){console.log(t.yellow(` \u26A0 .paradigm/ already exists (use --force to overwrite)
23
+ `));return}}n.start("Creating .paradigm/ directory...");try{o.existsSync(l)||o.mkdirSync(l,{recursive:!0}),o.existsSync(u)?(M(u,l,e$1),o.existsSync(a.join(l,"fixtures.yaml"))||N(l),V(l,i,s.stack),n.succeed(t.green(".paradigm/ created"))):(n.warn(t.yellow("Templates not found, creating minimal structure")),Y(l,e$1));}catch(g){n.fail(t.red(`Failed: ${g.message}`));return}let f=a.join(i,".premise");(!o.existsSync(f)||s.force)&&(n.start("Creating .premise..."),o.writeFileSync(f,g(e$1)),n.succeed(t.green(".premise created")));let h=a.join(i,".purpose");(!o.existsSync(h)||s.force)&&(n.start("Creating .purpose..."),o.writeFileSync(h,c()),n.succeed(t.green(".purpose created")));let b$1=a.join(i,"portal.yaml");o.existsSync(b$1)||(console.log(t.gray(" \u25CB No portal.yaml (optional - create manually if you need gate/auth definitions)")),console.log(t.gray(" See: https://github.com/a-company/paradigm/blob/main/docs/guides/portals.md")));let p;s.ide?p=["cursor","copilot","windsurf","claude"].includes(s.ide.toLowerCase())?s.ide.toLowerCase():"cursor":(n.start("Detecting IDE..."),p=c$1(i).detected||"cursor",n.succeed(`Using ${t.cyan(p)}`));let y=d(i);if(y){n.start("Generating IDE instructions...");let g=e(i,p,y,true);g.success?n.succeed(t.green(g.message||"IDE instructions generated")):n.warn(t.yellow(g.message));}if(!s.quick){n.start("Creating scan index for MCP tools...");try{await b(i,{quiet:!0}),n.succeed(t.green("Scan index created"));}catch(g){n.warn(t.yellow("Could not create scan index: "+g.message)),console.log(t.gray(" Run `paradigm scan` manually after adding .purpose files"));}}B(p,r),d$1.success("Paradigm initialized",{project:e$1,ide:p});}function V(s,i,e){let n=a.join(s,"config.yaml");if(!o.existsSync(n))return;let d=a$2(i);if(d==="auto")return;let r=o.readFileSync(n,"utf8");r=r.replace(/^discipline:\s*auto\b.*$/m,`discipline: ${d}`);let u=e||g$1(i),l=u?h(u):d$1(d);if(!l){let y=function(){let g=Object.entries(p.symbolMapping).map(([m,x])=>` "${m}": "${x}"`).join(`
24
+ `);r=r.replace(/ symbol-mapping:\n(?:(?: .*| *)\n)*/,` symbol-mapping:
25
+ ${g}
26
+ `);let c=p.purposeRequired.map(m=>` - pattern: "${m.pattern}"
27
+ depth: ${m.depth}`).join(`
28
+ `);r=r.replace(/purpose-required:\n(?: - pattern:.*\n depth:.*\n)*/,`purpose-required:
29
+ ${c}
30
+ `),o.writeFileSync(n,r,"utf8");};let p=d$1(d);y();return}u&&(r=r.replace(/^(discipline:\s*.+)$/m,`$1
31
+ stack: ${u}`));let f=Object.entries(l.symbolMapping).map(([p,y])=>` "${p}": "${y}"`).join(`
32
+ `);r=r.replace(/ symbol-mapping:\n(?:(?: .*| *)\n)*/,` symbol-mapping:
33
+ ${f}
34
+ `);let h$1=l.purposeRequired.map(p=>` - pattern: "${p.pattern}"
35
+ depth: ${p.depth}`).join(`
36
+ `);r=r.replace(/purpose-required:\n(?: - pattern:.*\n depth:.*\n)*/,`purpose-required:
37
+ ${h$1}
38
+ `),o.writeFileSync(n,r,"utf8");}function Y(s,i){o.mkdirSync(a.join(s,"specs"),{recursive:true}),o.mkdirSync(a.join(s,"docs"),{recursive:true}),o.mkdirSync(a.join(s,"tasks"),{recursive:true}),o.mkdirSync(a.join(s,"lore"),{recursive:true});let e=`# Paradigm Configuration
39
+ version: "1.0"
40
+ project: "${i}"
41
+
42
+ agent-guidelines:
43
+ overview: |
44
+ This project uses Paradigm for structured AI-assisted development.
45
+ All context, symbols, and specifications live in the .paradigm/ directory.
46
+ how-to-use:
47
+ - "Check .paradigm/specs/ for philosophy and patterns before making changes"
48
+ - "Reference symbols using prefixes: #component ^gate !signal $flow ~aspect"
49
+ - "Use the Paradigm logger instead of raw console.log/print statements"
50
+ - "Check .paradigm/docs/ for command reference and troubleshooting"
51
+ update-rules:
52
+ - "When adding a feature, create/update the nearest .purpose file"
53
+ - "When adding authorization, update portal.yaml"
54
+ - "Always update references when renaming symbols"
55
+
56
+ symbol-system:
57
+ "#":
58
+ name: Component
59
+ description: Any documented code unit (feature, service, module, integration)
60
+ examples: ["#checkout", "#login-handler", "#Button", "#stripe-client"]
61
+ "$":
62
+ name: Flow
63
+ description: Multi-step processes or user journeys
64
+ examples: ["$checkout-flow", "$onboarding", "$auth-flow"]
65
+ "^":
66
+ name: Gate
67
+ description: Access control points and authorization rules
68
+ examples: ["^authenticated", "^admin-only", "^rate-limited"]
69
+ "!":
70
+ name: Signal
71
+ description: Events emitted for side effects
72
+ examples: ["!login-success", "!payment-failed", "!rate-limited"]
73
+ "~":
74
+ name: Aspect
75
+ description: Cross-cutting rules with required code anchors
76
+ examples: ["~audit-required", "~rate-limited", "~cached"]
77
+
78
+ logging:
79
+ enforce: true
80
+ default-level: debug
81
+
82
+ conventions:
83
+ - "Use kebab-case for all symbol IDs (feature-name, not featureName)"
84
+ - "Document flows when logic spans 3+ components"
85
+ - "Reference related items using symbol prefixes (# $ ^ ! ~)"
86
+ - "Update .purpose files when changing feature behavior"
87
+ - "ALWAYS use Paradigm logger, NEVER raw console.log/print"
88
+ `;o.writeFileSync(a.join(s,"config.yaml"),e,"utf8"),N(s);}function N(s){o.writeFileSync(a.join(s,"fixtures.yaml"),`# Test Fixtures for Flow Validation
89
+ # Use with paradigm_test_fixtures MCP tool
90
+ version: "1.0"
91
+
92
+ # User fixtures for authentication testing
93
+ users:
94
+ admin:
95
+ id: "user-admin"
96
+ email: "admin@test.com"
97
+ role: "admin"
98
+ token: "Bearer test-admin-token"
99
+ member:
100
+ id: "user-member"
101
+ email: "member@test.com"
102
+ role: "member"
103
+ token: "Bearer test-member-token"
104
+ outsider:
105
+ id: "user-outsider"
106
+ email: "outsider@test.com"
107
+ token: "Bearer test-outsider-token"
108
+
109
+ # Resource fixtures for entity testing
110
+ resources:
111
+ project:
112
+ id: "project-1"
113
+ name: "Test Project"
114
+ members: ["user-member"]
115
+ admins: ["user-admin"]
116
+ task:
117
+ id: "task-1"
118
+ projectId: "project-1"
119
+ title: "Sample Task"
120
+ assignees: ["user-member"]
121
+
122
+ # Payload fixtures for API testing
123
+ payloads:
124
+ createProject:
125
+ name: "New Project"
126
+ description: "Test project description"
127
+ createTask:
128
+ title: "New Task"
129
+ description: "Task description"
130
+ assignees: []
131
+ updateTask:
132
+ title: "Updated Task"
133
+ status: "in-progress"
134
+ `,"utf8");}export{ne as a};
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ import {a}from'./chunk-NKYNHSA5.js';import {v4}from'uuid';import*as c from'path';import*as f from'fs';import {fileURLToPath}from'url';var S={url:"http://localhost:3838",batchSize:50,flushIntervalMs:5e3,maxBufferSize:1e3,maxRetries:3,retryBackoffMs:1e3},I=class{url;service;version;environment;token;batchSize;maxBufferSize;maxRetries;retryBackoffMs;onDrop;onError;sessionId;logBuffer=[];metricsBuffer=[];flushTimer=null;closed=false;beforeUnloadHandler=null;constructor(e){this.url=(e.url??S.url).replace(/\/+$/,""),this.service=e.service,this.version=e.version,this.environment=e.environment,this.token=e.token,this.batchSize=e.batchSize??S.batchSize,this.maxBufferSize=e.maxBufferSize??S.maxBufferSize,this.maxRetries=e.maxRetries??S.maxRetries,this.retryBackoffMs=e.retryBackoffMs??S.retryBackoffMs,this.onDrop=e.onDrop,this.onError=e.onError,this.sessionId=v4();let t=e.flushIntervalMs??S.flushIntervalMs;this.flushTimer=setInterval(()=>{this.flush().catch(r=>{this.handleError(r);});},t),this.flushTimer&&typeof this.flushTimer=="object"&&"unref"in this.flushTimer&&this.flushTimer.unref(),typeof globalThis<"u"&&typeof globalThis.addEventListener=="function"&&(this.beforeUnloadHandler=()=>{this.flushSync();},globalThis.addEventListener("beforeunload",this.beforeUnloadHandler)),this.registerService();}debug(e,t,r){this.log("debug",e,t,r);}info(e,t,r){this.log("info",e,t,r);}warn(e,t,r){this.log("warn",e,t,r);}error(e,t,r){this.log("error",e,t,r);}log(e,t,r,s){if(this.closed)return;let i={level:e,symbol:t,message:r,service:this.service,sessionId:this.sessionId,environment:this.environment,data:s};this.pushToLogBuffer(i);}counter(e,t,r){this.metric({name:e,type:"counter",value:t??1,tags:r});}gauge(e,t,r){this.metric({name:e,type:"gauge",value:t,tags:r});}histogram(e,t,r){this.metric({name:e,type:"histogram",value:t,tags:r});}metric(e){if(this.closed)return;let t={...e,service:this.service,environment:this.environment};this.pushToMetricsBuffer(t);}async pushState(e,t,r){this.closed||await this.post("/api/state",{service:this.service,sessionId:this.sessionId,state:e,activeFlows:t,activeGates:r});}startSpan(e,t,r){let s=r?r.split("-")[0]||v4():v4(),i=v4(),n=new Date().toISOString(),o=Date.now(),a=this;return {traceId:s,spanId:i,async end(l="ok"){let u=new Date().toISOString(),h=Date.now()-o,p={traceId:s,spanId:i,parentSpanId:r,service:a.service,symbol:e,operation:t,startTime:n,endTime:u,durationMs:h,status:l};await a.post("/api/traces",p);}}}async flush(){let e=this.drainLogBuffer(),t=this.drainMetricsBuffer(),r=[];e.length>0&&r.push(this.sendLogs(e)),t.length>0&&r.push(this.sendMetrics(t)),await Promise.allSettled(r);}async close(){if(!this.closed){this.closed=true,this.flushTimer!==null&&(clearInterval(this.flushTimer),this.flushTimer=null),this.beforeUnloadHandler&&typeof globalThis<"u"&&typeof globalThis.removeEventListener=="function"&&(globalThis.removeEventListener("beforeunload",this.beforeUnloadHandler),this.beforeUnloadHandler=null);try{await this.flush();}catch{}}}getSessionId(){return this.sessionId}flushSync(){let e=this.drainLogBuffer(),t=this.drainMetricsBuffer(),r=typeof navigator<"u"&&typeof navigator.sendBeacon=="function"?navigator.sendBeacon.bind(navigator):void 0;r&&(e.length>0&&r(`${this.url}/api/logs`,JSON.stringify({entries:e})),t.length>0&&r(`${this.url}/api/metrics`,JSON.stringify({entries:t})));}registerService(){let e={name:this.service,version:this.version,pid:typeof process<"u"?process.pid:void 0,environment:this.environment};this.post("/api/services",e).catch(()=>{});}pushToLogBuffer(e){if(this.logBuffer.length>=this.maxBufferSize){let t=Math.max(1,Math.floor(this.maxBufferSize*.1));this.logBuffer.splice(0,t),this.onDrop&&this.onDrop(t);}this.logBuffer.push(e),this.logBuffer.length>=this.batchSize&&this.flush().catch(t=>{this.handleError(t);});}pushToMetricsBuffer(e){if(this.metricsBuffer.length>=this.maxBufferSize){let t=Math.max(1,Math.floor(this.maxBufferSize*.1));this.metricsBuffer.splice(0,t),this.onDrop&&this.onDrop(t);}this.metricsBuffer.push(e),this.metricsBuffer.length>=this.batchSize&&this.flush().catch(t=>{this.handleError(t);});}drainLogBuffer(){let e=this.logBuffer;return this.logBuffer=[],e}drainMetricsBuffer(){let e=this.metricsBuffer;return this.metricsBuffer=[],e}async sendLogs(e){try{await this.post("/api/logs",{entries:e});}catch(t){let r=this.maxBufferSize-this.logBuffer.length;if(r>0){let s=e.slice(0,r);this.logBuffer.unshift(...s);let i=e.length-s.length;i>0&&this.onDrop&&this.onDrop(i);}else this.onDrop&&this.onDrop(e.length);throw t}}async sendMetrics(e){try{await this.post("/api/metrics",{entries:e});}catch(t){let r=this.maxBufferSize-this.metricsBuffer.length;if(r>0){let s=e.slice(0,r);this.metricsBuffer.unshift(...s);let i=e.length-s.length;i>0&&this.onDrop&&this.onDrop(i);}else this.onDrop&&this.onDrop(e.length);throw t}}async post(e,t){let r=this.getFetch();if(!r)return;let s=`${this.url}${e}`,i={"Content-Type":"application/json"};this.token&&(i.Authorization=`Bearer ${this.token}`);let n;for(let o=0;o<=this.maxRetries;o++)try{let a=await r(s,{method:"POST",headers:i,body:JSON.stringify(t)});if(a.status>=400&&a.status<500){let l=await a.text().catch(()=>""),u=new Error(`Sentinel server returned ${a.status}: ${l}`);this.handleError(u);return}if(a.status>=500){let l=await a.text().catch(()=>"");if(n=new Error(`Sentinel server returned ${a.status}: ${l}`),o<this.maxRetries){await this.backoff(o);continue}throw this.handleError(n),n}return (a.headers.get("content-type")||"").includes("application/json")?await a.json():void 0}catch(a){if(n=a instanceof Error?a:new Error(String(a)),o<this.maxRetries){await this.backoff(o);continue}throw this.handleError(n),n}if(n)throw n}getFetch(){if(typeof globalThis<"u"&&typeof globalThis.fetch=="function")return globalThis.fetch}backoff(e){let t=this.retryBackoffMs*Math.pow(2,e),r=Math.floor(Math.random()*t*.25);return new Promise(s=>setTimeout(s,t+r))}handleError(e){if(this.onError){let t=e instanceof Error?e:new Error(String(e));this.onError(t);}}};function R(e){return new I(e)}var T=class{client;constructor(e){this.client=e;}send(e){this.client.log(e.level,e.symbol,e.message,{...e.data,symbolType:e.symbolType,correlationId:e.correlationId});}};function $(e){let t=e instanceof I?e:new I(e);return new T(t)}function B(e,t){let r=$(t);return e.addTransport(r),r}var j={minScore:30,maxResults:5,boostConfidence:true},k=class{constructor(e){this.storage=e;}match(e,t={}){let{minScore:r,maxResults:s,boostConfidence:i}={...j,...t},n=this.storage.getAllPatterns({includePrivate:true}),o=[];for(let a of n){if(!this.matchEnvironment(a,e))continue;let{score:l,matchedCriteria:u}=this.scoreMatch(a,e);if(l>=r){let h=l;if(i){let p=a.confidence.score/100;h=l*(.5+.5*p);}o.push({pattern:a,score:l,matchedCriteria:u,confidence:Math.round(h)}),this.storage.updatePatternConfidence(a.id,"matched");}}return o.sort((a,l)=>l.confidence-a.confidence).slice(0,s)}testPattern(e,t=100){let r=this.storage.getRecentIncidents({limit:t}),s=[],i=0;for(let n of r){if(!this.matchEnvironment(e,n))continue;let{score:o}=this.scoreMatch(e,n);o>=30&&(s.push(n),i+=o);}return {wouldMatch:s,matchCount:s.length,avgScore:s.length>0?Math.round(i/s.length):0}}scoreMatch(e,t){let r=0,s={symbols:[],errorKeywords:[],missingSignals:[]},i=this.matchSymbols(e.pattern.symbols,t.symbols,s.symbols);r+=Math.min(i,50);let n=this.matchErrorText(e,t,s.errorKeywords);r+=Math.min(n,25);let o=this.matchMissingSignals(e,t,s.missingSignals);return r+=Math.min(o,25),r=Math.min(r,100),{score:r,matchedCriteria:s}}matchSymbols(e,t,r){let s=0,i=["feature","component","flow","gate","signal","state","integration"];for(let n of i){let o=e[n],a=t[n];if(!(!o||!a)){if(typeof o=="string")this.matchSingleSymbol(o,a)&&(s+=o.includes("*")?5:10,r.push(n));else if(Array.isArray(o)){for(let l of o)if(this.matchSingleSymbol(l,a)){s+=7,r.push(n);break}}}}return s}matchSingleSymbol(e,t){if(e==="*")return true;if(e.endsWith("*")){let r=e.slice(0,-1);return t.startsWith(r)}if(e.startsWith("*")){let r=e.slice(1);return t.endsWith(r)}return e.includes("*")?new RegExp("^"+e.replace(/\*/g,".*")+"$").test(t):e===t}matchErrorText(e,t,r){let s=0,i=t.error.message.toLowerCase(),n=t.error.type?.toLowerCase();if(e.pattern.errorContains)for(let o of e.pattern.errorContains)i.includes(o.toLowerCase())&&(s+=5,r.push(o));if(e.pattern.errorMatches)try{new RegExp(e.pattern.errorMatches,"i").test(t.error.message)&&(s+=10,r.push(`regex:${e.pattern.errorMatches}`));}catch{}if(e.pattern.errorType&&n)for(let o of e.pattern.errorType)n.includes(o.toLowerCase())&&(s+=5,r.push(`type:${o}`));return s}matchMissingSignals(e,t,r){if(!e.pattern.missingSignals||!t.flowPosition?.missing)return 0;let s=0;for(let i of e.pattern.missingSignals)for(let n of t.flowPosition.missing)if(this.matchSingleSymbol(i,n)){s+=12,r.push(n);break}return s}matchEnvironment(e,t){return !e.pattern.environment||e.pattern.environment.length===0?true:e.pattern.environment.includes(t.environment)}},F=fileURLToPath(import.meta.url),E=c.dirname(F);function L(){let e=c.join(E,"universal-patterns.json"),t=f.readFileSync(e,"utf-8");return JSON.parse(t)}function O(){let e=c.join(E,"paradigm-patterns.json"),t=f.readFileSync(e,"utf-8");return JSON.parse(t)}function z(){let e=L(),t=O();return {version:"1.0.0",exportedAt:new Date().toISOString(),patterns:[...e.patterns,...t.patterns]}}function v(e,t){return e.startsWith(t)?e:`${t}${e}`}var H=class{flowId;sentinel;actual=[];expected=[];completed=false;constructor(e,t){this.flowId=v(e,"$"),this.sentinel=t;}expect(...e){return this.expected.push(...e),this}step(e){return this.actual.push(e),this}gate(e,t){let r=v(e,"^");return this.actual.push(r),t||this.fail(new Error(`Gate ${r} failed`)),this}signal(e,t){return this.actual.push(v(e,"!")),this}complete(){this.completed=true;}fail(e){if(this.completed)return;this.completed=true;let t=this.expected.filter(i=>!this.actual.includes(i)),r=this.actual.length>0?this.actual[this.actual.length-1]:void 0,s={flowId:this.flowId,expected:this.expected,actual:this.actual,missing:t,failedAt:r};this.sentinel.capture(e,{flow:this.flowId},s);}},oe=class{storage;matcher;config;ready=false;readyPromise=null;seeded=false;constructor(e){this.config=e,this.storage=new a(e.dbPath),this.matcher=new k(this.storage);}async init(){if(!this.ready)return this.readyPromise?this.readyPromise:(this.readyPromise=this.doInit(),this.readyPromise)}async doInit(){if(await this.storage.ensureReady(),!this.seeded){try{let{patterns:e}=z();for(let t of e)try{this.storage.addPattern(t);}catch{}}catch{}this.seeded=true;}this.ready=true;}ensureReady(){this.ready||this.readyPromise||(this.readyPromise=this.doInit());}component(e){let t=v(e,"#"),r=this;return {id:t,capture(s,i){return r.capture(s,{component:t,...i})},wrap(s){return((...i)=>{try{let n=s(...i);return n&&typeof n.catch=="function"?n.catch(o=>{throw r.capture(o,{component:t}),o}):n}catch(n){throw n instanceof Error&&r.capture(n,{component:t}),n}})}}}gate(e,t){if(!t){let r=v(e,"^");this.capture(new Error(`Gate ${r} failed`),{gate:r});}}signal(e,t){v(e,"!");}flow(e){return new H(e,this)}capture(e,t,r){this.ensureReady();let s={error:{message:e.message,stack:e.stack,type:e.constructor.name!=="Error"?e.constructor.name:void 0},symbols:t||{},environment:this.config.environment||"development",service:this.config.service,version:this.config.version,flowPosition:r},i=this.storage.recordIncident(s),n=this.storage.getIncident(i);return n&&this.config.onCapture&&this.config.onCapture(n),i}match(e){let t=this.storage.getIncident(e);return t?this.matcher.match(t):[]}express(){let e=this;return (t,r,s,i)=>{let n={},o=(r.path||r.url||"").split("/").filter(Boolean);o.length>=2&&(n.component=`#${o[1]}`);let a=e.capture(t,n);s.setHeader&&s.setHeader("X-Sentinel-Incident",a),i(t);}}close(){this.storage.close(),this.ready=false,this.readyPromise=null;}getStorage(){return this.storage}getMatcher(){return this.matcher}},G=[{dirs:["services","src/services"],prefix:"#",type:"components"},{dirs:["routes","src/routes","api","src/api"],prefix:"#",type:"components"},{dirs:["handlers","src/handlers"],prefix:"#",type:"components"},{dirs:["controllers","src/controllers"],prefix:"#",type:"components"},{dirs:["components","src/components"],prefix:"#",type:"components"},{dirs:["lib","src/lib"],prefix:"#",type:"components"},{dirs:["middleware","src/middleware"],prefix:"^",type:"gates"},{dirs:["guards","src/guards"],prefix:"^",type:"gates"},{dirs:["auth","src/auth"],prefix:"^",type:"gates"},{dirs:["events","src/events"],prefix:"!",type:"signals"},{dirs:["listeners","src/listeners"],prefix:"!",type:"signals"},{dirs:["flows","src/flows"],prefix:"$",type:"flows"},{dirs:["workflows","src/workflows"],prefix:"$",type:"flows"},{dirs:["pipelines","src/pipelines"],prefix:"$",type:"flows"}],C=new Set([".ts",".js",".tsx",".jsx",".mjs",".mts"]);function W(e){let t={components:[],gates:[],flows:[],signals:[],routes:{}},r=U(e);r&&(t.components.push(...r.components),t.gates.push(...r.gates),t.flows.push(...r.flows),t.signals.push(...r.signals));for(let s of G)for(let i of s.dirs){let n=c.join(e,i);if(!f.existsSync(n))continue;let o=P(n);for(let a of o){let l=c.extname(a);if(!C.has(l))continue;let u=c.basename(a,l);if(u==="index"||u.endsWith(".test")||u.endsWith(".spec"))continue;let h=`${s.prefix}${M(u)}`;t[s.type].includes(h)||t[s.type].push(h);}}return _(e,t),t}function ae(e){let t=W(e);return {version:"1.0",project:c.basename(e),symbols:{components:t.components.length>0?t.components:void 0,gates:t.gates.length>0?t.gates:void 0,flows:t.flows.length>0?t.flows:void 0,signals:t.signals.length>0?t.signals:void 0},routes:Object.keys(t.routes).length>0?t.routes:void 0}}function U(e){let t=c.join(e,".paradigm");if(!f.existsSync(t))return null;let r={components:[],gates:[],flows:[],signals:[],routes:{}},s=D(e,".purpose");for(let i of s)try{let n=f.readFileSync(i,"utf-8");N(n,r);}catch{}return r.components.length>0||r.gates.length>0||r.flows.length>0||r.signals.length>0?r:null}function N(e,t){let r=e.split(`
3
+ `),s="";for(let i of r){let n=i.trim();if(n==="components:"||n==="features:"){s="components";continue}if(n==="gates:"){s="gates";continue}if(n==="flows:"){s="flows";continue}if(n==="signals:"){s="signals";continue}if(s&&/^\s{2}\S/.test(i)){let o=n.match(/^([a-zA-Z][\w-]*):$/);if(o){let a=`${{components:"#",gates:"^",flows:"$",signals:"!"}[s]||"#"}${o[1]}`;t[s]?.includes(a)||t[s]?.push(a);}}n&&!i.startsWith(" ")&&!n.endsWith(":")&&(s="");}}function _(e,t){let r=["routes","src/routes","api","src/api"];for(let s of r){let i=c.join(e,s);if(!f.existsSync(i))continue;let n=P(i);for(let o of n){let a=c.extname(o);if(!C.has(a))continue;let l=c.basename(o,a);if(l==="index")continue;let u=`/api/${M(l)}`,h=`#${M(l)}`;t.routes[u]=h;}}}function M(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").replace(/[_\s]+/g,"-").replace(/\..*$/,"").toLowerCase()}function P(e){try{return f.readdirSync(e).filter(t=>{let r=c.join(e,t);try{return f.statSync(r).isFile()}catch{return !1}})}catch{return []}}function D(e,t,r=4,s=0){if(s>r)return [];let i=[],n=new Set(["node_modules","dist",".git","coverage",".next",".nuxt"]);try{let o=f.readdirSync(e,{withFileTypes:!0});for(let a of o)a.isFile()&&a.name===t?i.push(c.join(e,a.name)):a.isDirectory()&&!n.has(a.name)&&i.push(...D(c.join(e,a.name),t,r,s+1));}catch{}return i}var le=class{constructor(e,t){this.storage=e,this.similarityThreshold=t?.similarityThreshold??.6,this.decayHalfLifeDays=t?.decayHalfLifeDays??14,this.useStackFingerprint=t?.useStackFingerprint??true;}similarityThreshold;decayHalfLifeDays;useStackFingerprint;group(e){let t=this.storage.getGroups({limit:100});for(let s of t)if(this.shouldJoinGroup(e,s))return this.storage.addToGroup(s.id,e.id),s.id;let r=this.findSimilar(e,10);if(r.length>=1){let s=this.extractCommonSymbols([e,...r]),i=this.extractCommonErrorPatterns([e,...r]);return this.storage.createGroup({incidents:[e.id,...r.map(n=>n.id)],commonSymbols:s,commonErrorPatterns:i,firstSeen:this.getEarliestTimestamp([e,...r]),lastSeen:e.timestamp,environments:this.getUniqueEnvironments([e,...r])})}return null}findSimilar(e,t=10){let r=this.storage.getRecentIncidents({limit:500,status:"all"}),s=[];for(let i of r){if(i.id===e.id)continue;let n=this.calculateSimilarity(e,i);n>=this.similarityThreshold&&s.push({incident:i,score:n});}return s.sort((i,n)=>n.score-i.score).slice(0,t).map(i=>i.incident)}analyzeAndGroup(e={}){let t=e.minSize||3,r=this.storage.getRecentIncidents({limit:1e3}).filter(n=>!n.groupId),s=[],i=new Set;for(let n of r){if(i.has(n.id))continue;let o=r.filter(a=>a.id!==n.id&&!i.has(a.id)&&this.calculateSimilarity(n,a)>=this.similarityThreshold);if(o.length+1>=t){let a=[n,...o],l=this.extractCommonSymbols(a),u=this.extractCommonErrorPatterns(a),h=this.storage.createGroup({incidents:a.map(m=>m.id),commonSymbols:l,commonErrorPatterns:u,firstSeen:this.getEarliestTimestamp(a),lastSeen:this.getLatestTimestamp(a),environments:this.getUniqueEnvironments(a)});for(let m of a)i.add(m.id);let p=this.storage.getGroup(h);p&&s.push(p);}}return s}calculateSimilarity(e,t){let r=0,s=0,i=this.useStackFingerprint&&e.error.stack&&t.error.stack,n=i?.45:.6,o=i?.25:.3,a=.1,l=i?.2:0,u=["feature","component","flow","gate","signal","state","integration"];for(let g of u){let y=e.symbols[g],b=t.symbols[g];(y||b)&&(s+=n/u.length,y===b&&(r+=n/u.length));}let h=this.stringSimilarity(e.error.message,t.error.message);if(r+=o*h,s+=o,e.environment===t.environment&&(r+=a),s+=a,i){let g=this.fingerprintStack(e.error.stack),y=this.fingerprintStack(t.error.stack),b=this.compareFingerprints(g,y);r+=l*b,s+=l;}let p=s>0?r/s:0,m=Math.abs(new Date(e.timestamp).getTime()-new Date(t.timestamp).getTime())/(1e3*60*60*24),d=Math.pow(.5,m/this.decayHalfLifeDays);return p*d}fingerprintStack(e){return e.split(`
4
+ `).filter(t=>t.trim().startsWith("at ")).slice(0,10).map(t=>t.trim().replace(/:\d+:\d+\)?$/,"").replace(/\(.*[/\\]/,"(").replace(/^\s*at\s+/,""))}compareFingerprints(e,t){if(e.length===0&&t.length===0)return 1;if(e.length===0||t.length===0)return 0;let r=0,s=Math.max(e.length,t.length);for(let i=0;i<Math.min(e.length,t.length);i++)e[i]===t[i]&&r++;return r/s}stringSimilarity(e,t){let r=Math.max(e.length,t.length);return r===0?1:1-this.levenshteinDistance(e.toLowerCase(),t.toLowerCase())/r}levenshteinDistance(e,t){if(e.length===0)return t.length;if(t.length===0)return e.length;let r=[];for(let s=0;s<=t.length;s++)r[s]=[s];for(let s=0;s<=e.length;s++)r[0][s]=s;for(let s=1;s<=t.length;s++)for(let i=1;i<=e.length;i++){let n=e[i-1]===t[s-1]?0:1;r[s][i]=Math.min(r[s-1][i]+1,r[s][i-1]+1,r[s-1][i-1]+n);}return r[t.length][e.length]}shouldJoinGroup(e,t){let r=0,s=0;for(let[a,l]of Object.entries(t.commonSymbols))l&&(s++,e.symbols[a]===l&&r++);if(s===0)return false;let i=r/s,n=e.error.message.toLowerCase(),o=t.commonErrorPatterns.some(a=>n.includes(a.toLowerCase()));return i>=.5||o}extractCommonSymbols(e){if(e.length===0)return {};let t=e[0].symbols,r={};for(let[s,i]of Object.entries(t))i&&e.every(n=>n.symbols[s]===i)&&(r[s]=i);return r}extractCommonErrorPatterns(e){if(e.length===0)return [];let t=new Map,r=new Set(["the","a","an","is","are","was","were","in","on","at","to","for","of","with","error","failed","cannot"]);for(let i of e){let n=i.error.message.toLowerCase().replace(/[^a-z0-9\s]/g," ").split(/\s+/).filter(a=>a.length>2&&!r.has(a)),o=new Set(n);for(let a of o)t.set(a,(t.get(a)||0)+1);}let s=Math.ceil(e.length*.6);return Array.from(t.entries()).filter(([,i])=>i>=s).map(([i])=>i).slice(0,5)}getEarliestTimestamp(e){return e.reduce((t,r)=>r.timestamp<t?r.timestamp:t,e[0].timestamp)}getLatestTimestamp(e){return e.reduce((t,r)=>r.timestamp>t?r.timestamp:t,e[0].timestamp)}getUniqueEnvironments(e){return [...new Set(e.map(t=>t.environment))]}},ue=class{build(e){if(!e.flowPosition)return null;let t=[],r=new Date(e.timestamp).getTime();t.push({timestamp:new Date(r-5e3).toISOString(),symbol:e.flowPosition.flowId,type:"flow-started"});let s=1e3;for(let n of e.flowPosition.actual){let o=this.inferEventType(n);t.push({timestamp:new Date(r-4e3+s).toISOString(),symbol:n,type:o}),s+=Math.random()*1e3+500;}let i=e.flowPosition.failedAt||e.flowPosition.missing[0]||e.symbols.gate||e.symbols.signal||"unknown";return t.push({timestamp:e.timestamp,symbol:i,type:"error",data:{message:e.error.message,missing:e.flowPosition.missing}}),{incidentId:e.id,flowId:e.flowPosition.flowId,events:t,failure:{at:e.timestamp,symbol:i,reason:e.error.message}}}renderAscii(e){let t=[];t.push(`${e.flowId} Timeline`),t.push("\u2550".repeat(40)),t.push("");for(let s of e.events){let i=this.formatTime(s.timestamp),n=this.getEventIcon(s.type),o=this.getEventStatus(s.type),a=`${i} ${n} ${s.symbol}`;o&&(a+=` (${o})`),t.push(a),s.type==="error"&&s.data&&(t.push(` \u2514\u2500 ${s.data.message}`),s.data.missing&&Array.isArray(s.data.missing)&&s.data.missing.length>0&&t.push(` \u2514\u2500 Expected: ${s.data.missing.join(", ")}`));}let r=e.events.find(s=>s.type==="error")?.data?.missing;return r&&r.length>0&&(t.push(""),t.push(`Missing signals: ${r.join(", ")}`)),t.join(`
5
+ `)}renderStructured(e){return {incidentId:e.incidentId,flow:{id:e.flowId,eventCount:e.events.length},events:e.events.map(t=>({time:this.formatTime(t.timestamp),symbol:t.symbol,type:t.type,status:this.getEventStatus(t.type),data:t.data})),failure:{at:this.formatTime(e.failure.at),symbol:e.failure.symbol,reason:e.failure.reason}}}inferEventType(e){return e.startsWith("^")?"gate-passed":e.startsWith("!")?"signal-emitted":e.startsWith("%")?"state-changed":"signal-emitted"}getEventIcon(e){switch(e){case "flow-started":return "\u25B6";case "flow-ended":return "\u25A0";case "gate-passed":return "\u2713";case "gate-failed":return "\u2717";case "signal-emitted":return "\u26A1";case "state-changed":return "\u25C6";case "error":return "\u2717";default:return "\u2022"}}getEventStatus(e){switch(e){case "gate-passed":return "PASSED";case "gate-failed":return "FAILED";case "signal-emitted":return "EMITTED";case "state-changed":return "CHANGED";case "error":return "ERROR";default:return ""}}formatTime(e){let t=new Date(e),r=String(t.getHours()).padStart(2,"0"),s=String(t.getMinutes()).padStart(2,"0"),i=String(t.getSeconds()).padStart(2,"0"),n=String(t.getMilliseconds()).padStart(3,"0");return `${r}:${s}:${i}.${n}`}},ce=class{constructor(e){this.storage=e;}getStats(e=7){let t=new Date().toISOString(),r=new Date(Date.now()-e*24*60*60*1e3).toISOString();return this.storage.getStats({start:r,end:t})}getSymbolHealth(e){return this.storage.getSymbolHealth(e)}getTrendingIssues(e=7){let t=Date.now(),r=e*24*60*60*1e3/2,s=new Date(t-e*24*60*60*1e3).toISOString(),i=new Date(t-r).toISOString(),n=new Date(t).toISOString(),o=this.storage.getRecentIncidents({dateFrom:s,dateTo:i,limit:1e3}),a=this.storage.getRecentIncidents({dateFrom:i,dateTo:n,limit:1e3}),l=this.countSymbols(o),u=this.countSymbols(a),h=[],p=new Set([...l.keys(),...u.keys()]);for(let m of p){let d=l.get(m)||0,g=u.get(m)||0;if(d===0&&g>0)h.push({symbol:m,trend:g*100});else if(d>0){let y=(g-d)/d*100;h.push({symbol:m,trend:y});}}return h.filter(m=>m.trend>0).sort((m,d)=>d.trend-m.trend).slice(0,10)}getResolutionMetrics(){let e=this.getStats(30);return {avgTimeToResolve:e.resolution.avgTimeToResolve,resolvedWithPattern:e.resolution.resolvedWithPattern,resolvedManually:e.resolution.resolvedManually,totalResolved:e.incidents.resolved,resolutionRate:e.resolution.resolutionRate}}getPatternEffectiveness(){return this.storage.getAllPatterns({includePrivate:true}).filter(e=>e.confidence.timesMatched>0).map(e=>({patternId:e.id,name:e.name,matches:e.confidence.timesMatched,resolutions:e.confidence.timesResolved,recurrences:e.confidence.timesRecurred,effectiveness:e.confidence.timesMatched>0?Math.round((e.confidence.timesResolved-e.confidence.timesRecurred)/e.confidence.timesMatched*100):0})).sort((e,t)=>t.effectiveness-e.effectiveness)}getIncidentsByHour(e=7){let t=new Date(Date.now()-e*24*60*60*1e3).toISOString(),r=this.storage.getRecentIncidents({dateFrom:t,limit:1e4}),s=new Map;for(let i=0;i<24;i++)s.set(i,0);for(let i of r){let n=new Date(i.timestamp).getHours();s.set(n,(s.get(n)||0)+1);}return Array.from(s.entries()).map(([i,n])=>({hour:i,count:n}))}getIncidentsByEnvironment(){let e=this.getStats(30),t=e.incidents.total;return Object.entries(e.incidents.byEnvironment).map(([r,s])=>({environment:r,count:s,percentage:t>0?Math.round(s/t*100):0})).sort((r,s)=>s.count-r.count)}getSymbolCorrelation(){let e=this.storage.getRecentIncidents({limit:1e3}),t=new Map,r=new Map;for(let i of e){let n=this.getSymbolsFromIncident(i);for(let o of n)r.set(o,(r.get(o)||0)+1);for(let o=0;o<n.length;o++)for(let a=o+1;a<n.length;a++){let l=[n[o],n[a]].sort().join("|");t.set(l,(t.get(l)||0)+1);}}let s=[];for(let[i,n]of t){let[o,a]=i.split("|"),l=r.get(o)||1,u=r.get(a)||1,h=n/Math.max(l,u);h>.3&&s.push({symbol1:o,symbol2:a,correlation:Math.round(h*100)/100});}return s.sort((i,n)=>n.correlation-i.correlation).slice(0,20)}generateDashboard(e=7){let t=this.getStats(e),r=[];r.push("\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557"),r.push("\u2551 PARADIGM SENTINEL DASHBOARD \u2551"),r.push("\u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563");let s=t.incidents.byDay[t.incidents.byDay.length-1]?.count||0;r.push(`\u2551 Open: ${String(t.incidents.open).padEnd(4)} \u2502 Investigating: ${String(t.incidents.total-t.incidents.open-t.incidents.resolved).padEnd(3)} \u2502 Resolved: ${String(t.incidents.resolved).padEnd(4)} \u2502 Today: +${s} \u2551`),r.push("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D"),r.push(""),r.push("Incidents by Day (last 7 days):"),r.push("\u2500".repeat(50));let i=Math.max(...t.incidents.byDay.map(n=>n.count),1);for(let n of t.incidents.byDay.slice(-7)){let o=Math.round(n.count/i*30),a="\u2588".repeat(o);r.push(`${n.date.substring(5)} ${a} ${n.count}`);}r.push(""),r.push("Most Affected Symbols:"),r.push("\u2500".repeat(50));for(let{symbol:n,count:o}of t.symbols.mostIncidents.slice(0,5))r.push(` ${n.padEnd(25)} ${o} incidents`);r.push(""),r.push("Top Patterns:"),r.push("\u2500".repeat(50));for(let{patternId:n,resolvedCount:o}of t.patterns.mostEffective.slice(0,5))r.push(` ${n.padEnd(25)} ${o} resolved`);return r.push(""),r.push("Resolution Stats:"),r.push("\u2500".repeat(50)),r.push(` Resolution rate: ${Math.round(t.resolution.resolutionRate)}%`),r.push(` With pattern: ${t.resolution.resolvedWithPattern}`),r.push(` Manual: ${t.resolution.resolvedManually}`),r.join(`
6
+ `)}countSymbols(e){let t=new Map;for(let r of e)for(let[,s]of Object.entries(r.symbols))s&&t.set(s,(t.get(s)||0)+1);return t}getSymbolsFromIncident(e){let t=[];for(let[,r]of Object.entries(e.symbols))r&&t.push(r);return t}},he=class{constructor(e=process.cwd()){this.projectRoot=e;}symbolCache=new Map;purposeCache=new Map;enrich(e){let t={};for(let[,s]of Object.entries(e.symbols))if(s){let i=this.getSymbolContext(s);i&&Object.keys(i).length>0&&(t[s]=i);}let r;return e.symbols.flow&&(r=this.getSymbolContext(e.symbols.flow)?.description),{...e,enriched:{symbols:t,flowDescription:r}}}getSymbolContext(e){let t=this.symbolCache.get(e);if(t)return t;let r={},s=this.findInSymbolIndex(e);s&&(r.description=s.description,r.definedIn=s.file,r.references=s.references,r.referencedBy=s.referencedBy);let i=this.findInPurposeFiles(e);return i&&(!r.description&&i.description&&(r.description=i.description),i.references&&(r.references=[...new Set([...r.references||[],...i.references])]),i.referencedBy&&(r.referencedBy=[...new Set([...r.referencedBy||[],...i.referencedBy])])),this.symbolCache.set(e,r),r}findInSymbolIndex(e){let t=c.join(this.projectRoot,".paradigm","index.json");if(!f.existsSync(t))return null;try{let r=f.readFileSync(t,"utf-8"),s=JSON.parse(r);return s.symbols&&Array.isArray(s.symbols)&&s.symbols.find(i=>i.id===e)||null}catch{return null}}findInPurposeFiles(e){let t=this.getSearchPathsForSymbol(e);for(let r of t){let s=c.join(this.projectRoot,r);if(!f.existsSync(s))continue;let i=this.purposeCache.get(s);if(i){if(i.symbol===e)return i;continue}try{let n=f.readFileSync(s,"utf-8"),o=this.parsePurposeFile(n);if(this.purposeCache.set(s,o),o.symbol===e)return o}catch{continue}}return null}getSearchPathsForSymbol(e){let t=[],r=e.replace(/^[@#$%^!&~?]/,""),s={"@":["features","src/features"],"#":["components","src/components"],$:["flows","src/flows"],"^":["middleware","gates","src/middleware"],"!":["signals","events","src/signals"],"%":["state","store","src/state"],"&":["integrations","services","src/integrations"]},i=e[0],n=s[i]||[];for(let o of n)t.push(c.join(o,r,".purpose")),t.push(c.join(o,`${r}.purpose`));return t.push(c.join(".paradigm","purposes",`${r}.yaml`)),t.push(c.join(".paradigm","purposes",`${r}.json`)),t}parsePurposeFile(e){let t={},r=e.split(`
7
+ `);for(let s of r){let i=s.trim();i.startsWith("symbol:")?t.symbol=i.substring(7).trim():i.startsWith("description:")?t.description=i.substring(12).trim():i.startsWith("purpose:")&&(t.description=i.substring(8).trim());}if(!t.description){let s=r.find(i=>i.trim()&&!i.startsWith("#"));s&&(t.description=s.trim());}return t}clearCache(){this.symbolCache.clear(),this.purposeCache.clear();}enrichBatch(e){return e.map(t=>this.enrich(t))}},fe=class{constructor(e){this.storage=e;}suggestFromIncident(e){let t=this.generatePatternId(e),r=this.buildSymbolCriteria(e.symbols),s=this.extractErrorKeywords(e.error.message);return {id:t,name:this.generatePatternName(e),description:`Auto-suggested pattern from incident ${e.id}`,pattern:{symbols:r,errorContains:s.length>0?s:void 0,missingSignals:e.flowPosition?.missing},resolution:{description:e.resolution?.notes||"Resolution approach TBD",strategy:this.inferStrategy([e]),priority:"medium"},source:"suggested",private:false,tags:this.generateTags(e)}}suggestFromGroup(e){let t=`group-${e.id.toLowerCase().replace(/[^a-z0-9]/g,"-")}`,r=this.buildSymbolCriteria(e.commonSymbols),s=e.incidents.slice(0,20).map(i=>this.storage.getIncident(i)).filter(i=>i!=null);return {id:t,name:e.name||`Pattern from group ${e.id}`,description:`Auto-suggested pattern from incident group with ${e.count} incidents`,pattern:{symbols:r,errorContains:e.commonErrorPatterns.length>0?e.commonErrorPatterns:void 0},resolution:{description:"Resolution approach TBD based on grouped incidents",strategy:s.length>0?this.inferStrategy(s):"fix-code",priority:this.getPriorityFromCount(e.count)},source:"suggested",private:false,tags:this.generateTagsFromGroup(e)}}findPatternCandidates(e=3){let t=this.storage.getRecentIncidents({limit:1e3,status:"resolved"}),r=new Map;for(let i of t){let n=this.getSymbolSignature(i.symbols),o=r.get(n)||[];o.push(i),r.set(n,o);}let s=[];for(let[,i]of r)if(i.length>=e){if(this.hasMatchingPattern(i[0]))continue;let n=this.suggestFromIncidents(i);s.push({incidents:i,suggestedPattern:n,occurrenceCount:i.length});}return s.sort((i,n)=>n.occurrenceCount-i.occurrenceCount)}suggestFromIncidents(e){let t=this.extractCommonSymbols(e),r=this.buildSymbolCriteria(t),s=this.extractCommonErrorKeywords(e),i=this.extractCommonMissingSignals(e);return {id:this.generatePatternId(e[0]),name:this.generatePatternName(e[0]),description:`Auto-suggested pattern from ${e.length} similar incidents`,pattern:{symbols:r,errorContains:s.length>0?s:void 0,missingSignals:i.length>0?i:void 0},resolution:{description:"Resolution approach based on previous resolutions",strategy:this.inferStrategy(e),priority:this.getPriorityFromCount(e.length)},source:"suggested",private:false,tags:this.generateTagsFromIncidents(e)}}buildSymbolCriteria(e){let t={};for(let[r,s]of Object.entries(e))s&&(t[r]=s);return t}extractErrorKeywords(e){let t=new Set(["the","a","an","is","are","was","were","in","on","at","to","for","of","with","and","or","but","not","no","be","been","have","has","had","do","does","did"]),r=e.toLowerCase().replace(/[^a-z0-9\s]/g," ").split(/\s+/).filter(s=>s.length>2&&!t.has(s));return [...new Set(r)].slice(0,5)}extractCommonErrorKeywords(e){let t=new Map;for(let s of e){let i=this.extractErrorKeywords(s.error.message);for(let n of i)t.set(n,(t.get(n)||0)+1);}let r=Math.ceil(e.length*.5);return Array.from(t.entries()).filter(([,s])=>s>=r).map(([s])=>s).slice(0,5)}extractCommonSymbols(e){if(e.length===0)return {};let t=e[0].symbols,r={};for(let[s,i]of Object.entries(t))i&&e.every(n=>n.symbols[s]===i)&&(r[s]=i);return r}extractCommonMissingSignals(e){let t=new Map;for(let s of e)if(s.flowPosition?.missing)for(let i of s.flowPosition.missing)t.set(i,(t.get(i)||0)+1);let r=Math.ceil(e.length*.5);return Array.from(t.entries()).filter(([,s])=>s>=r).map(([s])=>s)}generatePatternId(e){let t=[];e.symbols.gate?t.push(e.symbols.gate.replace(/[^a-z0-9]/gi,"")):e.symbols.feature?t.push(e.symbols.feature.replace(/[^a-z0-9]/gi,"")):e.symbols.component?t.push(e.symbols.component.replace(/[^a-z0-9]/gi,"")):e.symbols.integration?t.push(e.symbols.integration.replace(/[^a-z0-9]/gi,"")):t.push("unknown");let r=e.error.type?.toLowerCase()||"error";return t.push(r.replace(/[^a-z0-9]/gi,"")),t.push(String(Date.now()%1e3).padStart(3,"0")),t.join("-")}generatePatternName(e){let t=[];if(e.symbols.feature&&t.push(e.symbols.feature.replace("@","").replace(/-/g," ")),e.symbols.gate&&t.push("gate "+e.symbols.gate.replace("^","")),e.error.type&&t.push(e.error.type),t.length===0)return "Unnamed Pattern";let r=t.join(" - ");return r.charAt(0).toUpperCase()+r.slice(1)}generateTags(e){let t=[];return e.symbols.feature&&t.push("feature"),e.symbols.gate&&t.push("gate"),e.symbols.integration&&(t.push("integration"),t.push(e.symbols.integration.replace("&",""))),e.error.type&&t.push(e.error.type.toLowerCase()),t.push(e.environment),[...new Set(t)].slice(0,5)}generateTagsFromGroup(e){let t=["grouped"];e.commonSymbols.feature&&t.push("feature"),e.commonSymbols.gate&&t.push("gate"),e.commonSymbols.integration&&t.push("integration");for(let r of e.environments)t.push(r);return [...new Set(t)].slice(0,5)}generateTagsFromIncidents(e){let t=new Map;for(let r of e){let s=this.generateTags(r);for(let i of s)t.set(i,(t.get(i)||0)+1);}return Array.from(t.entries()).sort((r,s)=>s[1]-r[1]).slice(0,5).map(([r])=>r)}getSymbolSignature(e){let t=[];return e.feature&&t.push(`f:${e.feature}`),e.component&&t.push(`c:${e.component}`),e.flow&&t.push(`fl:${e.flow}`),e.gate&&t.push(`g:${e.gate}`),e.integration&&t.push(`i:${e.integration}`),t.sort().join("|")}hasMatchingPattern(e){let t=this.storage.getAllPatterns({includePrivate:true});for(let r of t){let s=0,i=["feature","component","flow","gate","signal","integration"];for(let n of i){let o=r.pattern.symbols[n],a=e.symbols[n];o&&a&&o===a&&s++;}if(s>=2)return true}return false}inferStrategy(e){let t=e.map(s=>s.error.message.toLowerCase()),r=s=>t.some(i=>s.some(n=>i.includes(n)));return r(["revert","rollback","regression","broke after deploy","since deploy"])?"rollback":r(["config","environment variable","env var","missing key","secret","credential"])?"config-change":r(["out of memory","oom","heap","memory limit","capacity","too many connections","pool exhausted"])?"scale-up":r(["timeout","network","econnrefused","econnreset","dns","socket hang up"])?"retry":r(["unavailable","service down","circuit breaker","fallback","503","502"])?"fallback":r(["validation","invalid","required","constraint","duplicate","not found","404"])?"fix-data":r(["permission","forbidden","403","401","unauthorized","access denied"])?"escalate":new Set(e.map(s=>s.error.type).filter(Boolean)).size>2?"investigate":"fix-code"}getPriorityFromCount(e){return e>=20?"critical":e>=10?"high":e>=5?"medium":"low"}},me=class{validate(e){let t=[],r=[];if(!e||typeof e!="object")return {valid:false,errors:["Invalid data: expected object"],warnings:[]};let s=e;if(s.version||t.push("Missing version field"),!Array.isArray(s.patterns))return t.push("Missing or invalid patterns array"),{valid:false,errors:t,warnings:r};for(let i=0;i<s.patterns.length;i++){let n=s.patterns[i],o=this.validatePattern(n,i);t.push(...o.errors),r.push(...o.warnings);}return {valid:t.length===0,errors:t,warnings:r}}validatePattern(e,t){let r=[],s=[],i=`Pattern[${t}]`;if(!e.id||typeof e.id!="string"?r.push(`${i}: Missing or invalid id`):/^[a-z0-9-]+$/.test(e.id)||s.push(`${i}: ID "${e.id}" should be kebab-case`),(!e.name||typeof e.name!="string")&&r.push(`${i}: Missing or invalid name`),!e.pattern||typeof e.pattern!="object")r.push(`${i}: Missing or invalid pattern criteria`);else {let n=e.pattern,o=n.symbols&&typeof n.symbols=="object"&&Object.keys(n.symbols).length>0,a=Array.isArray(n.errorContains)&&n.errorContains.length>0,l=n.errorMatches&&typeof n.errorMatches=="string",u=Array.isArray(n.missingSignals)&&n.missingSignals.length>0;!o&&!a&&!l&&!u&&r.push(`${i}: Pattern must have at least one matching criteria`);}if(!e.resolution||typeof e.resolution!="object")r.push(`${i}: Missing or invalid resolution`);else {let n=e.resolution;(!n.description||typeof n.description!="string")&&r.push(`${i}: Missing resolution description`),!n.strategy||typeof n.strategy!="string"?r.push(`${i}: Missing resolution strategy`):["retry","fallback","fix-data","fix-code","ignore","escalate"].includes(n.strategy)||r.push(`${i}: Invalid strategy "${n.strategy}"`),!n.priority||typeof n.priority!="string"?s.push(`${i}: Missing priority, will default to medium`):["low","medium","high","critical"].includes(n.priority)||s.push(`${i}: Invalid priority "${n.priority}"`);}return {errors:r,warnings:s}}loadFromFile(e){if(!f.existsSync(e))throw new Error(`File not found: ${e}`);let t=f.readFileSync(e,"utf-8"),r=JSON.parse(t),s=this.validate(r);if(!s.valid)throw new Error(`Invalid pattern file: ${s.errors.join(", ")}`);return this.normalizeExport(r)}async loadFromUrl(e){let t=await fetch(e);if(!t.ok)throw new Error(`Failed to fetch patterns: ${t.statusText}`);let r=await t.json(),s=this.validate(r);if(!s.valid)throw new Error(`Invalid pattern data: ${s.errors.join(", ")}`);return this.normalizeExport(r)}normalizeExport(e){let t=e.patterns.map(r=>this.normalizePattern(r));return {version:e.version||"1.0.0",exportedAt:e.exportedAt||new Date().toISOString(),patterns:t}}normalizePattern(e){let t=e.pattern,r=e.resolution,s=e.confidence||{};return {id:e.id,name:e.name,description:e.description||"",pattern:{symbols:t.symbols||{},errorContains:t.errorContains,errorMatches:t.errorMatches,errorType:t.errorType,missingSignals:t.missingSignals,environment:t.environment},resolution:{description:r.description,strategy:r.strategy,priority:r.priority||"medium",codeHint:r.codeHint,codeSnippet:r.codeSnippet,symbolsToModify:r.symbolsToModify,filesLikelyInvolved:r.filesLikelyInvolved,commitRef:r.commitRef,prRef:r.prRef,docsRef:r.docsRef},confidence:{score:s.score||50,timesMatched:s.timesMatched||0,timesResolved:s.timesResolved||0,timesRecurred:s.timesRecurred||0,avgTimeToResolve:s.avgTimeToResolve,lastMatched:s.lastMatched,lastResolved:s.lastResolved},source:e.source||"imported",private:!!e.private,tags:e.tags||[],createdAt:e.createdAt||new Date().toISOString(),updatedAt:e.updatedAt||new Date().toISOString()}}mergePatterns(...e){let t=new Map;for(let r of e)for(let s of r.patterns)t.set(s.id,s);return {version:"1.0.0",exportedAt:new Date().toISOString(),patterns:Array.from(t.values())}}};export{I as a,R as b,T as c,$ as d,B as e,k as f,L as g,O as h,z as i,H as j,oe as k,W as l,ae as m,le as n,ue as o,ce as p,he as q,fe as r,me as s};
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ var h="0.1.0",d="1.0.0";function l(t,a){let s={$meta:m(a.projectName,t),components:{},features:{},flows:{},state:{},gates:{},signals:{},aspects:{},screens:{},symbolMap:{}};for(let e of t.symbols)f(e,s,a);if(a.screenDefinitions)for(let[e,o]of Object.entries(a.screenDefinitions))s.screens[e]||(s.screens[e]={id:e,name:i(e),route:o.route,path:"",components:o.components,features:o.features});let n={};for(let e of Object.values(s.components))e.componentType&&(n[e.componentType]=(n[e.componentType]||0)+1);for(let e of Object.values(s.features))e.componentType&&(n[e.componentType]=(n[e.componentType]||0)+1);return Object.keys(n).length>0&&(s.$meta.componentTypes=n),I(s),s}function m(t,a){return {version:d,project:t,generatedAt:new Date().toISOString(),paradigmVersion:h,sources:{purposeFiles:a.purposeFiles.length,portalFiles:a.portalFiles.length,premiseFiles:a.symbols.filter(s=>s.source==="premise").length>0?1:0}}}function f(t,a,s){let{type:n}=t;switch(n){case "component":g(t,a,s);break;case "feature":y(t,a,s);break;case "flow":b(t,a);break;case "state":S(t,a);break;case "gate":w(t,a);break;case "signal":k(t,a);break;case "aspect":v(t,a);break;}}function g(t,a,s){let n=c(t.symbol),e=u(n,t.data,s.visualTagMappings),o={id:n,name:i(n),symbol:t.symbol,category:"components",path:t.filePath,description:t.description,visualTags:e,related:t.references,componentType:t.componentType,parent:t.parentSymbol};a.components[n]=o,a.symbolMap[t.symbol]={category:"components",id:n};}function y(t,a,s){let n=c(t.symbol),e=u(n,t.data,s.visualTagMappings),o={id:n,name:i(n),symbol:t.symbol,category:"features",path:t.filePath,description:t.description,visualTags:e,related:t.references,componentType:t.componentType,parent:t.parentSymbol};a.features[n]=o,a.symbolMap[t.symbol]={category:"features",id:n};}function b(t,a){let s=c(t.symbol),n=t.data,e=[];if(n?.steps)for(let r=0;r<n.steps.length;r++){let p=n.steps[r];e.push({id:`${s}-step-${r}`,name:p.action||`Step ${r+1}`,target:p.component,description:p.description,order:r});}let o={id:s,name:i(s),symbol:t.symbol,path:t.filePath,description:t.description,steps:e};a.flows[s]=o,a.symbolMap[t.symbol]={category:"flows",id:s};}function S(t,a){let s=c(t.symbol),n={id:s,name:i(s),symbol:t.symbol,path:t.filePath,description:t.description,consumers:t.referencedBy};a.state[s]=n,a.symbolMap[t.symbol]={category:"state",id:s};}function w(t,a){let s=c(t.symbol),n={id:s,name:i(s),symbol:t.symbol,category:"gates",path:t.filePath,description:t.description,related:t.references};a.gates[s]=n,a.symbolMap[t.symbol]={category:"gates",id:s};}function k(t,a){let s=c(t.symbol),n={id:s,name:i(s),symbol:t.symbol,category:"signals",path:t.filePath,description:t.description,related:t.references};a.signals[s]=n,a.symbolMap[t.symbol]={category:"signals",id:s};}function v(t,a){let s=c(t.symbol),n={id:s,name:i(s),symbol:t.symbol,category:"aspects",path:t.filePath,description:t.description,related:t.references};a.aspects[s]=n,a.symbolMap[t.symbol]={category:"aspects",id:s};}function I(t){for(let a of Object.values(t.screens))if(a.components)for(let s of a.components){let n=t.components[s];n&&(n.screens=n.screens||[],n.screens.includes(a.id)||n.screens.push(a.id));}}function c(t){return t.slice(1)}function i(t){return t.split("-").map(a=>a.charAt(0).toUpperCase()+a.slice(1)).join(" ")}function u(t,a,s){let n=[];if(s?.[t])return s[t];let e=[[/button/i,"button"],[/btn/i,"button"],[/form/i,"form"],[/input/i,"input"],[/field/i,"input"],[/select/i,"input"],[/card/i,"card"],[/list/i,"list"],[/table/i,"list"],[/modal/i,"modal"],[/dialog/i,"modal"],[/drawer/i,"modal"],[/nav/i,"nav"],[/menu/i,"menu"],[/dropdown/i,"menu"],[/header/i,"header"],[/footer/i,"footer"],[/sidebar/i,"sidebar"],[/hero/i,"hero"],[/grid/i,"grid"],[/chart/i,"chart"],[/graph/i,"chart"],[/icon/i,"icon"],[/image/i,"image"],[/avatar/i,"avatar"],[/badge/i,"badge"],[/tag/i,"badge"],[/tab/i,"tab"],[/accordion/i,"accordion"],[/toast/i,"toast"],[/notification/i,"toast"],[/alert/i,"toast"],[/spinner/i,"spinner"],[/loader/i,"spinner"],[/loading/i,"spinner"],[/skeleton/i,"skeleton"]];for(let[o,r]of e)o.test(t)&&n.push(r);return n}function M(t){return JSON.stringify(t,null,2)}function P(t={}){let{indexPath:a=".paradigm/scan-index.json or .paradigm-scan-index.json",enableAllModes:s=true,customInstructions:n=[]}=t,e=[];if(e.push("## Paradigm Scan Protocol"),e.push(""),e.push('When the user says "**paradigm scan**" with an image attached:'),e.push(""),e.push("### 1. Analyze the Image"),e.push(""),e.push("Identify visual elements in the image:"),e.push("- UI components (buttons, forms, cards, modals, etc.)"),e.push("- Data displays (lists, tables, charts)"),e.push("- Navigation elements (menus, tabs, breadcrumbs)"),e.push("- Layout regions (header, sidebar, main content, footer)"),e.push("- Interactive states (loading, errors, empty states)"),e.push(""),e.push("### 2. Cross-Reference with Paradigm Index"),e.push(""),e.push(`Reference the scan index at \`${a}\` to map visual elements to code:`),e.push(""),e.push("```"),e.push("// Example index structure"),e.push("{"),e.push(' "components": { "Button": { "symbol": "#Button", "path": "...", "visualTags": ["button"] } },'),e.push(' "features": { "checkout": { "symbol": "@checkout", "path": "..." } },'),e.push(' "flows": { "checkout-flow": { "symbol": "$checkout-flow", "steps": [...] } },'),e.push(' "state": { "cartStore": { "symbol": "%cart", "slices": ["items", "total"] } },'),e.push(' "gates": { "auth-required": { "symbol": "^auth-required", "path": "..." } }'),e.push("}"),e.push("```"),e.push(""),e.push("### 3. Return Structured Results"),e.push(""),e.push("Format your response as:"),e.push(""),e.push("```markdown"),e.push("## \u{1F52D} Paradigm Scan Results"),e.push(""),e.push("### Components"),e.push("| Element | Symbol | Path | Confidence |"),e.push("|---------|--------|------|------------|"),e.push("| Primary Button | `#Button` | `src/components/Button.tsx` | \u25CF\u25CF\u25CF\u25CF |"),e.push(""),e.push("### Features"),e.push("- **`@checkout`** \u2014 Handles the checkout process shown"),e.push(""),e.push("### Flows"),e.push("- **`$checkout-flow`** \u2014 Steps: cart \u2192 shipping \u2192 **payment** \u2190 (you are here) \u2192 confirmation"),e.push(""),e.push("### State"),e.push("- `%cart.items` \u2014 Powers the item list"),e.push("- `%cart.total` \u2014 Drives the price display"),e.push(""),e.push("### Gates"),e.push("- `^auth-required` \u2014 User must be logged in"),e.push(""),e.push("### \u26A0\uFE0F Uncovered Elements"),e.push(`- The "Apply Coupon" input doesn't have a mapped component`),e.push("```"),e.push(""),s&&(e.push("### Scan Modes"),e.push(""),e.push("| Mode | Trigger | Use Case |"),e.push("|------|---------|----------|"),e.push("| `paradigm scan` | Default | Map any image to paradigm elements |"),e.push("| `paradigm scan ui` | Screenshot | Map running app screenshot to code |"),e.push("| `paradigm scan design` | Mockup | Gap analysis vs. design files |"),e.push("| `paradigm scan error` | Error screenshot | Find related error handlers |"),e.push("| `paradigm scan arch` | Architecture diagram | Map diagram boxes to features |"),e.push("| `paradigm scan flow` | Flow diagram | Match steps to `$flow` definitions |"),e.push("| `paradigm scan diff` | Two images | Show what paradigm elements changed |"),e.push("")),e.push("### Confidence Levels"),e.push(""),e.push("- **\u25CF\u25CF\u25CF\u25CF** High \u2014 Visual element clearly matches component name/tags"),e.push("- **\u25CF\u25CF\u25CF\u25CB** Medium \u2014 Likely match based on context"),e.push("- **\u25CF\u25CF\u25CB\u25CB** Low \u2014 Possible match, needs verification"),e.push("- **\u25CF\u25CB\u25CB\u25CB** Tentative \u2014 Best guess, may be incorrect"),e.push(""),e.push("### After Scanning"),e.push(""),e.push("Once the user has the scan results, they can:"),e.push(""),e.push('1. **Reference specific items**: "I want to modify `#CheckoutButton`"'),e.push('2. **Ask about flows**: "Walk me through `$checkout-flow`"'),e.push('3. **Check gates**: "What permissions does `^premium-checkout` require?"'),e.push('4. **Explore state**: "What components use `%cart.items`?"'),e.push(""),n.length>0){e.push("### Project-Specific Instructions"),e.push("");for(let o of n)e.push(`- ${o}`);e.push("");}return e.push("### Index Regeneration"),e.push(""),e.push("If the scan index is outdated, run:"),e.push("```bash"),e.push("paradigm index"),e.push("```"),e.join(`
3
+ `)}export{l as a,M as b,P as c};
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import*as i from'fs';import*as a from'path';import*as P from'os';import*as x from'crypto';import {exec}from'child_process';var U=a.join(P.homedir(),".claude","plugins"),C=a.join(P.homedir(),".paradigm","plugin-update-check.json"),A=6;function $(e,s={}){return new Promise((n,l)=>{exec(e,{timeout:s.timeout||3e3,cwd:s.cwd},(r,t)=>{if(r)return l(r);n(t.trim());});})}function k(e){try{return i.existsSync(e)?JSON.parse(i.readFileSync(e,"utf8")):null}catch{return null}}function b(){return k(C)}function H(e){let s=a.dirname(C);i.existsSync(s)||i.mkdirSync(s,{recursive:true}),i.writeFileSync(C,JSON.stringify(e,null,2));}function E(){let e=b();return e?Date.now()-new Date(e.lastCheck).getTime()<A*3600*1e3:false}function V(e){let s=x.createHash("sha256"),n=new Set([".md",".json",".sh",".yaml",".yml",".ts",".js"]),l=new Set([".git","node_modules",".cache"]);function r(t){let o;try{o=i.readdirSync(t,{withFileTypes:!0});}catch{return}o.sort((c,u)=>c.name.localeCompare(u.name));for(let c of o){if(l.has(c.name))continue;let u=a.join(t,c.name);if(c.isDirectory())r(u);else if(c.isFile()){let p=a.extname(c.name).toLowerCase();if(n.has(p))try{let f=i.readFileSync(u,"utf8"),y=a.relative(e,u);s.update(y+"\0"+f);}catch{}}}}return r(e),s.digest("hex").slice(0,12)}function N(){let e=[],s=a.join(U,"marketplaces"),n=a.join(U,"cache");if(!i.existsSync(s))return e;let l;try{l=i.readdirSync(s).filter(r=>{let t=a.join(s,r);return i.statSync(t).isDirectory()&&i.existsSync(a.join(t,".git"))});}catch{return e}for(let r of l){let t=a.join(s,r),o=a.join(t,"plugins");if(!i.existsSync(o))continue;let c;try{c=i.readdirSync(o).filter(u=>i.statSync(a.join(o,u)).isDirectory());}catch{continue}for(let u of c){let p=a.join(o,u,".claude-plugin","plugin.json"),f=k(p);if(!f)continue;let y=f.version||"unknown",d=a.join(n,r,u),m="unknown",D="unknown";if(i.existsSync(d))try{let S=i.readdirSync(d).filter(h=>i.statSync(a.join(d,h)).isDirectory()).sort((h,R)=>{let j=h.split(".").map(Number),v=R.split(".").map(Number);for(let g=0;g<3;g++)if((j[g]||0)!==(v[g]||0))return (j[g]||0)-(v[g]||0);return 0}).reverse();if(S.length>0){m=S[0];let h=k(a.join(d,S[0],".claude-plugin","plugin.json"));h?.sha&&(D=h.sha);}}catch{}let w=r;try{let h=i.readFileSync(a.join(t,".git","config"),"utf8").match(/github\.com[:/]([^/]+\/[^/\s.]+)/);h&&(w=h[1].replace(/\.git$/,""));}catch{}e.push({repo:w,plugin:u,installedVersion:m,installedSha:D,marketplacePath:t,localVersion:y,pluginSourceDir:a.join(o,u),pluginCacheDir:i.existsSync(d)&&m!=="unknown"?a.join(d,m):""});}}return e}async function I(e){let s=null,n=e.installedSha;try{n=await $("git rev-parse HEAD",{cwd:e.marketplacePath});}catch{}try{let p=(await $("git ls-remote origin HEAD",{cwd:e.marketplacePath,timeout:3e3})).match(/^([a-f0-9]+)/);p&&(s=p[1]);}catch{}let l=s!==null&&s!==n,r=e.localVersion!==e.installedVersion&&e.installedVersion!=="unknown",t=V(e.pluginSourceDir),o=e.pluginCacheDir?V(e.pluginCacheDir):"",c=o!==""&&t!==o;return {repo:e.repo,plugin:e.plugin,installedVersion:e.installedVersion,installedSha:n,localVersion:e.localVersion,remoteSha:s,marketplacePath:e.marketplacePath,hasRemoteUpdate:l,hasCacheStale:r||c,marketplaceContentHash:t,cachedContentHash:o,hasContentDrift:c}}function J(){let e=b();if(!e?.results)return null;let s=e.results.filter(t=>t.hasRemoteUpdate||t.hasCacheStale);if(s.length===0)return null;let n=[];n.push("--- PLUGIN UPDATES AVAILABLE ---"),n.push("Updates available for installed Claude Code plugins:");let l=[],r=[];for(let t of s)if(t.hasRemoteUpdate){let o=t.installedVersion!=="unknown"?`${t.installedVersion} \u2192 ${t.localVersion}`:"newer commits available";n.push(` - ${t.plugin} (${t.repo}): ${o}`),l.push(`git -C ${t.marketplacePath} pull origin main`),r.push(`/plugin marketplace add ${t.repo}`);}else t.hasContentDrift?(n.push(` - ${t.plugin} (${t.repo}): content changed (hash ${t.cachedContentHash} \u2192 ${t.marketplaceContentHash}, reinstall needed)`),r.push(`/plugin marketplace add ${t.repo}`)):t.hasCacheStale&&(n.push(` - ${t.plugin} (${t.repo}): ${t.installedVersion} \u2192 ${t.localVersion} (reinstall needed)`),r.push(`/plugin marketplace add ${t.repo}`));if(n.push(""),n.push("Tell the user about these updates and suggest the following steps:"),l.length>0&&(n.push(""),n.push("Step 1 \u2014 Pull latest from remote:"),n.push(` ${l.join(` && \\
3
+ `)}`)),r.length>0){let t=l.length>0?2:1;n.push(""),n.push(`Step ${t} \u2014 Reinstall to update the cached version:`);for(let o of r)n.push(` ${o}`);n.push(""),n.push(`Step ${t+1} \u2014 Restart the Claude Code session to load the new version.`);}return n.push("---"),n.join(`
4
+ `)}function O(){E()||(async()=>{try{let e=await L();H({lastCheck:new Date().toISOString(),results:e});}catch{}})();}async function L(){let e=N();if(e.length===0)return [];let s=await Promise.all(e.map(n=>I(n)));return H({lastCheck:new Date().toISOString(),results:s}),s}export{J as a,O as b,L as c};
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import {h,g as g$1}from'./chunk-AD5TAD2A.js';import {d}from'./chunk-5TAVYPOV.js';import*as i from'fs';import*as a from'path';import*as D from'os';import*as x from'crypto';import*as p from'js-yaml';function T(){let n=a.join(D.homedir(),".paradigm");return i.existsSync(n)||i.mkdirSync(n,{recursive:true}),n}function N(n){let s=a.resolve(n);return x.createHash("sha256").update(s).digest("hex").slice(0,12)}function f(n){let s=N(n),t=a.join(T(),"sessions",s);i.existsSync(t)||i.mkdirSync(t,{recursive:true});let e=a.join(t,"pending-handoffs");return i.existsSync(e)||i.mkdirSync(e,{recursive:true}),t}function b(n){let s=f(n),t=a.join(s,"_project-meta.json"),o={name:a.basename(a.resolve(n)),path:a.resolve(n),lastSeen:new Date().toISOString()};i.writeFileSync(t,JSON.stringify(o,null,2));}function M(n,s){let t=f(n),e=a.join(t,"pending-handoffs",`${s.id}.json`);i.writeFileSync(e,JSON.stringify(s,null,2));}function E(n){let s=f(n),t=a.join(s,"pending-handoffs");if(!i.existsSync(t))return [];let e=[];try{let o=i.readdirSync(t);for(let l of o)if(l.endsWith(".json"))try{let u=i.readFileSync(a.join(t,l),"utf8"),m=JSON.parse(u);m.status==="pending"&&e.push(m);}catch{}}catch{}return e.sort((o,l)=>new Date(o.timestamp).getTime()-new Date(l.timestamp).getTime()),e}function O(n,s){let t=f(n),e=a.join(t,"pending-handoffs",`${s}.json`);if(i.existsSync(e))try{let o=i.readFileSync(e,"utf8"),l=JSON.parse(o);l.status="delivered",i.writeFileSync(e,JSON.stringify(l,null,2));}catch{}}function g(){let n=a.join(T(),"wisdom");return i.existsSync(n)||i.mkdirSync(n,{recursive:true}),n}function A(){let n=a.join(g(),"antipatterns.yaml");if(!i.existsSync(n))return [];try{let s=i.readFileSync(n,"utf8");return p.load(s)?.antipatterns||[]}catch{return []}}function W(){let n=a.join(g(),"decisions");if(!i.existsSync(n))return [];let s=[];try{let t=i.readdirSync(n);for(let e of t)if(!(!e.endsWith(".yaml")&&!e.endsWith(".yml")))try{let o=i.readFileSync(a.join(n,e),"utf8"),l=p.load(o);s.push(l);}catch{}}catch{}return s.sort((t,e)=>t.id.localeCompare(e.id)),s}function H(){let n=a.join(g(),"preferences.yaml");if(!i.existsSync(n))return null;try{let s=i.readFileSync(n,"utf8");return p.load(s)}catch{return null}}function L(n){let s=a.join(g(),"antipatterns.yaml"),t={version:"1.0",antipatterns:[]};if(i.existsSync(s))try{let e=i.readFileSync(s,"utf8");t=p.load(e),t.antipatterns||(t.antipatterns=[]);}catch{}t.antipatterns.push({...n,added:new Date().toISOString()}),i.writeFileSync(s,p.dump(t,{lineWidth:-1}));}function _(n){let s=a.join(g(),"decisions");i.existsSync(s)||i.mkdirSync(s,{recursive:true});let t=n.title.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""),e=`${n.id}-${t}.yaml`,o=a.join(s,e);i.writeFileSync(o,p.dump(n,{lineWidth:-1}));}var S={"claude-opus-4":{input:15,output:75,name:"Claude Opus 4"},"claude-sonnet-4":{input:3,output:15,name:"Claude Sonnet 4"},"claude-haiku-3.5":{input:.8,output:4,name:"Claude Haiku 3.5"}},w=50,j=".paradigm/session-breadcrumbs.json",P=".paradigm/session-checkpoint.json",F=10080*60*1e3,k=class{session;rootDir=null;_recovered=false;lastLoreEntryId=null;constructor(){this.session=this.createNewSession();}setRootDir(s){this.rootDir=s;try{let{clearSessionWorkLog:t}=(h(),d(g$1));t(s);}catch{}}createNewSession(){return {sessionId:`s${Date.now().toString(36)}`,startTime:Date.now(),lastActivity:Date.now(),model:"claude-sonnet-4",resourceReads:[],toolCalls:[],breadcrumbs:[],totals:{resourceReadCount:0,toolCallCount:0,totalBytes:0,totalTokens:0,estimatedCostUsd:0}}}addBreadcrumb(s,t,e={}){this.session.breadcrumbs.push({timestamp:Date.now(),action:s,tool:e.tool,symbol:e.symbol,summary:t}),this.session.breadcrumbs.length>w&&(this.session.breadcrumbs=this.session.breadcrumbs.slice(-w)),this.persistBreadcrumbs();}getBreadcrumbs(s=20){return this.session.breadcrumbs.slice(-s)}persistBreadcrumbs(){if(!this.rootDir)return;let s={sessionId:this.session.sessionId,startTime:this.session.startTime,lastActivity:this.session.lastActivity,breadcrumbs:this.session.breadcrumbs,symbolsModified:this.extractSymbolsFromBreadcrumbs(),filesExplored:this.extractFilesFromBreadcrumbs()},t;try{t=JSON.stringify(s,null,2);}catch(e){console.error("[paradigm-mcp] persistBreadcrumbs: JSON.stringify failed:",e.message);return}try{let e=a.join(this.rootDir,j),o=a.dirname(e);i.existsSync(o)||i.mkdirSync(o,{recursive:!0}),i.writeFileSync(e,t);}catch(e){console.error("[paradigm-mcp] persistBreadcrumbs: local write failed:",e.message);}try{let e=f(this.rootDir);i.writeFileSync(a.join(e,"breadcrumbs.json"),t),b(this.rootDir);}catch(e){console.error("[paradigm-mcp] persistBreadcrumbs: global write failed:",e.message);}}loadPreviousSession(){if(!this.rootDir)return null;try{let s=f(this.rootDir),t=a.join(s,"breadcrumbs.json");if(i.existsSync(t)){let e=i.readFileSync(t,"utf8");return JSON.parse(e)}}catch{}try{let s=a.join(this.rootDir,j);if(!i.existsSync(s))return null;let t=i.readFileSync(s,"utf8");return JSON.parse(t)}catch{return null}}saveCheckpoint(s){let t={phase:s.phase,context:s.context,timestamp:Date.now(),sessionId:this.session.sessionId,externalId:s.externalId,plan:s.plan,modifiedFiles:s.modifiedFiles,symbolsTouched:s.symbolsTouched,decisions:s.decisions,recentBreadcrumbs:this.session.breadcrumbs.slice(-10)},e=this.persistCheckpoint(t);return {checkpoint:t,persisted:e}}loadCheckpoint(){if(!this.rootDir)return null;let s=null;try{let t=f(this.rootDir),e=a.join(t,"checkpoint.json");if(i.existsSync(e)){let o=i.readFileSync(e,"utf8");s=JSON.parse(o);}}catch{}if(!s)try{let t=a.join(this.rootDir,P);if(i.existsSync(t)){let e=i.readFileSync(t,"utf8");s=JSON.parse(e);}}catch{}if(s&&Date.now()-s.timestamp>F)return null;if(s)for(let t of ["modifiedFiles","symbolsTouched","decisions"]){let e=s[t];if(typeof e=="string")try{s[t]=JSON.parse(e);}catch{s[t]=[];}}return s}persistCheckpoint(s){let t={local:false,global:false};if(!this.rootDir)return console.error("[paradigm-mcp] persistCheckpoint: rootDir not set, skipping write"),t;let e;try{e=JSON.stringify(s,null,2);}catch(o){return console.error("[paradigm-mcp] persistCheckpoint: JSON.stringify failed:",o.message),t}try{let o=a.join(this.rootDir,P),l=a.dirname(o);i.existsSync(l)||i.mkdirSync(l,{recursive:!0}),i.writeFileSync(o,e),t.local=!0;}catch(o){console.error("[paradigm-mcp] persistCheckpoint: local write failed:",o.message);}try{let o=f(this.rootDir);i.writeFileSync(a.join(o,"checkpoint.json"),e),b(this.rootDir),t.global=!0;}catch(o){console.error("[paradigm-mcp] persistCheckpoint: global write failed:",o.message);}return t}setLastLoreEntryId(s){this.lastLoreEntryId=s;}getLastLoreEntryId(){return this.lastLoreEntryId}hasRecoveredThisSession(){return this._recovered}markRecovered(){this._recovered=true;}extractSymbolsFromBreadcrumbs(){let s=new Set;for(let t of this.session.breadcrumbs)t.symbol&&s.add(t.symbol);return Array.from(s)}extractFilesFromBreadcrumbs(){let s=new Set;for(let t of this.session.breadcrumbs){let e=t.summary.match(/\b[\w./]+\.(ts|js|tsx|jsx|py|go|rs|yaml|json|md)\b/g);if(e)for(let o of e)s.add(o);}return Array.from(s)}estimateTokens(s){let t=typeof s=="number"?s:s.length;return Math.ceil(t/3.5)}calculateCost(s,t=true){let e=S[this.session.model],o=t?e.output:e.input;return s/1e6*o}setModel(s){this.session.model=s,this.recalculateTotals();}getModel(){return this.session.model}trackResourceRead(s,t){let e=this.extractResourceType(s),o=this.estimateTokens(t);this.session.resourceReads.push({timestamp:Date.now(),resourceType:e,uri:s,bytes:t,tokens:o}),this.session.lastActivity=Date.now(),this.updateTotals(t,o);}trackToolCall(s,t){let e=this.estimateTokens(t);this.session.toolCalls.push({timestamp:Date.now(),toolName:s,responseBytes:t,responseTokens:e}),this.session.lastActivity=Date.now(),this.updateTotals(t,e);}updateTotals(s,t){this.session.totals.resourceReadCount=this.session.resourceReads.length,this.session.totals.toolCallCount=this.session.toolCalls.length,this.session.totals.totalBytes+=s,this.session.totals.totalTokens+=t,this.session.totals.estimatedCostUsd=this.calculateCost(this.session.totals.totalTokens);}recalculateTotals(){this.session.totals.estimatedCostUsd=this.calculateCost(this.session.totals.totalTokens);}extractResourceType(s){return s.replace("paradigm://","").split("/")[0]||"unknown"}getStats(){return {...this.session}}getCostBreakdown(){let s={},t=0,e=0;for(let r of this.session.resourceReads)s[r.resourceType]||(s[r.resourceType]={count:0,bytes:0,tokens:0}),s[r.resourceType].count++,s[r.resourceType].bytes+=r.bytes,s[r.resourceType].tokens+=r.tokens,t+=r.bytes,e+=r.tokens;let o={},l=0,u=0;for(let r of this.session.toolCalls)o[r.toolName]||(o[r.toolName]={count:0,bytes:0,tokens:0}),o[r.toolName].count++,o[r.toolName].bytes+=r.responseBytes,o[r.toolName].tokens+=r.responseTokens,l+=r.responseBytes,u+=r.responseTokens;let m=e+u,h=this.calculateCost(m);return {model:S[this.session.model].name,modelId:this.session.model,pricing:S[this.session.model],resources:{count:this.session.resourceReads.length,bytes:t,tokens:e,costUsd:this.calculateCost(e),byType:s},tools:{count:this.session.toolCalls.length,bytes:l,tokens:u,costUsd:this.calculateCost(u),byName:o},total:{tokens:m,costUsd:h}}}getHandoffRecommendation(s=2e5,t){let e=this.session.totals.totalTokens,o=e*4,l=t||e+o,u=Math.round(l/s*100),m,h;u>=85?(m="handoff-urgent",h="Context is nearly full. Initiate handoff immediately to preserve session continuity."):u>=70?(m="handoff-recommended",h="Context usage is high. Consider initiating handoff soon to ensure smooth transition."):u>=50?(m="consider-handoff",h="Context usage is moderate. Plan a good stopping point for potential handoff."):(m="continue",h="Context usage is healthy. Continue working.");let r=[],C=Math.round((Date.now()-this.session.startTime)/6e4),v=this.session.toolCalls.length+this.session.resourceReads.length;return v>50&&r.push(`High number of MCP interactions (${v})`),C>30&&r.push(`Session duration >30 min (${C} min)`),this.session.totals.totalBytes>5e5&&r.push(`Large data volume (${Math.round(this.session.totals.totalBytes/1024)}KB)`),{recommendation:m,message:h,usagePercent:u,signals:r}}getDurationMinutes(){return Math.round((Date.now()-this.session.startTime)/6e4)}reset(){this.session=this.createNewSession(),this._recovered=false,this.lastLoreEntryId=null;}},y=null;function G(){return y||(y=new k),y}function $(){y&&y.reset();}
3
+ export{M as a,E as b,O as c,A as d,W as e,H as f,L as g,_ as h,S as i,G as j,$ as k};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ var e=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var i=Object.prototype.hasOwnProperty;var k=(a=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(a,{get:(b,c)=>(typeof require<"u"?require:b)[c]}):a)(function(a){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+a+'" is not supported')});var l=(a,b)=>()=>(a&&(b=a(a=0)),b);var m=(a,b)=>{for(var c in b)e(a,c,{get:b[c],enumerable:true});},j=(a,b,c,f)=>{if(b&&typeof b=="object"||typeof b=="function")for(let d of h(b))!i.call(a,d)&&d!==c&&e(a,d,{get:()=>b[d],enumerable:!(f=g(b,d))||f.enumerable});return a};var n=a=>j(e({},"__esModule",{value:true}),a);export{k as a,l as b,m as c,n as d};
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import*as s from'fs';import*as a from'path';import*as F from'os';import*as p from'crypto';var g=a.join(F.homedir(),".paradigm","score"),k=a.join(F.homedir(),".paradigm","mail"),h=a.join(g,"agents"),S=a.join(g,"threads"),x=a.join(g,"file-requests"),O=a.join(g,"trust.yaml"),K=3600*1e3,T={users:{},defaults:{level:"restricted",autoApprove:[],neverApprove:[".env*","**/*.key","**/*.pem","**/credentials*","**/secrets/**"]}};function Y(){if(s.existsSync(k)&&!s.existsSync(g))try{s.renameSync(k,g);}catch{}}function d(){Y();for(let t of [h,S,x])s.existsSync(t)||s.mkdirSync(t,{recursive:true});}var tt=d;function u(t){return a.join(h,t)}function v(t){let n=u(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
+ `).filter(i=>i.trim().length>0),r=[];for(let i of e)try{r.push(JSON.parse(i));}catch{}return r}function E(t,n){let e=a.dirname(t);s.existsSync(e)||s.mkdirSync(e,{recursive:true}),s.appendFileSync(t,JSON.stringify(n)+`
4
+ `,"utf-8");}function w(t){return t.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").slice(0,40)||"unknown"}function C(t){try{let n=a.join(t,".paradigm","config.yaml");if(s.existsSync(n)){let r=s.readFileSync(n,"utf-8").match(/^project:\s*(.+)$/m);if(r)return w(r[1].trim().replace(/["']/g,""))}}catch{}return w(a.basename(t))}function J(t,n){return `${C(t)}/${n||"core"}`}function et(t,n,e){d();let r=J(t,n),i=v(r),o=C(t),c={id:r,name:e||`${o} (${n||"core"})`,type:"agent",project:o,role:n||"core",pid:process.pid,startedAt:new Date().toISOString(),label:e};return s.writeFileSync(a.join(i,"identity.json"),JSON.stringify(c,null,2),"utf-8"),c}function Q(t){let n=u(t);if(!s.existsSync(n))return false;try{return s.rmSync(n,{recursive:!0,force:!0}),!0}catch{return false}}function P(){if(d(),!s.existsSync(h))return [];let t=[],n=s.readdirSync(h,{withFileTypes:true}).filter(e=>e.isDirectory());for(let e of n){let r=a.join(h,e.name),i=s.readdirSync(r,{withFileTypes:true}).filter(o=>o.isDirectory());for(let o of i){let c=a.join(r,o.name,"identity.json");if(s.existsSync(c))try{let f=s.readFileSync(c,"utf-8"),l=JSON.parse(f);t.push(l);}catch{}}}return t}function nt(){let t=P(),n=0;for(let e of t)b(e.pid)||(Q(e.id),n++);return n}function rt(t){let n=J(t),e=a.join(u(n),"identity.json");if(!s.existsSync(e))return null;try{return JSON.parse(s.readFileSync(e,"utf-8"))}catch{return null}}function st(t,n){let e=a.join(u(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 it(t,n){let e=a.join(u(t),"identity.json");if(s.existsSync(e))try{let r=JSON.parse(s.readFileSync(e,"utf-8"));r.statusBlurb=n||void 0,s.writeFileSync(e,JSON.stringify(r,null,2),"utf-8");}catch{}}function ot(t,n=6e4){if(!t.lastPoll)return true;let e=new Date(t.lastPoll).getTime();return Date.now()-e>n}function at(){let n=P().filter(e=>b(e.pid));try{let e=a.join(F.homedir(),".conductor","sessions");if(s.existsSync(e)){let r=s.readdirSync(e).filter(i=>i.endsWith(".json"));for(let i of r)try{let o=s.readFileSync(a.join(e,i),"utf-8"),c=JSON.parse(o),f=parseInt(a.basename(i,".json"),10);!n.some(l=>l.pid===f)&&b(f)&&n.push({id:`conductor/${f}`,name:c.label||`Session ${f}`,type:"agent",project:c.projectDir?a.basename(c.projectDir):"unknown",role:"conductor",pid:f,startedAt:c.registeredAt||new Date().toISOString()});}catch{}}}catch{}return n}function y(t){return a.join(u(t),"inbox.jsonl")}function j(t){return a.join(u(t),"outbox.jsonl")}function $(t){return a.join(u(t),"ack.json")}function ct(t){let n=y(t);if(!s.existsSync(n))return {hasNew:false,inboxSize:0};let r=s.statSync(n).size;if(!q(t))return {hasNew:r>0,inboxSize:r};let o=a.join(u(t),"ack-size.json");if(s.existsSync(o))try{let c=JSON.parse(s.readFileSync(o,"utf-8"));return {hasNew:r>(c.size||0),inboxSize:r}}catch{}return {hasNew:r>0,inboxSize:r}}function ft(t){let n=y(t),e=a.join(u(t),"ack-size.json");try{let r=s.existsSync(n)?s.statSync(n).size:0;v(t),s.writeFileSync(e,JSON.stringify({size:r}),"utf-8");}catch{}}function N(t,n){v(t),E(y(t),n);}function ut(t,n){let e=m(y(t));if(!n){let i=q(t);if(i){let o=e.findIndex(c=>c.id===i);if(o>=0)return e.slice(o+1)}return e}let r=e.findIndex(i=>i.id===n);return r>=0?e.slice(r+1):e}function V(t,n){v(t),E(j(t),n);}function lt(t){return m(j(t))}function dt(t,n){let e=$(t);v(t),s.writeFileSync(e,JSON.stringify({lastAck:n}),"utf-8");}function q(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 pt(t){let n=q(t);if(!n)return 0;let e=y(t),r=m(e),i=r.findIndex(f=>f.id===n);if(i<0)return 0;let o=r.slice(i+1),c=r.length-o.length;return o.length===0?s.existsSync(e)&&s.writeFileSync(e,"","utf-8"):s.writeFileSync(e,o.map(f=>JSON.stringify(f)).join(`
5
+ `)+`
6
+ `,"utf-8"),c}function I(t){return a.join(S,`${t}.json`)}function gt(t,n){d();let e="thr-"+p.randomBytes(4).toString("hex"),r=new Date().toISOString(),i={id:e,topic:t,initiator:n,participants:[n],status:"active",createdAt:r,lastActivity:r,messageCount:0};return s.writeFileSync(I(e),JSON.stringify(i,null,2),"utf-8"),i}function z(t){let n=I(t);if(!s.existsSync(n))return null;try{return JSON.parse(s.readFileSync(n,"utf-8"))}catch{return null}}function yt(t){if(d(),!s.existsSync(S))return [];let n=s.readdirSync(S).filter(r=>r.endsWith(".json")),e=[];for(let r of n)try{let i=s.readFileSync(a.join(S,r),"utf-8"),o=JSON.parse(i);(!t||o.status===t)&&e.push(o);}catch{}return e.sort((r,i)=>i.lastActivity.localeCompare(r.lastActivity))}function _(t,n){let e=z(t);if(!e)return false;let r={...e,...n};return s.writeFileSync(I(t),JSON.stringify(r,null,2),"utf-8"),true}function ht(t,n){return _(t,{status:"resolved",resolvedAt:new Date().toISOString(),decision:n})}function St(t){let n=P(),e=[];for(let r of n){let i=m(y(r.id)),o=m(j(r.id));for(let c of [...i,...o])(c.threadRoot===t||c.id===t)&&(e.some(f=>f.id===c.id)||e.push(c));}return e.sort((r,i)=>r.timestamp.localeCompare(i.timestamp))}function L(t){return {id:p.randomUUID(),parentId:t.parentId,threadRoot:t.threadRoot,timestamp:new Date().toISOString(),sender:t.sender,recipients:t.recipients,intent:t.intent,content:{text:t.text,diff:t.diff,decision:t.decision},symbols:t.symbols||[],attachments:t.attachments,metadata:t.metadata}}function B(t){d(),V(t.sender.id,t);let n=0;if(t.recipients&&t.recipients.length>0)for(let e of t.recipients)N(e.id,t),n++;else {let e=P();for(let r of e)r.id!==t.sender.id&&(N(r.id,t),n++);}if(t.threadRoot){let e=z(t.threadRoot);if(e){let i=e.participants.some(o=>o.id===t.sender.id)?e.participants:[...e.participants,t.sender];_(t.threadRoot,{participants:i,lastActivity:t.timestamp,messageCount:e.messageCount+1});}}return n}function A(t){return a.join(x,`${t}.json`)}function U(){if(!s.existsSync(O))return T;try{let t=s.readFileSync(O,"utf-8");try{return JSON.parse(t)}catch{return T}}catch{return T}}function xt(t){d();let n="freq-"+p.randomBytes(4).toString("hex"),e={request:{requestId:n,filePath:t.filePath,reason:t.reason,requester:t.requester,urgency:t.urgency||"normal",snippet:t.snippet,threadRoot:t.threadRoot},status:"pending",createdAt:new Date().toISOString()};return s.writeFileSync(A(n),JSON.stringify(e,null,2),"utf-8"),e}function G(t){let n=A(t);if(!s.existsSync(n))return null;try{return JSON.parse(s.readFileSync(n,"utf-8"))}catch{return null}}function Z(t){if(d(),!s.existsSync(x))return [];let n=s.readdirSync(x).filter(r=>r.endsWith(".json")),e=[];for(let r of n)try{let i=s.readFileSync(a.join(x,r),"utf-8"),o=JSON.parse(i);(!t||o.status===t)&&e.push(o);}catch{}return e.sort((r,i)=>i.createdAt.localeCompare(r.createdAt))}function mt(t,n,e){let r=G(t);if(!r)return {success:false,error:`File request not found: ${t}`};if(r.status!=="pending")return {success:false,error:`Request already ${r.status}`};let i=a.resolve(n,r.request.filePath);if(!i.startsWith(a.resolve(n)))return {success:false,error:"File path escapes project directory"};if(!s.existsSync(i))return {success:false,error:`File not found: ${r.request.filePath}`};try{let o=s.readFileSync(i,"utf-8"),c="utf8";if(e){let W=[/(?:api[_-]?key|secret|token|password|credential|auth)\s*[:=]/i,/(?:^|\s)(?:export\s+)?[A-Z_]+(?:KEY|SECRET|TOKEN|PASSWORD|CREDENTIAL)\s*=/,/-----BEGIN (?:RSA |EC )?PRIVATE KEY-----/];o=o.split(`
7
+ `).map(D=>{for(let H of W)if(H.test(D))return "[REDACTED]";return D}).join(`
8
+ `);}let f=p.createHash("sha256").update(o).digest("hex"),l={requestId:t,filePath:r.request.filePath,content:o,encoding:c,size:Buffer.byteLength(o),hash:f};r.status="approved",r.resolvedAt=new Date().toISOString(),r.delivery=l,s.writeFileSync(A(t),JSON.stringify(r,null,2),"utf-8");let M=L({sender:{id:"system",name:"File Transfer",type:"human"},recipients:[r.request.requester],intent:"fileDelivery",text:`File delivered: ${r.request.filePath} (${l.size} bytes, SHA-256: ${f.slice(0,12)}...)`,threadRoot:r.request.threadRoot,symbols:[]});return M.attachments=[{name:a.basename(r.request.filePath),type:"file",content:l.content,encoding:l.encoding}],B(M),{success:!0,delivery:l}}catch(o){return {success:false,error:`Failed to read file: ${o.message}`}}}function vt(t,n){let e=G(t);if(!e||e.status!=="pending")return false;e.status="denied",e.resolvedAt=new Date().toISOString(),e.denyReason=n,s.writeFileSync(A(t),JSON.stringify(e,null,2),"utf-8");let r=L({sender:{id:"system",name:"File Transfer",type:"human"},recipients:[e.request.requester],intent:"fileDenied",text:`File request denied: ${e.request.filePath}${n?` \u2014 ${n}`:""}`,threadRoot:e.request.threadRoot,symbols:[]});return B(r),true}function R(t,n){let e=n.replace(/\./g,"\\.").replace(/\*\*/g,"{{GLOBSTAR}}").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]").replace(/\{\{GLOBSTAR\}\}/g,".*");return new RegExp(`^${e}$`).test(t)}function X(t,n,e){let r=n||U();if(e&&r.users[e]){for(let i of r.users[e].neverApprove)if(R(t,i))return true}for(let i of r.defaults.neverApprove)if(R(t,i))return true;return false}function At(t,n,e){let r=n||U();if(X(t,r,e))return false;if(e&&r.users[e]){for(let i of r.users[e].autoApprove)if(R(t,i))return true}for(let i of r.defaults.autoApprove)if(R(t,i))return true;return false}function Rt(){let t=Z("pending"),n=0;for(let e of t)Date.now()-new Date(e.createdAt).getTime()>K&&(e.status="expired",e.resolvedAt=new Date().toISOString(),s.writeFileSync(A(e.request.requestId),JSON.stringify(e,null,2),"utf-8"),n++);return n}function b(t){try{return process.kill(t,0),!0}catch{return false}}export{z as A,yt as B,_ as C,ht as D,St as E,L as F,B as G,U as H,xt as I,G as J,Z as K,mt as L,vt as M,X as N,At as O,Rt as P,g as a,d as b,tt as c,u as d,m as e,E as f,J as g,et as h,Q as i,P as j,nt as k,rt as l,st as m,it as n,ot as o,at as p,ct as q,ft as r,N as s,ut as t,V as u,lt as v,dt as w,q as x,pt as y,gt as z};
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import {c,b as b$1}from'./chunk-5TAVYPOV.js';import*as i from'fs';import*as f from'path';var W={};c(W,{appendSessionWorkEntry:()=>b,clearSessionWorkLog:()=>E,getAgentEntries:()=>p,getAgentVerdicts:()=>k,getContributingAgents:()=>x,readSessionWorkLog:()=>l});function b(e,t){try{let n=f.join(e,u),o=f.dirname(n);if(i.existsSync(o)||i.mkdirSync(o,{recursive:!0}),i.existsSync(n)&&i.readFileSync(n,"utf8").trim().split(`
3
+ `).filter(r=>r.trim()).length>=v)return;let g=JSON.stringify(t)+`
4
+ `;i.appendFileSync(n,g,"utf8"),t.type==="user-verdict"&&t.agent&&t.symbols?.length&&import('./agent-loader-EPXURMO7.js').then(({loadAgentProfile:c,saveAgentProfile:s})=>{try{let r=c(e,t.agent);if(r?.expertise){let d=t.verdict==="accepted"?.03:t.verdict==="dismissed"?-.02:t.verdict==="revised"?-.01:0;if(d!==0){for(let S of t.symbols){let a=r.expertise.find(y=>y.symbol===S);a&&(a.confidence=Math.max(0,Math.min(1,a.confidence+d)),a.sessions=(a.sessions||0)+1,a.lastTouch=new Date().toISOString());}s(t.agent,r,"global");}}}catch{}}).catch(()=>{});}catch{}}function l(e){try{let t=f.join(e,u);return i.existsSync(t)?i.readFileSync(t,"utf8").trim().split(`
5
+ `).filter(n=>n.trim()).map(n=>{try{return JSON.parse(n)}catch{return null}}).filter(n=>n!==null):[]}catch{return []}}function E(e){try{let t=f.join(e,u);i.existsSync(t)&&i.writeFileSync(t,"","utf8");}catch{}}function x(e){let t=l(e),n=new Set;for(let o of t)o.agent&&n.add(o.agent);return Array.from(n)}function p(e,t){return l(e).filter(n=>n.agent===t)}function k(e,t){let n=p(e,t),o=n.filter(s=>s.type==="agent-contribution"),g=n.filter(s=>s.type==="user-verdict"),c=[];for(let s of o)c.push({contribution:s});for(let s of g){let r=c.find(d=>!d.verdict&&d.contribution);r?r.verdict=s:c.push({verdict:s});}return c}var u,v,A=b$1(()=>{u=".paradigm/events/session-log.jsonl",v=200;});export{b as a,l as b,E as c,x as d,p as e,k as f,W as g,A as h};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import*as c from'fs';import*as a from'path';import {Glob}from'glob';function s(t){let e=r=>{if(r.includes("*"))try{return new Glob(r,{cwd:t,nodir:!0}).walkSync().length>0}catch{return false}return c.existsSync(a.join(t,r))};return e("project.godot")||e("Assets/ProjectSettings")?"game":e("Package.swift")&&!e("package.json")?e("Sources/*/App")||e("**/AppDelegate.swift")?"macos-app":"ios-app":e("pubspec.yaml")?"flutter-app":e("supabase")&&(e("next.config.*")||e("vite.config.*"))?"saas-web-app":e("next.config.*")||e("vite.config.*")||e("nuxt.config.*")?"web-app":e("Dockerfile")||e("prisma")||e("drizzle.config.*")?"backend-api":e("Cargo.toml")?"rust-project":e("pyproject.toml")||e("setup.py")||e("requirements.txt")?"python-project":"generic"}var n={"saas-web-app":["architect","builder","reviewer","tester","security","documentor","designer","copywriter","performance","devops","dba","e2e","dx","seo","pm","product","sales","legal","a11y","qa","advocate","debugger","release","narrator"],"web-app":["architect","builder","reviewer","tester","security","documentor","designer","copywriter","performance","devops","e2e","seo","a11y","qa","debugger"],"backend-api":["architect","builder","reviewer","tester","security","documentor","devops","dba","performance","dx","qa","debugger","release"],"ios-app":["architect","builder","reviewer","tester","security","documentor","designer","mobile","performance","a11y","qa","debugger"],"macos-app":["architect","builder","reviewer","tester","security","documentor","designer","performance","qa","debugger"],"flutter-app":["architect","builder","reviewer","tester","security","documentor","designer","mobile","performance","a11y","debugger"],game:["architect","builder","reviewer","tester","documentor","gamedev","3d","audio","designer","performance","debugger"],"rust-project":["architect","builder","reviewer","tester","security","documentor","performance","debugger","qa"],"python-project":["architect","builder","reviewer","tester","security","documentor","performance","debugger","qa"],generic:["architect","builder","reviewer","tester","security","documentor","debugger","qa"]};export{s as a,n as b};
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ import*as i from'fs';import*as c from'path';import*as a from'js-yaml';var v={architect:{tier:"high",description:"Complex planning needs best reasoning"},security:{tier:"high",description:"Deep security analysis"},reviewer:{tier:"medium",description:"Balanced critique"},builder:{tier:"low",description:"Fast implementation, lower cost"},tester:{tier:"low",description:"Quick validation"}},p={architect:{role:`You design system architecture, write specifications, and plan features.
3
+ You do NOT write implementation code - that's the Builder's job.
4
+ When your spec is ready, hand off to Builder with 'paradigm team handoff --to builder'.`,focus:{reads:["@features","$flows","specs/*.md","health.yaml"],writes:["specs/*.md",".purpose"]},triggers:[{type:"keyword",match:["design","architect","plan","spec"]},{type:"symbol",match:["@*","$*"]}],handoff_to:["builder","reviewer"],defaultModel:"opus",context:{include:["specs/*.md",".purpose","**/.purpose","portal.yaml"],exclude:["src/**","tests/**","node_modules/**"]}},builder:{role:`You implement code based on specifications from the Architect.
5
+ Follow the spec exactly. If spec is unclear, hand back to Architect.
6
+ When implementation is ready, hand off to Reviewer with 'paradigm team handoff --to reviewer'.`,focus:{reads:["#components","specs/*.md","src/**","tests/**"],writes:["src/**","tests/**"]},triggers:[{type:"keyword",match:["implement","build","code","fix"]},{type:"handoff",from:"architect"}],handoff_to:["reviewer","architect"],defaultModel:"haiku",context:{include:["src/**","tests/**","{feature}.purpose"],exclude:["specs/*.md","node_modules/**"]}},reviewer:{role:`You review code for correctness, security, and adherence to specs.
7
+ Check all ^gate requirements are met.
8
+ Approve or request changes. Do NOT implement fixes yourself.
9
+ Hand back to Builder for fixes, or to Tester when approved.`,focus:{reads:["^gates","!signals","portal.yaml","src/**","specs/*.md"],writes:["reviews/*.md"]},triggers:[{type:"keyword",match:["review","check","audit","approve"]},{type:"handoff",from:"builder"}],handoff_to:["builder","tester"],defaultModel:"sonnet",context:{include:["src/**","specs/*.md","portal.yaml",".purpose"],exclude:["tests/**","node_modules/**"]}},tester:{role:`You verify implementations work correctly.
10
+ Run tests, check portal validations, verify health status.
11
+ Report issues back to Builder. Update health.yaml when verified.`,focus:{reads:["tests/**","portal.yaml","health.yaml","#components"],writes:["tests/**","health.yaml"]},triggers:[{type:"keyword",match:["test","verify","qa","validate"]},{type:"handoff",from:"reviewer"}],handoff_to:["builder","architect"],defaultModel:"haiku",context:{include:["tests/**","health.yaml","{feature}.purpose"],exclude:["src/**","specs/**","node_modules/**"]}},security:{role:`You audit for security issues, especially around ^gates.
12
+ Review auth flows, check for vulnerabilities.
13
+ Flag issues but do NOT implement fixes - hand to Builder for that.`,focus:{reads:["^gates","!signals","portal.yaml","src/**"],writes:["security/*.md"]},triggers:[{type:"keyword",match:["security","audit","vulnerability","auth"]}],handoff_to:["builder","architect"],defaultModel:"opus",context:{include:["portal.yaml","src/middleware/**","src/auth/**"],exclude:["src/routes/**","tests/**","node_modules/**"]}}};function l(e){return c.join(e,".paradigm")}function d(e){return c.join(l(e),"agents.yaml")}function h(e){return c.join(l(e),"team-state.yaml")}function f(e){return c.join(l(e),"handoffs")}function _(e){return i.existsSync(d(e))}function D(e){let t=d(e);if(!i.existsSync(t))return null;try{let n=i.readFileSync(t,"utf8");return a.load(n)}catch{return null}}function F(e,t){let n=d(e),r=l(e);i.existsSync(r)||i.mkdirSync(r,{recursive:true});let o=a.dump(t,{lineWidth:-1,noRefs:true,quotingType:'"'});i.writeFileSync(n,o);}function u(e){let t=h(e);if(!i.existsSync(t))return {current:null,queue:[],recent:[],blocked:[]};try{let n=i.readFileSync(t,"utf8");return a.load(n)}catch{return {current:null,queue:[],recent:[],blocked:[]}}}function g(e,t){let n=h(e),r=l(e);i.existsSync(r)||i.mkdirSync(r,{recursive:true});let o=a.dump(t,{lineWidth:-1,noRefs:true,quotingType:'"'});i.writeFileSync(n,o);}function y(e,t){let n=c.join(f(e),`${t}.yaml`);if(!i.existsSync(n))return null;try{let r=i.readFileSync(n,"utf8");return a.load(r)}catch{return null}}function H(e,t){let n=f(e);i.existsSync(n)||i.mkdirSync(n,{recursive:true});let r=c.join(n,`${t.id}.yaml`),o=a.dump(t,{lineWidth:-1,noRefs:true,quotingType:'"'});i.writeFileSync(r,o);}function x(e){let t=f(e);if(!i.existsSync(t))return [];let n=i.readdirSync(t).filter(o=>o.endsWith(".yaml")),r=[];for(let o of n){let s=o.replace(".yaml",""),m=y(e,s);m&&r.push(m);}return r.sort((o,s)=>new Date(s.timestamp).getTime()-new Date(o.timestamp).getTime())}function R(e){return x(e).filter(t=>t.status==="pending")}function C(e="project",t){let n={};for(let[r,o]of Object.entries(p))if(n[r]={name:r,...o},t&&t[r]){let s=t[r].id.toLowerCase();s.includes("opus")||s.includes("gpt-4")&&!s.includes("mini")||s.includes("o1")&&!s.includes("mini")||s.includes("pro")&&!s.includes("mini")||s.includes("large")?n[r].defaultModel="opus":s.includes("haiku")||s.includes("mini")||s.includes("flash")||s.includes("small")?n[r].defaultModel="haiku":n[r].defaultModel="sonnet";}return {version:"1.0.0",team:{name:`${e}-team`,default_agent:"architect",require_handoff:false},agents:n}}function q(e,t){let n=u(e);n.recent.unshift({...t,timestamp:new Date().toISOString()}),n.recent=n.recent.slice(0,20),g(e,n);}function I(e,t,n){let r=u(e);r.current={agent:t,task:n,started:new Date().toISOString(),symbols_touched:[]},g(e,r);}function P(e){let t=u(e);t.current=null,g(e,t);}export{v as a,l as b,d as c,_ as d,D as e,F as f,u as g,g as h,H as i,x as j,R as k,C as l,q as m,I as n,P as o};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import*as y from'fs';import*as C from'path';import*as O from'js-yaml';var K=".paradigm/scan-index.json",X=".paradigm/flow-index.json",z=".paradigm/config.yaml",B="portal.yaml",J=".paradigm/university/index.yaml",w={enabled:true,title:null,theme:"dark",customCss:null,customContent:"docs/",exclude:{tags:[],patterns:[]},sidebar:{collapsed:[]},output:".paradigm/docs-site"};function G(s){let t=C.join(s,z);if(!y.existsSync(t))return {...w};try{let e=y.readFileSync(t,"utf8"),a=O.load(e);if(!a||!a.docs)return {...w};let n=a.docs;return {enabled:n.enabled??w.enabled,title:n.title??w.title,theme:n.theme??w.theme,customCss:n.customCss??w.customCss,customContent:n.customContent??w.customContent,exclude:{tags:n.exclude?.tags??w.exclude.tags,patterns:n.exclude?.patterns??w.exclude.patterns},sidebar:{collapsed:n.sidebar?.collapsed??w.sidebar.collapsed},output:n.output??w.output}}catch{return {...w}}}function T(s){let t=C.join(s,K);if(!y.existsSync(t))return null;try{let e=y.readFileSync(t,"utf8");return JSON.parse(e)}catch{return null}}function M(s){let t=C.join(s,X);if(!y.existsSync(t))return null;try{let e=y.readFileSync(t,"utf8");return JSON.parse(e)}catch{return null}}function D(s){let t=C.join(s,B);if(!y.existsSync(t))return null;try{let e=y.readFileSync(t,"utf8");return O.load(e)}catch{return null}}function N(s){let t=C.join(s,J);if(!y.existsSync(t))return null;try{let e=y.readFileSync(t,"utf8");return O.load(e)}catch{return null}}function L(s){let t=s.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);if(!t)return null;try{return {frontmatter:O.load(t[1]),body:t[2].trim()}}catch{return null}}function U(s){let t=new Map,e=[s.components,s.features,s.flows,s.state,s.gates,s.signals,s.aspects];for(let a of e)if(a)for(let[n,o]of Object.entries(a))t.set(n,o);return t}function V(s){return {components:"component",features:"component",flows:"flow",state:"component",gates:"gate",signals:"signal",aspects:"aspect"}[s]||"component"}function R(s,t){if(t.exclude.tags.length>0&&s.visualTags){for(let e of s.visualTags)if(t.exclude.tags.includes(e))return true}if(t.exclude.patterns.length>0&&s.path){for(let e of t.exclude.patterns)if(e.endsWith("*")){let a=e.slice(0,-1);if(s.path.includes(a))return true}else if(s.path.includes(e))return true}return false}function W(s,t){let e=C.join(s,t);if(!y.existsSync(e))return [];let a=[];try{let n=y.readdirSync(e).filter(o=>o.endsWith(".md"));for(let o of n)try{let l=y.readFileSync(C.join(e,o),"utf8"),i=o.replace(/\.md$/,""),g=L(l);g?a.push({slug:i,title:g.frontmatter.title||i,body:g.body,order:typeof g.frontmatter.order=="number"?g.frontmatter.order:void 0,description:g.frontmatter.description||void 0}):a.push({slug:i,title:i,body:l.trim()});}catch{}}catch{}return a.sort((n,o)=>n.order!=null&&o.order!=null?n.order-o.order:n.order!=null?-1:o.order!=null?1:n.title.localeCompare(o.title)),a}function Y(s,t,e){let a=e||G(s),n=C.join(s,a.customContent),o=C.join(n,`${t}.md`);if(!y.existsSync(o))return null;try{let l=y.readFileSync(o,"utf8"),i=L(l);return i?{slug:t,title:i.frontmatter.title||t,body:i.body,order:typeof i.frontmatter.order=="number"?i.frontmatter.order:void 0,description:i.frontmatter.description||void 0}:{slug:t,title:t,body:l.trim()}}catch{return null}}function Q(s,t){let e=t||G(s),a=T(s),n=M(s),o=D(s),l=W(s,e.customContent),i=N(s),g=a?.$meta?.project||C.basename(s),$=e.title||`${g} Docs`,c=[],u={},d=0;if(l.length>0&&c.push({id:"custom-pages",label:"Pages",collapsed:e.sidebar.collapsed.includes("custom-pages"),items:l.map(f=>({id:f.slug,label:f.title,kind:"custom",description:f.description}))}),i&&i.entries.length>0){let f=i.entries.filter(h=>(h.type==="note"||h.type==="policy")&&h.symbols.length>0);f.length>0&&c.push({id:"guides",label:"Guides",collapsed:e.sidebar.collapsed.includes("guides"),items:f.map(h=>({id:h.id,label:h.title,kind:"guide",description:void 0,badge:h.symbols.length>0?`${h.symbols.length} symbols`:void 0}))});}if(a){let f=Object.values(a.components||{}).filter(r=>!R(r,e));if(f.length>0){let r=new Map;for(let P of f){let j=P.componentType||"other";r.has(j)||r.set(j,[]),r.get(j).push(P);}let k=[...r.entries()].sort((P,j)=>j[1].length-P[1].length).map(([P,j])=>({id:`components-${P}`,label:`${P.charAt(0).toUpperCase()+P.slice(1)} (${j.length})`,collapsed:e.sidebar.collapsed.includes(`components-${P}`),items:j.sort((F,H)=>F.name.localeCompare(H.name)).map(F=>({id:F.id,label:F.name,kind:"component",description:F.description,badge:F.componentType}))}));c.push({id:"components",label:`Components (${f.length})`,collapsed:e.sidebar.collapsed.includes("components"),items:[],subgroups:k}),u.components=f.length,d+=f.length;}let h=Object.values(a.features||{}).filter(r=>!R(r,e));h.length>0&&(c.push({id:"features",label:`Features (${h.length})`,collapsed:e.sidebar.collapsed.includes("features"),items:h.sort((r,S)=>r.name.localeCompare(S.name)).map(r=>({id:r.id,label:r.name,kind:"component",description:r.description}))}),u.features=h.length,d+=h.length);let v=Object.values(a.flows||{}).filter(r=>!R(r,e)),p=new Set(v.map(r=>r.id)),m=[];if(n)for(let[r,S]of Object.entries(n.flows)){let k=r.replace(/^\$/,"");p.has(k)||m.push({id:k,label:S.name||k,kind:"flow",description:S.description});}let x=[...v.sort((r,S)=>r.name.localeCompare(S.name)).map(r=>({id:r.id,label:r.name,kind:"flow",description:r.description})),...m];x.length>0&&(c.push({id:"flows",label:`Flows (${x.length})`,collapsed:e.sidebar.collapsed.includes("flows"),items:x}),u.flows=x.length,d+=x.length);let b=Object.values(a.gates||{}).filter(r=>!R(r,e));b.length>0&&(c.push({id:"gates",label:`Gates (${b.length})`,collapsed:e.sidebar.collapsed.includes("gates"),items:b.sort((r,S)=>r.name.localeCompare(S.name)).map(r=>({id:r.id,label:r.name,kind:"gate",description:r.description}))}),u.gates=b.length,d+=b.length);let I=Object.values(a.signals||{}).filter(r=>!R(r,e));I.length>0&&(c.push({id:"signals",label:`Signals (${I.length})`,collapsed:e.sidebar.collapsed.includes("signals"),items:I.sort((r,S)=>r.name.localeCompare(S.name)).map(r=>({id:r.id,label:r.name,kind:"signal",description:r.description}))}),u.signals=I.length,d+=I.length);let E=Object.values(a.aspects||{}).filter(r=>!R(r,e));E.length>0&&(c.push({id:"aspects",label:`Aspects (${E.length})`,collapsed:e.sidebar.collapsed.includes("aspects"),items:E.sort((r,S)=>r.name.localeCompare(S.name)).map(r=>({id:r.id,label:r.name,kind:"aspect",description:r.description}))}),u.aspects=E.length,d+=E.length);}if(o){let f=Object.keys(o.routes||{}).length,h=Object.keys(o.gates||{}).length;c.push({id:"portal",label:"Portal",collapsed:e.sidebar.collapsed.includes("portal"),items:[{id:"portal-overview",label:"Authorization Overview",kind:"portal",description:`${h} gates, ${f} routes`,badge:`${f} routes`}]});}return {title:$,project:g,generatedAt:new Date().toISOString(),groups:c,totalSymbols:d,symbolCounts:u}}function Z(s,t){let e=T(s);if(!e)return null;let a=U(e),n=a.get(t);if(!n)return null;let o=[];for(let[p,m]of a)p!==t&&m.related&&m.related.includes(n.symbol)&&o.push(m.symbol);let l=(n.related||[]).slice(),i=[],g=M(s);if(g)for(let[p,m]of Object.entries(g.flows)){let x=(m.steps||[]).map(b=>b.symbol);(x.includes(n.symbol)||x.includes(`#${t}`))&&i.push({id:p.replace(/^\$/,""),name:m.name||p});}if(e.flows)for(let[p,m]of Object.entries(e.flows)){if(i.some(b=>b.id===p))continue;let x=(m.steps||[]).map(b=>b.symbol).filter(Boolean);(x.includes(n.symbol)||x.includes(`#${t}`))&&i.push({id:p,name:m.name});}let $=[],c=D(s);if(c&&n.category==="gates"){let p=Object.keys(c.gates||{}).find(m=>m.replace(/^\^/,"")===t);p&&$.push({id:p.replace(/^\^/,""),description:c.gates[p].description});}else if(c){let p=new Set((n.related||[]).filter(m=>m.startsWith("^")));for(let[m,x]of Object.entries(c.routes||{}))for(let b of x){let I=b.replace(/^\^/,"");if(p.has(b)||p.has(`^${I}`)){let E=c.gates[b]||c.gates[`^${I}`]||c.gates[I];E&&!$.some(r=>r.id===I)&&$.push({id:I,description:E.description});}}}let u=[];if(e.aspects)for(let[p,m]of Object.entries(e.aspects))m.related&&m.related.includes(n.symbol)&&u.push(m.symbol);for(let p of n.related||[])p.startsWith("~")&&!u.includes(p)&&u.push(p);let d=[],f=N(s);if(f)for(let p of f.entries)p.symbols.includes(n.symbol)&&d.push({id:p.id,title:p.title});let h=n.parent||void 0,v=[];if(e.components)for(let p of Object.values(e.components))p.parent===n.symbol&&v.push(p.symbol);return {id:n.id,symbol:n.symbol,name:n.name,description:n.description||"",category:n.category||"components",componentType:n.componentType,tags:n.visualTags||[],path:n.path||"",related:n.related||[],referencedBy:o,references:l,flows:i,gates:$,aspects:u,guides:d,parent:h,children:v}}function q(s,t){let e=M(s),a=T(s);if(e){let n=e.flows[`$${t}`]?`$${t}`:t,o=e.flows[n];if(o){let l=(o.steps||[]).map(g=>({type:g.type||"action",symbol:g.symbol||"",description:g.description})),i=a?.flows?.[t.replace(/^\$/,"")];return {id:t.replace(/^\$/,""),symbol:`$${t.replace(/^\$/,"")}`,name:o.name||t,description:o.description,trigger:o.trigger,steps:l,successSignal:o.successSignal,errorSignal:o.errorSignal,tags:i?.visualTags||[],path:i?.path||o.definedIn||""}}}if(a?.flows){let n=t.replace(/^\$/,""),o=a.flows[n];if(o){let l=(o.steps||[]).map(i=>({type:"action",symbol:i.symbol||"",description:i.action||i.name}));return {id:n,symbol:`$${n}`,name:o.name,description:o.description,steps:l,tags:o.visualTags||[],path:o.path||""}}}return null}function tt(s){let t=D(s);if(!t)return {version:"0",gates:[],routes:[]};let e=new Map;for(let[o,l]of Object.entries(t.routes||{}))for(let i of l){let g=i.replace(/^\^/,"");e.has(g)||e.set(g,[]),e.get(g).push(o);}let a=Object.entries(t.gates||{}).map(([o,l])=>{let i=o.replace(/^\^/,"");return {symbol:`^${i}`,description:l.description,check:l.check,routes:e.get(i)||[]}}),n=Object.entries(t.routes||{}).map(([o,l])=>{let i=o.indexOf(" "),g=i>0?o.substring(0,i):"GET";return {route:i>0?o.substring(i+1):o,method:g,gates:l.map(c=>{let u=c.replace(/^\^/,""),d=t.gates[c]||t.gates[`^${u}`]||t.gates[u];return {symbol:`^${u}`,description:d?.description}})}});return {version:t.version||"1.0",gates:a,routes:n}}function et(s,t,e){let a=e||20,n=[],o=t.toLowerCase(),l=T(s);if(l){let c=U(l);for(let[u,d]of c){let f=A(d.name,d.description||"",d.visualTags||[],o);f>0&&n.push({id:d.id,kind:V(d.category),label:d.name,description:d.description||"",matchContext:_(d.name,d.description||"",o),score:f});}}let i=G(s),g=W(s,i.customContent);for(let c of g){let u=c.body.substring(0,200),d=A(c.title,u,[],o);d>0&&n.push({id:c.slug,kind:"custom",label:c.title,description:c.description||u.substring(0,100),matchContext:_(c.title,c.body,o),score:d});}let $=D(s);if($)for(let[c,u]of Object.entries($.gates||{})){let d=c.replace(/^\^/,""),f=A(d,u.description,[],o);f>0&&n.push({id:d,kind:"portal",label:`^${d}`,description:u.description,score:f});}return n.sort((c,u)=>u.score-c.score||c.label.localeCompare(u.label)),n.slice(0,a)}function A(s,t,e,a){let n=s.toLowerCase(),o=t.toLowerCase();return n===a?1:n.startsWith(a)?.8:n.includes(a)?.6:o.includes(a)?.5:e.some(l=>l.toLowerCase().includes(a))?.3:0}function _(s,t,e){let n=t.toLowerCase().indexOf(e);if(n<0)return s.toLowerCase().includes(e)?s:void 0;let o=Math.max(0,n-40),l=Math.min(t.length,n+e.length+40),i=t.substring(o,l).trim();return o>0&&(i=`...${i}`),l<t.length&&(i=`${i}...`),i}export{G as a,W as b,Y as c,Q as d,Z as e,q as f,tt as g,et as h};
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ import*as i from'fs';import*as l from'path';import*as c from'js-yaml';var f=".paradigm/university",y="content";function U(s){let t=s.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);if(!t)return null;try{return {frontmatter:c.load(t[1]),body:t[2].trim()}}catch{return null}}function j(s,t){return `---
3
+ ${c.dump(s,{lineWidth:-1,noRefs:true,sortKeys:false})}---
4
+
5
+ ${t}
6
+ `}function b(s){let t=l.join(s,f,"index.yaml");if(!i.existsSync(t))return null;try{return c.load(i.readFileSync(t,"utf8"))}catch{return null}}function h(s,t,e){let n=l.join(s,f,y);for(let r of ["notes","policies","quizzes","paths"]){let a=l.join(n,r,`${t}${e}`);if(i.existsSync(a))return a}return null}function F(s,t){let e=h(s,t,".md");if(!e)return null;try{let n=U(i.readFileSync(e,"utf8"));if(!n)return null;let r=n.frontmatter;return {frontmatter:{...r,tags:r.tags||[],symbols:r.symbols||[],prerequisites:r.prerequisites||[]},body:n.body}}catch{return null}}function z(s,t){let e=h(s,t,".yaml");if(!e)return null;try{let n=c.load(i.readFileSync(e,"utf8"));return n?.id?{...n,tags:n.tags||[],symbols:n.symbols||[],questions:n.questions||[]}:null}catch{return null}}function D(s,t){let e=h(s,t,".yaml");if(!e)return null;try{let n=c.load(i.readFileSync(e,"utf8"));return n?.id?n:null}catch{return null}}function w(s,t){let e=l.join(s,f,"diplomas");if(!i.existsSync(e))return [];let n=[];try{for(let r of i.readdirSync(e).filter(a=>a.endsWith(".yaml")))try{let a=c.load(i.readFileSync(l.join(e,r),"utf8"));if(!a?.id||t?.student&&a.student!==t.student||t?.type&&a.type!==t.type)continue;n.push(a);}catch{}}catch{}return n.sort((r,a)=>a.earnedAt.localeCompare(r.earnedAt))}function I(s,t,e){let n=t.type==="policy"?"policies":"notes",r=l.join(s,f,y,n);i.mkdirSync(r,{recursive:true});let a=l.join(r,`${t.id}.md`);return i.writeFileSync(a,j(t,e),"utf8"),a}function $(s,t){let e=l.join(s,f,y,"quizzes");i.mkdirSync(e,{recursive:true});let n=l.join(e,`${t.id}.yaml`);return i.writeFileSync(n,c.dump(t,{lineWidth:-1,noRefs:true}),"utf8"),n}function k(s,t){let e=l.join(s,f,"diplomas");i.mkdirSync(e,{recursive:true});let n=l.join(e,`${t.id}.yaml`);return i.writeFileSync(n,c.dump(t,{lineWidth:-1,noRefs:true}),"utf8"),n}function q(s){let t=l.join(s,f),e=l.join(t,y),n=[];for(let u of ["notes","policies"]){let o=l.join(e,u);if(i.existsSync(o))try{for(let p of i.readdirSync(o).filter(m=>m.endsWith(".md")))try{let m=i.readFileSync(l.join(o,p),"utf8"),S=U(m);if(!S)continue;let d=S.frontmatter;n.push({id:d.id||p.replace(".md",""),title:d.title||p,type:d.type||(u==="policies"?"policy":"note"),author:d.author||"unknown",created:d.created||"",updated:d.updated||"",tags:Array.isArray(d.tags)?d.tags:[],symbols:Array.isArray(d.symbols)?d.symbols:[],difficulty:d.difficulty||"beginner",file:`${y}/${u}/${p}`});}catch{}}catch{}}let r=l.join(e,"quizzes");if(i.existsSync(r))try{for(let u of i.readdirSync(r).filter(o=>o.endsWith(".yaml")))try{let o=c.load(i.readFileSync(l.join(r,u),"utf8"));if(!o?.id)continue;n.push({id:o.id,title:o.title||u,type:"quiz",author:o.author||"unknown",created:o.created||"",updated:o.updated||"",tags:o.tags||[],symbols:o.symbols||[],difficulty:o.difficulty||"beginner",file:`${y}/quizzes/${u}`});}catch{}}catch{}let a=l.join(e,"paths");if(i.existsSync(a))try{for(let u of i.readdirSync(a).filter(o=>o.endsWith(".yaml")))try{let o=c.load(i.readFileSync(l.join(a,u),"utf8"));if(!o?.id)continue;n.push({id:o.id,title:o.title||u,type:"path",author:o.author||"unknown",created:o.created||"",updated:o.updated||"",tags:o.tags||[],symbols:[],file:`${y}/paths/${u}`});}catch{}}catch{}let g=0,v=l.join(t,"diplomas");if(i.existsSync(v))try{g=i.readdirSync(v).filter(u=>u.endsWith(".yaml")).length;}catch{}let x={version:"1.0",generatedAt:new Date().toISOString(),totalContent:n.length,entries:n,diplomaCount:g};return i.mkdirSync(t,{recursive:true}),i.writeFileSync(l.join(t,"index.yaml"),c.dump(x,{lineWidth:-1,noRefs:true}),"utf8"),x}function Q(s,t){let e=b(s);if(!e)return [];let n=[...e.entries];if(t.type&&(n=n.filter(r=>r.type===t.type)),t.tag&&(n=n.filter(r=>r.tags.some(a=>a.startsWith(t.tag)))),t.difficulty&&(n=n.filter(r=>r.difficulty===t.difficulty)),t.symbol&&(n=n.filter(r=>r.symbols.includes(t.symbol))),t.query){let r=t.query.toLowerCase();n=n.filter(a=>a.title.toLowerCase().includes(r)||a.id.toLowerCase().includes(r));}return n.slice(0,t.limit||20)}export{b as a,F as b,z as c,D as d,w as e,I as f,$ as g,k as h,q as i,Q as j};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import*as i from'fs';import*as o from'path';import*as d from'js-yaml';var u=".paradigm/tasks",m="entries",P="index.yaml";function b(n,t){let s=o.join(n,u,m,t);if(!i.existsSync(s))return `T-${t}-001`;let e=i.readdirSync(s).filter(a=>a.startsWith("T-")&&a.endsWith(".yaml")).map(a=>{let l=a.match(/T-\d{4}-\d{2}-\d{2}-(\d+)\.yaml/);return l?parseInt(l[1],10):0}),r=e.length>0?Math.max(...e)+1:1;return `T-${t}-${String(r).padStart(3,"0")}`}var k={high:0,medium:1,low:2};function w(n,t){let s=n;return t.status&&t.status!=="all"&&(s=s.filter(e=>e.status===t.status)),t.priority&&(s=s.filter(e=>e.priority===t.priority)),t.tag&&(s=s.filter(e=>e.tags.includes(t.tag))),s.sort((e,r)=>{let a=(k[e.priority]??1)-(k[r.priority]??1);return a!==0?a:new Date(r.created).getTime()-new Date(e.created).getTime()}),t.limit&&(s=s.slice(0,t.limit)),s}async function _(n,t){let s=o.join(n,u,m);if(!i.existsSync(s))return [];let e={status:"open",limit:20,...t},r=[],a=i.readdirSync(s).filter(l=>/^\d{4}-\d{2}-\d{2}$/.test(l)).sort().reverse();for(let l of a){let f=o.join(s,l),p=i.readdirSync(f).filter(c=>c.endsWith(".yaml")).sort();for(let c of p)try{let g=i.readFileSync(o.join(f,c),"utf8"),y=d.load(g);r.push(y);}catch{}}return w(r,e)}async function v(n,t){let s=t.match(/^T-(\d{4}-\d{2}-\d{2})-/);if(s){let r=o.join(n,u,m,s[1],`${t}.yaml`);if(i.existsSync(r))try{return d.load(i.readFileSync(r,"utf8"))}catch{return null}}return (await _(n,{status:"all",limit:9999})).find(r=>r.id===t)||null}async function I(n,t){let s=new Date,e=s.toISOString().slice(0,10),r=o.join(n,u,m,e);i.mkdirSync(r,{recursive:true});let a=b(n,e),l={id:a,blurb:t.blurb,priority:t.priority||"medium",status:"open",tags:t.tags||[],created:s.toISOString(),session_link:t.session_link,related_lore:t.related_lore};return i.writeFileSync(o.join(r,`${a}.yaml`),d.dump(l,{lineWidth:-1,noRefs:true})),await x(n),a}async function S(n,t,s){let e=await v(n,t);if(!e)return false;let r=e.created.slice(0,10),a=o.join(n,u,m,r,`${t}.yaml`);if(!i.existsSync(a))return false;let{id:l,created:f,...p}=s,c={...e,...p};return i.writeFileSync(a,d.dump(c,{lineWidth:-1,noRefs:true})),await x(n),true}async function j(n,t){return S(n,t,{status:"done",completed:new Date().toISOString()})}async function F(n,t){return S(n,t,{status:"shelved",shelved:new Date().toISOString()})}async function x(n){let t=o.join(n,u,m),s=o.join(n,u),e=0,r=0,a=0,l=0;if(i.existsSync(t)){let p=i.readdirSync(t).filter(c=>/^\d{4}-\d{2}-\d{2}$/.test(c));for(let c of p){let g=o.join(t,c),y=i.readdirSync(g).filter(h=>h.endsWith(".yaml"));for(let h of y)try{let T=d.load(i.readFileSync(o.join(g,h),"utf8"));e++,T.status==="open"?r++:T.status==="done"?a++:T.status==="shelved"&&l++;}catch{}}}let f={version:"1.0",total:e,open:r,done:a,shelved:l,last_updated:new Date().toISOString()};return i.mkdirSync(s,{recursive:true}),i.writeFileSync(o.join(s,P),d.dump(f,{lineWidth:-1,noRefs:true})),f}export{_ as a,v as b,I as c,S as d,j as e,F as f,x as g};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ var i={opus:{input:15,output:75},sonnet:{input:3,output:15},haiku:{input:.25,output:1.25}};function s(e,n){let t=i[n],o=e.input/1e6*t.input,r=e.output/1e6*t.output;return o+r}function a(e){return e<.01?`$${(e*100).toFixed(3)}\xA2`:`$${e.toFixed(4)}`}function u(e){return e>=1e6?`${(e/1e6).toFixed(2)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:e.toString()}export{i as a,s as b,a as c,u as d};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import*as d from'fs';import*as l from'path';import*as c from'js-yaml';var m=[{id:"explore-before-implement",name:"Explore Before Implementing",description:"Call ripple/navigate/search before modifying existing symbols to understand impact",category:"discovery",trigger:"preflight",severity:"advisory",check:{type:"tool-called",params:{tools:["paradigm_ripple","paradigm_navigate","paradigm_search","paradigm_related"]}},enabled:true},{id:"ripple-before-modify",name:"Ripple Before Modifying",description:"Run ripple analysis before modifying symbols with dependents",category:"discovery",trigger:"preflight",severity:"advisory",check:{type:"tool-called",params:{tools:["paradigm_ripple"]}},enabled:true},{id:"check-fragility",name:"Check Fragility",description:"Check history fragility for symbols before modifying frequently-broken code",category:"discovery",trigger:"preflight",severity:"advisory",check:{type:"tool-called",params:{tools:["paradigm_history_fragility"]}},enabled:true},{id:"wisdom-before-implement",name:"Check Team Wisdom",description:"Check team wisdom (preferences, antipatterns, decisions) before implementing",category:"collaboration",trigger:"preflight",severity:"advisory",check:{type:"tool-called",params:{tools:["paradigm_wisdom_context","paradigm_wisdom_expert"]}},enabled:true},{id:"verify-before-done",name:"Verify Before Done",description:"Run postflight compliance checks before finishing a session",category:"verification",trigger:"on-stop",severity:"warn",check:{type:"tool-called",params:{tools:["paradigm_pm_postflight"]}},enabled:true},{id:"postflight-compliance",name:"Postflight Compliance",description:"Ensure postflight checks pass without errors before finishing",category:"verification",trigger:"on-stop",severity:"advisory",check:{type:"tool-called",params:{tools:["paradigm_pm_postflight","paradigm_reindex"]}},enabled:true},{id:"test-new-components",name:"Test New Components",description:"New components should have associated tests or test plan documented",category:"testing",trigger:"postflight",severity:"advisory",check:{type:"tests-exist",params:{patterns:["**/*.test.*","**/*.spec.*","**/tests/**"]}},enabled:true},{id:"purpose-coverage",name:"Purpose File Coverage",description:"All modified source directories should have .purpose file coverage",category:"documentation",trigger:"postflight",severity:"warn",check:{type:"file-exists",params:{patterns:["**/.purpose"]}},enabled:true},{id:"record-lore-for-significant",name:"Record Lore for Significant Changes",description:"Sessions modifying 3+ files should record a lore entry",category:"documentation",trigger:"on-stop",severity:"warn",check:{type:"lore-recorded",params:{}},enabled:true},{id:"gates-for-routes",name:"Gates for Routes",description:"API routes should have corresponding gate declarations in portal.yaml",category:"security",trigger:"postflight",severity:"warn",check:{type:"gates-declared",params:{requireRoutes:true}},enabled:true},{id:"commit-message-symbols",name:"Commit Message Format",description:"Commit messages should follow type(#symbol): format and include a Symbols: trailer",category:"documentation",trigger:"on-commit",severity:"advisory",check:{type:"commit-message-format",params:{messagePatterns:["^(feat|fix|refactor|chore|docs|test|style|perf|ci|build)\\(","Symbols:"]}},enabled:true},{id:"flow-coverage-for-multi-component",name:"Flow Coverage",description:"Changes spanning 3+ components should have a documented $flow",category:"documentation",trigger:"postflight",severity:"advisory",check:{type:"flow-coverage",params:{minSteps:3}},enabled:true},{id:"context-session-awareness",name:"Context Awareness",description:"Use session recovery or context check tools for session continuity",category:"discovery",trigger:"preflight",severity:"advisory",check:{type:"context-checked",params:{contextTools:["paradigm_context_check","paradigm_session_recover","paradigm_session_checkpoint"]}},enabled:true},{id:"aspect-anchors-valid",name:"Aspect Anchors Valid",description:"Aspects touched during the session should have their code anchors validated",category:"verification",trigger:"postflight",severity:"advisory",check:{type:"aspect-anchored",params:{checkAnchors:true}},enabled:true}];var C=m,_=30*1e3;function k(e){try{let t=l.join(e,".paradigm","config.yaml");if(d.existsSync(t)){let s=d.readFileSync(t,"utf8"),o=c.load(s)?.limits;if(o?.habitsCacheTtlMs&&typeof o.habitsCacheTtlMs=="number")return o.habitsCacheTtlMs}}catch{}return _}var f=new Map;function E(e){let t=l.resolve(e),s=f.get(t),i=k(t);if(s&&Date.now()-s.loadedAt<i)return s.habits;let o=T(t);return f.set(t,{habits:o,loadedAt:Date.now()}),o}function T(e){let t=new Map;for(let a of C)t.set(a.id,{...a});let s=process.env.HOME||process.env.USERPROFILE||"~",i=y(l.join(s,".paradigm","habits.yaml"));i&&v(t,i);let o=h(l.join(s,".paradigm","habits"));for(let a of o)t.set(a.id,a);let r=y(l.join(e,".paradigm","habits.yaml"));r&&v(t,r);let u=h(l.join(e,".paradigm","habits"));for(let a of u)t.set(a.id,a);return Array.from(t.values())}function h(e){if(!d.existsSync(e))return [];try{let t=d.readdirSync(e).filter(i=>i.endsWith(".habit")).sort(),s=[];for(let i of t)try{let o=d.readFileSync(l.join(e,i),"utf8"),r=c.load(o);r?.id&&r?.name&&s.push(r);}catch{}return s}catch{return []}}function y(e){if(!d.existsSync(e))return null;try{let t=d.readFileSync(e,"utf8");return c.load(t)}catch{return null}}function v(e,t){if(t.habits)for(let s of t.habits)e.set(s.id,{...s});if(t.overrides)for(let[s,i]of Object.entries(t.overrides)){let o=e.get(s);o&&D(o,i);}}function D(e,t){t.severity!==void 0&&(e.severity=t.severity),t.enabled!==void 0&&(e.enabled=t.enabled);}function p(e,t){return e.filter(s=>s.enabled&&s.trigger===t)}function M(e){return e.filter(t=>t.enabled)}function x(e){let t=l.resolve(e);f.delete(t);}function R(e,t,s){let i=p(e,t),o=[];for(let n of i){let H=F(n,s);o.push(H);}let r=o.filter(n=>n.result==="followed").length,u=o.filter(n=>n.result==="skipped").length,a=o.filter(n=>n.result==="partial").length,g=o.filter(n=>n.result==="skipped"&&n.habit.severity==="block").length;return {trigger:t,evaluations:o,summary:{total:o.length,followed:r,skipped:u,partial:a,blockingViolations:g},blocksCompletion:g>0}}function F(e,t){switch(e.check.type){case "tool-called":return A(e,t);case "file-exists":return P(e,t);case "lore-recorded":return j(e,t);case "symbols-registered":return S(e,t);case "gates-declared":return W(e,t);case "tests-exist":return $(e,t);case "file-modified":return N(e,t);case "git-clean":return q(e,t);case "commit-message-format":return B(e,t);case "flow-coverage":return I(e,t);case "context-checked":return O(e,t);case "aspect-anchored":return U(e,t);default:return {habit:e,result:"partial",reason:`Unknown check type: ${e.check.type}`}}}function A(e,t){let s=e.check.params.tools||[];if(s.length===0)return {habit:e,result:"followed",reason:"No tools required"};let i=s.filter(o=>t.toolsCalled.includes(o));return i.length>0?{habit:e,result:"followed",reason:`Called: ${i.join(", ")}`,evidence:i}:t.filesModified.length===0&&t.symbolsTouched.length===0?{habit:e,result:"followed",reason:"No modifications made, habit not applicable"}:{habit:e,result:"skipped",reason:`None of [${s.join(", ")}] were called before modifying code`}}function P(e,t){if(t.filesModified.length===0)return {habit:e,result:"followed",reason:"No files modified, check not applicable"};if(t.filesModified.some(o=>o.endsWith(".purpose")||o.includes(".paradigm/")))return {habit:e,result:"followed",reason:"Purpose files were updated alongside source changes"};let i=t.filesModified.filter(o=>!o.endsWith(".md")&&!o.endsWith(".json")&&!o.endsWith(".yaml")&&!o.endsWith(".yml")&&!o.endsWith(".lock")&&!o.endsWith(".purpose")&&!o.includes(".paradigm/"));return i.length===0?{habit:e,result:"followed",reason:"Only non-source files modified"}:{habit:e,result:"skipped",reason:`${i.length} source file(s) modified without .purpose updates`,evidence:i.slice(0,5)}}function j(e,t){let s=t.filesModified.filter(i=>!i.endsWith(".md")&&!i.endsWith(".json")&&!i.endsWith(".yaml")&&!i.endsWith(".yml")&&!i.endsWith(".lock")&&!i.endsWith(".purpose")&&!i.includes(".paradigm/"));return s.length<3?{habit:e,result:"followed",reason:"Session not significant enough to require lore (< 3 source files)"}:t.loreRecorded?{habit:e,result:"followed",reason:"Lore entry was recorded for this session"}:t.toolsCalled.includes("paradigm_lore_record")?{habit:e,result:"followed",reason:"paradigm_lore_record was called during session"}:{habit:e,result:"skipped",reason:`${s.length} source files modified but no lore entry recorded`,evidence:s.slice(0,5)}}function S(e,t){if(t.symbolsTouched.length===0)return {habit:e,result:"followed",reason:"No symbols touched"};let i=["paradigm_purpose_add_component","paradigm_purpose_add_signal","paradigm_purpose_add_flow","paradigm_purpose_add_gate","paradigm_purpose_add_aspect","paradigm_purpose_add_state","paradigm_purpose_init"].filter(o=>t.toolsCalled.includes(o));return i.length>0?{habit:e,result:"followed",reason:`Purpose tools called: ${i.join(", ")}`,evidence:i}:{habit:e,result:"partial",reason:`${t.symbolsTouched.length} symbol(s) touched but no purpose registration tools called`}}function W(e,t){if(!t.taskAddsRoutes)return {habit:e,result:"followed",reason:"Task does not add routes"};if(t.hasPortalRoutes)return {habit:e,result:"followed",reason:"Portal.yaml has route declarations"};let i=["paradigm_gates_for_route","paradigm_portal_add_route","paradigm_portal_add_gate"].filter(o=>t.toolsCalled.includes(o));return i.length>0?{habit:e,result:"followed",reason:`Gate tools called: ${i.join(", ")}`,evidence:i}:{habit:e,result:"skipped",reason:"Task adds routes but no gate declarations or portal tools called"}}function $(e,t){if(t.filesModified.length===0)return {habit:e,result:"followed",reason:"No files modified"};let s=t.filesModified.filter(o=>o.includes(".test.")||o.includes(".spec.")||o.includes("/tests/")||o.includes("/test/")||o.includes("__tests__"));if(s.length>0)return {habit:e,result:"followed",reason:`Test files modified: ${s.length}`,evidence:s.slice(0,5)};let i=t.filesModified.filter(o=>!o.endsWith(".md")&&!o.endsWith(".json")&&!o.endsWith(".yaml")&&!o.endsWith(".lock")&&!o.endsWith(".purpose")&&!o.includes(".paradigm/")&&!o.includes("node_modules/"));return i.length===0?{habit:e,result:"followed",reason:"No new source files to test"}:{habit:e,result:"partial",reason:`${i.length} source file(s) modified but no test files updated`,evidence:i.slice(0,5)}}function N(e,t){if(t.filesModified.length===0)return {habit:e,result:"followed",reason:"No files modified"};let s=e.check.params.patterns||[];if(s.length===0)return {habit:e,result:"followed",reason:"No patterns specified"};let i=t.filesModified.filter(o=>s.some(r=>o.includes(r)||l.basename(o)===r));return i.length>0?{habit:e,result:"followed",reason:`Matching files: ${i.join(", ")}`,evidence:i}:{habit:e,result:"skipped",reason:`None of [${s.join(", ")}] found in modified files`}}function q(e,t){return t.filesModified.length===0?{habit:e,result:"followed",reason:"No files modified"}:t.gitClean===void 0?{habit:e,result:"partial",reason:"Git status not available"}:t.gitClean?{habit:e,result:"followed",reason:"Working tree is clean \u2014 changes committed"}:{habit:e,result:"skipped",reason:"Uncommitted changes in working tree"}}function B(e,t){if(!t.commitMessage)return {habit:e,result:"followed",reason:"No commit message to check (not a commit trigger)"};let s=e.check.params.messagePatterns||["^(feat|fix|refactor|chore|docs|test|style|perf|ci|build)\\(","Symbols:"],i=s.filter(o=>new RegExp(o,"m").test(t.commitMessage));if(i.length===s.length)return {habit:e,result:"followed",reason:"Commit message matches all required patterns",evidence:i};if(i.length>0){let o=s.filter(r=>!new RegExp(r,"m").test(t.commitMessage));return {habit:e,result:"partial",reason:`Commit message matches ${i.length}/${s.length} patterns. Missing: ${o.join(", ")}`}}return {habit:e,result:"skipped",reason:"Commit message does not match required format patterns"}}function I(e,t){let s=t.symbolsTouched.filter(r=>r.startsWith("#"));if(s.length<3)return {habit:e,result:"followed",reason:"Fewer than 3 components touched \u2014 flow not required"};if(t.hasFlowCoverage)return {habit:e,result:"followed",reason:"Flow coverage exists for multi-component changes"};let o=["paradigm_flow_validate","paradigm_flows_affected","paradigm_purpose_add_flow"].filter(r=>t.toolsCalled.includes(r));return o.length>0?{habit:e,result:"followed",reason:`Flow tools called: ${o.join(", ")}`,evidence:o}:{habit:e,result:"skipped",reason:`${s.length} components touched without flow coverage or flow tools called`,evidence:s.slice(0,5)}}function O(e,t){let i=(e.check.params.contextTools||["paradigm_context_check","paradigm_session_recover","paradigm_session_checkpoint"]).filter(o=>t.toolsCalled.includes(o));return i.length>0?{habit:e,result:"followed",reason:`Context tools called: ${i.join(", ")}`,evidence:i}:t.filesModified.length===0&&t.symbolsTouched.length===0?{habit:e,result:"followed",reason:"No modifications made, context check not applicable"}:{habit:e,result:"skipped",reason:"No context/session tools called during session"}}function U(e,t){let s=t.symbolsTouched.filter(i=>i.startsWith("~"));return s.length===0?{habit:e,result:"followed",reason:"No aspects touched"}:t.aspectAnchorsValid===true?{habit:e,result:"followed",reason:"Aspect anchors validated and valid"}:t.toolsCalled.includes("paradigm_aspect_check")?{habit:e,result:"followed",reason:"paradigm_aspect_check was called to validate anchors"}:{habit:e,result:"skipped",reason:`${s.length} aspect(s) touched without anchor validation`,evidence:s.slice(0,5)}}function V(e){return {toolsCalled:e.toolsCalled||[],filesModified:e.filesModified||[],symbolsTouched:e.symbolsTouched||[],loreRecorded:e.loreRecorded||false,hasPortalRoutes:e.hasPortalRoutes||false,taskAddsRoutes:e.taskAddsRoutes||false,taskDescription:e.taskDescription,gitClean:e.gitClean,commitMessage:e.commitMessage,hasFlowCoverage:e.hasFlowCoverage,aspectAnchorsValid:e.aspectAnchorsValid}}export{E as a,M as b,x as c,R as d,V as e};
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import*as i from'fs';import*as b from'path';import*as l from'js-yaml';var p=class{logsDir;currentLog=null;constructor(t){this.logsDir=b.join(t,".paradigm","orchestrations");}startOrchestration(t,s,o){return this.ensureLogsDir(),this.currentLog={id:t,task:s,mode:o,started:new Date().toISOString(),status:"running",agents:[],totals:{duration_ms:0,tokens:0,cost_usd:0,agents_spawned:0,files_created:0,files_modified:0}},this.currentLog}logAgentCompletion(t,s){if(this.currentLog&&this.currentLog.id===t){this.currentLog.agents.push(s),this.currentLog.totals.agents_spawned++,this.currentLog.totals.tokens+=s.tokens.total,this.currentLog.totals.cost_usd+=s.cost_usd;for(let o of s.artifacts)o.action==="created"?this.currentLog.totals.files_created++:o.action==="modified"&&this.currentLog.totals.files_modified++;}}completeOrchestration(t,s){if(!this.currentLog)return null;this.currentLog.completed=new Date().toISOString(),this.currentLog.status=t,this.currentLog.totals.duration_ms=s,this.saveOrchestration(this.currentLog);let o=this.currentLog;return this.currentLog=null,o}saveOrchestration(t){this.ensureLogsDir();let s=`${t.started.slice(0,10)}-${this.sanitizeFilename(t.task)}.yaml`,o=b.join(this.logsDir,s),a=l.dump(t,{lineWidth:-1,noRefs:true,quotingType:'"'});i.writeFileSync(o,a);}loadOrchestration(t){let s=this.listLogFiles();for(let o of s)try{let a=i.readFileSync(o,"utf-8"),e=l.load(a);if(e.id===t)return e}catch{}return null}listOrchestrations(t){let s=this.listLogFiles(),o=[];for(let a of s)try{let e=i.readFileSync(a,"utf-8"),r=l.load(e);if(t?.from&&new Date(r.started)<t.from||t?.to&&new Date(r.started)>t.to||t?.status&&r.status!==t.status)continue;o.push({id:r.id,task:r.task,mode:r.mode,started:r.started,status:r.status,agents_spawned:r.totals.agents_spawned,tokens:r.totals.tokens,cost_usd:r.totals.cost_usd,duration_ms:r.totals.duration_ms});}catch{}return o.sort((a,e)=>new Date(e.started).getTime()-new Date(a.started).getTime()),t?.limit?o.slice(0,t.limit):o}getCostSummary(t,s){let o=this.listOrchestrations({from:t,to:s}),a=this.listLogFiles(),e=0,r=0,c={},d={},g={};for(let m of a)try{let f=i.readFileSync(m,"utf-8"),u=l.load(f),L=new Date(u.started);if(t&&L<t||s&&L>s)continue;e+=u.totals.cost_usd,r+=u.totals.tokens;let h=u.started.slice(0,10);g[h]||(g[h]={cost:0,tokens:0}),g[h].cost+=u.totals.cost_usd,g[h].tokens+=u.totals.tokens;for(let n of u.agents)c[n.name]||(c[n.name]={tokens:0,cost:0,count:0}),c[n.name].tokens+=n.tokens.total,c[n.name].cost+=n.cost_usd,c[n.name].count++,d[n.model]||(d[n.model]={tokens:0,cost:0,count:0}),d[n.model].tokens+=n.tokens.total,d[n.model].cost+=n.cost_usd,d[n.model].count++;}catch{}let k=Object.entries(g).map(([m,f])=>({date:m,...f})).sort((m,f)=>m.date.localeCompare(f.date));return {totalCost:e,totalTokens:r,orchestrationCount:o.length,byAgent:c,byModel:d,byDay:k}}exportToJson(t){let s=this.listLogFiles(),o=[];for(let a of s)try{let e=i.readFileSync(a,"utf-8"),r=l.load(e),c=new Date(r.started);if(t?.from&&c<t.from||t?.to&&c>t.to)continue;o.push(r);}catch{}return JSON.stringify(o,null,2)}exportToCsv(t){let s=this.listOrchestrations(t),o=["id","task","mode","started","status","agents_spawned","tokens","cost_usd","duration_ms"],a=s.map(e=>[e.id,`"${e.task.replace(/"/g,'""')}"`,e.mode,e.started,e.status,e.agents_spawned,e.tokens,e.cost_usd.toFixed(4),e.duration_ms]);return [o.join(","),...a.map(e=>e.join(","))].join(`
3
+ `)}ensureLogsDir(){i.existsSync(this.logsDir)||i.mkdirSync(this.logsDir,{recursive:true});}listLogFiles(){return i.existsSync(this.logsDir)?i.readdirSync(this.logsDir).filter(t=>t.endsWith(".yaml")).map(t=>b.join(this.logsDir,t)):[]}sanitizeFilename(t){return t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,50)}};export{p as a};