adam-agent-server 1.13.0 → 1.14.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 (162) hide show
  1. package/README.md +4 -5
  2. package/dist/App-DAFKLTGC.js +13 -0
  3. package/dist/adam-tools-NTUOJ42F.js +1 -0
  4. package/dist/approval-handler-D4EXPO2F.js +1 -0
  5. package/dist/audit-manager-FHYCOJZM.js +1 -0
  6. package/dist/bree-engine-XKEGOG7I.js +1 -0
  7. package/dist/channels-LV5F7LUJ.js +1 -0
  8. package/dist/{channels-WFC26TED.js → channels-PXLE7JHU.js} +1 -1
  9. package/dist/chunk-34WPSSKK.js +7 -0
  10. package/dist/{chunk-AQO6IIHV.js → chunk-37TV7A5A.js} +81 -25
  11. package/dist/chunk-43JFJEUT.js +1 -0
  12. package/dist/chunk-44DK2I4J.js +47 -0
  13. package/dist/{chunk-UXDTFTG5.js → chunk-45I2IYIE.js} +1 -1
  14. package/dist/{chunk-Q2JQFDAK.js → chunk-4UCIJKQS.js} +1 -1
  15. package/dist/{chunk-7T4B2MZ7.js → chunk-5ZP5TJJA.js} +1 -1
  16. package/dist/{chunk-ZQ4PNKMQ.js → chunk-7B2DHDUD.js} +1 -1
  17. package/dist/chunk-7QELXWKT.js +3 -0
  18. package/dist/chunk-7ZCMGQLK.js +1 -0
  19. package/dist/chunk-CNKUMQ37.js +12 -0
  20. package/dist/chunk-DAD4PSIZ.js +13 -0
  21. package/dist/{chunk-FUWPDXXG.js → chunk-E4NFVJ7F.js} +1 -1
  22. package/dist/{chunk-O7XQSONJ.js → chunk-EEU56CTK.js} +1 -1
  23. package/dist/chunk-ENHE6VOF.js +1 -0
  24. package/dist/{chunk-AVM3O74V.js → chunk-EP26G2WS.js} +1 -1
  25. package/dist/chunk-F44QHTMI.js +6 -0
  26. package/dist/{chunk-Y5FFL6UO.js → chunk-FG72WBDO.js} +1 -1
  27. package/dist/{chunk-SC2DDRYB.js → chunk-FNHW2CRA.js} +1 -1
  28. package/dist/{chunk-X5V4VMET.js → chunk-FP42MZDK.js} +1 -1
  29. package/dist/{chunk-PXGK5H5C.js → chunk-HGRL5ZKG.js} +1 -1
  30. package/dist/chunk-IUASV43X.js +9 -0
  31. package/dist/chunk-KSFVBI2D.js +1 -0
  32. package/dist/chunk-KZKDPY53.js +1 -0
  33. package/dist/chunk-LLGJEDNK.js +3 -0
  34. package/dist/chunk-MC2R5WMN.js +21 -0
  35. package/dist/chunk-NNMQGISW.js +1 -0
  36. package/dist/chunk-NNNDVFEY.js +1 -0
  37. package/dist/chunk-NTVLV7NI.js +1 -0
  38. package/dist/{chunk-YKYRNTPV.js → chunk-OMLONR4N.js} +1 -1
  39. package/dist/{chunk-U2LBBBWO.js → chunk-OPCPSPZ2.js} +1 -1
  40. package/dist/{chunk-MRTJFYPR.js → chunk-RLNMJ2QY.js} +1 -1
  41. package/dist/{chunk-PHT24MOV.js → chunk-S2WZL5CT.js} +1 -1
  42. package/dist/chunk-S6HEPXYU.js +80 -0
  43. package/dist/chunk-SKN4VSLW.js +1 -0
  44. package/dist/chunk-TLMG5W3L.js +4 -0
  45. package/dist/{chunk-WQFNB2MQ.js → chunk-TU643PPA.js} +1 -1
  46. package/dist/{chunk-S6OV7Z6K.js → chunk-UEYKBU5K.js} +1 -1
  47. package/dist/{chunk-SWP2JC54.js → chunk-UIMIXDAF.js} +1 -1
  48. package/dist/{chunk-47COBMRF.js → chunk-UMCM25ZR.js} +1 -1
  49. package/dist/chunk-VOO3FHMD.js +14 -0
  50. package/dist/{chunk-L7JP7DUO.js → chunk-WGRTN6TX.js} +1 -1
  51. package/dist/{chunk-B44X7JAJ.js → chunk-WYALKFT7.js} +1 -1
  52. package/dist/chunk-XMFTVHCC.js +128 -0
  53. package/dist/chunk-YLM6QTFR.js +40 -0
  54. package/dist/{chunk-NPIXYK5G.js → chunk-ZYAK567W.js} +1 -1
  55. package/dist/cli.js +10 -10
  56. package/dist/config-25UDTFBM.js +1 -0
  57. package/dist/{config-GKVOAMY2.js → config-NUQGVGQE.js} +1 -1
  58. package/dist/db-GKWPRABQ.js +1 -0
  59. package/dist/{delivery-log-JIQMHBJ5.js → delivery-log-XEZBBSRW.js} +1 -1
  60. package/dist/engine-P7IWX6CX.js +1 -0
  61. package/dist/evolution-audit-JJOFW6YU.js +1 -0
  62. package/dist/{external-api-DOVGA3ML.js → external-api-DQX7ZGRF.js} +1 -1
  63. package/dist/index.js +69 -36
  64. package/dist/{learner-OUNQSWN7.js → learner-BP3UDHN7.js} +1 -1
  65. package/dist/{logger-WEXZORHP.js → logger-4IUSEDG4.js} +1 -1
  66. package/dist/{memories-ABE7PMQL.js → memories-KPMHJLNT.js} +1 -1
  67. package/dist/{memory-extractor-ZX2NJIBV.js → memory-extractor-QAS5ANET.js} +2 -2
  68. package/dist/memory-service-YDBU7L54.js +1 -0
  69. package/dist/outbound-gateway-WE7Q623W.js +1 -0
  70. package/dist/{presets-RMW3WO5P.js → presets-UKC5MHGV.js} +1 -1
  71. package/dist/{role-presets-FAXQRBII.js → role-presets-5DDTPDJ4.js} +1 -1
  72. package/dist/role-workspace-IHQZS56U.js +1 -0
  73. package/dist/roles-DLCEQ7V7.js +1 -0
  74. package/dist/{runtime-QA2DCZYQ.js → runtime-WDAYGKY6.js} +1 -1
  75. package/dist/server-bus-N5LCY73J.js +1 -0
  76. package/dist/session-manager-UOMXOJJX.js +1 -0
  77. package/dist/skill-registry-Q5GXSF6I.js +1 -0
  78. package/dist/target-resolution-ARTZKRBA.js +1 -0
  79. package/dist/task-templates-XZWRTAQ5.js +1 -0
  80. package/dist/template-dispatch-UFAGUOHR.js +1 -0
  81. package/package.json +10 -1
  82. package/web/dist/assets/{Button-VPwTNGpF.js → Button-Dr7ksRu4.js} +1 -1
  83. package/web/dist/assets/{Card-C2N6k4gh.js → Card-B4oFZ8tK.js} +1 -1
  84. package/web/dist/assets/{ChannelDetail-DktmpO0A.js → ChannelDetail-eIcfA57N.js} +1 -1
  85. package/web/dist/assets/Channels-mwF1UKzb.js +14 -0
  86. package/web/dist/assets/{Chat-CggvtidD.js → Chat-PUJ7hpK9.js} +1 -1
  87. package/web/dist/assets/Dashboard-CmRIajQD.js +1 -0
  88. package/web/dist/assets/{EmptyState-CWS9PJND.js → EmptyState-CDrBzXK-.js} +1 -1
  89. package/web/dist/assets/{EnvVarEditor-D0kGIBcl.js → EnvVarEditor-Bray2ESp.js} +1 -1
  90. package/web/dist/assets/{EventDefDetail-BiXTA6LF.js → EventDefDetail-CfNFbtRL.js} +1 -1
  91. package/web/dist/assets/Events-Bfjb3zYt.js +1 -0
  92. package/web/dist/assets/{Evolution-C884p_CE.js → Evolution-CQZZH9YR.js} +1 -1
  93. package/web/dist/assets/{FeatureRequests-Ck0WQnXX.js → FeatureRequests-Chu9p9jf.js} +1 -1
  94. package/web/dist/assets/{GoalDetail-DJOyf7By.js → GoalDetail-D6YA6oj3.js} +1 -1
  95. package/web/dist/assets/Goals-CXSFLkYn.js +1 -0
  96. package/web/dist/assets/{Logs-6r7fnBn7.js → Logs-B05A1bGU.js} +1 -1
  97. package/web/dist/assets/{Memories-CvPaqv5r.js → Memories-CeNngSKF.js} +1 -1
  98. package/web/dist/assets/{Mistakes-aUhkqHDC.js → Mistakes-SOFsb4IS.js} +1 -1
  99. package/web/dist/assets/{NotFound-R6tIzhL0.js → NotFound-Csw1BuG3.js} +1 -1
  100. package/web/dist/assets/{PageHeader-D9lLjo0N.js → PageHeader-z6FDKzfu.js} +1 -1
  101. package/web/dist/assets/Plugins-D4L5kw9U.js +1 -0
  102. package/web/dist/assets/{RoleDetail-B32225ae.js → RoleDetail-JXZ2Wb0p.js} +3 -3
  103. package/web/dist/assets/{Roles-CGYsxuq8.js → Roles-DsCqCFHr.js} +1 -1
  104. package/web/dist/assets/{SectionHeader-BB3H3F_P.js → SectionHeader-SRCKtVA-.js} +1 -1
  105. package/web/dist/assets/Settings-44MJsbkf.js +1 -0
  106. package/web/dist/assets/{Strategies-DUps-2I9.js → Strategies-Ck28Clr5.js} +1 -1
  107. package/web/dist/assets/{Switch-B_R_EX9s.js → Switch-BmTw_pcA.js} +1 -1
  108. package/web/dist/assets/{Table-D4lT5uHx.js → Table-B0PI8kT6.js} +1 -1
  109. package/web/dist/assets/{Tabs-CwzWpI-7.js → Tabs-BZ6DxWAE.js} +1 -1
  110. package/web/dist/assets/{TaskDetail-DKminIM_.js → TaskDetail-ZAA7QN_T.js} +2 -2
  111. package/web/dist/assets/Work-D2E3HWPo.js +1 -0
  112. package/web/dist/assets/{es2015-DCW7LI8d.js → es2015-BIlLl5hi.js} +1 -1
  113. package/web/dist/assets/{index-Bl-2p6d8.js → index-CtdnsiU1.js} +3 -3
  114. package/web/dist/assets/{useIsMobileLayout-D6Tz5o5h.js → useIsMobileLayout-luhqwSbU.js} +1 -1
  115. package/web/dist/assets/{usePluginsWithUsage-CSQr03vZ.js → usePluginsWithUsage-8a-Ed6EY.js} +1 -1
  116. package/web/dist/assets/{vendor-icons-jzPiR6xl.js → vendor-icons-ClLF5FTT.js} +1 -1
  117. package/web/dist/assets/{vendor-react-CIkiuNDu.js → vendor-react-Kuc9eqr3.js} +1 -1
  118. package/web/dist/assets/{vendor-state-CEOsUh-T.js → vendor-state-CcqA6KbS.js} +1 -1
  119. package/web/dist/index.html +6 -6
  120. package/dist/App-5QZKMPRM.js +0 -13
  121. package/dist/adam-tools-SQD2V4RJ.js +0 -1
  122. package/dist/approval-handler-J6RUTICJ.js +0 -1
  123. package/dist/audit-manager-CWVHQAUI.js +0 -1
  124. package/dist/bree-engine-VGEYMVNP.js +0 -1
  125. package/dist/channels-OOIM62BX.js +0 -1
  126. package/dist/chunk-2BXTT4P2.js +0 -6
  127. package/dist/chunk-6WRZJVQ2.js +0 -1
  128. package/dist/chunk-7IFLU3CY.js +0 -4
  129. package/dist/chunk-B544JOZM.js +0 -3
  130. package/dist/chunk-DZIEY4CH.js +0 -47
  131. package/dist/chunk-E4WIUUL4.js +0 -27
  132. package/dist/chunk-HDHMNT6D.js +0 -1
  133. package/dist/chunk-JYHOGBCP.js +0 -12
  134. package/dist/chunk-M3RZWIW3.js +0 -50
  135. package/dist/chunk-N4ES7TCL.js +0 -1
  136. package/dist/chunk-OZL6VNOR.js +0 -146
  137. package/dist/chunk-Q2ISNOBQ.js +0 -1
  138. package/dist/chunk-QYRI4HYA.js +0 -1
  139. package/dist/chunk-R2WB5BKF.js +0 -7
  140. package/dist/chunk-RMGBR3XZ.js +0 -21
  141. package/dist/chunk-SGIKNIC5.js +0 -49
  142. package/dist/chunk-TI3AKKWZ.js +0 -80
  143. package/dist/chunk-ZFDULJGB.js +0 -3
  144. package/dist/config-DRFRLIVN.js +0 -1
  145. package/dist/db-FACSMWEY.js +0 -1
  146. package/dist/engine-OHYWUUMJ.js +0 -1
  147. package/dist/evolution-audit-M7FSYRQR.js +0 -1
  148. package/dist/memory-service-UWER3T2S.js +0 -1
  149. package/dist/outbound-gateway-XDCGAXXW.js +0 -1
  150. package/dist/role-workspace-ISGPO25D.js +0 -1
  151. package/dist/roles-WNKRM6FD.js +0 -1
  152. package/dist/server-bus-GEGVMSCA.js +0 -1
  153. package/dist/session-manager-SOJXQHHY.js +0 -1
  154. package/dist/task-templates-IS3DJCZB.js +0 -1
  155. package/dist/workflow-executor-LOMKVFPV.js +0 -1
  156. package/web/dist/assets/Channels-ozCXdZMq.js +0 -12
  157. package/web/dist/assets/Dashboard-z37ZVhzH.js +0 -1
  158. package/web/dist/assets/Events-C4P3jjZd.js +0 -1
  159. package/web/dist/assets/Goals-CDZWDuXR.js +0 -1
  160. package/web/dist/assets/Plugins-CtwoMUoj.js +0 -1
  161. package/web/dist/assets/Settings-D2jrO8-G.js +0 -1
  162. package/web/dist/assets/Work-uD_6IieV.js +0 -1
