adam-agent-server 1.18.0 → 1.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/{App-SIQUVFJY.js → App-522DTURQ.js} +10 -10
  2. package/dist/approval-handler-S3NV7OPO.js +1 -0
  3. package/dist/{artifacts-MAYKOTA2.js → artifacts-NFMM3ORE.js} +1 -1
  4. package/dist/audit-diagnostics-IHU3CJYZ.js +1 -0
  5. package/dist/audit-manager-MUMEEP3C.js +1 -0
  6. package/dist/bree-engine-EEKUQA3U.js +1 -0
  7. package/dist/channels-IDBWHLLE.js +1 -0
  8. package/dist/{channels-2TWTBE6Y.js → channels-ZHCTFSDA.js} +1 -1
  9. package/dist/chat-tool-calls-4BQWZCJH.js +1 -0
  10. package/dist/{chunk-Z2APBKIT.js → chunk-2JM3URDG.js} +1 -1
  11. package/dist/{chunk-OBD4245G.js → chunk-4G4CKAXY.js} +1 -1
  12. package/dist/{chunk-2CE2WUUZ.js → chunk-4ZESWP3J.js} +1 -1
  13. package/dist/{chunk-QYI44EP6.js → chunk-4ZG4UMAK.js} +1 -1
  14. package/dist/{chunk-BE653A45.js → chunk-6GYNUTPP.js} +1 -1
  15. package/dist/{chunk-JROGEBP5.js → chunk-76MMY2XC.js} +1 -1
  16. package/dist/{chunk-BMCNQGUH.js → chunk-7QT2ZX3K.js} +1 -1
  17. package/dist/{chunk-SGLZAIVL.js → chunk-A3YUIWLK.js} +1 -1
  18. package/dist/{chunk-HL373H4P.js → chunk-AMJJ2WGU.js} +1 -1
  19. package/dist/{chunk-NUOTFUNF.js → chunk-CN5NEJXG.js} +1 -1
  20. package/dist/{chunk-O6L4UVLV.js → chunk-DFTRUOT6.js} +1 -1
  21. package/dist/{chunk-JYZTIE2J.js → chunk-DRS5NOAA.js} +1 -1
  22. package/dist/{chunk-6WQFYV3N.js → chunk-EBZCHLYS.js} +1 -1
  23. package/dist/{chunk-SKHMWKJT.js → chunk-EPLSB63A.js} +1 -1
  24. package/dist/{chunk-V2MMQ3SH.js → chunk-FN64ZULV.js} +1 -1
  25. package/dist/chunk-FQHGIY3E.js +1 -0
  26. package/dist/{chunk-NSUXJ2VA.js → chunk-GQS3ED3B.js} +1 -1
  27. package/dist/{chunk-LKGYQJMS.js → chunk-HEHST2E2.js} +1 -1
  28. package/dist/chunk-IAGTZGGV.js +32 -0
  29. package/dist/chunk-ITVCPC7G.js +1 -0
  30. package/dist/{chunk-NXGR3PRY.js → chunk-J2VSAXVU.js} +1 -1
  31. package/dist/{chunk-5G64P4KE.js → chunk-JRRNGKDK.js} +1 -1
  32. package/dist/{chunk-KS24764D.js → chunk-JVYSSJKT.js} +2 -2
  33. package/dist/chunk-JXZCQ5XW.js +1 -0
  34. package/dist/{chunk-LCD5DVS6.js → chunk-KM4EFB4N.js} +1 -1
  35. package/dist/chunk-KQMKRRYW.js +143 -0
  36. package/dist/{chunk-4JHACUZY.js → chunk-L4APYD5A.js} +1 -1
  37. package/dist/{chunk-WY5BOCQP.js → chunk-LMQPGVM7.js} +16 -16
  38. package/dist/chunk-MMVDXKYS.js +14 -0
  39. package/dist/chunk-NKS7LEA7.js +182 -0
  40. package/dist/{chunk-VWX2B6OM.js → chunk-ORFLN4BF.js} +1 -1
  41. package/dist/{chunk-2JIQT2CI.js → chunk-PO66F7UQ.js} +1 -1
  42. package/dist/{chunk-XAPJJAJQ.js → chunk-QJXV4SQE.js} +1 -1
  43. package/dist/{chunk-UCUELFCS.js → chunk-R7Q6FSV4.js} +1 -1
  44. package/dist/{chunk-47HJPIUA.js → chunk-T7EKW3B7.js} +1 -1
  45. package/dist/{chunk-JZBXLN7M.js → chunk-VOH52UDS.js} +1 -1
  46. package/dist/{chunk-HRPMRWHD.js → chunk-VZL2DGC4.js} +1 -1
  47. package/dist/{chunk-IEBAOZED.js → chunk-WDMSZS4W.js} +1 -1
  48. package/dist/{chunk-2A2TXYT3.js → chunk-WG3C43QS.js} +3 -3
  49. package/dist/{chunk-TA5PFK5C.js → chunk-YEGUFMLJ.js} +1 -1
  50. package/dist/{chunk-ZQN6JZIJ.js → chunk-ZGA52HRD.js} +1 -1
  51. package/dist/cli.js +2 -2
  52. package/dist/{config-U624HJKI.js → config-GOJLI3X2.js} +1 -1
  53. package/dist/config-Z6KFEFJO.js +1 -0
  54. package/dist/db-ROXIYW5B.js +1 -0
  55. package/dist/{delivery-log-QMQQHES4.js → delivery-log-TGJZ5HU7.js} +1 -1
  56. package/dist/engine-GN7PJPGQ.js +1 -0
  57. package/dist/{evolution-audit-XF4KZZMP.js → evolution-audit-TFJF666X.js} +1 -1
  58. package/dist/execution-tools-BQD2O25X.js +1 -0
  59. package/dist/{external-api-435WH6V3.js → external-api-DSLQDRZ2.js} +1 -1
  60. package/dist/index.js +41 -39
  61. package/dist/{learner-4CJ7BSCN.js → learner-ACBX3GI7.js} +1 -1
  62. package/dist/{memories-NJFKSOL5.js → memories-RAIR5O2F.js} +1 -1
  63. package/dist/{memory-extractor-UQI75BBK.js → memory-extractor-A6CAOFOX.js} +1 -1
  64. package/dist/{memory-gc-NTZVUGJX.js → memory-gc-W63MGSDH.js} +1 -1
  65. package/dist/memory-service-H4OFUNCF.js +1 -0
  66. package/dist/outbound-gateway-LKRQYPA2.js +1 -0
  67. package/dist/presets-FO6RSGDN.js +1 -0
  68. package/dist/{reflection-job-F4BZA2E3.js → reflection-job-XC2F7GTT.js} +1 -1
  69. package/dist/role-presets-SDA664QG.js +1 -0
  70. package/dist/role-workspace-NGJEJG3H.js +1 -0
  71. package/dist/{roles-WDMUBWQP.js → roles-LZCJ7QFS.js} +1 -1
  72. package/dist/{session-manager-XFUKWEC7.js → session-manager-PU4GH3E4.js} +1 -1
  73. package/dist/skill-registry-XKLE2LXU.js +1 -0
  74. package/dist/{task-templates-BIVCRNXA.js → task-templates-52LAC6OA.js} +1 -1
  75. package/dist/template-dispatch-PJFSWEO2.js +1 -0
  76. package/package.json +1 -1
  77. package/web/dist/assets/{ChannelDetail-D0FBZoAX.js → ChannelDetail-CSq9o5fq.js} +1 -1
  78. package/web/dist/assets/{Channels-Cztxvsa2.js → Channels-CAxTh1Bp.js} +1 -1
  79. package/web/dist/assets/Chat-PUz41HFr.js +2 -0
  80. package/web/dist/assets/{Cost-K8-4xqBe.js → Cost-BHcsPz5T.js} +1 -1
  81. package/web/dist/assets/{Dashboard-BXqFb_Vr.js → Dashboard-BT39_iWc.js} +1 -1
  82. package/web/dist/assets/{EnvVarEditor-FiiJazzp.js → EnvVarEditor-D_1d7bTJ.js} +1 -1
  83. package/web/dist/assets/{EventDefDetail-C3S1G0K8.js → EventDefDetail-jKN3gO_7.js} +1 -1
  84. package/web/dist/assets/{Events-BKxqZ9j6.js → Events-CpeHg3fh.js} +1 -1
  85. package/web/dist/assets/{Evolution-DFcSm6Rw.js → Evolution-DsWyv2_a.js} +1 -1
  86. package/web/dist/assets/{ExtensionDetail-C8aPpyLv.js → ExtensionDetail-CJHNaNii.js} +1 -1
  87. package/web/dist/assets/{Extensions-MLZk05j0.js → Extensions-Pg2vx_ZK.js} +1 -1
  88. package/web/dist/assets/{FeatureRequests-D_4XaQ7F.js → FeatureRequests-3Yl8wTNT.js} +1 -1
  89. package/web/dist/assets/{GoalDetail-DVU7c0aR.js → GoalDetail-L3T1zqqs.js} +1 -1
  90. package/web/dist/assets/{Goals-D3h4WMjU.js → Goals-B-__r-Yq.js} +1 -1
  91. package/web/dist/assets/{Logs-D5MQv6Yw.js → Logs-CMkjUkmu.js} +1 -1
  92. package/web/dist/assets/{Memories-Dls71I2i.js → Memories-Q1eKfPQ2.js} +1 -1
  93. package/web/dist/assets/{Mistakes-BZcTg0vP.js → Mistakes-BROkixt_.js} +1 -1
  94. package/web/dist/assets/{Plugins-CwCHGzI6.js → Plugins-v17MyPVe.js} +1 -1
  95. package/web/dist/assets/{RoleDetail-B2M6ALSl.js → RoleDetail-DCGFBLP1.js} +2 -2
  96. package/web/dist/assets/{Roles-FEHqm_Jf.js → Roles-C7SNebvY.js} +1 -1
  97. package/web/dist/assets/{Settings-rdVQMfqX.js → Settings-QuKwKbKg.js} +1 -1
  98. package/web/dist/assets/{Strategies-CwJ9JQ-X.js → Strategies-CXQYvCkc.js} +1 -1
  99. package/web/dist/assets/{Switch-1JjR4Imr.js → Switch--h1rqagh.js} +1 -1
  100. package/web/dist/assets/{TaskDetail-h12WxjfG.js → TaskDetail-B0G5ZjDD.js} +1 -1
  101. package/web/dist/assets/{Work-CfzFRSZX.js → Work-DbFst_9-.js} +1 -1
  102. package/web/dist/assets/index-D35OGE0z.css +2 -0
  103. package/web/dist/assets/{index-CXEJd-0s.js → index-Dd3NDYZR.js} +2 -2
  104. package/web/dist/assets/{usePluginsWithUsage-4iLJAPjH.js → usePluginsWithUsage-DpTxJuFQ.js} +1 -1
  105. package/web/dist/index.html +2 -2
  106. package/dist/approval-handler-BWA7UIKN.js +0 -1
  107. package/dist/audit-diagnostics-K3LUWXTI.js +0 -1
  108. package/dist/audit-manager-6WL2V6JG.js +0 -1
  109. package/dist/bree-engine-KYD4GKQK.js +0 -1
  110. package/dist/channels-PWDSTYNR.js +0 -1
  111. package/dist/chat-tool-calls-WJDFQ54U.js +0 -1
  112. package/dist/chunk-3UFEOB6P.js +0 -143
  113. package/dist/chunk-MTRLUW7Z.js +0 -1
  114. package/dist/chunk-QTGAK62Z.js +0 -14
  115. package/dist/chunk-TWOJVEO7.js +0 -32
  116. package/dist/chunk-VO24C673.js +0 -1
  117. package/dist/chunk-VPMHZJS2.js +0 -1
  118. package/dist/chunk-ZJ3TS4FL.js +0 -182
  119. package/dist/config-X7A6NA73.js +0 -1
  120. package/dist/db-XODNIJSJ.js +0 -1
  121. package/dist/engine-OQXDHA2R.js +0 -1
  122. package/dist/execution-tools-BR4T4MMW.js +0 -1
  123. package/dist/memory-service-3RLVOF2C.js +0 -1
  124. package/dist/outbound-gateway-NJNSN2ZX.js +0 -1
  125. package/dist/presets-SUJRFRJC.js +0 -1
  126. package/dist/role-presets-VEYTGYA4.js +0 -1
  127. package/dist/role-workspace-AIVHPX5P.js +0 -1
  128. package/dist/skill-registry-LARMNUT5.js +0 -1
  129. package/dist/template-dispatch-6FPJQN6A.js +0 -1
  130. package/web/dist/assets/Chat-Ce72TtUi.js +0 -2
  131. package/web/dist/assets/index-CarTGiGO.css +0 -2
