@a-company/paradigm 7.3.0 → 7.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{accept-orchestration-JA3A3TSU.js → accept-orchestration-NFNY5A4Q.js} +1 -1
- package/dist/{aggregate-H7SB2UYT.js → aggregate-647KIGV6.js} +1 -1
- package/dist/ambient-5TA5CD7Z.js +2 -0
- package/dist/{ambient-TFLZFV5Y.js → ambient-N24SR3BC.js} +1 -1
- package/dist/ambient-W3SPKLKC.js +2 -0
- package/dist/{arch-loader-YVOS3QRY.js → arch-loader-6TDQOSUE.js} +1 -1
- package/dist/arch-loader-NAGXLWUQ.js +2 -0
- package/dist/{beacon-WVN264OT.js → beacon-4XQSMTNN.js} +1 -1
- package/dist/captain-2MEKZKJS.js +2 -0
- package/dist/captain-V5XPN4UP.js +2 -0
- package/dist/{chunk-IBKCMLOW.js → chunk-43H6PB2A.js} +27 -27
- package/dist/chunk-54C2PETP.js +12 -0
- package/dist/{chunk-RGSFU2YW.js → chunk-5LIE2QMS.js} +1 -1
- package/dist/{chunk-ACJWUOMA.js → chunk-74NGU6YN.js} +1 -1
- package/dist/chunk-ABHILQLA.js +42 -0
- package/dist/{chunk-VR2LLUYE.js → chunk-AMZ3ESAK.js} +2 -2
- package/dist/chunk-BTMT4K73.js +93 -0
- package/dist/{chunk-MBKTVQS2.js → chunk-BXKFSYIN.js} +1 -1
- package/dist/chunk-CHFY3JSF.js +504 -0
- package/dist/chunk-D2T5AV5N.js +504 -0
- package/dist/{chunk-6VZSOQ7Y.js → chunk-DQ4MMMTP.js} +1 -1
- package/dist/chunk-F3OBFUOE.js +2 -0
- package/dist/chunk-GADXREYG.js +18 -0
- package/dist/{chunk-A5EEY6NO.js → chunk-HGT7RNOL.js} +1 -1
- package/dist/chunk-HLPYCWE5.js +6 -0
- package/dist/chunk-IGB2CIMK.js +93 -0
- package/dist/{chunk-27EK3OQZ.js → chunk-JJ3AUHQU.js} +1 -1
- package/dist/chunk-JOHPASZG.js +4 -0
- package/dist/{chunk-7BZPDOOQ.js → chunk-JOWT6J4C.js} +4 -4
- package/dist/chunk-L4MKNG56.js +42 -0
- package/dist/chunk-PRZZL57E.js +7 -0
- package/dist/{chunk-SD3KVW5Q.js → chunk-QBIME67A.js} +1 -1
- package/dist/{chunk-KA6QEI3C.js → chunk-QTMJVEEW.js} +1 -1
- package/dist/chunk-SGLIPRIC.js +3 -0
- package/dist/chunk-SOVBBLFK.js +6 -0
- package/dist/{chunk-VKVVIN6J.js → chunk-SPU3R5GW.js} +4 -4
- package/dist/{chunk-YNFF7XHV.js → chunk-T577TTVG.js} +2 -2
- package/dist/{chunk-3F4QP2Z5.js → chunk-VHVUJGZ2.js} +2 -2
- package/dist/chunk-WUSTIEYA.js +4 -0
- package/dist/{commands-4ENQMHFO.js → commands-RSHKXKXN.js} +1 -1
- package/dist/{compliance-3M6COUCO.js → compliance-EFNXWHDL.js} +1 -1
- package/dist/{constellation-TIKNCZWR.js → constellation-26225R5K.js} +1 -1
- package/dist/{diff-NZSJW3V3.js → diff-G52RYZNF.js} +1 -1
- package/dist/dist-N4NYCS3D.js +2 -0
- package/dist/dist-O7KGTIYK.js +4 -0
- package/dist/{docs-DWU3T2BV.js → docs-2O7HUSBX.js} +1 -1
- package/dist/doctor-KGQXLGOQ.js +2 -0
- package/dist/graph-slice-2WECDOEN.js +2 -0
- package/dist/index.js +5 -5
- package/dist/{init-QPMLEQWQ.js → init-JGYCABZZ.js} +1 -1
- package/dist/{integrity-FRGF5BFS.js → integrity-YUCXTQX3.js} +1 -1
- package/dist/mcp.js +2 -2
- package/dist/nomination-engine-3EYXJOZZ.js +2 -0
- package/dist/nomination-engine-BUPERVPR.js +2 -0
- package/dist/notebook-loader-QM4KUT4R.js +2 -0
- package/dist/{orchestrate-C7SI4J7C.js → orchestrate-RIKQB2DV.js} +1 -1
- package/dist/{orchestration-S2ESNKSA.js → orchestration-GFNPCEUU.js} +1 -1
- package/dist/orchestration-I62QXOWV.js +2 -0
- package/dist/{platform-server-IOWHNS7Q.js → platform-server-AAEDDBS3.js} +2 -2
- package/dist/{probe-G3TKOJYW.js → probe-GD3VDWGT.js} +1 -1
- package/dist/reindex-FNL4QRUZ.js +2 -0
- package/dist/reindex-N4NTDLJY.js +2 -0
- package/dist/{review-WHRNLW2W.js → review-YG4LWV22.js} +1 -1
- package/dist/{ripple-B6U7263T.js → ripple-S6VBP5C6.js} +1 -1
- package/dist/sentinel.js +1 -1
- package/dist/{serve-PWAFVYYC.js → serve-NPRYOGQX.js} +1 -1
- package/dist/session-tracker-HYN6ZYPH.js +2 -0
- package/dist/{session-work-log-T2IE4Y4T.js → session-work-log-KZX4PGUL.js} +1 -1
- package/dist/{setup-L5OP24US.js → setup-GPOTHS3N.js} +1 -1
- package/dist/{shift-HGXZ5THV.js → shift-ZIJTQ5SW.js} +2 -2
- package/dist/{snapshot-MT5L6XE4.js → snapshot-2ARNF3U2.js} +1 -1
- package/dist/{status-4QGKLOP6.js → status-NTWWESOR.js} +1 -1
- package/dist/{summary-6QNVQZJV.js → summary-4QXYLXAB.js} +1 -1
- package/dist/{sync-layer-C2PF273N.js → sync-layer-Z266WBWF.js} +1 -1
- package/dist/{task-PRLQ4VPK.js → task-6F527BNU.js} +1 -1
- package/dist/{task-loader-EIXPKHA3.js → task-loader-75NBBLRQ.js} +1 -1
- package/dist/{task-loader-LFEE6OU7.js → task-loader-INPLZRG5.js} +1 -1
- package/dist/{task-settlement-ZXOY4YGX.js → task-settlement-3ROAHAND.js} +2 -2
- package/dist/{task-settlement-A2T6EACG.js → task-settlement-F7CIKUG3.js} +2 -2
- package/dist/{team-KP4HMUB5.js → team-PFJTOCPM.js} +1 -1
- package/dist/tools-MAH6K5UL.js +142 -0
- package/dist/tools-Z354SXGS.js +2 -0
- package/dist/{workspace-4D4TQ637.js → workspace-HADUT5XT.js} +1 -1
- package/package.json +2 -1
- package/dist/ambient-OW5M5LVN.js +0 -2
- package/dist/ambient-VCTUHHIG.js +0 -2
- package/dist/arch-loader-G3AAM4E2.js +0 -2
- package/dist/captain-ILBN2IKJ.js +0 -2
- package/dist/captain-J4FZ5PRU.js +0 -2
- package/dist/chunk-33ERV2MW.js +0 -18
- package/dist/chunk-5VR7FKS5.js +0 -93
- package/dist/chunk-7HUPVOAY.js +0 -504
- package/dist/chunk-D6BSCELB.js +0 -2
- package/dist/chunk-FG3M6VVO.js +0 -30
- package/dist/chunk-HSY75GRR.js +0 -6
- package/dist/chunk-KAUGQMXU.js +0 -4
- package/dist/chunk-L3AOKDMU.js +0 -93
- package/dist/chunk-O4ADSTSY.js +0 -504
- package/dist/chunk-RVXQNS6K.js +0 -30
- package/dist/chunk-TMDPDIWA.js +0 -3
- package/dist/chunk-XBK244QR.js +0 -6
- package/dist/chunk-Y76OIMDO.js +0 -7
- package/dist/chunk-ZSWXLFN7.js +0 -12
- package/dist/dist-PW5YPGFF.js +0 -2
- package/dist/dist-RXYJK7AZ.js +0 -2
- package/dist/doctor-CBZYYQQH.js +0 -2
- package/dist/nomination-engine-EFXDEPZN.js +0 -2
- package/dist/nomination-engine-YRHZZZUN.js +0 -2
- package/dist/notebook-loader-TZVIMNDJ.js +0 -2
- package/dist/orchestration-4MJKBSGM.js +0 -2
- package/dist/reindex-G2JLIGOQ.js +0 -2
- package/dist/reindex-JR3PXYQE.js +0 -2
- package/dist/session-tracker-BZ7FU4AT.js +0 -2
- package/dist/tools-NOMEIBS7.js +0 -2
- package/dist/tools-YW3Q27UI.js +0 -142
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {a as a$2}from'./chunk-TYWB5IQJ.js';import {b as b$1,a as a$1}from'./chunk-DLMDHS2X.js';import {a}from'./chunk-FYDRENK7.js';import {e}from'./chunk-YXLGVOZO.js';import {h,i,j}from'./chunk-
|
|
2
|
+
import {a as a$2}from'./chunk-TYWB5IQJ.js';import {b as b$1,a as a$1}from'./chunk-DLMDHS2X.js';import {a}from'./chunk-FYDRENK7.js';import {e}from'./chunk-YXLGVOZO.js';import {h,i,j}from'./chunk-QBIME67A.js';import {b,a as a$4}from'./chunk-EK4ZRIFJ.js';import {b as b$2}from'./chunk-EKZDFEJW.js';import {a as a$3,b as b$3}from'./chunk-LPBCQM5Y.js';import {o,t,x}from'./chunk-JOHPASZG.js';import'minimatch';import*as S from'fs';import*as C from'path';import*as W from'js-yaml';import {spawn}from'child_process';var Ae=["should","what","how","why","recommend","analyze","compare","evaluate","assess","review","explain","describe","investigate","which","best practice","trade-off","tradeoff","pros and cons","decision"],Ce=["document","write docs","readme",".purpose","purpose file","jsdoc","tsdoc","comments","docstring","api docs","changelog","architecture doc"],Ie=["bug","fix","broken","not working","issue","error","crash","fails","failing","wrong","incorrect","doesn't work","doesn't","cant","can't","regression","patch"],De=["rename","refactor","migrate","restructure","move","reorganize","clean up","cleanup","consolidate","extract","inline","simplify","modularize","decouple","split","merge"],$e=["auth","authentication","authorization","permission","admin","delete","purge","password","credential","token","secret","key","encrypt","decrypt","hash","session","oauth","jwt","api key","role","access","gate","portal","sensitive","private","security","vulnerability","xss","sql injection","csrf"],Me=/[@#$%^!?&~][a-zA-Z0-9_-]+/g,me={analysis:{agents:["architect"],models:{architect:"opus"},costMultiplier:{min:.3,max:.5}},documentation:{agents:["architect"],models:{architect:"sonnet"},costMultiplier:{min:.25,max:.45}},bugfix:{agents:["security","builder"],models:{security:"opus",builder:"haiku"},costMultiplier:{min:.5,max:.8}},refactor:{agents:["architect","builder"],models:{architect:"opus",builder:"haiku"},costMultiplier:{min:.6,max:.85}},feature:{agents:["architect","security","builder","tester"],models:{architect:"opus",security:"opus",builder:"haiku",tester:"haiku"},costMultiplier:{min:.8,max:1.2}}};function Fe(h){let t=h.match(Me)||[];return [...new Set(t)]}function U(h,t){let e=h.toLowerCase();return t.filter(s=>e.includes(s.toLowerCase()))}function Be(h,t,e,s){let n=0;e.length>=5?n+=2:e.length>=2&&(n+=1);let i=h.split(/\s+/).length;i>=100?n+=2:i>=50&&(n+=1);let r=new Set(e.map(l=>l[0]));return r.size>=4?n+=2:r.size>=2&&(n+=1),e.some(l=>l.startsWith("^"))&&(n+=1),e.some(l=>l.startsWith("$"))&&(n+=1),t==="feature"&&(n+=1),t==="refactor"&&(n+=1),n>=5?"high":n>=2?"medium":"low"}function _e(h,t,e){if(U(h,$e).length>0||t.some(n=>n.startsWith("^")))return true;return false}function K(h,t){let e=Fe(h),s=U(h,Ae),n=U(h,Ce),i=U(h,Ie),r=U(h,De),l,o;s.length>0&&i.length===0&&r.length===0?(l="analysis",o=s):n.length>0&&i.length===0?(l="documentation",o=n):i.length>0?(l="bugfix",o=i):r.length>0?(l="refactor",o=r):(l="feature",o=[]);let a=me[l],d=_e(h,e),c=[...a.agents];d&&!c.includes("security")&&(c=["security",...c]);let f=Be(h,l,e),p={...a.costMultiplier};return f==="high"?(p.min*=1.2,p.max*=1.3):f==="low"&&(p.min*=.8,p.max*=.9),d&&!a.agents.includes("security")&&(p.min+=.15,p.max+=.2),{type:l,complexity:f,recommendedAgents:c,securityRequired:d,costMultiplier:p,matchedKeywords:o,symbols:e}}function H(h,t){let e=me[t.type];return h==="security"&&t.securityRequired?"opus":e.models[h]||"sonnet"}var Ee=/[@#$%^!?&~][a-zA-Z][a-zA-Z0-9_-]*/g,Le=[/\.(get|post|put|patch|delete)\s*\(\s*['"`]([^'"`]+)['"`]/gi,/export\s+(async\s+)?function\s+(GET|POST|PUT|PATCH|DELETE)/gi,/export\s+(async\s+)?function\s+(GET|POST|PUT|PATCH|DELETE)/gi,/\.(get|post|put|patch|delete)\s*\(\s*['"`]([^'"`]+)['"`]/gi],je=["endpoint","route","api","handler","get","post","put","patch","delete","rest","crud","controller"];function ye(h,t$1,e$1){let s=h.toLowerCase(),n=h.match(Ee)||[],i=[...new Set(n)],r=i.map(g=>{let y=t(e$1,g),w=y.length>0?y[0]:null;return {symbol:g,exists:!!w,type:w?.type,description:w?.description}}),l=r.filter(g=>g.exists).map(g=>{let y=x(e$1,g.symbol),w=new Set;for(let F of y){let v=x(e$1,F.symbol);for(let P of v)P.symbol!==g.symbol&&!y.find(ee=>ee.symbol===P.symbol)&&w.add(P.symbol);}let R=y.length+w.size,I="low";return R>10?I="high":R>3&&(I="medium"),{symbol:g.symbol,directDependents:y.length,indirectDependents:w.size,impact:I}}),o=a$3(t$1),a=o.status==="ok"?o.data:null,d={exists:o.status!=="missing",gateCount:a?b$3(a).length:0,gates:a?b$3(a).map(g=>`^${g}`):[],routeCount:a?.routes?Object.keys(a.routes).length:0},c=je.some(g=>s.includes(g)),f=e(t$1),p=f?a$2(h,f.agents).map(g=>({name:g.name,confidence:g.confidence,reason:g.reason})):[],u=[];return r.some(g=>g.exists)&&u.push("ripple-analysis"),c&&u.push("portal-compliance"),i.some(g=>g.startsWith("^"))&&u.push("gate-validation"),i.some(g=>g.startsWith("!"))&&u.push("signal-registration"),u.push("purpose-coverage"),{affectedSymbols:r,rippleAnalysis:l,portalStatus:d,taskAddsRoutes:c,suggestedAgents:p,requiredChecks:u}}function be(h,t$1,e,s){let n=[],i=a$3(e),r=i.status==="ok"?i.data:null,l=r?b$3(r):[],o=r?.routes?Object.keys(r.routes):[];for(let p of h){let u=C.isAbsolute(p)?p:C.join(e,p);if(!S.existsSync(u))continue;let g;try{g=S.readFileSync(u,"utf-8");}catch{continue}for(let y of Le){y.lastIndex=0;let w;for(;(w=y.exec(g))!==null;){let R=w[2]||w[0];R&&R.startsWith("/")&&(!o.some(F=>F.replace(/\s+(GET|POST|PUT|PATCH|DELETE)\s*$/,"").trim()===R)&&r?n.push({type:"missing-portal-gate",severity:"warning",message:`Route "${R}" found in ${C.relative(e,u)} but not declared in portal.yaml`,file:C.relative(e,u),suggestion:"Add this route to portal.yaml with appropriate ^gates. Run paradigm_gates_for_route to get suggestions."}):!r&&R.startsWith("/api/")&&n.push({type:"missing-portal-gate",severity:"warning",message:`API route "${R}" found but no portal.yaml exists`,file:C.relative(e,u),suggestion:"Create portal.yaml to declare gates for API routes. Run: paradigm portal init"}));}}}for(let p of t$1)t(s,p).length===0&&n.push({type:"unregistered-symbol",severity:"error",message:`Symbol "${p}" was touched but is not registered in any .purpose file`,suggestion:`Add "${p}" to the nearest .purpose file. Use paradigm_purpose_add_component or paradigm_purpose_add_signal.`});for(let p of t$1)if(p.startsWith("^")){let u=p.slice(1);l.includes(u)||n.push({type:"missing-portal-gate",severity:"error",message:`Gate "${p}" is referenced but not declared in portal.yaml`,suggestion:`Add ${p} to portal.yaml with description and check expression.`});}h.length>=5&&t$1.length>=3&&n.push({type:"uncaptured-wisdom",severity:"warning",message:`Large change (${h.length} files, ${t$1.length} symbols) \u2014 consider recording architectural decisions`,suggestion:"Use paradigm_wisdom_record to capture any decisions or antipatterns discovered during this task."});let a=n.filter(p=>p.severity==="error").length,d=n.filter(p=>p.severity==="warning").length,c=4,f="pass";return a>0?f="violations":d>0&&(f="warnings"),{status:f,violations:n,summary:{totalChecks:c,passed:c-(a>0?1:0)-(d>0?1:0),warnings:d,errors:a},blocksCompletion:a>0}}var qe=".paradigm/events/iteration-revisions.jsonl";function we(h,t){try{let e=C.join(h,qe),s=C.dirname(e);S.existsSync(s)||S.mkdirSync(s,{recursive:!0});let n={timestamp:new Date().toISOString(),type:"iteration-revision",...t};S.appendFileSync(e,JSON.stringify(n)+`
|
|
3
3
|
`,"utf8");}catch{}}function ke(h,t){let e=Math.random().toString(36).substring(2,8);return `itrev-${h}-r${t}-${Date.now()}-${e}`}b();async function le(h$1,t,e,s){let n=new Map,i$1;try{i$1=await h(h$1,{blurb:e,priority:"medium",tags:["orchestration","epic"],claimant:{kind:"archetype",ref:"orchestrator"},external_ref:{provider:"orchestration",ref:t}});try{await i(h$1,i$1,{status:"in-progress"});}catch(l){a$4.flow("$cli-task-bridge").warn("Epic promote to in-progress failed",{orchestrationId:t,epicTaskId:i$1,error:l instanceof Error?l.message:String(l)});}let r=[...s].sort((l,o)=>l.stage-o.stage);for(let l of r)try{let o=(l.dependsOn||[]).map(d=>n.get(d)).filter(d=>typeof d=="string"),a=await h(h$1,{blurb:l.subtask,priority:"medium",tags:["orchestration"],claimant:{kind:"archetype",ref:l.agent},parentTaskId:i$1,stage:l.stage,...o.length>0?{dependsOn:o}:{},external_ref:{provider:"orchestration",ref:t}});n.set(l.agent,a);}catch(o){a$4.flow("$cli-task-bridge").warn("Stage task emission failed",{orchestrationId:t,agent:l.agent,stage:l.stage,error:o instanceof Error?o.message:String(o)});}a$4.flow("$cli-task-bridge").info("Emitted CLI orchestration task DAG",{orchestrationId:t,epicTaskId:i$1,stageTasks:n.size});}catch(r){a$4.flow("$cli-task-bridge").warn("CLI task DAG emission failed; orchestration continues",{orchestrationId:t,error:r instanceof Error?r.message:String(r)});}return {epicTaskId:i$1,stageTaskIds:n}}async function ce(h,t){if(!t)return false;try{return await i(h,t,{status:"in-progress"})}catch(e){return a$4.flow("$cli-task-bridge").warn("Stage progress update failed (non-fatal)",{taskId:t,error:e instanceof Error?e.message:String(e)}),false}}async function G(h,t,e){if(!t)return false;try{return e==="success"?await j(h,t):await i(h,t,{status:"shelved",shelved:new Date().toISOString()})}catch(s){return a$4.flow("$cli-task-bridge").warn("Stage complete update failed (non-fatal)",{taskId:t,outcome:e,error:s instanceof Error?s.message:String(s)}),false}}b();var Ne=".paradigm/events/estimate-actuals.jsonl";function ue(h,t){try{let e=C.join(h,Ne),s=C.dirname(e);S.existsSync(s)||S.mkdirSync(s,{recursive:!0});let n={archetype:t.archetype,taskType:t.taskType,actualTokens:t.actualTokens,...t.parentTaskId?{parentTaskId:t.parentTaskId}:{},ts:t.ts||new Date().toISOString()};return S.appendFileSync(e,JSON.stringify(n)+`
|
|
4
|
-
`,"utf8"),!0}catch(e){return a$4.component("#calibration").warn("estimate-actual capture failed (non-fatal)",{archetype:t.archetype,taskType:t.taskType,error:e instanceof Error?e.message:String(e)}),false}}var Se={architect:"opus",security:"opus",reviewer:"sonnet",builder:"haiku",tester:"haiku"},Ge=["auth","permission","admin","delete","purge","password","credential","token","secret","key","encrypt","decrypt","hash","session","oauth","jwt","role","access control","vulnerability","injection","xss","csrf"];function ze(h,t){let e=h.toLowerCase(),s=Ge.some(r=>e.includes(r.toLowerCase())),n=h.includes("^"),i=false;return s||n||i}var Ve=["rename","refactor","migrate","restructure","move","reorganize"];function Ye(h){let t=h.toLowerCase();return Ve.some(e=>t.includes(e))}var Q=class{spawner;auditLogger;rootDir;constructor(t){this.rootDir=t,this.spawner=new b$1(t),this.auditLogger=new a(t);}async initialize(){await this.spawner.initialize();}async orchestrate(t,e={}){let s=e.mode||"faceted",n=Date.now(),i=this.generateOrchestrationId(),r={success:false,mode:s,orchestrationId:i,task:t,agentsSpawned:0,totalTokens:{input:0,output:0,total:0},totalCost:0,duration_ms:0,agentResults:[]};try{let l;if(e.pmGovernance?.enabled)try{let{aggregateFromDirectory:a}=await import('./dist-
|
|
4
|
+
`,"utf8"),!0}catch(e){return a$4.component("#calibration").warn("estimate-actual capture failed (non-fatal)",{archetype:t.archetype,taskType:t.taskType,error:e instanceof Error?e.message:String(e)}),false}}var Se={architect:"opus",security:"opus",reviewer:"sonnet",builder:"haiku",tester:"haiku"},Ge=["auth","permission","admin","delete","purge","password","credential","token","secret","key","encrypt","decrypt","hash","session","oauth","jwt","role","access control","vulnerability","injection","xss","csrf"];function ze(h,t){let e=h.toLowerCase(),s=Ge.some(r=>e.includes(r.toLowerCase())),n=h.includes("^"),i=false;return s||n||i}var Ve=["rename","refactor","migrate","restructure","move","reorganize"];function Ye(h){let t=h.toLowerCase();return Ve.some(e=>t.includes(e))}var Q=class{spawner;auditLogger;rootDir;constructor(t){this.rootDir=t,this.spawner=new b$1(t),this.auditLogger=new a(t);}async initialize(){await this.spawner.initialize();}async orchestrate(t,e={}){let s=e.mode||"faceted",n=Date.now(),i=this.generateOrchestrationId(),r={success:false,mode:s,orchestrationId:i,task:t,agentsSpawned:0,totalTokens:{input:0,output:0,total:0},totalCost:0,duration_ms:0,agentResults:[]};try{let l;if(e.pmGovernance?.enabled)try{let{aggregateFromDirectory:a}=await import('./dist-N4NYCS3D.js'),d=await a(this.rootDir),c=o(d);l=ye(t,this.rootDir,c);}catch{}if(s==="solo"){let a=await this.runSoloMode(t,e,i);r.agentsSpawned=1,r.agentResults=[a],r.success=a.success,a.relay&&(r.totalTokens=a.relay.metrics.tokens_used,r.totalCost=b$2(r.totalTokens,e.orchestratorModel||"opus"));}else {let a=await this.runFacetedMode(t,e,i);r.agentsSpawned=a.results.length,r.agentResults=a.results,r.totalTokens=a.totalTokens,r.totalCost=a.totalCost,r.success=a.success,r.parallelBuilderStats=a.parallelBuilderStats,r.iterationOutcome=a.iterationOutcome;}if(e.pmGovernance?.enabled&&l)try{let{aggregateFromDirectory:a}=await import('./dist-N4NYCS3D.js'),d=await a(this.rootDir),c=o(d),f=[],p=[];for(let g of r.agentResults)g.relay?.outputs?.artifacts&&f.push(...g.relay.outputs.artifacts.map(y=>y.path));for(let g of l.affectedSymbols)p.push(g.symbol);let u=be(f,p,this.rootDir,c);r.complianceReport={preflight:l,postflight:u},e.pmGovernance.blockOnViolations&&u.blocksCompletion&&(r.success=!1);}catch{r.complianceReport={preflight:l};}r.duration_ms=Date.now()-n;let o$1=this.auditLogger.startOrchestration(i,t,s);return o$1.completed=new Date().toISOString(),o$1.status=r.success?"success":"failed",o$1.totals={duration_ms:r.duration_ms,tokens:r.totalTokens.total,cost_usd:r.totalCost,agents_spawned:r.agentsSpawned,files_created:0,files_modified:0},this.auditLogger.saveOrchestration(o$1),r.log=o$1,r}catch(l){return r.error=l instanceof Error?l.message:String(l),r.duration_ms=Date.now()-n,r}}async compare(t,e={}){let s=await this.orchestrate(t,{...e,mode:"solo"}),n=await this.orchestrate(t,{...e,mode:"faceted"}),i=s.totalTokens.total-n.totalTokens.total,r=s.totalCost-n.totalCost,l=s.duration_ms-n.duration_ms,o="tie";return n.success&&!s.success?o="faceted":s.success&&!n.success?o="solo":n.totalCost<s.totalCost*.8?o="faceted":s.totalCost<n.totalCost*.8&&(o="solo"),{solo:s,faceted:n,comparison:{winner:o,tokensSaved:i,costDiff:r,timeDiff:l,soloSucceeded:s.success,facetedSucceeded:n.success}}}async runSoloMode(t,e$1,s){let i=e(this.rootDir)?.team.default_agent||"architect",r=e$1.orchestratorModel||"opus",l;s&&(l=await le(this.rootDir,s,t,[{agent:i,stage:0,subtask:t,dependsOn:[]}]));let o=l?.stageTaskIds.get(i),a={model:r,workingDirectory:e$1.workingDirectory||this.rootDir,mcpServerPath:e$1.mcpServerPath,budget:e$1.budget,onMessage:e$1.onMessage?c=>e$1.onMessage("solo",c):void 0,onCheckpoint:e$1.onCheckpoint};e$1.onAgentStart&&e$1.onAgentStart("solo",t,r),await ce(this.rootDir,o);let d=await this.spawner.spawn(i,t,a);return e$1.onAgentComplete&&e$1.onAgentComplete("solo",d,r),d.relay&&ue(this.rootDir,{archetype:i,taskType:K(t).type,actualTokens:d.relay.metrics.tokens_used,parentTaskId:l?.epicTaskId}),await G(this.rootDir,o,d.success?"success":"failure"),d}async runFacetedMode(t,e$1,s){let n=e(this.rootDir);if(!n)return {success:false,results:[],totalTokens:{input:0,output:0,total:0},totalCost:0};let i=K(t).type,r="";if(Ye(t)){let k=a$1(t);if(k.length>0){let b=[];b.push(`## Auto-Ripple Analysis
|
|
5
5
|
`),b.push("The following symbols are affected by this refactoring:"),b.push("");for(let T of k.slice(0,5))b.push(`- **${T}**: Check dependencies before renaming/moving`);b.push(""),b.push("**Recommendation:** Run `paradigm_ripple` for each symbol before making changes."),r=b.join(`
|
|
6
6
|
`);}}let l=this.planAgentSequence(t,n.agents),o=this.groupByStage(l),a;if(s){let k=l.map(b=>({agent:b.agent,stage:b.stage,subtask:b.subtask,dependsOn:b.dependsOn}));a=await le(this.rootDir,s,t,k);}let d=new Set,c=[],f={input:0,output:0,total:0},p=0,u=new Map,g=true,y=n.orchestration?.iteration,w=y?.enabled===true,R=l.find(k=>k.agent==="builder")?.subtask,I=l.some(k=>k.agent==="reviewer"),F=l.some(k=>k.agent==="tester"),v=w&&!!R&&I,P,ee=Array.from(o.keys()).sort((k,b)=>k-b);for(let k of ee){let b=o.get(k)||[];if(b.length===0)continue;if(e$1.checkpoints?.beforeAgentSpawn&&e$1.onCheckpoint){let m=b.map(D=>D.agent).join(", ");if(!await e$1.onCheckpoint(`Stage ${k}: Spawn ${m}${b.length>1?" (parallel)":""}`)){g=false;break}}let T=b.map(async m=>{let O=e$1.agentBudgets?.[m.agent]?.maxTokens?"haiku":m.model||Se[m.agent]||"sonnet",D="";if(m.dependsOn.length>0){let _=m.dependsOn.map(te=>u.get(te)).filter(Boolean);_.length>0&&(D=_.join(`
|
|
7
7
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {j as j$1,a,c,b,k}from'./chunk-ACJWUOMA.js';import*as m from'fs';import*as y from'path';import*as j from'js-yaml';import {z as z$1}from'zod';var Z=class{cache=new Map;ttlMs;constructor(e=3e4){this.ttlMs=e;}async getOrCompute(e,o){let n=this.cache.get(e);if(n&&Date.now()-n.createdAt<this.ttlMs)return n.data;let s=await o();return this.cache.set(e,{data:s,createdAt:Date.now()}),s}invalidate(e){this.cache.delete(e);}invalidatePrefix(e){for(let o of this.cache.keys())o.startsWith(e)&&this.cache.delete(o);}clear(){this.cache.clear();}stats(){return {size:this.cache.size,ttlMs:this.ttlMs}}},Lt=new Z(3e4);var L=".paradigm/personas",Ke="index.yaml";async function z(t,e){let o=y.join(t,L);if(!m.existsSync(o))return [];let n=m.readdirSync(o).filter(i=>i.endsWith(".persona")),s=[];for(let i of n)try{let a=m.readFileSync(y.join(o,i),"utf8"),r=j.load(a);r&&r.id&&s.push(r);}catch{}return Qe(s,e)}async function W(t,e){let o=y.join(t,L,`${e}.persona`);if(!m.existsSync(o))return null;try{return j.load(m.readFileSync(o,"utf8"))}catch{return null}}function Qe(t,e){if(!e)return t;let o=t;return e.tag&&(o=o.filter(n=>n.tags?.includes(e.tag))),e.trigger_type&&(o=o.filter(n=>n.trigger.type===e.trigger_type)),e.gate&&(o=o.filter(n=>n.journey.some(s=>s.gates.includes(e.gate)))),e.flow&&(o=o.filter(n=>n.journey.some(s=>s.flow===e.flow))),e.limit&&(o=o.slice(0,e.limit)),o}async function Wt(t,e){let o=y.join(t,L);m.mkdirSync(o,{recursive:true});let n=y.join(o,`${e.id}.persona`);if(m.existsSync(n))throw new Error(`Persona ${e.id} already exists`);let s=new Date().toISOString(),i={version:"1.0",id:e.id,name:e.name,description:e.description,traits:e.traits,trigger:e.trigger,fixtures:e.fixtures,tags:e.tags||[],journey:e.journey||[],created:s,updated:s};return m.writeFileSync(n,j.dump(i,{indent:2,lineWidth:120,noRefs:true,sortKeys:false})),await te(t),e.id}async function ye(t,e,o){let n=await W(t,e);if(!n)return false;let s=y.join(t,L,`${e}.persona`),i={...n,...o,id:n.id,version:n.version,created:n.created,updated:new Date().toISOString()};return m.writeFileSync(s,j.dump(i,{indent:2,lineWidth:120,noRefs:true,sortKeys:false})),await te(t),true}async function Ut(t,e){let o=y.join(t,L,`${e}.persona`);if(!m.existsSync(o))return {deleted:false,warnings:[]};let n=[],s=await z(t);for(let i of s)if(i.id!==e){i.trigger.spawned_by?.startsWith(e+".")&&n.push(`Persona ${i.id} is spawned by ${e} \u2014 it will become orphaned`);for(let a of i.journey)a.spawns?.some(r=>r.persona===e)&&n.push(`Persona ${i.id} step ${a.id} spawns ${e} \u2014 spawn will break`);}return m.unlinkSync(o),await te(t),{deleted:true,warnings:n}}async function Ht(t,e,o,n){let s=await W(t,e);if(!s)return false;if(s.journey.some(i=>i.id===o.id))throw new Error(`Step ${o.id} already exists in persona ${e}`);if(n){let i=s.journey.findIndex(a=>a.id===n);if(i===-1)throw new Error(`Step ${n} not found in persona ${e}`);s.journey.splice(i+1,0,o);}else s.journey.push(o);return ye(t,e,{journey:s.journey})}async function qt(t,e,o){let n=await W(t,e);if(!n)return {removed:false,warnings:[]};let s=n.journey.findIndex(r=>r.id===o);if(s===-1)return {removed:false,warnings:[]};let i=n.journey[s],a=[];if(i.produces)for(let r of Object.keys(i.produces)){let l=`{{produces.${r}}}`;for(let d=s+1;d<n.journey.length;d++){let c=n.journey[d];JSON.stringify(c).includes(l)&&a.push(`Step ${c.id} consumes {{produces.${r}}} from this step`);}}if(i.spawns&&i.spawns.length>0)for(let r of i.spawns)a.push(`Step spawns persona ${r.persona} \u2014 spawn chain will break`);return n.journey.splice(s,1),await ye(t,e,{journey:n.journey}),{removed:true,warnings:a}}var Ve=/^[a-z][a-z0-9-]*$/,Ye=/^[a-z][a-z0-9-]*$/,Xe=/^(GET|POST|PUT|PATCH|DELETE)\s+\//;async function Gt(t,e,o=false){let n=[],s=[];Ve.test(e.id)||n.push({type:"invalid-id",detail:`ID "${e.id}" must match /^[a-z][a-z0-9-]*$/`}),(!e.name||e.name.trim()==="")&&n.push({type:"missing-name",detail:"Name is required"}),(!e.trigger||!e.trigger.type)&&n.push({type:"missing-trigger",detail:"Trigger with type is required"}),e.trigger.type!=="root"&&!e.trigger.spawned_by&&n.push({type:"missing-spawned-by",detail:`Non-root trigger type "${e.trigger.type}" requires spawned_by`}),(!e.journey||e.journey.length===0)&&n.push({type:"empty-journey",detail:"Journey must have at least one step"});let i=new Set,a=new Set;for(let r of e.journey){Ye.test(r.id)||n.push({type:"invalid-step-id",step:r.id,detail:"Step ID must match /^[a-z][a-z0-9-]*$/"}),i.has(r.id)&&n.push({type:"duplicate-step-id",step:r.id,detail:`Duplicate step ID "${r.id}"`}),i.add(r.id),Xe.test(r.route)||n.push({type:"invalid-route",step:r.id,route:r.route,detail:'Route must match "METHOD /path" (e.g., "POST /api/auth/signup")'}),(!r.gates||r.gates.length===0)&&n.push({type:"missing-gates",step:r.id,detail:"Step must have at least one gate"}),(!r.expect||r.expect.status===void 0)&&n.push({type:"missing-expect",step:r.id,detail:"Step must have expect with status"});let d=JSON.stringify(r).match(/\{\{produces\.([^}]+)\}\}/g)||[];for(let c of d){let u=c.replace("{{produces.","").replace("}}","");a.has(u)||n.push({type:"unresolved-produces",step:r.id,key:u,detail:`{{produces.${u}}} used but not produced by a prior step`});}if(r.produces)for(let c of Object.keys(r.produces))a.add(c);}if(o){let r=y.join(t,"portal.yaml"),l=[],d=[];if(m.existsSync(r))try{let u=j.load(m.readFileSync(r,"utf8"));u.gates&&typeof u.gates=="object"&&(l=Object.keys(u.gates)),u.routes&&typeof u.routes=="object"&&(d=Object.keys(u.routes));}catch{}for(let u of e.journey)for(let p of u.gates)l.length>0&&!l.includes(p)&&n.push({type:"gate-not-found",step:u.id,gate:p,detail:`Gate ${p} not defined in portal.yaml`});for(let u of e.journey)if(d.length>0){let p=u.route;d.some(f=>ee(f,p))||s.push({type:"route-not-in-portal",detail:`Route "${p}" (step ${u.id}) not found in portal.yaml`});}for(let u of e.journey)if(u.spawns)for(let p of u.spawns)await W(t,p.persona)||n.push({type:"spawn-target-missing",step:u.id,detail:`Spawn target persona "${p.persona}" does not exist`});let c=await Ze(t,e.id);if(c&&n.push({type:"spawn-cycle",detail:`Circular spawn dependency: ${c.join(" \u2192 ")}`}),d.length>0||l.length>0){let u=await z(t),p=new Set,h=new Set;for(let w of u)for(let I of w.journey){for(let P of I.gates)p.add(P);h.add(I.route);}let f=[],g=y.join(t,".paradigm","flow-index.json");if(m.existsSync(g))try{let w=JSON.parse(m.readFileSync(g,"utf8"));f=Object.keys(w.flows||{});}catch{}let b=new Set;for(let w of u)for(let I of w.journey)I.flow&&b.add(I.flow);return {persona:e.id,valid:n.length===0,errors:n,warnings:s,coverage:{routes:{covered:h.size,total:d.length,uncovered:d.filter(w=>!h.has(w))},gates:{covered:p.size,total:l.length,uncovered:l.filter(w=>!p.has(w))},flows:{covered:b.size,total:f.length,uncovered:f.filter(w=>!b.has(w))}}}}}return {persona:e.id,valid:n.length===0,errors:n,warnings:s}}function ee(t,e){let o=n=>n.replace(/:[a-zA-Z_]+/g,":param").replace(/\{\{[^}]+\}\}/g,":param");return o(t)===o(e)}async function Ze(t,e){let o=new Set,n=[];async function s(i){if(o.has(i)){let r=n.indexOf(i);return r!==-1?[...n.slice(r),i]:null}o.add(i),n.push(i);let a=await W(t,i);if(a){for(let r of a.journey)if(r.spawns)for(let l of r.spawns){let d=await s(l.persona);if(d)return d}}return n.pop(),null}return s(e)}async function te(t){let e=y.join(t,L);m.mkdirSync(e,{recursive:true});let o=await z(t),n={},s={},i={};for(let u of o){let p=new Set,h=new Set,f=[],g=new Set;for(let b of u.journey){for(let w of b.gates)p.add(w);if(b.flow&&h.add(b.flow),f.push(b.route),b.spawns)for(let w of b.spawns)g.add(w.persona);}n[u.id]={name:u.name,trigger:u.trigger.type,spawned_by:u.trigger.spawned_by,steps:u.journey.length,gates:[...p],flows:[...h],routes:f,spawns:[...g],tags:u.tags||[]};for(let b of p)s[b]||(s[b]=[]),s[b].push(u.id);for(let b of f)i[b]||(i[b]=[]),i[b].push(u.id);}let a=[],r=y.join(t,"portal.yaml");if(m.existsSync(r))try{let u=j.load(m.readFileSync(r,"utf8"));u.routes&&typeof u.routes=="object"&&(a=Object.keys(u.routes).filter(h=>!Object.keys(i).some(f=>ee(h,f))));}catch{}let l={},d=y.join(e,"chains");if(m.existsSync(d)){let u=m.readdirSync(d).filter(p=>p.endsWith(".yaml"));for(let p of u)try{let h=m.readFileSync(y.join(d,p),"utf8"),f=j.load(h);if(f&&f.id){let g=f.order.map(I=>I.persona),b=0,w=new Set;for(let I of g){let P=n[I];if(P){b+=P.steps;for(let R of P.gates)w.add(R);}}l[f.id]={description:f.description||"",order:g,total_steps:b,total_gates:w.size};}}catch{}}let c={version:"1.0",generated:new Date().toISOString(),personas:n,chains:l,gate_coverage:s,route_coverage:i,uncovered_routes:a};return m.writeFileSync(y.join(e,Ke),j.dump(c,{indent:2,lineWidth:120,noRefs:true,sortKeys:false})),c}async function Jt(t){let e=await z(t),o=new Set,n=new Set,s=new Set;for(let c of e)for(let u of c.journey){for(let p of u.gates)o.add(p);n.add(u.route),u.flow&&s.add(u.flow);}let i=[],a=[],r=y.join(t,"portal.yaml");if(m.existsSync(r))try{let c=j.load(m.readFileSync(r,"utf8"));c.gates&&typeof c.gates=="object"&&(i=Object.keys(c.gates)),c.routes&&typeof c.routes=="object"&&(a=Object.keys(c.routes));}catch{}let l=[],d=y.join(t,".paradigm","flow-index.json");if(m.existsSync(d))try{let c=JSON.parse(m.readFileSync(d,"utf8"));l=Object.keys(c.flows||{});}catch{}return {routes:{covered:n.size,total:a.length,uncovered:a.filter(c=>!Array.from(n).some(u=>ee(c,u)))},gates:{covered:o.size,total:i.length,uncovered:i.filter(c=>!o.has(c))},flows:{covered:s.size,total:l.length,uncovered:l.filter(c=>!s.has(c))},personas:e.length}}async function Bt(t,e){let o=await z(t),n=[];for(let s of o){let i=[],a=[];for(let r of s.journey)if((r.gates.includes(e)||r.flow===e||r.route===e||r.signals?.includes(e))&&(i.push(r.id),r.spawns))for(let d of r.spawns)a.push(d.persona);i.length>0&&n.push({persona:s.id,steps:i,spawns_blocked:a});}return n}function et(t,e){let o=e.split(/[.\[\]]+/).filter(Boolean),n=t;for(let s of o){if(n==null||typeof n!="object")return;n=n[s];}return n}function tt(t,e){let o=[];if(e.status!==t.expect.status&&o.push({type:"status",field:"status",expected:t.expect.status,actual:e.status,message:`Step ${t.id}: status is ${e.status}, expected ${t.expect.status}`}),t.expect.body?.has){let n=e.body;for(let s of t.expect.body.has)(!n||typeof n!="object"||!(s in n))&&o.push({type:"body.has",field:s,expected:true,actual:false,message:`Step ${t.id}: body missing key '${s}'`});}if(t.expect.body?.match){let n=e.body;for(let[s,i]of Object.entries(t.expect.body.match)){let a=n?et(n,s):void 0;JSON.stringify(a)!==JSON.stringify(i)&&o.push({type:"body.match",field:s,expected:i,actual:a??null,message:`Step ${t.id}: '${s}' is ${JSON.stringify(a??null)}, expected ${JSON.stringify(i)}`});}}if(t.signals&&t.signals.length>0){let n=e.signals_fired||[];for(let s of t.signals)n.includes(s)||o.push({type:"signal",field:"signals_fired",expected:s,actual:n,message:`Step ${t.id}: signal '${s}' was not fired`});}if(t.gates.length>0&&e.gates_traversed)for(let n of t.gates)e.gates_traversed.includes(n)||o.push({type:"gate",field:"gates_traversed",expected:n,actual:e.gates_traversed,message:`Step ${t.id}: gate '${n}' was not traversed`});return o}async function Kt(t,e={}){let o=[];try{let{SentinelStorage:r}=await import('./dist-W3XCATBJ.js'),l=new r,c=(l.queryEvents?.({schemaId:"paradigm-personas",eventType:"persona.step.complete",scopeValue:t.id,limit:500})||[]).filter(f=>{let g=JSON.parse(f.data_json||"{}");return !(e.run_id&&g.run_id!==e.run_id||e.chain_id&&g.chain_id!==e.chain_id||e.environment&&g.environment!==e.environment)}),p=(l.queryEvents?.({schemaId:"paradigm-personas",eventType:"persona.step.fail",scopeValue:t.id,limit:500})||[]).filter(f=>{let g=JSON.parse(f.data_json||"{}");return !(e.run_id&&g.run_id!==e.run_id||e.chain_id&&g.chain_id!==e.chain_id||e.environment&&g.environment!==e.environment)}),h=new Map;for(let f of [...c,...p]){let g=JSON.parse(f.data_json||"{}");g.step_id&&h.set(g.step_id,g);}for(let f of t.journey){let g=h.get(f.id);if(!g){o.push({step_id:f.id,matched:!1,assertions:[],message:`No Sentinel event found for step '${f.id}' \u2014 step was never exercised`});continue}let b=tt(f,{status:g.status,body:g.body,gates_traversed:g.gates_traversed,signals_fired:g.signals_fired});o.push({step_id:f.id,matched:!0,passed:b.length===0,assertions:b});}}catch{for(let r of t.journey)o.push({step_id:r.id,matched:false,assertions:[],message:"Sentinel unavailable \u2014 cannot validate events"});}let n=o.filter(r=>r.matched).length,s=o.filter(r=>r.passed).length,i=o.filter(r=>r.matched&&!r.passed).length,a=o.reduce((r,l)=>r+l.assertions.length,0);return {run_id:e.run_id,environment:e.environment,steps:o,summary:{total_steps:t.journey.length,matched:n,unmatched:t.journey.length-n,passed:s,failed:i,assertion_failures:a}}}var nt={warn(){}},be=nt;function Vt(t){be=t;}function U(){return be}var O="pack.yaml";var st="paradigm.universityPack";var we=/^[a-z0-9][a-z0-9-]{0,63}$/,he=["track","index","chronological","featured"],ge=64,ot=z$1.object({id:z$1.string().regex(we,"invalid section id"),name:z$1.string().min(1).max(120),order:z$1.number().int().min(0).max(9999),style:z$1.enum(he,{errorMap:()=>({message:`section.style must be one of ${he.join("|")}`})}),description:z$1.string().max(1e3).optional(),default:z$1.boolean({invalid_type_error:"section.default must be a boolean"}).optional()}).strict(),ve=z$1.array(ot).max(ge,`sections must contain \u2264${ge} entries`);z$1.object({sections:ve.optional()}).passthrough();z$1.object({section:z$1.string().regex(we).optional(),order:z$1.number().int().min(0).max(9999).optional()}).passthrough();var xe="@a-company/university",Pe=".paradigm/university",_e=".paradigm/cache/packs.json",C=class extends Error{constructor(t,e){super(`pack-load failed (${t}: ${e})`),this.errorClass=t,this.detail=e,this.name="PackLoadError";}},it=["id","name","version","schema_version","tenant_kind"],rt=new Set(["first-party","project","external"]),Se={id:"main",name:"Curriculum",order:1,style:"track",default:true};function $e(t){if(t==null)return [{...Se}];if(Array.isArray(t)&&t.length===0)return [{...Se}];let e=ve.safeParse(t);if(!e.success){let i=e.error.issues[0],a=i?`${i.path.join(".")||"sections"}: ${i.message}`:"sections failed schema validation";throw new C("manifest-invalid",a)}let o=e.data.map(i=>({...i})),n=new Set;for(let i of o){if(n.has(i.id))throw new C("manifest-invalid",`duplicate section id "${i.id}"`);n.add(i.id);}o.length===1&&!o[0].default&&(o[0]={...o[0],default:true});let s=o.filter(i=>i.default===true);if(s.length>1)throw new C("manifest-invalid",`at most one section may set default: true (found ${s.length})`);return o.sort((i,a)=>i.order-a.order||i.id.localeCompare(a.id)),o}function at(t){if(t&&typeof t=="object"&&"name"in t&&typeof t.name=="string"){let e=t.name;return e==="YAMLException"?"yaml syntax error":e}return "parse error"}function H(t){let e=y.join(t,O);if(!m.existsSync(e))throw new C("missing-manifest",`no ${O} at pack root`);let o;try{o=m.readFileSync(e,"utf-8");}catch{throw new C("manifest-unparseable","file read error")}let n;try{n=j.load(o);}catch(i){throw new C("manifest-unparseable",at(i))}let s=n;if(!s||typeof s!="object")throw new C("manifest-invalid","manifest is not an object");for(let i of it){let a=s[i];if(a==null||a==="")throw new C("missing-required-field",`required field ${String(i)} is missing or empty`)}if(!rt.has(String(s.tenant_kind)))throw new C("missing-required-field","tenant_kind must be one of first-party|project|external");return s.sections=$e(s.sections),s}function ct(t){let e=ut(t);if(e)return e;let o=[],n=y.join(t,"node_modules",xe);if(m.existsSync(y.join(n,O)))try{let i=H(n);o.push({manifest:i,rootDir:n,source:"first-party"});}catch(i){U().warn("first-party pack manifest invalid",{errorClass:i instanceof C?i.errorClass:"other"});}for(let i of dt(t))try{let a=H(i);o.push({manifest:a,rootDir:i,source:"npm"});}catch(a){U().warn("npm pack manifest invalid",{errorClass:a instanceof C?a.errorClass:"other"});}let s=y.join(t,Pe);if(m.existsSync(s)&&m.statSync(s).isDirectory()){let i=y.join(s,O),a;if(m.existsSync(i))try{a=H(s),o.push({manifest:a,rootDir:s,source:"local"});}catch(l){U().warn("local pack manifest invalid",{errorClass:l instanceof C?l.errorClass:"other"});}let r=a?.id??"project";for(let l of lt(s))try{let d=H(l);o.push({manifest:d,rootDir:l,source:"local",parentPackId:r});}catch(d){U().warn("discipline sub-pack manifest invalid",{errorClass:d instanceof C?d.errorClass:"other"});}}return ft(t,o),o}function dt(t){let e=y.join(t,"package.json");if(!m.existsSync(e))return [];let o;try{o=JSON.parse(m.readFileSync(e,"utf8"));}catch{return []}let n=new Set([...Object.keys(o.dependencies||{}),...Object.keys(o.devDependencies||{}),...Object.keys(o.peerDependencies||{})]);if(n.size===0)return [];let s=y.join(t,"node_modules");if(!m.existsSync(s))return [];let i=[];for(let a of n){if(a===xe)continue;let r=y.join(s,a,"package.json");if(!m.existsSync(r))continue;let l;try{l=JSON.parse(m.readFileSync(r,"utf8"));}catch{continue}let d=l.paradigm?.universityPack;if(typeof d!="string"||d.length===0)continue;let c=y.resolve(y.dirname(r),d);m.existsSync(y.join(c,O))&&i.push(c);}return i}function lt(t){let e=[],o;try{o=m.readdirSync(t,{withFileTypes:!0});}catch{return e}for(let n of o){if(!n.isDirectory()||n.name.startsWith("."))continue;let s=y.join(t,n.name);m.existsSync(y.join(s,O))&&e.push(s);}return e}function je(t){try{return m.statSync(y.join(t,"node_modules")).mtime.getTime()}catch{return}}function Ce(t){try{return m.statSync(y.join(t,Pe)).mtime.getTime()}catch{return}}function ut(t){let e=y.join(t,_e);if(!m.existsSync(e))return null;let o;try{o=JSON.parse(m.readFileSync(e,"utf8"));}catch{return null}if(o.version!==1||!Array.isArray(o.packs))return null;let n=je(t),s=Ce(t);return o.node_modules_mtime_ms!==n||o.local_university_mtime_ms!==s?null:o.packs.map(i=>({manifest:i.manifest,rootDir:i.rootDir,source:i.source,...i.parentPackId?{parentPackId:i.parentPackId}:{}}))}function ft(t,e){let o=y.join(t,_e);try{m.mkdirSync(y.dirname(o),{recursive:!0});let n={version:1,node_modules_mtime_ms:je(t),local_university_mtime_ms:Ce(t),packs:e.map(s=>({manifest:s.manifest,rootDir:s.rootDir,source:s.source,...s.parentPackId?{parentPackId:s.parentPackId}:{}}))};m.writeFileSync(o,JSON.stringify(n,null,2),"utf8");}catch{}}var F=".paradigm/university",N="content",V="notes",q="policies",G="quizzes",J="paths",Ie="diplomas",se="index.yaml",Te="config.yaml";function Ae(t){return typeof t=="string"?{packRoot:t,stampPackId:true,resolveDefaultPack:true}:{packRoot:t?.packRoot,stampPackId:t?.stampPackId??true,resolveDefaultPack:t?.resolveDefaultPack??true}}function Ee(t,e,o){return e||(o?oe(t):y.join(t,F))}function oe(t){let e=y.join(t,F);if(m.existsSync(e))return e;try{let n=ct(t).find(s=>s.manifest.tenant_kind==="first-party");if(n)return n.rootDir}catch{}return e}function B(t){if(!m.existsSync(t))return null;let e=y.join(t,O);if(m.existsSync(e))try{return H(t)}catch(n){U().warn("pack manifest invalid, using implicit manifest",{errorClass:n instanceof C?n.errorClass:"other"});}let o=y.basename(t)||"project";return {id:o,name:o,version:"0.0.0",schema_version:"1",tenant_kind:"project",description:"Implicit project pack (pack.yaml not present \u2014 v5 layout)",origin_hint:"authored",sections:$e(void 0)}}function pt(t,e,o){return e?{...t,...t.pack_id?{}:{pack_id:e.id},...t.discipline||!o?{}:{discipline:o}}:t}var ie={name:"Project University",tagline:"Learn the codebase",institution:"Paradigm"},re={primary:"#6366f1",secondary:"#8b5cf6",accent:"#f59e0b",background:"#0f172a",surface:"#1e293b",text:"#f8fafc",textMuted:"#94a3b8",success:"#22c55e",error:"#ef4444",font:"Inter, system-ui, sans-serif"},ne={branding:ie,theme:re,content:{categories:[],defaultDifficulty:"beginner",requireApproval:false},diplomas:{includeGlobalPLSAT:true,customCertStyle:null}};function Y(t){let e=y.join(t,F,Te);if(!m.existsSync(e))return {...ne};try{let o=m.readFileSync(e,"utf8"),n=j.load(o);return n?{branding:{...ie,...n.branding||{}},theme:{...re,...n.theme||{}},content:{categories:n.content?.categories||[],defaultDifficulty:n.content?.defaultDifficulty||"beginner",requireApproval:n.content?.requireApproval??!1,defaultCategory:n.content?.defaultCategory},diplomas:{includeGlobalPLSAT:n.diplomas?.includeGlobalPLSAT??!0,customCertStyle:n.diplomas?.customCertStyle??null}}:{...ne}}catch{return {...ne}}}function Oe(t){let e=y.join(t,Te);if(!m.existsSync(e))return null;try{let o=m.readFileSync(e,"utf8"),n=j.load(o);return n?{branding:{...ie,...n.branding||{}},theme:{...re,...n.theme||{}},content:{categories:n.content?.categories||[],defaultDifficulty:n.content?.defaultDifficulty||"beginner",requireApproval:n.content?.requireApproval??!1,defaultCategory:n.content?.defaultCategory},diplomas:{includeGlobalPLSAT:n.diplomas?.includeGlobalPLSAT??!0,customCertStyle:n.diplomas?.customCertStyle??null}}:null}catch{return null}}function Fe(t){let e=y.join(t,O);if(!m.existsSync(e))return false;try{let o=m.readFileSync(e,"utf8"),n=j.load(o);return !n||!Array.isArray(n.sections)?!1:n.sections.some(s=>s&&typeof s.id=="string"&&s.id.length>0)}catch{return false}}function K(t){let e=y.join(t,F,se);if(!m.existsSync(e))return null;try{let o=m.readFileSync(e,"utf8");return j.load(o)}catch{return null}}function Re(t){let e=t.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);if(!e)return null;try{return {frontmatter:j.load(e[1]),body:e[2].trim()}}catch{return null}}function mt(t,e){return `---
|
|
2
|
+
import {j as j$1,a,c,b,k}from'./chunk-74NGU6YN.js';import*as m from'fs';import*as y from'path';import*as j from'js-yaml';import {z as z$1}from'zod';var Z=class{cache=new Map;ttlMs;constructor(e=3e4){this.ttlMs=e;}async getOrCompute(e,o){let n=this.cache.get(e);if(n&&Date.now()-n.createdAt<this.ttlMs)return n.data;let s=await o();return this.cache.set(e,{data:s,createdAt:Date.now()}),s}invalidate(e){this.cache.delete(e);}invalidatePrefix(e){for(let o of this.cache.keys())o.startsWith(e)&&this.cache.delete(o);}clear(){this.cache.clear();}stats(){return {size:this.cache.size,ttlMs:this.ttlMs}}},Lt=new Z(3e4);var L=".paradigm/personas",Ke="index.yaml";async function z(t,e){let o=y.join(t,L);if(!m.existsSync(o))return [];let n=m.readdirSync(o).filter(i=>i.endsWith(".persona")),s=[];for(let i of n)try{let a=m.readFileSync(y.join(o,i),"utf8"),r=j.load(a);r&&r.id&&s.push(r);}catch{}return Qe(s,e)}async function W(t,e){let o=y.join(t,L,`${e}.persona`);if(!m.existsSync(o))return null;try{return j.load(m.readFileSync(o,"utf8"))}catch{return null}}function Qe(t,e){if(!e)return t;let o=t;return e.tag&&(o=o.filter(n=>n.tags?.includes(e.tag))),e.trigger_type&&(o=o.filter(n=>n.trigger.type===e.trigger_type)),e.gate&&(o=o.filter(n=>n.journey.some(s=>s.gates.includes(e.gate)))),e.flow&&(o=o.filter(n=>n.journey.some(s=>s.flow===e.flow))),e.limit&&(o=o.slice(0,e.limit)),o}async function Wt(t,e){let o=y.join(t,L);m.mkdirSync(o,{recursive:true});let n=y.join(o,`${e.id}.persona`);if(m.existsSync(n))throw new Error(`Persona ${e.id} already exists`);let s=new Date().toISOString(),i={version:"1.0",id:e.id,name:e.name,description:e.description,traits:e.traits,trigger:e.trigger,fixtures:e.fixtures,tags:e.tags||[],journey:e.journey||[],created:s,updated:s};return m.writeFileSync(n,j.dump(i,{indent:2,lineWidth:120,noRefs:true,sortKeys:false})),await te(t),e.id}async function ye(t,e,o){let n=await W(t,e);if(!n)return false;let s=y.join(t,L,`${e}.persona`),i={...n,...o,id:n.id,version:n.version,created:n.created,updated:new Date().toISOString()};return m.writeFileSync(s,j.dump(i,{indent:2,lineWidth:120,noRefs:true,sortKeys:false})),await te(t),true}async function Ut(t,e){let o=y.join(t,L,`${e}.persona`);if(!m.existsSync(o))return {deleted:false,warnings:[]};let n=[],s=await z(t);for(let i of s)if(i.id!==e){i.trigger.spawned_by?.startsWith(e+".")&&n.push(`Persona ${i.id} is spawned by ${e} \u2014 it will become orphaned`);for(let a of i.journey)a.spawns?.some(r=>r.persona===e)&&n.push(`Persona ${i.id} step ${a.id} spawns ${e} \u2014 spawn will break`);}return m.unlinkSync(o),await te(t),{deleted:true,warnings:n}}async function Ht(t,e,o,n){let s=await W(t,e);if(!s)return false;if(s.journey.some(i=>i.id===o.id))throw new Error(`Step ${o.id} already exists in persona ${e}`);if(n){let i=s.journey.findIndex(a=>a.id===n);if(i===-1)throw new Error(`Step ${n} not found in persona ${e}`);s.journey.splice(i+1,0,o);}else s.journey.push(o);return ye(t,e,{journey:s.journey})}async function qt(t,e,o){let n=await W(t,e);if(!n)return {removed:false,warnings:[]};let s=n.journey.findIndex(r=>r.id===o);if(s===-1)return {removed:false,warnings:[]};let i=n.journey[s],a=[];if(i.produces)for(let r of Object.keys(i.produces)){let l=`{{produces.${r}}}`;for(let d=s+1;d<n.journey.length;d++){let c=n.journey[d];JSON.stringify(c).includes(l)&&a.push(`Step ${c.id} consumes {{produces.${r}}} from this step`);}}if(i.spawns&&i.spawns.length>0)for(let r of i.spawns)a.push(`Step spawns persona ${r.persona} \u2014 spawn chain will break`);return n.journey.splice(s,1),await ye(t,e,{journey:n.journey}),{removed:true,warnings:a}}var Ve=/^[a-z][a-z0-9-]*$/,Ye=/^[a-z][a-z0-9-]*$/,Xe=/^(GET|POST|PUT|PATCH|DELETE)\s+\//;async function Gt(t,e,o=false){let n=[],s=[];Ve.test(e.id)||n.push({type:"invalid-id",detail:`ID "${e.id}" must match /^[a-z][a-z0-9-]*$/`}),(!e.name||e.name.trim()==="")&&n.push({type:"missing-name",detail:"Name is required"}),(!e.trigger||!e.trigger.type)&&n.push({type:"missing-trigger",detail:"Trigger with type is required"}),e.trigger.type!=="root"&&!e.trigger.spawned_by&&n.push({type:"missing-spawned-by",detail:`Non-root trigger type "${e.trigger.type}" requires spawned_by`}),(!e.journey||e.journey.length===0)&&n.push({type:"empty-journey",detail:"Journey must have at least one step"});let i=new Set,a=new Set;for(let r of e.journey){Ye.test(r.id)||n.push({type:"invalid-step-id",step:r.id,detail:"Step ID must match /^[a-z][a-z0-9-]*$/"}),i.has(r.id)&&n.push({type:"duplicate-step-id",step:r.id,detail:`Duplicate step ID "${r.id}"`}),i.add(r.id),Xe.test(r.route)||n.push({type:"invalid-route",step:r.id,route:r.route,detail:'Route must match "METHOD /path" (e.g., "POST /api/auth/signup")'}),(!r.gates||r.gates.length===0)&&n.push({type:"missing-gates",step:r.id,detail:"Step must have at least one gate"}),(!r.expect||r.expect.status===void 0)&&n.push({type:"missing-expect",step:r.id,detail:"Step must have expect with status"});let d=JSON.stringify(r).match(/\{\{produces\.([^}]+)\}\}/g)||[];for(let c of d){let u=c.replace("{{produces.","").replace("}}","");a.has(u)||n.push({type:"unresolved-produces",step:r.id,key:u,detail:`{{produces.${u}}} used but not produced by a prior step`});}if(r.produces)for(let c of Object.keys(r.produces))a.add(c);}if(o){let r=y.join(t,"portal.yaml"),l=[],d=[];if(m.existsSync(r))try{let u=j.load(m.readFileSync(r,"utf8"));u.gates&&typeof u.gates=="object"&&(l=Object.keys(u.gates)),u.routes&&typeof u.routes=="object"&&(d=Object.keys(u.routes));}catch{}for(let u of e.journey)for(let p of u.gates)l.length>0&&!l.includes(p)&&n.push({type:"gate-not-found",step:u.id,gate:p,detail:`Gate ${p} not defined in portal.yaml`});for(let u of e.journey)if(d.length>0){let p=u.route;d.some(f=>ee(f,p))||s.push({type:"route-not-in-portal",detail:`Route "${p}" (step ${u.id}) not found in portal.yaml`});}for(let u of e.journey)if(u.spawns)for(let p of u.spawns)await W(t,p.persona)||n.push({type:"spawn-target-missing",step:u.id,detail:`Spawn target persona "${p.persona}" does not exist`});let c=await Ze(t,e.id);if(c&&n.push({type:"spawn-cycle",detail:`Circular spawn dependency: ${c.join(" \u2192 ")}`}),d.length>0||l.length>0){let u=await z(t),p=new Set,h=new Set;for(let w of u)for(let I of w.journey){for(let P of I.gates)p.add(P);h.add(I.route);}let f=[],g=y.join(t,".paradigm","flow-index.json");if(m.existsSync(g))try{let w=JSON.parse(m.readFileSync(g,"utf8"));f=Object.keys(w.flows||{});}catch{}let b=new Set;for(let w of u)for(let I of w.journey)I.flow&&b.add(I.flow);return {persona:e.id,valid:n.length===0,errors:n,warnings:s,coverage:{routes:{covered:h.size,total:d.length,uncovered:d.filter(w=>!h.has(w))},gates:{covered:p.size,total:l.length,uncovered:l.filter(w=>!p.has(w))},flows:{covered:b.size,total:f.length,uncovered:f.filter(w=>!b.has(w))}}}}}return {persona:e.id,valid:n.length===0,errors:n,warnings:s}}function ee(t,e){let o=n=>n.replace(/:[a-zA-Z_]+/g,":param").replace(/\{\{[^}]+\}\}/g,":param");return o(t)===o(e)}async function Ze(t,e){let o=new Set,n=[];async function s(i){if(o.has(i)){let r=n.indexOf(i);return r!==-1?[...n.slice(r),i]:null}o.add(i),n.push(i);let a=await W(t,i);if(a){for(let r of a.journey)if(r.spawns)for(let l of r.spawns){let d=await s(l.persona);if(d)return d}}return n.pop(),null}return s(e)}async function te(t){let e=y.join(t,L);m.mkdirSync(e,{recursive:true});let o=await z(t),n={},s={},i={};for(let u of o){let p=new Set,h=new Set,f=[],g=new Set;for(let b of u.journey){for(let w of b.gates)p.add(w);if(b.flow&&h.add(b.flow),f.push(b.route),b.spawns)for(let w of b.spawns)g.add(w.persona);}n[u.id]={name:u.name,trigger:u.trigger.type,spawned_by:u.trigger.spawned_by,steps:u.journey.length,gates:[...p],flows:[...h],routes:f,spawns:[...g],tags:u.tags||[]};for(let b of p)s[b]||(s[b]=[]),s[b].push(u.id);for(let b of f)i[b]||(i[b]=[]),i[b].push(u.id);}let a=[],r=y.join(t,"portal.yaml");if(m.existsSync(r))try{let u=j.load(m.readFileSync(r,"utf8"));u.routes&&typeof u.routes=="object"&&(a=Object.keys(u.routes).filter(h=>!Object.keys(i).some(f=>ee(h,f))));}catch{}let l={},d=y.join(e,"chains");if(m.existsSync(d)){let u=m.readdirSync(d).filter(p=>p.endsWith(".yaml"));for(let p of u)try{let h=m.readFileSync(y.join(d,p),"utf8"),f=j.load(h);if(f&&f.id){let g=f.order.map(I=>I.persona),b=0,w=new Set;for(let I of g){let P=n[I];if(P){b+=P.steps;for(let R of P.gates)w.add(R);}}l[f.id]={description:f.description||"",order:g,total_steps:b,total_gates:w.size};}}catch{}}let c={version:"1.0",generated:new Date().toISOString(),personas:n,chains:l,gate_coverage:s,route_coverage:i,uncovered_routes:a};return m.writeFileSync(y.join(e,Ke),j.dump(c,{indent:2,lineWidth:120,noRefs:true,sortKeys:false})),c}async function Jt(t){let e=await z(t),o=new Set,n=new Set,s=new Set;for(let c of e)for(let u of c.journey){for(let p of u.gates)o.add(p);n.add(u.route),u.flow&&s.add(u.flow);}let i=[],a=[],r=y.join(t,"portal.yaml");if(m.existsSync(r))try{let c=j.load(m.readFileSync(r,"utf8"));c.gates&&typeof c.gates=="object"&&(i=Object.keys(c.gates)),c.routes&&typeof c.routes=="object"&&(a=Object.keys(c.routes));}catch{}let l=[],d=y.join(t,".paradigm","flow-index.json");if(m.existsSync(d))try{let c=JSON.parse(m.readFileSync(d,"utf8"));l=Object.keys(c.flows||{});}catch{}return {routes:{covered:n.size,total:a.length,uncovered:a.filter(c=>!Array.from(n).some(u=>ee(c,u)))},gates:{covered:o.size,total:i.length,uncovered:i.filter(c=>!o.has(c))},flows:{covered:s.size,total:l.length,uncovered:l.filter(c=>!s.has(c))},personas:e.length}}async function Bt(t,e){let o=await z(t),n=[];for(let s of o){let i=[],a=[];for(let r of s.journey)if((r.gates.includes(e)||r.flow===e||r.route===e||r.signals?.includes(e))&&(i.push(r.id),r.spawns))for(let d of r.spawns)a.push(d.persona);i.length>0&&n.push({persona:s.id,steps:i,spawns_blocked:a});}return n}function et(t,e){let o=e.split(/[.\[\]]+/).filter(Boolean),n=t;for(let s of o){if(n==null||typeof n!="object")return;n=n[s];}return n}function tt(t,e){let o=[];if(e.status!==t.expect.status&&o.push({type:"status",field:"status",expected:t.expect.status,actual:e.status,message:`Step ${t.id}: status is ${e.status}, expected ${t.expect.status}`}),t.expect.body?.has){let n=e.body;for(let s of t.expect.body.has)(!n||typeof n!="object"||!(s in n))&&o.push({type:"body.has",field:s,expected:true,actual:false,message:`Step ${t.id}: body missing key '${s}'`});}if(t.expect.body?.match){let n=e.body;for(let[s,i]of Object.entries(t.expect.body.match)){let a=n?et(n,s):void 0;JSON.stringify(a)!==JSON.stringify(i)&&o.push({type:"body.match",field:s,expected:i,actual:a??null,message:`Step ${t.id}: '${s}' is ${JSON.stringify(a??null)}, expected ${JSON.stringify(i)}`});}}if(t.signals&&t.signals.length>0){let n=e.signals_fired||[];for(let s of t.signals)n.includes(s)||o.push({type:"signal",field:"signals_fired",expected:s,actual:n,message:`Step ${t.id}: signal '${s}' was not fired`});}if(t.gates.length>0&&e.gates_traversed)for(let n of t.gates)e.gates_traversed.includes(n)||o.push({type:"gate",field:"gates_traversed",expected:n,actual:e.gates_traversed,message:`Step ${t.id}: gate '${n}' was not traversed`});return o}async function Kt(t,e={}){let o=[];try{let{SentinelStorage:r}=await import('./dist-W3XCATBJ.js'),l=new r,c=(l.queryEvents?.({schemaId:"paradigm-personas",eventType:"persona.step.complete",scopeValue:t.id,limit:500})||[]).filter(f=>{let g=JSON.parse(f.data_json||"{}");return !(e.run_id&&g.run_id!==e.run_id||e.chain_id&&g.chain_id!==e.chain_id||e.environment&&g.environment!==e.environment)}),p=(l.queryEvents?.({schemaId:"paradigm-personas",eventType:"persona.step.fail",scopeValue:t.id,limit:500})||[]).filter(f=>{let g=JSON.parse(f.data_json||"{}");return !(e.run_id&&g.run_id!==e.run_id||e.chain_id&&g.chain_id!==e.chain_id||e.environment&&g.environment!==e.environment)}),h=new Map;for(let f of [...c,...p]){let g=JSON.parse(f.data_json||"{}");g.step_id&&h.set(g.step_id,g);}for(let f of t.journey){let g=h.get(f.id);if(!g){o.push({step_id:f.id,matched:!1,assertions:[],message:`No Sentinel event found for step '${f.id}' \u2014 step was never exercised`});continue}let b=tt(f,{status:g.status,body:g.body,gates_traversed:g.gates_traversed,signals_fired:g.signals_fired});o.push({step_id:f.id,matched:!0,passed:b.length===0,assertions:b});}}catch{for(let r of t.journey)o.push({step_id:r.id,matched:false,assertions:[],message:"Sentinel unavailable \u2014 cannot validate events"});}let n=o.filter(r=>r.matched).length,s=o.filter(r=>r.passed).length,i=o.filter(r=>r.matched&&!r.passed).length,a=o.reduce((r,l)=>r+l.assertions.length,0);return {run_id:e.run_id,environment:e.environment,steps:o,summary:{total_steps:t.journey.length,matched:n,unmatched:t.journey.length-n,passed:s,failed:i,assertion_failures:a}}}var nt={warn(){}},be=nt;function Vt(t){be=t;}function U(){return be}var O="pack.yaml";var st="paradigm.universityPack";var we=/^[a-z0-9][a-z0-9-]{0,63}$/,he=["track","index","chronological","featured"],ge=64,ot=z$1.object({id:z$1.string().regex(we,"invalid section id"),name:z$1.string().min(1).max(120),order:z$1.number().int().min(0).max(9999),style:z$1.enum(he,{errorMap:()=>({message:`section.style must be one of ${he.join("|")}`})}),description:z$1.string().max(1e3).optional(),default:z$1.boolean({invalid_type_error:"section.default must be a boolean"}).optional()}).strict(),ve=z$1.array(ot).max(ge,`sections must contain \u2264${ge} entries`);z$1.object({sections:ve.optional()}).passthrough();z$1.object({section:z$1.string().regex(we).optional(),order:z$1.number().int().min(0).max(9999).optional()}).passthrough();var xe="@a-company/university",Pe=".paradigm/university",_e=".paradigm/cache/packs.json",C=class extends Error{constructor(t,e){super(`pack-load failed (${t}: ${e})`),this.errorClass=t,this.detail=e,this.name="PackLoadError";}},it=["id","name","version","schema_version","tenant_kind"],rt=new Set(["first-party","project","external"]),Se={id:"main",name:"Curriculum",order:1,style:"track",default:true};function $e(t){if(t==null)return [{...Se}];if(Array.isArray(t)&&t.length===0)return [{...Se}];let e=ve.safeParse(t);if(!e.success){let i=e.error.issues[0],a=i?`${i.path.join(".")||"sections"}: ${i.message}`:"sections failed schema validation";throw new C("manifest-invalid",a)}let o=e.data.map(i=>({...i})),n=new Set;for(let i of o){if(n.has(i.id))throw new C("manifest-invalid",`duplicate section id "${i.id}"`);n.add(i.id);}o.length===1&&!o[0].default&&(o[0]={...o[0],default:true});let s=o.filter(i=>i.default===true);if(s.length>1)throw new C("manifest-invalid",`at most one section may set default: true (found ${s.length})`);return o.sort((i,a)=>i.order-a.order||i.id.localeCompare(a.id)),o}function at(t){if(t&&typeof t=="object"&&"name"in t&&typeof t.name=="string"){let e=t.name;return e==="YAMLException"?"yaml syntax error":e}return "parse error"}function H(t){let e=y.join(t,O);if(!m.existsSync(e))throw new C("missing-manifest",`no ${O} at pack root`);let o;try{o=m.readFileSync(e,"utf-8");}catch{throw new C("manifest-unparseable","file read error")}let n;try{n=j.load(o);}catch(i){throw new C("manifest-unparseable",at(i))}let s=n;if(!s||typeof s!="object")throw new C("manifest-invalid","manifest is not an object");for(let i of it){let a=s[i];if(a==null||a==="")throw new C("missing-required-field",`required field ${String(i)} is missing or empty`)}if(!rt.has(String(s.tenant_kind)))throw new C("missing-required-field","tenant_kind must be one of first-party|project|external");return s.sections=$e(s.sections),s}function ct(t){let e=ut(t);if(e)return e;let o=[],n=y.join(t,"node_modules",xe);if(m.existsSync(y.join(n,O)))try{let i=H(n);o.push({manifest:i,rootDir:n,source:"first-party"});}catch(i){U().warn("first-party pack manifest invalid",{errorClass:i instanceof C?i.errorClass:"other"});}for(let i of dt(t))try{let a=H(i);o.push({manifest:a,rootDir:i,source:"npm"});}catch(a){U().warn("npm pack manifest invalid",{errorClass:a instanceof C?a.errorClass:"other"});}let s=y.join(t,Pe);if(m.existsSync(s)&&m.statSync(s).isDirectory()){let i=y.join(s,O),a;if(m.existsSync(i))try{a=H(s),o.push({manifest:a,rootDir:s,source:"local"});}catch(l){U().warn("local pack manifest invalid",{errorClass:l instanceof C?l.errorClass:"other"});}let r=a?.id??"project";for(let l of lt(s))try{let d=H(l);o.push({manifest:d,rootDir:l,source:"local",parentPackId:r});}catch(d){U().warn("discipline sub-pack manifest invalid",{errorClass:d instanceof C?d.errorClass:"other"});}}return ft(t,o),o}function dt(t){let e=y.join(t,"package.json");if(!m.existsSync(e))return [];let o;try{o=JSON.parse(m.readFileSync(e,"utf8"));}catch{return []}let n=new Set([...Object.keys(o.dependencies||{}),...Object.keys(o.devDependencies||{}),...Object.keys(o.peerDependencies||{})]);if(n.size===0)return [];let s=y.join(t,"node_modules");if(!m.existsSync(s))return [];let i=[];for(let a of n){if(a===xe)continue;let r=y.join(s,a,"package.json");if(!m.existsSync(r))continue;let l;try{l=JSON.parse(m.readFileSync(r,"utf8"));}catch{continue}let d=l.paradigm?.universityPack;if(typeof d!="string"||d.length===0)continue;let c=y.resolve(y.dirname(r),d);m.existsSync(y.join(c,O))&&i.push(c);}return i}function lt(t){let e=[],o;try{o=m.readdirSync(t,{withFileTypes:!0});}catch{return e}for(let n of o){if(!n.isDirectory()||n.name.startsWith("."))continue;let s=y.join(t,n.name);m.existsSync(y.join(s,O))&&e.push(s);}return e}function je(t){try{return m.statSync(y.join(t,"node_modules")).mtime.getTime()}catch{return}}function Ce(t){try{return m.statSync(y.join(t,Pe)).mtime.getTime()}catch{return}}function ut(t){let e=y.join(t,_e);if(!m.existsSync(e))return null;let o;try{o=JSON.parse(m.readFileSync(e,"utf8"));}catch{return null}if(o.version!==1||!Array.isArray(o.packs))return null;let n=je(t),s=Ce(t);return o.node_modules_mtime_ms!==n||o.local_university_mtime_ms!==s?null:o.packs.map(i=>({manifest:i.manifest,rootDir:i.rootDir,source:i.source,...i.parentPackId?{parentPackId:i.parentPackId}:{}}))}function ft(t,e){let o=y.join(t,_e);try{m.mkdirSync(y.dirname(o),{recursive:!0});let n={version:1,node_modules_mtime_ms:je(t),local_university_mtime_ms:Ce(t),packs:e.map(s=>({manifest:s.manifest,rootDir:s.rootDir,source:s.source,...s.parentPackId?{parentPackId:s.parentPackId}:{}}))};m.writeFileSync(o,JSON.stringify(n,null,2),"utf8");}catch{}}var F=".paradigm/university",N="content",V="notes",q="policies",G="quizzes",J="paths",Ie="diplomas",se="index.yaml",Te="config.yaml";function Ae(t){return typeof t=="string"?{packRoot:t,stampPackId:true,resolveDefaultPack:true}:{packRoot:t?.packRoot,stampPackId:t?.stampPackId??true,resolveDefaultPack:t?.resolveDefaultPack??true}}function Ee(t,e,o){return e||(o?oe(t):y.join(t,F))}function oe(t){let e=y.join(t,F);if(m.existsSync(e))return e;try{let n=ct(t).find(s=>s.manifest.tenant_kind==="first-party");if(n)return n.rootDir}catch{}return e}function B(t){if(!m.existsSync(t))return null;let e=y.join(t,O);if(m.existsSync(e))try{return H(t)}catch(n){U().warn("pack manifest invalid, using implicit manifest",{errorClass:n instanceof C?n.errorClass:"other"});}let o=y.basename(t)||"project";return {id:o,name:o,version:"0.0.0",schema_version:"1",tenant_kind:"project",description:"Implicit project pack (pack.yaml not present \u2014 v5 layout)",origin_hint:"authored",sections:$e(void 0)}}function pt(t,e,o){return e?{...t,...t.pack_id?{}:{pack_id:e.id},...t.discipline||!o?{}:{discipline:o}}:t}var ie={name:"Project University",tagline:"Learn the codebase",institution:"Paradigm"},re={primary:"#6366f1",secondary:"#8b5cf6",accent:"#f59e0b",background:"#0f172a",surface:"#1e293b",text:"#f8fafc",textMuted:"#94a3b8",success:"#22c55e",error:"#ef4444",font:"Inter, system-ui, sans-serif"},ne={branding:ie,theme:re,content:{categories:[],defaultDifficulty:"beginner",requireApproval:false},diplomas:{includeGlobalPLSAT:true,customCertStyle:null}};function Y(t){let e=y.join(t,F,Te);if(!m.existsSync(e))return {...ne};try{let o=m.readFileSync(e,"utf8"),n=j.load(o);return n?{branding:{...ie,...n.branding||{}},theme:{...re,...n.theme||{}},content:{categories:n.content?.categories||[],defaultDifficulty:n.content?.defaultDifficulty||"beginner",requireApproval:n.content?.requireApproval??!1,defaultCategory:n.content?.defaultCategory},diplomas:{includeGlobalPLSAT:n.diplomas?.includeGlobalPLSAT??!0,customCertStyle:n.diplomas?.customCertStyle??null}}:{...ne}}catch{return {...ne}}}function Oe(t){let e=y.join(t,Te);if(!m.existsSync(e))return null;try{let o=m.readFileSync(e,"utf8"),n=j.load(o);return n?{branding:{...ie,...n.branding||{}},theme:{...re,...n.theme||{}},content:{categories:n.content?.categories||[],defaultDifficulty:n.content?.defaultDifficulty||"beginner",requireApproval:n.content?.requireApproval??!1,defaultCategory:n.content?.defaultCategory},diplomas:{includeGlobalPLSAT:n.diplomas?.includeGlobalPLSAT??!0,customCertStyle:n.diplomas?.customCertStyle??null}}:null}catch{return null}}function Fe(t){let e=y.join(t,O);if(!m.existsSync(e))return false;try{let o=m.readFileSync(e,"utf8"),n=j.load(o);return !n||!Array.isArray(n.sections)?!1:n.sections.some(s=>s&&typeof s.id=="string"&&s.id.length>0)}catch{return false}}function K(t){let e=y.join(t,F,se);if(!m.existsSync(e))return null;try{let o=m.readFileSync(e,"utf8");return j.load(o)}catch{return null}}function Re(t){let e=t.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);if(!e)return null;try{return {frontmatter:j.load(e[1]),body:e[2].trim()}}catch{return null}}function mt(t,e){return `---
|
|
3
3
|
${j.dump(t,{lineWidth:-1,noRefs:true,sortKeys:false})}---
|
|
4
4
|
|
|
5
5
|
${e}
|
|
@@ -16,5 +16,5 @@ ${i.map((w,I)=>`${I+1}. ${w}`).join(`
|
|
|
16
16
|
- Modified files: ${r.length>0?r.join(", "):"(not specified)"}
|
|
17
17
|
- Symbols touched: ${l.length>0?l.join(", "):"(not specified)"}
|
|
18
18
|
- Open questions: ${d.length>0?d.join(", "):"(none)"}
|
|
19
|
-
`;return Mt(),{handled:true,text:JSON.stringify({handoff:f,markdownSummary:b,persisted:g,recovery:"The next session will automatically receive this handoff via paradigm_session_recover."},null,2)}}if(t==="paradigm_session_stats"){let s=n.getStats(),i=n.getCostBreakdown(),a=n.getDurationMinutes();return {handled:true,text:JSON.stringify({session:{startTime:new Date(s.startTime).toISOString(),durationMinutes:a,lastActivity:new Date(s.lastActivity).toISOString()},model:{name:i.model,id:i.modelId,pricing:{inputPerMillion:`$${i.pricing.input.toFixed(2)}`,outputPerMillion:`$${i.pricing.output.toFixed(2)}`}},interactions:{toolCalls:s.totals.toolCallCount,resourceReads:s.totals.resourceReadCount,totalInteractions:s.totals.toolCallCount+s.totals.resourceReadCount},tokens:{total:s.totals.totalTokens,byCategory:{resources:i.resources.tokens,tools:i.tools.tokens}},cost:{totalUsd:`$${i.total.costUsd.toFixed(4)}`,breakdown:{resources:`$${i.resources.costUsd.toFixed(4)}`,tools:`$${i.tools.costUsd.toFixed(4)}`},note:"Cost is for MCP output tokens only (responses sent to model)"},details:{resourcesByType:i.resources.byType,toolsByName:i.tools.byName}},null,2)}}if(t==="paradigm_session_recover"){let{checkpoint:s,pendingHandoffs:i,previousSession:a}=Je(o.rootDir);if(!a&&i.length===0&&!s)return {handled:true,text:JSON.stringify({found:false,message:"No previous session breadcrumbs, checkpoints, or pending handoffs found.",tip:"Breadcrumbs persist to ~/.paradigm/sessions/ and handoffs persist via paradigm_handoff_prepare. Checkpoints persist via paradigm_session_checkpoint."},null,2)};let r={found:true};if(s){let d=Date.now()-s.timestamp,c=Math.round(d/6e4),u=Math.round(d/36e5);r.checkpoint={phase:s.phase,context:s.context,age:u>1?`${u} hours ago`:`${c} minutes ago`,timestamp:new Date(s.timestamp).toISOString(),sessionId:s.sessionId,plan:s.plan,modifiedFiles:s.modifiedFiles,symbolsTouched:s.symbolsTouched,decisions:s.decisions,recentBreadcrumbs:s.recentBreadcrumbs?.map(p=>({time:new Date(p.timestamp).toISOString(),action:p.action,tool:p.tool,symbol:p.symbol,summary:p.summary}))};}if(a){let d=Date.now()-a.lastActivity,c=Math.round(d/6e4),u=Math.round(d/36e5),h=a.breadcrumbs.slice(-10).map(f=>({time:new Date(f.timestamp).toISOString(),action:f.action,tool:f.tool,symbol:f.symbol,summary:f.summary}));r.previousSession={sessionId:a.sessionId,startTime:new Date(a.startTime).toISOString(),lastActivity:new Date(a.lastActivity).toISOString(),age:u>1?`${u} hours ago`:`${c} minutes ago`},r.context={symbolsModified:a.symbolsModified,filesExplored:a.filesExplored},r.recentActions=h;}if(i.length>0){r.pendingHandoffs=i.map(d=>({id:d.id,timestamp:d.timestamp,from:d.from,to:d.to,summary:d.summary,nextSteps:d.nextSteps,modifiedFiles:d.modifiedFiles,symbolsTouched:d.symbolsTouched,openQuestions:d.openQuestions}));for(let d of i)try{c(o.rootDir,d.id);}catch{}}let l="Continue where the previous session left off.";if(s)l=`Previous session was in "${s.phase}" phase: ${s.context}`,s.decisions?.length&&(l+=` Key decisions: ${s.decisions.slice(0,2).join("; ")}`);else if(i.length>0){let d=i[i.length-1];l=`Handoff received: "${d.summary}". `,d.nextSteps.length>0&&(l+=`Start with: ${d.nextSteps[0]}`);}else if(a){let d=a.breadcrumbs.slice(-10);if(d.length>0){let c=d[d.length-1];c.symbol&&(l=`Last work involved ${c.symbol}. Consider checking its current state with paradigm_ripple.`);}}return r.suggestion=l,r.agentInstruction="Present a brief summary of the previous session, then ask the user what they would like to do: (1) Continue \u2014 pick up where the last session left off, (2) Discard \u2014 ignore the previous session and start fresh, or (3) let them describe what they want to work on instead. Do NOT automatically continue without asking.",n.markRecovered(),{handled:true,text:JSON.stringify(r,null,2)}}if(t==="paradigm_session_checkpoint"){n.setRootDir(o.rootDir);let s=e.phase,i=e.context,a=e.externalId,r=e.plan,l=e.modifiedFiles,d=e.symbolsTouched,c=e.decisions,{checkpoint:u,persisted:p}=n.saveCheckpoint({phase:s,context:i,externalId:a,plan:r,modifiedFiles:l,symbolsTouched:d,decisions:c}),h=p.local||p.global;return {handled:true,text:JSON.stringify({saved:h,persisted:p,checkpoint:{phase:u.phase,context:u.context,sessionId:u.sessionId,...u.externalId?{externalId:u.externalId}:{},timestamp:new Date(u.timestamp).toISOString(),modifiedFiles:u.modifiedFiles?.length||0,symbolsTouched:u.symbolsTouched?.length||0,decisions:u.decisions?.length||0,recentBreadcrumbs:u.recentBreadcrumbs?.length||0},...h?{note:"Checkpoint saved. Recovery data will be auto-surfaced on the first tool call of the next session."}:{warning:"Checkpoint was NOT persisted to disk. Both local and global writes failed. Check MCP server stderr for details."}},null,2)}}return {handled:false,text:""}}function Je(t){let e=j$1();e.setRootDir(t);let o=e.loadCheckpoint(),n=e.loadPreviousSession(),s=[];try{s=b(t);}catch{}return {checkpoint:o,pendingHandoffs:s,previousSession:n}}async function kn(t){let{checkpoint:e,pendingHandoffs:o}=Je(t);if(!e&&o.length===0)return null;let n=[];if(n.push("--- SESSION RECOVERY ---"),e){let s=Date.now()-e.timestamp,i=Math.round(s/6e4),a=Math.round(s/36e5),r=a>1?`${a}h ago`:`${i}m ago`;n.push(`Previous session was in "${e.phase}" phase (${r}): ${e.context}`),e.modifiedFiles?.length&&n.push(`Modified files: ${e.modifiedFiles.join(", ")}`),e.symbolsTouched?.length&&n.push(`Symbols: ${e.symbolsTouched.join(", ")}`),e.decisions?.length&&n.push(`Decisions: ${e.decisions.join("; ")}`),e.plan&&n.push(`Plan: ${e.plan.slice(0,200)}`);}if(o.length>0){let s=o[o.length-1];n.push(`Pending handoff: "${s.summary}"`),s.nextSteps.length>0&&n.push(`Next steps: ${s.nextSteps.slice(0,3).join(", ")}`);}try{try{let{reapStaleInProgress:l}=await import('./task-settlement-
|
|
19
|
+
`;return Mt(),{handled:true,text:JSON.stringify({handoff:f,markdownSummary:b,persisted:g,recovery:"The next session will automatically receive this handoff via paradigm_session_recover."},null,2)}}if(t==="paradigm_session_stats"){let s=n.getStats(),i=n.getCostBreakdown(),a=n.getDurationMinutes();return {handled:true,text:JSON.stringify({session:{startTime:new Date(s.startTime).toISOString(),durationMinutes:a,lastActivity:new Date(s.lastActivity).toISOString()},model:{name:i.model,id:i.modelId,pricing:{inputPerMillion:`$${i.pricing.input.toFixed(2)}`,outputPerMillion:`$${i.pricing.output.toFixed(2)}`}},interactions:{toolCalls:s.totals.toolCallCount,resourceReads:s.totals.resourceReadCount,totalInteractions:s.totals.toolCallCount+s.totals.resourceReadCount},tokens:{total:s.totals.totalTokens,byCategory:{resources:i.resources.tokens,tools:i.tools.tokens}},cost:{totalUsd:`$${i.total.costUsd.toFixed(4)}`,breakdown:{resources:`$${i.resources.costUsd.toFixed(4)}`,tools:`$${i.tools.costUsd.toFixed(4)}`},note:"Cost is for MCP output tokens only (responses sent to model)"},details:{resourcesByType:i.resources.byType,toolsByName:i.tools.byName}},null,2)}}if(t==="paradigm_session_recover"){let{checkpoint:s,pendingHandoffs:i,previousSession:a}=Je(o.rootDir);if(!a&&i.length===0&&!s)return {handled:true,text:JSON.stringify({found:false,message:"No previous session breadcrumbs, checkpoints, or pending handoffs found.",tip:"Breadcrumbs persist to ~/.paradigm/sessions/ and handoffs persist via paradigm_handoff_prepare. Checkpoints persist via paradigm_session_checkpoint."},null,2)};let r={found:true};if(s){let d=Date.now()-s.timestamp,c=Math.round(d/6e4),u=Math.round(d/36e5);r.checkpoint={phase:s.phase,context:s.context,age:u>1?`${u} hours ago`:`${c} minutes ago`,timestamp:new Date(s.timestamp).toISOString(),sessionId:s.sessionId,plan:s.plan,modifiedFiles:s.modifiedFiles,symbolsTouched:s.symbolsTouched,decisions:s.decisions,recentBreadcrumbs:s.recentBreadcrumbs?.map(p=>({time:new Date(p.timestamp).toISOString(),action:p.action,tool:p.tool,symbol:p.symbol,summary:p.summary}))};}if(a){let d=Date.now()-a.lastActivity,c=Math.round(d/6e4),u=Math.round(d/36e5),h=a.breadcrumbs.slice(-10).map(f=>({time:new Date(f.timestamp).toISOString(),action:f.action,tool:f.tool,symbol:f.symbol,summary:f.summary}));r.previousSession={sessionId:a.sessionId,startTime:new Date(a.startTime).toISOString(),lastActivity:new Date(a.lastActivity).toISOString(),age:u>1?`${u} hours ago`:`${c} minutes ago`},r.context={symbolsModified:a.symbolsModified,filesExplored:a.filesExplored},r.recentActions=h;}if(i.length>0){r.pendingHandoffs=i.map(d=>({id:d.id,timestamp:d.timestamp,from:d.from,to:d.to,summary:d.summary,nextSteps:d.nextSteps,modifiedFiles:d.modifiedFiles,symbolsTouched:d.symbolsTouched,openQuestions:d.openQuestions}));for(let d of i)try{c(o.rootDir,d.id);}catch{}}let l="Continue where the previous session left off.";if(s)l=`Previous session was in "${s.phase}" phase: ${s.context}`,s.decisions?.length&&(l+=` Key decisions: ${s.decisions.slice(0,2).join("; ")}`);else if(i.length>0){let d=i[i.length-1];l=`Handoff received: "${d.summary}". `,d.nextSteps.length>0&&(l+=`Start with: ${d.nextSteps[0]}`);}else if(a){let d=a.breadcrumbs.slice(-10);if(d.length>0){let c=d[d.length-1];c.symbol&&(l=`Last work involved ${c.symbol}. Consider checking its current state with paradigm_ripple.`);}}return r.suggestion=l,r.agentInstruction="Present a brief summary of the previous session, then ask the user what they would like to do: (1) Continue \u2014 pick up where the last session left off, (2) Discard \u2014 ignore the previous session and start fresh, or (3) let them describe what they want to work on instead. Do NOT automatically continue without asking.",n.markRecovered(),{handled:true,text:JSON.stringify(r,null,2)}}if(t==="paradigm_session_checkpoint"){n.setRootDir(o.rootDir);let s=e.phase,i=e.context,a=e.externalId,r=e.plan,l=e.modifiedFiles,d=e.symbolsTouched,c=e.decisions,{checkpoint:u,persisted:p}=n.saveCheckpoint({phase:s,context:i,externalId:a,plan:r,modifiedFiles:l,symbolsTouched:d,decisions:c}),h=p.local||p.global;return {handled:true,text:JSON.stringify({saved:h,persisted:p,checkpoint:{phase:u.phase,context:u.context,sessionId:u.sessionId,...u.externalId?{externalId:u.externalId}:{},timestamp:new Date(u.timestamp).toISOString(),modifiedFiles:u.modifiedFiles?.length||0,symbolsTouched:u.symbolsTouched?.length||0,decisions:u.decisions?.length||0,recentBreadcrumbs:u.recentBreadcrumbs?.length||0},...h?{note:"Checkpoint saved. Recovery data will be auto-surfaced on the first tool call of the next session."}:{warning:"Checkpoint was NOT persisted to disk. Both local and global writes failed. Check MCP server stderr for details."}},null,2)}}return {handled:false,text:""}}function Je(t){let e=j$1();e.setRootDir(t);let o=e.loadCheckpoint(),n=e.loadPreviousSession(),s=[];try{s=b(t);}catch{}return {checkpoint:o,pendingHandoffs:s,previousSession:n}}async function kn(t){let{checkpoint:e,pendingHandoffs:o}=Je(t);if(!e&&o.length===0)return null;let n=[];if(n.push("--- SESSION RECOVERY ---"),e){let s=Date.now()-e.timestamp,i=Math.round(s/6e4),a=Math.round(s/36e5),r=a>1?`${a}h ago`:`${i}m ago`;n.push(`Previous session was in "${e.phase}" phase (${r}): ${e.context}`),e.modifiedFiles?.length&&n.push(`Modified files: ${e.modifiedFiles.join(", ")}`),e.symbolsTouched?.length&&n.push(`Symbols: ${e.symbolsTouched.join(", ")}`),e.decisions?.length&&n.push(`Decisions: ${e.decisions.join("; ")}`),e.plan&&n.push(`Plan: ${e.plan.slice(0,200)}`);}if(o.length>0){let s=o[o.length-1];n.push(`Pending handoff: "${s.summary}"`),s.nextSteps.length>0&&n.push(`Next steps: ${s.nextSteps.slice(0,3).join(", ")}`);}try{try{let{reapStaleInProgress:l}=await import('./task-settlement-F7CIKUG3.js');await l(t);}catch{}let{assembleCaptainBoard:s,proposeClaimantFor:i}=await import('./captain-2MEKZKJS.js'),a=await s(t,{proposeClaimants:!0}),r=a.unclaimed.slice(0,5);if(a.summary.open>0||a.summary.inFlight>0||a.summary.runs>0){n.push(""),n.push(`Cid (captain): ${a.summary.open} open, ${a.summary.inFlight} in-flight`+(a.summary.runs>0?`, ${a.summary.runs} active run(s)`:"")+`, ${a.summary.unclaimed} unclaimed`);let{updateTask:l,loadTask:d}=await import('./task-loader-INPLZRG5.js');for(let c of r){let u=c.tags.length>0?` [${c.tags.join(", ")}]`:"",p=c.proposedClaimant;if(!p){let h=await d(t,c.taskId);h&&(p=await i(h,t));}if(p){try{let h=await d(t,c.taskId);h&&!h.claimant&&h.status==="open"&&await l(t,c.taskId,{claimant:p});}catch{}n.push(` [${c.priority}] ${c.taskId}: ${c.blurb}${u} \u2192 proposed ${p.ref}`);}else n.push(` [${c.priority}] ${c.taskId}: ${c.blurb}${u}`);}}}catch{try{let{loadTasks:s}=await import('./task-loader-INPLZRG5.js'),i=await s(t,{status:"open",limit:5});if(i.length>0){n.push(""),n.push("Open tasks:");for(let a of i){let r=a.tags.length>0?` [${a.tags.join(", ")}]`:"";n.push(` [${a.priority}] ${a.id}: ${a.blurb}${r}`);}}}catch{}}try{let{loadLoreEntries:s}=await import('./lore-loader-PXFKMKAN.js'),a=(await s(t,{limit:10})).filter(r=>r.tags?.some(l=>l.startsWith("arc:")));if(a.length>0){let r=new Map;for(let c of a){let u=c.tags?.find(p=>p.startsWith("arc:"))||"";r.set(u,(r.get(u)||0)+1);}let l=e?.symbolsTouched||[];if((l.length>0?a.filter(c=>c.symbols_touched?.some(u=>l.includes(u))):a.slice(0,3)).length>0||r.size>0){n.push(""),n.push("Active lore arcs:");for(let[c,u]of r)n.push(` ${c} (${u} entries)`);}}}catch{}try{let{loadNominations:s}=await import('./nomination-engine-BUPERVPR.js'),i=s(t,{pending_only:!0}).filter(a=>a.urgency==="critical"||a.urgency==="high");if(i.length>0){n.push(""),n.push("Ambient nominations (urgent):");for(let a of i.slice(0,5))n.push(` [${a.urgency}] ${a.brief}`);i.length>5&&n.push(` ... and ${i.length-5} more. Use paradigm_ambient_nominations to see all.`);}}catch{}return n.push(""),n.push("IMPORTANT: Present a brief summary of this recovery data to the user, then ask what they would like to do: (1) Continue \u2014 pick up where the last session left off, (2) Discard \u2014 ignore the previous session and start fresh, or (3) let them describe what they want to work on instead. Do NOT automatically continue without asking."),n.push("---"),n.join(`
|
|
20
20
|
`)}export{vt as A,Ue as B,kt as C,$t as D,jt as E,le as F,Et as G,cn as H,dn as I,ln as J,un as K,Ot as L,fn as M,pn as N,gn as O,Sn as P,bn as Q,wn as R,vn as S,kn as T,Lt as a,z as b,W as c,Wt as d,ye as e,Ut as f,Ht as g,qt as h,Gt as i,te as j,Jt as k,Bt as l,Kt as m,Vt as n,O as o,st as p,oe as q,B as r,Y as s,yt as t,ht as u,Ne as v,gt as w,ae as x,St as y,bt as z};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {b as b$1}from'./chunk-5TAVYPOV.js';import*as l from'fs';import*as f from'path';import*as x from'os';import*as u from'js-yaml';function k(e){if(!e)return "";let t=e.trim();return t=t.replace(/^symbol:/i,""),t=t.replace(/^[#$^!~@&%?]/,""),t.trim().toLowerCase()}function C(e,t,o){let r=new Map,c=f.join(b,e);N(c,r);let n=f.join(t,h,e);N(n,r);let s=Array.from(r.values());if(o?.concepts&&o.concepts.length>0){let p=new Set(o.concepts.map(k));s=s.filter(a=>a.concepts.some(i=>p.has(k(i))));}if(o?.tags&&o.tags.length>0){let p=new Set(o.tags.map(a=>a.toLowerCase()));s=s.filter(a=>a.tags.some(i=>p.has(i.toLowerCase())));}return s.sort((p,a)=>a.appliedCount-p.appliedCount)}function N(e,t){if(l.existsSync(e))try{let o=l.readdirSync(e).filter(r=>r.startsWith(j)&&r.endsWith(S));for(let r of o)try{let c=l.readFileSync(f.join(e,r),"utf-8"),n=u.load(c);n?.id&&t.set(n.id,n);}catch{}}catch{}}function A(e,t,o){let r=Array.from(new Set((t||[]).map(k).filter(Boolean)));if(r.length===0)return {value:y,found:false};let c=C(e,o,{concepts:r});return c.length===0?{value:y,found:false}:{value:Math.max(...c.map(s=>typeof s.confidence=="number"?s.confidence:y)),found:true}}function T(e,t,o){let r=C(e,o),c=t.toLowerCase();return r.filter(n=>n.context.toLowerCase().includes(c)||n.snippet.toLowerCase().includes(c)||n.concepts.some(s=>s.toLowerCase().includes(c))||n.tags.some(s=>s.toLowerCase().includes(c)))}function P(e){let t=[e.context,e.snippet,...e.concepts,...e.tags].join(" ").toLowerCase();return ["paradigm","mcp_","mcp tool",".paradigm/","lore entry","lore record","aspect","^gate","portal.yaml",".purpose","sentinel","symphony","ambient nomination","paradigm_"," pan ","agent notebook","concept anchor","symbol system","work log","knowledge stream","nevr.land","neverland"].some(r=>t.includes(r))?"platform-specific":/[#$^!~][a-z][a-z0-9-]{2,}/.test(t)||/\/[a-z0-9_-]{2,}\/[a-z0-9_-]/.test(t)?"project-specific":"generalizable"}function v(e,t,o,r){let c=new Date().toISOString(),n=(t.concepts[0]||t.context.split(" ").slice(0,4).join(" ")||"entry").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,40),p=`nb-${e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}-${n}`,a=t.scope??P({context:t.context,snippet:t.snippet,concepts:t.concepts,tags:t.tags}),i=Array.from(new Set((t.concepts||[]).map(k).filter(Boolean))),d={...t,concepts:i,id:p,scope:a,publishable:t.publishable??true,confidence:t.confidence??.5,appliedCount:0,created:c,updated:c},g=o==="global"?f.join(b,e):f.join(r||process.cwd(),h,e);l.existsSync(g)||l.mkdirSync(g,{recursive:true});let w=`${p}${S}`,m=f.join(g,w),E=u.dump(d,{lineWidth:120,noRefs:true,sortKeys:false});return l.writeFileSync(m,E,"utf-8"),{entry:d,filePath:m}}async function $(e,t,o,r="global"){let{loadLoreEntry:c}=await import('./lore-loader-PXFKMKAN.js'),n=await c(o,t);if(!n)return null;let s=[];if(n.symbols_touched)for(let i of n.symbols_touched){let d=i.replace(/^[#$^!~]/,"").toLowerCase();s.push(d);}let p=n.summary||"";n.body&&(p+=`
|
|
3
|
+
|
|
4
|
+
`+n.body);let a={source:"lore",loreEntryId:t,originProject:f.basename(o),createdBy:e};return v(e,{context:n.title||`Promoted from ${t}`,snippet:p,provenance:a,confidence:n.confidence??.7,concepts:s,tags:n.tags||[]},r,o)}function B(e,t,o){let r=f.join(o,h,e),c=f.join(b,e);for(let n of [r,c]){let s=f.join(n,`${t}${S}`);if(l.existsSync(s))try{let p=l.readFileSync(s,"utf-8"),a=u.load(p);if(a)return a.appliedCount=(a.appliedCount||0)+1,a.lastAppliedAt=new Date().toISOString(),a.updated=new Date().toISOString(),l.writeFileSync(s,u.dump(a,{lineWidth:120,noRefs:!0,sortKeys:!1}),"utf-8"),!0}catch{}}return false}function R(e,t,o,r){let c=f.join(r,h,e),n=f.join(b,e);for(let s of [c,n]){let p=f.join(s,`${t}${S}`);if(l.existsSync(p))try{let a=l.readFileSync(p,"utf-8"),i=u.load(a);if(!i)continue;i.appliedAndBrokeCount=(i.appliedAndBrokeCount||0)+1;let d=typeof i.confidence=="number"?i.confidence:y;i.confidence=Math.max(0,d-D);let g=new Date().toISOString(),w=i.refinement?.base??(i.context||i.snippet||"").slice(0,200),m=i.refinement?.exceptions??[];return m.some(L=>L.sourceFailureId===o.failureId)||m.push({when:(o.detail||o.signal).slice(0,200),then:F,sourceFailureId:o.failureId}),i.refinement={base:w,exceptions:m,revisedAt:g},i.lineageType="refine",i.updated=g,l.writeFileSync(p,u.dump(i,{lineWidth:120,noRefs:!0,sortKeys:!1}),"utf-8"),!0}catch{}}return false}function z(e){let t=[],o=(r,c)=>{if(!l.existsSync(r))return;let n;try{n=l.readdirSync(r,{withFileTypes:!0}).filter(s=>s.isDirectory()).map(s=>s.name);}catch{return}for(let s of n){let p=f.join(r,s),a;try{a=l.readdirSync(p).filter(i=>i.startsWith(j)&&i.endsWith(S));}catch{continue}for(let i of a){let d=f.join(p,i);try{let g=u.load(l.readFileSync(d,"utf-8"));g?.id&&t.push({entry:g,agentId:s,filePath:d,scope:c});}catch{}}}};return o(b,"global"),o(f.join(e,h),"project"),t}function I(e,t){let{entry:o,filePath:r}=e,c=typeof o.confidence=="number"?o.confidence:y,n=Math.max(0,c-t);if(n===c)return false;try{return o.confidence=n,o.updated=new Date().toISOString(),l.writeFileSync(r,u.dump(o,{lineWidth:120,noRefs:!0,sortKeys:!1}),"utf-8"),!0}catch{return false}}var b,h,j,S,y,D,F,_=b$1(()=>{b=f.join(x.homedir(),".paradigm","notebooks"),h=".paradigm/notebooks",j="nb-",S=".yaml";y=.5;D=.15,F="needs authoring in gated class review (/paradigm:class refine)";});export{k as a,C as b,y as c,A as d,T as e,P as f,v as g,$ as h,B as i,R as j,z as k,I as l,_ as m};
|
|
@@ -421,7 +421,7 @@ import m from'chalk';import Ze from'sql.js';import {v4}from'uuid';import*as S fr
|
|
|
421
421
|
SELECT id FROM events ORDER BY timestamp ASC LIMIT ?
|
|
422
422
|
)`,[t]),this.save(),t}rowToGenericEvent(e,n){let t={};return e.forEach((s,r)=>{t[s]=n[r];}),{id:t.id,schemaId:t.schema_id,eventType:t.event_type,category:t.category,timestamp:t.timestamp,scopeValue:t.scope_value||void 0,scopeOrdinal:t.scope_ordinal!=null?t.scope_ordinal:void 0,sessionId:t.session_id||void 0,service:t.service,data:t.data_json?JSON.parse(t.data_json):void 0,severity:t.severity||"info",parentEventId:t.parent_event_id||void 0,depth:t.depth||0}}close(){this.db&&(this.save(),this.db.close(),this.db=null);}};var nt={minScore:30,maxResults:5,boostConfidence:true},q=class{constructor(e){this.storage=e;}match(e,n={}){let{minScore:t,maxResults:s,boostConfidence:r}={...nt,...n},i=this.storage.getAllPatterns({includePrivate:true}),a=[];for(let c of i){if(!this.matchEnvironment(c,e))continue;let{score:l,matchedCriteria:d}=this.scoreMatch(c,e);if(l>=t){let u=l;if(r){let g=c.confidence.score/100;u=l*(.5+.5*g);}a.push({pattern:c,score:l,matchedCriteria:d,confidence:Math.round(u)}),this.storage.updatePatternConfidence(c.id,"matched");}}return a.sort((c,l)=>l.confidence-c.confidence).slice(0,s)}testPattern(e,n=100){let t=this.storage.getRecentIncidents({limit:n}),s=[],r=0;for(let i of t){if(!this.matchEnvironment(e,i))continue;let{score:a}=this.scoreMatch(e,i);a>=30&&(s.push(i),r+=a);}return {wouldMatch:s,matchCount:s.length,avgScore:s.length>0?Math.round(r/s.length):0}}scoreMatch(e,n){let t=0,s={symbols:[],errorKeywords:[],missingSignals:[]},r=this.matchSymbols(e.pattern.symbols,n.symbols,s.symbols);t+=Math.min(r,50);let i=this.matchErrorText(e,n,s.errorKeywords);t+=Math.min(i,25);let a=this.matchMissingSignals(e,n,s.missingSignals);return t+=Math.min(a,25),t=Math.min(t,100),{score:t,matchedCriteria:s}}matchSymbols(e,n,t){let s=0,r=["feature","component","flow","gate","signal","state","integration"];for(let i of r){let a=e[i],c=n[i];if(!(!a||!c)){if(typeof a=="string")this.matchSingleSymbol(a,c)&&(s+=a.includes("*")?5:10,t.push(i));else if(Array.isArray(a)){for(let l of a)if(this.matchSingleSymbol(l,c)){s+=7,t.push(i);break}}}}return s}matchSingleSymbol(e,n){if(e==="*")return true;if(e.endsWith("*")){let t=e.slice(0,-1);return n.startsWith(t)}if(e.startsWith("*")){let t=e.slice(1);return n.endsWith(t)}return e.includes("*")?new RegExp("^"+e.replace(/\*/g,".*")+"$").test(n):e===n}matchErrorText(e,n,t){let s=0,r=n.error.message.toLowerCase(),i=n.error.type?.toLowerCase();if(e.pattern.errorContains)for(let a of e.pattern.errorContains)r.includes(a.toLowerCase())&&(s+=5,t.push(a));if(e.pattern.errorMatches)try{new RegExp(e.pattern.errorMatches,"i").test(n.error.message)&&(s+=10,t.push(`regex:${e.pattern.errorMatches}`));}catch{}if(e.pattern.errorType&&i)for(let a of e.pattern.errorType)i.includes(a.toLowerCase())&&(s+=5,t.push(`type:${a}`));return s}matchMissingSignals(e,n,t){if(!e.pattern.missingSignals||!n.flowPosition?.missing)return 0;let s=0;for(let r of e.pattern.missingSignals)for(let i of n.flowPosition.missing)if(this.matchSingleSymbol(r,i)){s+=12,t.push(i);break}return s}matchEnvironment(e,n){return !e.pattern.environment||e.pattern.environment.length===0?true:e.pattern.environment.includes(n.environment)}};var G=class{constructor(e){this.storage=e;}getStats(e=7){let n=new Date().toISOString(),t=new Date(Date.now()-e*24*60*60*1e3).toISOString();return this.storage.getStats({start:t,end:n})}getSymbolHealth(e){return this.storage.getSymbolHealth(e)}getTrendingIssues(e=7){let n=Date.now(),t=e*24*60*60*1e3/2,s=new Date(n-e*24*60*60*1e3).toISOString(),r=new Date(n-t).toISOString(),i=new Date(n).toISOString(),a=this.storage.getRecentIncidents({dateFrom:s,dateTo:r,limit:1e3}),c=this.storage.getRecentIncidents({dateFrom:r,dateTo:i,limit:1e3}),l=this.countSymbols(a),d=this.countSymbols(c),u=[],g=new Set([...l.keys(),...d.keys()]);for(let p of g){let y=l.get(p)||0,f=d.get(p)||0;if(y===0&&f>0)u.push({symbol:p,trend:f*100});else if(y>0){let T=(f-y)/y*100;u.push({symbol:p,trend:T});}}return u.filter(p=>p.trend>0).sort((p,y)=>y.trend-p.trend).slice(0,10)}getResolutionMetrics(){let e=this.getStats(30);return {avgTimeToResolve:e.resolution.avgTimeToResolve,resolvedWithPattern:e.resolution.resolvedWithPattern,resolvedManually:e.resolution.resolvedManually,totalResolved:e.incidents.resolved,resolutionRate:e.resolution.resolutionRate}}getPatternEffectiveness(){return this.storage.getAllPatterns({includePrivate:true}).filter(n=>n.confidence.timesMatched>0).map(n=>({patternId:n.id,name:n.name,matches:n.confidence.timesMatched,resolutions:n.confidence.timesResolved,recurrences:n.confidence.timesRecurred,effectiveness:n.confidence.timesMatched>0?Math.round((n.confidence.timesResolved-n.confidence.timesRecurred)/n.confidence.timesMatched*100):0})).sort((n,t)=>t.effectiveness-n.effectiveness)}getIncidentsByHour(e=7){let n=new Date(Date.now()-e*24*60*60*1e3).toISOString(),t=this.storage.getRecentIncidents({dateFrom:n,limit:1e4}),s=new Map;for(let r=0;r<24;r++)s.set(r,0);for(let r of t){let i=new Date(r.timestamp).getHours();s.set(i,(s.get(i)||0)+1);}return Array.from(s.entries()).map(([r,i])=>({hour:r,count:i}))}getIncidentsByEnvironment(){let e=this.getStats(30),n=e.incidents.total;return Object.entries(e.incidents.byEnvironment).map(([t,s])=>({environment:t,count:s,percentage:n>0?Math.round(s/n*100):0})).sort((t,s)=>s.count-t.count)}getSymbolCorrelation(){let e=this.storage.getRecentIncidents({limit:1e3}),n=new Map,t=new Map;for(let r of e){let i=this.getSymbolsFromIncident(r);for(let a of i)t.set(a,(t.get(a)||0)+1);for(let a=0;a<i.length;a++)for(let c=a+1;c<i.length;c++){let l=[i[a],i[c]].sort().join("|");n.set(l,(n.get(l)||0)+1);}}let s=[];for(let[r,i]of n){let[a,c]=r.split("|"),l=t.get(a)||1,d=t.get(c)||1,u=i/Math.max(l,d);u>.3&&s.push({symbol1:a,symbol2:c,correlation:Math.round(u*100)/100});}return s.sort((r,i)=>i.correlation-r.correlation).slice(0,20)}generateDashboard(e=7){let n=this.getStats(e),t=[];t.push("\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557"),t.push("\u2551 PARADIGM SENTINEL DASHBOARD \u2551"),t.push("\u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563");let s=n.incidents.byDay[n.incidents.byDay.length-1]?.count||0;t.push(`\u2551 Open: ${String(n.incidents.open).padEnd(4)} \u2502 Investigating: ${String(n.incidents.total-n.incidents.open-n.incidents.resolved).padEnd(3)} \u2502 Resolved: ${String(n.incidents.resolved).padEnd(4)} \u2502 Today: +${s} \u2551`),t.push("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D"),t.push(""),t.push("Incidents by Day (last 7 days):"),t.push("\u2500".repeat(50));let r=Math.max(...n.incidents.byDay.map(i=>i.count),1);for(let i of n.incidents.byDay.slice(-7)){let a=Math.round(i.count/r*30),c="\u2588".repeat(a);t.push(`${i.date.substring(5)} ${c} ${i.count}`);}t.push(""),t.push("Most Affected Symbols:"),t.push("\u2500".repeat(50));for(let{symbol:i,count:a}of n.symbols.mostIncidents.slice(0,5))t.push(` ${i.padEnd(25)} ${a} incidents`);t.push(""),t.push("Top Patterns:"),t.push("\u2500".repeat(50));for(let{patternId:i,resolvedCount:a}of n.patterns.mostEffective.slice(0,5))t.push(` ${i.padEnd(25)} ${a} resolved`);return t.push(""),t.push("Resolution Stats:"),t.push("\u2500".repeat(50)),t.push(` Resolution rate: ${Math.round(n.resolution.resolutionRate)}%`),t.push(` With pattern: ${n.resolution.resolvedWithPattern}`),t.push(` Manual: ${n.resolution.resolvedManually}`),t.join(`
|
|
423
423
|
`)}countSymbols(e){let n=new Map;for(let t of e)for(let[,s]of Object.entries(t.symbols))s&&n.set(s,(n.get(s)||0)+1);return n}getSymbolsFromIncident(e){let n=[];for(let[,t]of Object.entries(e.symbols))t&&n.push(t);return n}};var W=class{build(e){if(!e.flowPosition)return null;let n=[],t=new Date(e.timestamp).getTime();n.push({timestamp:new Date(t-5e3).toISOString(),symbol:e.flowPosition.flowId,type:"flow-started"});let s=1e3;for(let i of e.flowPosition.actual){let a=this.inferEventType(i);n.push({timestamp:new Date(t-4e3+s).toISOString(),symbol:i,type:a}),s+=Math.random()*1e3+500;}let r=e.flowPosition.failedAt||e.flowPosition.missing[0]||e.symbols.gate||e.symbols.signal||"unknown";return n.push({timestamp:e.timestamp,symbol:r,type:"error",data:{message:e.error.message,missing:e.flowPosition.missing}}),{incidentId:e.id,flowId:e.flowPosition.flowId,events:n,failure:{at:e.timestamp,symbol:r,reason:e.error.message}}}renderAscii(e){let n=[];n.push(`${e.flowId} Timeline`),n.push("\u2550".repeat(40)),n.push("");for(let s of e.events){let r=this.formatTime(s.timestamp),i=this.getEventIcon(s.type),a=this.getEventStatus(s.type),c=`${r} ${i} ${s.symbol}`;a&&(c+=` (${a})`),n.push(c),s.type==="error"&&s.data&&(n.push(` \u2514\u2500 ${s.data.message}`),s.data.missing&&Array.isArray(s.data.missing)&&s.data.missing.length>0&&n.push(` \u2514\u2500 Expected: ${s.data.missing.join(", ")}`));}let t=e.events.find(s=>s.type==="error")?.data?.missing;return t&&t.length>0&&(n.push(""),n.push(`Missing signals: ${t.join(", ")}`)),n.join(`
|
|
424
|
-
`)}renderStructured(e){return {incidentId:e.incidentId,flow:{id:e.flowId,eventCount:e.events.length},events:e.events.map(n=>({time:this.formatTime(n.timestamp),symbol:n.symbol,type:n.type,status:this.getEventStatus(n.type),data:n.data})),failure:{at:this.formatTime(e.failure.at),symbol:e.failure.symbol,reason:e.failure.reason}}}inferEventType(e){return e.startsWith("^")?"gate-passed":e.startsWith("!")?"signal-emitted":e.startsWith("%")?"state-changed":"signal-emitted"}getEventIcon(e){switch(e){case "flow-started":return "\u25B6";case "flow-ended":return "\u25A0";case "gate-passed":return "\u2713";case "gate-failed":return "\u2717";case "signal-emitted":return "\u26A1";case "state-changed":return "\u25C6";case "error":return "\u2717";default:return "\u2022"}}getEventStatus(e){switch(e){case "gate-passed":return "PASSED";case "gate-failed":return "FAILED";case "signal-emitted":return "EMITTED";case "state-changed":return "CHANGED";case "error":return "ERROR";default:return ""}}formatTime(e){let n=new Date(e),t=String(n.getHours()).padStart(2,"0"),s=String(n.getMinutes()).padStart(2,"0"),r=String(n.getSeconds()).padStart(2,"0"),i=String(n.getMilliseconds()).padStart(3,"0");return `${t}:${s}:${r}.${i}`}};var rt=fileURLToPath(import.meta.url),Ne=S.dirname(rt);function it(){let o=S.join(Ne,"universal-patterns.json"),e=E.readFileSync(o,"utf-8");return JSON.parse(e)}function ot(){let o=S.join(Ne,"paradigm-patterns.json"),e=E.readFileSync(o,"utf-8");return JSON.parse(e)}function Oe(){let o=it(),e=ot();return {version:"1.0.0",exportedAt:new Date().toISOString(),patterns:[...o.patterns,...e.patterns]}}var at=process.env.SENTINEL_LOG_LEVEL||process.env.LOG_LEVEL||"info",xe={debug:0,info:1,warn:2,error:3};function A(o){return xe[o]>=xe[at]}function P(o){if(!o)return "";let e=Object.entries(o).map(([n,t])=>`${n}=${typeof t=="string"?t:JSON.stringify(t)}`).join(" ");return m.gray(` ${e}`)}var v={component(o){let e=m.magenta(`#${o}`);return {debug:(n,t)=>{A("debug")&&console.log(`${m.gray("\u25CB")} ${e} ${n}${P(t)}`);},info:(n,t)=>{A("info")&&console.log(`${m.blue("\u2139")} ${e} ${n}${P(t)}`);},warn:(n,t)=>{A("warn")&&console.log(`${m.yellow("\u26A0")} ${e} ${n}${P(t)}`);},error:(n,t)=>{A("error")&&console.error(`${m.red("\u2716")} ${e} ${n}${P(t)}`);}}},flow(o){let e=m.yellow(`$${o}`);return {debug:(n,t)=>{A("debug")&&console.log(`${m.gray("\u25CB")} ${e} ${n}${P(t)}`);},info:(n,t)=>{A("info")&&console.log(`${m.blue("\u2139")} ${e} ${n}${P(t)}`);},warn:(n,t)=>{A("warn")&&console.log(`${m.yellow("\u26A0")} ${e} ${n}${P(t)}`);},error:(n,t)=>{A("error")&&console.error(`${m.red("\u2716")} ${e} ${n}${P(t)}`);}}}},Le=new Set(["$lib","$env","$app","$service-worker","$virtual","$schema","$ref","$id","$type"]);async function Q(o){let e=S.join(o,".paradigm","config.yaml");if(!E.existsSync(e)){let n=S.join(o,"package.json");if(E.existsSync(n))try{return {name:JSON.parse(E.readFileSync(n,"utf-8")).name}}catch{}return {}}try{let n=E.readFileSync(e,"utf-8"),t={},s=n.match(/^name:\s*(.+)$/m);s&&(t.name=s[1].trim().replace(/^["']|["']$/g,""));let r=n.match(/^discipline:\s*(.+)$/m);r&&(t.discipline=r[1].trim());let i=n.match(/^version:\s*(.+)$/m);return i&&(t.version=i[1].trim()),t}catch(n){return v.component("config-loader").error("Failed to load Paradigm config",{error:String(n)}),{}}}async function ct(o){try{let{aggregateFromDirectory:e}=await import('./dist-
|
|
424
|
+
`)}renderStructured(e){return {incidentId:e.incidentId,flow:{id:e.flowId,eventCount:e.events.length},events:e.events.map(n=>({time:this.formatTime(n.timestamp),symbol:n.symbol,type:n.type,status:this.getEventStatus(n.type),data:n.data})),failure:{at:this.formatTime(e.failure.at),symbol:e.failure.symbol,reason:e.failure.reason}}}inferEventType(e){return e.startsWith("^")?"gate-passed":e.startsWith("!")?"signal-emitted":e.startsWith("%")?"state-changed":"signal-emitted"}getEventIcon(e){switch(e){case "flow-started":return "\u25B6";case "flow-ended":return "\u25A0";case "gate-passed":return "\u2713";case "gate-failed":return "\u2717";case "signal-emitted":return "\u26A1";case "state-changed":return "\u25C6";case "error":return "\u2717";default:return "\u2022"}}getEventStatus(e){switch(e){case "gate-passed":return "PASSED";case "gate-failed":return "FAILED";case "signal-emitted":return "EMITTED";case "state-changed":return "CHANGED";case "error":return "ERROR";default:return ""}}formatTime(e){let n=new Date(e),t=String(n.getHours()).padStart(2,"0"),s=String(n.getMinutes()).padStart(2,"0"),r=String(n.getSeconds()).padStart(2,"0"),i=String(n.getMilliseconds()).padStart(3,"0");return `${t}:${s}:${r}.${i}`}};var rt=fileURLToPath(import.meta.url),Ne=S.dirname(rt);function it(){let o=S.join(Ne,"universal-patterns.json"),e=E.readFileSync(o,"utf-8");return JSON.parse(e)}function ot(){let o=S.join(Ne,"paradigm-patterns.json"),e=E.readFileSync(o,"utf-8");return JSON.parse(e)}function Oe(){let o=it(),e=ot();return {version:"1.0.0",exportedAt:new Date().toISOString(),patterns:[...o.patterns,...e.patterns]}}var at=process.env.SENTINEL_LOG_LEVEL||process.env.LOG_LEVEL||"info",xe={debug:0,info:1,warn:2,error:3};function A(o){return xe[o]>=xe[at]}function P(o){if(!o)return "";let e=Object.entries(o).map(([n,t])=>`${n}=${typeof t=="string"?t:JSON.stringify(t)}`).join(" ");return m.gray(` ${e}`)}var v={component(o){let e=m.magenta(`#${o}`);return {debug:(n,t)=>{A("debug")&&console.log(`${m.gray("\u25CB")} ${e} ${n}${P(t)}`);},info:(n,t)=>{A("info")&&console.log(`${m.blue("\u2139")} ${e} ${n}${P(t)}`);},warn:(n,t)=>{A("warn")&&console.log(`${m.yellow("\u26A0")} ${e} ${n}${P(t)}`);},error:(n,t)=>{A("error")&&console.error(`${m.red("\u2716")} ${e} ${n}${P(t)}`);}}},flow(o){let e=m.yellow(`$${o}`);return {debug:(n,t)=>{A("debug")&&console.log(`${m.gray("\u25CB")} ${e} ${n}${P(t)}`);},info:(n,t)=>{A("info")&&console.log(`${m.blue("\u2139")} ${e} ${n}${P(t)}`);},warn:(n,t)=>{A("warn")&&console.log(`${m.yellow("\u26A0")} ${e} ${n}${P(t)}`);},error:(n,t)=>{A("error")&&console.error(`${m.red("\u2716")} ${e} ${n}${P(t)}`);}}}},Le=new Set(["$lib","$env","$app","$service-worker","$virtual","$schema","$ref","$id","$type"]);async function Q(o){let e=S.join(o,".paradigm","config.yaml");if(!E.existsSync(e)){let n=S.join(o,"package.json");if(E.existsSync(n))try{return {name:JSON.parse(E.readFileSync(n,"utf-8")).name}}catch{}return {}}try{let n=E.readFileSync(e,"utf-8"),t={},s=n.match(/^name:\s*(.+)$/m);s&&(t.name=s[1].trim().replace(/^["']|["']$/g,""));let r=n.match(/^discipline:\s*(.+)$/m);r&&(t.discipline=r[1].trim());let i=n.match(/^version:\s*(.+)$/m);return i&&(t.version=i[1].trim()),t}catch(n){return v.component("config-loader").error("Failed to load Paradigm config",{error:String(n)}),{}}}async function ct(o){try{let{aggregateFromDirectory:e}=await import('./dist-O7KGTIYK.js');v.flow("load-symbols").info("Using premise-core aggregator",{path:o});let n=await e(o),t={};for(let s of n.symbols)t[s.type]=(t[s.type]||0)+1;if(v.flow("load-symbols").info("Aggregation complete",{total:n.symbols.length,...t,purposeFiles:n.purposeFiles.length,portalFiles:n.portalFiles.length}),n.errors.length>0)for(let s of n.errors)v.component("aggregator").warn("Aggregation error",{source:s.source,file:s.filePath,message:s.message});for(let s of n.purposeFiles)v.component("purpose-loader").info("Loaded .purpose file",{file:S.relative(o,s)});for(let s of n.portalFiles)v.component("gate-loader").info("Loaded portal.yaml",{file:S.relative(o,s)});return n.symbols}catch(e){return v.component("premise-core").warn("premise-core not available, using fallback scanner",{error:e instanceof Error?e.message:String(e)}),null}}async function $(o){v.flow("load-symbols").info("Loading symbols",{projectDir:o});let e=S.join(o,".paradigm","index.json");if(E.existsSync(e))try{v.component("index-loader").info("Found cached index",{path:e});let t=E.readFileSync(e,"utf-8"),s=JSON.parse(t),r=Array.isArray(s.entries)?s.entries:Array.isArray(s)?s:null;if(r)return v.flow("load-symbols").info("Loaded from cached index",{count:r.length}),r}catch(t){v.component("index-loader").error("Failed to load cached index",{error:String(t)});}let n=await ct(o);return n||(v.flow("load-symbols").info("Using fallback scanner"),lt(o))}async function lt(o){let e=[],n=new Set,t=["src","lib","packages","apps","."];for(let r of t){let i=S.join(o,r);E.existsSync(i)&&await we(i,e,n,o);}let s=S.join(o,"portal.yaml");if(E.existsSync(s)){v.component("gate-loader").debug("Found portal.yaml",{path:"portal.yaml"});try{let i=E.readFileSync(s,"utf-8").match(/^gates:\s*\n((?: .+\n)*)/m);if(i){let a=i[1].matchAll(/^ ([a-z][a-z0-9-]*):/gm);for(let c of a){let l=c[1],d=`gate-${l}`;n.has(d)||(n.add(d),e.push({id:d,symbol:`^${l}`,type:"gate",source:"portal",filePath:"portal.yaml",data:{},references:[],referencedBy:[]}),v.component("gate-loader").debug("Extracted gate",{symbol:`^${l}`}));}}}catch(r){v.component("gate-loader").error("Failed to parse portal.yaml",{error:String(r)});}}return v.flow("load-symbols").info("Fallback scan complete",{count:e.length}),e}async function we(o,e,n,t){let s=["node_modules",".git","dist","build",".paradigm","coverage",".next",".svelte-kit"],r;try{r=E.readdirSync(o,{withFileTypes:!0});}catch{return}for(let i of r){let a=S.join(o,i.name);if(i.isDirectory())s.includes(i.name)||await we(a,e,n,t);else if(i.name===".purpose"){let c=S.relative(t,a);v.component("purpose-loader").debug("Scanning .purpose file",{path:c});try{let l=E.readFileSync(a,"utf-8"),d=ut(l,a,t);for(let u of d)n.has(u.id)||(n.add(u.id),e.push(u),v.component("purpose-loader").debug("Extracted symbol",{symbol:u.symbol,type:u.type,file:c}));}catch(l){v.component("purpose-loader").error("Failed to parse .purpose file",{path:c,error:String(l)});}}}}function ut(o,e,n){let t=[],s=S.relative(n,e),r=o.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:s,data:{},description:dt(o,`#${u}`),references:mt(o),referencedBy:[],tags:gt(o)});}let i=o.matchAll(/\$([a-z][a-z0-9-]*)/gm);for(let d of i){let u=d[1],g=`$${u}`;if(Le.has(g)){v.component("purpose-loader").debug("Skipping blocklisted symbol",{symbol:g});continue}t.find(p=>p.symbol===g)||t.push({id:`flow-${u}`,symbol:g,type:"flow",source:"purpose",filePath:s,data:{},references:[],referencedBy:[]});}let a=o.matchAll(/!([a-z][a-z0-9-]*)/gm);for(let d of a){let u=d[1];t.find(g=>g.symbol===`!${u}`)||t.push({id:`signal-${u}`,symbol:`!${u}`,type:"signal",source:"purpose",filePath:s,data:{},references:[],referencedBy:[]});}let c=o.matchAll(/\^([a-z][a-z0-9-]*)/gm);for(let d of c){let u=d[1];t.find(g=>g.symbol===`^${u}`)||t.push({id:`gate-${u}`,symbol:`^${u}`,type:"gate",source:"purpose",filePath:s,data:{},references:[],referencedBy:[]});}let l=o.matchAll(/~([a-z][a-z0-9-]*)/gm);for(let d of l){let u=d[1];t.find(g=>g.symbol===`~${u}`)||t.push({id:`aspect-${u}`,symbol:`~${u}`,type:"aspect",source:"purpose",filePath:s,data:{},references:[],referencedBy:[]});}return t}function dt(o,e){let n=new RegExp(`${e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}\\s*[-:]?\\s*(.+)`,"m"),t=o.match(n);if(t&&t[1])return t[1].trim()}function mt(o){let e=new Set,n=o.matchAll(/[@#$!^~]([a-z][a-z0-9-]*)/g);for(let t of n){let s=t[0];Le.has(s)||e.add(s);}return Array.from(e)}function gt(o){let e=o.match(/tags:\s*\[([^\]]+)\]/);return e?e[1].split(",").map(n=>n.trim().replace(/^["']|["']$/g,"")):[]}async function Z(o){return (await $(o)).length}async function Ce(o,e,n){let s=(await $(o)).find(i=>i.id===e);if(!s)return {success:false,error:"Symbol not found"};let r=S.join(o,s.filePath);if(!E.existsSync(r))return {success:false,error:"Source file not found"};try{let i=E.readFileSync(r,"utf-8"),a=!1;if(n.description!==void 0){let c=s.symbol.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),l=new RegExp(`(${c})\\s*[-:]?\\s*(.*)`,"m");if(i.match(l)){let u=n.description?`${s.symbol}: ${n.description}`:s.symbol;i=i.replace(l,u),a=!0;}}if(n.tags!==void 0){let c=n.tags.length>0?`tags: [${n.tags.map(d=>`"${d}"`).join(", ")}]`:"",l=/^tags:\s*\[[^\]]*\]\s*$/m;if(l.test(i))c?i=i.replace(l,c):i=i.replace(l,""),a=!0;else if(c){let d=s.symbol.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),u=new RegExp(`(${d}[^\\n]*\\n)`,"m");i.match(u)&&(i=i.replace(u,`$1${c}
|
|
425
425
|
`),a=!0);}}if(a){i=i.replace(/\n{3,}/g,`
|
|
426
426
|
|
|
427
427
|
`),E.writeFileSync(r,i,"utf-8"),v.component("symbol-updater").info("Updated symbol",{symbol:s.symbol,file:s.filePath});let c=S.join(o,".paradigm","index.json");if(E.existsSync(c))try{let l=E.readFileSync(c,"utf-8"),d=JSON.parse(l),u=Array.isArray(d.entries)?d.entries:d,g=u.findIndex(p=>p.id===e);g>=0&&(n.description!==void 0&&(u[g].description=n.description),n.tags!==void 0&&(u[g].tags=n.tags),Array.isArray(d.entries)?(d.entries=u,E.writeFileSync(c,JSON.stringify(d,null,2),"utf-8")):E.writeFileSync(c,JSON.stringify(u,null,2),"utf-8"));}catch{}return {success:!0}}return {success:!0}}catch(i){return v.component("symbol-updater").error("Failed to update symbol",{error:String(i)}),{success:false,error:"Failed to write file"}}}var ft=process.env.SENTINEL_LOG_LEVEL||process.env.LOG_LEVEL||"info",Ae=o=>{let e={debug:0,info:1,warn:2,error:3};return e[o]>=e[ft]},M={gate(o){let e=m.cyan(`^${o}`);return {info:(n,t)=>{if(Ae("info")){let s=t?m.gray(` ${Object.entries(t).map(([r,i])=>`${r}=${i}`).join(" ")}`):"";console.log(`${m.blue("\u2139")} ${e} ${n}${s}`);}},error:(n,t)=>{if(Ae("error")){let s=t?m.gray(` ${Object.entries(t).map(([r,i])=>`${r}=${i}`).join(" ")}`):"";console.error(`${m.red("\u2716")} ${e} ${n}${s}`);}}}}};function ee(o){let e=Router();return e.get("/",async(n,t)=>{try{let s=await $(o);M.gate("api-symbols").info("Symbols loaded",{count:s.length}),t.json({symbols:s});}catch(s){M.gate("api-symbols").error("Failed to load symbols",{error:String(s)}),t.status(500).json({error:"Failed to load symbols"});}}),e.put("/:id",async(n,t)=>{try{let{id:s}=n.params,r=n.body;if(M.gate("api-symbols").info("Update requested",{id:s,updates:JSON.stringify(r)}),r.tags&&!Array.isArray(r.tags)){t.status(400).json({error:"Tags must be an array"});return}let i=await Ce(o,s,r);if(i.success){let c=(await $(o)).find(l=>l.id===s);M.gate("api-symbols").info("Symbol updated",{id:s}),t.json({success:!0,symbol:c});}else M.gate("api-symbols").error("Update failed",{id:s,error:i.error}),t.status(400).json({success:!1,error:i.error});}catch(s){M.gate("api-symbols").error("Failed to update symbol",{error:String(s)}),t.status(500).json({error:"Failed to update symbol"});}}),e}function te(o){let e=Router();return e.get("/",async(n,t)=>{try{let s=await Q(o),r=await Z(o);t.json({projectName:s.name||null,discipline:s.discipline||null,symbolCount:r,projectDir:o});}catch(s){console.error("Failed to load project info:",s),t.status(500).json({error:"Failed to load project info"});}}),e}function vt(o){let e=new Set;for(let n of o){if(n.endsWith(".purpose")){let r=S.dirname(n),i=S.basename(r);r.includes("features/")||r.includes("routes/")||r.includes("api/")?e.add(`@${i}`):r.includes("components/")||r.includes("lib/")||r.includes("utils/")?e.add(`#${i}`):r.includes("middleware/")||r.includes("auth/")||r.includes("guards/")?e.add(`^${i}`):(r.includes("flows/")||r.includes("workflows/"))&&e.add(`$${i}`);}n.includes("portal.yaml")&&e.add("^portal");let t=n.match(/features\/([^/]+)/);t&&e.add(`@${t[1]}`);let s=n.match(/components\/([^/]+)/);s&&e.add(`#${s[1]}`);}return Array.from(e)}async function ne(o,e={}){let n=ht(o);if(!await n.checkIsRepo())return [];try{let s={maxCount:e.limit||100};e.since&&(s["--since"]=e.since);let r=await n.log(s),i=[];for(let a of r.all){let c=[],l=[];try{c=(await n.diffSummary([`${a.hash}^`,a.hash])).files.map(u=>u.file),l=vt(c);}catch{}i.push({hash:a.hash,shortHash:a.hash.slice(0,7),date:a.date,author:a.author_name,message:a.message.split(`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {a}from'./chunk-FNYYQNJY.js';import {n as n$1,m as m$1}from'./chunk-WMTES556.js';import'./chunk-5TAVYPOV.js';import*as u from'fs';import*as m from'path';import {execSync}from'child_process';import n from'chalk';import*as w from'js-yaml';function $(s){return s.match(/(?:^|\s)((?:\/|\.\/|[a-zA-Z0-9_-]+\/)[^\s,;:'"]+\.[a-zA-Z]{1,10})\b/)?.[1]}async function R(s,a$1){try{let r=a(s),d=[];try{d=execSync("git diff --name-only HEAD",{cwd:s,encoding:"utf8",timeout:5e3}).trim().split(`
|
|
3
3
|
`).filter(Boolean);}catch{}let l;try{l=execSync("git status --porcelain",{cwd:s,encoding:"utf8",timeout:5e3}).trim()==="";}catch{}let c=m.join(s,"portal.yaml"),f=!1;if(u.existsSync(c))try{let t=u.readFileSync(c,"utf8"),e=w.load(t);f=e?.routes!=null&&Object.keys(e.routes).length>0;}catch{}let i=n$1({toolsCalled:[],filesModified:d,symbolsTouched:[],loreRecorded:!1,hasPortalRoutes:f,taskAddsRoutes:!1,gitClean:l}),o=m$1(r,a$1,i),g=0;if(o.evaluations.length>0)try{let t=m.join(s,".paradigm","sentinel");if(u.existsSync(t)){let{SentinelStorage:e}=await import('./dist-VGFSP3XM.js'),p=new e(t);for(let b of o.evaluations)p.recordPracticeEvent({habitId:b.habit.id,habitCategory:b.habit.category,result:b.result,engineer:"agent",sessionId:`cli-${Date.now().toString(36)}`,symbolsTouched:[],filesModified:d,notes:b.reason}),g++;}}catch{}let h=m.join(s,".paradigm",".habits-blocking");try{if(a$1==="on-stop"&&o.blocksCompletion){let t=o.evaluations.filter(e=>e.result==="skipped"&&e.habit.severity==="block").map(e=>`${e.habit.name}: ${e.reason}`);u.writeFileSync(h,t.join(`
|
|
4
|
-
`),"utf8");}else a$1==="on-stop"&&u.existsSync(h)&&u.unlinkSync(h);}catch{}return {trigger:a$1,evaluation:{total:o.summary.total,followed:o.summary.followed,skipped:o.summary.skipped,partial:o.summary.partial,blockingViolations:o.summary.blockingViolations,blocksCompletion:o.blocksCompletion},habits:o.evaluations.map(t=>({id:t.habit.id,name:t.habit.name,category:t.habit.category,severity:t.habit.severity,result:t.result,reason:t.reason,evidence:t.evidence})),recorded:g}}catch{return null}}async function P(s,a){let r=m.join(s,".paradigm","aspect-graph.db");if(!u.existsSync(r))return {driftedCount:0,healedCount:0,cleanCount:0,missingCount:0,details:[]};try{let{driftCheckCommand:d}=await import('./drift-ILZE5BFJ.js'),l="",c=console.log;console.log=f=>{l=f;};try{await d({json:!0,autoHeal:a});}finally{console.log=c;}return l?JSON.parse(l):null}catch{return null}}async function B(s){if(!u.existsSync(m.join(s,"portal.yaml")))return null;try{let{checkPortalCompliance:a}=await import('./portal-compliance-JONQ4SOP.js'),r=await a(s);return {status:r.status,declaredButUnusedCount:r.declaredButUnused.length,usedButUndeclaredCount:r.usedButUndeclared.length,properlyDeclaredCount:r.properlyDeclared.length,declaredButUnused:r.declaredButUnused,usedButUndeclared:r.usedButUndeclared,properlyDeclared:r.properlyDeclared,portalError:r.portalError,...r.nearMatches&&r.nearMatches.length>0?{suggestions:r.nearMatches.map(d=>({gate:d.gate,didYouMean:d.didYouMean,distance:d.distance}))}:{}}}catch{return null}}async function j(s){try{let{runPostflightLearning:a}=await import('./ambient-
|
|
4
|
+
`),"utf8");}else a$1==="on-stop"&&u.existsSync(h)&&u.unlinkSync(h);}catch{}return {trigger:a$1,evaluation:{total:o.summary.total,followed:o.summary.followed,skipped:o.summary.skipped,partial:o.summary.partial,blockingViolations:o.summary.blockingViolations,blocksCompletion:o.blocksCompletion},habits:o.evaluations.map(t=>({id:t.habit.id,name:t.habit.name,category:t.habit.category,severity:t.habit.severity,result:t.result,reason:t.reason,evidence:t.evidence})),recorded:g}}catch{return null}}async function P(s,a){let r=m.join(s,".paradigm","aspect-graph.db");if(!u.existsSync(r))return {driftedCount:0,healedCount:0,cleanCount:0,missingCount:0,details:[]};try{let{driftCheckCommand:d}=await import('./drift-ILZE5BFJ.js'),l="",c=console.log;console.log=f=>{l=f;};try{await d({json:!0,autoHeal:a});}finally{console.log=c;}return l?JSON.parse(l):null}catch{return null}}async function B(s){if(!u.existsSync(m.join(s,"portal.yaml")))return null;try{let{checkPortalCompliance:a}=await import('./portal-compliance-JONQ4SOP.js'),r=await a(s);return {status:r.status,declaredButUnusedCount:r.declaredButUnused.length,usedButUndeclaredCount:r.usedButUndeclared.length,properlyDeclaredCount:r.properlyDeclared.length,declaredButUnused:r.declaredButUnused,usedButUndeclared:r.usedButUndeclared,properlyDeclared:r.properlyDeclared,portalError:r.portalError,...r.nearMatches&&r.nearMatches.length>0?{suggestions:r.nearMatches.map(d=>({gate:d.gate,didYouMean:d.didYouMean,distance:d.distance}))}:{}}}catch{return null}}async function j(s){try{let{runPostflightLearning:a}=await import('./ambient-5TA5CD7Z.js');return await a(s)}catch{return null}}async function A(s){let a=process.cwd(),r=s.trigger||"on-stop",d=s.autoHeal!==false,l=[],c=[],f=await R(a,r),i=await P(a,d),o=await B(a);if(f?.evaluation.blocksCompletion){let t=f.habits.filter(e=>e.result==="skipped"&&e.severity==="block");for(let e of t){let p=`Blocking habit not satisfied: ${e.name} \u2014 ${e.reason}`;l.push(p),c.push({message:p,source:"habits",file:$(e.reason),severity:"blocking"});}}if(i&&i.driftedCount>0){let t=`${i.driftedCount} aspect anchor(s) have drifted (content genuinely changed). Run paradigm_aspect_check to review.`;l.push(t);for(let e of i.details.filter(p=>p.status==="drifted"))c.push({message:`Aspect ~${e.aspectId} drifted at lines ${e.startLine}-${e.endLine}`,source:"drift",file:e.path,severity:"advisory"});c.filter(e=>e.source==="drift").length===0&&c.push({message:t,source:"drift",severity:"advisory"});}if(o&&o.portalError?.kind==="unparseable"){let e=`portal.yaml unparseable: ${o.portalError.errorClass} \u2014 run 'paradigm doctor' for details`;l.push(e),c.push({message:e,source:"portal",file:"portal.yaml",severity:"blocking"});}else if(o&&o.usedButUndeclaredCount>0){let t=o.usedButUndeclared.filter(e=>e!=="__portal_unparseable__");if(t.length>0){let e=`${t.length} gate(s) used in code but not declared in portal.yaml: ${t.join(", ")}`;l.push(e);for(let p of t)c.push({message:`Gate ^${p} used in code but not declared in portal.yaml`,source:"portal",file:"portal.yaml",severity:"blocking"});}}let g=null;s.learn&&(g=await j(a));let h={habits:f,drift:i,portal:o,violations:l,structuredViolations:c,postflight:s.learn?g:void 0};if(s.json)console.log(JSON.stringify(h));else {if(console.log(n.magenta(`
|
|
5
5
|
Paradigm Compliance Check
|
|
6
6
|
`)),f){let{evaluation:t}=f,e=t.blocksCompletion?n.red:n.green;console.log(n.white(" Habits:")),console.log(` ${e(`${t.followed} followed, ${t.skipped} skipped, ${t.partial} partial`)}`),t.blockingViolations>0&&console.log(n.red(` ${t.blockingViolations} blocking violation(s)`)),console.log();}if(i&&(console.log(n.white(" Drift:")),i.healedCount>0&&console.log(n.green(` Auto-healed: ${i.healedCount} shifted anchor(s)`)),i.cleanCount>0&&console.log(n.green(` Clean: ${i.cleanCount} anchor(s)`)),i.driftedCount>0&&console.log(n.red(` Drifted: ${i.driftedCount} anchor(s)`)),i.missingCount>0&&console.log(n.yellow(` Missing: ${i.missingCount} anchor file(s)`)),console.log()),o){console.log(n.white(" Portal:"));let t=o.status==="compliant"?n.green:o.status==="warnings"?n.yellow:n.red;console.log(` Status: ${t(o.status)}`),o.usedButUndeclaredCount>0&&console.log(n.red(` ${o.usedButUndeclaredCount} undeclared gate(s)`)),console.log();}if(g){if(console.log(n.white(" Postflight Learning:")),g.journalsWritten>0){console.log(n.green(` Journals written: ${g.journalsWritten}`));for(let[t,e]of Object.entries(g.journalsByAgent))e>0&&console.log(n.gray(` ${t}: ${e} entries`));}else console.log(n.gray(" No verdicts to learn from"));g.promoted>0&&console.log(n.green(` Promoted to notebooks: ${g.promoted}`)),console.log();}if(l.length>0){console.log(n.red(` ${l.length} violation(s):`));for(let t of l)console.log(n.red(` - ${t}`));}else console.log(n.green(" All checks passed."));console.log();}l.length>0&&(process.exitCode=1);}export{A as complianceCheckCommand};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {m as m$1,o,C,B,r}from'./chunk-
|
|
2
|
+
import {m as m$1,o,C,B,r}from'./chunk-JOHPASZG.js';import'./chunk-K6TLYNRQ.js';import'./chunk-ZJQY5PPP.js';import {a}from'./chunk-LKAT7IAK.js';import'./chunk-5TAVYPOV.js';import*as u from'fs';import*as m from'path';import e from'chalk';import F from'ora';function I(t){let o={gates:[],signals:[],components:[],flows:[],aspects:[]};for(let r of t){if(!r||r.length<2)continue;switch(r[0]){case "^":o.gates.push(r);break;case "!":o.signals.push(r);break;case "#":o.components.push(r);break;case "$":o.flows.push(r);break;case "~":o.aspects.push(r);break}}return o}function T(t,o){let r$1={},g={},l=B(t),a=C(t);for(let s of a){let n=I(s.references),i={type:s.type,path:s.filePath,references:s.references,referencedBy:s.referencedBy};s.description&&(i.description=s.description),s.tags&&s.tags.length>0&&(i.tags=s.tags),n.gates.length>0&&(i.gates=n.gates),n.signals.length>0&&(i.signals=n.signals),n.components.length>0&&(i.components=n.components),n.flows.length>0&&(i.flows=n.flows),n.aspects.length>0&&(i.aspects=n.aspects),r$1[s.symbol]=i;}let y=r(t,"flow");for(let s of y){let n=s.data,i=n?.sequence||n?.gates||s.references;g[s.symbol]={description:s.description,sequence:i};}return {version:"1.0",generated:new Date().toISOString(),project:o,stats:{components:l.component,flows:l.flow,gates:l.gate,signals:l.signal,aspects:l.aspect,total:Object.values(l).reduce((s,n)=>s+n,0)},stars:r$1,orbits:g}}async function z(t,o$1={}){let r=process.cwd(),g=t?m.resolve(r,t):r,l=m.basename(g),a$1=o$1.format||"json";o$1.quiet||console.log(e.blue(`
|
|
3
3
|
\u2728 Building Constellation...
|
|
4
4
|
`));let y=F("Aggregating symbols...").start(),s=a.command("constellation").start("Building constellation",{project:l});try{let n=await m$1(g),i=o(n);a.operation("aggregate").debug("Symbols aggregated",{count:C(i).length}),y.text="Building constellation...";let p=T(i,l),$=m.join(g,".paradigm");u.existsSync($)||u.mkdirSync($,{recursive:!0});let h=o$1.output||m.join($,`constellation.${a$1}`),S;if(a$1==="yaml"?S=d(p):S=JSON.stringify(p,null,2),u.writeFileSync(h,S,"utf8"),a.component("constellation-file").success("Constellation written",{path:h,format:a$1}),y.succeed("Constellation built"),s.success("Constellation built",{path:h,stars:Object.keys(p.stars).length}),!o$1.quiet){console.log(e.white(`
|
|
5
5
|
Constellation Stats`)),console.log(e.gray("\u2500".repeat(40)));let f=p.stats,q=[{symbol:"#",name:"Components",count:f.components,color:e.green},{symbol:"$",name:"Flows",count:f.flows,color:e.yellow},{symbol:"^",name:"Gates",count:f.gates,color:e.red},{symbol:"!",name:"Signals",count:f.signals,color:e.cyan},{symbol:"~",name:"Aspects",count:f.aspects,color:e.magenta}];for(let{symbol:c,name:R,count:O,color:E}of q)O>0&&console.log(` ${E(c)} ${R.padEnd(12)} ${e.cyan(O.toString())}`);console.log(e.gray("\u2500".repeat(40))),console.log(` Total stars: ${e.cyan(f.total.toString())}`),console.log(` Total orbits: ${e.cyan(Object.keys(p.orbits).length.toString())}`),console.log(e.gray(`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {b}from'./chunk-
|
|
2
|
+
import {b}from'./chunk-T577TTVG.js';import'./chunk-TYWB5IQJ.js';import'./chunk-DLMDHS2X.js';import'./chunk-FYDRENK7.js';import'./chunk-ECLUYHAR.js';import'./chunk-YXLGVOZO.js';import'./chunk-QBIME67A.js';import'./chunk-EK4ZRIFJ.js';import'./chunk-EKZDFEJW.js';import'./chunk-LPBCQM5Y.js';import'./chunk-JOHPASZG.js';import'./chunk-K6TLYNRQ.js';import'./chunk-ZJQY5PPP.js';import'./chunk-5TAVYPOV.js';import*as i from'fs';import*as a from'path';import o from'chalk';async function D(l,f,t){let d=f?a.resolve(f):process.cwd();if(!l){t.json?console.log(JSON.stringify({error:"Orchestration ID required"})):(console.log(o.red(`
|
|
3
3
|
Orchestration ID required.`)),console.log(o.gray(`Usage: paradigm team diff <orchestration-id>
|
|
4
4
|
`)));return}let e=new b(d).getOrchestration(l);if(!e){t.json?console.log(JSON.stringify({error:"Orchestration not found",id:l})):console.log(o.red(`
|
|
5
5
|
Orchestration not found: ${l}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
export{b as PREFIX_TO_TYPE,a as SYMBOL_PREFIXES,j as addConnection,h as addPremiseNode,m as aggregateFromDirectory,l as aggregateFromPremise,o as buildSymbolIndex,J as checkAspectAnchors,Q as computeRepeatFailureRate,e as createEmptyPremiseFile,k as createSnapshot,n as createSymbolIndex,E as createSymbolString,I as detectAnchorBaseMismatch,v as getAllComponentTypes,C as getAllSymbols,A as getAllTags,G as getAutocompleteSuggestions,w as getChildComponents,u as getComponentsByType,g as getDefaultPremiseContent,y as getReferencesFrom,x as getReferencesTo,p as getSymbol,q as getSymbolById,B as getSymbolCounts,s as getSymbolsBySource,z as getSymbolsByTag,r as getSymbolsByType,M as graphSliceFromRoot,F as isValidSymbol,K as loadLiveGraph,d as parsePremiseContent,c as parsePremiseFile,D as parseSymbol,L as projectGraphSlice,O as readClassroomCertifications,P as readFieldFailures,H as resolveAnchorPath,t as searchSymbols,f as serializePremiseFile,N as sliceToMermaid,i as updateNodePosition}from'./chunk-JOHPASZG.js';import'./chunk-K6TLYNRQ.js';import'./chunk-ZJQY5PPP.js';import'./chunk-5TAVYPOV.js';
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import*as j from'fs';import*as z from'js-yaml';import {z as z$1}from'zod';import*as P from'path';import {glob}from'glob';var B=z$1.object({description:z$1.string(),type:z$1.string().optional(),parent:z$1.string().optional(),anchors:z$1.array(z$1.string()).optional(),tags:z$1.array(z$1.string()).optional(),endpoints:z$1.array(z$1.string()).optional(),tests:z$1.array(z$1.string()).optional(),rules:z$1.record(z$1.unknown()).optional(),aspects:z$1.array(z$1.string()).optional(),flows:z$1.array(z$1.string()).optional(),gates:z$1.array(z$1.string()).optional(),signals:z$1.array(z$1.string()).optional(),states:z$1.array(z$1.string()).optional(),components:z$1.array(z$1.string()).optional(),location:z$1.string().optional(),locations:z$1.array(z$1.string()).optional(),uses:z$1.array(z$1.string()).optional(),"used-by":z$1.array(z$1.string()).optional(),"used-for":z$1.array(z$1.string()).optional(),exports:z$1.array(z$1.string()).optional(),status:z$1.string().optional(),properties:z$1.record(z$1.unknown()).optional(),handles:z$1.array(z$1.string()).optional()}).passthrough(),Z=B.extend({id:z$1.string()}),Ce=z$1.object({description:z$1.string().optional(),category:z$1.string().optional(),severity:z$1.enum(["info","warn","error"]).optional(),emitters:z$1.array(z$1.string()).optional(),related:z$1.array(z$1.string()).optional(),data:z$1.record(z$1.unknown()).optional()}),Ae=z$1.union([Ce,z$1.string().transform(e=>({description:e}))]),je=z$1.object({from:z$1.string(),to:z$1.string(),type:z$1.string(),description:z$1.string().optional()}),Ie=z$1.union([je,z$1.string()]),De=z$1.object({component:z$1.string(),action:z$1.string(),description:z$1.string().optional()}),Q=z$1.union([De,z$1.string()]),Re=z$1.object({name:z$1.string(),description:z$1.string().optional(),steps:z$1.array(Q)}),Ee=z$1.object({description:z$1.string().optional(),gates:z$1.array(z$1.string()).optional(),signals:z$1.array(z$1.string()).optional(),components:z$1.array(z$1.string()).optional(),steps:z$1.array(Q).optional()}),Fe=z$1.object({description:z$1.string().optional(),requires:z$1.array(z$1.string()).optional(),keys:z$1.array(z$1.string()).optional(),signals:z$1.array(z$1.string()).optional()}),Oe=z$1.object({description:z$1.string().optional(),default:z$1.unknown().optional(),type:z$1.string().optional()}),Te=z$1.object({description:z$1.string().optional(),tags:z$1.array(z$1.string()).optional(),anchors:z$1.array(z$1.string()).optional(),"applies-to":z$1.array(z$1.string()).optional(),enforcement:z$1.string().optional()}),ze=z$1.object({target:z$1.string(),type:z$1.string(),path:z$1.string()}),Me=z$1.object({version:z$1.string().optional(),description:z$1.string().optional(),apiSpec:z$1.string().optional(),context:z$1.array(z$1.string()).optional(),rules:z$1.record(z$1.unknown()).optional(),features:z$1.union([z$1.array(Z),z$1.record(B)]).optional(),components:z$1.union([z$1.array(Z),z$1.record(B)]).optional(),gates:z$1.record(Fe).optional(),states:z$1.record(Oe).optional(),signals:z$1.record(Ae).optional(),aspects:z$1.record(Te).optional(),relationships:z$1.array(Ie).optional(),flows:z$1.union([z$1.array(Re),z$1.record(Ee)]).optional(),references:z$1.array(ze).optional()});function Le(e){let t=_e(e);return {data:t.data,errors:t.errors}}function _e(e){let t=[],o=[],s;try{s=j.readFileSync(e,"utf8");}catch(c){let f=`Cannot read file: ${c.message}`;return t.push(f),o.push({message:f,type:"file"}),{data:null,errors:t,detailedErrors:o,rawContent:void 0,isYamlValid:false}}let n=s.replace(/^([#~!$^][\w-]+):/gm,'"$1":').replace(/^(\s*-\s+)([!#][\w-]+)$/gm,'$1"$2"'),a=null;try{a=z.load(n);}catch(c){let f=c,p=f.mark?.line?f.mark.line+1:void 0,d=`YAML syntax error: ${f.reason||c.message}`;return t.push(`${d}${p?` (line ${p})`:""}`),o.push({message:d,line:p,type:"yaml"}),{data:null,errors:t,detailedErrors:o,rawContent:s,isYamlValid:false}}if(a==null)return {data:{},errors:[],detailedErrors:[],rawContent:s,isYamlValid:true};if(typeof a=="object"&&a!==null){let c=a,f={"#":"components",$:"flows","^":"gates","!":"signals","~":"aspects"};for(let p of Object.keys(c)){let d=p[0],g=f[d];if(!g||p.length<2)continue;let y=p.slice(1),$=c[p];if(typeof $!="object"||$===null)continue;let h=c[g]||{};g in c||(c[g]=h),y in h||(h[y]=$),delete c[p];}}let r=Me.safeParse(a);if(!r.success){for(let c of r.error.issues){let f=c.path.join("."),p=c.message;t.push(`Schema error at ${f||"/"}: ${p}`),o.push({message:p,path:f||"/",type:"schema"});}return {data:a,errors:t,detailedErrors:o,rawContent:s,isYamlValid:true}}return {data:r.data,errors:[],detailedErrors:[],rawContent:s,isYamlValid:true}}function T(e){return e?Array.isArray(e)?e.map(t=>[t.id,t]):Object.entries(e):[]}async function Ye(e){let t=P.resolve(e);return (await glob("**/.purpose",{cwd:t,absolute:true,ignore:["**/node_modules/**","**/dist/**","**/.git/**"]})).sort((s,n)=>{let a=s.split(P.sep).length,r=n.split(P.sep).length;return a-r})}async function ee(e){let t=await Ye(e),o=[];for(let s of t){let{data:n,errors:a}=Le(s);n&&(o.push({filePath:s,data:n}),a.length>0&&console.warn(`Warnings parsing ${s}:`,a));}return o}function te(e){let t=new Map;for(let{filePath:o,data:s}of e){let n=T(s.features);for(let[a,r]of n)t.set(a,{item:r,filePath:o});}return t}function oe(e){let t=new Map;for(let{filePath:o,data:s}of e){let n=T(s.components);for(let[a,r]of n)t.set(a,{item:r,filePath:o});}return t}function se(e){let t=new Map;for(let{filePath:o,data:s}of e)if(s.gates)for(let[n,a]of Object.entries(s.gates))t.set(n,{item:a,filePath:o});return t}function ne(e){let t=new Map;for(let{filePath:o,data:s}of e)if(s.states)for(let[n,a]of Object.entries(s.states))t.set(n,{item:a,filePath:o});return t}function re(e){let t=new Map;for(let{filePath:o,data:s}of e)if(s.flows)if(Array.isArray(s.flows))for(let n of s.flows)t.set(n.name,{item:{id:n.name,description:n.description,steps:n.steps},filePath:o});else for(let[n,a]of Object.entries(s.flows))t.set(n,{item:{id:n,description:a.description,gates:a.gates,signals:a.signals,components:a.components,steps:a.steps},filePath:o});return t}function ae(e){let t=new Map;for(let{filePath:o,data:s}of e)if(s.signals)for(let[n,a]of Object.entries(s.signals))t.set(n,{item:a,filePath:o});return t}function ie(e){let t=new Map;for(let{filePath:o,data:s}of e)if(s.aspects)for(let[n,a]of Object.entries(s.aspects))t.set(n,{item:a,filePath:o});return t}function ce(e){let t=[],o=new Set;for(let{filePath:s,data:n}of e){let a=T(n.features);for(let[c,f]of a)J(`#${c}`,f,s,t,o);let r=T(n.components);for(let[c,f]of r)J(`#${c}`,f,s,t,o);}return t}function J(e,t,o,s,n){if(t.flows)for(let a of t.flows){let r=a.startsWith("$")?a:`$${a}`;n.has(r)||(n.add(r),s.push({symbol:r,type:"flow",sourceSymbol:e,filePath:o}));}if(t.gates)for(let a of t.gates){let r=a.startsWith("^")?a:`^${a}`;n.has(r)||(n.add(r),s.push({symbol:r,type:"gate",sourceSymbol:e,filePath:o}));}if(t.signals)for(let a of t.signals){let r=a.startsWith("!")?a:`!${a}`;n.has(r)||(n.add(r),s.push({symbol:r,type:"signal",sourceSymbol:e,filePath:o}));}if(t.states)for(let a of t.states){let r=a.startsWith("#")?a:a.startsWith("%")?`#${a.slice(1)}`:`#${a}`;n.has(r)||(n.add(r),s.push({symbol:r,type:"component",sourceSymbol:e,filePath:o}));}if(t.components)for(let a of t.components){let r=a.startsWith("#")?a:`#${a}`;n.has(r)||(n.add(r),s.push({symbol:r,type:"component",sourceSymbol:e,filePath:o}));}if(t.aspects)for(let a of t.aspects){let r=a.startsWith("~")?a:`~${a}`;n.has(r)||(n.add(r),s.push({symbol:r,type:"aspect",sourceSymbol:e,filePath:o}));}if(t.description){let a=We(t.description);for(let{symbol:r,type:c}of a)n.has(r)||(n.add(r),s.push({symbol:r,type:c,sourceSymbol:e,filePath:o}));}}var Ne=new Set(["$lib","$env","$app","$service-worker","$virtual","$schema","$ref","$id","$type"]);function We(e){let t=[],o=/([$^!#~%])([a-zA-Z][a-zA-Z0-9._-]*)/g,s;for(;(s=o.exec(e))!==null;){let n=s[1],a=s[2],r,c;switch(n){case "#":c="component",r=`#${a}`;break;case "$":c="flow",r=`$${a}`;break;case "^":c="gate",r=`^${a}`;break;case "!":c="signal",r=`!${a}`;break;case "~":c="aspect",r=`~${a}`;break;case "%":c="component",r=`#${a}`;break;default:continue}Ne.has(r)||t.push({symbol:r,type:c});}return t}var Be={visualizerPort:42195,watcherPort:42196,autoConnect:true};async function M(e){let t=P.resolve(e),o=P.dirname(t);if(!j.existsSync(t))throw new Error(`Gate config not found: ${t}`);let s=j.readFileSync(t,"utf8"),n=z.load(s);if(!n.version)throw new Error('Gate config missing required "version" field');let a=[],r=n,c=n.gates||r.portals;if(c)for(let[p,d]of Object.entries(c)){let g=p.startsWith("^")?p.slice(1):p;a.push(K(g,d));}if(n.include)for(let p of n.include){let d=P.join(o,p),g=await glob(d.replace(/\\/g,"/"));for(let y of g){let $=await Ve(y);a.push(...$);}}let f=[];if(n.flows)for(let[p,d]of Object.entries(n.flows))f.push(qe(p,d));return {version:n.version,gates:a,flows:f,settings:{dev:{...Be,...n.settings?.dev}}}}async function Ve(e){let t=j.readFileSync(e,"utf8"),o=z.load(t);if(o.id){let s=o.id,n=s.startsWith("^")?s.slice(1):s;return [K(n,o)]}if(o.gates){let s=[];for(let[n,a]of Object.entries(o.gates)){let r=n.startsWith("^")?n.slice(1):n;s.push(K(r,a));}return s}return []}function K(e,t){let o=[];if(t.locks)for(let n of t.locks)o.push(Ke(n));let s=[];if(t.prizes)for(let n of t.prizes)s.push(Ue(n));return {id:e,description:t.description,locks:o,prizes:s,position:t.position}}function Ke(e){let t=e,o=[];if(t.keys){for(let s of t.keys)if(typeof s=="string")o.push({expression:s});else if(s.expression){let n=s;o.push({expression:n.expression,description:n.description});}}return {id:t.id,description:t.description,keys:o,mode:t.mode||"all"}}function Ue(e){let t=e;return {id:t.id,oneTime:t.oneTime??false,metadata:t.metadata}}function qe(e,t){return {id:e,description:t.description,gates:t.gates||[],forkable:t.forkable}}async function pe(e){let t=P.resolve(e);return await glob("**/portal.yaml",{cwd:t,absolute:true,ignore:["**/node_modules/**","**/dist/**","**/.git/**"]})}var Ze={component:"#",flow:"$",gate:"^",signal:"!",aspect:"~"},Je={"#":"component",$:"flow","^":"gate","!":"signal","~":"aspect"},He=["#","$","^","!","~"];function Qe(e){return He.includes(e)}var et=z$1.object({x:z$1.number(),y:z$1.number()}),tt=z$1.object({x:z$1.number(),y:z$1.number(),zoom:z$1.number()}),le=z$1.object({path:z$1.string(),include:z$1.array(z$1.string()).optional(),exclude:z$1.array(z$1.string()).optional()}),he=z$1.object({id:z$1.string(),symbol:z$1.string(),type:z$1.enum(["feature","component","flow","state","aspect","gate","signal","idea"]),content:z$1.string().optional(),position:et,tags:z$1.array(z$1.string()).optional(),created:z$1.string(),modified:z$1.string().optional()}),ye=z$1.object({from:z$1.string(),to:z$1.string(),label:z$1.string().optional(),type:z$1.string().optional()}),ot=z$1.object({id:z$1.string(),name:z$1.string(),nodes:z$1.array(z$1.string()),color:z$1.string().optional()}),we=z$1.object({viewport:tt,groups:z$1.array(ot).optional()}),st=z$1.object({nodes:z$1.array(he),connections:z$1.array(ye),layout:we}),nt=z$1.object({id:z$1.string(),name:z$1.string(),timestamp:z$1.string(),description:z$1.string().optional(),state:st}),rt=z$1.object({version:z$1.string(),metadata:z$1.object({name:z$1.string(),created:z$1.string(),modified:z$1.string()}),sources:z$1.object({purpose:z$1.array(le).optional(),portal:z$1.array(le).optional()}),nodes:z$1.array(he),connections:z$1.array(ye),layout:we,snapshots:z$1.array(nt).optional()});function Wt(e){let t=[],o;try{o=j.readFileSync(e,"utf8");}catch(s){return t.push(`Cannot read file: ${s.message}`),{data:null,errors:t,rawContent:void 0}}return at(o)}function at(e){let t=[],o=null;try{o=z.load(e);}catch(n){let a=n,r=a.mark?.line?a.mark.line+1:void 0;return t.push(`YAML syntax error: ${a.reason||n.message}${r?` (line ${r})`:""}`),{data:null,errors:t,rawContent:e}}if(o==null)return {data:$e(),errors:[],rawContent:e};let s=rt.safeParse(o);if(!s.success){for(let n of s.error.issues){let a=n.path.join(".");t.push(`Schema error at ${a||"/"}: ${n.message}`);}return {data:o,errors:t,rawContent:e}}return {data:s.data,errors:[],rawContent:e}}function $e(e="Untitled"){let t=new Date().toISOString();return {version:"1.0.0",metadata:{name:e,created:t,modified:t},sources:{purpose:[{path:"./"}],portal:[{path:"./portal.yaml"}]},nodes:[],connections:[],layout:{viewport:{x:0,y:0,zoom:1}}}}function it(e){return e.metadata.modified=new Date().toISOString(),z.dump(e,{indent:2,lineWidth:-1,noRefs:true,sortKeys:false})}function Bt(e="My Project"){return it($e(e))}function Vt(e,t){return {...e,nodes:[...e.nodes,t],metadata:{...e.metadata,modified:new Date().toISOString()}}}function Kt(e,t,o){return {...e,nodes:e.nodes.map(s=>s.id===t?{...s,position:o,modified:new Date().toISOString()}:s),metadata:{...e.metadata,modified:new Date().toISOString()}}}function Ut(e,t){return e.connections.some(s=>s.from===t.from&&s.to===t.to)?e:{...e,connections:[...e.connections,t],metadata:{...e.metadata,modified:new Date().toISOString()}}}function qt(e,t,o){let s={id:`snap-${Date.now()}`,name:t,timestamp:new Date().toISOString(),description:o,state:{nodes:[...e.nodes],connections:[...e.connections],layout:{...e.layout}}};return {...e,snapshots:[...e.snapshots||[],s],metadata:{...e.metadata,modified:new Date().toISOString()}}}async function ct(e,t){let o=[],s=[],n=[],a=[];if(e.sources.purpose)for(let f of e.sources.purpose){let p=P.resolve(t,f.path);try{let d=await ee(p);n.push(...d.map(u=>u.filePath));let g=te(d);for(let[u,{item:m,filePath:b}]of g){let E=["feature",...m.tags||[]];o.push(S({id:`purpose-feature-${u}`,symbol:`#${u}`,type:"component",source:"purpose",filePath:b,data:m,description:m.description,tags:E,componentType:m.type,parentSymbol:m.parent,anchors:m.anchors?.map(ke=>U(ke))}));}let y=oe(d);for(let[u,{item:m,filePath:b}]of y)o.push(S({id:`purpose-component-${u}`,symbol:`#${u}`,type:"component",source:"purpose",filePath:b,data:m,description:m.description,tags:m.tags,componentType:m.type,parentSymbol:m.parent,anchors:m.anchors?.map(E=>U(E))}));let $=se(d);for(let[u,{item:m,filePath:b}]of $)o.push(S({id:`purpose-gate-${u}`,symbol:`^${u}`,type:"gate",source:"purpose",filePath:b,data:m,description:m.description}));let h=ne(d);for(let[u,{item:m,filePath:b}]of h)o.push(S({id:`purpose-state-${u}`,symbol:`#${u}`,type:"component",source:"purpose",filePath:b,data:m,description:m.description,tags:["state"]}));let w=re(d);for(let[u,{item:m,filePath:b}]of w)o.push(S({id:`purpose-flow-${u}`,symbol:`$${u}`,type:"flow",source:"purpose",filePath:b,data:m,description:m.description}));let x=ae(d);for(let[u,{item:m,filePath:b}]of x)o.push(S({id:`purpose-signal-${u}`,symbol:`!${u}`,type:"signal",source:"purpose",filePath:b,data:m,description:m.description}));let R=ie(d);for(let[u,{item:m,filePath:b}]of R)o.push(S({id:`purpose-aspect-${u}`,symbol:`~${u}`,type:"aspect",source:"purpose",filePath:b,data:m,description:m.description,anchors:m.anchors?.map(E=>U(E)),appliesTo:m["applies-to"],tags:m.tags,enforcement:m.enforcement}));let W=ce(d),v=new Set(o.map(u=>u.symbol));for(let u of W)v.has(u.symbol)||(v.add(u.symbol),o.push(S({id:`purpose-ref-${u.type}-${u.symbol.slice(1)}`,symbol:u.symbol,type:u.type,source:"purpose",filePath:u.filePath,data:{referencedFrom:u.sourceSymbol},description:`Referenced from ${u.sourceSymbol}`})));}catch(d){s.push({source:"purpose",filePath:p,message:d.message});}}if(e.sources.portal)for(let f of e.sources.portal){let p=P.resolve(t,f.path);try{let d;if(p.endsWith(".yaml")||p.endsWith(".yml"))d=await M(p),a.push(p);else {let g=await pe(p);if(a.push(...g),g.length>0){d=await M(g[0]);for(let y=1;y<g.length;y++){let $=await M(g[y]);d.gates.push(...$.gates),d.flows.push(...$.flows);}}else continue}for(let g of d.gates){o.push(ft(g,p));for(let y of g.prizes)o.push(S({id:`gate-signal-${g.id}-${y.id}`,symbol:`!${y.id}`,type:"signal",source:"portal",filePath:p,data:y,description:`Signal from gate ${g.id}`}));}for(let g of d.flows)o.push(pt(g,p));}catch(d){s.push({source:"portal",filePath:p,message:d.message});}}for(let f of e.nodes){let p=f.tags?.includes("idea");if(!f.content&&!p){let d=o.find(g=>g.symbol===f.symbol);if(d){d.position=f.position,d.tags=f.tags;continue}}o.push(S({id:f.id,symbol:f.symbol,type:f.type,source:"premise",filePath:".premise",data:f,description:f.content,position:f.position,tags:f.tags,created:f.created,modified:f.modified}));}ut(o);let r=new Map;for(let f of o){let p=r.get(f.symbol)||[];p.includes(f.filePath)||p.push(f.filePath),r.set(f.symbol,p);}let c=[];for(let[f,p]of r)p.length>1&&c.push({symbol:f,files:p});return {symbols:o,purposeFiles:n,portalFiles:a,errors:s,timestamp:Date.now(),...c.length>0?{duplicateSymbols:c}:{}}}function S(e){return {...e,data:e.data??null,references:e.references??[],referencedBy:e.referencedBy??[]}}function ft(e,t){let o=e.id.startsWith("^")?e.id.slice(1):e.id;return S({id:`gate-${o}`,symbol:`^${o}`,type:"gate",source:"portal",filePath:t,data:e,description:e.description,position:e.position})}function pt(e,t){return S({id:`gate-flow-${e.id}`,symbol:`$${e.id}`,type:"flow",source:"portal",filePath:t,data:e,description:e.description})}function U(e){let t=e.lastIndexOf(":");if(t===-1||t===e.length-1)return {path:e,lines:0,raw:e};let o=e.slice(t+1),s=e.slice(0,t);if(!/^[\d,\- ]+$/.test(o))return {path:e,lines:0,raw:e};if(o.includes("-")){let[n,a]=o.split("-").map(Number);return {path:s,lines:[n,a],raw:e}}else if(o.includes(",")){let n=o.split(",").map(Number);return {path:s,lines:n,raw:e}}else return {path:s,lines:Number(o),raw:e}}var lt=new Set(["$lib","$env","$app","$service-worker","$virtual","$schema","$ref","$id","$type"]);function ut(e){let t=new Map(e.map(o=>[o.symbol,o]));for(let o of e){let s=JSON.stringify(o.data),n=/(?:\?[@#$%~^!]|[@#$%~^!?])[a-zA-Z][\w-]*/g,a=(s.match(n)||[]).filter(r=>!lt.has(r));for(let r of a)if(r!==o.symbol&&t.has(r)){o.references.includes(r)||o.references.push(r);let c=t.get(r);c&&!c.referencedBy.includes(o.symbol)&&c.referencedBy.push(o.symbol);}}}async function dt(e){let t={metadata:{name:P.basename(e),created:new Date().toISOString(),modified:new Date().toISOString()},sources:{purpose:[{path:"./"}],portal:[{path:"./"}]},nodes:[]};return ct(t,e)}function mt(){return {entries:new Map,byType:new Map,bySource:new Map,timestamp:0}}function gt(e){let t=mt();t.timestamp=e.timestamp;for(let o of e.symbols)t.entries.set(o.id,o),t.byType.has(o.type)||t.byType.set(o.type,[]),t.byType.get(o.type).push(o),t.bySource.has(o.source)||t.bySource.set(o.source,[]),t.bySource.get(o.source).push(o);return t}function C(e,t){for(let o of e.entries.values())if(o.symbol===t)return o}function Jt(e,t){return e.entries.get(t)}function I(e,t){return e.byType.get(t)||[]}function Ht(e,t){return e.bySource.get(t)||[]}function ht(e,t){let o=t.toLowerCase(),s=[];for(let n of e.entries.values()){if(n.symbol.toLowerCase().includes(o)){s.push(n);continue}if(n.description?.toLowerCase().includes(o)){s.push(n);continue}if(n.tags?.some(a=>a.toLowerCase().includes(o))){s.push(n);continue}if(n.componentType?.toLowerCase().includes(o)){s.push(n);continue}}return s}function Qt(e,t){return I(e,"component").filter(s=>s.componentType===t)}function eo(e){let t=new Set,o=I(e,"component");for(let s of o)s.componentType&&t.add(s.componentType);return Array.from(t).sort()}function to(e,t){return I(e,"component").filter(s=>s.parentSymbol===t)}function yt(e,t){let o=C(e,t);return o?o.referencedBy.map(s=>C(e,s)).filter(s=>s!==void 0):[]}function ue(e,t){let o=C(e,t);return o?o.references.map(s=>C(e,s)).filter(s=>s!==void 0):[]}function oo(e,t){let o=[];for(let s of e.entries.values())s.tags?.includes(t)&&o.push(s);return o}function so(e){let t=new Set;for(let o of e.entries.values())for(let s of o.tags||[])t.add(s);return Array.from(t).sort()}function no(e){let t={component:0,flow:0,gate:0,signal:0,aspect:0};for(let[o,s]of e.byType)o in t&&(t[o]=s.length);return t}function wt(e){return Array.from(e.entries.values())}function be(e){if(e.length<2)return null;let t=e[0],o=e.slice(1);return Qe(t)?{type:Je[t],name:o}:null}function ro(e,t){return `${Ze[e]}${t}`}function ao(e){return be(e)!==null}function io(e,t,o=10){let s=t.toLowerCase(),n=be(t);return n?I(e,n.type).filter(r=>r.symbol.toLowerCase().includes(s)).slice(0,o):ht(e,t).slice(0,o)}function $t(e,t,o){if(P.isAbsolute(e))return {resolvedPath:e,baseUsed:"absolute",exists:j.existsSync(e)};let s=P.join(o,e);if(j.existsSync(s))return {resolvedPath:s,baseUsed:"project-root",exists:true};let n=P.resolve(t,e);return j.existsSync(n)?{resolvedPath:n,baseUsed:"purpose-dir",exists:true}:{resolvedPath:s,baseUsed:"project-root",exists:false}}function co(e,t,o){if(P.isAbsolute(e)){let a=j.existsSync(e);return {rootResolves:a,purposeResolves:a,mismatch:false}}let s=j.existsSync(P.join(o,e)),n=j.existsSync(P.resolve(t,e));return {rootResolves:s,purposeResolves:n,mismatch:s!==n}}function bt(e,t){return e.includes("*")?new RegExp("^"+e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/\\\*/g,".*")+"$").test(t):e===t}function fo(e,t,o){let s=[],n=I(e,"aspect"),a=new Set;for(let r of n){let c=r.appliesTo||[];if(c.length!==0)for(let f of c)for(let p of t){if(!bt(f,p))continue;let d=r.anchors||[];if(d.length===0){let g=`${r.symbol}::__no-anchors__`;a.has(g)||(a.add(g),s.push({aspectSymbol:r.symbol,anchorRaw:null,kind:"no-anchors"}));}else {let g=r.filePath?P.isAbsolute(r.filePath)?r.filePath:P.resolve(o,r.filePath):o,y=r.filePath?P.dirname(g):o;for(let $ of d){let h=`${r.symbol}::${$.raw}`;if(a.has(h))continue;$t($.path,y,o).exists||(a.add(h),s.push({aspectSymbol:r.symbol,anchorRaw:$.raw,kind:"missing-file"}));}}}}return s}var St=1,vt=3,q=8,xt=5,de={"#":"component",$:"flow","^":"gate","!":"signal","~":"aspect"},L={component:"component",flow:"flow",gate:"gate",signal:"signal",aspect:"aspect"};async function Pt(e){let t=await dt(e),o=gt(t),s=wt(o).map(r=>r.symbol),n=new Map,a=new Map;for(let r of I(o,"flow")){let c=r.data,f=c?.sequence||c?.gates||r.references;if(Array.isArray(f))for(let p of f)typeof p!="string"||!p||(n.has(p)||n.set(p,new Set),n.get(p).add(r.symbol),a.has(r.symbol)||a.set(r.symbol,new Set),a.get(r.symbol).add(p));}return {index:o,allSymbols:s,symbolFlows:n,flowMembers:a,generatedAt:new Date().toISOString()}}function kt(e,t){let o=Ct(t.radius),s=t.mode??"ego",n=jt(t.symbol,e),a={generatedAt:e.generatedAt,stale:false};if(!n||!C(e.index,n)){let h=Rt(t.symbol,e.allSymbols);return {root:t.symbol,freshness:a,nodes:[],edges:[],truncated:false,didYouMean:h}}let r=new Set([n]),c=new Set([n]),f=new Map,p=new Map,d=false,g=[n];for(let h=0;h<o;h++){let w=[];for(let x of g){let R=It(x,e,s),W=R.slice(0,q);if(R.length>q){d=true;let v=R.length-q,u=`${x}::+more`;c.add(u),f.set(`${x}|${u}|uses`,{source:x,target:u,kind:"uses"}),p.set(u,v);}for(let{target:v,kind:u}of W){let m=`${x}|${v}|${u}`;f.has(m)||f.set(m,{source:x,target:v,kind:u}),c.add(v),r.has(v)||(r.add(v),w.push(v));}}if(g=w,g.length===0)break}let y=[];for(let h of c){if(p.has(h)){y.push({id:h,kind:"component",label:`+${p.get(h)} more`});continue}let w=C(e.index,h),x=ve(h,w);y.push({id:h,kind:x,label:At(h,w),...w?.filePath?{path:w.filePath}:{}});}y.sort((h,w)=>h.id.localeCompare(w.id));let $=Array.from(f.values()).sort((h,w)=>h.source!==w.source?h.source.localeCompare(w.source):h.target!==w.target?h.target.localeCompare(w.target):h.kind.localeCompare(w.kind));return {root:n,freshness:a,nodes:y,edges:$,truncated:d}}async function po(e,t){let o=await Pt(e);return kt(o,t)}function lo(e){let t=["graph LR"],o=new Map,s=0;for(let n of e.nodes){let a=`n${s++}`;o.set(n.id,a);let r=Ft(n.kind,n.id,n.label);t.push(` ${a}${r}`);}for(let n of e.edges){let a=o.get(n.source),r=o.get(n.target);!a||!r||t.push(` ${a} -->|${n.kind}| ${r}`);}return t.join(`
|
|
3
|
+
`)}function Ct(e){let t=typeof e=="number"&&!Number.isNaN(e)?Math.floor(e):St;return Math.min(Math.max(t,1),vt)}function _(e){return e.replace(/^[#$^!~@%?&]{1,2}/,"")}function Se(e){let t=/^[#$^!~]/.exec(e);return t?t[0]:""}function ve(e,t){if(t?.type&&L[t.type])return L[t.type];let o=Se(e);return o&&de[o]?de[o]:"component"}function At(e,t){return t?.data?.name||_(e)}function jt(e,t){if(!e)return null;if(C(t.index,e))return e;let o=_(e);for(let s of ["#","$","$$","^","!","~"]){let n=`${s}${o}`;if(C(t.index,n))return n}return null}function It(e,t,o){let s=new Map,n=(r,c)=>{!r||r===e||s.set(`${r}|${c}`,{target:r,kind:c});};if(o==="ego"||o==="ripple"){for(let r of ue(t.index,e))n(r.symbol,Dt(r));for(let r of yt(t.index,e))X(r)==="flow"&&(t.symbolFlows.get(e)?.has(r.symbol)??false)?n(r.symbol,"in-flow"):n(r.symbol,"used-by");}else for(let r of ue(t.index,e))X(r)==="flow"&&n(r.symbol,"in-flow");for(let r of t.symbolFlows.get(e)||[])n(r,"in-flow");if(o==="flow")for(let r of t.symbolFlows.get(e)||[])for(let c of t.flowMembers.get(r)||[])n(c,"uses");return Array.from(s.values()).sort((r,c)=>r.target!==c.target?r.target.localeCompare(c.target):r.kind.localeCompare(c.kind))}function X(e){return e.type&&L[e.type]?L[e.type]:ve(e.symbol)}function Dt(e){let t=X(e);return t==="gate"?"gated-by":t==="flow"?"in-flow":"uses"}function Rt(e,t){let o=_(e).toLowerCase(),s=[];for(let n of t){let a=_(n).toLowerCase();if(a===o){s.push({sym:n,dist:0});continue}if(a.includes(o)||o.includes(a)){s.push({sym:n,dist:1});continue}let r=Et(o,a);r<=4&&s.push({sym:n,dist:r});}return s.sort((n,a)=>n.dist!==a.dist?n.dist-a.dist:n.sym.localeCompare(a.sym)),s.slice(0,xt).map(n=>n.sym)}function Et(e,t){let o=e.length,s=t.length;if(o===0)return s;if(s===0)return o;let n=new Array(s+1),a=new Array(s+1);for(let r=0;r<=s;r++)n[r]=r;for(let r=1;r<=o;r++){a[0]=r;for(let c=1;c<=s;c++){let f=e[r-1]===t[c-1]?0:1;a[c]=Math.min(n[c]+1,a[c-1]+1,n[c-1]+f);}[n,a]=[a,n];}return n[s]}function Ft(e,t,o){let s=Ot(`${Se(t)||""}${o}`);switch(e){case "flow":return `([${s}])`;case "gate":return `{{${s}}}`;case "signal":return `[/${s}/]`;case "aspect":return `[[${s}]]`;default:return `(${s})`}}function Ot(e){return `"${e.replace(/"/g,"'")}"`}var xe=P.join(".paradigm","events"),Tt="classroom-certifications.jsonl",zt="field-failures.jsonl";function Pe(e){try{return j.existsSync(e)?j.readFileSync(e,"utf8").trim().split(`
|
|
4
|
+
`).filter(t=>t.trim()).map(t=>{try{return JSON.parse(t)}catch{return null}}).filter(t=>t!==null):[]}catch{return []}}function uo(e){return Pe(P.join(e,xe,Tt))}function mo(e){return Pe(P.join(e,xe,zt))}function me(e,t){return e>0?Number((t/e).toFixed(3)):null}function go(e){let t=0,o=0,s={};for(let n of e){let a=n.agent;if(!a)continue;let r=n.outcome==="overturned";if(!(r||n.outcome==="survived"))continue;let f=s[a]??{resolved:0,overturned:0,rate:null};f.resolved+=1,r&&(f.overturned+=1),s[a]=f,t+=1,r&&(o+=1);}for(let n of Object.keys(s)){let a=s[n];a.rate=me(a.resolved,a.overturned);}return {overall:me(t,o),perAgent:s}}export{Je as PREFIX_TO_TYPE,Ze as SYMBOL_PREFIXES,Ut as addConnection,Vt as addPremiseNode,dt as aggregateFromDirectory,ct as aggregateFromPremise,gt as buildSymbolIndex,fo as checkAspectAnchors,go as computeRepeatFailureRate,$e as createEmptyPremiseFile,qt as createSnapshot,mt as createSymbolIndex,ro as createSymbolString,co as detectAnchorBaseMismatch,eo as getAllComponentTypes,wt as getAllSymbols,so as getAllTags,io as getAutocompleteSuggestions,to as getChildComponents,Qt as getComponentsByType,Bt as getDefaultPremiseContent,ue as getReferencesFrom,yt as getReferencesTo,C as getSymbol,Jt as getSymbolById,no as getSymbolCounts,Ht as getSymbolsBySource,oo as getSymbolsByTag,I as getSymbolsByType,po as graphSliceFromRoot,ao as isValidSymbol,Pt as loadLiveGraph,at as parsePremiseContent,Wt as parsePremiseFile,be as parseSymbol,kt as projectGraphSlice,uo as readClassroomCertifications,mo as readFieldFailures,$t as resolveAnchorPath,ht as searchSymbols,it as serializePremiseFile,lo as sliceToMermaid,Kt as updateNodePosition};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {a,d,e,f,g,b}from'./chunk-BFD3GFRK.js';import'./chunk-5TAVYPOV.js';import n from'chalk';import*as t from'fs';import*as o from'path';import {fileURLToPath}from'url';async function C(c){let s=process.cwd(),e=parseInt(c.port||"3850",10),p=c.open!==false;console.log(n.cyan(`
|
|
3
3
|
Starting Paradigm Docs...
|
|
4
|
-
`));try{let{startPlatformServer:i}=await import('./platform-server-
|
|
4
|
+
`));try{let{startPlatformServer:i}=await import('./platform-server-AAEDDBS3.js');await i({projectDir:s,port:e,open:p,sections:["overview","docs"]}),console.log(n.green(` Docs running at ${n.bold(`http://localhost:${e}`)}`)),console.log(n.gray(` Press Ctrl+C to stop
|
|
5
5
|
`)),await new Promise(()=>{});}catch(i){i.code==="EADDRINUSE"?(console.error(n.red(`
|
|
6
6
|
Error: Port ${e} is already in use.`)),console.log(n.gray(` Try: paradigm docs serve --port ${e+1}
|
|
7
7
|
`))):console.error(n.red(`
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
export{a as doctorCommand}from'./chunk-54C2PETP.js';import'./chunk-WR6D3SC6.js';import'./chunk-JOHPASZG.js';import'./chunk-K6TLYNRQ.js';import'./chunk-ZJQY5PPP.js';import'./chunk-YNDPSWOE.js';import'./chunk-VIG5LSGZ.js';import'./chunk-LKAT7IAK.js';import'./chunk-5TAVYPOV.js';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {d,a as a$1,e,h,f,g,c,b as b$1}from'./chunk-WR6D3SC6.js';import {M as M$1,N}from'./chunk-JOHPASZG.js';import'./chunk-K6TLYNRQ.js';import'./chunk-ZJQY5PPP.js';import {a}from'./chunk-LKAT7IAK.js';import'./chunk-5TAVYPOV.js';var v=new Set(["mermaid","envelope","json"]),G=new Set(["ego","ripple","flow"]);async function L(e$1,i,r){let t=i||process.cwd(),c=r.radius?parseInt(r.radius,10):1,m=r.mode||"ego";r.mode&&!G.has(r.mode)&&(d(`Invalid mode: "${r.mode}". Expected: ego | ripple | flow`),process.exit(1)),r.format&&!v.has(r.format)&&(d(`Invalid format: "${r.format}". Expected: mermaid | envelope | json`),process.exit(1));let n;try{n=await M$1(t,{symbol:e$1,radius:c,mode:m});}catch(l){d(`Failed to project graph slice: ${l.message}`),process.exit(1);return}if(!(r.asLightbox||r.format)&&process.env.DEBUG&&a.component("graph-slice-command").info("Projected graph slice",{symbol:e$1,radius:c,mode:m,nodes:n.nodes.length,edges:n.edges.length,truncated:n.truncated}),n.didYouMean){if(d(`Symbol not found: ${e$1}`),n.didYouMean.length>0){a$1(""),e(" Did you mean:");for(let l of n.didYouMean)a$1(" "+l);a$1("");}else e(" No similar symbols found. Run `paradigm scan` to (re)build the index.");process.exit(1);return}let g=r.format;if(r.asLightbox||g==="envelope"){a$1(b(n));return}if(g==="mermaid"){a$1(M(n));return}if(g==="json"){h(n);return}w(n,m,c);}function M(e){return "```mermaid\n"+N(e)+"\n```"}function b(e){let i={id:`graph-${e.root.replace(/^[#$^!~]/,"")}`,kind:"graph",title:`Graph slice: ${e.root}`,payload:e};return "```conductor-visual\n"+JSON.stringify(i,null,2)+"\n```"}function w(e$1,i,r){f(`Graph slice \u2014 ${e$1.root}`),g("mode",i),g("radius",String(r)),g("nodes",String(e$1.nodes.length)),g("edges",String(e$1.edges.length)),g("generated",e$1.freshness.generatedAt||"unknown"),e$1.freshness.stale&&c(" scan-index is STALE \u2014 a .purpose is newer than the index. Run `paradigm scan`."),e$1.truncated&&c(" slice truncated \u2014 some nodes have >8 neighbors (collapsed to +N more)."),a$1(""),e(" Nodes:");for(let t of e$1.nodes)a$1(` ${t.id} ${E(t.kind)}`);a$1(""),e(" Edges:");for(let t of e$1.edges)a$1(` ${t.source} --(${t.kind})--> ${t.target}`);a$1(""),b$1(`Projected ${e$1.nodes.length} node(s), ${e$1.edges.length} edge(s).`),e(" Render: --format mermaid (cockpit/GitHub) | --as-lightbox (conductor-visual)");}function E(e){return `[${e}]`}export{L as graphSliceCommand};
|