@a-company/paradigm 6.0.2 → 6.0.5
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-QQISPINV.js → accept-orchestration-TIXUQQGR.js} +1 -1
- package/dist/active-remediations-EBLHRMNN.js +5 -0
- package/dist/agent-MB3H5EZA.js +33 -0
- package/dist/{agent-loader-2WJHD46U.js → agent-loader-VGBPL3TH.js} +1 -1
- package/dist/{agent-loader-YKS2PQWO.js → agent-loader-W3RQJVW7.js} +1 -1
- package/dist/{agents-suggest-HYTFMQD3.js → agents-suggest-IKY6VD2R.js} +1 -1
- package/dist/{ambient-NVKQCW2A.js → ambient-AI42BOM5.js} +2 -2
- package/dist/{ambient-BE3SQXNN.js → ambient-FNNFB4AP.js} +1 -1
- package/dist/authority-GCMPX7RW.js +2 -0
- package/dist/{chunk-FEYOQMZ5.js → chunk-2AU5L333.js} +1 -1
- package/dist/{chunk-M3PPXJU4.js → chunk-4N56FRNE.js} +1 -1
- package/dist/{chunk-3DZK54RU.js → chunk-5RFISGUW.js} +110 -22
- package/dist/{chunk-TNVWGPCE.js → chunk-6QXBXZF6.js} +1 -1
- package/dist/{chunk-WESTEMIM.js → chunk-AMLD7IYC.js} +1 -1
- package/dist/{chunk-VXIIVMTM.js → chunk-F6E3HW45.js} +1 -1
- package/dist/{chunk-TBWWFRL5.js → chunk-GD4F2HC6.js} +1 -1
- package/dist/{chunk-6SKSV5B2.js → chunk-IOVHF4SR.js} +1 -1
- package/dist/{chunk-PHEX6LU4.js → chunk-K7EQHFZP.js} +26 -26
- package/dist/{chunk-M2HKWR25.js → chunk-KAFQA7HV.js} +2 -2
- package/dist/{chunk-GAFKOFAV.js → chunk-LAYBUKMB.js} +1 -1
- package/dist/{chunk-TZDYIPVU.js → chunk-MOVDVBU7.js} +133 -49
- package/dist/{chunk-AO7ZSRME.js → chunk-TQOT2LBO.js} +2 -2
- package/dist/chunk-XQLO5URP.js +11 -0
- package/dist/{compliance-BNFWQPKM.js → compliance-J3VOV445.js} +1 -1
- package/dist/{diff-MF55KQZH.js → diff-75MABOSL.js} +1 -1
- package/dist/{docs-O37YLLRN.js → docs-TSAAS4W3.js} +1 -1
- package/dist/doctor-L5XZENCF.js +2 -0
- package/dist/{hooks-TFMMMB2H.js → hooks-45WDP6QS.js} +1 -1
- package/dist/index.js +4 -4
- package/dist/mcp.js +2 -2
- package/dist/{migrate-Z5UQN57G.js → migrate-R64OQGSM.js} +1 -1
- package/dist/migration-notices-MRZ6PVDS.js +4 -0
- package/dist/{nomination-engine-QPZJH6XO.js → nomination-engine-NCLTGMAK.js} +1 -1
- package/dist/{orchestrate-RID7HHHH.js → orchestrate-K4KBTBYK.js} +1 -1
- package/dist/{providers-4PXMWA7V.js → providers-TBPOE4DI.js} +1 -1
- package/dist/registry-OUTA3DXW.js +20 -0
- package/dist/reindex-GSRV4MQO.js +2 -0
- package/dist/{serve-MO35XIZE.js → serve-3FMUWW5K.js} +1 -1
- package/dist/session-tracker-HHNY6J4I.js +2 -0
- package/dist/{session-work-log-EE4UIZ33.js → session-work-log-MEJ33TYD.js} +1 -1
- package/dist/{session-work-log-4IEVE4KK.js → session-work-log-ZVVJGO7X.js} +1 -1
- package/dist/shift-3ATE2ONQ.js +60 -0
- package/dist/{spawn-UH5RENSE.js → spawn-KKDDR6UR.js} +1 -1
- package/dist/{team-MGT66HZQ.js → team-2LGZQRP4.js} +1 -1
- package/dist/tools-VNDXOFXR.js +2 -0
- package/dist/university-content/notes/N-para-451-agent-routing.md +117 -0
- package/dist/university-content/notes/N-para-451-archetypes-vs-instances.md +82 -0
- package/dist/university-content/notes/N-para-451-identity-layers.md +76 -0
- package/dist/university-content/notes/N-para-451-orchestration-modes.md +85 -0
- package/dist/university-content/notes/N-para-451-paradigm-shift.md +95 -0
- package/dist/university-content/notes/N-para-451-partners-primitive.md +107 -0
- package/dist/university-content/notes/N-para-451-roster-management.md +132 -0
- package/dist/university-content/notes/N-para-451-roster-reference.md +106 -0
- package/dist/university-content/notes/N-para-451-the-team-pattern.md +87 -0
- package/dist/university-content/notes/N-para-451-tiers.md +83 -0
- package/dist/university-content/notes/N-para-451-welcome.md +55 -0
- package/dist/university-content/notes/N-para-451-what-is-an-agent.md +73 -0
- package/dist/university-content/paths/LP-para-451.yaml +69 -0
- package/dist/university-content/quizzes/Q-para-451-foundations.yaml +154 -0
- package/dist/university-content/quizzes/Q-para-451-when-to-invoke.yaml +182 -0
- package/dist/university-ui/assets/{index-nNgzO1il.js → index-CkgaxOXi.js} +2 -2
- package/dist/university-ui/assets/{index-nNgzO1il.js.map → index-CkgaxOXi.js.map} +1 -1
- package/dist/university-ui/index.html +1 -1
- package/package.json +1 -1
- package/dist/agent-X6I2YWOB.js +0 -33
- package/dist/chunk-R5ECMBIV.js +0 -11
- package/dist/doctor-IG5XM4C4.js +0 -2
- package/dist/registry-KOOKFUWD.js +0 -20
- package/dist/reindex-FWPD2VGM.js +0 -2
- package/dist/session-tracker-KGORN6B5.js +0 -2
- package/dist/shift-TVNY2CQF.js +0 -60
- package/dist/tools-QJHAVYI6.js +0 -2
- /package/dist/{chunk-IZSBGW6E.js → chunk-HXGYVS2N.js} +0 -0
- /package/dist/{platform-server-UD45NTGV.js → platform-server-ANOALDPL.js} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import*as
|
|
2
|
+
import*as s from'fs';import*as c from'path';import*as a from'js-yaml';var A={architect:{tier:"high",description:"Complex planning needs best reasoning"},security:{tier:"high",description:"Deep security analysis"},reviewer:{tier:"medium",description:"Balanced critique"},builder:{tier:"low",description:"Fast implementation, lower cost"},tester:{tier:"low",description:"Quick validation"}},y={architect:{role:`You design system architecture, write specifications, and plan features.
|
|
3
3
|
You do NOT write implementation code - that's the Builder's job.
|
|
4
4
|
When your spec is ready, hand off to Builder with 'paradigm team handoff --to builder'.`,focus:{reads:["@features","$flows","specs/*.md","health.yaml"],writes:["specs/*.md",".purpose"]},triggers:[{type:"keyword",match:["design","architect","plan","spec"]},{type:"symbol",match:["@*","$*"]}],handoff_to:["builder","reviewer"],defaultModel:"opus",context:{include:["specs/*.md",".purpose","**/.purpose","portal.yaml"],exclude:["src/**","tests/**","node_modules/**"]}},builder:{role:`You implement code based on specifications from the Architect.
|
|
5
5
|
Follow the spec exactly. If spec is unclear, hand back to Architect.
|
|
@@ -10,4 +10,4 @@ Hand back to Builder for fixes, or to Tester when approved.`,focus:{reads:["^gat
|
|
|
10
10
|
Run tests, check portal validations, verify health status.
|
|
11
11
|
Report issues back to Builder. Update health.yaml when verified.`,focus:{reads:["tests/**","portal.yaml","health.yaml","#components"],writes:["tests/**","health.yaml"]},triggers:[{type:"keyword",match:["test","verify","qa","validate"]},{type:"handoff",from:"reviewer"}],handoff_to:["builder","architect"],defaultModel:"haiku",context:{include:["tests/**","health.yaml","{feature}.purpose"],exclude:["src/**","specs/**","node_modules/**"]}},security:{role:`You audit for security issues, especially around ^gates.
|
|
12
12
|
Review auth flows, check for vulnerabilities.
|
|
13
|
-
Flag issues but do NOT implement fixes - hand to Builder for that.`,focus:{reads:["^gates","!signals","portal.yaml","src/**"],writes:["security/*.md"]},triggers:[{type:"keyword",match:["security","audit","vulnerability","auth"]}],handoff_to:["builder","architect"],defaultModel:"opus",context:{include:["portal.yaml","src/middleware/**","src/auth/**"],exclude:["src/routes/**","tests/**","node_modules/**"]}}};function
|
|
13
|
+
Flag issues but do NOT implement fixes - hand to Builder for that.`,focus:{reads:["^gates","!signals","portal.yaml","src/**"],writes:["security/*.md"]},triggers:[{type:"keyword",match:["security","audit","vulnerability","auth"]}],handoff_to:["builder","architect"],defaultModel:"opus",context:{include:["portal.yaml","src/middleware/**","src/auth/**"],exclude:["src/routes/**","tests/**","node_modules/**"]}}};function d(e){return c.join(e,".paradigm")}function u(e){return c.join(d(e),"agents.yaml")}function x(e){return c.join(d(e),"team-state.yaml")}function g(e){return c.join(d(e),"handoffs")}function R(e){return s.existsSync(u(e))}function P(e){let t=u(e);if(!s.existsSync(t))return null;try{let n=s.readFileSync(t,"utf8");return a.load(n)}catch{return null}}function H(e,t){let n=u(e),r=d(e);s.existsSync(r)||s.mkdirSync(r,{recursive:true});let o={...t,agents:Object.fromEntries(Object.entries(t.agents).map(([f,b])=>{let{partners:l,...h}=b;return [f,l&&l.length>0?{...h,partners:l}:h]}))},i=a.dump(o,{lineWidth:-1,noRefs:true,quotingType:'"'});s.writeFileSync(n,i);}function p(e){let t=x(e);if(!s.existsSync(t))return {current:null,queue:[],recent:[],blocked:[]};try{let n=s.readFileSync(t,"utf8");return a.load(n)}catch{return {current:null,queue:[],recent:[],blocked:[]}}}function m(e,t){let n=x(e),r=d(e);s.existsSync(r)||s.mkdirSync(r,{recursive:true});let o=a.dump(t,{lineWidth:-1,noRefs:true,quotingType:'"'});s.writeFileSync(n,o);}function w(e,t){let n=c.join(g(e),`${t}.yaml`);if(!s.existsSync(n))return null;try{let r=s.readFileSync(n,"utf8");return a.load(r)}catch{return null}}function j(e,t){let n=g(e);s.existsSync(n)||s.mkdirSync(n,{recursive:true});let r=c.join(n,`${t.id}.yaml`),o=a.dump(t,{lineWidth:-1,noRefs:true,quotingType:'"'});s.writeFileSync(r,o);}function v(e){let t=g(e);if(!s.existsSync(t))return [];let n=s.readdirSync(t).filter(o=>o.endsWith(".yaml")),r=[];for(let o of n){let i=o.replace(".yaml",""),f=w(e,i);f&&r.push(f);}return r.sort((o,i)=>new Date(i.timestamp).getTime()-new Date(o.timestamp).getTime())}function C(e){return v(e).filter(t=>t.status==="pending")}function I(e="project",t){let n={};for(let[r,o]of Object.entries(y))if(n[r]={name:r,...o},t&&t[r]){let i=t[r].id.toLowerCase();i.includes("opus")||i.includes("gpt-4")&&!i.includes("mini")||i.includes("o1")&&!i.includes("mini")||i.includes("pro")&&!i.includes("mini")||i.includes("large")?n[r].defaultModel="opus":i.includes("haiku")||i.includes("mini")||i.includes("flash")||i.includes("small")?n[r].defaultModel="haiku":n[r].defaultModel="sonnet";}return {version:"1.0.0",team:{name:`${e}-team`,default_agent:"architect",require_handoff:false},agents:n}}function q(e,t){let n=p(e);n.recent.unshift({...t,timestamp:new Date().toISOString()}),n.recent=n.recent.slice(0,20),m(e,n);}function O(e,t,n){let r=p(e);r.current={agent:t,task:n,started:new Date().toISOString(),symbols_touched:[]},m(e,r);}function E(e){let t=p(e);t.current=null,m(e,t);}export{A as a,d as b,u as c,R as d,P as e,H as f,p as g,m as h,j as i,v as j,C as k,I as l,q as m,O as n,E as o};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {c,a as a$1}from'./chunk-YNDPSWOE.js';import {e as e$1}from'./chunk-VIG5LSGZ.js';import {a}from'./chunk-LKAT7IAK.js';import*as e from'fs';import*as r from'path';import*as w from'js-yaml';import l from'chalk';async function rs(P={}){let p=P.rootDir||process.cwd(),s=[],S=P.quiet,L=P.context;S||(console.log(l.blue(`
|
|
3
|
+
\u{1FA7A} Paradigm Doctor
|
|
4
|
+
`)),console.log(L?l.gray(`Running context audit checks...
|
|
5
|
+
`):l.gray(`Checking Paradigm setup...
|
|
6
|
+
`)));let N=a.command("doctor").start("Running health checks");if(!L){let E=function(t){let a=[];try{let n=e.readdirSync(t,{withFileTypes:!0});for(let i of n){if(i.name==="node_modules"||i.name==="dist"||i.name===".git")continue;let d=r.join(t,i.name);i.isDirectory()?a.push(...E(d)):i.name===".purpose"&&a.push(d);}}catch{}return a};let o=r.join(p,".paradigm");if(e.existsSync(o))if(e.statSync(o).isFile())s.push({name:".paradigm",status:"warn",message:"Legacy file format (should be directory)",fix:"paradigm upgrade --all"});else {s.push({name:".paradigm/",status:"ok",message:"Directory exists"});let a=r.join(o,"config.yaml");if(e.existsSync(a))try{let u=e.readFileSync(a,"utf8");e$1(u),s.push({name:".paradigm/config.yaml",status:"ok",message:"Valid YAML"});}catch(u){s.push({name:".paradigm/config.yaml",status:"error",message:`Invalid YAML: ${u.message}`,fix:"Check YAML syntax"});}else s.push({name:".paradigm/config.yaml",status:"missing",message:"Config file not found",fix:"paradigm init --force"});let n=["logger.md","probe.md","symbols.md"],i=r.join(o,"specs");if(e.existsSync(i))for(let u of n){let x=r.join(i,u);e.existsSync(x)?s.push({name:`.paradigm/specs/${u}`,status:"ok",message:"Present"}):s.push({name:`.paradigm/specs/${u}`,status:"missing",message:"Spec file not found",fix:"paradigm upgrade --all"});}else s.push({name:".paradigm/specs/",status:"missing",message:"Specs directory not found",fix:"paradigm upgrade --all"});let d=r.join(o,"docs");e.existsSync(d)?s.push({name:".paradigm/docs/",status:"ok",message:"Directory exists"}):s.push({name:".paradigm/docs/",status:"missing",message:"Docs directory not found",fix:"paradigm upgrade --all"});let h=r.join(o,"prompts");e.existsSync(h)?s.push({name:".paradigm/prompts/",status:"ok",message:"Directory exists"}):s.push({name:".paradigm/prompts/",status:"missing",message:"Prompts directory not found",fix:"paradigm upgrade --all"});let g=["specs","implementation-guides","prompts","decisions"],f=[];for(let u of g){let x=r.join(o,u);if(e.existsSync(x)&&e.statSync(x).isDirectory()){let k=r.join(x,".index.yaml");e.existsSync(k)||f.push(`.paradigm/${u}/`);}}f.length>0?s.push({name:"Docs-class indexes",status:"warn",message:`${f.length} director${f.length===1?"y":"ies"} missing .index.yaml: ${f.join(", ")}`,fix:"paradigm docs scaffold"}):s.push({name:"Docs-class indexes",status:"ok",message:"All docs-class directories have .index.yaml"});let y=r.join(o,"scan-index.json"),F=r.join(p,".paradigm-scan-index.json");if(e.existsSync(y)){let u=e.statSync(y),x=Date.now()-u.mtime.getTime(),k=Math.floor(x/(1e3*60*60));k>24?s.push({name:".paradigm/scan-index.json",status:"warn",message:`Stale (${k} hours old)`,fix:"paradigm index"}):s.push({name:".paradigm/scan-index.json",status:"ok",message:k>0?`${k} hours old`:"Fresh"});}else e.existsSync(F)?s.push({name:"scan-index",status:"warn",message:"Using legacy location",fix:"paradigm index"}):s.push({name:".paradigm/scan-index.json",status:"missing",message:"Not generated",fix:"paradigm index"});}else s.push({name:".paradigm/",status:"missing",message:"Not initialized",fix:"paradigm init"});let m=c(p);if(m.detected){let t=a$1(m.detected);if(t){let a=r.join(p,t.outputPath);e.existsSync(a)?s.push({name:t.outputPath,status:"ok",message:`Present (${m.detected})`}):s.push({name:t.outputPath,status:"missing",message:`Not generated for ${m.detected}`,fix:"paradigm sync"});}}let c$1=r.join(p,".premise");e.existsSync(c$1)?s.push({name:".premise",status:"ok",message:"Present"}):s.push({name:".premise",status:"missing",message:"Not found (optional)"});let v=r.join(p,".purpose");e.existsSync(v)?s.push({name:".purpose",status:"ok",message:"Present"}):s.push({name:".purpose",status:"warn",message:"Root .purpose not found",fix:"paradigm init"});let D=r.join(p,".paradigm","config.yaml");if(e.existsSync(D))try{let t=e.readFileSync(D,"utf8"),n=w.load(t)?.["purpose-required"];if(n&&Array.isArray(n)){let i=[];for(let d of n){if(!d.pattern)continue;let{glob:h}=await import('glob'),g=await h(d.pattern,{cwd:p,nodir:!1});for(let f of g){let y=r.join(p,f);try{e.statSync(y).isDirectory()&&!e.existsSync(r.join(y,".purpose"))&&i.push(f);}catch{}}}i.length>0?s.push({name:"Purpose-required",status:"warn",message:`${i.length} director${i.length===1?"y":"ies"} missing .purpose: ${i.join(", ")}`,fix:"Create .purpose files with paradigm_purpose_init + paradigm_purpose_add_component"}):s.push({name:"Purpose-required",status:"ok",message:"All required directories have .purpose files"});}}catch{}let q=/\[NEEDS CLARIFICATION:\s*[^\]]+\]/gi,R=0,Y=E(p);for(let t of Y)try{let n=e.readFileSync(t,"utf8").match(q);n&&(R+=n.length);}catch{}R>0?s.push({name:"Clarification markers",status:"warn",message:`${R} [NEEDS CLARIFICATION] marker${R>1?"s":""} found in .purpose files`,fix:"Resolve open clarification markers before shipping"}):Y.length>0&&s.push({name:"Clarification markers",status:"ok",message:"No unresolved markers"});let I=r.join(p,"portal.yaml");if(e.existsSync(I))try{let t=e.readFileSync(I,"utf8"),a=w.load(t);if(a?.version&&a?.gates){let n=Object.keys(a.gates||{}).length,i=Object.keys(a.routes||{}).length;s.push({name:"portal.yaml",status:"ok",message:`Valid (${n} gates, ${i} routes)`});}else s.push({name:"portal.yaml",status:"warn",message:"Missing version or gates section",fix:'Add version: "1.0" and gates: {} to portal.yaml'});}catch(t){s.push({name:"portal.yaml",status:"error",message:`Invalid YAML: ${t.message}`,fix:"Check YAML syntax in portal.yaml"});}if(e.existsSync(I))try{let{checkPortalCompliance:t,getComplianceSummary:a}=await import('./portal-compliance-JONQ4SOP.js'),n=await t(p),i=a(n);s.push({name:"Portal compliance",status:i.status,message:i.message,fix:i.status!=="ok"?"paradigm portal check":void 0});}catch{}{let t=r.join(p,".paradigm","scan-index.json"),a=r.join(p,".paradigm","roster.yaml");try{if(e.existsSync(t)){let n=e.readFileSync(t,"utf8"),i=JSON.parse(n),d=Object.keys(i.components??{}).length,h=Object.keys(i.aspects??{}).length;if(d>0){let g=!1;if(e.existsSync(a))try{let y=w.load(e.readFileSync(a,"utf8"));g=Array.isArray(y?.active)&&y.active.includes("compliance");}catch{}let f=`${d}:${h} components:aspects`;g?s.push({name:"Aspect coverage",status:"ok",message:`${f} (claimant: rune)`}):h===0?s.push({name:"Aspect coverage",status:"info",message:`${f} ${l.dim("(no aspects defined)")}`}):s.push({name:"Aspect coverage",status:"info",message:`${f} ${l.dim("(no claimant active)")}`});}}}catch{}}let U=r.join(p,".paradigm","flows.yaml");if(e.existsSync(U))try{let t=e.readFileSync(U,"utf8"),a=w.load(t);if(a?.version&&a?.flows){let n=Object.keys(a.flows||{}).length,i=Object.entries(a.flows||{}).filter(([,d])=>!d?.steps||(d.steps?.length??0)===0);i.length>0?s.push({name:".paradigm/flows.yaml",status:"warn",message:`${n} flows defined, ${i.length} have no steps`,fix:"Add steps to empty flow definitions"}):s.push({name:".paradigm/flows.yaml",status:"ok",message:`Valid (${n} flows)`});}else s.push({name:".paradigm/flows.yaml",status:"warn",message:"Missing version or flows section",fix:'Ensure flows.yaml has version: "1.0" and flows: {}'});}catch(t){s.push({name:".paradigm/flows.yaml",status:"error",message:`Invalid YAML: ${t.message}`,fix:"Check YAML syntax in flows.yaml"});}let H=r.join(p,".paradigm","lore");if(e.existsSync(H))try{let t=e.readdirSync(H).filter(a=>a.endsWith(".yaml"));t.length===0?s.push({name:"Lore entries",status:"warn",message:"Lore directory exists but no entries found",fix:"Record a lore entry: paradigm lore record"}):s.push({name:"Lore entries",status:"ok",message:`${t.length} lore file${t.length>1?"s":""}`});}catch{s.push({name:"Lore entries",status:"warn",message:"Could not read lore directory"});}let G=r.join(p,".paradigm","university");if(e.existsSync(G))try{let t=r.join(G,"content"),a=0,n=0;if(e.existsSync(t))for(let i of ["notes","policies","quizzes","paths"]){let d=r.join(t,i);e.existsSync(d)&&(a+=e.readdirSync(d).filter(h=>h.endsWith(".md")||h.endsWith(".yaml")).length);}if(a===0)s.push({name:"University content",status:"warn",message:"University directory exists but no content found",fix:'Add content: paradigm university add note --title "Getting Started"'});else {let i=r.join(t,"quizzes");if(e.existsSync(i))for(let h of e.readdirSync(i).filter(g=>g.endsWith(".yaml")))try{let g=w.load(e.readFileSync(r.join(i,h),"utf8"));if(g?.questions)for(let f of g.questions)f.choices&&f.correct&&!(f.correct in f.choices)&&n++;}catch{}let d=r.join(t,"paths");if(e.existsSync(d))for(let h of e.readdirSync(d).filter(g=>g.endsWith(".yaml")))try{let g=w.load(e.readFileSync(r.join(d,h),"utf8"));if(g?.steps){for(let f of g.steps)if(f.content&&!f.content.startsWith("plsat:")){let y=!1;for(let F of ["notes","policies","quizzes","paths"]){let u=r.join(t,F);if(e.existsSync(u)&&e.readdirSync(u).some(k=>k.startsWith(f.content))){y=!0;break}}y||n++;}}}catch{}n>0?s.push({name:"University content",status:"warn",message:`${a} items, ${n} issue${n>1?"s":""}`,fix:"Run: paradigm university validate --deep"}):s.push({name:"University content",status:"ok",message:`${a} content item${a>1?"s":""}`});}}catch{s.push({name:"University content",status:"warn",message:"Could not read university directory"});}let _=r.join(p,".claude","hooks.json"),ss=r.join(p,"plugins","paradigm","hooks.json");if(e.existsSync(_)){let t=e.statSync(_),a=Date.now()-t.mtime.getTime(),n=Math.floor(a/(1e3*60*60*24));n>30?s.push({name:"Claude Code hooks",status:"warn",message:`Hooks are ${n} days old \u2014 may be outdated`,fix:"paradigm hooks install"}):s.push({name:"Claude Code hooks",status:"ok",message:n>0?`${n} days old`:"Fresh"});}else e.existsSync(ss)?s.push({name:"Claude Code hooks",status:"ok",message:"Using plugin hooks"}):s.push({name:"Claude Code hooks",status:"missing",message:"No hooks installed",fix:"paradigm hooks install"});let V=r.join(p,".paradigm","habits.yaml");if(e.existsSync(V))try{let t=e.readFileSync(V,"utf8"),a=w.load(t);if(a?.version&&Array.isArray(a?.habits)){let n=a.habits.filter(i=>i.enabled!==!1).length;s.push({name:"Habits config",status:"ok",message:`Valid (${n}/${a.habits.length} enabled)`});}else s.push({name:"Habits config",status:"warn",message:"Missing version or habits array",fix:"Regenerate habits.yaml with paradigm habits init"});}catch(t){s.push({name:"Habits config",status:"error",message:`Invalid YAML: ${t.message}`,fix:"Check YAML syntax in habits.yaml"});}let J=r.join(p,"AGENTS.md");if(e.existsSync(J)){let t=e.statSync(J),a=Date.now()-t.mtime.getTime(),n=Math.floor(a/(1e3*60*60*24));n>60?s.push({name:"AGENTS.md",status:"warn",message:`${n} days since last update \u2014 may be stale`,fix:"paradigm sync"}):s.push({name:"AGENTS.md",status:"ok",message:n>0?`Updated ${n} days ago`:"Fresh"});}}let O=0,T=0,$=0;for(let o of s){let m,c;switch(o.status){case "ok":m="\u2713",c=l.green;break;case "warn":m="\u26A0",c=l.yellow,T++;break;case "error":m="\u2717",c=l.red,O++;break;case "missing":m="\u25CB",c=l.gray,$++;break;case "info":m="\u2802",c=l.gray;break}if(!S){let v=o.name.padEnd(30);console.log(` ${c(m)} ${v} ${c(o.message)}`),o.fix&&console.log(l.gray(` \u2514\u2500 Fix: ${o.fix}`));}}let{runContextAudit:Z}=await import('./context-audit-JVCA6GSV.js'),M=await Z(p,{quiet:S}),W=0,z=0,b=0;!S&&M.length>0&&(console.log(""),console.log(l.blue(" Context Audit")),console.log(l.gray(" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500")));for(let o of M){let m,c;switch(o.status){case "ok":m="\u2713",c=l.green;break;case "warn":m="\u26A0",c=l.yellow,z++;break;case "error":m="\u2717",c=l.red,W++;break;case "advisory":m="\u2139",c=l.cyan,b++;break}if(!S){let v=o.check.padEnd(30);if(console.log(` ${c(m)} ${v} ${c(o.message)}`),o.details&&o.details.length>0){let D=o.details.slice(0,5);for(let q of D)console.log(l.gray(` \u2502 ${q}`));o.details.length>5&&console.log(l.gray(` \u2502 ... and ${o.details.length-5} more`));}o.fix&&console.log(l.gray(` \u2514\u2500 Fix: ${o.fix}`));}}let C=O+W,j=T+z,A=C+j+$===0;if(!S)if(console.log(""),A)console.log(l.green(`\u2728 All checks passed!
|
|
7
|
+
`));else {let o=[];C>0&&o.push(l.red(`${C} error${C>1?"s":""}`)),j>0&&o.push(l.yellow(`${j} warning${j>1?"s":""}`)),$>0&&o.push(l.gray(`${$} missing`)),b>0&&o.push(l.cyan(`${b} advisor${b>1?"ies":"y"}`)),console.log(`${o.join(", ")} found.
|
|
8
|
+
`),console.log(l.gray("Run the suggested commands to fix issues.")),console.log(l.gray(`Troubleshooting guide: .paradigm/docs/troubleshooting.md
|
|
9
|
+
`));}if(!S&&P.explain&&!A)try{let{narrateAllGaps:o}=await import('./gap-narrator-NTXLUI7I.js'),m=[];for(let c of s)c.status!=="ok"&&(c.name===".purpose"||c.name.startsWith("Purpose-required")?m.push({type:"missing-purpose",target:c.name,severity:"improvement"}):c.name===".paradigm/scan-index.json"&&c.status==="warn"?m.push({type:"index-stale",target:c.name,severity:"improvement"}):c.name==="Portal compliance"?m.push({type:"portal-mismatch",target:c.name,severity:c.status==="error"?"blocking":"improvement"}):c.name==="Clarification markers"&&m.push({type:"missing-description",target:c.name,severity:"improvement"}));if(m.length>0){let c=o(m);console.log(l.blue(`
|
|
10
|
+
Gap Narrations (--explain)
|
|
11
|
+
`)),console.log(l.gray(c.narrative)),console.log("");}}catch{}A?N.success("All health checks passed",{total:s.length+M.length}):N.error("Health checks found issues",{errors:C,warnings:j,missing:$,advisories:b});try{let{captureSnapshot:o}=await import('./metrics-UESGUHTA.js');o(p);}catch{}return A}export{rs as a};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {a,e,d}from'./chunk-QO7YPQXC.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$1=[];try{d$1=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=e({toolsCalled:[],filesModified:d$1,symbolsTouched:[],loreRecorded:!1,hasPortalRoutes:f,taskAddsRoutes:!1,gitClean:l}),o=d(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$1,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-AI42BOM5.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 {b}from'./chunk-
|
|
2
|
+
import {b}from'./chunk-IOVHF4SR.js';import'./chunk-TYWB5IQJ.js';import'./chunk-AMLD7IYC.js';import'./chunk-FYDRENK7.js';import'./chunk-HXGYVS2N.js';import'./chunk-TQOT2LBO.js';import'./chunk-EKZDFEJW.js';import'./chunk-LPBCQM5Y.js';import'./chunk-LWAIVOSF.js';import'./chunk-JIXHEBGK.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}
|
|
@@ -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-ANOALDPL.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(`
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
export{a as hooksInstallCommand,c as hooksStatusCommand,b as hooksUninstallCommand}from'./chunk-
|
|
2
|
+
export{a as hooksInstallCommand,c as hooksStatusCommand,b as hooksUninstallCommand}from'./chunk-5RFISGUW.js';import'./chunk-5TAVYPOV.js';
|