@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,59 @@
1
+ #!/usr/bin/env node
2
+ import'./chunk-5TAVYPOV.js';import*as o from'fs';import*as p from'path';import s from'chalk';import we from'ora';import*as F from'js-yaml';import {createRequire}from'module';function K(e,...t){return o.existsSync(p.join(e,...t))}function z(e,...t){o.mkdirSync(p.join(e,...t),{recursive:true});}function A(e){let t=p.join(e,".paradigm","config.yaml");if(!o.existsSync(t))return null;try{return F.load(o.readFileSync(t,"utf8"))}catch{return null}}function I(e){let t=p.join(e,".paradigm","config.yaml");return o.existsSync(t)?o.readFileSync(t,"utf8"):null}function x(e,t){o.writeFileSync(p.join(e,".paradigm","config.yaml"),t,"utf8");}function G(e){try{let t=n=>{let i=o.readdirSync(n,{withFileTypes:!0});for(let r of i)if(r.isDirectory()){if(t(p.join(n,r.name)))return !0}else if(r.name.endsWith(".yaml")&&!r.name.endsWith(".migrated")&&r.name!=="index.yaml"&&r.name!=="arc.yaml")return !0;return !1};return t(e)}catch{return false}}function D(e,t){return t in e||t.replace(/-/g,"_")in e||t.replace(/_/g,"-")in e}var Q={id:"legacy-file-to-directory",introducedIn:"1.0.0",description:"Convert .paradigm file to .paradigm/ directory",category:"directory",auto:true,async check(e){let t=p.join(e,".paradigm");return o.existsSync(t)?o.statSync(t).isFile()?{needed:true,reason:".paradigm is a file, not a directory",details:["Legacy format \u2014 must convert to directory"]}:{needed:false,reason:".paradigm/ is already a directory"}:{needed:false,reason:"No .paradigm found"}},async apply(e,t){if(t.dryRun)return {status:"skipped",message:"Would convert .paradigm file to directory"};let n=p.join(e,".paradigm"),i=p.join(e,".paradigm.backup"),r=o.readFileSync(n,"utf8");return o.copyFileSync(n,i),o.unlinkSync(n),o.mkdirSync(n,{recursive:true}),o.mkdirSync(p.join(n,"specs"),{recursive:true}),o.mkdirSync(p.join(n,"docs"),{recursive:true}),o.mkdirSync(p.join(n,"prompts"),{recursive:true}),o.writeFileSync(p.join(n,"config.yaml"),r,"utf8"),{status:"applied",message:"Converted .paradigm file to directory (backup at .paradigm.backup)",filesCreated:[".paradigm/",".paradigm/config.yaml",".paradigm/specs/",".paradigm/docs/",".paradigm/prompts/"]}}},X={id:"legacy-scan-index-location",introducedIn:"1.0.0",description:"Move .paradigm-scan-index.json into .paradigm/",category:"format",auto:true,async check(e){let t=p.join(e,".paradigm-scan-index.json");return o.existsSync(t)?{needed:true,reason:"Scan index at root level needs relocation"}:{needed:false,reason:"No legacy scan index at root"}},async apply(e,t){if(t.dryRun)return {status:"skipped",message:"Would move .paradigm-scan-index.json"};let n=p.join(e,".paradigm-scan-index.json"),i=p.join(e,".paradigm","scan-index.json");return o.renameSync(n,i),{status:"applied",message:"Moved scan index into .paradigm/",filesModified:[".paradigm/scan-index.json"]}}};function w(e,t,n,i,r){return {id:e,introducedIn:t,description:i,category:"directory",auto:true,async check(a){return K(a,".paradigm",n)?{needed:false,reason:`.paradigm/${n}/ already exists`}:{needed:true,reason:`Missing .paradigm/${n}/`,details:r}},async apply(a,d){return d.dryRun?{status:"skipped",message:`Would create .paradigm/${n}/`}:(z(a,".paradigm",n),{status:"applied",message:`Created .paradigm/${n}/`,filesCreated:[`.paradigm/${n}/`]})}}}var Z=w("add-specs-directory","3.0.0","specs","Create .paradigm/specs/ for specifications",["Stores logger spec, symbols spec, scan spec, etc."]),ee=w("add-docs-directory","3.0.0","docs","Create .paradigm/docs/ for documentation",["Stores commands, patterns, troubleshooting docs"]),te=w("add-prompts-directory","3.0.0","prompts","Create .paradigm/prompts/ for task templates",["Stores add-feature, refactor, trace-flow prompts"]),ne={id:"add-tag-bank-config",introducedIn:"3.2.0",description:"Add tag-bank section to config.yaml",category:"config",auto:true,async check(e){let t=A(e);return t?D(t,"tag-bank")?{needed:false,reason:"tag-bank already configured"}:{needed:true,reason:"Missing tag-bank configuration"}:{needed:false,reason:"No config.yaml found"}},async apply(e,t){if(t.dryRun)return {status:"skipped",message:"Would add tag-bank to config.yaml"};let n=I(e);return n?(x(e,n.trimEnd()+`
3
+ `+`
4
+ # Tag bank configuration
5
+ tag-bank:
6
+ file: tags.yaml
7
+ core-tags:
8
+ - feature
9
+ - integration
10
+ - state
11
+ - idea
12
+ - deprecated
13
+ - critical
14
+ - security
15
+ - compliance
16
+ allow-suggestions: true
17
+ `),{status:"applied",message:"Added tag-bank to config.yaml",filesModified:[".paradigm/config.yaml"]}):{status:"error",message:"Cannot read config.yaml"}}},se={id:"add-purpose-required-config",introducedIn:"3.3.0",description:"Add purpose-required patterns to config.yaml",category:"config",auto:true,async check(e){let t=A(e);return t?D(t,"purpose-required")?{needed:false,reason:"purpose-required already configured"}:{needed:true,reason:"Missing purpose-required patterns"}:{needed:false,reason:"No config.yaml found"}},async apply(e,t){if(t.dryRun)return {status:"skipped",message:"Would add purpose-required to config.yaml"};let n=I(e);return n?(x(e,n.trimEnd()+`
18
+ `+`
19
+ # Where .purpose files should exist
20
+ purpose-required:
21
+ - pattern: "src/*"
22
+ depth: 1
23
+ - pattern: "lib/*"
24
+ depth: 1
25
+ - pattern: "packages/*"
26
+ depth: 1
27
+ `),{status:"applied",message:"Added purpose-required to config.yaml",filesModified:[".paradigm/config.yaml"]}):{status:"error",message:"Cannot read config.yaml"}}},re=w("add-lore-directory","3.7.0","lore","Create .paradigm/lore/ for project reflections and decisions",["Stores lore entries (reflections, decisions, arcs)"]),oe=w("add-tasks-directory","3.8.0","tasks","Create .paradigm/tasks/ for work item tracking",["Stores task YAML files for persistent task management"]),ie=w("add-personas-directory","3.9.0","personas","Create .paradigm/personas/ for actor-driven journey testing",["Stores .persona files with traits, triggers, fixtures, journey steps"]),ae=w("add-protocols-directory","3.10.0","protocols","Create .paradigm/protocols/ for repeatable implementation patterns",["Stores protocol YAML files captured from implementation workflows"]),ce=w("add-habits-directory","3.14.0","habits","Create .paradigm/habits/ for session habit tracking"),de=w("add-wisdom-directory","3.5.0","wisdom","Create .paradigm/wisdom/ for antipatterns and team knowledge",["Stores antipatterns.yaml and other team knowledge files"]),le=w("add-history-directory","3.6.0","history","Create .paradigm/history/ for symbol change history",["Stores log.jsonl for commit-level symbol tracking"]),pe={id:"migrate-assessments-to-lore",introducedIn:"3.19.0",description:"Convert old assessment entries to lore format",category:"schema",auto:false,async check(e){let t=p.join(e,".paradigm","assessments");if(!o.existsSync(t))return {needed:false,reason:"No assessments directory found"};try{return G(t)?{needed:!0,reason:"Unmigrated assessment entries found",details:["Run: paradigm lore migrate-assessments --dry-run"]}:{needed:!1,reason:"All assessments already migrated"}}catch{return {needed:false,reason:"Cannot read assessments directory"}}},async apply(e,t){return {status:"skipped",message:"Run `paradigm lore migrate-assessments` manually"}}},ge={id:"add-component-types-config",introducedIn:"3.33.0",description:"Add component_types glossary to config.yaml",category:"config",auto:true,async check(e){let t=A(e);return t?D(t,"component_types")?{needed:false,reason:"component_types already configured"}:{needed:true,reason:"Missing component_types glossary"}:{needed:false,reason:"No config.yaml found"}},async apply(e,t){if(t.dryRun)return {status:"skipped",message:"Would add component_types to config.yaml"};let n=I(e);return n?(x(e,n.trimEnd()+`
28
+ `+`
29
+ # Component types glossary \u2014 defines the project vocabulary for the \`type\` field on components
30
+ component_types:
31
+ command: "CLI command handler \u2014 registers subcommand, parses args, calls core logic"
32
+ tool: "MCP tool definition + handler \u2014 serves AI agents via JSON-RPC"
33
+ utility: "Shared helper function or module \u2014 no side effects, pure logic"
34
+ engine: "Stateful processing core \u2014 owns data transformation lifecycle"
35
+ loader: "Reads and parses data sources into typed structures"
36
+ writer: "Writes structured data to files (YAML, JSON)"
37
+ service: "Business logic coordinator \u2014 orchestrates tools, loaders, writers"
38
+ model: "Data shape \u2014 TypeScript interface or type definition"
39
+ view: "UI rendering unit \u2014 SwiftUI view, React component"
40
+ provider: "Protocol-conforming platform capability wrapper \u2014 owns lifecycle"
41
+ manager: "Stateful coordinator that owns child lifecycles"
42
+ detector: "Observes external state and emits events"
43
+ router: "Maps input signals to targets based on rules"
44
+ filter: "Transforms or smooths data in a pipeline"
45
+ store: "Persistent or reactive state container"
46
+ handler: "Event handler, webhook receiver, or request processor"
47
+ config: "Configuration, environment, constants"
48
+ `),{status:"applied",message:"Added component_types glossary to config.yaml",filesModified:[".paradigm/config.yaml"]}):{status:"error",message:"Cannot read config.yaml"}}},ue={id:"add-discipline-config",introducedIn:"3.4.0",description:"Add discipline field to config.yaml",category:"config",auto:true,async check(e){let t=A(e);return t?D(t,"discipline")?{needed:false,reason:"discipline already set"}:{needed:true,reason:"Missing discipline field"}:{needed:false,reason:"No config.yaml found"}},async apply(e,t){if(t.dryRun)return {status:"skipped",message:"Would add discipline to config.yaml"};let n=I(e);if(!n)return {status:"error",message:"Cannot read config.yaml"};let i=n.replace(/^(project:\s*.+)$/m,`$1
49
+ discipline: auto`);return i===n?x(e,n.trimEnd()+`
50
+ discipline: auto
51
+ `):x(e,i),{status:"applied",message:"Added discipline: auto to config.yaml",filesModified:[".paradigm/config.yaml"]}}},fe={id:"sync-templates",introducedIn:"evergreen",description:"Update specs/ and docs/ from installed CLI templates",category:"template",auto:true,async check(e){let t=$();if(!t)return {needed:false,reason:"Templates directory not found"};let n=[],i=["specs","docs","prompts"];for(let r of i){let a=p.join(t,r),d=p.join(e,".paradigm",r);if(o.existsSync(a))try{let g=o.readdirSync(a).filter(m=>o.statSync(p.join(a,m)).isFile());for(let m of g)o.existsSync(p.join(d,m))||n.push(`${r}/${m}`);}catch{}}return n.length===0?{needed:false,reason:"All templates are up to date"}:{needed:true,reason:`${n.length} new template file(s) available`,details:n.map(r=>`New: ${r}`)}},async apply(e,t){let n=$();if(!n)return {status:"error",message:"Templates directory not found"};let i=p.basename(e),r=[],a=["specs","docs","prompts"];for(let d of a){let g=p.join(n,d),m=p.join(e,".paradigm",d);if(o.existsSync(g)){t.dryRun||o.mkdirSync(m,{recursive:true});try{let S=o.readdirSync(g,{withFileTypes:!0});for(let k of S){if(k.isDirectory())continue;let M=p.join(m,k.name);if(!o.existsSync(M)){if(t.dryRun){r.push(`${d}/${k.name}`);continue}let c=o.readFileSync(p.join(g,k.name),"utf8");c=c.replace(/\{\{PROJECT_NAME\}\}/g,i),o.writeFileSync(M,c,"utf8"),r.push(`${d}/${k.name}`);}}}catch{}}}return t.dryRun?{status:"skipped",message:`Would copy ${r.length} template file(s)`}:r.length===0?{status:"skipped",message:"No new templates to sync"}:{status:"applied",message:`Synced ${r.length} template file(s)`,filesCreated:r.map(d=>`.paradigm/${d}`)}}},me={id:"refresh-hooks",introducedIn:"evergreen",description:"Reinstall hook scripts from plugin",category:"hook",auto:true,async check(e){let t=[p.join(e,".claude","hooks"),p.join(e,".cursor","hooks")];for(let i of t)if(o.existsSync(i))try{if(o.readdirSync(i).some(a=>a.includes("paradigm")))return {needed:!1,reason:"Hooks are installed"}}catch{}let n=p.join(e,".claude","settings.local.json");if(o.existsSync(n))try{if(JSON.parse(o.readFileSync(n,"utf8")).hooks)return {needed:!1,reason:"Plugin-managed hooks are configured"}}catch{}return {needed:true,reason:"No paradigm hooks found"}},async apply(e,t){if(t.dryRun)return {status:"skipped",message:"Would reinstall hooks"};try{let{hooksInstallCommand:n}=await import('./hooks-XH52VGOU.js');return await n({force:!0}),{status:"applied",message:"Hooks reinstalled"}}catch(n){return {status:"error",message:`Hook install failed: ${n.message}`}}}},b=[Q,X,Z,ee,te,ne,se,ue,de,le,re,oe,ie,ae,ce,pe,ge,fe,me];var he=createRequire(import.meta.url),{version:W}=he("../package.json");function C(e){let t=p.join(e,".paradigm","migrate.yaml");if(!o.existsSync(t))return null;try{let n=o.readFileSync(t,"utf8");return F.load(n)}catch{return null}}async function V(e){let t=p.join(e,".paradigm"),n=C(e),i=n?.applied.map(l=>l.id)??[],r="unknown",a=p.join(t,"config.yaml");if(o.existsSync(a))try{let l=F.load(o.readFileSync(a,"utf8"));r=String(l.version??"unknown");}catch{}let g=["specs","docs","prompts","lore","tasks","protocols","personas"].filter(l=>!o.existsSync(p.join(t,l))),m=["discipline","tag-bank","purpose-required","component_types"],S=[];if(o.existsSync(a))try{let l=F.load(o.readFileSync(a,"utf8"));S=m.filter(h=>{let j=h.replace(/-/g,"_");return !(h in l)&&!(j in l)&&!(h.replace(/_/g,"-")in l)});}catch{}let k=[],M=$();if(M){let l=["specs","docs"];for(let h of l){let j=p.join(M,h),L=p.join(t,h);if(o.existsSync(j)&&o.existsSync(L)){let J=o.readdirSync(j).filter(R=>!o.statSync(p.join(j,R)).isDirectory());for(let R of J){let Y=p.join(L,R);o.existsSync(Y)||k.push(`${h}/${R}`);}}}}let c=!o.existsSync(p.join(e,".claude","hooks")),u=[];for(let l of b){let h=l.introducedIn==="evergreen";if(i.includes(l.id)&&!h)continue;(await l.check(e)).needed&&u.push(l);}return {configVersion:r,cliVersion:W,pendingMigrations:u,appliedIds:i,health:{missingDirectories:g,missingConfigFields:S,staleTemplates:k,hooksOutdated:c}}}async function U(e){let t=[],n=new Date().toISOString();for(let i of b){if(i.introducedIn==="evergreen")continue;(await i.check(e)).needed||t.push({id:i.id,appliedAt:n,cliVersion:W});}return t}function $(){let e=new URL(import.meta.url).pathname,t=p.dirname(e),n=[p.join(t,"..","..","..","templates","paradigm"),p.join(t,"..","..","templates","paradigm"),p.join(t,"..","templates","paradigm")];for(let i of n)if(o.existsSync(i))return i;return null}var ke=createRequire(import.meta.url),{version:N}=ke("../package.json");async function B(e){let t=C(e);if(t)return t;let n=await U(e);return {version:"1.0",cliVersion:N,lastMigrated:new Date().toISOString(),applied:n}}function _(e,t){let n=p.join(e,".paradigm","migrate.yaml");o.mkdirSync(p.dirname(n),{recursive:true}),t.cliVersion=N,t.lastMigrated=new Date().toISOString(),o.writeFileSync(n,F.dump(t,{indent:2,lineWidth:120,noRefs:true,sortKeys:false,quotingType:'"'}),"utf8");}async function E(e,t,n,i){let r={applied:0,skipped:0,errors:0,manual:0,results:[]},a=new Date().toISOString();for(let d of t){if(!d.auto){r.manual++,r.results.push({id:d.id,result:{status:"skipped",message:"Manual review recommended"}});continue}try{let g=await d.apply(e,n);r.results.push({id:d.id,result:g}),g.status==="applied"?(r.applied++,i.applied.push({id:d.id,appliedAt:a,cliVersion:N})):g.status==="skipped"?r.skipped++:r.errors++;}catch(g){r.errors++,r.results.push({id:d.id,result:{status:"error",message:g.message}});}}return r}async function _e(e={}){let t=process.cwd(),n=p.join(t,".paradigm");if((!o.existsSync(n)||!o.statSync(n).isDirectory())&&!(o.existsSync(n)&&o.statSync(n).isFile())){e.quiet||console.log(s.yellow("\n No .paradigm/ directory found. Run `paradigm init` or `paradigm shift` first.\n"));return}let i=we();e.quiet||i.start("Detecting project state...");let r=await V(t);e.quiet||i.stop();let a=await B(t),d=r.pendingMigrations;if(e.only&&e.only.length>0&&(d=d.filter(c=>e.only.includes(c.id))),e.category&&(d=d.filter(c=>c.category===e.category)),e.force){let c=e.only?b.filter(u=>e.only.includes(u.id)):e.category?b.filter(u=>u.category===e.category):b;d=[];for(let u of c)((await u.check(t)).needed||e.force)&&d.push(u);}let g=d.filter(c=>c.auto),m=d.filter(c=>!c.auto);if(e.list){Me(a,r,e);return}if(e.quiet){if(g.length===0)return;let c=await E(t,g,e,a);return _(t,a),c}let S=C(t);if(console.log(s.blue(`
52
+ \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(s.blue("\u2502")+s.white.bold(" paradigm migrate ")+s.blue("\u2502")),console.log(s.blue("\u2502")+s.gray(" Bring your project up to date ")+s.blue("\u2502")),console.log(s.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
53
+ `)),console.log(s.white(` Project: ${s.cyan(p.basename(t))}`)),console.log(s.white(` Config version: ${s.cyan(r.configVersion)}`)),console.log(s.white(` CLI version: ${s.cyan(r.cliVersion)}`)),console.log(s.white(` Last migrated: ${s.cyan(S?.lastMigrated??"never")}`)),console.log(""),d.length===0){console.log(s.green(` All migrations are up to date.
54
+ `)),S||(_(t,a),e.verbose&&console.log(s.gray(` Created .paradigm/migrate.yaml with bootstrap state.
55
+ `)));return}if(e.verbose){let c=r.health;c.missingDirectories.length>0&&console.log(s.yellow(` Missing directories: ${c.missingDirectories.join(", ")}`)),c.missingConfigFields.length>0&&console.log(s.yellow(` Missing config fields: ${c.missingConfigFields.join(", ")}`)),c.staleTemplates.length>0&&console.log(s.yellow(` New templates available: ${c.staleTemplates.join(", ")}`)),c.hooksOutdated&&console.log(s.yellow(" Hooks need installation")),console.log("");}let k=g.length,M=m.length;if(console.log(s.white(` Pending Migrations (${k} auto${M>0?`, ${M} manual`:""})`)),console.log(s.gray(" "+"\u2500".repeat(49))),g.length>0){console.log(s.white(" AUTO:"));for(let c of g){let u=c.id.padEnd(30);if(console.log(s.green(" \u2713 ")+s.white(u)+s.gray(c.description)),e.verbose){let l=await c.check(t);if(l.details)for(let h of l.details)console.log(s.gray(" \u21B3 ")+s.gray(h));}}}if(m.length>0){console.log(""),console.log(s.white(" MANUAL (review recommended):"));for(let c of m){let u=c.id.padEnd(30);console.log(s.yellow(" \u25CB ")+s.white(u)+s.gray(c.description));let l=await c.check(t);if(l.details)for(let h of l.details)console.log(s.gray(" \u2192 ")+s.cyan(h));}}if(console.log(""),e.dryRun){console.log(s.yellow(` Dry run \u2014 no changes applied.
56
+ `));return}if(g.length>0){if(!e.apply){let u=(await import('prompts')).default,{confirm:l}=await u({type:"confirm",name:"confirm",message:`Apply ${g.length} automatic migration(s)?`,initial:true});if(!l){console.log(s.gray(`
57
+ Skipped. Run with --apply to auto-apply.
58
+ `));return}}i.start(`Applying ${g.length} migration(s)...`);let c=await E(t,g,e,a);i.stop();for(let{id:u,result:l}of c.results)l.status==="applied"?console.log(s.green(" \u2713 ")+s.white(u)+s.gray(` \u2014 ${l.message}`)):l.status==="error"?console.log(s.red(" \u2717 ")+s.white(u)+s.gray(` \u2014 ${l.message}`)):console.log(s.yellow(" \u25CB ")+s.white(u)+s.gray(` \u2014 ${l.message}`));console.log(""),console.log(s.green(` Applied ${c.applied} migration(s).`)),c.errors>0&&console.log(s.red(` ${c.errors} error(s).`));}_(t,a),console.log(s.gray(" Updated .paradigm/migrate.yaml")),console.log("");}function Me(e,t,n){let i=new Set(e.applied.map(a=>a.id)),r=new Set(t.pendingMigrations.map(a=>a.id));console.log(s.blue(`
59
+ All Migrations`)),console.log(s.gray(" "+"\u2500".repeat(70))),console.log(s.gray(" Status ")+s.gray("ID".padEnd(34))+s.gray("Version".padEnd(12))+s.gray("Category")),console.log(s.gray(" "+"\u2500".repeat(70)));for(let a of b){let d;i.has(a.id)?d=s.green(" \u2713 "):r.has(a.id)?d=a.auto?s.yellow(" \u25CF "):s.yellow(" \u25CB "):d=s.gray(" - ");let g=a.id.padEnd(34),m=(a.introducedIn==="evergreen"?"evergreen":a.introducedIn).padEnd(12),S=a.category;console.log(d+s.white(g)+s.gray(m)+s.gray(S)),n.verbose&&console.log(s.gray(` ${a.description}`));}console.log(""),console.log(s.gray(" \u2713 = applied \u25CF = pending (auto) \u25CB = pending (manual) - = not needed")),console.log("");}export{_e as migrateCommand};
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import {a,c}from'./chunk-WS2N27RX.js';import'./chunk-5TAVYPOV.js';import r from'chalk';import*as e from'fs';import*as i from'path';import*as k from'js-yaml';var D=".paradigm/assessments";async function j(_){let y=process.cwd(),a$1=i.join(y,D,"arcs"),f=!!_.dryRun;if(!e.existsSync(a$1)){console.log(r.yellow(`
3
+ No assessments found at .paradigm/assessments/arcs/
4
+ `));return}let $=e.readdirSync(a$1).filter(o=>e.statSync(i.join(a$1,o)).isDirectory()),l=0,d=0,t=[];for(let o of $){let c$1=i.join(a$1,o,"entries");if(!e.existsSync(c$1))continue;let S=e.readdirSync(c$1).filter(n=>n.endsWith(".yaml")&&!n.endsWith(".migrated"));for(let n of S){let m=i.join(c$1,n);try{let g=e.readFileSync(m,"utf8"),s=k.load(g),w=[`arc:${s.arc_id}`,`assessment:${s.type}`,...s.tags||[],"migrated-from-assessment"],A={id:"",type:s.type,timestamp:s.date,author:s.author,title:s.title,summary:s.summary,body:s.body,symbols_touched:s.symbols||[],tags:w,linked_lore:s.linked_lore,linked_tasks:s.linked_tasks,linked_commits:s.linked_commits},p={...a(A),id:""};f?console.log(r.gray(` [dry-run] Would migrate: ${s.id} \u2192 lore (arc:${s.arc_id})`)):(await c(y,p),e.renameSync(m,m.replace(".yaml",".migrated")),console.log(r.green(` Migrated: ${s.id} \u2192 ${p.id} (arc:${s.arc_id})`))),l++,t.includes(s.arc_id)||t.push(s.arc_id);}catch(g){console.error(r.red(` Failed to migrate ${n}: ${g}`)),d++;}}}console.log(),console.log(f?r.yellow(` Dry run complete: ${l} entries would be migrated from ${t.length} arcs`):r.green(` Migration complete: ${l} entries migrated from ${t.length} arcs`)),d>0&&console.log(r.yellow(` ${d} entries skipped due to errors`)),console.log(r.gray(` Arcs preserved as tags: ${t.map(o=>`arc:${o}`).join(", ")}`)),console.log();}export{j as loreMigrateAssessmentsCommand};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export{a as ModelDiscovery}from'./chunk-Y4XFVDZC.js';import'./chunk-5TAVYPOV.js';
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import {v}from'./chunk-HXKWL3VK.js';export{o as adjustAttentionFromFeedback,u as applySurfacingRules,s as autoPromoteJournalEntries,g as detectDebates,n as emitAndProcess,k as engageNomination,r as forwardNominationsToRelay,q as getNeverlandMetrics,p as getNominationStats,j as loadDebates,i as loadNominations,t as loadSurfacingConfig,h as persistNominations,f as processEvent,m as processPendingEvents,l as resolveDebate}from'./chunk-HXKWL3VK.js';import'./chunk-XUFYOXOU.js';import'./chunk-QGZRM6ZB.js';import'./chunk-VG7FN2TU.js';import'./chunk-5TAVYPOV.js';v();
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ import {a as a$1}from'./chunk-LKAT7IAK.js';import'./chunk-5TAVYPOV.js';import*as a from'fs';import*as d from'path';import*as y from'os';import n from'chalk';import*as f from'js-yaml';var b=d.join(y.homedir(),".paradigm","notebooks"),m=".paradigm/notebooks",$="nb-",k=".yaml";async function x(e={}){let s=process.cwd(),c=a$1.command("notebook-list").start("Listing notebook entries",{cwd:s}),t=e.agent||"all",r=u(s,t==="all"?void 0:t);if(e.json){console.log(JSON.stringify({count:r.length,entries:r.map(w)},null,2)),c.success(`Found ${r.length} entries`);return}if(console.log(n.blue(`
3
+ \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(n.blue("\u2502")+n.white.bold(" paradigm notebook list ")+n.blue("\u2502")),console.log(n.blue("\u2502")+n.gray(` Agent: ${t}`.padEnd(50))+n.blue("\u2502")),console.log(n.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
4
+ `)),r.length===0){console.log(n.yellow(" No notebook entries found.")),console.log(n.gray(` Add entries via paradigm_notebook_add or paradigm_notebook_promote.
5
+ `)),c.success("No entries found");return}for(let o of r){let i=o.concepts.join(", ")||n.gray("none"),l=o.appliedCount>0?n.green(`${o.appliedCount}x applied`):n.gray("unused");console.log(` ${n.white.bold(o.id)}`),console.log(` ${n.gray(o.context.slice(0,80))}`),console.log(` Concepts: ${i} | ${l} | Confidence: ${(o.confidence*100).toFixed(0)}%`),console.log("");}c.success(`Listed ${r.length} entries`);}async function N(e,s={}){let c=process.cwd(),t=a$1.command("notebook-show").start(`Showing notebook ${e}`,{cwd:c}),o=u(c,s.agent).find(i=>i.id===e);if(!o){s.json?console.log(JSON.stringify({error:`Entry "${e}" not found`})):console.log(n.red(`
6
+ Entry "${e}" not found.
7
+ `)),t.error(`Entry ${e} not found`);return}if(s.json){console.log(JSON.stringify(o,null,2)),t.success(`Showed entry ${e}`);return}console.log(n.blue(`
8
+ Notebook Entry: ${e}
9
+ `)),console.log(` ${n.white.bold("Context:")} ${o.context}`),console.log(` ${n.white.bold("Concepts:")} ${o.concepts.join(", ")}`),console.log(` ${n.white.bold("Tags:")} ${o.tags.join(", ")||"(none)"}`),console.log(` ${n.white.bold("Confidence:")} ${(o.confidence*100).toFixed(0)}%`),console.log(` ${n.white.bold("Applied:")} ${o.appliedCount} times`),console.log(` ${n.white.bold("Provenance:")} ${o.provenance.source}${o.provenance.loreEntryId?` (${o.provenance.loreEntryId})`:""}`),console.log(` ${n.white.bold("Created:")} ${o.created}`),console.log(` ${n.white.bold("Updated:")} ${o.updated}`),console.log(`
10
+ ${n.white.bold("Snippet:")}`),console.log(n.gray(" \u2500".repeat(25)));for(let i of o.snippet.split(`
11
+ `))console.log(` ${i}`);console.log(n.gray(" \u2500".repeat(25))),console.log(""),t.success(`Showed entry ${e}`);}async function S(e={}){let s=process.cwd(),c=a$1.command("notebook-export").start("Exporting notebook entries",{cwd:s}),t=u(s,e.agent),r=e.format||"yaml";console.log(r==="json"?JSON.stringify(t,null,2):f.dump(t,{lineWidth:120,noRefs:true})),c.success(`Exported ${t.length} entries as ${r}`);}function u(e,s){let c=[],t=[];if(s)t.push(d.join(b,s)),t.push(d.join(e,m,s));else for(let o of [b,d.join(e,m)])if(a.existsSync(o))try{let i=a.readdirSync(o,{withFileTypes:!0}).filter(l=>l.isDirectory()).map(l=>d.join(o,l.name));t.push(...i);}catch{}let r=new Set;for(let o of t)if(a.existsSync(o))try{let i=a.readdirSync(o).filter(l=>l.startsWith($)&&l.endsWith(k));for(let l of i)try{let h=a.readFileSync(d.join(o,l),"utf-8"),p=f.load(h);p?.id&&!r.has(p.id)&&(r.add(p.id),c.push(p));}catch{}}catch{}return c.sort((o,i)=>i.appliedCount-o.appliedCount)}function w(e){return {id:e.id,context:e.context.slice(0,100),concepts:e.concepts,appliedCount:e.appliedCount,confidence:e.confidence,provenance:e.provenance.source}}export{S as notebookExportCommand,x as notebookListCommand,N as notebookShowCommand};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import {g}from'./chunk-VG7FN2TU.js';export{c as addNotebookEntry,e as incrementApplied,a as loadNotebookEntries,d as promoteFromLore,b as searchNotebooks}from'./chunk-VG7FN2TU.js';import'./chunk-5TAVYPOV.js';g();
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import {a,b}from'./chunk-L6K5HNDL.js';import'./chunk-TYWB5IQJ.js';import'./chunk-WESTEMIM.js';import'./chunk-FYDRENK7.js';import'./chunk-IZSBGW6E.js';import {e as e$1}from'./chunk-AO7ZSRME.js';import'./chunk-NW6OKHE6.js';import {d,c}from'./chunk-EKZDFEJW.js';import'./chunk-T6IDXUUA.js';import'./chunk-JIXHEBGK.js';import'./chunk-QT2LKB3P.js';import'./chunk-5TAVYPOV.js';import*as S from'path';import e from'chalk';import O from'ora';async function I(o,n,t){let i=n?S.resolve(n):process.cwd();if(!o){t.json?console.log(JSON.stringify({error:"Task is required"})):(console.log(e.red(`
3
+ Task is required.`)),console.log(e.gray(`Example: paradigm team orchestrate "Build @payment-system with Stripe"
4
+ `)));return}if(!e$1(i)){t.json?console.log(JSON.stringify({error:"Team not configured"})):console.log(e.yellow("\nTeam not configured. Run `paradigm team init` first.\n"));return}let f="faceted";t.solo&&(f="solo"),t.faceted&&(f="faceted");let g;if(t.budget){let s=t.budget.split(",");g={};for(let l of s){let[a,r]=l.split("=");a==="tokens"&&(g.maxTokens=parseInt(r)),a==="cost"&&(g.maxCostUsd=parseFloat(r)),a==="warn"&&(g.warnAtPercent=parseInt(r));}}let c=O({text:"Initializing orchestrator...",isSilent:t.quiet||t.json}).start(),y=new a(i);try{await y.initialize();}catch(s){c.fail("Failed to initialize orchestrator"),t.json?console.log(JSON.stringify({error:s instanceof Error?s.message:String(s)})):console.log(e.red(`
5
+ Error: ${s instanceof Error?s.message:s}
6
+ `));return}if(t.background){c.text="Starting background orchestration...";let s=new b(i),l=t.notify?t.notify.split(",").filter(r=>["bell","desktop","file","webhook"].includes(r)):["bell"],a=await s.startBackground(o,{mode:f,orchestratorModel:t.model,budget:g,notify:true,notifyMethods:l});if(c.stop(),t.json){console.log(JSON.stringify({id:a.id,status:a.status,outputFile:a.outputFile,task:a.task},null,2));return}T(a);return}if(t.compare){c.text="Running comparison (solo vs faceted)...";let s=await y.compare(o,{orchestratorModel:t.model,budget:g,checkpoints:t.checkpoint?{beforeAgentSpawn:true,afterAgentComplete:true}:void 0,onAgentStart:(l,a,r)=>{if(!t.quiet&&!t.json){let $=`${l} (${r})`;c.text=`${$}: ${a.slice(0,50)}...`;}}});if(c.stop(),t.json){console.log(JSON.stringify(s,null,2));return}v(s);return}if(!t.quiet&&!t.json){let s=f==="solo"?"Solo":"Faceted";c.text=`Orchestrating (${s} mode)...`;}let p=await y.orchestrate(o,{mode:f,orchestratorModel:t.model,budget:g,checkpoints:t.checkpoint?{beforeAgentSpawn:true}:void 0,pmGovernance:t.pm?{enabled:true,blockOnViolations:true}:void 0,onMessage:(s,l)=>{t.json||t.quiet||t.live&&l.type==="text"&&process.stdout.write(e.gray(`[${s}] `)+l.content);},onAgentStart:(s,l,a)=>{if(t.json||t.quiet)return;let r=`${s} (${a})`;t.live?console.log(e.cyan(`
7
+ \u25B6 ${r}: ${l}`)):c.text=`${r}: ${l.slice(0,50)}...`;},onAgentComplete:(s,l,a)=>{if(!(t.json||t.quiet)&&t.live){let r=l.success?e.green("\u2713"):e.red("\u2717"),$=l.relay?d(l.relay.metrics.tokens_used.total):"0",w=`${s} (${a})`;console.log(`${r} ${w} completed (${$})`);}},onCheckpoint:async s=>t.checkpoint?(c.stop(),console.log(e.yellow(`
8
+ \u26A0 Checkpoint: ${s}`)),console.log(e.gray("Press Enter to continue, or Ctrl+C to abort...")),new Promise(l=>{process.stdin.once("data",()=>{c.start(),l(true);});})):true});if(c.stop(),t.json){console.log(JSON.stringify(p,null,2));return}C(p);}function C(o){if(console.log(),console.log(e.blue("\u2501".repeat(60))),console.log(e.blue(` Orchestration ${o.success?"Complete":"Failed"}`)),console.log(e.blue("\u2501".repeat(60))),console.log(),console.log(e.white(` Task: ${o.task.slice(0,50)}${o.task.length>50?"...":""}`)),console.log(e.gray(` Mode: ${o.mode}`)),console.log(e.gray(` ID: ${o.orchestrationId}`)),console.log(),o.success?console.log(e.green(" \u2713 Success")):console.log(e.red(` \u2717 Failed: ${o.error||"Unknown error"}`)),console.log(),console.log(e.cyan(" Metrics:")),console.log(e.gray(` Agents spawned: ${o.agentsSpawned}`)),console.log(e.gray(` Total tokens: ${d(o.totalTokens.total)}`)),console.log(e.gray(` Total cost: ${c(o.totalCost)}`)),console.log(e.gray(` Duration: ${(o.duration_ms/1e3).toFixed(1)}s`)),console.log(),o.agentResults.length>0){console.log(e.cyan(" Agents:"));for(let n of o.agentResults){let t=n.success?e.green("\u2713"):e.red("\u2717"),i=n.relay?d(n.relay.metrics.tokens_used.total):"0",u=n.relay?`${(n.relay.metrics.duration_ms/1e3).toFixed(1)}s`:"0s";console.log(e.gray(` ${t} ${n.relay?.agent||"unknown"}: ${i} (${u})`));}console.log();}if(o.complianceReport){console.log(e.cyan(" PM Compliance:"));let n=o.complianceReport.postflight;if(n){let t=n.status==="pass"?e.green("\u2713"):n.status==="warnings"?e.yellow("\u26A0"):e.red("\u2717");if(console.log(e.gray(` Status: ${t} ${n.status}`)),console.log(e.gray(` Checks: ${n.summary.passed}/${n.summary.totalChecks} passed`)),n.summary.errors>0&&console.log(e.red(` Errors: ${n.summary.errors}`)),n.summary.warnings>0&&console.log(e.yellow(` Warnings: ${n.summary.warnings}`)),n.violations.length>0)for(let i of n.violations.slice(0,5)){let u=i.severity==="error"?e.red("\u2717"):e.yellow("\u26A0");console.log(e.gray(` ${u} ${i.message}`));}}console.log();}o.log&&console.log(e.gray(` Log: .paradigm/orchestrations/${o.log.started.slice(0,10)}-*.yaml`)),console.log();}function v(o){console.log(),console.log(e.blue("\u2501".repeat(60))),console.log(e.blue(" A/B Comparison: Solo vs Faceted")),console.log(e.blue("\u2501".repeat(60))),console.log(),console.log(e.cyan(" Results:")),console.log(e.gray(" \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510")),console.log(e.gray(" \u2502 \u2502 Solo \u2502 Faceted \u2502")),console.log(e.gray(" \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524"));let n=o.solo.success?e.green("\u2713 Success"):e.red("\u2717 Failed"),t=o.faceted.success?e.green("\u2713 Success"):e.red("\u2717 Failed");console.log(e.gray(` \u2502 Status \u2502 ${n.padEnd(21)} \u2502 ${t.padEnd(21)} \u2502`));let i=d(o.solo.totalTokens.total).padStart(10),u=d(o.faceted.totalTokens.total).padStart(10);console.log(e.gray(` \u2502 Tokens \u2502 ${i} \u2502 ${u} \u2502`));let f=c(o.solo.totalCost).padStart(10),g=c(o.faceted.totalCost).padStart(10);console.log(e.gray(` \u2502 Cost \u2502 ${f} \u2502 ${g} \u2502`));let c$1=`${(o.solo.duration_ms/1e3).toFixed(1)}s`.padStart(10),y=`${(o.faceted.duration_ms/1e3).toFixed(1)}s`.padStart(10);console.log(e.gray(` \u2502 Duration \u2502 ${c$1} \u2502 ${y} \u2502`));let p=`${o.solo.agentsSpawned}`.padStart(10),s=`${o.faceted.agentsSpawned}`.padStart(10);console.log(e.gray(` \u2502 Agents \u2502 ${p} \u2502 ${s} \u2502`)),console.log(e.gray(" \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518")),console.log();let{winner:l,tokensSaved:a,costDiff:r}=o.comparison;l==="tie"?console.log(e.yellow(" \u2696 Result: Tie")):l==="faceted"?(console.log(e.green(" \u{1F3C6} Winner: Faceted")),r>0&&console.log(e.gray(` Saved ${c(r)} (${d(Math.abs(a))} tokens)`))):(console.log(e.green(" \u{1F3C6} Winner: Solo")),r<0&&console.log(e.gray(` Saved ${c(Math.abs(r))} (${d(Math.abs(a))} tokens)`))),console.log(),console.log(e.cyan(" Recommendation:")),l==="faceted"?(console.log(e.gray(" Use --faceted (default) for this type of task.")),console.log(e.gray(" Multi-agent orchestration is more cost-effective."))):l==="solo"?(console.log(e.gray(" Use --solo for this type of task.")),console.log(e.gray(" Single agent is simpler and cheaper here."))):(console.log(e.gray(" Both approaches work similarly for this task.")),console.log(e.gray(" Default to --faceted for complex tasks, --solo for simple ones."))),console.log();}function T(o){console.log(),console.log(e.blue("\u2501".repeat(60))),console.log(e.blue(" Orchestration started in background")),console.log(e.blue("\u2501".repeat(60))),console.log(),console.log(e.white(` ID: ${o.id}`)),console.log(e.gray(` Task: ${o.task.slice(0,50)}${o.task.length>50?"...":""}`)),console.log(e.gray(` Mode: ${o.mode}`)),console.log(e.gray(` Status: ${o.status}`)),console.log(),console.log(e.cyan(" Commands:")),console.log(e.gray(` Monitor: paradigm team status ${o.id}`)),console.log(e.gray(` Logs: tail -f ${o.outputFile}`)),console.log(e.gray(` Diff: paradigm team diff ${o.id}`)),console.log(e.gray(` Accept: paradigm team accept ${o.id}`)),console.log();}export{I as teamOrchestrateCommand};
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import {c,g,h}from'./chunk-J32OPJEX.js';import'./chunk-5TAVYPOV.js';import o from'chalk';async function y(r){let n=c();if(r.json){console.log(JSON.stringify(n,null,2));return}if(n.length===0){console.log(o.yellow('No trusted peers. Run "paradigm symphony serve" to accept connections.'));return}console.log(o.cyan(`
3
+ Trusted Peers (${n.length})
4
+ `)),console.log(o.gray(` ${"PEER ID".padEnd(20)} ${"ADDRESS".padEnd(22)} ${"STATUS".padEnd(10)} ${"AGENTS".padEnd(8)} LAST SEEN`)),console.log(o.gray(` ${"\u2500".repeat(20)} ${"\u2500".repeat(22)} ${"\u2500".repeat(10)} ${"\u2500".repeat(8)} ${"\u2500".repeat(20)}`));for(let e of n){let t=e.revoked?o.red("revoked"):o.green("trusted"),g=(e.agents||[]).length.toString(),i=e.lastSeen?p(e.lastSeen):o.gray("never");if(console.log(` ${o.white(e.id.padEnd(20))} ${e.address.padEnd(22)} ${t.padEnd(10)} ${g.padEnd(8)} ${i}`),e.agents&&e.agents.length>0)for(let l of e.agents){let d=l.status==="awake"?o.green("awake"):o.yellow("asleep");console.log(o.gray(` \u2514 ${l.id} [${d}]`));}}console.log();}async function m(r){if(g(r))console.log(o.green(`\u2713 Revoked peer ${o.bold(r)}`)),console.log(o.gray(" Peer will be disconnected and cannot reconnect until re-paired."));else {console.log(o.red(`Peer "${r}" not found.`));let e=c();if(e.length>0){console.log(o.gray(`
5
+ Available peers:`));for(let t of e)console.log(o.gray(` ${t.id} (${t.address})`));}}}async function $(r){let n=c();if(n.length===0){console.log(o.yellow("No peers to forget."));return}if(!r.force){console.log(o.yellow(`This will remove all ${n.length} trusted peer(s). Use --force to confirm.`));return}let e=h();console.log(o.green(`\u2713 Forgot ${e} peer${e!==1?"s":""}`)),console.log(o.gray(" All peer trust records deleted. Re-pairing required for remote connections."));}function p(r){let n=Date.now()-new Date(r).getTime(),e=Math.floor(n/1e3);return e<60?"just now":e<3600?`${Math.floor(e/60)}m ago`:e<86400?`${Math.floor(e/3600)}h ago`:`${Math.floor(e/86400)}d ago`}export{y as symphonyPeersCommand,$ as symphonyPeersForgetCommand,m as symphonyPeersRevokeCommand};
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env node
2
+ import'./chunk-5TAVYPOV.js';import*as d from'fs';import*as h from'path';import n from'chalk';import*as w from'js-yaml';function j(o){return h.join(o,".paradigm","personas")}function b(o){let i=j(o);return d.existsSync(i)?d.readdirSync(i).filter(s=>s.endsWith(".persona")).sort().map(s=>{try{let e=d.readFileSync(h.join(i,s),"utf8");return w.load(e)}catch{return null}}).filter(s=>s!==null&&!!s.id):[]}function m(o,i){let s=h.join(j(o),`${i}.persona`);if(!d.existsSync(s))return null;try{return w.load(d.readFileSync(s,"utf8"))}catch{return null}}function R(o){let i=h.join(j(o),"index.yaml");if(!d.existsSync(i))return null;try{return w.load(d.readFileSync(i,"utf8"))}catch{return null}}async function k(o){let i=process.cwd(),s=b(i);if(s.length===0){console.log(n.yellow(`
3
+ No personas found. Create one with paradigm_persona_create.
4
+ `));return}if(o.tag&&(s=s.filter(e=>e.tags?.includes(o.tag))),o.trigger&&(s=s.filter(e=>e.trigger.type===o.trigger)),o.gate&&(s=s.filter(e=>e.journey.some(l=>l.gates.includes(o.gate)))),o.json){console.log(JSON.stringify(s.map(e=>({id:e.id,name:e.name,trigger:e.trigger.type,steps:e.journey.length,tags:e.tags||[],gates:[...new Set(e.journey.flatMap(l=>l.gates))]})),null,2));return}console.log(n.blue(`
5
+ Personas (${s.length})
6
+ `));for(let e of s){let l=[...new Set(e.journey.flatMap(a=>a.gates))],t=e.trigger.type==="root"?n.green:n.cyan;console.log(` ${n.white.bold(e.id)} \u2014 ${e.name}`),console.log(` ${t(e.trigger.type)} trigger, ${e.journey.length} steps, ${l.length} gates`),e.tags?.length&&console.log(` ${n.gray(e.tags.map(a=>`[${a}]`).join(" "))}`),e.description&&console.log(` ${n.gray(e.description)}`),console.log();}}async function O(o,i){let s=process.cwd(),e=m(s,o);if(!e){console.log(n.red(`Persona "${o}" not found.`));return}if(i.json){console.log(JSON.stringify(e,null,2));return}if(console.log(n.blue(`
7
+ Persona: ${n.white.bold(e.name)}
8
+ `)),console.log(` ID: ${e.id}`),console.log(` Trigger: ${e.trigger.type}`),e.trigger.spawned_by&&console.log(` Spawned: by ${e.trigger.spawned_by}`),e.description&&console.log(` Desc: ${e.description}`),e.tags?.length&&console.log(` Tags: ${e.tags.join(", ")}`),e.traits&&Object.keys(e.traits).length){console.log(n.cyan(`
9
+ Traits:`));for(let[l,t]of Object.entries(e.traits))console.log(` ${l}: ${n.white(String(t))}`);}if(e.fixtures&&Object.keys(e.fixtures).length){console.log(n.cyan(`
10
+ Fixtures:`));for(let[l,t]of Object.entries(e.fixtures))console.log(` ${l}: ${n.gray(t)}`);}console.log(n.cyan(`
11
+ Journey (${e.journey.length} steps):`));for(let l=0;l<e.journey.length;l++){let t=e.journey[l],a=t.gates.map(r=>n.yellow(r)).join(", ");console.log(` ${n.gray(`${l+1}.`)} ${n.white(t.id)} \u2014 ${t.route}`),console.log(` Gates: ${a} Expect: ${t.expect.status}`),t.flow&&console.log(` Flow: ${n.magenta(t.flow)}`),t.produces&&console.log(` Produces: ${Object.keys(t.produces).join(", ")}`),t.spawns?.length&&console.log(` Spawns: ${t.spawns.map(r=>r.persona).join(", ")}`),t.signals?.length&&console.log(` Signals: ${t.signals.join(", ")}`);}console.log();}async function C(o,i){let s=process.cwd(),e=o?[m(s,o)].filter(Boolean):b(s);if(e.length===0){console.log(n.yellow(o?`Persona "${o}" not found.`:"No personas found."));return}let l=[],t=h.join(s,"portal.yaml");if(d.existsSync(t))try{let g=w.load(d.readFileSync(t,"utf8"));l=Object.keys(g?.gates||{}).map(c=>c.startsWith("^")?c:`^${c}`);}catch{}let a=0,r=0,f=[];for(let g of e){let c=[],$=[];g.id||c.push("Missing required field: id"),g.name||c.push("Missing required field: name"),(!g.journey||g.journey.length===0)&&c.push("Journey must have at least 1 step");let p=new Set;for(let u of g.journey||[]){if(u.id||c.push("Step missing id"),p.has(u.id)&&c.push(`Duplicate step id: ${u.id}`),p.add(u.id),u.route||c.push(`Step ${u.id}: missing route`),(!u.gates||u.gates.length===0)&&c.push(`Step ${u.id}: gates[] required`),u.expect?.status||c.push(`Step ${u.id}: expect.status required`),l.length>0)for(let y of u.gates||[])l.includes(y)||$.push(`Step ${u.id}: gate ${y} not in portal.yaml`);for(let y of u.spawns||[])m(s,y.persona)||$.push(`Step ${u.id}: spawns ${y.persona} but that persona doesn't exist`);}a+=c.length,r+=$.length,f.push({id:g.id,errors:c,warnings:$});}if(i?.json){console.log(JSON.stringify({results:f,totalErrors:a,totalWarnings:r},null,2));return}console.log(n.blue(`
12
+ Persona Validation (${e.length} persona(s))
13
+ `));for(let g of f)if(g.errors.length===0&&g.warnings.length===0)console.log(` ${n.green("\u2713")} ${g.id}`);else {if(g.errors.length>0){console.log(` ${n.red("\u2717")} ${g.id} \u2014 ${g.errors.length} error(s)`);for(let c of g.errors)console.log(` ${n.red("\u2022")} ${c}`);}if(g.warnings.length>0){console.log(` ${n.yellow("\u26A0")} ${g.id} \u2014 ${g.warnings.length} warning(s)`);for(let c of g.warnings)console.log(` ${n.yellow("\u2022")} ${c}`);}}console.log(),console.log(a===0&&r===0?n.green(" All personas valid."):` ${n.red(`${a} error(s)`)}, ${n.yellow(`${r} warning(s)`)}`),console.log();}async function N(o){let i=process.cwd(),s=R(i);if(!s){console.log(n.yellow(`
14
+ No persona index found. Run paradigm_reindex first.
15
+ `));return}if(o.json){console.log(JSON.stringify({gate_coverage:s.gate_coverage||{},route_coverage:s.route_coverage||{},uncovered_routes:s.uncovered_routes||[]},null,2));return}console.log(n.blue(`
16
+ Persona Coverage Report
17
+ `));let e=s.gate_coverage||{};if(Object.keys(e).length>0){console.log(n.cyan(" Gate Coverage:"));for(let[a,r]of Object.entries(e))console.log(` ${n.yellow(a)} \u2014 ${r.join(", ")}`);console.log();}let l=s.route_coverage||{};if(Object.keys(l).length>0){console.log(n.cyan(" Route Coverage:"));for(let[a,r]of Object.entries(l))console.log(` ${n.white(a)} \u2014 ${r.join(", ")}`);console.log();}let t=s.uncovered_routes||[];if(t.length>0){console.log(n.red(` Uncovered Routes (${t.length}):`));for(let a of t)console.log(` ${n.red("\u2022")} ${a}`);console.log();}else console.log(n.green(" All portal.yaml routes have persona coverage.")),console.log();}async function D(o,i){let s=process.cwd(),e=m(s,o);if(!e){console.log(n.red(`Persona "${o}" not found.`));return}if(i.dryRun){console.log(n.blue(`
18
+ Dry Run: ${e.name}
19
+ `));for(let r=0;r<e.journey.length;r++){let f=e.journey[r];console.log(` ${n.gray(`${r+1}.`)} ${f.route}`),console.log(` Gates: ${f.gates.join(", ")}`),console.log(` Expect: ${f.expect.status}`),f.produces&&console.log(` Produces: ${Object.keys(f.produces).join(", ")}`);}console.log(n.gray(`
20
+ (dry run \u2014 no HTTP requests made)
21
+ `));return}console.log(n.blue(`
22
+ Running: ${e.name} \u2192 ${i.baseUrl}
23
+ `));let l={fixtures:e.fixtures||{},produces:{},context:e.trigger.context||{},env:process.env},t=0,a=0;for(let r of e.journey){let f=`${i.baseUrl}${r.route.split(" ").pop()}`,g=r.route.split(" ")[0],c;r.payload&&(c=JSON.stringify(r.payload).replace(/\{\{(\w+)\.(\w+)\}\}/g,($,p,u)=>{let y=l[p];return y?.[u]!==void 0?String(y[u]):`{{${p}.${u}}}`})),process.stdout.write(` ${n.gray(`${r.id}:`)} ${g} ${f} ... `);try{let $={"Content-Type":"application/json",...r.headers||{}},p=await fetch(f,{method:g,headers:$,body:c});if(p.status===r.expect.status){if(console.log(n.green(`${p.status} \u2713`)),t++,r.produces)try{let u=await p.json();for(let[y,x]of Object.entries(r.produces)){let S=x.split(".").reduce((P,v)=>P?.[v],u);l.produces[y]=S;}}catch{}}else console.log(n.red(`${p.status} \u2717 (expected ${r.expect.status})`)),a++;}catch($){console.log(n.red(`ERROR: ${$.message}`)),a++;}}console.log(),console.log(` ${n.green(`${t} passed`)}, ${a>0?n.red(`${a} failed`):n.green("0 failed")}`),console.log();}async function J(o,i){let s=process.cwd(),e=b(s),l=[];for(let t of e){let a=t.journey.filter(r=>r.gates.includes(o)||r.flow===o||r.signals?.includes(o));a.length>0&&l.push({id:t.id,name:t.name,steps:a.map(r=>r.id)});}if(i.json){console.log(JSON.stringify({symbol:o,affected:l},null,2));return}if(l.length===0){console.log(n.gray(`
24
+ No personas reference ${o}.
25
+ `));return}console.log(n.blue(`
26
+ Personas affected by ${n.yellow(o)}:
27
+ `));for(let t of l)console.log(` ${n.white.bold(t.id)} \u2014 ${t.name}`),console.log(` Steps: ${t.steps.join(", ")}`);console.log();}async function A(o){let i=process.cwd(),s=h.join(j(i),`${o}.persona`);if(!d.existsSync(s)){console.log(n.red(`Persona "${o}" not found.`));return}let l=b(i).filter(t=>t.id!==o&&t.journey.some(a=>a.spawns?.some(r=>r.persona===o)));l.length>0&&(console.log(n.yellow(`
28
+ Warning: ${o} is spawned by: ${l.map(t=>t.id).join(", ")}`)),console.log(n.yellow(` Deleting it will break their spawn chains.
29
+ `))),d.unlinkSync(s),console.log(n.green(` Deleted persona "${o}".`));}export{J as personaAffectedCommand,N as personaCoverageCommand,A as personaDeleteCommand,k as personaListCommand,D as personaRunCommand,O as personaShowCommand,C as personaValidateCommand};
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import'./chunk-5TAVYPOV.js';import i from'chalk';import*as o from'fs';import*as p from'path';import*as d from'js-yaml';var S={"add-feature":{gates:{specify:"manual",plan:"manual",task:"auto",implement:"sentinel",validate:"sentinel"},description:"Standard feature addition with manual spec/plan review"},"bug-fix":{gates:{specify:"auto",plan:"auto",task:"auto",implement:"sentinel",validate:"sentinel"},description:"Quick bug fix with automated gates except validation"},"security-change":{gates:{specify:"manual",plan:"manual",task:"manual",implement:"manual",validate:"manual"},description:"Security-sensitive change with all-manual gates"},refactor:{gates:{specify:"auto",plan:"manual",task:"auto",implement:"sentinel",validate:"sentinel"},description:"Code refactoring with manual plan review"}},c=["specify","plan","task","implement","validate"],g=".paradigm/pipeline";function y(n){return n.toLowerCase().replace(/[^a-z0-9-]+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"")}function u(n,t){let e=y(t),a=p.join(n,g,`${e}.yaml`);return o.existsSync(a)?d.load(o.readFileSync(a,"utf8")):null}function m(n,t){let e=y(t.feature),a=p.join(n,g);o.existsSync(a)||o.mkdirSync(a,{recursive:true});let s=p.join(a,`${e}.yaml`);return o.writeFileSync(s,d.dump(t,{lineWidth:120}),"utf8"),s}function P(n){let t=p.join(n,g);return o.existsSync(t)?o.readdirSync(t).filter(e=>e.endsWith(".yaml")&&!e.startsWith("completed")).map(e=>{try{return d.load(o.readFileSync(p.join(t,e),"utf8"))}catch{return null}}).filter(Boolean):[]}function x(n,t,e){let a={specify:{status:"pending"},plan:{status:"pending"},task:{status:"pending"},implement:{status:"pending"},validate:{status:"pending"}};return a.specify.status="in-progress",{version:"1.0",feature:y(n),created:new Date().toISOString(),current_stage:"specify",gate_config:t,template:e,stages:a}}function h(n){let t=c.indexOf(n);return t<c.length-1?c[t+1]:null}function v(n,t){let e=y(t.feature),a=p.join(n,g,"completed");o.existsSync(a)||o.mkdirSync(a,{recursive:true});let s=p.join(a,`${e}.yaml`);o.writeFileSync(s,d.dump(t,{lineWidth:120}),"utf8");let r=p.join(n,g,`${e}.yaml`);o.existsSync(r)&&o.unlinkSync(r);}async function j(n,t){let e=process.cwd(),a=t.template||"add-feature",s;if(t.gates){let l=t.gates.split(",");l.length!==5&&(console.error(i.red("--gates requires 5 comma-separated modes: specify,plan,task,implement,validate")),process.exit(1)),s={specify:l[0],plan:l[1],task:l[2],implement:l[3],validate:l[4]};}else {let l=S[a];l||(console.error(i.red(`Unknown template: ${a}. Available: ${Object.keys(S).join(", ")}`)),process.exit(1)),s=l.gates;}let r=x(n,s,a),f=m(e,r);console.log(i.green(`Pipeline created: ${r.feature}`)),console.log(i.gray(`Template: ${a}`)),console.log(i.gray(`Gates: ${c.map(l=>`${l}=${s[l]}`).join(", ")}`)),console.log(i.gray(`File: ${f}`)),console.log(i.cyan(`
3
+ Current stage: specify (in-progress)`));}async function E(n){let t=process.cwd();if(n){let e=u(t,n);e||(console.error(i.red(`Pipeline not found: ${n}`)),process.exit(1)),$(e);}else {let e=P(t);if(e.length===0){console.log(i.gray("No active pipelines"));return}for(let a of e)$(a),console.log();}}function $(n){console.log(i.bold(`Pipeline: ${n.feature}`)),console.log(i.gray(`Created: ${n.created}`)),n.template&&console.log(i.gray(`Template: ${n.template}`)),console.log();for(let t of c){let e=n.stages[t],a=n.gate_config[t],s=n.current_stage===t,r=e.status==="approved"?"+":e.status==="in-progress"?">":e.status==="blocked"?"x":".",f=e.status==="approved"?i.green:e.status==="in-progress"?i.cyan:e.status==="blocked"?i.red:i.gray;console.log(f(` ${r} ${t.padEnd(12)} [${a}] ${e.status}${s?" <- current":""}`)),e.artifact&&console.log(i.gray(` Artifact: ${e.artifact}`)),e.symbols_touched?.length&&console.log(i.gray(` Symbols: ${e.symbols_touched.join(", ")}`));}}async function M(n){let t=process.cwd(),e=u(t,n);e||(console.error(i.red(`Pipeline not found: ${n}`)),process.exit(1));let a=e.current_stage,s=e.gate_config[a],r=h(a);e.stages[a].status="approved",e.stages[a].approved_at=new Date().toISOString(),s==="auto"&&(e.stages[a].auto_passed_at=new Date().toISOString()),r?(e.current_stage=r,e.stages[r].status="in-progress",m(t,e),console.log(i.green(`Stage '${a}' approved. Advanced to '${r}'.`))):(m(t,e),v(t,e),console.log(i.green(`Pipeline '${e.feature}' completed and archived.`)));}async function D(n,t){let e=process.cwd(),a=u(e,n);a||(console.error(i.red(`Pipeline not found: ${n}`)),process.exit(1));let s=t.stage;c.includes(s)||(console.error(i.red(`Invalid stage: ${t.stage}`)),process.exit(1));let r=t.gate;["auto","manual","sentinel"].includes(r)||(console.error(i.red(`Invalid gate mode: ${t.gate}. Use: auto, manual, sentinel`)),process.exit(1));let f=a.gate_config[s];a.gate_config[s]=r,m(e,a),console.log(i.green(`Gate for '${s}' changed: ${f} -> ${r}`)),t.reason&&console.log(i.gray(`Reason: ${t.reason}`));}async function A(n){let t=process.cwd(),e=u(t,n);e||(console.error(i.red(`Pipeline not found: ${n}`)),process.exit(1)),v(t,e),console.log(i.yellow(`Pipeline '${e.feature}' aborted and archived.`));}async function T(){let n=process.cwd(),t=P(n);if(t.length===0){console.log(i.gray("No active pipelines."));return}console.log(i.bold(`Active Pipelines (${t.length}):
4
+ `));for(let e of t){let a=c.filter(s=>e.stages[s].status==="approved").length;console.log(` ${i.cyan(e.feature)} -- stage ${a}/${c.length} (${e.current_stage})`);}}export{A as pipelineAbortCommand,M as pipelineAdvanceCommand,D as pipelineConfigureCommand,T as pipelineListCommand,j as pipelineStartCommand,E as pipelineStatusCommand};
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env node
2
+ import {a,b as b$1,c}from'./chunk-XMAV5AG6.js';import {a as a$1,b as b$2}from'./chunk-Y6KXTQBG.js';import'./chunk-5TAVYPOV.js';import U,{Router}from'express';import*as ut from'http';import*as S from'path';import*as b from'fs';import {fileURLToPath}from'url';import A from'chalk';import {WebSocketServer,WebSocket}from'ws';import X from'simple-git';import*as W from'js-yaml';import*as H from'os';function dt(r){let s=["#58a6ff","#3fb950","#f85149","#d29922","#bc8cff","#f778ba","#79c0ff","#56d364"],o=0;for(let n=0;n<r.length;n++)o=(o<<5)-o+r.charCodeAt(n)|0;return s[Math.abs(o)%s.length]}var gt=0,E=class{agents=new Map;staleTimeout=120*1e3;join(s){let o=new Date().toISOString(),n={agentId:s,color:dt(s),connectedAt:o,lastActivity:o};return this.agents.set(s,n),n}touch(s){let o=this.agents.get(s);o&&(o.lastActivity=new Date().toISOString());}leave(s){this.agents.delete(s);}getAll(){return Array.from(this.agents.values())}pruneStale(){let s=Date.now(),o=[];for(let[n,t]of this.agents)s-new Date(t.lastActivity).getTime()>this.staleTimeout&&(this.agents.delete(n),o.push(n));return o}},M=class{state={section:"overview",selectedSymbol:null,theme:"dark",lastInteraction:Date.now()};highlights=[];annotations=[];muted=false;updateSection(s){this.state.section=s,this.state.lastInteraction=Date.now();}updateSelectedSymbol(s){this.state.selectedSymbol=s,this.state.lastInteraction=Date.now();}updateTheme(s){this.state.theme=s;}setMuted(s){this.muted=s;}isMuted(){return this.muted}isUserActive(s=5e3){return Date.now()-this.state.lastInteraction<s}getState(){return {...this.state,muted:this.muted}}addHighlight(s){this.highlights.push(s),s.duration>0&&setTimeout(()=>{this.highlights=this.highlights.filter(o=>o!==s);},s.duration);}addAnnotation(s){let o={...s,id:`ann-${++gt}`,createdAt:Date.now()};return this.annotations.push(o),o.duration>0&&setTimeout(()=>{this.annotations=this.annotations.filter(n=>n!==o);},o.duration),o}clearHighlights(){this.highlights=[];}clearAnnotations(){this.annotations=[];}clearAll(){this.highlights=[],this.annotations=[];}getHighlights(){return [...this.highlights]}getAnnotations(){return [...this.annotations]}};function Q(r){let s=new Set,o=new E,n=new M;function t(a){let c=JSON.stringify(a);for(let l of s)l.readyState===WebSocket.OPEN&&l.send(c);}return new WebSocketServer({server:r,path:"/ws"}).on("connection",a=>{s.add(a),a.on("message",c=>{try{let l=JSON.parse(c.toString());l.type==="user:navigate"?n.updateSection(l.section):l.type==="user:select"?n.updateSelectedSymbol(l.symbol??null):l.type==="user:theme"?n.updateTheme(l.theme):l.type==="user:mute"?(n.setMuted(l.muted),t({type:"agent:mute_changed",muted:l.muted})):l.type==="ping"&&a.send(JSON.stringify({type:"pong",timestamp:new Date().toISOString()}));}catch{}}),a.on("close",()=>{s.delete(a);}),a.on("error",()=>{s.delete(a);});}),setInterval(()=>{let a=o.pruneStale();for(let c of a)t({type:"agent:leave",agentId:c});},3e4),{broadcast:t,agentPresence:o,userState:n,clientCount:()=>s.size}}function V(r){let s=Router();return s.post("/",(o,n)=>{let{command:t,agentId:e,payload:a}=o.body;if(!t||!e){n.status(400).json({error:"Missing command or agentId"});return}switch(r.agentPresence.getAll().find(l=>l.agentId===e)||(r.agentPresence.join(e),r.broadcast({type:"agent:join",agent:r.agentPresence.getAll().find(l=>l.agentId===e)})),r.agentPresence.touch(e),t){case "navigate":{let{section:l,symbol:i,loreId:u}=a,m=r.userState.isUserActive();if(r.userState.isMuted()){n.json({navigated:false,reason:"Agent actions are muted by user"});return}r.broadcast({type:"agent:navigate",agentId:e,section:l,symbol:i,loreId:u,userActive:m}),l&&r.userState.updateSection(l),i&&r.userState.updateSelectedSymbol(i),n.json({navigated:true,section:l,symbol:i,userActive:m});return}case "highlight":{let{symbols:l,color:i,duration:u,pulse:m,label:d}=a;if(r.userState.isMuted()){n.json({highlighted:false,reason:"Agent actions are muted by user"});return}let f=l||[];r.userState.addHighlight({symbols:f,color:i||r.agentPresence.getAll().find(P=>P.agentId===e)?.color||"#58a6ff",duration:u||5e3,pulse:m??true,label:d,createdAt:Date.now()}),r.broadcast({type:"agent:highlight",agentId:e,symbols:f,color:i||"#58a6ff",duration:u||5e3,pulse:m??true,label:d}),n.json({highlighted:true,count:f.length});return}case "annotate":{let{type:l,message:i,symbol:u,severity:m,duration:d}=a;if(r.userState.isMuted()){n.json({annotated:false,reason:"Agent actions are muted by user"});return}let f=r.userState.addAnnotation({type:l||"toast",message:i||"",symbol:u,severity:m||"info",duration:d||6e3});r.broadcast({type:"agent:annotate",agentId:e,annotation:f}),n.json({annotated:true,id:f.id});return}case "observe":{let l=r.userState.getState(),i=r.agentPresence.getAll(),u=r.clientCount()>0;n.json({connected:u,users:r.clientCount(),agents:i,state:{section:l.section,selectedSymbol:l.selectedSymbol,theme:l.theme,muted:l.muted},highlights:r.userState.getHighlights(),annotations:r.userState.getAnnotations()});return}case "clear":{let{target:l}=a,i=l||"all";(i==="highlights"||i==="all")&&r.userState.clearHighlights(),(i==="annotations"||i==="all")&&r.userState.clearAnnotations(),r.broadcast({type:"agent:clear",agentId:e,target:i}),n.json({cleared:true,target:i});return}default:n.status(400).json({error:`Unknown command: ${t}`});return}}),s}function yt(r){try{return JSON.parse(b.readFileSync(r,"utf-8"))}catch{return null}}function O(r){try{return W.load(b.readFileSync(r,"utf-8"))}catch{return null}}function bt(r){let s=S.join(r,".paradigm","scan-index.json"),o=yt(s);if(!o?.symbols)return {total:0,byType:{}};let n={};for(let t of o.symbols){let e=t.category||"unknown";n[e]=(n[e]||0)+1;}return {total:o.symbols.length,byType:n}}function St(r){let s=S.join(r,".paradigm","lore","entries");if(!b.existsSync(s))return {total:0,thisWeek:0,lastEntry:null,calibrationScore:null,assessed:0};let o=b.readdirSync(s).filter(d=>d.endsWith(".yaml")||d.endsWith(".yml")),t=Date.now()-10080*60*1e3,e=null,a=0,c=0,l=0,i=0,u=0;for(let d of o)try{let p=O(S.join(s,d));if(!p)continue;let f=p.timestamp;if(f){let P=new Date(f).getTime();(!e||P>new Date(e).getTime())&&(e=f),P>=t&&a++;}p.assessment&&(c++,typeof p.confidence=="number"&&typeof p.assessment_delta=="number"&&(l+=p.confidence,i+=Math.abs(p.assessment_delta),u++));}catch{}let m=u>0?Math.max(0,1-i/u):null;return {total:o.length,thisWeek:a,lastEntry:e,calibrationScore:m,assessed:c}}function vt(r){let s=S.join(r,".paradigm","tasks");if(!b.existsSync(s))return {total:0,inProgress:0,completed:0};let o=b.readdirSync(s).filter(e=>e.endsWith(".yaml")||e.endsWith(".yml")),n=0,t=0;for(let e of o)try{let a=O(S.join(s,e));if(!a)continue;let c=a.status;c==="in-progress"||c==="in_progress"?n++:(c==="completed"||c==="done")&&t++;}catch{}return {total:o.length,inProgress:n,completed:t}}function Rt(r){let s=["src","lib","packages"],o=0,n=0;for(let t of s){let e=S.join(r,t);b.existsSync(e)&&tt(e,{},a=>{o+=a.withPurpose,n+=a.total;});}return b.existsSync(S.join(r,".purpose"))&&(o++,n++),n===0?1:o/n}function tt(r,s,o){let n={withPurpose:0,total:0};try{let t=b.readdirSync(r,{withFileTypes:!0});t.some(a=>a.isFile()&&/\.(ts|tsx|js|jsx|rs|py|go|swift)$/.test(a.name))&&(n.total++,t.some(a=>a.isFile()&&a.name===".purpose")&&n.withPurpose++);for(let a of t)a.isDirectory()&&!a.name.startsWith(".")&&a.name!=="node_modules"&&a.name!=="dist"&&tt(S.join(r,a.name),n,c=>{n.withPurpose+=c.withPurpose,n.total+=c.total;});}catch{}o(n);}function jt(r){let s=S.join(r,"portal.yaml");if(!b.existsSync(s))return 1;let o=O(s);return o?.routes?Object.keys(o.routes).length>0?1:.5:1}function wt(r){let s=S.join(r,".paradigm","aspect-graph.db");return b.existsSync(s),1}function At(r){let s=S.join(r,".paradigm","config.yaml"),o=O(s);return {name:o?.project||S.basename(r),discipline:o?.discipline||"general"}}async function Pt(r,s){try{return (await X(r).log({maxCount:s})).all.map(t=>({timestamp:t.date,type:"commit",summary:t.message.split(`
3
+ `)[0],symbol:kt(t.message),link:t.hash.substring(0,7)}))}catch{return []}}function kt(r){let s=r.match(/[#$^!~][\w-]+/);return s?s[0]:void 0}function xt(r,s){let o=S.join(r,".paradigm","lore","entries");if(!b.existsSync(o))return [];let n=b.readdirSync(o).filter(e=>e.endsWith(".yaml")||e.endsWith(".yml")),t=[];for(let e of n)try{let a=O(S.join(o,e));if(!a)continue;t.push({timestamp:a.timestamp||"",type:"lore",summary:a.title||e,symbol:Array.isArray(a.symbols_touched)?a.symbols_touched[0]:void 0,link:a.id});}catch{}return t.sort((e,a)=>new Date(a.timestamp).getTime()-new Date(e.timestamp).getTime()).slice(0,s)}function et(r){return async(s,o)=>{try{let n=At(r),t=bt(r),e=St(r),a=vt(r),c=Rt(r),l=jt(r),i=wt(r),u="unknown";try{u=(await X(r).branch()).current;}catch{}let[m,d]=await Promise.all([Pt(r,20),Promise.resolve(xt(r,20))]),p=[...m,...d].sort((x,g)=>new Date(g.timestamp).getTime()-new Date(x.timestamp).getTime()).slice(0,20),f=e.lastEntry?Math.floor((Date.now()-new Date(e.lastEntry).getTime())/(1e3*60*60*24)):0,P={project:{name:n.name,branch:u,discipline:n.discipline},symbols:t,lore:{total:e.total,thisWeek:e.thisWeek,lastEntry:e.lastEntry},calibration:{score:e.calibrationScore,assessed:e.assessed},tasks:a,health:{purposeCoverage:c,aspectAnchors:i,gateCompliance:l,calibration:e.calibrationScore??1,loreFreshnessDays:f},recentActivity:p};o.json(P);}catch(n){o.status(500).json({error:"Failed to aggregate overview",detail:String(n)});}}}var qt=/[#$^!~][\w-]+/g;function It(r){let s=r.match(qt);return s?[...new Set(s)]:[]}function nt(r){let s=Router(),o=X(r);return s.get("/status",async(n,t)=>{try{let[e,a]=await Promise.all([o.status(),o.branch()]);t.json({branch:a.current,ahead:e.ahead,behind:e.behind,staged:e.staged,unstaged:e.modified.filter(c=>!e.staged.includes(c)),untracked:e.not_added});}catch(e){t.status(500).json({error:"Failed to get git status",detail:String(e)});}}),s.get("/branches",async(n,t)=>{try{let e=await o.branch(),a=Object.values(e.branches).map(c=>({name:c.name,current:c.current,commit:c.commit,label:c.label}));t.json({current:e.current,branches:a});}catch(e){t.status(500).json({error:"Failed to get branches",detail:String(e)});}}),s.get("/log",async(n,t)=>{try{let e=Math.min(parseInt(n.query.limit)||20,100),a=parseInt(n.query.offset)||0,c=await o.log({maxCount:e,"--skip":a}),l=c.all.map(i=>({hash:i.hash,shortHash:i.hash.substring(0,7),message:i.message,author:i.author_name,date:i.date,symbols:It(i.message)}));t.json({commits:l,total:c.total});}catch(e){t.status(500).json({error:"Failed to get git log",detail:String(e)});}}),s.get("/diff",async(n,t)=>{try{let e=n.query.path,a=n.query.staged==="true",c=[];a&&c.push("--cached"),e&&c.push("--",e);let l=await o.diff(c);t.json({diff:l});}catch(e){t.status(500).json({error:"Failed to get diff",detail:String(e)});}}),s.post("/stage",async(n,t)=>{try{let{paths:e}=n.body;if(!e?.length){t.status(400).json({error:"paths is required"});return}await o.add(e),t.json({staged:e});}catch(e){t.status(500).json({error:"Failed to stage files",detail:String(e)});}}),s.post("/unstage",async(n,t)=>{try{let{paths:e}=n.body;if(!e?.length){t.status(400).json({error:"paths is required"});return}await o.reset(["HEAD","--",...e]),t.json({unstaged:e});}catch(e){t.status(500).json({error:"Failed to unstage files",detail:String(e)});}}),s.post("/commit",async(n,t)=>{try{let{message:e}=n.body;if(!e?.trim()){t.status(400).json({error:"message is required"});return}let a=await o.commit(e);t.json({hash:a.commit,summary:a.summary});}catch(e){t.status(500).json({error:"Failed to commit",detail:String(e)});}}),s.post("/push",async(n,t)=>{try{let e=await o.push();t.json({pushed:!0,branch:e.branch,remoteMessages:e.remoteMessages});}catch(e){t.status(500).json({error:"Failed to push",detail:String(e)});}}),s}function N(r){if(!b.existsSync(r))return [];try{let o=b.readFileSync(r,"utf-8").split(`
4
+ `).filter(t=>t.trim()),n=[];for(let t of o)try{n.push(JSON.parse(t));}catch{}return n}catch{return []}}function $t(r,s){let o=S.dirname(r);b.existsSync(o)||b.mkdirSync(o,{recursive:true});let n=s.map(t=>JSON.stringify(t)).join(`
5
+ `)+`
6
+ `;b.writeFileSync(r,n,"utf-8");}function Ot(r){let s=r.match(/^(\d+)(m|h|d)$/);if(!s)return null;let o=parseInt(s[1],10),n=s[2],t=Date.now();switch(n){case "m":return new Date(t-o*60*1e3);case "h":return new Date(t-o*60*60*1e3);case "d":return new Date(t-o*24*60*60*1e3);default:return null}}function rt(r,s){let o=Router(),n=S.join(r,".paradigm","events","stream.jsonl"),t=S.join(r,".paradigm","events","nominations.jsonl"),e=S.join(r,".paradigm","events","debates.jsonl"),a=S.join(r,".paradigm","data-policy.yaml");return o.get("/events",(c,l)=>{try{let{type:i,source:u,symbol:m,agent:d,since:p,limit:f}=c.query,P=f?parseInt(f,10):50,x=p?Ot(p):null,g=N(n);i&&(g=g.filter(w=>w.type===i)),u&&(g=g.filter(w=>w.source===u)),m&&(g=g.filter(w=>w.symbol===m)),d&&(g=g.filter(w=>w.agent===d)),x&&(g=g.filter(w=>w.timestamp?new Date(w.timestamp).getTime()>=x.getTime():!1));let T=g.slice(-P);s.broadcast({type:"ambient:event",action:"query",count:T.length}),l.json(T);}catch(i){l.status(500).json({error:"Failed to query events",detail:String(i)});}}),o.get("/nominations",(c,l)=>{try{let{agent:i,urgency:u,pending_only:m,include_debates:d,limit:p}=c.query,f=p?parseInt(p,10):20,P=m!=="false",x=d==="true",g=N(t);i&&(g=g.filter(k=>k.agent===i)),u&&(g=g.filter(k=>k.urgency===u)),P&&(g=g.filter(k=>!k.engaged)),g=g.slice(-f);let T;if(x){let k=N(e);T=new Map;for(let I of k)if(I.nominationId){let z=T.get(I.nominationId)||[];z.push(I),T.set(I.nominationId,z);}}let w=g.map(k=>{let I={...k};return x&&T&&k.id&&(I.debates=T.get(k.id)||[]),I});l.json(w);}catch(i){l.status(500).json({error:"Failed to query nominations",detail:String(i)});}}),o.post("/nominations/:id/engage",(c,l)=>{try{let{id:i}=c.params,{response:u}=c.body;if(!u||!["accepted","dismissed","deferred"].includes(u)){l.status(400).json({error:"response must be one of: accepted, dismissed, deferred"});return}let m=N(t),d=m.findIndex(p=>p.id===i);if(d===-1){l.status(404).json({error:`Nomination not found: ${i}`});return}m[d]={...m[d],engaged:!0,response:u},$t(t,m),s.broadcast({type:"ambient:nomination",action:"engaged",nominationId:i,response:u}),l.json(m[d]);}catch(i){l.status(500).json({error:"Failed to engage nomination",detail:String(i)});}}),o.get("/stream",(c,l)=>{l.setHeader("Content-Type","text/event-stream"),l.setHeader("Cache-Control","no-cache"),l.setHeader("Connection","keep-alive"),l.flushHeaders();let i=0;try{i=b.statSync(n).size;}catch{}let m=setInterval(()=>{try{if(!b.existsSync(n))return;let d=b.statSync(n);if(d.size<=i)if(d.size<i)i=0;else return;let p=b.openSync(n,"r"),f=Buffer.alloc(d.size-i);b.readSync(p,f,0,f.length,i),b.closeSync(p),i=d.size;let x=f.toString("utf-8").split(`
7
+ `).filter(g=>g.trim());for(let g of x)try{let T=JSON.parse(g);l.write(`data: ${JSON.stringify(T)}
8
+
9
+ `);}catch{}}catch{}},1e3);l.write(`: connected
10
+
11
+ `),c.on("close",()=>{clearInterval(m);});}),o.get("/policy",(c,l)=>{try{if(b.existsSync(a)){let i=b.readFileSync(a,"utf-8"),u=W.load(i);l.json(u);}else l.json({version:"1.0",retention:{events:"30d",nominations:"90d",debates:"90d"},collection:{telemetry:!1,usage:!1},sharing:{external:!1}});}catch(i){l.status(500).json({error:"Failed to read data policy",detail:String(i)});}}),o}function Ct(r){if(!b.existsSync(r))return [];try{return b.readFileSync(r,"utf-8").trim().split(`
12
+ `).filter(s=>s.trim()).map(s=>{try{return JSON.parse(s)}catch{return null}}).filter(s=>s!==null)}catch{return []}}function _t(){let r=S.join(H.homedir(),".paradigm","agents"),s=[];if(!b.existsSync(r))return s;for(let o of b.readdirSync(r).filter(n=>n.endsWith(".agent")))try{let n=b.readFileSync(S.join(r,o),"utf-8"),t=W.load(n);if(!t?.id)continue;let e=t.expertise||[];e.sort((a,c)=>c.confidence-a.confidence),s.push({id:t.id,role:t.role||t.id,nickname:t.nickname,benched:t.benched||!1,expertiseCount:e.length,topExpertise:e.slice(0,3).map(a=>({symbol:a.symbol,confidence:parseFloat(a.confidence.toFixed(2))})),threshold:t.attention?.threshold});}catch{}return s}function Et(){let r=S.join(H.homedir(),".paradigm","mail","agents");if(!b.existsSync(r))return [];let s=[];try{for(let t of b.readdirSync(r,{withFileTypes:!0})){if(!t.isDirectory())continue;let e=S.join(r,t.name);for(let a of ["inbox.jsonl","outbox.jsonl"]){let c=S.join(e,a),l=Ct(c);for(let i of l)i.threadRoot?.startsWith("thr-orch-")&&(s.some(u=>u.id===i.id)||s.push({id:i.id,threadRoot:i.threadRoot,timestamp:i.timestamp,sender:{name:i.sender?.name||"unknown",role:i.sender?.role,project:i.sender?.project},intent:i.intent||"context",text:i.content?.text||"",symbols:i.symbols||[],diff:i.content?.diff,decision:i.content?.decision}));}}}catch{}let o=new Map;for(let t of s){let e=t.threadRoot;o.has(e)||o.set(e,[]),o.get(e).push(t);}let n=[];for(let[t,e]of o){e.sort((i,u)=>i.timestamp.localeCompare(u.timestamp));let c=t.replace("thr-orch-","").split("-"),l=c[0]?`Team ${c[0]}`:t;n.push({id:t,displayName:l,messages:e,lastActivity:e[e.length-1]?.timestamp||""});}return n.sort((t,e)=>e.lastActivity.localeCompare(t.lastActivity)),n}function ot(r){let s=Router();return s.get("/roster",(o,n)=>{try{let t=_t(),e=t.filter(c=>!c.benched),a=t.filter(c=>c.benched);n.json({active:e,benched:a,total:t.length});}catch(t){n.status(500).json({error:"Failed to load roster",detail:String(t)});}}),s.get("/threads",(o,n)=>{try{let t=Et();n.json({threads:t,count:t.length});}catch(t){n.status(500).json({error:"Failed to load threads",detail:String(t)});}}),s.patch("/agents/:id/bench",(o,n)=>{try{let{id:t}=o.params,{benched:e}=o.body,a=S.join(H.homedir(),".paradigm","agents"),c=S.join(a,`${t}.agent`);if(!b.existsSync(c)){n.status(404).json({error:`Agent "${t}" not found`});return}let l=b.readFileSync(c,"utf-8"),i=W.load(l);i.benched=e,i.updated=new Date().toISOString(),b.writeFileSync(c,W.dump(i,{lineWidth:120,noRefs:!0,sortKeys:!1}),"utf-8"),n.json({id:t,benched:e,updated:i.updated});}catch(t){n.status(500).json({error:"Failed to update agent",detail:String(t)});}}),s}var Nt=new Set(["node_modules",".git","dist",".next","build",".paradigm",".turbo",".cache","coverage",".output"]);function it(r,s){let o=[],n;try{n=b.readdirSync(r,{withFileTypes:!0});}catch{return o}for(let t of n)t.isDirectory()?!Nt.has(t.name)&&!t.name.startsWith(".")&&o.push(...it(S.join(r,t.name),s)):t.isFile()&&t.name.endsWith(".canvas")&&o.push(S.relative(s,S.join(r,t.name)));return o}var $=null,at=0,Ht=5e3;function Jt(r){let s=Date.now();if($&&s-at<Ht)return $;let o=b.readdirSync(r).filter(t=>t.endsWith(".canvas")).map(t=>t),n=it(r,r).filter(t=>!o.includes(t));return $=[...o,...n],at=s,$}function J(r,s){let o=S.resolve(r,s);return !o.startsWith(r+S.sep)&&o!==r||!o.endsWith(".canvas")?null:o}function ct(r){let s=Router();return s.get("/files",(o,n)=>{try{let e=Jt(r).map(a=>{let c=S.join(r,a);try{let l=b.statSync(c),i=S.basename(a,".canvas"),u="";try{let m=W.load(b.readFileSync(c,"utf8"));m&&typeof m.name=="string"&&(i=m.name),m&&typeof m.description=="string"&&(u=m.description);}catch{}return {path:a,name:i,description:u,modified:l.mtime.toISOString(),size:l.size}}catch{return null}}).filter(Boolean);e.sort((a,c)=>c.modified.localeCompare(a.modified)),n.json({files:e});}catch(t){n.status(500).json({error:"Failed to list canvas files",details:t.message});}}),s.get("/files/*",(o,n)=>{let t=o.params[0]||o.params.path||"";if(!t){n.status(400).json({error:"File path required"});return}let e=J(r,t);if(!e){n.status(400).json({error:"Invalid path"});return}if(!b.existsSync(e)){n.status(404).json({error:`Canvas file not found: ${t}`});return}try{let a=b.readFileSync(e,"utf8"),c=W.load(a);n.json(c);}catch(a){n.status(500).json({error:"Failed to read canvas file",details:a.message});}}),s.put("/files/*",(o,n)=>{let t=o.params[0]||o.params.path||"";if(!t){n.status(400).json({error:"File path required"});return}let e=J(r,t);if(!e){n.status(400).json({error:"Invalid path"});return}try{let a=o.body;if(!a||typeof a!="object"){n.status(400).json({error:"Request body must be a JSON object"});return}let c=new Date().toISOString();a.created||(a.created=c),a.updated=c;let l=S.dirname(e);b.existsSync(l)||b.mkdirSync(l,{recursive:!0});let i=W.dump(a,{lineWidth:-1,noRefs:!0,quotingType:'"',forceQuotes:!1});b.writeFileSync(e,i,"utf8"),$=null,n.json({saved:!0,path:t});}catch(a){n.status(500).json({error:"Failed to save canvas file",details:a.message});}}),s.delete("/files/*",(o,n)=>{let t=o.params[0]||o.params.path||"";if(!t){n.status(400).json({error:"File path required"});return}let e=J(r,t);if(!e){n.status(400).json({error:"Invalid path"});return}if(!b.existsSync(e)){n.status(404).json({error:`Canvas file not found: ${t}`});return}try{b.unlinkSync(e),$=null,n.json({deleted:!0,path:t});}catch(a){n.status(500).json({error:"Failed to delete canvas file",details:a.message});}}),s}var zt=fileURLToPath(import.meta.url),lt=S.dirname(zt),v={component(r){let s=A.magenta(`#${r}`);return {info:(o,n)=>{let t=n?A.gray(` ${Object.entries(n).map(([e,a])=>`${e}=${a}`).join(" ")}`):"";console.log(`${A.blue("i")} ${s} ${o}${t}`);},success:(o,n)=>{let t=n?A.gray(` ${Object.entries(n).map(([e,a])=>`${e}=${a}`).join(" ")}`):"";console.log(`${A.green("+")} ${s} ${o}${t}`);},warn:(o,n)=>{let t=n?A.gray(` ${Object.entries(n).map(([e,a])=>`${e}=${a}`).join(" ")}`):"";console.log(`${A.yellow("!")} ${s} ${o}${t}`);},error:(o,n)=>{let t=n?A.gray(` ${Object.entries(n).map(([e,a])=>`${e}=${a}`).join(" ")}`):"";console.error(`${A.red("x")} ${s} ${o}${t}`);}}}};function mt(r){let s=["overview","lore","graph","canvas","git","ambient","team"],o=r.sections??[...s,"sentinel","university","symphony","docs"],n=new Set;for(let t of o){if(s.includes(t)){n.add(t);continue}if(t==="sentinel"){let e=S.join(r.projectDir,".paradigm");b.existsSync(e)&&n.add(t);}else if(t==="university")n.add(t);else if(t==="symphony"){let e=S.join(process.env.HOME||"~",".paradigm","score");b.existsSync(e)&&n.add(t);}else n.add(t);}return n}function Gt(r){let s=U(),o=mt(r);s.use(U.json()),s.use((t,e,a)=>{if(e.header("Access-Control-Allow-Origin","*"),e.header("Access-Control-Allow-Methods","GET, POST, PUT, DELETE, OPTIONS"),e.header("Access-Control-Allow-Headers","Content-Type"),t.method==="OPTIONS"){e.sendStatus(204);return}a();}),s.use("/api/lore",a(r.projectDir)),s.use("/api/info",b$1(r.projectDir)),s.use("/api/sessions",c(r.projectDir)),s.use("/api/symbols",a$1(r.projectDir)),s.use("/api/graphs",b$2(r.projectDir)),s.get("/api/platform/overview",et(r.projectDir)),s.use("/api/canvas",ct(r.projectDir)),s.use("/api/git",nt(r.projectDir)),s.get("/api/platform/health",(t,e)=>{e.json({status:"ok",timestamp:new Date().toISOString(),sections:Array.from(o)});}),s.get("/api/platform/sections",(t,e)=>{e.json({sections:Array.from(o)});}),s.get("/api/health",(t,e)=>{e.json({status:"ok",timestamp:new Date().toISOString()});}),s.set("agentRouterSlot",true);let n=S.join(lt,"..","platform-ui","dist");return b.existsSync(n)||(n=S.join(lt,"..","..","platform-ui","dist")),b.existsSync(n)?(s.use(U.static(n)),s.get("{*path}",(t,e,a)=>{t.path.startsWith("/api")?a():e.sendFile(S.join(n,"index.html"));})):s.get("/",(t,e)=>{e.send(`
13
+ <html>
14
+ <head><title>Paradigm Platform</title></head>
15
+ <body style="background:#0d1117;color:#e6edf3;font-family:system-ui;display:flex;align-items:center;justify-content:center;height:100vh;margin:0">
16
+ <div style="text-align:center">
17
+ <h1 style="font-size:2rem;margin-bottom:8px">Paradigm Platform</h1>
18
+ <p style="color:#8b949e">UI not built yet. Run <code style="background:#21262d;padding:4px 8px;border-radius:4px">cd platform-ui && npx vite build</code></p>
19
+ <p style="color:#8b949e;margin-top:16px">APIs available:</p>
20
+ <p><a href="/api/lore" style="color:#58a6ff">/api/lore</a> &middot; <a href="/api/symbols" style="color:#58a6ff">/api/symbols</a> &middot; <a href="/api/platform/health" style="color:#58a6ff">/api/platform/health</a></p>
21
+ </div>
22
+ </body>
23
+ </html>
24
+ `);}),s}async function Pe(r){let s=Gt(r),o=mt(r);v.component("platform-server").info("Starting Paradigm Platform",{port:r.port}),v.component("platform-server").info("Project directory",{path:r.projectDir}),v.component("platform-server").info("Sections",{enabled:Array.from(o).join(", ")});let n=ut.createServer(s),t=Q(n);if(s.use("/api/platform/agent-command",V(t)),s.use("/api/ambient",rt(r.projectDir,t)),s.use("/api/team",ot(r.projectDir)),o.has("sentinel"))try{let{createSentinelBridge:e}=await import('./sentinel-bridge-VR357PKL.js'),a=await e(r.projectDir,t.broadcast);a&&(s.use("/api/sentinel",a),v.component("platform-server").success("Sentinel routes mounted"));}catch{v.component("platform-server").warn("Sentinel not available");}if(o.has("symphony"))try{let{createSymphonyRouter:e}=await import('./symphony-3QMBGCZY.js');s.use("/api/symphony",e(r.projectDir,t.broadcast)),v.component("platform-server").success("Symphony routes mounted");}catch{v.component("platform-server").warn("Symphony routes failed to mount");}if(o.has("docs"))try{let{createDocsRouter:e}=await import('./docs-EDQ2STFK.js');s.use("/api/docs",e(r.projectDir)),v.component("platform-server").success("Docs routes mounted");}catch{v.component("platform-server").warn("Docs routes failed to mount");}return new Promise((e,a)=>{n.listen(r.port,()=>{v.component("platform-server").success("Platform running",{url:`http://localhost:${r.port}`}),v.component("platform-ws").success("WebSocket ready",{url:`ws://localhost:${r.port}/ws`}),console.log(""),console.log(A.gray(" Sections:"));for(let c of o)console.log(A.gray(` ${A.cyan("\u25CF")} ${c}`));console.log(""),r.open&&import('open').then(c=>{c.default(`http://localhost:${r.port}`),v.component("platform-server").info("Opened browser");}).catch(()=>{v.component("platform-server").warn("Could not open browser automatically");}),e();}),n.on("error",c=>{c.code==="EADDRINUSE"?v.component("platform-server").error("Port already in use",{port:r.port}):v.component("platform-server").error("Server error",{error:c.message}),a(c);});})}
25
+ export{Gt as createPlatformApp,Pe as startPlatformServer};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export{a as getPluginUpdateNotice,c as runPluginUpdateCheck,b as schedulePluginUpdateCheck}from'./chunk-4UJ4NIEQ.js';import'./chunk-5TAVYPOV.js';
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import {d,e}from'./chunk-NW6OKHE6.js';import'./chunk-5TAVYPOV.js';import n from'chalk';async function c(l){let s=process.cwd(),e$1=await d(s);if(l.json)console.log(JSON.stringify({status:e$1.status,declaredButUnusedCount:e$1.declaredButUnused.length,usedButUndeclaredCount:e$1.usedButUndeclared.length,properlyDeclaredCount:e$1.properlyDeclared.length,declaredButUnused:e$1.declaredButUnused,usedButUndeclared:e$1.usedButUndeclared,properlyDeclared:e$1.properlyDeclared}));else {let o=e(e$1);e$1.status==="compliant"?console.log(n.green(`
3
+ ${o}
4
+ `)):e$1.status==="warnings"?console.log(n.yellow(`
5
+ ${o}
6
+ `)):console.log(n.red(`
7
+ ${o}
8
+ `));}}export{c as portalCheckCommand};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export{d as checkPortalCompliance,b as extractDeclaredGates,c as findGateReferences,e as formatComplianceReport,f as getComplianceSummary,a as loadPortalConfig}from'./chunk-NW6OKHE6.js';import'./chunk-5TAVYPOV.js';
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ import {a as a$1,c}from'./chunk-JBDMCRPP.js';import {a,b}from'./chunk-4TXOVRWD.js';import {m}from'./chunk-T6IDXUUA.js';import'./chunk-JIXHEBGK.js';import'./chunk-QT2LKB3P.js';import'./chunk-VCKKJDLP.js';import'./chunk-WR6D3SC6.js';import {e as e$1}from'./chunk-JQKKVAAN.js';import'./chunk-5TAVYPOV.js';import*as n from'fs';import*as e from'path';import s from'chalk';import I from'ora';async function T(i,o){let a$2=i?e.resolve(i):process.cwd(),m$1=e.basename(a$2),g=I(),f=e.join(a$2,".paradigm"),F=n.existsSync(f)&&n.statSync(f).isFile(),p;o.output?p=e.resolve(o.output):F?p=e.join(a$2,".paradigm-scan-index.json"):(p=e.join(a$2,".paradigm","scan-index.json"),n.existsSync(e.dirname(p))||n.mkdirSync(e.dirname(p),{recursive:true})),o.quiet||console.log(s.blue(`
3
+ \u{1F52D} Generating Paradigm Scan Index
4
+ `));let y,k=[e.join(a$2,".paradigm"),e.join(a$2,".paradigm","config.yaml")];for(let c of k)if(n.existsSync(c)&&n.statSync(c).isFile())try{let t=n.readFileSync(c,"utf8");y=e$1(t).scan;break}catch{}g.start("Aggregating symbols from purpose and gate files...");let r;try{r=await m(a$2);}catch(c){g.fail(s.red("Failed to aggregate symbols")),console.error(s.gray(c.message)),process.exit(1);}if(g.succeed(`Found ${r.symbols.length} symbols`),!o.quiet){let c={components:r.symbols.filter(t=>t.type==="component").length,flows:r.symbols.filter(t=>t.type==="flow").length,gates:r.symbols.filter(t=>t.type==="gate").length,signals:r.symbols.filter(t=>t.type==="signal").length,aspects:r.symbols.filter(t=>t.type==="aspect").length};console.log(s.gray(" Breakdown:"));for(let[t,u]of Object.entries(c))u>0&&console.log(s.gray(` ${t}: ${u}`));console.log();}g.start("Generating scan index...");let l=a({symbols:r.symbols,purposeFiles:r.purposeFiles,portalFiles:r.portalFiles},{projectName:m$1,visualTagMappings:y?.visualTagMappings,screenDefinitions:y?.screens});try{n.writeFileSync(p,b(l),"utf8"),g.succeed(s.green("Scan index generated"));}catch(c){g.fail(s.red("Failed to write scan index")),console.error(s.gray(c.message)),process.exit(1);}await a$1(a$2,r,{quiet:o.quiet});let d=await c(a$2,r.purposeFiles,{quiet:o.quiet});if(d&&Object.keys(d.flows).length>0){let c=e.join(a$2,".paradigm","flow-index.json");if(n.writeFileSync(c,JSON.stringify(d,null,2),"utf8"),!o.quiet){let t=Object.keys(d.symbolToFlows).length;g.succeed(s.green(`Flow index generated (${Object.keys(d.flows).length} flows, ${t} symbol mappings)`));}}return o.quiet||(console.log(s.gray(`
5
+ Output: ${p}`)),console.log(s.gray(` Components: ${Object.keys(l.components).length}`)),console.log(s.gray(` Features: ${Object.keys(l.features).length}`)),console.log(s.gray(` Flows: ${Object.keys(l.flows).length}`)),console.log(s.gray(` State: ${Object.keys(l.state).length}`)),console.log(s.gray(` Gates: ${Object.keys(l.gates).length}`)),console.log(s.gray(` Signals: ${Object.keys(l.signals).length}`)),console.log(s.gray(` Aspects: ${Object.keys(l.aspects).length}`)),console.log(),console.log(s.blue('\u2728 Scan index ready for "paradigm scan" queries')),console.log(s.gray(` Attach an image and say "paradigm scan" to map UI to code
6
+ `))),l}function N(i){let o=e.join(i,".paradigm");return n.existsSync(o)&&n.statSync(o).isFile()?e.join(i,".paradigm-scan-index.json"):e.join(i,".paradigm","scan-index.json")}function R(i){return n.existsSync(e.join(i,".paradigm","scan-index.json"))||n.existsSync(e.join(i,".paradigm-scan-index.json"))}function E(i){let o=[e.join(i,".paradigm","scan-index.json"),e.join(i,".paradigm-scan-index.json")];for(let a of o)if(n.existsSync(a))try{let m=n.readFileSync(a,"utf8"),g=JSON.parse(m),f=new Date(g.$meta.generatedAt).getTime();return Date.now()-f}catch{continue}return null}export{E as getScanIndexAge,N as getScanIndexPath,T as indexCommand,R as scanIndexExists};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export{b as ROSTER_SUGGESTIONS,a as detectProjectType}from'./chunk-AGVAHVUA.js';import'./chunk-5TAVYPOV.js';
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import {h,d,e,f as f$1,a,b,c as c$1}from'./chunk-WR6D3SC6.js';import'./chunk-5TAVYPOV.js';import*as t from'fs';import*as c from'path';import*as w from'os';import {execSync}from'child_process';import C from'ora';var f=c.join(w.homedir(),".paradigm-cli"),x=["packages/paradigm/dist","packages/paradigm/lore-ui/dist","packages/paradigm-mcp/dist","packages/premise/core/dist","packages/portal/core/dist","packages/purpose/core/dist","packages/sentinel/dist"];function D(){let r=process.cwd();for(let o=0;o<5;o++){if(t.existsSync(c.join(r,"packages","paradigm","package.json"))&&t.existsSync(c.join(r,"packages","paradigm-mcp","package.json")))return r;let s=c.dirname(r);if(s===r)break;r=s;}return null}function $(r,o){let s=0,i=[];if(!t.existsSync(r))return i.push(`Source not found: ${r}`),{files:s,errors:i};t.mkdirSync(o,{recursive:true});let n=t.readdirSync(r,{withFileTypes:true});for(let l of n){let d=c.join(r,l.name),e=c.join(o,l.name);try{if(l.isDirectory()){let p=$(d,e);s+=p.files,i.push(...p.errors);}else t.copyFileSync(d,e),s++;}catch(p){i.push(`Failed to copy ${d}: ${p instanceof Error?p.message:String(p)}`);}}return {files:s,errors:i}}async function E(r){let o=C(),s=D();if(!s){r.json?h({error:"Not in paradigm source repo"}):(d("Not in the paradigm source repository."),e(`Run this command from the a-paradigm directory.
3
+ `));return}if(!t.existsSync(f)){if(!r.force){r.json?h({error:"Production directory not found",path:f}):(d(`Production directory not found: ${f}`),e("Paradigm CLI may not be globally installed."),e(`Install with: curl -fsSL https://a-company.org/install | bash
4
+ `));return}t.mkdirSync(f,{recursive:true});}if(r.json||(f$1("\u{1F4E6} Promoting local build to production"),a(""),e(` Source: ${s}`),e(` Target: ${f}
5
+ `)),!r.skipBuild){o.start("Building packages...");try{execSync("npm run build",{cwd:s,stdio:"pipe",timeout:12e4}),o.succeed("Build complete");}catch(e$1){o.fail("Build failed"),r.json?h({error:"Build failed",details:e$1 instanceof Error?e$1.message:String(e$1)}):(d(`${e$1 instanceof Error?e$1.message:e$1}`),e(`Fix build errors and try again, or use --skip-build.
6
+ `));return}}o.start("Copying dist/ to production...");let i=0,n=[],l=[];for(let e of x){let p=c.join(s,e),b=c.join(f,e);if(!t.existsSync(p))continue;let{files:h,errors:y}=$(p,b);i+=h,n.push(...y),y.length===0&&h>0&&l.push(e);}n.length>0?o.warn(`Copied with ${n.length} error(s)`):o.succeed(`Copied ${i} files`),o.start("Switching MCP configs to PROD...");try{let{mcpUseProdCommand:e}=await import('./switch-CTW4PDGI.js');await e({json:!0}),o.succeed("MCP configs switched to PROD");}catch{o.info("MCP config switch skipped (no configs found)");}let d$1="unknown";try{d$1=execSync("paradigm --version",{encoding:"utf-8",timeout:5e3}).trim();}catch{}if(r.json)h({success:n.length===0,source:s,target:f,packages:l,totalFiles:i,errors:n,version:d$1});else {if(a(""),n.length===0)b(`Promotion complete!
7
+ `);else {c$1(`Promotion completed with ${n.length} error(s)
8
+ `);for(let e of n.slice(0,5))d(` ${e}`);a("");}e(` Packages: ${l.length}`),e(` Files: ${i}`),e(` Version: ${d$1}`),a("");}}export{E as promoteCommand};
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import {c,e as e$1,b as b$1,d}from'./chunk-IZSBGW6E.js';import'./chunk-5TAVYPOV.js';import*as f from'path';import e from'chalk';async function b(t,r){let s=t?f.resolve(t):process.cwd();if(r.set){try{await c(r.set,s),r.json?console.log(JSON.stringify({success:!0,provider:r.set})):(console.log(e.green(`
3
+ \u2713 Provider set to: ${r.set}
4
+ `)),r.set==="auto"?console.log(e.gray(`Will auto-detect best available provider.
5
+ `)):console.log(e.gray(`Will use ${r.set} if available, otherwise fall back.
6
+ `)));}catch(o){r.json?console.log(JSON.stringify({error:o instanceof Error?o.message:String(o)})):console.log(e.red(`
7
+ Error: ${o instanceof Error?o.message:o}
8
+ `));}return}let i=await e$1(s),a=b$1(s),l=await d(s);if(r.json){console.log(JSON.stringify({configured:a,selected:l.name,reason:l.reason,providers:i},null,2));return}console.log(),console.log(e.blue("\u2501".repeat(60))),console.log(e.blue(" Agent Providers")),console.log(e.blue("\u2501".repeat(60))),console.log(),console.log(e.cyan(" Configuration:")),console.log(a==="auto"?e.gray(" agent-provider: auto (auto-detect)"):e.white(` agent-provider: ${a}`)),console.log(e.gray(" Set via: PARADIGM_AGENT_PROVIDER env or .paradigm/config.yaml")),console.log(),console.log(e.cyan(" Available Providers:")),console.log();for(let o of i){let m=o.available?e.green("\u2713"):e.gray("\u2717"),v=o.name===l.name?e.yellow(" \u2190 active"):"",p=o.name===a?e.cyan(" (configured)"):"";console.log(` ${m} ${e.white(o.name.padEnd(12))}${v}${p}`),console.log(e.gray(` ${o.reason}`));let n=[];o.features.parallel&&n.push("parallel"),o.features.mcp&&n.push("MCP"),n.push(o.features.billing==="api"?"API billing":o.features.billing==="subscription"?"Max/subscription":"free"),console.log(e.gray(` ${n.join(" \xB7 ")}`)),console.log();}console.log(e.gray("\u2500".repeat(60))),console.log(),console.log(e.cyan(" Active Provider:")),console.log(e.white(` ${l.name}`)),console.log(e.gray(` ${l.reason}`)),console.log(),console.log(e.gray("\u2500".repeat(60))),console.log(),console.log(e.cyan(" Set Provider Preference:")),console.log(e.gray(" paradigm team providers --set auto # Auto-detect (default)")),console.log(e.gray(" paradigm team providers --set claude # Always use API")),console.log(e.gray(" paradigm team providers --set claude-code # Use Max subscription")),console.log(e.gray(" paradigm team providers --set manual # Manual handoffs only")),console.log(),console.log(e.gray(" Or set environment variable:")),console.log(e.gray(" export PARADIGM_AGENT_PROVIDER=claude-code")),console.log();}export{b as teamProvidersCommand};
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ import {c,h}from'./chunk-D34YFK4M.js';import'./chunk-5TAVYPOV.js';import o from'chalk';import*as $ from'readline';import {execSync}from'child_process';import*as w from'os';function S(){try{return execSync("git config user.name",{encoding:"utf-8",timeout:3e3}).trim().toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").slice(0,20)||"unknown"}catch{try{return w.userInfo().username}catch{return "unknown"}}}function z(s,r){return new Promise(e=>s.question(r,e))}async function x(s){let r=process.cwd(),e=c(r,s);if(e||(console.error(o.red(`
3
+ Quiz "${s}" not found
4
+ `)),process.exit(1)),e.questions.length===0){console.log(o.yellow(`
5
+ Quiz "${s}" has no questions.
6
+ `));return}let g=$.createInterface({input:process.stdin,output:process.stdout});console.log(o.blue(`
7
+ ${e.title}`)),e.description&&console.log(o.gray(` ${e.description}`)),console.log(o.gray(` ${e.questions.length} questions \xB7 Pass: ${e.passThreshold*100}%
8
+ `));let c$1=0;for(let i=0;i<e.questions.length;i++){let n=e.questions[i];console.log(o.white(` ${i+1}. ${n.question}`));let u=Object.keys(n.choices).sort();for(let f of u)console.log(` ${o.cyan(f)}: ${n.choices[f]}`);let t="";for(;!u.includes(t.toUpperCase());)t=await z(g,o.gray(` Your answer (${u.join("/")}): `)),t=t.trim().toUpperCase();t===n.correct?(c$1++,console.log(o.green(" Correct!"))):console.log(o.red(` Wrong \u2014 correct answer: ${n.correct}`)),n.explanation&&console.log(o.gray(` \u2192 ${n.explanation}`)),console.log();}g.close();let l=e.questions.length,a=Math.round(c$1/l*1e4)/100,p=a/100>=e.passThreshold,d=S();console.log(o.blue(" \u2500\u2500\u2500 Results \u2500\u2500\u2500")),console.log(` Score: ${c$1}/${l} (${a}%)`),console.log(` Pass threshold: ${e.passThreshold*100}%`),console.log(p?o.green(" PASSED"):o.red(" FAILED"));let m=`D-${new Date().toISOString().slice(0,10)}-${d}-${s.replace(/^Q-/,"")}`,q={id:m,type:"quiz",student:d,earnedAt:new Date().toISOString(),source:s,score:c$1,total:l,percentage:a,passed:p};h(r,q),console.log(o.gray(`
9
+ Diploma saved: ${m}
10
+ `));}export{x as universityQuizCommand};
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ import {b,c}from'./chunk-WS2N27RX.js';import'./chunk-5TAVYPOV.js';import d from'chalk';async function f(e){let s=process.cwd(),n;e.confidence!=null&&(n=parseFloat(e.confidence),(isNaN(n)||n<0||n>1)&&(console.error(d.red(`
3
+ Error: --confidence must be a number between 0.0 and 1.0
4
+ `)),process.exit(1)));let i={id:"",type:e.type||"human-note",timestamp:new Date().toISOString(),duration_minutes:e.duration?parseInt(e.duration,10):void 0,author:e.author||b(),title:e.title||"Untitled",summary:e.summary||"",symbols_touched:e.symbols?e.symbols.split(",").map(r=>r.trim()):[],files_modified:e.filesModified?e.filesModified.split(",").map(r=>r.trim()):void 0,files_created:e.filesCreated?e.filesCreated.split(",").map(r=>r.trim()):void 0,commit:e.commit||void 0,learnings:e.learnings?e.learnings.split(",").map(r=>r.trim()):void 0,tags:e.tags?e.tags.split(",").map(r=>r.trim()):void 0,meta:e.meta?JSON.parse(e.meta):void 0,body:e.body||void 0,linked_lore:e.linkLore?e.linkLore.split(",").map(r=>r.trim()):void 0,linked_commits:e.linkCommits?e.linkCommits.split(",").map(r=>r.trim()):void 0,confidence:n};await c(s,i),console.log(d.green(`
5
+ Lore entry recorded: ${i.id}
6
+ `));}export{f as loreRecordCommand};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export{ma as getReindexToolsList,na as handleReindexTool,oa as rebuildStaticFiles}from'./chunk-V7K6CQVX.js';import'./chunk-M4UMM6DC.js';import'./chunk-ODVKPZZ4.js';import'./chunk-4ZGGWZ32.js';import'./chunk-AD5TAD2A.js';import'./chunk-5TAVYPOV.js';
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ import {f as f$1,d}from'./chunk-JIXHEBGK.js';import'./chunk-5TAVYPOV.js';import*as g from'path';import o from'chalk';import f from'ora';async function h(i){let a=process.cwd(),p=g.resolve(a,i);console.log(o.blue(`
3
+ \u{1F4D6} Remembering Purpose...
4
+ `));let s=f("Aggregating purpose files...").start();try{let r=await f$1(p),e=d(r);if(s.succeed(`Found ${r.length} purpose file(s)`),console.log(o.white(`
5
+ `+"\u2550".repeat(50))),e.description&&(console.log(o.white(`
6
+ Description`)),console.log(o.gray("\u2500".repeat(50))),console.log(o.cyan(e.description))),e.context.length>0){console.log(o.white(`
7
+ Context`)),console.log(o.gray("\u2500".repeat(50)));for(let n of e.context)console.log(o.gray(" \u2022 ")+n);}if(Object.keys(e.rules).length>0){console.log(o.white(`
8
+ Rules`)),console.log(o.gray("\u2500".repeat(50)));for(let[n,t]of Object.entries(e.rules))console.log(o.gray(" ")+o.yellow(n)+o.gray(": ")+String(t));}if(Object.keys(e.features).length>0){console.log(o.white(`
9
+ Features`)),console.log(o.gray("\u2500".repeat(50)));for(let[n,t]of Object.entries(e.features))console.log(o.blue(" @"+n)),t.description&&console.log(o.gray(" "+t.description));}if(Object.keys(e.components).length>0){console.log(o.white(`
10
+ Components`)),console.log(o.gray("\u2500".repeat(50)));for(let[n,t]of Object.entries(e.components))console.log(o.green(" #"+n)),t.description&&console.log(o.gray(" "+t.description));}if(e.ruleConflicts.length>0){console.log(o.yellow(`
11
+ Warnings`)),console.log(o.gray("\u2500".repeat(50)));for(let n of e.ruleConflicts)console.log(o.yellow(" \u26A0 "+n));}console.log(o.white(`
12
+ `+"\u2550".repeat(50)+`
13
+ `));}catch(r){s.fail("Failed to aggregate"),console.log(o.red(`Error: ${r.message}
14
+ `));}}export{h as purposeRememberCommand};
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ import {d,h}from'./chunk-WS2N27RX.js';import'./chunk-5TAVYPOV.js';import r from'chalk';async function w(e){let c=process.cwd(),t=e.add,s=e.remove;!t&&!s&&(console.error(r.red(`
3
+ Must specify --add <tag> or --remove <tag>
4
+ `)),process.exit(1));let n={};e.type&&(n.type=e.type),e.symbol&&(n.symbol=e.symbol),e.author&&(n.author=e.author),e.from&&(n.dateFrom=e.from),e.to&&(n.dateTo=e.to),e.tags&&(n.tags=e.tags.split(",").map(o=>o.trim()));let g=await d(c,n);if(g.length===0){console.log(r.yellow(`
5
+ No matching entries found
6
+ `));return}let f=!!e.dryRun,l=0;for(let o of g){let i=o.tags||[],d;if(t){if(i.includes(t))continue;d=[...i,t];}else {if(!i.includes(s))continue;d=i.filter(a=>a!==s);}if(f){let a=t?r.green(`+${t}`):r.red(`-${s}`);console.log(r.gray(` [dry-run] ${o.id}: ${a}`));}else {await h(c,o.id,{tags:d});let a=t?r.green(`+${t}`):r.red(`-${s}`);console.log(` ${o.id}: ${a}`);}l++;}console.log(),console.log(f?r.yellow(` Dry run: ${l} entries would be updated`):r.green(` Updated ${l} entries`)),console.log();}export{w as loreRetagCommand};
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ import {n,m,o as o$1,t,r as r$1}from'./chunk-T6IDXUUA.js';import'./chunk-JIXHEBGK.js';import'./chunk-QT2LKB3P.js';import {a as a$1}from'./chunk-LKAT7IAK.js';import'./chunk-5TAVYPOV.js';import*as a from'fs';import*as r from'path';import o from'chalk';import {execSync}from'child_process';import*as F from'js-yaml';var W=/[@#$%^!?&~][a-zA-Z][a-zA-Z0-9_-]*/g,_=[/\.(get|post|put|patch|delete)\s*\(\s*['"`]([^'"`]+)['"`]/gi,/export\s+(async\s+)?function\s+(GET|POST|PUT|PATCH|DELETE)/gi];async function G(n$1={}){let i=process.cwd(),b=a$1.command("review").start("Running review pipeline",{cwd:i}),u=[],m$1=[];try{if(n$1.pr)u=execSync(`gh pr diff ${n$1.pr} --name-only`,{cwd:i,encoding:"utf8",timeout:15e3}).trim().split(`
3
+ `).filter(Boolean);else {let e=execSync("git diff --cached --name-only",{cwd:i,encoding:"utf8",timeout:5e3}).trim(),t=execSync("git diff --name-only",{cwd:i,encoding:"utf8",timeout:5e3}).trim();u=[...new Set([...e.split(`
4
+ `).filter(Boolean),...t.split(`
5
+ `).filter(Boolean)])];}}catch(e){let t=e.message;n$1.json||a$1.command("review").error(`Failed to get changed files: ${t}`),b.error("Failed to get changed files"),n$1.ci&&process.exit(1);return}if(u.length===0){n$1.json?console.log(JSON.stringify({findings:[],summary:{total:0,blocking:0,improvements:0,notes:0}})):console.log(o.green(`
6
+ No modified files to review.
7
+ `)),b.success("No files to review");return}try{for(let e of u)if(e.endsWith(".purpose")){let t=r.join(i,e);if(a.existsSync(t)){let g=a.readFileSync(t,"utf-8").match(W)||[];m$1.push(...g);}}m$1=[...new Set(m$1)];}catch{}let s=[],$=n();try{let e=await m(i);$=o$1(e);}catch{}let R=r.join(i,"portal.yaml"),h=null;if(a.existsSync(R))try{h=F.load(a.readFileSync(R,"utf-8"));}catch{}for(let e of m$1)t($,e).length===0&&s.push({type:"blocking",category:"purpose-coverage",message:`Symbol "${e}" is not registered in any .purpose file`,suggestion:"Add to nearest .purpose file using paradigm_purpose_add_component."});let N=h?.routes?Object.keys(h.routes):[];for(let e of u){let t=r.isAbsolute(e)?e:r.join(i,e);if(!a.existsSync(t))continue;let l;try{l=a.readFileSync(t,"utf-8");}catch{continue}for(let g of _){g.lastIndex=0;let d;for(;(d=g.exec(l))!==null;){let f=d[2]||d[0];f&&f.startsWith("/")&&(N.some(p=>p.replace(/\s+(GET|POST|PUT|PATCH|DELETE)\s*$/,"").trim()===f)||s.push({type:h?"blocking":"improvement",category:"route-coverage",message:`Route "${f}" in ${e} not in portal.yaml`,file:e,suggestion:"Add route to portal.yaml with ^gates."}));}}}let O=h?Object.keys(h.gates||{}).map(e=>e.startsWith("^")?e.slice(1):e):[];for(let e of m$1)if(e.startsWith("^")){let t=e.slice(1);O.includes(t)||s.push({type:"blocking",category:"portal-compliance",message:`Gate "${e}" referenced but not declared in portal.yaml`,suggestion:`Add ${e} to portal.yaml with description and check expression.`});}try{let e=r$1($,"aspect");for(let t of e){let l=t.appliesTo||[];if(l.length!==0){for(let g of l)for(let d of m$1)if(I(g,d)){let c=t.anchors||[];if(c.length===0)s.push({type:"improvement",category:"aspect-anchors",message:`Aspect "${t.symbol}" applies to "${d}" but has no code anchors`,suggestion:`Add anchors to ${t.symbol} in .purpose file.`});else for(let p of c){let T=r.isAbsolute(p.path)?p.path:r.join(i,p.path);a.existsSync(T)||s.push({type:"improvement",category:"aspect-anchors",message:`Aspect "${t.symbol}" anchor "${p.raw}" points to missing file`,suggestion:`Update anchors for ${t.symbol} in .purpose file.`});}}}}}catch{}for(let e of m$1){let t$1=t($,e);if(t$1.length===0)continue;let l=t$1[0];l.parentSymbol&&t($,l.parentSymbol).length===0&&s.push({type:"improvement",category:"broken-reference",message:`Symbol "${e}" references parent "${l.parentSymbol}" which does not exist`,suggestion:"Create the parent symbol or update the parent reference."});}if(n$1.deep)for(let e of u){let t=r.isAbsolute(e)?e:r.join(i,e);if(!a.existsSync(t))continue;let l=r.extname(e);if(![".ts",".tsx",".js",".jsx",".py",".rs"].includes(l))continue;let g;try{g=a.readFileSync(t,"utf-8");}catch{continue}let d=g.split(`
8
+ `);for(let f=0;f<d.length;f++){let c=d[f],p=f+1;/\beval\s*\(/.test(c)&&!c.trimStart().startsWith("//")&&s.push({type:"blocking",category:"security",message:"eval() detected \u2014 potential code injection risk",file:e,line:p,suggestion:"Replace eval() with a safer alternative."}),/(?:password|secret|api_key|apikey|token)\s*[:=]\s*['"][^'"]{8,}['"]/i.test(c)&&!c.trimStart().startsWith("//")&&!c.trimStart().startsWith("#")&&s.push({type:"blocking",category:"security",message:"Possible hardcoded secret detected",file:e,line:p,suggestion:"Move secrets to environment variables or a secrets manager."}),/\bconsole\.(log|debug|info|warn)\b/.test(c)&&!e.includes("test")&&!e.includes("spec")&&(c.trimStart().startsWith("//")||s.push({type:"note",category:"convention",message:"console.log detected \u2014 use Paradigm logger instead",file:e,line:p,suggestion:"Use log.component(), log.gate(), etc. from the Paradigm logger."}));}}let y=s.filter(e=>e.type==="blocking"),w=s.filter(e=>e.type==="improvement"),S=s.filter(e=>e.type==="note");if(n$1.json)console.log(JSON.stringify({findings:s,summary:{total:s.length,blocking:y.length,improvements:w.length,notes:S.length,filesReviewed:u.length,symbolsChecked:m$1.length}},null,2));else if(console.log(o.blue(`
9
+ \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(o.blue("\u2502")+o.white.bold(" paradigm review ")+o.blue("\u2502")),console.log(o.blue("\u2502")+o.gray(` ${u.length} files, ${m$1.length} symbols${n$1.deep?", deep mode":""}`.padEnd(50))+o.blue("\u2502")),console.log(o.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
10
+ `)),s.length===0)console.log(o.green(` All checks passed \u2014 no findings.
11
+ `));else {if(y.length>0){console.log(o.red.bold(` Blocking (${y.length})`));for(let e of y)console.log(` ${o.red("x")} ${e.message}`),e.file&&console.log(` ${o.gray(e.file)}${e.line?`:${e.line}`:""}`),e.suggestion&&console.log(` ${o.yellow("->")} ${e.suggestion}`);console.log("");}if(w.length>0){console.log(o.yellow(` Improvements (${w.length})`));for(let e of w)console.log(` ${o.yellow("*")} ${e.message}`),e.file&&console.log(` ${o.gray(e.file)}${e.line?`:${e.line}`:""}`),e.suggestion&&console.log(` ${o.yellow("->")} ${e.suggestion}`);console.log("");}if(S.length>0){console.log(o.gray(` Notes (${S.length})`));for(let e of S)console.log(` ${o.gray("o")} ${e.message}`),e.file&&console.log(` ${o.gray(e.file)}${e.line?`:${e.line}`:""}`);console.log("");}}n$1.ci&&y.length>0&&(b.error(`${y.length} blocking findings`),process.exit(1)),b.success(`Review complete: ${s.length} findings`);}function I(n,i){return n.includes("*")?new RegExp("^"+n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/\\\*/g,".*")+"$").test(i):n===i}export{G as reviewCommand};
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ import {e}from'./chunk-WS2N27RX.js';import'./chunk-5TAVYPOV.js';import r from'chalk';async function d(s,e$1){let o=process.cwd(),t=parseInt(e$1.completeness||"3",10),a=parseInt(e$1.quality||"3",10);await e(o,s,{reviewer:e$1.reviewer||"unknown",completeness:t,quality:a,notes:e$1.notes,reviewed_at:new Date().toISOString()})?console.log(r.green(`
3
+ \u2713 Review added to ${s}
4
+ `)):(console.error(r.red(`
5
+ Entry not found: ${s}
6
+ `)),process.exit(1));}export{d as loreReviewCommand};
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ import {D as D$1,m,o,r,p,x,y}from'./chunk-T6IDXUUA.js';import'./chunk-JIXHEBGK.js';import'./chunk-QT2LKB3P.js';import {a}from'./chunk-LKAT7IAK.js';import'./chunk-5TAVYPOV.js';import*as u from'path';import e from'chalk';import F from'ora';function I(s,t){let r$1=r(t,"flow"),a=[];for(let p of r$1){let l=p.data,i=l?.sequence||l?.gates||p.references,g=i.indexOf(s);g!==-1&&a.push({flow:p.symbol,position:g+1,total:i.length});}return a}function O(s){let t=u.dirname(s),r=`${t}/**/*.test.{ts,tsx}`,a=`npm test -- --testPathPattern="${t}"`;return {testPath:r,testCommand:a}}function C(s){return {components:s.filter(t=>t.type==="component").map(t=>t.symbol),gates:s.filter(t=>t.type==="gate").map(t=>t.symbol),signals:s.filter(t=>t.type==="signal").map(t=>t.symbol),flows:s.filter(t=>t.type==="flow").map(t=>t.symbol),aspects:s.filter(t=>t.type==="aspect").map(t=>t.symbol)}}function B(s,t){let r=p(t,s);if(!r)return null;let a=x(t,s),p$1=y(t,s),l=C(a),i=C(p$1),g=I(s,t),{testPath:m,testCommand:y$1}=O(r.filePath);return {symbol:r.symbol,type:r.type,path:r.filePath,description:r.description,requires:r.references,requiredBy:r.referencedBy,downstream:{components:l.components,signals:l.signals,aspects:l.aspects},upstream:{gates:i.gates,flows:i.flows},partOfFlows:g,testPath:m,testCommand:y$1}}async function D(s,t,r$1={}){let a$1=process.cwd(),p=t?u.resolve(a$1,t):a$1,l=D$1(s);l||(console.log(e.red(`
3
+ \u274C Invalid symbol format: ${s}`)),console.log(e.gray(" Symbols must start with @, #, ^, !, $, %, ~, or ?")),console.log(e.gray(` Example: paradigm ripple @checkout
4
+ `)),process.exit(1)),!r$1.quiet&&!r$1.json&&console.log(e.blue(`
5
+ \u{1F30A} Ripple Analysis for ${e.cyan(s)}
6
+ `));let i=a.command("ripple").start("Analyzing ripple effects",{symbol:s}),g=r$1.json?null:F("Analyzing impact...").start();try{let m$1=await m(p),y=o(m$1);a.operation("aggregate").debug("Symbols aggregated for ripple",{symbol:s});let o$1=B(s,y);if(!o$1){g?.fail(`Symbol not found: ${s}`),i.error("Symbol not found",{symbol:s}),console.log(e.gray(`
7
+ Available symbols of this type:`));let c=r(y,l.type).slice(0,5);for(let n of c)console.log(e.gray(` ${n.symbol}`));r(y,l.type).length>5&&console.log(e.gray(" ... and more")),console.log(""),process.exit(1);}if(g?.succeed("Impact analyzed"),i.success("Ripple analysis complete",{symbol:s,requires:o$1.requires.length,requiredBy:o$1.requiredBy.length}),r$1.json)return console.log(JSON.stringify(o$1,null,2)),o$1;if(console.log(e.white("Symbol Info")),console.log(e.gray("\u2500".repeat(50))),console.log(` Type: ${e.cyan(o$1.type)}`),console.log(` Path: ${e.gray(o$1.path)}`),o$1.description&&console.log(` Description: ${o$1.description}`),console.log(""),o$1.requires.length>0){console.log(e.white("\u2B06\uFE0F Upstream (What this requires)")),console.log(e.gray("\u2500".repeat(50))),o$1.upstream.gates.length>0&&console.log(` Gates: ${o$1.upstream.gates.map(n=>e.red(n)).join(", ")}`),o$1.upstream.flows.length>0&&console.log(` Flows: ${o$1.upstream.flows.map(n=>e.cyan(n)).join(", ")}`);let c=o$1.requires.filter(n=>!o$1.upstream.gates.includes(n)&&!o$1.upstream.flows.includes(n));c.length>0&&console.log(` Other: ${c.map(n=>e.gray(n)).join(", ")}`),console.log("");}if(o$1.requiredBy.length>0){console.log(e.white("\u2B07\uFE0F Downstream (What would be affected)")),console.log(e.gray("\u2500".repeat(50))),o$1.downstream.components.length>0&&console.log(` Components: ${o$1.downstream.components.map(n=>e.green(n)).join(", ")}`),o$1.downstream.signals.length>0&&console.log(` Signals: ${o$1.downstream.signals.map(n=>e.yellow(n)).join(", ")}`),o$1.downstream.aspects.length>0&&console.log(` Aspects: ${o$1.downstream.aspects.map(n=>e.magenta(n)).join(", ")}`);let c=o$1.requiredBy.filter(n=>!o$1.downstream.components.includes(n)&&!o$1.downstream.signals.includes(n)&&!o$1.downstream.aspects.includes(n));c.length>0&&console.log(` Other: ${c.map(n=>e.gray(n)).join(", ")}`),console.log("");}if(o$1.partOfFlows.length>0){console.log(e.white("\u{1F504} Part of Flows")),console.log(e.gray("\u2500".repeat(50)));for(let{flow:c,position:n,total:x}of o$1.partOfFlows)console.log(` ${e.cyan(c)} (step ${n} of ${x})`);console.log("");}o$1.testCommand&&(console.log(e.white("\u{1F9EA} Test Suggestion")),console.log(e.gray("\u2500".repeat(50))),console.log(` ${e.gray(o$1.testCommand)}`),console.log(""));let f=o$1.requiredBy.length,j=f===0?"Low":f<=3?"Medium":"High",P=f===0?e.green:f<=3?e.yellow:e.red;return console.log(e.white("\u{1F4CA} Impact Summary")),console.log(e.gray("\u2500".repeat(50))),console.log(` Direct dependents: ${e.cyan(f.toString())}`),console.log(` Impact level: ${P(j)}`),f>0?console.log(e.gray(`
8
+ \u26A0\uFE0F Changes to this symbol may affect the above dependents.`)):console.log(e.gray(`
9
+ \u2713 This symbol has no direct dependents (safe to modify).`)),console.log(""),o$1}catch(m){g?.fail("Analysis failed"),i.error("Ripple analysis failed",{symbol:s,error:m.message}),console.log(e.red(`Error: ${m.message}
10
+ `)),process.exit(1);}}export{D as rippleCommand};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import {a as a$1,f,c,e,g as g$1,b as b$1,d}from'./chunk-WR6D3SC6.js';import {a}from'./chunk-LKAT7IAK.js';import'./chunk-5TAVYPOV.js';import*as g from'fs';import*as m from'path';import*as b from'os';import r from'chalk';import*as $ from'js-yaml';var x=m.join(b.homedir(),".paradigm","agents"),O=".agent";function C(){return m.join(process.cwd(),".paradigm","roster.yaml")}function k(){let n=C();if(!g.existsSync(n))return null;try{return $.load(g.readFileSync(n,"utf-8"))}catch{return null}}function F(n){let s=C(),c=m.dirname(s);g.existsSync(c)||g.mkdirSync(c,{recursive:true}),g.writeFileSync(s,$.dump(n,{lineWidth:-1,noRefs:true,sortKeys:false}),"utf-8");}function E(){if(!g.existsSync(x))return [];try{return g.readdirSync(x).filter(n=>n.endsWith(O)).map(n=>n.replace(O,"")).sort()}catch{return []}}function P(n){let s=m.join(x,`${n}${O}`);if(!g.existsSync(s))return null;try{let c=$.load(g.readFileSync(s,"utf-8"));return {id:c.id||n,nickname:c.nickname,role:c.role||"Unknown"}}catch{return null}}async function U(n={}){let s=process.cwd(),c$1=a.command("agent-roster-show").start("Showing project roster",{cwd:s}),o=E().length,i=k();if(!i){n.json?a$1(JSON.stringify({roster:null,message:"No roster configured",totalAgents:o})):(f("Agent Roster"),a$1(""),c(`No roster configured \u2014 all ${o} agents are active.`),e(` Run ${r.cyan("paradigm agent roster init")} to create one.`),a$1("")),c$1.success("No roster found");return}let t=i.active||[];if(n.json){let h=t.map(y=>P(y)||{id:y,role:"Unknown"});a$1(JSON.stringify({count:t.length,total:o,project:i.project,type:i.type,agents:h},null,2)),c$1.success(`${t.length} of ${o} agents active`);return}f("Agent Roster"),a$1("");let a$2="ID".padEnd(16),l="Nickname".padEnd(12);a$1(` ${r.dim(a$2)} ${r.dim(l)} ${r.dim("Role")}`),a$1(` ${r.dim("-".repeat(16))} ${r.dim("-".repeat(12))} ${r.dim("-".repeat(30))}`);for(let h of t.sort()){let y=P(h),f=y?.nickname||r.dim("\u2014"),S=y?.role||r.dim("Unknown");a$1(` ${r.white.bold(h.padEnd(16))} ${f.toString().padEnd(12)} ${r.gray(S)}`);}a$1(""),a$1(` ${r.cyan(String(t.length))} of ${r.cyan(String(o))} agents active on this project`),i.type&&g$1("Project type",i.type),a$1(""),c$1.success(`${t.length} of ${o} agents active`);}async function G(n={}){let s=process.cwd(),c$1=a.command("agent-roster-init").start("Initializing project roster",{cwd:s}),u=C();if(g.existsSync(u)&&!n.force){let S=k()?.active?.length??0;n.json?a$1(JSON.stringify({error:"Roster already exists",count:S})):(c(`Roster already exists with ${S} agents.`),e(` Use ${r.cyan("--force")} to reinitialize, or ${r.cyan("paradigm agent roster add/remove")} to modify.`)),c$1.error("Roster already exists");return}let{detectProjectType:o,ROSTER_SUGGESTIONS:i}=await import('./project-type-SURTOIG7.js'),t=o(s),a$2=i[t]||i.generic,l=m.basename(s),d=m.join(s,".paradigm","config.yaml");if(g.existsSync(d))try{let f=$.load(g.readFileSync(d,"utf-8"));f?.project&&typeof f.project=="string"&&(l=f.project);}catch{}let h={version:"1.0",project:l,type:t,active:a$2.sort()};F(h);let y=E();n.json?a$1(JSON.stringify({created:true,project:l,type:t,active:a$2.sort(),count:a$2.length,total:y.length},null,2)):(f("Agent Roster Initialized"),a$1(""),g$1("Project",l),g$1("Detected type",t),g$1("Active agents",`${a$2.length} of ${y.length}`),a$1(""),a$1(` ${r.cyan(a$2.sort().join(", "))}`),a$1(""),b$1(`Roster written to ${r.dim(".paradigm/roster.yaml")}`),e(` Modify with ${r.cyan("paradigm agent roster add/remove <agent-id>")}`),a$1("")),c$1.success(`Created roster: ${a$2.length} agents for ${t}`);}async function _(n,s={}){let c=process.cwd(),u=a.command("agent-roster-add").start(`Adding agents: ${n.join(", ")}`,{cwd:c}),o=k();if(!o){s.json?a$1(JSON.stringify({error:"No roster found. Run `paradigm agent roster init` first."})):(d("No roster found."),e(` Run ${r.cyan("paradigm agent roster init")} first.`)),u.error("No roster found");return}let i=E(),t=[],a$2=[],l=[];for(let d of n){if(!i.includes(d)){t.push(d);continue}if(o.active.includes(d)){a$2.push(d);continue}o.active.push(d),l.push(d);}l.length>0&&(o.active.sort(),F(o)),s.json?a$1(JSON.stringify({added:l,alreadyActive:a$2,invalid:t,total:o.active.length},null,2)):(l.length>0&&b$1(`Added: ${r.cyan(l.join(", "))}`),a$2.length>0&&e(` Already active: ${a$2.join(", ")}`),t.length>0&&(d(`Unknown agent(s): ${t.join(", ")}`),e(` Available: ${i.join(", ")}`)),l.length>0&&a$1(` Roster now has ${r.cyan(String(o.active.length))} active agents.`)),u.success(`Added ${l.length}, skipped ${a$2.length}, invalid ${t.length}`);}async function z(n,s={}){let c$1=process.cwd(),u=a.command("agent-roster-remove").start(`Removing agents: ${n.join(", ")}`,{cwd:c$1}),o=k();if(!o){s.json?a$1(JSON.stringify({error:"No roster found. Run `paradigm agent roster init` first."})):(d("No roster found."),e(` Run ${r.cyan("paradigm agent roster init")} first.`)),u.error("No roster found");return}let i=[],t=[];for(let a of n){let l=o.active.indexOf(a);if(l<0){i.push(a);continue}o.active.splice(l,1),t.push(a);}t.length>0&&F(o),s.json?a$1(JSON.stringify({removed:t,notFound:i,total:o.active.length},null,2)):(t.length>0&&b$1(`Removed: ${r.cyan(t.join(", "))}`),i.length>0&&c(`Not in roster: ${i.join(", ")}`),t.length>0&&a$1(` Roster now has ${r.cyan(String(o.active.length))} active agents.`)),u.success(`Removed ${t.length}, not found ${i.length}`);}export{_ as rosterAddCommand,G as rosterInitCommand,z as rosterRemoveCommand,U as rosterShowCommand};
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env node
2
+ import'./chunk-5TAVYPOV.js';import o from'chalk';async function g(i,l){let t=i||process.cwd(),r=parseInt(l.port||"3838",10),a=l.open!==false;console.log(o.cyan(`
3
+ Starting Sentinel...
4
+ `));try{let{startServer:n}=await import('./server-4YNUIK4W.js');console.log(o.gray(`Project: ${t}`)),console.log(o.gray(`Port: ${r}`)),console.log(),await n({port:r,projectDir:t,open:a}),console.log(o.green(`
5
+ Sentinel is running at http://localhost:${r}`)),console.log(o.gray(`
6
+ Press Ctrl+C to stop
7
+ `)),await new Promise(()=>{});}catch(n){let e=n.code,s=n.message||"";e==="ERR_MODULE_NOT_FOUND"||e==="MODULE_NOT_FOUND"?(console.error(o.red(`
8
+ @a-company/sentinel is not installed.`)),console.log(o.gray(`Install it with: npm install @a-company/sentinel
9
+ `))):e==="EADDRINUSE"?(console.error(o.red(`
10
+ Error: Port ${r} is already in use.`)),console.log(o.gray(`Try a different port with: paradigm sentinel --port ${r+1}
11
+ `))):e==="EACCES"?(console.error(o.red(`
12
+ Error: Permission denied on port ${r}.`)),console.log(o.gray(`Ports below 1024 require elevated privileges. Try: paradigm sentinel --port 3838
13
+ `))):e==="ENOENT"?(console.error(o.red(`
14
+ Error: Project directory not found: ${t}`)),console.log(o.gray(`Verify the path exists and try again.
15
+ `))):s.includes("ECONNREFUSED")||s.includes("ETIMEDOUT")?(console.error(o.red(`
16
+ Error: Network connection failed.`)),console.log(o.gray(`Check your network configuration and try again.
17
+ `))):(console.error(o.red(`
18
+ Failed to start Sentinel.`)),console.error(o.gray(` Error: ${s||"Unknown error"}`)),e&&console.error(o.gray(` Code: ${e}`)),console.log(o.gray(`
19
+ If this persists, try:`)),console.log(o.gray(" 1. Ensure @a-company/sentinel is up to date")),console.log(o.gray(" 2. Check that no other process is using the port")),console.log(o.gray(" 3. Run `paradigm doctor` to check your setup\n"))),process.exit(1);}}export{g as sentinelCommand};