@a-company/paradigm 7.1.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.
Files changed (131) hide show
  1. package/dist/{accept-orchestration-WMGFGYDK.js → accept-orchestration-XW44LF5Y.js} +1 -1
  2. package/dist/add-CBDU23S2.js +12 -0
  3. package/dist/{aggregate-KZICPVT3.js → aggregate-H7SB2UYT.js} +1 -1
  4. package/dist/{ambient-HAXPDIWK.js → ambient-TFLZFV5Y.js} +1 -1
  5. package/dist/ambient-VCTUHHIG.js +2 -0
  6. package/dist/arch-loader-YVOS3QRY.js +2 -0
  7. package/dist/{beacon-52EWNZPK.js → beacon-WVN264OT.js} +1 -1
  8. package/dist/captain-CAXGHC2V.js +2 -0
  9. package/dist/captain-CWCLFOXV.js +2 -0
  10. package/dist/{chunk-QDP4G53M.js → chunk-27EK3OQZ.js} +4 -4
  11. package/dist/chunk-2KK4JQ55.js +17 -0
  12. package/dist/chunk-3I3TITBA.js +25 -0
  13. package/dist/chunk-3YM5ABNX.js +2 -0
  14. package/dist/{chunk-RDWWSQGH.js → chunk-6HYRS3PH.js} +14 -14
  15. package/dist/{chunk-S3UVQ5RV.js → chunk-6VZSOQ7Y.js} +1 -1
  16. package/dist/chunk-727PXENG.js +2 -0
  17. package/dist/chunk-A5EEY6NO.js +3 -0
  18. package/dist/{chunk-DLMDHS2X.js → chunk-ASBK55FU.js} +1 -1
  19. package/dist/{chunk-4GC35IFF.js → chunk-D6BSCELB.js} +1 -1
  20. package/dist/{chunk-G6DK3ND3.js → chunk-DH7QVZDI.js} +9 -0
  21. package/dist/chunk-FG3M6VVO.js +30 -0
  22. package/dist/chunk-FNYYQNJY.js +2 -0
  23. package/dist/chunk-K6TLYNRQ.js +7 -0
  24. package/dist/chunk-K7KT6FL3.js +25 -0
  25. package/dist/chunk-M7JHVVDW.js +6 -0
  26. package/dist/chunk-NFN5UUJB.js +2 -0
  27. package/dist/{chunk-EG22HDXI.js → chunk-NRP2KJ6I.js} +12 -12
  28. package/dist/{chunk-VPNJL4LS.js → chunk-QPQBXRXX.js} +1 -1
  29. package/dist/chunk-RZRFYGND.js +504 -0
  30. package/dist/chunk-UNSI6DVD.js +93 -0
  31. package/dist/{chunk-W4BW7GXA.js → chunk-USYV5QYU.js} +1 -1
  32. package/dist/chunk-VOPJ47QY.js +2 -0
  33. package/dist/{chunk-KP5VOYAH.js → chunk-W3VWORQZ.js} +1 -1
  34. package/dist/chunk-WMTES556.js +2 -0
  35. package/dist/chunk-XBK244QR.js +6 -0
  36. package/dist/{chunk-YQK3XU63.js → chunk-XSKIXXFW.js} +12 -12
  37. package/dist/{chunk-MBSY57RN.js → chunk-Y76OIMDO.js} +1 -1
  38. package/dist/chunk-YYRP7FLC.js +2 -0
  39. package/dist/{compliance-4P3EE5OA.js → compliance-3M6COUCO.js} +3 -3
  40. package/dist/{constellation-RHZAEFV7.js → constellation-TIKNCZWR.js} +1 -1
  41. package/dist/{cost-24UZSS2P.js → cost-VTHZQKO4.js} +2 -2
  42. package/dist/{diff-VBVIUNL5.js → diff-Z2YSIRC4.js} +1 -1
  43. package/dist/{dist-TNE4GFT7.js → dist-PW5YPGFF.js} +1 -1
  44. package/dist/{docs-NTP6UENF.js → docs-OWJ7EPD7.js} +1 -1
  45. package/dist/github-4X4MYINS.js +4 -0
  46. package/dist/{habits-BX2IRSUI.js → habits-UA7YT3CG.js} +3 -3
  47. package/dist/{hooks-AXBWYJ5V.js → hooks-XXJ7CSGJ.js} +1 -1
  48. package/dist/index.js +9 -9
  49. package/dist/{init-F4MSKZIW.js → init-QPMLEQWQ.js} +1 -1
  50. package/dist/{integrity-7TKX3DZ4.js → integrity-FRGF5BFS.js} +1 -1
  51. package/dist/lint-Y4P3MHBV.js +26 -0
  52. package/dist/list-5XRLWD7K.js +12 -0
  53. package/dist/mcp.js +1 -1
  54. package/dist/{migrate-5M4KUQ2L.js → migrate-LIVXILOO.js} +1 -1
  55. package/dist/nomination-engine-EFXDEPZN.js +2 -0
  56. package/dist/{orchestrate-MLUGQOEJ.js → orchestrate-C5NM5MFN.js} +1 -1
  57. package/dist/orchestration-EVWQWTOV.js +2 -0
  58. package/dist/orchestration-UP3KFUJT.js +2 -0
  59. package/dist/{platform-server-Y6TLEXR2.js → platform-server-FXF3XFHM.js} +1 -1
  60. package/dist/{probe-27ARJKRO.js → probe-G3TKOJYW.js} +1 -1
  61. package/dist/quiz-QKIKAVL7.js +10 -0
  62. package/dist/registry-NEW4OJ44.js +2 -0
  63. package/dist/reindex-QZYOD5K4.js +2 -0
  64. package/dist/{reindex-ZLDQBFUR.js → reindex-W67B2LQP.js} +1 -1
  65. package/dist/remember-KZYAY77S.js +14 -0
  66. package/dist/{review-BRO2UP4M.js → review-WHRNLW2W.js} +1 -1
  67. package/dist/{ripple-KCVDS3WE.js → ripple-B6U7263T.js} +1 -1
  68. package/dist/{serve-2PKJP65E.js → serve-6RNZYK2I.js} +2 -2
  69. package/dist/{serve-XZ6GBUS3.js → serve-ZT2Z54NK.js} +1 -1
  70. package/dist/{setup-5V2AGLQ6.js → setup-L5OP24US.js} +3 -3
  71. package/dist/{shift-PM4GI736.js → shift-UDKXCIW7.js} +3 -3
  72. package/dist/{show-N5LGB5B2.js → show-VXNGIJE4.js} +3 -3
  73. package/dist/{snapshot-YMX5QRBM.js → snapshot-MT5L6XE4.js} +1 -1
  74. package/dist/{spawn-PHA2SVQ3.js → spawn-I6XG57S2.js} +1 -1
  75. package/dist/status-45KIG32R.js +6 -0
  76. package/dist/{status-3GJXI4IK.js → status-4QGKLOP6.js} +4 -4
  77. package/dist/{summary-RPU2BS3Q.js → summary-6QNVQZJV.js} +1 -1
  78. package/dist/symphony-KQJ6HIXB.js +53 -0
  79. package/dist/symphony-VDNDFK7H.js +2 -0
  80. package/dist/symphony-relay-ASMKPDEE.js +3 -0
  81. package/dist/task-KFND4HLF.js +3 -0
  82. package/dist/task-loader-HBZ3KRH2.js +2 -0
  83. package/dist/task-loader-IO4UVFUD.js +2 -0
  84. package/dist/task-settlement-NF7PFSNE.js +3 -0
  85. package/dist/task-settlement-TATNPY6L.js +3 -0
  86. package/dist/team-6WNNLBAO.js +2 -0
  87. package/dist/thread-2A7QKU72.js +41 -0
  88. package/dist/tools-GDWT74O6.js +2 -0
  89. package/dist/tools-SDWAFQMQ.js +142 -0
  90. package/dist/validate-OZTX3FYX.js +13 -0
  91. package/dist/validate-RIMSY3RP.js +9 -0
  92. package/dist/{workspace-6POCBPDY.js → workspace-4D4TQ637.js} +1 -1
  93. package/package.json +1 -1
  94. package/dist/add-V6XR7DU5.js +0 -12
  95. package/dist/agent-loader-Z753DQWH.js +0 -2
  96. package/dist/ambient-QB7V4TBR.js +0 -6
  97. package/dist/captain-3COP6YTD.js +0 -2
  98. package/dist/chunk-4CGPLLWQ.js +0 -30
  99. package/dist/chunk-7SWEOPWF.js +0 -2
  100. package/dist/chunk-CHSU6LTR.js +0 -2
  101. package/dist/chunk-EKNLG73M.js +0 -6
  102. package/dist/chunk-H55W26AR.js +0 -3
  103. package/dist/chunk-HE2NA5QF.js +0 -8
  104. package/dist/chunk-JIXHEBGK.js +0 -7
  105. package/dist/chunk-MBPLJKE5.js +0 -3
  106. package/dist/chunk-OIYJUU6T.js +0 -25
  107. package/dist/chunk-QO7YPQXC.js +0 -2
  108. package/dist/chunk-XPPFILCM.js +0 -2
  109. package/dist/chunk-YCDOA5IQ.js +0 -18
  110. package/dist/lint-IGKE6UPS.js +0 -26
  111. package/dist/list-NC3QGT75.js +0 -12
  112. package/dist/lore-loader-HAZ5FRLP.js +0 -2
  113. package/dist/nomination-engine-ORHH4L2W.js +0 -2
  114. package/dist/orchestration-O2OVPTIZ.js +0 -2
  115. package/dist/quiz-TNV6APBM.js +0 -10
  116. package/dist/remember-MJRNTXYS.js +0 -14
  117. package/dist/session-work-log-FF7CKMWP.js +0 -2
  118. package/dist/status-ENAI35NL.js +0 -6
  119. package/dist/symphony-CFAYJGLF.js +0 -2
  120. package/dist/symphony-L56O5ZG3.js +0 -53
  121. package/dist/symphony-relay-Y2UR3YNR.js +0 -3
  122. package/dist/task-loader-H7HQAYGL.js +0 -2
  123. package/dist/task-loader-YZME4RKE.js +0 -2
  124. package/dist/task-settlement-HINBVZBE.js +0 -3
  125. package/dist/task-settlement-XC6E6JNT.js +0 -3
  126. package/dist/team-25LK6CWM.js +0 -2
  127. package/dist/thread-HFXK65D4.js +0 -41
  128. package/dist/tools-GAU5WOEI.js +0 -2
  129. package/dist/validate-IQG7DBFC.js +0 -9
  130. package/dist/validate-LSCDOLBO.js +0 -13
  131. package/dist/work-log-loader-CRVTOMVB.js +0 -2