@@ -1,8 +1,8 @@
1
- import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"./chunk-EZLBMUQD.js";import{b as H}from"./chunk-5PELJRUQ.js";import{constants as te,cpSync as se,copyFileSync as y,existsSync as I,lstatSync as ie,mkdirSync as k,readdirSync as Ee,realpathSync as S,rmSync as $,statSync as C,unlinkSync as j}from"fs";import{dirname as q,extname as ne,isAbsolute as V,join as L,sep as R}from"path";function U(){return process.env.ADAM_TEST_DIR||B}function oe(){return L(U(),["work","flows"].join(""))}function F(){return L(U(),"template-executions")}function z(e){return L(F(),e,"artifacts")}function Te(e){let _=z(e);return k(_,{recursive:!0}),_}function Xe(e,_,N){if(!V(e))throw new Error(`path must be absolute: ${e}`);let c=S(_),p=c.endsWith(R)?c:c+R;if(N){let l=S(e),u=l.endsWith(R)?l:l+R;if(u===p||u.startsWith(p))return;throw new Error(`path escapes workspace: ${e} (resolved=${l}, root=${c})`)}if(I(e))throw ie(e).isSymbolicLink()?new Error(`destination already exists and is a symlink: ${e}`):new Error(`destination already exists: ${e}`);let m=S(q(e)),O=m.endsWith(R)?m:m+R;if(!(O===p||O.startsWith(p)))throw new Error(`destination escapes workspace: ${e} (parent resolved=${m}, root=${c})`)}function Se(e){let _=Te(e.executionId),N=L(_,`${e.artifactId}.bin`);return y(e.sourcePath,N),{blobPath:N,sizeBytes:C(N).size}}function ge(e){j(e)}function Ce(e){if(!I(e.blobPath))throw new Error(`blob file missing on disk: ${e.blobPath}`);return y(e.blobPath,e.destPath,te.COPYFILE_EXCL),{sizeBytes:C(e.destPath).size}}function J(e){try{j(e)}catch(_){X.warn({err:_,blobPath:e},"Failed to remove TemplateExecution artifact blob")}}function Ue(e){try{$(L(F(),e),{recursive:!0,force:!0})}catch(_){X.warn({err:_,executionId:e},"Failed to remove TemplateExecution artifacts directory")}}function De(e,_,N){let c=z(e);if(!I(c))return 0;let p=0;for(let m of Ee(c)){if(ne(m)!==".bin")continue;let O=m.slice(0,-4);if(_.has(O))continue;let l=L(c,m),u=C(l);Date.now()-u.mtimeMs<N||(J(l),p++)}return p}async function he(e,_){let{deleteArtifactsByExecutionAndStep:N}=await import("./artifacts-MAYKOTA2.js"),c=N(e,_),p=0;for(let m of c)m.blobPath&&I(m.blobPath)&&(J(m.blobPath),p++);return X.debug({executionId:e,stepId:_,deletedRows:c.length,deletedFiles:p},"cleanSlatePriorAttempt: done"),{deletedRows:c.length,deletedFiles:p}}function _e(e,_){let N=U();if(e==="template"){if(!_)throw new Error("template kind requires executionId");return L(N,"template-executions",_,"artifacts")}return L(N,"artifacts",e)}function xe(e){let _=_e(e.kind,e.executionId);k(_,{recursive:!0});let N=L(_,`${e.artifactId}.bin`);return y(e.sourcePath,N),{blobPath:N,sizeBytes:C(N).size}}function ye(e){try{if(!V(e))return!1;let _=S(e),N=S(U()),c=N.endsWith(R)?N:N+R,p=_.endsWith(R)?_:_+R;return p===c||p.startsWith(c)}catch{return!1}}function Q(e){let _=oe();if(!I(_)||!e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='template_execution_artifacts'").get())return;let c=e.prepare(`
1
+ import{d as B,e as W,i as Y}from"./chunk-ITVCPC7G.js";import{c as g,h as K}from"./chunk-EZLBMUQD.js";import{b as H}from"./chunk-5PELJRUQ.js";import{constants as se,cpSync as ie,copyFileSync as y,existsSync as I,lstatSync as Ee,mkdirSync as k,readdirSync as ne,realpathSync as S,rmSync as $,statSync as C,unlinkSync as j,writeFileSync as oe}from"fs";import{dirname as q,extname as Te,isAbsolute as V,join as L,sep as R}from"path";import{v4 as _e}from"uuid";function U(){return process.env.ADAM_TEST_DIR||B}function ae(){return L(U(),["work","flows"].join(""))}function F(){return L(U(),"template-executions")}function z(e){return L(F(),e,"artifacts")}function J(e){let _=z(e);return k(_,{recursive:!0}),_}function Ce(e,_,l){if(!V(e))throw new Error(`path must be absolute: ${e}`);let a=S(_),d=a.endsWith(R)?a:a+R;if(l){let N=S(e),u=N.endsWith(R)?N:N+R;if(u===d||u.startsWith(d))return;throw new Error(`path escapes workspace: ${e} (resolved=${N}, root=${a})`)}if(I(e))throw Ee(e).isSymbolicLink()?new Error(`destination already exists and is a symlink: ${e}`):new Error(`destination already exists: ${e}`);let m=S(q(e)),O=m.endsWith(R)?m:m+R;if(!(O===d||O.startsWith(d)))throw new Error(`destination escapes workspace: ${e} (parent resolved=${m}, root=${a})`)}function Ue(e){let _=J(e.executionId),l=L(_,`${e.artifactId}.bin`);return y(e.sourcePath,l),{blobPath:l,sizeBytes:C(l).size}}async function De(e){let{createArtifact:_}=await import("./artifacts-NFMM3ORE.js"),l=_e(),a=L(J(e.executionId),`${l}.bin`);oe(a,e.text,"utf8");let d=Buffer.byteLength(e.text,"utf8");return _({id:l,sourceKind:"template_step",executionId:e.executionId,stepId:e.stepId,key:e.key,kind:"file",blobPath:a,mime:"text/markdown",originalFilename:`${e.key}.md`,sizeBytes:d,createdAt:Date.now(),roleId:e.roleId}),{artifactId:l,sizeBytes:d}}function he(e){j(e)}function xe(e){if(!I(e.blobPath))throw new Error(`blob file missing on disk: ${e.blobPath}`);return y(e.blobPath,e.destPath,se.COPYFILE_EXCL),{sizeBytes:C(e.destPath).size}}function Q(e){try{j(e)}catch(_){X.warn({err:_,blobPath:e},"Failed to remove TemplateExecution artifact blob")}}function ye(e){try{$(L(F(),e),{recursive:!0,force:!0})}catch(_){X.warn({err:_,executionId:e},"Failed to remove TemplateExecution artifacts directory")}}function ke(e,_,l){let a=z(e);if(!I(a))return 0;let d=0;for(let m of ne(a)){if(Te(m)!==".bin")continue;let O=m.slice(0,-4);if(_.has(O))continue;let N=L(a,m),u=C(N);Date.now()-u.mtimeMs<l||(Q(N),d++)}return d}async function Fe(e,_){let{deleteArtifactsByExecutionAndStep:l}=await import("./artifacts-NFMM3ORE.js"),a=l(e,_),d=0;for(let m of a)m.blobPath&&I(m.blobPath)&&(Q(m.blobPath),d++);return X.debug({executionId:e,stepId:_,deletedRows:a.length,deletedFiles:d},"cleanSlatePriorAttempt: done"),{deletedRows:a.length,deletedFiles:d}}function ce(e,_){let l=U();if(e==="template"){if(!_)throw new Error("template kind requires executionId");return L(l,"template-executions",_,"artifacts")}return L(l,"artifacts",e)}function we(e){let _=ce(e.kind,e.executionId);k(_,{recursive:!0});let l=L(_,`${e.artifactId}.bin`);return y(e.sourcePath,l),{blobPath:l,sizeBytes:C(l).size}}function Me(e){try{if(!V(e))return!1;let _=S(e),l=S(U()),a=l.endsWith(R)?l:l+R,d=_.endsWith(R)?_:_+R;return d===a||d.startsWith(a)}catch{return!1}}function Z(e){let _=ae();if(!I(_)||!e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='template_execution_artifacts'").get())return;let a=e.prepare(`
2
2
  SELECT id, execution_id, blob_path
3
3
  FROM template_execution_artifacts
4
4
  WHERE blob_path IS NOT NULL
5
- `).all(),p=_.endsWith(R)?_:_+R,m=F(),O=new Set;for(let l of c){if(!l.blob_path.startsWith(p))continue;let u=L(_,l.execution_id),v=L(m,l.execution_id),x=L(m,l.blob_path.slice(p.length));try{if(I(u)&&!I(v)&&(k(q(v),{recursive:!0}),se(u,v,{recursive:!0,dereference:!1,force:!1})),!I(x)){X.warn({artifactId:l.id,blobPath:l.blob_path},"TemplateExecution artifact migration skipped missing copied blob");continue}e.prepare("UPDATE template_execution_artifacts SET blob_path = ? WHERE id = ?").run(x,l.id),O.add(l.execution_id)}catch(M){X.warn({err:M,artifactId:l.id,executionId:l.execution_id},"TemplateExecution artifact migration failed")}}for(let l of O){let u=L(m,l);if(I(u))try{$(L(_,l),{recursive:!0,force:!0})}catch(v){X.warn({err:v,executionId:l},"Failed to remove migrated legacy artifact directory")}}}var X,Z=H(()=>{"use strict";Y();K();X=g("watchdog")});import ae from"better-sqlite3";import{existsSync as ce,mkdirSync as le}from"fs";import{dirname as Ne}from"path";function me(e){e.exec(`
5
+ `).all(),d=_.endsWith(R)?_:_+R,m=F(),O=new Set;for(let N of a){if(!N.blob_path.startsWith(d))continue;let u=L(_,N.execution_id),v=L(m,N.execution_id),x=L(m,N.blob_path.slice(d.length));try{if(I(u)&&!I(v)&&(k(q(v),{recursive:!0}),ie(u,v,{recursive:!0,dereference:!1,force:!1})),!I(x)){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(x,N.id),O.add(N.execution_id)}catch(M){X.warn({err:M,artifactId:N.id,executionId:N.execution_id},"TemplateExecution artifact migration failed")}}for(let N of O){let u=L(m,N);if(I(u))try{$(L(_,N),{recursive:!0,force:!0})}catch(v){X.warn({err:v,executionId:N},"Failed to remove migrated legacy artifact directory")}}}var X,b=H(()=>{"use strict";Y();K();X=g("watchdog")});import le from"better-sqlite3";import{existsSync as Ne,mkdirSync as de}from"fs";import{dirname as pe}from"path";function Re(e){e.exec(`
6
6
  CREATE TABLE IF NOT EXISTS server_state (
7
7
  id INTEGER PRIMARY KEY CHECK(id = 1),
8
8
  sdk_session_id TEXT,
@@ -12,7 +12,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
12
12
  created_at INTEGER NOT NULL DEFAULT (unixepoch('now') * 1000),
13
13
  last_active_at INTEGER
14
14
  );
15
- `),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 c=e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0;if(c<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 r of s)try{e.exec(`DROP TABLE IF EXISTS ${r}`)}catch{}for(let r of["memories_fts_insert","memories_fts_delete","memories_fts_update"])try{e.exec(`DROP TRIGGER IF EXISTS ${r}`)}catch{}}if(e.exec(`
15
+ `),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 a=e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0;if(a<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 r of s)try{e.exec(`DROP TABLE IF EXISTS ${r}`)}catch{}for(let r of["memories_fts_insert","memories_fts_delete","memories_fts_update"])try{e.exec(`DROP TRIGGER IF EXISTS ${r}`)}catch{}}if(e.exec(`
16
16
  CREATE TABLE IF NOT EXISTS tasks (
17
17
  id TEXT PRIMARY KEY,
18
18
  parent_id TEXT,
@@ -402,7 +402,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
402
402
 
403
403
  CREATE INDEX IF NOT EXISTS idx_calibration_goal ON calibration_history(goal_id);
404
404
  CREATE INDEX IF NOT EXISTS idx_calibration_computed ON calibration_history(computed_at);
405
- `),c<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(`
405
+ `),a<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(`
406
406
  CREATE TABLE IF NOT EXISTS roles (
407
407
  id TEXT PRIMARY KEY,
408
408
  name TEXT NOT NULL UNIQUE,
@@ -601,7 +601,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
601
601
  bound_at INTEGER NOT NULL,
602
602
  PRIMARY KEY (role_id, plugin_id)
603
603
  );
604
- `),e.exec("UPDATE server_state SET schema_version = 10 WHERE id = 1"),e.exec("PRAGMA foreign_keys = ON")}if(c<11){try{e.exec("ALTER TABLE task_templates RENAME COLUMN skill_preference TO role_preference")}catch(s){let r=e.prepare("PRAGMA table_info(task_templates)").all(),t=r.some(E=>E.name==="role_preference"),i=r.some(E=>E.name==="skill_preference");if(!t&&i)throw s}e.exec("UPDATE server_state SET schema_version = 11 WHERE id = 1")}if(c<12&&(e.prepare("PRAGMA table_info(server_state)").all().some(r=>r.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")),c<13&&(e.prepare("PRAGMA table_info(roles)").all().some(r=>r.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")),c<14){let s=e.prepare("PRAGMA table_info(roles)").all();s.some(i=>i.name==="allowed_channels")||e.exec("ALTER TABLE roles ADD COLUMN allowed_channels TEXT"),s.some(i=>i.name==="mcp_servers")||e.exec("ALTER TABLE roles ADD COLUMN mcp_servers TEXT");let r=e.prepare("PRAGMA table_info(tasks)").all();r.some(i=>i.name==="deliver_to")||e.exec("ALTER TABLE tasks ADD COLUMN deliver_to TEXT"),r.some(i=>i.name==="report_to")||e.exec("ALTER TABLE tasks ADD COLUMN report_to TEXT"),e.prepare("PRAGMA table_info(goals)").all().some(i=>i.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(c<15&&(e.prepare("PRAGMA table_info(roles)").all().some(r=>r.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")),c<16&&(e.prepare("PRAGMA table_info(task_templates)").all().some(r=>r.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")),c<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 t=e.prepare("SELECT id, additional_directories FROM roles WHERE additional_directories IS NOT NULL").all();for(let i of t)try{let E=JSON.parse(i.additional_directories);if(E.length>0&&typeof E[0]=="object"&&E[0]!==null&&"path"in E[0])continue;let n=E.map(T=>typeof T=="string"?{path:T}:T);e.prepare("UPDATE roles SET additional_directories = ? WHERE id = ?").run(JSON.stringify(n),i.id)}catch{}}catch{}let s=e.prepare("PRAGMA table_info(tasks)").all();s.some(t=>t.name==="deliver_to")||e.exec("ALTER TABLE tasks ADD COLUMN deliver_to TEXT"),s.some(t=>t.name==="report_to")||e.exec("ALTER TABLE tasks ADD COLUMN report_to TEXT");let r=e.prepare("PRAGMA table_info(strategies)").all();r.some(t=>t.name==="role")&&!r.some(t=>t.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(c<18){let s=e.prepare("PRAGMA table_info(tasks)").all();s.some(t=>t.name==="deliver_to")||e.exec("ALTER TABLE tasks ADD COLUMN deliver_to TEXT"),s.some(t=>t.name==="report_to")||e.exec("ALTER TABLE tasks ADD COLUMN report_to TEXT");let r=e.prepare("PRAGMA table_info(strategies)").all();r.some(t=>t.name==="role")&&!r.some(t=>t.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(`
604
+ `),e.exec("UPDATE server_state SET schema_version = 10 WHERE id = 1"),e.exec("PRAGMA foreign_keys = ON")}if(a<11){try{e.exec("ALTER TABLE task_templates RENAME COLUMN skill_preference TO role_preference")}catch(s){let r=e.prepare("PRAGMA table_info(task_templates)").all(),t=r.some(E=>E.name==="role_preference"),i=r.some(E=>E.name==="skill_preference");if(!t&&i)throw s}e.exec("UPDATE server_state SET schema_version = 11 WHERE id = 1")}if(a<12&&(e.prepare("PRAGMA table_info(server_state)").all().some(r=>r.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")),a<13&&(e.prepare("PRAGMA table_info(roles)").all().some(r=>r.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")),a<14){let s=e.prepare("PRAGMA table_info(roles)").all();s.some(i=>i.name==="allowed_channels")||e.exec("ALTER TABLE roles ADD COLUMN allowed_channels TEXT"),s.some(i=>i.name==="mcp_servers")||e.exec("ALTER TABLE roles ADD COLUMN mcp_servers TEXT");let r=e.prepare("PRAGMA table_info(tasks)").all();r.some(i=>i.name==="deliver_to")||e.exec("ALTER TABLE tasks ADD COLUMN deliver_to TEXT"),r.some(i=>i.name==="report_to")||e.exec("ALTER TABLE tasks ADD COLUMN report_to TEXT"),e.prepare("PRAGMA table_info(goals)").all().some(i=>i.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(a<15&&(e.prepare("PRAGMA table_info(roles)").all().some(r=>r.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")),a<16&&(e.prepare("PRAGMA table_info(task_templates)").all().some(r=>r.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")),a<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 t=e.prepare("SELECT id, additional_directories FROM roles WHERE additional_directories IS NOT NULL").all();for(let i of t)try{let E=JSON.parse(i.additional_directories);if(E.length>0&&typeof E[0]=="object"&&E[0]!==null&&"path"in E[0])continue;let n=E.map(T=>typeof T=="string"?{path:T}:T);e.prepare("UPDATE roles SET additional_directories = ? WHERE id = ?").run(JSON.stringify(n),i.id)}catch{}}catch{}let s=e.prepare("PRAGMA table_info(tasks)").all();s.some(t=>t.name==="deliver_to")||e.exec("ALTER TABLE tasks ADD COLUMN deliver_to TEXT"),s.some(t=>t.name==="report_to")||e.exec("ALTER TABLE tasks ADD COLUMN report_to TEXT");let r=e.prepare("PRAGMA table_info(strategies)").all();r.some(t=>t.name==="role")&&!r.some(t=>t.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(a<18){let s=e.prepare("PRAGMA table_info(tasks)").all();s.some(t=>t.name==="deliver_to")||e.exec("ALTER TABLE tasks ADD COLUMN deliver_to TEXT"),s.some(t=>t.name==="report_to")||e.exec("ALTER TABLE tasks ADD COLUMN report_to TEXT");let r=e.prepare("PRAGMA table_info(strategies)").all();r.some(t=>t.name==="role")&&!r.some(t=>t.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(`
605
605
  CREATE TABLE IF NOT EXISTS delivery_log_new (
606
606
  id TEXT PRIMARY KEY,
607
607
  rule_id TEXT REFERENCES delivery_rules(id),
@@ -618,7 +618,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
618
618
  message_type TEXT
619
619
  )
620
620
  `),e.exec(`INSERT INTO delivery_log_new (id, rule_id, task_id, status, target, content, attempts, error, created_at, delivered_at, expires_at)
621
- SELECT id, rule_id, task_id, status, target, content, attempts, error, created_at, delivered_at, expires_at FROM delivery_log`),e.exec("DROP TABLE delivery_log"),e.exec("ALTER TABLE delivery_log_new RENAME TO delivery_log"),e.exec("CREATE INDEX IF NOT EXISTS idx_delivery_log_rule ON delivery_log(rule_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_delivery_log_task ON delivery_log(task_id)")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<20&&(e.prepare("PRAGMA table_info(goals)").all().some(t=>t.name==="report_to")||e.exec("ALTER TABLE goals ADD COLUMN report_to TEXT"),e.prepare("PRAGMA table_info(task_templates)").all().some(t=>t.name==="report_to")||e.exec("ALTER TABLE task_templates ADD COLUMN report_to TEXT"),e.exec("UPDATE goals SET report_to = notify_targets WHERE notify_targets IS NOT NULL"),e.exec("UPDATE task_templates SET report_to = notify_targets WHERE notify_targets IS NOT NULL"),e.exec("UPDATE server_state SET schema_version = 20 WHERE id = 1")),e.prepare("PRAGMA table_info(config)").all().some(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 P=e.prepare("PRAGMA table_info(memories)").all();P.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)")),P.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 G=e.prepare("PRAGMA table_info(memories)").all();G.some(s=>s.name==="tier")&&G.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(t=>t.name==="permission_mode")||e.exec("ALTER TABLE roles ADD COLUMN permission_mode TEXT DEFAULT NULL"),s.some(t=>t.name==="allowed_bash_patterns")||e.exec("ALTER TABLE roles ADD COLUMN allowed_bash_patterns TEXT DEFAULT NULL"),s.some(t=>t.name==="denied_bash_patterns")||e.exec("ALTER TABLE roles ADD COLUMN denied_bash_patterns TEXT DEFAULT NULL"),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<23&&e.exec("UPDATE server_state SET schema_version = 23 WHERE id = 1")}if(e.prepare("PRAGMA table_info(roles)").all().some(t=>t.name==="env_vars")||e.prepare("ALTER TABLE roles ADD COLUMN env_vars TEXT DEFAULT NULL").run(),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<24&&e.prepare("UPDATE server_state SET schema_version = 24 WHERE id = 1").run(),c<25&&(e.exec(`
621
+ SELECT id, rule_id, task_id, status, target, content, attempts, error, created_at, delivered_at, expires_at FROM delivery_log`),e.exec("DROP TABLE delivery_log"),e.exec("ALTER TABLE delivery_log_new RENAME TO delivery_log"),e.exec("CREATE INDEX IF NOT EXISTS idx_delivery_log_rule ON delivery_log(rule_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_delivery_log_task ON delivery_log(task_id)")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<20&&(e.prepare("PRAGMA table_info(goals)").all().some(t=>t.name==="report_to")||e.exec("ALTER TABLE goals ADD COLUMN report_to TEXT"),e.prepare("PRAGMA table_info(task_templates)").all().some(t=>t.name==="report_to")||e.exec("ALTER TABLE task_templates ADD COLUMN report_to TEXT"),e.exec("UPDATE goals SET report_to = notify_targets WHERE notify_targets IS NOT NULL"),e.exec("UPDATE task_templates SET report_to = notify_targets WHERE notify_targets IS NOT NULL"),e.exec("UPDATE server_state SET schema_version = 20 WHERE id = 1")),e.prepare("PRAGMA table_info(config)").all().some(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 P=e.prepare("PRAGMA table_info(memories)").all();P.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)")),P.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 G=e.prepare("PRAGMA table_info(memories)").all();G.some(s=>s.name==="tier")&&G.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(t=>t.name==="permission_mode")||e.exec("ALTER TABLE roles ADD COLUMN permission_mode TEXT DEFAULT NULL"),s.some(t=>t.name==="allowed_bash_patterns")||e.exec("ALTER TABLE roles ADD COLUMN allowed_bash_patterns TEXT DEFAULT NULL"),s.some(t=>t.name==="denied_bash_patterns")||e.exec("ALTER TABLE roles ADD COLUMN denied_bash_patterns TEXT DEFAULT NULL"),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<23&&e.exec("UPDATE server_state SET schema_version = 23 WHERE id = 1")}if(e.prepare("PRAGMA table_info(roles)").all().some(t=>t.name==="env_vars")||e.prepare("ALTER TABLE roles ADD COLUMN env_vars TEXT DEFAULT NULL").run(),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<24&&e.prepare("UPDATE server_state SET schema_version = 24 WHERE id = 1").run(),a<25&&(e.exec(`
622
622
  CREATE TABLE IF NOT EXISTS template_executions (
623
623
  id TEXT PRIMARY KEY,
624
624
  template_id TEXT NOT NULL,
@@ -629,7 +629,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
629
629
  error TEXT,
630
630
  FOREIGN KEY (template_id) REFERENCES task_templates(id)
631
631
  )
632
- `),e.exec("UPDATE server_state SET schema_version = 25 WHERE id = 1")),c<26){let s=`
632
+ `),e.exec("UPDATE server_state SET schema_version = 25 WHERE id = 1")),a<26){let s=`
633
633
  CREATE TABLE IF NOT EXISTS template_execution_artifacts (
634
634
  id TEXT PRIMARY KEY,
635
635
  execution_id TEXT NOT NULL,
@@ -667,7 +667,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
667
667
  ON artifact_access_log (execution_id, timestamp);
668
668
  CREATE INDEX IF NOT EXISTS idx_artifact_access_log_role
669
669
  ON artifact_access_log (role_id, timestamp);
670
- `;e.exec(s),e.exec(r),e.prepare("PRAGMA table_info(tasks)").all().some(i=>i.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(t=>t.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(t=>t.name==="requirements_json")||e.prepare("ALTER TABLE manager_decisions ADD COLUMN requirements_json TEXT").run(),s.some(t=>t.name==="fit_score")||e.prepare("ALTER TABLE manager_decisions ADD COLUMN fit_score REAL").run(),s.some(t=>t.name==="candidates_json")||e.prepare("ALTER TABLE manager_decisions ADD COLUMN candidates_json TEXT").run(),s.some(t=>t.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*"]]],r=e.prepare("SELECT key, value FROM config WHERE key = 'defaults.approvalRequired'").all();for(let t of r)try{let i=JSON.parse(t.value),E=[];for(let T of i){let a=!1;for(let[d,o]of s)if(d.test(T)){E.push(...o),a=!0,D.info({from:T,to:o},"Config: migrated approvalRequired pattern from regex to glob");break}a||(/[.+?^${}()|[\]\\]/.test(T)&&D.warn({pattern:T},"Config: approvalRequired pattern contains regex metacharacters that won't work with glob matching; update to glob syntax (use * for wildcards)"),E.push(T))}let n=[...new Set(E)];e.prepare("UPDATE config SET value = ?, updated_at = ? WHERE key = ?").run(JSON.stringify(n),Date.now(),t.key)}catch{}}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<31){let r=e.prepare("SELECT count(*) AS n FROM task_templates WHERE trigger_type IN ('event', 'task_complete')").get();r.n>0&&D.info({legacyCount:r.n},"normalizing legacy template trigger types"),e.prepare(`
670
+ `;e.exec(s),e.exec(r),e.prepare("PRAGMA table_info(tasks)").all().some(i=>i.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(t=>t.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(t=>t.name==="requirements_json")||e.prepare("ALTER TABLE manager_decisions ADD COLUMN requirements_json TEXT").run(),s.some(t=>t.name==="fit_score")||e.prepare("ALTER TABLE manager_decisions ADD COLUMN fit_score REAL").run(),s.some(t=>t.name==="candidates_json")||e.prepare("ALTER TABLE manager_decisions ADD COLUMN candidates_json TEXT").run(),s.some(t=>t.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*"]]],r=e.prepare("SELECT key, value FROM config WHERE key = 'defaults.approvalRequired'").all();for(let t of r)try{let i=JSON.parse(t.value),E=[];for(let T of i){let c=!1;for(let[p,o]of s)if(p.test(T)){E.push(...o),c=!0,D.info({from:T,to:o},"Config: migrated approvalRequired pattern from regex to glob");break}c||(/[.+?^${}()|[\]\\]/.test(T)&&D.warn({pattern:T},"Config: approvalRequired pattern contains regex metacharacters that won't work with glob matching; update to glob syntax (use * for wildcards)"),E.push(T))}let n=[...new Set(E)];e.prepare("UPDATE config SET value = ?, updated_at = ? WHERE key = ?").run(JSON.stringify(n),Date.now(),t.key)}catch{}}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<31){let r=e.prepare("SELECT count(*) AS n FROM task_templates WHERE trigger_type IN ('event', 'task_complete')").get();r.n>0&&D.info({legacyCount:r.n},"normalizing legacy template trigger types"),e.prepare(`
671
671
  UPDATE task_templates
672
672
  SET trigger_type='template_complete',
673
673
  trigger_event=REPLACE(trigger_event, ?, 'template_complete:')
@@ -696,7 +696,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
696
696
  WHERE type='table' AND name IN ('template_executions', ?)
697
697
  ORDER BY CASE name WHEN 'template_executions' THEN 0 ELSE 1 END
698
698
  LIMIT 1
699
- `).get(w);if(r){let t=r.name;e.prepare(`PRAGMA table_info(${t})`).all().some(T=>T.name==="event_id")||e.prepare(`ALTER TABLE ${t} ADD COLUMN event_id TEXT`).run();let n=t==="template_executions"?"idx_template_executions_event_id":ee;e.prepare(`CREATE INDEX IF NOT EXISTS ${n} ON ${t}(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(i=>i.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(i=>i.name==="preset_id")||e.prepare("ALTER TABLE roles ADD COLUMN preset_id TEXT").run();let t=e.prepare("PRAGMA table_info(task_templates)").all();t.some(i=>i.name==="is_preset")||e.prepare("ALTER TABLE task_templates ADD COLUMN is_preset INTEGER NOT NULL DEFAULT 0").run(),t.some(i=>i.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 r=[["Engineer","engineer"],["Reviewer","reviewer"],["Researcher","researcher"],["Writer","writer"],["Chat Manager","chat-manager"],["adam-automator","adam-automator"]];for(let[t,i]of r)e.prepare("UPDATE roles SET preset_id = ? WHERE name = ? AND preset_id IS NULL").run(i,t);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(`
699
+ `).get(w);if(r){let t=r.name;e.prepare(`PRAGMA table_info(${t})`).all().some(T=>T.name==="event_id")||e.prepare(`ALTER TABLE ${t} ADD COLUMN event_id TEXT`).run();let n=t==="template_executions"?"idx_template_executions_event_id":re;e.prepare(`CREATE INDEX IF NOT EXISTS ${n} ON ${t}(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(i=>i.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(i=>i.name==="preset_id")||e.prepare("ALTER TABLE roles ADD COLUMN preset_id TEXT").run();let t=e.prepare("PRAGMA table_info(task_templates)").all();t.some(i=>i.name==="is_preset")||e.prepare("ALTER TABLE task_templates ADD COLUMN is_preset INTEGER NOT NULL DEFAULT 0").run(),t.some(i=>i.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 r=[["Engineer","engineer"],["Reviewer","reviewer"],["Researcher","researcher"],["Writer","writer"],["Chat Manager","chat-manager"],["adam-automator","adam-automator"]];for(let[t,i]of r)e.prepare("UPDATE roles SET preset_id = ? WHERE name = ? AND preset_id IS NULL").run(i,t);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(`
700
700
  CREATE TABLE feature_requests (
701
701
  id TEXT PRIMARY KEY,
702
702
  source_session_id TEXT,
@@ -725,11 +725,11 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
725
725
  created_at INTEGER NOT NULL,
726
726
  updated_at INTEGER NOT NULL
727
727
  )
728
- `),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 r=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(r.length>0){console.info(`[db migration v39] dedupe ${r.length} (source_task_id, type='thought') groups before adding unique index`);for(let t of r){let i=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(t.source_task_id),E=i[0].id,n=i.slice(1).map(a=>a.id),T=n.map(()=>"?").join(",");e.prepare(`DELETE FROM memories WHERE id IN (${T})`).run(...n),console.info(`[db migration v39] group source_task_id=${t.source_task_id}: kept ${E} (len ${i[0].len}), deleted ${n.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 r=["tasks","step_logs","delivery_log","evolution_audit","chat_messages"];for(let t of r)e.prepare(`PRAGMA table_info(${t})`).all().some(E=>E.name==="trace_id")||(e.prepare(`ALTER TABLE ${t} ADD COLUMN trace_id TEXT`).run(),e.prepare(`CREATE INDEX IF NOT EXISTS idx_${t}_trace_id ON ${t}(trace_id) WHERE trace_id IS NOT NULL`).run(),console.info(`[db migration v40] added trace_id to ${t}`));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(`
728
+ `),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 r=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(r.length>0){console.info(`[db migration v39] dedupe ${r.length} (source_task_id, type='thought') groups before adding unique index`);for(let t of r){let i=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(t.source_task_id),E=i[0].id,n=i.slice(1).map(c=>c.id),T=n.map(()=>"?").join(",");e.prepare(`DELETE FROM memories WHERE id IN (${T})`).run(...n),console.info(`[db migration v39] group source_task_id=${t.source_task_id}: kept ${E} (len ${i[0].len}), deleted ${n.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 r=["tasks","step_logs","delivery_log","evolution_audit","chat_messages"];for(let t of r)e.prepare(`PRAGMA table_info(${t})`).all().some(E=>E.name==="trace_id")||(e.prepare(`ALTER TABLE ${t} ADD COLUMN trace_id TEXT`).run(),e.prepare(`CREATE INDEX IF NOT EXISTS idx_${t}_trace_id ON ${t}(trace_id) WHERE trace_id IS NOT NULL`).run(),console.info(`[db migration v40] added trace_id to ${t}`));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(`
729
729
  UPDATE task_templates
730
730
  SET trigger_type = 'template_complete'
731
731
  WHERE trigger_type = ?
732
- `).run(re),e.prepare(`
732
+ `).run(te),e.prepare(`
733
733
  UPDATE task_templates
734
734
  SET trigger_event = REPLACE(trigger_event, ?, 'template_complete:')
735
735
  WHERE trigger_event LIKE ?
@@ -745,7 +745,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
745
745
  event_id TEXT,
746
746
  FOREIGN KEY (template_id) REFERENCES task_templates(id)
747
747
  )
748
- `),e.prepare("PRAGMA table_info(template_executions)").all().some(E=>E.name==="event_id")||e.prepare("ALTER TABLE template_executions ADD COLUMN event_id TEXT").run(),e.prepare(`DROP INDEX IF EXISTS ${ee}`).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 r=e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name=?").get(b),t=e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='template_execution_artifacts'").get();r&&!t&&e.prepare(`ALTER TABLE ${b} RENAME TO template_execution_artifacts`).run(),e.exec(`
748
+ `),e.prepare("PRAGMA table_info(template_executions)").all().some(E=>E.name==="event_id")||e.prepare("ALTER TABLE template_executions ADD COLUMN event_id TEXT").run(),e.prepare(`DROP INDEX IF EXISTS ${re}`).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 r=e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name=?").get(ee),t=e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='template_execution_artifacts'").get();r&&!t&&e.prepare(`ALTER TABLE ${ee} RENAME TO template_execution_artifacts`).run(),e.exec(`
749
749
  CREATE TABLE IF NOT EXISTS template_execution_artifacts (
750
750
  id TEXT PRIMARY KEY,
751
751
  execution_id TEXT NOT NULL,
@@ -760,7 +760,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
760
760
  UNIQUE(execution_id, step_id, key),
761
761
  FOREIGN KEY (execution_id) REFERENCES template_executions(id) ON DELETE CASCADE
762
762
  )
763
- `),e.prepare(`DROP INDEX IF EXISTS ${de}`).run(),e.prepare(`DROP INDEX IF EXISTS ${pe}`).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(),Q(e),e.prepare("UPDATE server_state SET schema_version = 43 WHERE id = 1").run()}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<44&&(e.prepare("PRAGMA table_info(tasks)").all().some(t=>t.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(t=>t.name==="retry_count")||e.prepare("ALTER TABLE tasks ADD COLUMN retry_count INTEGER NOT NULL DEFAULT 0").run(),e.exec(`
763
+ `),e.prepare(`DROP INDEX IF EXISTS ${me}`).run(),e.prepare(`DROP INDEX IF EXISTS ${Le}`).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()}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<44&&(e.prepare("PRAGMA table_info(tasks)").all().some(t=>t.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(t=>t.name==="retry_count")||e.prepare("ALTER TABLE tasks ADD COLUMN retry_count INTEGER NOT NULL DEFAULT 0").run(),e.exec(`
764
764
  CREATE TABLE IF NOT EXISTS delayed_retries (
765
765
  id TEXT PRIMARY KEY,
766
766
  task_id TEXT NOT NULL,
@@ -799,7 +799,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
799
799
  CREATE INDEX IF NOT EXISTS idx_audit_violations_role ON audit_violations(role_id, created_at DESC);
800
800
  CREATE INDEX IF NOT EXISTS idx_audit_violations_task ON audit_violations(step_task_id);
801
801
  CREATE INDEX IF NOT EXISTS idx_audit_violations_execution ON audit_violations(execution_id, created_at DESC);
802
- `),e.prepare("UPDATE server_state SET schema_version = 52 WHERE id = 1").run(),console.info("[db migration v52] audit_violations: added contract-violation audit table + 3 indexes")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<53){let r=e.prepare("SELECT id, learned_rules FROM roles").all(),t=e.prepare("UPDATE roles SET learned_rules = ? WHERE id = ?"),i=0;for(let E of r){if(!E.learned_rules)continue;let n;try{n=JSON.parse(E.learned_rules)}catch{continue}if(Array.isArray(n)){let T={stylePreferences:n.filter(a=>typeof a=="string"),avoidedActions:[],pinnedParameters:[]};t.run(JSON.stringify(T),E.id),i+=1}}e.prepare("UPDATE server_state SET schema_version = 53 WHERE id = 1").run(),console.info(`[db migration v53] learned_rules: wrapped ${i} legacy string[] rows into structured form`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<54){e.exec(`
802
+ `),e.prepare("UPDATE server_state SET schema_version = 52 WHERE id = 1").run(),console.info("[db migration v52] audit_violations: added contract-violation audit table + 3 indexes")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<53){let r=e.prepare("SELECT id, learned_rules FROM roles").all(),t=e.prepare("UPDATE roles SET learned_rules = ? WHERE id = ?"),i=0;for(let E of r){if(!E.learned_rules)continue;let n;try{n=JSON.parse(E.learned_rules)}catch{continue}if(Array.isArray(n)){let T={stylePreferences:n.filter(c=>typeof c=="string"),avoidedActions:[],pinnedParameters:[]};t.run(JSON.stringify(T),E.id),i+=1}}e.prepare("UPDATE server_state SET schema_version = 53 WHERE id = 1").run(),console.info(`[db migration v53] learned_rules: wrapped ${i} legacy string[] rows into structured form`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<54){e.exec(`
803
803
  CREATE TABLE IF NOT EXISTS user_visible_events (
804
804
  id TEXT PRIMARY KEY,
805
805
  event_key TEXT NOT NULL UNIQUE,
@@ -900,7 +900,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
900
900
  ON assistant_delivery_commitments(session_id, created_at);
901
901
  CREATE INDEX IF NOT EXISTS idx_assistant_delivery_commitments_source_message
902
902
  ON assistant_delivery_commitments(source_message_id) WHERE source_message_id IS NOT NULL;
903
- `),e.prepare("UPDATE server_state SET schema_version = 57 WHERE id = 1").run(),console.info("[db migration v57] assistant_delivery_commitments: added ChatManager delivery commitment table")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<58){e.prepare("PRAGMA table_info(channels)").all().some(T=>T.name==="viewer_key")||e.exec("ALTER TABLE channels ADD COLUMN viewer_key TEXT");let t="local-owner",i=e.prepare("SELECT value FROM config WHERE key = 'identity.ownerViewerKey'").get();if(i)try{let T=JSON.parse(i.value);typeof T=="string"&&T.trim().length>0&&(t=T)}catch{i.value.trim().length>0&&(t=i.value)}let E=e.prepare("SELECT id, config FROM channels").all(),n=e.prepare("UPDATE channels SET config = ?, viewer_key = ?, updated_at = ? WHERE id = ?");for(let T of E)try{let a=JSON.parse(T.config),d=typeof a.viewerKey=="string"&&a.viewerKey.trim().length>0?a.viewerKey:t;delete a.viewerKey,n.run(JSON.stringify(a),d,Date.now(),T.id)}catch{e.prepare("UPDATE channels SET viewer_key = ?, updated_at = ? WHERE id = ?").run(t,Date.now(),T.id)}e.prepare("UPDATE server_state SET schema_version = 58 WHERE id = 1").run(),console.info("[db migration v58] channels: extracted viewerKey from config into viewer_key column")}{let s=["^Task assigned to role [A-Z]$","^List files in the current directory\\.?$","^ping role payload$"];try{let t=e.prepare("SELECT id FROM delivery_rules WHERE created_by = 'system' AND target LIKE '%_default_block_%'").all();for(let i of t)e.prepare("DELETE FROM delivery_rules WHERE id = ?").run(i.id),console.info(`[db v59 repair] removed legacy bad rule ${i.id}`);e.prepare("DELETE FROM config WHERE key = 'delivery.defaultExcludePromptPatterns' AND value LIKE '%E2E_TEST_MODE%'").run()}catch(t){console.warn("[db v59 repair] cleanup of legacy seed failed (non-fatal):",t)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<59){let t=e.prepare("SELECT id, match_criteria FROM delivery_rules WHERE event_type = 'task_complete'").all(),i=0;for(let E of t)try{let n=E.match_criteria?JSON.parse(E.match_criteria):{};if(!(!n.templateId&&!n.roleId&&!n.promptPattern&&!n.taskStatus))continue;let a=Array.isArray(n.excludePromptPatterns)?n.excludePromptPatterns:[],d=[...new Set([...a,...s])],o={...n,excludePromptPatterns:d};e.prepare("UPDATE delivery_rules SET match_criteria = ? WHERE id = ?").run(JSON.stringify(o),E.id),i++}catch{}e.prepare("UPDATE server_state SET schema_version = 59 WHERE id = 1").run(),console.info(`[db migration v59] delivery: seeded excludePromptPatterns on ${i} catch-all rule(s)`)}try{let t=e.prepare("SELECT id, match_criteria FROM delivery_rules WHERE event_type = 'task_complete'").all();for(let i of t)try{let E=i.match_criteria?JSON.parse(i.match_criteria):{};if(!(!E.templateId&&!E.roleId&&!E.promptPattern&&!E.taskStatus))continue;let T=Array.isArray(E.excludePromptPatterns)?E.excludePromptPatterns:[],a=s.filter(f=>!T.includes(f));if(a.length===0)continue;let d=[...T,...a],o={...E,excludePromptPatterns:d};e.prepare("UPDATE delivery_rules SET match_criteria = ? WHERE id = ?").run(JSON.stringify(o),i.id),console.info(`[db v59 reconcile] added ${a.length} default exclude pattern(s) to rule ${i.id}`)}catch{}}catch(t){console.warn("[db v59 reconcile] post-migration repair failed (non-fatal):",t)}}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<60){if(e.prepare("PRAGMA table_info(delivery_log)").all().some(t=>t.name==="execution_id")||(e.prepare("ALTER TABLE delivery_log ADD COLUMN execution_id TEXT").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_delivery_log_execution_id ON delivery_log (execution_id)").run()),!e.prepare("SELECT id FROM delivery_rules WHERE event_type = ?").get("template_execution_failed")){let t=e.prepare("SELECT id, target, match_criteria FROM delivery_rules WHERE event_type = 'task_complete' AND enabled = 1").all(),i=null;for(let a of t)try{let d=a.match_criteria?JSON.parse(a.match_criteria):{};if(!d.templateId&&!d.roleId&&!d.promptPattern&&!d.taskStatus){let f=JSON.parse(a.target);if(f?.type==="channel"&&typeof f.channelId=="string"){i=f.channelId;break}}}catch{}let E=`tpl-fail-${Date.now()}`,n=i?{type:"channel",channelId:i}:{type:"channel",channelId:"REPLACE_ME"},T=i?1:0;e.prepare("INSERT INTO delivery_rules (id, event_type, match_criteria, target, max_per_minute, skip_origin_channel, enabled, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run(E,"template_execution_failed","{}",JSON.stringify(n),3,0,T,Date.now()),i?console.info(`[db migration v60] seeded template_execution_failed delivery rule targeting channel ${i}`):console.warn("[db migration v60] no primary channel found for template_execution_failed rule; created as disabled (channelId=REPLACE_ME)")}e.prepare("UPDATE server_state SET schema_version = 60 WHERE id = 1").run()}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<61&&(e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='effect_receipts'").get()||(e.prepare(`
903
+ `),e.prepare("UPDATE server_state SET schema_version = 57 WHERE id = 1").run(),console.info("[db migration v57] assistant_delivery_commitments: added ChatManager delivery commitment table")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<58){e.prepare("PRAGMA table_info(channels)").all().some(T=>T.name==="viewer_key")||e.exec("ALTER TABLE channels ADD COLUMN viewer_key TEXT");let t="local-owner",i=e.prepare("SELECT value FROM config WHERE key = 'identity.ownerViewerKey'").get();if(i)try{let T=JSON.parse(i.value);typeof T=="string"&&T.trim().length>0&&(t=T)}catch{i.value.trim().length>0&&(t=i.value)}let E=e.prepare("SELECT id, config FROM channels").all(),n=e.prepare("UPDATE channels SET config = ?, viewer_key = ?, updated_at = ? WHERE id = ?");for(let T of E)try{let c=JSON.parse(T.config),p=typeof c.viewerKey=="string"&&c.viewerKey.trim().length>0?c.viewerKey:t;delete c.viewerKey,n.run(JSON.stringify(c),p,Date.now(),T.id)}catch{e.prepare("UPDATE channels SET viewer_key = ?, updated_at = ? WHERE id = ?").run(t,Date.now(),T.id)}e.prepare("UPDATE server_state SET schema_version = 58 WHERE id = 1").run(),console.info("[db migration v58] channels: extracted viewerKey from config into viewer_key column")}{let s=["^Task assigned to role [A-Z]$","^List files in the current directory\\.?$","^ping role payload$"];try{let t=e.prepare("SELECT id FROM delivery_rules WHERE created_by = 'system' AND target LIKE '%_default_block_%'").all();for(let i of t)e.prepare("DELETE FROM delivery_rules WHERE id = ?").run(i.id),console.info(`[db v59 repair] removed legacy bad rule ${i.id}`);e.prepare("DELETE FROM config WHERE key = 'delivery.defaultExcludePromptPatterns' AND value LIKE '%E2E_TEST_MODE%'").run()}catch(t){console.warn("[db v59 repair] cleanup of legacy seed failed (non-fatal):",t)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<59){let t=e.prepare("SELECT id, match_criteria FROM delivery_rules WHERE event_type = 'task_complete'").all(),i=0;for(let E of t)try{let n=E.match_criteria?JSON.parse(E.match_criteria):{};if(!(!n.templateId&&!n.roleId&&!n.promptPattern&&!n.taskStatus))continue;let c=Array.isArray(n.excludePromptPatterns)?n.excludePromptPatterns:[],p=[...new Set([...c,...s])],o={...n,excludePromptPatterns:p};e.prepare("UPDATE delivery_rules SET match_criteria = ? WHERE id = ?").run(JSON.stringify(o),E.id),i++}catch{}e.prepare("UPDATE server_state SET schema_version = 59 WHERE id = 1").run(),console.info(`[db migration v59] delivery: seeded excludePromptPatterns on ${i} catch-all rule(s)`)}try{let t=e.prepare("SELECT id, match_criteria FROM delivery_rules WHERE event_type = 'task_complete'").all();for(let i of t)try{let E=i.match_criteria?JSON.parse(i.match_criteria):{};if(!(!E.templateId&&!E.roleId&&!E.promptPattern&&!E.taskStatus))continue;let T=Array.isArray(E.excludePromptPatterns)?E.excludePromptPatterns:[],c=s.filter(f=>!T.includes(f));if(c.length===0)continue;let p=[...T,...c],o={...E,excludePromptPatterns:p};e.prepare("UPDATE delivery_rules SET match_criteria = ? WHERE id = ?").run(JSON.stringify(o),i.id),console.info(`[db v59 reconcile] added ${c.length} default exclude pattern(s) to rule ${i.id}`)}catch{}}catch(t){console.warn("[db v59 reconcile] post-migration repair failed (non-fatal):",t)}}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<60){if(e.prepare("PRAGMA table_info(delivery_log)").all().some(t=>t.name==="execution_id")||(e.prepare("ALTER TABLE delivery_log ADD COLUMN execution_id TEXT").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_delivery_log_execution_id ON delivery_log (execution_id)").run()),!e.prepare("SELECT id FROM delivery_rules WHERE event_type = ?").get("template_execution_failed")){let t=e.prepare("SELECT id, target, match_criteria FROM delivery_rules WHERE event_type = 'task_complete' AND enabled = 1").all(),i=null;for(let c of t)try{let p=c.match_criteria?JSON.parse(c.match_criteria):{};if(!p.templateId&&!p.roleId&&!p.promptPattern&&!p.taskStatus){let f=JSON.parse(c.target);if(f?.type==="channel"&&typeof f.channelId=="string"){i=f.channelId;break}}}catch{}let E=`tpl-fail-${Date.now()}`,n=i?{type:"channel",channelId:i}:{type:"channel",channelId:"REPLACE_ME"},T=i?1:0;e.prepare("INSERT INTO delivery_rules (id, event_type, match_criteria, target, max_per_minute, skip_origin_channel, enabled, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run(E,"template_execution_failed","{}",JSON.stringify(n),3,0,T,Date.now()),i?console.info(`[db migration v60] seeded template_execution_failed delivery rule targeting channel ${i}`):console.warn("[db migration v60] no primary channel found for template_execution_failed rule; created as disabled (channelId=REPLACE_ME)")}e.prepare("UPDATE server_state SET schema_version = 60 WHERE id = 1").run()}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<61&&(e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='effect_receipts'").get()||(e.prepare(`
904
904
  CREATE TABLE effect_receipts (
905
905
  id TEXT PRIMARY KEY,
906
906
  trace_id TEXT NOT NULL,
@@ -1217,4 +1217,4 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
1217
1217
  cost_usd, priced, estimated, sdk_total_cost_usd, num_turns, created_at)
1218
1218
  VALUES
1219
1219
  (?, ?, 'task', ?, NULL, ?, NULL, NULL, ?, ?, ?, ?, ?, ?, ?, NULL, NULL, ?)
1220
- `),i=0;for(let E of r){let n=`backfill-${E.id}`,T={};if(E.token_usage)try{T=JSON.parse(E.token_usage)}catch{}let a=null;if(E.cost_breakdown)try{a=JSON.parse(E.cost_breakdown)}catch{}if(a&&Array.isArray(a.perModel)&&a.perModel.length>0)for(let d=0;d<a.perModel.length;d++){let o=a.perModel[d],f=`${n}-${d}`;t.run(f,n,o.model,E.id,o.inputTokens??0,o.outputTokens??0,o.cacheReadTokens??0,o.cacheCreationTokens??0,o.costUsd??0,o.priced?1:0,o.estimated?1:0,E.created_at??Date.now()),i++}else{let d=`${n}-0`,o=E.cost_usd>0?1:0;t.run(d,n,"unknown",E.id,T.input??0,T.output??0,0,0,E.cost_usd,o,0,E.created_at??Date.now()),i++}}e.prepare("UPDATE server_state SET schema_version = 84 WHERE id = 1").run(),console.info(`[db migration v84] llm_costs table created + ${i} rows backfilled from tasks`)}catch(r){throw new Error(`Schema v84 migration failed: ${r instanceof Error?r.message:String(r)}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<85)try{let r=e.prepare("PRAGMA table_info(chat_messages)").all(),t=i=>r.some(E=>E.name===i);t("cost_usd")||e.exec("ALTER TABLE chat_messages ADD COLUMN cost_usd REAL"),t("token_usage")||e.exec("ALTER TABLE chat_messages ADD COLUMN token_usage TEXT"),t("model")||e.exec("ALTER TABLE chat_messages ADD COLUMN model TEXT"),e.prepare("UPDATE server_state SET schema_version = 85 WHERE id = 1").run(),console.info("[db migration v85] chat_messages cost columns added (cost_usd, token_usage, model)")}catch(r){throw new Error(`Schema v85 migration failed: ${r instanceof Error?r.message:String(r)}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<87)try{e.prepare("PRAGMA table_info(tasks)").all().some(E=>E.name==="cost_breakdown")||(e.exec("ALTER TABLE tasks ADD COLUMN cost_breakdown TEXT"),console.info("[db migration v87] tasks.cost_breakdown re-added (drift repair)"));let t=e.prepare("PRAGMA table_info(chat_messages)").all(),i=E=>t.some(n=>n.name===E);i("cost_usd")||(e.exec("ALTER TABLE chat_messages ADD COLUMN cost_usd REAL"),console.info("[db migration v87] chat_messages.cost_usd re-added (drift repair)")),i("token_usage")||(e.exec("ALTER TABLE chat_messages ADD COLUMN token_usage TEXT"),console.info("[db migration v87] chat_messages.token_usage re-added (drift repair)")),i("model")||(e.exec("ALTER TABLE chat_messages ADD COLUMN model TEXT"),console.info("[db migration v87] chat_messages.model re-added (drift repair)")),e.prepare("UPDATE server_state SET schema_version = 87 WHERE id = 1").run()}catch(r){throw new Error(`Schema v87 migration failed: ${r instanceof Error?r.message:String(r)}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<88)try{e.prepare("PRAGMA table_info(chat_sessions)").all().some(t=>t.name==="sdk_session_id")||(e.exec("ALTER TABLE chat_sessions ADD COLUMN sdk_session_id TEXT"),console.info("[db migration v88] chat_sessions.sdk_session_id added")),e.prepare("UPDATE server_state SET schema_version = 88 WHERE id = 1").run()}catch(r){throw new Error(`Schema v88 migration failed: ${r instanceof Error?r.message:String(r)}`)}try{let s=e.prepare("SELECT id, name, steps, role_preference FROM task_templates WHERE enabled = 1").all(),r=0;for(let t of s){if(t.role_preference)continue;let i;try{i=JSON.parse(t.steps)}catch{continue}if(!Array.isArray(i))continue;let E=!1;for(let n of i){let T=typeof n.roleId=="string"&&n.roleId.length>0,a=n.autoSelectRole===!0;!T&&!a&&(n.autoSelectRole=!0,n.requirements===void 0&&(n.requirements={}),E=!0)}E&&(e.prepare("UPDATE task_templates SET steps = ?, updated_at = ? WHERE id = ?").run(JSON.stringify(i),Date.now(),t.id),r+=1,console.info(`[db migration] template auto-repaired: id=${t.id} name=${t.name}`))}r>0&&console.info(`[db migration] auto-repaired ${r} enabled template(s) with missing role config`)}catch(s){console.error("[db migration] template auto-repair failed:",s)}}function Be(){if(A)return A;let e=process.env.ADAM_DB_PATH||W,_=Ne(e);return ce(_)||le(_,{recursive:!0}),A=new ae(e),A.pragma("journal_mode = WAL"),A.pragma("foreign_keys = ON"),A.pragma("trusted_schema = ON"),me(A),A}function We(){A&&(A.close(),A=null)}var D,re,h,w,b,ee,de,pe,A,Le=H(()=>{Y();K();Z();D=g("store"),re=["work","flow_complete"].join(""),h=`${re}:`,w=["work","flow_executions"].join(""),b=["work","flow_artifacts"].join(""),ee=["idx","work","flow_executions_event_id"].join("_"),de=["idx","work","flow_artifacts_execution"].join("_"),pe=["idx","work","flow_artifacts_step"].join("_"),A=null});export{Te as a,Xe as b,Se as c,ge as d,Ce as e,J as f,Ue as g,De as h,he as i,xe as j,ye as k,Z as l,me as m,Be as n,We as o,Le as p};
1220
+ `),i=0;for(let E of r){let n=`backfill-${E.id}`,T={};if(E.token_usage)try{T=JSON.parse(E.token_usage)}catch{}let c=null;if(E.cost_breakdown)try{c=JSON.parse(E.cost_breakdown)}catch{}if(c&&Array.isArray(c.perModel)&&c.perModel.length>0)for(let p=0;p<c.perModel.length;p++){let o=c.perModel[p],f=`${n}-${p}`;t.run(f,n,o.model,E.id,o.inputTokens??0,o.outputTokens??0,o.cacheReadTokens??0,o.cacheCreationTokens??0,o.costUsd??0,o.priced?1:0,o.estimated?1:0,E.created_at??Date.now()),i++}else{let p=`${n}-0`,o=E.cost_usd>0?1:0;t.run(p,n,"unknown",E.id,T.input??0,T.output??0,0,0,E.cost_usd,o,0,E.created_at??Date.now()),i++}}e.prepare("UPDATE server_state SET schema_version = 84 WHERE id = 1").run(),console.info(`[db migration v84] llm_costs table created + ${i} rows backfilled from tasks`)}catch(r){throw new Error(`Schema v84 migration failed: ${r instanceof Error?r.message:String(r)}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<85)try{let r=e.prepare("PRAGMA table_info(chat_messages)").all(),t=i=>r.some(E=>E.name===i);t("cost_usd")||e.exec("ALTER TABLE chat_messages ADD COLUMN cost_usd REAL"),t("token_usage")||e.exec("ALTER TABLE chat_messages ADD COLUMN token_usage TEXT"),t("model")||e.exec("ALTER TABLE chat_messages ADD COLUMN model TEXT"),e.prepare("UPDATE server_state SET schema_version = 85 WHERE id = 1").run(),console.info("[db migration v85] chat_messages cost columns added (cost_usd, token_usage, model)")}catch(r){throw new Error(`Schema v85 migration failed: ${r instanceof Error?r.message:String(r)}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<87)try{e.prepare("PRAGMA table_info(tasks)").all().some(E=>E.name==="cost_breakdown")||(e.exec("ALTER TABLE tasks ADD COLUMN cost_breakdown TEXT"),console.info("[db migration v87] tasks.cost_breakdown re-added (drift repair)"));let t=e.prepare("PRAGMA table_info(chat_messages)").all(),i=E=>t.some(n=>n.name===E);i("cost_usd")||(e.exec("ALTER TABLE chat_messages ADD COLUMN cost_usd REAL"),console.info("[db migration v87] chat_messages.cost_usd re-added (drift repair)")),i("token_usage")||(e.exec("ALTER TABLE chat_messages ADD COLUMN token_usage TEXT"),console.info("[db migration v87] chat_messages.token_usage re-added (drift repair)")),i("model")||(e.exec("ALTER TABLE chat_messages ADD COLUMN model TEXT"),console.info("[db migration v87] chat_messages.model re-added (drift repair)")),e.prepare("UPDATE server_state SET schema_version = 87 WHERE id = 1").run()}catch(r){throw new Error(`Schema v87 migration failed: ${r instanceof Error?r.message:String(r)}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<88)try{e.prepare("PRAGMA table_info(chat_sessions)").all().some(t=>t.name==="sdk_session_id")||(e.exec("ALTER TABLE chat_sessions ADD COLUMN sdk_session_id TEXT"),console.info("[db migration v88] chat_sessions.sdk_session_id added")),e.prepare("UPDATE server_state SET schema_version = 88 WHERE id = 1").run()}catch(r){throw new Error(`Schema v88 migration failed: ${r instanceof Error?r.message:String(r)}`)}try{let s=e.prepare("SELECT id, name, steps, role_preference FROM task_templates WHERE enabled = 1").all(),r=0;for(let t of s){if(t.role_preference)continue;let i;try{i=JSON.parse(t.steps)}catch{continue}if(!Array.isArray(i))continue;let E=!1;for(let n of i){let T=typeof n.roleId=="string"&&n.roleId.length>0,c=n.autoSelectRole===!0;!T&&!c&&(n.autoSelectRole=!0,n.requirements===void 0&&(n.requirements={}),E=!0)}E&&(e.prepare("UPDATE task_templates SET steps = ?, updated_at = ? WHERE id = ?").run(JSON.stringify(i),Date.now(),t.id),r+=1,console.info(`[db migration] template auto-repaired: id=${t.id} name=${t.name}`))}r>0&&console.info(`[db migration] auto-repaired ${r} enabled template(s) with missing role config`)}catch(s){console.error("[db migration] template auto-repair failed:",s)}}function $e(){if(A)return A;let e=process.env.ADAM_DB_PATH||W,_=pe(e);return Ne(_)||de(_,{recursive:!0}),A=new le(e),A.pragma("journal_mode = WAL"),A.pragma("foreign_keys = ON"),A.pragma("trusted_schema = ON"),Re(A),A}function je(){A&&(A.close(),A=null)}var D,te,h,w,ee,re,me,Le,A,Ae=H(()=>{Y();K();b();D=g("store"),te=["work","flow_complete"].join(""),h=`${te}:`,w=["work","flow_executions"].join(""),ee=["work","flow_artifacts"].join(""),re=["idx","work","flow_executions_event_id"].join("_"),me=["idx","work","flow_artifacts_execution"].join("_"),Le=["idx","work","flow_artifacts_step"].join("_"),A=null});export{J as a,Ce as b,Ue as c,De as d,he as e,xe as f,Q as g,ye as h,ke as i,Fe as j,we as k,Me as l,b as m,Re as n,$e as o,je as p,Ae as q};
@@ -0,0 +1,14 @@
1
+ import{a as D,g as Be}from"./chunk-FQHGIY3E.js";import{a as Te}from"./chunk-2JM3URDG.js";import{b as ie}from"./chunk-L4APYD5A.js";import{e as Re,i as st}from"./chunk-GQS3ED3B.js";import{b as pe,k as me,m as re,s as oe}from"./chunk-ORFLN4BF.js";import{a as Oe}from"./chunk-L7JP7DUO.js";import{c as $e}from"./chunk-HEHST2E2.js";import{b as Me}from"./chunk-T2Z2JDPY.js";import{a as Ne,b as fe,c as De,k as Pe}from"./chunk-FN64ZULV.js";import{D as ue,L as nt,b as j,c as Ce,p as it}from"./chunk-WG3C43QS.js";import{a as J,b as ee,d as _e,j as ae,l as ge,n as be,o as ke,r as rt}from"./chunk-6GYNUTPP.js";import{a as xe,b as te,c as we,e as ce,f as ve,g as de,k as Ee,m as Ae,o as K,q as le}from"./chunk-LMQPGVM7.js";import{c as Z,h as Ie}from"./chunk-EZLBMUQD.js";import{c as Se,e as ot}from"./chunk-5M6IGE5G.js";nt();st();it();import{createSdkMcpServer as Kt,tool as M}from"@anthropic-ai/claude-agent-sdk";import{z as d}from"zod";import{v4 as he}from"uuid";rt();Ie();le();var at=Z("audit");function I(t){try{K().prepare(`
2
+ INSERT INTO artifact_access_log (
3
+ timestamp, task_id, role_id, execution_id, step_id, tool, artifact_key, artifact_id,
4
+ size_bytes, outcome, error_reason
5
+ )
6
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
7
+ `).run(t.timestamp,t.taskId??null,t.roleId??null,t.executionId,t.stepId??null,t.tool,t.artifactKey??null,t.artifactId??null,t.sizeBytes??null,t.outcome,t.errorReason??null)}catch(e){at.error({err:e,entry:t},"Failed to write artifact access log")}}Ae();import{tool as q}from"@anthropic-ai/claude-agent-sdk";import{z as k}from"zod";import{v4 as ct}from"uuid";function B(t){return{content:[{type:"text",text:JSON.stringify(t)}]}}var dt={query:k.string().describe("Search query for memory retrieval"),roleId:pe.optional().describe("Role ID to scope search (omit for cross-role)"),topK:k.number().optional().describe("Max results to return (default 5)")},lt={query:k.string().describe("Search query for memory retrieval"),topK:k.number().optional().describe("Max results to return (default 5)")},ut={id:k.string().optional().describe("Memory ID to update. Omit to create new."),roleId:pe.describe("Role ID to save memory under"),content:k.string().describe("Memory content text"),type:k.enum(["event","thought","reflection"]).optional().describe("Memory type (default: thought)"),keywords:k.array(k.string()).optional().describe("Keywords for BM25 search"),importance:k.number().min(1).max(5).optional().describe("Importance 1-5 (default: 3)"),tier:k.enum(["working","episodic","semantic"]).optional().describe("Memory tier (default: episodic)")},pt={id:k.string().optional().describe("Memory ID to update. Omit to create new."),content:k.string().describe("Memory content text"),type:k.enum(["event","thought","reflection"]).optional().describe("Memory type (default: thought)"),keywords:k.array(k.string()).optional().describe("Keywords for BM25 search"),importance:k.number().min(1).max(5).optional().describe("Importance 1-5 (default: 3)"),tier:k.enum(["working","episodic","semantic"]).optional().describe("Memory tier (default: episodic)")},ze={id:k.string().describe("Memory ID to delete")};async function Fe(t,e){let r=t??e.roleId,n=e.topK??5,a=await $e(r,e.query,{topK:n});return B({results:a.map(c=>({id:c.id,type:c.type,content:c.content,keywords:c.keywords,importance:c.importance,score:c.score}))})}async function Ke(t,e){let r=t??e.roleId;if(!r)return B({error:"roleId is required"});let n,a=!0;try{n=await Me(e.content)}catch{a=!1}if(e.id){let y=fe(e.id);if(!y)return B({error:`Memory ${e.id} not found`});let A=De(e.id,{content:e.content,embedding:n,keywords:e.keywords,importance:e.importance,type:e.type});return D({toolName:"save_memory",entityType:"memory",verb:"update",entityId:e.id,fieldChanges:[{path:"content",op:"set",before:y.content,after:e.content}],roleId:r}),B({id:e.id,action:"updated",success:A,embeddingUpdated:a})}let c=`mem-${ct().slice(0,8)}`,m=Date.now();return Ne({id:c,roleId:r,type:e.type??"thought",content:e.content,embedding:n,keywords:e.keywords??[],importance:e.importance??3,sourceType:"manual",createdAt:m,lastAccessed:m,retrievedCount:0,tier:e.tier??"episodic"}),D({toolName:"save_memory",entityType:"memory",verb:"create",entityId:c,fieldChanges:[{path:"_entity",op:"set",before:null,after:{id:c,roleId:r,type:e.type??"thought",content:e.content.length>200?`${e.content.slice(0,200)}\u2026`:e.content,tier:e.tier??"episodic"}}],roleId:r}),B({id:c,action:"created",success:!0,embeddingUpdated:a})}async function Le(t,e){let r=fe(e.id);if(t){if(!r)return B({error:`Memory ${e.id} not found`});if(r.roleId!==t)return B({error:`Memory ${e.id} does not belong to this role`})}return Pe(e.id),D({toolName:"delete_memory",entityType:"memory",verb:"delete",entityId:e.id,fieldChanges:[{path:"_entity",op:"set",before:r?{id:r.id,roleId:r.roleId,content:r.content.length>200?`${r.content.slice(0,200)}\u2026`:r.content}:null,after:null}],roleId:t??r?.roleId}),B({id:e.id,deleted:!0})}function je(t){return t?[q("search_memories","Search agent memory using hybrid vector + keyword search. Returns scored memories ranked by relevance, recency, and importance.",lt,async e=>Fe(t,e)),q("save_memory","Create a new memory or update an existing one. Provide 'id' to update, omit to create. Embedding is auto-generated from content.",pt,async e=>Ke(t,e)),q("delete_memory","Delete a memory by ID.",ze,async e=>Le(t,e))]:[q("search_memories","Search agent memory using hybrid vector + keyword search. Returns scored memories ranked by relevance, recency, and importance.",dt,async e=>Fe(void 0,e)),q("save_memory","Create a new memory or update an existing one. Provide 'id' to update, omit to create. Embedding is auto-generated from content.",ut,async e=>Ke(void 0,e)),q("delete_memory","Delete a memory by ID.",ze,async e=>Le(void 0,e))]}Ae();import{basename as Y,extname as jt,join as qt}from"path";import{writeFileSync as Ht}from"fs";Ie();le();import{v4 as mt}from"uuid";function qe(t){let e=[];if(t.verb||e.push("verb is required"),t.entityType||e.push("entityType is required"),!t.expected)return e.push("expected is required"),{valid:!1,errors:e};let r=t.expected;if(r.kind==="outbound")r.target?.channelId||e.push("expected.target.channelId is required for outbound"),r.attachmentCount!==void 0&&(typeof r.attachmentCount!="number"||r.attachmentCount<0)&&e.push("expected.attachmentCount must be a non-negative number");else if(r.kind==="field_change")r.entityId||e.push("expected.entityId is required for field_change"),r.fieldPath||e.push("expected.fieldPath is required for field_change"),r.op!=="set"&&r.op!=="list_add"&&r.op!=="list_remove"&&e.push("expected.op must be 'set', 'list_add', or 'list_remove'"),r.op==="set"&&(r.after===void 0&&e.push("expected.after is required when op='set'"),(r.added!==void 0||r.removed!==void 0)&&e.push("expected.added/removed must be absent when op='set'")),r.op==="list_add"&&((!Array.isArray(r.added)||r.added.length===0)&&e.push("expected.added (non-empty array) is required when op='list_add'"),(r.after!==void 0||r.removed!==void 0)&&e.push("expected.after/removed must be absent when op='list_add'")),r.op==="list_remove"&&((!Array.isArray(r.removed)||r.removed.length===0)&&e.push("expected.removed (non-empty array) is required when op='list_remove'"),(r.after!==void 0||r.added!==void 0)&&e.push("expected.after/added must be absent when op='list_remove'"));else if(r.kind==="batch"){r.entityType||e.push("expected.entityType is required for batch");let n=Array.isArray(r.entityIds)&&r.entityIds.length>0,a=!!r.scope&&typeof r.scope.expectedCount=="number"&&r.scope.expectedCount>=0&&!!r.scope.filter;!n&&!a&&e.push("batch claims require entityIds (non-empty) or scope (with filter + non-negative expectedCount)")}else e.push(`expected.kind must be 'outbound', 'field_change', or 'batch'; got '${r.kind}'`);return{valid:e.length===0,errors:e}}var H=class extends Error{constructor(r){super(`Invalid claim spec: ${r.join("; ")}`);this.errors=r;this.name="InvalidClaimError"}errors};function He(t){if(!t.traceId)throw new H(["traceId is required"]);if(!Array.isArray(t.claims)||t.claims.length===0)throw new H(["claims must be a non-empty array"]);for(let[r,n]of t.claims.entries()){let a=qe(n);if(!a.valid)throw new H([`claims[${r}]: ${a.errors.join("; ")}`])}let e={id:t.id??mt(),traceId:t.traceId,sessionId:t.sessionId,taskId:t.taskId,sourceMessageId:t.sourceMessageId,claims:t.claims,declaredAt:t.declaredAt??Date.now()};return K().prepare(`
8
+ INSERT INTO assistant_claims (
9
+ id, trace_id, session_id, task_id, source_message_id, claims_json, declared_at
10
+ )
11
+ VALUES (?, ?, ?, ?, ?, ?, ?)
12
+ `).run(e.id,e.traceId,e.sessionId??null,e.taskId??null,e.sourceMessageId??null,JSON.stringify(e.claims),e.declaredAt),e}function pr(t){return K().prepare(`
13
+ SELECT * FROM assistant_claims WHERE trace_id = ? ORDER BY declared_at ASC
14
+ `).all(t).map(ft)}function ft(t){return{id:t.id,traceId:t.trace_id,sessionId:t.session_id??void 0,taskId:t.task_id??void 0,sourceMessageId:t.source_message_id??void 0,claims:JSON.parse(t.claims_json),declaredAt:t.declared_at}}ot();import{execFile as Nt}from"child_process";import{promisify as Dt}from"util";import{isAbsolute as Pt,basename as Mt}from"path";import Ye from"vm";import{isAbsolute as ht}from"path";var P=class extends Error{constructor(e,r){super(`DSL parse error in "${e}": ${r}`),this.name="DslParseError"}},yt=/^[a-z][a-z0-9_.]*$/i,It=/\.\./;function V(t){if(!yt.test(t))throw new P(t,`invalid handler key format "${t}" \u2014 must match [a-z][a-z0-9_.]*`);if(It.test(t))throw new P(t,'handler key must not contain ".."')}function Ue(t){let e=t.trim();try{let n=JSON.parse(e);if(typeof n=="number"||typeof n=="string"||typeof n=="boolean")return n}catch{}let r=parseFloat(e);return Number.isNaN(r)?e:r}var _t=/^([a-z][a-z0-9_.]*)\s+matches\s+\/(.+)\/([gimsuy]*)$/i,gt=/^([a-z][a-z0-9_.]*)\s*(<=|>=|==|!=)\s*(.+)$/i,bt=/^([a-z][a-z0-9_.]*)\s*(<|>)\s*(.+)$/i,kt=/^([a-z][a-z0-9_.]*)\s+between\s+(-?\d+(?:\.\d+)?)\s+and\s+(-?\d+(?:\.\d+)?)$/i,xt=/^([a-z][a-z0-9_.]*)\s+in\s+\[([^\]]+)\]$/i;function We(t){if(typeof t=="object"&&t!==null&&"script"in t){let r=String(t.script);if(!ht(r))throw new P(`{script: "${r}"}`,"script path must be absolute");return{kind:"script",scriptPath:r}}if(typeof t!="string")throw new P(String(t),"assertion must be a string or {script: string} object");let e=t.trim();if(!e)throw new P(e,"empty assertion string");{let r=_t.exec(e);if(r){let n=r[1];return V(n),{kind:"matches",key:n,regexSource:r[2],regexFlags:r[3]??""}}}{let r=kt.exec(e);if(r){let n=r[1];return V(n),{kind:"between",key:n,min:parseFloat(r[2]),max:parseFloat(r[3])}}}{let r=xt.exec(e);if(r){let n=r[1];V(n);let a=r[2],c=[];for(let m of a.split(",")){let y=m.trim();if(y)try{let A=JSON.parse(y);typeof A=="number"||typeof A=="string"||typeof A=="boolean"?c.push(A):c.push(y)}catch{c.push(y)}}return{kind:"in",key:n,values:c}}}{let r=gt.exec(e);if(r){let n=r[1];return V(n),{kind:"comparison",key:n,op:r[2],value:Ue(r[3])}}}{let r=bt.exec(e);if(r){let n=r[1];return V(n),{kind:"comparison",key:n,op:r[2],value:Ue(r[3])}}}throw new P(e,"unrecognized assertion syntax \u2014 expected key <op> value, between, in [...], matches /.../, or {script: ...}")}import{execFile as vt,spawn as Et}from"child_process";import{promisify as At}from"util";import{readFile as X}from"fs/promises";import{existsSync as St}from"fs";import{createHash as Ct}from"crypto";function wt(t){return typeof t=="number"?Number.isInteger(t)?t.toString():t.toFixed(4):JSON.stringify(t)}var L=class extends Error{constructor(r){super(`NO_HANDLER: ${r}, install relevant capability or remove assertion`);this.handlerKey=r;this.name="NoHandlerError"}handlerKey},C=class extends Error{constructor(r,n,a){super(`ASSERTION_FAILED: ${r}=${wt(n)}, expected ${a}`);this.handlerKey=r;this.measured=n;this.expected=a;this.name="AssertionFailedError"}handlerKey;measured;expected},b=class extends Error{constructor(r,n){super(`HANDLER_RUNTIME_ERROR: ${r}: ${n}`);this.handlerKey=r;this.detail=n;this.name="HandlerRuntimeError"}handlerKey;detail};var Tt=At(vt);function z(t,e){if(!St(e))throw new b(t,`file not found: ${e}`)}async function Rt(t){try{return await Tt("ffprobe",t,{maxBuffer:10*1024*1024})}catch(e){throw e.code==="ENOENT"?new b("audio.*","ffprobe not found on PATH \u2014 install ffmpeg/ffprobe"):new b("audio.*",`ffprobe failed: ${e.message}`)}}async function Je(t,e){return new Promise((r,n)=>{let a=[],c=Et("ffmpeg",["-v","error","-i",t,"-f","s16le","-ar",String(e),"-ac","1","-"]);c.stdout.on("data",y=>a.push(y));let m="";c.stderr.on("data",y=>{m+=y.toString()}),c.on("error",y=>{y.code==="ENOENT"?n(new b("audio.*","ffmpeg not found on PATH \u2014 install ffmpeg/ffprobe")):n(new b("audio.*",`ffmpeg failed: ${y.message}`))}),c.on("close",y=>{y!==0?n(new b("audio.*",`ffmpeg exit ${y}: ${m.trim()}`)):r(Buffer.concat(a))})})}var Ve=new Map;async function Ot(t){let e=JSON.stringify(t);if(/"\$ref"\s*:\s*"https?:\/\//.test(e))throw new b("json.schema_valid","remote $ref not supported in schema");let r=Ct("sha256").update(e).digest("hex"),n=Ve.get(r);if(n)return n;let a=(await import("ajv")).default,m=new a({strict:!1,allErrors:!1}).compile(t);return Ve.set(r,m),m}var Xe={"audio.duration_s":async t=>{z("audio.duration_s",t);let{stdout:e}=await Rt(["-v","error","-show_entries","format=duration","-of","default=noprint_wrappers=1:nokey=1",t]),r=parseFloat(e.trim());if(!Number.isFinite(r))throw new b("audio.duration_s",`ffprobe returned non-numeric duration: ${e.trim()}`);return r},"audio.zc_rate_per_s":async t=>{z("audio.zc_rate_per_s",t);let e=24e3,r=await Je(t,e),n=new Int16Array(r.buffer,r.byteOffset,r.byteLength/2),a=0;for(let m=1;m<n.length;m++)n[m-1]>=0!=n[m]>=0&&a++;let c=n.length/e;return c>0?a/c:0},"audio.rms":async t=>{z("audio.rms",t);let r=await Je(t,24e3),n=new Int16Array(r.buffer,r.byteOffset,r.byteLength/2),a=0;for(let c=0;c<n.length;c++){let m=n[c]/32768;a+=m*m}return n.length>0?Math.sqrt(a/n.length):0},"markdown.word_count":async t=>{z("markdown.word_count",t);let e=await X(t,"utf-8");return e.trim().length===0?0:e.trim().split(/\s+/).length},"image.width_px":async t=>{z("image.width_px",t);let{imageSize:e}=await import("image-size"),r=await X(t),n=e(r);if(typeof n.width!="number")throw new b("image.width_px","could not determine image width");return n.width},"image.height_px":async t=>{z("image.height_px",t);let{imageSize:e}=await import("image-size"),r=await X(t),n=e(r);if(typeof n.height!="number")throw new b("image.height_px","could not determine image height");return n.height},"pdf.page_count":async t=>{z("pdf.page_count",t);let{PDFDocument:e}=await import("pdf-lib"),r=await X(t);return(await e.load(r,{ignoreEncryption:!0})).getPageCount()},"json.schema_valid":async(t,e)=>{if(z("json.schema_valid",t),!e||typeof e!="object"||!("schema"in e))throw new b("json.schema_valid","missing schema arg");let r=await Ot(e.schema),n=await X(t,"utf-8"),a;try{a=JSON.parse(n)}catch(c){throw new b("json.schema_valid",`file is not valid JSON: ${c.message}`)}return r(a)===!0}};var $t=Dt(Nt);async function Ge(t,e,r={}){let n=r.handlerRegistry??Xe;for(let a=0;a<e.length;a++){let c=e[a],m=We(c);if(m.kind==="script"){await zt(m.scriptPath,t);continue}let y=n[m.key];if(!y)throw new L(m.key);let A=r.handlerArgsByIndex?.[a],i=await y(t,A);Bt(m,i)}}function Bt(t,e){switch(t.kind){case"comparison":{let{key:r,op:n,value:a}=t,c=!1;if(n==="<"?c=e<a:n===">"?c=e>a:n==="<="?c=e<=a:n===">="?c=e>=a:n==="=="?c=e==a:n==="!="&&(c=e!=a),!c)throw new C(r,e,`${n} ${a}`);break}case"between":{let{key:r,min:n,max:a}=t;if(e<n||e>a)throw new C(r,e,`between ${n} and ${a}`);break}case"in":{let{key:r,values:n}=t;if(!n.includes(e))throw new C(r,e,`in [${n.join(", ")}]`);break}case"matches":{let{key:r,regexSource:n,regexFlags:a}=t;if(!Ft(String(e),n,a,100))throw new C(r,e,`matches /${n}/${a}`);break}}}async function zt(t,e){if(!Pt(t))throw new b("script",`script path must be absolute: ${t}`);try{await $t(t,[e],{timeout:6e4,maxBuffer:1024*1024})}catch(r){let n=r;if(n.code==="ENOENT")throw new b("script",`script not found: ${t}`);let a=n.exitCode;throw new C("script:"+Mt(t),a??"error",n.stderr?.trim()??n.message)}}function Ft(t,e,r,n){let a={value:t,regex:new RegExp(e,r),result:!1};Ye.createContext(a);try{return Ye.runInContext("result = regex.test(value)",a,{timeout:n}),a.result}catch(c){throw new b("matches",`regex evaluation timeout or error: ${c.message}`)}}le();var Lt="execution-tools",Br="mcp__execution-tools__",zr=["mcp__execution-tools__write_artifact","mcp__execution-tools__publish_artifact_file","mcp__execution-tools__send_to_channel","mcp__execution-tools__report_blocked","mcp__execution-tools__commit_claim","mcp__execution-tools__save_memory","mcp__execution-tools__delete_memory"],Fr=["mcp__execution-tools__list_channels","mcp__execution-tools__read_artifact","mcp__execution-tools__fetch_artifact_file","mcp__execution-tools__list_artifacts","mcp__execution-tools__search_memories"],Kr=["mcp__execution-tools__write_artifact","mcp__execution-tools__publish_artifact_file","mcp__execution-tools__send_to_channel","mcp__execution-tools__report_blocked","mcp__execution-tools__commit_claim","mcp__execution-tools__save_memory","mcp__execution-tools__delete_memory","mcp__execution-tools__list_channels","mcp__execution-tools__read_artifact","mcp__execution-tools__fetch_artifact_file","mcp__execution-tools__list_artifacts","mcp__execution-tools__search_memories"],U=Z("execution"),Ut=/^[\p{L}0-9._-]{1,256}$/u,Wt=/^[\p{L}0-9._-]{1,128}$/u,ne=256*1024,Qe=/^[a-z]+\/[a-z0-9.+-]+$/,Jt={".mp3":"audio/mpeg",".m4a":"audio/mp4",".aac":"audio/aac",".wav":"audio/wav",".ogg":"audio/ogg",".opus":"audio/opus",".flac":"audio/flac",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".svg":"image/svg+xml",".mp4":"video/mp4",".mov":"video/quicktime",".webm":"video/webm",".pdf":"application/pdf",".zip":"application/zip",".json":"application/json",".txt":"text/plain",".md":"text/markdown",".html":"text/html",".csv":"text/csv"};function Ze(t){return Jt[jt(t).toLowerCase()]}async function Vt(t){let{listChannels:e}=await import("./channels-ZHCTFSDA.js"),r=e(),{listSessions:n}=await import("./session-manager-PU4GH3E4.js"),a=[...n("active"),...n("archived")],{getDefaultChatIdForChannel:c}=await import("./target-resolution-RLNUCT6M.js"),m=r.find(A=>A.name.toLowerCase().includes(t.toLowerCase()));if(!m)return null;let y=c(m,a)??"";return{channelId:m.id,chatId:y}}function l(t){return{content:[{type:"text",text:JSON.stringify(t)}]}}function se(t){return Ut.test(t)?null:"Invalid artifact key. Use only letters, numbers, dot, underscore, or dash (1-256 chars)."}function ye(t){return Wt.test(t)?null:"Invalid stepId format. Use only letters, numbers, dot, underscore, or dash (1-128 chars)."}function et(t,e,r){return t!==e?t:Y(r)}function tt(t,e){let r=ie(t);if(!r)return null;let n=oe(r.templateId);return n?n.steps.find(m=>m.id===e)?.outputAs??null:null}var Xt=t=>{if(!t)return!1;let e=j(t);return!!(e?.parentId&&e.templateId&&e.stepId)};function po(t,e,r){let n=t?ue(t):void 0,a=r??(()=>{}),c=async()=>{if(!e)return{error:"artifact tools require a task context"};let i=j(e);if(!i)return{error:`task not found: ${e}`};let o=i.roleId??t;if(!o)return{error:"this template execution task has no role context"};let p=ue(o);return p?{taskId:e,roleId:o,roleWorkspacePath:Re(p.name)}:{error:`role not found: ${o}`}},m=async()=>{let i=await c();if("error"in i)return i;let o=j(i.taskId);return o.parentId?o.stepId?{executionId:o.parentId,stepId:o.stepId,roleId:i.roleId,roleWorkspacePath:i.roleWorkspacePath,taskId:i.taskId}:{error:"this task is not a TemplateExecution step (no step_id)"}:{error:"this task is not a TemplateExecution step (no execution context)"}},y=[...je(t),M("list_channels","List all available channels. Use this to discover what channels can be used with send_to_channel.",{},async()=>{let{listChannels:i}=await import("./channels-ZHCTFSDA.js"),o=i();return l({channels:o.map(p=>({id:p.id,name:p.name,enabled:p.enabled,type:p.config?.type??"unknown"}))})}),M("send_to_channel","Send a message to a connected channel by name. This role can only send to channels in its allowedChannels list (if configured).",{channelName:d.string().describe("The channel name, e.g., 'WeChat on iPad' or 'Client Mail'"),message:d.string().describe("The message content to send")},async i=>{if(n?.allowedChannels!==void 0){if(n.allowedChannels.length===0)return l({error:"This role is not allowed to send to any channels"});if(!n.allowedChannels.some(u=>u.toLowerCase()===i.channelName.toLowerCase()))return l({error:`Channel "${i.channelName}" is not in the allowed channels list for this role`})}let o=await Vt(i.channelName);if(!o)return l({error:`Channel "${i.channelName}" not found or has no chatId available`});let{getOutboundGateway:p}=await import("./outbound-gateway-LKRQYPA2.js"),s=await p().send({channelId:o.channelId,chatId:o.chatId,content:i.message,messageType:"reply"});return l({success:s.success,channelName:i.channelName})}),M("write_artifact","Persist a small structured value (JSON <= 256KB) for downstream TemplateExecution steps to read. USE THIS for: extracted fields, status flags, URL lists, summaries, structured key-value data. Do NOT use for: files (audio, video, reports). For files use publish_artifact_file instead.",{key:d.string().describe("Artifact key \u2014 a unique identifier for this value within the template execution."),value:d.unknown().describe("The JSON value to persist (must be <= 256KB serialized)."),priority:d.number().int().min(0).max(1e3).optional().describe("Lower = higher priority for delivery packing. Use 10 for primary deliverables (audio/video), 50 for text/markdown, 100 for images. Omit to use server-side heuristic.")},async i=>{let o=await m();if("error"in o)return l({error:o.error});if(i.priority!==void 0&&(i.priority<0||i.priority>1e3||!Number.isInteger(i.priority)))return l({error:`Invalid priority: ${i.priority}. Must be an integer between 0 and 1000.`});let p=se(i.key);if(p)return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"write_artifact",artifactKey:i.key,outcome:"denied",errorReason:p}),l({error:p});let x=tt(o.executionId,o.stepId),s=ie(o.executionId),h=s?oe(s.templateId):null,u=h?h.steps.some(_=>_.id===o.stepId):!1,w=i.key,$,G=h!=null&&h.steps.some(_=>!!_.outputAs);if(x===null&&u&&G){let _=`Step "${o.stepId}" in template "${s.templateId}" has no outputAs declared. This template must be migrated before its steps can publish artifacts. Operator action required: run \`pnpm tsx scripts/migrate-all-templates-outputAs.ts --apply\` from the project root, or have the operator ask ChatManager in chat to upgrade the template.`;return U.warn({taskId:o.taskId,stepId:o.stepId,templateId:s.templateId},"write_artifact: step has no outputAs in migrated template"),I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"write_artifact",artifactKey:i.key,outcome:"denied",errorReason:_}),l({error:_})}x&&i.key!==x&&(w=x,$=`key '${i.key}' replaced with step.outputAs '${x}'`,U.warn({taskId:o.taskId,llmKey:i.key,outputAs:x},"write_artifact: server key override"));let Q=h?.steps?.find(_=>_.id===o.stepId),T=Q?Be(Q,i.value):!1;try{let _=he(),v,S;if(T){let R=i.value;if(v=Buffer.byteLength(R,"utf8"),v>ne){let O=`Artifact text exceeds ${ne} bytes`;return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"write_artifact",artifactKey:i.key,sizeBytes:v,outcome:"denied",errorReason:O}),l({error:O})}S=qt(xe(o.executionId),`${_}.bin`),Ht(S,R,"utf8")}else{let R=JSON.stringify(i.value);if(v=Buffer.byteLength(R,"utf8"),v>ne){let O=`Artifact JSON exceeds ${ne} bytes`;return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"write_artifact",artifactKey:i.key,sizeBytes:v,outcome:"denied",errorReason:O}),l({error:O})}}return J({id:_,sourceKind:"template_step",executionId:o.executionId,stepId:o.stepId,key:w,...T?{kind:"file",blobPath:S,mime:"text/markdown",originalFilename:`${w}.md`}:{kind:"json",value:i.value},sizeBytes:v,createdAt:Date.now(),roleId:o.roleId,priority:i.priority}),D({toolName:"write_artifact",entityType:"artifact",verb:"create",entityId:_,fieldChanges:[{path:"_entity",op:"set",before:null,after:{artifactId:_,key:w,kind:T?"file":"json",taskId:o.taskId}}],taskId:o.taskId,roleId:o.roleId}),I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"write_artifact",artifactKey:w,artifactId:_,sizeBytes:v,outcome:"success"}),l({success:!0,artifactId:_,sizeBytes:v,...$?{note:$}:{}})}catch(_){let v=_ instanceof Error?_.message:String(_);return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"write_artifact",artifactKey:i.key,outcome:"error",errorReason:v}),l({error:v})}}),M("read_artifact","Read a structured value previously written by an upstream step's write_artifact. Returns the JSON value. For files, use fetch_artifact_file instead.",{stepId:re.describe("TemplateExecution step ID of the artifact's source step."),key:d.string().describe("Artifact key \u2014 a unique identifier for this value within the template execution.")},async i=>{let o=await m();if("error"in o)return l({error:o.error});let p=ye(i.stepId),x=se(i.key),s=p??x;if(s)return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"read_artifact",artifactKey:i.key,outcome:"denied",errorReason:s}),l({error:s});let h=ee(o.executionId,i.stepId,i.key);if(!h){let u=`no artifact at ${i.stepId}/${i.key}`;return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"read_artifact",artifactKey:i.key,outcome:"error",errorReason:u}),l({error:u})}if(h.kind!=="json"){let u="artifact is a file; use fetch_artifact_file";return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"read_artifact",artifactKey:i.key,artifactId:h.id,sizeBytes:h.sizeBytes,outcome:"denied",errorReason:u}),l({error:u})}return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"read_artifact",artifactKey:i.key,artifactId:h.id,sizeBytes:h.sizeBytes,outcome:"success"}),l({value:h.value,sizeBytes:h.sizeBytes})}),M("publish_artifact_file",'REQUIRED final action for any TemplateExecution step that produces a file deliverable. If your step declares outputAs and you finish work (writing audio/video/report/image to disk via Write, Edit, or Bash) WITHOUT calling this tool, the step is marked FAILED \u2014 downstream steps and delivery rules will not see your file, regardless of whether your work succeeded. "I wrote a file to my workspace" is NOT the same as "I published an artifact": the file must be registered through this call to count. Call this AFTER the file is fully written to disk, BEFORE ending your turn. The file is COPIED to template execution shared storage. USE for: generated audio, video, reports, images, large outputs. Do NOT use for small structured JSON values (<=256KB) \u2014 use write_artifact instead. sourcePath must be inside your role workspace (~/.adam/roles/<your-role>/...); if your file was written to an additionalDirectories location (InfoHub/PKOS/Code/etc.), Bash-copy it into the workspace first then publish from there. cleanup=true deletes the source after publish \u2014 only set when you no longer need the source file (the step becomes non-retryable through publish).',{key:d.string().describe("Artifact key \u2014 a unique identifier for this value within the template execution."),sourcePath:me.describe("Source file path in the Role workspace to publish as a TemplateExecution artifact."),mime:d.string().optional().describe("MIME type of the file (e.g., 'image/png', 'audio/mp3'). Auto-detected if omitted."),cleanup:d.boolean().optional().describe("If true, delete the source file after publishing. Only use when the source file is no longer needed."),priority:d.number().int().min(0).max(1e3).optional().describe("Lower = higher priority for delivery packing. Use 10 for primary deliverables (audio/video), 50 for text/markdown, 100 for images. Omit to use server-side heuristic."),role:d.string().optional().describe("Logical artifact role. REQUIRED when the step's outputContract declares expectedArtifacts \u2014 use one of the declared roles (e.g. 'podcast', 'song'). Publishing more than the declared count for a role, or an undeclared role, is rejected.")},async i=>{let o=await c();if("error"in o)return l({error:o.error});if(i.priority!==void 0&&(i.priority<0||i.priority>1e3||!Number.isInteger(i.priority)))return l({error:`Invalid priority: ${i.priority}. Must be an integer between 0 and 1000.`});let p=j(o.taskId);if(!!!(p.parentId&&p.templateId&&p.stepId)){if(i.mime&&!Qe.test(i.mime))return l({error:`Invalid MIME type: ${i.mime}`});try{te(i.sourcePath,o.roleWorkspacePath,!0)}catch(g){return l({error:g instanceof Error?g.message:String(g)})}let f=he(),E=null,N=!1;try{let g=Ee({kind:"task",artifactId:f,sourcePath:i.sourcePath});E=g.blobPath;let W={id:f,sourceKind:"task_published",taskId:o.taskId,roleId:o.roleId,kind:"file",blobPath:E,mime:i.mime??Ze(i.sourcePath),originalFilename:Y(i.sourcePath),sizeBytes:g.sizeBytes,createdAt:Date.now(),priority:i.priority};return J(W),N=!0,i.cleanup===!0&&ce(i.sourcePath),D({toolName:"publish_artifact_file",entityType:"artifact",verb:"create",entityId:f,fieldChanges:[{path:"_entity",op:"set",before:null,after:{artifactId:f,kind:"file",filename:Y(i.sourcePath),taskId:o.taskId,sourceKind:"task_published"}}],taskId:o.taskId,roleId:o.roleId}),U.info({taskId:o.taskId,roleId:o.roleId,artifactId:f,sizeBytes:g.sizeBytes},"publish_artifact_file task_published: success"),l({success:!0,artifactId:f,sizeBytes:g.sizeBytes})}catch(g){if(N)try{ae(f)}catch{}if(E)try{de(E)}catch{}let W=g instanceof Error?g.message:String(g);return U.warn({taskId:o.taskId,roleId:o.roleId,artifactId:f,err:g},"publish_artifact_file task_published: failed"),l({error:W})}}let s={executionId:p.parentId,stepId:p.stepId,roleId:o.roleId,roleWorkspacePath:o.roleWorkspacePath,taskId:o.taskId},h=se(i.key);if(h)return I({timestamp:Date.now(),taskId:s.taskId,roleId:s.roleId,executionId:s.executionId,stepId:s.stepId,tool:"publish_artifact_file",artifactKey:i.key,outcome:"denied",errorReason:h}),l({error:h});if(i.mime&&!Qe.test(i.mime)){let f=`Invalid MIME type: ${i.mime}`;return I({timestamp:Date.now(),taskId:s.taskId,roleId:s.roleId,executionId:s.executionId,stepId:s.stepId,tool:"publish_artifact_file",artifactKey:i.key,outcome:"denied",errorReason:f}),l({error:f})}let u=tt(s.executionId,s.stepId),w=ie(s.executionId),$=w?oe(w.templateId):null,G=$?$.steps.find(f=>f.id===s.stepId)??null:null,Q=G!=null,T=i.key,_,v=$!=null&&$.steps.some(f=>!!f.outputAs);if(u===null&&Q&&v){let f=`Step "${s.stepId}" in template "${w.templateId}" has no outputAs declared. This template must be migrated before its steps can publish artifacts. Operator action required: run \`pnpm tsx scripts/migrate-all-templates-outputAs.ts --apply\` from the project root, or have the operator ask ChatManager in chat to upgrade the template.`;return U.warn({taskId:s.taskId,stepId:s.stepId,templateId:w.templateId},"publish_artifact_file: step has no outputAs in migrated template"),I({timestamp:Date.now(),taskId:s.taskId,roleId:s.roleId,executionId:s.executionId,stepId:s.stepId,tool:"publish_artifact_file",artifactKey:i.key,outcome:"denied",errorReason:f}),l({error:f})}u&&i.key!==u&&(T=u,_=`key '${i.key}' replaced with step.outputAs '${u}'`,U.warn({taskId:s.taskId,llmKey:i.key,outputAs:u},"publish_artifact_file: server key override"));try{te(i.sourcePath,s.roleWorkspacePath,!0)}catch(f){let E=f instanceof Error?f.message:String(f);return I({timestamp:Date.now(),taskId:s.taskId,roleId:s.roleId,executionId:s.executionId,stepId:s.stepId,tool:"publish_artifact_file",artifactKey:T,outcome:"denied",errorReason:E}),l({error:E})}let S=he(),R=null,O=!1,F=null;try{let f=we({executionId:s.executionId,artifactId:S,sourcePath:i.sourcePath});R=f.blobPath;let E=G?.assertions??[];E.length>0&&await Ge(R,E);let N={id:S,sourceKind:"template_step",executionId:s.executionId,stepId:s.stepId,key:T,kind:"file",blobPath:R,mime:i.mime??Ze(i.sourcePath),originalFilename:Y(i.sourcePath),sizeBytes:f.sizeBytes,createdAt:Date.now(),roleId:s.roleId,priority:i.priority,...i.role!==void 0?{artifactRole:i.role}:{}};if(u&&v){let g=ee(s.executionId,s.stepId,u);if(!g)J(N),O=!0,F=N;else if(g.kind==="file")F=ke(s.executionId,s.stepId,u,g,{...N,key:et(i.key,u,i.sourcePath)}).childArtifact;else if(g.kind==="json"&&ge(g.value))F=be(s.executionId,s.stepId,u,{...N,key:et(i.key,u,i.sourcePath)}).childArtifact;else throw new Error(`Artifact key "${u}" already contains a non-collection JSON artifact`)}else J(N),O=!0,F=N;return i.cleanup===!0&&ce(i.sourcePath),D({toolName:"publish_artifact_file",entityType:"artifact",verb:"create",entityId:S,fieldChanges:[{path:"_entity",op:"set",before:null,after:{artifactId:S,key:F?.key??T,kind:"file",filename:Y(i.sourcePath),taskId:s.taskId}}],taskId:s.taskId,roleId:s.roleId}),I({timestamp:Date.now(),taskId:s.taskId,roleId:s.roleId,executionId:s.executionId,stepId:s.stepId,tool:"publish_artifact_file",artifactKey:F?.key??T,artifactId:S,sizeBytes:f.sizeBytes,outcome:"success"}),l({success:!0,artifactId:S,sizeBytes:f.sizeBytes,..._?{note:_}:{}})}catch(f){if(O)try{ae(S)}catch{}if(R&&(!F||O))try{de(R)}catch{}let E=f instanceof Error?f.message:String(f);if(I({timestamp:Date.now(),taskId:s.taskId,roleId:s.roleId,executionId:s.executionId,stepId:s.stepId,tool:"publish_artifact_file",artifactKey:T,artifactId:S,outcome:"error",errorReason:E}),f instanceof C||f instanceof L)try{let g=(K().prepare("SELECT COUNT(*) as n FROM step_logs WHERE task_id = ?").get(s.taskId)?.n??0)+1;Te({id:`step-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,taskId:s.taskId,index:g,type:"validator_error",content:f.message,toolName:"publish_artifact_file",timestamp:Date.now()})}catch{}return l({error:E})}}),M("fetch_artifact_file","Copy an upstream step's published file into your current Role workspace. Use this when an earlier step published audio, video, reports, or other files you need to process.",{stepId:re.describe("TemplateExecution step ID of the artifact's source step."),key:d.string().describe("Artifact key \u2014 a unique identifier for this value within the template execution."),destPath:me.describe("Destination path in the Role workspace where the file will be copied.")},async i=>{let o=await m();if("error"in o)return l({error:o.error});let p=ye(i.stepId),x=se(i.key),s=p??x;if(s)return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"fetch_artifact_file",artifactKey:i.key,outcome:"denied",errorReason:s}),l({error:s});try{te(i.destPath,o.roleWorkspacePath,!1)}catch(u){let w=u instanceof Error?u.message:String(u);return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"fetch_artifact_file",artifactKey:i.key,outcome:"denied",errorReason:w}),l({error:w})}let h=ee(o.executionId,i.stepId,i.key);if(!h){let u=`no artifact at ${i.stepId}/${i.key}`;return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"fetch_artifact_file",artifactKey:i.key,outcome:"error",errorReason:u}),l({error:u})}if(h.kind!=="file"||!h.blobPath){let u="artifact is not a file";return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"fetch_artifact_file",artifactKey:i.key,artifactId:h.id,outcome:"denied",errorReason:u}),l({error:u})}try{let u=ve({blobPath:h.blobPath,destPath:i.destPath});return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"fetch_artifact_file",artifactKey:i.key,artifactId:h.id,sizeBytes:u.sizeBytes,outcome:"success"}),l({success:!0,sizeBytes:u.sizeBytes,mime:h.mime,destPath:i.destPath})}catch(u){let w=u instanceof Error?u.message:String(u);return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"fetch_artifact_file",artifactKey:i.key,artifactId:h.id,outcome:"error",errorReason:w}),l({error:w})}}),M("list_artifacts","Discover artifacts published by upstream steps in this template execution. Returns step_id, key, kind ('json' or 'file'), size, mime. Use this to learn what is available before calling read_artifact or fetch_artifact_file.",{stepId:re.optional().describe("Filter to a specific TemplateExecution step (omit to list all artifacts in the execution).")},async i=>{let o=await m();if("error"in o)return l({error:o.error});let p=i.stepId?ye(i.stepId):null;if(p)return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"list_artifacts",outcome:"denied",errorReason:p}),l({error:p});let x=_e(o.executionId,i.stepId);return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"list_artifacts",sizeBytes:x.length,outcome:"success"}),l({artifacts:x.map(s=>({id:s.id,stepId:s.stepId,key:s.key,kind:s.kind,sizeBytes:s.sizeBytes,mime:s.mime,createdAt:s.createdAt}))})}),M("report_blocked","Report that the task cannot proceed due to a missing prerequisite (e.g., missing credential, missing input, missing target). This sets the task status to 'blocked', stores the reason for the UI to display, and aborts the execution loop.",{reason:d.string().describe("Short reason, e.g. 'missing_credential', 'missing_target', 'missing_input'"),missingPrereqs:d.array(d.string()).optional().describe("Specific keys/IDs that are missing, e.g. ['MINIMAX_API_KEY']"),resumeHint:d.string().optional().describe("How the user can unblock, e.g. 'set MINIMAX_API_KEY in role env'")},async i=>{if(!e)return l({error:"report_blocked requires a task context (taskId not available)"});let o=j(e);if(!o)return l({error:`task not found: ${e}`});let p={reason:i.reason,missingPrereqs:i.missingPrereqs,resumeHint:i.resumeHint};return Ce(e,{status:"blocked",blockReason:p,completedAt:Date.now()}),Oe.emit({type:"task_status_change",taskId:e,oldStatus:o.status,newStatus:"blocked"}),D({toolName:"report_blocked",entityType:"task",verb:"update",entityId:e,fieldChanges:[{path:"status",op:"set",before:o.status,after:"blocked"},{path:"blockReason",op:"set",before:void 0,after:i.reason},{path:"completedAt",op:"set",before:void 0,after:Date.now()}],taskId:e,roleId:o.roleId}),a(),l({success:!0,blocked:!0,reason:i.reason})}),M("commit_claim","Declare structured claims about what this worker task just did so the audit engine can verify against effect receipts. Call this in the SAME task turn before reporting completion text. Mirror of the ChatManager tool \u2014 workers may also need to declare claims for actions taken inside template execution steps.",{claims:d.array(d.object({verb:d.string().min(1).describe("What was done: 'send', 'update', 'create', 'delete', 'cancel', 'enable', 'disable', 'bind', 'unbind', etc."),entityType:d.string().min(1).describe("What kind of thing was affected: 'channel_message', 'task_template', 'task', 'goal', 'role', 'delivery_rule', 'plugin', 'mcp_binding', 'config_field', etc."),expected:d.discriminatedUnion("kind",[d.object({kind:d.literal("outbound").describe("Used when verb='send' \u2014 declares a channel message was sent."),target:d.object({channelId:d.string().min(1).describe("Channel that received the message."),chatId:d.string().min(1).optional().describe("Specific chat within the channel; omit for any chat.")}).describe("Where the message went."),attachmentCount:d.number().int().min(0).optional().describe("How many attachments were sent. Verifier requires receipt.attachmentCount >= this."),textPresent:d.boolean().optional().describe("Whether the message body had non-empty text. Verifier requires receipt.textChars > 0 when true.")}),d.object({kind:d.literal("field_change").describe("Used for single-entity updates \u2014 declares a specific field on a specific entity changed."),entityId:d.string().min(1).describe("Identifier of the entity that was changed."),fieldPath:d.string().min(1).describe("Dotted path to the field that changed, e.g. 'deliverTo', 'cron', 'config.timeout'."),op:d.enum(["set","list_add","list_remove"]).describe("How the field changed: scalar set, list append, or list removal."),added:d.array(d.unknown()).min(1).optional().describe("Items appended when op='list_add'. Verifier accepts a superset (receipt may have appended more items)."),removed:d.array(d.unknown()).min(1).optional().describe("Items removed when op='list_remove'. Verifier accepts a superset."),after:d.unknown().optional().describe("New value when op='set'. Verifier requires deep-equal match.")}),d.object({kind:d.literal("batch").describe("Used for batch operations like cancel-many or delete-many."),entityType:d.string().min(1).describe("Restrict matching to this entity type."),entityIds:d.array(d.string()).min(1).optional().describe("Specific entity IDs affected. Verifier checks receipt.entityIds is a superset."),scope:d.object({filter:d.string().min(1).describe("Free-text description of the filter applied (e.g., 'status=running AND role_id=role-x'). Verifier ignores this; human-readable only."),expectedCount:d.number().int().min(0).describe("Minimum number of entities expected to have been affected. Verifier requires receipt.scope.matchedCount >= this.")}).optional().describe("Filter+count for scope-based batches when individual IDs aren't enumerated.")})]).describe("Structured expectation matched against effect_receipts. Pick the kind that fits the action."),note:d.string().optional().describe("Free-text human note kept in the audit log only. Verifier ignores this.")})).min(1).max(20).describe("One or more claims declaring exactly what just happened. Each claim is verified independently against receipts.")},async i=>{let o=Se();if(!o)return l({error:"commit_claim requires an active trace context"});try{let p=He({traceId:o,taskId:e,claims:i.claims});return l({claimRowId:p.id,claimsCount:p.claims.length,declaredAt:p.declaredAt})}catch(p){let x=p instanceof Error?p.message:String(p);return l({error:x})}})],A=Xt(e)?y.filter(i=>i.name!=="list_channels"&&i.name!=="send_to_channel"):y;return Kt({name:Lt,version:"1.0.0",tools:A})}export{je as a,He as b,pr as c,Xe as d,Lt as e,Br as f,zr as g,Fr as h,Kr as i,Ut as j,Ze as k,po as l};