@a-company/paradigm 5.11.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 (408) 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 -20529
  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/plsat/.purpose +3 -2
  195. package/dist/university-ui/assets/{index-BjewBB6s.js → index-CGFJczb1.js} +2 -2
  196. package/dist/university-ui/assets/{index-BjewBB6s.js.map → index-CGFJczb1.js.map} +1 -1
  197. package/dist/university-ui/index.html +1 -1
  198. package/dist/upgrade-B4IOLZYK.js +53 -0
  199. package/dist/validate-C6SMKGYD.js +9 -0
  200. package/dist/validate-LSCDOLBO.js +13 -0
  201. package/dist/validate-VZXTJHGO.js +6 -0
  202. package/dist/watch-LRM5XD46.js +8 -0
  203. package/dist/watch-PZCCUP6K.js +9 -0
  204. package/dist/wisdom-XZ3QKPNP.js +7 -0
  205. package/dist/work-log-loader-DL5GZ2BQ.js +2 -0
  206. package/dist/workspace-2ODL5WLY.js +2 -0
  207. package/package.json +1 -1
  208. package/platform-ui/dist/assets/AmbientSection-DqQ2mfCO.js +1 -0
  209. package/platform-ui/dist/assets/{CanvasSection-DwPTRdIN.js → CanvasSection-DLW0s-Bu.js} +1 -1
  210. package/platform-ui/dist/assets/{DocsSection-BJc_ws4I.js → DocsSection-BQ9Hi51g.js} +1 -1
  211. package/platform-ui/dist/assets/{GitSection-DhqBo1xc.js → GitSection-QQeUX6o3.js} +1 -1
  212. package/platform-ui/dist/assets/{GraphSection-D9fhVnZ0.js → GraphSection-0c9C-w7K.js} +2 -2
  213. package/platform-ui/dist/assets/{GraphSection-BlgXTl53.css → GraphSection-Bbs2a8sC.css} +1 -1
  214. package/platform-ui/dist/assets/LoreSection--t56kCj2.js +1 -0
  215. package/platform-ui/dist/assets/LoreSection-qnmm3o4y.css +1 -0
  216. package/platform-ui/dist/assets/SentinelSection-C4OoME9U.js +1 -0
  217. package/platform-ui/dist/assets/{SymphonySection-BRoBaUSS.js → SymphonySection-B-rvsLxq.js} +1 -1
  218. package/platform-ui/dist/assets/TeamSection-CBFmNEEo.js +1 -0
  219. package/platform-ui/dist/assets/index-Bxp0TVaf.css +1 -0
  220. package/platform-ui/dist/assets/index-DPpOdAtC.js +57 -0
  221. package/platform-ui/dist/index.html +2 -2
  222. package/dist/accept-orchestration-UQLM7PTQ.js +0 -189
  223. package/dist/add-FZRKEGH4.js +0 -81
  224. package/dist/agent-WERIO2XV.js +0 -523
  225. package/dist/agent-loader-TFIANSF4.js +0 -44
  226. package/dist/agent-state-S5DAWPTF.js +0 -24
  227. package/dist/agents-suggest-DNSYJ6IA.js +0 -83
  228. package/dist/aggregate-H57K7PNV.js +0 -88
  229. package/dist/assess-4WVXZLZQ.js +0 -68
  230. package/dist/auto-QFS5NHQU.js +0 -504
  231. package/dist/beacon-KXZXYQHX.js +0 -251
  232. package/dist/calibration-V46G7JTY.js +0 -135
  233. package/dist/check-OWAIWV23.js +0 -175
  234. package/dist/chunk-2IO7JAG2.js +0 -148
  235. package/dist/chunk-2T6BTYBN.js +0 -712
  236. package/dist/chunk-36TKPM5Z.js +0 -400
  237. package/dist/chunk-45MUDW6E.js +0 -804
  238. package/dist/chunk-4BLYIB7J.js +0 -5701
  239. package/dist/chunk-4L3UTYQX.js +0 -677
  240. package/dist/chunk-4NCFWYGG.js +0 -110
  241. package/dist/chunk-54LTTQBH.js +0 -138
  242. package/dist/chunk-5EWAQHFY.js +0 -269
  243. package/dist/chunk-5JGJACDU.js +0 -37
  244. package/dist/chunk-5OUOLN6M.js +0 -659
  245. package/dist/chunk-5VKJBNJL.js +0 -444
  246. package/dist/chunk-6N3JTACN.js +0 -2260
  247. package/dist/chunk-6QC3YGB6.js +0 -114
  248. package/dist/chunk-7N7GSU6K.js +0 -34
  249. package/dist/chunk-ABVQGRF7.js +0 -268
  250. package/dist/chunk-CL7JSK52.js +0 -129
  251. package/dist/chunk-CSD7IHSN.js +0 -152
  252. package/dist/chunk-EDOAWN7J.js +0 -717
  253. package/dist/chunk-EKGMAM62.js +0 -525
  254. package/dist/chunk-EZ3GOCYC.js +0 -132
  255. package/dist/chunk-F3BCHPYT.js +0 -143
  256. package/dist/chunk-FKJUBQU3.js +0 -3081
  257. package/dist/chunk-GT5QGC2H.js +0 -253
  258. package/dist/chunk-GZDFVP2N.js +0 -540
  259. package/dist/chunk-IRKUEJVW.js +0 -405
  260. package/dist/chunk-J2JEQRT3.js +0 -164
  261. package/dist/chunk-JASGXLK3.js +0 -679
  262. package/dist/chunk-KVDYJLTC.js +0 -121
  263. package/dist/chunk-L27I3CPZ.js +0 -357
  264. package/dist/chunk-LHLIAYQ3.js +0 -185
  265. package/dist/chunk-MCMOGQMU.js +0 -145
  266. package/dist/chunk-NQKQG45G.js +0 -688
  267. package/dist/chunk-PBHIFAL4.js +0 -259
  268. package/dist/chunk-PDX44BCA.js +0 -11
  269. package/dist/chunk-PMXRGPRQ.js +0 -305
  270. package/dist/chunk-RAB5IKPR.js +0 -487
  271. package/dist/chunk-RJE5G7WO.js +0 -590
  272. package/dist/chunk-RTHA3XRE.js +0 -880
  273. package/dist/chunk-S2HO5MLR.js +0 -621
  274. package/dist/chunk-S3ORKP3V.js +0 -716
  275. package/dist/chunk-TAIJOFOE.js +0 -124
  276. package/dist/chunk-TXESEO7Y.js +0 -245
  277. package/dist/chunk-UPLDI7CN.js +0 -1334
  278. package/dist/chunk-VL67H5IC.js +0 -506
  279. package/dist/chunk-VPPK3SY4.js +0 -1136
  280. package/dist/chunk-YMDLDELF.js +0 -314
  281. package/dist/chunk-YO6DVTL7.js +0 -99
  282. package/dist/chunk-YRZ5RPEB.js +0 -1561
  283. package/dist/chunk-ZDHLG5VP.js +0 -5676
  284. package/dist/chunk-ZGUAAVMA.js +0 -756
  285. package/dist/chunk-ZSYVKSY6.js +0 -2602
  286. package/dist/claude-FRRWJSTJ.js +0 -362
  287. package/dist/claude-cli-XJLK2X4L.js +0 -276
  288. package/dist/claude-code-HTBA4XRB.js +0 -126
  289. package/dist/claude-code-teams-T4SP24MD.js +0 -199
  290. package/dist/commands-5N4ILTPH.js +0 -5859
  291. package/dist/conductor-CQVGTEQN.js +0 -161
  292. package/dist/config-schema-EA4XALGG.js +0 -154
  293. package/dist/constellation-A26CCGQS.js +0 -225
  294. package/dist/context-audit-RLO3ETRP.js +0 -682
  295. package/dist/cost-BGM32XJU.js +0 -93
  296. package/dist/cost-VI46A4XL.js +0 -174
  297. package/dist/cursor-cli-JVEZGHWQ.js +0 -269
  298. package/dist/cursorrules-HLIKJJZT.js +0 -84
  299. package/dist/decision-loader-WWCLIQPJ.js +0 -20
  300. package/dist/delete-KBRPQLPC.js +0 -56
  301. package/dist/diff-D4X53HAC.js +0 -126
  302. package/dist/discipline-FA4OZXIS.js +0 -24
  303. package/dist/dist-34NA5RS5.js +0 -74
  304. package/dist/dist-5QE2BB2B-5S3T6Y3T.js +0 -6919
  305. package/dist/dist-77JDTVAY.js +0 -62
  306. package/dist/dist-OGTSAZ55.js +0 -1358
  307. package/dist/dist-QK4SQAK7.js +0 -64
  308. package/dist/dist-TA6LSC2Q.js +0 -20
  309. package/dist/docs-PBZB7LYP.js +0 -89
  310. package/dist/docs-QIYKO3BR.js +0 -155
  311. package/dist/doctor-ULBOHEIC.js +0 -11
  312. package/dist/drift-R5NRKFHI.js +0 -251
  313. package/dist/echo-O2LY7CC2.js +0 -248
  314. package/dist/edit-R2HNLMOG.js +0 -63
  315. package/dist/event-25OJKDCE.js +0 -31
  316. package/dist/export-IWVL7XLF.js +0 -38
  317. package/dist/flow-CRRVV3O3.js +0 -185
  318. package/dist/global-3NG5JXUB.js +0 -136
  319. package/dist/graduate-USAWGBJM.js +0 -160
  320. package/dist/graph-VHUMAAS6.js +0 -12
  321. package/dist/graph-server-YL22VBBN.js +0 -116
  322. package/dist/habits-OL5NGPXO.js +0 -1405
  323. package/dist/history-WOWC573W.js +0 -277
  324. package/dist/hooks-HFWSCGPV.js +0 -12
  325. package/dist/integrity-IHO4FZTS.js +0 -194
  326. package/dist/integrity-checker-PSKJA5SB.js +0 -12
  327. package/dist/journal-loader-5EYSBFFY.js +0 -18
  328. package/dist/lint-K6CJGGPH.js +0 -456
  329. package/dist/list-4YK7QKFF.js +0 -57
  330. package/dist/list-ENR7Q4CR.js +0 -56
  331. package/dist/lore-loader-7NO6N6FT.js +0 -26
  332. package/dist/lore-server-UNJY5KC3.js +0 -118
  333. package/dist/manual-G6FISID5.js +0 -204
  334. package/dist/migrate-LS45DNEV.js +0 -889
  335. package/dist/migrate-assessments-RGH4O6IX.js +0 -97
  336. package/dist/model-discovery-D2H3VBGC.js +0 -8
  337. package/dist/nomination-engine-RV5CNO5B.js +0 -42
  338. package/dist/notebook-YWIYGEHV.js +0 -155
  339. package/dist/orchestrate-JLILBBJE.js +0 -324
  340. package/dist/peers-DEOUIZM6.js +0 -82
  341. package/dist/persona-UHAHIVST.js +0 -390
  342. package/dist/pipeline-L4HCSBGN.js +0 -263
  343. package/dist/platform-server-H5YO3DQD.js +0 -1475
  344. package/dist/plugin-update-checker-KRRSGXMV.js +0 -12
  345. package/dist/portal-check-NPYGII2D.js +0 -42
  346. package/dist/portal-compliance-J7DGAPFX.js +0 -18
  347. package/dist/probe-MHL5HQZ2.js +0 -167
  348. package/dist/promote-F6ZYZZAL.js +0 -182
  349. package/dist/providers-GK7PB2OL.js +0 -104
  350. package/dist/quiz-M66SC7F7.js +0 -99
  351. package/dist/record-RA4WR2BO.js +0 -49
  352. package/dist/reindex-5LTD53ZC.js +0 -16
  353. package/dist/remember-HBWJ655S.js +0 -77
  354. package/dist/retag-3OLCVDEQ.js +0 -62
  355. package/dist/review-27ATYTD2.js +0 -33
  356. package/dist/review-57QMURZV.js +0 -334
  357. package/dist/ripple-JPBXP5I3.js +0 -215
  358. package/dist/sentinel-4XIG4STA.js +0 -63
  359. package/dist/sentinel-bridge-MDUXTQRL.js +0 -109
  360. package/dist/serve-CAH3PHE7.js +0 -33
  361. package/dist/serve-INL7SNBK.js +0 -36
  362. package/dist/serve-KBSE36PL.js +0 -49
  363. package/dist/server-54SKYFFY.js +0 -1647
  364. package/dist/server-XUOIO7E6.js +0 -338
  365. package/dist/session-tracker-C4BMD5WG.js +0 -13
  366. package/dist/session-work-log-MZ47OAPB.js +0 -20
  367. package/dist/setup-EDS27WUR.js +0 -25
  368. package/dist/setup-KO5AFC4K.js +0 -296
  369. package/dist/shift-D2JOHHBF.js +0 -668
  370. package/dist/show-5PV5KFJE.js +0 -176
  371. package/dist/show-NQKYX6WQ.js +0 -82
  372. package/dist/snapshot-BK4RBPCG.js +0 -62
  373. package/dist/spawn-RCHNXDHE.js +0 -196
  374. package/dist/status-WGIAQODY.js +0 -71
  375. package/dist/summary-NIRABMF5.js +0 -140
  376. package/dist/sweep-QMHNSIY5.js +0 -934
  377. package/dist/switch-6EJPZDIA.js +0 -232
  378. package/dist/symphony-4OCY36AI.js +0 -791
  379. package/dist/symphony-B75X2MME.js +0 -326
  380. package/dist/symphony-loader-UZGON56V.js +0 -90
  381. package/dist/symphony-peers-2ZQYLRNI.js +0 -34
  382. package/dist/symphony-peers-OL7F6M5S.js +0 -121
  383. package/dist/symphony-relay-UJYUXN65.js +0 -710
  384. package/dist/sync-VEHUH4OA.js +0 -11
  385. package/dist/sync-llms-YHCFIE6X.js +0 -166
  386. package/dist/task-loader-LDYWQSLM.js +0 -20
  387. package/dist/team-O5MIIFMA.js +0 -34
  388. package/dist/test-566CP5KC.js +0 -1017
  389. package/dist/thread-N754I4D5.js +0 -274
  390. package/dist/timeline-M3CICQFE.js +0 -112
  391. package/dist/triage-HHYGT3HY.js +0 -671
  392. package/dist/tutorial-KD22SUNO.js +0 -666
  393. package/dist/upgrade-H5PF32BW.js +0 -551
  394. package/dist/validate-CNKEKO6A.js +0 -134
  395. package/dist/validate-MB5ULIHS.js +0 -39
  396. package/dist/validate-QH3LADM6.js +0 -64
  397. package/dist/watch-2TKP5PVL.js +0 -199
  398. package/dist/watch-ZF4ML6CD.js +0 -111
  399. package/dist/wisdom-AATMGNFA.js +0 -319
  400. package/dist/work-log-loader-5L45XNYZ.js +0 -14
  401. package/dist/workspace-6E6OSRNU.js +0 -21
  402. package/platform-ui/dist/assets/AmbientSection-WtHfNedO.js +0 -1
  403. package/platform-ui/dist/assets/LoreSection-C3EixkjW.css +0 -1
  404. package/platform-ui/dist/assets/LoreSection-CwDDHrz9.js +0 -1
  405. package/platform-ui/dist/assets/SentinelSection-Cl7e5oZ6.js +0 -1
  406. package/platform-ui/dist/assets/TeamSection-CqSIMrKz.js +0 -1
  407. package/platform-ui/dist/assets/index-CfpZFjea.css +0 -1
  408. 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};