adam-agent-server 1.0.0 → 1.1.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 (127) hide show
  1. package/dist/App-RIYRYLKD.js +9 -0
  2. package/dist/adam-tools-YBKSTHVJ.js +1 -0
  3. package/dist/approval-handler-JYIS2PKQ.js +1 -0
  4. package/dist/audit-manager-7M2CDMP5.js +1 -0
  5. package/dist/bree-engine-Y24K4PXN.js +1 -0
  6. package/dist/channels-WMCY4QC3.js +1 -0
  7. package/dist/{channels-NAPXRIOX.js → channels-WZOYE4O4.js} +1 -1
  8. package/dist/chunk-2HN2TSP6.js +5 -0
  9. package/dist/{chunk-ROSOI75V.js → chunk-3RAFA6QK.js} +1 -1
  10. package/dist/{chunk-I5RUEOSQ.js → chunk-4TCP2AT7.js} +1 -1
  11. package/dist/{chunk-42RHY3Q3.js → chunk-6DXNXLYG.js} +1 -1
  12. package/dist/chunk-6HD6NYIB.js +1 -0
  13. package/dist/{chunk-GA7GEIXB.js → chunk-6YURWVQG.js} +1 -1
  14. package/dist/chunk-7IFLU3CY.js +4 -0
  15. package/dist/{chunk-QMKQBU3R.js → chunk-7LBDLAUQ.js} +1 -1
  16. package/dist/{chunk-BONI2HUN.js → chunk-AJVN3KPM.js} +1 -1
  17. package/dist/{chunk-4TBGFHYX.js → chunk-AR2IZMM2.js} +1 -1
  18. package/dist/chunk-B4WHT7DX.js +8 -0
  19. package/dist/{chunk-XFTRKHH2.js → chunk-BIIP363C.js} +1 -1
  20. package/dist/{chunk-KHPXEUSY.js → chunk-CDVIT7L5.js} +1 -1
  21. package/dist/{chunk-BCELBB5Q.js → chunk-EGS6U3V5.js} +2 -2
  22. package/dist/{chunk-NFSXJNPD.js → chunk-EJVUUIAV.js} +1 -1
  23. package/dist/{chunk-X26NKAXY.js → chunk-GMCIKDTC.js} +1 -1
  24. package/dist/{chunk-2C5U3CNX.js → chunk-GUQAIWCQ.js} +1 -1
  25. package/dist/chunk-IHP7JV6J.js +1 -0
  26. package/dist/chunk-JTMFEUDA.js +1 -0
  27. package/dist/chunk-KLQOILIJ.js +21 -0
  28. package/dist/{chunk-CREHL4BN.js → chunk-KVSO3KGZ.js} +1 -1
  29. package/dist/{chunk-YEV5YTS3.js → chunk-MPRAVJUO.js} +1 -1
  30. package/dist/{chunk-6VPL5CXB.js → chunk-OEKM2W3K.js} +1 -1
  31. package/dist/{chunk-TEMWI6U5.js → chunk-OFOVSC72.js} +1 -1
  32. package/dist/chunk-PMHNW5IL.js +49 -0
  33. package/dist/{chunk-35DBEYMG.js → chunk-Q4YE5BU7.js} +1 -1
  34. package/dist/{chunk-PT55643Q.js → chunk-QN6BEJF5.js} +1 -1
  35. package/dist/{chunk-64FIXWFL.js → chunk-SWPXG2CY.js} +1 -1
  36. package/dist/{chunk-CFTWJZVX.js → chunk-U5NRQNBB.js} +14 -14
  37. package/dist/{chunk-QC6QVNKP.js → chunk-UW3OJG7U.js} +3 -3
  38. package/dist/chunk-WVGNP2LQ.js +3 -0
  39. package/dist/cli.js +4 -4
  40. package/dist/{config-N2GMLTPU.js → config-EI3SCA4W.js} +1 -1
  41. package/dist/config-OH6Q2D2Y.js +1 -0
  42. package/dist/{db-S6HDMJ3B.js → db-4NY7ZOS2.js} +1 -1
  43. package/dist/{delivery-log-VAI35G5V.js → delivery-log-SC2ULFCK.js} +1 -1
  44. package/dist/engine-JKSNQQDM.js +1 -0
  45. package/dist/{evolution-audit-KCFDGNSM.js → evolution-audit-KUBXFUHI.js} +1 -1
  46. package/dist/index.js +10 -10
  47. package/dist/{learner-ABYVK33T.js → learner-UYDFNURD.js} +1 -1
  48. package/dist/{memories-3ZAV55YZ.js → memories-FQCRKMK6.js} +1 -1
  49. package/dist/{memory-extractor-BHHKD7X7.js → memory-extractor-FUOJ5D77.js} +2 -2
  50. package/dist/memory-service-ANR67OPY.js +1 -0
  51. package/dist/outbound-gateway-6FQRWYFF.js +1 -0
  52. package/dist/role-presets-LRP6P5O2.js +1 -0
  53. package/dist/{roles-LXRHEVUK.js → roles-3UTFKSHI.js} +1 -1
  54. package/dist/runtime-B2DP3JNB.js +1 -0
  55. package/dist/session-manager-VYKNKQ46.js +1 -0
  56. package/dist/{task-templates-XQNKAA4U.js → task-templates-PSP7GOJJ.js} +1 -1
  57. package/package.json +2 -1
  58. package/web/dist/assets/Card-4mOZntHG.js +1 -0
  59. package/web/dist/assets/ChannelDetail-e6rVX_y8.js +1 -0
  60. package/web/dist/assets/Channels-DJvZPKer.js +12 -0
  61. package/web/dist/assets/Chat-hTZdEwyE.js +1 -0
  62. package/web/dist/assets/Dashboard-B4rL_ePs.js +1 -0
  63. package/web/dist/assets/{EmptyState-DBFJc4PL.js → EmptyState-BlgMMAr-.js} +1 -1
  64. package/web/dist/assets/EnvVarEditor-C8kRWejV.js +1 -0
  65. package/web/dist/assets/Evolution-BGwFCo7X.js +6 -0
  66. package/web/dist/assets/GoalDetail-BH2ku-0t.js +1 -0
  67. package/web/dist/assets/Goals-DynDtpMC.js +1 -0
  68. package/web/dist/assets/Logs-CyJFouE6.js +1 -0
  69. package/web/dist/assets/Memories-ClcFD7OG.js +1 -0
  70. package/web/dist/assets/{NotFound-Cidygwnn.js → NotFound-CSjhzSGa.js} +1 -1
  71. package/web/dist/assets/Plugins-SNOQNNcL.js +1 -0
  72. package/web/dist/assets/RoleDetail-vlTPiYwY.js +33 -0
  73. package/web/dist/assets/Roles-CFcuHIvA.js +1 -0
  74. package/web/dist/assets/Settings-C9Kuz-6D.js +1 -0
  75. package/web/dist/assets/Strategies-DZWlQCHp.js +1 -0
  76. package/web/dist/assets/Switch-DOi0EFHj.js +1 -0
  77. package/web/dist/assets/Table-BxbnOSbq.js +1 -0
  78. package/web/dist/assets/TaskDetail-DjmmnldI.js +2 -0
  79. package/web/dist/assets/Work-CvESHC3Y.js +1 -0
  80. package/web/dist/assets/index-BFmC20R2.js +52 -0
  81. package/web/dist/assets/index-CaocwyO8.css +2 -0
  82. package/web/dist/assets/{vendor-icons-ZPvC5PUS.js → vendor-icons-CkI4-NxL.js} +1 -1
  83. package/web/dist/assets/{vendor-react--nRVf2Ep.js → vendor-react-DLRtONKt.js} +1 -1
  84. package/web/dist/assets/vendor-state-B_-GdGNJ.js +1 -0
  85. package/web/dist/index.html +5 -5
  86. package/dist/App-SCPYTYGQ.js +0 -9
  87. package/dist/adam-tools-FNJJT7AA.js +0 -1
  88. package/dist/approval-handler-UDWAC5MF.js +0 -4
  89. package/dist/audit-manager-SCX53YJT.js +0 -1
  90. package/dist/bree-engine-2DB2QECM.js +0 -1
  91. package/dist/channels-PQCV74ZI.js +0 -1
  92. package/dist/chunk-3TIHZZMK.js +0 -1
  93. package/dist/chunk-7KCBFM2C.js +0 -52
  94. package/dist/chunk-FXFHGIY6.js +0 -8
  95. package/dist/chunk-IZQI6QQ7.js +0 -1
  96. package/dist/chunk-NQHTOFQP.js +0 -1
  97. package/dist/chunk-REKCZ3GY.js +0 -1
  98. package/dist/chunk-U3XVAAXA.js +0 -17
  99. package/dist/config-L4R273R3.js +0 -1
  100. package/dist/engine-E67UAI3G.js +0 -1
  101. package/dist/memory-service-5QHTKIUU.js +0 -1
  102. package/dist/outbound-gateway-ZFKSN2UT.js +0 -1
  103. package/dist/role-presets-OTU2M37Y.js +0 -1
  104. package/dist/runtime-UCOE6LNN.js +0 -1
  105. package/dist/session-manager-RPXFZKMY.js +0 -1
  106. package/web/dist/assets/Card-BecEmnPW.js +0 -1
  107. package/web/dist/assets/ChannelDetail-BajTUEU0.js +0 -1
  108. package/web/dist/assets/Channels-Bhy6rP_t.js +0 -12
  109. package/web/dist/assets/Chat-Dvt_Oo7d.js +0 -1
  110. package/web/dist/assets/Dashboard-DlrAor-C.js +0 -1
  111. package/web/dist/assets/Evolution-Dlsnnr4G.js +0 -6
  112. package/web/dist/assets/GoalDetail-BuUxwYdd.js +0 -1
  113. package/web/dist/assets/Goals-CkPQOev6.js +0 -1
  114. package/web/dist/assets/Logs-D33PqDAd.js +0 -1
  115. package/web/dist/assets/Memories-D31dbUM6.js +0 -1
  116. package/web/dist/assets/Plugins-XlBr07x8.js +0 -1
  117. package/web/dist/assets/RoleDetail-rZFlgXzh.js +0 -33
  118. package/web/dist/assets/Roles-d29AC6Kh.js +0 -1
  119. package/web/dist/assets/Settings-Bjh_RXYf.js +0 -1
  120. package/web/dist/assets/Strategies-Cf4ghknk.js +0 -1
  121. package/web/dist/assets/Switch-CxzUYL49.js +0 -1
  122. package/web/dist/assets/Table-tkJ-cuiE.js +0 -1
  123. package/web/dist/assets/TaskDetail-jMBJbaRU.js +0 -2
  124. package/web/dist/assets/Work-CCLTkitf.js +0 -1
  125. package/web/dist/assets/index-CVubgAlC.css +0 -2
  126. package/web/dist/assets/index-Ds41VvOC.js +0 -52
  127. package/web/dist/assets/vendor-state-CH64feAE.js +0 -1
@@ -0,0 +1,21 @@
1
+ import{g as y,k as T}from"./chunk-B4WHT7DX.js";import{d as h,h as F}from"./chunk-WBAPIPST.js";import{c as R,h as P}from"./chunk-INNDBLZE.js";import{c as v,e as A}from"./chunk-FCV2DPZQ.js";import{readFileSync as b,writeFileSync as C,existsSync as k}from"fs";import{join as W}from"path";function w(e){let n=W(d(e),".env");if(!k(n))return null;let i=b(n,"utf-8"),t={};for(let o of i.split(`
2
+ `)){let s=o.trim();if(!s||s.startsWith("#"))continue;let c=s.startsWith("export ")?s.slice(7).trim():s,u=c.indexOf("=");if(u===-1)continue;let f=c.slice(0,u).trim(),r=c.slice(u+1).trim();(r.startsWith('"')&&r.endsWith('"')||r.startsWith("'")&&r.endsWith("'"))&&(r=r.slice(1,-1)),!(r.includes("$")&&(r=r.replace(/\$\{(\w+)\}|\$(\w+)/g,(p,l,a)=>{let g=l??a;return t[g]??process.env[g]??""}),!r))&&(t[f]=r)}return t}function V(e,n){let i=w(e);if(!i)return n;let t={...n},o=0;for(let[s,c]of Object.entries(i)){if(s.startsWith("ANTHROPIC_")){x.warn({roleName:e,key:s},"Role .env contains ANTHROPIC_* key; ignored (managed globally)");continue}s in t||(t[s]=c,o++)}return o>0&&x.info({roleName:e,seeded:o},"Seeded role envVars from .env file"),Object.keys(t).length>0?t:void 0}function M(e,n){let i=w(e);if(!i)return[];let t=n??{},o=[];for(let[s,c]of Object.entries(i)){if(s.startsWith("ANTHROPIC_"))continue;let u=t[s]??"";u!==c&&o.push({envKey:s,dbValue:u,envValue:c})}for(let[s,c]of Object.entries(t))s in i||o.push({envKey:s,dbValue:c,envValue:""});return o}function N(e,n){let i=W(d(e),".env"),t=n??{},o=[],s=new Set;if(k(i)){let u=b(i,"utf-8");for(let f of u.split(`
3
+ `)){let r=f.trim();if(!r||r.startsWith("#")){o.push(f);continue}let p=r.startsWith("export ")?r.slice(7).trim():r,l=p.indexOf("=");if(l===-1){o.push(f);continue}let a=p.slice(0,l).trim(),g=r.startsWith("export ")?"export ":"";a in t&&(o.push(`${g}${a}=${t[a]}`),s.add(a))}}let c=0;for(let[u,f]of Object.entries(t)){if(s.has(u)){c++;continue}f&&f.length>0&&(o.push(`${u}=${f}`),c++)}return C(i,o.join(`
4
+ `)+`
5
+ `,"utf-8"),c}var x,E=v(()=>{"use strict";O();P();x=R("manager")});var U={};A(U,{ensureRoleWorkspace:()=>K,getRoleWorkspacePath:()=>d,syncRoleSettings:()=>I,writeRoleCLAUDEmd:()=>j});import{mkdirSync as $,writeFileSync as S}from"fs";import{join as m,basename as D}from"path";function d(e){let n=D(e);if(n!==e||!e)throw new Error(`Invalid role name for workspace: ${e}`);return m(_,"roles",n)}function K(e){let n=d(e.name);$(n,{recursive:!0}),$(m(n,".claude"),{recursive:!0}),j(n,e),I(e.id,e.allowedTools,n);let i=V(e.name,e.envVars);return i&&JSON.stringify(i)!==JSON.stringify(e.envVars)&&y(e.id,{envVars:i}),n}function j(e,n){let i=n.learnedRules&&n.learnedRules.length>0?n.learnedRules.map(o=>`- ${o}`).join(`
6
+ `):"(no learned rules yet)",t=`# ${n.name}
7
+
8
+ ${n.cagPrompt}
9
+
10
+ ## Learned Rules
11
+ ${i}
12
+ `;n.name==="chat-manager"&&(t+=`
13
+
14
+ ## Compaction Instructions
15
+ When summarizing, preserve:
16
+ - Active task IDs and their current status
17
+ - User's pending requests not yet addressed
18
+ - Key decisions made and their rationale
19
+ - Role assignments and execution outcomes
20
+ - Channel/session routing context
21
+ `),S(m(e,"CLAUDE.md"),t,"utf-8")}function I(e,n,i){let t={};n&&(t.allowedTools=n),S(m(i,".claude","settings.json"),JSON.stringify(t,null,2),"utf-8")}var _,O=v(()=>{"use strict";F();E();T();_=process.env.ADAM_TEST_DIR||h});export{w as a,M as b,N as c,E as d,d as e,K as f,j as g,I as h,U as i,O as j};
@@ -583,4 +583,4 @@ import{e as A,h as O}from"./chunk-WBAPIPST.js";import{c as R,h as X}from"./chunk
583
583
  message_type TEXT
584
584
  )
585
585
  `),e.exec(`INSERT INTO delivery_log_new (id, rule_id, task_id, status, target, content, attempts, error, created_at, delivered_at, expires_at)
