@a-company/paradigm 7.0.0 → 7.2.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-YO2V2WYA.js → accept-orchestration-XW44LF5Y.js} +1 -1
- package/dist/add-CBDU23S2.js +12 -0
- package/dist/{aggregate-KZICPVT3.js → aggregate-H7SB2UYT.js} +1 -1
- package/dist/ambient-OW5M5LVN.js +2 -0
- package/dist/{ambient-OX7YJ4PJ.js → ambient-TFLZFV5Y.js} +1 -1
- package/dist/ambient-VCTUHHIG.js +2 -0
- package/dist/arch-loader-YVOS3QRY.js +2 -0
- package/dist/{beacon-52EWNZPK.js → beacon-WVN264OT.js} +1 -1
- package/dist/calibrate-PHVP7RPH.js +4 -0
- package/dist/captain-CAXGHC2V.js +2 -0
- package/dist/captain-CWCLFOXV.js +2 -0
- package/dist/{chunk-QDP4G53M.js → chunk-27EK3OQZ.js} +4 -4
- package/dist/chunk-2KK4JQ55.js +17 -0
- package/dist/chunk-3I3TITBA.js +25 -0
- package/dist/chunk-3YM5ABNX.js +2 -0
- package/dist/{chunk-47YPID6H.js → chunk-6HYRS3PH.js} +21 -21
- package/dist/{chunk-S3UVQ5RV.js → chunk-6VZSOQ7Y.js} +1 -1
- package/dist/chunk-727PXENG.js +2 -0
- package/dist/chunk-A5EEY6NO.js +3 -0
- package/dist/{chunk-DLMDHS2X.js → chunk-ASBK55FU.js} +1 -1
- package/dist/{chunk-4GC35IFF.js → chunk-D6BSCELB.js} +1 -1
- package/dist/{chunk-G6DK3ND3.js → chunk-DH7QVZDI.js} +9 -0
- package/dist/chunk-ECO3LHCE.js +2 -0
- package/dist/chunk-FG3M6VVO.js +30 -0
- package/dist/chunk-FNYYQNJY.js +2 -0
- package/dist/{chunk-ROU3F2HZ.js → chunk-HSY75GRR.js} +3 -3
- package/dist/chunk-K6TLYNRQ.js +7 -0
- package/dist/chunk-K7KT6FL3.js +25 -0
- package/dist/chunk-KAUGQMXU.js +4 -0
- package/dist/chunk-M7JHVVDW.js +6 -0
- package/dist/chunk-NFN5UUJB.js +2 -0
- package/dist/chunk-NRP2KJ6I.js +33 -0
- package/dist/{chunk-WROJSWAO.js → chunk-QPQBXRXX.js} +1 -1
- package/dist/chunk-RVXQNS6K.js +30 -0
- package/dist/chunk-RZRFYGND.js +504 -0
- package/dist/chunk-UNSI6DVD.js +93 -0
- package/dist/{chunk-JCGCPAHF.js → chunk-USYV5QYU.js} +1 -1
- package/dist/chunk-VOPJ47QY.js +2 -0
- package/dist/{chunk-QBIQ2FYB.js → chunk-W3VWORQZ.js} +1 -1
- package/dist/chunk-WMTES556.js +2 -0
- package/dist/chunk-XBK244QR.js +6 -0
- package/dist/chunk-XSKIXXFW.js +504 -0
- package/dist/{chunk-MBSY57RN.js → chunk-Y76OIMDO.js} +1 -1
- package/dist/chunk-YYRP7FLC.js +2 -0
- package/dist/{compliance-MLG4W6S4.js → compliance-3M6COUCO.js} +3 -3
- package/dist/{constellation-RHZAEFV7.js → constellation-TIKNCZWR.js} +1 -1
- package/dist/{cost-24UZSS2P.js → cost-VTHZQKO4.js} +2 -2
- package/dist/{diff-MC6AXLKX.js → diff-Z2YSIRC4.js} +1 -1
- package/dist/{dist-TNE4GFT7.js → dist-PW5YPGFF.js} +1 -1
- package/dist/{docs-3YFNNZRV.js → docs-OWJ7EPD7.js} +1 -1
- package/dist/github-4X4MYINS.js +4 -0
- package/dist/{habits-BX2IRSUI.js → habits-UA7YT3CG.js} +3 -3
- package/dist/{hooks-AXBWYJ5V.js → hooks-XXJ7CSGJ.js} +1 -1
- package/dist/index.js +9 -9
- package/dist/{init-F4MSKZIW.js → init-QPMLEQWQ.js} +1 -1
- package/dist/{integrity-7TKX3DZ4.js → integrity-FRGF5BFS.js} +1 -1
- package/dist/journal-loader-CNNA4EAU.js +2 -0
- package/dist/lint-Y4P3MHBV.js +26 -0
- package/dist/list-5XRLWD7K.js +12 -0
- package/dist/mcp.js +1 -1
- package/dist/{migrate-5M4KUQ2L.js → migrate-LIVXILOO.js} +1 -1
- package/dist/{nomination-engine-AQHU2KBU.js → nomination-engine-EFXDEPZN.js} +1 -1
- package/dist/nomination-engine-YRHZZZUN.js +2 -0
- package/dist/notebook-loader-TZVIMNDJ.js +2 -0
- package/dist/{orchestrate-GMYEBA5T.js → orchestrate-C5NM5MFN.js} +1 -1
- package/dist/orchestration-EVWQWTOV.js +2 -0
- package/dist/orchestration-UP3KFUJT.js +2 -0
- package/dist/{platform-server-WIBVYHIV.js → platform-server-FXF3XFHM.js} +1 -1
- package/dist/{probe-27ARJKRO.js → probe-G3TKOJYW.js} +1 -1
- package/dist/quiz-QKIKAVL7.js +10 -0
- package/dist/registry-NEW4OJ44.js +2 -0
- package/dist/reindex-QZYOD5K4.js +2 -0
- package/dist/{reindex-XTRF23F7.js → reindex-W67B2LQP.js} +1 -1
- package/dist/remember-KZYAY77S.js +14 -0
- package/dist/{review-BRO2UP4M.js → review-WHRNLW2W.js} +1 -1
- package/dist/{ripple-KCVDS3WE.js → ripple-B6U7263T.js} +1 -1
- package/dist/{serve-2PKJP65E.js → serve-6RNZYK2I.js} +2 -2
- package/dist/{serve-SMGWGJLM.js → serve-ZT2Z54NK.js} +1 -1
- package/dist/{setup-5V2AGLQ6.js → setup-L5OP24US.js} +3 -3
- package/dist/{shift-JBCEDCGA.js → shift-UDKXCIW7.js} +3 -3
- package/dist/{show-N5LGB5B2.js → show-VXNGIJE4.js} +3 -3
- package/dist/{snapshot-YMX5QRBM.js → snapshot-MT5L6XE4.js} +1 -1
- package/dist/{spawn-PHA2SVQ3.js → spawn-I6XG57S2.js} +1 -1
- package/dist/status-45KIG32R.js +6 -0
- package/dist/{status-3GJXI4IK.js → status-4QGKLOP6.js} +4 -4
- package/dist/{summary-RPU2BS3Q.js → summary-6QNVQZJV.js} +1 -1
- package/dist/symphony-KQJ6HIXB.js +53 -0
- package/dist/symphony-VDNDFK7H.js +2 -0
- package/dist/symphony-relay-ASMKPDEE.js +3 -0
- package/dist/task-KFND4HLF.js +3 -0
- package/dist/task-loader-HBZ3KRH2.js +2 -0
- package/dist/task-loader-IO4UVFUD.js +2 -0
- package/dist/task-settlement-NF7PFSNE.js +3 -0
- package/dist/task-settlement-TATNPY6L.js +3 -0
- package/dist/team-6WNNLBAO.js +2 -0
- package/dist/thread-2A7QKU72.js +41 -0
- package/dist/tools-GDWT74O6.js +2 -0
- package/dist/tools-SDWAFQMQ.js +142 -0
- package/dist/university-ui/assets/{index-B8hm_MdR.js → index-AbTjHBCf.js} +2 -2
- package/dist/university-ui/assets/{index-B8hm_MdR.js.map → index-AbTjHBCf.js.map} +1 -1
- package/dist/university-ui/index.html +1 -1
- package/dist/validate-OZTX3FYX.js +13 -0
- package/dist/validate-RIMSY3RP.js +9 -0
- package/dist/{workspace-6POCBPDY.js → workspace-4D4TQ637.js} +1 -1
- package/package.json +1 -1
- package/dist/add-V6XR7DU5.js +0 -12
- package/dist/agent-loader-VGBPL3TH.js +0 -2
- package/dist/ambient-7HBJHJL2.js +0 -2
- package/dist/ambient-SST5CLEC.js +0 -35
- package/dist/captain-YUP3KVCA.js +0 -2
- package/dist/chunk-3MZ4J2LF.js +0 -2
- package/dist/chunk-6AKNXD22.js +0 -32
- package/dist/chunk-7SWEOPWF.js +0 -2
- package/dist/chunk-CVPKQ3JH.js +0 -8
- package/dist/chunk-EKNLG73M.js +0 -6
- package/dist/chunk-FRQRREJ6.js +0 -29
- package/dist/chunk-GD4F2HC6.js +0 -3
- package/dist/chunk-JIXHEBGK.js +0 -7
- package/dist/chunk-K54L6CFR.js +0 -25
- package/dist/chunk-MBPLJKE5.js +0 -3
- package/dist/chunk-QEQCPVF5.js +0 -4
- package/dist/chunk-QGZRM6ZB.js +0 -2
- package/dist/chunk-QO7YPQXC.js +0 -2
- package/dist/chunk-S4J337EQ.js +0 -504
- package/dist/chunk-V6MIKLMY.js +0 -18
- package/dist/journal-loader-GLH7XFTK.js +0 -2
- package/dist/lint-IGKE6UPS.js +0 -26
- package/dist/list-NC3QGT75.js +0 -12
- package/dist/lore-loader-D2ISOASW.js +0 -2
- package/dist/notebook-loader-6DYFMNJ2.js +0 -2
- package/dist/orchestration-G5MAY6IA.js +0 -2
- package/dist/quiz-TNV6APBM.js +0 -10
- package/dist/remember-MJRNTXYS.js +0 -14
- package/dist/session-work-log-QXPAXY5K.js +0 -2
- package/dist/status-ENAI35NL.js +0 -6
- package/dist/symphony-7INZR43F.js +0 -53
- package/dist/symphony-G6IENE4K.js +0 -2
- package/dist/symphony-relay-2RHG25Z4.js +0 -3
- package/dist/task-loader-IGQQ6ZFL.js +0 -2
- package/dist/task-settlement-NW4XMJGJ.js +0 -3
- package/dist/team-J2YXPEGX.js +0 -2
- package/dist/thread-HFXK65D4.js +0 -41
- package/dist/tools-HNJ7D5IO.js +0 -2
- package/dist/validate-IQG7DBFC.js +0 -9
- package/dist/validate-LSCDOLBO.js +0 -13
package/dist/lint-IGKE6UPS.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {e,a as a$1,o,b}from'./chunk-JIXHEBGK.js';import {a}from'./chunk-LKAT7IAK.js';import'./chunk-5TAVYPOV.js';import*as m from'fs';import*as p from'path';import c from'chalk';import j from'ora';function w(s){let e=s.message.toLowerCase();if(e.includes("expected object, received array")&&s.path?.includes("features"))return 'Convert to object format: features: { feature-name: { description: "..." } }';if(e.includes("expected object, received array")&&s.path?.includes("components"))return 'Convert to object format: components: { component-name: { description: "..." } }';if(e.includes("has no description"))return "Add a description field to help AI understand this item";if(e.includes("should use alphanumeric"))return "Use kebab-case: my-feature-name (lowercase, hyphens)";if(e.includes("references unknown"))return "Define the symbol in a .purpose file or remove the reference";if(e.includes("yaml syntax")||e.includes("bad indentation"))return "Check indentation (use 2 spaces) and YAML syntax"}function E(s){let e=s.trim().split(`
|
|
3
|
-
`),i=e.some(u=>/^#+\s/.test(u)),f=!s.includes(":")||e[0].startsWith("#")||e[0].startsWith("@");return i||f&&!s.trim().startsWith("---")}function D(s,e){let i=s.trim().split(`
|
|
4
|
-
`),f=p.basename(p.dirname(e)),u="";for(let r of i){if(!r.startsWith("#")&&!r.startsWith("@")&&r.trim()){u=r.trim();break}r.startsWith("#")&&(u=r.replace(/^#+\s*/,"").trim());}return `# Auto-converted from markdown format
|
|
5
|
-
description: "${u||`Purpose file for ${f}`}"
|
|
6
|
-
|
|
7
|
-
# TODO: Add features and components
|
|
8
|
-
# features:
|
|
9
|
-
# feature-name:
|
|
10
|
-
# description: "What this feature does"
|
|
11
|
-
|
|
12
|
-
# components:
|
|
13
|
-
# component-name:
|
|
14
|
-
# description: "What this component does"
|
|
15
|
-
`}function I(s){return s.replace(/\[\s*([^\]]+)\s*\]/g,(e,i)=>`[${i.split(",").map(u=>{let r=u.trim();return /^[#@$^!%]/.test(r)&&!r.startsWith('"')&&!r.startsWith("'")?`"${r}"`:r}).join(", ")}]`)}function L(s,e){try{let i=m.readFileSync(s,"utf8"),f=!1;if(E(i)&&(i=D(i,s),f=!0),e.some(a=>a.message.includes("tag suffix")||a.message.includes("flow indicator")||a.message.includes("missed comma"))||i.match(/\[[^\]]*[#@$^!%][^\]"']*\]/)){let a=I(i);a!==i&&(i=a,f=!0);}if(f){let a=s+".tmp";m.writeFileSync(a,i);let n=a$1(a);return m.unlinkSync(a),n.isYamlValid&&n.data?b(n.data):i}let r=a$1(s);if(r.isYamlValid&&r.data){let a=b(r.data);if(a.trim()!==i.trim())return a}return null}catch{return null}}function k(s,e,i){let f=p.relative(e,s),u=[],r=[],a=false,n=a$1(s);for(let t of n.detailedErrors||[]){let o={message:t.message,line:t.line,path:t.path,type:(t.type==="yaml"||t.type==="file","error"),suggestion:w(t),fixable:t.type==="schema"};u.push(o);}if(n.data){let t=o(n.data,f);for(let o of t.issues){let d={message:o.message,path:o.path,type:o.type,suggestion:w(o),fixable:false};o.type==="error"?u.push(d):r.push(d);}}if(i.fix&&u.length>0){let t=L(s,u);if(t){m.writeFileSync(s,t),a=true;let o=a$1(s);if(o.detailedErrors&&o.detailedErrors.length<u.length){u.length=0,r.length=0;for(let d of o.detailedErrors||[])u.push({message:d.message,line:d.line,path:d.path,type:"error",suggestion:w(d)});}}}let l=u.length===0&&(!i.strict||r.length===0);return {path:s,relativePath:f,valid:l,errors:u,warnings:r,fixed:a}}function W(s,e=" "){let i=[],f=s.type==="error"?c.red("\u2717"):c.yellow("\u26A0"),u=s.line?c.gray(` (line ${s.line})`):"",r=s.path?c.gray(` at ${s.path}`):"";return i.push(`${e}${f} ${s.message}${u}${r}`),s.suggestion&&i.push(`${e} ${c.cyan("\u2192")} ${c.gray(s.suggestion)}`),i}var A=["src","lib","features","components","services","utils","routes","api","commands","core","middleware","models","handlers","hooks","stores","config","plugins"],S=new Set(["node_modules","dist","build",".git",".paradigm","coverage","__pycache__",".next",".nuxt","vendor","target"]);function C(s,e){let i=new Set(e.map(r=>p.dirname(r))),f=[];function u(r,a){if(a>4||i.has(r))return;let n;try{n=m.readdirSync(r,{withFileTypes:!0});}catch{return}let l=p.basename(r);if(S.has(l))return;if((A.includes(l)||n.some(o=>!o.isDirectory()&&/\.(ts|tsx|js|jsx|rs|py|go)$/.test(o.name)))&&!n.some(o=>o.name===".purpose")){let d=n.filter(g=>!g.isDirectory()&&/\.(ts|tsx|js|jsx|rs|py|go)$/.test(g.name)).filter(g=>!g.name.endsWith(".test.ts")&&!g.name.endsWith(".spec.ts")&&g.name!=="index.ts").map(g=>g.name.replace(/\.[^.]+$/,"")).slice(0,10).map(g=>g.replace(/([A-Z])/g,(h,x,P)=>(P>0?"-":"")+x.toLowerCase()));if(d.length>0){let g=p.join(r,".purpose"),h=p.relative(s,r),x=O(l,d);f.push({dir:r,relativeDir:h,purposePath:g,relativePurposePath:p.relative(s,g),components:d,content:x});}}for(let o of n)o.isDirectory()&&!S.has(o.name)&&u(p.join(r,o.name),a+1);}return u(s,0),f}function O(s,e){let i=[`description: "Components in ${s}"`,"","components:"];for(let f of e)i.push(` ${f}:`),i.push(` description: "TODO: describe #${f}"`);return i.push(""),i.join(`
|
|
16
|
-
`)}async function T(s,e$1){let i=s?p.resolve(s):process.cwd(),f=j();!e$1.quiet&&!e$1.json&&console.log(c.blue(`
|
|
17
|
-
\u{1F50D} Paradigm Lint
|
|
18
|
-
`));let u=a.command("lint").start("Linting purpose files",{fix:!!e$1.fix});f.start("Finding .purpose files...");let r=await e(i);if(f.stop(),a.operation("find-files").debug("Purpose files found",{count:r.length}),e$1.autoPopulate){f.start("Scanning for undocumented source directories...");let l=C(i,r);if(f.stop(),l.length===0){!e$1.quiet&&!e$1.json&&console.log(c.green(`All source directories have .purpose coverage.
|
|
19
|
-
`)),e$1.json&&console.log(JSON.stringify({suggestions:[],populated:0}));return}if(e$1.json){let t=e$1.fix?l.length:0;if(e$1.fix)for(let o of l)m.writeFileSync(o.purposePath,o.content,"utf8");console.log(JSON.stringify({suggestions:l.map(o=>({dir:o.relativeDir,purposePath:o.relativePurposePath,components:o.components})),populated:t}));return}console.log(c.yellow(`Found ${l.length} source director${l.length>1?"ies":"y"} without .purpose files:
|
|
20
|
-
`));for(let t of l){console.log(` ${c.cyan(t.relativeDir)}/`);for(let o of t.components)console.log(c.gray(` #${o}`));e$1.fix&&(m.writeFileSync(t.purposePath,t.content,"utf8"),console.log(c.green(` \u2192 Created ${t.relativePurposePath}`))),console.log("");}e$1.fix?console.log(c.green(`Created ${l.length} .purpose file${l.length>1?"s":""}.
|
|
21
|
-
`)):console.log(c.gray(`Run ${c.cyan("paradigm lint --auto-populate --fix")} to create these .purpose files.
|
|
22
|
-
`));return}if(r.length===0){e$1.json?console.log(JSON.stringify({files:[],summary:{totalFiles:0}})):e$1.quiet||(console.log(c.yellow(`No .purpose files found.
|
|
23
|
-
`)),console.log(c.gray("Run `paradigm init` to create your first .purpose file.\n")));return}!e$1.quiet&&!e$1.json&&console.log(c.gray(`Checking ${r.length} .purpose file${r.length>1?"s":""}...
|
|
24
|
-
`));let a$1=[];for(let l of r){let t=k(l,i,e$1);if(a$1.push(t),!e$1.quiet&&!e$1.json&&(!t.valid||t.errors.length>0||t.warnings.length>0)){let o=t.errors.length>0?c.red("\u2717"):t.warnings.length>0?c.yellow("\u26A0"):c.green("\u2713"),d=t.fixed?c.cyan(" [fixed]"):"";console.log(`${o} ${t.relativePath}${d}`);for(let g of t.errors)for(let h of W(g))console.log(h);for(let g of t.warnings)for(let h of W(g))console.log(h);console.log("");}}let n={totalFiles:a$1.length,validFiles:a$1.filter(l=>l.valid).length,filesWithErrors:a$1.filter(l=>l.errors.length>0).length,filesWithWarnings:a$1.filter(l=>l.warnings.length>0).length,totalErrors:a$1.reduce((l,t)=>l+t.errors.length,0),totalWarnings:a$1.reduce((l,t)=>l+t.warnings.length,0),fixedFiles:a$1.filter(l=>l.fixed).length};if(e$1.json){let l={files:a$1.map(t=>({path:t.relativePath,valid:t.valid,errors:t.errors,warnings:t.warnings,fixed:t.fixed})),summary:n};console.log(JSON.stringify(l,null,2)),process.exit(n.filesWithErrors>0?1:0);return}e$1.quiet||(console.log(c.gray("\u2500".repeat(40))),n.totalErrors===0&&n.totalWarnings===0?(console.log(c.green(`
|
|
25
|
-
\u2713 All ${n.totalFiles} file${n.totalFiles>1?"s":""} valid
|
|
26
|
-
`)),u.success("All files valid",{files:n.totalFiles})):(u.error("Files have issues",{errors:n.totalErrors,warnings:n.totalWarnings,fixed:n.fixedFiles}),console.log(""),n.validFiles>0&&console.log(c.green(`\u2713 ${n.validFiles} file${n.validFiles>1?"s":""} valid`)),n.filesWithErrors>0&&console.log(c.red(`\u2717 ${n.filesWithErrors} file${n.filesWithErrors>1?"s":""} with errors (${n.totalErrors} total)`)),n.filesWithWarnings>0&&console.log(c.yellow(`\u26A0 ${n.filesWithWarnings} file${n.filesWithWarnings>1?"s":""} with warnings (${n.totalWarnings} total)`)),n.fixedFiles>0&&console.log(c.cyan(`\u21BB ${n.fixedFiles} file${n.fixedFiles>1?"s":""} auto-fixed`)),console.log(""),n.totalErrors>0&&!e$1.fix&&console.log(c.gray("Run `paradigm lint --fix` to auto-fix where possible.\n")))),n.filesWithErrors>0&&process.exit(1),e$1.strict&&n.filesWithWarnings>0&&process.exit(1);}export{T as lintCommand};
|
package/dist/list-NC3QGT75.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {l,j,i,k,n,g}from'./chunk-EKNLG73M.js';import'./chunk-5TAVYPOV.js';import t from'chalk';async function b(e){let l$1=process.cwd();if(!l(e)){let n=j(l$1);if(e.json){console.log(JSON.stringify({packs:n},null,2));return}if(n.length===0){console.log(t.yellow(`
|
|
3
|
-
No content packs discovered.`)),console.log(t.gray(` Scaffold one with: paradigm university init
|
|
4
|
-
`));return}console.log(t.blue(`
|
|
5
|
-
Content packs (${n.length})
|
|
6
|
-
`));for(let o of n){let a=o.tenantKind==="first-party"?t.cyan("first-party"):o.tenantKind==="project"?t.green("project"):t.yellow("external"),d=o.disciplines&&o.disciplines.length>0?t.gray(` [${o.disciplines.join(", ")}]`):"",g=i(o.packRoot),C=g.length>0?t.gray(` (${g.length} section${g.length===1?"":"s"})`):"";console.log(` ${t.white(o.id.padEnd(28))} ${a} ${o.entryCount} entries${C}${d}`),o.name&&o.name!==o.id&&console.log(t.gray(` ${o.name}`));}console.log(t.gray(`
|
|
7
|
-
Tip: paradigm university list --project (list entries in project pack)`)),console.log("");return}let s=k(l$1,e),c=s.subPackId??s.packId,y=s.subPackRoot??s.packRoot,i$1=n(y);if(!i$1||i$1.totalContent===0){console.log(t.yellow(`
|
|
8
|
-
No content found in pack "${c}".`)),console.log(t.gray(` Create content with: paradigm university add note --title "My Note"
|
|
9
|
-
`));return}let r=g(l$1,{type:e.type,tag:e.tag,difficulty:e.difficulty,symbol:e.symbol,section:e.section,limit:e.limit?parseInt(e.limit,10):20},y);if(e.json){console.log(JSON.stringify({pack:c,results:r},null,2));return}console.log(t.blue(`
|
|
10
|
-
University Content \u2014 pack: ${c} (${r.length} of ${i$1.totalContent})
|
|
11
|
-
`));let h={note:"N",policy:"P",guide:"N",runbook:"N",quiz:"Q",path:"LP"};for(let n of r){let o=h[n.type]||"?",a=n.difficulty==="advanced"?t.red:n.difficulty==="intermediate"?t.yellow:t.green,d=n.tags.length>0?t.gray(` [${n.tags.join(", ")}]`):"";console.log(` ${t.cyan(o)} ${t.white(`${c}:${n.id}`)} \u2014 ${n.title}${d}`),n.difficulty&&console.log(` ${a(n.difficulty)} \xB7 ${n.author} \xB7 ${n.updated||n.created}`);}i$1.diplomaCount>0&&console.log(t.gray(`
|
|
12
|
-
${i$1.diplomaCount} diploma${i$1.diplomaCount>1?"s":""} earned`)),console.log();}export{b as universityListCommand};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {b}from'./chunk-5TAVYPOV.js';import*as i from'fs';import*as a from'path';import*as u from'js-yaml';import {execSync}from'child_process';function F(s){let e=s.toLowerCase();return e.includes("claude")||e.includes("anthropic")?"anthropic":e.includes("gpt")||e.includes("openai")||e.includes("o1")||e.includes("o3")?"openai":e.includes("gemini")||e.includes("google")||e.includes("palm")?"google":e.includes("llama")||e.includes("meta")?"meta":e.includes("mistral")||e.includes("mixtral")?"mistral":e.includes("deepseek")?"deepseek":e.includes("cohere")||e.includes("command")?"cohere":"unknown"}function A(s){let e=s,n=e.author;if(e.type||(e.type="agent-session"),typeof n=="string")return s;if(n&&typeof n=="object"&&!Array.isArray(n)){let t=n;t.type==="agent"?(e.author="unknown",e.agent={provider:t.model?F(t.model):F(t.id),model:t.model||t.id}):e.author=t.id||"unknown",delete e.assistedBy;}return e}function E(s){return s.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").slice(0,20)||"unknown"}function W(){let s=process.env.PARADIGM_AUTHOR;if(s)return E(s);try{let e=execSync("git config user.name",{encoding:"utf-8",timeout:3e3}).trim();if(e)return E(e)}catch{}try{let e=os.userInfo().username;if(e)return E(e)}catch{}return "unknown"}function L(s){return s.endsWith(".yaml")||s.endsWith(".lore")}function k(s,e,n){let t=a.join(s,_,S,e),r=a.join(t,`${n}.lore`);if(i.existsSync(r))return r;let o=a.join(t,`${n}.yaml`);return i.existsSync(o)?o:null}async function I(s,e){let n=a.join(s,_,S);if(!i.existsSync(n))return [];C(s);let t=[],r=i.readdirSync(n).filter(o=>/^\d{4}-\d{2}-\d{2}$/.test(o)).sort().reverse();for(let o of r){if(e?.dateFrom&&o<e.dateFrom.slice(0,10)||e?.dateTo&&o>e.dateTo.slice(0,10))continue;let l=a.join(n,o),m=i.readdirSync(l).filter(L).sort();for(let c of m)try{let g=i.readFileSync(a.join(l,c),"utf8"),d=u.load(g);t.push(A(d));}catch{}}return e?U(t,e):t}async function P(s,e){let n=e.match(/^L-(\d{4}-\d{2}-\d{2})-/);if(n){let r=n[1],o=k(s,r,e);if(o)try{let l=i.readFileSync(o,"utf8"),m=u.load(l);return A(m)}catch{return null}}return (await I(s)).find(r=>r.id===e)||null}async function K(s){let e=a.join(s,_,$);if(!i.existsSync(e))return null;try{let n=i.readFileSync(e,"utf8");return u.load(n)}catch{return null}}function M(s){try{let e=execSync("git rev-parse HEAD",{cwd:s,encoding:"utf8",stdio:["pipe","pipe","pipe"]}).trim(),n=execSync("git rev-parse --abbrev-ref HEAD",{cwd:s,encoding:"utf8",stdio:["pipe","pipe","pipe"]}).trim(),t=execSync("git status --porcelain",{cwd:s,encoding:"utf8",stdio:["pipe","pipe","pipe"]}).trim();return {ref:e,branch:n,dirty:t.length>0}}catch{return}}async function G(s,e){let n=a.join(s,_),t=e.timestamp.slice(0,10),r=a.join(n,S,t);i.existsSync(r)||i.mkdirSync(r,{recursive:true}),e.author||(e.author=W()),e.git_context||(e.git_context=M(s)),e.id||(e.id=D(s,t,e.author,e.timestamp));let o=a.join(r,`${e.id}.lore`);return i.writeFileSync(o,u.dump(e,{lineWidth:-1,noRefs:true})),await j(s),e.id}async function V(s,e,n){let t=await P(s,e);if(!t)return false;let r=t.timestamp.slice(0,10),o=k(s,r,e);return o?(t.review=n,i.writeFileSync(o,u.dump(t,{lineWidth:-1,noRefs:true})),true):false}async function j(s){let e=a.join(s,_),n=a.join(e,S);if(!i.existsSync(n))return;C(s);let t=new Set,r=0,o="",l=i.readdirSync(n).filter(d=>/^\d{4}-\d{2}-\d{2}$/.test(d));for(let d of l){let y=a.join(n,d),h=i.readdirSync(y).filter(L);for(let w of h)try{let f=i.readFileSync(a.join(y,w),"utf8"),p=u.load(f),b=A(p);t.add(b.author),r++,(!o||b.timestamp>o)&&(o=b.timestamp);}catch{}}let m="unknown",c=a.join(s,".paradigm","config.yaml");if(i.existsSync(c))try{let d=u.load(i.readFileSync(c,"utf8"));m=d.project||d.name||"unknown";}catch{}let g={version:"1.0",project:m,entries:r,last_updated:o||new Date().toISOString(),authors:Array.from(t)};i.existsSync(e)||i.mkdirSync(e,{recursive:true}),i.writeFileSync(a.join(e,$),u.dump(g,{lineWidth:-1,noRefs:true}));}function C(s){let e=a.join(s,_,S);if(!i.existsSync(e))return 0;let n=i.readdirSync(e).filter(r=>L(r)&&!r.startsWith(".")),t=0;for(let r of n){let o=a.join(e,r);if(i.statSync(o).isFile())try{let m=i.readFileSync(o,"utf8"),c=u.load(m);if(c.author&&typeof c.author=="object"||typeof c.author=="string"&&c.timestamp)continue;let g=typeof c.date=="string"?c.date.slice(0,10):new Date().toISOString().slice(0,10),d=a.join(e,g);i.existsSync(d)||i.mkdirSync(d,{recursive:!0});let y=W(),h=`${g}T00:00:00.000Z`,w=D(s,g,y,h),f=String(c.type||"agent-session"),p=f==="decision",b=p?"insight":["agent-session","human-note","review","incident","milestone","insight"].includes(f)?f:"agent-session",T;if(c.test_results&&typeof c.test_results=="object"){let v=c.test_results;T={status:v.total===v.passed?"pass":"partial",details:{tests:v.total===v.passed?"pass":"fail"}};}let R=["migrated",f];p&&R.push("v6-migrated:from-decision");let O={id:w,type:b,timestamp:h,author:"unknown",agent:{provider:"unknown",model:"unknown"},title:String(c.title||r.replace(/\.(yaml|lore)$/,"")),summary:String(c.summary||""),symbols_touched:Array.isArray(c.symbols_touched)?c.symbols_touched:[],files_modified:Array.isArray(c.files_modified)?c.files_modified:void 0,...T?{verification:T}:{},tags:R};i.writeFileSync(a.join(d,`${w}.lore`),u.dump(O,{lineWidth:-1,noRefs:!0})),i.unlinkSync(o),t++;}catch{}}return t}async function q(s,e,n){let t=await P(s,e);if(!t)return false;let r=t.timestamp.slice(0,10),o=k(s,r,e);return o?(n.title!==void 0&&(t.title=n.title),n.summary!==void 0&&(t.summary=n.summary),n.type!==void 0&&(t.type=n.type),n.duration_minutes!==void 0&&(t.duration_minutes=n.duration_minutes),n.symbols_touched!==void 0&&(t.symbols_touched=n.symbols_touched),n.symbols_created!==void 0&&(t.symbols_created=n.symbols_created),n.files_created!==void 0&&(t.files_created=n.files_created),n.files_modified!==void 0&&(t.files_modified=n.files_modified),n.lines_added!==void 0&&(t.lines_added=n.lines_added),n.lines_removed!==void 0&&(t.lines_removed=n.lines_removed),n.commit!==void 0&&(t.commit=n.commit),n.decisions!==void 0&&(t.decisions=n.decisions),n.errors_encountered!==void 0&&(t.errors_encountered=n.errors_encountered),n.learnings!==void 0&&(t.learnings=n.learnings),n.verification!==void 0&&(t.verification=n.verification),n.tags!==void 0&&(t.tags=n.tags),n.body!==void 0&&(t.body=n.body),n.linked_lore!==void 0&&(t.linked_lore=n.linked_lore),n.linked_tasks!==void 0&&(t.linked_tasks=n.linked_tasks),n.linked_commits!==void 0&&(t.linked_commits=n.linked_commits),n.confidence!==void 0&&(t.confidence=n.confidence),n.assessment!==void 0&&(t.assessment=n.assessment),n.assessment_delta!==void 0&&(t.assessment_delta=n.assessment_delta),i.writeFileSync(o,u.dump(t,{lineWidth:-1,noRefs:true})),await j(s),true):false}function N(s){switch(s){case "correct":return 1;case "partial":return .5;case "incorrect":return 0}}async function Z(s,e,n){let t=await P(s,e);if(!t)return false;let r=t.timestamp.slice(0,10),o=k(s,r,e);return o?(t.assessment=n,t.confidence!=null&&(t.assessment_delta=N(n.verdict)-t.confidence),i.writeFileSync(o,u.dump(t,{lineWidth:-1,noRefs:true})),true):false}async function J(s,e){let n=await P(s,e);if(!n)return false;let t=n.timestamp.slice(0,10),r=k(s,t,e);if(!r)return false;i.unlinkSync(r);let o=a.dirname(r);return i.readdirSync(o).filter(L).length===0&&i.rmdirSync(o),await j(s),true}function U(s,e){let n=s;if(e.author&&(n=n.filter(t=>t.author===e.author)),e.hasAgent!==void 0?n=n.filter(t=>e.hasAgent?t.agent!=null:t.agent==null):e.authorType&&(n=n.filter(t=>e.authorType==="agent"?t.agent!=null:t.agent==null)),e.symbol&&(n=n.filter(t=>t.symbols_touched.includes(e.symbol)||t.symbols_created?.includes(e.symbol))),e.dateFrom){let t=new Date(e.dateFrom).getTime();n=n.filter(r=>new Date(r.timestamp).getTime()>=t);}if(e.dateTo){let t=new Date(e.dateTo).getTime();n=n.filter(r=>new Date(r.timestamp).getTime()<=t);}if(e.type&&(n=n.filter(t=>t.type===e.type)),e.tag){let t=e.tag;n=n.filter(r=>r.tags?.some(o=>o===t||o.startsWith(t+":")||t.includes(":")&&o===t));}return e.tags&&e.tags.length>0&&(n=n.filter(t=>e.tags.some(r=>t.tags?.includes(r)))),e.hasBody!==void 0&&(n=n.filter(t=>e.hasBody?t.body!=null&&t.body.length>0:!t.body||t.body.length===0)),e.hasReview!==void 0&&(n=n.filter(t=>e.hasReview?t.review!=null:t.review==null)),e.hasConfidence!==void 0&&(n=n.filter(t=>e.hasConfidence?t.confidence!=null:t.confidence==null)),e.hasAssessment!==void 0&&(n=n.filter(t=>e.hasAssessment?t.assessment!=null:t.assessment==null)),n.sort((t,r)=>new Date(r.timestamp).getTime()-new Date(t.timestamp).getTime()),e.offset&&(n=n.slice(e.offset)),e.limit&&(n=n.slice(0,e.limit)),n}function D(s,e,n,t){let r=E(n),o=new Date(t),l=String(o.getUTCHours()).padStart(2,"0"),m=String(o.getUTCMinutes()).padStart(2,"0"),c=String(o.getUTCSeconds()).padStart(2,"0"),g=`${l}${m}${c}`,d=`L-${e}-${r}-${g}`,y=a.join(s,_,S,e);if(!i.existsSync(y))return `${d}-001`;let h=i.readdirSync(y).filter(f=>f.startsWith(d)&&L(f)).map(f=>{let p=f.match(/-(\d{3})\.(yaml|lore)$/);return p?parseInt(p[1],10):0}),w=h.length>0?Math.max(...h)+1:1;return `${d}-${String(w).padStart(3,"0")}`}var _,S,$,z=b(()=>{_=".paradigm/lore",S="entries",$="timeline.yaml";});z();export{Z as addLoreAssessment,V as addLoreReview,J as deleteLoreEntry,I as loadLoreEntries,P as loadLoreEntry,K as loadLoreTimeline,j as rebuildTimeline,G as recordLoreEntry,q as updateLoreEntry};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {i}from'./chunk-QEQCPVF5.js';export{e as addNotebookEntry,d as classifyNotebookScope,g as incrementApplied,b as loadNotebookEntries,a as normalizeConcept,f as promoteFromLore,c as searchNotebooks}from'./chunk-QEQCPVF5.js';import'./chunk-5TAVYPOV.js';i();
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
export{c as classifyTaskLocal,f as emitTaskDag,a as getOrchestrationToolsList,b as handleOrchestrationTool,e as loadAgentsManifest,g as planBuilderStages,d as suggestAgentsForTask}from'./chunk-S4J337EQ.js';import'./chunk-K54L6CFR.js';import'./chunk-QBIQ2FYB.js';import'./chunk-Q527BPUF.js';import'./chunk-RGSFU2YW.js';import'./chunk-TMDPDIWA.js';import'./chunk-KLBH26PA.js';import'./chunk-GRZQIKST.js';import'./chunk-KAFQA7HV.js';import'./chunk-ACJWUOMA.js';import'./chunk-33ERV2MW.js';import'./chunk-EK4ZRIFJ.js';import'./chunk-5TAVYPOV.js';
|
package/dist/quiz-TNV6APBM.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {k,l,c,f}from'./chunk-EKNLG73M.js';import'./chunk-5TAVYPOV.js';import o from'chalk';import*as D from'readline';import {execSync}from'child_process';import*as O from'os';function Q(){try{return execSync("git config user.name",{encoding:"utf-8",timeout:3e3}).trim().toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").slice(0,20)||"unknown"}catch{try{return O.userInfo().username}catch{return "unknown"}}}function C(e,n){return new Promise(r=>e.question(n,r))}function b(e){let n=e.indexOf(":");return n===-1?{entryId:e}:{packId:e.slice(0,n),entryId:e.slice(n+1)}}async function L(e,n={}){let r=process.cwd(),{packId:d,entryId:x}=b(e),a={...n};d&&(a.pack=d);let m=k(r,a),z=l(a)?m.subPackRoot??m.packRoot:void 0,t=c(r,x,z);if(t||(console.error(o.red(`
|
|
3
|
-
Quiz "${e}" not found
|
|
4
|
-
`)),process.exit(1)),t.questions.length===0){console.log(o.yellow(`
|
|
5
|
-
Quiz "${e}" has no questions.
|
|
6
|
-
`));return}let f$1=D.createInterface({input:process.stdin,output:process.stdout});console.log(o.blue(`
|
|
7
|
-
${t.title}`)),t.description&&console.log(o.gray(` ${t.description}`)),console.log(o.gray(` ${t.questions.length} questions \xB7 Pass: ${t.passThreshold*100}%
|
|
8
|
-
`));let i=0;for(let l=0;l<t.questions.length;l++){let s=t.questions[l];console.log(o.white(` ${l+1}. ${s.question}`));let g=Object.keys(s.choices).sort();for(let I of g)console.log(` ${o.cyan(I)}: ${s.choices[I]}`);let c="";for(;!g.includes(c.toUpperCase());)c=await C(f$1,o.gray(` Your answer (${g.join("/")}): `)),c=c.trim().toUpperCase();c===s.correct?(i++,console.log(o.green(" Correct!"))):console.log(o.red(` Wrong \u2014 correct answer: ${s.correct}`)),s.explanation&&console.log(o.gray(` \u2192 ${s.explanation}`)),console.log();}f$1.close();let p=t.questions.length,u=Math.round(i/p*1e4)/100,y=u/100>=t.passThreshold,h=Q();console.log(o.blue(" \u2500\u2500\u2500 Results \u2500\u2500\u2500")),console.log(` Score: ${i}/${p} (${u}%)`),console.log(` Pass threshold: ${t.passThreshold*100}%`),console.log(y?o.green(" PASSED"):o.red(" FAILED"));let $=`D-${new Date().toISOString().slice(0,10)}-${h}-${e.replace(/^Q-/,"")}`,P={id:$,type:"quiz",student:h,earnedAt:new Date().toISOString(),source:e,score:i,total:p,percentage:u,passed:y};f(r,P),console.log(o.gray(`
|
|
9
|
-
Diploma saved: ${$}
|
|
10
|
-
`));}export{L as universityQuizCommand};
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {f as f$1,d}from'./chunk-JIXHEBGK.js';import'./chunk-5TAVYPOV.js';import*as g from'path';import o from'chalk';import f from'ora';async function h(i){let a=process.cwd(),p=g.resolve(a,i);console.log(o.blue(`
|
|
3
|
-
\u{1F4D6} Remembering Purpose...
|
|
4
|
-
`));let s=f("Aggregating purpose files...").start();try{let r=await f$1(p),e=d(r);if(s.succeed(`Found ${r.length} purpose file(s)`),console.log(o.white(`
|
|
5
|
-
`+"\u2550".repeat(50))),e.description&&(console.log(o.white(`
|
|
6
|
-
Description`)),console.log(o.gray("\u2500".repeat(50))),console.log(o.cyan(e.description))),e.context.length>0){console.log(o.white(`
|
|
7
|
-
Context`)),console.log(o.gray("\u2500".repeat(50)));for(let n of e.context)console.log(o.gray(" \u2022 ")+n);}if(Object.keys(e.rules).length>0){console.log(o.white(`
|
|
8
|
-
Rules`)),console.log(o.gray("\u2500".repeat(50)));for(let[n,t]of Object.entries(e.rules))console.log(o.gray(" ")+o.yellow(n)+o.gray(": ")+String(t));}if(Object.keys(e.features).length>0){console.log(o.white(`
|
|
9
|
-
Features`)),console.log(o.gray("\u2500".repeat(50)));for(let[n,t]of Object.entries(e.features))console.log(o.blue(" @"+n)),t.description&&console.log(o.gray(" "+t.description));}if(Object.keys(e.components).length>0){console.log(o.white(`
|
|
10
|
-
Components`)),console.log(o.gray("\u2500".repeat(50)));for(let[n,t]of Object.entries(e.components))console.log(o.green(" #"+n)),t.description&&console.log(o.gray(" "+t.description));}if(e.ruleConflicts.length>0){console.log(o.yellow(`
|
|
11
|
-
Warnings`)),console.log(o.gray("\u2500".repeat(50)));for(let n of e.ruleConflicts)console.log(o.yellow(" \u26A0 "+n));}console.log(o.white(`
|
|
12
|
-
`+"\u2550".repeat(50)+`
|
|
13
|
-
`));}catch(r){s.fail("Failed to aggregate"),console.log(o.red(`Error: ${r.message}
|
|
14
|
-
`));}}export{h as purposeRememberCommand};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
export{a as appendSessionWorkEntry,d as appendVerdictEntry,n as clearActivityMetrics,c as clearSessionWorkLog,q as countNotebookReferences,j as getAgentEntries,k as getAgentVerdicts,i as getContributingAgents,p as getNotebookReferences,m as getSessionActivitySummary,h as markIterationRevisionsConsumed,f as markVerdictsConsumed,g as readPendingIterationRevisions,e as readPendingVerdicts,b as readSessionWorkLog,l as recordActivityMetric,o as recordNotebookReference}from'./chunk-V6MIKLMY.js';import'./chunk-5TAVYPOV.js';
|
package/dist/status-ENAI35NL.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {k,l,n,a,e}from'./chunk-EKNLG73M.js';import'./chunk-5TAVYPOV.js';import t from'chalk';async function C(d){let g=process.cwd(),n$1=k(g,d),f=l(d)?n$1.subPackRoot??n$1.packRoot:void 0,c=f?n(f):a(g);if(!c||c.totalContent===0){console.log(t.yellow(`
|
|
3
|
-
No university content found.`)),console.log(t.gray(` Create content with: paradigm university add note --title "My Note"
|
|
4
|
-
`));return}let s=e(g),a$1={},l$1={},i={};for(let o of c.entries){a$1[o.type]=(a$1[o.type]||0)+1,o.difficulty&&(i[o.difficulty]=(i[o.difficulty]||0)+1);for(let e of o.tags)l$1[e]=(l$1[e]||0)+1;}if(d.json){console.log(JSON.stringify({pack:n$1.subPackId??n$1.packId,totalContent:c.totalContent,typeCounts:a$1,difficultyCounts:i,tagCounts:l$1,diplomaCount:s.length},null,2));return}console.log(t.blue(`
|
|
5
|
-
University Status \u2014 pack: ${n$1.subPackId??n$1.packId}
|
|
6
|
-
`)),console.log(t.white(` Total content: ${c.totalContent}`));for(let[o,e]of Object.entries(a$1).sort())console.log(` ${t.cyan(o)}: ${e}`);if(Object.keys(i).length>0){console.log(),console.log(t.white(" By difficulty:"));for(let[o,e]of Object.entries(i)){let r=o==="advanced"?t.red:o==="intermediate"?t.yellow:t.green;console.log(` ${r(o)}: ${e}`);}}if(Object.keys(l$1).length>0){console.log(),console.log(t.white(" Top tags:"));let o=Object.entries(l$1).sort((e,r)=>r[1]-e[1]).slice(0,8);for(let[e,r]of o)console.log(` ${t.gray(e)}: ${r}`);}if(console.log(),console.log(t.white(` Diplomas earned: ${s.length}`)),s.length>0){for(let o of s.slice(0,5)){let e=o.passed?t.green("PASS"):t.red("FAIL");console.log(` ${e} ${o.source} \u2014 ${o.student} (${o.percentage}%) ${t.gray(o.earnedAt.slice(0,10))}`);}s.length>5&&console.log(t.gray(` ... and ${s.length-5} more`));}console.log();}export{C as universityStatusCommand};
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {d,k,j,h,c,e as e$1,f,s,m,g,q as q$1,v,w,i,r,o,p as p$1,u,t,z,x,C,y,A,B}from'./chunk-CVPKQ3JH.js';import'./chunk-7SWEOPWF.js';import'./chunk-MBPLJKE5.js';import'./chunk-5TAVYPOV.js';import e from'chalk';import*as b from'path';import*as p from'fs';import*as q from'os';async function te(s){let o=process.cwd();if(s.remote){await Y(o,s.remote);return}let r=d(o);console.log(e.green(`\u2713 Joined as ${e.bold(r.id)}`));let i=k().filter(l=>l.id!==r.id);if(i.length>0){console.log(e.cyan(`
|
|
3
|
-
Found ${i.length} other session${i.length!==1?"s":""}:`));for(let l of i){let t=j(l)?e.yellow("asleep"):e.green("awake");console.log(` ${e.white(l.id)} \u2014 ${l.name} [${t}]`);}}else console.log(e.gray(`
|
|
4
|
-
No other sessions found. Open another terminal and run "paradigm symphony join".`));console.log(e.gray(`
|
|
5
|
-
Tip: Set up polling with: /loop 10s paradigm_symphony_poll`));}async function Y(s,o){let{SymphonyRelay:r}=await import('./symphony-relay-2RHG25Z4.js'),n,i;if(o.includes("#")){let c=o.split("#");n=c[0],i=c[1];}else n=o;n.includes(":")||(n=`${n}:3939`);let l=h(s);l||(l=d(s));let t;if(i)t=i,console.log(e.cyan(`
|
|
6
|
-
Connecting to ${n} with embedded pairing code...`));else if(console.log(e.cyan(`
|
|
7
|
-
Connecting to ${n}...`)),console.log(e.white(" Enter the 6-digit pairing code shown on the host:")),t=await K(" Code: "),t=t.trim(),!/^\d{6}$/.test(t)){console.log(e.red(" Invalid code. Must be 6 digits."));return}let a=new r({mode:"client",peerId:l.id,events:{onPeerConnected:(c,g)=>{console.log(e.green(` \u2713 Connected to ${e.bold(g)} (${c})`));},onPeerDisconnected:c=>{console.log(e.yellow(` Peer ${c} disconnected. Reconnecting...`));},onMessageRelayed:(c,g,y)=>{console.log(e.gray(` \u2190 Message ${c.slice(0,8)} from ${g} \u2192 ${y}`));},onError:c=>{console.log(e.red(` Error: ${c.message}`));}}});try{await a.connectToServer(n,t),console.log(e.green(`
|
|
8
|
-
\u2713 Paired and connected!`)),console.log(e.gray(" Messages from remote agents will appear in your inbox.")),console.log(e.gray(` Press Ctrl+C to disconnect.
|
|
9
|
-
`)),process.on("SIGINT",()=>{console.log(e.yellow(`
|
|
10
|
-
Disconnecting...`)),a.stop(),process.exit(0);}),await new Promise(()=>{});}catch(c){console.log(e.red(` Failed to connect: ${c.message}`)),a.stop();}}function K(s){return new Promise(o=>{process.stdout.write(s);let r="";process.stdin.setEncoding("utf-8"),process.stdin.resume(),process.stdin.once("data",n=>{r=n.toString(),process.stdin.pause(),o(r);});})}async function se(){let s=process.cwd(),o=c(s),r=e$1(o);console.log(r?e.green(`\u2713 Left the score: ${o}`):e.yellow("No active part found for this project."));}async function re(){let s$1=process.cwd(),o=h(s$1);if(!o){console.log(e.yellow('Not joined. Run "paradigm symphony join" first.'));return}let n=f().filter(t=>t.id!==o.id),i=s("active"),l=m(o.id);console.log(e.cyan(`
|
|
11
|
-
${e.bold(o.id)}`)),console.log(e.gray(` Project: ${o.project}`)),console.log(e.gray(` Role: ${o.role}`)),console.log(e.gray(` PID: ${o.pid}`)),console.log(e.gray(` Started: ${o.startedAt}`)),o.statusBlurb&&console.log(e.white(` Status: ${o.statusBlurb}`)),console.log(`
|
|
12
|
-
${e.white(`${n.length} linked peer${n.length!==1?"s":""}`)} \u2014 ${e.white(`${i.length} active thread${i.length!==1?"s":""}`)} \u2014 ${e.white(`${l.length} unread`)}`);}async function ie(s){g();let o=f(),{loadPeers:r}=await import('./symphony-peers-X5NGWXFP.js'),n=r(),i=[];for(let t of n)if(!t.revoked)for(let a of t.agents||[])i.push({...a,peerId:t.id});let l=o.length+i.length;if(s.json){console.log(JSON.stringify({local:o,remote:i},null,2));return}if(l===0){console.log(e.yellow('No agents joined. Run "paradigm symphony join" in each terminal.'));return}console.log(e.cyan(`
|
|
13
|
-
Symphony Agents (${l})
|
|
14
|
-
`)),console.log(e.gray(` ${"AGENT ID".padEnd(30)} ${"PROJECT".padEnd(15)} ${"ROLE".padEnd(10)} STATUS`)),console.log(e.gray(` ${"\u2500".repeat(30)} ${"\u2500".repeat(15)} ${"\u2500".repeat(10)} ${"\u2500".repeat(8)}`));for(let t of o){let a=j(t)?e.yellow("asleep"):e.green("awake");console.log(` ${e.white(t.id.padEnd(30))} ${t.project.padEnd(15)} ${t.role.padEnd(10)} ${a}`),t.statusBlurb&&console.log(` ${e.gray(` \u2514 ${t.statusBlurb}`)}`);}if(i.length>0){console.log(e.gray(`
|
|
15
|
-
${"\u2500".repeat(65)}`)),console.log(e.cyan(` Remote Agents (${i.length})
|
|
16
|
-
`));for(let t of i){let a=t.status==="awake"?e.green("awake"):e.yellow("asleep"),c=e.magenta(`(remote: ${t.peerId})`);console.log(` ${e.white(t.id.padEnd(30))} ${t.project.padEnd(15)} ${t.role.padEnd(10)} ${a} ${c}`);}}console.log();}async function le(s,o){let r=process.cwd(),n=h(r);n||(n=d(r),console.log(e.gray(`Auto-joined as ${n.id}`)));let i={id:n.id,name:n.name,type:"human",project:n.project,role:n.role},l;o.to&&(l=[{id:o.to,name:o.to,type:"agent"}]);let t=o.thread;if(!t){let g=s.length>60?s.slice(0,60)+"...":s;t=q$1(g,i).id;}let a=v({sender:i,recipients:l,intent:"context",text:s,threadRoot:t}),c=w(a);console.log(e.green(`\u2713 Sent to ${c} agent${c!==1?"s":""}`)),console.log(e.gray(` Thread: ${t}`)),console.log(e.gray(` Note: ${a.id}`));}async function ce(){let s=process.cwd(),o$1=h(s);if(!o$1){console.log(e.yellow('Not joined. Run "paradigm symphony join" first.'));return}i(o$1.id);let r$1=m(o$1.id);if(r$1.length===0){console.log(e.gray(`
|
|
17
|
-
No unread notes.
|
|
18
|
-
`));return}let n=new Map;for(let l of r$1){let t=l.threadRoot||"direct";n.has(t)||n.set(t,[]),n.get(t).push(l);}console.log(e.cyan(`
|
|
19
|
-
${r$1.length} unread note${r$1.length!==1?"s":""}
|
|
20
|
-
`));for(let[l,t]of n){let a=l;if(l!=="direct"){let c=r(l);c&&(a=`${c.topic} (${l})`);}console.log(e.white(` \u250C\u2500 ${a}`));for(let c=0;c<t.length;c++){let g=t[c],y=c===t.length-1,d=y?" \u2514\u2500":" \u251C\u2500",h=new Date(g.timestamp).toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit"});console.log(`${d} ${e.cyan(g.sender.name)} ${e.gray(`[${g.intent}]`)} ${e.gray(h)}`);let u=g.content.text.split(`
|
|
21
|
-
`),m=y?" ":" \u2502 ";for(let $ of u)console.log(`${m}${$}`);g.symbols.length>0&&console.log(`${m}${e.gray(`Symbols: ${g.symbols.join(", ")}`)}`);}console.log();}let i$1=r$1[r$1.length-1].id;o(o$1.id,i$1),p$1(o$1.id);}async function ae(s$1){let o=s();if(s$1.json){console.log(JSON.stringify(o,null,2));return}if(o.length===0){console.log(e.gray(`
|
|
22
|
-
No threads.
|
|
23
|
-
`));return}console.log(e.cyan(`
|
|
24
|
-
Threads (${o.length})
|
|
25
|
-
`)),console.log(e.gray(` ${"ID".padEnd(14)} ${"TOPIC".padEnd(35)} ${"MSGS".padEnd(6)} ${"STATUS".padEnd(10)} LAST ACTIVITY`)),console.log(e.gray(` ${"\u2500".repeat(14)} ${"\u2500".repeat(35)} ${"\u2500".repeat(6)} ${"\u2500".repeat(10)} ${"\u2500".repeat(20)}`));for(let r of o){let n=r.topic.length>33?r.topic.slice(0,33)+"..":r.topic,i=r.status==="active"?e.green("active"):e.gray("resolved"),l=new Date(r.lastActivity).toLocaleString(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"});console.log(` ${e.white(r.id.padEnd(14))} ${n.padEnd(35)} ${String(r.messageCount).padEnd(6)} ${i.padEnd(10)} ${e.gray(l)}`);}console.log();}async function ge(s){let o=r(s);if(!o){console.log(e.red(`Thread not found: ${s}`));return}let r$1=u(s);console.log(e.cyan(`
|
|
26
|
-
Thread: ${o.topic}`)),console.log(e.gray(` ID: ${o.id} | Status: ${o.status} | Notes: ${o.messageCount}`)),console.log(e.gray(` Participants: ${o.participants.map(n=>n.name).join(", ")}`)),o.decision&&console.log(e.green(` Decision: ${o.decision}`)),console.log(e.gray(`
|
|
27
|
-
${"\u2500".repeat(60)}
|
|
28
|
-
`));for(let n of r$1){let i=new Date(n.timestamp).toLocaleString(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"});console.log(` ${e.cyan(n.sender.name)} ${e.gray(`[${n.intent}]`)} ${e.gray(i)}`);let l=n.content.text.split(`
|
|
29
|
-
`);for(let t of l)console.log(` ${t}`);n.symbols.length>0&&console.log(` ${e.gray(`Symbols: ${n.symbols.join(", ")}`)}`),n.content.decision&&console.log(` ${e.green(`Decision: ${n.content.decision}`)}`),console.log();}}async function de(s,o){let r$1=r(s);if(!r$1){console.log(e.red(`Thread not found: ${s}`));return}t(s,o.decision)?(console.log(e.green(`\u2713 Thread resolved: ${r$1.topic}`)),o.decision&&console.log(e.gray(` Decision: ${o.decision}`)),console.log(e.gray(` Tip: Record this as lore with "paradigm lore record --title 'Thread: ${r$1.topic}'"`))):console.log(e.red("Failed to resolve thread."));}async function ye(s$1){g();let o=process.cwd(),r=h(o),n=f(),i=s("active"),l=z("pending"),t=r?m(r.id):[],{loadPeers:a}=await import('./symphony-peers-X5NGWXFP.js'),g$1=a().filter(d=>!d.revoked);if(s$1.json){console.log(JSON.stringify({identity:r?{id:r.id,project:r.project,role:r.role}:null,agents:n.map(d=>({id:d.id,status:j(d)?"asleep":"awake",statusBlurb:d.statusBlurb})),peers:g$1.map(d=>({id:d.id,address:d.address,agents:d.agents?.length??0,lastSeen:d.lastSeen})),activeThreads:i.length,unreadMessages:t.length,pendingFileRequests:l.length},null,2));return}console.log(e.cyan(`
|
|
30
|
-
Symphony Status
|
|
31
|
-
`)),console.log(r?` ${e.white("Identity:")} ${r.id}`:` ${e.yellow("Not joined.")} Run "paradigm symphony join" to join.`);let y=n.filter(d=>!j(d)).length;console.log(` ${e.white("Agents:")} ${n.length} joined (${y} awake)`);for(let d of n){let h=j(d)?e.yellow("asleep"):e.green("awake"),u=d.statusBlurb?e.gray(` \u2014 ${d.statusBlurb}`):"";console.log(` ${e.white(d.id)} [${h}]${u}`);}if(g$1.length>0){let d=g$1.reduce((h,u)=>h+(u.agents?.length??0),0);console.log(` ${e.white("Peers:")} ${g$1.length} connected (${d} remote agents)`);for(let h of g$1){let u=h.agents?.length??0;console.log(` ${e.white(h.id)} at ${h.address} (${u} agent${u!==1?"s":""})`);}}else console.log(` ${e.white("Peers:")} ${e.gray('none (run "paradigm symphony serve" to accept connections)')}`);console.log(` ${e.white("Threads:")} ${i.length} active`),console.log(` ${e.white("Unread:")} ${t.length} note${t.length!==1?"s":""}`),console.log(` ${e.white("File Requests:")} ${l.length} pending`),console.log();}async function pe(s){let o=parseInt(s.port||"3939",10),r=process.cwd(),{SymphonyRelay:n}=await import('./symphony-relay-2RHG25Z4.js'),i=h(r);i||(i=d(r)),console.log(e.cyan(`
|
|
32
|
-
Starting Symphony relay server...
|
|
33
|
-
`));let l=new n({mode:"server",peerId:i.id,port:o,events:{onPeerConnected:(t,a)=>{console.log(e.green(` \u2713 Peer connected: ${e.bold(a)} (${t})`));let c=l.getRemoteAgents();c.length>0&&console.log(e.gray(` Remote agents: ${c.map(g=>g.id).join(", ")}`));},onPeerDisconnected:t=>{console.log(e.yellow(` Peer disconnected: ${t}`));},onPeerAuthFailed:(t,a)=>{console.log(e.red(` Auth failed from ${t}: ${a}`));},onMessageRelayed:(t,a,c)=>{console.log(e.gray(` \u2194 Relayed ${t.slice(0,8)} from ${a} to ${c}`));},onError:t=>{console.log(e.red(` Error: ${t.message}`));}}});try{let t=await l.startServer(),a=Q();if(console.log(e.green(` \u2713 Symphony relay listening on port ${o}`)),console.log(),console.log(e.white(" Pairing Code:")),console.log(),console.log(e.bold.cyan(` ${t.code.slice(0,3)} ${t.code.slice(3)}`)),console.log(),console.log(e.gray(" Share this code with the person connecting.")),console.log(e.gray(` Code rotates every 5 minutes.
|
|
34
|
-
`)),console.log(e.white(" LAN connect:")),console.log(e.gray(` paradigm symphony join --remote ${a}:${o}`)),s.public){let g=`${a}:${o}#${t.code}`;console.log(),console.log(e.white(" Internet connect (connection string):")),console.log(e.cyan(` paradigm symphony join --remote ${g}`)),console.log(e.gray(" (Requires port 3939 reachable: port forward, VPN, or SSH tunnel)"));}console.log(e.gray(`
|
|
35
|
-
Press Ctrl+C to stop.
|
|
36
|
-
`));let c=setInterval(()=>{let g=l.rotatePairingCode();console.log(e.cyan(` Code rotated: ${g.code.slice(0,3)} ${g.code.slice(3)}`));},300*1e3);process.on("SIGINT",()=>{console.log(e.yellow(`
|
|
37
|
-
Shutting down relay...`)),clearInterval(c),l.stop(),process.exit(0);}),await new Promise(()=>{});}catch(t){console.log(e.red(` Failed to start server: ${t.message}`)),l.stop();}}function Q(){let s=q.networkInterfaces();for(let o of Object.keys(s))for(let r of s[o]||[])if(r.family==="IPv4"&&!r.internal)return r.address;return "127.0.0.1"}async function he(s,o){let r=process.cwd(),n=h(r);n||(n=d(r));let i=o.from,l=o.reason||"Needed for current task";if(!i){console.log(e.red("--from is required. Specify which agent to request from."));let g=f().filter(y=>y.id!==n.id);if(g.length>0){console.log(e.gray(`
|
|
38
|
-
Available agents:`));for(let y of g)console.log(e.gray(` ${y.id}`));}return}let t=x();if(C(s,t)){console.log(e.red(`\u2717 "${s}" is on the hard-deny list and cannot be requested.`));return}let a=y({filePath:s,requester:{id:n.id,name:n.name,type:"agent",project:n.project,role:n.role},reason:l}),c=v({sender:{id:n.id,name:n.name,type:"agent",project:n.project,role:n.role},recipients:[{id:i,name:i,type:"agent"}],intent:"fileRequest",text:`File request: ${s}
|
|
39
|
-
Reason: ${l}`,symbols:[]});w(c),console.log(e.green(`\u2713 File request created: ${a.request.requestId}`)),console.log(e.gray(` File: ${s}`)),console.log(e.gray(` From: ${i}`)),console.log(e.gray(` Reason: ${l}`)),console.log(e.gray(`
|
|
40
|
-
The owning agent's human must approve with:`)),console.log(e.white(` paradigm symphony approve ${a.request.requestId}`));}async function ue(){let s=z("pending");if(s.length===0){console.log(e.gray(`
|
|
41
|
-
No pending file requests.
|
|
42
|
-
`));return}console.log(e.cyan(`
|
|
43
|
-
Pending File Requests (${s.length})
|
|
44
|
-
`));for(let o of s){let r=Date.now()-new Date(o.createdAt).getTime(),n=Math.round(r/6e4);console.log(` ${e.white(o.request.requestId)}`),console.log(` File: ${o.request.filePath}`),console.log(` From: ${o.request.requester.name} (${o.request.requester.id})`),console.log(` Reason: ${o.request.reason}`),console.log(e.gray(` ${n}m ago`)),console.log(e.gray(` \u2192 paradigm symphony approve ${o.request.requestId}`)),console.log(e.gray(` \u2192 paradigm symphony deny ${o.request.requestId}`)),console.log();}}async function me(s,o){let r=process.cwd(),n=A(s,r,o.redact);if(!n.success){console.log(e.red(`\u2717 ${n.error}`));return}let i=o.redact?"approved (redacted)":"approved";console.log(e.green(`\u2713 File request ${i}`)),console.log(e.gray(` File: ${n.delivery?.filePath}`)),console.log(e.gray(` Size: ${n.delivery?.size} bytes`)),console.log(e.gray(` SHA-256: ${n.delivery?.hash?.slice(0,16)}...`));}async function fe(s,o){B(s,o.reason)?(console.log(e.green(`\u2713 File request denied: ${s}`)),o.reason&&console.log(e.gray(` Reason: ${o.reason}`))):console.log(e.red(`\u2717 File request not found or already resolved: ${s}`));}var X={question:e.blue,context:e.gray,clarification:e.blue,proposal:e.cyan,verification:e.blue,action:e.cyan,decision:e.yellow,alert:e.red,approval:e.green,rejection:e.red,reference:e.gray,handoff:e.magenta,fileRequest:e.green,fileApproved:e.green,fileDenied:e.red,fileDelivery:e.green};function Z(s){let o=new Date(s.timestamp).toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit",second:"2-digit"}),n=(X[s.intent]||e.white)(`[${s.intent}]`),i=e.cyan(s.sender.name),l=s.threadRoot?e.gray(` (${s.threadRoot})`):"",t=[];t.push(` ${e.gray(o)} ${i} ${n}${l}`);let a=s.content.text.split(`
|
|
45
|
-
`);for(let c of a)t.push(` ${c}`);return s.symbols.length>0&&t.push(` ${e.gray(`Symbols: ${s.symbols.join(", ")}`)}`),s.content.decision&&t.push(` ${e.yellow(`Decision: ${s.content.decision}`)}`),s.content.diff&&t.push(` ${e.gray("[diff attached]")}`),t.join(`
|
|
46
|
-
`)}async function $e(s){let o=process.cwd(),r=h(o);r||(r=d(o),console.log(e.gray(`Auto-joined as ${r.id}`)));let n=parseInt(s.interval||"2000",10),i$1=s.thread,l=s.quiet,t=b.join(q.homedir(),".paradigm","score"),a=b.join(t,"agents",...r.id.split("/"),"inbox.jsonl"),c=0,g=0;p.existsSync(a)&&(c=p.readFileSync(a,"utf-8").split(`
|
|
47
|
-
`).filter($=>$.trim().length>0).length,g=p.statSync(a).size),l||(console.log(e.cyan(`
|
|
48
|
-
Symphony Watch`)),console.log(e.gray(` Agent: ${r.id}`)),console.log(e.gray(` Inbox: ${a}`)),console.log(e.gray(` Poll: ${n}ms`)),i$1&&console.log(e.gray(` Filter: thread ${i$1}`)),console.log(e.gray(` Press Ctrl+C to stop
|
|
49
|
-
`)),console.log(e.gray(` ${"\u2500".repeat(60)}
|
|
50
|
-
`)));let y=b.join(t,"threads"),d$1=new Set;if(p.existsSync(y))for(let m of p.readdirSync(y))d$1.add(m);let h$1=()=>{try{if(p.existsSync(a)){let m=p.statSync(a);if(m.size>g){let w=p.readFileSync(a,"utf-8").split(`
|
|
51
|
-
`).filter(T=>T.trim().length>0);if(w.length>c){let T=w.slice(c);for(let V of T)try{let F=JSON.parse(V);if(i$1&&F.threadRoot!==i$1)continue;console.log(Z(F)),console.log();}catch{}c=w.length;}g=m.size;}}if(p.existsSync(y)){let m=p.readdirSync(y);for(let $ of m)if(!d$1.has($)){d$1.add($);try{let w=JSON.parse(p.readFileSync(b.join(y,$),"utf-8"));l||(console.log(` ${e.green("+")} ${e.white("New thread:")} ${w.topic||w.id}`),console.log(` ${e.gray(`by ${w.initiator?.name||"unknown"} \u2014 ${w.id}`)}`),console.log());}catch{}}}i(r.id);}catch{}};h$1();let u=setInterval(h$1,n);process.on("SIGINT",()=>{clearInterval(u),l||console.log(e.gray(`
|
|
52
|
-
Watch stopped.
|
|
53
|
-
`)),process.exit(0);}),await new Promise(()=>{});}export{me as symphonyApproveCommand,fe as symphonyDenyCommand,te as symphonyJoinCommand,se as symphonyLeaveCommand,ie as symphonyListCommand,ce as symphonyReadCommand,he as symphonyRequestCommand,ue as symphonyRequestsCommand,de as symphonyResolveCommand,le as symphonySendCommand,pe as symphonyServeCommand,ye as symphonyStatusCommand,ge as symphonyThreadCommand,ae as symphonyThreadsCommand,$e as symphonyWatchCommand,re as symphonyWhoamiCommand};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {g,f,k,j,h,s,r,u,t,c,q,v,w,m,D,z,B,A}from'./chunk-CVPKQ3JH.js';import'./chunk-7SWEOPWF.js';import'./chunk-MBPLJKE5.js';import'./chunk-5TAVYPOV.js';import {Router}from'express';function G(u$1,p){let d=Router();return d.get("/agents",(i,s)=>{try{g();let e=f(),n=k(),a=new Set(e.map(t=>t.id));for(let t of n)a.has(t.id)||e.push(t);let r=e.map(t=>({id:t.id,name:t.name,project:t.project,role:t.role,status:j(t)?"asleep":"awake",lastPoll:t.lastPoll,startedAt:t.startedAt,statusBlurb:t.statusBlurb}));s.json({agents:r});}catch(e){s.status(500).json({error:"Failed to list agents",detail:String(e)});}}),d.get("/agents/me",(i,s)=>{try{let e=h(u$1);s.json({identity:e||null});}catch(e){s.status(500).json({error:"Failed to get identity",detail:String(e)});}}),d.get("/peers",async(i,s)=>{try{let{loadPeers:e}=await import('./symphony-peers-X5NGWXFP.js'),a=e().map(r=>({id:r.id,displayName:r.displayName,address:r.address,connectedAt:r.connectedAt,lastSeen:r.lastSeen,revoked:r.revoked,agents:r.agents||[]}));s.json({peers:a});}catch(e){s.status(500).json({error:"Failed to list peers",detail:String(e)});}}),d.get("/threads",(i,s$1)=>{try{let e=i.query.status,n;(e==="active"||e==="resolved")&&(n=e);let r=s(n).map(t=>({id:t.id,topic:t.topic,status:t.status,participants:t.participants.map(o=>({id:o.id,name:o.name,type:o.type})),messageCount:t.messageCount,lastActivity:t.lastActivity,decision:t.decision}));s$1.json({threads:r});}catch(e){s$1.status(500).json({error:"Failed to list threads",detail:String(e)});}}),d.get("/threads/:threadId",(i,s)=>{try{let{threadId:e}=i.params,n=r(e);if(!n){s.status(404).json({error:`Thread not found: ${e}`});return}let a=u(e),r$1=new Set;for(let t of a)for(let o of t.symbols)r$1.add(o);s.json({thread:{id:n.id,topic:n.topic,status:n.status,participants:n.participants.map(t=>({id:t.id,name:t.name,type:t.type})),messageCount:n.messageCount,lastActivity:n.lastActivity,decision:n.decision},messages:a.map(t=>({id:t.id,sender:{id:t.sender.id,name:t.sender.name,type:t.sender.type},intent:t.intent,text:t.content.text,timestamp:t.timestamp,symbols:t.symbols,diff:t.content.diff,decision:t.content.decision,recipients:t.recipients?.map(o=>({id:o.id,name:o.name}))})),symbolsDiscussed:[...r$1]});}catch(e){s.status(500).json({error:"Failed to load thread",detail:String(e)});}}),d.post("/threads/:threadId/resolve",(i,s)=>{try{let{threadId:e}=i.params,{decision:n}=i.body;if(!t(e,n)){s.status(404).json({error:`Thread not found: ${e}`});return}p&&p({type:"symphony:thread_resolved",threadId:e,decision:n}),s.json({resolved:!0,threadId:e,decision:n});}catch(e){s.status(500).json({error:"Failed to resolve thread",detail:String(e)});}}),d.post("/messages",(i,s)=>{try{let{intent:e,text:n,threadRoot:a,recipients:r,symbols:t,diff:o,decision:f$1}=i.body;if(!e||!n){s.status(400).json({error:"intent and text are required"});return}let l={id:`human/${c(u$1)}`,name:"Human (Platform UI)",type:"human"},g=a,b=!1;if(!a){let q$1=n.length>60?n.slice(0,60)+"...":n;g=q(q$1,l).id,b=!0;}let x;if(r&&r.length>0){let q=f();x=r.map(y=>{let R=q.find(H=>H.id===y);return R?{id:R.id,name:R.name,type:"agent"}:{id:y,name:y,type:"agent"}});}let c$1=v({sender:l,recipients:x,intent:e,text:n,threadRoot:g,symbols:t,diff:o,decision:f$1}),N=w(c$1);p&&p({type:"symphony:message",message:{id:c$1.id,sender:{id:l.id,name:l.name,type:l.type},intent:c$1.intent,text:c$1.content.text,timestamp:c$1.timestamp,symbols:c$1.symbols,diff:c$1.content.diff,decision:c$1.content.decision},threadId:g}),s.json({sent:!0,messageId:c$1.id,threadId:g,threadCreated:b,deliveredTo:N});}catch(e){s.status(500).json({error:"Failed to send message",detail:String(e)});}}),d.get("/inbox",(i,s)=>{try{let e=c(u$1),n=m(e);s.json({agentId:e,messages:n.map(a=>({id:a.id,sender:{id:a.sender.id,name:a.sender.name,type:a.sender.type},intent:a.intent,text:a.content.text,timestamp:a.timestamp,threadRoot:a.threadRoot,symbols:a.symbols}))});}catch(e){s.status(500).json({error:"Failed to read inbox",detail:String(e)});}}),d.get("/file-requests",(i,s)=>{try{D();let e=i.query.status,n;(e==="pending"||e==="approved"||e==="denied"||e==="expired")&&(n=e);let r=z(n).map(t=>({requestId:t.request.requestId,filePath:t.request.filePath,reason:t.request.reason,requester:{id:t.request.requester.id,name:t.request.requester.name},urgency:t.request.urgency,snippet:t.request.snippet,status:t.status,createdAt:t.createdAt,resolvedAt:t.resolvedAt,denyReason:t.denyReason}));s.json({fileRequests:r});}catch(e){s.status(500).json({error:"Failed to list file requests",detail:String(e)});}}),d.post("/file-requests/:requestId/action",(i,s)=>{try{let{requestId:e}=i.params,{action:n,reason:a}=i.body;if(!n){s.status(400).json({error:"action is required"});return}if(n==="deny"){let o=B(e,a);s.json({success:o,requestId:e,action:"denied",reason:a});return}let r=n==="approve-redacted",t=A(e,u$1,r);if(!t.success){s.status(400).json({success:!1,requestId:e,error:t.error});return}s.json({success:!0,requestId:e,action:r?"approved-redacted":"approved",filePath:t.delivery?.filePath,size:t.delivery?.size});}catch(e){s.status(500).json({error:"Failed to handle file request",detail:String(e)});}}),d.get("/status",(i,s$1)=>{try{g();let e=f(),n=e.filter(f=>!j(f)).length,a=s("active"),r=c(u$1),t=m(r),o=z("pending");s$1.json({agentCount:e.length,awakeCount:n,asleepCount:e.length-n,activeThreadCount:a.length,unreadCount:t.length,pendingFileRequests:o.length});}catch(e){s$1.status(500).json({error:"Failed to get status",detail:String(e)});}}),d}export{G as createSymphonyRouter};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {k,l,n,f as f$1,m as m$1,c as c$1,j,i}from'./chunk-J32OPJEX.js';import {a,b,f as f$2,l as l$1,n as n$1,j as j$1}from'./chunk-CVPKQ3JH.js';import'./chunk-7SWEOPWF.js';import'./chunk-MBPLJKE5.js';import'./chunk-5TAVYPOV.js';import*as v from'fs';import*as m from'path';import*as A from'os';import*as f from'crypto';import {WebSocketServer,WebSocket}from'ws';var J=m.join(A.homedir(),".paradigm","score"),D=2e3,N=3e4,L=1e4,H=3,U=6e4,R=1e3,K=3e4;function c(p,e){p.readyState===WebSocket.OPEN&&p.send(JSON.stringify(e));}function C(p){try{let e=typeof p=="string"?p:String(p);return JSON.parse(e)}catch{return null}}var F=class p{wss=null;wsClient=null;mode;pairingState=null;connectedPeers=new Map;seenMessageIds=new Set;outboxWatchInterval=null;keepaliveInterval=null;reconnectTimer=null;reconnectDelay=R;outboxPositions=new Map;events;myPeerId;port;stopped=false;failedAuthAttempts=new Map;pongTimers=new Map;serverAddress=null;serverCode=null;static MAX_SEEN_IDS=1e4;constructor(e){this.mode=e.mode,this.myPeerId=e.peerId,this.port=e.port??3939,this.events=e.events??{};}async startServer(){if(this.mode!=="server")throw new Error('startServer() requires mode "server"');return this.pairingState=k(),this.wss=new WebSocketServer({port:this.port}),this.wss.on("connection",(e,t)=>{let n=t.socket.remoteAddress??"unknown";if(this.isRateLimited(n)){c(e,{type:"auth_fail",reason:"Too many failed attempts \u2014 try again later"}),e.close();return}let s=f.randomBytes(32).toString("hex");c(e,{type:"hello",version:"1.0",peerId:this.myPeerId,challenge:s});let i=false;e.on("message",r=>{let o=C(r);if(o){if(!i){this.handleServerAuth(e,o,s,n).then(a=>{a&&(i=true,this.registerPeerConnection(a,e));}).catch(a=>{this.events.onError?.(a instanceof Error?a:new Error(String(a)));});return}this.handleAuthenticatedFrame(e,o);}}),e.on("close",()=>{i&&this.handlePeerDisconnect(e);}),e.on("error",r=>{this.events.onError?.(r);});}),this.wss.on("error",e=>{this.events.onError?.(e);}),await new Promise((e,t)=>{this.wss.on("listening",e),this.wss.on("error",t);}),this.startOutboxWatcher(),this.startKeepalive(),this.pairingState}async handleServerAuth(e,t,n$1,s){if(t.type!=="auth")return c(e,{type:"auth_fail",reason:"Expected auth frame"}),e.close(),null;if(!this.pairingState||!l(this.pairingState,t.code)){this.recordFailedAuth(s);let a="Invalid or expired pairing code";return c(e,{type:"auth_fail",reason:a}),this.events.onPeerAuthFailed?.(s,a),e.close(),null}let i=this.pairingState.codeHash;if(!n(n$1,i,t.proof)){this.recordFailedAuth(s);let a="HMAC proof verification failed";return c(e,{type:"auth_fail",reason:a}),this.events.onPeerAuthFailed?.(s,a),e.close(),null}let r=this.getLocalAgentSummaries(),o=this.myPeerId;return c(e,{type:"auth_ok",peerId:this.myPeerId,displayName:o,agents:r}),f$1({id:t.peerId,displayName:t.peerId,address:s,sharedSecret:this.pairingState.sharedSecret,connectedAt:new Date().toISOString(),lastSeen:new Date().toISOString(),revoked:false,agents:[]}),t.peerId}async connectToServer(e,t){if(this.mode!=="client")throw new Error('connectToServer() requires mode "client"');this.serverAddress=e,this.serverCode=t,await this.attemptConnection(e,t);}attemptConnection(e,t){return new Promise((n,s)=>{if(this.stopped){s(new Error("Relay has been stopped"));return}let i=e.includes("://")?e:`ws://${e}`,r=new WebSocket(i),o=false;r.on("open",()=>{this.wsClient=r;}),r.on("message",a=>{let d=C(a);if(d)switch(d.type){case "hello":{let x=f.createHash("sha256").update(t).digest("hex"),O=m$1(d.challenge,x);c(r,{type:"auth",peerId:this.myPeerId,code:t,proof:O});break}case "auth_ok":{f$1({id:d.peerId,displayName:d.displayName,address:e,sharedSecret:t,connectedAt:new Date().toISOString(),lastSeen:new Date().toISOString(),revoked:false,agents:d.agents}),c(r,{type:"agents_sync",agents:this.getLocalAgentSummaries()}),this.registerPeerConnection(d.peerId,r),this.startOutboxWatcher(),this.startKeepalive(),this.reconnectDelay=R,o||(o=true,n());break}case "auth_fail":{o||(o=true,s(new Error(`Auth failed: ${d.reason}`))),r.close();break}default:this.handleAuthenticatedFrame(r,d);break}}),r.on("close",()=>{this.handlePeerDisconnect(r),o?this.stopped||this.scheduleReconnect():(o=true,s(new Error("Connection closed before auth completed")));}),r.on("error",a=>{this.events.onError?.(a),o||(o=true,s(a));});})}handleAuthenticatedFrame(e,t){switch(t.type){case "message":this.handleIncomingMessage(e,t.message,t.origin);break;case "message_ack":break;case "nomination_forward":this.handleNominationForward(e,t.nomination,t.origin);break;case "agents_sync":this.handleAgentsSync(e,t.agents);break;case "agent_joined":{let n=this.peerIdForSocket(e);if(n){let i=c$1().find(r=>r.id===n);if(i){let r=[...i.agents||[],t.agent];j(n,r);}}break}case "agent_left":{let n=this.peerIdForSocket(e);if(n){let i=c$1().find(r=>r.id===n);if(i){let r=(i.agents||[]).filter(o=>o.id!==t.agentId);j(n,r);}}break}case "peer_leaving":this.handlePeerDisconnect(e),e.close();break;case "ping":c(e,{type:"pong"});break;case "pong":this.handlePong(e);break;}}handleIncomingMessage(e,t,n){if(a(t)){b(t.sender.id,t,"cross-project-transfer"),c(e,{type:"message_ack",messageId:t.id});return}if(this.seenMessageIds.has(t.id)){c(e,{type:"message_ack",messageId:t.id});return}this.addToSeenIds(t.id);let s=f$2();if(t.recipients&&t.recipients.length>0)for(let i of t.recipients){let r=s.find(o=>o.id===i.id);r&&(l$1(r.id,t),this.events.onMessageRelayed?.(t.id,n,r.id));}else for(let i of s)l$1(i.id,t),this.events.onMessageRelayed?.(t.id,n,i.id);if(this.mode==="server"){let i=this.peerIdForSocket(e);for(let[r,o]of this.connectedPeers)r!==i&&r!==n&&c(o,{type:"message",message:t,origin:n});}c(e,{type:"message_ack",messageId:t.id});}handleNominationForward(e,t,n){if(!t?.id)return;let s={...t,remote_origin:n,forwarded_at:new Date().toISOString()};try{let i=m.join(A.homedir(),".paradigm","events");v.mkdirSync(i,{recursive:!0});let r=m.join(i,"nominations.jsonl");v.appendFileSync(r,JSON.stringify(s)+`
|
|
3
|
-
`,"utf8");}catch{}if(this.mode==="server")for(let[i,r]of this.connectedPeers)r!==e&&r.readyState===WebSocket.OPEN&&c(r,{type:"nomination_forward",nomination:s,origin:n});c(e,{type:"nomination_ack",nominationId:t.id});}handleAgentsSync(e,t){let n=this.peerIdForSocket(e);n&&(j(n,t),i(n));}startOutboxWatcher(){this.outboxWatchInterval||(this.outboxWatchInterval=setInterval(()=>{if(this.connectedPeers.size!==0)try{let e=f$2();for(let t of e){let n=n$1(t.id),s=this.outboxPositions.get(t.id)??0;if(n.length<=s){this.outboxPositions.set(t.id,n.length);continue}this.outboxPositions.set(t.id,n.length);let i=n.slice(s);for(let r of i){if(a(r)||this.seenMessageIds.has(r.id))continue;this.addToSeenIds(r.id);let o={type:"message",message:r,origin:this.myPeerId};for(let[a,d]of this.connectedPeers)c(d,o);}}}catch(e){this.events.onError?.(e instanceof Error?e:new Error(String(e)));}},D));}stopOutboxWatcher(){this.outboxWatchInterval&&(clearInterval(this.outboxWatchInterval),this.outboxWatchInterval=null);}startKeepalive(){this.keepaliveInterval||(this.keepaliveInterval=setInterval(()=>{for(let[e,t]of this.connectedPeers){c(t,{type:"ping"});let n=setTimeout(()=>{this.handlePeerDisconnect(t),t.terminate();},L);this.pongTimers.set(e,n);}},N));}stopKeepalive(){this.keepaliveInterval&&(clearInterval(this.keepaliveInterval),this.keepaliveInterval=null);for(let e of this.pongTimers.values())clearTimeout(e);this.pongTimers.clear();}handlePong(e){let t=this.peerIdForSocket(e);if(t){let n=this.pongTimers.get(t);n&&(clearTimeout(n),this.pongTimers.delete(t)),i(t);}}registerPeerConnection(e,t){let n=this.connectedPeers.get(e);n&&n!==t&&n.close(),this.connectedPeers.set(e,t),i(e),this.events.onPeerConnected?.(e,e);}handlePeerDisconnect(e){let t=this.peerIdForSocket(e);if(!t)return;this.connectedPeers.delete(t);let n=this.pongTimers.get(t);n&&(clearTimeout(n),this.pongTimers.delete(t)),this.events.onPeerDisconnected?.(t);}peerIdForSocket(e){for(let[t,n]of this.connectedPeers)if(n===e)return t;return null}scheduleReconnect(){if(this.stopped||this.mode!=="client"||!this.serverAddress||!this.serverCode)return;this.stopOutboxWatcher(),this.stopKeepalive(),this.wsClient=null;let e=this.reconnectDelay;this.reconnectDelay=Math.min(this.reconnectDelay*2,K),this.reconnectTimer=setTimeout(()=>{this.stopped||this.attemptConnection(this.serverAddress,this.serverCode).catch(t=>{this.events.onError?.(t instanceof Error?t:new Error(String(t)));});},e);}isRateLimited(e){let t=this.failedAuthAttempts.get(e);return t?Date.now()<t.cooldownUntil?true:t.count>=H?(t.cooldownUntil=Date.now()+U,true):false:false}recordFailedAuth(e){let t=this.failedAuthAttempts.get(e);t?t.count++:this.failedAuthAttempts.set(e,{count:1,cooldownUntil:0});}addToSeenIds(e){if(this.seenMessageIds.add(e),this.seenMessageIds.size>p.MAX_SEEN_IDS){let t=Array.from(this.seenMessageIds),n=Math.floor(t.length/2);this.seenMessageIds=new Set(t.slice(n));}}getLocalAgentSummaries(){return f$2().map(e=>({id:e.id,project:e.project,role:e.role,status:j$1(e)?"asleep":"awake"}))}stop(){this.stopped=true;for(let[e,t]of this.connectedPeers)c(t,{type:"peer_leaving"}),t.close();this.connectedPeers.clear(),this.wsClient&&(this.wsClient.close(),this.wsClient=null),this.stopOutboxWatcher(),this.stopKeepalive(),this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null),this.wss&&(this.wss.close(),this.wss=null);}getConnectedPeers(){return Array.from(this.connectedPeers.keys())}getRemoteAgents(){let e=[],t=c$1();for(let n of this.connectedPeers.keys()){let s=t.find(i=>i.id===n);if(s?.agents)for(let i of s.agents)e.push({...i,peerId:n});}return e}rotatePairingCode(){if(this.mode!=="server")throw new Error('rotatePairingCode() requires mode "server"');return this.pairingState=k(),this.pairingState}};export{J as SCORE_DIR,F as SymphonyRelay};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {c,d as d$1}from'./chunk-3MZ4J2LF.js';import {b,a}from'./chunk-EK4ZRIFJ.js';import'./chunk-5TAVYPOV.js';import*as d from'fs';import*as g from'path';b();var w=".paradigm/events/settlement-liveness.jsonl",v=30,L=new Set(["done","shelved","crashed"]);function y(t){return L.has(t)}function E(t){return y(t.status)||!!t.crashed_at}function P(t,e){try{let s=g.join(t,w);d.mkdirSync(g.dirname(s),{recursive:!0}),d.appendFileSync(s,JSON.stringify(e)+`
|
|
3
|
-
`,"utf8");}catch(s){a.component("#task-settlement").warn("Failed to append liveness record",{parentTaskId:e.parentTaskId,error:s instanceof Error?s.message:String(s)});}}function _(t){return Object.values(t).every(e=>e==="skipped"||e==="ok")}function T(){let t=process.env.PARADIGM_REAPER_STALE_MINUTES;return (t&&!Number.isNaN(Number(t))?Number(t):v)*60*1e3}async function A(t){let e=Date.now(),s=T(),a$1=[],l;try{l=await c(t,{status:"in-progress",limit:9999});}catch{return a$1}let{updateTask:i}=await import('./task-loader-IGQQ6ZFL.js');for(let o of l){if(o.status!=="in-progress"||o.crashed_at)continue;let u=o.started_at?new Date(o.started_at).getTime():NaN;if(Number.isNaN(u)||e-u<s)continue;let r=new Date().toISOString();await i(t,o.id,{status:"shelved",crashed_at:r,crash_reason:"reaper:stale-in-progress",shelved:r})&&(a$1.push(o.id),a.component("#task-settlement").warn("Reaped stale in-progress task",{taskId:o.id,startedAt:o.started_at,reason:"reaper:stale-in-progress"}));}return a$1}async function R(t,e,s){if(!e)return;try{await A(t);}catch(r){a.component("#task-settlement").warn("Reaper pass failed (non-fatal)",{error:r instanceof Error?r.message:String(r)});}let a$1=await d$1(t,e);if(!a$1){a.component("#task-settlement").warn("Orphan task: parent failed to load",{parentTaskId:e,orphanChildId:s,reason:"orphan:missing-parent"});let r=s?await d$1(t,s):null;if(r&&r.settledAt)return;await S(t,e,"orphan",r??void 0,true);return}if(a$1.settledAt)return;let l=(await c(t,{status:"all",limit:9999})).filter(r=>r.parentTaskId===a$1.id);if(l.length===0||!l.every(E))return;let i=l.some(r=>r.crashed_at),o=l.some(r=>r.status==="shelved"&&!r.crashed_at),u=i?"crashed":o?"shelved":"done";await S(t,a$1.id,u,a$1);}async function S(t,e,s,a$1,l=false){let i={recordWorkLog:"skipped",runPostflightLearning:"skipped",autoPromoteJournalEntries:"skipped"},o=0,u=0,r=a$1?.claimant?.ref??"orchestrator";try{try{let{recordWorkLog:n}=await import('./work-log-loader-DL5GZ2BQ.js');n(t,{agent:r,task_ref:e,summary:`Settlement of task DAG ${e} (${s})`,outcome:s==="done"?"pass":"partial",symbols_touched:[]}),i.recordWorkLog="ok";}catch(n){i.recordWorkLog="threw",a.component("#task-settlement").warn("Settlement stage threw: recordWorkLog",{parentTaskId:e,error:n instanceof Error?n.message:String(n)});}try{let{runPostflightLearning:n}=await import('./ambient-7HBJHJL2.js'),c=await n(t,{claimant:r});o=c.journalsWritten??0,u=c.promoted??0,i.runPostflightLearning="ok";}catch(n){i.runPostflightLearning="threw",a.component("#task-settlement").warn("Settlement stage threw: runPostflightLearning",{parentTaskId:e,error:n instanceof Error?n.message:String(n)});}try{let{autoPromoteJournalEntries:n}=await import('./nomination-engine-AQHU2KBU.js'),c=n(t,r);u+=c.promoted??0,i.autoPromoteJournalEntries="ok";}catch(n){i.autoPromoteJournalEntries="threw",a.component("#task-settlement").warn("Settlement stage threw: autoPromoteJournalEntries",{parentTaskId:e,error:n instanceof Error?n.message:String(n)});}}finally{let n={ts:new Date().toISOString(),parentTaskId:e,settledAs:s,stages:i,journalsWritten:o,promoted:u,chainLive:_(i)};if(P(t,n),a$1)try{let{updateTask:c}=await import('./task-loader-IGQQ6ZFL.js'),p={settledAt:new Date().toISOString()};s==="crashed"&&(p.crash_reason=a$1.crash_reason??"reaper:stale-in-progress"),l&&(p.orphaned=!0),await c(t,a$1.id,p);}catch(c){a.component("#task-settlement").warn("Failed to stamp settledAt",{parentTaskId:e,error:c instanceof Error?c.message:String(c)});}}}export{y as isTerminal,A as reapStaleInProgress,R as settleParentIfComplete};
|
package/dist/team-J2YXPEGX.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
export{e as teamAcceptCommand,f as teamCheckCommand,d as teamHandoffCommand,g as teamHistoryCommand,b as teamInitCommand,a as teamModelsCommand,h as teamResetCommand,c as teamStatusCommand}from'./chunk-JCGCPAHF.js';import'./chunk-6AKNXD22.js';import'./chunk-DLMDHS2X.js';import'./chunk-FYDRENK7.js';import'./chunk-ECLUYHAR.js';import'./chunk-TYWB5IQJ.js';import'./chunk-YXLGVOZO.js';import'./chunk-Y4XFVDZC.js';import'./chunk-EKZDFEJW.js';import'./chunk-LPBCQM5Y.js';import'./chunk-4GC35IFF.js';import'./chunk-JIXHEBGK.js';import'./chunk-ZJQY5PPP.js';import'./chunk-5TAVYPOV.js';
|
package/dist/thread-HFXK65D4.js
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import'./chunk-5TAVYPOV.js';import*as o from'fs';import*as f from'path';import c from'chalk';import*as p from'js-yaml';var b=`# Thread - Session Continuity
|
|
3
|
-
|
|
4
|
-
> Pass context between AI agent sessions. Updated by \`paradigm thread save\`.
|
|
5
|
-
|
|
6
|
-
## Last Session: {timestamp}
|
|
7
|
-
|
|
8
|
-
### Trail (What was done)
|
|
9
|
-
{trail}
|
|
10
|
-
|
|
11
|
-
### Loose Ends (Unfinished)
|
|
12
|
-
{looseEnds}
|
|
13
|
-
|
|
14
|
-
### Breadcrumbs (Notes for next agent)
|
|
15
|
-
{breadcrumbs}
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
*Run \`paradigm thread save "message"\` to update*
|
|
19
|
-
*Run \`paradigm thread clear\` to reset*
|
|
20
|
-
`;function u(){try{let t=f.join(process.cwd(),".paradigm","config.yaml");if(o.existsSync(t)){let n=o.readFileSync(t,"utf8"),r=p.load(n)?.limits;if(r?.threadTrailMax&&typeof r.threadTrailMax=="number")return r.threadTrailMax}}catch{}return 10}function m(t){let n={trail:[],looseEnds:[],breadcrumbs:[]},l=t.match(/## Last Session: (.+)/);l&&(n.lastSession=l[1].trim());let r=t.match(/### Trail \(What was done\)\n([\s\S]*?)(?=\n### |$)/);if(r){let e=r[1].split(`
|
|
21
|
-
`).filter(s=>s.startsWith("- "));for(let s of e){let i=s.replace(/^- /,"").trim();if(i&&i!=="_No activity recorded yet_"){let h=i.match(/[@#^!$%~?][\w-]+/g)||[];n.trail.push({timestamp:n.lastSession||new Date().toISOString(),message:i,symbols:h.length>0?h:void 0});}}}let d=t.match(/### Loose Ends \(Unfinished\)\n([\s\S]*?)(?=\n### |$)/);if(d){let e=d[1].split(`
|
|
22
|
-
`).filter(s=>s.startsWith("- "));for(let s of e){let i=s.replace(/^- \[[ x]\] /,"").replace(/^- /,"").trim();i&&i!=="_No pending tasks_"&&n.looseEnds.push(i);}}let a=t.match(/### Breadcrumbs \(Notes for next agent\)\n([\s\S]*?)(?=\n---|$)/);if(a){let e=a[1].split(`
|
|
23
|
-
`).filter(s=>s.startsWith("- "));for(let s of e){let i=s.replace(/^- /,"").trim();i&&i!=="_No notes yet_"&&n.breadcrumbs.push(i);}}return n}function g(t){let n=new Date().toISOString().replace("T"," ").split(".")[0],l="_No activity recorded yet_";t.trail.length>0&&(l=t.trail.slice(-u()).map(a=>`- ${a.message}`).join(`
|
|
24
|
-
`));let r="_No pending tasks_";t.looseEnds.length>0&&(r=t.looseEnds.map(a=>`- [ ] ${a}`).join(`
|
|
25
|
-
`));let d="_No notes yet_";return t.breadcrumbs.length>0&&(d=t.breadcrumbs.slice(-u()).map(a=>`- ${a}`).join(`
|
|
26
|
-
`)),b.replace("{timestamp}",n).replace("{trail}",l).replace("{looseEnds}",r).replace("{breadcrumbs}",d)}async function w(t,n={}){let l=process.cwd(),r=t?f.resolve(l,t):l,d=f.join(r,".paradigm","thread.md");if(!o.existsSync(d)){if(n.json){console.log(JSON.stringify({exists:false,trail:[],looseEnds:[],breadcrumbs:[]},null,2));return}console.log(c.yellow(`
|
|
27
|
-
\u{1F4DC} No thread found.
|
|
28
|
-
`)),console.log(c.gray(' Run `paradigm thread save "message"` to start a thread.\n'));return}let a=o.readFileSync(d,"utf8"),e=m(a);if(n.json){console.log(JSON.stringify({exists:true,lastSession:e.lastSession,trail:e.trail,looseEnds:e.looseEnds,breadcrumbs:e.breadcrumbs},null,2));return}if(console.log(c.blue(`
|
|
29
|
-
\u{1F4DC} Current Thread
|
|
30
|
-
`)),console.log(c.gray("\u2500".repeat(50))),e.lastSession&&(console.log(c.white(`Last Session: ${c.cyan(e.lastSession)}`)),console.log("")),e.trail.length>0){console.log(c.white("Trail (What was done):"));for(let s of e.trail.slice(-5))console.log(c.gray(` - ${s.message}`));e.trail.length>5&&console.log(c.gray(` ... and ${e.trail.length-5} more`)),console.log("");}if(e.looseEnds.length>0){console.log(c.white("Loose Ends (Unfinished):"));for(let s of e.looseEnds)console.log(c.yellow(` \u25A1 ${s}`));console.log("");}if(e.breadcrumbs.length>0){console.log(c.white("Breadcrumbs (Notes):"));for(let s of e.breadcrumbs.slice(-5))console.log(c.gray(` - ${s}`));console.log("");}console.log(c.gray(`Path: ${d}
|
|
31
|
-
`));}async function T(t,n,l={}){let r=process.cwd(),d=n?f.resolve(r,n):r,a=f.join(d,".paradigm"),e=f.join(a,"thread.md");o.existsSync(a)||o.mkdirSync(a,{recursive:true});let s={trail:[],looseEnds:[],breadcrumbs:[]};if(o.existsSync(e)){let y=o.readFileSync(e,"utf8");s=m(y);}let i=t.match(/[@#^!$%~?][\w-]+/g)||[];s.trail.push({timestamp:new Date().toISOString(),message:t,symbols:i.length>0?i:void 0});let h=g(s);o.writeFileSync(e,h,"utf8"),l.quiet||console.log(c.green(`
|
|
32
|
-
\u2713 Thread updated: ${t}
|
|
33
|
-
`));}async function x(t,n,l={}){let r=process.cwd(),d=n?f.resolve(r,n):r,a=f.join(d,".paradigm"),e=f.join(a,"thread.md");o.existsSync(a)||o.mkdirSync(a,{recursive:true});let s={trail:[],looseEnds:[],breadcrumbs:[]};if(o.existsSync(e)){let h=o.readFileSync(e,"utf8");s=m(h);}s.looseEnds.push(t);let i=g(s);o.writeFileSync(e,i,"utf8"),l.quiet||console.log(c.yellow(`
|
|
34
|
-
\u25A1 Loose end added: ${t}
|
|
35
|
-
`));}async function E(t,n,l={}){let r=process.cwd(),d=n?f.resolve(r,n):r,a=f.join(d,".paradigm"),e=f.join(a,"thread.md");o.existsSync(a)||o.mkdirSync(a,{recursive:true});let s={trail:[],looseEnds:[],breadcrumbs:[]};if(o.existsSync(e)){let h=o.readFileSync(e,"utf8");s=m(h);}s.breadcrumbs.push(t);let i=g(s);o.writeFileSync(e,i,"utf8"),l.quiet||console.log(c.cyan(`
|
|
36
|
-
\u{1F4CC} Breadcrumb added: ${t}
|
|
37
|
-
`));}async function $(t,n={}){let l=process.cwd(),r=t?f.resolve(l,t):l,d=f.join(r,".paradigm","thread.md");if(o.existsSync(d)){let e=g({trail:[],looseEnds:[],breadcrumbs:[]});o.writeFileSync(d,e,"utf8"),n.quiet||console.log(c.green(`
|
|
38
|
-
\u2713 Thread cleared.
|
|
39
|
-
`));}else n.quiet||console.log(c.gray(`
|
|
40
|
-
No thread to clear.
|
|
41
|
-
`));}export{$ as threadClearCommand,E as threadNoteCommand,T as threadSaveCommand,w as threadShowCommand,x as threadTodoCommand};
|
package/dist/tools-HNJ7D5IO.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
export{b as registerTools}from'./chunk-47YPID6H.js';import'./chunk-ZUAUFZRJ.js';import'./chunk-S4J337EQ.js';import'./chunk-K54L6CFR.js';import'./chunk-WROJSWAO.js';import'./chunk-QBIQ2FYB.js';import'./chunk-M4UMM6DC.js';import'./chunk-B5KLSBOZ.js';import'./chunk-4UJ4NIEQ.js';import'./chunk-ROU3F2HZ.js';import'./chunk-FRQRREJ6.js';import'./chunk-3KVVC4WV.js';import'./chunk-QEQCPVF5.js';import'./chunk-Q527BPUF.js';import'./chunk-RGSFU2YW.js';import'./chunk-TMDPDIWA.js';import'./chunk-KLBH26PA.js';import'./chunk-XROULIQN.js';import'./chunk-GRZQIKST.js';import'./chunk-KAFQA7HV.js';import'./chunk-ACJWUOMA.js';import'./chunk-33ERV2MW.js';import'./chunk-3MZ4J2LF.js';import'./chunk-EK4ZRIFJ.js';import'./chunk-JNSJVCTU.js';import'./chunk-QGZRM6ZB.js';import'./chunk-5TAVYPOV.js';
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {k,l,n,a,c,d}from'./chunk-EKNLG73M.js';import'./chunk-5TAVYPOV.js';import u from'chalk';import*as h from'fs';import*as p from'path';import*as C from'js-yaml';var P=/^[a-z0-9][a-z0-9-]{0,63}$/,v=new Set(["track","index","chronological","featured"]);function j(n){let d=p.join(n,"pack.yaml");if(!h.existsSync(d))return null;try{let s=h.readFileSync(d,"utf8"),i=C.load(s);return Array.isArray(i?.sections)?i.sections:null}catch{return null}}function z(n,d,s){let i=new Set,r=false;if(!n||n.length===0)return i.add("main"),{knownIds:i,hadValidationError:r};let t=new Set,f=0;for(let c=0;c<n.length;c++){let l=n[c],y=`sections[${c}]`;if(typeof l.id!="string"||!P.test(l.id)){s.push({contentId:"pack.yaml",severity:"error",check:"section-bad-id",message:`${y}.id must be kebab-case matching /^[a-z0-9][a-z0-9-]{0,63}$/`,fix:"Use lowercase letters, digits, and hyphens; start with a letter or digit"}),r=true;continue}if(t.has(l.id)){s.push({contentId:"pack.yaml",severity:"error",check:"section-duplicate-id",message:`duplicate section id "${l.id}"`,fix:"Each section id must be unique within the pack"}),r=true;continue}t.add(l.id),i.add(l.id),(typeof l.style!="string"||!v.has(l.style))&&(s.push({contentId:"pack.yaml",severity:"error",check:"section-bad-style",message:`${y}.style must be one of: ${Array.from(v).join(", ")}`}),r=true),l.default===true&&f++;}f>1&&(s.push({contentId:"pack.yaml",severity:"error",check:"section-multiple-defaults",message:`at most one section may set default: true (found ${f})`,fix:"Set default: true on exactly one section"}),r=true);for(let c of d)i.has(c)||s.push({contentId:"pack.yaml",severity:"warning",check:"section-unknown-ref",message:`entries reference unknown section "${c}"`,fix:`Declare section "${c}" in pack.yaml, or remove the section: field from those entries`});return {knownIds:i,hadValidationError:r}}async function E(n$1){let d$1=process.cwd(),s=k(d$1,n$1),i=l(n$1)?s.subPackRoot??s.packRoot:void 0,r=i?n(i):a(d$1);if(!r||r.totalContent===0){console.log(u.yellow(`
|
|
3
|
-
No university content to validate.
|
|
4
|
-
`));return}let t=[],f=r.entries;n$1.id&&(f=f.filter(e=>e.id===n$1.id),f.length===0&&(console.error(u.red(`
|
|
5
|
-
Content "${n$1.id}" not found
|
|
6
|
-
`)),process.exit(1)));let c$1=null;if(n$1.deep){c$1=new Set;let e=p.join(d$1,".paradigm","scan-index.json");if(h.existsSync(e))try{let a=JSON.parse(h.readFileSync(e,"utf8"));if(a.symbols&&Array.isArray(a.symbols))for(let o of a.symbols)o.symbol&&c$1.add(o.symbol);}catch{}}let l$1=new Set(r.entries.map(e=>e.id)),y=s.subPackRoot??s.packRoot,R=j(y),k$1=new Set;for(let e of r.entries)e.section&&typeof e.section=="string"&&e.section.length>0&&k$1.add(e.section);z(R,k$1,t);for(let e of f){if(e.title||t.push({contentId:e.id,severity:"error",check:"missing-title",message:"Content is missing a title"}),e.type==="quiz"){let a=c(d$1,e.id,i);if(!a)t.push({contentId:e.id,severity:"error",check:"unreadable-quiz",message:"Quiz file could not be parsed"});else for(let o of a.questions)(!o.choices||!(o.correct in o.choices))&&t.push({contentId:e.id,severity:"error",check:"invalid-quiz-answer",message:`Question ${o.id}: correct "${o.correct}" not in choices [${Object.keys(o.choices||{}).join(", ")}]`,fix:`Set correct to one of: ${Object.keys(o.choices||{}).join(", ")}`});}if(e.type==="path"){let a=d(d$1,e.id,i);if(!a)t.push({contentId:e.id,severity:"error",check:"unreadable-path",message:"Learning path file could not be parsed"});else for(let o of a.steps)!o.content.startsWith("plsat:")&&!l$1.has(o.content)&&t.push({contentId:e.id,severity:"error",check:"broken-path-step",message:`Step references "${o.content}" which doesn't exist`,fix:`Create content with id "${o.content}"`});}if(c$1&&e.symbols.length>0)for(let a of e.symbols)c$1.has(a)||t.push({contentId:e.id,severity:"warning",check:"broken-symbol-ref",message:`Symbol "${a}" not found in scan-index`});}if(n$1.json){console.log(JSON.stringify({status:t.some(e=>e.severity==="error")?"errors":t.length>0?"warnings":"healthy",totalContent:r.totalContent,checked:f.length,issues:t},null,2));return}if(console.log(u.blue(`
|
|
7
|
-
University Validation \u2014 pack: ${s.subPackId??s.packId} (${f.length} items${n$1.deep?", deep mode":""})
|
|
8
|
-
`)),t.length===0){console.log(u.green(` All checks passed.
|
|
9
|
-
`));return}let g=t.filter(e=>e.severity==="error"),m=t.filter(e=>e.severity==="warning");for(let e of g)console.log(u.red(` x ${e.contentId}: ${e.message}`)),e.fix&&console.log(u.gray(` Fix: ${e.fix}`));for(let e of m)console.log(u.yellow(` ! ${e.contentId}: ${e.message}`)),e.fix&&console.log(u.gray(` Fix: ${e.fix}`));console.log(),g.length>0&&console.log(u.red(` ${g.length} error${g.length>1?"s":""}`)),m.length>0&&console.log(u.yellow(` ${m.length} warning${m.length>1?"s":""}`)),console.log();}export{E as universityValidateCommand};
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {f,o,p}from'./chunk-JIXHEBGK.js';import'./chunk-5TAVYPOV.js';import*as l from'path';import e from'chalk';import P from'ora';async function E(u){let i=process.cwd(),h=l.resolve(i,u);console.log(e.blue(`
|
|
3
|
-
\u{1F50D} Validating Purpose Files...
|
|
4
|
-
`));let a=P("Finding purpose files...").start();try{let s=await f(h);a.succeed(`Found ${s.length} purpose file(s)`);let c=!1,r=0,p$1=0;for(let{filePath:m,data:w}of s){let t=l.relative(i,m),o$1=o(w,t),$=o$1.issues.filter(n=>n.type==="error").length,v=o$1.issues.filter(n=>n.type==="warning").length;p$1+=$,r+=v,o$1.valid||(c=!0),o$1.issues.length>0?(console.log(e.white(`
|
|
5
|
-
${t}`)),console.log(p(o$1))):console.log(e.green(` \u2713 ${t}`));}console.log(e.white(`
|
|
6
|
-
`+"\u2500".repeat(50))),c?(console.log(e.red(`
|
|
7
|
-
\u274C Validation failed: ${p$1} error(s), ${r} warning(s)
|
|
8
|
-
`)),process.exit(1)):r>0?console.log(e.yellow(`
|
|
9
|
-
\u2713 Valid with ${r} warning(s)
|
|
10
|
-
`)):console.log(e.green(`
|
|
11
|
-
\u2713 All purpose files are valid
|
|
12
|
-
`));}catch(s){a.fail("Validation failed"),console.log(e.red(`Error: ${s.message}
|
|
13
|
-
`)),process.exit(1);}}export{E as purposeValidateCommand};
|