@@ -1,4 +1,8 @@
1
- import{e as R,h as I}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk-MRTJFYPR.js";import{c as p}from"./chunk-FCV2DPZQ.js";import X from"better-sqlite3";import{existsSync as u,mkdirSync as S}from"fs";import{dirname as g}from"path";function U(e){e.exec(`
1
+ import{d as P,e as G,h as w}from"./chunk-WBAPIPST.js";import{c as S,h as B}from"./chunk-RLNMJ2QY.js";import{c as M}from"./chunk-FCV2DPZQ.js";import{constants as b,cpSync as ee,copyFileSync as H,existsSync as I,lstatSync as re,mkdirSync as W,readdirSync as te,realpathSync as D,rmSync as Y,statSync as C,unlinkSync as K}from"fs";import{dirname as $,extname as Ee,isAbsolute as se,join as d,sep as R}from"path";function j(){return process.env.ADAM_TEST_DIR||P}function Te(){return d(j(),["work","flows"].join(""))}function U(){return d(j(),"template-executions")}function q(e){return d(U(),e,"artifacts")}function ie(e){let _=q(e);return W(_,{recursive:!0}),_}function Oe(e,_,p){if(!se(e))throw new Error(`path must be absolute: ${e}`);let o=D(_),N=o.endsWith(R)?o:o+R;if(p){let n=D(e),m=n.endsWith(R)?n:n+R;if(m===N||m.startsWith(N))return;throw new Error(`path escapes workspace: ${e} (resolved=${n}, root=${o})`)}if(I(e))throw re(e).isSymbolicLink()?new Error(`destination already exists and is a symlink: ${e}`):new Error(`destination already exists: ${e}`);let c=D($(e)),A=c.endsWith(R)?c:c+R;if(!(A===N||A.startsWith(N)))throw new Error(`destination escapes workspace: ${e} (parent resolved=${c}, root=${o})`)}function ue(e){let _=ie(e.executionId),p=d(_,`${e.artifactId}.bin`);return H(e.sourcePath,p),{blobPath:p,sizeBytes:C(p).size}}function Xe(e){K(e)}function Se(e){if(!I(e.blobPath))throw new Error(`blob file missing on disk: ${e.blobPath}`);return H(e.blobPath,e.destPath,b.COPYFILE_EXCL),{sizeBytes:C(e.destPath).size}}function oe(e){try{K(e)}catch(_){X.warn({err:_,blobPath:e},"Failed to remove TemplateExecution artifact blob")}}function ge(e){try{Y(d(U(),e),{recursive:!0,force:!0})}catch(_){X.warn({err:_,executionId:e},"Failed to remove TemplateExecution artifacts directory")}}function ve(e,_,p){let o=q(e);if(!I(o))return 0;let N=0;for(let c of te(o)){if(Ee(c)!==".bin")continue;let A=c.slice(0,-4);if(_.has(A))continue;let n=d(o,c),m=C(n);Date.now()-m.mtimeMs<p||(oe(n),N++)}return N}function z(e){let _=Te();if(!I(_)||!e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='template_execution_artifacts'").get())return;let o=e.prepare(`
2
+ SELECT id, execution_id, blob_path
3
+ FROM template_execution_artifacts
4
+ WHERE blob_path IS NOT NULL
5
+ `).all(),N=_.endsWith(R)?_:_+R,c=U(),A=new Set;for(let n of o){if(!n.blob_path.startsWith(N))continue;let m=d(_,n.execution_id),u=d(c,n.execution_id),f=d(c,n.blob_path.slice(N.length));try{if(I(m)&&!I(u)&&(W($(u),{recursive:!0}),ee(m,u,{recursive:!0,dereference:!1,force:!1})),!I(f)){X.warn({artifactId:n.id,blobPath:n.blob_path},"TemplateExecution artifact migration skipped missing copied blob");continue}e.prepare("UPDATE template_execution_artifacts SET blob_path = ? WHERE id = ?").run(f,n.id),A.add(n.execution_id)}catch(F){X.warn({err:F,artifactId:n.id,executionId:n.execution_id},"TemplateExecution artifact migration failed")}}for(let n of A){let m=d(c,n);if(I(m))try{Y(d(_,n),{recursive:!0,force:!0})}catch(u){X.warn({err:u,executionId:n},"Failed to remove migrated legacy artifact directory")}}}var X,V=M(()=>{"use strict";w();B();X=S("watchdog")});import ne from"better-sqlite3";import{existsSync as _e,mkdirSync as ae}from"fs";import{dirname as le}from"path";function de(e){e.exec(`
2
6
  CREATE TABLE IF NOT EXISTS server_state (
3
7
  id INTEGER PRIMARY KEY CHECK(id = 1),
4
8
  sdk_session_id TEXT,
@@ -8,7 +12,7 @@ import{e as R,h as I}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
8
12
  created_at INTEGER NOT NULL DEFAULT (unixepoch('now') * 1000),
9
13
  last_active_at INTEGER
10
14
  );
11
- `),e.prepare("PRAGMA table_info(server_state)").all().some(s=>s.name==="schema_version")||e.exec("ALTER TABLE server_state ADD COLUMN schema_version INTEGER DEFAULT 0");let n=e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0;if(n<2){let s=["delivery_log","delivery_rules","manager_decisions","skill_scores","approval_rules","task_plans","calibration_history","task_plugins","marketplaces","plugins","trials","strategies","metric_tree","goals","chat_messages","chat_sessions","channels","evolution_audit","step_logs","task_templates","memories","tasks","config","memories_fts","memories_fts_config","memories_fts_data","memories_fts_docsize","memories_fts_idx"];for(let T of s)try{e.exec(`DROP TABLE IF EXISTS ${T}`)}catch{}for(let T of["memories_fts_insert","memories_fts_delete","memories_fts_update"])try{e.exec(`DROP TRIGGER IF EXISTS ${T}`)}catch{}}if(e.exec(`
15
+ `),e.prepare("PRAGMA table_info(server_state)").all().some(t=>t.name==="schema_version")||e.exec("ALTER TABLE server_state ADD COLUMN schema_version INTEGER DEFAULT 0");let o=e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0;if(o<2){let t=["delivery_log","delivery_rules","manager_decisions","skill_scores","approval_rules","task_plans","calibration_history","task_plugins","marketplaces","plugins","trials","strategies","metric_tree","goals","chat_messages","chat_sessions","channels","evolution_audit","step_logs","task_templates","memories","tasks","config","memories_fts","memories_fts_config","memories_fts_data","memories_fts_docsize","memories_fts_idx"];for(let E of t)try{e.exec(`DROP TABLE IF EXISTS ${E}`)}catch{}for(let E of["memories_fts_insert","memories_fts_delete","memories_fts_update"])try{e.exec(`DROP TRIGGER IF EXISTS ${E}`)}catch{}}if(e.exec(`
12
16
  CREATE TABLE IF NOT EXISTS tasks (
13
17
  id TEXT PRIMARY KEY,
14
18
  parent_id TEXT,
@@ -239,7 +243,7 @@ import{e as R,h as I}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
239
243
  role TEXT NOT NULL CHECK(role IN ('user', 'assistant')),
240
244
  content TEXT NOT NULL,
241
245
  source_type TEXT NOT NULL,
242
- task_id TEXT REFERENCES tasks(id),
246
+ task_id TEXT,
243
247
  channel_message_id TEXT,
244
248
  metadata TEXT,
245
249
  created_at INTEGER NOT NULL
@@ -368,7 +372,7 @@ import{e as R,h as I}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
368
372
 
369
373
  CREATE INDEX IF NOT EXISTS idx_calibration_goal ON calibration_history(goal_id);
370
374
  CREATE INDEX IF NOT EXISTS idx_calibration_computed ON calibration_history(computed_at);
371
- `),n<2&&e.exec("UPDATE server_state SET schema_version = 2 WHERE id = 1"),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<4&&(e.exec(`
375
+ `),o<2&&e.exec("UPDATE server_state SET schema_version = 2 WHERE id = 1"),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<4&&(e.exec(`
372
376
  CREATE TABLE IF NOT EXISTS roles (
373
377
  id TEXT PRIMARY KEY,
374
378
  name TEXT NOT NULL UNIQUE,
@@ -405,7 +409,7 @@ import{e as R,h as I}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
405
409
  bound_at INTEGER NOT NULL,
406
410
  PRIMARY KEY (role_id, plugin_id)
407
411
  );
408
- `),e.prepare("PRAGMA table_info(tasks)").all().some(T=>T.name==="role_id")||(e.exec("ALTER TABLE tasks ADD COLUMN role_id TEXT"),e.exec("CREATE INDEX IF NOT EXISTS idx_tasks_role_id ON tasks(role_id)")),e.exec("UPDATE server_state SET schema_version = 4 WHERE id = 1")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<5&&(e.exec(`
412
+ `),e.prepare("PRAGMA table_info(tasks)").all().some(E=>E.name==="role_id")||(e.exec("ALTER TABLE tasks ADD COLUMN role_id TEXT"),e.exec("CREATE INDEX IF NOT EXISTS idx_tasks_role_id ON tasks(role_id)")),e.exec("UPDATE server_state SET schema_version = 4 WHERE id = 1")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<5&&(e.exec(`
409
413
  DROP TABLE IF EXISTS memories;
410
414
  CREATE TABLE memories (
411
415
  id TEXT PRIMARY KEY,
@@ -466,7 +470,7 @@ import{e as R,h as I}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
466
470
  source TEXT DEFAULT 'reflection'
467
471
  );
468
472
  CREATE INDEX IF NOT EXISTS idx_evolution_audit_role_id ON evolution_audit(role_id);
469
- `),e.exec("UPDATE server_state SET schema_version = 5 WHERE id = 1")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<6&&(e.prepare("PRAGMA table_info(roles)").all().some(T=>T.name==="importance_trigger_curr")||e.exec("ALTER TABLE roles ADD COLUMN importance_trigger_curr INTEGER DEFAULT 150"),e.exec("UPDATE server_state SET schema_version = 6 WHERE id = 1")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<7&&(e.prepare("PRAGMA table_info(tasks)").all().some(T=>T.name==="source_session_id")||e.exec("ALTER TABLE tasks ADD COLUMN source_session_id TEXT"),e.exec("UPDATE server_state SET schema_version = 7 WHERE id = 1")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<8){let s=e.prepare("PRAGMA table_info(goals)").all();s.some(E=>E.name==="source_session_id")||e.exec("ALTER TABLE goals ADD COLUMN source_session_id TEXT"),s.some(E=>E.name==="notify_targets")||e.exec("ALTER TABLE goals ADD COLUMN notify_targets TEXT");let T=e.prepare("PRAGMA table_info(task_templates)").all();T.some(E=>E.name==="source_session_id")||e.exec("ALTER TABLE task_templates ADD COLUMN source_session_id TEXT"),T.some(E=>E.name==="notify_targets")||e.exec("ALTER TABLE task_templates ADD COLUMN notify_targets TEXT"),T.some(E=>E.name==="goal_ids")||e.exec("ALTER TABLE task_templates ADD COLUMN goal_ids TEXT"),e.exec("UPDATE goals SET status = 'active' WHERE status IN ('pending','planning','executing','evaluating','replanning')"),e.exec("UPDATE server_state SET schema_version = 8 WHERE id = 1")}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<10){e.exec("PRAGMA foreign_keys = OFF"),e.exec("DROP TABLE IF EXISTS tasks_new"),e.exec("DROP TABLE IF EXISTS chat_sessions_new"),e.exec("DROP TABLE IF EXISTS task_plans_new"),e.exec("DROP TABLE IF EXISTS task_plugins_new"),e.exec("DROP TABLE IF EXISTS approval_rules_new"),e.exec("DROP TABLE IF EXISTS manager_decisions_new"),e.exec("DROP TABLE IF EXISTS channels_new");let s=e.prepare("PRAGMA table_info(roles)").all();s.some(t=>t.name==="allowed_tools")||e.exec("ALTER TABLE roles ADD COLUMN allowed_tools TEXT"),s.some(t=>t.name==="disallowed_tools")||e.exec("ALTER TABLE roles ADD COLUMN disallowed_tools TEXT"),s.some(t=>t.name==="evaluation_criteria")||e.exec("ALTER TABLE roles ADD COLUMN evaluation_criteria TEXT"),s.some(t=>t.name==="execution_mode")||e.exec("ALTER TABLE roles ADD COLUMN execution_mode TEXT DEFAULT 'isolated'"),s.some(t=>t.name==="model")||e.exec("ALTER TABLE roles ADD COLUMN model TEXT"),s.some(t=>t.name==="max_budget_usd")||e.exec("ALTER TABLE roles ADD COLUMN max_budget_usd REAL"),s.some(t=>t.name==="approval_required")||e.exec("ALTER TABLE roles ADD COLUMN approval_required TEXT"),s.some(t=>t.name==="source")||e.exec("ALTER TABLE roles ADD COLUMN source TEXT DEFAULT 'system'"),e.exec("DROP TABLE IF EXISTS agents"),e.exec("DROP TABLE IF EXISTS role_skills"),e.exec(`
473
+ `),e.exec("UPDATE server_state SET schema_version = 5 WHERE id = 1")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<6&&(e.prepare("PRAGMA table_info(roles)").all().some(E=>E.name==="importance_trigger_curr")||e.exec("ALTER TABLE roles ADD COLUMN importance_trigger_curr INTEGER DEFAULT 150"),e.exec("UPDATE server_state SET schema_version = 6 WHERE id = 1")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<7&&(e.prepare("PRAGMA table_info(tasks)").all().some(E=>E.name==="source_session_id")||e.exec("ALTER TABLE tasks ADD COLUMN source_session_id TEXT"),e.exec("UPDATE server_state SET schema_version = 7 WHERE id = 1")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<8){let t=e.prepare("PRAGMA table_info(goals)").all();t.some(r=>r.name==="source_session_id")||e.exec("ALTER TABLE goals ADD COLUMN source_session_id TEXT"),t.some(r=>r.name==="notify_targets")||e.exec("ALTER TABLE goals ADD COLUMN notify_targets TEXT");let E=e.prepare("PRAGMA table_info(task_templates)").all();E.some(r=>r.name==="source_session_id")||e.exec("ALTER TABLE task_templates ADD COLUMN source_session_id TEXT"),E.some(r=>r.name==="notify_targets")||e.exec("ALTER TABLE task_templates ADD COLUMN notify_targets TEXT"),E.some(r=>r.name==="goal_ids")||e.exec("ALTER TABLE task_templates ADD COLUMN goal_ids TEXT"),e.exec("UPDATE goals SET status = 'active' WHERE status IN ('pending','planning','executing','evaluating','replanning')"),e.exec("UPDATE server_state SET schema_version = 8 WHERE id = 1")}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<10){e.exec("PRAGMA foreign_keys = OFF"),e.exec("DROP TABLE IF EXISTS tasks_new"),e.exec("DROP TABLE IF EXISTS chat_sessions_new"),e.exec("DROP TABLE IF EXISTS task_plans_new"),e.exec("DROP TABLE IF EXISTS task_plugins_new"),e.exec("DROP TABLE IF EXISTS approval_rules_new"),e.exec("DROP TABLE IF EXISTS manager_decisions_new"),e.exec("DROP TABLE IF EXISTS channels_new");let t=e.prepare("PRAGMA table_info(roles)").all();t.some(T=>T.name==="allowed_tools")||e.exec("ALTER TABLE roles ADD COLUMN allowed_tools TEXT"),t.some(T=>T.name==="disallowed_tools")||e.exec("ALTER TABLE roles ADD COLUMN disallowed_tools TEXT"),t.some(T=>T.name==="evaluation_criteria")||e.exec("ALTER TABLE roles ADD COLUMN evaluation_criteria TEXT"),t.some(T=>T.name==="execution_mode")||e.exec("ALTER TABLE roles ADD COLUMN execution_mode TEXT DEFAULT 'isolated'"),t.some(T=>T.name==="model")||e.exec("ALTER TABLE roles ADD COLUMN model TEXT"),t.some(T=>T.name==="max_budget_usd")||e.exec("ALTER TABLE roles ADD COLUMN max_budget_usd REAL"),t.some(T=>T.name==="approval_required")||e.exec("ALTER TABLE roles ADD COLUMN approval_required TEXT"),t.some(T=>T.name==="source")||e.exec("ALTER TABLE roles ADD COLUMN source TEXT DEFAULT 'system'"),e.exec("DROP TABLE IF EXISTS agents"),e.exec("DROP TABLE IF EXISTS role_skills"),e.exec(`
470
474
  CREATE TABLE IF NOT EXISTS tasks_new (
471
475
  id TEXT PRIMARY KEY,
472
476
  parent_id TEXT,
@@ -491,7 +495,7 @@ import{e as R,h as I}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
491
495
  num_turns INTEGER,
492
496
  total_duration_ms INTEGER
493
497
  );
494
- `);let T=new Set(["id","status","prompt","config","created_at"]),E=["id","parent_id","status","prompt","config","result","error","sdk_session_id","template_id","original_prompt","role_id","source_session_id","notify_targets","deliver_to","report_to","created_at","started_at","completed_at","cost_usd","token_usage","num_turns","total_duration_ms"],r=new Set(e.prepare("PRAGMA table_info(tasks)").all().map(t=>t.name)),i=E.map(t=>r.has(t)?T.has(t)?`COALESCE(${t}, '')`:t:"NULL").join(",");e.exec(`INSERT INTO tasks_new SELECT ${i} FROM tasks`),e.exec("DROP TABLE tasks"),e.exec("ALTER TABLE tasks_new RENAME TO tasks"),e.exec("CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status)"),e.exec("CREATE INDEX IF NOT EXISTS idx_tasks_created_at ON tasks(created_at)"),e.exec("CREATE INDEX IF NOT EXISTS idx_tasks_template_id ON tasks(template_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_tasks_role_id ON tasks(role_id)"),e.exec(`
498
+ `);let E=new Set(["id","status","prompt","config","created_at"]),r=["id","parent_id","status","prompt","config","result","error","sdk_session_id","template_id","original_prompt","role_id","source_session_id","notify_targets","deliver_to","report_to","created_at","started_at","completed_at","cost_usd","token_usage","num_turns","total_duration_ms"],s=new Set(e.prepare("PRAGMA table_info(tasks)").all().map(T=>T.name)),i=r.map(T=>s.has(T)?E.has(T)?`COALESCE(${T}, '')`:T:"NULL").join(",");e.exec(`INSERT INTO tasks_new SELECT ${i} FROM tasks`),e.exec("DROP TABLE tasks"),e.exec("ALTER TABLE tasks_new RENAME TO tasks"),e.exec("CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status)"),e.exec("CREATE INDEX IF NOT EXISTS idx_tasks_created_at ON tasks(created_at)"),e.exec("CREATE INDEX IF NOT EXISTS idx_tasks_template_id ON tasks(template_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_tasks_role_id ON tasks(role_id)"),e.exec(`
495
499
  CREATE TABLE IF NOT EXISTS chat_sessions_new (
496
500
  id TEXT PRIMARY KEY,
497
501
  status TEXT NOT NULL DEFAULT 'active' CHECK(status IN ('active', 'archived')),
@@ -517,7 +521,7 @@ import{e as R,h as I}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
517
521
  approved_at INTEGER,
518
522
  reviewed_at INTEGER
519
523
  );
520
- `),e.exec("INSERT INTO task_plans_new SELECT id,task_id,plan_json,status,approval_type,deviation_report_json,learned_rules_json,created_at,approved_at,reviewed_at FROM task_plans"),e.exec("DROP TABLE task_plans"),e.exec("ALTER TABLE task_plans_new RENAME TO task_plans"),e.exec("CREATE INDEX IF NOT EXISTS idx_task_plans_task_id ON task_plans(task_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_task_plans_status ON task_plans(status)"),e.prepare("PRAGMA table_info(task_plugins)").all().some(t=>t.name==="skill_id")&&(e.exec(`
524
+ `),e.exec("INSERT INTO task_plans_new SELECT id,task_id,plan_json,status,approval_type,deviation_report_json,learned_rules_json,created_at,approved_at,reviewed_at FROM task_plans"),e.exec("DROP TABLE task_plans"),e.exec("ALTER TABLE task_plans_new RENAME TO task_plans"),e.exec("CREATE INDEX IF NOT EXISTS idx_task_plans_task_id ON task_plans(task_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_task_plans_status ON task_plans(status)"),e.prepare("PRAGMA table_info(task_plugins)").all().some(T=>T.name==="skill_id")&&(e.exec(`
521
525
  CREATE TABLE IF NOT EXISTS task_plugins_new (
522
526
  id TEXT PRIMARY KEY,
523
527
  task_id TEXT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
@@ -526,7 +530,7 @@ import{e as R,h as I}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
526
530
  role_id TEXT,
527
531
  used_at INTEGER NOT NULL
528
532
  );
529
- `),e.exec("INSERT INTO task_plugins_new SELECT id,task_id,plugin_path,plugin_name,skill_id,used_at FROM task_plugins"),e.exec("DROP TABLE task_plugins"),e.exec("ALTER TABLE task_plugins_new RENAME TO task_plugins")),e.exec("CREATE INDEX IF NOT EXISTS idx_task_plugins_task_id ON task_plugins(task_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_task_plugins_plugin_path ON task_plugins(plugin_path)"),e.exec("CREATE INDEX IF NOT EXISTS idx_task_plugins_role_id ON task_plugins(role_id)"),e.prepare("PRAGMA table_info(approval_rules)").all().some(t=>t.name==="skill_id")&&(e.exec(`
533
+ `),e.exec("INSERT INTO task_plugins_new SELECT id,task_id,plugin_path,plugin_name,skill_id,used_at FROM task_plugins"),e.exec("DROP TABLE task_plugins"),e.exec("ALTER TABLE task_plugins_new RENAME TO task_plugins")),e.exec("CREATE INDEX IF NOT EXISTS idx_task_plugins_task_id ON task_plugins(task_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_task_plugins_plugin_path ON task_plugins(plugin_path)"),e.exec("CREATE INDEX IF NOT EXISTS idx_task_plugins_role_id ON task_plugins(role_id)"),e.prepare("PRAGMA table_info(approval_rules)").all().some(T=>T.name==="skill_id")&&(e.exec(`
530
534
  CREATE TABLE IF NOT EXISTS approval_rules_new (
531
535
  id TEXT PRIMARY KEY,
532
536
  role_id TEXT,
@@ -535,7 +539,7 @@ import{e as R,h as I}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
535
539
  created_at INTEGER NOT NULL,
536
540
  created_by_task_id TEXT REFERENCES tasks(id)
537
541
  );
538
- `),e.exec("INSERT INTO approval_rules_new SELECT id,skill_id,task_pattern,max_risk_level,created_at,created_by_task_id FROM approval_rules"),e.exec("DROP TABLE approval_rules"),e.exec("ALTER TABLE approval_rules_new RENAME TO approval_rules")),e.exec("CREATE INDEX IF NOT EXISTS idx_approval_rules_role_id ON approval_rules(role_id)"),e.prepare("PRAGMA table_info(manager_decisions)").all().some(t=>t.name==="skill_id")&&(e.exec(`
542
+ `),e.exec("INSERT INTO approval_rules_new SELECT id,skill_id,task_pattern,max_risk_level,created_at,created_by_task_id FROM approval_rules"),e.exec("DROP TABLE approval_rules"),e.exec("ALTER TABLE approval_rules_new RENAME TO approval_rules")),e.exec("CREATE INDEX IF NOT EXISTS idx_approval_rules_role_id ON approval_rules(role_id)"),e.prepare("PRAGMA table_info(manager_decisions)").all().some(T=>T.name==="skill_id")&&(e.exec(`
539
543
  CREATE TABLE IF NOT EXISTS manager_decisions_new (
540
544
  id TEXT PRIMARY KEY,
541
545
  task_id TEXT NOT NULL REFERENCES tasks(id),
@@ -545,7 +549,7 @@ import{e as R,h as I}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
545
549
  reason TEXT,
546
550
  created_at INTEGER NOT NULL
547
551
  );
548
- `),e.exec("INSERT INTO manager_decisions_new SELECT id,task_id,skill_id,decision_type,boundary_json,reason,created_at FROM manager_decisions"),e.exec("DROP TABLE manager_decisions"),e.exec("ALTER TABLE manager_decisions_new RENAME TO manager_decisions")),e.exec("CREATE INDEX IF NOT EXISTS idx_manager_decisions_task_id ON manager_decisions(task_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_manager_decisions_role_id ON manager_decisions(role_id)"),e.prepare("PRAGMA table_info(channels)").all().some(t=>t.name==="linked_skill_id")&&(e.exec(`
552
+ `),e.exec("INSERT INTO manager_decisions_new SELECT id,task_id,skill_id,decision_type,boundary_json,reason,created_at FROM manager_decisions"),e.exec("DROP TABLE manager_decisions"),e.exec("ALTER TABLE manager_decisions_new RENAME TO manager_decisions")),e.exec("CREATE INDEX IF NOT EXISTS idx_manager_decisions_task_id ON manager_decisions(task_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_manager_decisions_role_id ON manager_decisions(role_id)"),e.prepare("PRAGMA table_info(channels)").all().some(T=>T.name==="linked_skill_id")&&(e.exec(`
549
553
  CREATE TABLE IF NOT EXISTS channels_new (
550
554
  id TEXT PRIMARY KEY,
551
555
  name TEXT NOT NULL,
@@ -567,7 +571,7 @@ import{e as R,h as I}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
567
571
  bound_at INTEGER NOT NULL,
568
572
  PRIMARY KEY (role_id, plugin_id)
569
573
  );
570
- `),e.exec("UPDATE server_state SET schema_version = 10 WHERE id = 1"),e.exec("PRAGMA foreign_keys = ON")}if(n<11){try{e.exec("ALTER TABLE task_templates RENAME COLUMN skill_preference TO role_preference")}catch(s){let T=e.prepare("PRAGMA table_info(task_templates)").all(),E=T.some(i=>i.name==="role_preference"),r=T.some(i=>i.name==="skill_preference");if(!E&&r)throw s}e.exec("UPDATE server_state SET schema_version = 11 WHERE id = 1")}if(n<12&&(e.prepare("PRAGMA table_info(server_state)").all().some(T=>T.name==="tools_fingerprint")||e.exec("ALTER TABLE server_state ADD COLUMN tools_fingerprint TEXT"),e.exec("UPDATE server_state SET schema_version = 12 WHERE id = 1")),n<13&&(e.prepare("PRAGMA table_info(roles)").all().some(T=>T.name==="additional_directories")||e.exec("ALTER TABLE roles ADD COLUMN additional_directories TEXT"),e.exec("UPDATE server_state SET schema_version = 13 WHERE id = 1")),n<14){let s=e.prepare("PRAGMA table_info(roles)").all();s.some(r=>r.name==="allowed_channels")||e.exec("ALTER TABLE roles ADD COLUMN allowed_channels TEXT"),s.some(r=>r.name==="mcp_servers")||e.exec("ALTER TABLE roles ADD COLUMN mcp_servers TEXT");let T=e.prepare("PRAGMA table_info(tasks)").all();T.some(r=>r.name==="deliver_to")||e.exec("ALTER TABLE tasks ADD COLUMN deliver_to TEXT"),T.some(r=>r.name==="report_to")||e.exec("ALTER TABLE tasks ADD COLUMN report_to TEXT"),e.prepare("PRAGMA table_info(goals)").all().some(r=>r.name==="deliver_to")||e.exec("ALTER TABLE goals ADD COLUMN deliver_to TEXT"),e.exec("UPDATE server_state SET schema_version = 14 WHERE id = 1")}if(n<15&&(e.prepare("PRAGMA table_info(roles)").all().some(T=>T.name==="inherit_user_settings")||e.exec("ALTER TABLE roles ADD COLUMN inherit_user_settings INTEGER DEFAULT 0"),e.exec("UPDATE server_state SET schema_version = 15 WHERE id = 1")),n<16&&(e.prepare("PRAGMA table_info(task_templates)").all().some(T=>T.name==="deliver_to")||e.exec("ALTER TABLE task_templates ADD COLUMN deliver_to TEXT"),e.exec("UPDATE server_state SET schema_version = 16 WHERE id = 1")),n<17){e.exec("PRAGMA foreign_keys = OFF"),e.exec("DROP TABLE IF EXISTS plugins"),e.exec("DROP TABLE IF EXISTS role_plugins"),e.exec("DROP TABLE IF EXISTS marketplaces"),e.exec("DROP INDEX IF EXISTS idx_plugins_source"),e.exec("DROP INDEX IF EXISTS idx_plugins_enabled");try{let E=e.prepare("SELECT id, additional_directories FROM roles WHERE additional_directories IS NOT NULL").all();for(let r of E)try{let i=JSON.parse(r.additional_directories);if(i.length>0&&typeof i[0]=="object"&&i[0]!==null&&"path"in i[0])continue;let o=i.map(_=>typeof _=="string"?{path:_}:_);e.prepare("UPDATE roles SET additional_directories = ? WHERE id = ?").run(JSON.stringify(o),r.id)}catch{}}catch{}let s=e.prepare("PRAGMA table_info(tasks)").all();s.some(E=>E.name==="deliver_to")||e.exec("ALTER TABLE tasks ADD COLUMN deliver_to TEXT"),s.some(E=>E.name==="report_to")||e.exec("ALTER TABLE tasks ADD COLUMN report_to TEXT");let T=e.prepare("PRAGMA table_info(strategies)").all();T.some(E=>E.name==="role")&&!T.some(E=>E.name==="role_id")&&(e.exec("ALTER TABLE strategies RENAME COLUMN role TO role_id"),e.exec("DROP INDEX IF EXISTS idx_strategies_role_task_type"),e.exec("DROP INDEX IF EXISTS idx_strategies_role"),e.exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_strategies_role_task_type ON strategies(role_id, task_type, name)"),e.exec("CREATE INDEX IF NOT EXISTS idx_strategies_role ON strategies(role_id)")),e.exec("UPDATE server_state SET schema_version = 17 WHERE id = 1"),e.exec("PRAGMA foreign_keys = ON")}if(n<18){let s=e.prepare("PRAGMA table_info(tasks)").all();s.some(E=>E.name==="deliver_to")||e.exec("ALTER TABLE tasks ADD COLUMN deliver_to TEXT"),s.some(E=>E.name==="report_to")||e.exec("ALTER TABLE tasks ADD COLUMN report_to TEXT");let T=e.prepare("PRAGMA table_info(strategies)").all();T.some(E=>E.name==="role")&&!T.some(E=>E.name==="role_id")&&(e.exec("ALTER TABLE strategies RENAME COLUMN role TO role_id"),e.exec("DROP INDEX IF EXISTS idx_strategies_role_task_type"),e.exec("DROP INDEX IF EXISTS idx_strategies_role"),e.exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_strategies_role_task_type ON strategies(role_id, task_type, name)"),e.exec("CREATE INDEX IF NOT EXISTS idx_strategies_role ON strategies(role_id)")),e.exec("UPDATE server_state SET schema_version = 18 WHERE id = 1")}e.prepare("PRAGMA table_info(delivery_log)").all().some(s=>s.name==="source")||(e.exec(`
574
+ `),e.exec("UPDATE server_state SET schema_version = 10 WHERE id = 1"),e.exec("PRAGMA foreign_keys = ON")}if(o<11){try{e.exec("ALTER TABLE task_templates RENAME COLUMN skill_preference TO role_preference")}catch(t){let E=e.prepare("PRAGMA table_info(task_templates)").all(),r=E.some(i=>i.name==="role_preference"),s=E.some(i=>i.name==="skill_preference");if(!r&&s)throw t}e.exec("UPDATE server_state SET schema_version = 11 WHERE id = 1")}if(o<12&&(e.prepare("PRAGMA table_info(server_state)").all().some(E=>E.name==="tools_fingerprint")||e.exec("ALTER TABLE server_state ADD COLUMN tools_fingerprint TEXT"),e.exec("UPDATE server_state SET schema_version = 12 WHERE id = 1")),o<13&&(e.prepare("PRAGMA table_info(roles)").all().some(E=>E.name==="additional_directories")||e.exec("ALTER TABLE roles ADD COLUMN additional_directories TEXT"),e.exec("UPDATE server_state SET schema_version = 13 WHERE id = 1")),o<14){let t=e.prepare("PRAGMA table_info(roles)").all();t.some(s=>s.name==="allowed_channels")||e.exec("ALTER TABLE roles ADD COLUMN allowed_channels TEXT"),t.some(s=>s.name==="mcp_servers")||e.exec("ALTER TABLE roles ADD COLUMN mcp_servers TEXT");let E=e.prepare("PRAGMA table_info(tasks)").all();E.some(s=>s.name==="deliver_to")||e.exec("ALTER TABLE tasks ADD COLUMN deliver_to TEXT"),E.some(s=>s.name==="report_to")||e.exec("ALTER TABLE tasks ADD COLUMN report_to TEXT"),e.prepare("PRAGMA table_info(goals)").all().some(s=>s.name==="deliver_to")||e.exec("ALTER TABLE goals ADD COLUMN deliver_to TEXT"),e.exec("UPDATE server_state SET schema_version = 14 WHERE id = 1")}if(o<15&&(e.prepare("PRAGMA table_info(roles)").all().some(E=>E.name==="inherit_user_settings")||e.exec("ALTER TABLE roles ADD COLUMN inherit_user_settings INTEGER DEFAULT 0"),e.exec("UPDATE server_state SET schema_version = 15 WHERE id = 1")),o<16&&(e.prepare("PRAGMA table_info(task_templates)").all().some(E=>E.name==="deliver_to")||e.exec("ALTER TABLE task_templates ADD COLUMN deliver_to TEXT"),e.exec("UPDATE server_state SET schema_version = 16 WHERE id = 1")),o<17){e.exec("PRAGMA foreign_keys = OFF"),e.exec("DROP TABLE IF EXISTS plugins"),e.exec("DROP TABLE IF EXISTS role_plugins"),e.exec("DROP TABLE IF EXISTS marketplaces"),e.exec("DROP INDEX IF EXISTS idx_plugins_source"),e.exec("DROP INDEX IF EXISTS idx_plugins_enabled");try{let r=e.prepare("SELECT id, additional_directories FROM roles WHERE additional_directories IS NOT NULL").all();for(let s of r)try{let i=JSON.parse(s.additional_directories);if(i.length>0&&typeof i[0]=="object"&&i[0]!==null&&"path"in i[0])continue;let a=i.map(l=>typeof l=="string"?{path:l}:l);e.prepare("UPDATE roles SET additional_directories = ? WHERE id = ?").run(JSON.stringify(a),s.id)}catch{}}catch{}let t=e.prepare("PRAGMA table_info(tasks)").all();t.some(r=>r.name==="deliver_to")||e.exec("ALTER TABLE tasks ADD COLUMN deliver_to TEXT"),t.some(r=>r.name==="report_to")||e.exec("ALTER TABLE tasks ADD COLUMN report_to TEXT");let E=e.prepare("PRAGMA table_info(strategies)").all();E.some(r=>r.name==="role")&&!E.some(r=>r.name==="role_id")&&(e.exec("ALTER TABLE strategies RENAME COLUMN role TO role_id"),e.exec("DROP INDEX IF EXISTS idx_strategies_role_task_type"),e.exec("DROP INDEX IF EXISTS idx_strategies_role"),e.exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_strategies_role_task_type ON strategies(role_id, task_type, name)"),e.exec("CREATE INDEX IF NOT EXISTS idx_strategies_role ON strategies(role_id)")),e.exec("UPDATE server_state SET schema_version = 17 WHERE id = 1"),e.exec("PRAGMA foreign_keys = ON")}if(o<18){let t=e.prepare("PRAGMA table_info(tasks)").all();t.some(r=>r.name==="deliver_to")||e.exec("ALTER TABLE tasks ADD COLUMN deliver_to TEXT"),t.some(r=>r.name==="report_to")||e.exec("ALTER TABLE tasks ADD COLUMN report_to TEXT");let E=e.prepare("PRAGMA table_info(strategies)").all();E.some(r=>r.name==="role")&&!E.some(r=>r.name==="role_id")&&(e.exec("ALTER TABLE strategies RENAME COLUMN role TO role_id"),e.exec("DROP INDEX IF EXISTS idx_strategies_role_task_type"),e.exec("DROP INDEX IF EXISTS idx_strategies_role"),e.exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_strategies_role_task_type ON strategies(role_id, task_type, name)"),e.exec("CREATE INDEX IF NOT EXISTS idx_strategies_role ON strategies(role_id)")),e.exec("UPDATE server_state SET schema_version = 18 WHERE id = 1")}e.prepare("PRAGMA table_info(delivery_log)").all().some(t=>t.name==="source")||(e.exec(`
571
575
  CREATE TABLE IF NOT EXISTS delivery_log_new (
572
576
  id TEXT PRIMARY KEY,
573
577
  rule_id TEXT REFERENCES delivery_rules(id),
@@ -584,8 +588,8 @@ import{e as R,h as I}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
584
588
  message_type TEXT
585
589
  )
586
590
  `),e.exec(`INSERT INTO delivery_log_new (id, rule_id, task_id, status, target, content, attempts, error, created_at, delivered_at, expires_at)
587
- 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(E=>E.name==="report_to")||e.exec("ALTER TABLE goals ADD COLUMN report_to TEXT"),e.prepare("PRAGMA table_info(task_templates)").all().some(E=>E.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(s=>s.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 L=e.prepare("PRAGMA table_info(memories)").all();L.some(s=>s.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)")),L.some(s=>s.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 d=e.prepare("PRAGMA table_info(memories)").all();d.some(s=>s.name==="tier")&&d.some(s=>s.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 s=e.prepare("PRAGMA table_info(roles)").all();s.some(E=>E.name==="permission_mode")||e.exec("ALTER TABLE roles ADD COLUMN permission_mode TEXT DEFAULT NULL"),s.some(E=>E.name==="allowed_bash_patterns")||e.exec("ALTER TABLE roles ADD COLUMN allowed_bash_patterns TEXT DEFAULT NULL"),s.some(E=>E.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")}if(e.prepare("PRAGMA table_info(roles)").all().some(E=>E.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(),n<25&&(e.exec(`
588
- CREATE TABLE IF NOT EXISTS workflow_executions (
591
+ 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(r=>r.name==="report_to")||e.exec("ALTER TABLE goals ADD COLUMN report_to TEXT"),e.prepare("PRAGMA table_info(task_templates)").all().some(r=>r.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(t=>t.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 k=e.prepare("PRAGMA table_info(memories)").all();k.some(t=>t.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)")),k.some(t=>t.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 h=e.prepare("PRAGMA table_info(memories)").all();h.some(t=>t.name==="tier")&&h.some(t=>t.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 t=e.prepare("PRAGMA table_info(roles)").all();t.some(r=>r.name==="permission_mode")||e.exec("ALTER TABLE roles ADD COLUMN permission_mode TEXT DEFAULT NULL"),t.some(r=>r.name==="allowed_bash_patterns")||e.exec("ALTER TABLE roles ADD COLUMN allowed_bash_patterns TEXT DEFAULT NULL"),t.some(r=>r.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")}if(e.prepare("PRAGMA table_info(roles)").all().some(r=>r.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(),o<25&&(e.exec(`
592
+ CREATE TABLE IF NOT EXISTS template_executions (
589
593
  id TEXT PRIMARY KEY,
590
594
  template_id TEXT NOT NULL,
591
595
  status TEXT NOT NULL DEFAULT 'running',
@@ -595,8 +599,8 @@ import{e as R,h as I}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
595
599
  error TEXT,
596
600
  FOREIGN KEY (template_id) REFERENCES task_templates(id)
597
601
  )
598
- `),e.exec("UPDATE server_state SET schema_version = 25 WHERE id = 1")),n<26){let s=`
599
- CREATE TABLE IF NOT EXISTS workflow_artifacts (
602
+ `),e.exec("UPDATE server_state SET schema_version = 25 WHERE id = 1")),o<26){let t=`
603
+ CREATE TABLE IF NOT EXISTS template_execution_artifacts (
600
604
  id TEXT PRIMARY KEY,
601
605
  execution_id TEXT NOT NULL,
602
606
  step_id TEXT NOT NULL,
@@ -608,13 +612,13 @@ import{e as R,h as I}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
608
612
  size_bytes INTEGER NOT NULL,
609
613
  created_at INTEGER NOT NULL,
610
614
  UNIQUE(execution_id, step_id, key),
611
- FOREIGN KEY (execution_id) REFERENCES workflow_executions(id) ON DELETE CASCADE
615
+ FOREIGN KEY (execution_id) REFERENCES template_executions(id) ON DELETE CASCADE
612
616
  );
613
- CREATE INDEX IF NOT EXISTS idx_workflow_artifacts_execution
614
- ON workflow_artifacts (execution_id);
615
- CREATE INDEX IF NOT EXISTS idx_workflow_artifacts_step
616
- ON workflow_artifacts (execution_id, step_id);
617
- `,T=`
617
+ CREATE INDEX IF NOT EXISTS idx_template_execution_artifacts_execution
618
+ ON template_execution_artifacts (execution_id);
619
+ CREATE INDEX IF NOT EXISTS idx_template_execution_artifacts_step
620
+ ON template_execution_artifacts (execution_id, step_id);
621
+ `,E=`
618
622
  CREATE TABLE IF NOT EXISTS artifact_access_log (
619
623
  id INTEGER PRIMARY KEY AUTOINCREMENT,
620
624
  timestamp INTEGER NOT NULL,
@@ -633,7 +637,12 @@ import{e as R,h as I}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
633
637
  ON artifact_access_log (execution_id, timestamp);
634
638
  CREATE INDEX IF NOT EXISTS idx_artifact_access_log_role
635
639
  ON artifact_access_log (role_id, timestamp);
636
- `;e.exec(s),e.exec(T),e.prepare("PRAGMA table_info(tasks)").all().some(r=>r.name==="step_id")||e.prepare("ALTER TABLE tasks ADD COLUMN step_id TEXT").run(),e.exec("UPDATE server_state SET schema_version = 26 WHERE id = 1")}e.prepare("PRAGMA table_info(roles)").all().some(E=>E.name==="os_capabilities")||e.prepare("ALTER TABLE roles ADD COLUMN os_capabilities TEXT DEFAULT NULL").run(),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<27&&e.prepare("UPDATE server_state SET schema_version = 27 WHERE id = 1").run();{let s=e.prepare("PRAGMA table_info(manager_decisions)").all();s.some(E=>E.name==="requirements_json")||e.prepare("ALTER TABLE manager_decisions ADD COLUMN requirements_json TEXT").run(),s.some(E=>E.name==="fit_score")||e.prepare("ALTER TABLE manager_decisions ADD COLUMN fit_score REAL").run(),s.some(E=>E.name==="candidates_json")||e.prepare("ALTER TABLE manager_decisions ADD COLUMN candidates_json TEXT").run(),s.some(E=>E.name==="tie_break_reason")||e.prepare("ALTER TABLE manager_decisions ADD COLUMN tie_break_reason TEXT").run(),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<28&&e.prepare("UPDATE server_state SET schema_version = 28 WHERE id = 1").run()}{let s=[[/\brm -rf\b/,["rm -rf *"]],[/^git push/,["git push*"]],[/^git reset/,["git reset*"]],[/\bcurl.*POST\b/i,["curl * -X POST*","curl * --request POST*"]]],T=e.prepare("SELECT key, value FROM config WHERE key = 'defaults.approvalRequired'").all();for(let E of T)try{let r=JSON.parse(E.value),i=[];for(let _ of r){let a=!1;for(let[A,t]of s)if(A.test(_)){i.push(...t),a=!0,l.info({from:_,to:t},"Config: migrated approvalRequired pattern from regex to glob");break}a||(/[.+?^${}()|[\]\\]/.test(_)&&l.warn({pattern:_},"Config: approvalRequired pattern contains regex metacharacters that won't work with glob matching; update to glob syntax (use * for wildcards)"),i.push(_))}let o=[...new Set(i)];e.prepare("UPDATE config SET value = ?, updated_at = ? WHERE key = ?").run(JSON.stringify(o),Date.now(),E.key)}catch{}}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<31){let T=e.prepare("SELECT count(*) AS n FROM task_templates WHERE trigger_type IN ('event', 'task_complete')").get();T.n>0&&l.info({legacyCount:T.n},"normalizing legacy template trigger types"),e.prepare("UPDATE task_templates SET trigger_type='workflow_complete' WHERE trigger_type='event' AND trigger_event LIKE 'workflow_complete:%'").run(),e.prepare("UPDATE task_templates SET trigger_type='template_complete' WHERE trigger_type='event'").run(),e.prepare("UPDATE task_templates SET trigger_type='manual' WHERE trigger_type='task_complete'").run();let E=e.prepare("SELECT count(*) AS n FROM task_templates WHERE trigger_type IN ('event', 'task_complete')").get();E.n>0&&l.warn({orphan:E.n},"migration left orphan legacy trigger_type rows; manual inspection required"),e.prepare("UPDATE server_state SET schema_version = 31 WHERE id = 1").run()}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<32&&(e.exec(`
640
+ `;e.exec(t),e.exec(E),e.prepare("PRAGMA table_info(tasks)").all().some(s=>s.name==="step_id")||e.prepare("ALTER TABLE tasks ADD COLUMN step_id TEXT").run(),e.exec("UPDATE server_state SET schema_version = 26 WHERE id = 1")}e.prepare("PRAGMA table_info(roles)").all().some(r=>r.name==="os_capabilities")||e.prepare("ALTER TABLE roles ADD COLUMN os_capabilities TEXT DEFAULT NULL").run(),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<27&&e.prepare("UPDATE server_state SET schema_version = 27 WHERE id = 1").run();{let t=e.prepare("PRAGMA table_info(manager_decisions)").all();t.some(r=>r.name==="requirements_json")||e.prepare("ALTER TABLE manager_decisions ADD COLUMN requirements_json TEXT").run(),t.some(r=>r.name==="fit_score")||e.prepare("ALTER TABLE manager_decisions ADD COLUMN fit_score REAL").run(),t.some(r=>r.name==="candidates_json")||e.prepare("ALTER TABLE manager_decisions ADD COLUMN candidates_json TEXT").run(),t.some(r=>r.name==="tie_break_reason")||e.prepare("ALTER TABLE manager_decisions ADD COLUMN tie_break_reason TEXT").run(),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<28&&e.prepare("UPDATE server_state SET schema_version = 28 WHERE id = 1").run()}{let t=[[/\brm -rf\b/,["rm -rf *"]],[/^git push/,["git push*"]],[/^git reset/,["git reset*"]],[/\bcurl.*POST\b/i,["curl * -X POST*","curl * --request POST*"]]],E=e.prepare("SELECT key, value FROM config WHERE key = 'defaults.approvalRequired'").all();for(let r of E)try{let s=JSON.parse(r.value),i=[];for(let l of s){let O=!1;for(let[y,T]of t)if(y.test(l)){i.push(...T),O=!0,g.info({from:l,to:T},"Config: migrated approvalRequired pattern from regex to glob");break}O||(/[.+?^${}()|[\]\\]/.test(l)&&g.warn({pattern:l},"Config: approvalRequired pattern contains regex metacharacters that won't work with glob matching; update to glob syntax (use * for wildcards)"),i.push(l))}let a=[...new Set(i)];e.prepare("UPDATE config SET value = ?, updated_at = ? WHERE key = ?").run(JSON.stringify(a),Date.now(),r.key)}catch{}}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<31){let E=e.prepare("SELECT count(*) AS n FROM task_templates WHERE trigger_type IN ('event', 'task_complete')").get();E.n>0&&g.info({legacyCount:E.n},"normalizing legacy template trigger types"),e.prepare(`
641
+ UPDATE task_templates
642
+ SET trigger_type='template_complete',
643
+ trigger_event=REPLACE(trigger_event, ?, 'template_complete:')
644
+ WHERE trigger_type='event' AND trigger_event LIKE ?
645
+ `).run(v,`${v}%`),e.prepare("UPDATE task_templates SET trigger_type='template_complete' WHERE trigger_type='event'").run(),e.prepare("UPDATE task_templates SET trigger_type='manual' WHERE trigger_type='task_complete'").run();let r=e.prepare("SELECT count(*) AS n FROM task_templates WHERE trigger_type IN ('event', 'task_complete')").get();r.n>0&&g.warn({orphan:r.n},"migration left orphan legacy trigger_type rows; manual inspection required"),e.prepare("UPDATE server_state SET schema_version = 31 WHERE id = 1").run()}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<32&&(e.exec(`
637
646
  CREATE TABLE IF NOT EXISTS event_defs (
638
647
  id TEXT PRIMARY KEY, name TEXT NOT NULL, source_type TEXT NOT NULL,
639
648
  source_config TEXT NOT NULL, enabled INTEGER NOT NULL DEFAULT 1,
@@ -652,7 +661,12 @@ import{e as R,h as I}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
652
661
  CREATE UNIQUE INDEX IF NOT EXISTS idx_events_dedup ON events(source, dedup_key);
653
662
  CREATE INDEX IF NOT EXISTS idx_events_type ON events(type);
654
663
  CREATE INDEX IF NOT EXISTS idx_events_def_id ON events(event_def_id, occurred_at);
655
- `),e.prepare("UPDATE server_state SET schema_version = 32 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<33&&(e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='workflow_executions'").get()&&(e.prepare("PRAGMA table_info(workflow_executions)").all().some(i=>i.name==="event_id")||e.prepare("ALTER TABLE workflow_executions ADD COLUMN event_id TEXT").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_workflow_executions_event_id ON workflow_executions(event_id)").run()),e.prepare("UPDATE server_state SET schema_version = 33 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<34&&(e.prepare("PRAGMA table_info(tasks)").all().some(r=>r.name==="block_reason_json")||e.prepare("ALTER TABLE tasks ADD COLUMN block_reason_json TEXT").run(),e.prepare("UPDATE server_state SET schema_version = 34 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<35){e.prepare("PRAGMA table_info(roles)").all().some(r=>r.name==="preset_id")||e.prepare("ALTER TABLE roles ADD COLUMN preset_id TEXT").run();let E=e.prepare("PRAGMA table_info(task_templates)").all();E.some(r=>r.name==="is_preset")||e.prepare("ALTER TABLE task_templates ADD COLUMN is_preset INTEGER NOT NULL DEFAULT 0").run(),E.some(r=>r.name==="preset_id")||e.prepare("ALTER TABLE task_templates ADD COLUMN preset_id TEXT").run(),e.prepare("UPDATE server_state SET schema_version = 35 WHERE id = 1").run()}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<36){let T=[["Engineer","engineer"],["Reviewer","reviewer"],["Researcher","researcher"],["Writer","writer"],["Chat Manager","chat-manager"],["adam-automator","adam-automator"]];for(let[E,r]of T)e.prepare("UPDATE roles SET preset_id = ? WHERE name = ? AND preset_id IS NULL").run(r,E);e.prepare("UPDATE server_state SET schema_version = 36 WHERE id = 1").run()}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<37&&(e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='feature_requests'").all().length===0&&(e.exec(`
664
+ `),e.prepare("UPDATE server_state SET schema_version = 32 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<33){let E=e.prepare(`
665
+ SELECT name FROM sqlite_master
666
+ WHERE type='table' AND name IN ('template_executions', ?)
667
+ ORDER BY CASE name WHEN 'template_executions' THEN 0 ELSE 1 END
668
+ LIMIT 1
669
+ `).get(x);if(E){let r=E.name;e.prepare(`PRAGMA table_info(${r})`).all().some(l=>l.name==="event_id")||e.prepare(`ALTER TABLE ${r} ADD COLUMN event_id TEXT`).run();let a=r==="template_executions"?"idx_template_executions_event_id":J;e.prepare(`CREATE INDEX IF NOT EXISTS ${a} ON ${r}(event_id)`).run()}e.prepare("UPDATE server_state SET schema_version = 33 WHERE id = 1").run()}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<34&&(e.prepare("PRAGMA table_info(tasks)").all().some(s=>s.name==="block_reason_json")||e.prepare("ALTER TABLE tasks ADD COLUMN block_reason_json TEXT").run(),e.prepare("UPDATE server_state SET schema_version = 34 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<35){e.prepare("PRAGMA table_info(roles)").all().some(s=>s.name==="preset_id")||e.prepare("ALTER TABLE roles ADD COLUMN preset_id TEXT").run();let r=e.prepare("PRAGMA table_info(task_templates)").all();r.some(s=>s.name==="is_preset")||e.prepare("ALTER TABLE task_templates ADD COLUMN is_preset INTEGER NOT NULL DEFAULT 0").run(),r.some(s=>s.name==="preset_id")||e.prepare("ALTER TABLE task_templates ADD COLUMN preset_id TEXT").run(),e.prepare("UPDATE server_state SET schema_version = 35 WHERE id = 1").run()}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<36){let E=[["Engineer","engineer"],["Reviewer","reviewer"],["Researcher","researcher"],["Writer","writer"],["Chat Manager","chat-manager"],["adam-automator","adam-automator"]];for(let[r,s]of E)e.prepare("UPDATE roles SET preset_id = ? WHERE name = ? AND preset_id IS NULL").run(s,r);e.prepare("UPDATE server_state SET schema_version = 36 WHERE id = 1").run()}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<37&&(e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='feature_requests'").all().length===0&&(e.exec(`
656
670
  CREATE TABLE feature_requests (
657
671
  id TEXT PRIMARY KEY,
658
672
  source_session_id TEXT,
@@ -681,4 +695,46 @@ import{e as R,h as I}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
681
695
  created_at INTEGER NOT NULL,
682
696
  updated_at INTEGER NOT NULL
683
697
  )
684
- `),e.exec("CREATE INDEX IF NOT EXISTS idx_mistake_patterns_status ON mistake_patterns(status)"),e.exec("CREATE INDEX IF NOT EXISTS idx_mistake_patterns_last_seen ON mistake_patterns(last_seen)"),e.exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_mistake_patterns_dim ON mistake_patterns(dimension_type, dimension_value)")),e.prepare("UPDATE server_state SET schema_version = 38 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<39){let T=e.prepare("SELECT source_task_id, COUNT(*) as cnt FROM memories WHERE source_task_id IS NOT NULL AND type = 'thought' GROUP BY source_task_id HAVING cnt > 1").all();if(T.length>0){console.info(`[db migration v39] dedupe ${T.length} (source_task_id, type='thought') groups before adding unique index`);for(let E of T){let r=e.prepare("SELECT id, length(content) as len FROM memories WHERE source_task_id = ? AND type = 'thought' ORDER BY len DESC, created_at ASC").all(E.source_task_id),i=r[0].id,o=r.slice(1).map(a=>a.id),_=o.map(()=>"?").join(",");e.prepare(`DELETE FROM memories WHERE id IN (${_})`).run(...o),console.info(`[db migration v39] group source_task_id=${E.source_task_id}: kept ${i} (len ${r[0].len}), deleted ${o.length}`)}}e.prepare("CREATE UNIQUE INDEX IF NOT EXISTS idx_memories_thought_per_task ON memories(source_task_id) WHERE source_task_id IS NOT NULL AND type = 'thought'").run(),e.prepare("UPDATE server_state SET schema_version = 39 WHERE id = 1").run()}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<40){let T=["tasks","step_logs","delivery_log","evolution_audit","chat_messages"];for(let E of T)e.prepare(`PRAGMA table_info(${E})`).all().some(i=>i.name==="trace_id")||(e.prepare(`ALTER TABLE ${E} ADD COLUMN trace_id TEXT`).run(),e.prepare(`CREATE INDEX IF NOT EXISTS idx_${E}_trace_id ON ${E}(trace_id) WHERE trace_id IS NOT NULL`).run(),console.info(`[db migration v40] added trace_id to ${E}`));e.prepare("UPDATE server_state SET schema_version = 40 WHERE id = 1").run()}try{let s=e.prepare("SELECT id, name, steps, role_preference FROM task_templates WHERE enabled = 1").all(),T=0;for(let E of s){if(E.role_preference)continue;let r;try{r=JSON.parse(E.steps)}catch{continue}if(!Array.isArray(r))continue;let i=!1;for(let o of r){let _=typeof o.roleId=="string"&&o.roleId.length>0,a=o.autoSelectRole===!0;!_&&!a&&(o.autoSelectRole=!0,o.requirements===void 0&&(o.requirements={}),i=!0)}i&&(e.prepare("UPDATE task_templates SET steps = ?, updated_at = ? WHERE id = ?").run(JSON.stringify(r),Date.now(),E.id),T+=1,console.info(`[db migration] template auto-repaired: id=${E.id} name=${E.name}`))}T>0&&console.info(`[db migration] auto-repaired ${T} enabled template(s) with missing role config`)}catch(s){console.error("[db migration] template auto-repair failed:",s)}}function W(){if(N)return N;let e=process.env.ADAM_DB_PATH||R,c=g(e);return u(c)||S(c,{recursive:!0}),N=new X(e),N.pragma("journal_mode = WAL"),N.pragma("foreign_keys = ON"),N.pragma("trusted_schema = ON"),U(N),N}function K(){N&&(N.close(),N=null)}var l,N,D=p(()=>{I();O();l=m("store"),N=null});export{U as a,W as b,K as c,D as d};
698
+ `),e.exec("CREATE INDEX IF NOT EXISTS idx_mistake_patterns_status ON mistake_patterns(status)"),e.exec("CREATE INDEX IF NOT EXISTS idx_mistake_patterns_last_seen ON mistake_patterns(last_seen)"),e.exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_mistake_patterns_dim ON mistake_patterns(dimension_type, dimension_value)")),e.prepare("UPDATE server_state SET schema_version = 38 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<39){let E=e.prepare("SELECT source_task_id, COUNT(*) as cnt FROM memories WHERE source_task_id IS NOT NULL AND type = 'thought' GROUP BY source_task_id HAVING cnt > 1").all();if(E.length>0){console.info(`[db migration v39] dedupe ${E.length} (source_task_id, type='thought') groups before adding unique index`);for(let r of E){let s=e.prepare("SELECT id, length(content) as len FROM memories WHERE source_task_id = ? AND type = 'thought' ORDER BY len DESC, created_at ASC").all(r.source_task_id),i=s[0].id,a=s.slice(1).map(O=>O.id),l=a.map(()=>"?").join(",");e.prepare(`DELETE FROM memories WHERE id IN (${l})`).run(...a),console.info(`[db migration v39] group source_task_id=${r.source_task_id}: kept ${i} (len ${s[0].len}), deleted ${a.length}`)}}e.prepare("CREATE UNIQUE INDEX IF NOT EXISTS idx_memories_thought_per_task ON memories(source_task_id) WHERE source_task_id IS NOT NULL AND type = 'thought'").run(),e.prepare("UPDATE server_state SET schema_version = 39 WHERE id = 1").run()}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<40){let E=["tasks","step_logs","delivery_log","evolution_audit","chat_messages"];for(let r of E)e.prepare(`PRAGMA table_info(${r})`).all().some(i=>i.name==="trace_id")||(e.prepare(`ALTER TABLE ${r} ADD COLUMN trace_id TEXT`).run(),e.prepare(`CREATE INDEX IF NOT EXISTS idx_${r}_trace_id ON ${r}(trace_id) WHERE trace_id IS NOT NULL`).run(),console.info(`[db migration v40] added trace_id to ${r}`));e.prepare("UPDATE server_state SET schema_version = 40 WHERE id = 1").run()}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<41&&(e.prepare(`
699
+ UPDATE task_templates
700
+ SET trigger_type = 'template_complete'
701
+ WHERE trigger_type = ?
702
+ `).run(Z),e.prepare(`
703
+ UPDATE task_templates
704
+ SET trigger_event = REPLACE(trigger_event, ?, 'template_complete:')
705
+ WHERE trigger_event LIKE ?
706
+ `).run(v,`${v}%`),e.prepare("UPDATE server_state SET schema_version = 41 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<42){let E=e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name=?").get(x),r=e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='template_executions'").get();E&&!r&&e.prepare(`ALTER TABLE ${x} RENAME TO template_executions`).run(),e.exec(`
707
+ CREATE TABLE IF NOT EXISTS template_executions (
708
+ id TEXT PRIMARY KEY,
709
+ template_id TEXT NOT NULL,
710
+ status TEXT NOT NULL DEFAULT 'running',
711
+ step_statuses TEXT NOT NULL DEFAULT '{}',
712
+ started_at INTEGER NOT NULL,
713
+ completed_at INTEGER,
714
+ error TEXT,
715
+ event_id TEXT,
716
+ FOREIGN KEY (template_id) REFERENCES task_templates(id)
717
+ )
718
+ `),e.prepare("PRAGMA table_info(template_executions)").all().some(i=>i.name==="event_id")||e.prepare("ALTER TABLE template_executions ADD COLUMN event_id TEXT").run(),e.prepare(`DROP INDEX IF EXISTS ${J}`).run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_template_executions_event_id ON template_executions(event_id)").run(),e.prepare("UPDATE server_state SET schema_version = 42 WHERE id = 1").run()}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<43){let E=e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name=?").get(Q),r=e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='template_execution_artifacts'").get();E&&!r&&e.prepare(`ALTER TABLE ${Q} RENAME TO template_execution_artifacts`).run(),e.exec(`
719
+ CREATE TABLE IF NOT EXISTS template_execution_artifacts (
720
+ id TEXT PRIMARY KEY,
721
+ execution_id TEXT NOT NULL,
722
+ step_id TEXT NOT NULL,
723
+ key TEXT NOT NULL,
724
+ kind TEXT NOT NULL CHECK(kind IN ('json', 'file')),
725
+ value_json TEXT,
726
+ blob_path TEXT,
727
+ mime TEXT,
728
+ size_bytes INTEGER NOT NULL,
729
+ created_at INTEGER NOT NULL,
730
+ UNIQUE(execution_id, step_id, key),
731
+ FOREIGN KEY (execution_id) REFERENCES template_executions(id) ON DELETE CASCADE
732
+ )
733
+ `),e.prepare(`DROP INDEX IF EXISTS ${ce}`).run(),e.prepare(`DROP INDEX IF EXISTS ${Ne}`).run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_template_execution_artifacts_execution ON template_execution_artifacts(execution_id)").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_template_execution_artifacts_step ON template_execution_artifacts(execution_id, step_id)").run(),z(e),e.prepare("UPDATE server_state SET schema_version = 43 WHERE id = 1").run()}(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<44&&(e.prepare("PRAGMA table_info(tasks)").all().some(r=>r.name==="error_category")||e.prepare("ALTER TABLE tasks ADD COLUMN error_category TEXT").run(),e.prepare("UPDATE server_state SET schema_version = 44 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<45&&(e.prepare("PRAGMA table_info(tasks)").all().some(r=>r.name==="retry_count")||e.prepare("ALTER TABLE tasks ADD COLUMN retry_count INTEGER NOT NULL DEFAULT 0").run(),e.exec(`
734
+ CREATE TABLE IF NOT EXISTS delayed_retries (
735
+ id TEXT PRIMARY KEY,
736
+ task_id TEXT NOT NULL,
737
+ retry_at INTEGER NOT NULL,
738
+ created_at INTEGER NOT NULL
739
+ )
740
+ `),e.exec("CREATE INDEX IF NOT EXISTS idx_delayed_retries_retry_at ON delayed_retries(retry_at)"),e.exec("CREATE INDEX IF NOT EXISTS idx_delayed_retries_task_id ON delayed_retries(task_id)"),e.prepare("UPDATE server_state SET schema_version = 45 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<46&&(e.prepare("PRAGMA table_info(role_scores)").all().some(r=>r.name==="task_type")||e.prepare("ALTER TABLE role_scores ADD COLUMN task_type TEXT").run(),e.prepare("UPDATE server_state SET schema_version = 46 WHERE id = 1").run());try{let t=e.prepare("SELECT id, name, steps, role_preference FROM task_templates WHERE enabled = 1").all(),E=0;for(let r of t){if(r.role_preference)continue;let s;try{s=JSON.parse(r.steps)}catch{continue}if(!Array.isArray(s))continue;let i=!1;for(let a of s){let l=typeof a.roleId=="string"&&a.roleId.length>0,O=a.autoSelectRole===!0;!l&&!O&&(a.autoSelectRole=!0,a.requirements===void 0&&(a.requirements={}),i=!0)}i&&(e.prepare("UPDATE task_templates SET steps = ?, updated_at = ? WHERE id = ?").run(JSON.stringify(s),Date.now(),r.id),E+=1,console.info(`[db migration] template auto-repaired: id=${r.id} name=${r.name}`))}E>0&&console.info(`[db migration] auto-repaired ${E} enabled template(s) with missing role config`)}catch(t){console.error("[db migration] template auto-repair failed:",t)}}function he(){if(L)return L;let e=process.env.ADAM_DB_PATH||G,_=le(e);return _e(_)||ae(_,{recursive:!0}),L=new ne(e),L.pragma("journal_mode = WAL"),L.pragma("foreign_keys = ON"),L.pragma("trusted_schema = ON"),de(L),L}function ye(){L&&(L.close(),L=null)}var g,Z,v,x,Q,J,ce,Ne,L,Le=M(()=>{w();B();V();g=S("store"),Z=["work","flow_complete"].join(""),v=`${Z}:`,x=["work","flow_executions"].join(""),Q=["work","flow_artifacts"].join(""),J=["idx","work","flow_executions_event_id"].join("_"),ce=["idx","work","flow_artifacts_execution"].join("_"),Ne=["idx","work","flow_artifacts_step"].join("_"),L=null});export{ie as a,Oe as b,ue as c,Xe as d,Se as e,oe as f,ge as g,ve as h,V as i,de as j,he as k,ye as l,Le as m};
@@ -0,0 +1 @@
1
+ import{a as x}from"./chunk-7QELXWKT.js";import{b as T}from"./chunk-FG72WBDO.js";import{a as g}from"./chunk-WGRTN6TX.js";import{b as k,c as p,d as w}from"./chunk-EEU56CTK.js";import{c as O,h as P}from"./chunk-RLNMJ2QY.js";import{existsSync as U}from"fs";import{isAbsolute as $}from"path";P();import{v4 as E}from"uuid";var R=O("adam"),I=class{_dedupCache=new Map;_rateLimitWindows=new Map;_recentlySentIds=new Set;isRecentlySent(f){return this._recentlySentIds.has(f)}async send(f){let{taskId:n,channelId:i,chatId:h,content:y,messageType:o,platform:L,webhookUrl:m,replyMarkup:S,mediaUrl:_,mediaType:M,attachments:C}=f,W=o!=="reply"&&!!n,t;if(W){t=`${n}:${i??"none"}:${h??"none"}:${o}`;let s=this._dedupCache.get(t);if(s&&Date.now()-s.timestamp<300*1e3)return R.debug({dedupKey:t},"Dedup hit, returning cached log entry"),{success:!0,logEntryId:s.logEntryId}}if(i){let s=Date.now(),a=6e4,r=this._rateLimitWindows.get(i);r||(r=[],this._rateLimitWindows.set(i,r));let v=s-a;for(;r.length>0&&r[0]<v;)r.shift();if(r.length>=60){let c=E();return R.warn({channelId:i,count:r.length},"Rate limited, not sending"),{success:!1,logEntryId:c,error:"rate_limited"}}r.push(s)}let A=L??(i?T(i)?.platform:void 0)??"unknown",D=m?y:x(y,A,n),e=E(),l={id:e,ruleId:void 0,taskId:n??void 0,status:"pending",target:i&&h?{type:"channel",channelId:i,chatId:h}:m?{type:"webhook",webhookUrl:m}:{type:"channel",channelId:i??"",chatId:h??""},content:D,attempts:0,createdAt:Date.now(),expiresAt:Date.now()+1440*60*1e3,source:"direct",messageType:o};k(l),t&&this._dedupCache.set(t,{logEntryId:e,timestamp:Date.now()});try{let s=j(_);if(s)return p(e,"failed",s),t&&this._dedupCache.delete(t),g.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:l.target,status:"failed",error:s,messageType:o}),{success:!1,logEntryId:e,error:s};if(m){let a=await fetch(m,{method:"POST",body:JSON.stringify({result:y,taskId:n,timestamp:new Date().toISOString()}),signal:AbortSignal.timeout(1e4)});if(a.ok)return w(e),g.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:l.target,status:"delivered",messageType:o}),{success:!0,logEntryId:e};{let r=`Webhook returned ${a.status}`;return p(e,"failed",r),t&&this._dedupCache.delete(t),g.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:l.target,status:"failed",error:r,messageType:o}),{success:!1,logEntryId:e,error:r}}}else if(i&&h){let{getChannelManager:a}=await import("./channels-LV5F7LUJ.js"),r=a();if(!r){let d="ChannelManager not available";return p(e,"failed",d),t&&this._dedupCache.delete(t),g.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:l.target,status:"failed",error:d,messageType:o}),{success:!1,logEntryId:e,error:d}}let v={content:D,messageType:o,...S?{replyMarkup:S}:{},..._?{mediaUrl:_}:{},...M?{mediaType:M}:{},...C?{attachments:C}:{}},c=await r.sendMessage(i,h,v);if(c===null){let d="Channel adapter send failed (returned null)";return p(e,"failed",d),t&&this._dedupCache.delete(t),g.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:l.target,status:"failed",error:d,messageType:o}),{success:!1,logEntryId:e,error:d}}if(c&&(this._recentlySentIds.add(c),setTimeout(()=>this._recentlySentIds.delete(c),300*1e3)),c?.startsWith("queued-")){let d="queued_not_delivered";return t&&this._dedupCache.delete(t),g.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:l.target,status:"pending",error:d,messageType:o}),{success:!1,messageId:c,logEntryId:e,error:d}}return w(e),g.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:l.target,status:"delivered",messageType:o}),{success:!0,messageId:c??void 0,logEntryId:e}}else{let a="No channelId/chatId or webhookUrl provided";return p(e,"failed",a),t&&this._dedupCache.delete(t),{success:!1,logEntryId:e,error:a}}}catch(s){let a=s instanceof Error?s.message:String(s);return p(e,"failed",a),t&&this._dedupCache.delete(t),g.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:l.target,status:"failed",error:a,messageType:o}),{success:!1,logEntryId:e,error:a}}}};function j(u){if(!u)return;if(u.includes("://")&&!u.startsWith("file://"))return"mediaUrl must be a local file path";let f=u.startsWith("file://")?new URL(u).pathname:u;if(!$(f))return"mediaUrl must be absolute";if(!U(f))return"mediaUrl file does not exist"}var b=null;function q(){return b||(b=new I),b}function Q(u){return q().isRecentlySent(u)}export{I as a,q as b,Q as c};
@@ -0,0 +1,47 @@
1
+ import{g as j}from"./chunk-VOO3FHMD.js";import{k as B}from"./chunk-7ZCMGQLK.js";import{a as ie}from"./chunk-UEYKBU5K.js";import{a as te,b}from"./chunk-34WPSSKK.js";import{b as re}from"./chunk-EP26G2WS.js";import{e as D,f as F,j as Oe}from"./chunk-MC2R5WMN.js";import{a as Z}from"./chunk-UMCM25ZR.js";import{d as Q}from"./chunk-KZKDPY53.js";import{c as ne,i as Ae,l as oe,o as se,r as Ie}from"./chunk-OPCPSPZ2.js";import{k as p,m as y}from"./chunk-37TV7A5A.js";import{a as X,h as xe}from"./chunk-WBAPIPST.js";import{c as L,h as ee}from"./chunk-RLNMJ2QY.js";Ae();import{homedir as Pe}from"os";import{resolve as U}from"path";import{z as g}from"zod";xe();function ae(){return[...X]}Ie();Oe();var Ne=new Set(ae()),De=g.object({tools:g.array(g.string().refine(t=>Ne.has(t),{message:"Unknown tool"})).optional(),paths:g.array(g.object({path:g.string().refine(t=>t.startsWith("/")||t.startsWith("~"),{message:"path must be absolute or tilde-prefixed"}),access:g.enum(["ro","rw"])})).optional(),osCapabilities:g.array(g.object({id:g.enum(ne),targets:g.array(g.string()).optional()})).optional(),network:g.boolean().optional(),plugins:g.array(g.string()).optional()});function le(t){return t.startsWith("~")?t.replace(/^~/,Pe()):t}function Fe(t){let e=le(t);return e.startsWith("/")?U(e):null}function de(t,e){let r=[{path:U(e),access:"rw"}];for(let n of t.additionalDirectories??[])r.push({path:U(le(n.path)),access:n.mode??"rw"});return r}function G(t,e){let r=Fe(t.path);if(!r)return!1;let n=e.filter(o=>r===o.path||r.startsWith(`${o.path}/`)).sort((o,i)=>i.path.length-o.path.length);if(n.length===0)return!1;let s=n[0];return t.access==="rw"?s.access==="rw":!0}function W(t,e){if(!t?.length)return[];let r=new Set(e??[]);return t.filter(n=>!r.has(n))}function H(t,e){if(!t?.length)return[];let r=new Set((e??[]).map(n=>n.id));return t.filter(n=>!r.has(n.id))}function $(t,e){if(!t?.length)return[];let r=new Set(e);return t.filter(n=>!r.has(n))}function J(t,e){return t?(e??[]).some(r=>r.id==="local-network"):!0}function ue(t,e,r,n){let s=[];if(e.tools?.length){let o=W(e.tools,t.allowedTools).length;s.push((e.tools.length-o)/e.tools.length)}if(e.paths?.length){let o=e.paths.filter(i=>G(i,r)).length;s.push(o/e.paths.length)}if(e.osCapabilities?.length){let o=H(e.osCapabilities,t.osCapabilities).length;s.push((e.osCapabilities.length-o)/e.osCapabilities.length)}if(e.plugins?.length){let o=$(e.plugins,n).length;s.push((e.plugins.length-o)/e.plugins.length)}return e.network===!0&&s.push(J(e.network,t.osCapabilities)?1:0),s.length===0?1:s.reduce((o,i)=>o+i,0)/s.length}function je(t,e){if(!e.tools?.length||!t.approvalRequired?.length)return[];let r=new Set(t.approvalRequired),n=e.tools.filter(o=>r.has(o));if(!n.length)return[];let s=e.paths?.filter(o=>o.access==="rw").length??0;return[{code:"APPROVAL_WILL_TRIGGER",tools:n,expectedPromptCount:Math.max(n.length,s||n.length)}]}function Be(t,e,r,n){let s=W(e.tools,t.allowedTools),o=(e.paths??[]).filter(l=>!G(l,r)),i=H(e.osCapabilities,t.osCapabilities),c=$(e.plugins,n),a={};return s.length&&(a.tools=s),o.length&&(a.paths=o),i.length&&(a.osCapabilities=i),c.length&&(a.plugins=c),e.network===!0&&!J(e.network,t.osCapabilities)&&(a.network=!0),a}function pe(t,e){F(t);let r=D(t.name),n=de(t,r),o=B(t).plugins.map(u=>u.name),i=W(e.tools,t.allowedTools);if(i.length)return{ok:!1,code:"ROLE_TOOL_MISMATCH",reason:`Missing tools: ${i.join(", ")}`,missing:{tools:i}};let c=(e.paths??[]).filter(u=>!G(u,n));if(c.length)return{ok:!1,code:"ROLE_PATH_SCOPE_MISMATCH",reason:`Missing path scope: ${c.map(u=>`${u.path} (${u.access})`).join(", ")}`,missing:{paths:c}};let a=H(e.osCapabilities,t.osCapabilities);if(a.length)return{ok:!1,code:"ROLE_OS_CAPABILITY_MISMATCH",reason:`Missing OS capabilities: ${a.map(u=>u.id).join(", ")}`,missing:{osCapabilities:a}};let l=$(e.plugins,o);return l.length?{ok:!1,code:"ROLE_PLUGIN_MISMATCH",reason:`Missing plugins: ${l.join(", ")}`,missing:{plugins:l}}:e.network===!0&&!J(e.network,t.osCapabilities)?{ok:!1,code:"ROLE_NETWORK_MISMATCH",reason:"Role lacks network capability (local-network)",missing:{network:!0}}:{ok:!0,roleId:t.id,executionProfile:t,fitScore:ue(t,e,n,o),warnings:je(t,e)}}function ce(t,e){return se("active",100,0).filter(r=>r.source!=="system").map(r=>{F(r);let n=de(r,D(r.name)),o=B(r).plugins.map(c=>c.name),i=pe(r,t);return{role:r,evaluation:i,fitScore:ue(r,t,n,o),missing:Be(r,t,n,o)}}).sort((r,n)=>{let s=n.fitScore-r.fitScore;if(s!==0)return s;if(e){let o=j(r.role.id,e),i=j(n.role.id,e);if(o.totalTasks>0&&i.totalTasks>0){let c=i.successRate-o.successRate;if(c!==0)return c}}return(n.role.performanceScore??0)-(r.role.performanceScore??0)})}async function ge(t){let{requirements:e,roleId:r,autoSelectRole:n,taskType:s}=t;if(!r&&!n)return{ok:!1,code:"REQUIREMENTS_MISSING",reason:"Must provide either roleId or autoSelectRole=true"};if(e){let d=De.safeParse(e);if(!d.success)return{ok:!1,code:"REQUIREMENTS_MISSING",reason:g.prettifyError(d.error)}}if(n&&!e)return{ok:!1,code:"REQUIREMENTS_MISSING",reason:"autoSelectRole requires a requirements object"};let o=e??{};if(r&&!n){let d=oe(r);if(!d||d.status!=="active")return{ok:!1,code:"ROLE_NOT_FOUND",reason:`Role not found or not active: ${r}`};let h=pe(d,o);return h.ok?(h.auditCandidates=[{roleId:d.id,name:d.name,fitScore:h.fitScore,fits:!0}],h):(e&&(h.candidates=ce(e,s).map(w=>({roleId:w.role.id,name:w.role.name,fitScore:w.fitScore,missing:w.missing}))),h)}let i=ce(e,s),c=i.filter(d=>d.evaluation.ok);if(!c.length)return{ok:!1,code:"ROLE_SELECTION_AMBIGUOUS",reason:"No role covers the requirements",candidates:i.map(d=>({roleId:d.role.id,name:d.role.name,fitScore:d.fitScore,missing:d.missing}))};let a=c[0],l=a.evaluation,u=c[1];return u&&u.fitScore===a.fitScore&&(l.tieBreakReason=`fitScore tie at ${a.fitScore}; chose ${a.role.name} by performanceScore`),l.auditCandidates=i.map(d=>({roleId:d.role.id,name:d.role.name,fitScore:d.fitScore,fits:d.evaluation.ok})),l}y();function C(t){return{id:t.id,roleId:t.role_id,taskType:t.task_type,name:t.name,promptTemplate:t.prompt_template,alpha:t.alpha,beta:t.beta,totalTrials:t.total_trials,avgReward:t.avg_reward??void 0,createdAt:t.created_at,updatedAt:t.updated_at??void 0}}function me(t){p().prepare(`
2
+ INSERT INTO strategies (id, role_id, task_type, name, prompt_template,
3
+ alpha, beta, total_trials, avg_reward, created_at, updated_at)
4
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
5
+ `).run(t.id,t.roleId,t.taskType,t.name,t.promptTemplate,t.alpha,t.beta,t.totalTrials,t.avgReward??null,t.createdAt,t.updatedAt??null)}function fe(t){let r=p().prepare("SELECT * FROM strategies WHERE id = ?").get(t);return r?C(r):void 0}function dt(t=100){return p().prepare("SELECT * FROM strategies ORDER BY created_at LIMIT ?").all(t).map(C)}function ut(t){return p().prepare("SELECT * FROM strategies WHERE role_id = ? ORDER BY created_at").all(t).map(C)}function S(t,e){return p().prepare("SELECT * FROM strategies WHERE role_id = ? AND task_type = ? ORDER BY created_at").all(t,e).map(C)}function he(t,e){p().prepare(`
6
+ UPDATE strategies
7
+ SET alpha = alpha + ?,
8
+ beta = beta + ?,
9
+ total_trials = total_trials + 1,
10
+ avg_reward = CASE
11
+ WHEN total_trials = 0 THEN ?
12
+ ELSE (avg_reward * total_trials + ?) / (total_trials + 1)
13
+ END,
14
+ updated_at = ?
15
+ WHERE id = ?
16
+ `).run(e,1-e,e,e,Date.now(),t)}y();function be(t){return{id:t.id,name:t.name,description:t.description??void 0,roleId:t.role,metricType:t.metric_type,targetValue:t.target_value,currentValue:t.current_value,deadline:t.deadline,budgetUsd:t.budget_usd,status:t.status,createdAt:t.created_at,updatedAt:t.updated_at??void 0,sourceSessionId:t.source_session_id??void 0,deliverTo:t.deliver_to?JSON.parse(t.deliver_to):void 0,reportTo:t.report_to?JSON.parse(t.report_to):void 0}}function mt(t){p().prepare(`
17
+ INSERT INTO goals (id, name, description, role, metric_type, target_value,
18
+ current_value, deadline, budget_usd, status, created_at, updated_at,
19
+ source_session_id, deliver_to, report_to)
20
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
21
+ `).run(t.id,t.name,t.description??null,t.roleId,t.metricType,t.targetValue,t.currentValue,t.deadline,t.budgetUsd,t.status,t.createdAt,t.updatedAt??null,t.sourceSessionId??null,t.deliverTo?JSON.stringify(t.deliverTo):null,t.reportTo?JSON.stringify(t.reportTo):null)}function Se(t){let r=p().prepare("SELECT * FROM goals WHERE id = ?").get(t);return r?be(r):void 0}function ft(t,e){let r=p(),n=[],s=[],o={name:"name",description:"description",roleId:"role",metricType:"metric_type",targetValue:"target_value",currentValue:"current_value",deadline:"deadline",budgetUsd:"budget_usd",status:"status",updatedAt:"updated_at",sourceSessionId:"source_session_id"};for(let[i,c]of Object.entries(o))i in e&&(n.push(`${c} = ?`),s.push(e[i]??null));"deliverTo"in e&&(n.push("deliver_to = ?"),s.push(JSON.stringify(e.deliverTo))),"reportTo"in e&&(n.push("report_to = ?"),s.push(JSON.stringify(e.reportTo))),n.length!==0&&(s.push(t),r.prepare(`UPDATE goals SET ${n.join(", ")} WHERE id = ?`).run(...s))}function ht(t,e=100,r=0){let n=p(),s="SELECT * FROM goals",o=[];return t&&(s+=" WHERE status = ?",o.push(t)),s+=" ORDER BY created_at DESC LIMIT ? OFFSET ?",o.push(e,r),n.prepare(s).all(...o).map(be)}function bt(t){p().prepare("DELETE FROM goals WHERE id = ?").run(t)}var x=class{static collect(e,r){let n=b(e);if(!n)return this.emptyMetrics(e,r);let s=re(e,500,0),o=n.completedAt&&n.startedAt?n.completedAt-n.startedAt:0,i=new Set,c=0,a=0;for(let u of s)u.type==="tool_call"&&u.toolName&&i.add(u.toolName),u.type==="error"&&c++,u.type==="approval_request"&&a++;let l={taskId:e,goalId:r,timestamp:Date.now(),durationMs:o,costUsd:n.costUsd??0,turns:n.numTurns??0,toolCount:i.size,errorCount:c,approvalCount:a,rawScore:0,isComplete:n.status==="completed"};return l.rawScore=this.computeRawScore(l),l}static computeRawScore(e){let n=1-Math.min(e.durationMs/6e5,1),o=1-Math.min(e.costUsd/5,1),c=1-Math.min(e.turns/50,1),a;e.toolCount>=3&&e.toolCount<=15?a=1:e.toolCount<3?a=e.toolCount/3:a=Math.max(0,1-(e.toolCount-15)/15);let l=e.errorCount===0?1:Math.max(0,1-e.errorCount*.2),u=Math.min(1,.5+e.approvalCount*.25);return .3*n+.2*o+.2*c+.1*a+.15*l+.05*u}static cache=new Map;static persist(e){this.cache.set(e.taskId,e)}static getCached(e){return this.cache.get(e)}static clearCache(){this.cache.clear()}static emptyMetrics(e,r){return{taskId:e,goalId:r,timestamp:Date.now(),durationMs:0,costUsd:0,turns:0,toolCount:0,errorCount:0,approvalCount:0,rawScore:0,isComplete:!1}}};y();function Ue(t){return{id:t.id,strategyId:t.strategy_id,goalId:t.goal_id,taskId:t.task_id??void 0,reward:t.reward??void 0,metricL2Score:t.metric_l2_score??void 0,metricL3Score:t.metric_l3_score??void 0,context:t.context??void 0,completedAt:t.completed_at}}function Re(t){p().prepare(`
22
+ INSERT INTO trials (id, strategy_id, goal_id, task_id, reward,
23
+ metric_l2_score, metric_l3_score, context, completed_at)
24
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
25
+ `).run(t.id,t.strategyId,t.goalId,t.taskId??null,t.reward??null,t.metricL2Score??null,t.metricL3Score??null,t.context??null,t.completedAt)}function Te(t,e=100){return p().prepare("SELECT * FROM trials WHERE goal_id = ? ORDER BY completed_at DESC LIMIT ?").all(t,e).map(Ue)}var A=class{static collect(e){let r=Se(e);if(!r)return this.emptyMetrics(e);let n=Date.now(),s=r.targetValue>0?Math.min(r.currentValue/r.targetValue,1):0,o=Math.max(0,(r.deadline-n)/(1e3*60*60*24)),i=this.calculateBudgetSpent(e),c=r.budgetUsd>0?Math.max(0,1-i/r.budgetUsd):1,a=this.calculateExpectedCompletion(r),l={goalId:e,metricType:r.metricType,targetValue:r.targetValue,currentValue:r.currentValue,progressPct:s,deadlineRemainingDays:o,budgetRemainingPct:c,expectedCompletionPct:a,rawScore:0};return l.rawScore=this.computeRawScore(l),l}static computeRawScore(e){let r=Math.min(e.progressPct,1),n;e.expectedCompletionPct>=1?n=1:e.expectedCompletionPct>=.8?n=.5+(e.expectedCompletionPct-.8)*2.5:n=e.expectedCompletionPct*.625;let s=e.budgetRemainingPct;return .5*r+.3*n+.2*s}static calculateExpectedCompletion(e){let r=Date.now(),n=e.deadline-e.createdAt,s=r-e.createdAt;if(n<=0)return 0;let o=s/n;if(o<.1)return .5;let i=e.targetValue>0?e.currentValue/e.targetValue:0;return o>0?i/o:0}static calculateBudgetSpent(e){let r=Te(e,1e3),n=0,s=new Set;for(let o of r)if(o.taskId&&!s.has(o.taskId)){s.add(o.taskId);let i=b(o.taskId);i?.costUsd&&(n+=i.costUsd)}return n}static emptyMetrics(e){return{goalId:e,metricType:"",targetValue:0,currentValue:0,progressPct:0,deadlineRemainingDays:0,budgetRemainingPct:0,expectedCompletionPct:0,rawScore:0}}};ee();var Ge=L("agent"),M=class{static cache=new Map;static CACHE_TTL=1440*60*1e3;static async callClaude(e){let s=(await ie(e,'You are an AI quality evaluator. Respond with JSON: {"score": 0-1, "confidence": 0-1, "reasoning": "..."}')).match(/\{[\s\S]*\}/);if(!s)throw new Error("Failed to parse LLM Judge response as JSON");let o=JSON.parse(s[0]);return{score:Math.max(0,Math.min(1,o.score??0)),confidence:Math.max(.3,Math.min(.95,o.confidence??.5)),reasoning:o.reasoning??"No reasoning provided"}}static async evaluate(e,r){let n=`${e}:${r}`,s=this.cache.get(n);if(s&&Date.now()-s.evaluatedAt<this.CACHE_TTL)return s;let o=b(e);if(!o){let d={taskId:e,criteria:r,score:0,confidence:.3,reasoning:"Task not found",evaluatedAt:Date.now()};return this.cache.set(n,d),d}let i=this.getPromptTemplate(o.prompt??"",o.result??o.error??"",r),c,a,l;try{let d=await this.callClaude(i);c=d.score,a=d.confidence,l=d.reasoning}catch(d){Ge.warn({error:d,taskId:e},"LLM Judge Claude API call failed, using heuristic fallback"),o.status==="failed"?(c=.1,a=.6,l=`Task failed: ${o.error??"unknown error"} (heuristic fallback)`):o.status==="completed"&&o.result?(c=.7,a=.5,l="Task completed with result (heuristic fallback due to API error)"):o.status==="completed"?(c=.5,a=.4,l="Task completed without explicit result (heuristic fallback)"):(c=.3,a=.3,l=`Task in status: ${o.status} (heuristic fallback)`)}let u={taskId:e,criteria:r,score:c,confidence:a,reasoning:l,evaluatedAt:Date.now()};return this.cache.set(n,u),u}static shouldUseObjective(e){let r=b(e);return r?r.status==="completed"&&r.costUsd!==void 0&&r.numTurns!==void 0:!1}static clearCache(){this.cache.clear()}static getPromptTemplate(e,r,n){return`You are an expert evaluator. Evaluate the following task result against these criteria:
26
+
27
+ Task: ${e}
28
+ Result: ${r}
29
+ Criteria: ${n}
30
+
31
+ Provide:
32
+ 1. Score (0-1): How well did the task meet the criteria?
33
+ 2. Confidence (0-1): How confident are you in this evaluation?
34
+ 3. Reasoning: Brief explanation of your scoring
35
+
36
+ Respond in JSON: {"score": number, "confidence": number, "reasoning": "string"}`}};y();function We(t){return{id:t.id,goalId:t.goal_id,level:t.level,parentId:t.parent_id??void 0,name:t.name,description:t.description??void 0,weight:t.weight,calibrationFactor:t.calibration_factor,createdAt:t.created_at}}function Ot(t){p().prepare(`
37
+ INSERT INTO metric_tree (id, goal_id, level, parent_id, name, description,
38
+ weight, calibration_factor, created_at)
39
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
40
+ `).run(t.id,t.goalId,t.level,t.parentId??null,t.name,t.description??null,t.weight,t.calibrationFactor,t.createdAt)}function we(t){return p().prepare("SELECT * FROM metric_tree WHERE goal_id = ? ORDER BY level, created_at").all(t).map(We)}var He={L0:.2,L1:.15,L2:.35,L3:.3},I=class t{goalId;nodes;children;constructor(e,r){this.goalId=e,this.nodes=new Map(r.map(n=>[n.id,n])),this.children=new Map;for(let n of r){let s=n.parentId,o=this.children.get(s)??[];o.push(n),this.children.set(s,o)}this.validateAcyclicity()}validateAcyclicity(){for(let e of this.nodes.values()){if(e.parentId&&!this.nodes.has(e.parentId))continue;let r=new Set,n=e.id;for(;n;){if(r.has(n))throw new Error(`Cycle detected in metric tree at node ${n}`);r.add(n),n=this.nodes.get(n)?.parentId}}}static buildFromGoal(e){let r=we(e);return new t(e,r)}static fromNodes(e,r){return new t(e,r)}queryPath(e){let r=[];for(let n of this.nodes.values())n.level===e&&r.push(n);return r.sort((n,s)=>s.weight-n.weight)}aggregateScores(e,r){let n=this.queryPath(e);if(n.length===0)return 0;let s=0,o=0;for(let i of n){let c=r.get(i.id)??0,a=i.weight*i.calibrationFactor;s+=c*a,o+=a}return o>0?s/o:0}getWeightedScore(e){let r=0;for(let[n,s]of Object.entries(He)){let o=this.aggregateScores(n,e);r+=o*s}return Math.max(0,Math.min(1,r))}getNodeCount(){return this.nodes.size}getChildren(e){return this.children.get(e)??[]}};ee();var Wt=L("agent");function _e(t,e){let r=Date.now(),n=I.buildFromGoal(t),s=new Map,o=A.collect(t);for(let a of n.queryPath("L0"))s.set(a.id,o.rawScore);let i=$e(n);if(e){let a=x.collect(e,t);if(a.isComplete){for(let u of n.queryPath("L3"))s.set(u.id,a.rawScore);let l=n.getNodeCount()>0?n.getWeightedScore(s):Math.max(0,Math.min(1,a.rawScore*.65+o.rawScore*.35));return{goalId:t,taskId:e,reward:l,breakdown:{L0:o.rawScore,L1:0,L2:0,L3:a.rawScore},calibrationFactors:i,source:"objective",confidence:.9,computedAt:r}}}if(e&&!M.shouldUseObjective(e)){let l=M.evaluate(e,"general_quality"),u=o.rawScore*.5+.5*.5;return{goalId:t,taskId:e,reward:o.rawScore,breakdown:{L0:o.rawScore,L1:0,L2:0,L3:0,llmJudge:.5},calibrationFactors:i,source:"llm_judge",confidence:.4,computedAt:r}}let c=n.getNodeCount()>0?n.getWeightedScore(s):o.rawScore;return{goalId:t,reward:c,breakdown:{L0:o.rawScore,L1:0,L2:0,L3:0},calibrationFactors:i,source:"fallback",confidence:.3,computedAt:r}}function $e(t){let e={L0:1,L1:1,L2:1,L3:1};for(let r of["L0","L1","L2","L3"]){let n=t.queryPath(r);n.length>0&&(e[r]=n[0].calibrationFactor)}return e}import{v4 as ve}from"uuid";var E=class{static sampleBeta(e,r){let n=this.sampleGamma(e,1),s=this.sampleGamma(r,1);return n/(n+s)}static sampleGamma(e,r){if(e<1)return this.sampleGamma(e+1,r)*Math.pow(Math.random(),1/e);let n=e-1/3,s=1/Math.sqrt(9*n);for(;;){let o,i;do o=this.randn(),i=1+s*o;while(i<=0);i=i*i*i;let c=Math.random();if(c<1-.0331*o*o*o*o||Math.log(c)<.5*o*o+n*(1-i+Math.log(i)))return n*i/r}}static randn(){let e=Math.random(),r=Math.random();return Math.sqrt(-2*Math.log(e))*Math.cos(2*Math.PI*r)}static sample(e){if(e.length===0)return null;let r=null,n=-1;for(let s of e){let o=this.sampleBeta(s.alpha,s.beta);o>n&&(n=o,r=s)}return r}static getProbabilities(e,r=1e4){let n=new Map;for(let o=0;o<r;o++){let i=this.sample(e);i&&n.set(i.id,(n.get(i.id)||0)+1)}let s=new Map;for(let[o,i]of n)s.set(o,i/r);return s}};var Je=5,V=20,ye=.5,O=class{static selectStrategy(e,r){let n=S(e,r);return E.sample(n)}static recordTrial(e,r,n,s,o,i,c){he(e,s),Re({id:ve(),strategyId:e,goalId:r,taskId:n,reward:s,metricL2Score:o,metricL3Score:i,context:c,completedAt:Date.now()})}static getStrategies(e,r){return S(e,r)}static getStrategyById(e){return fe(e)}static getPopulationStats(e,r){let n=S(e,r);if(n.length===0)return{count:0,avgTrials:0,avgReward:0,minTrials:0,maxTrials:0};let o=n.reduce((a,l)=>a+l.totalTrials,0)/n.length,i=n.filter(a=>a.avgReward!==void 0).map(a=>a.avgReward),c=i.length>0?i.reduce((a,l)=>a+l,0)/i.length:0;return{count:n.length,avgTrials:o,avgReward:c,minTrials:Math.min(...n.map(a=>a.totalTrials)),maxTrials:Math.max(...n.map(a=>a.totalTrials))}}static shouldEvolve(e,r){let n=this.getPopulationStats(e,r);return n.count<Je?!0:n.count<V&&n.maxTrials>0}static addStrategy(e,r,n,s){if(S(e,r).length>=V)throw new Error(`Strategy population at maximum (${V}) for ${e}/${r}`);let i={id:`strat-${ve().slice(0,8)}`,roleId:e,taskType:r,name:n,promptTemplate:s,alpha:ye,beta:ye,totalTrials:0,createdAt:Date.now()};return me(i),i}static getTopStrategies(e,r,n=3){let o=S(e,r).filter(i=>i.totalTrials>0);return o.sort((i,c)=>(c.avgReward??0)-(i.avgReward??0)),o.slice(0,n)}static getSamplingProbabilities(e,r){let n=S(e,r);return E.getProbabilities(n)}static evaluateAndRecord(e,r,n,s,o,i){let c=_e(r,n);return this.recordTrial(e,r,n,c.reward,s,o,i),c.reward}};import{v4 as qe}from"uuid";y();import{v4 as Ve}from"uuid";function Me(t){p().prepare(`
41
+ INSERT INTO manager_decisions
42
+ (id, task_id, role_id, decision_type, requirements_json, fit_score, candidates_json, tie_break_reason, created_at)
43
+ VALUES (?, ?, ?, 'admission', ?, ?, ?, ?, ?)
44
+ `).run(Ve(),t.taskId,t.chosenRoleId,JSON.stringify(t.requirements),t.fitScore,JSON.stringify(t.candidates),t.tieBreakReason??null,Date.now())}function Ye(t){let e=t.toLowerCase(),r={coding:["code","implement","fix","debug","refactor","build"],analysis:["analyze","data","report","statistics","investigate"],content:["write","translate","summarize","content","draft"],review:["review","check","audit","evaluate","assess"],admin:["config","permission","deploy","manage"]};for(let[n,s]of Object.entries(r))if(s.some(o=>e.includes(o)))return n;return"general"}async function ar(t){let{prompt:e,roleId:r,requirements:n,autoSelectRole:s,deliverTo:o,reportTo:i,toolOverrides:c,config:a,sourceSessionId:l,parentId:u,templateId:d,stepId:h,traceId:w}=t,P;try{P=Q()}catch{P=Z}let _=qe(),Ee=Ye(e),f=await ge({taskId:_,requirements:n,roleId:r,autoSelectRole:s});if(!f.ok)return{ok:!1,code:f.code,reason:f.reason,requirements:n,missing:f.missing,candidates:f.candidates};let{executionProfile:R}=f,k=f.roleId,Y,K=e,N=O.selectStrategy(k,Ee);N?.promptTemplate&&(K=`${N.promptTemplate}
45
+
46
+ ## Task
47
+ ${e}`,Y=N.id);let m=P.defaults,T={allowedTools:R.allowedTools??[],disallowedTools:R.disallowedTools??[],approvalRequired:R.approvalRequired??[],maxBudgetUsd:R.maxBudgetUsd??m.maxBudgetUsd,plugins:[]},v={allowedTools:Ke(T.allowedTools,m.allowedTools),disallowedTools:q(T.disallowedTools,m.disallowedTools),approvalRequired:q(T.approvalRequired,m.approvalRequired),maxBudgetUsd:T.maxBudgetUsd>0?Math.min(T.maxBudgetUsd,m.maxBudgetUsd):m.maxBudgetUsd,plugins:q(T.plugins,m.plugins??[])},z=v.allowedTools;c?.allowedTools&&(z=c.allowedTools);let ke={timeout:a?.timeout??m.timeout,approvalRequired:v.approvalRequired,approvalTimeout:a?.approvalTimeout??m.approvalTimeout,allowedTools:z,disallowedTools:c?.disallowedTools??v.disallowedTools,maxTurns:a?.maxTurns??m.maxTurns,maxBudgetUsd:v.maxBudgetUsd,mcpServers:a?.mcpServers,model:a?.model??R.model??m.model,effort:a?.effort??m.effort,settingSources:a?.settingSources??m.settingSources,workspacePath:a?.workspacePath,env:a?.env??m.env,claudeCodePath:m.claudeCodePath,plugins:a?.plugins??v.plugins,requirements:n,executionProfile:R},Le={id:_,status:"pending",prompt:K,originalPrompt:e,roleId:k,parentId:u,templateId:d,stepId:h,deliverTo:o,reportTo:i,config:ke,sourceSessionId:l,createdAt:Date.now(),traceId:t.traceId};te(Le),f.auditCandidates&&Me({taskId:_,chosenRoleId:k,requirements:n??{},fitScore:f.fitScore,tieBreakReason:f.tieBreakReason,candidates:f.auditCandidates});let{serverBus:Ce}=await import("./server-bus-N5LCY73J.js");return Ce.emit({type:"task_created",taskId:_}),{ok:!0,taskId:_,roleId:k,requirements:n??{},fitScore:f.fitScore,strategyId:Y,warnings:f.warnings}}function Ke(t,e){return t?.length?e?.length?t.filter(r=>e.includes(r)):t:e??[]}function q(t=[],e=[]){let r=new Set(t);for(let n of e)r.add(n);return[...r]}export{De as a,de as b,G as c,je as d,ce as e,ge as f,dt as g,ut as h,mt as i,Se as j,ft as k,ht as l,bt as m,Ot as n,_e as o,O as p,ar as q};
@@ -1,4 +1,4 @@
1
- import{a as l}from"./chunk-SWP2JC54.js";import{d as f,k as p,m as g,n as M,o as h,q as b}from"./chunk-X5V4VMET.js";async function S(t,o,i={}){let s=i.topK??10,c=i.hybridConfig??h,n;try{n=await l(o)}catch{}let a=n??new Float32Array(384),m=b(t,a,o,s*2,c,{excludeSuperseded:!0}),d=t?M(t):p,y=m.map(({node:e,combinedRelevance:u})=>{let C=Math.min(.3,(e.retrievedCount??0)*.05),x=g(e.createdAt,u,e.importance,d)+C;return{...e,score:x}});y.sort((e,u)=>u.score-e.score);let r=y.slice(0,s);for(let e of r)f(e.id);return r}async function R(t,o,i=5,s=2e3){try{let{estimateTokens:c}=await import("./token-estimator-HMPVGDCN.js"),n=await S(o,t,{topK:i});if(n.length===0)return"";let a=[],m=0,d=c(`[Memory Context \u2014 retrieved from prior interactions]
1
+ import{a as l}from"./chunk-UIMIXDAF.js";import{d as f,k as p,m as g,n as M,o as h,q as b}from"./chunk-FP42MZDK.js";async function S(t,o,i={}){let s=i.topK??10,c=i.hybridConfig??h,n;try{n=await l(o)}catch{}let a=n??new Float32Array(384),m=b(t,a,o,s*2,c,{excludeSuperseded:!0}),d=t?M(t):p,y=m.map(({node:e,combinedRelevance:u})=>{let C=Math.min(.3,(e.retrievedCount??0)*.05),x=g(e.createdAt,u,e.importance,d)+C;return{...e,score:x}});y.sort((e,u)=>u.score-e.score);let r=y.slice(0,s);for(let e of r)f(e.id);return r}async function R(t,o,i=5,s=2e3){try{let{estimateTokens:c}=await import("./token-estimator-HMPVGDCN.js"),n=await S(o,t,{topK:i});if(n.length===0)return"";let a=[],m=0,d=c(`[Memory Context \u2014 retrieved from prior interactions]
2
2
 
3
3
  [User Request]
4
4
  `);for(let r of n){let e=c(`- [${r.tier??"episodic"}] ${r.content}
@@ -1,4 +1,4 @@
1
- import{f as R,j as z}from"./chunk-RMGBR3XZ.js";import{c as _,e as T,f}from"./chunk-2BXTT4P2.js";import{k as y,l as S,m as c,n as A,o as x,r as H}from"./chunk-U2LBBBWO.js";import{c as B,e as U,f as Y}from"./chunk-FCV2DPZQ.js";var O={};U(O,{seedAdamAutomatorSkills:()=>K});async function K(t){let{ensureRoleWorkspace:r}=await import("./role-workspace-ISGPO25D.js"),{getRole:e}=await import("./roles-WNKRM6FD.js"),{mkdir:a,readFile:n,writeFile:o,access:s}=await import("fs/promises"),{join:l}=await import("path"),d=e(t);if(!d)throw new Error(`Role '${t}' not found`);let u=r(d),m=l(u,".claude","skills");await a(m,{recursive:!0});let i=[{name:"aggregate_feature",description:"Aggregate a feature value over a window",inputs:[{name:"feature_name",desc:"Name of the feature to aggregate"},{name:"aggregation",desc:"Aggregation type: sum | avg | count | latest"},{name:"window_days",desc:"Number of days to look back"},{name:"field",desc:"Event payload field to aggregate"}],body:"Query events via sqlite3, compute aggregation, print numeric result."},{name:"check_threshold",description:"Compare a value vs threshold, emit breach if exceeded",inputs:[{name:"feature",desc:"Feature value (number)"},{name:"operator",desc:"Comparison operator: gt | gte | lt | lte | eq"},{name:"threshold",desc:"Threshold value"},{name:"on_breach_type",desc:"Event type to emit on breach"},{name:"on_breach_payload",desc:"JSON payload for breach event"}],body:"Read feature value, compare against threshold using the operator. On breach, emit new event via emit_event Skill."},{name:"query_events",description:"Range-query events table",inputs:[{name:"type_pattern",desc:"Event type pattern (e.g. 'scheduler.tick')"},{name:"window",desc:"Lookback window in hours"},{name:"limit",desc:"Maximum number of events to return"}],body:"sqlite3 parameterized query against the events table, returning matching rows as JSON."},{name:"query_state",description:"Read latest state_snapshot (not yet available)",inputs:[{name:"select",desc:"Dot-notation path to select (e.g. 'goals.active')"}],body:`Returns { state: null, available: false } \u2014 state_snapshot table not yet built (deferred to Phase 2).
1
+ import{f as R,j as z}from"./chunk-MC2R5WMN.js";import{q as _,s as T,t as f}from"./chunk-F44QHTMI.js";import{k as y,l as S,m as c,n as A,o as x,r as H}from"./chunk-OPCPSPZ2.js";import{c as B,e as U,f as Y}from"./chunk-FCV2DPZQ.js";var O={};U(O,{seedAdamAutomatorSkills:()=>K});async function K(t){let{ensureRoleWorkspace:r}=await import("./role-workspace-IHQZS56U.js"),{getRole:e}=await import("./roles-DLCEQ7V7.js"),{mkdir:a,readFile:n,writeFile:o,access:s}=await import("fs/promises"),{join:l}=await import("path"),d=e(t);if(!d)throw new Error(`Role '${t}' not found`);let u=r(d),m=l(u,".claude","skills");await a(m,{recursive:!0});let i=[{name:"aggregate_feature",description:"Aggregate a feature value over a window",inputs:[{name:"feature_name",desc:"Name of the feature to aggregate"},{name:"aggregation",desc:"Aggregation type: sum | avg | count | latest"},{name:"window_days",desc:"Number of days to look back"},{name:"field",desc:"Event payload field to aggregate"}],body:"Query events via sqlite3, compute aggregation, print numeric result."},{name:"check_threshold",description:"Compare a value vs threshold, emit breach if exceeded",inputs:[{name:"feature",desc:"Feature value (number)"},{name:"operator",desc:"Comparison operator: gt | gte | lt | lte | eq"},{name:"threshold",desc:"Threshold value"},{name:"on_breach_type",desc:"Event type to emit on breach"},{name:"on_breach_payload",desc:"JSON payload for breach event"}],body:"Read feature value, compare against threshold using the operator. On breach, emit new event via emit_event Skill."},{name:"query_events",description:"Range-query events table",inputs:[{name:"type_pattern",desc:"Event type pattern (e.g. 'scheduler.tick')"},{name:"window",desc:"Lookback window in hours"},{name:"limit",desc:"Maximum number of events to return"}],body:"sqlite3 parameterized query against the events table, returning matching rows as JSON."},{name:"query_state",description:"Read latest state_snapshot (not yet available)",inputs:[{name:"select",desc:"Dot-notation path to select (e.g. 'goals.active')"}],body:`Returns { state: null, available: false } \u2014 state_snapshot table not yet built (deferred to Phase 2).
2
2
 
3
3
  When the state_snapshot table is available, this Skill will query it for the latest snapshot matching the select path and return the value.`},{name:"query_goals",description:"Read active goals (goal_graph_nodes not built)",inputs:[{name:"types",desc:"Goal type filter (e.g. 'daily|weekly')"},{name:"status",desc:"Goal status filter: active | completed | paused"}],body:`Returns { goals: [], available: false } \u2014 goal_graph_nodes table not yet built (deferred to Phase 2).
4
4
 
@@ -1,4 +1,4 @@
1
- import{b as t,d}from"./chunk-AQO6IIHV.js";d();function s(e){return{id:e.id,taskId:e.task_id,roleId:void 0,plan:JSON.parse(e.plan_json),status:e.status,approvalType:e.approval_type??void 0,deviationReport:e.deviation_report_json?JSON.parse(e.deviation_report_json):void 0,learnedRules:e.learned_rules_json?JSON.parse(e.learned_rules_json):void 0,createdAt:e.created_at,approvedAt:e.approved_at??void 0,reviewedAt:e.reviewed_at??void 0}}function p(e){t().prepare(`
1
+ import{k as t,m as d}from"./chunk-37TV7A5A.js";d();function s(e){return{id:e.id,taskId:e.task_id,roleId:void 0,plan:JSON.parse(e.plan_json),status:e.status,approvalType:e.approval_type??void 0,deviationReport:e.deviation_report_json?JSON.parse(e.deviation_report_json):void 0,learnedRules:e.learned_rules_json?JSON.parse(e.learned_rules_json):void 0,createdAt:e.created_at,approvedAt:e.approved_at??void 0,reviewedAt:e.reviewed_at??void 0}}function p(e){t().prepare(`
2
2
  INSERT INTO task_plans (id, task_id, plan_json, status, approval_type,
3
3
  deviation_report_json, learned_rules_json, created_at, approved_at, reviewed_at)
4
4
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
@@ -1,4 +1,4 @@
1
- import{c as d}from"./chunk-6JBSBSCL.js";import{b as n,d as o}from"./chunk-AQO6IIHV.js";o();function a(e){return{id:e.id,sessionId:e.session_id,role:e.role,content:e.content,source:{type:e.source_type},taskId:e.task_id??void 0,channelMessageId:e.channel_message_id??void 0,metadata:e.metadata?JSON.parse(e.metadata):void 0,createdAt:e.created_at,traceId:e.trace_id??void 0}}function g(e){n().prepare(`
1
+ import{c as d}from"./chunk-6JBSBSCL.js";import{k as n,m as o}from"./chunk-37TV7A5A.js";o();function a(e){return{id:e.id,sessionId:e.session_id,role:e.role,content:e.content,source:{type:e.source_type},taskId:e.task_id??void 0,channelMessageId:e.channel_message_id??void 0,metadata:e.metadata?JSON.parse(e.metadata):void 0,createdAt:e.created_at,traceId:e.trace_id??void 0}}function g(e){n().prepare(`
2
2
  INSERT INTO chat_messages (id, session_id, role, content, source_type, task_id,
3
3
  channel_message_id, metadata, created_at, trace_id)
4
4
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
@@ -0,0 +1,3 @@
1
+ function c(e,r,t){switch(r){case"wechat":return n(e);case"telegram":return e;case"slack":return a(e);case"email":return e;case"webhook":return JSON.stringify({result:e,taskId:t,timestamp:new Date().toISOString()});default:return n(e)}}function n(e){return e.replace(/^#{1,6}\s+/gm,"").replace(/\*\*(.+?)\*\*/g,"$1").replace(/\*(.+?)\*/g,"$1").replace(/__(.+?)__/g,"$1").replace(/_(.+?)_/g,"$1").replace(/`([^`]+)`/g,"$1").replace(/```[\s\S]*?```/g,r=>r.replace(/```\w*\n?/g,"").trim()).replace(/\[([^\]]+)\]\([^)]+\)/g,"$1").replace(/!\[([^\]]*)\]\([^)]+\)/g,"$1").replace(/\n{3,}/g,`
2
+
3
+ `).trim()}function a(e){return e.replace(/\*\*(.+?)\*\*/g,"*$1*").replace(/\[([^\]]+)\]\(([^)]+)\)/g,"<$2|$1>")}export{c as a,n as b};
@@ -0,0 +1 @@
1
+ import{e as $,j as C}from"./chunk-MC2R5WMN.js";import{e as T,i as x}from"./chunk-OPCPSPZ2.js";import{c as J,e as _}from"./chunk-FCV2DPZQ.js";var W={};_(W,{getGlobalEnabledState:()=>k,getInstalledPlugin:()=>L,getPluginManifest:()=>j,listInstalledPlugins:()=>v,listMarketplaceSources:()=>F,resolvePluginPaths:()=>A,scanDirectoryConfig:()=>w});import{existsSync as m,readFileSync as P,readdirSync as M}from"fs";import{join as d}from"path";import I from"os";function y(s){try{if(!m(s))return null;let i=P(s,"utf-8");return JSON.parse(i)}catch{return null}}function k(){return y(N())?.enabledPlugins??{}}function j(s){let i=s;function l(t,p){let a={};try{if(!m(t))return a;let u=P(t,"utf-8").replace(/^```yaml\r?\n/,"").replace(/^```\r?\n/,"");for(let f of p){let r=new RegExp(`^${f}:\\s*(.+)$`,"m"),e=u.match(r);e&&(a[f]=e[1].trim())}}catch{}return a}function o(t){try{if(!m(t))return{};let p=P(t,"utf-8"),a=p.match(/^```yaml\r?\n([\s\S]*?)\r?\n```\r?\n/);if(!a){let r={};for(let e of p.split(/\r?\n/)){let n=e.match(/^(\w+):\s*(.+)$/);n&&(r[n[1]]=n[2])}return{name:r.name,description:r.description}}let c=a[1],u={};for(let r of c.split(/\r?\n/)){let e=r.match(/^(\w+):\s*(.*)$/);if(e){let[,n,g]=e;g.trim()&&(u[n]=g.trim())}}let f=c.match(/error_patterns:\r?\n([\s\S]*?)(?=\n\w|\n$)/);if(f){let r=f[1],e=[],n={};for(let g of r.split(/\r?\n/)){let h=g.match(/^\s*-\s*pattern:\s*(.+)$/);if(h){n.pattern&&e.push(n),n={pattern:h[1].replace(/^["']|["']$/g,"")};continue}let E=g.match(/^\s*category:\s*(.+)$/);if(E){n.category=E[1].trim();continue}let R=g.match(/^\s*user_action:\s*(.+)$/);if(R){n.user_action=R[1].replace(/^["']|["']$/g,""),n.pattern&&n.category&&n.user_action&&(e.push(n),n={});continue}}n.pattern&&e.push(n),e.length>0&&(u.error_patterns=e)}return{name:u.name,description:u.description,error_patterns:u.error_patterns}}catch{}return{}}try{let t={name:"",skills:[],agents:[],mcpServers:[],hooks:[],lspServers:[]},p=d(i,".claude-plugin","plugin.json");if(m(p))try{let r=JSON.parse(P(p,"utf-8"));t.name=r.name??"",t.version=r.version,t.description=r.description,Array.isArray(r.lspServers)&&(t.lspServers=r.lspServers),Array.isArray(r.mcpServers)&&(t.mcpServers=r.mcpServers),Array.isArray(r.hooks)&&(t.hooks=r.hooks)}catch{}let a=d(i,"skills");if(m(a)){let r=M(a,{withFileTypes:!0});for(let e of r){if(!e.isDirectory()&&!e.isSymbolicLink())continue;let n=d(a,e.name,"SKILL.md"),g=o(n);g.name&&t.skills.push({name:g.name,description:g.description??"",error_patterns:g.error_patterns})}}let c=d(i,"agents");if(m(c)){let r=M(c,{withFileTypes:!0});for(let e of r){if(!e.isFile()||!e.name.endsWith(".md"))continue;let n=l(d(c,e.name),["name","description"]);n.name&&t.agents.push({name:n.name,description:n.description??""})}}let u=d(i,".mcp.json");if(m(u))try{let r=JSON.parse(P(u,"utf-8"));r.mcpServers&&typeof r.mcpServers=="object"&&(t.mcpServers=Object.keys(r.mcpServers))}catch{}let f=d(i,"hooks","hooks.json");if(m(f))try{let r=JSON.parse(P(f,"utf-8"));Array.isArray(r)&&(t.hooks=r.map(e=>typeof e=="object"&&e!==null&&"event"in e?String(e.event):String(e)))}catch{}return t}catch{return null}}function v(s){let i=y(S());if(!i?.plugins)return[];let l=k(),o=[];for(let[t,p]of Object.entries(i.plugins))if(!(!Array.isArray(p)||p.length===0))for(let a of p){let c=a.scope??"user";s?.scope&&c!==s.scope||s?.projectPath&&a.projectPath!==s.projectPath||o.push({id:t,name:t.split("@")[0],version:a.version??"",scope:c,projectPath:a.projectPath,installPath:a.installPath??d(b(),t),enabled:l[t]??a.enabled??!0,installedAt:a.installedAt??"",lastUpdated:a.lastUpdated??""})}return o}function L(s){let i=y(S());if(!i?.plugins?.[s])return null;let l=i.plugins[s];if(!Array.isArray(l)||l.length===0)return null;let o=l[0],t=k();return{id:s,name:s.split("@")[0],version:o.version??"",scope:o.scope??"user",projectPath:o.projectPath,installPath:o.installPath??d(b(),s),enabled:t[s]??o.enabled??!0,installedAt:o.installedAt??"",lastUpdated:o.lastUpdated??""}}function A(s){let i=y(S()),l=new Map;for(let o of s){let t=i?.plugins?.[o];Array.isArray(t)&&t.length>0&&l.set(o,t[0].installPath??d(b(),o))}return l}function F(){return y(O())?.marketplaces??[]}function w(s){let i=d(s,".claude","settings.json"),l=y(i);return{enabledPlugins:l?.enabledPlugins??{},mcpServers:l?.mcpServers??{},allowedTools:l?.allowedTools??[],disallowedTools:l?.disallowedTools??[]}}var b,S,O,N,D=J(()=>{"use strict";b=()=>d(I.homedir(),".claude","plugins"),S=()=>d(b(),"installed_plugins.json"),O=()=>d(b(),"known_marketplaces.json"),N=()=>d(I.homedir(),".claude","settings.json")});D();C();x();var G={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 V(s,i){let l=s.allowedTools??[],o=s.osCapabilities??[];if(l.length===0&&o.length===0&&Object.keys(s.mcpServers??{}).length===0&&(s.additionalDirectories?.length??0)===0&&(!i||i.plugins.length===0))return"No tool permissions";let t=new Map,p=[];for(let e of l){let n=G[e];if(n){let g=t.get(n.category)??[];g.push(n.label),t.set(n.category,g)}else p.push(e)}let a=[];for(let[e,n]of t)a.push(`${e} (${n.join(", ")})`);p.length>0&&a.push(p.join(", "));let c=a.join(" \xB7 "),u=e=>{c=c?`${c} \xB7 ${e}`:e},f=Object.keys(s.mcpServers??{});f.length>0&&u(`MCP: ${f.join(", ")}`);let r=s.additionalDirectories??[];if(r.length>0&&u(`Dirs: ${r.map(e=>e.path).join(", ")}`),o.length>0){let e=o.map(n=>{let g=T(n.id);return n.id==="automation"&&n.targets?.length?`${g.label} (${n.targets.join(", ")})`:g.label});u(`OS: ${e.join(", ")}`)}if(i&&i.plugins.length>0){let e=i.plugins.map(n=>{let g=[];return n.skills.length>0&&g.push(`skills: ${n.skills.map(h=>h.name).join(", ")}`),n.agents.length>0&&g.push(`agents: ${n.agents.map(h=>h.name).join(", ")}`),g.length>0?`${n.name} (${g.join("; ")})`:n.name});u(`Plugins: ${e.join(", ")}`)}return c}function U(s){let i=[],l=s.additionalDirectories??[];for(let o of l){if(!o.inheritPlugins&&!o.inheritMcp)continue;let t=w(o.path),p=Object.entries(t.enabledPlugins).filter(([,c])=>c).map(([c])=>c),a=A(p);for(let[,c]of a)i.includes(c)||i.push(c)}try{let o=$(s.name),t=v({scope:"project",projectPath:o});for(let p of t)p.installPath&&!i.includes(p.installPath)&&i.push(p.installPath)}catch{}return i}function X(s){let i=U(s),l=[];for(let o of i){let t=j(o);t&&l.push({name:t.name||o.split("/").pop()||"unknown",description:t.description,skills:t.skills,agents:t.agents,mcpServers:t.mcpServers,hooks:t.hooks})}return{plugins:l}}export{k as a,j as b,v as c,L as d,F as e,w as f,W as g,D as h,V as i,U as j,X as k};
@@ -0,0 +1,12 @@
1
+ import{a as N}from"./chunk-45I2IYIE.js";import{a as L}from"./chunk-UIMIXDAF.js";import{a as T,b as E,c as $,j as B}from"./chunk-FP42MZDK.js";import{b as k}from"./chunk-F44QHTMI.js";import{d as C,h as P,i as le}from"./chunk-OPCPSPZ2.js";import{k as _,m as de}from"./chunk-37TV7A5A.js";import{c as I,h as se}from"./chunk-RLNMJ2QY.js";import{tool as p}from"@anthropic-ai/claude-agent-sdk";import{z as a}from"zod";import{v4 as ce}from"uuid";function l(t){return{content:[{type:"text",text:JSON.stringify(t)}]}}var pe={query:a.string().describe("Search query for memory retrieval"),roleId:k.optional().describe("Role ID to scope search (omit for cross-role)"),topK:a.number().optional().describe("Max results to return (default 5)")},me={query:a.string().describe("Search query for memory retrieval"),topK:a.number().optional().describe("Max results to return (default 5)")},ue={id:a.string().optional().describe("Memory ID to update. Omit to create new."),roleId:k.describe("Role ID to save memory under"),content:a.string().describe("Memory content text"),type:a.enum(["event","thought","reflection"]).optional().describe("Memory type (default: thought)"),keywords:a.array(a.string()).optional().describe("Keywords for BM25 search"),importance:a.number().min(1).max(5).optional().describe("Importance 1-5 (default: 3)"),tier:a.enum(["working","episodic","semantic"]).optional().describe("Memory tier (default: episodic)")},fe={id:a.string().optional().describe("Memory ID to update. Omit to create new."),content:a.string().describe("Memory content text"),type:a.enum(["event","thought","reflection"]).optional().describe("Memory type (default: thought)"),keywords:a.array(a.string()).optional().describe("Keywords for BM25 search"),importance:a.number().min(1).max(5).optional().describe("Importance 1-5 (default: 3)"),tier:a.enum(["working","episodic","semantic"]).optional().describe("Memory tier (default: episodic)")},j={id:a.string().describe("Memory ID to delete")};async function F(t,e){let r=t??e.roleId,n=e.topK??5,i=await N(r,e.query,{topK:n});return l({results:i.map(o=>({id:o.id,type:o.type,content:o.content,keywords:o.keywords,importance:o.importance,score:o.score}))})}async function K(t,e){let r=t??e.roleId;if(!r)return l({error:"roleId is required"});let n,i=!0;try{n=await L(e.content)}catch{i=!1}if(e.id){if(!E(e.id))return l({error:`Memory ${e.id} not found`});let v=$(e.id,{content:e.content,embedding:n,keywords:e.keywords,importance:e.importance,type:e.type});return l({id:e.id,action:"updated",success:v,embeddingUpdated:i})}let o=`mem-${ce().slice(0,8)}`,s=Date.now();return T({id:o,roleId:r,type:e.type??"thought",content:e.content,embedding:n,keywords:e.keywords??[],importance:e.importance??3,sourceType:"manual",createdAt:s,lastAccessed:s,retrievedCount:0,tier:e.tier??"episodic"}),l({id:o,action:"created",success:!0,embeddingUpdated:i})}async function U(t,e){if(t){let r=E(e.id);if(!r)return l({error:`Memory ${e.id} not found`});if(r.roleId!==t)return l({error:`Memory ${e.id} does not belong to this role`})}return B(e.id),l({id:e.id,deleted:!0})}function He(t){return t?[p("search_memories","Search agent memory using hybrid vector + keyword search. Returns scored memories ranked by relevance, recency, and importance.",me,async e=>F(t,e)),p("save_memory","Create a new memory or update an existing one. Provide 'id' to update, omit to create. Embedding is auto-generated from content.",fe,async e=>K(t,e)),p("delete_memory","Delete a memory by ID.",j,async e=>U(t,e))]:[p("search_memories","Search agent memory using hybrid vector + keyword search. Returns scored memories ranked by relevance, recency, and importance.",pe,async e=>F(void 0,e)),p("save_memory","Create a new memory or update an existing one. Provide 'id' to update, omit to create. Embedding is auto-generated from content.",ue,async e=>K(void 0,e)),p("delete_memory","Delete a memory by ID.",j,async e=>U(void 0,e))]}import{accessSync as H,constants as G}from"fs";import{accessSync as ye,constants as be,existsSync as q,realpathSync as he}from"fs";import{join as A}from"path";import{spawn as ge}from"child_process";import{execFileSync as ve}from"child_process";var u=null;function f(){if(u)return u;let t=typeof import.meta.dirname=="string"?import.meta.dirname:__dirname??".",e=A(t,"landlock-exec","landlock-exec");if(q(e))return u=e,e;let r=process.env.PATH?.split(":").find(n=>q(A(n,"landlock-exec")));return r?(u=A(r,"landlock-exec"),u):e}var y=class{platform="landlock";async isAvailable(){if(process.platform!=="linux")return!1;try{ye(f(),be.X_OK)}catch{return!1}try{return ve(f(),["--check"],{timeout:5e3,stdio:["ignore","pipe","pipe"]}),!0}catch{return!1}}spawn(e){let r=e.command??"node",n=e.args??[],i=[];for(let o of e.visiblePaths??[]){let s=o.mode==="rw"?"--rw":"--ro",d;try{d=he(o.path)}catch{d=o.path}i.push(s,d),d!==o.path&&i.push(s,o.path)}return i.push("--",r,...n),ge(f(),i,{cwd:e.cwd,env:e.env,stdio:"pipe",signal:e.signal})}};function V(){if(process.platform==="linux")try{return H(f(),G.X_OK),"landlock"}catch{return"none"}if(process.platform==="darwin")try{return H("/usr/bin/sandbox-exec",G.X_OK),"sandbox-exec"}catch{return"none"}return"none"}se();import{spawn as Pe}from"child_process";import{readFileSync as Y,writeFileSync as ke,mkdtempSync as Ee,realpathSync as O,rmSync as Ae}from"fs";import{join as c}from"path";import{tmpdir as Oe}from"os";le();var xe=["com.apple.Accessibility","com.apple.CoreGraphics","com.apple.SpeakSelection","com.apple.TimeMachine","com.apple.assistant","com.apple.assistant.backedup","com.apple.assistant.support"],Se=["com.apple.coreservices.appleevents"];function we(t){if(!C.test(t))throw new Error(`Invalid bundle id for SBPL appleevent destination: ${t}`)}function X(t,e){return P(t)?.find(r=>r.id===e)}function Re(t){if(!t)return"";let e=["","; ===== Role OS capability: Automation =====","(allow lsopen)","(allow mach-lookup",...Se.map(n=>` (global-name "${n}")`),")"],r=t.targets??[];for(let n of r)we(n),e.push(`(allow appleevent-send (appleevent-destination "${n}"))`);return e.join(`
2
+ `)}function _e(t){return t?["","; ===== Role OS capability: Accessibility =====","(allow signal)","(allow mach-priv-host-port)","(allow mach-task-name)",'(allow mach-lookup (local-name "com.apple.axserver"))',"(allow user-preference-read",...xe.map(r=>` (preference-domain "${r}")`),")"].join(`
3
+ `):""}function J(t){let e=P(t);return e?.length?[Re(X(e,"automation")),_e(X(e,"accessibility"))].filter(Boolean).join(`
4
+ `):""}var W=I("sandbox-macos"),z="/usr/bin/sandbox-exec";function Me(){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 Y(e,"utf-8"),e}catch{}return t[t.length-1]}var De=Me();function b(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 Ie(t){let e=[`
5
+ ; ===== Per-Role writable paths =====`];for(let r of t){if(r.mode!=="rw")continue;let n;try{n=O(r.path)}catch{n=r.path}b(n),e.push(`(allow file-write* (subpath "${n}"))`),n!==r.path&&(b(r.path),e.push(`(allow file-write* (subpath "${r.path}"))`))}return e.join(`
6
+ `)}function Ce(t){if(!t.length)return"";let e=[`
7
+ ; ===== Global read blacklist (deniedReadPaths) =====`];for(let r of t){let n;try{n=O(r)}catch{n=r}try{b(n),e.push(`(deny file-read-data (subpath "${n}"))`),e.push(`(deny file-read-metadata (subpath "${n}"))`),n!==r&&(b(r),e.push(`(deny file-read-data (subpath "${r}"))`),e.push(`(deny file-read-metadata (subpath "${r}"))`))}catch(i){W.warn({path:r,error:i.message},"Skipping deniedReadPath: invalid for SBPL")}}return e.join(`
8
+ `)}var h=class{platform="sandbox-exec";async isAvailable(){try{let{existsSync:e}=await import("fs");return e(z)}catch{return!1}}spawn(e){let{command:r,args:n,cwd:i,env:o,signal:s,visiblePaths:d,deniedReadPaths:v,osCapabilities:ee}=e,te=Y(De,"utf-8"),re=Ie(d),ne=Ce(v??[]),oe=J(ee),ae=te+re+ne+oe+`
9
+ `,x=O(Ee(c(Oe(),"adam-sandbox-"))),S=c(x,"role.sb");ke(S,ae,"utf-8");let w=x,R=o?.HOME??process.env.HOME??"/tmp",ie={...o,TMPDIR:w,CLAUDE_CODE_TMPDIR:w,CLAUDE_CONFIG_DIR:c(R,".claude")};W.debug({command:r,visiblePaths:d.length,profilePath:S},"Spawning sandboxed process");let D=Pe(z,["-f",S,"-D",`TMPDIR=${w}`,"-D",`CLAUDE_CONFIG=${c(R,".claude")}`,"-D",`HOME_CACHE=${c(R,"Library","Caches")}`,r,...n],{cwd:i,env:ie,stdio:"pipe",signal:s});return D.on("exit",()=>{try{Ae(x,{recursive:!0,force:!0})}catch{}}),D}};import{spawn as Le}from"child_process";var m=null,Q=null,g=null;function Te(){if(m)return m;let t=Q??V();return Q=t,t==="sandbox-exec"?m=new h:t==="landlock"?m=new y:m=new M(t),m}async function ut(){return g!==null||(g=await Te().isAvailable()),g}var M=class{platform;constructor(e){this.platform=e}async isAvailable(){return!1}spawn(e){let r=e.command??"node",n=e.args??[];return Le(r,n,{cwd:e.cwd,env:e.env,stdio:"pipe",signal:e.signal})}};de();function $e(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 Z={low:1,medium:2,high:3};function bt(t){_().prepare(`
10
+ INSERT INTO approval_rules (id, role_id, task_pattern, max_risk_level, created_at, created_by_task_id)
11
+ VALUES (?, ?, ?, ?, ?, ?)
12
+ `).run(t.id,t.roleId??null,t.taskPattern,t.maxRiskLevel,t.createdAt,t.createdByTaskId??null)}function ht(t,e,r){let i=_().prepare("SELECT * FROM approval_rules ORDER BY created_at DESC").all();for(let o of i)if(!(o.role_id&&o.role_id!==t)&&!(Z[r]>Z[o.max_risk_level]))try{if(new RegExp(o.task_pattern,"i").test(e))return $e(o)}catch{}}export{bt as a,ht as b,He as c,Te as d,ut as e};
@@ -0,0 +1,13 @@
1
+ import{k as n,m as d}from"./chunk-37TV7A5A.js";d();function a(e){return{id:e.id,executionId:e.execution_id,stepId:e.step_id,key:e.key,kind:e.kind,value:e.value_json?JSON.parse(e.value_json):void 0,blobPath:e.blob_path??void 0,mime:e.mime??void 0,sizeBytes:e.size_bytes,createdAt:e.created_at}}function p(e){n().prepare(`
2
+ INSERT INTO template_execution_artifacts (
3
+ id, execution_id, step_id, key, kind, value_json, blob_path, mime, size_bytes, created_at
4
+ )
5
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
6
+ `).run(e.id,e.executionId,e.stepId,e.key,e.kind,e.value!==void 0?JSON.stringify(e.value):null,e.blobPath??null,e.mime??null,e.sizeBytes,e.createdAt)}function l(e,t,i){let s=n().prepare(`
7
+ SELECT * FROM template_execution_artifacts
8
+ WHERE execution_id = ? AND step_id = ? AND key = ?
9
+ `).get(e,t,i);return s?a(s):void 0}function o(e,t){let i=n(),r="SELECT * FROM template_execution_artifacts WHERE execution_id = ?",s=[e];return t&&(r+=" AND step_id = ?",s.push(t)),r+=" ORDER BY created_at ASC",i.prepare(r).all(...s).map(a)}function E(e){let t=n(),i=o(e);return t.prepare("DELETE FROM template_execution_artifacts WHERE execution_id = ?").run(e),i}function m(e){n().prepare("DELETE FROM template_execution_artifacts WHERE id = ?").run(e)}function _(e){return n().prepare(`
10
+ SELECT id
11
+ FROM template_executions
12
+ WHERE status != 'running' AND COALESCE(completed_at, started_at) < ?
13
+ `).all(e).map(r=>r.id)}export{p as a,l as b,o as c,E as d,m as e,_ as f};