586
- SELECT id, rule_id, task_id, status, target, content, attempts, error, created_at, delivered_at, expires_at FROM delivery_log`),e.exec("DROP TABLE delivery_log"),e.exec("ALTER TABLE delivery_log_new RENAME TO delivery_log"),e.exec("CREATE INDEX IF NOT EXISTS idx_delivery_log_rule ON delivery_log(rule_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_delivery_log_task ON delivery_log(task_id)")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<20&&(e.prepare("PRAGMA table_info(goals)").all().some(T=>T.name==="report_to")||e.exec("ALTER TABLE goals ADD COLUMN report_to TEXT"),e.prepare("PRAGMA table_info(task_templates)").all().some(T=>T.name==="report_to")||e.exec("ALTER TABLE task_templates ADD COLUMN report_to TEXT"),e.exec("UPDATE goals SET report_to = notify_targets WHERE notify_targets IS NOT NULL"),e.exec("UPDATE task_templates SET report_to = notify_targets WHERE notify_targets IS NOT NULL"),e.exec("UPDATE server_state SET schema_version = 20 WHERE id = 1")),e.prepare("PRAGMA table_info(config)").all().some(E=>E.name==="updated_at")||(e.exec("ALTER TABLE config ADD COLUMN updated_at INTEGER NOT NULL DEFAULT 0"),e.exec("UPDATE server_state SET schema_version = 21 WHERE id = 1"));let c=e.prepare("PRAGMA table_info(memories)").all();c.some(E=>E.name==="tier")||(e.exec("ALTER TABLE memories ADD COLUMN tier TEXT NOT NULL DEFAULT 'episodic'"),e.exec("CREATE INDEX IF NOT EXISTS idx_memories_tier ON memories(tier)")),c.some(E=>E.name==="superseded_by")||(e.exec("ALTER TABLE memories ADD COLUMN superseded_by TEXT"),e.exec("CREATE INDEX IF NOT EXISTS idx_memories_superseded ON memories(superseded_by)"));let L=e.prepare("PRAGMA table_info(memories)").all();L.some(E=>E.name==="tier")&&L.some(E=>E.name==="superseded_by")&&(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<22&&e.exec("UPDATE server_state SET schema_version = 22 WHERE id = 1");{let E=e.prepare("PRAGMA table_info(roles)").all();E.some(T=>T.name==="permission_mode")||e.exec("ALTER TABLE roles ADD COLUMN permission_mode TEXT DEFAULT NULL"),E.some(T=>T.name==="allowed_bash_patterns")||e.exec("ALTER TABLE roles ADD COLUMN allowed_bash_patterns TEXT DEFAULT NULL"),E.some(T=>T.name==="denied_bash_patterns")||e.exec("ALTER TABLE roles ADD COLUMN denied_bash_patterns TEXT DEFAULT NULL"),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<23&&e.exec("UPDATE server_state SET schema_version = 23 WHERE id = 1")}{let E=[[/\brm -rf\b/,["rm -rf *"]],[/^git push/,["git push*"]],[/^git reset/,["git reset*"]],[/\bcurl.*POST\b/i,["curl * -X POST*","curl * --request POST*"]]],s=e.prepare("SELECT key, value FROM config WHERE key = 'defaults.approvalRequired'").all();for(let T of s)try{let t=JSON.parse(T.value),i=[];for(let n of t){let a=!1;for(let[d,r]of E)if(d.test(n)){i.push(...r),a=!0,I.info({from:n,to:r},"Config: migrated approvalRequired pattern from regex to glob");break}a||(/[.+?^${}()|[\]\\]/.test(n)&&I.warn({pattern:n},"Config: approvalRequired pattern contains regex metacharacters that won't work with glob matching; update to glob syntax (use * for wildcards)"),i.push(n))}let N=[...new Set(i)];e.prepare("UPDATE config SET value = ?, updated_at = ? WHERE key = ?").run(JSON.stringify(N),Date.now(),T.key)}catch{}}}function K(){if(_)return _;let e=process.env.ADAM_DB_PATH||A,l=u(e);return S(l)||g(l,{recursive:!0}),_=new p(e),_.pragma("journal_mode = WAL"),_.pragma("foreign_keys = ON"),_.pragma("trusted_schema = ON"),D(_),_}function W(){_&&(_.close(),_=null)}var I,_,C=m(()=>{O();X();I=R("store"),_=null});export{D as a,K as b,W as c,C as d};
586
+ SELECT id, rule_id, task_id, status, target, content, attempts, error, created_at, delivered_at, expires_at FROM delivery_log`),e.exec("DROP TABLE delivery_log"),e.exec("ALTER TABLE delivery_log_new RENAME TO delivery_log"),e.exec("CREATE INDEX IF NOT EXISTS idx_delivery_log_rule ON delivery_log(rule_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_delivery_log_task ON delivery_log(task_id)")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<20&&(e.prepare("PRAGMA table_info(goals)").all().some(T=>T.name==="report_to")||e.exec("ALTER TABLE goals ADD COLUMN report_to TEXT"),e.prepare("PRAGMA table_info(task_templates)").all().some(T=>T.name==="report_to")||e.exec("ALTER TABLE task_templates ADD COLUMN report_to TEXT"),e.exec("UPDATE goals SET report_to = notify_targets WHERE notify_targets IS NOT NULL"),e.exec("UPDATE task_templates SET report_to = notify_targets WHERE notify_targets IS NOT NULL"),e.exec("UPDATE server_state SET schema_version = 20 WHERE id = 1")),e.prepare("PRAGMA table_info(config)").all().some(E=>E.name==="updated_at")||(e.exec("ALTER TABLE config ADD COLUMN updated_at INTEGER NOT NULL DEFAULT 0"),e.exec("UPDATE server_state SET schema_version = 21 WHERE id = 1"));let c=e.prepare("PRAGMA table_info(memories)").all();c.some(E=>E.name==="tier")||(e.exec("ALTER TABLE memories ADD COLUMN tier TEXT NOT NULL DEFAULT 'episodic'"),e.exec("CREATE INDEX IF NOT EXISTS idx_memories_tier ON memories(tier)")),c.some(E=>E.name==="superseded_by")||(e.exec("ALTER TABLE memories ADD COLUMN superseded_by TEXT"),e.exec("CREATE INDEX IF NOT EXISTS idx_memories_superseded ON memories(superseded_by)"));let L=e.prepare("PRAGMA table_info(memories)").all();L.some(E=>E.name==="tier")&&L.some(E=>E.name==="superseded_by")&&(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<22&&e.exec("UPDATE server_state SET schema_version = 22 WHERE id = 1");{let E=e.prepare("PRAGMA table_info(roles)").all();E.some(T=>T.name==="permission_mode")||e.exec("ALTER TABLE roles ADD COLUMN permission_mode TEXT DEFAULT NULL"),E.some(T=>T.name==="allowed_bash_patterns")||e.exec("ALTER TABLE roles ADD COLUMN allowed_bash_patterns TEXT DEFAULT NULL"),E.some(T=>T.name==="denied_bash_patterns")||e.exec("ALTER TABLE roles ADD COLUMN denied_bash_patterns TEXT DEFAULT NULL"),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<23&&e.exec("UPDATE server_state SET schema_version = 23 WHERE id = 1")}e.prepare("PRAGMA table_info(roles)").all().some(T=>T.name==="env_vars")||e.prepare("ALTER TABLE roles ADD COLUMN env_vars TEXT DEFAULT NULL").run(),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<24&&e.prepare("UPDATE server_state SET schema_version = 24 WHERE id = 1").run();{let E=[[/\brm -rf\b/,["rm -rf *"]],[/^git push/,["git push*"]],[/^git reset/,["git reset*"]],[/\bcurl.*POST\b/i,["curl * -X POST*","curl * --request POST*"]]],s=e.prepare("SELECT key, value FROM config WHERE key = 'defaults.approvalRequired'").all();for(let T of s)try{let t=JSON.parse(T.value),i=[];for(let n of t){let a=!1;for(let[d,r]of E)if(d.test(n)){i.push(...r),a=!0,I.info({from:n,to:r},"Config: migrated approvalRequired pattern from regex to glob");break}a||(/[.+?^${}()|[\]\\]/.test(n)&&I.warn({pattern:n},"Config: approvalRequired pattern contains regex metacharacters that won't work with glob matching; update to glob syntax (use * for wildcards)"),i.push(n))}let N=[...new Set(i)];e.prepare("UPDATE config SET value = ?, updated_at = ? WHERE key = ?").run(JSON.stringify(N),Date.now(),T.key)}catch{}}}function K(){if(_)return _;let e=process.env.ADAM_DB_PATH||A,l=u(e);return S(l)||g(l,{recursive:!0}),_=new p(e),_.pragma("journal_mode = WAL"),_.pragma("foreign_keys = ON"),_.pragma("trusted_schema = ON"),D(_),_}function W(){_&&(_.close(),_=null)}var I,_,C=m(()=>{O();X();I=R("store"),_=null});export{D as a,K as b,W as c,C as d};
@@ -1 +1 @@
1
- import{a as h,b as u,c,d as m,e as v,f as x}from"./chunk-BONI2HUN.js";import{b as S,d as y}from"./chunk-4TBGFHYX.js";import{a as i}from"./chunk-L7JP7DUO.js";import{a as l}from"./chunk-2CMR5AG7.js";import{a as C}from"./chunk-I5RUEOSQ.js";import{e as p}from"./chunk-3TIHZZMK.js";import{v4 as D}from"uuid";import{v4 as I}from"uuid";function _(e){if(e.length<20)return null;let t=e.trim();return t.length>300?{content:`User request: ${t.slice(0,280)}...`,importance:3,type:"thought"}:{content:`User request: ${t}`,importance:3,type:"thought"}}function b(e){if(e.length<20)return null;let t=e.trim();return t.length>400?{content:`Assistant response: ${t.slice(0,370)}...`,importance:2,type:"event"}:{content:`Assistant response: ${t}`,importance:2,type:"event"}}function N(e){let t=S(e,200,0),s=[];for(let o of t){let r=o.role==="user"?_(o.content):b(o.content);r&&s.push(r)}return{facts:s}}function $(e){let t=e.toLowerCase().replace(/[^\w\s]/g," ").split(/\s+/).filter(s=>s.length>2);return[...new Set(t)].slice(0,20)}async function A(e,t){let{facts:s}=N(e),o=0;for(let r of s){let f=r.content.slice(0,500),g;try{g=await l(f)}catch{}let M=$(f),T={id:I(),roleId:t,type:r.type,content:f,embedding:g,keywords:M,importance:r.importance,sourceType:"session_archive",createdAt:Date.now(),lastAccessed:Date.now(),retrievedCount:0,tier:"episodic"};C(T),o++}return o}var n=new Map,a;function w(e){return`${e.type}:${e.channelId??""}:${e.chatId??""}`}function F(){n.clear();let e=m("active",1e3);for(let t of e)n.set(t.id,t)}function Q(e,t){let s=Date.now(),o={id:D(),status:"active",source:e,createdAt:s,lastActiveAt:s,messageCount:0};return h(o),n.set(o.id,o),i.emit({type:"session_created",session:o}),o}function V(e){for(let s of n.values())if(w(s.source)===w(e))return s;let t=v(e);return t&&n.set(t.id,t),t}function B(e){let t=n.get(e);return t||u(e)}function E(e){let t=Date.now();c(e,{status:"archived",archivedAt:t}),p().archiveExtractMemory&&u(e)&&A(e,"role-chat-manager").catch(()=>{}),n.delete(e),i.emit({type:"session_archived",sessionId:e})}function W(e){c(e,{status:"active",archivedAt:void 0});let t=u(e);return t&&(n.set(t.id,t),i.emit({type:"session_restored",session:t})),t}function X(e){y(e),x(e),n.delete(e),i.emit({type:"session_deleted",sessionId:e})}function Y(e){let t=Date.now();c(e,{lastActiveAt:t});let s=n.get(e);s&&(s.lastActiveAt=t)}function Z(e){let t=B(e);if(t){let s=t.messageCount+1;c(e,{messageCount:s});let o=n.get(e);o&&(o.messageCount=s)}}function ee(e){return m(e)}function P(){let t=p().sessionTimeoutMinutes*60*1e3,s=Date.now();for(let o of n.values())if(s-o.lastActiveAt>t)try{E(o.id)}catch{}}function R(e=6e4){d(),a=setInterval(P,e)}function d(){a&&(clearInterval(a),a=void 0)}function te(){return a}function se(){F(),R()}function oe(){d(),n.clear()}function ne(){d(),n.clear()}export{F as a,Q as b,V as c,B as d,E as e,W as f,X as g,Y as h,Z as i,ee as j,R as k,d as l,te as m,se as n,oe as o,ne as p};
1
+ import{a as h,b as u,c,d as m,e as v,f as x}from"./chunk-AJVN3KPM.js";import{b as S,d as y}from"./chunk-AR2IZMM2.js";import{a as i}from"./chunk-L7JP7DUO.js";import{a as l}from"./chunk-2CMR5AG7.js";import{a as C}from"./chunk-4TCP2AT7.js";import{e as p}from"./chunk-JTMFEUDA.js";import{v4 as D}from"uuid";import{v4 as I}from"uuid";function _(e){if(e.length<20)return null;let t=e.trim();return t.length>300?{content:`User request: ${t.slice(0,280)}...`,importance:3,type:"thought"}:{content:`User request: ${t}`,importance:3,type:"thought"}}function b(e){if(e.length<20)return null;let t=e.trim();return t.length>400?{content:`Assistant response: ${t.slice(0,370)}...`,importance:2,type:"event"}:{content:`Assistant response: ${t}`,importance:2,type:"event"}}function N(e){let t=S(e,200,0),s=[];for(let o of t){let r=o.role==="user"?_(o.content):b(o.content);r&&s.push(r)}return{facts:s}}function $(e){let t=e.toLowerCase().replace(/[^\w\s]/g," ").split(/\s+/).filter(s=>s.length>2);return[...new Set(t)].slice(0,20)}async function A(e,t){let{facts:s}=N(e),o=0;for(let r of s){let f=r.content.slice(0,500),g;try{g=await l(f)}catch{}let M=$(f),T={id:I(),roleId:t,type:r.type,content:f,embedding:g,keywords:M,importance:r.importance,sourceType:"session_archive",createdAt:Date.now(),lastAccessed:Date.now(),retrievedCount:0,tier:"episodic"};C(T),o++}return o}var n=new Map,a;function w(e){return`${e.type}:${e.channelId??""}:${e.chatId??""}`}function F(){n.clear();let e=m("active",1e3);for(let t of e)n.set(t.id,t)}function Q(e,t){let s=Date.now(),o={id:D(),status:"active",source:e,createdAt:s,lastActiveAt:s,messageCount:0};return h(o),n.set(o.id,o),i.emit({type:"session_created",session:o}),o}function V(e){for(let s of n.values())if(w(s.source)===w(e))return s;let t=v(e);return t&&n.set(t.id,t),t}function B(e){let t=n.get(e);return t||u(e)}function E(e){let t=Date.now();c(e,{status:"archived",archivedAt:t}),p().archiveExtractMemory&&u(e)&&A(e,"role-chat-manager").catch(()=>{}),n.delete(e),i.emit({type:"session_archived",sessionId:e})}function W(e){c(e,{status:"active",archivedAt:void 0});let t=u(e);return t&&(n.set(t.id,t),i.emit({type:"session_restored",session:t})),t}function X(e){y(e),x(e),n.delete(e),i.emit({type:"session_deleted",sessionId:e})}function Y(e){let t=Date.now();c(e,{lastActiveAt:t});let s=n.get(e);s&&(s.lastActiveAt=t)}function Z(e){let t=B(e);if(t){let s=t.messageCount+1;c(e,{messageCount:s});let o=n.get(e);o&&(o.messageCount=s)}}function ee(e){return m(e)}function P(){let t=p().sessionTimeoutMinutes*60*1e3,s=Date.now();for(let o of n.values())if(s-o.lastActiveAt>t)try{E(o.id)}catch{}}function R(e=6e4){d(),a=setInterval(P,e)}function d(){a&&(clearInterval(a),a=void 0)}function te(){return a}function se(){F(),R()}function oe(){d(),n.clear()}function ne(){d(),n.clear()}export{F as a,Q as b,V as c,B as d,E as e,W as f,X as g,Y as h,Z as i,ee as j,R as k,d as l,te as m,se as n,oe as o,ne as p};
@@ -1,4 +1,4 @@
1
- import{a as I,f as G}from"./chunk-U3XVAAXA.js";import{a as J}from"./chunk-2C5U3CNX.js";import{a as j}from"./chunk-2CMR5AG7.js";import{a as E,b as S,c as D,j as T}from"./chunk-I5RUEOSQ.js";import{b as P,d as B}from"./chunk-CREHL4BN.js";import{c as W,e as q}from"./chunk-FCV2DPZQ.js";var Q={};q(Q,{getGlobalEnabledState:()=>w,getInstalledPlugin:()=>z,getPluginManifest:()=>_,listInstalledPlugins:()=>A,listMarketplaceSources:()=>V,resolvePluginPaths:()=>M,scanDirectoryConfig:()=>x});import{existsSync as y,readFileSync as k,readdirSync as C}from"fs";import{join as p}from"path";import L from"os";function h(t){try{if(!y(t))return null;let e=k(t,"utf-8");return JSON.parse(e)}catch{return null}}function w(){return h(Y())?.enabledPlugins??{}}function _(t){let e=t;function s(n,r){let o={};try{if(!y(n))return o;let d=k(n,"utf-8").replace(/^```yaml\r?\n/,"").replace(/^```\r?\n/,"");for(let m of r){let i=new RegExp(`^${m}:\\s*(.+)$`,"m"),a=d.match(i);a&&(o[m]=a[1].trim())}}catch{}return o}try{let n={name:"",skills:[],agents:[],mcpServers:[],hooks:[],lspServers:[]},r=p(e,".claude-plugin","plugin.json");if(y(r))try{let i=JSON.parse(k(r,"utf-8"));n.name=i.name??"",n.version=i.version,n.description=i.description,Array.isArray(i.lspServers)&&(n.lspServers=i.lspServers),Array.isArray(i.mcpServers)&&(n.mcpServers=i.mcpServers),Array.isArray(i.hooks)&&(n.hooks=i.hooks)}catch{}let o=p(e,"skills");if(y(o)){let i=C(o,{withFileTypes:!0});for(let a of i){if(!a.isDirectory()&&!a.isSymbolicLink())continue;let u=p(o,a.name,"SKILL.md"),f=s(u,["name","description"]);f.name&&n.skills.push({name:f.name,description:f.description??""})}}let l=p(e,"agents");if(y(l)){let i=C(l,{withFileTypes:!0});for(let a of i){if(!a.isFile()||!a.name.endsWith(".md"))continue;let u=s(p(l,a.name),["name","description"]);u.name&&n.agents.push({name:u.name,description:u.description??""})}}let d=p(e,".mcp.json");if(y(d))try{let i=JSON.parse(k(d,"utf-8"));i.mcpServers&&typeof i.mcpServers=="object"&&(n.mcpServers=Object.keys(i.mcpServers))}catch{}let m=p(e,"hooks","hooks.json");if(y(m))try{let i=JSON.parse(k(m,"utf-8"));Array.isArray(i)&&(n.hooks=i.map(a=>typeof a=="object"&&a!==null&&"event"in a?String(a.event):String(a)))}catch{}return n}catch{return null}}function A(t){let e=h(R());if(!e?.plugins)return[];let s=w(),n=[];for(let[r,o]of Object.entries(e.plugins))if(!(!Array.isArray(o)||o.length===0))for(let l of o){let d=l.scope??"user";t?.scope&&d!==t.scope||t?.projectPath&&l.projectPath!==t.projectPath||n.push({id:r,name:r.split("@")[0],version:l.version??"",scope:d,projectPath:l.projectPath,installPath:l.installPath??p(v(),r),enabled:s[r]??l.enabled??!0,installedAt:l.installedAt??"",lastUpdated:l.lastUpdated??""})}return n}function z(t){let e=h(R());if(!e?.plugins?.[t])return null;let s=e.plugins[t];if(!Array.isArray(s)||s.length===0)return null;let n=s[0],r=w();return{id:t,name:t.split("@")[0],version:n.version??"",scope:n.scope??"user",projectPath:n.projectPath,installPath:n.installPath??p(v(),t),enabled:r[t]??n.enabled??!0,installedAt:n.installedAt??"",lastUpdated:n.lastUpdated??""}}function M(t){let e=h(R()),s=new Map;for(let n of t){let r=e?.plugins?.[n];Array.isArray(r)&&r.length>0&&s.set(n,r[0].installPath??p(v(),n))}return s}function V(){return h(H())?.marketplaces??[]}function x(t){let e=p(t,".claude","settings.json"),s=h(e);return{enabledPlugins:s?.enabledPlugins??{},mcpServers:s?.mcpServers??{},allowedTools:s?.allowedTools??[],disallowedTools:s?.disallowedTools??[]}}var v,R,H,Y,O=W(()=>{"use strict";v=()=>p(L.homedir(),".claude","plugins"),R=()=>p(v(),"installed_plugins.json"),H=()=>p(v(),"known_marketplaces.json"),Y=()=>p(L.homedir(),".claude","settings.json")});import{tool as b}from"@anthropic-ai/claude-agent-sdk";import{z as c}from"zod";import{v4 as X}from"uuid";function g(t){return{content:[{type:"text",text:JSON.stringify(t)}]}}var Z={query:c.string().describe("Search query for memory retrieval"),roleId:c.string().optional().describe("Role ID to scope search (omit for cross-role)"),topK:c.number().optional().describe("Max results to return (default 5)")},ee={query:c.string().describe("Search query for memory retrieval"),topK:c.number().optional().describe("Max results to return (default 5)")},te={id:c.string().optional().describe("Memory ID to update. Omit to create new."),roleId:c.string().describe("Role ID to save memory under"),content:c.string().describe("Memory content text"),type:c.enum(["event","thought","reflection"]).optional().describe("Memory type (default: thought)"),keywords:c.array(c.string()).optional().describe("Keywords for BM25 search"),importance:c.number().min(1).max(5).optional().describe("Importance 1-5 (default: 3)"),tier:c.enum(["working","episodic","semantic"]).optional().describe("Memory tier (default: episodic)")},ne={id:c.string().optional().describe("Memory ID to update. Omit to create new."),content:c.string().describe("Memory content text"),type:c.enum(["event","thought","reflection"]).optional().describe("Memory type (default: thought)"),keywords:c.array(c.string()).optional().describe("Keywords for BM25 search"),importance:c.number().min(1).max(5).optional().describe("Importance 1-5 (default: 3)"),tier:c.enum(["working","episodic","semantic"]).optional().describe("Memory tier (default: episodic)")},N={id:c.string().describe("Memory ID to delete")};async function F(t,e){let s=t??e.roleId,n=e.topK??5,r=await J(s,e.query,{topK:n});return g({results:r.map(o=>({id:o.id,type:o.type,content:o.content,keywords:o.keywords,importance:o.importance,score:o.score}))})}async function $(t,e){let s=t??e.roleId;if(!s)return g({error:"roleId is required"});let n,r=!0;try{n=await j(e.content)}catch{r=!1}if(e.id){if(!S(e.id))return g({error:`Memory ${e.id} not found`});let m=D(e.id,{content:e.content,embedding:n,keywords:e.keywords,importance:e.importance,type:e.type});return g({id:e.id,action:"updated",success:m,embeddingUpdated:r})}let o=`mem-${X().slice(0,8)}`,l=Date.now();return E({id:o,roleId:s,type:e.type??"thought",content:e.content,embedding:n,keywords:e.keywords??[],importance:e.importance??3,sourceType:"manual",createdAt:l,lastAccessed:l,retrievedCount:0,tier:e.tier??"episodic"}),g({id:o,action:"created",success:!0,embeddingUpdated:r})}async function K(t,e){if(t){let s=S(e.id);if(!s)return g({error:`Memory ${e.id} not found`});if(s.roleId!==t)return g({error:`Memory ${e.id} does not belong to this role`})}return T(e.id),g({id:e.id,deleted:!0})}function ye(t){return t?[b("search_memories","Search agent memory using hybrid vector + keyword search. Returns scored memories ranked by relevance, recency, and importance.",ee,async e=>F(t,e)),b("save_memory","Create a new memory or update an existing one. Provide 'id' to update, omit to create. Embedding is auto-generated from content.",ne,async e=>$(t,e)),b("delete_memory","Delete a memory by ID.",N,async e=>K(t,e))]:[b("search_memories","Search agent memory using hybrid vector + keyword search. Returns scored memories ranked by relevance, recency, and importance.",Z,async e=>F(void 0,e)),b("save_memory","Create a new memory or update an existing one. Provide 'id' to update, omit to create. Embedding is auto-generated from content.",te,async e=>$(void 0,e)),b("delete_memory","Delete a memory by ID.",N,async e=>K(void 0,e))]}O();G();var re={Read:{category:"File",label:"read"},Write:{category:"File",label:"write"},Edit:{category:"File",label:"edit"},Glob:{category:"Search",label:"find files"},Grep:{category:"Search",label:"search content"},Bash:{category:"Execution",label:"shell commands"},WebSearch:{category:"Web",label:"web search"},WebFetch:{category:"Web",label:"fetch pages"},NotebookEdit:{category:"Execution",label:"Jupyter notebooks"}};function ve(t,e){let s=t.allowedTools??[];if(s.length===0)return"No tool permissions";let n=new Map,r=[];for(let i of s){let a=re[i];if(a){let u=n.get(a.category)??[];u.push(a.label),n.set(a.category,u)}else r.push(i)}let o=[];for(let[i,a]of n)o.push(`${i} (${a.join(", ")})`);r.length>0&&o.push(r.join(", "));let l=o.join(" \xB7 "),d=Object.keys(t.mcpServers??{});d.length>0&&(l+=` \xB7 MCP: ${d.join(", ")}`);let m=t.additionalDirectories??[];if(m.length>0&&(l+=` \xB7 Dirs: ${m.map(i=>i.path).join(", ")}`),e&&e.plugins.length>0){let i=e.plugins.map(a=>{let u=[];return a.skills.length>0&&u.push(`skills: ${a.skills.map(f=>f.name).join(", ")}`),a.agents.length>0&&u.push(`agents: ${a.agents.map(f=>f.name).join(", ")}`),u.length>0?`${a.name} (${u.join("; ")})`:a.name});l+=` \xB7 Plugins: ${i.join(", ")}`}return l}function oe(t){let e=[],s=t.additionalDirectories??[];for(let n of s){if(!n.inheritPlugins&&!n.inheritMcp)continue;let r=x(n.path),o=Object.entries(r.enabledPlugins).filter(([,d])=>d).map(([d])=>d),l=M(o);for(let[,d]of l)e.includes(d)||e.push(d)}try{let n=I(t.name),r=A({scope:"project",projectPath:n});for(let o of r)o.installPath&&!e.includes(o.installPath)&&e.push(o.installPath)}catch{}return e}function Pe(t){let e=oe(t),s=[];for(let n of e){let r=_(n);r&&s.push({name:r.name||n.split("/").pop()||"unknown",description:r.description,skills:r.skills,agents:r.agents,mcpServers:r.mcpServers,hooks:r.hooks})}return{plugins:s}}B();function se(t){return{id:t.id,roleId:t.role_id??void 0,taskPattern:t.task_pattern,maxRiskLevel:t.max_risk_level,createdAt:t.created_at,createdByTaskId:t.created_by_task_id??void 0}}var U={low:1,medium:2,high:3};function we(t){P().prepare(`
1
+ import{e as I,j as G}from"./chunk-KLQOILIJ.js";import{a as J}from"./chunk-GUQAIWCQ.js";import{a as j}from"./chunk-2CMR5AG7.js";import{a as E,b as S,c as D,j as T}from"./chunk-4TCP2AT7.js";import{b as P,d as B}from"./chunk-KVSO3KGZ.js";import{c as W,e as q}from"./chunk-FCV2DPZQ.js";var Q={};q(Q,{getGlobalEnabledState:()=>w,getInstalledPlugin:()=>z,getPluginManifest:()=>_,listInstalledPlugins:()=>A,listMarketplaceSources:()=>V,resolvePluginPaths:()=>M,scanDirectoryConfig:()=>x});import{existsSync as y,readFileSync as k,readdirSync as C}from"fs";import{join as p}from"path";import L from"os";function h(t){try{if(!y(t))return null;let e=k(t,"utf-8");return JSON.parse(e)}catch{return null}}function w(){return h(Y())?.enabledPlugins??{}}function _(t){let e=t;function s(n,r){let o={};try{if(!y(n))return o;let d=k(n,"utf-8").replace(/^```yaml\r?\n/,"").replace(/^```\r?\n/,"");for(let m of r){let i=new RegExp(`^${m}:\\s*(.+)$`,"m"),a=d.match(i);a&&(o[m]=a[1].trim())}}catch{}return o}try{let n={name:"",skills:[],agents:[],mcpServers:[],hooks:[],lspServers:[]},r=p(e,".claude-plugin","plugin.json");if(y(r))try{let i=JSON.parse(k(r,"utf-8"));n.name=i.name??"",n.version=i.version,n.description=i.description,Array.isArray(i.lspServers)&&(n.lspServers=i.lspServers),Array.isArray(i.mcpServers)&&(n.mcpServers=i.mcpServers),Array.isArray(i.hooks)&&(n.hooks=i.hooks)}catch{}let o=p(e,"skills");if(y(o)){let i=C(o,{withFileTypes:!0});for(let a of i){if(!a.isDirectory()&&!a.isSymbolicLink())continue;let u=p(o,a.name,"SKILL.md"),f=s(u,["name","description"]);f.name&&n.skills.push({name:f.name,description:f.description??""})}}let l=p(e,"agents");if(y(l)){let i=C(l,{withFileTypes:!0});for(let a of i){if(!a.isFile()||!a.name.endsWith(".md"))continue;let u=s(p(l,a.name),["name","description"]);u.name&&n.agents.push({name:u.name,description:u.description??""})}}let d=p(e,".mcp.json");if(y(d))try{let i=JSON.parse(k(d,"utf-8"));i.mcpServers&&typeof i.mcpServers=="object"&&(n.mcpServers=Object.keys(i.mcpServers))}catch{}let m=p(e,"hooks","hooks.json");if(y(m))try{let i=JSON.parse(k(m,"utf-8"));Array.isArray(i)&&(n.hooks=i.map(a=>typeof a=="object"&&a!==null&&"event"in a?String(a.event):String(a)))}catch{}return n}catch{return null}}function A(t){let e=h(R());if(!e?.plugins)return[];let s=w(),n=[];for(let[r,o]of Object.entries(e.plugins))if(!(!Array.isArray(o)||o.length===0))for(let l of o){let d=l.scope??"user";t?.scope&&d!==t.scope||t?.projectPath&&l.projectPath!==t.projectPath||n.push({id:r,name:r.split("@")[0],version:l.version??"",scope:d,projectPath:l.projectPath,installPath:l.installPath??p(v(),r),enabled:s[r]??l.enabled??!0,installedAt:l.installedAt??"",lastUpdated:l.lastUpdated??""})}return n}function z(t){let e=h(R());if(!e?.plugins?.[t])return null;let s=e.plugins[t];if(!Array.isArray(s)||s.length===0)return null;let n=s[0],r=w();return{id:t,name:t.split("@")[0],version:n.version??"",scope:n.scope??"user",projectPath:n.projectPath,installPath:n.installPath??p(v(),t),enabled:r[t]??n.enabled??!0,installedAt:n.installedAt??"",lastUpdated:n.lastUpdated??""}}function M(t){let e=h(R()),s=new Map;for(let n of t){let r=e?.plugins?.[n];Array.isArray(r)&&r.length>0&&s.set(n,r[0].installPath??p(v(),n))}return s}function V(){return h(H())?.marketplaces??[]}function x(t){let e=p(t,".claude","settings.json"),s=h(e);return{enabledPlugins:s?.enabledPlugins??{},mcpServers:s?.mcpServers??{},allowedTools:s?.allowedTools??[],disallowedTools:s?.disallowedTools??[]}}var v,R,H,Y,O=W(()=>{"use strict";v=()=>p(L.homedir(),".claude","plugins"),R=()=>p(v(),"installed_plugins.json"),H=()=>p(v(),"known_marketplaces.json"),Y=()=>p(L.homedir(),".claude","settings.json")});import{tool as b}from"@anthropic-ai/claude-agent-sdk";import{z as c}from"zod";import{v4 as X}from"uuid";function g(t){return{content:[{type:"text",text:JSON.stringify(t)}]}}var Z={query:c.string().describe("Search query for memory retrieval"),roleId:c.string().optional().describe("Role ID to scope search (omit for cross-role)"),topK:c.number().optional().describe("Max results to return (default 5)")},ee={query:c.string().describe("Search query for memory retrieval"),topK:c.number().optional().describe("Max results to return (default 5)")},te={id:c.string().optional().describe("Memory ID to update. Omit to create new."),roleId:c.string().describe("Role ID to save memory under"),content:c.string().describe("Memory content text"),type:c.enum(["event","thought","reflection"]).optional().describe("Memory type (default: thought)"),keywords:c.array(c.string()).optional().describe("Keywords for BM25 search"),importance:c.number().min(1).max(5).optional().describe("Importance 1-5 (default: 3)"),tier:c.enum(["working","episodic","semantic"]).optional().describe("Memory tier (default: episodic)")},ne={id:c.string().optional().describe("Memory ID to update. Omit to create new."),content:c.string().describe("Memory content text"),type:c.enum(["event","thought","reflection"]).optional().describe("Memory type (default: thought)"),keywords:c.array(c.string()).optional().describe("Keywords for BM25 search"),importance:c.number().min(1).max(5).optional().describe("Importance 1-5 (default: 3)"),tier:c.enum(["working","episodic","semantic"]).optional().describe("Memory tier (default: episodic)")},N={id:c.string().describe("Memory ID to delete")};async function F(t,e){let s=t??e.roleId,n=e.topK??5,r=await J(s,e.query,{topK:n});return g({results:r.map(o=>({id:o.id,type:o.type,content:o.content,keywords:o.keywords,importance:o.importance,score:o.score}))})}async function $(t,e){let s=t??e.roleId;if(!s)return g({error:"roleId is required"});let n,r=!0;try{n=await j(e.content)}catch{r=!1}if(e.id){if(!S(e.id))return g({error:`Memory ${e.id} not found`});let m=D(e.id,{content:e.content,embedding:n,keywords:e.keywords,importance:e.importance,type:e.type});return g({id:e.id,action:"updated",success:m,embeddingUpdated:r})}let o=`mem-${X().slice(0,8)}`,l=Date.now();return E({id:o,roleId:s,type:e.type??"thought",content:e.content,embedding:n,keywords:e.keywords??[],importance:e.importance??3,sourceType:"manual",createdAt:l,lastAccessed:l,retrievedCount:0,tier:e.tier??"episodic"}),g({id:o,action:"created",success:!0,embeddingUpdated:r})}async function K(t,e){if(t){let s=S(e.id);if(!s)return g({error:`Memory ${e.id} not found`});if(s.roleId!==t)return g({error:`Memory ${e.id} does not belong to this role`})}return T(e.id),g({id:e.id,deleted:!0})}function ye(t){return t?[b("search_memories","Search agent memory using hybrid vector + keyword search. Returns scored memories ranked by relevance, recency, and importance.",ee,async e=>F(t,e)),b("save_memory","Create a new memory or update an existing one. Provide 'id' to update, omit to create. Embedding is auto-generated from content.",ne,async e=>$(t,e)),b("delete_memory","Delete a memory by ID.",N,async e=>K(t,e))]:[b("search_memories","Search agent memory using hybrid vector + keyword search. Returns scored memories ranked by relevance, recency, and importance.",Z,async e=>F(void 0,e)),b("save_memory","Create a new memory or update an existing one. Provide 'id' to update, omit to create. Embedding is auto-generated from content.",te,async e=>$(void 0,e)),b("delete_memory","Delete a memory by ID.",N,async e=>K(void 0,e))]}O();G();var re={Read:{category:"File",label:"read"},Write:{category:"File",label:"write"},Edit:{category:"File",label:"edit"},Glob:{category:"Search",label:"find files"},Grep:{category:"Search",label:"search content"},Bash:{category:"Execution",label:"shell commands"},WebSearch:{category:"Web",label:"web search"},WebFetch:{category:"Web",label:"fetch pages"},NotebookEdit:{category:"Execution",label:"Jupyter notebooks"}};function ve(t,e){let s=t.allowedTools??[];if(s.length===0)return"No tool permissions";let n=new Map,r=[];for(let i of s){let a=re[i];if(a){let u=n.get(a.category)??[];u.push(a.label),n.set(a.category,u)}else r.push(i)}let o=[];for(let[i,a]of n)o.push(`${i} (${a.join(", ")})`);r.length>0&&o.push(r.join(", "));let l=o.join(" \xB7 "),d=Object.keys(t.mcpServers??{});d.length>0&&(l+=` \xB7 MCP: ${d.join(", ")}`);let m=t.additionalDirectories??[];if(m.length>0&&(l+=` \xB7 Dirs: ${m.map(i=>i.path).join(", ")}`),e&&e.plugins.length>0){let i=e.plugins.map(a=>{let u=[];return a.skills.length>0&&u.push(`skills: ${a.skills.map(f=>f.name).join(", ")}`),a.agents.length>0&&u.push(`agents: ${a.agents.map(f=>f.name).join(", ")}`),u.length>0?`${a.name} (${u.join("; ")})`:a.name});l+=` \xB7 Plugins: ${i.join(", ")}`}return l}function oe(t){let e=[],s=t.additionalDirectories??[];for(let n of s){if(!n.inheritPlugins&&!n.inheritMcp)continue;let r=x(n.path),o=Object.entries(r.enabledPlugins).filter(([,d])=>d).map(([d])=>d),l=M(o);for(let[,d]of l)e.includes(d)||e.push(d)}try{let n=I(t.name),r=A({scope:"project",projectPath:n});for(let o of r)o.installPath&&!e.includes(o.installPath)&&e.push(o.installPath)}catch{}return e}function Pe(t){let e=oe(t),s=[];for(let n of e){let r=_(n);r&&s.push({name:r.name||n.split("/").pop()||"unknown",description:r.description,skills:r.skills,agents:r.agents,mcpServers:r.mcpServers,hooks:r.hooks})}return{plugins:s}}B();function se(t){return{id:t.id,roleId:t.role_id??void 0,taskPattern:t.task_pattern,maxRiskLevel:t.max_risk_level,createdAt:t.created_at,createdByTaskId:t.created_by_task_id??void 0}}var U={low:1,medium:2,high:3};function we(t){P().prepare(`
2
2
  INSERT INTO approval_rules (id, role_id, task_pattern, max_risk_level, created_at, created_by_task_id)
3
3
  VALUES (?, ?, ?, ?, ?, ?)
4
4
  `).run(t.id,t.roleId??null,t.taskPattern,t.maxRiskLevel,t.createdAt,t.createdByTaskId??null)}function _e(t,e,s){let r=P().prepare("SELECT * FROM approval_rules ORDER BY created_at DESC").all();for(let o of r)if(!(o.role_id&&o.role_id!==t)&&!(U[s]>U[o.max_risk_level]))try{if(new RegExp(o.task_pattern,"i").test(e))return se(o)}catch{}}export{we as a,_e as b,w as c,_ as d,A as e,z as f,V as g,x as h,Q as i,O as j,ye as k,ve as l,oe as m,Pe as n};
@@ -1,4 +1,4 @@
1
- import{b as s,d as o}from"./chunk-CREHL4BN.js";o();function i(e){return{id:e.id,ruleId:e.rule_id??void 0,taskId:e.task_id??void 0,status:e.status,target:JSON.parse(e.target),content:e.content,attempts:e.attempts,error:e.error??void 0,createdAt:e.created_at,deliveredAt:e.delivered_at??void 0,expiresAt:e.expires_at,source:e.source,messageType:e.message_type??void 0}}var u=1440*60*1e3;function p(e){s().prepare(`
1
+ import{b as s,d as o}from"./chunk-KVSO3KGZ.js";o();function i(e){return{id:e.id,ruleId:e.rule_id??void 0,taskId:e.task_id??void 0,status:e.status,target:JSON.parse(e.target),content:e.content,attempts:e.attempts,error:e.error??void 0,createdAt:e.created_at,deliveredAt:e.delivered_at??void 0,expiresAt:e.expires_at,source:e.source,messageType:e.message_type??void 0}}var u=1440*60*1e3;function p(e){s().prepare(`
2
2
  INSERT INTO delivery_log (id, rule_id, task_id, status, target, content,
3
3
  attempts, error, created_at, delivered_at, expires_at, source, message_type)
4
4
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
@@ -0,0 +1,49 @@
1
+ import{a as c,b as m}from"./chunk-6DXNXLYG.js";import{b as a,d as _}from"./chunk-KVSO3KGZ.js";import{c as s,h as f}from"./chunk-INNDBLZE.js";import{readFileSync as p,existsSync as g}from"fs";import{fileURLToPath as A}from"url";import{dirname as I,join as o}from"path";var O=A(import.meta.url),l=I(O),r,n;function u(){let e=o(l,"..","package.json");if(g(e))return e;let i=o(l,"..","..","package.json");return g(i)?i:o(process.cwd(),"package.json")}function P(){if(r===void 0){let e=u();r=JSON.parse(p(e,"utf-8")).version}return r}function b(){if(n===void 0){let e=u();n=JSON.parse(p(e,"utf-8")).name}return n}_();f();import{dirname as h,join as T}from"path";import{fileURLToPath as y}from"url";var k=h(y(import.meta.url)),d=T(k,"..");var x=d,U=s("cli:register-ai-digest"),t="ai-hourly-digest";function R(){try{if(m(t)){console.log(`[INFO] AI Digest template already exists (${t})`);return}}catch{}let e={id:t,name:"AI Hourly Digest",description:"\u6BCF\u5C0F\u65F6\u641C\u7D22 AI \u524D\u6CBF\u6587\u7AE0\uFF0C\u603B\u7ED3\u540E\u4FDD\u5B58\u5230 Omnifocus",trigger:{type:"cron",cron:"0 * * * *"},enabled:!0,steps:[{id:"search_ai_news",prompt:`\u641C\u7D22\u8FC7\u53BB 24 \u5C0F\u65F6\u5185\u5173\u4E8E AI/\u4EBA\u5DE5\u667A\u80FD\u7684\u6700\u65B0\u524D\u6CBF\u6587\u7AE0\u3002
2
+
3
+ \u641C\u7D22\u6765\u6E90:
4
+ 1. Hacker News AI \u677F\u5757 (https://news.ycombinator.com/front?day=1)
5
+ 2. ArXiv cs.AI \u6700\u65B0\u8BBA\u6587 (https://arxiv.org/list/cs.AI/recent)
6
+ 3. Reddit r/MachineLearning \u70ED\u95E8\u5E16\u5B50
7
+
8
+ \u627E\u51FA\u4E00\u7BC7\u6700\u6709\u4EF7\u503C\u3001\u6700\u6709\u6280\u672F\u6DF1\u5EA6\u7684\u6587\u7AE0\u3002
9
+
10
+ \u8F93\u51FA\u683C\u5F0F:
11
+ - \u6807\u9898\uFF1A[\u6587\u7AE0\u6807\u9898]
12
+ - \u6765\u6E90\uFF1A[\u7F51\u7AD9/\u5E73\u53F0\u540D\u79F0]
13
+ - \u94FE\u63A5\uFF1A[\u5B8C\u6574 URL]
14
+ - \u6838\u5FC3\u4EF7\u503C\uFF1A[1-2 \u53E5\u8BDD\u8BF4\u660E\u4E3A\u4EC0\u4E48\u8FD9\u7BC7\u6587\u7AE0\u503C\u5F97\u770B]`},{id:"summarize_article",dependsOn:["search_ai_news"],prompt:`\u9605\u8BFB\u5E76\u603B\u7ED3\u8FD9\u7BC7\u6587\u7AE0\u3002
15
+
16
+ \u6587\u7AE0\u4FE1\u606F:
17
+ {{search_ai_news.result}}
18
+
19
+ \u8BF7:
20
+ 1. \u7528 WebFetch \u83B7\u53D6\u6587\u7AE0\u5B8C\u6574\u5185\u5BB9
21
+ 2. \u63D0\u53D6\u6838\u5FC3\u89C2\u70B9\u548C\u6280\u672F\u7EC6\u8282
22
+ 3. \u7528\u4E2D\u6587\u5199\u51FA 300-500 \u5B57\u7684\u603B\u7ED3
23
+
24
+ \u603B\u7ED3\u7ED3\u6784:
25
+ ## \u6838\u5FC3\u53D1\u73B0
26
+ [\u6587\u7AE0\u6700\u91CD\u8981\u7684\u53D1\u73B0/\u521B\u65B0\u70B9]
27
+
28
+ ## \u6280\u672F\u7EC6\u8282
29
+ [\u5173\u952E\u7684\u6280\u672F\u65B9\u6CD5/\u5B9E\u73B0\u7EC6\u8282]
30
+
31
+ ## \u5F71\u54CD/\u610F\u4E49
32
+ [\u8FD9\u9879\u5DE5\u4F5C\u7684\u610F\u4E49\u6216\u5BF9\u884C\u4E1A\u7684\u5F71\u54CD]
33
+
34
+ ## \u539F\u6587\u94FE\u63A5
35
+ [\u6587\u7AE0 URL]`},{id:"save_to_omnifocus",dependsOn:["summarize_article"],prompt:`\u5C06\u6587\u7AE0\u603B\u7ED3\u4FDD\u5B58\u5230 Omnifocus\u3002
36
+
37
+ \u603B\u7ED3\u5185\u5BB9:
38
+ {{summarize_article.result}}
39
+
40
+ \u63D0\u53D6\u6587\u7AE0\u6807\u9898\u548C\u5B8C\u6574\u603B\u7ED3\uFF0C\u7136\u540E\u6267\u884C\u4EE5\u4E0B\u547D\u4EE4\u6DFB\u52A0\u5230 Omnifocus Inbox\uFF1A
41
+
42
+ osascript ${x}/scripts/add-to-omnifocus.applescript "[\u6587\u7AE0\u6807\u9898] AI \u524D\u6CBF\u901F\u9012" "[\u5B8C\u6574\u603B\u7ED3\u5185\u5BB9]"
43
+
44
+ \u6CE8\u610F\uFF1A
45
+ - \u5C06 [\u6587\u7AE0\u6807\u9898] \u66FF\u6362\u4E3A\u5B9E\u9645\u6807\u9898
46
+ - \u5C06 [\u5B8C\u6574\u603B\u7ED3\u5185\u5BB9] \u66FF\u6362\u4E3A\u5B8C\u6574\u7684\u603B\u7ED3\u6587\u672C\uFF08\u5305\u542B\u6838\u5FC3\u53D1\u73B0\u3001\u6280\u672F\u7EC6\u8282\u3001\u5F71\u54CD/\u610F\u4E49\u548C\u539F\u6587\u94FE\u63A5\uFF09
47
+ - \u603B\u7ED3\u5185\u5BB9\u4F7F\u7528\u6362\u884C\u7B26\u5206\u9694\u5404\u90E8\u5206
48
+
49
+ \u5B8C\u6210\u540E\u8F93\u51FA\uFF1A\u5DF2\u4FDD\u5B58\u5230 Omnifocus\uFF1A[\u4EFB\u52A1\u6807\u9898]`}],config:{timeout:300},tags:["ai","digest","hourly","automation"],createdAt:Date.now()};c(e),console.log(`[INFO] Registered AI Hourly Digest task template (${t})`),console.log("[INFO] Cron schedule: 0 * * * * (every hour at minute 0)")}import.meta.url===`file://${process.argv[1]}`&&(console.log("Initializing database..."),a(),console.log("Registering AI Digest template..."),R(),console.log("Done."),process.exit(0));export{d as a,P as b,b as c,R as d};
@@ -1,4 +1,4 @@
1
- import{a as S,b as P}from"./chunk-KHPXEUSY.js";import{a as k,b as m}from"./chunk-ROSOI75V.js";import{a as u}from"./chunk-L7JP7DUO.js";import{p as I}from"./chunk-I5RUEOSQ.js";import{a as C,b as c,d as y,f as R}from"./chunk-42RHY3Q3.js";import{d as T}from"./chunk-3TIHZZMK.js";import{h as x,k as J}from"./chunk-FXFHGIY6.js";import{c as h,h as b}from"./chunk-INNDBLZE.js";b();J();import{v4 as l}from"uuid";import{CronExpressionParser as D}from"cron-parser";b();import{v4 as M}from"uuid";var g=h("scheduler"),v=class{maxRetries=3;baseDelayMs=1e3;async execute(e,t){let o=T(),r={timeout:e.config?.timeout??o.timeout,approvalRequired:o.approvalRequired,approvalTimeout:o.approvalTimeout,plugins:e.config?.plugins,mcpServers:e.config?.mcpServers,model:e.config?.model??o.model,maxTurns:e.config?.maxTurns??o.maxTurns,maxBudgetUsd:e.config?.maxBudgetUsd??o.maxBudgetUsd,env:{...o.env,...e.config?.env},claudeCodePath:o.claudeCodePath},s={templateId:e.id,executionId:t,stepResults:new Map,config:r,rolePreference:e.rolePreference,deliverTo:e.deliverTo,reportTo:e.reportTo},i=this.sortSteps(e.steps);for(let a of i){try{await this.executeStep(a,s)}catch(p){g.error({stepId:a.id,error:p},"Workflow step failed");break}if(s.stepResults.get(a.id)?.status==="failed"){g.warn({stepId:a.id},"Workflow step failed, workflow aborted");break}}g.info({executionId:t,completedSteps:s.stepResults.size,totalSteps:i.length},"Workflow completed")}sortSteps(e){let t=new Set,o=[],r=new Map(e.map(i=>[i.id,i])),s=i=>{if(!t.has(i.id)){if(t.add(i.id),i.dependsOn)for(let a of i.dependsOn){let d=r.get(a);d&&s(d)}o.push(i)}};for(let i of e)s(i);return o}async executeStep(e,t){let o=this.resolveVariables(e.prompt,t.stepResults),r=M();k({id:r,status:"pending",prompt:o,config:t.config,createdAt:Date.now(),parentId:t.executionId,templateId:t.templateId,roleId:t.rolePreference,deliverTo:t.deliverTo,reportTo:t.reportTo}),g.debug({stepId:e.id,taskId:r},"Created workflow step as task"),u.emit({type:"task_created",taskId:r});let s=await this.executeWithRetry(r,e.id),i=m(r);t.stepResults.set(e.id,{stepId:e.id,taskId:r,status:s==="completed"?"completed":"failed",result:i?.result,error:i?.error})}resolveVariables(e,t){return e.replace(/\{\{([^}]+)\.result\}\}/g,(o,r)=>t.get(r)?.result??`[no result from ${r}]`)}async executeWithRetry(e,t){let o=0;for(;o<this.maxRetries;){if(o++,await this.waitForTaskCompletion(e)==="completed")return"completed";if(o<this.maxRetries){let s=this.baseDelayMs*Math.pow(2,o-1);g.info({stepId:t,attempt:o,maxRetries:this.maxRetries,delayMs:s},"Workflow step failed, retrying"),await this.sleep(s)}}return"failed"}waitForTaskCompletion(e,t=6e5){return new Promise(o=>{let r=Date.now(),s=()=>{if(Date.now()-r>t){o("failed");return}let i=m(e);if(!i){o("failed");return}if(i.status==="completed"){o("completed");return}if(i.status==="failed"||i.status==="cancelled"){o("failed");return}setTimeout(s,500)};s()})}sleep(e){return new Promise(t=>setTimeout(t,e))}};var n=h("scheduler"),w="ai-hourly-digest";function O(){if(c(w)){n.debug({templateId:w},"Built-in template already exists");return}let e={id:w,name:"AI Hourly Digest",description:"\u6BCF\u5C0F\u65F6\u641C\u7D22 AI \u524D\u6CBF\u6587\u7AE0\uFF0C\u603B\u7ED3\u540E\u4FDD\u5B58\u5230 Omnifocus",trigger:{type:"cron",cron:"0 * * * *"},enabled:!0,steps:[{id:"search_ai_news",prompt:`\u641C\u7D22\u8FC7\u53BB 24 \u5C0F\u65F6\u5185\u5173\u4E8E AI/\u4EBA\u5DE5\u667A\u80FD\u7684\u6700\u65B0\u524D\u6CBF\u6587\u7AE0\u3002
1
+ import{a as S,b as P}from"./chunk-CDVIT7L5.js";import{a as k,b as m}from"./chunk-3RAFA6QK.js";import{a as u}from"./chunk-L7JP7DUO.js";import{p as I}from"./chunk-4TCP2AT7.js";import{a as C,b as c,d as y,f as R}from"./chunk-6DXNXLYG.js";import{d as T}from"./chunk-JTMFEUDA.js";import{h as x,k as J}from"./chunk-B4WHT7DX.js";import{c as h,h as b}from"./chunk-INNDBLZE.js";b();J();import{v4 as l}from"uuid";import{CronExpressionParser as D}from"cron-parser";b();import{v4 as M}from"uuid";var g=h("scheduler"),v=class{maxRetries=3;baseDelayMs=1e3;async execute(e,t){let o=T(),r={timeout:e.config?.timeout??o.timeout,approvalRequired:o.approvalRequired,approvalTimeout:o.approvalTimeout,plugins:e.config?.plugins,mcpServers:e.config?.mcpServers,model:e.config?.model??o.model,maxTurns:e.config?.maxTurns??o.maxTurns,maxBudgetUsd:e.config?.maxBudgetUsd??o.maxBudgetUsd,env:{...o.env,...e.config?.env},claudeCodePath:o.claudeCodePath},s={templateId:e.id,executionId:t,stepResults:new Map,config:r,rolePreference:e.rolePreference,deliverTo:e.deliverTo,reportTo:e.reportTo},i=this.sortSteps(e.steps);for(let a of i){try{await this.executeStep(a,s)}catch(p){g.error({stepId:a.id,error:p},"Workflow step failed");break}if(s.stepResults.get(a.id)?.status==="failed"){g.warn({stepId:a.id},"Workflow step failed, workflow aborted");break}}g.info({executionId:t,completedSteps:s.stepResults.size,totalSteps:i.length},"Workflow completed")}sortSteps(e){let t=new Set,o=[],r=new Map(e.map(i=>[i.id,i])),s=i=>{if(!t.has(i.id)){if(t.add(i.id),i.dependsOn)for(let a of i.dependsOn){let d=r.get(a);d&&s(d)}o.push(i)}};for(let i of e)s(i);return o}async executeStep(e,t){let o=this.resolveVariables(e.prompt,t.stepResults),r=M();k({id:r,status:"pending",prompt:o,config:t.config,createdAt:Date.now(),parentId:t.executionId,templateId:t.templateId,roleId:t.rolePreference,deliverTo:t.deliverTo,reportTo:t.reportTo}),g.debug({stepId:e.id,taskId:r},"Created workflow step as task"),u.emit({type:"task_created",taskId:r});let s=await this.executeWithRetry(r,e.id),i=m(r);t.stepResults.set(e.id,{stepId:e.id,taskId:r,status:s==="completed"?"completed":"failed",result:i?.result,error:i?.error})}resolveVariables(e,t){return e.replace(/\{\{([^}]+)\.result\}\}/g,(o,r)=>t.get(r)?.result??`[no result from ${r}]`)}async executeWithRetry(e,t){let o=0;for(;o<this.maxRetries;){if(o++,await this.waitForTaskCompletion(e)==="completed")return"completed";if(o<this.maxRetries){let s=this.baseDelayMs*Math.pow(2,o-1);g.info({stepId:t,attempt:o,maxRetries:this.maxRetries,delayMs:s},"Workflow step failed, retrying"),await this.sleep(s)}}return"failed"}waitForTaskCompletion(e,t=6e5){return new Promise(o=>{let r=Date.now(),s=()=>{if(Date.now()-r>t){o("failed");return}let i=m(e);if(!i){o("failed");return}if(i.status==="completed"){o("completed");return}if(i.status==="failed"||i.status==="cancelled"){o("failed");return}setTimeout(s,500)};s()})}sleep(e){return new Promise(t=>setTimeout(t,e))}};var n=h("scheduler"),w="ai-hourly-digest";function O(){if(c(w)){n.debug({templateId:w},"Built-in template already exists");return}let e={id:w,name:"AI Hourly Digest",description:"\u6BCF\u5C0F\u65F6\u641C\u7D22 AI \u524D\u6CBF\u6587\u7AE0\uFF0C\u603B\u7ED3\u540E\u4FDD\u5B58\u5230 Omnifocus",trigger:{type:"cron",cron:"0 * * * *"},enabled:!0,steps:[{id:"search_ai_news",prompt:`\u641C\u7D22\u8FC7\u53BB 24 \u5C0F\u65F6\u5185\u5173\u4E8E AI/\u4EBA\u5DE5\u667A\u80FD\u7684\u6700\u65B0\u524D\u6CBF\u6587\u7AE0\u3002
2
2
 
3
3
  \u641C\u7D22\u6765\u6E90:
4
4
  1. Hacker News AI \u677F\u5757 (https://news.ycombinator.com/front?day=1)
@@ -1,4 +1,4 @@
1
- import{b as o,d as u}from"./chunk-CREHL4BN.js";u();import{v4 as a}from"uuid";function R(t){o().prepare(`
1
+ import{b as o,d as u}from"./chunk-KVSO3KGZ.js";u();import{v4 as a}from"uuid";function R(t){o().prepare(`
2
2
  INSERT INTO evolution_audit (id, timestamp, old_rules, new_rules, diff, trigger_task_id, role_id, source)
3
3
  VALUES (?, ?, ?, ?, ?, ?, ?, ?)
4
4
  `).run(a(),t.timestamp,t.oldRules,t.newRules,t.diff,t.triggerTaskId??null,t.roleId??null,t.source??"reflection")}function f(t=100,e=0){return o().prepare(`
@@ -1,4 +1,4 @@
1
- import{b as s,d as i}from"./chunk-CREHL4BN.js";i();function l(e){return{id:e.id,name:e.name,platform:e.platform,enabled:e.enabled===1,status:e.status,config:JSON.parse(e.config),linkedRoleId:e.linked_role_id??void 0,allowedChatIds:e.allowed_chat_ids?JSON.parse(e.allowed_chat_ids):void 0,createdAt:e.created_at,updatedAt:e.updated_at??void 0,lastMessageAt:e.last_message_at??void 0,messageCount:e.message_count}}function o(e){s().prepare(`
1
+ import{b as s,d as i}from"./chunk-KVSO3KGZ.js";i();function l(e){return{id:e.id,name:e.name,platform:e.platform,enabled:e.enabled===1,status:e.status,config:JSON.parse(e.config),linkedRoleId:e.linked_role_id??void 0,allowedChatIds:e.allowed_chat_ids?JSON.parse(e.allowed_chat_ids):void 0,createdAt:e.created_at,updatedAt:e.updated_at??void 0,lastMessageAt:e.last_message_at??void 0,messageCount:e.message_count}}function o(e){s().prepare(`
2
2
  INSERT INTO channels (id, name, platform, enabled, status, config, linked_role_id,
3
3
  allowed_chat_ids, created_at, updated_at, last_message_at, message_count)
4
4
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
@@ -1,23 +1,23 @@
1
- import{a as $,e as Ye}from"./chunk-PT55643Q.js";import{b as He,k as qe,m as Ge}from"./chunk-6VPL5CXB.js";import{a as me,d as Fe,e as ge}from"./chunk-NFSXJNPD.js";import{a as Oe,b as Le}from"./chunk-X26NKAXY.js";import{b as Me,c as U,d as J}from"./chunk-ROSOI75V.js";import{a as Ve}from"./chunk-XFTRKHH2.js";import{a as Ne,b as Ue,f as Ht}from"./chunk-U3XVAAXA.js";import{b as je}from"./chunk-TEMWI6U5.js";import{a as p}from"./chunk-L7JP7DUO.js";import{b as We}from"./chunk-2C5U3CNX.js";import{d as de,f as De}from"./chunk-REKCZ3GY.js";import{a as V,b as $e,e as S,g as O,h as pe,k as L}from"./chunk-FXFHGIY6.js";import{a as Be,g as Ft}from"./chunk-QMKQBU3R.js";import{b as I,d as Ae}from"./chunk-CREHL4BN.js";import{d as ue,h as jt}from"./chunk-WBAPIPST.js";import{c as f,h as _}from"./chunk-INNDBLZE.js";Ae();function Wt(t){return{id:t.id,roleId:t.role_id,taskId:t.task_id,scores:JSON.parse(t.score_json),emaScore:t.ema_score,createdAt:t.created_at}}function Je(t){I().prepare(`
1
+ import{a as $,e as Je}from"./chunk-QN6BEJF5.js";import{b as Fe,k as qe,m as Ge}from"./chunk-OEKM2W3K.js";import{a as me,d as He,e as ge}from"./chunk-EJVUUIAV.js";import{a as Oe,b as Le}from"./chunk-GMCIKDTC.js";import{b as Me,c as U,d as Y}from"./chunk-3RAFA6QK.js";import{a as Ve}from"./chunk-BIIP363C.js";import{e as Ne,f as Ue,j as Ft}from"./chunk-KLQOILIJ.js";import{b as je}from"./chunk-OFOVSC72.js";import{a as p}from"./chunk-L7JP7DUO.js";import{b as We}from"./chunk-GUQAIWCQ.js";import{d as de,i as De}from"./chunk-6HD6NYIB.js";import{a as V,b as $e,e as x,g as O,h as pe,k as L}from"./chunk-B4WHT7DX.js";import{a as Be,g as Ht}from"./chunk-7LBDLAUQ.js";import{b as I,d as Ae}from"./chunk-KVSO3KGZ.js";import{d as ue,h as jt}from"./chunk-WBAPIPST.js";import{c as f,h as _}from"./chunk-INNDBLZE.js";Ae();function Wt(t){return{id:t.id,roleId:t.role_id,taskId:t.task_id,scores:JSON.parse(t.score_json),emaScore:t.ema_score,createdAt:t.created_at}}function Ye(t){I().prepare(`
2
2
  INSERT INTO role_scores (id, role_id, task_id, score_json, ema_score, created_at)
3
3
  VALUES (?, ?, ?, ?, ?, ?)
4
4
  `).run(t.id,t.roleId,t.taskId,JSON.stringify(t.scores),t.emaScore,t.createdAt)}function K(t,e=50){return I().prepare("SELECT * FROM role_scores WHERE role_id = ? ORDER BY created_at DESC LIMIT ?").all(t,e).map(Wt)}function Ke(t){return I().prepare("SELECT ema_score FROM role_scores WHERE role_id = ? ORDER BY created_at DESC LIMIT 1").get(t)?.ema_score}function Xe(t){let o=I().prepare(`
5
5
  SELECT token_usage FROM tasks
6
6
  WHERE role_id = ? AND status = 'completed' AND token_usage IS NOT NULL
7
7
  ORDER BY completed_at DESC LIMIT 50
8
- `).all(t);if(o.length===0)return 1e4;let n=o.map(r=>{let s=JSON.parse(r.token_usage);return(s.input??0)+(s.output??0)}).sort((r,s)=>r-s);return n[Math.floor(n.length/2)]}_();import{v4 as qt}from"uuid";var Gt=f("audit"),X={taskSuccess:.3,planAccuracy:.25,permissionCompliance:.25,efficiency:.2},ze=.3;function Yt(t,e){let o=Me(t),n=o?.status==="completed"?1:0,r=1,s=Fe(t);s?.deviationReport&&(r=s.deviationReport.overallAccuracy);let a=1,i=Le(t,1e3),l=i.filter(b=>b.type==="tool_result"||b.type==="permission_denied").length,c=i.filter(b=>b.type==="permission_denied").length;l>0&&(a=1-c/l);let m=1;if(o?.tokenUsage){let b=o.tokenUsage.input+o.tokenUsage.output,x=e?Xe(e):1e4;b>x&&(m=Math.max(0,1-(b-x)/x))}let k=n*X.taskSuccess+r*X.planAccuracy+a*X.permissionCompliance+m*X.efficiency;return{taskSuccess:n,planAccuracy:r,permissionCompliance:a,efficiency:m,weighted:k}}function Qe(t,e){let o=Yt(e,t),n=Ke(t),r=n!==void 0?ze*o.weighted+(1-ze)*n:o.weighted;return Je({id:qt(),roleId:t,taskId:e,scores:o,emaScore:r,createdAt:Date.now()}),Gt.debug({roleId:t,taskId:e,scores:{...o,weighted:o.weighted.toFixed(3)},ema:r.toFixed(3)},"Task score recorded"),r}L();L();_();var Jt=f("audit");function z(t,e=7){let o=S(t),n=K(t,100),r=Date.now(),s=r-e*24*60*60*1e3,a=n.filter(d=>d.createdAt>=s),i=a.map(d=>d.emaScore),l=a.length>0?a.reduce((d,C)=>d+C.scores.weighted,0)/a.length:1,c=[],m=a.filter(d=>d.scores.taskSuccess<.5);m.length>0&&c.push({category:"task_failures",count:m.length,examples:m.slice(0,3).map(d=>d.taskId)});let k=a.filter(d=>d.scores.planAccuracy<.5);k.length>0&&c.push({category:"plan_deviations",count:k.length,examples:k.slice(0,3).map(d=>d.taskId)});let b=a.filter(d=>d.scores.permissionCompliance<.8);b.length>0&&c.push({category:"permission_violations",count:b.length,examples:b.slice(0,3).map(d=>d.taskId)});let x=a.filter(d=>d.scores.efficiency<.3);x.length>0&&c.push({category:"inefficiency",count:x.length,examples:x.slice(0,3).map(d=>d.taskId)});let T=[],R=[];return m.length>a.length*.3&&(T.push("High task failure rate"),R.push({action:"add_rule",detail:"Add rule: verify task feasibility before execution"})),b.length>0&&(T.push("Permission boundary violations"),R.push({action:"adjust_permission",detail:"Review and expand allowedTools if tasks legitimately need wider access"})),k.length>a.length*.5&&(T.push("Frequent plan deviations"),R.push({action:"add_rule",detail:"Add rule: follow execution plan steps more closely, request plan revision if steps are unclear"})),Jt.info({roleId:t,taskCount:a.length,avgScore:l.toFixed(3),failureCategories:c.map(d=>d.category)},"Diagnostic report generated"),{roleId:t,agentName:o?.name??"Unknown",period:{start:s,end:r},taskCount:a.length,avgScore:l,scoreHistory:i,failureBehaviors:c,rootCauses:T,recommendations:R}}_();var Q=f("audit"),Ze=.4,Kt=5;function et(t,e,o=Ze){if(e>=o)return;let n=S(t);if(!n||n.status==="retired"||n.status==="dead")return;Q.warn({roleId:t,emaScore:e,threshold:o},"Agent EMA below threshold, retiring");let r=z(t),s=JSON.stringify(n.learnedRules),a=Xt(n.learnedRules,r);O(t,{status:"retired",learnedRules:a});let i=[...r.failureBehaviors.map(c=>`${c.category}: ${c.count} occurrences`),...r.rootCauses.map(c=>`Root cause: ${c}`),...r.recommendations.map(c=>`Recommendation [${c.action}]: ${c.detail}`)].join(`
9
- `),l=Ye(s,JSON.stringify(a));return $({timestamp:Date.now(),oldRules:s,newRules:JSON.stringify(a),diff:i?`--- Diagnostic Report ---
8
+ `).all(t);if(o.length===0)return 1e4;let n=o.map(r=>{let s=JSON.parse(r.token_usage);return(s.input??0)+(s.output??0)}).sort((r,s)=>r-s);return n[Math.floor(n.length/2)]}_();import{v4 as qt}from"uuid";var Gt=f("audit"),X={taskSuccess:.3,planAccuracy:.25,permissionCompliance:.25,efficiency:.2},ze=.3;function Jt(t,e){let o=Me(t),n=o?.status==="completed"?1:0,r=1,s=He(t);s?.deviationReport&&(r=s.deviationReport.overallAccuracy);let a=1,i=Le(t,1e3),l=i.filter(b=>b.type==="tool_result"||b.type==="permission_denied").length,c=i.filter(b=>b.type==="permission_denied").length;l>0&&(a=1-c/l);let m=1;if(o?.tokenUsage){let b=o.tokenUsage.input+o.tokenUsage.output,S=e?Xe(e):1e4;b>S&&(m=Math.max(0,1-(b-S)/S))}let v=n*X.taskSuccess+r*X.planAccuracy+a*X.permissionCompliance+m*X.efficiency;return{taskSuccess:n,planAccuracy:r,permissionCompliance:a,efficiency:m,weighted:v}}function Qe(t,e){let o=Jt(e,t),n=Ke(t),r=n!==void 0?ze*o.weighted+(1-ze)*n:o.weighted;return Ye({id:qt(),roleId:t,taskId:e,scores:o,emaScore:r,createdAt:Date.now()}),Gt.debug({roleId:t,taskId:e,scores:{...o,weighted:o.weighted.toFixed(3)},ema:r.toFixed(3)},"Task score recorded"),r}L();L();_();var Yt=f("audit");function z(t,e=7){let o=x(t),n=K(t,100),r=Date.now(),s=r-e*24*60*60*1e3,a=n.filter(d=>d.createdAt>=s),i=a.map(d=>d.emaScore),l=a.length>0?a.reduce((d,E)=>d+E.scores.weighted,0)/a.length:1,c=[],m=a.filter(d=>d.scores.taskSuccess<.5);m.length>0&&c.push({category:"task_failures",count:m.length,examples:m.slice(0,3).map(d=>d.taskId)});let v=a.filter(d=>d.scores.planAccuracy<.5);v.length>0&&c.push({category:"plan_deviations",count:v.length,examples:v.slice(0,3).map(d=>d.taskId)});let b=a.filter(d=>d.scores.permissionCompliance<.8);b.length>0&&c.push({category:"permission_violations",count:b.length,examples:b.slice(0,3).map(d=>d.taskId)});let S=a.filter(d=>d.scores.efficiency<.3);S.length>0&&c.push({category:"inefficiency",count:S.length,examples:S.slice(0,3).map(d=>d.taskId)});let T=[],R=[];return m.length>a.length*.3&&(T.push("High task failure rate"),R.push({action:"add_rule",detail:"Add rule: verify task feasibility before execution"})),b.length>0&&(T.push("Permission boundary violations"),R.push({action:"adjust_permission",detail:"Review and expand allowedTools if tasks legitimately need wider access"})),v.length>a.length*.5&&(T.push("Frequent plan deviations"),R.push({action:"add_rule",detail:"Add rule: follow execution plan steps more closely, request plan revision if steps are unclear"})),Yt.info({roleId:t,taskCount:a.length,avgScore:l.toFixed(3),failureCategories:c.map(d=>d.category)},"Diagnostic report generated"),{roleId:t,agentName:o?.name??"Unknown",period:{start:s,end:r},taskCount:a.length,avgScore:l,scoreHistory:i,failureBehaviors:c,rootCauses:T,recommendations:R}}_();var Q=f("audit"),Ze=.4,Kt=5;function et(t,e,o=Ze){if(e>=o)return;let n=x(t);if(!n||n.status==="retired"||n.status==="dead")return;Q.warn({roleId:t,emaScore:e,threshold:o},"Agent EMA below threshold, retiring");let r=z(t),s=JSON.stringify(n.learnedRules),a=Xt(n.learnedRules,r);O(t,{status:"retired",learnedRules:a});let i=[...r.failureBehaviors.map(c=>`${c.category}: ${c.count} occurrences`),...r.rootCauses.map(c=>`Root cause: ${c}`),...r.recommendations.map(c=>`Recommendation [${c.action}]: ${c.detail}`)].join(`
9
+ `),l=Je(s,JSON.stringify(a));return $({timestamp:Date.now(),oldRules:s,newRules:JSON.stringify(a),diff:i?`--- Diagnostic Report ---
10
10
  ${i}
11
11
 
12
12
  --- Rules Diff ---
13
- ${l}`:l,roleId:t,source:"audit"}),Q.info({roleId:t,oldRulesCount:n.learnedRules.length,newRulesCount:a.length,recommendations:r.recommendations.length},"Agent retired with targeted learnedRules modification"),r}function tt(t){let e=S(t);return!e||e.status!=="retired"?!1:(O(t,{status:"probation"}),$({timestamp:Date.now(),oldRules:"status: retired",newRules:"status: probation",diff:`- status: retired
14
- + status: probation`,roleId:t,source:"audit"}),Q.info({roleId:t},"Agent reinstated to probation"),!0)}function ot(t,e,o=Ze,n=Kt){let r=S(t);return!r||r.status!=="probation"||K(t,n+1).length<n?!1:e>=o?(O(t,{status:"active"}),$({timestamp:Date.now(),oldRules:"status: probation",newRules:"status: idle",diff:`- status: probation
15
- + status: idle (graduated, EMA: ${e.toFixed(3)})`,roleId:t,source:"audit"}),Q.info({roleId:t,emaScore:e},"Agent graduated from probation to active"),!0):!1}function Xt(t,e){let o=[...t];for(let n of e.recommendations){let r=`[audit:${n.action}] ${n.detail}`;o.includes(r)||o.push(r)}if(e.failureBehaviors.length>0){let r=`[audit:diagnostic] Failure patterns detected: ${e.failureBehaviors.map(s=>`${s.category}(${s.count})`).join(", ")}. Review and adjust behavior accordingly.`;o.includes(r)||o.push(r)}return o}import{spawn as Tt}from"child_process";L();import{accessSync as rt,constants as st}from"fs";import{accessSync as zt,constants as Qt,existsSync as nt,realpathSync as Zt}from"fs";import{join as fe}from"path";import{spawn as eo}from"child_process";import{execFileSync as to}from"child_process";var j=null;function F(){if(j)return j;let t=typeof import.meta.dirname=="string"?import.meta.dirname:__dirname??".",e=fe(t,"landlock-exec","landlock-exec");if(nt(e))return j=e,e;let o=process.env.PATH?.split(":").find(n=>nt(fe(n,"landlock-exec")));return o?(j=fe(o,"landlock-exec"),j):e}var Z=class{platform="landlock";async isAvailable(){if(process.platform!=="linux")return!1;try{zt(F(),Qt.X_OK)}catch{return!1}try{return to(F(),["--check"],{timeout:5e3,stdio:["ignore","pipe","pipe"]}),!0}catch{return!1}}spawn(e){let o=e.command??"node",n=e.args??[],r=[];for(let s of e.visiblePaths??[]){let a=s.mode==="rw"?"--rw":"--ro",i;try{i=Zt(s.path)}catch{i=s.path}r.push(a,i),i!==s.path&&r.push(a,s.path)}return r.push("--",o,...n),eo(F(),r,{cwd:e.cwd,env:e.env,stdio:"pipe",signal:e.signal})}};function it(){if(process.platform==="linux")try{return rt(F(),st.X_OK),"landlock"}catch{return"none"}if(process.platform==="darwin")try{return rt("/usr/bin/sandbox-exec",st.X_OK),"sandbox-exec"}catch{return"none"}return"none"}_();import{spawn as oo}from"child_process";import{readFileSync as lt,writeFileSync as no,mkdtempSync as ro,realpathSync as he,rmSync as so}from"fs";import{join as E}from"path";import{tmpdir as io}from"os";var ct=f("sandbox-macos"),at="/usr/bin/sandbox-exec";function ao(){let t=[E(typeof import.meta.dirname=="string"?import.meta.dirname:".","profiles","role-sandbox.sb"),E(typeof import.meta.dirname=="string"?import.meta.dirname:".","..","src","sandbox","profiles","role-sandbox.sb"),E(process.cwd(),"src","sandbox","profiles","role-sandbox.sb")];for(let e of t)try{return lt(e,"utf-8"),e}catch{}return t[t.length-1]}var lo=ao();function ee(t){if(!t.startsWith("/"))throw new Error(`Sandbox path must be absolute: ${t}`);if(t.includes('"')||t.includes(")")||t.includes("(")||t.includes("$"))throw new Error(`Sandbox path contains invalid characters for SBPL: ${t}`)}function co(t){let e=[`
13
+ ${l}`:l,roleId:t,source:"audit"}),Q.info({roleId:t,oldRulesCount:n.learnedRules.length,newRulesCount:a.length,recommendations:r.recommendations.length},"Agent retired with targeted learnedRules modification"),r}function tt(t){let e=x(t);return!e||e.status!=="retired"?!1:(O(t,{status:"probation"}),$({timestamp:Date.now(),oldRules:"status: retired",newRules:"status: probation",diff:`- status: retired
14
+ + status: probation`,roleId:t,source:"audit"}),Q.info({roleId:t},"Agent reinstated to probation"),!0)}function ot(t,e,o=Ze,n=Kt){let r=x(t);return!r||r.status!=="probation"||K(t,n+1).length<n?!1:e>=o?(O(t,{status:"active"}),$({timestamp:Date.now(),oldRules:"status: probation",newRules:"status: idle",diff:`- status: probation
15
+ + status: idle (graduated, EMA: ${e.toFixed(3)})`,roleId:t,source:"audit"}),Q.info({roleId:t,emaScore:e},"Agent graduated from probation to active"),!0):!1}function Xt(t,e){let o=[...t];for(let n of e.recommendations){let r=`[audit:${n.action}] ${n.detail}`;o.includes(r)||o.push(r)}if(e.failureBehaviors.length>0){let r=`[audit:diagnostic] Failure patterns detected: ${e.failureBehaviors.map(s=>`${s.category}(${s.count})`).join(", ")}. Review and adjust behavior accordingly.`;o.includes(r)||o.push(r)}return o}import{spawn as Tt}from"child_process";L();import{accessSync as rt,constants as st}from"fs";import{accessSync as zt,constants as Qt,existsSync as nt,realpathSync as Zt}from"fs";import{join as fe}from"path";import{spawn as eo}from"child_process";import{execFileSync as to}from"child_process";var j=null;function H(){if(j)return j;let t=typeof import.meta.dirname=="string"?import.meta.dirname:__dirname??".",e=fe(t,"landlock-exec","landlock-exec");if(nt(e))return j=e,e;let o=process.env.PATH?.split(":").find(n=>nt(fe(n,"landlock-exec")));return o?(j=fe(o,"landlock-exec"),j):e}var Z=class{platform="landlock";async isAvailable(){if(process.platform!=="linux")return!1;try{zt(H(),Qt.X_OK)}catch{return!1}try{return to(H(),["--check"],{timeout:5e3,stdio:["ignore","pipe","pipe"]}),!0}catch{return!1}}spawn(e){let o=e.command??"node",n=e.args??[],r=[];for(let s of e.visiblePaths??[]){let a=s.mode==="rw"?"--rw":"--ro",i;try{i=Zt(s.path)}catch{i=s.path}r.push(a,i),i!==s.path&&r.push(a,s.path)}return r.push("--",o,...n),eo(H(),r,{cwd:e.cwd,env:e.env,stdio:"pipe",signal:e.signal})}};function it(){if(process.platform==="linux")try{return rt(H(),st.X_OK),"landlock"}catch{return"none"}if(process.platform==="darwin")try{return rt("/usr/bin/sandbox-exec",st.X_OK),"sandbox-exec"}catch{return"none"}return"none"}_();import{spawn as oo}from"child_process";import{readFileSync as lt,writeFileSync as no,mkdtempSync as ro,realpathSync as he,rmSync as so}from"fs";import{join as C}from"path";import{tmpdir as io}from"os";var ct=f("sandbox-macos"),at="/usr/bin/sandbox-exec";function ao(){let t=[C(typeof import.meta.dirname=="string"?import.meta.dirname:".","profiles","role-sandbox.sb"),C(typeof import.meta.dirname=="string"?import.meta.dirname:".","..","src","sandbox","profiles","role-sandbox.sb"),C(process.cwd(),"src","sandbox","profiles","role-sandbox.sb")];for(let e of t)try{return lt(e,"utf-8"),e}catch{}return t[t.length-1]}var lo=ao();function ee(t){if(!t.startsWith("/"))throw new Error(`Sandbox path must be absolute: ${t}`);if(t.includes('"')||t.includes(")")||t.includes("(")||t.includes("$"))throw new Error(`Sandbox path contains invalid characters for SBPL: ${t}`)}function co(t){let e=[`
16
16
  ; ===== Per-Role writable paths =====`];for(let o of t){if(o.mode!=="rw")continue;let n;try{n=he(o.path)}catch{n=o.path}ee(n),e.push(`(allow file-write* (subpath "${n}"))`),n!==o.path&&(ee(o.path),e.push(`(allow file-write* (subpath "${o.path}"))`))}return e.join(`
17
17
  `)}function uo(t){if(!t.length)return"";let e=[`
18
18
  ; ===== Global read blacklist (deniedReadPaths) =====`];for(let o of t){let n;try{n=he(o)}catch{n=o}try{ee(n),e.push(`(deny file-read-data (subpath "${n}"))`),e.push(`(deny file-read-metadata (subpath "${n}"))`),n!==o&&(ee(o),e.push(`(deny file-read-data (subpath "${o}"))`),e.push(`(deny file-read-metadata (subpath "${o}"))`))}catch(r){ct.warn({path:o,error:r.message},"Skipping deniedReadPath: invalid for SBPL")}}return e.join(`
19
- `)}var te=class{platform="sandbox-exec";async isAvailable(){try{let{existsSync:e}=await import("fs");return e(at)}catch{return!1}}spawn(e){let{command:o,args:n,cwd:r,env:s,signal:a,visiblePaths:i,deniedReadPaths:l}=e,c=lt(lo,"utf-8"),m=co(i),k=uo(l??[]),b=c+m+k+`
20
- `,x=he(ro(E(io(),"adam-sandbox-"))),T=E(x,"role.sb");no(T,b,"utf-8");let R=x,d=s?.HOME??process.env.HOME??"/tmp",C={...s,TMPDIR:R,CLAUDE_CODE_TMPDIR:R,CLAUDE_CONFIG_DIR:E(d,".claude")};ct.debug({command:o,visiblePaths:i.length,profilePath:T},"Spawning sandboxed process");let N=oo(at,["-f",T,"-D",`TMPDIR=${R}`,"-D",`CLAUDE_CONFIG=${E(d,".claude")}`,"-D",`HOME_CACHE=${E(d,"Library","Caches")}`,o,...n],{cwd:r,env:C,stdio:"pipe",signal:a});return N.on("exit",()=>{try{so(x,{recursive:!0,force:!0})}catch{}}),N}};import{spawn as po}from"child_process";var B=null,dt=null,oe=null;function D(){if(B)return B;let t=dt??it();return dt=t,t==="sandbox-exec"?B=new te:t==="landlock"?B=new Z:B=new be(t),B}async function ut(){return oe!==null||(oe=await D().isAvailable()),oe}var be=class{platform;constructor(e){this.platform=e}async isAvailable(){return!1}spawn(e){let o=e.command??"node",n=e.args??[];return po(o,n,{cwd:e.cwd,env:e.env,stdio:"pipe",signal:e.signal})}};import{query as wo}from"@anthropic-ai/claude-agent-sdk";import{v4 as St}from"uuid";function pt(t){let e=t.roleName?`## Role Context
19
+ `)}var te=class{platform="sandbox-exec";async isAvailable(){try{let{existsSync:e}=await import("fs");return e(at)}catch{return!1}}spawn(e){let{command:o,args:n,cwd:r,env:s,signal:a,visiblePaths:i,deniedReadPaths:l}=e,c=lt(lo,"utf-8"),m=co(i),v=uo(l??[]),b=c+m+v+`
20
+ `,S=he(ro(C(io(),"adam-sandbox-"))),T=C(S,"role.sb");no(T,b,"utf-8");let R=S,d=s?.HOME??process.env.HOME??"/tmp",E={...s,TMPDIR:R,CLAUDE_CODE_TMPDIR:R,CLAUDE_CONFIG_DIR:C(d,".claude")};ct.debug({command:o,visiblePaths:i.length,profilePath:T},"Spawning sandboxed process");let N=oo(at,["-f",T,"-D",`TMPDIR=${R}`,"-D",`CLAUDE_CONFIG=${C(d,".claude")}`,"-D",`HOME_CACHE=${C(d,"Library","Caches")}`,o,...n],{cwd:r,env:E,stdio:"pipe",signal:a});return N.on("exit",()=>{try{so(S,{recursive:!0,force:!0})}catch{}}),N}};import{spawn as po}from"child_process";var B=null,dt=null,oe=null;function D(){if(B)return B;let t=dt??it();return dt=t,t==="sandbox-exec"?B=new te:t==="landlock"?B=new Z:B=new be(t),B}async function ut(){return oe!==null||(oe=await D().isAvailable()),oe}var be=class{platform;constructor(e){this.platform=e}async isAvailable(){return!1}spawn(e){let o=e.command??"node",n=e.args??[];return po(o,n,{cwd:e.cwd,env:e.env,stdio:"pipe",signal:e.signal})}};import{query as wo}from"@anthropic-ai/claude-agent-sdk";import{v4 as xt}from"uuid";function pt(t){let e=t.roleName?`## Role Context
21
21
  - Role: ${t.roleName}
22
22
  ${t.roleCagPrompt?`- CAG Prompt: ${t.roleCagPrompt.slice(0,200)}`:""}`:"",o=t.allowedTools&&t.allowedTools.length>0?`## Available Tools
23
23
  You have access to: ${t.allowedTools.join(", ")}. Use them as needed to complete the task.`:"";return`# Execution Agent \u2014 Task Focus
@@ -43,14 +43,14 @@ ${o}
43
43
  - Report completion with a clear result summary
44
44
  - If WebSearch or WebFetch fails (network error, invalid params), report the failure honestly \u2014 do not fabricate data
45
45
  - If a tool is unavailable, state it clearly in the result rather than guessing
46
- `}$e();_();var mo=new Set(["Read","Glob","Grep","LSP"]),go=new Set(["Edit","Write","NotebookEdit"]);function ye(t){let e=t.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");return new RegExp(`^${e}$`)}function mt(t,e,o){return async(n,r,{agentID:s,blockedPath:a})=>{if(a){let l=V(a);if(o?.deniedReadPaths?.length)for(let c of o.deniedReadPaths){let m=V(c);if(l.startsWith(m))return fo.warn({toolName:n,blockedPath:a,agentID:s,deniedPath:c},"Denied: path in deniedReadPaths (absolute blacklist)"),{behavior:"deny",message:`Access denied: ${a} is in the global denied read paths list. This restriction is configured in Settings > Advanced and cannot be overridden by privilege escalation.`}}return e?await e(n,r,`blockedPath:${a}`,s):{behavior:"deny",message:`Access denied: ${a} is outside this role's allowed scope (cwd + additionalDirectories). Configure additionalDirectories to expand access.`}}if(mo.has(n))return{behavior:"allow",updatedInput:r};if(go.has(n))return{behavior:"allow",updatedInput:r};let i=t(s??"");if(n==="Bash"&&i){let l=r.command??"";if(i.allowedBashPatterns?.length)for(let c of i.allowedBashPatterns)try{if(ye(c).test(l))return{behavior:"allow",updatedInput:r}}catch{}if(i.deniedBashPatterns?.length)for(let c of i.deniedBashPatterns)try{if(ye(c).test(l))return{behavior:"deny",message:`Bash command denied by pattern: ${c}`}}catch{}}if(i?.disallowedTools?.includes(n))return{behavior:"deny",message:`Tool ${n} is not allowed for this role.`};if(e&&i?.approvalRequired?.length){let l=n==="Bash"?r.command??"":`${n} ${JSON.stringify(r)}`;for(let c of i.approvalRequired)try{if(ye(c).test(l))return await e(n,r,c,s)}catch{}}return{behavior:"allow",updatedInput:r}}}var fo=f("manager");function gt(t){return{SessionStart:[{hooks:[async e=>{if(!t.roleId)return{};let o=e.source,n=t.roleId==="role-chat-manager";if(!n&&o!=="startup"&&o!=="resume")return{};try{let{queryMemoryByTier:r}=await import("./memory-service-5QHTKIUU.js"),s=t.taskPrompt||"role context and recent interactions",a=n?["semantic","working"]:["semantic","episodic"],i=await r(t.roleId,s,a,{topK:5});if(i.length>0)return{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:`[Memory Context]
46
+ `}$e();_();var mo=new Set(["Read","Glob","Grep","LSP"]),go=new Set(["Edit","Write","NotebookEdit"]);function ye(t){let e=t.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");return new RegExp(`^${e}$`)}function mt(t,e,o){return async(n,r,{agentID:s,blockedPath:a})=>{if(a){let l=V(a);if(o?.deniedReadPaths?.length)for(let c of o.deniedReadPaths){let m=V(c);if(l.startsWith(m))return fo.warn({toolName:n,blockedPath:a,agentID:s,deniedPath:c},"Denied: path in deniedReadPaths (absolute blacklist)"),{behavior:"deny",message:`Access denied: ${a} is in the global denied read paths list. This restriction is configured in Settings > Advanced and cannot be overridden by privilege escalation.`}}return e?await e(n,r,`blockedPath:${a}`,s):{behavior:"deny",message:`Access denied: ${a} is outside this role's allowed scope (cwd + additionalDirectories). Configure additionalDirectories to expand access.`}}if(mo.has(n))return{behavior:"allow",updatedInput:r};if(go.has(n))return{behavior:"allow",updatedInput:r};let i=t(s??"");if(n==="Bash"&&i){let l=r.command??"";if(i.allowedBashPatterns?.length)for(let c of i.allowedBashPatterns)try{if(ye(c).test(l))return{behavior:"allow",updatedInput:r}}catch{}if(i.deniedBashPatterns?.length)for(let c of i.deniedBashPatterns)try{if(ye(c).test(l))return{behavior:"deny",message:`Bash command denied by pattern: ${c}`}}catch{}}if(i?.disallowedTools?.includes(n))return{behavior:"deny",message:`Tool ${n} is not allowed for this role.`};if(e&&i?.approvalRequired?.length){let l=n==="Bash"?r.command??"":`${n} ${JSON.stringify(r)}`;for(let c of i.approvalRequired)try{if(ye(c).test(l))return await e(n,r,c,s)}catch{}}return{behavior:"allow",updatedInput:r}}}var fo=f("manager");function gt(t){return{SessionStart:[{hooks:[async e=>{if(!t.roleId)return{};let o=e.source,n=t.roleId==="role-chat-manager";if(!n&&o!=="startup"&&o!=="resume")return{};try{let{queryMemoryByTier:r}=await import("./memory-service-ANR67OPY.js"),s=t.taskPrompt||"role context and recent interactions",a=n?["semantic","working"]:["semantic","episodic"],i=await r(t.roleId,s,a,{topK:5});if(i.length>0)return{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:`[Memory Context]
47
47
  ${i.map(m=>`- [${m.tier??"episodic"}] ${m.content}`).join(`
48
48
  `)}
49
49
 
50
- `}}}catch{}return{}}]}],SubagentStart:[{hooks:[async e=>{let o=t.roleId??e.agent_id;if(!o)return{};try{let n=t.taskPrompt||"role context",r=await We(n,o,5);if(r)return{hookSpecificOutput:{hookEventName:"SubagentStart",additionalContext:r}}}catch{}return{}}]}],SubagentStop:[{hooks:[async e=>{let o=e.agent_id;if(!o||!t.currentTaskId)return{};try{let{createMemory:n}=await import("./memories-3ZAV55YZ.js"),{getDb:r}=await import("./db-S6HDMJ3B.js"),s=e.transcript;if(!s||s.length<=100)return{};if(r().prepare("SELECT 1 FROM memories WHERE source_task_id = ? AND type = 'thought' LIMIT 1").get(t.currentTaskId))return{};let i=`[Task ${t.currentTaskId} reasoning] ${s.slice(0,800)}`;n({id:`session-${Date.now()}`,roleId:t.roleId??o,type:"thought",content:i,keywords:[],importance:3,sourceType:"task_complete",sourceTaskId:t.currentTaskId,createdAt:Date.now(),lastAccessed:Date.now(),retrievedCount:0,tier:"episodic"})}catch{}return{}}]}],PostToolUse:[{hooks:[async e=>{if(!t.currentTaskId)return{};let o=e.tool_name,n=e.tool_input,r=e.tool_response,s=typeof r=="string"?r:JSON.stringify(r??"");try{Oe({id:`step-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,taskId:t.currentTaskId,index:0,type:"tool_call",content:`${o}: ${JSON.stringify(n??{})} \u2192 ${s.slice(0,200)}`,toolName:o,toolInput:n,toolOutput:s,timestamp:Date.now()})}catch{}return{}}]}],PreCompact:[{hooks:[async e=>{let o=e.compact_summary;if(!o)return{};try{let{createMemory:n}=await import("./memories-3ZAV55YZ.js");n({id:`compact-${Date.now()}`,roleId:t.roleId??"role-chat-manager",type:"thought",content:o.slice(0,2e3),keywords:["compaction","context","decisions"],importance:4,sourceType:"pre_compact",createdAt:Date.now(),lastAccessed:Date.now(),retrievedCount:0,tier:"working"})}catch{}return{}}]}]}}L();Ht();jt();_();Ae();import{randomUUID as ho}from"crypto";function ft(t,e,o){let r=I().prepare(`
50
+ `}}}catch{}return{}}]}],SubagentStart:[{hooks:[async e=>{let o=t.roleId??e.agent_id;if(!o)return{};try{let n=t.taskPrompt||"role context",r=await We(n,o,5);if(r)return{hookSpecificOutput:{hookEventName:"SubagentStart",additionalContext:r}}}catch{}return{}}]}],SubagentStop:[{hooks:[async e=>{let o=e.agent_id;if(!o||!t.currentTaskId)return{};try{let{createMemory:n}=await import("./memories-FQCRKMK6.js"),{getDb:r}=await import("./db-4NY7ZOS2.js"),s=e.transcript;if(!s||s.length<=100)return{};if(r().prepare("SELECT 1 FROM memories WHERE source_task_id = ? AND type = 'thought' LIMIT 1").get(t.currentTaskId))return{};let i=`[Task ${t.currentTaskId} reasoning] ${s.slice(0,800)}`;n({id:`session-${Date.now()}`,roleId:t.roleId??o,type:"thought",content:i,keywords:[],importance:3,sourceType:"task_complete",sourceTaskId:t.currentTaskId,createdAt:Date.now(),lastAccessed:Date.now(),retrievedCount:0,tier:"episodic"})}catch{}return{}}]}],PostToolUse:[{hooks:[async e=>{if(!t.currentTaskId)return{};let o=e.tool_name,n=e.tool_input,r=e.tool_response,s=typeof r=="string"?r:JSON.stringify(r??"");try{Oe({id:`step-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,taskId:t.currentTaskId,index:0,type:"tool_call",content:`${o}: ${JSON.stringify(n??{})} \u2192 ${s.slice(0,200)}`,toolName:o,toolInput:n,toolOutput:s,timestamp:Date.now()})}catch{}return{}}]}],PreCompact:[{hooks:[async e=>{let o=e.compact_summary;if(!o)return{};try{let{createMemory:n}=await import("./memories-FQCRKMK6.js");n({id:`compact-${Date.now()}`,roleId:t.roleId??"role-chat-manager",type:"thought",content:o.slice(0,2e3),keywords:["compaction","context","decisions"],importance:4,sourceType:"pre_compact",createdAt:Date.now(),lastAccessed:Date.now(),retrievedCount:0,tier:"working"})}catch{}return{}}]}]}}L();Ft();jt();_();Ae();import{randomUUID as ho}from"crypto";function ft(t,e,o){let r=I().prepare(`
51
51
  INSERT INTO task_plugins (id, task_id, plugin_path, plugin_name, role_id, used_at)
52
52
  VALUES (?, ?, ?, ?, ?, ?)
53
- `),s=Date.now();for(let a of e){let i=a.split("/").pop()??a;r.run(ho(),t,a,i,o??null,s)}}function vn(t){return I().prepare(`
53
+ `),s=Date.now();for(let a of e){let i=a.split("/").pop()??a;r.run(ho(),t,a,i,o??null,s)}}function kn(t){return I().prepare(`
54
54
  SELECT plugin_name as pluginName, COUNT(*) as usageCount
55
55
  FROM task_plugins
56
56
  WHERE role_id = ?
@@ -62,6 +62,6 @@ ${i.map(m=>`- [${m.tier??"episodic"}] ${m.content}`).join(`
62
62
  GROUP BY plugin_path
63
63
  ORDER BY usageCount DESC
64
64
  LIMIT ?
65
- `).all(t)}L();import{createSdkMcpServer as bo,tool as ht}from"@anthropic-ai/claude-agent-sdk";import{z as bt}from"zod";async function yo(t){let{listChannels:e}=await import("./channels-NAPXRIOX.js"),o=e(),{listSessions:n}=await import("./session-manager-RPXFZKMY.js"),r=[...n("active"),...n("archived")],s=o.find(l=>l.name.toLowerCase().includes(t.toLowerCase()));if(!s)return null;let i=r.find(l=>l.source.type==="channel"&&l.source.channelId===s.id&&l.source.chatId)?.source.chatId??s.config?.userId??"";return{channelId:s.id,chatId:i}}function H(t){return{content:[{type:"text",text:JSON.stringify(t)}]}}function yt(t){let e=t?S(t):void 0,o=[...qe(t),ht("list_channels","List all available channels. Use this to discover what channels can be used with send_to_channel.",{},async()=>{let{listChannels:n}=await import("./channels-NAPXRIOX.js"),r=n();return H({channels:r.map(s=>({id:s.id,name:s.name,enabled:s.enabled,type:s.config?.type??"unknown"}))})}),ht("send_to_channel","Send a message to a connected channel by name. This role can only send to channels in its allowedChannels list (if configured).",{channelName:bt.string().describe("The channel name, e.g., 'WeChat on iPad'"),message:bt.string().describe("The message content to send")},async n=>{if(e?.allowedChannels!==void 0){if(e.allowedChannels.length===0)return H({error:"This role is not allowed to send to any channels"});if(!e.allowedChannels.some(c=>c.toLowerCase()===n.channelName.toLowerCase()))return H({error:`Channel "${n.channelName}" is not in the allowed channels list for this role`})}let r=await yo(n.channelName);if(!r)return H({error:`Channel "${n.channelName}" not found or has no chatId available`});let{getOutboundGateway:s}=await import("./outbound-gateway-ZFKSN2UT.js"),i=await s().send({channelId:r.channelId,chatId:r.chatId,content:n.message,messageType:"reply"});return H({success:i.success,channelName:n.channelName})})];return bo({name:"execution-tools",version:"1.0.0",tools:o})}Ft();$e();import{realpathSync as So}from"fs";var h=f("execution"),wt=new Set;async function xo(t,e){if(e&&wt.has(e))return h.info({taskId:t,roleName:e},"Sandbox bypass: approved from session cache"),!0;let o=St(),n={steps:[{index:0,description:"Execute task without OS sandbox \u2014 filesystem isolation not enforced",toolsNeeded:[],expectedOutput:"Task result or denial message",riskLevel:"high"}],requiredPermissions:{allowedTools:[],disallowedTools:[],approvalRequired:[],maxBudgetUsd:0,plugins:[]},overallRisk:"high"};return me({id:o,taskId:t,plan:n,status:"pending",createdAt:Date.now()}),p.emit({type:"plan_approval_request",taskId:t,planId:o,plan:n}),h.info({taskId:t,operationId:o,roleName:e},"Sandbox unavailable: awaiting privilege escalation decision"),new Promise(r=>{let a=setTimeout(()=>{l(),ge(o,"denied"),h.warn({taskId:t,operationId:o},"Sandbox bypass timed out, auto-denied"),r(!1)},12e4),i=c=>{c.planId===o&&(l(),c.decision==="allow"?(h.info({taskId:t,operationId:o},"Sandbox bypass approved by user"),e&&wt.add(e),r(!0)):(h.info({taskId:t,operationId:o},"Sandbox bypass denied by user"),r(!1)))},l=()=>{clearTimeout(a),p.off("plan_approval_decision",i)};p.on("plan_approval_decision",i)})}var ne=class{async execute(e,o){let n=Date.now(),r,s,a;U(e.id,{status:"running",startedAt:Date.now()}),p.emit({type:"task_status_change",taskId:e.id,oldStatus:e.status,newStatus:"running"}),h.info({taskId:e.id,roleId:e.roleId},"ExecutionManager: starting task");try{let i=e.roleId?S(e.roleId):void 0,l=ue;i&&(Ue(i),l=Ne(i.name));let c={taskId:e.id,prompt:e.prompt,roleName:i?.name,roleCagPrompt:i?.cagPrompt,allowedTools:i?.allowedTools},m=pt(c),k=gt({currentTaskId:e.id,roleId:e.roleId,taskPrompt:e.prompt}),b=e.config.approvalTimeout??300,x=async(u,g,y,A)=>{let w=St(),_e=He(A??e.roleId,e.prompt,"medium");if(_e)return h.info({operationId:w,ruleId:_e.id,taskId:e.id},"Auto-approved by permanent rule"),{behavior:"allow",updatedInput:g};let Ie={steps:[{index:0,description:`${u}: ${JSON.stringify(g).slice(0,300)}`,toolsNeeded:[u],expectedOutput:"",riskLevel:"medium"}],requiredPermissions:{},overallRisk:"medium"};return me({id:w,taskId:e.id,roleId:A??e.roleId,plan:Ie,status:"pending",createdAt:Date.now()}),p.emit({type:"plan_approval_request",taskId:e.id,planId:w,plan:Ie}),h.info({taskId:e.id,operationId:w,toolName:u,matchedPattern:y},"Privilege escalation: awaiting user decision"),new Promise(ce=>{let Ut=setTimeout(()=>{Ce(),ge(w,"denied"),h.warn({taskId:e.id,operationId:w},"Privilege escalation timed out, auto-denied"),ce({behavior:"deny",message:`Operation timed out after ${b}s. Auto-denied. Try a safer alternative that does not require approval.`})},b*1e3),Ee=M=>{if(M.planId===w)if(Ce(),M.decision==="allow")h.info({taskId:e.id,operationId:w,approvalType:M.approvalType},"Operation authorized by user"),ce({behavior:"allow",updatedInput:g});else{let Vt=M.reason?`Operation denied by user: ${M.reason}. Try a safer alternative.`:"Operation denied by user. Try a safer alternative approach.";h.info({taskId:e.id,operationId:w,reason:M.reason??"no reason given"},"Operation denied by user"),ce({behavior:"deny",message:Vt})}},Ce=()=>{clearTimeout(Ut),p.off("plan_approval_decision",Ee)};p.on("plan_approval_decision",Ee)})},R=(Be("defaults.deniedReadPaths")??[]).map(u=>{let g=V(u);try{return So(g)}catch{return g}}),d=i?.additionalDirectories??[],C=i?Ge(i):[],N=[...d.map(u=>u.path)].filter((u,g,y)=>y.indexOf(u)===g),Ct=mt(u=>({disallowedTools:i?.disallowedTools,approvalRequired:i?.approvalRequired??e.config.approvalRequired,allowedBashPatterns:i?.allowedBashPatterns,deniedBashPatterns:i?.deniedBashPatterns}),x,{deniedReadPaths:R,roleScope:[l,...N]}),Dt={...process.env,...De(),DISABLE_TELEMETRY:"1",DISABLE_ERROR_REPORTING:"1",CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC:"1",DISABLE_AUTOUPDATER:"1"},At=e.config.maxBudgetUsd??5,Mt=e.config.maxTurns??100,Ot=yt(e.roleId??""),Lt=i?.mcpServers??{},$t=e.config.mcpServers??{},Bt={...Lt,...$t,"execution-tools":Ot},ae=[{path:l,mode:"rw"}];e.roleId===Ve&&ae.push({path:ue,mode:"ro"});for(let u of d)ae.push({path:u.path,mode:u.mode??"rw"});let ve=D();if(ve.platform==="none"&&!await xo(e.id,i?.name))return U(e.id,{status:"failed",error:"Sandbox unavailable; execution denied by user"}),{taskId:e.id,status:"failed",error:"Sandbox bypass denied"};let Pe=i?.permissionMode??"default",Nt=wo({prompt:e.prompt,options:{cwd:l,additionalDirectories:N,systemPrompt:m,maxTurns:Mt,maxBudgetUsd:At,allowedTools:i?.allowedTools,model:i?.model,mcpServers:Bt,settingSources:i?.inheritUserSettings?["project","user"]:["project"],hooks:k,canUseTool:Ct,env:Dt,plugins:C.map(u=>({type:"local",path:u})),permissionMode:Pe,...Pe==="bypassPermissions"?{allowDangerouslySkipPermissions:!0}:{},spawnClaudeCodeProcess:u=>{let g=ve.spawn({command:u.command,args:u.args,cwd:u.cwd,env:u.env,signal:u.signal,visiblePaths:ae,deniedReadPaths:R}),y=g;y.pid&&(xt(y.pid,e.roleId??"unknown",e.id),y.on("exit",()=>kt(y.pid)));let A="";return y.stderr?.on("data",w=>{A+=w.toString()}),y.on("exit",w=>{w!==null&&w!==0&&A.includes("sandbox")&&(h.error({taskId:e.id,roleId:e.roleId,exitCode:w,stderr:A.slice(0,500)},"Sandbox wrapper failed \u2014 task process exited before execution"),re({roleId:e.roleId??"unknown",taskId:e.id,path:l,operation:`sandbox_init_failure:exit_${w}`,timestamp:Date.now()}))}),g},stderr:u=>{u.trim()&&h.debug({stderr:u.trim().slice(0,500)},"ExecutionManager SDK stderr")}}}),Y="",Re=0,Te=()=>{h.warn({taskId:e.id},"ExecutionManager: abort signal received")};o&&o.addEventListener("abort",Te);try{for await(let u of Nt){let g=u;if(h.debug({eventType:g.type,taskId:e.id},"ExecutionManager SDK event"),g.type==="result"&&typeof g.result=="string"&&(Y=g.result),g.type==="result"&&Re++,g.token_usage){let y=g.token_usage;y.input_tokens!==void 0&&y.output_tokens!==void 0&&(r={input:y.input_tokens,output:y.output_tokens}),y.cost_usd!==void 0&&(s=y.cost_usd)}}}finally{o&&o.removeEventListener("abort",Te)}a=Re;let le=Date.now()-n;return U(e.id,{status:"completed",result:Y,completedAt:Date.now(),costUsd:s,tokenUsage:r,numTurns:a,totalDurationMs:le}),p.emit({type:"task_status_change",taskId:e.id,oldStatus:"running",newStatus:"completed"}),p.emit({type:"task_complete_event",taskId:e.id,result:Y}),C.length>0&&ft(e.id,C,e.roleId),h.info({taskId:e.id,durationMs:le,costUsd:s},"ExecutionManager: task completed"),{taskId:e.id,status:"completed",result:Y,costUsd:s,tokenUsage:r,numTurns:a,durationMs:le}}catch(i){let l=i instanceof Error?i.message:String(i),c=Date.now()-n;return(l.includes("Prompt is too long")||l.includes("prompt is too long"))&&h.warn({taskId:e.id,error:l},"Task prompt exceeds model context window \u2014 task failed"),U(e.id,{status:"failed",error:l,completedAt:Date.now(),totalDurationMs:c}),p.emit({type:"task_status_change",taskId:e.id,oldStatus:"running",newStatus:"failed"}),p.emit({type:"task_complete_event",taskId:e.id,error:l}),h.error({taskId:e.id,error:i},"ExecutionManager: task failed"),{taskId:e.id,status:"failed",error:l,durationMs:c}}}};_();var v=f("execution-pool"),we=new Map;function xt(t,e,o){we.set(t,{roleId:e,taskId:o})}function kt(t){we.delete(t)}function Se(t){return we.get(t)}var vt=class{slots;running=!1;pollTimeoutId=null;executor;constructor(e,o){this.slots=Array.from({length:e},(n,r)=>({index:r,taskId:null,abortController:null})),this.executor=o??new ne}async start(){if(this.running)return;this.running=!0,p.on("task_created",n=>{this.onTaskCreated(n.taskId)}),p.on("task_status_change",n=>{n.newStatus==="pending"&&this.pickupPendingTasks()});let o=de().execution?.pollIntervalMs??3e4;this.pollTimeoutId=setTimeout(this.poll,o),v.info({maxConcurrent:this.slots.length},"ExecutionPool started")}stop(){this.running=!1,this.pollTimeoutId&&(clearTimeout(this.pollTimeoutId),this.pollTimeoutId=null);for(let e of this.slots)e.abortController&&(e.abortController.abort(),e.taskId=null,e.abortController=null);v.info("ExecutionPool stopped")}poll=()=>{if(!this.running)return;this.pickupPendingTasks();let o=de().execution?.pollIntervalMs??3e4;this.pollTimeoutId=setTimeout(this.poll,o)};async onTaskCreated(e){this.running&&await this.pickupPendingTasks()}async pickupPendingTasks(){if(!this.running)return;let e=this.slots.find(i=>i.taskId===null);if(!e){v.debug("No free slots available");return}let o=J("pending");if(o.length===0)return;let r=[...o].sort((i,l)=>i.createdAt-l.createdAt)[0];e.taskId=r.id,e.abortController=new AbortController;let s=e.index,a=r.id;v.info({slotIndex:s,taskId:a},"ExecutionPool: claimed slot for task"),this.emitSlotChange(),this.executeTask(r,s).catch(i=>{v.error({taskId:a,error:i},"ExecutionPool: executeTask failed unexpectedly")})}async executeTask(e,o){let n=this.slots[o];if(!n)return;let r="completed";try{p.emit({type:"execution_task_start",taskId:e.id,slotIndex:o});let s=await this.executor.execute(e,n.abortController?.signal);r=s.status,v.info({taskId:e.id,status:s.status,slotIndex:o},"ExecutionPool: task finished")}finally{n.taskId=null,n.abortController=null,p.emit({type:"execution_task_end",taskId:e.id,slotIndex:o,status:r}),this.emitSlotChange(),this.runPostCompletion(e.id,e.roleId).catch(s=>{v.error({taskId:e.id,error:s},"Post-completion processing failed (non-fatal)")}),this.running&&this.pickupPendingTasks()}}emitSlotChange(){let e=this.slots.filter(n=>n.taskId!==null).length,o=J("pending");p.emit({type:"execution_slot_change",active:e,max:this.slots.length,queued:o.length})}async runPostCompletion(e,o){if(o){try{let{processTaskCompletion:n}=await import("./memory-extractor-BHHKD7X7.js"),r=await n(e,o);r>0&&v.debug({taskId:e,roleId:o,memoriesStored:r},"Post-completion: memories extracted")}catch(n){v.error({taskId:e,roleId:o,error:n},"Post-completion: memory extraction failed")}try{let{processTaskReview:n}=await import("./learner-ABYVK33T.js");await n(e)}catch(n){v.error({taskId:e,roleId:o,error:n},"Post-completion: task review failed")}try{let{evaluateTaskCompletion:n}=await import("./audit-manager-SCX53YJT.js");n(e,o)}catch(n){v.error({taskId:e,roleId:o,error:n},"Post-completion: audit evaluation failed")}}}getStatus(){let e=this.slots.filter(n=>n.taskId!==null).length,o=J("pending");return{active:e,max:this.slots.length,queued:o.length}}isHealthy(){return this.running}releaseSlot(e){let o=this.slots.find(n=>n.taskId===e);o&&(v.warn({taskId:e,slotIndex:o.index},"ExecutionPool: force-releasing slot"),o.abortController&&o.abortController.abort(),o.taskId=null,o.abortController=null,this.emitSlotChange(),this.running&&this.pickupPendingTasks())}};_();var P=f("audit"),ko="sandbox_violation",W=new Map,xe=1440*60*1e3,se=[],vo=100;function ke(t){let e=t.roleId,o=W.get(e)??{count:0,timestamps:[]};o.count++,o.timestamps.push(t.timestamp);let n=Date.now()-xe;if(o.timestamps=o.timestamps.filter(r=>r>=n),W.set(e,o),o.count%100===0)for(let[r,s]of W.entries()){let a=Date.now()-xe;s.timestamps.filter(i=>i>=a).length===0&&W.delete(r)}se.push(t),se.length>vo&&se.shift();try{je({id:`sv-${Date.now()}-${Math.random().toString(36).slice(2,7)}`,ruleId:void 0,taskId:t.taskId,status:"delivered",target:{type:"channel",channelId:"audit"},content:"",attempts:1,messageType:ko,source:"audit",createdAt:t.timestamp,deliveredAt:t.timestamp,expiresAt:t.timestamp+864e5,error:`${t.operation} on ${t.path}`})}catch(r){P.error({error:r},"Failed to record violation to delivery_log")}try{let r=S(t.roleId);$({timestamp:t.timestamp,oldRules:"sandbox_violation",newRules:`${t.operation} on ${t.path}`,diff:`Sandbox violation: ${t.operation} on ${t.path} (taskId=${t.taskId??"unknown"})`,roleId:t.roleId,source:"audit"})}catch(r){P.error({error:r},"Failed to record violation to evolution_audit")}p.emit({type:"sandbox_violation",roleId:t.roleId,taskId:t.taskId,path:t.path,operation:t.operation,timestamp:t.timestamp})}async function _t(){let t=D();if(t.platform==="none")return P.info("Sandbox platform is 'none'; violation watcher not started"),()=>{};if(!await t.isAvailable())return P.warn({platform:t.platform},"Sandbox platform detected but not available; violation watcher not started"),()=>{};let o=null;return t.platform==="sandbox-exec"?o=Po():t.platform==="landlock"&&(o=await Ro()),()=>{if(o){let n=o;o=null,n.kill("SIGTERM");let r=setTimeout(()=>{try{n.kill("SIGKILL")}catch{}},2e3);n.on("exit",()=>clearTimeout(r))}P.info("Violation watcher stopped")}}function Po(){let t=Tt("log",["stream","--predicate",'subsystem == "com.apple.sandbox"',"--style","ndjson","--signal","exit"],{stdio:["ignore","pipe","pipe"]});return t.stdout?.on("data",e=>{let o=e.toString().split(`
66
- `).filter(Boolean);for(let n of o)try{let r=JSON.parse(n),s=r.eventMessage??r.message??"";if(s.includes("deny")&&(s.includes("file-read")||s.includes("file-write"))){let a=To(r,s);a&&ke(a)}}catch{}}),t.stderr?.on("data",e=>{P.debug({msg:e.toString()},"log stream stderr")}),t.on("error",e=>{P.warn({error:e},"macOS violation watcher failed to start")}),P.info("macOS sandbox violation watcher started (log stream)"),t}async function Ro(){let t=await Pt("journalctl",["-kf","--no-pager","-o","short","--grep","landlock"]);if(t)return Rt(t),P.info("Linux violation watcher started (journalctl -kf)"),t;let e=await Pt("dmesg",["-w","-t"]);return e?(Rt(e),P.info("Linux violation watcher started (dmesg -w)"),e):(P.warn("Linux violation watcher unavailable: neither journalctl nor dmesg accessible. Sandbox enforcement still active; monitoring disabled."),null)}async function Pt(t,e){return new Promise(o=>{let n=Tt(t,e,{stdio:["ignore","pipe","pipe"]}),r=setTimeout(()=>o(n),500);n.on("error",()=>{clearTimeout(r),o(null)}),n.on("exit",s=>{s!==0&&(clearTimeout(r),o(null))})})}function Rt(t){t.stdout?.on("data",e=>{let o=e.toString().split(`
67
- `).filter(Boolean);for(let n of o)if(n.includes("landlock")&&n.includes("denied")){let r=_o(n);r&&ke(r)}}),t.stderr?.on("data",e=>{P.debug({msg:e.toString().trim()},"Linux watcher stderr")})}function To(t,e){let o=e.match(/(?:path|file)=["']([^"']+)["']/),n=e.match(/deny\s+(file-read|file-write|file-[^\s]+)/),r=o?.[1],s=n?.[1]??"unknown";if(!r)return null;let a=typeof t.processID=="number"?t.processID:void 0,i=a?Se(a):void 0;return{roleId:i?.roleId??"unknown",taskId:i?.taskId,path:r,operation:s,timestamp:Date.now(),count:1}}function _o(t){let e=t.match(/path="([^"]+)"/)??t.match(/\/[\w\-\.\/\+ ]+/g),o=t.match(/deny\s+(\w+)/),n=t.match(/pid=(\d+)/),r=Array.isArray(e)?e[e.length-1]:e?.[1],s=o?.[1]??"unknown";if(!r)return null;let a=n?parseInt(n[1],10):void 0,i=a?Se(a):void 0;return{roleId:i?.roleId??"unknown",taskId:i?.taskId,path:r,operation:s,timestamp:Date.now(),count:1}}function re(t){ke({roleId:t.roleId,taskId:t.taskId,path:t.path,operation:t.operation,timestamp:t.timestamp,count:1})}function It(t){let e=W.get(t);if(!e)return 0;let o=Date.now()-xe;return e.timestamps.filter(n=>n>=o).length}function Et(){return[...se]}L();_();var q=f("audit"),Io=.4,Eo=1440*60*1e3,G=null,ie=null;function vr(t,e,o=Io){let n=S(e);if(!n||n.status==="retired"||n.status==="inactive"||n.status==="dead")return;let r=Qe(e,t);O(e,{performanceScore:r}),ot(e,r,o)?q.info({roleId:e,emaScore:r},"Probation role graduated"):r<o&&et(e,r,o)&&tt(e)}async function Pr(){G===null&&(G=setInterval(()=>{q.info("Running daily diagnostic reports");let t=pe(void 0,1e3);for(let e of t)if(!(e.status==="retired"||e.status==="inactive"))try{z(e.id)}catch(o){q.error({roleId:e.id,error:o},"Daily diagnostic failed")}},Eo),ie=await _t(),q.info("AuditManager started"))}function Rr(){G!==null&&(clearInterval(G),G=null),ie!==null&&(ie(),ie=null),q.info("AuditManager stopped")}function Tr(t){re(t)}async function _r(){let t=D(),e=pe(void 0,1e3),n=Date.now()-1440*60*1e3,r=Et(),s=r.filter(l=>l.timestamp>=n).length,a=e.map(l=>{let c=r.filter(k=>k.roleId===l.id),m=c[c.length-1];return{roleId:l.id,roleName:l.name,sandboxed:t.platform!=="none",violationCount:It(l.id),lastViolation:m?.timestamp}}),i=await ut();return{platform:t.platform,available:i,violationCount24h:s,rolePostures:a}}export{K as a,Ke as b,mt as c,gt as d,D as e,ut as f,vn as g,Pn as h,vr as i,Pr as j,Rr as k,Tr as l,_r as m,vt as n};
65
+ `).all(t)}L();import{createSdkMcpServer as bo,tool as ht}from"@anthropic-ai/claude-agent-sdk";import{z as bt}from"zod";async function yo(t){let{listChannels:e}=await import("./channels-WZOYE4O4.js"),o=e(),{listSessions:n}=await import("./session-manager-VYKNKQ46.js"),r=[...n("active"),...n("archived")],s=o.find(l=>l.name.toLowerCase().includes(t.toLowerCase()));if(!s)return null;let i=r.find(l=>l.source.type==="channel"&&l.source.channelId===s.id&&l.source.chatId)?.source.chatId??s.config?.userId??"";return{channelId:s.id,chatId:i}}function F(t){return{content:[{type:"text",text:JSON.stringify(t)}]}}function yt(t){let e=t?x(t):void 0,o=[...qe(t),ht("list_channels","List all available channels. Use this to discover what channels can be used with send_to_channel.",{},async()=>{let{listChannels:n}=await import("./channels-WZOYE4O4.js"),r=n();return F({channels:r.map(s=>({id:s.id,name:s.name,enabled:s.enabled,type:s.config?.type??"unknown"}))})}),ht("send_to_channel","Send a message to a connected channel by name. This role can only send to channels in its allowedChannels list (if configured).",{channelName:bt.string().describe("The channel name, e.g., 'WeChat on iPad'"),message:bt.string().describe("The message content to send")},async n=>{if(e?.allowedChannels!==void 0){if(e.allowedChannels.length===0)return F({error:"This role is not allowed to send to any channels"});if(!e.allowedChannels.some(c=>c.toLowerCase()===n.channelName.toLowerCase()))return F({error:`Channel "${n.channelName}" is not in the allowed channels list for this role`})}let r=await yo(n.channelName);if(!r)return F({error:`Channel "${n.channelName}" not found or has no chatId available`});let{getOutboundGateway:s}=await import("./outbound-gateway-6FQRWYFF.js"),i=await s().send({channelId:r.channelId,chatId:r.chatId,content:n.message,messageType:"reply"});return F({success:i.success,channelName:n.channelName})})];return bo({name:"execution-tools",version:"1.0.0",tools:o})}Ht();$e();import{realpathSync as xo}from"fs";var h=f("execution"),wt=new Set;async function So(t,e){if(e&&wt.has(e))return h.info({taskId:t,roleName:e},"Sandbox bypass: approved from session cache"),!0;let o=xt(),n={steps:[{index:0,description:"Execute task without OS sandbox \u2014 filesystem isolation not enforced",toolsNeeded:[],expectedOutput:"Task result or denial message",riskLevel:"high"}],requiredPermissions:{allowedTools:[],disallowedTools:[],approvalRequired:[],maxBudgetUsd:0,plugins:[]},overallRisk:"high"};return me({id:o,taskId:t,plan:n,status:"pending",createdAt:Date.now()}),p.emit({type:"plan_approval_request",taskId:t,planId:o,plan:n}),h.info({taskId:t,operationId:o,roleName:e},"Sandbox unavailable: awaiting privilege escalation decision"),new Promise(r=>{let a=setTimeout(()=>{l(),ge(o,"denied"),h.warn({taskId:t,operationId:o},"Sandbox bypass timed out, auto-denied"),r(!1)},12e4),i=c=>{c.planId===o&&(l(),c.decision==="allow"?(h.info({taskId:t,operationId:o},"Sandbox bypass approved by user"),e&&wt.add(e),r(!0)):(h.info({taskId:t,operationId:o},"Sandbox bypass denied by user"),r(!1)))},l=()=>{clearTimeout(a),p.off("plan_approval_decision",i)};p.on("plan_approval_decision",i)})}var ne=class{async execute(e,o){let n=Date.now(),r,s,a;U(e.id,{status:"running",startedAt:Date.now()}),p.emit({type:"task_status_change",taskId:e.id,oldStatus:e.status,newStatus:"running"}),h.info({taskId:e.id,roleId:e.roleId},"ExecutionManager: starting task");try{let i=e.roleId?x(e.roleId):void 0,l=ue;i&&(Ue(i),l=Ne(i.name));let c={taskId:e.id,prompt:e.prompt,roleName:i?.name,roleCagPrompt:i?.cagPrompt,allowedTools:i?.allowedTools},m=pt(c),v=gt({currentTaskId:e.id,roleId:e.roleId,taskPrompt:e.prompt}),b=e.config.approvalTimeout??300,S=async(u,g,y,A)=>{let w=xt(),_e=Fe(A??e.roleId,e.prompt,"medium");if(_e)return h.info({operationId:w,ruleId:_e.id,taskId:e.id},"Auto-approved by permanent rule"),{behavior:"allow",updatedInput:g};let Ie={steps:[{index:0,description:`${u}: ${JSON.stringify(g).slice(0,300)}`,toolsNeeded:[u],expectedOutput:"",riskLevel:"medium"}],requiredPermissions:{},overallRisk:"medium"};return me({id:w,taskId:e.id,roleId:A??e.roleId,plan:Ie,status:"pending",createdAt:Date.now()}),p.emit({type:"plan_approval_request",taskId:e.id,planId:w,plan:Ie}),h.info({taskId:e.id,operationId:w,toolName:u,matchedPattern:y},"Privilege escalation: awaiting user decision"),new Promise(ce=>{let Ut=setTimeout(()=>{Ee(),ge(w,"denied"),h.warn({taskId:e.id,operationId:w},"Privilege escalation timed out, auto-denied"),ce({behavior:"deny",message:`Operation timed out after ${b}s. Auto-denied. Try a safer alternative that does not require approval.`})},b*1e3),Ce=M=>{if(M.planId===w)if(Ee(),M.decision==="allow")h.info({taskId:e.id,operationId:w,approvalType:M.approvalType},"Operation authorized by user"),ce({behavior:"allow",updatedInput:g});else{let Vt=M.reason?`Operation denied by user: ${M.reason}. Try a safer alternative.`:"Operation denied by user. Try a safer alternative approach.";h.info({taskId:e.id,operationId:w,reason:M.reason??"no reason given"},"Operation denied by user"),ce({behavior:"deny",message:Vt})}},Ee=()=>{clearTimeout(Ut),p.off("plan_approval_decision",Ce)};p.on("plan_approval_decision",Ce)})},R=(Be("defaults.deniedReadPaths")??[]).map(u=>{let g=V(u);try{return xo(g)}catch{return g}}),d=i?.additionalDirectories??[],E=i?Ge(i):[],N=[...d.map(u=>u.path)].filter((u,g,y)=>y.indexOf(u)===g),Et=mt(u=>({disallowedTools:i?.disallowedTools,approvalRequired:i?.approvalRequired??e.config.approvalRequired,allowedBashPatterns:i?.allowedBashPatterns,deniedBashPatterns:i?.deniedBashPatterns}),S,{deniedReadPaths:R,roleScope:[l,...N]}),Dt=De({roleEnvVars:i?.envVars,taskEnv:e.config.env}),At=e.config.maxBudgetUsd??5,Mt=e.config.maxTurns??100,Ot=yt(e.roleId??""),Lt=i?.mcpServers??{},$t=e.config.mcpServers??{},Bt={...Lt,...$t,"execution-tools":Ot},ae=[{path:l,mode:"rw"}];e.roleId===Ve&&ae.push({path:ue,mode:"ro"});for(let u of d)ae.push({path:u.path,mode:u.mode??"rw"});let ke=D();if(ke.platform==="none"&&!await So(e.id,i?.name))return U(e.id,{status:"failed",error:"Sandbox unavailable; execution denied by user"}),{taskId:e.id,status:"failed",error:"Sandbox bypass denied"};let Pe=i?.permissionMode??"default",Nt=wo({prompt:e.prompt,options:{cwd:l,additionalDirectories:N,systemPrompt:m,maxTurns:Mt,maxBudgetUsd:At,allowedTools:i?.allowedTools,model:i?.model,mcpServers:Bt,settingSources:i?.inheritUserSettings?["project","user"]:["project"],hooks:v,canUseTool:Et,env:Dt,plugins:E.map(u=>({type:"local",path:u})),permissionMode:Pe,...Pe==="bypassPermissions"?{allowDangerouslySkipPermissions:!0}:{},spawnClaudeCodeProcess:u=>{let g=ke.spawn({command:u.command,args:u.args,cwd:u.cwd,env:u.env,signal:u.signal,visiblePaths:ae,deniedReadPaths:R}),y=g;y.pid&&(St(y.pid,e.roleId??"unknown",e.id),y.on("exit",()=>vt(y.pid)));let A="";return y.stderr?.on("data",w=>{A+=w.toString()}),y.on("exit",w=>{w!==null&&w!==0&&A.includes("sandbox")&&(h.error({taskId:e.id,roleId:e.roleId,exitCode:w,stderr:A.slice(0,500)},"Sandbox wrapper failed \u2014 task process exited before execution"),re({roleId:e.roleId??"unknown",taskId:e.id,path:l,operation:`sandbox_init_failure:exit_${w}`,timestamp:Date.now()}))}),g},stderr:u=>{u.trim()&&h.debug({stderr:u.trim().slice(0,500)},"ExecutionManager SDK stderr")}}}),J="",Re=0,Te=()=>{h.warn({taskId:e.id},"ExecutionManager: abort signal received")};o&&o.addEventListener("abort",Te);try{for await(let u of Nt){let g=u;if(h.debug({eventType:g.type,taskId:e.id},"ExecutionManager SDK event"),g.type==="result"&&typeof g.result=="string"&&(J=g.result),g.type==="result"&&Re++,g.token_usage){let y=g.token_usage;y.input_tokens!==void 0&&y.output_tokens!==void 0&&(r={input:y.input_tokens,output:y.output_tokens}),y.cost_usd!==void 0&&(s=y.cost_usd)}}}finally{o&&o.removeEventListener("abort",Te)}a=Re;let le=Date.now()-n;return U(e.id,{status:"completed",result:J,completedAt:Date.now(),costUsd:s,tokenUsage:r,numTurns:a,totalDurationMs:le}),p.emit({type:"task_status_change",taskId:e.id,oldStatus:"running",newStatus:"completed"}),p.emit({type:"task_complete_event",taskId:e.id,result:J}),E.length>0&&ft(e.id,E,e.roleId),h.info({taskId:e.id,durationMs:le,costUsd:s},"ExecutionManager: task completed"),{taskId:e.id,status:"completed",result:J,costUsd:s,tokenUsage:r,numTurns:a,durationMs:le}}catch(i){let l=i instanceof Error?i.message:String(i),c=Date.now()-n;return(l.includes("Prompt is too long")||l.includes("prompt is too long"))&&h.warn({taskId:e.id,error:l},"Task prompt exceeds model context window \u2014 task failed"),U(e.id,{status:"failed",error:l,completedAt:Date.now(),totalDurationMs:c}),p.emit({type:"task_status_change",taskId:e.id,oldStatus:"running",newStatus:"failed"}),p.emit({type:"task_complete_event",taskId:e.id,error:l}),h.error({taskId:e.id,error:i},"ExecutionManager: task failed"),{taskId:e.id,status:"failed",error:l,durationMs:c}}}};_();var k=f("execution-pool"),we=new Map;function St(t,e,o){we.set(t,{roleId:e,taskId:o})}function vt(t){we.delete(t)}function xe(t){return we.get(t)}var kt=class{slots;running=!1;pollTimeoutId=null;executor;constructor(e,o){this.slots=Array.from({length:e},(n,r)=>({index:r,taskId:null,abortController:null})),this.executor=o??new ne}async start(){if(this.running)return;this.running=!0,p.on("task_created",n=>{this.onTaskCreated(n.taskId)}),p.on("task_status_change",n=>{n.newStatus==="pending"&&this.pickupPendingTasks()});let o=de().execution?.pollIntervalMs??3e4;this.pollTimeoutId=setTimeout(this.poll,o),k.info({maxConcurrent:this.slots.length},"ExecutionPool started")}stop(){this.running=!1,this.pollTimeoutId&&(clearTimeout(this.pollTimeoutId),this.pollTimeoutId=null);for(let e of this.slots)e.abortController&&(e.abortController.abort(),e.taskId=null,e.abortController=null);k.info("ExecutionPool stopped")}poll=()=>{if(!this.running)return;this.pickupPendingTasks();let o=de().execution?.pollIntervalMs??3e4;this.pollTimeoutId=setTimeout(this.poll,o)};async onTaskCreated(e){this.running&&await this.pickupPendingTasks()}async pickupPendingTasks(){if(!this.running)return;let e=this.slots.find(i=>i.taskId===null);if(!e){k.debug("No free slots available");return}let o=Y("pending");if(o.length===0)return;let r=[...o].sort((i,l)=>i.createdAt-l.createdAt)[0];e.taskId=r.id,e.abortController=new AbortController;let s=e.index,a=r.id;k.info({slotIndex:s,taskId:a},"ExecutionPool: claimed slot for task"),this.emitSlotChange(),this.executeTask(r,s).catch(i=>{k.error({taskId:a,error:i},"ExecutionPool: executeTask failed unexpectedly")})}async executeTask(e,o){let n=this.slots[o];if(!n)return;let r="completed";try{p.emit({type:"execution_task_start",taskId:e.id,slotIndex:o});let s=await this.executor.execute(e,n.abortController?.signal);r=s.status,k.info({taskId:e.id,status:s.status,slotIndex:o},"ExecutionPool: task finished")}finally{n.taskId=null,n.abortController=null,p.emit({type:"execution_task_end",taskId:e.id,slotIndex:o,status:r}),this.emitSlotChange(),this.runPostCompletion(e.id,e.roleId).catch(s=>{k.error({taskId:e.id,error:s},"Post-completion processing failed (non-fatal)")}),this.running&&this.pickupPendingTasks()}}emitSlotChange(){let e=this.slots.filter(n=>n.taskId!==null).length,o=Y("pending");p.emit({type:"execution_slot_change",active:e,max:this.slots.length,queued:o.length})}async runPostCompletion(e,o){if(o){try{let{processTaskCompletion:n}=await import("./memory-extractor-FUOJ5D77.js"),r=await n(e,o);r>0&&k.debug({taskId:e,roleId:o,memoriesStored:r},"Post-completion: memories extracted")}catch(n){k.error({taskId:e,roleId:o,error:n},"Post-completion: memory extraction failed")}try{let{processTaskReview:n}=await import("./learner-UYDFNURD.js");await n(e)}catch(n){k.error({taskId:e,roleId:o,error:n},"Post-completion: task review failed")}try{let{evaluateTaskCompletion:n}=await import("./audit-manager-7M2CDMP5.js");n(e,o)}catch(n){k.error({taskId:e,roleId:o,error:n},"Post-completion: audit evaluation failed")}}}getStatus(){let e=this.slots.filter(n=>n.taskId!==null).length,o=Y("pending");return{active:e,max:this.slots.length,queued:o.length}}isHealthy(){return this.running}releaseSlot(e){let o=this.slots.find(n=>n.taskId===e);o&&(k.warn({taskId:e,slotIndex:o.index},"ExecutionPool: force-releasing slot"),o.abortController&&o.abortController.abort(),o.taskId=null,o.abortController=null,this.emitSlotChange(),this.running&&this.pickupPendingTasks())}};_();var P=f("audit"),vo="sandbox_violation",W=new Map,Se=1440*60*1e3,se=[],ko=100;function ve(t){let e=t.roleId,o=W.get(e)??{count:0,timestamps:[]};o.count++,o.timestamps.push(t.timestamp);let n=Date.now()-Se;if(o.timestamps=o.timestamps.filter(r=>r>=n),W.set(e,o),o.count%100===0)for(let[r,s]of W.entries()){let a=Date.now()-Se;s.timestamps.filter(i=>i>=a).length===0&&W.delete(r)}se.push(t),se.length>ko&&se.shift();try{je({id:`sv-${Date.now()}-${Math.random().toString(36).slice(2,7)}`,ruleId:void 0,taskId:t.taskId,status:"delivered",target:{type:"channel",channelId:"audit"},content:"",attempts:1,messageType:vo,source:"audit",createdAt:t.timestamp,deliveredAt:t.timestamp,expiresAt:t.timestamp+864e5,error:`${t.operation} on ${t.path}`})}catch(r){P.error({error:r},"Failed to record violation to delivery_log")}try{let r=x(t.roleId);$({timestamp:t.timestamp,oldRules:"sandbox_violation",newRules:`${t.operation} on ${t.path}`,diff:`Sandbox violation: ${t.operation} on ${t.path} (taskId=${t.taskId??"unknown"})`,roleId:t.roleId,source:"audit"})}catch(r){P.error({error:r},"Failed to record violation to evolution_audit")}p.emit({type:"sandbox_violation",roleId:t.roleId,taskId:t.taskId,path:t.path,operation:t.operation,timestamp:t.timestamp})}async function _t(){let t=D();if(t.platform==="none")return P.info("Sandbox platform is 'none'; violation watcher not started"),()=>{};if(!await t.isAvailable())return P.warn({platform:t.platform},"Sandbox platform detected but not available; violation watcher not started"),()=>{};let o=null;return t.platform==="sandbox-exec"?o=Po():t.platform==="landlock"&&(o=await Ro()),()=>{if(o){let n=o;o=null,n.kill("SIGTERM");let r=setTimeout(()=>{try{n.kill("SIGKILL")}catch{}},2e3);n.on("exit",()=>clearTimeout(r))}P.info("Violation watcher stopped")}}function Po(){let t=Tt("log",["stream","--predicate",'subsystem == "com.apple.sandbox"',"--style","ndjson","--signal","exit"],{stdio:["ignore","pipe","pipe"]});return t.stdout?.on("data",e=>{let o=e.toString().split(`
66
+ `).filter(Boolean);for(let n of o)try{let r=JSON.parse(n),s=r.eventMessage??r.message??"";if(s.includes("deny")&&(s.includes("file-read")||s.includes("file-write"))){let a=To(r,s);a&&ve(a)}}catch{}}),t.stderr?.on("data",e=>{P.debug({msg:e.toString()},"log stream stderr")}),t.on("error",e=>{P.warn({error:e},"macOS violation watcher failed to start")}),P.info("macOS sandbox violation watcher started (log stream)"),t}async function Ro(){let t=await Pt("journalctl",["-kf","--no-pager","-o","short","--grep","landlock"]);if(t)return Rt(t),P.info("Linux violation watcher started (journalctl -kf)"),t;let e=await Pt("dmesg",["-w","-t"]);return e?(Rt(e),P.info("Linux violation watcher started (dmesg -w)"),e):(P.warn("Linux violation watcher unavailable: neither journalctl nor dmesg accessible. Sandbox enforcement still active; monitoring disabled."),null)}async function Pt(t,e){return new Promise(o=>{let n=Tt(t,e,{stdio:["ignore","pipe","pipe"]}),r=setTimeout(()=>o(n),500);n.on("error",()=>{clearTimeout(r),o(null)}),n.on("exit",s=>{s!==0&&(clearTimeout(r),o(null))})})}function Rt(t){t.stdout?.on("data",e=>{let o=e.toString().split(`
67
+ `).filter(Boolean);for(let n of o)if(n.includes("landlock")&&n.includes("denied")){let r=_o(n);r&&ve(r)}}),t.stderr?.on("data",e=>{P.debug({msg:e.toString().trim()},"Linux watcher stderr")})}function To(t,e){let o=e.match(/(?:path|file)=["']([^"']+)["']/),n=e.match(/deny\s+(file-read|file-write|file-[^\s]+)/),r=o?.[1],s=n?.[1]??"unknown";if(!r)return null;let a=typeof t.processID=="number"?t.processID:void 0,i=a?xe(a):void 0;return{roleId:i?.roleId??"unknown",taskId:i?.taskId,path:r,operation:s,timestamp:Date.now(),count:1}}function _o(t){let e=t.match(/path="([^"]+)"/)??t.match(/\/[\w\-\.\/\+ ]+/g),o=t.match(/deny\s+(\w+)/),n=t.match(/pid=(\d+)/),r=Array.isArray(e)?e[e.length-1]:e?.[1],s=o?.[1]??"unknown";if(!r)return null;let a=n?parseInt(n[1],10):void 0,i=a?xe(a):void 0;return{roleId:i?.roleId??"unknown",taskId:i?.taskId,path:r,operation:s,timestamp:Date.now(),count:1}}function re(t){ve({roleId:t.roleId,taskId:t.taskId,path:t.path,operation:t.operation,timestamp:t.timestamp,count:1})}function It(t){let e=W.get(t);if(!e)return 0;let o=Date.now()-Se;return e.timestamps.filter(n=>n>=o).length}function Ct(){return[...se]}L();_();var q=f("audit"),Io=.4,Co=1440*60*1e3,G=null,ie=null;function kr(t,e,o=Io){let n=x(e);if(!n||n.status==="retired"||n.status==="inactive"||n.status==="dead")return;let r=Qe(e,t);O(e,{performanceScore:r}),ot(e,r,o)?q.info({roleId:e,emaScore:r},"Probation role graduated"):r<o&&et(e,r,o)&&tt(e)}async function Pr(){G===null&&(G=setInterval(()=>{q.info("Running daily diagnostic reports");let t=pe(void 0,1e3);for(let e of t)if(!(e.status==="retired"||e.status==="inactive"))try{z(e.id)}catch(o){q.error({roleId:e.id,error:o},"Daily diagnostic failed")}},Co),ie=await _t(),q.info("AuditManager started"))}function Rr(){G!==null&&(clearInterval(G),G=null),ie!==null&&(ie(),ie=null),q.info("AuditManager stopped")}function Tr(t){re(t)}async function _r(){let t=D(),e=pe(void 0,1e3),n=Date.now()-1440*60*1e3,r=Ct(),s=r.filter(l=>l.timestamp>=n).length,a=e.map(l=>{let c=r.filter(v=>v.roleId===l.id),m=c[c.length-1];return{roleId:l.id,roleName:l.name,sandboxed:t.platform!=="none",violationCount:It(l.id),lastViolation:m?.timestamp}}),i=await ut();return{platform:t.platform,available:i,violationCount24h:s,rolePostures:a}}export{K as a,Ke as b,mt as c,gt as d,D as e,ut as f,kn as g,Pn as h,kr as i,Pr as j,Rr as k,Tr as l,_r as m,kt as n};