@a-company/paradigm 7.1.0 → 7.3.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 (167) hide show
  1. package/dist/{accept-orchestration-WMGFGYDK.js → accept-orchestration-JA3A3TSU.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/calibrate-SH6PRZFD.js +2 -0
  9. package/dist/calibration-aggregate-5IVXSBDP.js +2 -0
  10. package/dist/calibration-aggregate-DUEE3LL2.js +4 -0
  11. package/dist/captain-ILBN2IKJ.js +2 -0
  12. package/dist/captain-J4FZ5PRU.js +2 -0
  13. package/dist/{chunk-QDP4G53M.js → chunk-27EK3OQZ.js} +4 -4
  14. package/dist/{chunk-KP5VOYAH.js → chunk-3F4QP2Z5.js} +1 -1
  15. package/dist/{chunk-VPNJL4LS.js → chunk-5VR7FKS5.js} +1 -1
  16. package/dist/{chunk-S3UVQ5RV.js → chunk-6VZSOQ7Y.js} +1 -1
  17. package/dist/chunk-7BZPDOOQ.js +25 -0
  18. package/dist/{chunk-YQK3XU63.js → chunk-7HUPVOAY.js} +12 -12
  19. package/dist/chunk-A5EEY6NO.js +3 -0
  20. package/dist/{chunk-4GC35IFF.js → chunk-D6BSCELB.js} +1 -1
  21. package/dist/{chunk-G6DK3ND3.js → chunk-DH7QVZDI.js} +9 -0
  22. package/dist/chunk-FG3M6VVO.js +30 -0
  23. package/dist/chunk-FNYYQNJY.js +2 -0
  24. package/dist/{chunk-RDWWSQGH.js → chunk-IBKCMLOW.js} +14 -14
  25. package/dist/chunk-K6TLYNRQ.js +7 -0
  26. package/dist/{chunk-W4BW7GXA.js → chunk-KA6QEI3C.js} +1 -1
  27. package/dist/chunk-L3AOKDMU.js +93 -0
  28. package/dist/chunk-M7JHVVDW.js +6 -0
  29. package/dist/chunk-MBKTVQS2.js +2 -0
  30. package/dist/chunk-NFN5UUJB.js +2 -0
  31. package/dist/chunk-O4ADSTSY.js +504 -0
  32. package/dist/chunk-RPGSQQTS.js +2 -0
  33. package/dist/chunk-RQHZUPLO.js +4 -0
  34. package/dist/chunk-SD3KVW5Q.js +2 -0
  35. package/dist/chunk-VKVVIN6J.js +25 -0
  36. package/dist/chunk-VOPJ47QY.js +2 -0
  37. package/dist/chunk-VR2LLUYE.js +17 -0
  38. package/dist/chunk-WMTES556.js +2 -0
  39. package/dist/chunk-XBK244QR.js +6 -0
  40. package/dist/{chunk-MBSY57RN.js → chunk-Y76OIMDO.js} +1 -1
  41. package/dist/{chunk-EG22HDXI.js → chunk-YNFF7XHV.js} +12 -12
  42. package/dist/chunk-YYRP7FLC.js +2 -0
  43. package/dist/{compliance-4P3EE5OA.js → compliance-3M6COUCO.js} +3 -3
  44. package/dist/{constellation-RHZAEFV7.js → constellation-TIKNCZWR.js} +1 -1
  45. package/dist/{cost-24UZSS2P.js → cost-VTHZQKO4.js} +2 -2
  46. package/dist/{diff-VBVIUNL5.js → diff-NZSJW3V3.js} +1 -1
  47. package/dist/dist-6TDAY6TQ-HMSTBL57.js +39 -0
  48. package/dist/{dist-TNE4GFT7.js → dist-PW5YPGFF.js} +1 -1
  49. package/dist/{docs-NTP6UENF.js → docs-DWU3T2BV.js} +1 -1
  50. package/dist/github-GI3HX3N5.js +4 -0
  51. package/dist/{habits-BX2IRSUI.js → habits-UA7YT3CG.js} +3 -3
  52. package/dist/{hooks-AXBWYJ5V.js → hooks-XXJ7CSGJ.js} +1 -1
  53. package/dist/index.js +9 -9
  54. package/dist/{init-F4MSKZIW.js → init-QPMLEQWQ.js} +1 -1
  55. package/dist/{integrity-7TKX3DZ4.js → integrity-FRGF5BFS.js} +1 -1
  56. package/dist/lint-Y4P3MHBV.js +26 -0
  57. package/dist/list-5XRLWD7K.js +12 -0
  58. package/dist/mcp.js +1 -1
  59. package/dist/{migrate-5M4KUQ2L.js → migrate-LIVXILOO.js} +1 -1
  60. package/dist/nomination-engine-EFXDEPZN.js +2 -0
  61. package/dist/{orchestrate-MLUGQOEJ.js → orchestrate-C7SI4J7C.js} +1 -1
  62. package/dist/orchestration-4MJKBSGM.js +2 -0
  63. package/dist/orchestration-S2ESNKSA.js +2 -0
  64. package/dist/platform-server-IOWHNS7Q.js +25 -0
  65. package/dist/{probe-27ARJKRO.js → probe-G3TKOJYW.js} +1 -1
  66. package/dist/quiz-QKIKAVL7.js +10 -0
  67. package/dist/registry-NEW4OJ44.js +2 -0
  68. package/dist/{reindex-ZLDQBFUR.js → reindex-G2JLIGOQ.js} +1 -1
  69. package/dist/reindex-JR3PXYQE.js +2 -0
  70. package/dist/remember-KZYAY77S.js +14 -0
  71. package/dist/{review-BRO2UP4M.js → review-WHRNLW2W.js} +1 -1
  72. package/dist/{ripple-KCVDS3WE.js → ripple-B6U7263T.js} +1 -1
  73. package/dist/{sentinel-EFPEX246.js → sentinel-RIEQWALQ.js} +1 -1
  74. package/dist/{sentinel-bridge-UR2MKARY.js → sentinel-bridge-D4LFDFCH.js} +1 -1
  75. package/dist/{serve-2PKJP65E.js → serve-6RNZYK2I.js} +2 -2
  76. package/dist/serve-PWAFVYYC.js +9 -0
  77. package/dist/{server-4D77LCST.js → server-K7G3IHR3.js} +1 -1
  78. package/dist/{setup-5V2AGLQ6.js → setup-L5OP24US.js} +3 -3
  79. package/dist/{shift-PM4GI736.js → shift-HGXZ5THV.js} +3 -3
  80. package/dist/{show-N5LGB5B2.js → show-VXNGIJE4.js} +3 -3
  81. package/dist/{snapshot-YMX5QRBM.js → snapshot-MT5L6XE4.js} +1 -1
  82. package/dist/status-45KIG32R.js +6 -0
  83. package/dist/{status-3GJXI4IK.js → status-4QGKLOP6.js} +4 -4
  84. package/dist/{summary-RPU2BS3Q.js → summary-6QNVQZJV.js} +1 -1
  85. package/dist/symphony-KQJ6HIXB.js +53 -0
  86. package/dist/symphony-VDNDFK7H.js +2 -0
  87. package/dist/symphony-relay-ASMKPDEE.js +3 -0
  88. package/dist/sync-layer-C2PF273N.js +2 -0
  89. package/dist/task-PRLQ4VPK.js +3 -0
  90. package/dist/task-loader-EIXPKHA3.js +2 -0
  91. package/dist/task-loader-LFEE6OU7.js +2 -0
  92. package/dist/task-settlement-A2T6EACG.js +3 -0
  93. package/dist/task-settlement-ZXOY4YGX.js +3 -0
  94. package/dist/team-KP4HMUB5.js +2 -0
  95. package/dist/thread-2A7QKU72.js +41 -0
  96. package/dist/tools-NOMEIBS7.js +2 -0
  97. package/dist/tools-YW3Q27UI.js +142 -0
  98. package/dist/validate-OZTX3FYX.js +13 -0
  99. package/dist/validate-RIMSY3RP.js +9 -0
  100. package/dist/{workspace-6POCBPDY.js → workspace-4D4TQ637.js} +1 -1
  101. package/package.json +2 -6
  102. package/platform-ui/dist/assets/{AmbientSection-CwatqcBD.js → AmbientSection-xoxr3DQg.js} +1 -1
  103. package/platform-ui/dist/assets/{DocsSection-BZ2SFJBZ.js → DocsSection-Us2qksna.js} +1 -1
  104. package/platform-ui/dist/assets/{GitSection-MNNYU1tO.js → GitSection-DIHZyadf.js} +1 -1
  105. package/platform-ui/dist/assets/{GraphSection-COYjb4Pt.js → GraphSection-9TO0L1IO.js} +1 -1
  106. package/platform-ui/dist/assets/{LoreSection-B0hUbfsJ.js → LoreSection-DVDit8Aw.js} +1 -1
  107. package/platform-ui/dist/assets/{SentinelSection-BCxW1DCp.js → SentinelSection-a5_VNYcx.js} +1 -1
  108. package/platform-ui/dist/assets/{SymphonySection-BsucZRqy.js → SymphonySection-cRHEoJ9t.js} +1 -1
  109. package/platform-ui/dist/assets/TasksSection-44_gDO3L.css +1 -0
  110. package/platform-ui/dist/assets/TasksSection-h8x3qRIj.js +1 -0
  111. package/platform-ui/dist/assets/{TeamSection-C0QNTudW.js → TeamSection-mFoDyNic.js} +1 -1
  112. package/platform-ui/dist/assets/{UniversitySection-DN1-g9pw.js → UniversitySection-D99YRjmC.js} +1 -1
  113. package/platform-ui/dist/assets/{index-DwUT8pju.js → index-D_wB2S_2.js} +11 -11
  114. package/platform-ui/dist/index.html +1 -1
  115. package/dist/add-V6XR7DU5.js +0 -12
  116. package/dist/agent-loader-Z753DQWH.js +0 -2
  117. package/dist/ambient-QB7V4TBR.js +0 -6
  118. package/dist/calibrate-PHVP7RPH.js +0 -4
  119. package/dist/captain-3COP6YTD.js +0 -2
  120. package/dist/chunk-4CGPLLWQ.js +0 -30
  121. package/dist/chunk-7SWEOPWF.js +0 -2
  122. package/dist/chunk-CHSU6LTR.js +0 -2
  123. package/dist/chunk-EKNLG73M.js +0 -6
  124. package/dist/chunk-H55W26AR.js +0 -3
  125. package/dist/chunk-HE2NA5QF.js +0 -8
  126. package/dist/chunk-JIXHEBGK.js +0 -7
  127. package/dist/chunk-MBPLJKE5.js +0 -3
  128. package/dist/chunk-OIYJUU6T.js +0 -25
  129. package/dist/chunk-QO7YPQXC.js +0 -2
  130. package/dist/chunk-XMAV5AG6.js +0 -2
  131. package/dist/chunk-XPPFILCM.js +0 -2
  132. package/dist/chunk-YCDOA5IQ.js +0 -18
  133. package/dist/dist-GQ42YS5N-4HIJZVBB.js +0 -39
  134. package/dist/lint-IGKE6UPS.js +0 -26
  135. package/dist/list-NC3QGT75.js +0 -12
  136. package/dist/lore-loader-HAZ5FRLP.js +0 -2
  137. package/dist/lore-server-FC2GMDLT.js +0 -14
  138. package/dist/nomination-engine-ORHH4L2W.js +0 -2
  139. package/dist/orchestration-O2OVPTIZ.js +0 -2
  140. package/dist/platform-server-Y6TLEXR2.js +0 -25
  141. package/dist/quiz-TNV6APBM.js +0 -10
  142. package/dist/remember-MJRNTXYS.js +0 -14
  143. package/dist/serve-L52ZUTU6.js +0 -10
  144. package/dist/serve-XZ6GBUS3.js +0 -8
  145. package/dist/session-work-log-FF7CKMWP.js +0 -2
  146. package/dist/status-ENAI35NL.js +0 -6
  147. package/dist/symphony-CFAYJGLF.js +0 -2
  148. package/dist/symphony-L56O5ZG3.js +0 -53
  149. package/dist/symphony-relay-Y2UR3YNR.js +0 -3
  150. package/dist/task-loader-H7HQAYGL.js +0 -2
  151. package/dist/task-loader-YZME4RKE.js +0 -2
  152. package/dist/task-settlement-HINBVZBE.js +0 -3
  153. package/dist/task-settlement-XC6E6JNT.js +0 -3
  154. package/dist/team-25LK6CWM.js +0 -2
  155. package/dist/thread-HFXK65D4.js +0 -41
  156. package/dist/tools-GAU5WOEI.js +0 -2
  157. package/dist/validate-IQG7DBFC.js +0 -9
  158. package/dist/validate-LSCDOLBO.js +0 -13
  159. package/dist/work-log-loader-CRVTOMVB.js +0 -2
  160. package/graph-ui/dist/assets/index-BlgXTl53.css +0 -1
  161. package/graph-ui/dist/assets/index-Bq5nXK8p.js +0 -63
  162. package/graph-ui/dist/index.html +0 -13
  163. package/lore-ui/dist/assets/index-C3EixkjW.css +0 -1
  164. package/lore-ui/dist/assets/index-DKhNxgtW.js +0 -56
  165. package/lore-ui/dist/index.html +0 -13
  166. package/platform-ui/dist/assets/CanvasSection-dFAthehN.js +0 -9
  167. package/platform-ui/dist/assets/CanvasSection-flMXU19z.css +0 -1
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import {D}from'./chunk-OIYJUU6T.js';import {O}from'./chunk-KP5VOYAH.js';import {z as z$1,b as b$1,c}from'./chunk-KAFQA7HV.js';import {b,a}from'./chunk-EK4ZRIFJ.js';import*as E from'fs';import*as ne from'os';import*as M from'path';import*as G from'js-yaml';z$1();b();var le=/[@#$%^!?&~][a-zA-Z0-9_-]+/g;var B={architect:"tier-1",ftux:"tier-1",scholar:"tier-1",security:"tier-1",advocate:"tier-1",product:"tier-1",operations:"tier-1",sales:"tier-1",legal:"tier-1",ethicist:"tier-1",futurist:"tier-1",cartographer:"tier-1",cid:"tier-1","agent-evaluator":"tier-1","data-model":"tier-1",domain:"tier-1",regulatory:"tier-1",compliance:"tier-2",reviewer:"tier-2",designer:"tier-2",copywriter:"tier-2",researcher:"tier-2",analyst:"tier-2",dx:"tier-2",qa:"tier-2",debugger:"tier-2",performance:"tier-2",creative:"tier-2",pm:"tier-2",narrator:"tier-2",e2e:"tier-2",educator:"tier-2",community:"tier-2","content-intel":"tier-2",ai:"tier-2",mediator:"tier-2",presenter:"tier-2",mentor:"tier-2",trainer:"tier-2",a11y:"tier-2",seo:"tier-2",swift:"tier-2",forms:"tier-2",geo:"tier-2",builder:"tier-3",tester:"tier-3",documentor:"tier-3",sysadmin:"tier-3",archivist:"tier-3",release:"tier-3",devops:"tier-3",dba:"tier-3",dataeng:"tier-3",integrator:"tier-3",network:"tier-3",streaming:"tier-3",mobile:"tier-3",gamedev:"tier-3","3d":"tier-3",i18n:"tier-3",translator:"tier-3",forge:"tier-3",secretary:"tier-3",reverser:"tier-3",audio:"tier-3",finance:"tier-3",offline:"tier-3","report-gen":"tier-3"},z={"tier-1":"opus","tier-2":"sonnet","tier-3":"haiku"};function se(a,e,t){try{let k=M.join(e,".paradigm","config.yaml");if(E.existsSync(k)){let n=G.load(E.readFileSync(k,"utf8"))?.["model-resolution"];if(n){let d=t?.modelTier||B[a]||"tier-2";if(n[d])return n[d]}}}catch{}if(t?.defaultModel)return t.defaultModel;let c=B[a]||"tier-2";return z[c]||"sonnet"}var de={architect:{min:5e3,max:2e4},ftux:{min:4e3,max:18e3},security:{min:3e3,max:15e3},reviewer:{min:2e3,max:1e4},builder:{min:1e4,max:5e4},tester:{min:5e3,max:2e4},cartographer:{min:1e3,max:5e3}};function ue(a$1){try{let e=M.join(a$1,".paradigm","learned","token-estimates.json");if(!E.existsSync(e))return {};let t=JSON.parse(E.readFileSync(e,"utf8"));return !t||typeof t!="object"||Array.isArray(t)?{}:t}catch(e){return a.component("#calibration").warn("learned token table load failed; using constant prior",{error:e instanceof Error?e.message:String(e)}),{}}}function pe(a,e,t){if(t){let c=a[e]?.[t];if(c&&typeof c.min=="number"&&typeof c.max=="number")return {min:c.min,max:c.max}}return de[e]||{min:5e3,max:2e4}}var U={architect:`You are the ARCHITECT agent.
2
+ import {D as D$1}from'./chunk-VKVVIN6J.js';import {O}from'./chunk-3F4QP2Z5.js';import {z,b as b$1,c}from'./chunk-KAFQA7HV.js';import {b,a}from'./chunk-EK4ZRIFJ.js';import*as D from'fs';import*as ie from'os';import*as Y from'path';import*as H from'js-yaml';z();b();var me=/[@#$%^!?&~][a-zA-Z0-9_-]+/g;var G={architect:"tier-1",ftux:"tier-1",scholar:"tier-1",security:"tier-1",advocate:"tier-1",product:"tier-1",operations:"tier-1",sales:"tier-1",legal:"tier-1",ethicist:"tier-1",futurist:"tier-1",cartographer:"tier-1",cid:"tier-1","agent-evaluator":"tier-1","data-model":"tier-1",domain:"tier-1",regulatory:"tier-1",compliance:"tier-2",reviewer:"tier-2",designer:"tier-2",copywriter:"tier-2",researcher:"tier-2",analyst:"tier-2",dx:"tier-2",qa:"tier-2",debugger:"tier-2",performance:"tier-2",creative:"tier-2",pm:"tier-2",narrator:"tier-2",e2e:"tier-2",educator:"tier-2",community:"tier-2","content-intel":"tier-2",ai:"tier-2",mediator:"tier-2",presenter:"tier-2",mentor:"tier-2",trainer:"tier-2",a11y:"tier-2",seo:"tier-2",swift:"tier-2",forms:"tier-2",geo:"tier-2",builder:"tier-3",tester:"tier-3",documentor:"tier-3",sysadmin:"tier-3",archivist:"tier-3",release:"tier-3",devops:"tier-3",dba:"tier-3",dataeng:"tier-3",integrator:"tier-3",network:"tier-3",streaming:"tier-3",mobile:"tier-3",gamedev:"tier-3","3d":"tier-3",i18n:"tier-3",translator:"tier-3",forge:"tier-3",secretary:"tier-3",reverser:"tier-3",audio:"tier-3",finance:"tier-3",offline:"tier-3","report-gen":"tier-3"},J={"tier-1":"opus","tier-2":"sonnet","tier-3":"haiku"};function oe(r,e,t){try{let f=Y.join(e,".paradigm","config.yaml");if(D.existsSync(f)){let n=H.load(D.readFileSync(f,"utf8"))?.["model-resolution"];if(n){let l=t?.modelTier||G[r]||"tier-2";if(n[l])return n[l]}}}catch{}if(t?.defaultModel)return t.defaultModel;let c=G[r]||"tier-2";return J[c]||"sonnet"}var re={architect:{min:5e3,max:2e4},ftux:{min:4e3,max:18e3},security:{min:3e3,max:15e3},reviewer:{min:2e3,max:1e4},builder:{min:1e4,max:5e4},tester:{min:5e3,max:2e4},cartographer:{min:1e3,max:5e3}},B=null;function ae(r){try{let e=Y.join(r,".paradigm","learned","token-estimates.json"),t;try{t=D.statSync(e);}catch{return {}}if(B&&B.path===e&&B.mtimeMs===t.mtimeMs)return B.table;let c=JSON.parse(D.readFileSync(e,"utf8"));return !c||typeof c!="object"||Array.isArray(c)?{}:(B={path:e,mtimeMs:t.mtimeMs,table:c},c)}catch(e){return a.component("#calibration").warn("learned token table load failed; using constant prior",{error:e instanceof Error?e.message:String(e)}),{}}}function ee(r,e,t){if(t){let f=r[e]?.[t];if(f&&typeof f.min=="number"&&typeof f.max=="number")return {min:f.min,max:f.max,n:typeof f.n=="number"?f.n:0,source:"learned"}}let c=re[e]||{min:5e3,max:2e4};return {min:c.min,max:c.max,n:0,source:"prior"}}function Le(r,e,t){let c=e.claimant?.kind==="archetype"?e.claimant.ref:t||"builder",f=de(e.blurb).type;return ee(r,c,f)}var he=["feature","bugfix","refactor","design","analysis","research","documentation","audit"];function Be(r){let e=ae(r),t=Array.from(new Set([...Object.keys(re),...Object.keys(e)])).sort(),c=Array.from(new Set([...he,...Object.values(e).flatMap(l=>Object.keys(l))])).sort(),f={},p=0,n=0;for(let l of t){f[l]={};for(let o of c){let s=ee(e,l,o);f[l][o]=s,n++,s.source==="learned"&&p++;}}return {archetypes:t,taskTypes:c,cells:f,coverage:{graduated:p,total:n,pct:n?Math.round(p/n*100):0}}}var U={architect:`You are the ARCHITECT agent.
3
3
 
4
4
  ## Your Role
5
5
  You design system architecture, write specifications, and plan features.
@@ -447,10 +447,10 @@ code, and never modify .purpose files or portal.yaml.
447
447
  - Block a build or deployment because of architectural drift
448
448
  - Write source code
449
449
  - Modify .purpose files, portal.yaml, or arch.yaml directly
450
- - Produce lengthy analysis \u2014 be sharp, summarize, and hand off`};function We(){return [{name:"paradigm_orchestrate_inline",description:`REQUIRED before implementing features. Start with mode="quick" for fast pre-check, or mode="plan" for full orchestration planning.
450
+ - Produce lengthy analysis \u2014 be sharp, summarize, and hand off`};function Ge(){return [{name:"paradigm_orchestrate_inline",description:`REQUIRED before implementing features. Start with mode="quick" for fast pre-check, or mode="plan" for full orchestration planning.
451
451
 
452
452
  Plans and coordinates multi-agent task execution within the same session.
453
- - mode: "quick" - Lightweight pre-implementation check (~3-4k tokens). Jinx (advocate) stress-tests assumptions, reviewer checks feasibility. Returns greenlight or escalates to full orchestration. Satisfies enforcement.
453
+ - mode: "quick" - Lightweight pre-implementation check (~3-4k tokens). Jinx (advocate) stress-tests assumptions, reviewer checks feasibility. Returns greenlight or escalates to full orchestration. NOTE: quick is a pre-check only \u2014 it does NOT satisfy orchestration-required enforcement. Enforcement is satisfied by a COMPLETED run (verdicts > 0 \u2014 a settled task DAG or a debrief with real agent verdicts) or by declaring \`paradigm solo\`.
454
454
  - mode: "plan" - See suggested agents, estimated tokens, and get orchestration plan
455
455
  - mode: "execute" - Get full prompts and execution strategy for any IDE
456
456
 
@@ -462,7 +462,7 @@ After getting prompts, launch agents using the Task tool. Stages marked canRunPa
462
462
  The active mode is set via \`orchestration.default_mode\` in agents.yaml (defaults to "faceted").
463
463
 
464
464
  When to use this tool:
465
- - mode="quick": Before any implementation \u2014 fast sanity check that satisfies orchestration-required enforcement
465
+ - mode="quick": Before any implementation \u2014 fast sanity check (does NOT satisfy enforcement; a completed run with verdicts>0 or \`paradigm solo\` does)
466
466
  - mode="plan": Task affects 3+ files, involves security, or mentions multiple symbols
467
467
  - mode="execute": Ready to implement, need full agent prompts
468
468
 
@@ -470,17 +470,17 @@ Examples:
470
470
  - "Fix the login bug" \u2192 quick (greenlight or escalate)
471
471
  - "Add user authentication with JWT" \u2192 plan \u2192 architect + security + builder + tester
472
472
  - "Should I use soft delete or hard delete?" \u2192 plan \u2192 architect only (analysis)
473
- - "Refactor the payment module" \u2192 plan \u2192 architect + builder`,inputSchema:{type:"object",properties:{task:{type:"string",description:'The task to orchestrate (e.g., "Build @payment-system with Stripe integration")'},mode:{type:"string",enum:["quick","plan","execute"],description:'Mode: "quick" for lightweight pre-check (advocate + reviewer), "plan" returns suggested agents and plan, "execute" returns prompts ready for Task tool'},agents:{type:"array",items:{type:"string"},description:'Optional: Override which agents to use (e.g., ["architect", "builder"])'}},required:["task"]},annotations:{readOnlyHint:true,destructiveHint:false},aliases:["plan","coordinate","team","multi-agent","orchestrate","agents","spawn agents"]},{name:"paradigm_agent_prompt",description:"Get the complete prompt for a specific agent to execute a task. Use this when you need to spawn an agent via the Task tool with full context.",inputSchema:{type:"object",properties:{agent:{type:"string",enum:["advocate","architect","builder","cartographer","compliance","ftux","scholar","swift","tester","reviewer","security","documentor"],description:"The agent role to get prompt for"},task:{type:"string",description:"The specific task for this agent"},handoffContext:{type:"string",description:"Optional: Context passed from a previous agent"},previousAgent:{type:"string",description:"Optional: Name of the agent that handed off"}},required:["agent","task"]},annotations:{readOnlyHint:true,destructiveHint:false}}]}async function Fe(a,e,t){return a==="paradigm_orchestrate_inline"?ge(e,t):a==="paradigm_agent_prompt"?he(e,t):{handled:false,text:""}}async function ge(a,e){let t=a.task,c$1=a.mode||"execute",k=a.agents;try{let m=M.join(e.rootDir,".paradigm",".orchestrated");E.writeFileSync(m,new Date().toISOString(),"utf8");}catch{}try{let m=M.join(e.rootDir,".paradigm","events");E.existsSync(m)||E.mkdirSync(m,{recursive:!0}),E.appendFileSync(M.join(m,"team-funnel.jsonl"),JSON.stringify({timestamp:new Date().toISOString(),type:"orchestrated",source:"orchestrate_inline",mode:c$1})+`
474
- `,"utf8");}catch{}let g=re(e.rootDir);if(!g){let m=JSON.stringify({error:"No agents.yaml found",suggestion:"Run `paradigm team init` to set up multi-agent orchestration"},null,2);return O(m.length,"paradigm_orchestrate_inline"),{handled:true,text:m}}let n=b$1(e.rootDir);if(n&&g.agents){let m={};for(let[h,u]of Object.entries(g.agents))n.includes(h)&&(m[h]=u);g.agents=m;}let d=H(t),o=[];try{let{processPendingEvents:m,loadNominations:h}=await import('./nomination-engine-YRHZZZUN.js');m(e.rootDir),o=h(e.rootDir,{pending_only:!0,limit:10}).filter(l=>l.urgency==="high"||l.urgency==="critical").map(l=>({agent:l.agent,urgency:l.urgency,brief:l.brief}));}catch{}let s=Ee(t);if(c$1==="quick")return me(t,d,s,o,g,e);let i=ye(t,g.agents,k,s,g.orchestration,e.rootDir);if(c$1==="plan"){let m=Ce(t,g.agents),h=Oe(i,s),u;try{let{loadNotebookEntries:S}=await import('./notebook-loader-TZVIMNDJ.js'),v=d.map(D=>D.replace(/^[#$^!~@&%?]/,"").toLowerCase()),I={},x=new Set;for(let D of i.stages)for(let P of D.agents){if(x.has(P.name))continue;x.add(P.name);let j=S(P.name,e.rootDir),Y=v.length>0?S(P.name,e.rootDir,{concepts:v}):j;j.length>0&&(I[P.name]={totalEntries:j.length,relevantEntries:Y.length});}Object.keys(I).length>0&&(u=I);}catch{}let l=i.stages.flatMap(S=>S.agents.map(v=>v.name)),w=ie(l,g.agents),T=w.length>0?{edges:w,note:"Shows which agents hand off to which based on agents.yaml handoff_to. Stage ordering was derived from this graph."}:void 0,_=JSON.stringify({task:t,mode:"plan",classification:{type:s.type,confidence:s.confidence,...s.alternativeType?{alternativeType:s.alternativeType}:{},overrideHint:s.overrideHint,complexity:s.complexity,securityRequired:s.securityRequired,costMultiplier:s.costMultiplier},plan:i,suggestedAgents:m,costPreview:h,...T?{collaborationGraph:T}:{},...u?{notebookKnowledge:u,notebookNote:"Agents with relevant notebook entries will have curated knowledge injected into their prompts during execute mode."}:{},...o.length>0?{activeNominations:o,nominationNote:`${o.length} high-urgency agent nomination(s) pending. These agents have been flagged by the system for attention on this project.`}:{},instructions:["Review task classification and cost preview above","Review suggested agents based on task triggers",...T?["Review collaboration graph \u2014 stage ordering was derived from agent handoff_to edges"]:[],...u?["Review notebook knowledge \u2014 agents with relevant entries will receive curated snippets in execute mode"]:[],...o.length>0?["Review active nominations \u2014 agents flagged by the system may need to be included"]:[],'Call again with mode="execute" to get full prompts and execution strategy',"Stages marked canRunParallel: true can be launched simultaneously","After each agent completes, pass handoff context to the next stage"]},null,2);return O(_.length,"paradigm_orchestrate_inline"),{handled:true,text:_}}let y=new Map;try{let{loadAgentProfile:m,buildProfileEnrichment:h}=await import('./agent-loader-W3RQJVW7.js'),{loadDecisions:u}=await import('./decision-loader-HELL2AMX.js'),{loadJournalEntries:l}=await import('./journal-loader-CNNA4EAU.js'),{loadNominations:w}=await import('./nomination-engine-YRHZZZUN.js'),{loadAgentState:T}=await import('./agent-state-KSQ3S7OB.js'),{loadNotebookEntries:_}=await import('./notebook-loader-TZVIMNDJ.js'),S=u(e.rootDir,{status:"active",limit:5}).map(x=>({title:x.title,decision:x.decision.slice(0,150)})),v=w(e.rootDir,{pending_only:!0,limit:10}).map(x=>({urgency:x.urgency,brief:x.brief})),I=d.map(x=>x.replace(/^[#$^!~@&%?]/,"").toLowerCase());for(let x of i.stages)for(let D of x.agents)if(!y.has(D.name)){let P=m(e.rootDir,D.name);if(P){if(!c(D.name,e.rootDir))continue;let j=l(D.name,{transferable:!0,limit:5}).map(N=>({trigger:N.trigger,insight:N.insight.slice(0,150)})),Y=T(D.name,e.rootDir),K;try{let N=_(D.name,e.rootDir,I.length>0?{concepts:I}:void 0);if(N.length>0){let J=N.sort(($,W)=>W.confidence-$.confidence||new Date(W.updated).getTime()-new Date($.updated).getTime()).slice(0,5);K=J.map($=>({context:$.context,snippet:$.snippet,concepts:$.concepts}));try{let{recordNotebookReference:$}=await import('./session-work-log-T2IE4Y4T.js');$(e.rootDir,D.name,J.map(W=>W.id));}catch{}try{let{incrementApplied:$}=await import('./notebook-loader-TZVIMNDJ.js');for(let W of J)$(D.name,W.id,e.rootDir);}catch{}}}catch{}let L=h(P,d,K,{recentDecisions:S,journalInsights:j,pendingNominations:v},Y?{lastSession:Y.lastSession,pendingWork:Y.pendingWork,recentPatterns:Y.recentPatterns,sessionsOnProject:Y.sessionsOnProject}:void 0);if(P.permissions){let N=[`
473
+ - "Refactor the payment module" \u2192 plan \u2192 architect + builder`,inputSchema:{type:"object",properties:{task:{type:"string",description:'The task to orchestrate (e.g., "Build @payment-system with Stripe integration")'},mode:{type:"string",enum:["quick","plan","execute"],description:'Mode: "quick" for lightweight pre-check (advocate + reviewer), "plan" returns suggested agents and plan, "execute" returns prompts ready for Task tool'},agents:{type:"array",items:{type:"string"},description:'Optional: Override which agents to use (e.g., ["architect", "builder"])'}},required:["task"]},annotations:{readOnlyHint:true,destructiveHint:false},aliases:["plan","coordinate","team","multi-agent","orchestrate","agents","spawn agents"]},{name:"paradigm_agent_prompt",description:"Get the complete prompt for a specific agent to execute a task. Use this when you need to spawn an agent via the Task tool with full context.",inputSchema:{type:"object",properties:{agent:{type:"string",enum:["advocate","architect","builder","cartographer","compliance","ftux","scholar","swift","tester","reviewer","security","documentor"],description:"The agent role to get prompt for"},task:{type:"string",description:"The specific task for this agent"},handoffContext:{type:"string",description:"Optional: Context passed from a previous agent"},previousAgent:{type:"string",description:"Optional: Name of the agent that handed off"}},required:["agent","task"]},annotations:{readOnlyHint:true,destructiveHint:false}}]}async function Ue(r,e,t){return r==="paradigm_orchestrate_inline"?fe(e,t):r==="paradigm_agent_prompt"?be(e,t):{handled:false,text:""}}async function fe(r,e){let t=r.task,c$1=r.mode||"execute",f=r.agents;try{let h=Y.join(e.rootDir,".paradigm","events");D.existsSync(h)||D.mkdirSync(h,{recursive:!0}),D.appendFileSync(Y.join(h,"team-funnel.jsonl"),JSON.stringify({timestamp:new Date().toISOString(),type:"orchestrated",source:"orchestrate_inline",mode:c$1})+`
474
+ `,"utf8");}catch{}let p=ue(e.rootDir);if(!p){let h=JSON.stringify({error:"No agents.yaml found",suggestion:"Run `paradigm team init` to set up multi-agent orchestration"},null,2);return O(h.length,"paradigm_orchestrate_inline"),{handled:true,text:h}}let n=b$1(e.rootDir);if(n&&p.agents){let h={};for(let[m,u]of Object.entries(p.agents))n.includes(m)&&(h[m]=u);p.agents=h;}let l=K(t),o=[];try{let{processPendingEvents:h,loadNominations:m}=await import('./nomination-engine-YRHZZZUN.js');h(e.rootDir),o=m(e.rootDir,{pending_only:!0,limit:10}).filter(d=>d.urgency==="high"||d.urgency==="critical").map(d=>({agent:d.agent,urgency:d.urgency,brief:d.brief}));}catch{}let s=de(t);if(c$1==="quick")return ye(t,l,s,o,p,e);let i=ke(t,p.agents,f,s,p.orchestration,e.rootDir);if(c$1==="plan"){let h=Ie(t,p.agents),m=Me(i,s),u;try{let{loadNotebookEntries:S}=await import('./notebook-loader-TZVIMNDJ.js'),v=l.map(E=>E.replace(/^[#$^!~@&%?]/,"").toLowerCase()),M={},_=new Set;for(let E of i.stages)for(let P of E.agents){if(_.has(P.name))continue;_.add(P.name);let j=S(P.name,e.rootDir),I=v.length>0?S(P.name,e.rootDir,{concepts:v}):j;j.length>0&&(M[P.name]={totalEntries:j.length,relevantEntries:I.length});}Object.keys(M).length>0&&(u=M);}catch{}let d=i.stages.flatMap(S=>S.agents.map(v=>v.name)),k=ce(d,p.agents),R=k.length>0?{edges:k,note:"Shows which agents hand off to which based on agents.yaml handoff_to. Stage ordering was derived from this graph."}:void 0,x=JSON.stringify({task:t,mode:"plan",classification:{type:s.type,confidence:s.confidence,...s.alternativeType?{alternativeType:s.alternativeType}:{},overrideHint:s.overrideHint,complexity:s.complexity,securityRequired:s.securityRequired,costMultiplier:s.costMultiplier},plan:i,suggestedAgents:h,costPreview:m,...R?{collaborationGraph:R}:{},...u?{notebookKnowledge:u,notebookNote:"Agents with relevant notebook entries will have curated knowledge injected into their prompts during execute mode."}:{},...o.length>0?{activeNominations:o,nominationNote:`${o.length} high-urgency agent nomination(s) pending. These agents have been flagged by the system for attention on this project.`}:{},instructions:["Review task classification and cost preview above","Review suggested agents based on task triggers",...R?["Review collaboration graph \u2014 stage ordering was derived from agent handoff_to edges"]:[],...u?["Review notebook knowledge \u2014 agents with relevant entries will receive curated snippets in execute mode"]:[],...o.length>0?["Review active nominations \u2014 agents flagged by the system may need to be included"]:[],'Call again with mode="execute" to get full prompts and execution strategy',"Stages marked canRunParallel: true can be launched simultaneously","After each agent completes, pass handoff context to the next stage"]},null,2);return O(x.length,"paradigm_orchestrate_inline"),{handled:true,text:x}}let b=new Map;try{let{loadAgentProfile:h,buildProfileEnrichment:m}=await import('./agent-loader-W3RQJVW7.js'),{loadDecisions:u}=await import('./decision-loader-HELL2AMX.js'),{loadJournalEntries:d}=await import('./journal-loader-CNNA4EAU.js'),{loadNominations:k}=await import('./nomination-engine-YRHZZZUN.js'),{loadAgentState:R}=await import('./agent-state-KSQ3S7OB.js'),{loadNotebookEntries:x}=await import('./notebook-loader-TZVIMNDJ.js'),S=u(e.rootDir,{status:"active",limit:5}).map(_=>({title:_.title,decision:_.decision.slice(0,150)})),v=k(e.rootDir,{pending_only:!0,limit:10}).map(_=>({urgency:_.urgency,brief:_.brief})),M=l.map(_=>_.replace(/^[#$^!~@&%?]/,"").toLowerCase());for(let _ of i.stages)for(let E of _.agents)if(!b.has(E.name)){let P=h(e.rootDir,E.name);if(P){if(!c(E.name,e.rootDir))continue;let j=d(E.name,{transferable:!0,limit:5}).map(N=>({trigger:N.trigger,insight:N.insight.slice(0,150)})),I=R(E.name,e.rootDir),z;try{let N=x(E.name,e.rootDir,M.length>0?{concepts:M}:void 0);if(N.length>0){let V=N.sort(($,W)=>W.confidence-$.confidence||new Date(W.updated).getTime()-new Date($.updated).getTime()).slice(0,5);z=V.map($=>({context:$.context,snippet:$.snippet,concepts:$.concepts}));try{let{recordNotebookReference:$}=await import('./session-work-log-T2IE4Y4T.js');$(e.rootDir,E.name,V.map(W=>W.id));}catch{}try{let{incrementApplied:$}=await import('./notebook-loader-TZVIMNDJ.js');for(let W of V)$(E.name,W.id,e.rootDir);}catch{}}}catch{}let L=m(P,l,z,{recentDecisions:S,journalInsights:j,pendingNominations:v},I?{lastSession:I.lastSession,pendingWork:I.pendingWork,recentPatterns:I.recentPatterns,sessionsOnProject:I.sessionsOnProject}:void 0);if(P.permissions){let N=[`
475
475
  ## Permission Constraints`];P.permissions.paths?.deny?.length&&N.push(`**Denied paths:** ${P.permissions.paths.deny.join(", ")}`),P.permissions.paths?.write?.length&&N.push(`**Writable paths:** ${P.permissions.paths.write.join(", ")}`),P.permissions.tools?.deny?.length&&N.push(`**Denied tools:** ${P.permissions.tools.deny.join(", ")}`),P.permissions.dangerous_actions?.length&&N.push(`**Requires approval for:** ${P.permissions.dangerous_actions.join(", ")}`),L+=`
476
476
  `+N.join(`
477
- `);}y.set(D.name,{enrichment:L.trim()?L:"",nickname:P.nickname,description:P.description});}}}catch{}let r;try{let m=await D("paradigm_captain_brief",{taskDescription:t,symbols:d,depth:"standard"},e);m.handled&&(r=JSON.parse(m.text).renderedBrief);}catch{}let p=[];for(let m of i.stages){let h=[];for(let u of m.agents){let l=g.agents[u.name],w=y.get(u.name),T={name:l?.name||u.name,role:l?.role||U[u.name]||`${u.name} agent`,description:w?.description,focus:l?.focus||{reads:["**/*"],writes:["**/*"]},defaultModel:se(u.name,e.rootDir,l),triggers:l?.triggers,handoff_to:l?.handoff_to,context:l?.context,protocol:l?.protocol},_=oe({agent:T,task:u.task,symbols:d,dependsOn:u.dependsOn,profileEnrichment:w?.enrichment,nickname:w?.nickname,captainBrief:r});h.push(_);}p.push({stage:m.stage,canRunParallel:m.canRunParallel,agents:h});}let f=`orch-${Date.now().toString(36)}-${Math.random().toString(36).substring(2,6)}`;Ye(e.rootDir,f,t,i);let{epicTaskId:A,agentTaskIds:R}=await Ie(e.rootDir,f,t,i);for(let m of p)for(let h of m.agents){let u=R.get(h.agent);u&&(h.taskId=u,h.prompt+=`
477
+ `);}b.set(E.name,{enrichment:L.trim()?L:"",nickname:P.nickname,description:P.description});}}}catch{}let a;try{let h=await D$1("paradigm_captain_brief",{taskDescription:t,symbols:l,depth:"standard"},e);h.handled&&(a=JSON.parse(h.text).renderedBrief);}catch{}let g=[];for(let h of i.stages){let m=[];for(let u of h.agents){let d=p.agents[u.name],k=b.get(u.name),R={name:d?.name||u.name,role:d?.role||U[u.name]||`${u.name} agent`,description:k?.description,focus:d?.focus||{reads:["**/*"],writes:["**/*"]},defaultModel:oe(u.name,e.rootDir,d),triggers:d?.triggers,handoff_to:d?.handoff_to,context:d?.context,protocol:d?.protocol},x=le({agent:R,task:u.task,symbols:l,dependsOn:u.dependsOn,profileEnrichment:k?.enrichment,nickname:k?.nickname,captainBrief:a});m.push(x);}g.push({stage:h.stage,canRunParallel:h.canRunParallel,agents:m});}let y=`orch-${Date.now().toString(36)}-${Math.random().toString(36).substring(2,6)}`;Ye(e.rootDir,y,t,i);let{epicTaskId:A,agentTaskIds:T}=await Ne(e.rootDir,y,t,i);for(let h of g)for(let m of h.agents){let u=T.get(m.agent);u&&(m.taskId=u,m.prompt+=`
478
478
 
479
479
  ## Task tracking (v7 DAG)
480
- Your DAG task-id is \`${u}\`. On start, call \`paradigm_task_update({ id: "${u}", status: "in-progress" })\`; when finished, call \`paradigm_task_done({ id: "${u}" })\` (or \`paradigm_task_update\` \u2192 done) so the orchestration loop can settle.`);}try{let{appendSessionWorkEntry:m}=await import('./session-work-log-T2IE4Y4T.js');for(let h of p)for(let u of h.agents)m(e.rootDir,{timestamp:new Date().toISOString(),type:"agent-contribution",agent:u.agent,contribution:u.taskDescription?.slice(0,200)||t.slice(0,200),attribution:u.attribution,symbols:d});}catch{}try{let{recordAgentSession:m}=await import('./agent-state-KSQ3S7OB.js'),u=(await import('./session-tracker-BZ7FU4AT.js')).default?.session?.sessionId||f;for(let l of p)for(let w of l.agents)m(w.agent,e.rootDir,{sessionId:u,summary:`${w.attribution||w.agent}: ${(w.taskDescription||t).slice(0,200)}`,symbolsTouched:d});}catch{}let b=`thr-orch-${f}`;try{let m=await import('./symphony-loader-VA4UREOM.js'),h=M.basename(e.rootDir),u=`${h}/maestro`;try{m.getMyIdentity(e.rootDir)||m.registerAgent(e.rootDir,"maestro","Maestro (orchestrator)");}catch{}m.createThread(`Orchestration: ${t.slice(0,80)}`,{id:u,name:"Maestro",type:"agent",project:h,role:"orchestrator"});let l=M.join(ne.homedir(),".paradigm","score","threads"),w=E.readdirSync(l).filter(_=>_.endsWith(".json")).sort(),T=w[w.length-1];if(T){let _=M.join(l,T),S=M.join(l,`${b}.json`),v=JSON.parse(E.readFileSync(_,"utf8"));v.id=b,E.writeFileSync(S,JSON.stringify(v,null,2),"utf8"),_!==S&&E.unlinkSync(_);}for(let _ of p)for(let S of _.agents){let v=m.buildMessage({threadRoot:b,sender:{id:u,name:"Maestro",type:"agent",project:h,role:"orchestrator"},intent:"task",text:`[Maestro] Stage ${_.stage}: Assigned to ${S.attribution||S.agent} \u2014 ${S.taskDescription||t}`,symbols:d,metadata:{task:{stage:_.stage,canRunParallel:_.canRunParallel,...S.taskId?{taskId:S.taskId}:{}}}});m.routeMessage(v);}}catch{}let O$1={orchestrationId:f,task:t,mode:"execute",classification:{type:s.type,confidence:s.confidence,...s.alternativeType?{alternativeType:s.alternativeType}:{},overrideHint:s.overrideHint},symbols:d,totalAgents:i.estimatedAgents,...o.length>0?{activeNominations:o}:{},...A?{emittedTasks:{epicTaskId:A,stageTasks:p.flatMap(m=>m.agents.filter(h=>h.taskId).map(h=>({stage:m.stage,agent:h.agent,taskId:h.taskId})))}}:{},stages:p,executionInstructions:["Execute stages in order (stage 0, then stage 1, etc.)","Agents within a stage can be run in parallel if your environment supports it","Pass handoff context between stages",'Present each agent response as an attributed message using the attribution prefix (e.g., "[architect] Rate limiter should go before ^authenticated")',"Do NOT synthesize agent responses \u2014 show them as distinct contributions from each agent","After all agents in a stage complete, reconcile their outputs before proceeding to the next stage"],finalStep:{mandatory:true,description:"FINAL STEPS (mandatory, in order):",steps:[{order:1,action:"Call paradigm_captain_debrief",args:{orchestrationId:`${f} (use the orchestrationId from this response)`,sessionSummary:"(summarize what was accomplished)",touchedFiles:"(list all files modified during this session)",newSymbols:"(optional: list any new symbols registered)"}},{order:2,action:"Take the sessionInsights from the debrief result and call paradigm_ambient_learn_postflight",args:{sessionId:`${f} (use the orchestrationId from this response)`,context:"(pass the sessionInsights object from the debrief result here)"},note:"This is Loid's learning pass \u2014 she processes what the crew learned and ensures it compounds."},{order:3,action:"Session is complete."}],note:"Step 1 closes the session, updates .purpose coverage, records lore, and clears the stop hook. Step 2 runs Loid's learning pass on the session insights. Both steps are required \u2014 the session is NOT complete until both run."},claudeCode:{method:"Task tool",example:{description:p[0]?.agents[0]?.taskDescription||"Agent task",prompt:"(see agent prompts above)",subagent_type:"general-purpose"},parallel:"Launch multiple Task calls in one message for parallel stages"},sequential:{method:"Execute each role in sequence within this session",steps:i.stages.map((m,h)=>({stage:h,rolePrompt:`Adopt the ${m.agents[0]?.name} role. Focus ONLY on: ${m.agents.map(u=>u.task).join(", ")}`,constraint:h===0?"Design/plan only \u2014 do NOT write implementation code":h===i.stages.length-1?"Verify and test \u2014 do NOT change implementation":"Implement following the design from the previous stage"}))},cli:{method:"paradigm team orchestrate",command:`paradigm team orchestrate "${t}"`,note:"Spawns independent agent processes \u2014 works from any terminal"},symphony:{enabled:true,orchestrationThread:b,instructions:["After each agent completes, call paradigm_symphony_send to report progress. This makes the work visible in Conductor.",'Use intent "context" for analysis, "proposal" for recommendations, "decision" for decisions made',`Set threadRoot to "${b}" so all contributions are in one thread`,"Include the symbols array from the agent relay output"],perAgentInstruction:`When each agent finishes, run: paradigm_symphony_send threadId="${b}" intent="task-complete" text="[agentName] Summary of completed work" symbols=[touched symbols]`,exampleCall:{intent:"context",text:"[architect] Rate limiter should be placed before ^authenticated gate to prevent unauthenticated flood",threadRoot:b,symbols:["#rate-limiter","^authenticated"]}}},C=JSON.stringify(O$1,null,2);return O(C.length,"paradigm_orchestrate_inline"),{handled:true,text:C}}async function me(a,e,t,c,k,g){let n=a.toLowerCase(),d;try{let b=await D("paradigm_captain_brief",{taskDescription:a,symbols:e,depth:"quick"},g);if(b.handled){let O=JSON.parse(b.text);d={coverage:`${O.coverage?.label||"unknown"} (${Math.round((O.coverage?.score||0)*100)}%)`,warnings:O.warnings||[]};}}catch{}let o=[];t.securityRequired&&o.push("security-adjacent task (auth, gates, permissions detected)"),t.complexity==="high"&&o.push(`high complexity task (type: ${t.type})`),e.length>=4&&o.push(`${e.length} symbols in scope \u2014 cross-cutting change`);let s=c.filter(b=>b.urgency==="critical");s.length>0&&o.push(`${s.length} critical agent nomination(s) pending`);let i={assumptions:[],risks:[],edgeCases:[],questions:[]};(n.includes("simple")||n.includes("just")||n.includes("only"))&&i.assumptions.push("Task framed as simple \u2014 verify no hidden complexity"),(n.includes("always")||n.includes("never"))&&i.assumptions.push("Absolute language detected \u2014 edge cases likely exist"),!n.includes("error")&&!n.includes("fail")&&!n.includes("invalid")&&i.assumptions.push("No error/failure handling mentioned \u2014 what happens when it fails?"),e.some(b=>b.startsWith("$"))&&i.risks.push("Flow symbols detected \u2014 multi-step changes have ordering/rollback risk"),e.some(b=>b.startsWith("^"))&&(i.risks.push("Gate symbols detected \u2014 authorization changes require security review"),o.some(b=>b.includes("security"))||o.push("gate symbols in scope \u2014 security review recommended")),t.matchedKeywords.some(b=>["migration","database","schema"].includes(b))&&i.risks.push("Data migration risk \u2014 irreversible changes need rollback plan"),t.matchedKeywords.some(b=>["delete","remove","drop"].includes(b))&&i.risks.push("Destructive operation \u2014 verify nothing depends on removed items"),(n.includes("add")||n.includes("new"))&&i.edgeCases.push("New feature \u2014 how does it interact with existing features?"),(n.includes("refactor")||n.includes("rename"))&&i.edgeCases.push("Refactor \u2014 all callers updated? Integration tests cover the change?"),(n.includes("fix")||n.includes("bug"))&&i.edgeCases.push("Bug fix \u2014 does the fix address the root cause or just the symptom?"),n.includes("test")||i.questions.push("How will this be tested?"),e.length===0&&i.questions.push("No symbols referenced \u2014 which components are actually affected?");let y={concerns:[],suggestions:[]};for(let b of e){let O=b.replace(/^[#$^!~@&%?]/,"");!k.agents[O]&&b.startsWith("#");}t.costMultiplier.max>1&&y.concerns.push(`Higher-than-average complexity (${t.costMultiplier.min}x-${t.costMultiplier.max}x baseline) \u2014 consider breaking into smaller tasks`);let r=[];try{let{loadNotebookEntries:b}=await import('./notebook-loader-TZVIMNDJ.js'),O=e.map(m=>m.replace(/^[#$^!~@&%?]/,"").toLowerCase()),C=b("advocate",g.rootDir,O.length>0?{concepts:O}:void 0);C.length>0&&(r=C.sort((m,h)=>h.confidence-m.confidence).slice(0,3).map(m=>m.snippet));}catch{}let f=o.length>=2||o.some(b=>b.includes("security")||b.includes("critical"))?"escalate":"greenlight",A={mode:"quick",task:a,verdict:f,classification:{type:t.type,confidence:t.confidence,...t.alternativeType?{alternativeType:t.alternativeType}:{},overrideHint:t.overrideHint,complexity:t.complexity,securityRequired:t.securityRequired},advocate:{agent:"Jinx (advocate)",...i.assumptions.length>0?{assumptions:i.assumptions}:{},...i.risks.length>0?{risks:i.risks}:{},...i.edgeCases.length>0?{edgeCases:i.edgeCases}:{},...i.questions.length>0?{questions:i.questions}:{},...r.length>0?{notebookInsights:r}:{}},reviewer:{agent:"reviewer",...y.concerns.length>0?{concerns:y.concerns}:{},...y.suggestions.length>0?{suggestions:y.suggestions}:{}},...o.length>0?{escalationSignals:o}:{},...c.length>0?{activeNominations:c}:{},...d?{captainBrief:d}:{},symbols:e,instructions:f==="greenlight"?["Quick check passed \u2014 proceed with implementation.","Orchestration enforcement is satisfied.",i.questions.length>0?`Address Jinx's questions during implementation: ${i.questions.join("; ")}`:"No open questions from advocate."]:["Quick check recommends full orchestration.",`Escalation reasons: ${o.join("; ")}`,'Call paradigm_orchestrate_inline mode="plan" for full agent planning.',"Orchestration enforcement is satisfied regardless of verdict."]},R=JSON.stringify(A,null,2);return O(R.length,"paradigm_orchestrate_inline"),{handled:true,text:R}}async function he(a,e){let t=a.agent,c=a.task,k=a.handoffContext,g=a.previousAgent,n=re(e.rootDir),d=b$1(e.rootDir);if(d&&!d.includes(t)){let R=JSON.stringify({warning:`Agent "${t}" is not on this project's roster`,suggestion:`Run paradigm_agent_activate id="${t}" to add it, or check .paradigm/roster.yaml`,activeRoster:d},null,2);return O(R.length,"paradigm_agent_prompt"),{handled:true,text:R}}let o=n?.agents[t],s={name:o?.name||t,role:o?.role||U[t]||U.builder,focus:o?.focus||{reads:["**/*"],writes:["**/*"]},defaultModel:se(t,e.rootDir,o),triggers:o?.triggers,handoff_to:o?.handoff_to,context:o?.context,protocol:o?.protocol},i=H(c),y,r;try{let{loadAgentProfile:R,buildProfileEnrichment:b}=await import('./agent-loader-W3RQJVW7.js'),{loadDecisions:O}=await import('./decision-loader-HELL2AMX.js'),{loadJournalEntries:C}=await import('./journal-loader-CNNA4EAU.js'),{loadNominations:m}=await import('./nomination-engine-YRHZZZUN.js'),{loadNotebookEntries:h}=await import('./notebook-loader-TZVIMNDJ.js'),u=R(e.rootDir,t);if(u){r=u.nickname,s.description=u.description;let l=O(e.rootDir,{status:"active",limit:5}).map(v=>({title:v.title,decision:v.decision.slice(0,150)})),w=C(t,{transferable:!0,limit:5}).map(v=>({trigger:v.trigger,insight:v.insight.slice(0,150)})),T=m(e.rootDir,{pending_only:!0,limit:10}).map(v=>({urgency:v.urgency,brief:v.brief})),_;try{let v=i.map(x=>x.replace(/^[#$^!~@&%?]/,"").toLowerCase()),I=h(t,e.rootDir,v.length>0?{concepts:v}:void 0);if(I.length>0){let x=I.sort((D,P)=>P.confidence-D.confidence||new Date(P.updated).getTime()-new Date(D.updated).getTime()).slice(0,5);_=x.map(D=>({context:D.context,snippet:D.snippet,concepts:D.concepts}));try{let{recordNotebookReference:D}=await import('./session-work-log-T2IE4Y4T.js');D(e.rootDir,t,x.map(P=>P.id));}catch{}}}catch{}let S=b(u,i,_,{recentDecisions:l,journalInsights:w,pendingNominations:T});if(u.permissions){let v=[`
480
+ Your DAG task-id is \`${u}\`. On start, call \`paradigm_task_update({ id: "${u}", status: "in-progress" })\`; when finished, call \`paradigm_task_done({ id: "${u}" })\` (or \`paradigm_task_update\` \u2192 done) so the orchestration loop can settle.`);}try{let{appendSessionWorkEntry:h}=await import('./session-work-log-T2IE4Y4T.js');for(let m of g)for(let u of m.agents)h(e.rootDir,{timestamp:new Date().toISOString(),type:"agent-contribution",agent:u.agent,contribution:u.taskDescription?.slice(0,200)||t.slice(0,200),attribution:u.attribution,symbols:l});}catch{}try{let{recordAgentSession:h}=await import('./agent-state-KSQ3S7OB.js'),u=(await import('./session-tracker-BZ7FU4AT.js')).default?.session?.sessionId||y;for(let d of g)for(let k of d.agents)h(k.agent,e.rootDir,{sessionId:u,summary:`${k.attribution||k.agent}: ${(k.taskDescription||t).slice(0,200)}`,symbolsTouched:l});}catch{}let w=`thr-orch-${y}`;try{let h=await import('./symphony-loader-VA4UREOM.js'),m=Y.basename(e.rootDir),u=`${m}/maestro`;try{h.getMyIdentity(e.rootDir)||h.registerAgent(e.rootDir,"maestro","Maestro (orchestrator)");}catch{}h.createThread(`Orchestration: ${t.slice(0,80)}`,{id:u,name:"Maestro",type:"agent",project:m,role:"orchestrator"});let d=Y.join(ie.homedir(),".paradigm","score","threads"),k=D.readdirSync(d).filter(x=>x.endsWith(".json")).sort(),R=k[k.length-1];if(R){let x=Y.join(d,R),S=Y.join(d,`${w}.json`),v=JSON.parse(D.readFileSync(x,"utf8"));v.id=w,D.writeFileSync(S,JSON.stringify(v,null,2),"utf8"),x!==S&&D.unlinkSync(x);}for(let x of g)for(let S of x.agents){let v=h.buildMessage({threadRoot:w,sender:{id:u,name:"Maestro",type:"agent",project:m,role:"orchestrator"},intent:"task",text:`[Maestro] Stage ${x.stage}: Assigned to ${S.attribution||S.agent} \u2014 ${S.taskDescription||t}`,symbols:l,metadata:{task:{stage:x.stage,canRunParallel:x.canRunParallel,...S.taskId?{taskId:S.taskId}:{}}}});h.routeMessage(v);}}catch{}let O$1={orchestrationId:y,task:t,mode:"execute",classification:{type:s.type,confidence:s.confidence,...s.alternativeType?{alternativeType:s.alternativeType}:{},overrideHint:s.overrideHint},symbols:l,totalAgents:i.estimatedAgents,...o.length>0?{activeNominations:o}:{},...A?{emittedTasks:{epicTaskId:A,stageTasks:g.flatMap(h=>h.agents.filter(m=>m.taskId).map(m=>({stage:h.stage,agent:m.agent,taskId:m.taskId})))}}:{},stages:g,executionInstructions:["Execute stages in order (stage 0, then stage 1, etc.)","Agents within a stage can be run in parallel if your environment supports it","Pass handoff context between stages",'Present each agent response as an attributed message using the attribution prefix (e.g., "[architect] Rate limiter should go before ^authenticated")',"Do NOT synthesize agent responses \u2014 show them as distinct contributions from each agent","After all agents in a stage complete, reconcile their outputs before proceeding to the next stage"],finalStep:{mandatory:true,description:"FINAL STEPS (mandatory, in order):",steps:[{order:1,action:"Call paradigm_captain_debrief",args:{orchestrationId:`${y} (use the orchestrationId from this response)`,sessionSummary:"(summarize what was accomplished)",touchedFiles:"(list all files modified during this session)",newSymbols:"(optional: list any new symbols registered)"}},{order:2,action:"Take the sessionInsights from the debrief result and call paradigm_ambient_learn_postflight",args:{sessionId:`${y} (use the orchestrationId from this response)`,context:"(pass the sessionInsights object from the debrief result here)"},note:"This is Loid's learning pass \u2014 she processes what the crew learned and ensures it compounds."},{order:3,action:"Session is complete."}],note:"Step 1 closes the session, updates .purpose coverage, records lore, and clears the stop hook. Step 2 runs Loid's learning pass on the session insights. Both steps are required \u2014 the session is NOT complete until both run."},claudeCode:{method:"Task tool",example:{description:g[0]?.agents[0]?.taskDescription||"Agent task",prompt:"(see agent prompts above)",subagent_type:"general-purpose"},parallel:"Launch multiple Task calls in one message for parallel stages"},sequential:{method:"Execute each role in sequence within this session",steps:i.stages.map((h,m)=>({stage:m,rolePrompt:`Adopt the ${h.agents[0]?.name} role. Focus ONLY on: ${h.agents.map(u=>u.task).join(", ")}`,constraint:m===0?"Design/plan only \u2014 do NOT write implementation code":m===i.stages.length-1?"Verify and test \u2014 do NOT change implementation":"Implement following the design from the previous stage"}))},cli:{method:"paradigm team orchestrate",command:`paradigm team orchestrate "${t}"`,note:"Spawns independent agent processes \u2014 works from any terminal"},symphony:{enabled:true,orchestrationThread:w,instructions:["After each agent completes, call paradigm_symphony_send to report progress. This makes the work visible in Conductor.",'Use intent "context" for analysis, "proposal" for recommendations, "decision" for decisions made',`Set threadRoot to "${w}" so all contributions are in one thread`,"Include the symbols array from the agent relay output"],perAgentInstruction:`When each agent finishes, run: paradigm_symphony_send threadId="${w}" intent="task-complete" text="[agentName] Summary of completed work" symbols=[touched symbols]`,exampleCall:{intent:"context",text:"[architect] Rate limiter should be placed before ^authenticated gate to prevent unauthenticated flood",threadRoot:w,symbols:["#rate-limiter","^authenticated"]}}},C=JSON.stringify(O$1,null,2);return O(C.length,"paradigm_orchestrate_inline"),{handled:true,text:C}}async function ye(r,e,t,c,f,p){let n=r.toLowerCase(),l;try{let w=await D$1("paradigm_captain_brief",{taskDescription:r,symbols:e,depth:"quick"},p);if(w.handled){let O=JSON.parse(w.text);l={coverage:`${O.coverage?.label||"unknown"} (${Math.round((O.coverage?.score||0)*100)}%)`,warnings:O.warnings||[]};}}catch{}let o=[];t.securityRequired&&o.push("security-adjacent task (auth, gates, permissions detected)"),t.complexity==="high"&&o.push(`high complexity task (type: ${t.type})`),e.length>=4&&o.push(`${e.length} symbols in scope \u2014 cross-cutting change`);let s=c.filter(w=>w.urgency==="critical");s.length>0&&o.push(`${s.length} critical agent nomination(s) pending`);let i={assumptions:[],risks:[],edgeCases:[],questions:[]};(n.includes("simple")||n.includes("just")||n.includes("only"))&&i.assumptions.push("Task framed as simple \u2014 verify no hidden complexity"),(n.includes("always")||n.includes("never"))&&i.assumptions.push("Absolute language detected \u2014 edge cases likely exist"),!n.includes("error")&&!n.includes("fail")&&!n.includes("invalid")&&i.assumptions.push("No error/failure handling mentioned \u2014 what happens when it fails?"),e.some(w=>w.startsWith("$"))&&i.risks.push("Flow symbols detected \u2014 multi-step changes have ordering/rollback risk"),e.some(w=>w.startsWith("^"))&&(i.risks.push("Gate symbols detected \u2014 authorization changes require security review"),o.some(w=>w.includes("security"))||o.push("gate symbols in scope \u2014 security review recommended")),t.matchedKeywords.some(w=>["migration","database","schema"].includes(w))&&i.risks.push("Data migration risk \u2014 irreversible changes need rollback plan"),t.matchedKeywords.some(w=>["delete","remove","drop"].includes(w))&&i.risks.push("Destructive operation \u2014 verify nothing depends on removed items"),(n.includes("add")||n.includes("new"))&&i.edgeCases.push("New feature \u2014 how does it interact with existing features?"),(n.includes("refactor")||n.includes("rename"))&&i.edgeCases.push("Refactor \u2014 all callers updated? Integration tests cover the change?"),(n.includes("fix")||n.includes("bug"))&&i.edgeCases.push("Bug fix \u2014 does the fix address the root cause or just the symptom?"),n.includes("test")||i.questions.push("How will this be tested?"),e.length===0&&i.questions.push("No symbols referenced \u2014 which components are actually affected?");let b={concerns:[],suggestions:[]};for(let w of e){let O=w.replace(/^[#$^!~@&%?]/,"");!f.agents[O]&&w.startsWith("#");}t.costMultiplier.max>1&&b.concerns.push(`Higher-than-average complexity (${t.costMultiplier.min}x-${t.costMultiplier.max}x baseline) \u2014 consider breaking into smaller tasks`);let a=[];try{let{loadNotebookEntries:w}=await import('./notebook-loader-TZVIMNDJ.js'),O=e.map(h=>h.replace(/^[#$^!~@&%?]/,"").toLowerCase()),C=w("advocate",p.rootDir,O.length>0?{concepts:O}:void 0);C.length>0&&(a=C.sort((h,m)=>m.confidence-h.confidence).slice(0,3).map(h=>h.snippet));}catch{}let y=o.length>=2||o.some(w=>w.includes("security")||w.includes("critical"))?"escalate":"greenlight",A={mode:"quick",task:r,verdict:y,classification:{type:t.type,confidence:t.confidence,...t.alternativeType?{alternativeType:t.alternativeType}:{},overrideHint:t.overrideHint,complexity:t.complexity,securityRequired:t.securityRequired},advocate:{agent:"Jinx (advocate)",...i.assumptions.length>0?{assumptions:i.assumptions}:{},...i.risks.length>0?{risks:i.risks}:{},...i.edgeCases.length>0?{edgeCases:i.edgeCases}:{},...i.questions.length>0?{questions:i.questions}:{},...a.length>0?{notebookInsights:a}:{}},reviewer:{agent:"reviewer",...b.concerns.length>0?{concerns:b.concerns}:{},...b.suggestions.length>0?{suggestions:b.suggestions}:{}},...o.length>0?{escalationSignals:o}:{},...c.length>0?{activeNominations:c}:{},...l?{captainBrief:l}:{},symbols:e,instructions:y==="greenlight"?["Quick check passed \u2014 proceed with implementation.","Orchestration enforcement is satisfied.",i.questions.length>0?`Address Jinx's questions during implementation: ${i.questions.join("; ")}`:"No open questions from advocate."]:["Quick check recommends full orchestration.",`Escalation reasons: ${o.join("; ")}`,'Call paradigm_orchestrate_inline mode="plan" for full agent planning.',"Orchestration enforcement is satisfied regardless of verdict."]},T=JSON.stringify(A,null,2);return O(T.length,"paradigm_orchestrate_inline"),{handled:true,text:T}}async function be(r,e){let t=r.agent,c=r.task,f=r.handoffContext,p=r.previousAgent,n=ue(e.rootDir),l=b$1(e.rootDir);if(l&&!l.includes(t)){let T=JSON.stringify({warning:`Agent "${t}" is not on this project's roster`,suggestion:`Run paradigm_agent_activate id="${t}" to add it, or check .paradigm/roster.yaml`,activeRoster:l},null,2);return O(T.length,"paradigm_agent_prompt"),{handled:true,text:T}}let o=n?.agents[t],s={name:o?.name||t,role:o?.role||U[t]||U.builder,focus:o?.focus||{reads:["**/*"],writes:["**/*"]},defaultModel:oe(t,e.rootDir,o),triggers:o?.triggers,handoff_to:o?.handoff_to,context:o?.context,protocol:o?.protocol},i=K(c),b,a;try{let{loadAgentProfile:T,buildProfileEnrichment:w}=await import('./agent-loader-W3RQJVW7.js'),{loadDecisions:O}=await import('./decision-loader-HELL2AMX.js'),{loadJournalEntries:C}=await import('./journal-loader-CNNA4EAU.js'),{loadNominations:h}=await import('./nomination-engine-YRHZZZUN.js'),{loadNotebookEntries:m}=await import('./notebook-loader-TZVIMNDJ.js'),u=T(e.rootDir,t);if(u){a=u.nickname,s.description=u.description;let d=O(e.rootDir,{status:"active",limit:5}).map(v=>({title:v.title,decision:v.decision.slice(0,150)})),k=C(t,{transferable:!0,limit:5}).map(v=>({trigger:v.trigger,insight:v.insight.slice(0,150)})),R=h(e.rootDir,{pending_only:!0,limit:10}).map(v=>({urgency:v.urgency,brief:v.brief})),x;try{let v=i.map(_=>_.replace(/^[#$^!~@&%?]/,"").toLowerCase()),M=m(t,e.rootDir,v.length>0?{concepts:v}:void 0);if(M.length>0){let _=M.sort((E,P)=>P.confidence-E.confidence||new Date(P.updated).getTime()-new Date(E.updated).getTime()).slice(0,5);x=_.map(E=>({context:E.context,snippet:E.snippet,concepts:E.concepts}));try{let{recordNotebookReference:E}=await import('./session-work-log-T2IE4Y4T.js');E(e.rootDir,t,_.map(P=>P.id));}catch{}}}catch{}let S=w(u,i,x,{recentDecisions:d,journalInsights:k,pendingNominations:R});if(u.permissions){let v=[`
481
481
  ## Permission Constraints`];u.permissions.paths?.deny?.length&&v.push(`**Denied paths:** ${u.permissions.paths.deny.join(", ")}`),u.permissions.paths?.write?.length&&v.push(`**Writable paths:** ${u.permissions.paths.write.join(", ")}`),u.permissions.tools?.deny?.length&&v.push(`**Denied tools:** ${u.permissions.tools.deny.join(", ")}`),u.permissions.dangerous_actions?.length&&v.push(`**Requires approval for:** ${u.permissions.dangerous_actions.join(", ")}`),S+=`
482
482
  `+v.join(`
483
- `);}S.trim()&&(y=S);}}catch{}let p=oe({agent:s,task:c,symbols:i,handoffContext:k,previousAgent:g,profileEnrichment:y,nickname:r}),f={agent:t,model:p.model,prompt:p.prompt,attribution:p.attribution,taskToolParams:{description:p.taskDescription,prompt:p.prompt,subagent_type:p.subagentType,model:p.model},focusAreas:p.focusAreas,usage:"Use the Task tool with the taskToolParams to spawn this agent. Present the response with the attribution prefix."},A=JSON.stringify(f,null,2);return O(A.length,"paradigm_agent_prompt"),{handled:true,text:A}}function ie(a,e){let t=new Set(a),c=[];for(let k of a){let g=e[k];if(g?.handoff_to)for(let n of g.handoff_to)t.has(n)&&c.push({from:k,to:n});}return c}function fe(a,e){let t=ie(a,e);if(t.length===0)return null;let c=new Set,k=new Set(t.map(r=>`${r.from}->${r.to}`));for(let r of t)if(k.has(`${r.to}->${r.from}`)){let p=[r.from,r.to].sort().join(",");c.add(p);}let g=new Map;for(let r of c){let[p,f]=r.split(","),A=g.get(p)||p,R=g.get(f)||f,b=A<R?A:R;for(let[O,C]of g)(C===A||C===R)&&g.set(O,b);g.set(p,b),g.set(f,b);}for(let r of a)g.has(r)||g.set(r,r);let n=[...new Set(g.values())],d=new Map,o=new Map;for(let r of n)d.set(r,0),o.set(r,new Set);for(let r of t){let p=g.get(r.from),f=g.get(r.to);p!==f&&(o.get(p).has(f)||(o.get(p).add(f),d.set(f,(d.get(f)||0)+1)));}let s=new Map,i=[];for(let r of n)(d.get(r)||0)===0&&(i.push(r),s.set(r,0));for(;i.length>0;){let r=i.shift(),p=s.get(r)||0;for(let f of o.get(r)||[]){let A=(d.get(f)||1)-1;d.set(f,A);let R=p+1;s.set(f,Math.max(s.get(f)||0,R)),A===0&&i.push(f);}}if(s.size<n.length)return null;let y=new Map;for(let r of a){let p=g.get(r);y.set(r,s.get(p)||0);}return y}function ye(a,e,t,c,k,g){let n=H(a),d=a.toLowerCase(),o=[],s=[];if(t&&t.length>0)for(let l=0;l<t.length;l++){let w=t[l];e[w]&&s.push({name:w,task:`${w==="architect"?"Design":w==="builder"?"Implement":w==="tester"?"Test":"Process"}: ${a}`,dependsOn:l>0?[t[l-1]]:[],required:true,stage:l});}else if(c&&c.type!=="feature"&&c.type!=="unknown"){let l=c.recommendedAgents.length>0?c.recommendedAgents:["architect"],w={architect:Q(c.type)?"Analyze":"Design",security:Q(c.type)?"Assess security of":"Review security of",builder:"Implement",tester:"Test",reviewer:"Review"},T=0,_=null;for(let S of l){if(!e[S])continue;let v=_?[_]:[],I=w[S]||"Process",x=S==="architect"||S==="builder";s.push({name:S,task:`${I}: ${a}`,required:x,stage:T,dependsOn:v}),_=S,T++;}}else {let l=d.includes("design")||d.includes("architect")||d.includes("plan")||d.includes("spec"),w=d.includes("auth")||d.includes("security")||d.includes("gate")||n.some(x=>x.startsWith("^")),T=d.includes("build")||d.includes("implement")||d.includes("create")||d.includes("add")||d.includes("fix"),_=d.includes("review")||d.includes("check"),S=d.includes("test")||d.includes("verify")||d.includes("validate");if(l&&e.architect&&s.push({name:"architect",task:`Design and specify: ${a}`,dependsOn:[],required:true,stage:0}),w&&e.security&&s.push({name:"security",task:`Review security aspects of: ${a}`,dependsOn:[],required:false,stage:0}),T&&e.builder){let x=l&&e.architect?["architect"]:[];s.push({name:"builder",task:`Implement: ${a}`,dependsOn:x,required:true,stage:x.length>0?1:0});}let v=s.some(x=>x.name==="builder"),I=v?2:l?1:0;if(_&&e.reviewer&&s.push({name:"reviewer",task:`Review: ${a}`,dependsOn:v?["builder"]:[],required:false,stage:I}),S&&e.tester&&s.push({name:"tester",task:`Test and validate: ${a}`,dependsOn:v?["builder"]:[],required:false,stage:I}),s.length===0){let x=c?.recommendedAgents||["architect","builder","tester"],D={architect:"Design",security:"Review security of",builder:"Implement",tester:"Test",reviewer:"Review"},P=0,j=null;for(let Y of x){if(!e[Y])continue;let K=j?[j]:[],L=D[Y]||"Process",N=Y==="architect"||Y==="builder";s.push({name:Y,task:`${L}: ${a}`,required:N,stage:P,dependsOn:K}),j=Y,P++;}}}let i=s.map(l=>l.name),y=fe(i,e);if(y)for(let l of s){l.stage=y.get(l.name)||0;let w=[];for(let T of i){if(T===l.name)continue;e[T]?.handoff_to?.includes(l.name)&&(y.get(T)||0)<l.stage&&w.push(T);}w.length>0&&(l.dependsOn=w);}let r=new Map;for(let l of s){let w=r.get(l.stage)||[];w.push(l),r.set(l.stage,w);}let p=Array.from(r.keys()).sort((l,w)=>l-w);for(let l of p){let w=r.get(l)||[];o.push({stage:l,agents:w.map(T=>({name:T.name,task:T.task,dependsOn:T.dependsOn,required:T.required})),canRunParallel:w.length>1});}let f=s.some(l=>l.name==="builder"||l.name==="tester"),R=(c?Q(c.type):false)||!f,b=false;if(!R){let l=p.length>0?p[p.length-1]+1:0;o.push({stage:l,agents:[{name:"documentor",task:"Review all changes made by previous agents. Update .purpose files, portal.yaml, and symbol registrations using only paradigm_purpose_* and paradigm_portal_* MCP tools. Run paradigm_reindex when done. Do NOT modify source code.",dependsOn:s.map(w=>w.name),required:true}],canRunParallel:false}),b=true;}let O=ue(g||"."),C=c?.type,m=0,h=0;for(let l of s){let w=pe(O,l.name,C);m+=w.min,h+=w.max;}b&&(m+=2e3,h+=8e3);let u=k?.default_mode||"faceted";return {task:a,mode:u,stages:o,symbols:n,estimatedAgents:s.length+(b?1:0),estimatedTokens:{min:m,max:h}}}function oe(a){let{agent:e,task:t,symbols:c,handoffContext:k,previousAgent:g}=a,n=[];a.profileEnrichment&&(n.push(a.profileEnrichment),n.push("---"),n.push("")),a.captainBrief&&(n.push(a.captainBrief),n.push(""));let d=U[e.name]||e.description||e.role||U.builder;if(n.push(d),n.push(""),n.push("---"),n.push(""),n.push("## Your Task"),n.push(""),n.push(t),n.push(""),c.length>0){n.push("## Symbols in Scope"),n.push("");for(let y of c){let r=be(y);n.push(`- \`${y}\` (${r})`);}n.push("");}k&&(n.push("## Context from Previous Agent"),g&&n.push(`*Handed off from ${g}:*`),n.push(""),n.push(k),n.push("")),(e.focus?.reads||e.focus?.writes)&&(n.push("## Focus Areas"),n.push(""),n.push(`**Read from:** ${e.focus?.reads?.join(", ")||"**/*"}`),n.push(`**Write to:** ${e.focus?.writes?.join(", ")||"**/*"}`),n.push("")),n.push(`## Output Format
483
+ `);}S.trim()&&(b=S);}}catch{}let g=le({agent:s,task:c,symbols:i,handoffContext:f,previousAgent:p,profileEnrichment:b,nickname:a}),y={agent:t,model:g.model,prompt:g.prompt,attribution:g.attribution,taskToolParams:{description:g.taskDescription,prompt:g.prompt,subagent_type:g.subagentType,model:g.model},focusAreas:g.focusAreas,usage:"Use the Task tool with the taskToolParams to spawn this agent. Present the response with the attribution prefix."},A=JSON.stringify(y,null,2);return O(A.length,"paradigm_agent_prompt"),{handled:true,text:A}}function ce(r,e){let t=new Set(r),c=[];for(let f of r){let p=e[f];if(p?.handoff_to)for(let n of p.handoff_to)t.has(n)&&c.push({from:f,to:n});}return c}function we(r,e){let t=ce(r,e);if(t.length===0)return null;let c=new Set,f=new Set(t.map(a=>`${a.from}->${a.to}`));for(let a of t)if(f.has(`${a.to}->${a.from}`)){let g=[a.from,a.to].sort().join(",");c.add(g);}let p=new Map;for(let a of c){let[g,y]=a.split(","),A=p.get(g)||g,T=p.get(y)||y,w=A<T?A:T;for(let[O,C]of p)(C===A||C===T)&&p.set(O,w);p.set(g,w),p.set(y,w);}for(let a of r)p.has(a)||p.set(a,a);let n=[...new Set(p.values())],l=new Map,o=new Map;for(let a of n)l.set(a,0),o.set(a,new Set);for(let a of t){let g=p.get(a.from),y=p.get(a.to);g!==y&&(o.get(g).has(y)||(o.get(g).add(y),l.set(y,(l.get(y)||0)+1)));}let s=new Map,i=[];for(let a of n)(l.get(a)||0)===0&&(i.push(a),s.set(a,0));for(;i.length>0;){let a=i.shift(),g=s.get(a)||0;for(let y of o.get(a)||[]){let A=(l.get(y)||1)-1;l.set(y,A);let T=g+1;s.set(y,Math.max(s.get(y)||0,T)),A===0&&i.push(y);}}if(s.size<n.length)return null;let b=new Map;for(let a of r){let g=p.get(a);b.set(a,s.get(g)||0);}return b}function ke(r,e,t,c,f,p){let n=K(r),l=r.toLowerCase(),o=[],s=[];if(t&&t.length>0)for(let d=0;d<t.length;d++){let k=t[d];e[k]&&s.push({name:k,task:`${k==="architect"?"Design":k==="builder"?"Implement":k==="tester"?"Test":"Process"}: ${r}`,dependsOn:d>0?[t[d-1]]:[],required:true,stage:d});}else if(c&&c.type!=="feature"&&c.type!=="unknown"){let d=c.recommendedAgents.length>0?c.recommendedAgents:["architect"],k={architect:Z(c.type)?"Analyze":"Design",security:Z(c.type)?"Assess security of":"Review security of",builder:"Implement",tester:"Test",reviewer:"Review"},R=0,x=null;for(let S of d){if(!e[S])continue;let v=x?[x]:[],M=k[S]||"Process",_=S==="architect"||S==="builder";s.push({name:S,task:`${M}: ${r}`,required:_,stage:R,dependsOn:v}),x=S,R++;}}else {let d=l.includes("design")||l.includes("architect")||l.includes("plan")||l.includes("spec"),k=l.includes("auth")||l.includes("security")||l.includes("gate")||n.some(_=>_.startsWith("^")),R=l.includes("build")||l.includes("implement")||l.includes("create")||l.includes("add")||l.includes("fix"),x=l.includes("review")||l.includes("check"),S=l.includes("test")||l.includes("verify")||l.includes("validate");if(d&&e.architect&&s.push({name:"architect",task:`Design and specify: ${r}`,dependsOn:[],required:true,stage:0}),k&&e.security&&s.push({name:"security",task:`Review security aspects of: ${r}`,dependsOn:[],required:false,stage:0}),R&&e.builder){let _=d&&e.architect?["architect"]:[];s.push({name:"builder",task:`Implement: ${r}`,dependsOn:_,required:true,stage:_.length>0?1:0});}let v=s.some(_=>_.name==="builder"),M=v?2:d?1:0;if(x&&e.reviewer&&s.push({name:"reviewer",task:`Review: ${r}`,dependsOn:v?["builder"]:[],required:false,stage:M}),S&&e.tester&&s.push({name:"tester",task:`Test and validate: ${r}`,dependsOn:v?["builder"]:[],required:false,stage:M}),s.length===0){let _=c?.recommendedAgents||["architect","builder","tester"],E={architect:"Design",security:"Review security of",builder:"Implement",tester:"Test",reviewer:"Review"},P=0,j=null;for(let I of _){if(!e[I])continue;let z=j?[j]:[],L=E[I]||"Process",N=I==="architect"||I==="builder";s.push({name:I,task:`${L}: ${r}`,required:N,stage:P,dependsOn:z}),j=I,P++;}}}let i=s.map(d=>d.name),b=we(i,e);if(b)for(let d of s){d.stage=b.get(d.name)||0;let k=[];for(let R of i){if(R===d.name)continue;e[R]?.handoff_to?.includes(d.name)&&(b.get(R)||0)<d.stage&&k.push(R);}k.length>0&&(d.dependsOn=k);}let a=new Map;for(let d of s){let k=a.get(d.stage)||[];k.push(d),a.set(d.stage,k);}let g=Array.from(a.keys()).sort((d,k)=>d-k);for(let d of g){let k=a.get(d)||[];o.push({stage:d,agents:k.map(R=>({name:R.name,task:R.task,dependsOn:R.dependsOn,required:R.required})),canRunParallel:k.length>1});}let y=s.some(d=>d.name==="builder"||d.name==="tester"),T=(c?Z(c.type):false)||!y,w=false;if(!T){let d=g.length>0?g[g.length-1]+1:0;o.push({stage:d,agents:[{name:"documentor",task:"Review all changes made by previous agents. Update .purpose files, portal.yaml, and symbol registrations using only paradigm_purpose_* and paradigm_portal_* MCP tools. Run paradigm_reindex when done. Do NOT modify source code.",dependsOn:s.map(k=>k.name),required:true}],canRunParallel:false}),w=true;}let O=ae(p||"."),C=c?.type,h=0,m=0;for(let d of s){let k=ee(O,d.name,C);h+=k.min,m+=k.max;}w&&(h+=2e3,m+=8e3);let u=f?.default_mode||"faceted";return {task:r,mode:u,stages:o,symbols:n,estimatedAgents:s.length+(w?1:0),estimatedTokens:{min:h,max:m}}}function le(r){let{agent:e,task:t,symbols:c,handoffContext:f,previousAgent:p}=r,n=[];r.profileEnrichment&&(n.push(r.profileEnrichment),n.push("---"),n.push("")),r.captainBrief&&(n.push(r.captainBrief),n.push(""));let l=U[e.name]||e.description||e.role||U.builder;if(n.push(l),n.push(""),n.push("---"),n.push(""),n.push("## Your Task"),n.push(""),n.push(t),n.push(""),c.length>0){n.push("## Symbols in Scope"),n.push("");for(let b of c){let a=ve(b);n.push(`- \`${b}\` (${a})`);}n.push("");}f&&(n.push("## Context from Previous Agent"),p&&n.push(`*Handed off from ${p}:*`),n.push(""),n.push(f),n.push("")),(e.focus?.reads||e.focus?.writes)&&(n.push("## Focus Areas"),n.push(""),n.push(`**Read from:** ${e.focus?.reads?.join(", ")||"**/*"}`),n.push(`**Write to:** ${e.focus?.writes?.join(", ")||"**/*"}`),n.push("")),n.push(`## Output Format
484
484
 
485
485
  When you complete your task, end with a structured summary block:
486
486
 
@@ -499,6 +499,6 @@ handoff_context: |
499
499
  \`\`\`
500
500
 
501
501
  This structured output helps track progress and pass context between agents.`);let o=n.join(`
502
- `),s=e.defaultModel||z[B[e.name]||"tier-2"]||"sonnet",i=a.nickname?`[${a.nickname} (${e.name})]`:`[${e.name}]`;return {agent:e.name,model:s,prompt:o,taskDescription:`${e.name}: ${t.slice(0,50)}${t.length>50?"...":""}`,subagentType:"general-purpose",attribution:i,focusAreas:e.focus||{reads:["**/*"],writes:["**/*"]}}}function H(a){let e=a.match(le)||[];return [...new Set(e)]}function be(a){let e=a.charAt(0);return {"@":"feature","#":"component",$:"flow","%":"state","^":"gate","!":"signal","?":"idea","&":"integration","~":"deprecated"}[e]||"unknown"}var we=["should","what","how","why","recommend","analyze","compare","evaluate","assess","review","explain","describe","investigate","which","best practice","trade-off","pros and cons"],ke=["document","write docs","readme",".purpose","purpose file","jsdoc","tsdoc","comments","docstring","api docs"],ve=["bug","fix","broken","not working","issue","error","crash","fails","failing","wrong","incorrect","regression","patch"],Se=["rename","refactor","migrate","restructure","move","reorganize","clean up","cleanup","consolidate","extract","inline","simplify"],Ae=["auth","permission","admin","delete","purge","password","credential","token","secret","key","encrypt","decrypt","ownership","transfer","privilege","escalation","impersonation","takeover","rbac","acl","role","guard","middleware","session","cookie","csrf","xss","injection","sanitize"],_e=["audit","self-audit","inspect","examine","survey","inventory","find issues","identify problems","identify gaps","gap analysis","health check","sanity check","post-mortem","postmortem"],xe=["design","architect","architecture","spec","specify","specification","blueprint","plan","propose","proposal","rfc","schema design","api design","data model"],Re=["research","investigate","explore","study","discover","spike","prototype","feasibility","survey the","literature","prior art","options for","approaches to"],Te=new Set(["analysis","audit","design","research","documentation"]),Pe=[{pattern:/^(please\s+)?(audit|self-audit)\b/,family:"audit"},{pattern:/^(please\s+)?(analy[sz]e|assess|evaluate|examine|inspect|review)\b/,family:"analysis"},{pattern:/^(please\s+)?(design|architect|spec|specify|plan|propose)\b/,family:"design"},{pattern:/^(please\s+)?(research|investigate|explore|study)\b/,family:"research"},{pattern:/^(please\s+)?(document|write\s+docs)\b/,family:"documentation"}],De={audit:1.3,analysis:1.1,design:1.2,research:1.2,documentation:1.1,bugfix:1,refactor:1};function Ee(a){let e=a.toLowerCase(),t=H(a),c=h=>h.filter(u=>e.includes(u.toLowerCase())),k={audit:c(_e),analysis:c(we),design:c(xe),research:c(Re),documentation:c(ke),bugfix:c(ve),refactor:c(Se)},g=c(Ae),n={};for(let[h,u]of Object.entries(k))n[h]=u.length*(De[h]??1);let d;for(let{pattern:h,family:u}of Pe)if(h.test(e)){d=u,n[u]=(n[u]??0)+5;break}let o=Object.entries(n).filter(([,h])=>h>0).sort((h,u)=>u[1]-h[1]),s,i,y=0,r=0;o.length===0?s="feature":(s=o[0][0],y=o[0][1],i=o[1]?.[0],r=o.reduce((h,[,u])=>h+u,0));let p=r>0?y/r:.4;d&&(p=Math.max(p,.7)),p=Math.round(p*100)/100;let f=k[s]||[],A="medium",R=a.split(/\s+/).length;t.length>=5||R>=100?A="high":t.length<=1&&R<30&&(A="low");let b=g.length>0||t.some(h=>h.startsWith("^")),O={audit:["architect"],analysis:["architect"],design:["architect"],research:["architect"],documentation:["architect"],bugfix:["security","builder"],refactor:["architect","builder"],feature:["architect","security","builder","tester"]},C={audit:{min:.3,max:.5},analysis:{min:.3,max:.5},design:{min:.4,max:.7},research:{min:.3,max:.6},documentation:{min:.25,max:.45},bugfix:{min:.5,max:.8},refactor:{min:.6,max:.85},feature:{min:.8,max:1.2}},m=`classified ${s} (${p.toFixed(2)})`+(i?`; alt ${i}`:"")+"; override with agents:[...] if misrouted";return {type:s,confidence:p,...i?{alternativeType:i}:{},overrideHint:m,complexity:A,recommendedAgents:O[s]||["architect","builder"],securityRequired:b,costMultiplier:C[s]||{min:.8,max:1},matchedKeywords:f,symbols:t}}function Q(a){return Te.has(a)}var ee={opus:{input:15,output:75},sonnet:{input:3,output:15},haiku:{input:.25,output:1.25}},te={architect:{input:8e3,output:4e3},security:{input:6e3,output:3e3},reviewer:{input:5e3,output:2e3},builder:{input:15e3,output:1e4},tester:{input:8e3,output:5e3}};function Oe(a,e){let t=[],c=0,k=e.complexity==="high"?1.5:e.complexity==="low"?.6:1;for(let d of a.stages)for(let o of d.agents){let s=te[o.name]||{input:5e3,output:3e3},i=z[B[o.name]||"tier-2"]||"sonnet",y=ee[i],r=Math.round(s.input*k),p=Math.round(s.output*k),f=r+p,A=r/1e6*y.input+p/1e6*y.output;t.push({name:o.name,model:i,estimatedTokens:f,estimatedCost:Math.round(A*1e4)/1e4}),c+=A;}let g=0;for(let[d,o]of Object.entries(te)){let s=z[B[d]||"tier-2"]||"sonnet",i=ee[s];g+=o.input/1e6*i.input+o.output/1e6*i.output;}let n=g>0?c/g:1;return {agents:t,totalEstimatedCost:Math.round(c*1e4)/1e4,comparisonToBaseline:`${n.toFixed(2)}x`}}function Ce(a,e){let t=[],c=a.toLowerCase(),k=H(a);for(let[o,s]of Object.entries(e)){let i=[];for(let y of s.triggers||[]){if(y.type==="keyword"&&y.match)for(let r of y.match)c.includes(r.toLowerCase())&&i.push(`keyword:${r}`);if(y.type==="symbol"&&y.match)for(let r of y.match){let p=k.filter(f=>r.endsWith("*")?f.startsWith(r.slice(0,-1)):f===r);for(let f of p)i.push(`symbol:${f}`);}}if(i.length>0){let y=i.filter(b=>b.startsWith("keyword:")).length,r=i.filter(b=>b.startsWith("symbol:")).length,p=y>0&&r>0,f=i.length>=3||p?"high":i.length>=2?"medium":"low",A=s.role.split(`
503
- `)[0].trim(),R=A.length>50?A.slice(0,47)+"...":A;t.push({name:o,reason:R,confidence:f,triggers_matched:i});}}let g=new Set(t.map(o=>o.name)),n=[];for(let o of t){let s=e[o.name];if(s?.handoff_to)for(let i of s.handoff_to){if(g.has(i)||!e[i])continue;let y=e[i],r=[];for(let p of y.triggers||[]){if(p.type==="keyword"&&p.match)for(let f of p.match)c.includes(f.toLowerCase())&&r.push(`keyword:${f}`);if(p.type==="symbol"&&p.match)for(let f of p.match){let A=k.filter(R=>f.endsWith("*")?R.startsWith(f.slice(0,-1)):R===f);for(let R of A)r.push(`symbol:${R}`);}}if(r.length>0){g.add(i);let p=y.role.split(`
504
- `)[0].trim(),f=p.length>50?p.slice(0,47)+"...":p;n.push({name:i,reason:f,confidence:r.length>=2?"high":"medium",triggers_matched:[...r,`collaboration:handoff_from:${o.name}`]});}}}t.push(...n);let d={high:3,medium:2,low:1};return t.sort((o,s)=>d[s.confidence]-d[o.confidence])}function re(a){let e=M.join(a,".paradigm","agents.yaml");if(!E.existsSync(e))return null;try{let t=E.readFileSync(e,"utf-8");return G.load(t)}catch{return null}}async function Ie(a$1,e,t,c){let k=new Map,g;try{let{createTask:n,updateTask:d}=await import('./task-loader-YZME4RKE.js');g=await n(a$1,{blurb:t,priority:"medium",tags:["orchestration","epic"],claimant:{kind:"archetype",ref:"orchestrator"},external_ref:{kind:"orchestration",ref:e}});try{await d(a$1,g,{status:"in-progress"});}catch(o){a.flow("$dag-emission").warn("Epic promote to in-progress failed",{orchestrationId:e,epicTaskId:g,error:o instanceof Error?o.message:String(o)});}for(let o of c.stages)for(let s of o.agents)try{let i=(s.dependsOn||[]).map(r=>k.get(r)).filter(r=>typeof r=="string"),y=await n(a$1,{blurb:s.task,priority:"medium",tags:["orchestration"],claimant:{kind:"archetype",ref:s.name},parentTaskId:g,stage:o.stage,...i.length>0?{dependsOn:i}:{},external_ref:{kind:"orchestration",ref:e}});k.set(s.name,y);}catch(i){a.flow("$dag-emission").warn("Stage-agent task emission failed",{orchestrationId:e,agent:s.name,stage:o.stage,error:i instanceof Error?i.message:String(i)});}a.flow("$dag-emission").info("Emitted orchestration task DAG",{orchestrationId:e,epicTaskId:g,stageAgents:k.size});}catch(n){a.flow("$dag-emission").warn("Task DAG emission failed; orchestration continues",{orchestrationId:e,error:n instanceof Error?n.message:String(n)});}return {epicTaskId:g,agentTaskIds:k}}function Ye(a,e,t,c){let k=M.join(a,".paradigm","orchestrations");E.existsSync(k)||E.mkdirSync(k,{recursive:true});let g=M.join(k,`${e}.yaml`),n={id:e,task:t,created:new Date().toISOString(),status:"pending",mode:c.mode,symbols:c.symbols,estimatedAgents:c.estimatedAgents,estimatedTokens:c.estimatedTokens,stages:c.stages};try{E.writeFileSync(g,G.dump(n));}catch{}}function Me(a){let e=a?.filePlan;if(!(!e||e.length===0))return [{group:"all",subPhase:0,files:e.map(t=>({path:t,description:""}))}]}function Le(a){let e=Me(a);if(!e||e.length===0)return {hasFilePlan:false,stages:[{subPhase:0,builders:[{agent:"builder",group:"all",files:[],availableFiles:[]}]}],totalFiles:0,totalBuilders:1};let t=new Map;for(let o of e){let s=t.get(o.subPhase)||[];s.push(o),t.set(o.subPhase,s);}let c=[],k=[...t.keys()].sort((o,s)=>o-s),g=[],n=0,d=0;for(let o of k){let s=t.get(o),i=[];for(let y=0;y<s.length;y++){let r=s[y];d+=r.files.length,n++,i.push({agent:`builder-${o}-${y}`,group:r.group,files:r.files,availableFiles:[...g]});}c.push({subPhase:o,builders:i});for(let y of s)for(let r of y.files)g.push(r.path);}return {hasFilePlan:true,stages:c,totalFiles:d,totalBuilders:n}}export{ue as a,We as b,Fe as c,Ee as d,Ce as e,re as f,Ie as g,Le as h};
502
+ `),s=e.defaultModel||J[G[e.name]||"tier-2"]||"sonnet",i=r.nickname?`[${r.nickname} (${e.name})]`:`[${e.name}]`;return {agent:e.name,model:s,prompt:o,taskDescription:`${e.name}: ${t.slice(0,50)}${t.length>50?"...":""}`,subagentType:"general-purpose",attribution:i,focusAreas:e.focus||{reads:["**/*"],writes:["**/*"]}}}function K(r){let e=r.match(me)||[];return [...new Set(e)]}function ve(r){let e=r.charAt(0);return {"@":"feature","#":"component",$:"flow","%":"state","^":"gate","!":"signal","?":"idea","&":"integration","~":"deprecated"}[e]||"unknown"}var Se=["should","what","how","why","recommend","analyze","compare","evaluate","assess","review","explain","describe","investigate","which","best practice","trade-off","pros and cons"],Ae=["document","write docs","readme",".purpose","purpose file","jsdoc","tsdoc","comments","docstring","api docs"],xe=["bug","fix","broken","not working","issue","error","crash","fails","failing","wrong","incorrect","regression","patch"],_e=["rename","refactor","migrate","restructure","move","reorganize","clean up","cleanup","consolidate","extract","inline","simplify"],Te=["auth","permission","admin","delete","purge","password","credential","token","secret","key","encrypt","decrypt","ownership","transfer","privilege","escalation","impersonation","takeover","rbac","acl","role","guard","middleware","session","cookie","csrf","xss","injection","sanitize"],Re=["audit","self-audit","inspect","examine","survey","inventory","find issues","identify problems","identify gaps","gap analysis","health check","sanity check","post-mortem","postmortem"],Pe=["design","architect","architecture","spec","specify","specification","blueprint","plan","propose","proposal","rfc","schema design","api design","data model"],Ee=["research","investigate","explore","study","discover","spike","prototype","feasibility","survey the","literature","prior art","options for","approaches to"],De=new Set(["analysis","audit","design","research","documentation"]),Oe=[{pattern:/^(please\s+)?(audit|self-audit)\b/,family:"audit"},{pattern:/^(please\s+)?(analy[sz]e|assess|evaluate|examine|inspect|review)\b/,family:"analysis"},{pattern:/^(please\s+)?(design|architect|spec|specify|plan|propose)\b/,family:"design"},{pattern:/^(please\s+)?(research|investigate|explore|study)\b/,family:"research"},{pattern:/^(please\s+)?(document|write\s+docs)\b/,family:"documentation"}],Ce={audit:1.3,analysis:1.1,design:1.2,research:1.2,documentation:1.1,bugfix:1,refactor:1};function de(r){let e=r.toLowerCase(),t=K(r),c=m=>m.filter(u=>e.includes(u.toLowerCase())),f={audit:c(Re),analysis:c(Se),design:c(Pe),research:c(Ee),documentation:c(Ae),bugfix:c(xe),refactor:c(_e)},p=c(Te),n={};for(let[m,u]of Object.entries(f))n[m]=u.length*(Ce[m]??1);let l;for(let{pattern:m,family:u}of Oe)if(m.test(e)){l=u,n[u]=(n[u]??0)+5;break}let o=Object.entries(n).filter(([,m])=>m>0).sort((m,u)=>u[1]-m[1]),s,i,b=0,a=0;o.length===0?s="feature":(s=o[0][0],b=o[0][1],i=o[1]?.[0],a=o.reduce((m,[,u])=>m+u,0));let g=a>0?b/a:.4;l&&(g=Math.max(g,.7)),g=Math.round(g*100)/100;let y=f[s]||[],A="medium",T=r.split(/\s+/).length;t.length>=5||T>=100?A="high":t.length<=1&&T<30&&(A="low");let w=p.length>0||t.some(m=>m.startsWith("^")),O={audit:["architect"],analysis:["architect"],design:["architect"],research:["architect"],documentation:["architect"],bugfix:["security","builder"],refactor:["architect","builder"],feature:["architect","security","builder","tester"]},C={audit:{min:.3,max:.5},analysis:{min:.3,max:.5},design:{min:.4,max:.7},research:{min:.3,max:.6},documentation:{min:.25,max:.45},bugfix:{min:.5,max:.8},refactor:{min:.6,max:.85},feature:{min:.8,max:1.2}},h=`classified ${s} (${g.toFixed(2)})`+(i?`; alt ${i}`:"")+"; override with agents:[...] if misrouted";return {type:s,confidence:g,...i?{alternativeType:i}:{},overrideHint:h,complexity:A,recommendedAgents:O[s]||["architect","builder"],securityRequired:w,costMultiplier:C[s]||{min:.8,max:1},matchedKeywords:y,symbols:t}}function Z(r){return De.has(r)}var ne={opus:{input:15,output:75},sonnet:{input:3,output:15},haiku:{input:.25,output:1.25}},se={architect:{input:8e3,output:4e3},security:{input:6e3,output:3e3},reviewer:{input:5e3,output:2e3},builder:{input:15e3,output:1e4},tester:{input:8e3,output:5e3}};function Me(r,e){let t=[],c=0,f=e.complexity==="high"?1.5:e.complexity==="low"?.6:1;for(let l of r.stages)for(let o of l.agents){let s=se[o.name]||{input:5e3,output:3e3},i=J[G[o.name]||"tier-2"]||"sonnet",b=ne[i],a=Math.round(s.input*f),g=Math.round(s.output*f),y=a+g,A=a/1e6*b.input+g/1e6*b.output;t.push({name:o.name,model:i,estimatedTokens:y,estimatedCost:Math.round(A*1e4)/1e4}),c+=A;}let p=0;for(let[l,o]of Object.entries(se)){let s=J[G[l]||"tier-2"]||"sonnet",i=ne[s];p+=o.input/1e6*i.input+o.output/1e6*i.output;}let n=p>0?c/p:1;return {agents:t,totalEstimatedCost:Math.round(c*1e4)/1e4,comparisonToBaseline:`${n.toFixed(2)}x`}}function Ie(r,e){let t=[],c=r.toLowerCase(),f=K(r);for(let[o,s]of Object.entries(e)){let i=[];for(let b of s.triggers||[]){if(b.type==="keyword"&&b.match)for(let a of b.match)c.includes(a.toLowerCase())&&i.push(`keyword:${a}`);if(b.type==="symbol"&&b.match)for(let a of b.match){let g=f.filter(y=>a.endsWith("*")?y.startsWith(a.slice(0,-1)):y===a);for(let y of g)i.push(`symbol:${y}`);}}if(i.length>0){let b=i.filter(w=>w.startsWith("keyword:")).length,a=i.filter(w=>w.startsWith("symbol:")).length,g=b>0&&a>0,y=i.length>=3||g?"high":i.length>=2?"medium":"low",A=s.role.split(`
503
+ `)[0].trim(),T=A.length>50?A.slice(0,47)+"...":A;t.push({name:o,reason:T,confidence:y,triggers_matched:i});}}let p=new Set(t.map(o=>o.name)),n=[];for(let o of t){let s=e[o.name];if(s?.handoff_to)for(let i of s.handoff_to){if(p.has(i)||!e[i])continue;let b=e[i],a=[];for(let g of b.triggers||[]){if(g.type==="keyword"&&g.match)for(let y of g.match)c.includes(y.toLowerCase())&&a.push(`keyword:${y}`);if(g.type==="symbol"&&g.match)for(let y of g.match){let A=f.filter(T=>y.endsWith("*")?T.startsWith(y.slice(0,-1)):T===y);for(let T of A)a.push(`symbol:${T}`);}}if(a.length>0){p.add(i);let g=b.role.split(`
504
+ `)[0].trim(),y=g.length>50?g.slice(0,47)+"...":g;n.push({name:i,reason:y,confidence:a.length>=2?"high":"medium",triggers_matched:[...a,`collaboration:handoff_from:${o.name}`]});}}}t.push(...n);let l={high:3,medium:2,low:1};return t.sort((o,s)=>l[s.confidence]-l[o.confidence])}function ue(r){let e=Y.join(r,".paradigm","agents.yaml");if(!D.existsSync(e))return null;try{let t=D.readFileSync(e,"utf-8");return H.load(t)}catch{return null}}async function Ne(r,e,t,c){let f=new Map,p;try{let{createTask:n,updateTask:l}=await import('./task-loader-LFEE6OU7.js');p=await n(r,{blurb:t,priority:"medium",tags:["orchestration","epic"],claimant:{kind:"archetype",ref:"orchestrator"},external_ref:{provider:"orchestration",ref:e}});try{await l(r,p,{status:"in-progress"});}catch(o){a.flow("$dag-emission").warn("Epic promote to in-progress failed",{orchestrationId:e,epicTaskId:p,error:o instanceof Error?o.message:String(o)});}for(let o of c.stages)for(let s of o.agents)try{let i=(s.dependsOn||[]).map(a=>f.get(a)).filter(a=>typeof a=="string"),b=await n(r,{blurb:s.task,priority:"medium",tags:["orchestration"],claimant:{kind:"archetype",ref:s.name},parentTaskId:p,stage:o.stage,...i.length>0?{dependsOn:i}:{},external_ref:{provider:"orchestration",ref:e}});f.set(s.name,b);}catch(i){a.flow("$dag-emission").warn("Stage-agent task emission failed",{orchestrationId:e,agent:s.name,stage:o.stage,error:i instanceof Error?i.message:String(i)});}a.flow("$dag-emission").info("Emitted orchestration task DAG",{orchestrationId:e,epicTaskId:p,stageAgents:f.size});}catch(n){a.flow("$dag-emission").warn("Task DAG emission failed; orchestration continues",{orchestrationId:e,error:n instanceof Error?n.message:String(n)});}return {epicTaskId:p,agentTaskIds:f}}function Ye(r,e,t,c){let f=Y.join(r,".paradigm","orchestrations");D.existsSync(f)||D.mkdirSync(f,{recursive:true});let p=Y.join(f,`${e}.yaml`),n={id:e,task:t,created:new Date().toISOString(),status:"pending",mode:c.mode,symbols:c.symbols,estimatedAgents:c.estimatedAgents,estimatedTokens:c.estimatedTokens,stages:c.stages};try{D.writeFileSync(p,H.dump(n));}catch{}}function $e(r){let e=r?.filePlan;if(!(!e||e.length===0))return [{group:"all",subPhase:0,files:e.map(t=>({path:t,description:""}))}]}function He(r){let e=$e(r);if(!e||e.length===0)return {hasFilePlan:false,stages:[{subPhase:0,builders:[{agent:"builder",group:"all",files:[],availableFiles:[]}]}],totalFiles:0,totalBuilders:1};let t=new Map;for(let o of e){let s=t.get(o.subPhase)||[];s.push(o),t.set(o.subPhase,s);}let c=[],f=[...t.keys()].sort((o,s)=>o-s),p=[],n=0,l=0;for(let o of f){let s=t.get(o),i=[];for(let b=0;b<s.length;b++){let a=s[b];l+=a.files.length,n++,i.push({agent:`builder-${o}-${b}`,group:a.group,files:a.files,availableFiles:[...p]});}c.push({subPhase:o,builders:i});for(let b of s)for(let a of b.files)p.push(a.path);}return {hasFilePlan:true,stages:c,totalFiles:l,totalBuilders:n}}export{ae as a,ee as b,Le as c,he as d,Be as e,Ge as f,Ue as g,de as h,Ie as i,ue as j,Ne as k,He as l};
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import {b as b$1,a}from'./chunk-EK4ZRIFJ.js';import {r}from'./chunk-D6BSCELB.js';import*as i from'fs';import*as c from'path';import*as f from'js-yaml';b$1();var g=".paradigm/arch.yaml";function u(e){let n=c.join(e,g);if(!i.existsSync(n))return null;try{let t=i.readFileSync(n,"utf8");return f.load(t)}catch{return null}}function S(e,n){let t=c.join(e,g),r=c.dirname(t);i.existsSync(r)||i.mkdirSync(r,{recursive:true}),i.writeFileSync(t,f.dump(n,{lineWidth:-1,noRefs:true}),"utf8");}function b(e,n){let t=u(e);if(!t)return {unassigned:[],missing_purpose:[]};let r$1=new Set;for(let o of t.tiers)for(let p of o.components)r$1.add(p);let s=new Set;try{let o=r(n.index,"component");for(let p of o)s.add(p.symbol);}catch(o){a.component("#arch-loader").warn("Could not load symbol index for drift check",{error:String(o)});}let a$1=Array.from(s).filter(o=>!r$1.has(o)),h=Array.from(r$1).filter(o=>!s.has(o));return {unassigned:a$1,missing_purpose:h}}function k(e){let n=r=>r.replace(/[^a-zA-Z0-9_-]/g,"-"),t=["graph TD"];for(let r of e.tiers){let s=n(r.id);t.push(` ${s}["${r.label}\\n(${r.responsibility})"]`);}for(let r of e.links){let s=n(r.from),a=n(r.to);r.via?t.push(` ${s} -->|"${r.via}"| ${a}`):t.push(` ${s} --> ${a}`);}return t.join(`
3
+ `)}export{g as a,u as b,S as c,b as d,k as e};
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import {f,g,h,i,j,k,l,m,n}from'./chunk-JIXHEBGK.js';import {a,e}from'./chunk-ZJQY5PPP.js';import*as $ from'fs';import*as A from'js-yaml';import {z}from'zod';import*as b from'path';var H={component:"#",flow:"$",gate:"^",signal:"!",aspect:"~"},ee={"#":"component",$:"flow","^":"gate","!":"signal","~":"aspect"},te=["#","$","^","!","~"];function oe(e){return te.includes(e)}var se=z.object({x:z.number(),y:z.number()}),ne=z.object({x:z.number(),y:z.number(),zoom:z.number()}),G=z.object({path:z.string(),include:z.array(z.string()).optional(),exclude:z.array(z.string()).optional()}),V=z.object({id:z.string(),symbol:z.string(),type:z.enum(["feature","component","flow","state","aspect","gate","signal","idea"]),content:z.string().optional(),position:se,tags:z.array(z.string()).optional(),created:z.string(),modified:z.string().optional()}),W=z.object({from:z.string(),to:z.string(),label:z.string().optional(),type:z.string().optional()}),re=z.object({id:z.string(),name:z.string(),nodes:z.array(z.string()),color:z.string().optional()}),Y=z.object({viewport:ne,groups:z.array(re).optional()}),ae=z.object({nodes:z.array(V),connections:z.array(W),layout:Y}),ie=z.object({id:z.string(),name:z.string(),timestamp:z.string(),description:z.string().optional(),state:ae}),ce=z.object({version:z.string(),metadata:z.object({name:z.string(),created:z.string(),modified:z.string()}),sources:z.object({purpose:z.array(G).optional(),portal:z.array(G).optional()}),nodes:z.array(V),connections:z.array(W),layout:Y,snapshots:z.array(ie).optional()});function we(e){let o=[],t;try{t=$.readFileSync(e,"utf8");}catch(s){return o.push(`Cannot read file: ${s.message}`),{data:null,errors:o,rawContent:void 0}}return pe(t)}function pe(e){let o=[],t=null;try{t=A.load(e);}catch(r){let l=r,c=l.mark?.line?l.mark.line+1:void 0;return o.push(`YAML syntax error: ${l.reason||r.message}${c?` (line ${c})`:""}`),{data:null,errors:o,rawContent:e}}if(t==null)return {data:X(),errors:[],rawContent:e};let s=ce.safeParse(t);if(!s.success){for(let r of s.error.issues){let l=r.path.join(".");o.push(`Schema error at ${l||"/"}: ${r.message}`);}return {data:t,errors:o,rawContent:e}}return {data:s.data,errors:[],rawContent:e}}function X(e="Untitled"){let o=new Date().toISOString();return {version:"1.0.0",metadata:{name:e,created:o,modified:o},sources:{purpose:[{path:"./"}],portal:[{path:"./portal.yaml"}]},nodes:[],connections:[],layout:{viewport:{x:0,y:0,zoom:1}}}}function ue(e){return e.metadata.modified=new Date().toISOString(),A.dump(e,{indent:2,lineWidth:-1,noRefs:true,sortKeys:false})}function Pe(e="My Project"){return ue(X(e))}function ve(e,o){return {...e,nodes:[...e.nodes,o],metadata:{...e.metadata,modified:new Date().toISOString()}}}function xe(e,o,t){return {...e,nodes:e.nodes.map(s=>s.id===o?{...s,position:t,modified:new Date().toISOString()}:s),metadata:{...e.metadata,modified:new Date().toISOString()}}}function Ce(e,o){return e.connections.some(s=>s.from===o.from&&s.to===o.to)?e:{...e,connections:[...e.connections,o],metadata:{...e.metadata,modified:new Date().toISOString()}}}function Te(e,o,t){let s={id:`snap-${Date.now()}`,name:o,timestamp:new Date().toISOString(),description:t,state:{nodes:[...e.nodes],connections:[...e.connections],layout:{...e.layout}}};return {...e,snapshots:[...e.snapshots||[],s],metadata:{...e.metadata,modified:new Date().toISOString()}}}async function le(e$1,o){let t=[],s=[],r=[],l$1=[];if(e$1.sources.purpose)for(let p of e$1.sources.purpose){let f$1=b.resolve(o,p.path);try{let u=await f(f$1);r.push(...u.map(a=>a.filePath));let m$1=g(u);for(let[a,{item:i,filePath:d}]of m$1){let P=["feature",...i.tags||[]];t.push(y({id:`purpose-feature-${a}`,symbol:`#${a}`,type:"component",source:"purpose",filePath:d,data:i,description:i.description,tags:P,componentType:i.type,parentSymbol:i.parent,anchors:i.anchors?.map(q=>R(q))}));}let h$1=h(u);for(let[a,{item:i,filePath:d}]of h$1)t.push(y({id:`purpose-component-${a}`,symbol:`#${a}`,type:"component",source:"purpose",filePath:d,data:i,description:i.description,tags:i.tags,componentType:i.type,parentSymbol:i.parent,anchors:i.anchors?.map(P=>R(P))}));let S=i(u);for(let[a,{item:i,filePath:d}]of S)t.push(y({id:`purpose-gate-${a}`,symbol:`^${a}`,type:"gate",source:"purpose",filePath:d,data:i,description:i.description}));let C=j(u);for(let[a,{item:i,filePath:d}]of C)t.push(y({id:`purpose-state-${a}`,symbol:`#${a}`,type:"component",source:"purpose",filePath:d,data:i,description:i.description,tags:["state"]}));let j$1=k(u);for(let[a,{item:i,filePath:d}]of j$1)t.push(y({id:`purpose-flow-${a}`,symbol:`$${a}`,type:"flow",source:"purpose",filePath:d,data:i,description:i.description}));let J=l(u);for(let[a,{item:i,filePath:d}]of J)t.push(y({id:`purpose-signal-${a}`,symbol:`!${a}`,type:"signal",source:"purpose",filePath:d,data:i,description:i.description}));let Q=m(u);for(let[a,{item:i,filePath:d}]of Q)t.push(y({id:`purpose-aspect-${a}`,symbol:`~${a}`,type:"aspect",source:"purpose",filePath:d,data:i,description:i.description,anchors:i.anchors?.map(P=>R(P)),appliesTo:i["applies-to"],tags:i.tags,enforcement:i.enforcement}));let Z=n(u),O=new Set(t.map(a=>a.symbol));for(let a of Z)O.has(a.symbol)||(O.add(a.symbol),t.push(y({id:`purpose-ref-${a.type}-${a.symbol.slice(1)}`,symbol:a.symbol,type:a.type,source:"purpose",filePath:a.filePath,data:{referencedFrom:a.sourceSymbol},description:`Referenced from ${a.sourceSymbol}`})));}catch(u){s.push({source:"purpose",filePath:f$1,message:u.message});}}if(e$1.sources.portal)for(let p of e$1.sources.portal){let f=b.resolve(o,p.path);try{let u;if(f.endsWith(".yaml")||f.endsWith(".yml"))u=await a(f),l$1.push(f);else {let m=await e(f);if(l$1.push(...m),m.length>0){u=await a(m[0]);for(let h=1;h<m.length;h++){let S=await a(m[h]);u.gates.push(...S.gates),u.flows.push(...S.flows);}}else continue}for(let m of u.gates){t.push(fe(m,f));for(let h of m.prizes)t.push(y({id:`gate-signal-${m.id}-${h.id}`,symbol:`!${h.id}`,type:"signal",source:"portal",filePath:f,data:h,description:`Signal from gate ${m.id}`}));}for(let m of u.flows)t.push(me(m,f));}catch(u){s.push({source:"portal",filePath:f,message:u.message});}}for(let p of e$1.nodes){let f=p.tags?.includes("idea");if(!p.content&&!f){let u=t.find(m=>m.symbol===p.symbol);if(u){u.position=p.position,u.tags=p.tags;continue}}t.push(y({id:p.id,symbol:p.symbol,type:p.type,source:"premise",filePath:".premise",data:p,description:p.content,position:p.position,tags:p.tags,created:p.created,modified:p.modified}));}ye(t);let c=new Map;for(let p of t){let f=c.get(p.symbol)||[];f.includes(p.filePath)||f.push(p.filePath),c.set(p.symbol,f);}let g$1=[];for(let[p,f]of c)f.length>1&&g$1.push({symbol:p,files:f});return {symbols:t,purposeFiles:r,portalFiles:l$1,errors:s,timestamp:Date.now(),...g$1.length>0?{duplicateSymbols:g$1}:{}}}function y(e){return {...e,data:e.data??null,references:e.references??[],referencedBy:e.referencedBy??[]}}function fe(e,o){let t=e.id.startsWith("^")?e.id.slice(1):e.id;return y({id:`gate-${t}`,symbol:`^${t}`,type:"gate",source:"portal",filePath:o,data:e,description:e.description,position:e.position})}function me(e,o){return y({id:`gate-flow-${e.id}`,symbol:`$${e.id}`,type:"flow",source:"portal",filePath:o,data:e,description:e.description})}function R(e){let o=e.lastIndexOf(":");if(o===-1||o===e.length-1)return {path:e,lines:0,raw:e};let t=e.slice(o+1),s=e.slice(0,o);if(!/^[\d,\- ]+$/.test(t))return {path:e,lines:0,raw:e};if(t.includes("-")){let[r,l]=t.split("-").map(Number);return {path:s,lines:[r,l],raw:e}}else if(t.includes(",")){let r=t.split(",").map(Number);return {path:s,lines:r,raw:e}}else return {path:s,lines:Number(t),raw:e}}var de=new Set(["$lib","$env","$app","$service-worker","$virtual","$schema","$ref","$id","$type"]);function ye(e){let o=new Map(e.map(t=>[t.symbol,t]));for(let t of e){let s=JSON.stringify(t.data),r=/(?:\?[@#$%~^!]|[@#$%~^!?])[a-zA-Z][\w-]*/g,l=(s.match(r)||[]).filter(c=>!de.has(c));for(let c of l)if(c!==t.symbol&&o.has(c)){t.references.includes(c)||t.references.push(c);let g=o.get(c);g&&!g.referencedBy.includes(t.symbol)&&g.referencedBy.push(t.symbol);}}}async function Re(e){let o={metadata:{name:b.basename(e),created:new Date().toISOString(),modified:new Date().toISOString()},sources:{purpose:[{path:"./"}],portal:[{path:"./"}]},nodes:[]};return le(o,e)}function he(){return {entries:new Map,byType:new Map,bySource:new Map,timestamp:0}}function je(e){let o=he();o.timestamp=e.timestamp;for(let t of e.symbols)o.entries.set(t.id,t),o.byType.has(t.type)||o.byType.set(t.type,[]),o.byType.get(t.type).push(t),o.bySource.has(t.source)||o.bySource.set(t.source,[]),o.bySource.get(t.source).push(t);return o}function I(e,o){for(let t of e.entries.values())if(t.symbol===o)return t}function Oe(e,o){return e.entries.get(o)}function x(e,o){return e.byType.get(o)||[]}function Be(e,o){return e.bySource.get(o)||[]}function ge(e,o){let t=o.toLowerCase(),s=[];for(let r of e.entries.values()){if(r.symbol.toLowerCase().includes(t)){s.push(r);continue}if(r.description?.toLowerCase().includes(t)){s.push(r);continue}if(r.tags?.some(l=>l.toLowerCase().includes(t))){s.push(r);continue}if(r.componentType?.toLowerCase().includes(t)){s.push(r);continue}}return s}function Le(e,o){return x(e,"component").filter(s=>s.componentType===o)}function Me(e){let o=new Set,t=x(e,"component");for(let s of t)s.componentType&&o.add(s.componentType);return Array.from(o).sort()}function De(e,o){return x(e,"component").filter(s=>s.parentSymbol===o)}function Ee(e,o){let t=I(e,o);return t?t.referencedBy.map(s=>I(e,s)).filter(s=>s!==void 0):[]}function _e(e,o){let t=I(e,o);return t?t.references.map(s=>I(e,s)).filter(s=>s!==void 0):[]}function ke(e,o){let t=[];for(let s of e.entries.values())s.tags?.includes(o)&&t.push(s);return t}function ze(e){let o=new Set;for(let t of e.entries.values())for(let s of t.tags||[])o.add(s);return Array.from(o).sort()}function Ne(e){let o={component:0,flow:0,gate:0,signal:0,aspect:0};for(let[t,s]of e.byType)t in o&&(o[t]=s.length);return o}function Fe(e){return Array.from(e.entries.values())}function K(e){if(e.length<2)return null;let o=e[0],t=e.slice(1);return oe(o)?{type:ee[o],name:t}:null}function Ge(e,o){return `${H[e]}${o}`}function Ue(e){return K(e)!==null}function Ve(e,o,t=10){let s=o.toLowerCase(),r=K(o);return r?x(e,r.type).filter(c=>c.symbol.toLowerCase().includes(s)).slice(0,t):ge(e,o).slice(0,t)}function be(e,o,t){if(b.isAbsolute(e))return {resolvedPath:e,baseUsed:"absolute",exists:$.existsSync(e)};let s=b.join(t,e);if($.existsSync(s))return {resolvedPath:s,baseUsed:"project-root",exists:true};let r=b.resolve(o,e);return $.existsSync(r)?{resolvedPath:r,baseUsed:"purpose-dir",exists:true}:{resolvedPath:s,baseUsed:"project-root",exists:false}}function We(e,o,t){if(b.isAbsolute(e)){let l=$.existsSync(e);return {rootResolves:l,purposeResolves:l,mismatch:false}}let s=$.existsSync(b.join(t,e)),r=$.existsSync(b.resolve(o,e));return {rootResolves:s,purposeResolves:r,mismatch:s!==r}}function Se(e,o){return e.includes("*")?new RegExp("^"+e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/\\\*/g,".*")+"$").test(o):e===o}function Ye(e,o,t){let s=[],r=x(e,"aspect"),l=new Set;for(let c of r){let g=c.appliesTo||[];if(g.length!==0)for(let p of g)for(let f of o){if(!Se(p,f))continue;let u=c.anchors||[];if(u.length===0){let m=`${c.symbol}::__no-anchors__`;l.has(m)||(l.add(m),s.push({aspectSymbol:c.symbol,anchorRaw:null,kind:"no-anchors"}));}else {let m=c.filePath?b.isAbsolute(c.filePath)?c.filePath:b.resolve(t,c.filePath):t,h=c.filePath?b.dirname(m):t;for(let S of u){let C=`${c.symbol}::${S.raw}`;if(l.has(C))continue;be(S.path,h,t).exists||(l.add(C),s.push({aspectSymbol:c.symbol,anchorRaw:S.raw,kind:"missing-file"}));}}}}return s}export{ze as A,Ne as B,Fe as C,K as D,Ge as E,Ue as F,Ve as G,be as H,We as I,Ye as J,H as a,ee as b,we as c,pe as d,X as e,ue as f,Pe as g,ve as h,xe as i,Ce as j,Te as k,le as l,Re as m,he as n,je as o,I as p,Oe as q,x as r,Be as s,ge as t,Le as u,Me as v,De as w,Ee as x,_e as y,ke as z};
2
+ import {g,h,i,j,k,l,m,n,o}from'./chunk-K6TLYNRQ.js';import {a,e}from'./chunk-ZJQY5PPP.js';import*as $ from'fs';import*as A from'js-yaml';import {z}from'zod';import*as b from'path';var H={component:"#",flow:"$",gate:"^",signal:"!",aspect:"~"},ee={"#":"component",$:"flow","^":"gate","!":"signal","~":"aspect"},te=["#","$","^","!","~"];function oe(e){return te.includes(e)}var se=z.object({x:z.number(),y:z.number()}),ne=z.object({x:z.number(),y:z.number(),zoom:z.number()}),G=z.object({path:z.string(),include:z.array(z.string()).optional(),exclude:z.array(z.string()).optional()}),V=z.object({id:z.string(),symbol:z.string(),type:z.enum(["feature","component","flow","state","aspect","gate","signal","idea"]),content:z.string().optional(),position:se,tags:z.array(z.string()).optional(),created:z.string(),modified:z.string().optional()}),W=z.object({from:z.string(),to:z.string(),label:z.string().optional(),type:z.string().optional()}),re=z.object({id:z.string(),name:z.string(),nodes:z.array(z.string()),color:z.string().optional()}),Y=z.object({viewport:ne,groups:z.array(re).optional()}),ae=z.object({nodes:z.array(V),connections:z.array(W),layout:Y}),ie=z.object({id:z.string(),name:z.string(),timestamp:z.string(),description:z.string().optional(),state:ae}),ce=z.object({version:z.string(),metadata:z.object({name:z.string(),created:z.string(),modified:z.string()}),sources:z.object({purpose:z.array(G).optional(),portal:z.array(G).optional()}),nodes:z.array(V),connections:z.array(W),layout:Y,snapshots:z.array(ie).optional()});function we(e){let o=[],t;try{t=$.readFileSync(e,"utf8");}catch(s){return o.push(`Cannot read file: ${s.message}`),{data:null,errors:o,rawContent:void 0}}return pe(t)}function pe(e){let o=[],t=null;try{t=A.load(e);}catch(r){let l=r,c=l.mark?.line?l.mark.line+1:void 0;return o.push(`YAML syntax error: ${l.reason||r.message}${c?` (line ${c})`:""}`),{data:null,errors:o,rawContent:e}}if(t==null)return {data:X(),errors:[],rawContent:e};let s=ce.safeParse(t);if(!s.success){for(let r of s.error.issues){let l=r.path.join(".");o.push(`Schema error at ${l||"/"}: ${r.message}`);}return {data:t,errors:o,rawContent:e}}return {data:s.data,errors:[],rawContent:e}}function X(e="Untitled"){let o=new Date().toISOString();return {version:"1.0.0",metadata:{name:e,created:o,modified:o},sources:{purpose:[{path:"./"}],portal:[{path:"./portal.yaml"}]},nodes:[],connections:[],layout:{viewport:{x:0,y:0,zoom:1}}}}function ue(e){return e.metadata.modified=new Date().toISOString(),A.dump(e,{indent:2,lineWidth:-1,noRefs:true,sortKeys:false})}function Pe(e="My Project"){return ue(X(e))}function ve(e,o){return {...e,nodes:[...e.nodes,o],metadata:{...e.metadata,modified:new Date().toISOString()}}}function xe(e,o,t){return {...e,nodes:e.nodes.map(s=>s.id===o?{...s,position:t,modified:new Date().toISOString()}:s),metadata:{...e.metadata,modified:new Date().toISOString()}}}function Ce(e,o){return e.connections.some(s=>s.from===o.from&&s.to===o.to)?e:{...e,connections:[...e.connections,o],metadata:{...e.metadata,modified:new Date().toISOString()}}}function Te(e,o,t){let s={id:`snap-${Date.now()}`,name:o,timestamp:new Date().toISOString(),description:t,state:{nodes:[...e.nodes],connections:[...e.connections],layout:{...e.layout}}};return {...e,snapshots:[...e.snapshots||[],s],metadata:{...e.metadata,modified:new Date().toISOString()}}}async function le(e$1,o$1){let t=[],s=[],r=[],l$1=[];if(e$1.sources.purpose)for(let p of e$1.sources.purpose){let f=b.resolve(o$1,p.path);try{let u=await g(f);r.push(...u.map(a=>a.filePath));let m$1=h(u);for(let[a,{item:i,filePath:d}]of m$1){let P=["feature",...i.tags||[]];t.push(y({id:`purpose-feature-${a}`,symbol:`#${a}`,type:"component",source:"purpose",filePath:d,data:i,description:i.description,tags:P,componentType:i.type,parentSymbol:i.parent,anchors:i.anchors?.map(q=>R(q))}));}let h$1=i(u);for(let[a,{item:i,filePath:d}]of h$1)t.push(y({id:`purpose-component-${a}`,symbol:`#${a}`,type:"component",source:"purpose",filePath:d,data:i,description:i.description,tags:i.tags,componentType:i.type,parentSymbol:i.parent,anchors:i.anchors?.map(P=>R(P))}));let S=j(u);for(let[a,{item:i,filePath:d}]of S)t.push(y({id:`purpose-gate-${a}`,symbol:`^${a}`,type:"gate",source:"purpose",filePath:d,data:i,description:i.description}));let C=k(u);for(let[a,{item:i,filePath:d}]of C)t.push(y({id:`purpose-state-${a}`,symbol:`#${a}`,type:"component",source:"purpose",filePath:d,data:i,description:i.description,tags:["state"]}));let j$1=l(u);for(let[a,{item:i,filePath:d}]of j$1)t.push(y({id:`purpose-flow-${a}`,symbol:`$${a}`,type:"flow",source:"purpose",filePath:d,data:i,description:i.description}));let J=m(u);for(let[a,{item:i,filePath:d}]of J)t.push(y({id:`purpose-signal-${a}`,symbol:`!${a}`,type:"signal",source:"purpose",filePath:d,data:i,description:i.description}));let Q=n(u);for(let[a,{item:i,filePath:d}]of Q)t.push(y({id:`purpose-aspect-${a}`,symbol:`~${a}`,type:"aspect",source:"purpose",filePath:d,data:i,description:i.description,anchors:i.anchors?.map(P=>R(P)),appliesTo:i["applies-to"],tags:i.tags,enforcement:i.enforcement}));let Z=o(u),O=new Set(t.map(a=>a.symbol));for(let a of Z)O.has(a.symbol)||(O.add(a.symbol),t.push(y({id:`purpose-ref-${a.type}-${a.symbol.slice(1)}`,symbol:a.symbol,type:a.type,source:"purpose",filePath:a.filePath,data:{referencedFrom:a.sourceSymbol},description:`Referenced from ${a.sourceSymbol}`})));}catch(u){s.push({source:"purpose",filePath:f,message:u.message});}}if(e$1.sources.portal)for(let p of e$1.sources.portal){let f=b.resolve(o$1,p.path);try{let u;if(f.endsWith(".yaml")||f.endsWith(".yml"))u=await a(f),l$1.push(f);else {let m=await e(f);if(l$1.push(...m),m.length>0){u=await a(m[0]);for(let h=1;h<m.length;h++){let S=await a(m[h]);u.gates.push(...S.gates),u.flows.push(...S.flows);}}else continue}for(let m of u.gates){t.push(fe(m,f));for(let h of m.prizes)t.push(y({id:`gate-signal-${m.id}-${h.id}`,symbol:`!${h.id}`,type:"signal",source:"portal",filePath:f,data:h,description:`Signal from gate ${m.id}`}));}for(let m of u.flows)t.push(me(m,f));}catch(u){s.push({source:"portal",filePath:f,message:u.message});}}for(let p of e$1.nodes){let f=p.tags?.includes("idea");if(!p.content&&!f){let u=t.find(m=>m.symbol===p.symbol);if(u){u.position=p.position,u.tags=p.tags;continue}}t.push(y({id:p.id,symbol:p.symbol,type:p.type,source:"premise",filePath:".premise",data:p,description:p.content,position:p.position,tags:p.tags,created:p.created,modified:p.modified}));}ye(t);let c=new Map;for(let p of t){let f=c.get(p.symbol)||[];f.includes(p.filePath)||f.push(p.filePath),c.set(p.symbol,f);}let g$1=[];for(let[p,f]of c)f.length>1&&g$1.push({symbol:p,files:f});return {symbols:t,purposeFiles:r,portalFiles:l$1,errors:s,timestamp:Date.now(),...g$1.length>0?{duplicateSymbols:g$1}:{}}}function y(e){return {...e,data:e.data??null,references:e.references??[],referencedBy:e.referencedBy??[]}}function fe(e,o){let t=e.id.startsWith("^")?e.id.slice(1):e.id;return y({id:`gate-${t}`,symbol:`^${t}`,type:"gate",source:"portal",filePath:o,data:e,description:e.description,position:e.position})}function me(e,o){return y({id:`gate-flow-${e.id}`,symbol:`$${e.id}`,type:"flow",source:"portal",filePath:o,data:e,description:e.description})}function R(e){let o=e.lastIndexOf(":");if(o===-1||o===e.length-1)return {path:e,lines:0,raw:e};let t=e.slice(o+1),s=e.slice(0,o);if(!/^[\d,\- ]+$/.test(t))return {path:e,lines:0,raw:e};if(t.includes("-")){let[r,l]=t.split("-").map(Number);return {path:s,lines:[r,l],raw:e}}else if(t.includes(",")){let r=t.split(",").map(Number);return {path:s,lines:r,raw:e}}else return {path:s,lines:Number(t),raw:e}}var de=new Set(["$lib","$env","$app","$service-worker","$virtual","$schema","$ref","$id","$type"]);function ye(e){let o=new Map(e.map(t=>[t.symbol,t]));for(let t of e){let s=JSON.stringify(t.data),r=/(?:\?[@#$%~^!]|[@#$%~^!?])[a-zA-Z][\w-]*/g,l=(s.match(r)||[]).filter(c=>!de.has(c));for(let c of l)if(c!==t.symbol&&o.has(c)){t.references.includes(c)||t.references.push(c);let g=o.get(c);g&&!g.referencedBy.includes(t.symbol)&&g.referencedBy.push(t.symbol);}}}async function Re(e){let o={metadata:{name:b.basename(e),created:new Date().toISOString(),modified:new Date().toISOString()},sources:{purpose:[{path:"./"}],portal:[{path:"./"}]},nodes:[]};return le(o,e)}function he(){return {entries:new Map,byType:new Map,bySource:new Map,timestamp:0}}function je(e){let o=he();o.timestamp=e.timestamp;for(let t of e.symbols)o.entries.set(t.id,t),o.byType.has(t.type)||o.byType.set(t.type,[]),o.byType.get(t.type).push(t),o.bySource.has(t.source)||o.bySource.set(t.source,[]),o.bySource.get(t.source).push(t);return o}function I(e,o){for(let t of e.entries.values())if(t.symbol===o)return t}function Oe(e,o){return e.entries.get(o)}function x(e,o){return e.byType.get(o)||[]}function Be(e,o){return e.bySource.get(o)||[]}function ge(e,o){let t=o.toLowerCase(),s=[];for(let r of e.entries.values()){if(r.symbol.toLowerCase().includes(t)){s.push(r);continue}if(r.description?.toLowerCase().includes(t)){s.push(r);continue}if(r.tags?.some(l=>l.toLowerCase().includes(t))){s.push(r);continue}if(r.componentType?.toLowerCase().includes(t)){s.push(r);continue}}return s}function Le(e,o){return x(e,"component").filter(s=>s.componentType===o)}function Me(e){let o=new Set,t=x(e,"component");for(let s of t)s.componentType&&o.add(s.componentType);return Array.from(o).sort()}function De(e,o){return x(e,"component").filter(s=>s.parentSymbol===o)}function Ee(e,o){let t=I(e,o);return t?t.referencedBy.map(s=>I(e,s)).filter(s=>s!==void 0):[]}function _e(e,o){let t=I(e,o);return t?t.references.map(s=>I(e,s)).filter(s=>s!==void 0):[]}function ke(e,o){let t=[];for(let s of e.entries.values())s.tags?.includes(o)&&t.push(s);return t}function ze(e){let o=new Set;for(let t of e.entries.values())for(let s of t.tags||[])o.add(s);return Array.from(o).sort()}function Ne(e){let o={component:0,flow:0,gate:0,signal:0,aspect:0};for(let[t,s]of e.byType)t in o&&(o[t]=s.length);return o}function Fe(e){return Array.from(e.entries.values())}function K(e){if(e.length<2)return null;let o=e[0],t=e.slice(1);return oe(o)?{type:ee[o],name:t}:null}function Ge(e,o){return `${H[e]}${o}`}function Ue(e){return K(e)!==null}function Ve(e,o,t=10){let s=o.toLowerCase(),r=K(o);return r?x(e,r.type).filter(c=>c.symbol.toLowerCase().includes(s)).slice(0,t):ge(e,o).slice(0,t)}function be(e,o,t){if(b.isAbsolute(e))return {resolvedPath:e,baseUsed:"absolute",exists:$.existsSync(e)};let s=b.join(t,e);if($.existsSync(s))return {resolvedPath:s,baseUsed:"project-root",exists:true};let r=b.resolve(o,e);return $.existsSync(r)?{resolvedPath:r,baseUsed:"purpose-dir",exists:true}:{resolvedPath:s,baseUsed:"project-root",exists:false}}function We(e,o,t){if(b.isAbsolute(e)){let l=$.existsSync(e);return {rootResolves:l,purposeResolves:l,mismatch:false}}let s=$.existsSync(b.join(t,e)),r=$.existsSync(b.resolve(o,e));return {rootResolves:s,purposeResolves:r,mismatch:s!==r}}function Se(e,o){return e.includes("*")?new RegExp("^"+e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/\\\*/g,".*")+"$").test(o):e===o}function Ye(e,o,t){let s=[],r=x(e,"aspect"),l=new Set;for(let c of r){let g=c.appliesTo||[];if(g.length!==0)for(let p of g)for(let f of o){if(!Se(p,f))continue;let u=c.anchors||[];if(u.length===0){let m=`${c.symbol}::__no-anchors__`;l.has(m)||(l.add(m),s.push({aspectSymbol:c.symbol,anchorRaw:null,kind:"no-anchors"}));}else {let m=c.filePath?b.isAbsolute(c.filePath)?c.filePath:b.resolve(t,c.filePath):t,h=c.filePath?b.dirname(m):t;for(let S of u){let C=`${c.symbol}::${S.raw}`;if(l.has(C))continue;be(S.path,h,t).exists||(l.add(C),s.push({aspectSymbol:c.symbol,anchorRaw:S.raw,kind:"missing-file"}));}}}}return s}export{ze as A,Ne as B,Fe as C,K as D,Ge as E,Ue as F,Ve as G,be as H,We as I,Ye as J,H as a,ee as b,we as c,pe as d,X as e,ue as f,Pe as g,ve as h,xe as i,Ce as j,Te as k,le as l,Re as m,he as n,je as o,I as p,Oe as q,x as r,Be as s,ge as t,Le as u,Me as v,De as w,Ee as x,_e as y,ke as z};
@@ -1998,6 +1998,7 @@ exit 0
1998
1998
  `)[0]||"unknown error"}`}finally{try{e.unlinkSync(c);}catch{}}}catch{return null}}var J=`#!/bin/sh
1999
1999
  # Paradigm post-commit hook - captures history from commits
2000
2000
  # Installed by: paradigm hooks install
2001
+ # paradigm-hook-version: 2 (v2 adds the provider-agnostic sync-commit delegate)
2001
2002
 
2002
2003
  # Get the commit message and hash
2003
2004
  COMMIT_HASH=$(git rev-parse HEAD)
@@ -2041,6 +2042,14 @@ if [ -n "$MSG_SYMBOLS" ]; then
2041
2042
  SYMBOLS=$(echo "$SYMBOLS" | tr ',' '\\n' | sort -u | tr '\\n' ',' | sed 's/,$//')
2042
2043
  fi
2043
2044
 
2045
+ # Provider-agnostic sync delegate (Phase 2b). A touched symbol drops a comment
2046
+ # on any linked external item. ENTIRELY best-effort: redirected + '|| true' so a
2047
+ # commit is NEVER slowed-to-notice or blocked. The hook NEVER names a provider \u2014
2048
+ # sync-commit resolves it abstractly from the task's external_ref via the registry.
2049
+ if [ -n "$MSG_SYMBOLS" ]; then
2050
+ npx paradigm task sync-commit --hash "$COMMIT_HASH" --symbols "$MSG_SYMBOLS" >/dev/null 2>&1 || true
2051
+ fi
2052
+
2044
2053
  # Determine intent from commit message
2045
2054
  determine_intent() {
2046
2055
  case "$COMMIT_MSG" in
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env node
2
+ import {c,b as b$2}from'./chunk-3KVVC4WV.js';import {j,a as a$1,d,g as g$1}from'./chunk-KAUGQMXU.js';import {z,i,c as c$1,f as f$1,j as j$1}from'./chunk-KAFQA7HV.js';import {b as b$1,a as a$2}from'./chunk-EK4ZRIFJ.js';import {f,b as b$3}from'./chunk-ECO3LHCE.js';import {b,a}from'./chunk-5TAVYPOV.js';import*as l from'fs';import*as g from'path';import*as nt from'js-yaml';import*as T from'os';function Q(e){return g.join(e,K,ut)}function gt(){let e=Date.now(),t=Math.floor(Math.random()*9999).toString().padStart(4,"0");return `ev-${e}-${t}`}function E(e,t){let n={id:gt(),timestamp:new Date().toISOString(),...t};_.push(n),_.length>k&&(_=_.slice(-k));try{let o=g.join(e,K);l.mkdirSync(o,{recursive:!0});let r=Q(e);l.appendFileSync(r,JSON.stringify(n)+`
3
+ `,"utf8"),pt(r);}catch{}return n}function pt(e){try{if(l.statSync(e).size>512*1024){let o=l.readFileSync(e,"utf8").trim().split(`
4
+ `);if(o.length>k){let r=o.slice(-k);l.writeFileSync(e,r.join(`
5
+ `)+`
6
+ `,"utf8");}}}catch{}}function Lt(e,t){let n=ht(e);return t?.type&&(n=n.filter(o=>o.type===t.type)),t?.source&&(n=n.filter(o=>o.source===t.source)),t?.symbol&&(n=n.filter(o=>o.symbols?.includes(t.symbol))),t?.agent&&(n=n.filter(o=>o.agent===t.agent)),t?.since&&(n=n.filter(o=>o.timestamp>=t.since)),n.sort((o,r)=>r.timestamp.localeCompare(o.timestamp)),t?.limit&&(n=n.slice(0,t.limit)),n}function ht(e){let t=Q(e);if(!l.existsSync(t))return [..._];try{return l.readFileSync(t,"utf8").trim().split(`
7
+ `).filter(r=>r.trim()).map(r=>{try{return JSON.parse(r)}catch{return null}}).filter(r=>r!==null)}catch{return [..._]}}function Z(e,t,n){let o=0,r=0,i=0,s=0;if(n.symbols?.length&&e.symbols?.length)for(let c of n.symbols)for(let a of e.symbols)X(c,a)&&(o=Math.max(o,1));if(n.paths?.length&&e.path){for(let c of n.paths)if(X(c,e.path)){r=1;break}}if(n.concepts?.length){let c=[e.context||"",...e.keywords||[],e.type||""].join(" ").toLowerCase(),a=0;for(let u of n.concepts)u&&c.includes(u.toLowerCase())&&a++;n.concepts.length>0&&(i=a/n.concepts.length);}if(n.signals?.length){for(let c of n.signals)if(c.type===e.type){s=1;break}}let f=[o,r,i,s].sort((c,a)=>a-c),d=f[0]*.5+f[1]*.2+f[2]*.15+f[3]*.15,m=n.threshold??.6;return {agentId:t,score:d,breakdown:{symbolMatch:o,pathMatch:r,conceptMatch:i,signalMatch:s},shouldNominate:d>=m,quietReason:d<m?"below-threshold":void 0}}function X(e,t){if(e===t)return true;let n=e.replace(/\*\*/g,"\xA7\xA7").replace(/\*/g,"[^/]*").replace(/§§/g,".*");try{return new RegExp(`^${n}$`).test(t)}catch{return false}}var K,ut,k,_,tt=b(()=>{K=".paradigm/events",ut="stream.jsonl",k=1e3,_=[];});function C(e){let t=g.join(e,yt);if(!l.existsSync(t))return {...b$2};try{let n=l.readFileSync(t,"utf8"),o=nt.load(n);return bt(b$2,o)}catch{return {...b$2}}}function bt(e,t){let n={...e};if(t.version&&(n.version=t.version),t.default_ring&&(n.default_ring=t.default_ring),t.observation&&(n.observation={allow:t.observation.allow||e.observation?.allow,deny:[...e.observation?.deny||[],...t.observation.deny||[]].filter((o,r,i)=>i.indexOf(o)===r)}),t.streams){n.streams={...e.streams};for(let o of ["work_log","learning_journal","team_decisions"])t.streams[o]&&(n.streams[o]={...e.streams?.[o],...t.streams[o],deny_content:[...e.streams?.[o]?.deny_content||[],...t.streams[o]?.deny_content||[]].filter((r,i,s)=>s.indexOf(r)===i)});}return t.upstream&&(n.upstream={...e.upstream,...t.upstream}),t.network&&(n.network={...e.network,...t.network}),t.agent_overrides&&(n.agent_overrides={...e.agent_overrides,...t.agent_overrides}),t.deployment&&(n.deployment={...e.deployment,...t.deployment}),n}function M(e,t,n){return n&&e.agent_overrides?.[n]?.observation&&e.agent_overrides[n].observation.deny?.some(r=>R(r,t))||e.observation?.deny?.some(o=>R(o,t))?false:e.observation?.allow?.length?e.observation.allow.some(o=>R(o,t)):true}function Gt(e,t,n){let o=t.streams?.[n];if(!o)return {filtered:e,redacted:[]};let r=[],i=e;if(o.redaction)for(let s of o.redaction)try{let f=new RegExp(s.pattern,"gi"),d=i.match(f);d&&(r.push(...d),i=i.replace(f,s.replacement||"[REDACTED]"));}catch{}return {filtered:i,redacted:r}}function R(e,t){if(e===t)return true;let n=e.replace(/\*\*/g,"\xA7\xA7").replace(/\*/g,"[^/]*").replace(/§§/g,".*");try{return new RegExp(`^${n}$`).test(t)}catch{return false}}var yt,ot=b(()=>{c();yt=".paradigm/data-policy.yaml";});function kt(){let e=Date.now(),t=Math.floor(Math.random()*9999).toString().padStart(4,"0");return `nom-${e}-${t}`}function jt(){let e=Date.now(),t=Math.floor(Math.random()*9999).toString().padStart(4,"0");return `dbt-${e}-${t}`}function st(e,t){let n=i(e),o=C(e),r=[];for(let m of n){if(!m.attention||!c$1(m.id,e)||t.path&&!M(o,t.path,m.id))continue;let c=Z(t,m.id,m.attention);c.shouldNominate&&r.push({profile:m,score:c});}if(r.length===0)return {nominations:[],debates:[]};let i$1=A(e,{since:new Date(Date.now()-3e4).toISOString()}),s=r.filter(({profile:m})=>!i$1.find(a=>a.agent===m.id&&a.brief===rt(m,t,{...r.find(u=>u.profile.id===m.id).score})));if(s.length===0)return {nominations:[],debates:[]};let f=s.map(({profile:m,score:c})=>{let a=Tt(t,c),u=Pt(m,t);return {id:kt(),agent:m.id,relevance:c.score,urgency:a,type:u,brief:rt(m,t,c),triggered_by:[t.id],timestamp:new Date().toISOString(),surfaced:false}});Dt(e,f);let d=At(e,f);return d.length>0&&Ft(e,d),{nominations:f,debates:d}}function Tt(e,t){return e.severity==="critical"?"critical":e.severity==="error"||e.type==="compliance-violation"||e.type==="error-encountered"?"high":e.type==="gate-added"||e.type==="route-created"||t.score>=.9?"medium":"low"}function Pt(e,t){let n=e.collaboration?.stance;return t.type==="compliance-violation"||t.type==="error-encountered"?"warning":t.type==="gate-added"||t.type==="route-created"?"observation":n==="advisory"||n==="lead"?"suggestion":"observation"}function rt(e,t,n){let o=e.role||e.id;switch(t.type){case "gate-checked":return `${o}: Gate check on ${t.symbols?.join(", ")||"route"} \u2014 verify gate coverage is complete`;case "file-modified":return `${o}: ${t.path||"File"} modified \u2014 review for ${e.id==="security"?"security implications":e.id==="tester"?"test coverage":e.id==="reviewer"?"code quality":"consistency"}`;case "compliance-violation":return `${o}: Compliance violation detected \u2014 ${t.context||"check .purpose and portal.yaml coverage"}`;case "route-created":return `${o}: New route ${t.symbols?.join(", ")||""} \u2014 ${e.id==="security"?"needs gate assignment in portal.yaml":"review route structure"}`;case "gate-added":return `${o}: Gate ${t.symbols?.join(", ")||""} added \u2014 ${e.id==="security"?"verify enforcement points":"check downstream impact"}`;case "decision-made":return `${o}: Decision recorded \u2014 ${t.context?.slice(0,80)||"review for alignment with project patterns"}`;case "work-completed":return `${o}: Work completed on ${t.symbols?.join(", ")||t.context?.slice(0,40)||"task"} \u2014 review outcome`;case "error-encountered":return `${o}: Error detected \u2014 ${t.context?.slice(0,80)||"investigate root cause"}`;default:{let r=n.breakdown.symbolMatch>0?`symbol match on ${t.symbols?.join(", ")||"unknown"}`:n.breakdown.pathMatch>0?`path ${t.path||"unknown"}`:t.context?.slice(0,60)||t.type;return `${o}: ${r}`}}}function At(e,t){if(t.length<2)return [];let n=[],o=new Map;for(let r of t)for(let i of r.triggered_by){let s=o.get(i)||[];s.push(r),o.set(i,s);}for(let[r,i]of o){if(i.length<2||new Set(i.map(m=>m.agent)).size<2)continue;let f=new Set(i.map(m=>m.type)),d=f.size>1&&f.has("warning")&&f.has("suggestion");n.push({id:jt(),topic:`Multiple agents responded to event ${r}`,nominations:i.map(m=>m.id),type:d?"conflicting":"complementary",overlap_events:[r]});}return n}function I(e){return g.join(e,S,St)}function L(e){return g.join(e,S,_t)}function Dt(e,t){try{let n=g.join(e,S);l.mkdirSync(n,{recursive:!0});let o=I(e),r=t.map(s=>JSON.stringify(s)).join(`
8
+ `)+`
9
+ `;l.appendFileSync(o,r,"utf8"),J(o,it);let{nominationTtlDays:i}=P(e);at(o,i*24*60*60*1e3);}catch{}}function Ft(e,t){try{let n=g.join(e,S);l.mkdirSync(n,{recursive:!0});let o=L(e),r=t.map(s=>JSON.stringify(s)).join(`
10
+ `)+`
11
+ `;l.appendFileSync(o,r,"utf8"),J(o,Et);let{debateTtlDays:i}=P(e);at(o,i*24*60*60*1e3);}catch{}}function $t(e,t){try{let n=g.join(e,S);l.mkdirSync(n,{recursive:!0});let o=g.join(n,wt);l.appendFileSync(o,JSON.stringify(t)+`
12
+ `,"utf8"),J(o,it);}catch(n){a$2.component("#promotion-decisions").warn("failed to record promotion decision",{agent:t.agent,error:n instanceof Error?n.message:String(n)});}}function J(e,t){try{let o=l.readFileSync(e,"utf8").trim().split(`
13
+ `).filter(r=>r.trim());if(o.length>t){let r=o.slice(-t);l.writeFileSync(e,r.join(`
14
+ `)+`
15
+ `,"utf8");}}catch{}}function P(e){let t={nominationTtlDays:Nt,debateTtlDays:vt};try{let n=g.join(e,".paradigm","config.yaml");if(!l.existsSync(n))return t;let o=a("js-yaml"),r=l.readFileSync(n,"utf8"),s=o.load(r)?.ambient;return s?{nominationTtlDays:typeof s["nomination-ttl-days"]=="number"?s["nomination-ttl-days"]:t.nominationTtlDays,debateTtlDays:typeof s["debate-ttl-days"]=="number"?s["debate-ttl-days"]:t.debateTtlDays}:t}catch{return t}}function at(e,t){try{if(!l.existsSync(e))return;let o=l.readFileSync(e,"utf8").trim().split(`
16
+ `).filter(s=>s.trim());if(o.length<=xt)return;let r=Date.now()-t,i=o.filter(s=>{try{let f=JSON.parse(s);return (f.timestamp?new Date(f.timestamp).getTime():Date.now())>=r}catch{return !0}});i.length<o.length&&l.writeFileSync(e,i.join(`
17
+ `)+`
18
+ `,"utf8");}catch{}}function A(e,t){let n=I(e);if(!l.existsSync(n))return [];try{let r=l.readFileSync(n,"utf8").trim().split(`
19
+ `).filter(i=>i.trim()).map(i=>{try{return JSON.parse(i)}catch{return null}}).filter(i=>i!==null);return t?.agent&&(r=r.filter(i=>i.agent===t.agent)),t?.urgency&&(r=r.filter(i=>i.urgency===t.urgency)),t?.surfaced!==void 0&&(r=r.filter(i=>i.surfaced===t.surfaced)),t?.pending_only&&(r=r.filter(i=>!i.engaged)),t?.since&&(r=r.filter(i=>i.timestamp>=t.since)),r.sort((i,s)=>s.timestamp.localeCompare(i.timestamp)),t?.limit&&(r=r.slice(0,t.limit)),r}catch{return []}}function Kt(e){let t=L(e);if(!l.existsSync(t))return [];try{return l.readFileSync(t,"utf8").trim().split(`
20
+ `).filter(o=>o.trim()).map(o=>{try{return JSON.parse(o)}catch{return null}}).filter(o=>o!==null)}catch{return []}}function Qt(e,t,n,o){let r=I(e);if(!l.existsSync(r))return false;try{let s=l.readFileSync(r,"utf8").trim().split(`
21
+ `),f=!1,d=s.map(m=>{try{let c=JSON.parse(m);return c.id===t?(c.engaged=!0,c.response=n,o&&(c.reason=o),f=!0,JSON.stringify(c)):m}catch{return m}});if(f&&(l.writeFileSync(r,d.join(`
22
+ `)+`
23
+ `,"utf8"),n==="accepted"||n==="dismissed")){let m=JSON.parse(s.find(a=>{try{return JSON.parse(a).id===t}catch{return !1}}));i(e).find(a=>a.id===m.agent)?.learning?.intrinsic?.feedback?.after_recommendation&&E(e,{type:"work-completed",source:"agent-action",agent:m.agent,context:`Nomination ${t} ${n} \u2014 feedback for learning`,data:{nomination_id:t,response:n}});}return f}catch{return false}}function Zt(e,t,n,o){let r=L(e);if(!l.existsSync(r))return false;try{let s=l.readFileSync(r,"utf8").trim().split(`
24
+ `),f=!1,d=s.map(m=>{try{let c=JSON.parse(m);if(c.id===t){c.resolution={chosen:n,reason:o,resolved_by:"human",resolved_at:new Date().toISOString()},f=!0;let a=c.nominations.filter(u=>u!==n);for(let u of a){let p=A(e).find(b=>b.id===u);p&&E(e,{type:"work-completed",source:"agent-action",agent:p.agent,context:`Debate ${t} resolved \u2014 nomination ${u} not chosen`,data:{debate_id:t,chosen:n,reason:o}});}return JSON.stringify(c)}return m}catch{return m}});return f&&l.writeFileSync(r,d.join(`
25
+ `)+`
26
+ `,"utf8"),f}catch{return false}}function te(e){let t=g.join(e,S,".last-processed"),n="";try{l.existsSync(t)&&(n=l.readFileSync(t,"utf8").trim());}catch{}let o=g.join(e,S,"stream.jsonl");if(!l.existsSync(o))return {processed:0,nominations:[]};let r=[];try{r=l.readFileSync(o,"utf8").trim().split(`
27
+ `).filter(a=>a.trim()).map(a=>{try{return JSON.parse(a)}catch{return null}}).filter(a=>a!==null);}catch{return {processed:0,nominations:[]}}let i=0;if(n){let c=r.findIndex(a=>a.id===n);c>=0&&(i=c+1);}let s=r.slice(i);if(s.length===0)return {processed:0,nominations:[]};let f=[],d=s.slice(0,50);for(let c of d){let{nominations:a}=st(e,c);f.push(...a);}let m=d[d.length-1];try{l.mkdirSync(g.join(e,S),{recursive:!0}),l.writeFileSync(t,m.id,"utf8");}catch{}return {processed:d.length,nominations:f}}function ee(e,t,n){let o=C(e);if(t.path&&!M(o,t.path))return {event:E(e,t),nominations:[],debates:[]};let r=E(e,t);if(n?.skipNominations)return {event:r,nominations:[],debates:[]};let{nominations:i,debates:s}=st(e,r);return i.length>0&&Rt(e,i),{event:r,nominations:i,debates:s}}function ne(e,t){let n=f$1(e,t);if(!n?.attention)return {adjusted:false,oldThreshold:.6,newThreshold:.6,reason:"No attention config"};let o=n.attention.threshold??.6,{nominationTtlDays:r}=P(e),i=r*24*60*60*1e3,d=A(e,{agent:t}).filter(h=>h.engaged||Date.now()-new Date(h.timestamp).getTime()<i).filter(h=>h.engaged);if(d.length<5)return {adjusted:false,oldThreshold:o,newThreshold:o,reason:`Insufficient data (${d.length}/5 engaged nominations)`};let m=d.filter(h=>h.response==="accepted").length,c=d.filter(h=>h.response==="dismissed").length,a=m/d.length,u=c/d.length,p=o,b="No adjustment needed";if(u>.6?(p=Math.min(.95,o+.05),b=`High dismiss rate (${(u*100).toFixed(0)}%) \u2014 raising threshold to reduce noise`):a>.8&&(p=Math.max(.2,o-.05),b=`High accept rate (${(a*100).toFixed(0)}%) \u2014 lowering threshold to contribute more`),p===o)return {adjusted:false,oldThreshold:o,newThreshold:p,reason:b};n.attention.threshold=p;let w=g.join(e,".paradigm/agents",`${t}.agent`),N=l.existsSync(w)?"project":"global";return j$1(t,n,N,e),E(e,{type:"work-completed",source:"agent-action",agent:t,context:`Attention threshold adjusted: ${o.toFixed(2)} \u2192 ${p.toFixed(2)} (${b})`,data:{old_threshold:o,new_threshold:p,accept_rate:a,dismiss_rate:u}}),{adjusted:true,oldThreshold:o,newThreshold:p,reason:b}}function Ot(e,t){let{nominationTtlDays:n}=P(e),o=n*24*60*60*1e3,i=A(e,{agent:t}).filter(a=>a.engaged||Date.now()-new Date(a.timestamp).getTime()<o),s=i.filter(a=>a.response==="accepted").length,f=i.filter(a=>a.response==="dismissed").length,d=i.filter(a=>a.response==="deferred").length,m=i.filter(a=>!a.engaged).length,c=s+f+d;return {total:i.length,accepted:s,dismissed:f,deferred:d,pending:m,acceptRate:c>0?s/c:0}}function oe(e){let n=i(e).filter(a=>c$1(a.id,e)).map(a=>{let u=Ot(e,a.id),p=0;try{let b=g.join(T.homedir(),".paradigm","notebooks",a.id);l.existsSync(b)&&(p=l.readdirSync(b).filter(w=>w.endsWith(".yaml")).length);}catch{}return {id:a.id,acceptRate:u.acceptRate,threshold:a.attention?.threshold??.5,expertiseCount:(a.expertise||[]).length,notebookCount:p,transferableCount:(a.transferable||[]).length,totalNominations:u.total}}),o=n.length||1,r=n.reduce((a,u)=>a+u.acceptRate,0)/o,i$1=n.reduce((a,u)=>a+u.threshold,0)/o,s=n.reduce((a,u)=>a+u.expertiseCount,0),f=n.reduce((a,u)=>a+u.notebookCount,0),d=n.reduce((a,u)=>a+u.transferableCount,0),m=n.reduce((a,u)=>a+u.totalNominations,0),c;return m<10?c="cold-start":r<.5?c="accumulating":r<.7?c="calibrating":c="mature",{agents:n,aggregate:{avgAcceptRate:r,avgThreshold:i$1,totalExpertise:s,totalNotebooks:f,totalTransferable:d},healthStatus:c}}function Rt(e,t){if(t.length===0)return;let n=g.join(T.homedir(),".paradigm","score","outbox");if(l.existsSync(n))try{let o=g.join(n,`nom-${Date.now()}.json`),r={type:"nomination_forward",nominations:t.map(i=>({...i})),origin:Ct(e),timestamp:new Date().toISOString()};l.writeFileSync(o,JSON.stringify(r),"utf8");}catch{}}function Ct(e){try{let t=g.join(e,".paradigm","config.yaml");if(l.existsSync(t)){let o=l.readFileSync(t,"utf8").match(/project:\s*(.+)/);if(o)return o[1].trim()}}catch{}return g.basename(e)}function re(e,t){let n=b$3(t,{trigger:"pattern_discovered",limit:100}),o=b$3(t,{trigger:"human_feedback",limit:100}),r=[...n,...o],i=[];for(let s of r){if(s.promoted_to_notebook)continue;let f=(s.tags||[s.pattern?.id||"learned-pattern"]).map(a$1).filter(Boolean),d$1=s.confidence_after??0,m=d$1>=.8,c=.5,a=false;try{let u=d(t,f,e);c=u.value,a=u.found;}catch{}if($t(e,{ts:new Date().toISOString(),agent:t,concepts:f,before:c,after:d$1,delta:d$1-c,promoted:m,priorFound:a,gate:"absolute-0.8"}),!((s.confidence_after??0)<.8))try{let{entry:u}=g$1(t,{context:s.pattern?.applies_when||s.insight.slice(0,80),snippet:s.pattern?.correct_approach||s.insight,confidence:s.confidence_after??.5,concepts:f,tags:s.tags??[],provenance:{source:"lore",loreEntryId:s.id,createdBy:t}},"global",e);i.push({journalId:s.id,notebookId:u.id});try{let p=g.join(T.homedir(),".paradigm","agents",t,"journal");if(l.existsSync(p)){let b=l.readdirSync(p).filter(w=>w.endsWith(".yaml"));for(let w of b){let N=g.join(p,w),h=l.readFileSync(N,"utf8");if(h.includes(s.id)){let U=h.replace(/promoted_to_notebook:.*$/m,`promoted_to_notebook: "${u.id}"`);if(U===h){let B=h.trimEnd().split(`
28
+ `);B.push(`promoted_to_notebook: "${u.id}"`),l.writeFileSync(N,B.join(`
29
+ `)+`
30
+ `,"utf8");}else l.writeFileSync(N,U,"utf8");break}}}}catch{}}catch(u){console.error("PROMOTE_THREW",u.message);}}return {promoted:i.length,entries:i}}function ie(e){let t=g.join(e,Mt),n={default_min_urgency:"low",enable_debates:true};if(!l.existsSync(t))return n;try{let o=a("js-yaml"),r=l.readFileSync(t,"utf8"),i=o.load(r);return {...n,...i}}catch{return n}}function se(e,t){let n={critical:0,high:1,medium:2,low:3},o=n[t.default_min_urgency||"low"]??3;return e.filter(r=>{let i=n[r.urgency]??3;if(t.preferences){let s=t.preferences.find(f=>f.agent===r.agent);if(s){if(s.always_show)return true;if(s.mute_unless?.length&&!s.mute_unless.some(d=>r.urgency===d||r.type===d))return false;if(s.min_urgency){let f=n[s.min_urgency]??3;return i<=f}}}return i<=o})}var S,St,wt,_t,it,Et,Nt,vt,xt,Mt,It=b(()=>{tt();ot();z();f();j();b$1();S=".paradigm/events",St="nominations.jsonl",wt="promotion-decisions.jsonl",_t="debates.jsonl",it=500,Et=200,Nt=7,vt=14,xt=100;Mt=".paradigm/surfacing.yaml";});export{Lt as a,tt as b,C as c,Gt as d,ot as e,st as f,At as g,Dt as h,A as i,Kt as j,Qt as k,Zt as l,te as m,ee as n,ne as o,Ot as p,oe as q,Rt as r,re as s,ie as t,se as u,It as v};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import*as s from'fs';import*as r from'path';import*as l from'js-yaml';var p=[{id:"explore-before-implement",name:"Explore Before Implementing",description:"Call ripple/navigate/search before modifying existing symbols to understand impact",category:"discovery",trigger:"preflight",severity:"advisory",check:{type:"tool-called",params:{tools:["paradigm_ripple","paradigm_navigate","paradigm_search","paradigm_related"]}},enabled:true},{id:"ripple-before-modify",name:"Ripple Before Modifying",description:"Run ripple analysis before modifying symbols with dependents",category:"discovery",trigger:"preflight",severity:"advisory",check:{type:"tool-called",params:{tools:["paradigm_ripple"]}},enabled:true},{id:"check-fragility",name:"Check Fragility",description:"Check history fragility for symbols before modifying frequently-broken code",category:"discovery",trigger:"preflight",severity:"advisory",check:{type:"tool-called",params:{tools:["paradigm_history_fragility"]}},enabled:true},{id:"wisdom-before-implement",name:"Check Team Wisdom",description:"Check team wisdom (preferences, antipatterns, decisions) before implementing",category:"collaboration",trigger:"preflight",severity:"advisory",check:{type:"tool-called",params:{tools:["paradigm_wisdom_context","paradigm_wisdom_expert"]}},enabled:true},{id:"verify-before-done",name:"Verify Before Done",description:"Run postflight compliance checks before finishing a session",category:"verification",trigger:"on-stop",severity:"warn",check:{type:"tool-called",params:{tools:["paradigm_pm_postflight"]}},enabled:true},{id:"postflight-compliance",name:"Postflight Compliance",description:"Ensure postflight checks pass without errors before finishing",category:"verification",trigger:"on-stop",severity:"advisory",check:{type:"tool-called",params:{tools:["paradigm_pm_postflight","paradigm_reindex"]}},enabled:true},{id:"test-new-components",name:"Test New Components",description:"New components should have associated tests or test plan documented",category:"testing",trigger:"postflight",severity:"advisory",check:{type:"tests-exist",params:{patterns:["**/*.test.*","**/*.spec.*","**/tests/**"]}},enabled:true},{id:"purpose-coverage",name:"Purpose File Coverage",description:"All modified source directories should have .purpose file coverage",category:"documentation",trigger:"postflight",severity:"warn",check:{type:"file-exists",params:{patterns:["**/.purpose"]}},enabled:true},{id:"record-lore-for-significant",name:"Record Lore for Significant Changes",description:"Sessions modifying 3+ files should record a lore entry",category:"documentation",trigger:"on-stop",severity:"warn",check:{type:"lore-recorded",params:{}},enabled:true},{id:"gates-for-routes",name:"Gates for Routes",description:"API routes should have corresponding gate declarations in portal.yaml",category:"security",trigger:"postflight",severity:"warn",check:{type:"gates-declared",params:{requireRoutes:true}},enabled:true},{id:"commit-message-symbols",name:"Commit Message Format",description:"Commit messages should follow type(#symbol): format and include a Symbols: trailer",category:"documentation",trigger:"on-commit",severity:"advisory",check:{type:"commit-message-format",params:{messagePatterns:["^(feat|fix|refactor|chore|docs|test|style|perf|ci|build)\\(","Symbols:"]}},enabled:true},{id:"flow-coverage-for-multi-component",name:"Flow Coverage",description:"Changes spanning 3+ components should have a documented $flow",category:"documentation",trigger:"postflight",severity:"advisory",check:{type:"flow-coverage",params:{minSteps:3}},enabled:true},{id:"context-session-awareness",name:"Context Awareness",description:"Use session recovery or context check tools for session continuity",category:"discovery",trigger:"preflight",severity:"advisory",check:{type:"context-checked",params:{contextTools:["paradigm_session_health","paradigm_session_recover","paradigm_session_checkpoint"]}},enabled:true},{id:"aspect-anchors-valid",name:"Aspect Anchors Valid",description:"Aspects touched during the session should have their code anchors validated",category:"verification",trigger:"postflight",severity:"advisory",check:{type:"aspect-anchored",params:{checkAnchors:true}},enabled:true}];var y=p,u=30*1e3;function v(t){try{let e=r.join(t,".paradigm","config.yaml");if(s.existsSync(e)){let i=s.readFileSync(e,"utf8"),a=l.load(i)?.limits;if(a?.habitsCacheTtlMs&&typeof a.habitsCacheTtlMs=="number")return a.habitsCacheTtlMs}}catch{}return u}var d=new Map;function H(t){let e=r.resolve(t),i=d.get(e),o=v(e);if(i&&Date.now()-i.loadedAt<o)return i.habits;let a=C(e);return d.set(e,{habits:a,loadedAt:Date.now()}),a}function C(t){let e=new Map;for(let n of y)e.set(n.id,{...n});let i=process.env.HOME||process.env.USERPROFILE||"~",o=g(r.join(i,".paradigm","habits.yaml"));o&&m(e,o);let a=f(r.join(i,".paradigm","habits"));for(let n of a)e.set(n.id,n);let c=g(r.join(t,".paradigm","habits.yaml"));c&&m(e,c);let b=f(r.join(t,".paradigm","habits"));for(let n of b)e.set(n.id,n);return Array.from(e.values())}function f(t){if(!s.existsSync(t))return [];try{let e=s.readdirSync(t).filter(o=>o.endsWith(".habit")).sort(),i=[];for(let o of e)try{let a=s.readFileSync(r.join(t,o),"utf8"),c=l.load(a);c?.id&&c?.name&&i.push(c);}catch{}return i}catch{return []}}function g(t){if(!s.existsSync(t))return null;try{let e=s.readFileSync(t,"utf8");return l.load(e)}catch{return null}}function m(t,e){if(e.habits)for(let i of e.habits)t.set(i.id,{...i});if(e.overrides)for(let[i,o]of Object.entries(e.overrides)){let a=t.get(i);a&&k(a,o);}}function k(t,e){e.severity!==void 0&&(t.severity=e.severity),e.enabled!==void 0&&(t.enabled=e.enabled);}function x(t){return t.filter(e=>e.enabled)}function w(t){let e=r.resolve(t);d.delete(e);}export{H as a,x as b,w as c};