@a-company/paradigm 5.37.0 → 5.37.2
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-36AP7HTX.js → accept-orchestration-SBZVK3H4.js} +1 -1
- package/dist/{add-FGKNJS3F.js → add-P76GEMGF.js} +1 -1
- package/dist/{agent-E7LDKJ4O.js → agent-X6I2YWOB.js} +1 -1
- package/dist/{agent-loader-2HXKVL6J.js → agent-loader-RIVI6QPP.js} +1 -1
- package/dist/{agent-loader-XS6LIMUG.js → agent-loader-RJRVO5GQ.js} +1 -1
- package/dist/{agent-state-L7LCPRC3.js → agent-state-KSQ3S7OB.js} +1 -1
- package/dist/{agents-suggest-Y5D6AALG.js → agents-suggest-HYTFMQD3.js} +1 -1
- package/dist/{aggregate-OZJRRAQR.js → aggregate-W66DM3GA.js} +1 -1
- package/dist/{ambient-4NSPAQDJ.js → ambient-GJAEXF7B.js} +4 -4
- package/dist/{assess-AMPVSWK7.js → assess-UFPYEJKP.js} +1 -1
- package/dist/{auto-A7VUHCUC.js → auto-RHJXOZFL.js} +1 -1
- package/dist/{beacon-YBLUUTYY.js → beacon-5QVYV5DF.js} +1 -1
- package/dist/{calibration-FQ4YVOE4.js → calibration-OLJYB5HN.js} +1 -1
- package/dist/{check-46QL3KMQ.js → check-THVGY4R5.js} +1 -1
- package/dist/{chunk-EMMMBAID.js → chunk-3KVVC4WV.js} +1 -1
- package/dist/{chunk-3QMRDN65.js → chunk-4Q7XYPL4.js} +2 -2
- package/dist/{chunk-3OMJI5TT.js → chunk-4SCKMGTB.js} +2 -2
- package/dist/chunk-5TAVYPOV.js +2 -0
- package/dist/{chunk-6PP2RPIZ.js → chunk-74SGKSRQ.js} +2 -2
- package/dist/{chunk-RN35IVA2.js → chunk-BV5PRPLB.js} +1 -1
- package/dist/{chunk-YG5G5GEQ.js → chunk-CMCQHU46.js} +13 -13
- package/dist/{chunk-JIF7OSGH.js → chunk-CVPKQ3JH.js} +1 -1
- package/dist/{chunk-RLJ5K3J5.js → chunk-D6ZXAI26.js} +1 -1
- package/dist/chunk-EK4ZRIFJ.js +3 -0
- package/dist/{chunk-X54WXWCX.js → chunk-FILLU77P.js} +5 -5
- package/dist/{chunk-7PB7AXQE.js → chunk-J6KWGCHN.js} +1 -1
- package/dist/{chunk-BCOPNVPY.js → chunk-JOHAOLEC.js} +2 -2
- package/dist/{chunk-JUOOVKK6.js → chunk-KFNHCQ4R.js} +1 -1
- package/dist/{chunk-77WX6HGV.js → chunk-LBQBWIEX.js} +1 -1
- package/dist/chunk-MBPLJKE5.js +3 -0
- package/dist/{chunk-W6WVJLHO.js → chunk-ODVKPZZ4.js} +1 -1
- package/dist/{chunk-5YHR77AL.js → chunk-ORDKEGII.js} +1 -1
- package/dist/chunk-QGZRM6ZB.js +2 -0
- package/dist/chunk-QO7YPQXC.js +2 -0
- package/dist/{chunk-DG3VCY43.js → chunk-SUU6M4JH.js} +1 -1
- package/dist/{chunk-XNB4TZTD.js → chunk-UNHTQLYO.js} +1 -1
- package/dist/chunk-UPFCBVXY.js +3 -0
- package/dist/{chunk-6QKCUEEY.js → chunk-VCKKJDLP.js} +1 -1
- package/dist/{chunk-4W5TBL3O.js → chunk-VG7FN2TU.js} +1 -1
- package/dist/{chunk-7YTAA6XA.js → chunk-WS2N27RX.js} +1 -1
- package/dist/{chunk-7SGNNVE5.js → chunk-X3U3IGYT.js} +2 -2
- package/dist/{chunk-IW5K3RNR.js → chunk-ZUAUFZRJ.js} +1 -1
- package/dist/{claude-OX54QSLC.js → claude-4LR3LJQZ.js} +1 -1
- package/dist/{claude-cli-FHLJQVJC.js → claude-cli-UP6HGH7C.js} +1 -1
- package/dist/{claude-code-GVGU3A3B.js → claude-code-RLJ4GX77.js} +1 -1
- package/dist/{claude-code-teams-ZRHPTGPP.js → claude-code-teams-R37HJY3Y.js} +1 -1
- package/dist/{compliance-PHSPVYK2.js → compliance-BPGQMQAX.js} +3 -3
- package/dist/{compliance-health-HCZTJDN7.js → compliance-health-JNP3P35P.js} +1 -1
- package/dist/conductor-HLU5R6ZY.js +9 -0
- package/dist/{config-schema-URJW6UZH.js → config-schema-GUQY2QN7.js} +1 -1
- package/dist/{constellation-PX3ZKMWQ.js → constellation-CG7C4WFE.js} +1 -1
- package/dist/{context-audit-APFKELFT.js → context-audit-XRPT3OU2.js} +2 -2
- package/dist/{cost-B5SAHPOJ.js → cost-IDNVMAEV.js} +1 -1
- package/dist/{cost-MMWUDGZC.js → cost-PK4KIF7R.js} +1 -1
- package/dist/{cursor-cli-Q2HLQ5TE.js → cursor-cli-QKF7Z6M2.js} +1 -1
- package/dist/{cursorrules-3BW6K6D5.js → cursorrules-U5O4G5T4.js} +1 -1
- package/dist/{decision-loader-4KMQVAXZ.js → decision-loader-2XPZE4EZ.js} +1 -1
- package/dist/{delete-7PQZUERZ.js → delete-P5VULXR4.js} +1 -1
- package/dist/{diff-F2HUO2H3.js → diff-JVEYCXUC.js} +1 -1
- package/dist/{discipline-ARFFIXQL.js → discipline-H7LDI6NT.js} +1 -1
- package/dist/{dist-MRZDZ5SX.js → dist-3ZCH25SG.js} +1 -1
- package/dist/{dist-KGRCLBJP-R5CCPPXN.js → dist-KGRCLBJP-2QAPFYNF.js} +1 -1
- package/dist/{dist-YUXXIXB3.js → dist-QBTQW4ZW.js} +1 -1
- package/dist/{dist-OKM6BXTH.js → dist-VGFSP3XM.js} +1 -1
- package/dist/{dist-VWC6FA46.js → dist-VXCZWVVJ.js} +1 -1
- package/dist/{dist-5IUWRFG6.js → dist-W3XCATBJ.js} +1 -1
- package/dist/{docs-6WOQILZS.js → docs-EDQ2STFK.js} +1 -1
- package/dist/{docs-BI2DO7B2.js → docs-USDAF26F.js} +2 -2
- package/dist/doctor-G37LCXG5.js +2 -0
- package/dist/{drift-6QPDKKUO.js → drift-ILZE5BFJ.js} +1 -1
- package/dist/{echo-3JJDKCNF.js → echo-UPTQUEDU.js} +1 -1
- package/dist/{edit-PLCGL5OV.js → edit-GUU3HBVW.js} +1 -1
- package/dist/{enforcement-IWABOHMY.js → enforcement-46XWPNSA.js} +1 -1
- package/dist/{enforcement-5MHSQAXE.js → enforcement-BEGPQIUN.js} +1 -1
- package/dist/{event-5J3GBWKT.js → event-Y3VXC2RV.js} +1 -1
- package/dist/{explain-files-LPHTJL4N.js → explain-files-3GPZUETV.js} +1 -1
- package/dist/{export-NXUFTFPW.js → export-CV5KCTPS.js} +1 -1
- package/dist/{flow-IT2IVXXT.js → flow-POQP27WA.js} +1 -1
- package/dist/{gap-narrator-DVXPWNFN.js → gap-narrator-NTXLUI7I.js} +1 -1
- package/dist/{global-J2VTYKCC.js → global-C44FW4G2.js} +1 -1
- package/dist/{graduate-N2HF4JT6.js → graduate-3BBSC27A.js} +1 -1
- package/dist/graph-CNDE5TAT.js +2 -0
- package/dist/{graph-server-TBHHBFOM.js → graph-server-COZR5C3Z.js} +1 -1
- package/dist/{habits-JTMWGVPH.js → habits-BX2IRSUI.js} +3 -3
- package/dist/{history-FHS7EC3Z.js → history-UW454SDP.js} +1 -1
- package/dist/{hooks-BL6CXRVK.js → hooks-BNWRGACA.js} +1 -1
- package/dist/index.js +5 -5
- package/dist/init-EHVSM7YY.js +2 -0
- package/dist/{integrity-UBMZCB77.js → integrity-UYDOOJDP.js} +1 -1
- package/dist/{integrity-checker-VSR3ITBL.js → integrity-checker-DHGMZQDG.js} +1 -1
- package/dist/journal-loader-GLH7XFTK.js +2 -0
- package/dist/{lint-KQQ2RMSJ.js → lint-IGKE6UPS.js} +1 -1
- package/dist/{list-37UCWCOQ.js → list-5IUGP3ZB.js} +1 -1
- package/dist/{list-6WY4CFUR.js → list-YKIQNKGB.js} +1 -1
- package/dist/lore-loader-RVQI5GXL.js +2 -0
- package/dist/{lore-loader-PBUDKXAJ.js → lore-loader-XY5MZRR2.js} +1 -1
- package/dist/{lore-server-A3KKZLSY.js → lore-server-FC2GMDLT.js} +1 -1
- package/dist/{manual-HKI6OXB4.js → manual-RXSPSFLL.js} +1 -1
- package/dist/mcp.js +1 -1
- package/dist/{migrate-W3KCXLDS.js → migrate-YQG2FG3J.js} +2 -2
- package/dist/{migrate-assessments-D2TOBJ5V.js → migrate-assessments-GEI5WMI2.js} +1 -1
- package/dist/{model-discovery-TWX4A4YD.js → model-discovery-HMB3YI4L.js} +1 -1
- package/dist/{nomination-engine-A24774W4.js → nomination-engine-KNSOAT4W.js} +1 -1
- package/dist/{notebook-LXJ2LHUA.js → notebook-PE3JSYZI.js} +1 -1
- package/dist/notebook-loader-CENTDDUJ.js +2 -0
- package/dist/{orchestrate-WFCNV2II.js → orchestrate-RCAMBOIB.js} +1 -1
- package/dist/{peers-7TPZTKH7.js → peers-P2KXU7ZK.js} +1 -1
- package/dist/{persona-UGTCFEGT.js → persona-STQWZH5P.js} +1 -1
- package/dist/{pipeline-7PZ6ILWX.js → pipeline-MZUITRVN.js} +1 -1
- package/dist/{platform-server-YIBX4YDJ.js → platform-server-DNAMH4YI.js} +2 -2
- package/dist/{plugin-update-checker-2EM4K45U.js → plugin-update-checker-M7PW434O.js} +1 -1
- package/dist/{portal-check-YSDJRZUR.js → portal-check-Z3OCQEQR.js} +1 -1
- package/dist/{portal-compliance-OBPK2IR5.js → portal-compliance-4MG5F2GI.js} +1 -1
- package/dist/{probe-WKXR3IN4.js → probe-B22G2JKF.js} +1 -1
- package/dist/{project-type-MRBJAKC7.js → project-type-EUCFKEAZ.js} +1 -1
- package/dist/{promote-VHBA56KW.js → promote-NJQDZBZA.js} +2 -2
- package/dist/{providers-RX7SBLHZ.js → providers-AWA7WLLM.js} +1 -1
- package/dist/{quiz-3SQNPRJ3.js → quiz-FE5UGAY2.js} +1 -1
- package/dist/{record-7QJPZZP7.js → record-YXPB34MY.js} +1 -1
- package/dist/{registry-LR5QACRK.js → registry-KOOKFUWD.js} +2 -2
- package/dist/reindex-O3WUCEE2.js +2 -0
- package/dist/{remember-SFGBTTEE.js → remember-MJRNTXYS.js} +1 -1
- package/dist/{retag-GFXUYP7S.js → retag-N5XF3KXP.js} +1 -1
- package/dist/{review-6KKZWV3A.js → review-6UAH6V3R.js} +1 -1
- package/dist/{review-GEBSYOZB.js → review-77QI6VOC.js} +1 -1
- package/dist/{ripple-4F5ZCXS4.js → ripple-ZGDITCGB.js} +1 -1
- package/dist/{roster-RI3UC2YI.js → roster-HV5KYUOI.js} +1 -1
- package/dist/{scaffold-WA4L2K7J.js → scaffold-D57JXPCC.js} +1 -1
- package/dist/{scopes-commands-5FFIUDRC.js → scopes-commands-NSPERZWV.js} +1 -1
- package/dist/{sentinel-37ZEEWT7.js → sentinel-HYAZ3CO5.js} +2 -2
- package/dist/{sentinel-bridge-EZGFRVFH.js → sentinel-bridge-VR357PKL.js} +1 -1
- package/dist/{serve-2BXDL35A.js → serve-L52ZUTU6.js} +2 -2
- package/dist/{serve-5JME5QEM.js → serve-OY6XYL7F.js} +2 -2
- package/dist/{serve-2LSTQFFQ.js → serve-U47GULB6.js} +2 -2
- package/dist/{server-XLHIYDTZ.js → server-2MNROHF6.js} +1 -1
- package/dist/{server-AIXFROYL.js → server-4YNUIK4W.js} +1 -1
- package/dist/session-tracker-D2CH7RJF.js +2 -0
- package/dist/{session-work-log-6GKGUQ5C.js → session-work-log-BX434ZLK.js} +1 -1
- package/dist/{session-work-log-UYMIWWOX.js → session-work-log-NQA7WJEC.js} +1 -1
- package/dist/{setup-ZM4JFV5D.js → setup-3F5IK7MO.js} +2 -2
- package/dist/{setup-F2N4LUR7.js → setup-KPIMRZ4Q.js} +1 -1
- package/dist/{shift-DDYVQJ75.js → shift-RRNL6E4O.js} +3 -3
- package/dist/{show-RFOIR2GQ.js → show-BOAVWZPZ.js} +1 -1
- package/dist/{show-CZLVYLM5.js → show-PJ5LFLIL.js} +1 -1
- package/dist/{snapshot-6N564OUJ.js → snapshot-L2G56RPL.js} +1 -1
- package/dist/{spawn-HYARN3RL.js → spawn-M5BAV252.js} +1 -1
- package/dist/{status-WBJ6D7BD.js → status-77M3SDIF.js} +1 -1
- package/dist/{status-CUG3PKGC.js → status-A37ECYNJ.js} +1 -1
- package/dist/{summary-2AM4QVPW.js → summary-LXLHFRN7.js} +1 -1
- package/dist/{sweep-WHDT7ENV.js → sweep-HU74OPVW.js} +1 -1
- package/dist/{switch-HBGIFNF6.js → switch-CTW4PDGI.js} +1 -1
- package/dist/{symphony-CWKKMFAS.js → symphony-7INZR43F.js} +5 -5
- package/dist/{symphony-VTHVTE57.js → symphony-G6IENE4K.js} +1 -1
- package/dist/{symphony-loader-RYFZOQJS.js → symphony-loader-VA4UREOM.js} +1 -1
- package/dist/{symphony-peers-LWBUQ3T4.js → symphony-peers-U4KHMKGI.js} +1 -1
- package/dist/{symphony-peers-ISJPKX7W.js → symphony-peers-X5NGWXFP.js} +1 -1
- package/dist/{symphony-relay-L3BY6RGM.js → symphony-relay-2RHG25Z4.js} +1 -1
- package/dist/{sync-WIFD7UCL.js → sync-DLUBV5HQ.js} +1 -1
- package/dist/{sync-llms-MZ3RQWFX.js → sync-llms-7CAI74QL.js} +1 -1
- package/dist/{task-loader-EU7JLTR3.js → task-loader-NZFDTUQ5.js} +1 -1
- package/dist/{team-C3PWO7XL.js → team-NSP6PMPS.js} +1 -1
- package/dist/{test-6MUL4EXS.js → test-BQJMS4Y2.js} +1 -1
- package/dist/{thread-K6UHDIUW.js → thread-HFXK65D4.js} +1 -1
- package/dist/{timeline-S26CQWHT.js → timeline-K3ZFKJ3R.js} +1 -1
- package/dist/tools-NNPANZRA.js +2 -0
- package/dist/{triage-YF6WYZY4.js → triage-FCWOZASE.js} +1 -1
- package/dist/{tutorial-UEBX7Z2G.js → tutorial-UC6YQMNN.js} +1 -1
- package/dist/{university-UMT7PAKE.js → university-FJ7OCOA3.js} +1 -1
- package/dist/{upgrade-USW7YJEX.js → upgrade-GX56QE3C.js} +1 -1
- package/dist/{validate-VZGBVTPM.js → validate-C6SMKGYD.js} +1 -1
- package/dist/{validate-2PZTNYSS.js → validate-LSCDOLBO.js} +1 -1
- package/dist/{validate-KW3YFGTV.js → validate-VZXTJHGO.js} +1 -1
- package/dist/{watch-KQU3S7KE.js → watch-PZCCUP6K.js} +1 -1
- package/dist/{watch-HL3ZOALL.js → watch-YCODNIET.js} +1 -1
- package/dist/{wisdom-UU7HOE3M.js → wisdom-XZ3QKPNP.js} +1 -1
- package/dist/{work-log-loader-J27XSFCE.js → work-log-loader-DL5GZ2BQ.js} +1 -1
- package/dist/workspace-MKSQN7B2.js +2 -0
- package/package.json +1 -1
- package/dist/chunk-BRHQJLTG.js +0 -2
- package/dist/chunk-DSYEGRQ2.js +0 -3
- package/dist/chunk-F5BSUC2L.js +0 -3
- package/dist/chunk-NFQLONFY.js +0 -3
- package/dist/chunk-OVDYPOHR.js +0 -2
- package/dist/chunk-XHJ27CER.js +0 -2
- package/dist/conductor-LYBMM66Z.js +0 -4
- package/dist/doctor-JLTCBMS4.js +0 -2
- package/dist/graph-VLMP6DW2.js +0 -2
- package/dist/init-ZS7RAR7L.js +0 -2
- package/dist/journal-loader-EELDB4P2.js +0 -2
- package/dist/lore-loader-CP5RUJ4A.js +0 -2
- package/dist/notebook-loader-CF52PNZC.js +0 -2
- package/dist/reindex-F7EV3Z34.js +0 -2
- package/dist/session-tracker-VSFRNFRL.js +0 -2
- package/dist/tools-4WKLLDFU.js +0 -2
- package/dist/workspace-CE6LNXVI.js +0 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {D as D$1,m,o,r,p,x,y}from'./chunk-T6IDXUUA.js';import'./chunk-JIXHEBGK.js';import'./chunk-QT2LKB3P.js';import {a}from'./chunk-LKAT7IAK.js';import'./chunk-
|
|
2
|
+
import {D as D$1,m,o,r,p,x,y}from'./chunk-T6IDXUUA.js';import'./chunk-JIXHEBGK.js';import'./chunk-QT2LKB3P.js';import {a}from'./chunk-LKAT7IAK.js';import'./chunk-5TAVYPOV.js';import*as u from'path';import e from'chalk';import F from'ora';function I(s,t){let r$1=r(t,"flow"),a=[];for(let p of r$1){let l=p.data,i=l?.sequence||l?.gates||p.references,g=i.indexOf(s);g!==-1&&a.push({flow:p.symbol,position:g+1,total:i.length});}return a}function O(s){let t=u.dirname(s),r=`${t}/**/*.test.{ts,tsx}`,a=`npm test -- --testPathPattern="${t}"`;return {testPath:r,testCommand:a}}function C(s){return {components:s.filter(t=>t.type==="component").map(t=>t.symbol),gates:s.filter(t=>t.type==="gate").map(t=>t.symbol),signals:s.filter(t=>t.type==="signal").map(t=>t.symbol),flows:s.filter(t=>t.type==="flow").map(t=>t.symbol),aspects:s.filter(t=>t.type==="aspect").map(t=>t.symbol)}}function B(s,t){let r=p(t,s);if(!r)return null;let a=x(t,s),p$1=y(t,s),l=C(a),i=C(p$1),g=I(s,t),{testPath:m,testCommand:y$1}=O(r.filePath);return {symbol:r.symbol,type:r.type,path:r.filePath,description:r.description,requires:r.references,requiredBy:r.referencedBy,downstream:{components:l.components,signals:l.signals,aspects:l.aspects},upstream:{gates:i.gates,flows:i.flows},partOfFlows:g,testPath:m,testCommand:y$1}}async function D(s,t,r$1={}){let a$1=process.cwd(),p=t?u.resolve(a$1,t):a$1,l=D$1(s);l||(console.log(e.red(`
|
|
3
3
|
\u274C Invalid symbol format: ${s}`)),console.log(e.gray(" Symbols must start with @, #, ^, !, $, %, ~, or ?")),console.log(e.gray(` Example: paradigm ripple @checkout
|
|
4
4
|
`)),process.exit(1)),!r$1.quiet&&!r$1.json&&console.log(e.blue(`
|
|
5
5
|
\u{1F30A} Ripple Analysis for ${e.cyan(s)}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {a as a$1,f,c,e,g as g$1,b as b$1,d}from'./chunk-WR6D3SC6.js';import {a}from'./chunk-LKAT7IAK.js';import'./chunk-
|
|
2
|
+
import {a as a$1,f,c,e,g as g$1,b as b$1,d}from'./chunk-WR6D3SC6.js';import {a}from'./chunk-LKAT7IAK.js';import'./chunk-5TAVYPOV.js';import*as g from'fs';import*as m from'path';import*as b from'os';import r from'chalk';import*as $ from'js-yaml';var x=m.join(b.homedir(),".paradigm","agents"),O=".agent";function C(){return m.join(process.cwd(),".paradigm","roster.yaml")}function k(){let n=C();if(!g.existsSync(n))return null;try{return $.load(g.readFileSync(n,"utf-8"))}catch{return null}}function F(n){let s=C(),c=m.dirname(s);g.existsSync(c)||g.mkdirSync(c,{recursive:true}),g.writeFileSync(s,$.dump(n,{lineWidth:-1,noRefs:true,sortKeys:false}),"utf-8");}function E(){if(!g.existsSync(x))return [];try{return g.readdirSync(x).filter(n=>n.endsWith(O)).map(n=>n.replace(O,"")).sort()}catch{return []}}function P(n){let s=m.join(x,`${n}${O}`);if(!g.existsSync(s))return null;try{let c=$.load(g.readFileSync(s,"utf-8"));return {id:c.id||n,nickname:c.nickname,role:c.role||"Unknown"}}catch{return null}}async function U(n={}){let s=process.cwd(),c$1=a.command("agent-roster-show").start("Showing project roster",{cwd:s}),o=E().length,i=k();if(!i){n.json?a$1(JSON.stringify({roster:null,message:"No roster configured",totalAgents:o})):(f("Agent Roster"),a$1(""),c(`No roster configured \u2014 all ${o} agents are active.`),e(` Run ${r.cyan("paradigm agent roster init")} to create one.`),a$1("")),c$1.success("No roster found");return}let t=i.active||[];if(n.json){let h=t.map(y=>P(y)||{id:y,role:"Unknown"});a$1(JSON.stringify({count:t.length,total:o,project:i.project,type:i.type,agents:h},null,2)),c$1.success(`${t.length} of ${o} agents active`);return}f("Agent Roster"),a$1("");let a$2="ID".padEnd(16),l="Nickname".padEnd(12);a$1(` ${r.dim(a$2)} ${r.dim(l)} ${r.dim("Role")}`),a$1(` ${r.dim("-".repeat(16))} ${r.dim("-".repeat(12))} ${r.dim("-".repeat(30))}`);for(let h of t.sort()){let y=P(h),f=y?.nickname||r.dim("\u2014"),S=y?.role||r.dim("Unknown");a$1(` ${r.white.bold(h.padEnd(16))} ${f.toString().padEnd(12)} ${r.gray(S)}`);}a$1(""),a$1(` ${r.cyan(String(t.length))} of ${r.cyan(String(o))} agents active on this project`),i.type&&g$1("Project type",i.type),a$1(""),c$1.success(`${t.length} of ${o} agents active`);}async function G(n={}){let s=process.cwd(),c$1=a.command("agent-roster-init").start("Initializing project roster",{cwd:s}),u=C();if(g.existsSync(u)&&!n.force){let S=k()?.active?.length??0;n.json?a$1(JSON.stringify({error:"Roster already exists",count:S})):(c(`Roster already exists with ${S} agents.`),e(` Use ${r.cyan("--force")} to reinitialize, or ${r.cyan("paradigm agent roster add/remove")} to modify.`)),c$1.error("Roster already exists");return}let{detectProjectType:o,ROSTER_SUGGESTIONS:i}=await import('./project-type-EUCFKEAZ.js'),t=o(s),a$2=i[t]||i.generic,l=m.basename(s),d=m.join(s,".paradigm","config.yaml");if(g.existsSync(d))try{let f=$.load(g.readFileSync(d,"utf-8"));f?.project&&typeof f.project=="string"&&(l=f.project);}catch{}let h={version:"1.0",project:l,type:t,active:a$2.sort()};F(h);let y=E();n.json?a$1(JSON.stringify({created:true,project:l,type:t,active:a$2.sort(),count:a$2.length,total:y.length},null,2)):(f("Agent Roster Initialized"),a$1(""),g$1("Project",l),g$1("Detected type",t),g$1("Active agents",`${a$2.length} of ${y.length}`),a$1(""),a$1(` ${r.cyan(a$2.sort().join(", "))}`),a$1(""),b$1(`Roster written to ${r.dim(".paradigm/roster.yaml")}`),e(` Modify with ${r.cyan("paradigm agent roster add/remove <agent-id>")}`),a$1("")),c$1.success(`Created roster: ${a$2.length} agents for ${t}`);}async function _(n,s={}){let c=process.cwd(),u=a.command("agent-roster-add").start(`Adding agents: ${n.join(", ")}`,{cwd:c}),o=k();if(!o){s.json?a$1(JSON.stringify({error:"No roster found. Run `paradigm agent roster init` first."})):(d("No roster found."),e(` Run ${r.cyan("paradigm agent roster init")} first.`)),u.error("No roster found");return}let i=E(),t=[],a$2=[],l=[];for(let d of n){if(!i.includes(d)){t.push(d);continue}if(o.active.includes(d)){a$2.push(d);continue}o.active.push(d),l.push(d);}l.length>0&&(o.active.sort(),F(o)),s.json?a$1(JSON.stringify({added:l,alreadyActive:a$2,invalid:t,total:o.active.length},null,2)):(l.length>0&&b$1(`Added: ${r.cyan(l.join(", "))}`),a$2.length>0&&e(` Already active: ${a$2.join(", ")}`),t.length>0&&(d(`Unknown agent(s): ${t.join(", ")}`),e(` Available: ${i.join(", ")}`)),l.length>0&&a$1(` Roster now has ${r.cyan(String(o.active.length))} active agents.`)),u.success(`Added ${l.length}, skipped ${a$2.length}, invalid ${t.length}`);}async function z(n,s={}){let c$1=process.cwd(),u=a.command("agent-roster-remove").start(`Removing agents: ${n.join(", ")}`,{cwd:c$1}),o=k();if(!o){s.json?a$1(JSON.stringify({error:"No roster found. Run `paradigm agent roster init` first."})):(d("No roster found."),e(` Run ${r.cyan("paradigm agent roster init")} first.`)),u.error("No roster found");return}let i=[],t=[];for(let a of n){let l=o.active.indexOf(a);if(l<0){i.push(a);continue}o.active.splice(l,1),t.push(a);}t.length>0&&F(o),s.json?a$1(JSON.stringify({removed:t,notFound:i,total:o.active.length},null,2)):(t.length>0&&b$1(`Removed: ${r.cyan(t.join(", "))}`),i.length>0&&c(`Not in roster: ${i.join(", ")}`),t.length>0&&a$1(` Roster now has ${r.cyan(String(o.active.length))} active agents.`)),u.success(`Removed ${t.length}, not found ${i.length}`);}export{_ as rosterAddCommand,G as rosterInitCommand,z as rosterRemoveCommand,U as rosterShowCommand};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import'./chunk-
|
|
2
|
+
import'./chunk-5TAVYPOV.js';import*as i from'fs';import*as r from'path';import o from'chalk';var m=["specs","implementation-guides","prompts","decisions"];function f(e){let s=new Date().toISOString().slice(0,10);return `# .index.yaml
|
|
3
3
|
# AI navigation index \u2014 read this before reading any file in this directory
|
|
4
4
|
version: 1.0.0
|
|
5
5
|
description: TODO: Describe what .paradigm/${e}/ contains
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {a as a$2}from'./chunk-Z72SDTBJ.js';import {h,f,a as a$1,e,d,b,g as g$1,c}from'./chunk-WR6D3SC6.js';import {a}from'./chunk-LKAT7IAK.js';import'./chunk-
|
|
2
|
+
import {a as a$2}from'./chunk-Z72SDTBJ.js';import {h,f,a as a$1,e,d,b,g as g$1,c}from'./chunk-WR6D3SC6.js';import {a}from'./chunk-LKAT7IAK.js';import'./chunk-5TAVYPOV.js';import g from'chalk';import*as v from'fs/promises';import*as $ from'path';import*as S from'js-yaml';var F=".paradigm/adoptions.yaml",E=".paradigm/.pending-scope-reviews";function k(e,o){let s=e?.permissions??[],r=o.permissions??[],n=new Map;for(let p of s)n.set(p.id,p);let t=new Map;for(let p of r)t.set(p.id,p);let i=[],d=[],a=[],f=[];for(let p of r){let j=n.get(p.id);j?j.description!==p.description?(i.push({scope:p,status:"expanded"}),f.push(p)):(i.push({scope:p,status:"kept"}),f.push(p)):(i.push({scope:p,status:"new"}),d.push(p));}for(let p of s)t.has(p.id)||(i.push({scope:p,status:"removed"}),a.push(p));let m=d.length>0;return {agentId:"",previousVersion:e?.version??"0.0.0",newVersion:o.version,added:d,removed:a,kept:f,entries:i,requiresApproval:m}}function D(e,o,s,r){let n=[];s&&r?n.push(` Updating ${g.white.bold(o)} ${g.dim(s)} ${g.dim("\u2192")} ${g.dim(r)}...`):n.push(` Scopes for ${g.white.bold(o)}:`),n.push(""),n.push(` ${g.dim("Scope changes:")}`),n.push(` ${g.dim("\u2500".repeat(49))}`);for(let i of e.entries){let d=i.scope.id,a=i.scope.description;switch(i.status){case "kept":n.push(` ${g.dim("[kept]")} ${d.padEnd(24)} ${g.dim(a)}`);break;case "expanded":n.push(` ${g.yellow("[expanded]")} ${d.padEnd(24)} ${g.yellow(a)}`);break;case "new":n.push(` ${g.green("+")} ${g.green("[new]")} ${g.green(d.padEnd(24))} ${g.green(a)}`);break;case "removed":n.push(` ${g.red("-")} ${g.red("[removed]")} ${g.red(d.padEnd(24))} ${g.red(a)}`);break}}n.push("");let t=[];return e.added.length>0&&t.push(g.green(`${e.added.length} new`)),e.removed.length>0&&t.push(g.red(`${e.removed.length} removed`)),e.kept.length>0&&t.push(g.dim(`${e.kept.length} unchanged`)),t.length>0&&n.push(` ${t.join(", ")}`),n.join(`
|
|
3
3
|
`)}async function O(e){let o=$.join(e,F);try{let s=await v.readFile(o,"utf-8");return S.load(s)??null}catch{return null}}async function V(e,o){let s=$.join(e,F),r=$.dirname(s);await v.mkdir(r,{recursive:true}),await v.writeFile(s,S.dump(o,{lineWidth:120,noRefs:true,sortKeys:false}),"utf-8");}async function q(e,o,s){a.component("#scopes-approval").info("Approving scopes",{agentId:o});let n=await O(e);n||(n={version:"1.0","adopted-at":"","project-type":"",agents:{}});let t=n.agents??{},i=new Date().toISOString().split("T")[0],d={...s,approved:i};t[o]||(t[o]={}),t[o]["scopes-approved"]=i,t[o].scopes=d,n.agents=t,await V(e,n),await C(e,o),a.component("#scopes-approval").info("Scopes approved",{agentId:o,date:i});}async function T(e,o){a.component("#scopes-denial").info("Denying scopes",{agentId:o});let s=await O(e);s||(s={version:"1.0","adopted-at":"","project-type":"",agents:{}});let r=s.agents??{};r[o]||(r[o]={}),r[o]["scopes-denied"]=new Date().toISOString().split("T")[0],s.agents=r,await V(e,s),await C(e,o),a.component("#scopes-denial").info("Scopes denied",{agentId:o});}async function R(e){let o=$.join(e,E);try{let s=await v.readFile(o,"utf-8"),r=S.load(s);if(!r?.reviews)return {};let n={};for(let[t,i]of Object.entries(r.reviews))n[t]={old:i.old??void 0,new:i.new};return n}catch{return {}}}async function C(e,o){let s=$.join(e,E);try{let r=await v.readFile(s,"utf-8"),n=S.load(r);if(!n?.reviews)return;delete n.reviews[o],Object.keys(n.reviews).length===0?await v.unlink(s):await v.writeFile(s,S.dump(n,{lineWidth:120,noRefs:!0,sortKeys:!1}),"utf-8");}catch{}}async function U(e$1,o={}){let s=process.cwd(),r=a.command("agent-review").start("Reviewing agent scopes",{cwd:s,id:e$1}),n=await R(s),t=Object.keys(n);if(t.length===0){o.json?h({pending:0,agents:[]}):(f("Agent Scope Reviews"),a$1(""),e(" No pending scope reviews."),a$1("")),r.success("No pending reviews");return}if(!e$1){if(o.json){let a=t.map(f=>{let m=n[f],p=k(m.old,m.new);return {id:f,added:p.added.length,removed:p.removed.length,kept:p.kept.length,requiresApproval:p.requiresApproval}});h({pending:t.length,agents:a});}else {f("Pending Scope Reviews"),a$1(""),a$1(` ${g.cyan(String(t.length))} agent(s) with pending scope changes:`),a$1("");for(let a of t){let f=n[a],m=k(f.old,f.new),p=m.added.length>0?g.green(`+${m.added.length} new`):"",j=m.removed.length>0?g.red(`-${m.removed.length} removed`):"",M=[p,j].filter(Boolean).join(", ");a$1(` ${g.white.bold(a.padEnd(20))} ${M||g.dim("description changes only")}`);}a$1(""),e(` Review individually: ${g.cyan("paradigm agent review <id>")}`),e(` Quick approve: ${g.cyan("paradigm agent approve <id>")}`),a$1("");}r.success(`${t.length} pending reviews listed`);return}let i=n[e$1];if(!i){o.json?h({error:`No pending review for agent "${e$1}"`}):(d(`No pending scope review for agent "${e$1}".`),t.length>0&&e(` Pending reviews exist for: ${t.join(", ")}`)),r.error(`No pending review for ${e$1}`);return}let d$1=k(i.old,i.new);d$1.agentId=e$1,o.json?h({agentId:e$1,diff:{previousVersion:d$1.previousVersion,newVersion:d$1.newVersion,added:d$1.added,removed:d$1.removed,kept:d$1.kept,requiresApproval:d$1.requiresApproval}}):(f("Scope Review"),a$1(""),a$1(D(d$1,e$1,d$1.previousVersion,d$1.newVersion)),a$1(""),d$1.requiresApproval?(e(` To approve: ${g.cyan(`paradigm agent approve ${e$1}`)}`),e(` To deny: ${g.cyan(`paradigm agent deny ${e$1}`)}`)):(e(" No new scopes \u2014 description changes only. Auto-approvable."),e(` Approve: ${g.cyan(`paradigm agent approve ${e$1}`)}`)),a$1("")),r.success(`Showed review for ${e$1}`);}async function H(e$1,o={}){let s=process.cwd(),r=a.command("agent-approve").start("Approving agent scopes",{cwd:s,id:e$1}),n=await R(s),t=n[e$1];if(!t){if(o.json)h({error:`No pending review for agent "${e$1}"`});else {d(`No pending scope review for agent "${e$1}".`);let i=Object.keys(n);i.length>0?e(` Pending reviews exist for: ${i.join(", ")}`):e(" No pending reviews.");}r.error(`No pending review for ${e$1}`);return}await q(s,e$1,t.new),o.json?h({agentId:e$1,approved:true,scopeVersion:t.new.version,permissions:t.new.permissions.length}):(b(`Scopes approved for ${g.white.bold(e$1)}`),g$1("Scope version",t.new.version),g$1("Permissions",String(t.new.permissions.length)),a$1("")),r.success(`Approved scopes for ${e$1}`);}async function J(e$1,o={}){let s=process.cwd(),r=a.command("agent-deny").start("Denying agent scopes",{cwd:s,id:e$1}),n=await R(s);if(!n[e$1]){if(o.json)h({error:`No pending review for agent "${e$1}"`});else {d(`No pending scope review for agent "${e$1}".`);let i=Object.keys(n);i.length>0?e(` Pending reviews exist for: ${i.join(", ")}`):e(" No pending reviews.");}r.error(`No pending review for ${e$1}`);return}await T(s,e$1),o.json?h({agentId:e$1,denied:true,message:"Agent will continue using previously approved scopes."}):(c(`Scopes denied for ${g.white.bold(e$1)}`),e(" Agent will continue using previously approved scopes."),a$1("")),r.success(`Denied scopes for ${e$1}`);}async function X(e$1,o={}){let s=process.cwd(),r=a.command("agent-scopes").start("Showing agent scopes",{cwd:s,id:e$1}),n=await a$2(s);if(!n||!n.agents[e$1]){o.json?h({error:`Agent "${e$1}" not found in adoptions`}):(d(`Agent "${e$1}" not found in adoption records.`),e(` Run ${g.cyan("paradigm shift")} to initialize adoptions.`)),r.error(`Agent ${e$1} not in adoptions`);return}let t=n.agents[e$1],a$3=(await W(s))?.agents?.[e$1]?.scopes;if(o.json){h({agentId:e$1,source:t.source,scopesApproved:t.scopesApproved||null,scopes:a$3||null}),r.success(`Showed scopes for ${e$1}`);return}if(f(`Scopes: ${e$1}`),a$1(""),g$1("Source",t.source),g$1("Adopted",t.adopted),!a$3||!a$3.permissions||a$3.permissions.length===0){a$1(""),e(" No scopes declared. Agent is using default permissions."),a$1(""),r.success(`No scopes for ${e$1}`);return}g$1("Scope version",a$3.version),a$3.approved&&g$1("Approved",a$3.approved),a$1(""),a$1(` ${g.bold("Permissions:")}`);for(let f of a$3.permissions){let p=a$3.dangerous?.includes(f.id)?g.yellow(f.id.padEnd(24)):g.white(f.id.padEnd(24));a$1(` ${p} ${g.gray(f.description)}`);}if(a$3.dangerous&&a$3.dangerous.length>0){a$1(""),a$1(` ${g.yellow("Dangerous scopes")} (require runtime confirmation):`);for(let f of a$3.dangerous)a$1(` ${g.yellow(f)}`);}a$1(""),r.success(`Showed scopes for ${e$1}`);}async function W(e){let o=await import('fs/promises'),s=await import('path'),r=await import('js-yaml'),n=s.join(e,".paradigm","adoptions.yaml");try{let t=await o.readFile(n,"utf-8");return r.load(t)??null}catch{return null}}export{H as agentApproveCommand,J as agentDenyCommand,U as agentReviewCommand,X as agentScopesCommand};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import'./chunk-
|
|
2
|
+
import'./chunk-5TAVYPOV.js';import o from'chalk';async function g(i,l){let t=i||process.cwd(),r=parseInt(l.port||"3838",10),a=l.open!==false;console.log(o.cyan(`
|
|
3
3
|
Starting Sentinel...
|
|
4
|
-
`));try{let{startServer:n}=await import('./server-
|
|
4
|
+
`));try{let{startServer:n}=await import('./server-4YNUIK4W.js');console.log(o.gray(`Project: ${t}`)),console.log(o.gray(`Port: ${r}`)),console.log(),await n({port:r,projectDir:t,open:a}),console.log(o.green(`
|
|
5
5
|
Sentinel is running at http://localhost:${r}`)),console.log(o.gray(`
|
|
6
6
|
Press Ctrl+C to stop
|
|
7
7
|
`)),await new Promise(()=>{});}catch(n){let e=n.code,s=n.message||"";e==="ERR_MODULE_NOT_FOUND"||e==="MODULE_NOT_FOUND"?(console.error(o.red(`
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import'./chunk-
|
|
2
|
+
import'./chunk-5TAVYPOV.js';import {Router}from'express';import c from'chalk';var m={component(s){let o=c.magenta(`#${s}`);return {info:r=>console.log(`${c.blue("i")} ${o} ${r}`),success:r=>console.log(`${c.green("+")} ${o} ${r}`),warn:r=>console.log(`${c.yellow("!")} ${o} ${r}`),error:r=>console.error(`${c.red("x")} ${o} ${r}`)}}};async function O(s,o){try{let w=function(t,u){let b={type:"sentinel:log",entry:t};u&&!u.known&&(b.validation=u),o(b),(t.symbolType==="signal"||t.symbolType==="gate"||t.symbolType==="flow")&&o({type:"sentinel:flow_event",flowId:t.symbolType==="flow"?t.symbol:void 0,nodeSymbol:t.symbol,event:t.symbolType,timestamp:t.timestamp,service:t.service});},y=function(t){o({type:"sentinel:event",event:t});};var r=w,B=y;let g=await import('./server-4YNUIK4W.js'),{SentinelStorage:R,loadServerConfig:f,loadSymbolIndex:p,PARADIGM_SCHEMA:S,SYMPHONY_SCHEMA:v,createLogsRouter:$,createServicesRouter:h,createStateRouter:k,createMetricsRouter:A,createTracesRouter:C,createSchemasRouter:I,createEventsRouter:M,createSymbolsRouter:T,createInfoRouter:x,createCommitsRouter:P,createIncidentsRouter:L,createPatternsRouter:E,createAuthMiddleware:H,createRateLimiter:_}=g,n=new R;await n.ensureReady(),n.registerSchema(S),n.registerSchema(v),m.component("sentinel-bridge").info("Registered builtin schemas");let l=f(s),d=[];try{d=await p(s);}catch{m.component("sentinel-bridge").warn("Could not load symbol index");}let e=Router(),i=H(l.auth),a=_(l.rateLimit);return e.use("/logs",a,i("write"),$({storage:n,serverConfig:l,onLogReceived:w,symbolIndex:d})),e.use("/services",a,i("write"),h({storage:n})),e.use("/state",a,i("write"),k({storage:n})),e.use("/metrics",a,i("write"),A({storage:n,serverConfig:l})),e.use("/traces",a,i("write"),C({storage:n})),e.use("/schemas",a,i("write"),I({storage:n})),e.use("/events",a,i("write"),M({storage:n,serverConfig:l,onEventReceived:y})),e.use("/symbols",T(s)),e.use("/info",x(s)),e.use("/commits",P(s)),e.use("/incidents",L(s)),e.use("/patterns",E(s)),e}catch{return m.component("sentinel-bridge").warn("Sentinel package not available \u2014 skipping"),null}}export{O as createSentinelBridge};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import'./chunk-
|
|
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
3
|
Starting Lore Timeline...
|
|
4
|
-
`));try{let{startLoreServer:r}=await import('./lore-server-
|
|
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
5
|
Lore Timeline is running at http://localhost:${e}`)),console.log(o.gray(`
|
|
6
6
|
Press Ctrl+C to stop
|
|
7
7
|
`)),await new Promise(()=>{});}catch(r){r.code==="EADDRINUSE"?(console.error(o.red(`
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import'./chunk-
|
|
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
3
|
Opening the campus gates...
|
|
4
|
-
`));try{let{startServer:e}=await import('./server-
|
|
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
5
|
Paradigm University is running at http://localhost:${r}`)),console.log(o.gray(`
|
|
6
6
|
Press Ctrl+C to stop
|
|
7
7
|
`)),await new Promise(()=>{});}catch(e){e.code==="ERR_MODULE_NOT_FOUND"||e.code==="MODULE_NOT_FOUND"?(console.error(o.red(`
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import'./chunk-
|
|
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
3
|
Starting Paradigm Platform...
|
|
4
|
-
`));try{let{startPlatformServer:r}=await import('./platform-server-
|
|
4
|
+
`));try{let{startPlatformServer:r}=await import('./platform-server-DNAMH4YI.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
5
|
`)),await new Promise(()=>{});}catch(r){r.code==="EADDRINUSE"?(console.error(o.red(`
|
|
6
6
|
Error: Port ${t} is already in use.`)),console.log(o.gray(` Try: paradigm serve --port ${t+1}
|
|
7
7
|
`))):console.error(o.red(`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import'./chunk-
|
|
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
3
|
`);return `${g}:
|
|
4
4
|
${A}`}return `${g}: ${JSON.stringify(f)}`});return a.writeFileSync(b,q.join(`
|
|
5
5
|
`)+`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
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-
|
|
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
3
|
`),a=!0);}}if(a){r=r.replace(/\n{3,}/g,`
|
|
4
4
|
|
|
5
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(`
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {n}from'./chunk-
|
|
2
|
+
import {n}from'./chunk-4SCKMGTB.js';export{a as appendSessionWorkEntry,i as clearActivityMetrics,c as clearSessionWorkLog,l as countNotebookReferences,e as getAgentEntries,f as getAgentVerdicts,d as getContributingAgents,k as getNotebookReferences,h as getSessionActivitySummary,b as readSessionWorkLog,g as recordActivityMetric,j as recordNotebookReference}from'./chunk-4SCKMGTB.js';import'./chunk-5TAVYPOV.js';n();
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
export{a as appendSessionWorkEntry,i as clearActivityMetrics,c as clearSessionWorkLog,l as countNotebookReferences,e as getAgentEntries,f as getAgentVerdicts,d as getContributingAgents,k as getNotebookReferences,h as getSessionActivitySummary,b as readSessionWorkLog,g as recordActivityMetric,j as recordNotebookReference}from'./chunk-
|
|
2
|
+
export{a as appendSessionWorkEntry,i as clearActivityMetrics,c as clearSessionWorkLog,l as countNotebookReferences,e as getAgentEntries,f as getAgentVerdicts,d as getContributingAgents,k as getNotebookReferences,h as getSessionActivitySummary,b as readSessionWorkLog,g as recordActivityMetric,j as recordNotebookReference}from'./chunk-UNHTQLYO.js';import'./chunk-5TAVYPOV.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
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-
|
|
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
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
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
5
|
\u{1F305} Paradigm Setup Wizard
|
|
@@ -23,7 +23,7 @@ ${e.cyan(r)}`),t.forEach((i,u)=>{console.log(e.gray(` ${u+1}) `)+i.name);}),(aw
|
|
|
23
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
24
|
\u{1F305} Using default configuration...
|
|
25
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-
|
|
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
27
|
\u2500`.repeat(55))),console.log(e.blue(`
|
|
28
28
|
\u{1F389} Paradigm setup complete!
|
|
29
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(`
|
|
@@ -1,2 +1,2 @@
|
|
|
1
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-
|
|
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';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {a as a$4,d as d$3,b as b$2,e as e$1,f}from'./chunk-Z72SDTBJ.js';import {b}from'./chunk-
|
|
2
|
+
import {a as a$4,d as d$3,b as b$2,e as e$1,f}from'./chunk-Z72SDTBJ.js';import {b}from'./chunk-KFNHCQ4R.js';import'./chunk-J6KWGCHN.js';import'./chunk-TYWB5IQJ.js';import'./chunk-ORDKEGII.js';import'./chunk-BV5PRPLB.js';import {d as d$2}from'./chunk-AO7ZSRME.js';import'./chunk-FYDRENK7.js';import'./chunk-Y4XFVDZC.js';import {a as a$6}from'./chunk-SXO7NC6A.js';import {d as d$1}from'./chunk-SUU6M4JH.js';import {a as a$3,b as b$1}from'./chunk-GE3GQALR.js';import {a as a$7}from'./chunk-JOHAOLEC.js';import'./chunk-EKZDFEJW.js';import {a as a$1}from'./chunk-D6ZXAI26.js';import {b as b$3}from'./chunk-LBQBWIEX.js';import'./chunk-4TXOVRWD.js';import'./chunk-VCKKJDLP.js';import'./chunk-WR6D3SC6.js';import {a as a$2}from'./chunk-UIKLE3WD.js';import {a as a$5}from'./chunk-3XGNXXCT.js';import'./chunk-SHD27BQX.js';import'./chunk-T6IDXUUA.js';import'./chunk-JIXHEBGK.js';import'./chunk-QT2LKB3P.js';import'./chunk-DOCDDDTD.js';import'./chunk-JQKKVAAN.js';import {a}from'./chunk-LKAT7IAK.js';import'./chunk-5TAVYPOV.js';import*as s from'fs';import*as ne from'os';import*as d from'path';import e from'chalk';import ke from'ora';import*as h from'js-yaml';import*as v from'fs/promises';var ae=[{path:".paradigm/config.yaml",defaultContent:['version: "2.0"','project: ""','description: ""','initialized: ""'].join(`
|
|
3
3
|
`)+`
|
|
4
4
|
`},{path:".paradigm/agents.yaml",defaultContent:['version: "1.0"',"agents: []"].join(`
|
|
5
5
|
`)+`
|
|
@@ -51,10 +51,10 @@ Generated by paradigm shift.
|
|
|
51
51
|
`)}async function de(o){let n=d.join(o,".purpose");try{let l=await v.readFile(n,"utf-8");if(l.trim().length<se)return {id:"empty-purpose",priority:1,message:"Edit `.purpose` to define your project's features",command:void 0,type:"action"};if(ce.some(f=>l.includes(f)))return {id:"empty-purpose",priority:1,message:"Edit `.purpose` to define your project's features",command:void 0,type:"action"}}catch{return {id:"empty-purpose",priority:1,message:"Edit `.purpose` to define your project's features",command:void 0,type:"action"}}return null}async function me(o){let n=["src","packages","apps"];for(let r of n){let f=d.join(o,r);if(!s.existsSync(f))continue;if(await te(f))return null}return n.some(r=>s.existsSync(d.join(o,r)))?{id:"no-sub-purpose",priority:2,message:"Add `.purpose` files to feature directories",command:void 0,type:"action"}:null}async function fe(o){let n=d.join(o,"portal.yaml");try{let l=await v.readFile(n,"utf-8"),r=l.includes("gates:")&&!l.match(/gates:\s*(\[\]|\{\})\s*$/m)&&!l.match(/gates:\s*(\[\]|\{\})\s*\n/),f=l.includes("routes:")&&!l.match(/routes:\s*(\[\]|\{\})\s*$/m)&&!l.match(/routes:\s*(\[\]|\{\})\s*\n/);if(!r&&!f)return {id:"empty-portal",priority:3,message:"Define auth gates in `portal.yaml` if your project has auth",command:void 0,type:"action"}}catch{return {id:"empty-portal",priority:3,message:"Define auth gates in `portal.yaml` if your project has auth",command:void 0,type:"action"}}return null}async function pe(o){let n=d.join(o,".paradigm","agents.yaml");try{let l=await v.readFile(n,"utf-8");if(l.includes("agents: []")||l.trim().length<40)return {id:"agents-unconfigured",priority:4,message:"Review agent roles",command:"paradigm agent list",type:"action"}}catch{return null}return null}async function ue(o){let n=d.join(o,".paradigm",".pending-scope-reviews");return s.existsSync(n)?{id:"pending-scope-reviews",priority:2,message:"Review agent scopes",command:"paradigm agent review",type:"action"}:null}async function ge(o){let n=d.join(o,".paradigm","config.yaml");try{let l=await v.readFile(n,"utf-8");if(!l.includes("model-resolution"))return null;let r=l.match(/tier-1:\s*(\S+)/),f=l.match(/tier-2:\s*(\S+)/),p=l.match(/tier-3:\s*(\S+)/);if(!r||!f||!p)return null;let i=[r[1].replace(/['"]/g,""),f[1].replace(/['"]/g,""),p[1].replace(/['"]/g,"")];if(Object.values(le).some(w=>w[0]===i[0]&&w[1]===i[1]&&w[2]===i[2]))return {id:"model-tiers-default",priority:5,message:"Fine-tune model tiers",command:"paradigm team models",type:"action"}}catch{return null}return null}async function he(o){let n=d.join(o,".paradigm","lore","entries");try{if((await v.readdir(n)).filter(f=>!f.startsWith(".")).length===0)return {id:"no-lore",priority:8,message:"Lore records automatically as you work",command:void 0,type:"info"}}catch{return {id:"no-lore",priority:8,message:"Lore records automatically as you work",command:void 0,type:"info"}}return null}async function ye(o){let n=d.join(o,".paradigm","notebooks");try{if((await v.readdir(n)).filter(f=>!f.startsWith(".")).length===0)return {id:"no-notebooks",priority:8,message:"Agent notebooks build over time",command:void 0,type:"info"}}catch{return {id:"no-notebooks",priority:8,message:"Agent notebooks build over time",command:void 0,type:"info"}}return null}async function we(){return {id:"verify-not-run",priority:6,message:"Verify setup health",command:"paradigm doctor --verify",type:"action"}}async function te(o,n=0){if(n>4)return false;try{let l=await v.readdir(o,{withFileTypes:!0});for(let r of l)if(!(r.isDirectory()&&["node_modules","dist",".git",".next",".paradigm","build","out","target",".turbo"].includes(r.name))&&(r.name===".purpose"&&!r.isDirectory()||r.isDirectory()&&await te(d.join(o,r.name),n+1)))return !0}catch{a.operation("shift-recommendations").debug("Could not read directory",{dir:o});}return false}var oe=new Set(["architect","builder","reviewer","security","advocate","tester","compliance","documentor"]),M={architect:{nickname:"Apex",role:"System design, specifications"},builder:{nickname:"Kit",role:"Implementation, tests"},reviewer:{nickname:"Judge",role:"Code quality, compliance"},security:{nickname:"Aegis",role:"Auth flows, vulnerability scanning"},advocate:{nickname:"Jinx",role:"Stress testing, edge cases"},tester:{nickname:"Probe",role:"Unit and integration tests"},compliance:{nickname:"Rune",role:"Symbol compliance enforcement"},documentor:{nickname:"Scribe",role:".purpose, portal.yaml maintenance"}};function Se(o){let n=[],l=d.join(ne.homedir(),".paradigm","agents");for(let[r,f]of Object.entries(o.agents)){let p,i=r,j=d.join(l,`${r}.agent`);if(s.existsSync(j))try{let x=s.readFileSync(j,"utf8"),C=h.load(x);C?.nickname&&(p=C.nickname),C?.role&&(i=C.role);}catch{}!p&&M[r]&&(p=M[r].nickname,i=M[r].role);let w=f.source==="core"||f.source==="ecosystem"?f.source:oe.has(r)?"core":"ecosystem";n.push({id:r,nickname:p,role:i,source:w});}return n}async function _e(o={}){let n=process.cwd(),l=d.basename(n),r=d.join(n,".paradigm"),f$1=s.existsSync(r)&&s.statSync(r).isDirectory();console.log(e.blue(`
|
|
52
52
|
\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510`)),console.log(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
|
|
53
53
|
`)),console.log(e.white(` \u{1F4C1} Project: ${e.cyan(l)}`)),console.log(e.white(` \u{1F4CD} Status: ${f$1?e.green("Paradigm detected"):e.yellow("New project")}`)),console.log("");let p=a.command("shift").start("Running paradigm shift",{project:l}),i=ke();if(!f$1||o.force){i.start("Step 1/6: Initializing Paradigm...");try{await a$1({force:o.force,quick:!0,name:l,stack:o.stack}),i.succeed(e.green("Paradigm initialized"));}catch(t){i.fail(e.red(`Init failed: ${t.message}`)),p.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=d.join(r,"config.yaml");if(s.existsSync(t))try{let a=s.readFileSync(t,"utf8"),c=h.load(a);if(!c.discipline||c.discipline==="auto"){let m=a$2(n);if(m!=="backend"){let u=a.replace(/^discipline:\s*auto\b.*$/m,`discipline: ${m}`);u!==a&&(s.writeFileSync(t,u,"utf8"),console.log(e.green(` \u2713 Detected discipline: ${e.cyan(m)} (updated config.yaml)`)));}else if(!c.discipline){let u=a.replace(/^(project:\s*.+)$/m,`$1
|
|
54
|
-
discipline: ${m}`);u!==a&&(s.writeFileSync(t,u,"utf8"),console.log(e.green(` \u2713 Added discipline: ${e.cyan(m)} to config.yaml`)));}}}catch(a$1){a.operation("shift").debug("Discipline detection failed",{error:a$1.message});}}if(f$1){i.start("Step 1b/6: Checking for migrations...");try{let{migrateCommand:t}=await import('./migrate-
|
|
54
|
+
discipline: ${m}`);u!==a&&(s.writeFileSync(t,u,"utf8"),console.log(e.green(` \u2713 Added discipline: ${e.cyan(m)} to config.yaml`)));}}}catch(a$1){a.operation("shift").debug("Discipline detection failed",{error:a$1.message});}}if(f$1){i.start("Step 1b/6: Checking for migrations...");try{let{migrateCommand:t}=await import('./migrate-YQG2FG3J.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=d.join(r,"config.yaml");if(o.workspace&&s.existsSync(t)){let a$1=o.workspacePath?d.resolve(n,o.workspacePath):d.join(d.dirname(n),".paradigm-workspace");if(s.existsSync(a$1))try{let c=h.load(s.readFileSync(a$1,"utf8")),m=d.basename(n),u=d.dirname(a$1),g="./"+d.relative(u,n);if(c.members.some(b=>d.resolve(u,b.path)===n))console.log(e.green(` \u2713 Already a member of workspace: ${e.cyan(c.name)}`));else {let b=d$1(m,n);c.members.push({name:m,path:g,...b&&{role:b}}),s.writeFileSync(a$1,h.dump(c,{indent:2,lineWidth:120,noRefs:!0,sortKeys:!1,quotingType:'"'}),"utf8"),console.log(e.green(` \u2713 Joined workspace: ${e.cyan(c.name)} (added as member)`));}}catch(c){console.log(e.yellow(` \u26A0 Failed to join workspace: ${c.message}`));}else try{let c=d.basename(n),m=d.dirname(a$1),u="./"+d.relative(m,n),g=d$1(c,n),y={version:"1.0",name:o.workspace,members:[{name:c,path:u,...g&&{role:g}}]};s.mkdirSync(d.dirname(a$1),{recursive:!0}),s.writeFileSync(a$1,h.dump(y,{indent:2,lineWidth:120,noRefs:!0,sortKeys:!1,quotingType:'"'}),"utf8"),console.log(e.green(` \u2713 Created workspace: ${e.cyan(o.workspace)} at ${e.gray(d.relative(n,a$1))}`));}catch(c){console.log(e.yellow(` \u26A0 Failed to create workspace: ${c.message}`));}try{let c=s.readFileSync(t,"utf8"),m=h.load(c),u=d.relative(n,a$1);if(m.workspace!==u){if(m.workspace){let g=c.replace(/^workspace:\s*.*$/m,`workspace: "${u}"`);s.writeFileSync(t,g,"utf8");}else {let g=c.trimEnd()+`
|
|
55
55
|
workspace: "${u}"
|
|
56
56
|
`;s.writeFileSync(t,g,"utf8");}console.log(e.green(" \u2713 Linked workspace in config.yaml"));}}catch(c){a.operation("shift").debug("Workspace config link failed",{error:c.message});}}else if(s.existsSync(t))try{let a=s.readFileSync(t,"utf8");if(!h.load(a).workspace){let m=d.dirname(n);for(let u=0;u<3;u++){let g=d.join(m,".paradigm-workspace");if(s.existsSync(g)){let b=d.relative(n,g),re=a.trimEnd()+`
|
|
57
57
|
workspace: "${b}"
|
|
58
58
|
`;s.writeFileSync(t,re,"utf8"),console.log(e.green(` \u2713 Found workspace: ${e.cyan(b)} (added to config.yaml)`));break}let y=d.dirname(m);if(y===m)break;m=y;}}}catch(a$1){a.operation("shift").debug("Workspace auto-detect failed",{error:a$1.message});}}if(!d$2(n)||o.force){console.log(e.cyan(" Step 2/6: Initializing team configuration..."));try{await b(n,{force:o.force,json:!1,configureModels:o.configureModels||!1,noConfigureModels:!o.configureModels}),console.log(e.green(` \u2713 Team configuration initialized
|
|
59
59
|
`));}catch(t){console.log(e.yellow(` \u26A0 Team init warning: ${t.message}
|
|
60
|
-
`));}}else i.succeed(e.gray("Step 2/6: Team already configured (use --force to reinit)"));let w=d.join(n,".paradigm","roster.yaml");if(!s.existsSync(w)||o.force)try{let t=a$3(n),a=b$1[t]||b$1.generic,c={version:"1.0",project:l,type:t,active:a.sort()};s.writeFileSync(w,h.dump(c,{lineWidth:-1,noRefs:!0}),"utf8"),console.log(e.green(` \u2713 Agent roster set: ${e.cyan(a.length)} agents for ${e.cyan(t)}`));}catch(t){a.operation("shift").debug("Roster setup failed",{error:t.message});}else try{let a=h.load(s.readFileSync(w,"utf8"))?.active?.length??0;console.log(e.gray(` \u2713 Agent roster exists (${a} agents active)`));}catch{console.log(e.gray(" \u2713 Agent roster exists"));}{let t=d.join(n,".paradigm","adoptions.yaml"),a$1=s.existsSync(t);try{let c=a$3(n),m=a$1?await a$4(n):null,u=m&&Object.keys(m.agents).length>0;if(!u&&s.existsSync(w))m=await d$3(n),await b$2(n,m),a.operation("shift").debug("Migrated roster to adoptions",{count:Object.keys(m.agents).length});else if(!u){m=e$1(c);let g=s.existsSync(w)?h.load(s.readFileSync(w,"utf8")):{active:[]},y=new Date().toISOString();for(let b of g.active||[])m.agents[b]={adopted:y,source:oe.has(b)?"core":"ecosystem",defaultsAccepted:!0};Object.keys(m.agents).length>0&&await b$2(n,m);}if(m&&Object.keys(m.agents).length>0){let g=Se(m),y=f(g,c);console.log(y),console.log(e.green(` \u2713 ${Object.keys(m.agents).length} agents adopted`));}}catch(c){a.operation("shift").debug("Adoption ceremony failed",{error:c.message});}}{let t=d.join(r,"config.yaml");if(s.existsSync(t))try{let a=s.readFileSync(t,"utf8"),c=h.load(a);if(!c["model-resolution"]||o.force){let{ModelDiscovery:m}=await import('./model-discovery-
|
|
60
|
+
`));}}else i.succeed(e.gray("Step 2/6: Team already configured (use --force to reinit)"));let w=d.join(n,".paradigm","roster.yaml");if(!s.existsSync(w)||o.force)try{let t=a$3(n),a=b$1[t]||b$1.generic,c={version:"1.0",project:l,type:t,active:a.sort()};s.writeFileSync(w,h.dump(c,{lineWidth:-1,noRefs:!0}),"utf8"),console.log(e.green(` \u2713 Agent roster set: ${e.cyan(a.length)} agents for ${e.cyan(t)}`));}catch(t){a.operation("shift").debug("Roster setup failed",{error:t.message});}else try{let a=h.load(s.readFileSync(w,"utf8"))?.active?.length??0;console.log(e.gray(` \u2713 Agent roster exists (${a} agents active)`));}catch{console.log(e.gray(" \u2713 Agent roster exists"));}{let t=d.join(n,".paradigm","adoptions.yaml"),a$1=s.existsSync(t);try{let c=a$3(n),m=a$1?await a$4(n):null,u=m&&Object.keys(m.agents).length>0;if(!u&&s.existsSync(w))m=await d$3(n),await b$2(n,m),a.operation("shift").debug("Migrated roster to adoptions",{count:Object.keys(m.agents).length});else if(!u){m=e$1(c);let g=s.existsSync(w)?h.load(s.readFileSync(w,"utf8")):{active:[]},y=new Date().toISOString();for(let b of g.active||[])m.agents[b]={adopted:y,source:oe.has(b)?"core":"ecosystem",defaultsAccepted:!0};Object.keys(m.agents).length>0&&await b$2(n,m);}if(m&&Object.keys(m.agents).length>0){let g=Se(m),y=f(g,c);console.log(y),console.log(e.green(` \u2713 ${Object.keys(m.agents).length} agents adopted`));}}catch(c){a.operation("shift").debug("Adoption ceremony failed",{error:c.message});}}{let t=d.join(r,"config.yaml");if(s.existsSync(t))try{let a=s.readFileSync(t,"utf8"),c=h.load(a);if(!c["model-resolution"]||o.force){let{ModelDiscovery:m}=await import('./model-discovery-HMB3YI4L.js'),g=new m(n).detectEnvironment(),y;g==="claude-code"?y={"tier-1":"opus","tier-2":"sonnet","tier-3":"haiku"}:g==="cursor"?y={"tier-1":"sonnet","tier-2":"sonnet","tier-3":"haiku"}:y={"tier-1":"sonnet","tier-2":"sonnet","tier-3":"sonnet"},c["model-resolution"]=y,s.writeFileSync(t,h.dump(c,{lineWidth:-1,noRefs:!0}),"utf8"),console.log(e.green(` \u2713 Model tiers configured for ${e.cyan(g)}: tier-1=${y["tier-1"]}, tier-2=${y["tier-2"]}, tier-3=${y["tier-3"]}`));}}catch(a$1){a.operation("shift").debug("Model tier config failed",{error:a$1.message});}}try{let{ensureEnforcementDefaults:t}=await import('./enforcement-BEGPQIUN.js');t(n)&&console.log(e.green(` \u2713 Enforcement config initialized (${e.cyan("balanced")} preset)`));}catch(t){a.operation("shift").debug("Enforcement config setup failed",{error:t.message});}{i.start("Ensuring core files...");try{let{created:t,existed:a}=await Y(n);i.succeed(e.green(`Core files ensured: ${e.cyan(String(t.length))} created, ${e.cyan(String(a.length))} already existed`));}catch(t){i.warn(e.yellow(`Guaranteed files warning: ${t.message}`));}}if(o.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$3(n,{quiet:!0}),i.succeed(e.green("Symbols indexed"));}catch(t){i.warn(e.yellow(`Scan warning: ${t.message}`));}}{let t=d.join(r,"config.yaml");if(s.existsSync(t))try{if(h.load(s.readFileSync(t,"utf8")).workspace){i.start("Step 3b/6: Reindexing workspace members...");try{let{workspaceReindexCommand:c}=await import('./workspace-MKSQN7B2.js');await c({quiet:!0}),i.succeed(e.green("Workspace members reindexed"));}catch(c){i.warn(e.yellow(`Workspace reindex: ${c.message}`));}}}catch(a$1){a.operation("shift").debug("Workspace config read failed",{error:a$1.message});}}let x=d.join(n,"portal.yaml");s.existsSync(x)||s.writeFileSync(x,h.dump({version:"1.0.0",gates:{},routes:{}},{lineWidth:-1,noRefs:true}),"utf8");let C=d.join(n,".paradigm","lore");s.existsSync(C)||s.mkdirSync(C,{recursive:true});let I=d.join(n,".paradigm","university");for(let t of ["content/notes","content/policies","content/quizzes","content/paths","diplomas"]){let a=d.join(I,t);s.existsSync(a)||s.mkdirSync(a,{recursive:true});}let N=d.join(I,"config.yaml");if(!s.existsSync(N)){let t="Project";try{let c=d.join(n,".paradigm","config.yaml");if(s.existsSync(c)){let m=h.load(s.readFileSync(c,"utf8"));m.project&&typeof m.project=="string"&&(t=m.project);}}catch{}let a={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}};s.writeFileSync(N,h.dump(a,{lineWidth:-1,noRefs:true}),"utf8");}i.start("Step 4/6: Syncing IDE configurations...");try{let t=o.ide?[o.ide]:["claude","cursor","copilot","windsurf","agents"],a=[];for(let c of t)try{await a$5(c,{quiet:!0,force:!0}),a.push(c);}catch{}a.length>0?i.succeed(e.green(`IDE configs synced: ${a.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$6({force:o.force}),i.succeed(e.green("Hooks installed (git + Claude Code + Cursor)"));}catch(t){i.warn(e.yellow(`Hooks warning: ${t.message}`));}if(o.verify){i.start("Step 6/6: Running health checks...");try{await a$7({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 O=[{path:".paradigm/config.yaml",desc:"Project configuration"},{path:".paradigm/navigator.yaml",desc:"Symbol navigation map"},{path:".paradigm/agents.yaml",desc:"Team agent configuration"},{path:".paradigm/adoptions.yaml",desc:"Agent adoption records"},{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}],G=d.join(r,"config.yaml");if(s.existsSync(G))try{let t=h.load(s.readFileSync(G,"utf8"));if(typeof t.workspace=="string"){let a=d.resolve(n,t.workspace),c=d.relative(n,a);O.push({path:c,desc:"Multi-project workspace",optional:!0});}}catch(t){a.operation("shift").debug("Summary config read failed",{error:t.message});}for(let t of O){let a=d.join(n,t.path);s.existsSync(a)?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})`));}try{let t=await Z(n),a=ee(t);a&&console.log(a);}catch(t){a.operation("shift").debug("Recommendations engine failed",{error:t.message}),console.log(""),console.log(e.white(" Next steps:")),console.log(e.gray(" "+"\u2500".repeat(49))),console.log(e.white(" 1. ")+e.gray("Edit ")+e.cyan(".purpose")+e.gray(" to define your features")),console.log(e.white(" 2. ")+e.gray("Run ")+e.cyan("paradigm shift --verify")+e.gray(" to check health")),console.log("");}p.success("Paradigm shift complete",{project:l});}export{_e as shiftCommand};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {b,c,d}from'./chunk-D34YFK4M.js';import'./chunk-
|
|
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
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
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
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(`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {g}from'./chunk-
|
|
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
3
|
Entry not found: ${s}
|
|
4
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
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};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
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-
|
|
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
3
|
\u{1F4F8} Creating Snapshot...
|
|
4
4
|
`));let e=y("Loading .premise file...").start();try{n.existsSync(i)||(e.fail(".premise file not found"),console.log(o.yellow(`
|
|
5
5
|
Run "paradigm init" first to create a .premise file
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {b as b$1}from'./chunk-
|
|
2
|
+
import {b as b$1}from'./chunk-ORDKEGII.js';import {d}from'./chunk-BV5PRPLB.js';import {e}from'./chunk-AO7ZSRME.js';import'./chunk-FYDRENK7.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
3
|
Task is required. Use --task "..."`)),console.log(r.gray(`Example: paradigm team spawn architect --task "Design the payment API"
|
|
4
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
5
|
Unknown agent: ${t}`)),console.log(r.gray(`Available agents: ${Object.keys(a.agents).join(", ")}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
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-
|
|
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
3
|
\u{1F4CA} Paradigm Status
|
|
4
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
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(`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {a,e}from'./chunk-D34YFK4M.js';import'./chunk-
|
|
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
3
|
No university content found.`)),console.log(t.gray(` Create content with: paradigm university add note --title "My Note"
|
|
4
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
5
|
University Status
|
|
@@ -1,5 +1,5 @@
|
|
|
1
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-DOCDDDTD.js';import'./chunk-JQKKVAAN.js';import'./chunk-
|
|
2
|
+
import {m}from'./chunk-T6IDXUUA.js';import'./chunk-JIXHEBGK.js';import'./chunk-QT2LKB3P.js';import {c as c$1,a}from'./chunk-DOCDDDTD.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
3
|
\u{1F4CA} Paradigm Summary
|
|
4
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
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(`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {b as b$1,c}from'./chunk-
|
|
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
3
|
# orphan-detected: ${j()} \u2014 ${a} has 0 cross-references
|
|
4
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
5
|
# stale-since: ${j()} \u2014 code in ${t} is ${r} days newer
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {a,g}from'./chunk-22ISTMKI.js';import'./chunk-LKAT7IAK.js';import'./chunk-
|
|
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
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
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
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(`
|