@a-company/paradigm 5.10.0 → 5.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/accept-orchestration-IUAWQZUN.js +18 -0
- package/dist/add-P76GEMGF.js +8 -0
- package/dist/agent-UUTYOFTH.js +33 -0
- package/dist/agent-loader-EPXURMO7.js +2 -0
- package/dist/agent-loader-PYGPX6D2.js +2 -0
- package/dist/agent-state-KSQ3S7OB.js +2 -0
- package/dist/agents-suggest-HYTFMQD3.js +10 -0
- package/dist/aggregate-W66DM3GA.js +10 -0
- package/dist/ambient-HYZR42NX.js +35 -0
- package/dist/assess-UFPYEJKP.js +9 -0
- package/dist/auto-RHJXOZFL.js +14 -0
- package/dist/beacon-5QVYV5DF.js +13 -0
- package/dist/calibration-OLJYB5HN.js +7 -0
- package/dist/check-THVGY4R5.js +14 -0
- package/dist/chunk-22ISTMKI.js +31 -0
- package/dist/chunk-2QO33NYK.js +3 -0
- package/dist/chunk-33LKBMVK.js +134 -0
- package/dist/chunk-4QADCWPU.js +7 -0
- package/dist/chunk-4TXOVRWD.js +3 -0
- package/dist/chunk-4UJ4NIEQ.js +4 -0
- package/dist/chunk-4ZGGWZ32.js +3 -0
- package/dist/chunk-5TAVYPOV.js +2 -0
- package/dist/chunk-6EX37L4Q.js +8 -0
- package/dist/chunk-AD5TAD2A.js +5 -0
- package/dist/chunk-AGVAHVUA.js +2 -0
- package/dist/chunk-AO7ZSRME.js +13 -0
- package/dist/chunk-BFD3GFRK.js +2 -0
- package/dist/chunk-D34YFK4M.js +6 -0
- package/dist/chunk-DVZWCXB6.js +2 -0
- package/dist/chunk-EKZDFEJW.js +2 -0
- package/dist/chunk-ET5XJTSX.js +2 -0
- package/dist/chunk-FYDRENK7.js +3 -0
- package/dist/chunk-HMQ5BHP2.js +743 -0
- package/dist/chunk-HXKWL3VK.js +29 -0
- package/dist/chunk-IZSBGW6E.js +2 -0
- package/dist/chunk-J32OPJEX.js +2 -0
- package/dist/chunk-JBDMCRPP.js +7 -0
- package/dist/chunk-JIXHEBGK.js +7 -0
- package/dist/chunk-JNSJVCTU.js +2 -0
- package/dist/chunk-JQKKVAAN.js +2 -0
- package/dist/chunk-KLBH26PA.js +429 -0
- package/dist/chunk-L6K5HNDL.js +24 -0
- package/dist/chunk-LKAT7IAK.js +2 -0
- package/dist/chunk-M4UMM6DC.js +5 -0
- package/dist/chunk-NKYNHSA5.js +424 -0
- package/dist/chunk-NW6OKHE6.js +5 -0
- package/dist/chunk-NXRVR37G.js +60 -0
- package/dist/chunk-ODVKPZZ4.js +2 -0
- package/dist/chunk-PUBB7LIT.js +5 -0
- package/dist/chunk-Q2J542ST.js +2 -0
- package/dist/chunk-QGZRM6ZB.js +2 -0
- package/dist/chunk-QNZEG7IT.js +13 -0
- package/dist/chunk-QT2LKB3P.js +7 -0
- package/dist/chunk-RVRARWSY.js +9 -0
- package/dist/chunk-T6IDXUUA.js +2 -0
- package/dist/chunk-TYWB5IQJ.js +3 -0
- package/dist/chunk-UIKLE3WD.js +2 -0
- package/dist/chunk-V7K6CQVX.js +111 -0
- package/dist/chunk-VCKKJDLP.js +8 -0
- package/dist/chunk-VG7FN2TU.js +4 -0
- package/dist/chunk-W5IWDW4Y.js +16 -0
- package/dist/chunk-W7C6FFMO.js +8 -0
- package/dist/chunk-WESTEMIM.js +10 -0
- package/dist/chunk-WR6D3SC6.js +5 -0
- package/dist/chunk-WS2N27RX.js +3 -0
- package/dist/chunk-XMAV5AG6.js +2 -0
- package/dist/chunk-XROULIQN.js +2 -0
- package/dist/chunk-XUFYOXOU.js +3 -0
- package/dist/chunk-Y4XFVDZC.js +3 -0
- package/dist/chunk-Y6KXTQBG.js +2 -0
- package/dist/{chunk-GTR2TBIJ.js → chunk-Z2UZUCY6.js} +237 -1047
- package/dist/chunk-Z34K6GY2.js +8 -0
- package/dist/claude-4LR3LJQZ.js +13 -0
- package/dist/claude-cli-UP6HGH7C.js +6 -0
- package/dist/claude-code-RLJ4GX77.js +11 -0
- package/dist/claude-code-teams-R37HJY3Y.js +29 -0
- package/dist/commands-LMUD5L6R.js +455 -0
- package/dist/compliance-GZ7UAOG3.js +6 -0
- package/dist/conductor-Y5IXELTL.js +4 -0
- package/dist/config-schema-HR7LDEQ6.js +2 -0
- package/dist/constellation-CG7C4WFE.js +13 -0
- package/dist/context-audit-RSSRX6XC.js +6 -0
- package/dist/cost-IDNVMAEV.js +10 -0
- package/dist/cost-PK4KIF7R.js +2 -0
- package/dist/cursor-cli-QKF7Z6M2.js +4 -0
- package/dist/cursorrules-U5O4G5T4.js +14 -0
- package/dist/decision-loader-2XPZE4EZ.js +2 -0
- package/dist/delete-P5VULXR4.js +14 -0
- package/dist/diff-RTFUKJHF.js +9 -0
- package/dist/discipline-H7LDI6NT.js +2 -0
- package/dist/dist-3ZCH25SG.js +2 -0
- package/dist/dist-KGRCLBJP-2QAPFYNF.js +39 -0
- package/dist/dist-R3RWD35F.js +2 -0
- package/dist/dist-VGFSP3XM.js +2 -0
- package/dist/dist-VXCZWVVJ.js +2 -0
- package/dist/dist-W3XCATBJ.js +2 -0
- package/dist/docs-EDQ2STFK.js +2 -0
- package/dist/docs-RXPN6CK7.js +12 -0
- package/dist/doctor-2T2QL6VM.js +2 -0
- package/dist/drift-ILZE5BFJ.js +13 -0
- package/dist/echo-UPTQUEDU.js +46 -0
- package/dist/edit-GUU3HBVW.js +9 -0
- package/dist/event-Y3VXC2RV.js +3 -0
- package/dist/explain-files-3GPZUETV.js +4 -0
- package/dist/export-CV5KCTPS.js +2 -0
- package/dist/flow-S3RQ4YPY.js +11 -0
- package/dist/global-C44FW4G2.js +13 -0
- package/dist/graduate-3BBSC27A.js +5 -0
- package/dist/graph-CNDE5TAT.js +2 -0
- package/dist/graph-server-COZR5C3Z.js +14 -0
- package/dist/habits-4J2KRYUL.js +42 -0
- package/dist/history-UW454SDP.js +12 -0
- package/dist/hooks-XH52VGOU.js +2 -0
- package/dist/index.js +15 -1039
- package/dist/init-24MAQJFM.js +2 -0
- package/dist/integrity-UYDOOJDP.js +7 -0
- package/dist/integrity-checker-DHGMZQDG.js +2 -0
- package/dist/journal-loader-GLH7XFTK.js +2 -0
- package/dist/lint-IGKE6UPS.js +26 -0
- package/dist/list-5IUGP3ZB.js +7 -0
- package/dist/list-YKIQNKGB.js +6 -0
- package/dist/lore-loader-RVQI5GXL.js +2 -0
- package/dist/lore-loader-XY5MZRR2.js +2 -0
- package/dist/lore-server-FC2GMDLT.js +14 -0
- package/dist/manual-RXSPSFLL.js +20 -0
- package/dist/mcp.js +93 -20484
- package/dist/migrate-X5OMAFAQ.js +59 -0
- package/dist/migrate-assessments-GEI5WMI2.js +4 -0
- package/dist/model-discovery-HMB3YI4L.js +2 -0
- package/dist/nomination-engine-XF7TWPAP.js +2 -0
- package/dist/notebook-PE3JSYZI.js +11 -0
- package/dist/notebook-loader-CENTDDUJ.js +2 -0
- package/dist/orchestrate-35HBQ3O3.js +8 -0
- package/dist/peers-P2KXU7ZK.js +5 -0
- package/dist/persona-STQWZH5P.js +29 -0
- package/dist/pipeline-MZUITRVN.js +4 -0
- package/dist/platform-server-2KXHGHFV.js +25 -0
- package/dist/plugin-update-checker-M7PW434O.js +2 -0
- package/dist/portal-check-3JVNLOEP.js +8 -0
- package/dist/portal-compliance-2UG4VKWH.js +2 -0
- package/dist/probe-5L5BQDGE.js +6 -0
- package/dist/project-type-SURTOIG7.js +2 -0
- package/dist/promote-NJQDZBZA.js +8 -0
- package/dist/providers-4PXMWA7V.js +8 -0
- package/dist/quiz-FE5UGAY2.js +10 -0
- package/dist/record-YXPB34MY.js +6 -0
- package/dist/reindex-PGDQSM42.js +2 -0
- package/dist/remember-MJRNTXYS.js +14 -0
- package/dist/retag-N5XF3KXP.js +6 -0
- package/dist/review-6UAH6V3R.js +11 -0
- package/dist/review-77QI6VOC.js +6 -0
- package/dist/ripple-ZGDITCGB.js +10 -0
- package/dist/roster-FLRZ5J42.js +2 -0
- package/dist/sentinel-HYAZ3CO5.js +19 -0
- package/dist/sentinel-bridge-VR357PKL.js +2 -0
- package/dist/sentinel-mcp.js +38 -3808
- package/dist/sentinel.js +1 -34
- package/dist/serve-JE6UF5P2.js +8 -0
- package/dist/serve-L52ZUTU6.js +10 -0
- package/dist/serve-OY6XYL7F.js +12 -0
- package/dist/server-2MNROHF6.js +7 -0
- package/dist/server-4YNUIK4W.js +8 -0
- package/dist/session-tracker-SKOMBDOW.js +2 -0
- package/dist/session-work-log-3MNUDEZ6.js +2 -0
- package/dist/session-work-log-J2H5OZBR.js +2 -0
- package/dist/setup-3F5IK7MO.js +31 -0
- package/dist/setup-KPIMRZ4Q.js +2 -0
- package/dist/shift-6GCNH666.js +11 -0
- package/dist/show-BOAVWZPZ.js +7 -0
- package/dist/show-PJ5LFLIL.js +5 -0
- package/dist/snapshot-L2G56RPL.js +8 -0
- package/dist/spawn-UH5RENSE.js +12 -0
- package/dist/status-77M3SDIF.js +8 -0
- package/dist/status-A37ECYNJ.js +6 -0
- package/dist/summary-ZJLQ6KHB.js +7 -0
- package/dist/sweep-HU74OPVW.js +17 -0
- package/dist/switch-CTW4PDGI.js +17 -0
- package/dist/symphony-3QMBGCZY.js +2 -0
- package/dist/symphony-QI63XL62.js +53 -0
- package/dist/symphony-loader-XACVV2E3.js +2 -0
- package/dist/symphony-peers-U4KHMKGI.js +2 -0
- package/dist/symphony-peers-X5NGWXFP.js +2 -0
- package/dist/symphony-relay-5GY5JIPT.js +3 -0
- package/dist/sync-QRDSFETO.js +2 -0
- package/dist/sync-llms-HL5PPW3M.js +15 -0
- package/dist/task-loader-NZFDTUQ5.js +2 -0
- package/dist/team-WGERKGNP.js +2 -0
- package/dist/test-BQJMS4Y2.js +111 -0
- package/dist/thread-HFXK65D4.js +41 -0
- package/dist/timeline-K3ZFKJ3R.js +6 -0
- package/dist/triage-FCWOZASE.js +18 -0
- package/dist/tutorial-UC6YQMNN.js +305 -0
- package/dist/university-content/courses/.purpose +74 -5
- package/dist/university-content/courses/para-701.json +807 -0
- package/dist/university-content/plsat/.purpose +3 -2
- package/dist/university-ui/assets/{index-BjewBB6s.js → index-CGFJczb1.js} +2 -2
- package/dist/university-ui/assets/{index-BjewBB6s.js.map → index-CGFJczb1.js.map} +1 -1
- package/dist/university-ui/index.html +1 -1
- package/dist/upgrade-B4IOLZYK.js +53 -0
- package/dist/validate-C6SMKGYD.js +9 -0
- package/dist/validate-LSCDOLBO.js +13 -0
- package/dist/validate-VZXTJHGO.js +6 -0
- package/dist/watch-LRM5XD46.js +8 -0
- package/dist/watch-PZCCUP6K.js +9 -0
- package/dist/wisdom-XZ3QKPNP.js +7 -0
- package/dist/work-log-loader-DL5GZ2BQ.js +2 -0
- package/dist/workspace-2ODL5WLY.js +2 -0
- package/package.json +1 -1
- package/platform-ui/dist/assets/AmbientSection-DqQ2mfCO.js +1 -0
- package/platform-ui/dist/assets/{CanvasSection-DwPTRdIN.js → CanvasSection-DLW0s-Bu.js} +1 -1
- package/platform-ui/dist/assets/{DocsSection-BJc_ws4I.js → DocsSection-BQ9Hi51g.js} +1 -1
- package/platform-ui/dist/assets/{GitSection-DhqBo1xc.js → GitSection-QQeUX6o3.js} +1 -1
- package/platform-ui/dist/assets/{GraphSection-D9fhVnZ0.js → GraphSection-0c9C-w7K.js} +2 -2
- package/platform-ui/dist/assets/{GraphSection-BlgXTl53.css → GraphSection-Bbs2a8sC.css} +1 -1
- package/platform-ui/dist/assets/LoreSection--t56kCj2.js +1 -0
- package/platform-ui/dist/assets/LoreSection-qnmm3o4y.css +1 -0
- package/platform-ui/dist/assets/SentinelSection-C4OoME9U.js +1 -0
- package/platform-ui/dist/assets/{SymphonySection-BRoBaUSS.js → SymphonySection-B-rvsLxq.js} +1 -1
- package/platform-ui/dist/assets/TeamSection-CBFmNEEo.js +1 -0
- package/platform-ui/dist/assets/index-Bxp0TVaf.css +1 -0
- package/platform-ui/dist/assets/index-DPpOdAtC.js +57 -0
- package/platform-ui/dist/index.html +2 -2
- package/dist/accept-orchestration-UQLM7PTQ.js +0 -189
- package/dist/add-FZRKEGH4.js +0 -81
- package/dist/agent-WERIO2XV.js +0 -523
- package/dist/agent-loader-TFIANSF4.js +0 -44
- package/dist/agent-state-S5DAWPTF.js +0 -24
- package/dist/agents-suggest-DNSYJ6IA.js +0 -83
- package/dist/aggregate-H57K7PNV.js +0 -88
- package/dist/assess-4WVXZLZQ.js +0 -68
- package/dist/auto-QFS5NHQU.js +0 -504
- package/dist/beacon-KXZXYQHX.js +0 -251
- package/dist/calibration-V46G7JTY.js +0 -135
- package/dist/check-OWAIWV23.js +0 -175
- package/dist/chunk-2IO7JAG2.js +0 -148
- package/dist/chunk-2T6BTYBN.js +0 -712
- package/dist/chunk-36TKPM5Z.js +0 -400
- package/dist/chunk-45MUDW6E.js +0 -804
- package/dist/chunk-4BLYIB7J.js +0 -5701
- package/dist/chunk-4L3UTYQX.js +0 -677
- package/dist/chunk-4NCFWYGG.js +0 -110
- package/dist/chunk-54LTTQBH.js +0 -138
- package/dist/chunk-5EWAQHFY.js +0 -269
- package/dist/chunk-5JGJACDU.js +0 -37
- package/dist/chunk-5OUOLN6M.js +0 -659
- package/dist/chunk-5VKJBNJL.js +0 -444
- package/dist/chunk-6N3JTACN.js +0 -2260
- package/dist/chunk-6QC3YGB6.js +0 -114
- package/dist/chunk-7N7GSU6K.js +0 -34
- package/dist/chunk-ABVQGRF7.js +0 -268
- package/dist/chunk-CL7JSK52.js +0 -129
- package/dist/chunk-CSD7IHSN.js +0 -152
- package/dist/chunk-EDOAWN7J.js +0 -717
- package/dist/chunk-EKGMAM62.js +0 -525
- package/dist/chunk-EZ3GOCYC.js +0 -132
- package/dist/chunk-F3BCHPYT.js +0 -143
- package/dist/chunk-FKJUBQU3.js +0 -3081
- package/dist/chunk-GT5QGC2H.js +0 -253
- package/dist/chunk-GZDFVP2N.js +0 -540
- package/dist/chunk-IRKUEJVW.js +0 -405
- package/dist/chunk-J2JEQRT3.js +0 -164
- package/dist/chunk-JASGXLK3.js +0 -679
- package/dist/chunk-KVDYJLTC.js +0 -121
- package/dist/chunk-L27I3CPZ.js +0 -357
- package/dist/chunk-LHLIAYQ3.js +0 -185
- package/dist/chunk-MCMOGQMU.js +0 -145
- package/dist/chunk-NQKQG45G.js +0 -688
- package/dist/chunk-PBHIFAL4.js +0 -259
- package/dist/chunk-PDX44BCA.js +0 -11
- package/dist/chunk-PMXRGPRQ.js +0 -305
- package/dist/chunk-RAB5IKPR.js +0 -487
- package/dist/chunk-RJE5G7WO.js +0 -590
- package/dist/chunk-RTHA3XRE.js +0 -880
- package/dist/chunk-S2HO5MLR.js +0 -621
- package/dist/chunk-S3ORKP3V.js +0 -716
- package/dist/chunk-TAIJOFOE.js +0 -124
- package/dist/chunk-TXESEO7Y.js +0 -245
- package/dist/chunk-UPLDI7CN.js +0 -1334
- package/dist/chunk-VL67H5IC.js +0 -506
- package/dist/chunk-VPPK3SY4.js +0 -1136
- package/dist/chunk-YMDLDELF.js +0 -314
- package/dist/chunk-YO6DVTL7.js +0 -99
- package/dist/chunk-YRZ5RPEB.js +0 -1561
- package/dist/chunk-ZDHLG5VP.js +0 -5676
- package/dist/chunk-ZGUAAVMA.js +0 -756
- package/dist/chunk-ZSYVKSY6.js +0 -2602
- package/dist/claude-FRRWJSTJ.js +0 -362
- package/dist/claude-cli-XJLK2X4L.js +0 -276
- package/dist/claude-code-HTBA4XRB.js +0 -126
- package/dist/claude-code-teams-T4SP24MD.js +0 -199
- package/dist/commands-5N4ILTPH.js +0 -5859
- package/dist/conductor-CQVGTEQN.js +0 -161
- package/dist/config-schema-EA4XALGG.js +0 -154
- package/dist/constellation-A26CCGQS.js +0 -225
- package/dist/context-audit-RLO3ETRP.js +0 -682
- package/dist/cost-BGM32XJU.js +0 -93
- package/dist/cost-VI46A4XL.js +0 -174
- package/dist/cursor-cli-JVEZGHWQ.js +0 -269
- package/dist/cursorrules-HLIKJJZT.js +0 -84
- package/dist/decision-loader-WWCLIQPJ.js +0 -20
- package/dist/delete-KBRPQLPC.js +0 -56
- package/dist/diff-D4X53HAC.js +0 -126
- package/dist/discipline-FA4OZXIS.js +0 -24
- package/dist/dist-34NA5RS5.js +0 -74
- package/dist/dist-5QE2BB2B-5S3T6Y3T.js +0 -6919
- package/dist/dist-77JDTVAY.js +0 -62
- package/dist/dist-OGTSAZ55.js +0 -1358
- package/dist/dist-QK4SQAK7.js +0 -64
- package/dist/dist-TA6LSC2Q.js +0 -20
- package/dist/docs-PBZB7LYP.js +0 -89
- package/dist/docs-QIYKO3BR.js +0 -155
- package/dist/doctor-ULBOHEIC.js +0 -11
- package/dist/drift-R5NRKFHI.js +0 -251
- package/dist/echo-O2LY7CC2.js +0 -248
- package/dist/edit-R2HNLMOG.js +0 -63
- package/dist/event-25OJKDCE.js +0 -31
- package/dist/export-IWVL7XLF.js +0 -38
- package/dist/flow-CRRVV3O3.js +0 -185
- package/dist/global-3NG5JXUB.js +0 -136
- package/dist/graduate-USAWGBJM.js +0 -160
- package/dist/graph-VHUMAAS6.js +0 -12
- package/dist/graph-server-YL22VBBN.js +0 -116
- package/dist/habits-OL5NGPXO.js +0 -1405
- package/dist/history-WOWC573W.js +0 -277
- package/dist/hooks-HFWSCGPV.js +0 -12
- package/dist/integrity-IHO4FZTS.js +0 -194
- package/dist/integrity-checker-PSKJA5SB.js +0 -12
- package/dist/journal-loader-5EYSBFFY.js +0 -18
- package/dist/lint-K6CJGGPH.js +0 -456
- package/dist/list-4YK7QKFF.js +0 -57
- package/dist/list-ENR7Q4CR.js +0 -56
- package/dist/lore-loader-7NO6N6FT.js +0 -26
- package/dist/lore-server-UNJY5KC3.js +0 -118
- package/dist/manual-G6FISID5.js +0 -204
- package/dist/migrate-LS45DNEV.js +0 -889
- package/dist/migrate-assessments-RGH4O6IX.js +0 -97
- package/dist/model-discovery-D2H3VBGC.js +0 -8
- package/dist/nomination-engine-RV5CNO5B.js +0 -42
- package/dist/notebook-YWIYGEHV.js +0 -155
- package/dist/orchestrate-JLILBBJE.js +0 -324
- package/dist/peers-DEOUIZM6.js +0 -82
- package/dist/persona-UHAHIVST.js +0 -390
- package/dist/pipeline-L4HCSBGN.js +0 -263
- package/dist/platform-server-H5YO3DQD.js +0 -1475
- package/dist/plugin-update-checker-KRRSGXMV.js +0 -12
- package/dist/portal-check-NPYGII2D.js +0 -42
- package/dist/portal-compliance-J7DGAPFX.js +0 -18
- package/dist/probe-MHL5HQZ2.js +0 -167
- package/dist/promote-F6ZYZZAL.js +0 -182
- package/dist/providers-GK7PB2OL.js +0 -104
- package/dist/quiz-M66SC7F7.js +0 -99
- package/dist/record-RA4WR2BO.js +0 -49
- package/dist/reindex-5LTD53ZC.js +0 -16
- package/dist/remember-HBWJ655S.js +0 -77
- package/dist/retag-3OLCVDEQ.js +0 -62
- package/dist/review-27ATYTD2.js +0 -33
- package/dist/review-57QMURZV.js +0 -334
- package/dist/ripple-JPBXP5I3.js +0 -215
- package/dist/sentinel-4XIG4STA.js +0 -63
- package/dist/sentinel-bridge-MDUXTQRL.js +0 -109
- package/dist/serve-CAH3PHE7.js +0 -33
- package/dist/serve-INL7SNBK.js +0 -36
- package/dist/serve-KBSE36PL.js +0 -49
- package/dist/server-54SKYFFY.js +0 -1647
- package/dist/server-XUOIO7E6.js +0 -338
- package/dist/session-tracker-C4BMD5WG.js +0 -13
- package/dist/session-work-log-MZ47OAPB.js +0 -20
- package/dist/setup-EDS27WUR.js +0 -25
- package/dist/setup-KO5AFC4K.js +0 -296
- package/dist/shift-D2JOHHBF.js +0 -668
- package/dist/show-5PV5KFJE.js +0 -176
- package/dist/show-NQKYX6WQ.js +0 -82
- package/dist/snapshot-BK4RBPCG.js +0 -62
- package/dist/spawn-RCHNXDHE.js +0 -196
- package/dist/status-WGIAQODY.js +0 -71
- package/dist/summary-NIRABMF5.js +0 -140
- package/dist/sweep-QMHNSIY5.js +0 -934
- package/dist/switch-6EJPZDIA.js +0 -232
- package/dist/symphony-4OCY36AI.js +0 -791
- package/dist/symphony-B75X2MME.js +0 -326
- package/dist/symphony-loader-UZGON56V.js +0 -90
- package/dist/symphony-peers-2ZQYLRNI.js +0 -34
- package/dist/symphony-peers-OL7F6M5S.js +0 -121
- package/dist/symphony-relay-UJYUXN65.js +0 -710
- package/dist/sync-VEHUH4OA.js +0 -11
- package/dist/sync-llms-YHCFIE6X.js +0 -166
- package/dist/task-loader-LDYWQSLM.js +0 -20
- package/dist/team-O5MIIFMA.js +0 -34
- package/dist/test-566CP5KC.js +0 -1017
- package/dist/thread-N754I4D5.js +0 -274
- package/dist/timeline-M3CICQFE.js +0 -112
- package/dist/triage-HHYGT3HY.js +0 -671
- package/dist/tutorial-KD22SUNO.js +0 -666
- package/dist/upgrade-H5PF32BW.js +0 -551
- package/dist/validate-CNKEKO6A.js +0 -134
- package/dist/validate-MB5ULIHS.js +0 -39
- package/dist/validate-QH3LADM6.js +0 -64
- package/dist/watch-2TKP5PVL.js +0 -199
- package/dist/watch-ZF4ML6CD.js +0 -111
- package/dist/wisdom-AATMGNFA.js +0 -319
- package/dist/work-log-loader-5L45XNYZ.js +0 -14
- package/dist/workspace-6E6OSRNU.js +0 -21
- package/platform-ui/dist/assets/AmbientSection-WtHfNedO.js +0 -1
- package/platform-ui/dist/assets/LoreSection-C3EixkjW.css +0 -1
- package/platform-ui/dist/assets/LoreSection-CwDDHrz9.js +0 -1
- package/platform-ui/dist/assets/SentinelSection-Cl7e5oZ6.js +0 -1
- package/platform-ui/dist/assets/TeamSection-CqSIMrKz.js +0 -1
- package/platform-ui/dist/assets/index-CfpZFjea.css +0 -1
- package/platform-ui/dist/assets/index-F0KL9xrN.js +0 -57
package/dist/sentinel.js
CHANGED
|
@@ -1,35 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
// ../sentinel/src/cli.ts
|
|
4
|
-
import { Command } from "commander";
|
|
5
|
-
import { createRequire } from "module";
|
|
6
|
-
var require2 = createRequire(import.meta.url);
|
|
7
|
-
var { version: VERSION } = require2("../package.json");
|
|
8
|
-
var program = new Command();
|
|
9
|
-
program.name("sentinel").description("Semantic error monitoring \u2014 errors that speak your language").version(VERSION);
|
|
10
|
-
program.command("defend", { isDefault: true }).description("Launch the Sentinel dashboard").option("-p, --port <port>", "Port number", "3838").option("--no-open", "Don't open browser").action(async (opts) => {
|
|
11
|
-
const { launchDashboard } = await import("./commands-5N4ILTPH.js");
|
|
12
|
-
await launchDashboard(opts);
|
|
13
|
-
});
|
|
14
|
-
program.command("init").description("Initialize Sentinel in current project").option("--detect", "Auto-detect symbols from codebase").action(async (opts) => {
|
|
15
|
-
const { initProject } = await import("./commands-5N4ILTPH.js");
|
|
16
|
-
await initProject(opts);
|
|
17
|
-
});
|
|
18
|
-
var triage = program.command("triage").description("Incident triage");
|
|
19
|
-
triage.command("list").description("List incidents").option("-s, --status <status>", "Filter by status (open, investigating, resolved, wont-fix)").option("-e, --env <env>", "Filter by environment").option("--symbol <symbol>", "Filter by symbol").option("-n, --limit <n>", "Max results", "10").action(async (opts) => {
|
|
20
|
-
const { triageList } = await import("./commands-5N4ILTPH.js");
|
|
21
|
-
await triageList(opts);
|
|
22
|
-
});
|
|
23
|
-
triage.command("show <id>").description("Show incident details").option("--timeline", "Include flow timeline").action(async (id, opts) => {
|
|
24
|
-
const { triageShow } = await import("./commands-5N4ILTPH.js");
|
|
25
|
-
await triageShow(id, opts);
|
|
26
|
-
});
|
|
27
|
-
triage.command("resolve <id>").description("Resolve an incident").option("--pattern <id>", "Pattern that resolved it").option("--commit <hash>", "Fix commit").option("--notes <text>", "Resolution notes").action(async (id, opts) => {
|
|
28
|
-
const { triageResolve } = await import("./commands-5N4ILTPH.js");
|
|
29
|
-
await triageResolve(id, opts);
|
|
30
|
-
});
|
|
31
|
-
triage.command("stats").description("Show incident statistics").option("-p, --period <period>", "Period (7d, 30d, 90d)", "7d").action(async (opts) => {
|
|
32
|
-
const { triageStats } = await import("./commands-5N4ILTPH.js");
|
|
33
|
-
await triageStats(opts);
|
|
34
|
-
});
|
|
35
|
-
program.parse();
|
|
2
|
+
import {Command}from'commander';import {createRequire}from'module';var r=createRequire(import.meta.url),{version:c}=r("../package.json"),o=new Command;o.name("sentinel").description("Semantic error monitoring \u2014 errors that speak your language").version(c);o.command("defend",{isDefault:true}).description("Launch the Sentinel dashboard").option("-p, --port <port>","Port number","3838").option("--no-open","Don't open browser").action(async t=>{let{launchDashboard:i}=await import('./commands-LMUD5L6R.js');await i(t);});o.command("init").description("Initialize Sentinel in current project").option("--detect","Auto-detect symbols from codebase").action(async t=>{let{initProject:i}=await import('./commands-LMUD5L6R.js');await i(t);});var n=o.command("triage").description("Incident triage");n.command("list").description("List incidents").option("-s, --status <status>","Filter by status (open, investigating, resolved, wont-fix)").option("-e, --env <env>","Filter by environment").option("--symbol <symbol>","Filter by symbol").option("-n, --limit <n>","Max results","10").action(async t=>{let{triageList:i}=await import('./commands-LMUD5L6R.js');await i(t);});n.command("show <id>").description("Show incident details").option("--timeline","Include flow timeline").action(async(t,i)=>{let{triageShow:e}=await import('./commands-LMUD5L6R.js');await e(t,i);});n.command("resolve <id>").description("Resolve an incident").option("--pattern <id>","Pattern that resolved it").option("--commit <hash>","Fix commit").option("--notes <text>","Resolution notes").action(async(t,i)=>{let{triageResolve:e}=await import('./commands-LMUD5L6R.js');await e(t,i);});n.command("stats").description("Show incident statistics").option("-p, --period <period>","Period (7d, 30d, 90d)","7d").action(async t=>{let{triageStats:i}=await import('./commands-LMUD5L6R.js');await i(t);});o.parse();
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import'./chunk-5TAVYPOV.js';import o from'chalk';async function i(e){let n=process.cwd(),t=parseInt(e.port||"3850",10),s=e.open!==false,a=e.sections?e.sections.split(",").map(r=>r.trim()):void 0;console.log(o.cyan(`
|
|
3
|
+
Starting Paradigm Platform...
|
|
4
|
+
`));try{let{startPlatformServer:r}=await import('./platform-server-2KXHGHFV.js');await r({port:t,projectDir:n,open:s,sections:a}),console.log(o.green(` Platform running at ${o.bold(`http://localhost:${t}`)}`)),console.log(o.gray(` Press Ctrl+C to stop
|
|
5
|
+
`)),await new Promise(()=>{});}catch(r){r.code==="EADDRINUSE"?(console.error(o.red(`
|
|
6
|
+
Error: Port ${t} is already in use.`)),console.log(o.gray(` Try: paradigm serve --port ${t+1}
|
|
7
|
+
`))):console.error(o.red(`
|
|
8
|
+
Failed to start Platform:`),r),process.exit(1);}}export{i as serveCommand};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import'./chunk-5TAVYPOV.js';import o from'chalk';async function a(s,n){let t=s||process.cwd(),e=parseInt(n.port||"3840",10),i=n.open!==false;console.log(o.cyan(`
|
|
3
|
+
Starting Lore Timeline...
|
|
4
|
+
`));try{let{startLoreServer:r}=await import('./lore-server-FC2GMDLT.js');console.log(o.gray(`Project: ${t}`)),console.log(o.gray(`Port: ${e}`)),console.log(),await r({port:e,projectDir:t,open:i}),console.log(o.green(`
|
|
5
|
+
Lore Timeline is running at http://localhost:${e}`)),console.log(o.gray(`
|
|
6
|
+
Press Ctrl+C to stop
|
|
7
|
+
`)),await new Promise(()=>{});}catch(r){r.code==="EADDRINUSE"?(console.error(o.red(`
|
|
8
|
+
Error: Port ${e} is already in use.`)),console.log(o.gray(`Try: paradigm lore --port ${e+1}
|
|
9
|
+
`))):console.error(o.red(`
|
|
10
|
+
Failed to start Lore Timeline:`),r),process.exit(1);}}export{a as loreServeCommand};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import'./chunk-5TAVYPOV.js';import o from'chalk';import*as n from'path';import {fileURLToPath}from'url';var p=fileURLToPath(import.meta.url),i=n.dirname(p);async function g(d,t){let r=parseInt(t.port||"3839",10),s=t.open!==false;console.log(o.cyan(`
|
|
3
|
+
Opening the campus gates...
|
|
4
|
+
`));try{let{startServer:e}=await import('./server-2MNROHF6.js'),a=n.resolve(i,"university-content"),c=n.resolve(i,"university-ui");console.log(o.gray(`Port: ${r}`)),console.log(),await e({port:r,open:s,contentDir:a,uiDistPath:c,projectDir:process.cwd()}),console.log(o.green(`
|
|
5
|
+
Paradigm University is running at http://localhost:${r}`)),console.log(o.gray(`
|
|
6
|
+
Press Ctrl+C to stop
|
|
7
|
+
`)),await new Promise(()=>{});}catch(e){e.code==="ERR_MODULE_NOT_FOUND"||e.code==="MODULE_NOT_FOUND"?(console.error(o.red(`
|
|
8
|
+
@a-company/university is not installed.`)),console.log(o.gray(`Install it with: npm install @a-company/university
|
|
9
|
+
`))):e.code==="EADDRINUSE"?(console.error(o.red(`
|
|
10
|
+
Error: Port ${r} is already in use.`)),console.log(o.gray(`Try a different port with: paradigm university serve --port ${r+1}
|
|
11
|
+
`))):console.error(o.red(`
|
|
12
|
+
Failed to start Paradigm University:`),e),process.exit(1);}}export{g as universityServeCommand};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import'./chunk-5TAVYPOV.js';import h,{Router}from'express';import*as u from'path';import*as a from'fs';import {fileURLToPath}from'url';import d from'chalk';function N(n){let r=Router();return r.get("/",(o,s)=>{let e=u.join(n,"courses");if(!a.existsSync(e))return s.json({courses:[]});let i=a.readdirSync(e).filter(t=>t.endsWith(".json")).map(t=>{let l=JSON.parse(a.readFileSync(u.join(e,t),"utf-8"));return {id:l.id,title:l.title,description:l.description,lessonCount:l.lessons?.length||0,lessons:(l.lessons||[]).map(c=>({id:c.id,title:c.title}))}});return i.sort((t,l)=>t.id.localeCompare(l.id)),s.json({courses:i})}),r.get("/:id",(o,s)=>{let e=u.join(n,"courses",`${o.params.id}.json`);if(!a.existsSync(e))return s.status(404).json({error:`Course '${o.params.id}' not found`});let i=JSON.parse(a.readFileSync(e,"utf-8"));return s.json(i)}),r.get("/:id/lessons/:lessonId",(o,s)=>{let e=u.join(n,"courses",`${o.params.id}.json`);if(!a.existsSync(e))return s.status(404).json({error:`Course '${o.params.id}' not found`});let i=(JSON.parse(a.readFileSync(e,"utf-8")).lessons||[]).find(t=>t.id===o.params.lessonId);return i?s.json(i):s.status(404).json({error:`Lesson '${o.params.lessonId}' not found`})}),r}function v(n){return n[Math.floor(Math.random()*n.length)]}function F(n){for(let r=n.length-1;r>0;r--){let o=Math.floor(Math.random()*(r+1));[n[r],n[o]]=[n[o],n[r]];}return n}function L(n){let r={},o=[];for(let s of n.items)if(s.type==="standalone"||s.type==="variant-group"){let e=v(s.variants);o.push([{id:e.id,course:s.course,scenario:e.scenario,question:e.question,choices:e.choices,correct:e.correct,explanation:e.explanation}]);}else {r[s.slot]=s.passage;let e=s.questions.map(i=>{let t=v(i.variants);return {id:t.id,course:s.course,scenario:t.scenario,question:t.question,choices:t.choices,correct:t.correct,explanation:t.explanation,passageId:s.slot}});o.push(e);}return F(o),{questions:o.flat(),passages:r}}function J(n){let r=0;for(let o of n.items)o.type==="standalone"||o.type==="variant-group"?r+=1:r+=o.questions.length;return r}function k(n,r){let o=Router();return o.get("/",(s,e)=>{let i=u.join(n,"plsat");if(!a.existsSync(i))return e.json({versions:[]});let t=a.readdirSync(i).filter(l=>l.endsWith(".json")).map(l=>{let c=JSON.parse(a.readFileSync(u.join(i,l),"utf-8")),p=c.items?J(c):c.questions?.length||0;return {version:c.version,frameworkVersion:c.frameworkVersion,questionCount:p,timeLimit:c.timeLimit,passThreshold:c.passThreshold}});return t.sort((l,c)=>c.version.localeCompare(l.version)),e.json({versions:t})}),o.get("/:version",(s,e)=>{try{let i=u.join(n,"plsat",`v${s.params.version}.json`);if(!a.existsSync(i))return e.status(404).json({error:`PLSAT version '${s.params.version}' not found`});let t=JSON.parse(a.readFileSync(i,"utf-8"));if(t.items){let{questions:c,passages:p}=L(t);return e.json({version:t.version,frameworkVersion:t.frameworkVersion,timeLimit:t.timeLimit,passThreshold:t.passThreshold,title:t.title,description:t.description,questions:c,...Object.keys(p).length>0?{passages:p}:{}})}let l=[...t.questions].sort(()=>Math.random()-.5);return e.json({...t,questions:l})}catch(i){let t=i instanceof Error?i.message:"Internal error";return e.status(500).json({error:`Failed to load PLSAT exam: ${t}`})}}),o.post("/diploma",(s,e)=>{if(!r)return e.status(400).json({error:"No project directory configured"});let i=u.join(r,".paradigm","university","diplomas");if(!a.existsSync(i))return e.json({saved:false,reason:"university directory not found"});try{let{student:t,version:l,score:c,total:p,percentage:O,passed:x}=s.body;if(!t||!l||c==null||p==null)return e.status(400).json({error:"Missing required fields: student, version, score, total"});let w=new Date().toISOString().slice(0,10),$=String(t).toLowerCase().replace(/[^a-z0-9-]/g,"-").slice(0,20),j=`D-${w}-${$}-plsat-v${l}`,P={id:j,type:"plsat",student:$,earnedAt:new Date().toISOString(),source:`plsat:v${l}`,score:c,total:p,percentage:O??(p>0?Math.round(c/p*1e4)/100:0),passed:x??!1,details:{plsatVersion:l}},b=u.join(i,`${j}.yaml`),q=Object.entries(P).map(([g,f])=>{if(typeof f=="object"&&f!==null){let A=Object.entries(f).map(([C,I])=>` ${C}: ${JSON.stringify(I)}`).join(`
|
|
3
|
+
`);return `${g}:
|
|
4
|
+
${A}`}return `${g}: ${JSON.stringify(f)}`});return a.writeFileSync(b,q.join(`
|
|
5
|
+
`)+`
|
|
6
|
+
`,"utf8"),e.json({saved:!0,diplomaId:j})}catch(t){let l=t instanceof Error?t.message:"Internal error";return e.status(500).json({error:`Failed to save diploma: ${l}`})}}),o}var M=fileURLToPath(import.meta.url),y=u.dirname(M);function E(n){let r=n;for(;r!==u.dirname(r);){if(a.existsSync(u.join(r,"package.json"))&&JSON.parse(a.readFileSync(u.join(r,"package.json"),"utf-8")).name==="@a-company/university")return r;r=u.dirname(r);}return n}var m={component(n){let r=d.magenta(`#${n}`);return {info:(o,s)=>{let e=s?d.gray(` ${Object.entries(s).map(([i,t])=>`${i}=${t}`).join(" ")}`):"";console.log(`${d.blue("\u2139")} ${r} ${o}${e}`);},success:(o,s)=>{let e=s?d.gray(` ${Object.entries(s).map(([i,t])=>`${i}=${t}`).join(" ")}`):"";console.log(`${d.green("\u2714")} ${r} ${o}${e}`);},warn:(o,s)=>{let e=s?d.gray(` ${Object.entries(s).map(([i,t])=>`${i}=${t}`).join(" ")}`):"";console.log(`${d.yellow("\u26A0")} ${r} ${o}${e}`);},error:(o,s)=>{let e=s?d.gray(` ${Object.entries(s).map(([i,t])=>`${i}=${t}`).join(" ")}`):"";console.error(`${d.red("\u2716")} ${r} ${o}${e}`);}}}};function V(n){if(n?.contentDir&&n?.uiDistPath)return {contentDir:n.contentDir,uiDistPath:n.uiDistPath};let r=u.join(y,"university-content"),o=u.join(y,"university-ui");if(a.existsSync(r)&&a.existsSync(o))return {contentDir:n?.contentDir||r,uiDistPath:n?.uiDistPath||o};let s=E(y);return {contentDir:n?.contentDir||u.join(s,"src","content"),uiDistPath:n?.uiDistPath||u.join(s,"ui","dist")}}function D(n){let r=h();r.use(h.json()),r.use((e,i,t)=>{i.header("Access-Control-Allow-Origin","*"),i.header("Access-Control-Allow-Methods","GET, POST, PUT, DELETE, OPTIONS"),i.header("Access-Control-Allow-Headers","Content-Type"),t();});let{contentDir:o,uiDistPath:s}=V(n);return r.use("/api/courses",N(o)),r.use("/api/plsat",k(o,n?.projectDir)),r.get("/api/reference",(e,i)=>{let t=u.join(o,"reference.json");if(a.existsSync(t)){let l=JSON.parse(a.readFileSync(t,"utf-8"));i.json(l);}else i.status(404).json({error:"Reference data not found"});}),r.get("/api/health",(e,i)=>{i.json({status:"ok",timestamp:new Date().toISOString()});}),a.existsSync(s)&&(r.use(h.static(s)),r.get("{*path}",(e,i)=>{e.path.startsWith("/api")||i.sendFile(u.join(s,"index.html"));})),r}async function R(n){let r=D({contentDir:n.contentDir,uiDistPath:n.uiDistPath,projectDir:n.projectDir});return m.component("university-server").info("Starting server",{port:n.port}),new Promise((o,s)=>{r.listen(n.port,()=>{m.component("university-server").success("Server running",{url:`http://localhost:${n.port}`}),n.open&&import('open').then(e=>{e.default(`http://localhost:${n.port}`),m.component("university-server").info("Opened browser");}).catch(()=>{m.component("university-server").warn("Could not open browser automatically");}),o();}).on("error",e=>{e.code==="EADDRINUSE"?m.component("university-server").error("Port already in use",{port:n.port}):m.component("university-server").error("Server error",{error:e.message}),s(e);});})}
|
|
7
|
+
export{D as createApp,R as startServer};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {a,g as g$1,h,i}from'./chunk-NKYNHSA5.js';export{h as PARADIGM_SCHEMA,i as SYMPHONY_SCHEMA,a as SentinelStorage,g as loadServerConfig}from'./chunk-NKYNHSA5.js';import'./chunk-5TAVYPOV.js';import L,{Router}from'express';import*as D from'http';import*as p from'path';import*as g from'fs';import {fileURLToPath}from'url';import y from'chalk';import {WebSocketServer,WebSocket}from'ws';import z from'simple-git';import {v4}from'uuid';var K=process.env.SENTINEL_LOG_LEVEL||process.env.LOG_LEVEL||"info",M={debug:0,info:1,warn:2,error:3};function w(n){return M[n]>=M[K]}function S(n){if(!n)return "";let o=Object.entries(n).map(([s,t])=>`${s}=${typeof t=="string"?t:JSON.stringify(t)}`).join(" ");return y.gray(` ${o}`)}var f={component(n){let o=y.magenta(`#${n}`);return {debug:(s,t)=>{w("debug")&&console.log(`${y.gray("\u25CB")} ${o} ${s}${S(t)}`);},info:(s,t)=>{w("info")&&console.log(`${y.blue("\u2139")} ${o} ${s}${S(t)}`);},warn:(s,t)=>{w("warn")&&console.log(`${y.yellow("\u26A0")} ${o} ${s}${S(t)}`);},error:(s,t)=>{w("error")&&console.error(`${y.red("\u2716")} ${o} ${s}${S(t)}`);}}},flow(n){let o=y.yellow(`$${n}`);return {debug:(s,t)=>{w("debug")&&console.log(`${y.gray("\u25CB")} ${o} ${s}${S(t)}`);},info:(s,t)=>{w("info")&&console.log(`${y.blue("\u2139")} ${o} ${s}${S(t)}`);},warn:(s,t)=>{w("warn")&&console.log(`${y.yellow("\u26A0")} ${o} ${s}${S(t)}`);},error:(s,t)=>{w("error")&&console.error(`${y.red("\u2716")} ${o} ${s}${S(t)}`);}}}},N=new Set(["$lib","$env","$app","$service-worker","$virtual","$schema","$ref","$id","$type"]);async function Q(n){let o=p.join(n,".paradigm","config.yaml");if(!g.existsSync(o)){let s=p.join(n,"package.json");if(g.existsSync(s))try{return {name:JSON.parse(g.readFileSync(s,"utf-8")).name}}catch{}return {}}try{let s=g.readFileSync(o,"utf-8"),t={},e=s.match(/^name:\s*(.+)$/m);e&&(t.name=e[1].trim().replace(/^["']|["']$/g,""));let r=s.match(/^discipline:\s*(.+)$/m);r&&(t.discipline=r[1].trim());let a=s.match(/^version:\s*(.+)$/m);return a&&(t.version=a[1].trim()),t}catch(s){return f.component("config-loader").error("Failed to load Paradigm config",{error:String(s)}),{}}}async function X(n){try{let{aggregateFromDirectory:o}=await import('./dist-KGRCLBJP-2QAPFYNF.js');f.flow("load-symbols").info("Using premise-core aggregator",{path:n});let s=await o(n),t={};for(let e of s.symbols)t[e.type]=(t[e.type]||0)+1;if(f.flow("load-symbols").info("Aggregation complete",{total:s.symbols.length,...t,purposeFiles:s.purposeFiles.length,portalFiles:s.portalFiles.length}),s.errors.length>0)for(let e of s.errors)f.component("aggregator").warn("Aggregation error",{source:e.source,file:e.filePath,message:e.message});for(let e of s.purposeFiles)f.component("purpose-loader").info("Loaded .purpose file",{file:p.relative(n,e)});for(let e of s.portalFiles)f.component("gate-loader").info("Loaded portal.yaml",{file:p.relative(n,e)});return s.symbols}catch(o){return f.component("premise-core").warn("premise-core not available, using fallback scanner",{error:o instanceof Error?o.message:String(o)}),null}}async function F(n){f.flow("load-symbols").info("Loading symbols",{projectDir:n});let o=p.join(n,".paradigm","index.json");if(g.existsSync(o))try{f.component("index-loader").info("Found cached index",{path:o});let t=g.readFileSync(o,"utf-8"),e=JSON.parse(t),r=Array.isArray(e.entries)?e.entries:Array.isArray(e)?e:null;if(r)return f.flow("load-symbols").info("Loaded from cached index",{count:r.length}),r}catch(t){f.component("index-loader").error("Failed to load cached index",{error:String(t)});}return await X(n)||(f.flow("load-symbols").info("Using fallback scanner"),Z(n))}async function Z(n){let o=[],s=new Set,t=["src","lib","packages","apps","."];for(let r of t){let a=p.join(n,r);g.existsSync(a)&&await _(a,o,s,n);}let e=p.join(n,"portal.yaml");if(g.existsSync(e)){f.component("gate-loader").debug("Found portal.yaml",{path:"portal.yaml"});try{let r=g.readFileSync(e,"utf-8").match(/^gates:\s*\n((?: .+\n)*)/m);if(r){let a=r[1].matchAll(/^ ([a-z][a-z0-9-]*):/gm);for(let i of a){let c=i[1],l=`gate-${c}`;s.has(l)||(s.add(l),o.push({id:l,symbol:`^${c}`,type:"gate",source:"portal",filePath:"portal.yaml",data:{},references:[],referencedBy:[]}),f.component("gate-loader").debug("Extracted gate",{symbol:`^${c}`}));}}}catch(r){f.component("gate-loader").error("Failed to parse portal.yaml",{error:String(r)});}}return f.flow("load-symbols").info("Fallback scan complete",{count:o.length}),o}async function _(n,o,s,t){let e=["node_modules",".git","dist","build",".paradigm","coverage",".next",".svelte-kit"],r;try{r=g.readdirSync(n,{withFileTypes:!0});}catch{return}for(let a of r){let i=p.join(n,a.name);if(a.isDirectory())e.includes(a.name)||await _(i,o,s,t);else if(a.name===".purpose"){let c=p.relative(t,i);f.component("purpose-loader").debug("Scanning .purpose file",{path:c});try{let l=g.readFileSync(i,"utf-8"),d=ee(l,i,t);for(let u of d)s.has(u.id)||(s.add(u.id),o.push(u),f.component("purpose-loader").debug("Extracted symbol",{symbol:u.symbol,type:u.type,file:c}));}catch(l){f.component("purpose-loader").error("Failed to parse .purpose file",{path:c,error:String(l)});}}}}function ee(n,o,s){let t=[],e=p.relative(s,o),r=n.matchAll(/(?:^|\s)#([a-z][a-z0-9-]*)/gm);for(let d of r){let u=d[1];t.push({id:`component-${u}`,symbol:`#${u}`,type:"component",source:"purpose",filePath:e,data:{},description:te(n,`#${u}`),references:re(n),referencedBy:[],tags:se(n)});}let a=n.matchAll(/\$([a-z][a-z0-9-]*)/gm);for(let d of a){let u=d[1],m=`$${u}`;if(N.has(m)){f.component("purpose-loader").debug("Skipping blocklisted symbol",{symbol:m});continue}t.find(j=>j.symbol===m)||t.push({id:`flow-${u}`,symbol:m,type:"flow",source:"purpose",filePath:e,data:{},references:[],referencedBy:[]});}let i=n.matchAll(/!([a-z][a-z0-9-]*)/gm);for(let d of i){let u=d[1];t.find(m=>m.symbol===`!${u}`)||t.push({id:`signal-${u}`,symbol:`!${u}`,type:"signal",source:"purpose",filePath:e,data:{},references:[],referencedBy:[]});}let c=n.matchAll(/\^([a-z][a-z0-9-]*)/gm);for(let d of c){let u=d[1];t.find(m=>m.symbol===`^${u}`)||t.push({id:`gate-${u}`,symbol:`^${u}`,type:"gate",source:"purpose",filePath:e,data:{},references:[],referencedBy:[]});}let l=n.matchAll(/~([a-z][a-z0-9-]*)/gm);for(let d of l){let u=d[1];t.find(m=>m.symbol===`~${u}`)||t.push({id:`aspect-${u}`,symbol:`~${u}`,type:"aspect",source:"purpose",filePath:e,data:{},references:[],referencedBy:[]});}return t}function te(n,o){let s=new RegExp(`${o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}\\s*[-:]?\\s*(.+)`,"m"),t=n.match(s);if(t&&t[1])return t[1].trim()}function re(n){let o=new Set,s=n.matchAll(/[@#$!^~]([a-z][a-z0-9-]*)/g);for(let t of s){let e=t[0];N.has(e)||o.add(e);}return Array.from(o)}function se(n){let o=n.match(/tags:\s*\[([^\]]+)\]/);return o?o[1].split(",").map(s=>s.trim().replace(/^["']|["']$/g,"")):[]}async function oe(n){return (await F(n)).length}async function ne(n,o,s){let t=(await F(n)).find(r=>r.id===o);if(!t)return {success:false,error:"Symbol not found"};let e=p.join(n,t.filePath);if(!g.existsSync(e))return {success:false,error:"Source file not found"};try{let r=g.readFileSync(e,"utf-8"),a=!1;if(s.description!==void 0){let i=t.symbol.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),c=new RegExp(`(${i})\\s*[-:]?\\s*(.*)`,"m");if(r.match(c)){let l=s.description?`${t.symbol}: ${s.description}`:t.symbol;r=r.replace(c,l),a=!0;}}if(s.tags!==void 0){let i=s.tags.length>0?`tags: [${s.tags.map(l=>`"${l}"`).join(", ")}]`:"",c=/^tags:\s*\[[^\]]*\]\s*$/m;if(c.test(r))i?r=r.replace(c,i):r=r.replace(c,""),a=!0;else if(i){let l=t.symbol.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),d=new RegExp(`(${l}[^\\n]*\\n)`,"m");r.match(d)&&(r=r.replace(d,`$1${i}
|
|
3
|
+
`),a=!0);}}if(a){r=r.replace(/\n{3,}/g,`
|
|
4
|
+
|
|
5
|
+
`),g.writeFileSync(e,r,"utf-8"),f.component("symbol-updater").info("Updated symbol",{symbol:t.symbol,file:t.filePath});let i=p.join(n,".paradigm","index.json");if(g.existsSync(i))try{let c=g.readFileSync(i,"utf-8"),l=JSON.parse(c),d=Array.isArray(l.entries)?l.entries:l,u=d.findIndex(m=>m.id===o);u>=0&&(s.description!==void 0&&(d[u].description=s.description),s.tags!==void 0&&(d[u].tags=s.tags),Array.isArray(l.entries)?(l.entries=d,g.writeFileSync(i,JSON.stringify(l,null,2),"utf-8")):g.writeFileSync(i,JSON.stringify(d,null,2),"utf-8"));}catch{}return {success:!0}}return {success:!0}}catch(r){return f.component("symbol-updater").error("Failed to update symbol",{error:String(r)}),{success:false,error:"Failed to write file"}}}var ae=process.env.SENTINEL_LOG_LEVEL||process.env.LOG_LEVEL||"info",k=n=>{let o={debug:0,info:1,warn:2,error:3};return o[n]>=o[ae]},q={gate(n){let o=y.cyan(`^${n}`);return {info:(s,t)=>{if(k("info")){let e=t?y.gray(` ${Object.entries(t).map(([r,a])=>`${r}=${a}`).join(" ")}`):"";console.log(`${y.blue("\u2139")} ${o} ${s}${e}`);}},error:(s,t)=>{if(k("error")){let e=t?y.gray(` ${Object.entries(t).map(([r,a])=>`${r}=${a}`).join(" ")}`):"";console.error(`${y.red("\u2716")} ${o} ${s}${e}`);}}}}};function ie(n){let o=Router();return o.get("/",async(s,t)=>{try{let e=await F(n);q.gate("api-symbols").info("Symbols loaded",{count:e.length}),t.json({symbols:e});}catch(e){q.gate("api-symbols").error("Failed to load symbols",{error:String(e)}),t.status(500).json({error:"Failed to load symbols"});}}),o.put("/:id",async(s,t)=>{try{let{id:e}=s.params,r=s.body;if(q.gate("api-symbols").info("Update requested",{id:e,updates:JSON.stringify(r)}),r.tags&&!Array.isArray(r.tags)){t.status(400).json({error:"Tags must be an array"});return}let a=await ne(n,e,r);if(a.success){let i=(await F(n)).find(c=>c.id===e);q.gate("api-symbols").info("Symbol updated",{id:e}),t.json({success:!0,symbol:i});}else q.gate("api-symbols").error("Update failed",{id:e,error:a.error}),t.status(400).json({success:!1,error:a.error});}catch(e){q.gate("api-symbols").error("Failed to update symbol",{error:String(e)}),t.status(500).json({error:"Failed to update symbol"});}}),o}function le(n){let o=Router();return o.get("/",async(s,t)=>{try{let e=await Q(n),r=await oe(n);t.json({projectName:e.name||null,discipline:e.discipline||null,symbolCount:r,projectDir:n});}catch(e){console.error("Failed to load project info:",e),t.status(500).json({error:"Failed to load project info"});}}),o}function J(n){let o=new Set;for(let s of n){if(s.endsWith(".purpose")){let r=p.dirname(s),a=p.basename(r);r.includes("features/")||r.includes("routes/")||r.includes("api/")?o.add(`@${a}`):r.includes("components/")||r.includes("lib/")||r.includes("utils/")?o.add(`#${a}`):r.includes("middleware/")||r.includes("auth/")||r.includes("guards/")?o.add(`^${a}`):(r.includes("flows/")||r.includes("workflows/"))&&o.add(`$${a}`);}s.includes("portal.yaml")&&o.add("^portal");let t=s.match(/features\/([^/]+)/);t&&o.add(`@${t[1]}`);let e=s.match(/components\/([^/]+)/);e&&o.add(`#${e[1]}`);}return Array.from(o)}async function ce(n,o={}){let s=z(n);if(!await s.checkIsRepo())return [];try{let t={maxCount:o.limit||100};o.since&&(t["--since"]=o.since);let e=await s.log(t),r=[];for(let a of e.all){let i=[],c=[];try{i=(await s.diffSummary([`${a.hash}^`,a.hash])).files.map(l=>l.file),c=J(i);}catch{}r.push({hash:a.hash,shortHash:a.hash.slice(0,7),date:a.date,author:a.author_name,message:a.message.split(`
|
|
6
|
+
`)[0],symbolsModified:c,filesChanged:i});}return r}catch(t){return console.error("Failed to load git history:",t),[]}}async function Pe(n,o){let s=z(n);try{let t=(await s.raw(["ls-tree","-r","--name-only",o])).split(`
|
|
7
|
+
`).filter(Boolean).filter(e=>e.endsWith(".purpose"));return J(t)}catch(t){return console.error("Failed to get symbols at commit:",t),[]}}function ue(n){let o=Router();return o.get("/",async(s,t)=>{try{let e=parseInt(s.query.limit)||100,r=s.query.since,a=await ce(n,{limit:e,since:r});t.json({commits:a});}catch(e){console.error("Failed to load commits:",e),t.status(500).json({error:"Failed to load commits"});}}),o}function de(n){let o=Router(),s=new a;return o.get("/",async(t,e)=>{try{let r=parseInt(t.query.limit)||50,a=t.query.status,i=t.query.environment,c=t.query.symbol,l={limit:r};a&&["open","investigating","resolved","wont-fix"].includes(a)&&(l.status=a),i&&(l.environment=i),c&&(l.symbol=c);let d=s.getRecentIncidents(l).map(u=>({id:u.id,timestamp:u.timestamp,status:u.status,error:{message:u.error.message,type:u.error.type},symbols:u.symbols,environment:u.environment,patternMatches:[]}));e.json({incidents:d});}catch(r){console.error("Failed to load incidents:",r),e.status(500).json({error:"Failed to load incidents"});}}),o.get("/:id",async(t,e)=>{try{let r=s.getIncident(t.params.id);if(!r){e.status(404).json({error:"Incident not found"});return}e.json({incident:r});}catch(r){console.error("Failed to load incident:",r),e.status(500).json({error:"Failed to load incident"});}}),o.post("/:id/resolve",async(t,e)=>{try{if(!s.getIncident(t.params.id)){e.status(404).json({error:"Incident not found"});return}s.resolveIncident(t.params.id,{notes:t.body.notes,patternId:t.body.patternId}),e.json({success:!0});}catch(r){console.error("Failed to resolve incident:",r),e.status(500).json({error:"Failed to resolve incident"});}}),o}function me(n){let o=Router(),s=new a;return o.get("/",async(t,e)=>{try{let r=t.query.source,a=t.query.symbol,i=parseInt(t.query.minConfidence)||void 0,c={};r&&["manual","suggested","imported","community"].includes(r)&&(c.source=r),a&&(c.symbol=a),i&&(c.minConfidence=i);let l=s.getAllPatterns(c).map(d=>({id:d.id,name:d.name,description:d.description,confidence:{score:d.confidence.score,timesMatched:d.confidence.timesMatched,timesResolved:d.confidence.timesResolved},tags:d.tags}));e.json({patterns:l});}catch(r){console.error("Failed to load patterns:",r),e.status(500).json({error:"Failed to load patterns"});}}),o.get("/:id",async(t,e)=>{try{let r=s.getPattern(t.params.id);if(!r){e.status(404).json({error:"Pattern not found"});return}e.json({pattern:r});}catch(r){console.error("Failed to load pattern:",r),e.status(500).json({error:"Failed to load pattern"});}}),o}function W(n){return n.startsWith("#")?"component":n.startsWith("^")?"gate":n.startsWith("!")?"signal":n.startsWith("$")?"flow":n.startsWith("~")?"aspect":"raw"}function ye(n,o){if(o.find(r=>r.symbol===n))return {known:true};let s=n.replace(/^[#^!$~]/,""),t,e=0;for(let r of o){let a=r.symbol.replace(/^[#^!$~]/,""),i=0;for(let l=0;l<Math.min(s.length,a.length)&&s[l]===a[l];l++)i++;let c=i/Math.max(s.length,a.length);c>e&&c>.5&&(e=c,t=r.symbol);}return {known:false,suggestion:t}}function pe(n,o){try{let s=W(n.symbol),t={};s==="component"?t.component=n.symbol:s==="gate"?t.gate=n.symbol:s==="signal"?t.signal=n.symbol:s==="flow"?t.flow=n.symbol:t.component=n.symbol,o.recordIncident({error:{message:n.message,type:"LogError"},symbols:t,environment:n.environment||"unknown",service:n.service});}catch{}}var O=0;function ge(n){let o=Router(),{storage:s,serverConfig:t,onLogReceived:e,symbolIndex:r}=n;return o.post("/",async(a,i)=>{try{let c=a.body,l;if(Array.isArray(c.entries))l=c.entries;else if(c.level&&c.symbol&&c.message&&c.service)l=[c];else {i.status(400).json({error:"Expected {entries: [...]} or a single log entry with level, symbol, message, service"});return}if(l.length>t.maxBatchSize){i.status(413).json({error:`Batch too large: ${l.length} entries, max ${t.maxBatchSize}`});return}for(let u=0;u<l.length;u++){let m=l[u];if(!m.level||!m.symbol||!m.message||!m.service){i.status(400).json({error:`Entry ${u}: missing required fields (level, symbol, message, service)`});return}if(!["debug","info","warn","error"].includes(m.level)){i.status(400).json({error:`Entry ${u}: invalid level "${m.level}", must be debug|info|warn|error`});return}}let d=s.insertLogBatch(l);for(let u of l){let m={id:u.id||v4(),timestamp:u.timestamp||new Date().toISOString(),level:u.level,symbol:u.symbol,symbolType:u.symbolType||W(u.symbol),message:u.message,data:u.data,service:u.service,sessionId:u.sessionId,correlationId:u.correlationId,durationMs:u.durationMs,environment:u.environment},j;r&&(j=ye(m.symbol,r)),m.level==="error"&&pe(m,s),e&&e(m,j);}O+=d.accepted,t.maxLogs>0&&O>=t.pruneIntervalInserts&&(O=0,s.pruneLogs(t.maxLogs)),i.json({accepted:d.accepted,errors:d.errors.length>0?d.errors:void 0});}catch{i.status(500).json({error:"Failed to insert logs"});}}),o.get("/",async(a,i)=>{try{let c={level:a.query.level,symbol:a.query.symbol,service:a.query.service,sessionId:a.query.sessionId,correlationId:a.query.correlationId,search:a.query.search,since:a.query.since,until:a.query.until,limit:a.query.limit?parseInt(a.query.limit):100,offset:a.query.offset?parseInt(a.query.offset):0},l=s.queryLogs(c),d=s.getLogCount(c);i.json({count:l.length,total:d,logs:l});}catch{i.status(500).json({error:"Failed to query logs"});}}),o}function fe(n){let o=Router(),{storage:s}=n;return o.post("/",async(t,e)=>{try{let{name:r,version:a,pid:i,environment:c,metadata:l}=t.body;if(!r){e.status(400).json({error:"Missing required field: name"});return}s.registerService({name:r,version:a,pid:i,environment:c,metadata:l}),e.json({success:!0,service:r});}catch{e.status(500).json({error:"Failed to register service"});}}),o.get("/",async(t,e)=>{try{let r=s.getServices();e.json({count:r.length,services:r});}catch{e.status(500).json({error:"Failed to list services"});}}),o}function he(n){let o=Router(),{storage:s}=n;return o.post("/",async(t,e)=>{try{let{service:r,sessionId:a,state:i,activeFlows:c,activeGates:l}=t.body;if(!r||!a||!i){e.status(400).json({error:"Missing required fields: service, sessionId, state"});return}s.upsertAppState({service:r,sessionId:a,timestamp:new Date().toISOString(),state:i,activeFlows:c,activeGates:l}),s.updateServiceLastSeen(r),e.json({success:!0});}catch{e.status(500).json({error:"Failed to update state"});}}),o.get("/",async(t,e)=>{try{let r=s.getAllAppStates();e.json({count:r.length,states:r});}catch{e.status(500).json({error:"Failed to get states"});}}),o.get("/:service",async(t,e)=>{try{let r=s.getAppState(t.params.service);e.json({count:r.length,states:r});}catch{e.status(500).json({error:"Failed to get service state"});}}),o}var ve=["counter","gauge","histogram"];function be(n){let o=Router(),{storage:s,serverConfig:t}=n;return o.post("/",(e,r)=>{try{let a=e.body,i;if(Array.isArray(a.entries))i=a.entries;else if(a.name&&a.type&&a.value!==void 0&&a.service)i=[a];else {r.status(400).json({error:"Expected {entries: [...]} or a single metric with name, type, value, service"});return}if(i.length>t.maxBatchSize){r.status(413).json({error:`Batch too large: ${i.length} entries, max ${t.maxBatchSize}`});return}for(let l=0;l<i.length;l++){let d=i[l];if(!d.name||!d.type||d.value===void 0||!d.service){r.status(400).json({error:`Entry ${l}: missing required fields (name, type, value, service)`});return}if(!ve.includes(d.type)){r.status(400).json({error:`Entry ${l}: invalid type "${d.type}", must be counter|gauge|histogram`});return}}let c=s.insertMetricBatch(i);r.json({accepted:c.accepted,errors:c.errors.length>0?c.errors:void 0});}catch{r.status(500).json({error:"Failed to insert metrics"});}}),o.get("/",(e,r)=>{try{let a={name:e.query.name,type:e.query.type,service:e.query.service,tag:e.query.tag,since:e.query.since,until:e.query.until,limit:e.query.limit?parseInt(e.query.limit):100,offset:e.query.offset?parseInt(e.query.offset):0},i=s.queryMetrics(a),c=s.getMetricCount(a);r.json({count:i.length,total:c,metrics:i});}catch{r.status(500).json({error:"Failed to query metrics"});}}),o.get("/aggregate/:name",(e,r)=>{try{let a=s.aggregateMetric(e.params.name,{service:e.query.service,since:e.query.since,until:e.query.until});r.json(a);}catch{r.status(500).json({error:"Failed to aggregate metric"});}}),o}function $e(n){let o=Router(),{storage:s}=n;return o.post("/",(t,e)=>{try{let r=t.body;if(!r.traceId||!r.service||!r.symbol||!r.operation){e.status(400).json({error:"Missing required fields: traceId, service, symbol, operation"});return}let a=s.insertSpan(r);e.json({spanId:a,traceId:r.traceId});}catch{e.status(500).json({error:"Failed to insert trace span"});}}),o.get("/",(t,e)=>{try{let r=s.queryTraces({service:t.query.service,symbol:t.query.symbol,since:t.query.since,limit:t.query.limit?parseInt(t.query.limit):20});e.json({count:r.length,traces:r});}catch{e.status(500).json({error:"Failed to query traces"});}}),o.get("/:traceId",(t,e)=>{try{let r=s.getTrace(t.params.traceId);if(!r){e.status(404).json({error:"Trace not found"});return}e.json(r);}catch{e.status(500).json({error:"Failed to get trace"});}}),o}function je(n){let o=Router(),{storage:s}=n;return o.post("/",(t,e)=>{try{let r=t.body;if(!r.id||!r.version||!r.name||!r.scope||!r.eventTypes){e.status(400).json({error:"Missing required fields: id, version, name, scope, eventTypes"});return}if(!r.scope.field||!r.scope.type||!r.scope.label||!r.scope.ordering){e.status(400).json({error:"Invalid scope: requires field, type, label, ordering"});return}if(!Array.isArray(r.eventTypes)||r.eventTypes.length===0){e.status(400).json({error:"eventTypes must be a non-empty array"});return}for(let i=0;i<r.eventTypes.length;i++){let c=r.eventTypes[i];if(!c.type||!c.category){e.status(400).json({error:`eventTypes[${i}]: missing required fields (type, category)`});return}}let a=s.registerSchema(r);e.status(201).json(a);}catch{e.status(500).json({error:"Failed to register schema"});}}),o.get("/",(t,e)=>{try{let r=s.listSchemas();e.json({count:r.length,schemas:r});}catch{e.status(500).json({error:"Failed to list schemas"});}}),o.get("/:id",(t,e)=>{try{let r=s.getSchema(t.params.id);if(!r){e.status(404).json({error:"Schema not found"});return}e.json(r);}catch{e.status(500).json({error:"Failed to get schema"});}}),o}function we(n){let o=Router(),{storage:s,serverConfig:t,onEventReceived:e}=n,r=0;return o.post("/",(a,i)=>{try{let c=a.body;if(!c.schemaId||!c.service||!Array.isArray(c.events)){i.status(400).json({error:"Expected { schemaId, service, events: [...] }"});return}let{schemaId:l,service:d,events:u}=c,m=s.getSchema(l);if(!m){i.status(404).json({error:`Schema "${l}" not found. Register it first via POST /api/schemas.`});return}if(u.length>t.maxBatchSize){i.status(413).json({error:`Batch too large: ${u.length} events, max ${t.maxBatchSize}`});return}for(let h=0;h<u.length;h++)if(!u[h].type){i.status(400).json({error:`events[${h}]: missing required field "type"`});return}let j=s.insertEventBatch(l,d,u);if(e){let h=new Map;for(let v of m.eventTypes)h.set(v.type,v.category);for(let v of u){let x={id:v.id||"",schemaId:l,eventType:v.type,category:h.get(v.type)||"unknown",timestamp:v.timestamp||new Date().toISOString(),scopeValue:v.scopeValue!=null?String(v.scopeValue):void 0,sessionId:v.sessionId,service:d,data:v.data,severity:v.severity||"info",parentEventId:v.parentEventId,depth:v.depth};e(x);}}r+=j.accepted,t.maxLogs>0&&r>=t.pruneIntervalInserts&&(r=0,s.pruneEvents(t.maxLogs)),i.json({accepted:j.accepted,errors:j.errors.length>0?j.errors:void 0});}catch{i.status(500).json({error:"Failed to ingest events"});}}),o.get("/",(a,i)=>{try{let c={schemaId:a.query.schemaId,eventType:a.query.eventType,category:a.query.category,service:a.query.service,sessionId:a.query.sessionId,scopeValue:a.query.scopeValue,scopeFrom:a.query.scopeFrom,scopeTo:a.query.scopeTo,severity:a.query.severity,since:a.query.since,until:a.query.until,search:a.query.search,limit:a.query.limit?parseInt(a.query.limit):100,offset:a.query.offset?parseInt(a.query.offset):0},l=s.queryEvents(c),d=s.getEventCount(c);i.json({count:l.length,total:d,events:l});}catch{i.status(500).json({error:"Failed to query events"});}}),o.get("/scopes",(a,i)=>{try{let c=a.query.schemaId;if(!c){i.status(400).json({error:"schemaId query parameter is required"});return}let l=s.getEventScopes(c,{limit:a.query.limit?parseInt(a.query.limit):100,offset:a.query.offset?parseInt(a.query.offset):0,sessionId:a.query.sessionId});i.json({count:l.length,scopes:l});}catch{i.status(500).json({error:"Failed to query scopes"});}}),o.get("/scope/:value",(a,i)=>{try{let c=a.query.schemaId;if(!c){i.status(400).json({error:"schemaId query parameter is required"});return}let l=s.queryEventsByScope(c,a.params.value);i.json({count:l.length,events:l});}catch{i.status(500).json({error:"Failed to query scope events"});}}),o}function Se(n){return function(o){return (s,t,e)=>{if(!n.enabled){e();return}let r=s.headers.authorization;if(!r){t.status(401).json({error:"Authentication required. Provide Authorization: Bearer <token>"});return}let a=r.match(/^Bearer\s+(.+)$/i);if(!a){t.status(401).json({error:"Invalid authorization format. Use: Bearer <token>"});return}let i=a[1],c=n.tokens.find(d=>d.token===i);if(!c){t.status(401).json({error:"Invalid token"});return}if(c.expiresAt&&new Date(c.expiresAt)<new Date){t.status(401).json({error:"Token expired"});return}let l={read:1,write:2,admin:3};if(!c.permissions.some(d=>l[d]>=l[o])){t.status(403).json({error:`Insufficient permissions. Required: ${o}`});return}s.authToken=c,e();}}}var T=new Map,qe={count:0,windowStart:Date.now()},P=6e4;function B(n){let o=Date.now();return o-n.windowStart>P&&(n.count=0,n.windowStart=o),n}function Ie(n){return (o,s,t)=>{if(!n.enabled){t();return}let e=o.body?.service||o.body?.entries?.[0]?.service||o.query.service||"_unknown",r=n.perService[e]||n.global;if(r.samplingRate<1&&Math.random()>r.samplingRate){s.status(200).json({accepted:0,sampled:true,message:"Request dropped by sampling"});return}let a=B(qe);if(a.count>=n.global.maxRequestsPerMinute){s.status(429).json({error:"Global rate limit exceeded",retryAfterMs:P-(Date.now()-a.windowStart)});return}T.has(e)||T.set(e,{count:0,windowStart:Date.now()});let i=B(T.get(e));if(i.count>=r.maxRequestsPerMinute){s.status(429).json({error:`Rate limit exceeded for service: ${e}`,retryAfterMs:P-(Date.now()-i.windowStart)});return}let c=o.body?.entries?.length||1;if(c>r.maxEntriesPerBatch){s.status(413).json({error:`Batch too large: ${c} entries, max ${r.maxEntriesPerBatch} for service ${e}`});return}a.count++,i.count++,t();}}var Fe=fileURLToPath(import.meta.url),C=p.dirname(Fe),b={component(n){let o=y.magenta(`#${n}`);return {info:(s,t)=>{let e=t?y.gray(` ${Object.entries(t).map(([r,a])=>`${r}=${a}`).join(" ")}`):"";console.log(`${y.blue("\u2139")} ${o} ${s}${e}`);},success:(s,t)=>{let e=t?y.gray(` ${Object.entries(t).map(([r,a])=>`${r}=${a}`).join(" ")}`):"";console.log(`${y.green("\u2714")} ${o} ${s}${e}`);},warn:(s,t)=>{let e=t?y.gray(` ${Object.entries(t).map(([r,a])=>`${r}=${a}`).join(" ")}`):"";console.log(`${y.yellow("\u26A0")} ${o} ${s}${e}`);},error:(s,t)=>{let e=t?y.gray(` ${Object.entries(t).map(([r,a])=>`${r}=${a}`).join(" ")}`):"";console.error(`${y.red("\u2716")} ${o} ${s}${e}`);}}}};function xe(n){let o=L();if(o.use(L.json({limit:"5mb"})),o.use((t,e,r)=>{let a=n.serverConfig?.cors?.origin,i=Array.isArray(a)?a.join(", "):a??"*";if(e.header("Access-Control-Allow-Origin",i),e.header("Access-Control-Allow-Methods","GET, POST, PUT, DELETE, OPTIONS"),e.header("Access-Control-Allow-Headers","Content-Type, Authorization"),n.serverConfig?.cors?.credentials&&e.header("Access-Control-Allow-Credentials","true"),t.method==="OPTIONS"){e.sendStatus(204);return}r();}),o.use("/api/symbols",ie(n.projectDir)),o.use("/api/info",le(n.projectDir)),o.use("/api/commits",ue(n.projectDir)),o.use("/api/incidents",de(n.projectDir)),o.use("/api/patterns",me(n.projectDir)),n.storage&&n.serverConfig){let t=n.serverConfig,e=Se(t.auth),r=Ie(t.rateLimit);o.use("/api/logs",r,e("write"),ge({storage:n.storage,serverConfig:t,onLogReceived:n.onLogReceived,symbolIndex:n.symbolIndex})),o.use("/api/services",r,e("write"),fe({storage:n.storage})),o.use("/api/state",r,e("write"),he({storage:n.storage})),o.use("/api/metrics",r,e("write"),be({storage:n.storage,serverConfig:t})),o.use("/api/traces",r,e("write"),$e({storage:n.storage})),o.use("/api/schemas",r,e("write"),je({storage:n.storage})),o.use("/api/events",r,e("write"),we({storage:n.storage,serverConfig:t,onEventReceived:n.onEventReceived}));}o.get("/api/health",(t,e)=>{e.json({status:"ok",timestamp:new Date().toISOString()});});let s=[p.join(C,"sentinel-ui"),p.join(C,"..","..","ui","dist"),p.join(C,"..","ui","dist")].find(t=>g.existsSync(t));return s&&(o.use(L.static(s)),o.get("{*path}",(t,e)=>{t.path.startsWith("/api")||e.sendFile(p.join(s,"index.html"));})),o}async function Me(n){let o=g$1(n.projectDir);n.logPruneLimit!==void 0&&(o.maxLogs=n.logPruneLimit);let s=new a(n.dbPath);await s.ensureReady(),s.registerSchema(h),s.registerSchema(i),b.component("sentinel-server").info("Registered builtin schemas",{schemas:"paradigm-logger, paradigm-symphony"});let t=[];try{t=await F(n.projectDir);}catch{b.component("sentinel-server").warn("Could not load symbol index for validation");}let e=new Set;function r(l){let d=JSON.stringify(l);for(let u of e)u.readyState===WebSocket.OPEN&&u.send(d);}function a$1(l,d){let u={type:"log",entry:l};d&&!d.known&&(u.validation=d),r(u),(l.symbolType==="signal"||l.symbolType==="gate"||l.symbolType==="flow")&&r({type:"flow_event",flowId:l.symbolType==="flow"?l.symbol:void 0,nodeSymbol:l.symbol,event:l.symbolType,timestamp:l.timestamp,service:l.service});}function i$1(l){r({type:"event",event:l});}let c=xe({...n,storage:s,serverConfig:o,symbolIndex:t,onLogReceived:a$1,onEventReceived:i$1});return b.component("sentinel-server").info("Starting server",{port:n.port}),b.component("sentinel-server").info("Project directory",{path:n.projectDir}),new Promise((l,d)=>{let u=D.createServer(c);new WebSocketServer({server:u}).on("connection",m=>{if(e.size>=o.wsMaxSubscribers){m.close(1013,"Max subscribers reached");return}e.add(m),b.component("sentinel-ws").info("Client connected",{total:e.size}),m.on("message",j=>{try{let h=JSON.parse(j.toString());if(h.method==="ping")m.send(JSON.stringify({jsonrpc:"2.0",result:{pong:!0,timestamp:new Date().toISOString()},id:h.id}));else if(h.method==="subscribe")m.send(JSON.stringify({jsonrpc:"2.0",result:{subscribed:!0},id:h.id}));else if(h.method==="query_logs"){let v=s.queryLogs(h.params||{});m.send(JSON.stringify({jsonrpc:"2.0",result:{logs:v},id:h.id}));}else if(h.method==="query_events"){let v=s.queryEvents(h.params||{});m.send(JSON.stringify({jsonrpc:"2.0",result:{events:v},id:h.id}));}else if(h.method==="query_scopes"){let{schemaId:v,...x}=h.params||{},G=v?s.getEventScopes(v,x):[];m.send(JSON.stringify({jsonrpc:"2.0",result:{scopes:G},id:h.id}));}}catch{}}),m.on("close",()=>{e.delete(m),b.component("sentinel-ws").info("Client disconnected",{total:e.size});}),m.on("error",()=>{e.delete(m);});}),u.listen(n.port,()=>{b.component("sentinel-server").success("Server running",{url:`http://localhost:${n.port}`}),b.component("sentinel-ws").success("WebSocket ready",{url:`ws://localhost:${n.port}`}),n.open&&import('open').then(m=>{m.default(`http://localhost:${n.port}`),b.component("sentinel-server").info("Opened browser");}).catch(()=>{b.component("sentinel-server").warn("Could not open browser automatically");}),l();}),u.on("error",m=>{m.code==="EADDRINUSE"?b.component("sentinel-server").error("Port already in use",{port:n.port}):b.component("sentinel-server").error("Server error",{error:m.message}),d(m);});})}
|
|
8
|
+
export{xe as createApp,Se as createAuthMiddleware,ue as createCommitsRouter,we as createEventsRouter,de as createIncidentsRouter,le as createInfoRouter,ge as createLogsRouter,be as createMetricsRouter,me as createPatternsRouter,Ie as createRateLimiter,je as createSchemasRouter,fe as createServicesRouter,he as createStateRouter,ie as createSymbolsRouter,$e as createTracesRouter,oe as getSymbolCount,Pe as getSymbolsAtCommit,ce as loadGitHistory,Q as loadParadigmConfig,F as loadSymbolIndex,Me as startServer};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {b,c as c$2}from'./chunk-W7C6FFMO.js';import'./chunk-4TXOVRWD.js';import {g}from'./chunk-T6IDXUUA.js';import {c as c$1}from'./chunk-JIXHEBGK.js';import'./chunk-QT2LKB3P.js';import {d as d$1,b as b$1,a}from'./chunk-JQKKVAAN.js';import'./chunk-5TAVYPOV.js';import*as n from'fs';import*as c from'path';import*as D from'readline';import e from'chalk';function x(){return D.createInterface({input:process.stdin,output:process.stdout})}async function d(s,r){return new Promise(t=>{s.question(r,o=>{t(o.trim());});})}async function p(s,r,t){console.log(`
|
|
3
|
+
${e.cyan(r)}`),t.forEach((i,u)=>{console.log(e.gray(` ${u+1}) `)+i.name);});let o=await d(s,e.white(`Enter number (1-${t.length}): `)),a=parseInt(o,10)-1;return a>=0&&a<t.length?t[a].value:t[0].value}async function k(s,r,t){return console.log(`
|
|
4
|
+
${e.cyan(r)}`),t.forEach((i,u)=>{console.log(e.gray(` ${u+1}) `)+i.name);}),(await d(s,e.white("Enter numbers separated by commas (e.g., 1,2,3): "))).split(",").map(i=>parseInt(i.trim(),10)-1).filter(i=>i>=0&&i<t.length).map(i=>t[i].value)}function A(s){let r={};for(let t of ["src","app","lib","packages"])if(n.existsSync(c.join(s,t))){r.sourceDir=t;break}if(r.sourceDir){let t=c.join(s,r.sourceDir);try{let o=n.readdirSync(t,{withFileTypes:!0});r.directories=o.filter(a=>a.isDirectory()).map(a=>a.name).filter(a=>!a.startsWith(".")&&!a.startsWith("_"));}catch{}}return r}function I(s,r){let t={version:"1.0","agent-guidelines":{overview:`${r} uses Paradigm for structured AI context management.`,"how-to-use":["Check .purpose files in directories before making changes","Run `paradigm status` to see all symbols in the project","Run `paradigm visualize` to explore the Dreamscape","Reference symbols using @ # $ % ~ ^ ! ? prefixes"],"update-rules":["When adding a feature, create/update the nearest .purpose file","When adding authorization, update portal.yaml","When exploring ideas, add to .premise with ? prefix","Run `paradigm cursorrules` after updating .paradigm"]},"symbol-system":a,states:{},"purpose-required":[],conventions:b$1};if(t.states||(t.states={}),s.hasAuth&&s.hasAuth!=="none"&&(t.states.user={authenticated:{type:"boolean",default:false,description:"User is logged in"},role:{type:"enum",values:["guest","user","admin"],description:"User access level"}},s.hasAuth==="session"&&(t.states.user.sessionExpiry={type:"string",description:"Session expiration time"})),s.hasSubscription&&s.hasSubscription!=="none"&&(t.states.user||(t.states.user={}),s.hasSubscription==="tiers"?t.states.user.subscription={type:"enum",values:["free","trial","pro","enterprise"],description:"Subscription tier"}:t.states.user.isPremium={type:"boolean",default:false,description:"Has premium access"}),s.hasGates==="yes"&&t["agent-guidelines"]["how-to-use"].push("Check portal.yaml for authorization rules before modifying access control"),s.directories&&s.directories.length>0&&s.sourceDir&&(t["purpose-required"]=s.directories.map(o=>({pattern:`${s.sourceDir}/${o}/*`,depth:1}))),s.customStates){let o=s.customStates.split(",").map(a=>a.trim()).filter(Boolean);for(let a of o){let i=a.split(".");if(i.length>=2){let u=i[0],g=i.slice(1).join(".");t.states[u]||(t.states[u]={}),t.states[u][g]={type:"boolean",description:`Custom state: ${a}`};}}}return t}async function j(s){let r=x(),t={};console.log(e.blue(`
|
|
5
|
+
\u{1F305} Paradigm Setup Wizard
|
|
6
|
+
`)),console.log(e.gray("\u2500".repeat(55)));let o=A(s);return console.log(e.white(`
|
|
7
|
+
\u{1F4C2} Detected project structure:`)),o.sourceDir&&console.log(e.gray(` Source directory: ${o.sourceDir}/`)),o.directories?.length&&console.log(e.gray(` Subdirectories: ${o.directories.slice(0,5).join(", ")}${o.directories.length>5?"...":""}`)),console.log(e.gray(`
|
|
8
|
+
\u2500`.repeat(55))),console.log(e.white(`
|
|
9
|
+
\u{1F4C1} Project Structure
|
|
10
|
+
`)),t.sourceDir=await p(r,"What is your main source directory?",[{name:`${o.sourceDir||"src"}/ (detected)`,value:o.sourceDir||"src"},{name:"src/",value:"src"},{name:"app/",value:"app"},{name:"lib/",value:"lib"},{name:"packages/",value:"packages"}]),t.directories=await k(r,"Which directories should have .purpose files?",[{name:"features/ (user-facing capabilities)",value:"features"},{name:"components/ (reusable UI/code)",value:"components"},{name:"services/ (business logic)",value:"services"},{name:"routes/ or api/ (endpoints)",value:"routes"},{name:"pages/ (page components)",value:"pages"},{name:"lib/ (utilities)",value:"lib"}]),console.log(e.gray(`
|
|
11
|
+
\u2500`.repeat(55))),console.log(e.white(`
|
|
12
|
+
\u{1F510} State Tracking
|
|
13
|
+
`)),t.hasAuth=await p(r,"Does your app have user authentication?",[{name:"Yes, with sessions/JWT",value:"session"},{name:"Yes, OAuth only",value:"oauth"},{name:"No authentication",value:"none"}]),t.hasSubscription=await p(r,"Do you have subscription tiers or paid features?",[{name:"Yes (multiple tiers: free, pro, enterprise)",value:"tiers"},{name:"Yes (single paid tier)",value:"single"},{name:"No paid features",value:"none"}]),console.log(e.gray(`
|
|
14
|
+
\u2500`.repeat(55))),console.log(e.white(`
|
|
15
|
+
\u{1F6AA} Authorization Gates
|
|
16
|
+
`)),t.hasGates=await p(r,"Will you use Gate for authorization topology?",[{name:"Yes - I have role-based or feature-gated access",value:"yes"},{name:"No - simple or no authorization",value:"no"}]),console.log(`
|
|
17
|
+
`),t.customStates=await d(r,e.cyan("Any custom states to track? ")+e.gray(`(comma-separated, e.g., app.maintenance, cart.items)
|
|
18
|
+
`)+e.white("> ")),console.log(e.gray(`
|
|
19
|
+
\u2500`.repeat(55))),console.log(e.white(`
|
|
20
|
+
\u{1F916} Cursor Integration
|
|
21
|
+
`)),c$2(s)?t.cursorMode=await p(r,"A .cursorrules file exists. How should we handle it?",[{name:"Append Paradigm section to existing file",value:"append"},{name:"Replace with new .cursorrules",value:"create"},{name:"Skip - do not modify .cursorrules",value:"skip"}]):t.cursorMode=await p(r,"Generate a .cursorrules file for Cursor AI?",[{name:"Yes - create .cursorrules with Paradigm context",value:"create"},{name:"No - skip Cursor integration",value:"skip"}]),r.close(),t}async function W(s,r){let t=s?c.resolve(s):process.cwd(),o=c.basename(t),a=c.join(t,".paradigm");if(n.existsSync(a)&&!r.force){console.log(e.yellow(`
|
|
22
|
+
\u26A0\uFE0F .paradigm already exists in this directory.`)),console.log(e.gray(` Use --force to overwrite, or edit .paradigm directly.
|
|
23
|
+
`));return}let i;r.yes?(i={sourceDir:A(t).sourceDir||"src",directories:["features","components"],hasAuth:"session",hasSubscription:"none",hasGates:"yes",cursorMode:"create"},console.log(e.blue(`
|
|
24
|
+
\u{1F305} Using default configuration...
|
|
25
|
+
`))):i=await j(t);let u=I(i,o);n.writeFileSync(a,d$1(u),"utf8"),console.log(e.green(`
|
|
26
|
+
\u2705 Created .paradigm configuration`));let g$1=c.join(t,".premise");n.existsSync(g$1)||(n.writeFileSync(g$1,g(o),"utf8"),console.log(e.green("\u2705 Created .premise file")));let f=c.join(t,".purpose");n.existsSync(f)||(n.writeFileSync(f,c$1(),"utf8"),console.log(e.green("\u2705 Created .purpose file")));let h=c.join(t,"portal.yaml");if(i.hasGates==="yes"&&!n.existsSync(h)){let{getDefaultGateConfig:l}=await import('./dist-VXCZWVVJ.js');n.writeFileSync(h,l(),"utf8"),console.log(e.green("\u2705 Created portal.yaml"));}let m=i.cursorMode||"skip";if(m!=="skip"){let l=b(t,u,m,o);l.success&&l.path&&console.log(e.green(`\u2705 ${l.message}`));}console.log(e.gray(`
|
|
27
|
+
\u2500`.repeat(55))),console.log(e.blue(`
|
|
28
|
+
\u{1F389} Paradigm setup complete!
|
|
29
|
+
`)),console.log(e.white("Files created:")),console.log(e.gray(" \u2022 .paradigm ")+e.white("AI guidelines, symbols, states")),console.log(e.gray(" \u2022 .premise ")+e.white("Project overview & ideas")),console.log(e.gray(" \u2022 .purpose ")+e.white("Root context & features")),i.hasGates==="yes"&&console.log(e.gray(" \u2022 portal.yaml ")+e.white("Authorization topology")),m!=="skip"&&console.log(e.gray(" \u2022 .cursorrules ")+e.white("Cursor AI integration")),console.log(e.white(`
|
|
30
|
+
Next steps:`)),console.log(e.gray(" 1. ")+"Review and customize "+e.cyan(".paradigm")),console.log(e.gray(" 2. ")+"Edit "+e.cyan(".purpose")+" to define your project context"),console.log(e.gray(" 3. ")+"Run "+e.cyan("paradigm visualize")+" to open the Dreamscape"),console.log(e.gray(" 4. ")+"Run "+e.cyan("paradigm cursorrules")+` after changes to regenerate
|
|
31
|
+
`);}export{W as setupCommand};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
export{a as detectAllClients,b as generateMCPConfig,d as getProjectName,g as getServersFromConfig,h as mcpListCommand,i as mcpRemoveCommand,e as mcpSetupCommand,f as mcpStatusCommand,c as writeConfig}from'./chunk-22ISTMKI.js';import'./chunk-LKAT7IAK.js';import'./chunk-5TAVYPOV.js';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {b}from'./chunk-NXRVR37G.js';import'./chunk-L6K5HNDL.js';import'./chunk-TYWB5IQJ.js';import'./chunk-WESTEMIM.js';import'./chunk-FYDRENK7.js';import'./chunk-IZSBGW6E.js';import {d as d$2}from'./chunk-AO7ZSRME.js';import'./chunk-Y4XFVDZC.js';import {a as a$5}from'./chunk-Z2UZUCY6.js';import {d as d$1}from'./chunk-W5IWDW4Y.js';import {a as a$3,b as b$1}from'./chunk-AGVAHVUA.js';import'./chunk-NW6OKHE6.js';import {a as a$6}from'./chunk-RVRARWSY.js';import'./chunk-EKZDFEJW.js';import {a as a$1}from'./chunk-33LKBMVK.js';import {b as b$2}from'./chunk-JBDMCRPP.js';import'./chunk-4TXOVRWD.js';import'./chunk-T6IDXUUA.js';import'./chunk-JIXHEBGK.js';import'./chunk-QT2LKB3P.js';import'./chunk-VCKKJDLP.js';import'./chunk-WR6D3SC6.js';import {a as a$2}from'./chunk-UIKLE3WD.js';import {a as a$4}from'./chunk-QNZEG7IT.js';import'./chunk-HMQ5BHP2.js';import'./chunk-JQKKVAAN.js';import {a}from'./chunk-LKAT7IAK.js';import'./chunk-5TAVYPOV.js';import*as r from'fs';import*as n from'path';import e from'chalk';import U from'ora';import*as d from'js-yaml';async function te(l={}){let s=process.cwd(),h=n.basename(s),u=n.join(s,".paradigm"),k=r.existsSync(u)&&r.statSync(u).isDirectory();console.log(e.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(e.blue("\u2502")+e.white.bold(" paradigm shift ")+e.blue("\u2502")),console.log(e.blue("\u2502")+e.gray(" Full project setup in one command ")+e.blue("\u2502")),console.log(e.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
|
+
`)),console.log(e.white(` \u{1F4C1} Project: ${e.cyan(h)}`)),console.log(e.white(` \u{1F4CD} Status: ${k?e.green("Paradigm detected"):e.yellow("New project")}`)),console.log("");let j=a.command("shift").start("Running paradigm shift",{project:h}),i=U();if(!k||l.force){i.start("Step 1/6: Initializing Paradigm...");try{await a$1({force:l.force,quick:!0,name:h,stack:l.stack}),i.succeed(e.green("Paradigm initialized"));}catch(t){i.fail(e.red(`Init failed: ${t.message}`)),j.error("Shift failed at init",{error:t.message});return}}else {i.succeed(e.gray("Step 1/6: Already initialized (use --force to reinit)"));let t=n.join(u,"config.yaml");if(r.existsSync(t))try{let o=r.readFileSync(t,"utf8"),a=d.load(o);if(!a.discipline||a.discipline==="auto"){let c=a$2(s);if(c!=="backend"){let f=o.replace(/^discipline:\s*auto\b.*$/m,`discipline: ${c}`);f!==o&&(r.writeFileSync(t,f,"utf8"),console.log(e.green(` \u2713 Detected discipline: ${e.cyan(c)} (updated config.yaml)`)));}else if(!a.discipline){let f=o.replace(/^(project:\s*.+)$/m,`$1
|
|
5
|
+
discipline: ${c}`);f!==o&&(r.writeFileSync(t,f,"utf8"),console.log(e.green(` \u2713 Added discipline: ${e.cyan(c)} to config.yaml`)));}}}catch(o){a.operation("shift").debug("Discipline detection failed",{error:o.message});}}if(k){i.start("Step 1b/6: Checking for migrations...");try{let{migrateCommand:t}=await import('./migrate-X5OMAFAQ.js');await t({apply:!0,quiet:!0,noSync:!0}),i.succeed(e.green("Migrations applied"));}catch(t){i.warn(e.yellow(`Migration warning: ${t.message}`));}}{let t=n.join(u,"config.yaml");if(l.workspace&&r.existsSync(t)){let o=l.workspacePath?n.resolve(s,l.workspacePath):n.join(n.dirname(s),".paradigm-workspace");if(r.existsSync(o))try{let a=d.load(r.readFileSync(o,"utf8")),c=n.basename(s),f=n.dirname(o),g="./"+n.relative(f,s);if(a.members.some(y=>n.resolve(f,y.path)===s))console.log(e.green(` \u2713 Already a member of workspace: ${e.cyan(a.name)}`));else {let y=d$1(c,s);a.members.push({name:c,path:g,...y&&{role:y}}),r.writeFileSync(o,d.dump(a,{indent:2,lineWidth:120,noRefs:!0,sortKeys:!1,quotingType:'"'}),"utf8"),console.log(e.green(` \u2713 Joined workspace: ${e.cyan(a.name)} (added as member)`));}}catch(a){console.log(e.yellow(` \u26A0 Failed to join workspace: ${a.message}`));}else try{let a=n.basename(s),c=n.dirname(o),f="./"+n.relative(c,s),g=d$1(a,s),p={version:"1.0",name:l.workspace,members:[{name:a,path:f,...g&&{role:g}}]};r.mkdirSync(n.dirname(o),{recursive:!0}),r.writeFileSync(o,d.dump(p,{indent:2,lineWidth:120,noRefs:!0,sortKeys:!1,quotingType:'"'}),"utf8"),console.log(e.green(` \u2713 Created workspace: ${e.cyan(l.workspace)} at ${e.gray(n.relative(s,o))}`));}catch(a){console.log(e.yellow(` \u26A0 Failed to create workspace: ${a.message}`));}try{let a=r.readFileSync(t,"utf8"),c=d.load(a),f=n.relative(s,o);if(c.workspace!==f){if(c.workspace){let g=a.replace(/^workspace:\s*.*$/m,`workspace: "${f}"`);r.writeFileSync(t,g,"utf8");}else {let g=a.trimEnd()+`
|
|
6
|
+
workspace: "${f}"
|
|
7
|
+
`;r.writeFileSync(t,g,"utf8");}console.log(e.green(" \u2713 Linked workspace in config.yaml"));}}catch(a$1){a.operation("shift").debug("Workspace config link failed",{error:a$1.message});}}else if(r.existsSync(t))try{let o=r.readFileSync(t,"utf8");if(!d.load(o).workspace){let c=n.dirname(s);for(let f=0;f<3;f++){let g=n.join(c,".paradigm-workspace");if(r.existsSync(g)){let y=n.relative(s,g),N=o.trimEnd()+`
|
|
8
|
+
workspace: "${y}"
|
|
9
|
+
`;r.writeFileSync(t,N,"utf8"),console.log(e.green(` \u2713 Found workspace: ${e.cyan(y)} (added to config.yaml)`));break}let p=n.dirname(c);if(p===c)break;c=p;}}}catch(o){a.operation("shift").debug("Workspace auto-detect failed",{error:o.message});}}if(!d$2(s)||l.force){console.log(e.cyan(" Step 2/6: Initializing team configuration..."));try{await b(s,{force:l.force,json:!1,configureModels:!0,noConfigureModels:!1}),console.log(e.green(` \u2713 Team configuration initialized
|
|
10
|
+
`));}catch(t){console.log(e.yellow(` \u26A0 Team init warning: ${t.message}
|
|
11
|
+
`));}}else i.succeed(e.gray("Step 2/6: Team already configured (use --force to reinit)"));let S=n.join(s,".paradigm","roster.yaml");if(!r.existsSync(S)||l.force)try{let t=a$3(s),o=b$1[t]||b$1.generic,a={version:"1.0",project:h,type:t,active:o.sort()};r.writeFileSync(S,d.dump(a,{lineWidth:-1,noRefs:!0}),"utf8"),console.log(e.green(` \u2713 Agent roster set: ${e.cyan(o.length)} agents for ${e.cyan(t)}`));}catch(t){a.operation("shift").debug("Roster setup failed",{error:t.message});}else try{let o=d.load(r.readFileSync(S,"utf8"))?.active?.length??0;console.log(e.gray(` \u2713 Agent roster exists (${o} agents active)`));}catch{console.log(e.gray(" \u2713 Agent roster exists"));}{let t=n.join(u,"config.yaml");if(r.existsSync(t))try{let o=r.readFileSync(t,"utf8"),a=d.load(o);if(!a["model-resolution"]||l.force){let{ModelDiscovery:c}=await import('./model-discovery-HMB3YI4L.js'),g=new c(s).detectEnvironment(),p;g==="claude-code"?p={"tier-1":"opus","tier-2":"sonnet","tier-3":"haiku"}:g==="cursor"?p={"tier-1":"sonnet","tier-2":"sonnet","tier-3":"haiku"}:p={"tier-1":"sonnet","tier-2":"sonnet","tier-3":"sonnet"},a["model-resolution"]=p,r.writeFileSync(t,d.dump(a,{lineWidth:-1,noRefs:!0}),"utf8"),console.log(e.green(` \u2713 Model tiers configured for ${e.cyan(g)}: tier-1=${p["tier-1"]}, tier-2=${p["tier-2"]}, tier-3=${p["tier-3"]}`));}}catch(o){a.operation("shift").debug("Model tier config failed",{error:o.message});}}if(l.quick)i.succeed(e.gray("Step 3/6: Skipped scan (--quick mode)"));else {i.start("Step 3/6: Scanning and indexing symbols...");try{await b$2(s,{quiet:!0}),i.succeed(e.green("Symbols indexed"));}catch(t){i.warn(e.yellow(`Scan warning: ${t.message}`));}}{let t=n.join(u,"config.yaml");if(r.existsSync(t))try{if(d.load(r.readFileSync(t,"utf8")).workspace){i.start("Step 3b/6: Reindexing workspace members...");try{let{workspaceReindexCommand:a}=await import('./workspace-2ODL5WLY.js');await a({quiet:!0}),i.succeed(e.green("Workspace members reindexed"));}catch(a){i.warn(e.yellow(`Workspace reindex: ${a.message}`));}}}catch(o){a.operation("shift").debug("Workspace config read failed",{error:o.message});}}let v=n.join(s,"portal.yaml");r.existsSync(v)||r.writeFileSync(v,d.dump({version:"1.0.0",gates:{},routes:{}},{lineWidth:-1,noRefs:true}),"utf8");let C=n.join(s,".paradigm","lore");r.existsSync(C)||r.mkdirSync(C,{recursive:true});let P=n.join(s,".paradigm","university");for(let t of ["content/notes","content/policies","content/quizzes","content/paths","diplomas"]){let o=n.join(P,t);r.existsSync(o)||r.mkdirSync(o,{recursive:true});}let x=n.join(P,"config.yaml");if(!r.existsSync(x)){let t="Project";try{let a=n.join(s,".paradigm","config.yaml");if(r.existsSync(a)){let c=d.load(r.readFileSync(a,"utf8"));c.project&&typeof c.project=="string"&&(t=c.project);}}catch{}let o={branding:{name:`${t} University`,tagline:`Learn the ${t} codebase`,institution:t},theme:{primary:"#6366f1",secondary:"#8b5cf6",accent:"#f59e0b",background:"#0f172a",surface:"#1e293b",text:"#f8fafc",textMuted:"#94a3b8",success:"#22c55e",error:"#ef4444",font:"Inter, system-ui, sans-serif"},content:{categories:[],defaultDifficulty:"beginner",requireApproval:false},diplomas:{includeGlobalPLSAT:true}};r.writeFileSync(x,d.dump(o,{lineWidth:-1,noRefs:true}),"utf8");}i.start("Step 4/6: Syncing IDE configurations...");try{let t=l.ide?[l.ide]:["claude","cursor","copilot","windsurf","agents"],o=[];for(let a of t)try{await a$4(a,{quiet:!0,force:!0}),o.push(a);}catch{}o.length>0?i.succeed(e.green(`IDE configs synced: ${o.join(", ")}`)):i.warn(e.yellow("No IDE configs to sync"));}catch(t){i.warn(e.yellow(`Sync warning: ${t.message}`));}i.start("Step 5/6: Installing hooks...");try{await a$5({force:l.force}),i.succeed(e.green("Hooks installed (git + Claude Code + Cursor)"));}catch(t){i.warn(e.yellow(`Hooks warning: ${t.message}`));}if(l.verify){i.start("Step 6/6: Running health checks...");try{await a$6({quiet:!0})?i.succeed(e.green("All health checks passed")):i.warn(e.yellow("Some health checks need attention"));}catch(t){i.warn(e.yellow(`Doctor warning: ${t.message}`));}}else i.succeed(e.gray("Step 6/6: Skipped verify (use --verify to check health)"));console.log(""),console.log(e.blue("\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(e.blue("\u2502")+e.white.bold(" \u2728 Paradigm shift complete! ")+e.blue("\u2502")),console.log(e.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")),console.log(""),console.log(e.white(" Created/Updated:")),console.log(e.gray(" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"));let E=[{path:".paradigm/config.yaml",desc:"Project configuration"},{path:".paradigm/navigator.yaml",desc:"Symbol navigation map"},{path:".paradigm/agents.yaml",desc:"Team agent configuration"},{path:".purpose",desc:"Root feature definitions"},{path:".paradigm/lore/",desc:"Project lore timeline",isDir:true},{path:"portal.yaml",desc:"Authorization gates"},{path:".paradigm/roster.yaml",desc:"Agent roster for this project"},{path:"CLAUDE.md",desc:"Claude Code AI instructions"},{path:"AGENTS.md",desc:"Universal AI agent instructions"},{path:".cursor/rules/",desc:"Cursor AI instructions",isDir:true},{path:".claude/hooks/",desc:"Claude Code enforcement hooks",isDir:true,optional:true},{path:".cursor/hooks/",desc:"Cursor enforcement hooks",isDir:true,optional:true}],F=n.join(u,"config.yaml");if(r.existsSync(F))try{let t=d.load(r.readFileSync(F,"utf8"));if(typeof t.workspace=="string"){let o=n.resolve(s,t.workspace),a=n.relative(s,o);E.push({path:a,desc:"Multi-project workspace",optional:!0});}}catch(t){a.operation("shift").debug("Summary config read failed",{error:t.message});}for(let t of E){let o=n.join(s,t.path);r.existsSync(o)?console.log(e.green(" \u2713 ")+e.white(t.path.padEnd(28))+e.gray(t.desc)):t.optional||console.log(e.yellow(" \u25CB ")+e.gray(t.path.padEnd(28))+e.gray(`(${t.desc})`));}console.log(""),console.log(e.white(" AI agents will now:")),console.log(e.gray(" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500")),console.log(e.cyan(" \u2022 ")+e.white("Use MCP tools for navigation (paradigm_search, etc.)")),console.log(e.cyan(" \u2022 ")+e.white("Check .purpose files before modifying features")),console.log(e.cyan(" \u2022 ")+e.white("Update Paradigm files when making structural changes")),console.log(e.cyan(" \u2022 ")+e.white("Follow antipatterns and team preferences")),console.log(e.cyan(" \u2022 ")+e.white("Record lore entries to capture work history")),console.log(""),console.log(e.white(" Next steps:")),console.log(e.gray(" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"));let w=1;l.workspace&&console.log(e.white(` ${w++}. `)+e.gray("Run ")+e.cyan(`paradigm shift --workspace "${l.workspace}"`)+e.gray(" in sibling projects")),console.log(e.white(` ${w++}. `)+e.gray("Edit ")+e.cyan(".purpose")+e.gray(" to define your features")),console.log(e.white(` ${w++}. `)+e.gray("Add ")+e.cyan(".purpose")+e.gray(" files to feature directories")),console.log(e.white(` ${w++}. `)+e.gray("Run ")+e.cyan("paradigm shift --verify")+e.gray(" to check health")),console.log(""),j.success("Paradigm shift complete",{project:h});}export{te as shiftCommand};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {b,c,d}from'./chunk-D34YFK4M.js';import'./chunk-5TAVYPOV.js';import o from'chalk';async function p(s,i){let c$1=process.cwd(),e=b(c$1,s);if(e){if(i.json){console.log(JSON.stringify({...e.frontmatter,body:e.body},null,2));return}console.log(o.blue(`
|
|
3
|
+
${e.frontmatter.title}`)),console.log(o.gray(` ${e.frontmatter.type} \xB7 ${e.frontmatter.difficulty} \xB7 ${e.frontmatter.author}`)),e.frontmatter.tags.length>0&&console.log(o.gray(` Tags: ${e.frontmatter.tags.join(", ")}`)),e.frontmatter.symbols.length>0&&console.log(o.gray(` Symbols: ${e.frontmatter.symbols.join(", ")}`)),console.log(),console.log(e.body),console.log();return}let t=c(c$1,s);if(t){if(i.json){console.log(JSON.stringify(t,null,2));return}console.log(o.blue(`
|
|
4
|
+
${t.title}`)),console.log(o.gray(` quiz \xB7 ${t.difficulty} \xB7 ${t.questions.length} questions \xB7 pass: ${t.passThreshold*100}%`)),t.description&&console.log(o.gray(` ${t.description}`)),console.log();for(let n of t.questions){console.log(` ${o.cyan(n.id)}: ${n.question}`);for(let[l,g]of Object.entries(n.choices)){let y=l===n.correct?o.green("*"):" ";console.log(` ${y} ${l}: ${g}`);}n.explanation&&console.log(o.gray(` \u2192 ${n.explanation}`)),console.log();}return}let r=d(c$1,s);if(r){if(i.json){console.log(JSON.stringify(r,null,2));return}console.log(o.blue(`
|
|
5
|
+
${r.title}`)),console.log(o.gray(` learning path \xB7 ${r.steps.length} steps \xB7 ${r.ordered?"ordered":"unordered"}`)),r.description&&console.log(o.gray(` ${r.description}`)),console.log();for(let n=0;n<r.steps.length;n++){let l=r.steps[n],g=l.required?o.red("required"):o.gray("optional");console.log(` ${n+1}. ${o.cyan(l.content)} (${g})`),l.note&&console.log(o.gray(` ${l.note}`));}console.log();return}console.error(o.red(`
|
|
6
|
+
Content "${s}" not found
|
|
7
|
+
`)),process.exit(1);}export{p as universityShowCommand};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {g}from'./chunk-WS2N27RX.js';import'./chunk-5TAVYPOV.js';import e from'chalk';async function h(s,r){let c=process.cwd(),o=await g(c,s);if(o||(console.error(e.red(`
|
|
3
|
+
Entry not found: ${s}
|
|
4
|
+
`)),process.exit(1)),r.json){console.log(JSON.stringify(o,null,2));return}let g$1={...{"agent-session":e.hex("#818cf8"),"human-note":e.hex("#34d399"),decision:e.hex("#fbbf24"),review:e.hex("#c084fc"),incident:e.hex("#f87171"),milestone:e.hex("#60a5fa")},retro:e.hex("#fb923c"),insight:e.hex("#a78bfa")},i=o.type||"agent-session",a=g$1[i]||e.white;if(console.log(),console.log(e.white.bold(` ${o.title}`)),console.log(e.gray(` ${o.id} \xB7 ${a(i)} \xB7 ${o.timestamp}`)),console.log(),console.log(` \u{1F464} ${e.white(o.author)}`),o.agent&&console.log(` \u{1F916} ${e.gray(o.agent.model)}${o.agent.provider?e.gray(` (${o.agent.provider})`):""}`),o.duration_minutes&&console.log(` \u23F1 ${o.duration_minutes} minutes`),console.log(),console.log(e.gray(" Summary:")),console.log(` ${o.summary}`),console.log(),o.body){console.log(e.gray(" Body:"));for(let l of o.body.split(`
|
|
5
|
+
`))console.log(` ${l}`);console.log();}if(o.linked_lore&&o.linked_lore.length>0){console.log(e.gray(" Linked lore:"));for(let l of o.linked_lore)console.log(` ${e.cyan(l)}`);console.log();}if(o.linked_tasks&&o.linked_tasks.length>0){console.log(e.gray(" Linked tasks:"));for(let l of o.linked_tasks)console.log(` ${e.yellow(l)}`);console.log();}if(o.linked_commits&&o.linked_commits.length>0){console.log(e.gray(" Linked commits:"));for(let l of o.linked_commits)console.log(` ${e.gray(l)}`);console.log();}if(o.symbols_touched?.length>0&&(console.log(e.gray(" Symbols touched:")),console.log(` ${o.symbols_touched.map(l=>e.cyan(l)).join(" ")}`),console.log()),o.symbols_created&&o.symbols_created.length>0&&(console.log(e.gray(" Symbols created:")),console.log(` ${o.symbols_created.map(l=>e.green(l)).join(" ")}`),console.log()),o.files_created&&o.files_created.length>0){console.log(e.gray(` Files created (${o.files_created.length}):`));for(let l of o.files_created.slice(0,10))console.log(` ${e.green("+")} ${l}`);o.files_created.length>10&&console.log(e.gray(` ... and ${o.files_created.length-10} more`)),console.log();}if(o.files_modified&&o.files_modified.length>0){console.log(e.gray(` Files modified (${o.files_modified.length}):`));for(let l of o.files_modified.slice(0,10))console.log(` ${e.yellow("~")} ${l}`);o.files_modified.length>10&&console.log(e.gray(` ... and ${o.files_modified.length-10} more`)),console.log();}if((o.lines_added||o.lines_removed)&&(console.log(` ${e.green(`+${o.lines_added||0}`)} ${e.red(`-${o.lines_removed||0}`)} lines`),console.log()),o.decisions&&o.decisions.length>0){console.log(e.gray(" Decisions:"));for(let l of o.decisions)console.log(` ${e.yellow("\u25BA")} ${e.white(l.decision)}`),console.log(` ${e.gray(l.rationale)}`);console.log();}if(o.errors_encountered&&o.errors_encountered.length>0){console.log(e.gray(" Errors encountered:"));for(let l of o.errors_encountered)console.log(` ${e.red("\u2717")} ${l.description}`),console.log(` ${e.green("\u2192")} ${l.resolution}${l.time_to_fix?e.gray(` (${l.time_to_fix})`):""}`);console.log();}if(o.learnings&&o.learnings.length>0){console.log(e.gray(" Learnings:"));for(let l of o.learnings)console.log(` ${e.blue("\u2022")} ${l}`);console.log();}if(o.verification){let l=o.verification.status==="pass"?e.green("\u2713 pass"):o.verification.status==="fail"?e.red("\u2717 fail"):o.verification.status==="partial"?e.yellow("\u26A0 partial"):e.gray("\xB7 untested");if(console.log(` Verification: ${l}`),o.verification.details)for(let[n,f]of Object.entries(o.verification.details)){let d=f==="pass"?e.green("\u2713"):e.red("\u2717");console.log(` ${d} ${n}`);}console.log();}if(o.review){let l=n=>e.yellow("\u2605".repeat(n)+"\u2606".repeat(5-n));console.log(e.gray(" Review:")),console.log(` Reviewer: ${o.review.reviewer}`),console.log(` Completeness: ${l(o.review.completeness)}`),console.log(` Quality: ${l(o.review.quality)}`),o.review.notes&&console.log(` Notes: ${o.review.notes}`),console.log();}if(o.commit&&console.log(` Commit: ${e.gray(o.commit)}`),o.git_context){let l=o.git_context;console.log(e.gray(" Git context:")),console.log(` ${e.gray(l.ref.slice(0,8))} on ${e.cyan(l.branch)}${l.dirty?e.yellow(" (dirty)"):""}`),console.log();}if(o.meta&&Object.keys(o.meta).length>0){console.log(e.gray(" Metadata:"));for(let[l,n]of Object.entries(o.meta))console.log(` ${e.white(l)}: ${e.gray(String(n))}`);console.log();}o.tags&&o.tags.length>0&&console.log(` Tags: ${o.tags.map(l=>e.gray(`[${l}]`)).join(" ")}`),console.log();}export{h as loreShowCommand};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {c,k,f as f$1}from'./chunk-T6IDXUUA.js';import'./chunk-JIXHEBGK.js';import'./chunk-QT2LKB3P.js';import'./chunk-5TAVYPOV.js';import*as n from'fs';import*as f from'path';import o from'chalk';import y from'ora';async function w(t,r){let m=process.cwd(),i=f.join(m,".premise");console.log(o.blue(`
|
|
3
|
+
\u{1F4F8} Creating Snapshot...
|
|
4
|
+
`));let e=y("Loading .premise file...").start();try{n.existsSync(i)||(e.fail(".premise file not found"),console.log(o.yellow(`
|
|
5
|
+
Run "paradigm init" first to create a .premise file
|
|
6
|
+
`)),process.exit(1));let{data:s,errors:a}=c(i);if(a.length>0){e.warn("Warnings parsing .premise file");for(let d of a)console.log(o.yellow(` \u26A0 ${d}`));}s||(e.fail("Failed to parse .premise file"),process.exit(1)),e.text="Creating snapshot...";let l=k(s,t,r),h=l.snapshots?.length||0;n.writeFileSync(i,f$1(l)),e.succeed(`Created snapshot "${t}"`),console.log(o.white(`
|
|
7
|
+
Snapshot Details`)),console.log(o.gray("\u2500".repeat(40))),console.log(` Name: ${o.cyan(t)}`),r&&console.log(` Description: ${o.gray(r)}`),console.log(` Nodes: ${o.cyan(s.nodes.length.toString())}`),console.log(` Connections: ${o.cyan(s.connections.length.toString())}`),console.log(` Total: ${o.cyan(h.toString())} snapshot(s)`),console.log("");}catch(s){e.fail("Failed to create snapshot"),console.log(o.red(`Error: ${s.message}
|
|
8
|
+
`)),process.exit(1);}}export{w as premiseSnapshotCommand};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {b as b$1}from'./chunk-WESTEMIM.js';import'./chunk-FYDRENK7.js';import {d}from'./chunk-IZSBGW6E.js';import {e}from'./chunk-AO7ZSRME.js';import {d as d$1}from'./chunk-EKZDFEJW.js';import'./chunk-5TAVYPOV.js';import*as b from'path';import r from'chalk';import x from'ora';async function J(t,m,o){let f=m?b.resolve(m):process.cwd();if(!o.task){o.json?console.log(JSON.stringify({error:'Task is required. Use --task "..."'})):(console.log(r.red(`
|
|
3
|
+
Task is required. Use --task "..."`)),console.log(r.gray(`Example: paradigm team spawn architect --task "Design the payment API"
|
|
4
|
+
`)));return}let a=e(f);if(!a){o.json?console.log(JSON.stringify({error:"Team not configured"})):console.log(r.yellow("\nTeam not configured. Run `paradigm team init` first.\n"));return}if(!a.agents[t]){o.json?console.log(JSON.stringify({error:`Unknown agent: ${t}`,available:Object.keys(a.agents)})):(console.log(r.red(`
|
|
5
|
+
Unknown agent: ${t}`)),console.log(r.gray(`Available agents: ${Object.keys(a.agents).join(", ")}
|
|
6
|
+
`)));return}let c;if(o.budget){let e=o.budget.split(",");c={};for(let s of e){let[l,d]=s.split("=");l==="tokens"&&(c.maxTokens=parseInt(d)),l==="cost"&&(c.maxCostUsd=parseFloat(d));}}let n=x({text:`Initializing ${t} agent...`,isSilent:o.quiet||o.json}).start(),y=new b$1(f);try{await y.initialize();}catch(e){n.fail("Failed to initialize spawner"),o.json?console.log(JSON.stringify({error:e instanceof Error?e.message:String(e)})):console.log(r.red(`
|
|
7
|
+
Error: ${e instanceof Error?e.message:e}
|
|
8
|
+
`));return}let g;try{g=await d(f,o.provider);}catch{n.fail("No agent provider available"),o.json?console.log(JSON.stringify({error:"No agent provider available"})):(console.log(r.red(`
|
|
9
|
+
No agent provider available.`)),console.log(r.gray("Run `paradigm team providers` to see options.\n")));return}!o.quiet&&!o.json&&(n.text=`Using provider: ${g.name}`),!o.quiet&&!o.json&&(n.text=`Spawning ${r.cyan(t)} (${o.model||"default model"})...`);let u="",S=e=>{if(!o.json&&!o.quiet)if(e.type==="text")n.isSpinning&&n.stop(),process.stdout.write(e.content),u+=e.content;else if(e.type==="tool_use")n.isSpinning||n.start(),n.text=`${t}: ${e.content}`;else if(e.type==="tool_result"){let s=typeof e.toolResult=="string"?e.toolResult.slice(0,100):JSON.stringify(e.toolResult).slice(0,100);n.text=`${t}: Tool result (${s}...)`;}else e.type==="error"&&n.fail(e.content);},h=async e=>o.checkpoint?(console.log(r.yellow(`
|
|
10
|
+
\u26A0 Checkpoint: ${e}`)),console.log(r.gray("Press Enter to continue, or Ctrl+C to abort...")),new Promise(s=>{process.stdin.once("data",()=>s(true));})):true,i=await y.spawn(t,o.task,{provider:o.provider,model:o.model,budget:c,timeout:o.timeout?parseInt(o.timeout):void 0,checkpoints:o.checkpoint?{beforeActions:["write","delete","execute"]}:void 0,onMessage:S,onCheckpoint:h});if(u&&!u.endsWith(`
|
|
11
|
+
`)&&console.log(),o.json){console.log(JSON.stringify({success:i.success,sessionId:i.sessionId,agent:t,provider:g.name,model:o.model||"default",task:o.task,relay:i.relay,error:i.error},null,2));return}if(console.log(),console.log(r.gray("\u2500".repeat(50))),console.log(r.gray(` Provider: ${g.name}`)),i.success?console.log(r.green(`\u2713 ${t} completed successfully`)):console.log(r.red(`\u2717 ${t} failed: ${i.error||"Unknown error"}`)),i.relay){let{metrics:e,outputs:s}=i.relay;if(console.log(r.gray(` Tokens: ${d$1(e.tokens_used.total)}`)),console.log(r.gray(` Duration: ${(e.duration_ms/1e3).toFixed(1)}s`)),console.log(r.gray(` Files read: ${e.files_read}, written: ${e.files_written}`)),s.symbols.length>0&&console.log(r.gray(` Symbols: ${s.symbols.join(", ")}`)),s.artifacts.length>0){console.log(r.cyan(`
|
|
12
|
+
Artifacts:`));for(let l of s.artifacts){let d=l.action==="created"?"+":l.action==="deleted"?"-":"~";console.log(r.gray(` ${d} ${l.path}`));}}}console.log(r.gray(` Session: ${i.sessionId}`)),console.log();}export{J as teamSpawnCommand};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {m,o as o$1,B}from'./chunk-T6IDXUUA.js';import {e}from'./chunk-JIXHEBGK.js';import {e as e$1}from'./chunk-QT2LKB3P.js';import {a as a$1}from'./chunk-LKAT7IAK.js';import'./chunk-5TAVYPOV.js';import*as l from'fs';import*as a from'path';import o from'chalk';import G from'ora';async function D(){let t=process.cwd();console.log(o.blue(`
|
|
3
|
+
\u{1F4CA} Paradigm Status
|
|
4
|
+
`)),console.log(o.gray("\u2500".repeat(40)));let i=a$1.command("status").start("Getting project status"),r=G("Scanning project...").start(),p=l.existsSync(a.join(t,".premise")),m$1=l.existsSync(a.join(t,".purpose")),f=l.existsSync(a.join(t,"portal.yaml"));r.stop(),console.log(o.white(`
|
|
5
|
+
Configuration Files`)),console.log(o.gray("\u2500".repeat(40))),console.log(` .premise: ${p?o.green("\u2713 Found"):o.yellow("\u25CB Not found")}`),console.log(` .purpose: ${m$1?o.green("\u2713 Found"):o.yellow("\u25CB Not found")}`),console.log(` portal.yaml: ${f?o.green("\u2713 Found"):o.yellow("\u25CB Not found")}`),r.start("Counting files...");let u=await e(t),y=await e$1(t);if(r.stop(),console.log(o.white(`
|
|
6
|
+
Source Files`)),console.log(o.gray("\u2500".repeat(40))),console.log(` Purpose files: ${o.cyan(u.length.toString())}`),console.log(` Gate files: ${o.cyan(y.length.toString())}`),p||m$1||f){r.start("Aggregating symbols...");try{let e=await m(t),b=o$1(e),s=B(b);r.stop(),console.log(o.white(`
|
|
7
|
+
Symbol Index`)),console.log(o.gray("\u2500".repeat(40)));let j=[{prefix:"#",name:"Components",count:s.component,color:o.green},{prefix:"$",name:"Flows",count:s.flow,color:o.yellow},{prefix:"^",name:"Gates",count:s.gate,color:o.red},{prefix:"!",name:"Signals",count:s.signal,color:o.cyan},{prefix:"~",name:"Aspects",count:s.aspect,color:o.magenta}];for(let{prefix:n,name:c,count:h,color:C}of j)h>0&&console.log(` ${C(n)} ${c.padEnd(12)} ${o.cyan(h.toString())}`);let d=Object.values(s).reduce((n,c)=>n+c,0);if(console.log(o.gray("\u2500".repeat(40))),console.log(` Total: ${o.cyan(d.toString())}`),i.success("Status retrieved",{symbols:d,files:u.length+y.length}),e.errors.length>0){console.log(o.white(`
|
|
8
|
+
Warnings`)),console.log(o.gray("\u2500".repeat(40)));for(let n of e.errors)console.log(o.yellow(` \u26A0 ${n.source}: ${n.message}`));a$1.command("status").warn("Aggregation had errors",{count:e.errors.length});}}catch(e){r.fail("Failed to aggregate"),i.error("Status failed",{error:e.message}),console.log(o.red(` Error: ${e.message}`));}}console.log("");}export{D as statusCommand};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {a,e}from'./chunk-D34YFK4M.js';import'./chunk-5TAVYPOV.js';import t from'chalk';async function p(d){let a$1=process.cwd(),s=a(a$1);if(!s||s.totalContent===0){console.log(t.yellow(`
|
|
3
|
+
No university content found.`)),console.log(t.gray(` Create content with: paradigm university add note --title "My Note"
|
|
4
|
+
`));return}let n=e(a$1),r={},l={},c={};for(let o of s.entries){r[o.type]=(r[o.type]||0)+1,o.difficulty&&(c[o.difficulty]=(c[o.difficulty]||0)+1);for(let e of o.tags)l[e]=(l[e]||0)+1;}if(d.json){console.log(JSON.stringify({totalContent:s.totalContent,typeCounts:r,difficultyCounts:c,tagCounts:l,diplomaCount:n.length},null,2));return}console.log(t.blue(`
|
|
5
|
+
University Status
|
|
6
|
+
`)),console.log(t.white(` Total content: ${s.totalContent}`));for(let[o,e]of Object.entries(r).sort())console.log(` ${t.cyan(o)}: ${e}`);if(Object.keys(c).length>0){console.log(),console.log(t.white(" By difficulty:"));for(let[o,e]of Object.entries(c)){let i=o==="advanced"?t.red:o==="intermediate"?t.yellow:t.green;console.log(` ${i(o)}: ${e}`);}}if(Object.keys(l).length>0){console.log(),console.log(t.white(" Top tags:"));let o=Object.entries(l).sort((e,i)=>i[1]-e[1]).slice(0,8);for(let[e,i]of o)console.log(` ${t.gray(e)}: ${i}`);}if(console.log(),console.log(t.white(` Diplomas earned: ${n.length}`)),n.length>0){for(let o of n.slice(0,5)){let e=o.passed?t.green("PASS"):t.red("FAIL");console.log(` ${e} ${o.source} \u2014 ${o.student} (${o.percentage}%) ${t.gray(o.earnedAt.slice(0,10))}`);}n.length>5&&console.log(t.gray(` ... and ${n.length-5} more`));}console.log();}export{p as universityStatusCommand};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {m}from'./chunk-T6IDXUUA.js';import'./chunk-JIXHEBGK.js';import'./chunk-QT2LKB3P.js';import {c as c$1,a}from'./chunk-HMQ5BHP2.js';import'./chunk-JQKKVAAN.js';import'./chunk-5TAVYPOV.js';import*as n from'fs';import*as c from'path';import o from'chalk';import S from'ora';async function F(){let p=process.cwd(),x=c.basename(p),l=S();console.log(o.blue(`
|
|
3
|
+
\u{1F4CA} Paradigm Summary
|
|
4
|
+
`));let r=c.join(p,".paradigm");(!n.existsSync(r)||!n.statSync(r).isDirectory())&&(console.log(o.red("\u274C No .paradigm/ directory found.")),console.log(o.gray(" Run `paradigm init` first.\n")),process.exit(1)),l.start("Aggregating symbols...");let m$1;try{m$1=await m(p),l.succeed(`Found ${m$1.symbols.length} symbols`);}catch(e){l.fail(o.red("Failed to aggregate symbols")),console.error(o.gray(e.message)),process.exit(1);}let u={components:{count:0,examples:[]},flows:{count:0,examples:[]},gates:{count:0,examples:[]},signals:{count:0,examples:[]},aspects:{count:0,examples:[]}};for(let e of m$1.symbols){let t=e.type,i=t==="component"?"components":t==="flow"?"flows":t==="gate"?"gates":t==="signal"?"signals":t==="aspect"?"aspects":null;i&&u[i]&&(u[i].count++,u[i].examples.length<3&&u[i].examples.push(e.symbol));}let a$1=[];n.existsSync(c.join(r,"config.yaml"))?a$1.push({check:"Config",status:"ok"}):a$1.push({check:"Config",status:"missing"});let k=["logger.md","scan.md","symbols.md"].every(e=>n.existsSync(c.join(r,"specs",e)));a$1.push({check:"Specs",status:k?"ok":"warn"});let j=n.existsSync(c.join(r,"docs"));a$1.push({check:"Docs",status:j?"ok":"warn"});let g=c$1(p);if(g.detected){let e=a(g.detected);e&&n.existsSync(c.join(p,e.outputPath))?a$1.push({check:`IDE (${g.detected})`,status:"ok"}):a$1.push({check:`IDE (${g.detected})`,status:"warn"});}let w=n.existsSync(c.join(r,"scan-index.json"))||n.existsSync(c.join(p,".paradigm-scan-index.json"));a$1.push({check:"Scan index",status:w?"ok":"missing"});let s=[];s.push(`# Project: ${x}`),s.push(""),s.push(`**Generated:** ${new Date().toISOString()}`),s.push("**Paradigm Version:** 0.2.0"),s.push(""),s.push("## Symbol Counts"),s.push(""),s.push("| Type | Count | Examples |"),s.push("|------|-------|----------|");for(let[e,t]of Object.entries(u))if(t.count>0){let i=t.examples.join(", ");s.push(`| ${e} | ${t.count} | ${i} |`);}s.push(""),s.push("## Source Files"),s.push(""),s.push(`- Purpose files: ${m$1.purposeFiles.length}`),s.push(`- Gate files: ${m$1.portalFiles.length}`),s.push(""),s.push("## Health Status"),s.push("");for(let e of a$1){let t=e.status==="ok"?"\u2713":e.status==="warn"?"\u26A0":"\u25CB";s.push(`- ${t} ${e.check}`);}s.push(""),s.push("---"),s.push("*Generated by `paradigm summary`*");let h=c.join(r,"project.md");l.start("Writing project.md...");try{n.writeFileSync(h,s.join(`
|
|
5
|
+
`),"utf8"),l.succeed(o.green("project.md generated"));}catch(e){l.fail(o.red("Failed to write project.md")),console.error(o.gray(e.message)),process.exit(1);}console.log(o.gray(`
|
|
6
|
+
Path: ${h}
|
|
7
|
+
`)),console.log(o.white(" Symbol Counts:"));for(let[e,t]of Object.entries(u))t.count>0&&console.log(o.gray(` ${e}: ${t.count}`));console.log(""),console.log(o.white(" Health:"));for(let e of a$1){let t=e.status==="ok"?o.green("\u2713"):e.status==="warn"?o.yellow("\u26A0"):o.gray("\u25CB");console.log(` ${t} ${e.check}`);}console.log("");}export{F as summaryCommand};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {b as b$1,c}from'./chunk-WS2N27RX.js';import {a}from'./chunk-LKAT7IAK.js';import'./chunk-5TAVYPOV.js';import*as l from'fs';import*as y from'path';import b from'chalk';import M from'ora';import*as $ from'js-yaml';import {glob}from'glob';var _=new Set(["node_modules","dist",".git",".next","build","coverage","__pycache__","target"]),L=new Set([".ts",".tsx",".js",".jsx",".py",".rs",".go",".java",".rb",".ex",".exs"]),P=14,O=90;function j(){return new Date().toISOString().slice(0,10)}function R(c){return !c.dry&&!c.skipFix}function W(c){let o=[];function u(e){let s;try{s=l.readdirSync(e,{withFileTypes:!0});}catch{return}for(let f of s){if(_.has(f.name))continue;let i=y.join(e,f.name);f.isDirectory()?u(i):f.name===".purpose"&&o.push(i);}}return u(c),o}function H(c){let o=new Set;function u(e){let s;try{s=l.readdirSync(e,{withFileTypes:!0});}catch{return}let f=false;for(let i of s){if(_.has(i.name))continue;let h=y.join(e,i.name);i.isDirectory()?u(h):L.has(y.extname(i.name))&&(f=true);}f&&o.add(e);}return u(c),[...o]}function z(c){let o=y.join(c,".paradigm","scan-index.json");if(!l.existsSync(o))return null;try{return JSON.parse(l.readFileSync(o,"utf8"))}catch{return null}}function B(c){let o=y.join(c,".paradigm","flow-index.json");if(!l.existsSync(o))return null;try{return JSON.parse(l.readFileSync(o,"utf8"))}catch{return null}}function I(c){let o=new Map,u=["components","features","flows","state","gates","signals","aspects"];for(let e of u){let s=c[e];if(!(!s||typeof s!="object"))for(let f of Object.values(s))f.symbol&&o.set(f.symbol,f);}return o}function G(c,o,u){let e=0;for(let s of o)if(s!==u)try{l.readFileSync(s,"utf8").includes(c)&&e++;}catch{}return e}function q(c,o,u,e){let s=[];if(!o)return s.push({check:"orphaned-symbols",category:"orphaned",status:"ok",message:"Skipped \u2014 no scan-index.json"}),s;let f=I(o),i=0,h=0;for(let[a,t]of f)if(G(a,u,t.path)===0){if(i++,R(e)){let n=t.path.endsWith(".purpose")?t.path:y.join(t.path,".purpose");if(l.existsSync(n))try{let r=l.readFileSync(n,"utf8");if(!r.includes("# orphan-detected:")||!r.includes(a)){r+=`
|
|
3
|
+
# orphan-detected: ${j()} \u2014 ${a} has 0 cross-references
|
|
4
|
+
`,l.writeFileSync(n,r,"utf8"),h++,s.push({check:"orphaned-symbols",category:"orphaned",status:"fixed",symbol:a,file:n,message:`${a} \u2014 0 cross-references, marked orphan`,fixAction:"Added orphan-detected comment"});continue}}catch{}}s.push({check:"orphaned-symbols",category:"orphaned",status:"entropy",symbol:a,file:t.path,message:`${a} \u2014 0 cross-references from other .purpose files`});}return i===0&&s.push({check:"orphaned-symbols",category:"orphaned",status:"ok",message:`All ${f.size} symbols have cross-references`}),s}function Y(c,o,u){let e=[],s=0;for(let f of o){let i=y.dirname(f),h;try{h=l.statSync(f).mtime.getTime();}catch{continue}let a=0,t="";try{let n=l.readdirSync(i,{withFileTypes:!0});for(let r of n){if(!r.isFile()||!L.has(y.extname(r.name)))continue;let g=l.statSync(y.join(i,r.name));g.mtime.getTime()>a&&(a=g.mtime.getTime(),t=r.name);}}catch{continue}if(a===0)continue;let d=(a-h)/(1e3*60*60*24);if(d>P){s++;let n=y.relative(c,f),r=Math.floor(d);if(R(u))try{let g=l.readFileSync(f,"utf8");if(!g.includes("# stale-since:")){g+=`
|
|
5
|
+
# stale-since: ${j()} \u2014 code in ${t} is ${r} days newer
|
|
6
|
+
`,l.writeFileSync(f,g,"utf8"),e.push({check:"stale-purpose",category:"stale",status:"fixed",file:n,message:`${n} \u2014 ${r} days behind ${t}`,fixAction:"Added stale-since marker"});continue}}catch{}e.push({check:"stale-purpose",category:"stale",status:"entropy",file:n,message:`${n} \u2014 ${r} days behind ${t}`});}}return s===0&&e.push({check:"stale-purpose",category:"stale",status:"ok",message:`All ${o.length} .purpose files are fresh (within ${P} days)`}),e}async function J(c,o){let u=[],e=y.join(c,"portal.yaml");if(!l.existsSync(e))return u.push({check:"phantom-gates",category:"phantom",status:"ok",message:"No portal.yaml \u2014 skipped"}),u;let s;try{s=l.readFileSync(e,"utf8");}catch{return u.push({check:"phantom-gates",category:"phantom",status:"ok",message:"Could not read portal.yaml \u2014 skipped"}),u}let f=$.load(s);if(!f?.gates)return u.push({check:"phantom-gates",category:"phantom",status:"ok",message:"No gates defined in portal.yaml"}),u;let i=Object.keys(f.gates),h=0,a=await glob("**/*.{ts,tsx,js,jsx,py,rs,go,java,rb}",{cwd:c,absolute:true,ignore:["**/node_modules/**","**/dist/**","**/.git/**","**/build/**","**/coverage/**"]});for(let t of i){let d=t.startsWith("^")?t.slice(1):t,n=false;for(let r of a)try{if(l.readFileSync(r,"utf8").includes(d)){n=!0;break}}catch{continue}if(!n){h++;let r=t.startsWith("^")?t:`^${t}`;if(R(o))try{let g=l.readFileSync(e,"utf8"),p=$.load(g);if(p.gates&&p.gates[t]&&delete p.gates[t],p.routes){for(let[m,S]of Object.entries(p.routes))if(Array.isArray(S)&&S.includes(r)){let w=S.filter(k=>k!==r);w.length===0?delete p.routes[m]:p.routes[m]=w;}}l.writeFileSync(e,$.dump(p,{lineWidth:-1,noRefs:!0}),"utf8"),u.push({check:"phantom-gates",category:"phantom",status:"fixed",symbol:r,file:"portal.yaml",message:`${r} \u2014 no code implementation found`,fixAction:"Removed from portal.yaml"});continue}catch{}u.push({check:"phantom-gates",category:"phantom",status:"entropy",symbol:r,file:"portal.yaml",message:`${r} \u2014 defined in portal.yaml but no code references "${d}"`});}}return h===0&&u.push({check:"phantom-gates",category:"phantom",status:"ok",message:`All ${i.length} gates have code references`}),u}async function V(c,o,u,e){let s=[];if(!o)return s.push({check:"dead-signals",category:"dead",status:"ok",message:"Skipped \u2014 no scan-index.json"}),s;let f=o.signals||{},i=Object.values(f);if(i.length===0)return s.push({check:"dead-signals",category:"dead",status:"ok",message:"No signals defined"}),s;let h=await glob("**/*.{ts,tsx,js,jsx,py,rs,go,java,rb}",{cwd:c,absolute:true,ignore:["**/node_modules/**","**/dist/**","**/.git/**","**/build/**","**/coverage/**"]}),a=0;for(let t of i){let d=t.id,n=false;for(let r of h)try{if(l.readFileSync(r,"utf8").includes(d)){n=!0;break}}catch{continue}if(!n){a++;let r=t.symbol;if(R(e)){let g=t.path.endsWith(".purpose")?t.path:y.join(t.path,".purpose");if(l.existsSync(g))try{let p=l.readFileSync(g,"utf8");if(!p.includes(`# dead-signal: ${r}`)){p+=`
|
|
7
|
+
# dead-signal: ${r} \u2014 no handler/listener found (${j()})
|
|
8
|
+
`,l.writeFileSync(g,p,"utf8"),s.push({check:"dead-signals",category:"dead",status:"fixed",symbol:r,file:g,message:`${r} \u2014 no handler or listener in codebase`,fixAction:"Added dead-signal marker"});continue}}catch{}}s.push({check:"dead-signals",category:"dead",status:"entropy",symbol:r,file:t.path,message:`${r} \u2014 no handler or listener references in codebase`});}}return a===0&&s.push({check:"dead-signals",category:"dead",status:"ok",message:`All ${i.length} signals have code references`}),s}function K(c,o,u,e){let s=[];if(!u)return s.push({check:"broken-flows",category:"broken",status:"ok",message:"No flow-index.json \u2014 skipped"}),s;if(!o)return s.push({check:"broken-flows",category:"broken",status:"ok",message:"No scan-index.json \u2014 skipped"}),s;let f=I(o),i=0;for(let[h,a]of Object.entries(u.flows))for(let t of a.steps)if(t.symbol&&!f.has(t.symbol)){if(i++,R(e)){let d=y.join(c,a.definedIn);if(l.existsSync(d))try{let n=l.readFileSync(d,"utf8");if(!n.includes(`# broken: ${t.symbol}`)){n+=`
|
|
9
|
+
# broken: ${t.symbol} not found \u2014 ${h} step ${t.id} (${j()})
|
|
10
|
+
`,l.writeFileSync(d,n,"utf8"),s.push({check:"broken-flows",category:"broken",status:"fixed",symbol:t.symbol,file:a.definedIn,message:`${h} step ${t.id} references ${t.symbol} \u2014 not found`,fixAction:"Added broken step comment"});continue}}catch{}}s.push({check:"broken-flows",category:"broken",status:"entropy",symbol:t.symbol,file:a.definedIn,message:`${h} step ${t.id} references ${t.symbol} \u2014 symbol not in scan-index`});}return i===0&&s.push({check:"broken-flows",category:"broken",status:"ok",message:`All flow steps reference valid symbols (${Object.keys(u.flows).length} flows)`}),s}function U(c,o,u){let e=[],s=y.join(c,".paradigm","lore","entries");if(!l.existsSync(s))return e.push({check:"lore-rot",category:"lore-rot",status:"ok",message:"No lore entries \u2014 skipped"}),e;let f=o?I(o):new Map,i=0,h;try{h=l.readdirSync(s).filter(t=>{let d=y.join(s,t);return l.statSync(d).isDirectory()});}catch{return e.push({check:"lore-rot",category:"lore-rot",status:"ok",message:"Could not read lore directory \u2014 skipped"}),e}let a=0;for(let t of h){let d=y.join(s,t),n;try{n=l.readdirSync(d).filter(r=>r.endsWith(".yaml")||r.endsWith(".lore"));}catch{continue}for(let r of n){a++;let g=y.join(d,r),p;try{p=$.load(l.readFileSync(g,"utf8"));}catch{continue}let m=p.symbols_touched||[],S=p.files_modified||[],w=p.files_created||[],k=p.tags||[],v=[];if(o)for(let x of m)f.has(x)||v.push(x);let F=[];for(let x of [...S,...w]){let A=y.isAbsolute(x)?x:y.join(c,x);l.existsSync(A)||F.push(x);}if(v.length>0||F.length>0){i++;let x=p.id||r,A=[...v.length>0?[`dead symbols: ${v.join(", ")}`]:[],...F.length>0?[`missing files: ${F.length}`]:[]].join("; ");if(R(u))try{if(!k.includes("stale")){let N=[...k,"stale"];p.tags=N,l.writeFileSync(g,$.dump(p,{lineWidth:-1,noRefs:!0}),"utf8"),e.push({check:"lore-rot",category:"lore-rot",status:"fixed",symbol:x,file:g,message:`${x} \u2014 ${A}`,fixAction:"Added stale tag"});continue}}catch{}e.push({check:"lore-rot",category:"lore-rot",status:"entropy",symbol:x,file:g,message:`${x} \u2014 ${A}`});}}}return i===0&&e.push({check:"lore-rot",category:"lore-rot",status:"ok",message:`All ${a} lore entries have valid references`}),e}function X(c,o,u){let e=[],s=y.join(c,".paradigm","tags.yaml");if(!l.existsSync(s))return e.push({check:"tag-orphans",category:"tag-orphan",status:"ok",message:"No tags.yaml \u2014 skipped"}),e;let f;try{f=$.load(l.readFileSync(s,"utf8"));}catch{return e.push({check:"tag-orphans",category:"tag-orphan",status:"ok",message:"Could not parse tags.yaml \u2014 skipped"}),e}let i=new Set;for(let d of ["core","project"]){let n=f[d];if(n&&typeof n=="object")for(let r of Object.keys(n))i.add(r);}if(i.size===0)return e.push({check:"tag-orphans",category:"tag-orphan",status:"ok",message:"No tags defined"}),e;let h=new Set;for(let d of o)try{let n=l.readFileSync(d,"utf8"),r=n.matchAll(/tags:\s*\[([^\]]*)\]/g);for(let p of r){let m=p[1].split(",").map(S=>S.trim().replace(/['"]/g,"")).filter(Boolean);for(let S of m)h.add(S);}let g=$.load(n);if(g){let p=function(m){if(Array.isArray(m))for(let S of m)p(S);else if(m&&typeof m=="object"){let S=m;if(Array.isArray(S.tags))for(let w of S.tags)typeof w=="string"&&h.add(w);for(let w of Object.values(S))p(w);}};var t=p;p(g);}}catch{continue}let a=0;for(let d of i)if(!h.has(d)){if(a++,R(u))try{let n=$.load(l.readFileSync(s,"utf8")),r=!1;for(let g of ["core","project"])n[g]&&n[g][d]&&(delete n[g][d],r=!0);if(r){l.writeFileSync(s,$.dump(n,{lineWidth:-1,noRefs:!0}),"utf8"),e.push({check:"tag-orphans",category:"tag-orphan",status:"fixed",symbol:d,file:"tags.yaml",message:`Tag "${d}" \u2014 not used in any .purpose file`,fixAction:"Removed from tags.yaml"});continue}}catch{}e.push({check:"tag-orphans",category:"tag-orphan",status:"entropy",symbol:d,file:".paradigm/tags.yaml",message:`Tag "${d}" \u2014 defined in tag bank but not used in any .purpose file`});}return a===0&&e.push({check:"tag-orphans",category:"tag-orphan",status:"ok",message:`All ${i.size} tags are in use`}),e}function Q(c,o,u){let e=[],s=y.join(c,".paradigm","aspect-graph.db");if(!l.existsSync(s))return e.push({check:"aspect-semantic-drift",category:"semantic-drift",status:"ok",message:"No aspect-graph.db \u2014 skipped"}),e;if(!o||!o.aspects)return e.push({check:"aspect-semantic-drift",category:"semantic-drift",status:"ok",message:"No aspects in scan-index \u2014 skipped"}),e;let f=o.aspects,i=0;for(let[,h]of Object.entries(f)){let a=h.path.endsWith(".purpose")?h.path:y.join(h.path,".purpose");if(l.existsSync(a))try{let t=l.readFileSync(a,"utf8"),n=/anchors?:\s*\n((?:\s+-\s+.+\n?)*)/g.exec(t);if(!n)continue;let r=n[1].split(`
|
|
11
|
+
`).filter(g=>g.trim().startsWith("-"));for(let g of r){let p=g.match(/- (.+):(\d+)(?:-(\d+))?/);if(!p)continue;let m=p[1].trim(),S=parseInt(p[2],10),w=p[3]?parseInt(p[3],10):S,k=y.isAbsolute(m)?m:y.join(c,m);if(l.existsSync(k))try{let F=l.readFileSync(k,"utf8").split(`
|
|
12
|
+
`).length;(S>F||w>F)&&i++;}catch{}}}catch{continue}}return i>0?e.push({check:"aspect-semantic-drift",category:"semantic-drift",status:"entropy",message:`${i} aspect anchor(s) reference lines beyond file bounds \u2014 run "paradigm drift check" to repair`}):e.push({check:"aspect-semantic-drift",category:"semantic-drift",status:"ok",message:'Aspect anchors stable (use "paradigm drift check" for deep analysis)'}),e}function Z(c,o,u){let e=[],s=H(c);if(s.length===0)return e.push({check:"coverage-decay",category:"coverage-decay",status:"ok",message:"No source directories found"}),e;let f=new Set(o.map(a=>y.dirname(a))),i=[];for(let a of s){let t=false,d=a;for(;d.startsWith(c);){if(f.has(d)){t=true;break}let n=y.dirname(d);if(n===d)break;d=n;}t||i.push(a);}let h=s.length>0?Math.round((s.length-i.length)/s.length*100):100;if(h<O){if(R(u)){let a=0;for(let t of i){let d=y.join(t,".purpose");if(!l.existsSync(d))try{let n=y.basename(t),r=y.relative(c,t),g=[`# ${n}`,`# Auto-generated by paradigm sweep \u2014 ${j()}`,"# TODO: Add component descriptions and symbol declarations","",`#${n}:`,` description: "${r}"`," tags: []",""].join(`
|
|
13
|
+
`);l.writeFileSync(d,g,"utf8"),a++;}catch{}}if(a>0)return e.push({check:"coverage-decay",category:"coverage-decay",status:"fixed",message:`Coverage at ${h}% (threshold: ${O}%) \u2014 generated ${a} skeleton .purpose files`,fixAction:`Generated ${a} skeleton .purpose files`}),e}e.push({check:"coverage-decay",category:"coverage-decay",status:"entropy",message:`Coverage at ${h}% \u2014 below ${O}% threshold (${i.length} directories uncovered)`});}else e.push({check:"coverage-decay",category:"coverage-decay",status:"ok",message:`Coverage at ${h}% (${s.length} source dirs, ${o.length} .purpose files)`});return e}async function ee(c$1,o){let u=o.filter(t=>t.status==="entropy"),e=o.filter(t=>t.status==="fixed"),s=o.filter(t=>t.status==="ok"),f=new Set(o.map(t=>t.category)),i=o.filter(t=>t.symbol).map(t=>t.symbol).filter((t,d,n)=>n.indexOf(t)===d).slice(0,20),h=[`Sweep completed: ${f.size} categories checked.`,u.length>0?`${u.length} entropy issue(s) found.`:"",e.length>0?`${e.length} issue(s) auto-resolved.`:"",`${s.length} categories healthy.`].filter(Boolean).join(" "),a={id:"",type:"insight",timestamp:new Date().toISOString(),author:b$1(),title:`Sweep: ${u.length+e.length} issues, ${e.length} fixed`,summary:h,symbols_touched:i,tags:["arc:sweep","automated"]};try{return await c(c$1,a),a.id}catch{return null}}async function ae(c){let o=c.rootDir||process.cwd(),u=c.quiet,e=M(),s=a.command("sweep").start("Running entropy detection");u||(console.log(b.blue(`
|
|
14
|
+
Paradigm Sweep Report`)+b.gray(` \u2014 ${j()}`)),console.log(b.gray("===================================")),(c.dry||c.skipFix)&&console.log(b.yellow(` Mode: dry run (no fixes applied)
|
|
15
|
+
`))),e.start("Loading project data...");let f=W(o),i=z(o),h=B(o);e.succeed(`Loaded: ${f.length} .purpose files, scan-index ${i?"present":"absent"}`);let a$1=[],t=[{name:"Orphaned symbols",run:()=>q(o,i,f,c)},{name:"Stale purpose files",run:()=>Y(o,f,c)},{name:"Phantom gates",run:()=>J(o,c)},{name:"Dead signals",run:()=>V(o,i,f,c)},{name:"Broken flows",run:()=>K(o,i,h,c)},{name:"Lore rot",run:()=>U(o,i,c)},{name:"Tag orphans",run:()=>X(o,f,c)},{name:"Aspect semantic drift",run:()=>Q(o,i)},{name:"Coverage decay",run:()=>Z(o,f,c)}];for(let n of t){e.start(`Checking: ${n.name}...`);let r=await n.run();a$1.push(...r);let g=r.some(m=>m.status==="entropy"),p=r.some(m=>m.status==="fixed");g?e.warn(b.yellow(`${n.name}`)):p?e.succeed(b.green(`${n.name} (auto-fixed)`)):e.succeed(b.green(n.name));}if(!u){let n=i?I(i).size:0;console.log(b.gray(`
|
|
16
|
+
Checked: 9 categories, ${n} symbols, ${f.length} .purpose files
|
|
17
|
+
`));let r=a$1.filter(k=>k.status==="entropy");if(r.length>0){console.log(b.red.bold("ENTROPY FOUND:"));for(let k of r)console.log(` ${b.red(`[${k.category}]`)} ${k.message}`);console.log();}let g=a$1.filter(k=>k.status==="ok");if(g.length>0){console.log(b.green.bold("HEALTHY:"));for(let k of g)console.log(` ${b.green("[ok]")} ${k.check} \u2014 ${k.message}`);console.log();}let p=a$1.filter(k=>k.status==="fixed");if(p.length>0){console.log(b.cyan.bold("RESOLVED (auto-fixed):"));for(let k of p)console.log(` ${b.cyan("[fixed]")} ${k.message}`),k.fixAction&&console.log(b.gray(` ${k.fixAction}`));console.log();}let m=await ee(o,a$1),S=r.length+p.length,w=[`${S} issue${S!==1?"s":""} found`,p.length>0?`${p.length} auto-resolved`:null,m?`Lore recorded: ${m}`:null].filter(Boolean).join(", ");console.log(b.gray(`Summary: ${w}`)),console.log();}a$1.some(n=>n.status==="entropy")?s.error("Entropy detected",{entropy:a$1.filter(n=>n.status==="entropy").length,fixed:a$1.filter(n=>n.status==="fixed").length}):s.success("Clean sweep",{fixed:a$1.filter(n=>n.status==="fixed").length,ok:a$1.filter(n=>n.status==="ok").length});}export{ae as sweepCommand};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {a,g}from'./chunk-22ISTMKI.js';import'./chunk-LKAT7IAK.js';import'./chunk-5TAVYPOV.js';import*as m from'fs';import*as p from'path';import n from'chalk';import y from'ora';function C(){let o=process.cwd();for(let t=0;t<5;t++){if(m.existsSync(p.join(o,"packages","paradigm-mcp","dist","index.js")))return o;let i=p.dirname(o);if(i===o)break;o=i;}return null}function S(o,t){return o.toLowerCase().includes("paradigm")||t==="paradigm-mcp"||t.includes("paradigm-mcp")}function w(o,t,i){if(!m.existsSync(o.configPath))return {success:false,message:"Config file not found",changed:false};let r;try{let g=m.readFileSync(o.configPath,"utf-8");r=JSON.parse(g);}catch{return {success:false,message:"Could not parse config",changed:false}}let a=false;if(o.id==="continue"){let g=r?.experimental?.modelContextProtocolServers||[];for(let s of g){let e=s?.transport;if(!e)continue;(e.command==="paradigm-mcp"||e.command==="node"&&String(e.args?.[0]||"").includes("paradigm-mcp"))&&(t==="dev"?(e.command="node",e.args=[i,"."]):(e.command="paradigm-mcp",e.args=["."]),a=true);}}else {let g=r?.mcpServers||{};for(let[s,e]of Object.entries(g))S(s,e?.command||"")&&(t==="dev"?(e.command="node",e.args=[i,...e.args?.filter(c=>c!=="paradigm-mcp")||["."]],e.args.some(c=>c==="."||c.startsWith("/"))||e.args.push("."),e.args=[...new Set(e.args)]):(e.command="paradigm-mcp",e.args=["."]),a=true);}return a&&m.writeFileSync(o.configPath,JSON.stringify(r,null,2)+`
|
|
3
|
+
`),{success:true,message:a?`Switched to ${t} mode`:"No paradigm server found",changed:a}}async function k(o){let t=y(),i=C();if(!i){o.json?console.log(JSON.stringify({error:"Not in paradigm source repo or packages/paradigm-mcp/dist/index.js not found"})):(console.log(n.red(`
|
|
4
|
+
Not in paradigm source repo.`)),console.log(n.gray("Run from the a-paradigm directory, or ensure packages/paradigm-mcp/dist/index.js exists.")),console.log(n.gray("You may need to run `npm run build` first.\n")));return}let r=p.join(i,"packages","paradigm-mcp","dist","index.js");if(!m.existsSync(r)){o.json?console.log(JSON.stringify({error:"MCP dist not built",path:r})):(console.log(n.red(`
|
|
5
|
+
MCP dist not built.`)),console.log(n.gray(`Expected: ${r}`)),console.log(n.gray("Run `npm run build` first.\n")));return}o.json||(console.log(n.blue(`
|
|
6
|
+
\u{1F527} Switching to DEV mode
|
|
7
|
+
`)),console.log(n.gray(` Source: ${r}
|
|
8
|
+
`)));let a$1=a(),g=o.client?a$1.filter(c=>c.id===o.client):a$1,s=[];for(let c of g){t.start(`Switching ${c.name}...`);let d=w(c,"dev",r);d.changed?t.succeed(`${c.name} \u2192 DEV`):d.success?t.info(`${c.name}: ${d.message}`):t.warn(`${c.name}: ${d.message}`),s.push({client:c.id,changed:d.changed,message:d.message});}let e=s.filter(c=>c.changed).length;o.json||(console.log(),e>0?(console.log(n.green(`\u2713 Switched ${e} client(s) to DEV mode
|
|
9
|
+
`)),console.log(n.gray(" Restart your AI client(s) for changes to take effect.")),console.log(n.gray(" Run `paradigm mcp use-prod` to switch back.\n"))):(console.log(n.yellow(`No paradigm MCP servers found to switch.
|
|
10
|
+
`)),console.log(n.gray("Run `paradigm mcp setup` first to configure MCP.\n")))),o.json&&console.log(JSON.stringify({mode:"dev",devPath:r,results:s},null,2));}async function x(o){let t=y();o.json||console.log(n.blue(`
|
|
11
|
+
\u{1F527} Switching to PROD mode
|
|
12
|
+
`));let i=a(),r=o.client?i.filter(s=>s.id===o.client):i,a$1=[];for(let s of r){t.start(`Switching ${s.name}...`);let e=w(s,"prod","");e.changed?t.succeed(`${s.name} \u2192 PROD`):e.success?t.info(`${s.name}: ${e.message}`):t.warn(`${s.name}: ${e.message}`),a$1.push({client:s.id,changed:e.changed,message:e.message});}let g=a$1.filter(s=>s.changed).length;o.json||(console.log(),g>0?(console.log(n.green(`\u2713 Switched ${g} client(s) to PROD mode
|
|
13
|
+
`)),console.log(n.gray(` Restart your AI client(s) for changes to take effect.
|
|
14
|
+
`))):console.log(n.yellow(`No paradigm MCP servers found to switch.
|
|
15
|
+
`))),o.json&&console.log(JSON.stringify({mode:"prod",results:a$1},null,2));}async function O(o){console.log(n.blue(`
|
|
16
|
+
\u{1F50C} Paradigm MCP Status
|
|
17
|
+
`));let t=a(),i=[];for(let r of t){let g$1=g(r).filter(l=>S(l.name,l.command)),s="none",e=[];for(let l of g$1){let f="unknown";l.command==="paradigm-mcp"?f="prod":l.command==="node"&&l.args.some(P=>P.includes("paradigm-mcp"))&&(f="dev"),e.push({name:l.name,command:l.command,mode:f}),s==="none"&&(s=f);}let c=g$1.length>0,d=s==="dev"?n.yellow("[DEV]"):s==="prod"?n.green("[PROD]"):s==="none"?n.gray("[\u2014]"):n.gray("[?]"),v=r.detected?c?n.green("\u2713"):n.yellow("\u25CB"):n.gray("\u25CB"),M=c?`configured ${d}`:r.detected?n.yellow("not configured"):n.gray("not detected");if(console.log(` ${v} ${r.name}: ${M}`),c)for(let l of e){let f=l.mode==="dev"?n.yellow("DEV"):l.mode==="prod"?n.green("PROD"):n.gray("?");console.log(n.gray(` ${l.name}: ${l.command} (${f})`));}i.push({client:r.id,name:r.name,detected:r.detected,configured:c,mode:s,path:r.configPath,servers:e});}console.log(),o.json&&console.log(JSON.stringify(i,null,2));}export{O as mcpSwitchStatusCommand,k as mcpUseDevCommand,x as mcpUseProdCommand};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {e,d,i,h,f,q,p,s,r,a,o,t,u,k,B,x,z,y}from'./chunk-Z34K6GY2.js';import'./chunk-5TAVYPOV.js';import {Router}from'express';function G(u$1,p$1){let d$1=Router();return d$1.get("/agents",(i$1,s)=>{try{e();let e$1=d(),n=i(),a=new Set(e$1.map(t=>t.id));for(let t of n)a.has(t.id)||e$1.push(t);let r=e$1.map(t=>({id:t.id,name:t.name,project:t.project,role:t.role,status:h(t)?"asleep":"awake",lastPoll:t.lastPoll,startedAt:t.startedAt,statusBlurb:t.statusBlurb}));s.json({agents:r});}catch(e){s.status(500).json({error:"Failed to list agents",detail:String(e)});}}),d$1.get("/agents/me",(i,s)=>{try{let e=f(u$1);s.json({identity:e||null});}catch(e){s.status(500).json({error:"Failed to get identity",detail:String(e)});}}),d$1.get("/peers",async(i,s)=>{try{let{loadPeers:e}=await import('./symphony-peers-X5NGWXFP.js'),a=e().map(r=>({id:r.id,displayName:r.displayName,address:r.address,connectedAt:r.connectedAt,lastSeen:r.lastSeen,revoked:r.revoked,agents:r.agents||[]}));s.json({peers:a});}catch(e){s.status(500).json({error:"Failed to list peers",detail:String(e)});}}),d$1.get("/threads",(i,s)=>{try{let e=i.query.status,n;(e==="active"||e==="resolved")&&(n=e);let r=q(n).map(t=>({id:t.id,topic:t.topic,status:t.status,participants:t.participants.map(o=>({id:o.id,name:o.name,type:o.type})),messageCount:t.messageCount,lastActivity:t.lastActivity,decision:t.decision}));s.json({threads:r});}catch(e){s.status(500).json({error:"Failed to list threads",detail:String(e)});}}),d$1.get("/threads/:threadId",(i,s$1)=>{try{let{threadId:e}=i.params,n=p(e);if(!n){s$1.status(404).json({error:`Thread not found: ${e}`});return}let a=s(e),r=new Set;for(let t of a)for(let o of t.symbols)r.add(o);s$1.json({thread:{id:n.id,topic:n.topic,status:n.status,participants:n.participants.map(t=>({id:t.id,name:t.name,type:t.type})),messageCount:n.messageCount,lastActivity:n.lastActivity,decision:n.decision},messages:a.map(t=>({id:t.id,sender:{id:t.sender.id,name:t.sender.name,type:t.sender.type},intent:t.intent,text:t.content.text,timestamp:t.timestamp,symbols:t.symbols,diff:t.content.diff,decision:t.content.decision,recipients:t.recipients?.map(o=>({id:o.id,name:o.name}))})),symbolsDiscussed:[...r]});}catch(e){s$1.status(500).json({error:"Failed to load thread",detail:String(e)});}}),d$1.post("/threads/:threadId/resolve",(i,s)=>{try{let{threadId:e}=i.params,{decision:n}=i.body;if(!r(e,n)){s.status(404).json({error:`Thread not found: ${e}`});return}p$1&&p$1({type:"symphony:thread_resolved",threadId:e,decision:n}),s.json({resolved:!0,threadId:e,decision:n});}catch(e){s.status(500).json({error:"Failed to resolve thread",detail:String(e)});}}),d$1.post("/messages",(i,s)=>{try{let{intent:e,text:n,threadRoot:a$1,recipients:r,symbols:t$1,diff:o$1,decision:f}=i.body;if(!e||!n){s.status(400).json({error:"intent and text are required"});return}let l={id:`human/${a(u$1)}`,name:"Human (Platform UI)",type:"human"},g=a$1,b=!1;if(!a$1){let q=n.length>60?n.slice(0,60)+"...":n;g=o(q,l).id,b=!0;}let x;if(r&&r.length>0){let q=d();x=r.map(y=>{let R=q.find(H=>H.id===y);return R?{id:R.id,name:R.name,type:"agent"}:{id:y,name:y,type:"agent"}});}let c=t({sender:l,recipients:x,intent:e,text:n,threadRoot:g,symbols:t$1,diff:o$1,decision:f}),N=u(c);p$1&&p$1({type:"symphony:message",message:{id:c.id,sender:{id:l.id,name:l.name,type:l.type},intent:c.intent,text:c.content.text,timestamp:c.timestamp,symbols:c.symbols,diff:c.content.diff,decision:c.content.decision},threadId:g}),s.json({sent:!0,messageId:c.id,threadId:g,threadCreated:b,deliveredTo:N});}catch(e){s.status(500).json({error:"Failed to send message",detail:String(e)});}}),d$1.get("/inbox",(i,s)=>{try{let e=a(u$1),n=k(e);s.json({agentId:e,messages:n.map(a=>({id:a.id,sender:{id:a.sender.id,name:a.sender.name,type:a.sender.type},intent:a.intent,text:a.content.text,timestamp:a.timestamp,threadRoot:a.threadRoot,symbols:a.symbols}))});}catch(e){s.status(500).json({error:"Failed to read inbox",detail:String(e)});}}),d$1.get("/file-requests",(i,s)=>{try{B();let e=i.query.status,n;(e==="pending"||e==="approved"||e==="denied"||e==="expired")&&(n=e);let r=x(n).map(t=>({requestId:t.request.requestId,filePath:t.request.filePath,reason:t.request.reason,requester:{id:t.request.requester.id,name:t.request.requester.name},urgency:t.request.urgency,snippet:t.request.snippet,status:t.status,createdAt:t.createdAt,resolvedAt:t.resolvedAt,denyReason:t.denyReason}));s.json({fileRequests:r});}catch(e){s.status(500).json({error:"Failed to list file requests",detail:String(e)});}}),d$1.post("/file-requests/:requestId/action",(i,s)=>{try{let{requestId:e}=i.params,{action:n,reason:a}=i.body;if(!n){s.status(400).json({error:"action is required"});return}if(n==="deny"){let o=z(e,a);s.json({success:o,requestId:e,action:"denied",reason:a});return}let r=n==="approve-redacted",t=y(e,u$1,r);if(!t.success){s.status(400).json({success:!1,requestId:e,error:t.error});return}s.json({success:!0,requestId:e,action:r?"approved-redacted":"approved",filePath:t.delivery?.filePath,size:t.delivery?.size});}catch(e){s.status(500).json({error:"Failed to handle file request",detail:String(e)});}}),d$1.get("/status",(i,s)=>{try{e();let e$1=d(),n=e$1.filter(f=>!h(f)).length,a$1=q("active"),r=a(u$1),t=k(r),o=x("pending");s.json({agentCount:e$1.length,awakeCount:n,asleepCount:e$1.length-n,activeThreadCount:a$1.length,unreadCount:t.length,pendingFileRequests:o.length});}catch(e){s.status(500).json({error:"Failed to get status",detail:String(e)});}}),d$1}export{G as createSymphonyRouter};
|