@@ -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-HE2NA5QF.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-Y2UR3YNR.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-Y2UR3YNR.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,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-HE2NA5QF.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,2 +0,0 @@
1
- #!/usr/bin/env node
2
- export{b as assertTransition,g as completeTask,e as createTask,d as loadTask,c as loadTasks,a as normalizeTask,i as rebuildTaskIndex,h as shelveTask,f as updateTask}from'./chunk-XPPFILCM.js';import'./chunk-MBPLJKE5.js';import'./chunk-5TAVYPOV.js';
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- export{b as assertTransition,g as completeTask,e as createTask,d as loadTask,c as loadTasks,a as normalizeTask,i as rebuildTaskIndex,h as shelveTask,f as updateTask}from'./chunk-CHSU6LTR.js';import'./chunk-EK4ZRIFJ.js';import'./chunk-5TAVYPOV.js';
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- import {c,d as d$1}from'./chunk-CHSU6LTR.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-YZME4RKE.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-OW5M5LVN.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-YRHZZZUN.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-YZME4RKE.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};
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- import {c,d as d$1}from'./chunk-XPPFILCM.js';import {a}from'./chunk-MBPLJKE5.js';import'./chunk-5TAVYPOV.js';import*as d from'fs';import*as g from'path';var k=".paradigm/events/settlement-liveness.jsonl",w=30,v=new Set(["done","shelved","crashed"]);function L(t){return v.has(t)}function y(t){return L(t.status)||!!t.crashed_at}function E(t,e){try{let s=g.join(t,k);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 P(t){return Object.values(t).every(e=>e==="skipped"||e==="ok")}function _(){let t=process.env.PARADIGM_REAPER_STALE_MINUTES;return (t&&!Number.isNaN(Number(t))?Number(t):w)*60*1e3}async function T(t){let e=Date.now(),s=_(),a$1=[],l;try{l=await c(t,{status:"in-progress",limit:9999});}catch{return a$1}let{updateTask:i}=await import('./task-loader-H7HQAYGL.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 b(t,e,s){if(!e)return;try{await T(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(y))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-CRVTOMVB.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-QB7V4TBR.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-ORHH4L2W.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:P(i)};if(E(t,n),a$1)try{let{updateTask:c}=await import('./task-loader-H7HQAYGL.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{L as isTerminal,T as reapStaleInProgress,b as settleParentIfComplete};
@@ -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-W4BW7GXA.js';import'./chunk-EG22HDXI.js';import'./chunk-DLMDHS2X.js';import'./chunk-FYDRENK7.js';import'./chunk-ECLUYHAR.js';import'./chunk-TYWB5IQJ.js';import'./chunk-YXLGVOZO.js';import'./chunk-XPPFILCM.js';import'./chunk-Y4XFVDZC.js';import'./chunk-MBPLJKE5.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';
@@ -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};
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- export{b as registerTools}from'./chunk-RDWWSQGH.js';import'./chunk-ZUAUFZRJ.js';import'./chunk-YQK3XU63.js';import'./chunk-OIYJUU6T.js';import'./chunk-VPNJL4LS.js';import'./chunk-KP5VOYAH.js';import'./chunk-M4UMM6DC.js';import'./chunk-B5KLSBOZ.js';import'./chunk-4UJ4NIEQ.js';import'./chunk-HSY75GRR.js';import'./chunk-RVXQNS6K.js';import'./chunk-3KVVC4WV.js';import'./chunk-KAUGQMXU.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-CHSU6LTR.js';import'./chunk-EK4ZRIFJ.js';import'./chunk-JNSJVCTU.js';import'./chunk-ECO3LHCE.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};
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import'./chunk-5TAVYPOV.js';import*as s from'fs';import*as m from'path';import*as u from'js-yaml';var d=".paradigm/work-log";function p(a){let n=new Date().toISOString().slice(0,10),c=a.toLowerCase().replace(/[^a-z0-9-]/g,"-").slice(0,20),i=String(Math.floor(Math.random()*999)+1).padStart(3,"0");return `WL-${c}-${n}-${i}`}function k(a,o){return m.join(a,d,o)}function h(a,o){let n=new Date,c=n.toISOString().slice(0,10),i=p(o.agent),e={id:i,timestamp:n.toISOString(),...o},t=k(a,c);s.mkdirSync(t,{recursive:true});let r=m.join(t,`${i}.yaml`);return s.writeFileSync(r,u.dump(e,{lineWidth:120,noRefs:true}),"utf8"),e}function W(a,o){let n=m.join(a,d);if(!s.existsSync(n))return [];let c=[],i=s.readdirSync(n,{withFileTypes:true}).filter(t=>t.isDirectory()&&/^\d{4}-\d{2}-\d{2}$/.test(t.name)).map(t=>t.name).sort().reverse();for(let t of i){if(o?.dateFrom&&t<o.dateFrom||o?.dateTo&&t>o.dateTo)continue;let r=m.join(n,t),l=s.readdirSync(r).filter(g=>g.endsWith(".yaml"));for(let g of l)try{let y=s.readFileSync(m.join(r,g),"utf8"),f=u.load(y);f&&f.id&&c.push(f);}catch{}}let e=c;return o?.agent&&(e=e.filter(t=>t.agent===o.agent)),o?.outcome&&(e=e.filter(t=>t.outcome===o.outcome)),o?.task_ref&&(e=e.filter(t=>t.task_ref===o.task_ref)),o?.symbol&&(e=e.filter(t=>t.symbols_touched?.includes(o.symbol))),e.sort((t,r)=>r.timestamp.localeCompare(t.timestamp)),o?.limit&&(e=e.slice(0,o.limit)),e}function S(a,o){let n=m.join(a,d);if(!s.existsSync(n))return null;let c=o.match(/WL-[^-]+-(\d{4}-\d{2}-\d{2})-/);if(c){let e=m.join(n,c[1],`${o}.yaml`);if(s.existsSync(e)){let t=s.readFileSync(e,"utf8");return u.load(t)}}let i=s.readdirSync(n,{withFileTypes:true}).filter(e=>e.isDirectory());for(let e of i){let t=m.join(n,e.name,`${o}.yaml`);if(s.existsSync(t)){let r=s.readFileSync(t,"utf8");return u.load(r)}}return null}function L(a,o=7){let n=new Date;n.setDate(n.getDate()-o);let c=n.toISOString().slice(0,10),i=W(a,{dateFrom:c}),e={pass:0,fail:0,partial:0,blocked:0},t={};for(let r of i)e[r.outcome]=(e[r.outcome]||0)+1,t[r.agent]=(t[r.agent]||0)+1;return {total:i.length,byOutcome:e,byAgent:t,recentEntries:i.slice(0,10).map(r=>({id:r.id,agent:r.agent,summary:r.summary,outcome:r.outcome,timestamp:r.timestamp}))}}export{L as getWorkLogSummary,W as loadWorkLogEntries,S as loadWorkLogEntry,h as recordWorkLog};