adam-agent-server 1.17.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 (154) 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-DMY2MI2F.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-VYNJFXDD.js → channels-ZHCTFSDA.js} +1 -1
  9. package/dist/chat-tool-calls-4BQWZCJH.js +1 -0
  10. package/dist/{chunk-A57SY3E4.js → chunk-2JM3URDG.js} +1 -1
  11. package/dist/chunk-3MROEPGR.js +1 -0
  12. package/dist/{chunk-UUJ24BNJ.js → chunk-4G4CKAXY.js} +1 -1
  13. package/dist/chunk-4ZESWP3J.js +1 -0
  14. package/dist/{chunk-K3HWZBE5.js → chunk-4ZG4UMAK.js} +1 -1
  15. package/dist/{chunk-ED2JAMEN.js → chunk-6GYNUTPP.js} +1 -1
  16. package/dist/{chunk-OII5SDMS.js → chunk-76MMY2XC.js} +1 -1
  17. package/dist/{chunk-3RITIMKB.js → chunk-7QT2ZX3K.js} +1 -1
  18. package/dist/{chunk-MQTK4Q6M.js → chunk-A3YUIWLK.js} +1 -1
  19. package/dist/{chunk-HL373H4P.js → chunk-AMJJ2WGU.js} +1 -1
  20. package/dist/{chunk-BRUHXRKK.js → chunk-AUSR5JYV.js} +1 -1
  21. package/dist/{chunk-73GP6K5S.js → chunk-CN5NEJXG.js} +1 -1
  22. package/dist/{chunk-4WJ2VSEJ.js → chunk-DFTRUOT6.js} +1 -1
  23. package/dist/{chunk-DCTNMUQ5.js → chunk-DRS5NOAA.js} +1 -1
  24. package/dist/{chunk-D5PAJ3CB.js → chunk-EBZCHLYS.js} +1 -1
  25. package/dist/chunk-EPLSB63A.js +80 -0
  26. package/dist/{chunk-2WPUKCDA.js → chunk-FN64ZULV.js} +1 -1
  27. package/dist/chunk-FQHGIY3E.js +1 -0
  28. package/dist/{chunk-3VUEB67V.js → chunk-GQS3ED3B.js} +1 -1
  29. package/dist/{chunk-3GK65T2V.js → chunk-HEHST2E2.js} +1 -1
  30. package/dist/chunk-IAGTZGGV.js +32 -0
  31. package/dist/chunk-ITVCPC7G.js +1 -0
  32. package/dist/chunk-J2VSAXVU.js +1 -0
  33. package/dist/{chunk-5G64P4KE.js → chunk-JRRNGKDK.js} +1 -1
  34. package/dist/{chunk-A2S67EQG.js → chunk-JVYSSJKT.js} +2 -2
  35. package/dist/chunk-JXZCQ5XW.js +1 -0
  36. package/dist/{chunk-WDSCTXT7.js → chunk-KM4EFB4N.js} +1 -1
  37. package/dist/chunk-KQMKRRYW.js +143 -0
  38. package/dist/{chunk-PBKZDNNV.js → chunk-L4APYD5A.js} +1 -1
  39. package/dist/{chunk-VARIYH6K.js → chunk-LMQPGVM7.js} +97 -36
  40. package/dist/chunk-MMVDXKYS.js +14 -0
  41. package/dist/chunk-NKS7LEA7.js +182 -0
  42. package/dist/{chunk-3R7VGMAK.js → chunk-ORFLN4BF.js} +1 -1
  43. package/dist/{chunk-YEBC67DJ.js → chunk-PO66F7UQ.js} +1 -1
  44. package/dist/{chunk-2RBYM3X7.js → chunk-QJXV4SQE.js} +1 -1
  45. package/dist/{chunk-NV5ZXKKF.js → chunk-R7Q6FSV4.js} +1 -1
  46. package/dist/{chunk-TO27F23C.js → chunk-T2Z2JDPY.js} +1 -1
  47. package/dist/{chunk-VVBN35YG.js → chunk-T7EKW3B7.js} +1 -1
  48. package/dist/{chunk-5WBFQMJL.js → chunk-VOH52UDS.js} +1 -1
  49. package/dist/{chunk-32D5GWJD.js → chunk-VZL2DGC4.js} +1 -1
  50. package/dist/{chunk-QWIBCFPC.js → chunk-WDMSZS4W.js} +2 -2
  51. package/dist/{chunk-P76VP2UH.js → chunk-WG3C43QS.js} +5 -5
  52. package/dist/chunk-YEGUFMLJ.js +5 -0
  53. package/dist/{chunk-VSSKQAG5.js → chunk-ZGA52HRD.js} +1 -1
  54. package/dist/cli.js +2 -2
  55. package/dist/{config-ZDKMTZJC.js → config-GOJLI3X2.js} +1 -1
  56. package/dist/config-Z6KFEFJO.js +1 -0
  57. package/dist/db-ROXIYW5B.js +1 -0
  58. package/dist/{delivery-log-2ILFP673.js → delivery-log-TGJZ5HU7.js} +1 -1
  59. package/dist/engine-GN7PJPGQ.js +1 -0
  60. package/dist/{evolution-audit-BDQM6NAX.js → evolution-audit-TFJF666X.js} +1 -1
  61. package/dist/execution-tools-BQD2O25X.js +1 -0
  62. package/dist/{external-api-7GB3U775.js → external-api-DSLQDRZ2.js} +1 -1
  63. package/dist/index.js +68 -46
  64. package/dist/{learner-V2HBTRAE.js → learner-ACBX3GI7.js} +1 -1
  65. package/dist/{memories-B3QGTYLX.js → memories-RAIR5O2F.js} +1 -1
  66. package/dist/{memory-extractor-RYZ3VU7A.js → memory-extractor-A6CAOFOX.js} +1 -1
  67. package/dist/{memory-gc-5AYND3RL.js → memory-gc-W63MGSDH.js} +1 -1
  68. package/dist/memory-service-H4OFUNCF.js +1 -0
  69. package/dist/outbound-gateway-LKRQYPA2.js +1 -0
  70. package/dist/presets-FO6RSGDN.js +1 -0
  71. package/dist/{reflection-job-P6GIQVQN.js → reflection-job-XC2F7GTT.js} +1 -1
  72. package/dist/role-presets-SDA664QG.js +1 -0
  73. package/dist/role-workspace-NGJEJG3H.js +1 -0
  74. package/dist/{roles-B6YC4GDC.js → roles-LZCJ7QFS.js} +1 -1
  75. package/dist/runtime-OMLPOMCA.js +1 -0
  76. package/dist/session-manager-PU4GH3E4.js +1 -0
  77. package/dist/skill-registry-XKLE2LXU.js +1 -0
  78. package/dist/{task-templates-MNCF7JON.js → task-templates-52LAC6OA.js} +1 -1
  79. package/dist/template-dispatch-PJFSWEO2.js +1 -0
  80. package/package.json +1 -1
  81. package/web/dist/assets/{ArtifactDetail-Dt_xkaYJ.js → ArtifactDetail-DDTEAl2E.js} +1 -1
  82. package/web/dist/assets/{Artifacts-DlPMk9VQ.js → Artifacts-BrhnC1Ef.js} +1 -1
  83. package/web/dist/assets/{ChannelDetail-kYtMmy6P.js → ChannelDetail-CSq9o5fq.js} +1 -1
  84. package/web/dist/assets/{Channels-BppR0Qc_.js → Channels-CAxTh1Bp.js} +1 -1
  85. package/web/dist/assets/Chat-PUz41HFr.js +2 -0
  86. package/web/dist/assets/Cost-BHcsPz5T.js +4 -0
  87. package/web/dist/assets/{Dashboard-XURc0f15.js → Dashboard-BT39_iWc.js} +1 -1
  88. package/web/dist/assets/{EnvVarEditor-DR-bSU0w.js → EnvVarEditor-D_1d7bTJ.js} +1 -1
  89. package/web/dist/assets/{EventDefDetail-DtkbGbQ0.js → EventDefDetail-jKN3gO_7.js} +1 -1
  90. package/web/dist/assets/{Events-C_J4jvDh.js → Events-CpeHg3fh.js} +1 -1
  91. package/web/dist/assets/{Evolution-CEaSpRAm.js → Evolution-DsWyv2_a.js} +1 -1
  92. package/web/dist/assets/{ExtensionDetail-D5Qfq-W4.js → ExtensionDetail-CJHNaNii.js} +1 -1
  93. package/web/dist/assets/Extensions-Pg2vx_ZK.js +1 -0
  94. package/web/dist/assets/{FeatureRequests-D8WEYtoU.js → FeatureRequests-3Yl8wTNT.js} +1 -1
  95. package/web/dist/assets/{GoalDetail-DnMS_WWw.js → GoalDetail-L3T1zqqs.js} +1 -1
  96. package/web/dist/assets/{Goals-BeKwpAss.js → Goals-B-__r-Yq.js} +1 -1
  97. package/web/dist/assets/LineChart-Ck1vfYHs.js +33 -0
  98. package/web/dist/assets/{Logs-BfXBv-dV.js → Logs-CMkjUkmu.js} +1 -1
  99. package/web/dist/assets/{Memories-QRH7O8qP.js → Memories-Q1eKfPQ2.js} +1 -1
  100. package/web/dist/assets/{Mistakes-mXU9PXft.js → Mistakes-BROkixt_.js} +1 -1
  101. package/web/dist/assets/{Plugins-C8v4AsvM.js → Plugins-v17MyPVe.js} +1 -1
  102. package/web/dist/assets/RoleDetail-DCGFBLP1.js +3 -0
  103. package/web/dist/assets/{Roles-B8dQCKuS.js → Roles-C7SNebvY.js} +1 -1
  104. package/web/dist/assets/Settings-QuKwKbKg.js +1 -0
  105. package/web/dist/assets/{Strategies-DFUWEKfU.js → Strategies-CXQYvCkc.js} +1 -1
  106. package/web/dist/assets/{Switch-BcS5rOWb.js → Switch--h1rqagh.js} +1 -1
  107. package/web/dist/assets/{TaskDetail-BdhBhvKg.js → TaskDetail-B0G5ZjDD.js} +1 -1
  108. package/web/dist/assets/{Work-D-t80Ekv.js → Work-DbFst_9-.js} +1 -1
  109. package/web/dist/assets/api-BP4ZP9kk.js +1 -0
  110. package/web/dist/assets/index-D35OGE0z.css +2 -0
  111. package/web/dist/assets/index-Dd3NDYZR.js +12 -0
  112. package/web/dist/assets/{usePluginsWithUsage-DE13JW16.js → usePluginsWithUsage-DpTxJuFQ.js} +1 -1
  113. package/web/dist/index.html +3 -3
  114. package/dist/approval-handler-FONN2EGB.js +0 -1
  115. package/dist/audit-diagnostics-D4M4SA5O.js +0 -1
  116. package/dist/audit-manager-YEOJRE6K.js +0 -1
  117. package/dist/bree-engine-RGTBKKFE.js +0 -1
  118. package/dist/channels-WFU4CVGW.js +0 -1
  119. package/dist/chat-tool-calls-WQGFYTUV.js +0 -1
  120. package/dist/chunk-2V2H5PG5.js +0 -182
  121. package/dist/chunk-4G2OZPP5.js +0 -1
  122. package/dist/chunk-725BGAO2.js +0 -143
  123. package/dist/chunk-7IXYCDUF.js +0 -1
  124. package/dist/chunk-CFPXWGFD.js +0 -1
  125. package/dist/chunk-FJ3DUJXO.js +0 -1
  126. package/dist/chunk-FMJVKJJE.js +0 -1
  127. package/dist/chunk-OH6VBBDV.js +0 -1
  128. package/dist/chunk-SJTIMT5U.js +0 -5
  129. package/dist/chunk-TNBQFCXR.js +0 -14
  130. package/dist/chunk-UAF4KNXE.js +0 -32
  131. package/dist/chunk-VO24C673.js +0 -1
  132. package/dist/config-GRL6O2ZY.js +0 -1
  133. package/dist/db-LIKGSZCL.js +0 -1
  134. package/dist/engine-JVPM3XE5.js +0 -1
  135. package/dist/execution-tools-7MK257DY.js +0 -1
  136. package/dist/memory-service-XI3JZQ4E.js +0 -1
  137. package/dist/outbound-gateway-O27KKVOI.js +0 -1
  138. package/dist/presets-UAH3OG3C.js +0 -1
  139. package/dist/role-presets-RVYTO5FS.js +0 -1
  140. package/dist/role-workspace-KOTVFJD3.js +0 -1
  141. package/dist/runtime-C3XN33A3.js +0 -1
  142. package/dist/session-manager-HO2ZCB47.js +0 -1
  143. package/dist/skill-registry-X2GY7SMI.js +0 -1
  144. package/dist/template-dispatch-BAMKX3QH.js +0 -1
  145. package/web/dist/assets/Chat-BLVREMCu.js +0 -2
  146. package/web/dist/assets/Extensions-B_egkUP1.js +0 -1
  147. package/web/dist/assets/RoleDetail-Ct-k3uoK.js +0 -35
  148. package/web/dist/assets/Settings-CqtCBP6I.js +0 -1
  149. package/web/dist/assets/api-BRfbZQSW.js +0 -1
  150. package/web/dist/assets/index-DWU9AURw.css +0 -2
  151. package/web/dist/assets/index-PIFMZAPo.js +0 -12
  152. /package/web/dist/assets/{NotFound-DuH6sFz7.js → NotFound-t66RIvqO.js} +0 -0
  153. /package/web/dist/assets/{Table-D2K039zr.js → Table-CvSmzzkm.js} +0 -0
  154. /package/web/dist/assets/{Tabs-BwyLSH2c.js → Tabs-DWk9HyNd.js} +0 -0
@@ -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 F,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 m,sep as R}from"path";function U(){return process.env.ADAM_TEST_DIR||B}function Te(){return m(U(),["work","flows"].join(""))}function k(){return m(U(),"template-executions")}function z(e){return m(k(),e,"artifacts")}function oe(e){let _=z(e);return F(_,{recursive:!0}),_}function ve(e,_,N){if(!V(e))throw new Error(`path must be absolute: ${e}`);let a=S(_),d=a.endsWith(R)?a:a+R;if(N){let l=S(e),u=l.endsWith(R)?l:l+R;if(u===d||u.startsWith(d))return;throw new Error(`path escapes workspace: ${e} (resolved=${l}, root=${a})`)}if(I(e))throw ie(e).isSymbolicLink()?new Error(`destination already exists and is a symlink: ${e}`):new Error(`destination already exists: ${e}`);let p=S(q(e)),O=p.endsWith(R)?p:p+R;if(!(O===d||O.startsWith(d)))throw new Error(`destination escapes workspace: ${e} (parent resolved=${p}, root=${a})`)}function Se(e){let _=oe(e.executionId),N=m(_,`${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{$(m(k(),e),{recursive:!0,force:!0})}catch(_){X.warn({err:_,executionId:e},"Failed to remove TemplateExecution artifacts directory")}}function De(e,_,N){let a=z(e);if(!I(a))return 0;let d=0;for(let p of Ee(a)){if(ne(p)!==".bin")continue;let O=p.slice(0,-4);if(_.has(O))continue;let l=m(a,p),u=C(l);Date.now()-u.mtimeMs<N||(J(l),d++)}return d}async function he(e,_){let{deleteArtifactsByExecutionAndStep:N}=await import("./artifacts-DMY2MI2F.js"),a=N(e,_),d=0;for(let p of a)p.blobPath&&I(p.blobPath)&&(J(p.blobPath),d++);return X.debug({executionId:e,stepId:_,deletedRows:a.length,deletedFiles:d},"cleanSlatePriorAttempt: done"),{deletedRows:a.length,deletedFiles:d}}function _e(e,_){let N=U();if(e==="template"){if(!_)throw new Error("template kind requires executionId");return m(N,"template-executions",_,"artifacts")}return m(N,"artifacts",e)}function xe(e){let _=_e(e.kind,e.executionId);F(_,{recursive:!0});let N=m(_,`${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()),a=N.endsWith(R)?N:N+R,d=_.endsWith(R)?_:_+R;return d===a||d.startsWith(a)}catch{return!1}}function Q(e){let _=Te();if(!I(_)||!e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='template_execution_artifacts'").get())return;let a=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(),d=_.endsWith(R)?_:_+R,p=k(),O=new Set;for(let l of a){if(!l.blob_path.startsWith(d))continue;let u=m(_,l.execution_id),f=m(p,l.execution_id),x=m(p,l.blob_path.slice(d.length));try{if(I(u)&&!I(f)&&(F(q(f),{recursive:!0}),se(u,f,{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=m(p,l);if(I(u))try{$(m(_,l),{recursive:!0,force:!0})}catch(f){X.warn({err:f,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 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 t of s)try{e.exec(`DROP TABLE IF EXISTS ${t}`)}catch{}for(let t of["memories_fts_insert","memories_fts_delete","memories_fts_update"])try{e.exec(`DROP TRIGGER IF EXISTS ${t}`)}catch{}}if(e.exec(`
15
+ `),e.prepare("PRAGMA table_info(server_state)").all().some(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,
@@ -246,7 +246,10 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
246
246
  task_id TEXT,
247
247
  channel_message_id TEXT,
248
248
  metadata TEXT,
249
- created_at INTEGER NOT NULL
249
+ created_at INTEGER NOT NULL,
250
+ cost_usd REAL,
251
+ token_usage TEXT,
252
+ model TEXT
250
253
  );
251
254
 
252
255
  CREATE INDEX IF NOT EXISTS idx_messages_session ON chat_messages(session_id, created_at);
@@ -358,6 +361,32 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
358
361
  CREATE INDEX IF NOT EXISTS idx_delivery_log_status ON delivery_log(status);
359
362
  CREATE INDEX IF NOT EXISTS idx_delivery_log_expires ON delivery_log(expires_at);
360
363
  CREATE INDEX IF NOT EXISTS idx_delivery_log_rule_id ON delivery_log(rule_id);
364
+ `),e.exec(`
365
+ CREATE TABLE IF NOT EXISTS llm_costs (
366
+ id TEXT PRIMARY KEY,
367
+ call_id TEXT NOT NULL,
368
+ source TEXT NOT NULL,
369
+ model TEXT NOT NULL,
370
+ role_id TEXT,
371
+ task_id TEXT,
372
+ session_id TEXT,
373
+ message_id TEXT,
374
+ input_tokens INTEGER NOT NULL DEFAULT 0,
375
+ output_tokens INTEGER NOT NULL DEFAULT 0,
376
+ cache_read_tokens INTEGER NOT NULL DEFAULT 0,
377
+ cache_creation_tokens INTEGER NOT NULL DEFAULT 0,
378
+ cost_usd REAL NOT NULL DEFAULT 0,
379
+ priced INTEGER NOT NULL DEFAULT 0,
380
+ estimated INTEGER NOT NULL DEFAULT 0,
381
+ sdk_total_cost_usd REAL,
382
+ num_turns INTEGER,
383
+ created_at INTEGER NOT NULL
384
+ );
385
+
386
+ CREATE INDEX IF NOT EXISTS idx_llm_costs_created ON llm_costs(created_at);
387
+ CREATE INDEX IF NOT EXISTS idx_llm_costs_source ON llm_costs(source);
388
+ CREATE INDEX IF NOT EXISTS idx_llm_costs_model ON llm_costs(model);
389
+ CREATE INDEX IF NOT EXISTS idx_llm_costs_role ON llm_costs(role_id);
361
390
  `),e.exec(`
362
391
  CREATE TABLE IF NOT EXISTS calibration_history (
363
392
  id TEXT PRIMARY KEY,
@@ -410,7 +439,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
410
439
  bound_at INTEGER NOT NULL,
411
440
  PRIMARY KEY (role_id, plugin_id)
412
441
  );
413
- `),e.prepare("PRAGMA table_info(tasks)").all().some(t=>t.name==="role_id")||(e.exec("ALTER TABLE tasks ADD COLUMN role_id TEXT"),e.exec("CREATE INDEX IF NOT EXISTS idx_tasks_role_id ON tasks(role_id)")),e.exec("UPDATE server_state SET schema_version = 4 WHERE id = 1")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<5&&(e.exec(`
442
+ `),e.prepare("PRAGMA table_info(tasks)").all().some(r=>r.name==="role_id")||(e.exec("ALTER TABLE tasks ADD COLUMN role_id TEXT"),e.exec("CREATE INDEX IF NOT EXISTS idx_tasks_role_id ON tasks(role_id)")),e.exec("UPDATE server_state SET schema_version = 4 WHERE id = 1")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<5&&(e.exec(`
414
443
  DROP TABLE IF EXISTS memories;
415
444
  CREATE TABLE memories (
416
445
  id TEXT PRIMARY KEY,
@@ -471,7 +500,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
471
500
  source TEXT DEFAULT 'reflection'
472
501
  );
473
502
  CREATE INDEX IF NOT EXISTS idx_evolution_audit_role_id ON evolution_audit(role_id);
474
- `),e.exec("UPDATE server_state SET schema_version = 5 WHERE id = 1")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<6&&(e.prepare("PRAGMA table_info(roles)").all().some(t=>t.name==="importance_trigger_curr")||e.exec("ALTER TABLE roles ADD COLUMN importance_trigger_curr INTEGER DEFAULT 150"),e.exec("UPDATE server_state SET schema_version = 6 WHERE id = 1")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<7&&(e.prepare("PRAGMA table_info(tasks)").all().some(t=>t.name==="source_session_id")||e.exec("ALTER TABLE tasks ADD COLUMN source_session_id TEXT"),e.exec("UPDATE server_state SET schema_version = 7 WHERE id = 1")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<8){let s=e.prepare("PRAGMA table_info(goals)").all();s.some(r=>r.name==="source_session_id")||e.exec("ALTER TABLE goals ADD COLUMN source_session_id TEXT"),s.some(r=>r.name==="notify_targets")||e.exec("ALTER TABLE goals ADD COLUMN notify_targets TEXT");let t=e.prepare("PRAGMA table_info(task_templates)").all();t.some(r=>r.name==="source_session_id")||e.exec("ALTER TABLE task_templates ADD COLUMN source_session_id TEXT"),t.some(r=>r.name==="notify_targets")||e.exec("ALTER TABLE task_templates ADD COLUMN notify_targets TEXT"),t.some(r=>r.name==="goal_ids")||e.exec("ALTER TABLE task_templates ADD COLUMN goal_ids TEXT"),e.exec("UPDATE goals SET status = 'active' WHERE status IN ('pending','planning','executing','evaluating','replanning')"),e.exec("UPDATE server_state SET schema_version = 8 WHERE id = 1")}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<10){e.exec("PRAGMA foreign_keys = OFF"),e.exec("DROP TABLE IF EXISTS tasks_new"),e.exec("DROP TABLE IF EXISTS chat_sessions_new"),e.exec("DROP TABLE IF EXISTS task_plans_new"),e.exec("DROP TABLE IF EXISTS task_plugins_new"),e.exec("DROP TABLE IF EXISTS approval_rules_new"),e.exec("DROP TABLE IF EXISTS manager_decisions_new"),e.exec("DROP TABLE IF EXISTS channels_new");let s=e.prepare("PRAGMA table_info(roles)").all();s.some(o=>o.name==="allowed_tools")||e.exec("ALTER TABLE roles ADD COLUMN allowed_tools TEXT"),s.some(o=>o.name==="disallowed_tools")||e.exec("ALTER TABLE roles ADD COLUMN disallowed_tools TEXT"),s.some(o=>o.name==="evaluation_criteria")||e.exec("ALTER TABLE roles ADD COLUMN evaluation_criteria TEXT"),s.some(o=>o.name==="execution_mode")||e.exec("ALTER TABLE roles ADD COLUMN execution_mode TEXT DEFAULT 'isolated'"),s.some(o=>o.name==="model")||e.exec("ALTER TABLE roles ADD COLUMN model TEXT"),s.some(o=>o.name==="max_budget_usd")||e.exec("ALTER TABLE roles ADD COLUMN max_budget_usd REAL"),s.some(o=>o.name==="approval_required")||e.exec("ALTER TABLE roles ADD COLUMN approval_required TEXT"),s.some(o=>o.name==="source")||e.exec("ALTER TABLE roles ADD COLUMN source TEXT DEFAULT 'system'"),e.exec("DROP TABLE IF EXISTS agents"),e.exec("DROP TABLE IF EXISTS role_skills"),e.exec(`
503
+ `),e.exec("UPDATE server_state SET schema_version = 5 WHERE id = 1")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<6&&(e.prepare("PRAGMA table_info(roles)").all().some(r=>r.name==="importance_trigger_curr")||e.exec("ALTER TABLE roles ADD COLUMN importance_trigger_curr INTEGER DEFAULT 150"),e.exec("UPDATE server_state SET schema_version = 6 WHERE id = 1")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<7&&(e.prepare("PRAGMA table_info(tasks)").all().some(r=>r.name==="source_session_id")||e.exec("ALTER TABLE tasks ADD COLUMN source_session_id TEXT"),e.exec("UPDATE server_state SET schema_version = 7 WHERE id = 1")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<8){let s=e.prepare("PRAGMA table_info(goals)").all();s.some(t=>t.name==="source_session_id")||e.exec("ALTER TABLE goals ADD COLUMN source_session_id TEXT"),s.some(t=>t.name==="notify_targets")||e.exec("ALTER TABLE goals ADD COLUMN notify_targets TEXT");let r=e.prepare("PRAGMA table_info(task_templates)").all();r.some(t=>t.name==="source_session_id")||e.exec("ALTER TABLE task_templates ADD COLUMN source_session_id TEXT"),r.some(t=>t.name==="notify_targets")||e.exec("ALTER TABLE task_templates ADD COLUMN notify_targets TEXT"),r.some(t=>t.name==="goal_ids")||e.exec("ALTER TABLE task_templates ADD COLUMN goal_ids TEXT"),e.exec("UPDATE goals SET status = 'active' WHERE status IN ('pending','planning','executing','evaluating','replanning')"),e.exec("UPDATE server_state SET schema_version = 8 WHERE id = 1")}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<10){e.exec("PRAGMA foreign_keys = OFF"),e.exec("DROP TABLE IF EXISTS tasks_new"),e.exec("DROP TABLE IF EXISTS chat_sessions_new"),e.exec("DROP TABLE IF EXISTS task_plans_new"),e.exec("DROP TABLE IF EXISTS task_plugins_new"),e.exec("DROP TABLE IF EXISTS approval_rules_new"),e.exec("DROP TABLE IF EXISTS manager_decisions_new"),e.exec("DROP TABLE IF EXISTS channels_new");let s=e.prepare("PRAGMA table_info(roles)").all();s.some(o=>o.name==="allowed_tools")||e.exec("ALTER TABLE roles ADD COLUMN allowed_tools TEXT"),s.some(o=>o.name==="disallowed_tools")||e.exec("ALTER TABLE roles ADD COLUMN disallowed_tools TEXT"),s.some(o=>o.name==="evaluation_criteria")||e.exec("ALTER TABLE roles ADD COLUMN evaluation_criteria TEXT"),s.some(o=>o.name==="execution_mode")||e.exec("ALTER TABLE roles ADD COLUMN execution_mode TEXT DEFAULT 'isolated'"),s.some(o=>o.name==="model")||e.exec("ALTER TABLE roles ADD COLUMN model TEXT"),s.some(o=>o.name==="max_budget_usd")||e.exec("ALTER TABLE roles ADD COLUMN max_budget_usd REAL"),s.some(o=>o.name==="approval_required")||e.exec("ALTER TABLE roles ADD COLUMN approval_required TEXT"),s.some(o=>o.name==="source")||e.exec("ALTER TABLE roles ADD COLUMN source TEXT DEFAULT 'system'"),e.exec("DROP TABLE IF EXISTS agents"),e.exec("DROP TABLE IF EXISTS role_skills"),e.exec(`
475
504
  CREATE TABLE IF NOT EXISTS tasks_new (
476
505
  id TEXT PRIMARY KEY,
477
506
  parent_id TEXT,
@@ -496,7 +525,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
496
525
  num_turns INTEGER,
497
526
  total_duration_ms INTEGER
498
527
  );
499
- `);let t=new Set(["id","status","prompt","config","created_at"]),r=["id","parent_id","status","prompt","config","result","error","sdk_session_id","template_id","original_prompt","role_id","source_session_id","notify_targets","deliver_to","report_to","created_at","started_at","completed_at","cost_usd","token_usage","num_turns","total_duration_ms"],i=new Set(e.prepare("PRAGMA table_info(tasks)").all().map(o=>o.name)),E=r.map(o=>i.has(o)?t.has(o)?`COALESCE(${o}, '')`:o:"NULL").join(",");e.exec(`INSERT INTO tasks_new SELECT ${E} FROM tasks`),e.exec("DROP TABLE tasks"),e.exec("ALTER TABLE tasks_new RENAME TO tasks"),e.exec("CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status)"),e.exec("CREATE INDEX IF NOT EXISTS idx_tasks_created_at ON tasks(created_at)"),e.exec("CREATE INDEX IF NOT EXISTS idx_tasks_template_id ON tasks(template_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_tasks_role_id ON tasks(role_id)"),e.exec(`
528
+ `);let r=new Set(["id","status","prompt","config","created_at"]),t=["id","parent_id","status","prompt","config","result","error","sdk_session_id","template_id","original_prompt","role_id","source_session_id","notify_targets","deliver_to","report_to","created_at","started_at","completed_at","cost_usd","token_usage","num_turns","total_duration_ms"],i=new Set(e.prepare("PRAGMA table_info(tasks)").all().map(o=>o.name)),E=t.map(o=>i.has(o)?r.has(o)?`COALESCE(${o}, '')`:o:"NULL").join(",");e.exec(`INSERT INTO tasks_new SELECT ${E} FROM tasks`),e.exec("DROP TABLE tasks"),e.exec("ALTER TABLE tasks_new RENAME TO tasks"),e.exec("CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status)"),e.exec("CREATE INDEX IF NOT EXISTS idx_tasks_created_at ON tasks(created_at)"),e.exec("CREATE INDEX IF NOT EXISTS idx_tasks_template_id ON tasks(template_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_tasks_role_id ON tasks(role_id)"),e.exec(`
500
529
  CREATE TABLE IF NOT EXISTS chat_sessions_new (
501
530
  id TEXT PRIMARY KEY,
502
531
  status TEXT NOT NULL DEFAULT 'active' CHECK(status IN ('active', 'archived')),
@@ -572,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"
572
601
  bound_at INTEGER NOT NULL,
573
602
  PRIMARY KEY (role_id, plugin_id)
574
603
  );
575
- `),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 t=e.prepare("PRAGMA table_info(task_templates)").all(),r=t.some(E=>E.name==="role_preference"),i=t.some(E=>E.name==="skill_preference");if(!r&&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(t=>t.name==="tools_fingerprint")||e.exec("ALTER TABLE server_state ADD COLUMN tools_fingerprint TEXT"),e.exec("UPDATE server_state SET schema_version = 12 WHERE id = 1")),a<13&&(e.prepare("PRAGMA table_info(roles)").all().some(t=>t.name==="additional_directories")||e.exec("ALTER TABLE roles ADD COLUMN additional_directories TEXT"),e.exec("UPDATE server_state SET schema_version = 13 WHERE id = 1")),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 t=e.prepare("PRAGMA table_info(tasks)").all();t.some(i=>i.name==="deliver_to")||e.exec("ALTER TABLE tasks ADD COLUMN deliver_to TEXT"),t.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(t=>t.name==="inherit_user_settings")||e.exec("ALTER TABLE roles ADD COLUMN inherit_user_settings INTEGER DEFAULT 0"),e.exec("UPDATE server_state SET schema_version = 15 WHERE id = 1")),a<16&&(e.prepare("PRAGMA table_info(task_templates)").all().some(t=>t.name==="deliver_to")||e.exec("ALTER TABLE task_templates ADD COLUMN deliver_to TEXT"),e.exec("UPDATE server_state SET schema_version = 16 WHERE id = 1")),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 r=e.prepare("SELECT id, additional_directories FROM roles WHERE additional_directories IS NOT NULL").all();for(let i of r)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(r=>r.name==="deliver_to")||e.exec("ALTER TABLE tasks ADD COLUMN deliver_to TEXT"),s.some(r=>r.name==="report_to")||e.exec("ALTER TABLE tasks ADD COLUMN report_to TEXT");let t=e.prepare("PRAGMA table_info(strategies)").all();t.some(r=>r.name==="role")&&!t.some(r=>r.name==="role_id")&&(e.exec("ALTER TABLE strategies RENAME COLUMN role TO role_id"),e.exec("DROP INDEX IF EXISTS idx_strategies_role_task_type"),e.exec("DROP INDEX IF EXISTS idx_strategies_role"),e.exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_strategies_role_task_type ON strategies(role_id, task_type, name)"),e.exec("CREATE INDEX IF NOT EXISTS idx_strategies_role ON strategies(role_id)")),e.exec("UPDATE server_state SET schema_version = 17 WHERE id = 1"),e.exec("PRAGMA foreign_keys = ON")}if(a<18){let s=e.prepare("PRAGMA table_info(tasks)").all();s.some(r=>r.name==="deliver_to")||e.exec("ALTER TABLE tasks ADD COLUMN deliver_to TEXT"),s.some(r=>r.name==="report_to")||e.exec("ALTER TABLE tasks ADD COLUMN report_to TEXT");let t=e.prepare("PRAGMA table_info(strategies)").all();t.some(r=>r.name==="role")&&!t.some(r=>r.name==="role_id")&&(e.exec("ALTER TABLE strategies RENAME COLUMN role TO role_id"),e.exec("DROP INDEX IF EXISTS idx_strategies_role_task_type"),e.exec("DROP INDEX IF EXISTS idx_strategies_role"),e.exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_strategies_role_task_type ON strategies(role_id, task_type, name)"),e.exec("CREATE INDEX IF NOT EXISTS idx_strategies_role ON strategies(role_id)")),e.exec("UPDATE server_state SET schema_version = 18 WHERE id = 1")}e.prepare("PRAGMA table_info(delivery_log)").all().some(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(`
576
605
  CREATE TABLE IF NOT EXISTS delivery_log_new (
577
606
  id TEXT PRIMARY KEY,
578
607
  rule_id TEXT REFERENCES delivery_rules(id),
@@ -589,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"
589
618
  message_type TEXT
590
619
  )
591
620
  `),e.exec(`INSERT INTO delivery_log_new (id, rule_id, task_id, status, target, content, attempts, error, created_at, delivered_at, expires_at)
592
- SELECT id, rule_id, task_id, status, target, content, attempts, error, created_at, delivered_at, expires_at FROM delivery_log`),e.exec("DROP TABLE delivery_log"),e.exec("ALTER TABLE delivery_log_new RENAME TO delivery_log"),e.exec("CREATE INDEX IF NOT EXISTS idx_delivery_log_rule ON delivery_log(rule_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_delivery_log_task ON delivery_log(task_id)")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<20&&(e.prepare("PRAGMA table_info(goals)").all().some(r=>r.name==="report_to")||e.exec("ALTER TABLE goals ADD COLUMN report_to TEXT"),e.prepare("PRAGMA table_info(task_templates)").all().some(r=>r.name==="report_to")||e.exec("ALTER TABLE task_templates ADD COLUMN report_to TEXT"),e.exec("UPDATE goals SET report_to = notify_targets WHERE notify_targets IS NOT NULL"),e.exec("UPDATE task_templates SET report_to = notify_targets WHERE notify_targets IS NOT NULL"),e.exec("UPDATE server_state SET schema_version = 20 WHERE id = 1")),e.prepare("PRAGMA table_info(config)").all().some(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(r=>r.name==="permission_mode")||e.exec("ALTER TABLE roles ADD COLUMN permission_mode TEXT DEFAULT NULL"),s.some(r=>r.name==="allowed_bash_patterns")||e.exec("ALTER TABLE roles ADD COLUMN allowed_bash_patterns TEXT DEFAULT NULL"),s.some(r=>r.name==="denied_bash_patterns")||e.exec("ALTER TABLE roles ADD COLUMN denied_bash_patterns TEXT DEFAULT NULL"),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<23&&e.exec("UPDATE server_state SET schema_version = 23 WHERE id = 1")}if(e.prepare("PRAGMA table_info(roles)").all().some(r=>r.name==="env_vars")||e.prepare("ALTER TABLE roles ADD COLUMN env_vars TEXT DEFAULT NULL").run(),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<24&&e.prepare("UPDATE server_state SET schema_version = 24 WHERE id = 1").run(),a<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(`
593
622
  CREATE TABLE IF NOT EXISTS template_executions (
594
623
  id TEXT PRIMARY KEY,
595
624
  template_id TEXT NOT NULL,
@@ -619,7 +648,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
619
648
  ON template_execution_artifacts (execution_id);
620
649
  CREATE INDEX IF NOT EXISTS idx_template_execution_artifacts_step
621
650
  ON template_execution_artifacts (execution_id, step_id);
622
- `,t=`
651
+ `,r=`
623
652
  CREATE TABLE IF NOT EXISTS artifact_access_log (
624
653
  id INTEGER PRIMARY KEY AUTOINCREMENT,
625
654
  timestamp INTEGER NOT NULL,
@@ -638,12 +667,12 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
638
667
  ON artifact_access_log (execution_id, timestamp);
639
668
  CREATE INDEX IF NOT EXISTS idx_artifact_access_log_role
640
669
  ON artifact_access_log (role_id, timestamp);
641
- `;e.exec(s),e.exec(t),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(r=>r.name==="os_capabilities")||e.prepare("ALTER TABLE roles ADD COLUMN os_capabilities TEXT DEFAULT NULL").run(),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<27&&e.prepare("UPDATE server_state SET schema_version = 27 WHERE id = 1").run();{let s=e.prepare("PRAGMA table_info(manager_decisions)").all();s.some(r=>r.name==="requirements_json")||e.prepare("ALTER TABLE manager_decisions ADD COLUMN requirements_json TEXT").run(),s.some(r=>r.name==="fit_score")||e.prepare("ALTER TABLE manager_decisions ADD COLUMN fit_score REAL").run(),s.some(r=>r.name==="candidates_json")||e.prepare("ALTER TABLE manager_decisions ADD COLUMN candidates_json TEXT").run(),s.some(r=>r.name==="tie_break_reason")||e.prepare("ALTER TABLE manager_decisions ADD COLUMN tie_break_reason TEXT").run(),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<28&&e.prepare("UPDATE server_state SET schema_version = 28 WHERE id = 1").run()}{let s=[[/\brm -rf\b/,["rm -rf *"]],[/^git push/,["git push*"]],[/^git reset/,["git reset*"]],[/\bcurl.*POST\b/i,["curl * -X POST*","curl * --request POST*"]]],t=e.prepare("SELECT key, value FROM config WHERE key = 'defaults.approvalRequired'").all();for(let r of t)try{let i=JSON.parse(r.value),E=[];for(let T of i){let c=!1;for(let[L,o]of s)if(L.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(),r.key)}catch{}}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<31){let t=e.prepare("SELECT count(*) AS n FROM task_templates WHERE trigger_type IN ('event', 'task_complete')").get();t.n>0&&D.info({legacyCount:t.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(`
642
671
  UPDATE task_templates
643
672
  SET trigger_type='template_complete',
644
673
  trigger_event=REPLACE(trigger_event, ?, 'template_complete:')
645
674
  WHERE trigger_type='event' AND trigger_event LIKE ?
646
- `).run(h,`${h}%`),e.prepare("UPDATE task_templates SET trigger_type='template_complete' WHERE trigger_type='event'").run(),e.prepare("UPDATE task_templates SET trigger_type='manual' WHERE trigger_type='task_complete'").run();let r=e.prepare("SELECT count(*) AS n FROM task_templates WHERE trigger_type IN ('event', 'task_complete')").get();r.n>0&&D.warn({orphan:r.n},"migration left orphan legacy trigger_type rows; manual inspection required"),e.prepare("UPDATE server_state SET schema_version = 31 WHERE id = 1").run()}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<32&&(e.exec(`
675
+ `).run(h,`${h}%`),e.prepare("UPDATE task_templates SET trigger_type='template_complete' WHERE trigger_type='event'").run(),e.prepare("UPDATE task_templates SET trigger_type='manual' WHERE trigger_type='task_complete'").run();let t=e.prepare("SELECT count(*) AS n FROM task_templates WHERE trigger_type IN ('event', 'task_complete')").get();t.n>0&&D.warn({orphan:t.n},"migration left orphan legacy trigger_type rows; manual inspection required"),e.prepare("UPDATE server_state SET schema_version = 31 WHERE id = 1").run()}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<32&&(e.exec(`
647
676
  CREATE TABLE IF NOT EXISTS event_defs (
648
677
  id TEXT PRIMARY KEY, name TEXT NOT NULL, source_type TEXT NOT NULL,
649
678
  source_config TEXT NOT NULL, enabled INTEGER NOT NULL DEFAULT 1,
@@ -662,12 +691,12 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
662
691
  CREATE UNIQUE INDEX IF NOT EXISTS idx_events_dedup ON events(source, dedup_key);
663
692
  CREATE INDEX IF NOT EXISTS idx_events_type ON events(type);
664
693
  CREATE INDEX IF NOT EXISTS idx_events_def_id ON events(event_def_id, occurred_at);
665
- `),e.prepare("UPDATE server_state SET schema_version = 32 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<33){let t=e.prepare(`
694
+ `),e.prepare("UPDATE server_state SET schema_version = 32 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<33){let r=e.prepare(`
666
695
  SELECT name FROM sqlite_master
667
696
  WHERE type='table' AND name IN ('template_executions', ?)
668
697
  ORDER BY CASE name WHEN 'template_executions' THEN 0 ELSE 1 END
669
698
  LIMIT 1
670
- `).get(w);if(t){let r=t.name;e.prepare(`PRAGMA table_info(${r})`).all().some(T=>T.name==="event_id")||e.prepare(`ALTER TABLE ${r} ADD COLUMN event_id TEXT`).run();let n=r==="template_executions"?"idx_template_executions_event_id":ee;e.prepare(`CREATE INDEX IF NOT EXISTS ${n} ON ${r}(event_id)`).run()}e.prepare("UPDATE server_state SET schema_version = 33 WHERE id = 1").run()}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<34&&(e.prepare("PRAGMA table_info(tasks)").all().some(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 r=e.prepare("PRAGMA table_info(task_templates)").all();r.some(i=>i.name==="is_preset")||e.prepare("ALTER TABLE task_templates ADD COLUMN is_preset INTEGER NOT NULL DEFAULT 0").run(),r.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 t=[["Engineer","engineer"],["Reviewer","reviewer"],["Researcher","researcher"],["Writer","writer"],["Chat Manager","chat-manager"],["adam-automator","adam-automator"]];for(let[r,i]of t)e.prepare("UPDATE roles SET preset_id = ? WHERE name = ? AND preset_id IS NULL").run(i,r);e.prepare("UPDATE server_state SET schema_version = 36 WHERE id = 1").run()}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<37&&(e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='feature_requests'").all().length===0&&(e.exec(`
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(`
671
700
  CREATE TABLE feature_requests (
672
701
  id TEXT PRIMARY KEY,
673
702
  source_session_id TEXT,
@@ -696,15 +725,15 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
696
725
  created_at INTEGER NOT NULL,
697
726
  updated_at INTEGER NOT NULL
698
727
  )
699
- `),e.exec("CREATE INDEX IF NOT EXISTS idx_mistake_patterns_status ON mistake_patterns(status)"),e.exec("CREATE INDEX IF NOT EXISTS idx_mistake_patterns_last_seen ON mistake_patterns(last_seen)"),e.exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_mistake_patterns_dim ON mistake_patterns(dimension_type, dimension_value)")),e.prepare("UPDATE server_state SET schema_version = 38 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<39){let t=e.prepare("SELECT source_task_id, COUNT(*) as cnt FROM memories WHERE source_task_id IS NOT NULL AND type = 'thought' GROUP BY source_task_id HAVING cnt > 1").all();if(t.length>0){console.info(`[db migration v39] dedupe ${t.length} (source_task_id, type='thought') groups before adding unique index`);for(let r of t){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(r.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=${r.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 t=["tasks","step_logs","delivery_log","evolution_audit","chat_messages"];for(let r of t)e.prepare(`PRAGMA table_info(${r})`).all().some(E=>E.name==="trace_id")||(e.prepare(`ALTER TABLE ${r} ADD COLUMN trace_id TEXT`).run(),e.prepare(`CREATE INDEX IF NOT EXISTS idx_${r}_trace_id ON ${r}(trace_id) WHERE trace_id IS NOT NULL`).run(),console.info(`[db migration v40] added trace_id to ${r}`));e.prepare("UPDATE server_state SET schema_version = 40 WHERE id = 1").run()}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<41&&(e.prepare(`
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(`
700
729
  UPDATE task_templates
701
730
  SET trigger_type = 'template_complete'
702
731
  WHERE trigger_type = ?
703
- `).run(re),e.prepare(`
732
+ `).run(te),e.prepare(`
704
733
  UPDATE task_templates
705
734
  SET trigger_event = REPLACE(trigger_event, ?, 'template_complete:')
706
735
  WHERE trigger_event LIKE ?
707
- `).run(h,`${h}%`),e.prepare("UPDATE server_state SET schema_version = 41 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<42){let t=e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name=?").get(w),r=e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='template_executions'").get();t&&!r&&e.prepare(`ALTER TABLE ${w} RENAME TO template_executions`).run(),e.exec(`
736
+ `).run(h,`${h}%`),e.prepare("UPDATE server_state SET schema_version = 41 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<42){let r=e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name=?").get(w),t=e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='template_executions'").get();r&&!t&&e.prepare(`ALTER TABLE ${w} RENAME TO template_executions`).run(),e.exec(`
708
737
  CREATE TABLE IF NOT EXISTS template_executions (
709
738
  id TEXT PRIMARY KEY,
710
739
  template_id TEXT NOT NULL,
@@ -716,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"
716
745
  event_id TEXT,
717
746
  FOREIGN KEY (template_id) REFERENCES task_templates(id)
718
747
  )
719
- `),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 t=e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name=?").get(b),r=e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='template_execution_artifacts'").get();t&&!r&&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(`
720
749
  CREATE TABLE IF NOT EXISTS template_execution_artifacts (
721
750
  id TEXT PRIMARY KEY,
722
751
  execution_id TEXT NOT NULL,
@@ -731,14 +760,14 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
731
760
  UNIQUE(execution_id, step_id, key),
732
761
  FOREIGN KEY (execution_id) REFERENCES template_executions(id) ON DELETE CASCADE
733
762
  )
734
- `),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(r=>r.name==="error_category")||e.prepare("ALTER TABLE tasks ADD COLUMN error_category TEXT").run(),e.prepare("UPDATE server_state SET schema_version = 44 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<45&&(e.prepare("PRAGMA table_info(tasks)").all().some(r=>r.name==="retry_count")||e.prepare("ALTER TABLE tasks ADD COLUMN retry_count INTEGER NOT NULL DEFAULT 0").run(),e.exec(`
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(`
735
764
  CREATE TABLE IF NOT EXISTS delayed_retries (
736
765
  id TEXT PRIMARY KEY,
737
766
  task_id TEXT NOT NULL,
738
767
  retry_at INTEGER NOT NULL,
739
768
  created_at INTEGER NOT NULL
740
769
  )
741
- `),e.exec("CREATE INDEX IF NOT EXISTS idx_delayed_retries_retry_at ON delayed_retries(retry_at)"),e.exec("CREATE INDEX IF NOT EXISTS idx_delayed_retries_task_id ON delayed_retries(task_id)"),e.prepare("UPDATE server_state SET schema_version = 45 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<46&&(e.prepare("PRAGMA table_info(role_scores)").all().some(r=>r.name==="task_type")||e.prepare("ALTER TABLE role_scores ADD COLUMN task_type TEXT").run(),e.prepare("UPDATE server_state SET schema_version = 46 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<47&&(e.prepare("PRAGMA table_info(template_execution_artifacts)").all().some(i=>i.name==="original_filename")||e.prepare("ALTER TABLE template_execution_artifacts ADD COLUMN original_filename TEXT").run(),e.prepare("UPDATE server_state SET schema_version = 47 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<48){let t=e.prepare("PRAGMA table_info(chat_messages)").all(),r=i=>t.some(E=>E.name===i);r("kind")||e.prepare("ALTER TABLE chat_messages ADD COLUMN kind TEXT").run(),r("parent_message_id")||e.prepare("ALTER TABLE chat_messages ADD COLUMN parent_message_id TEXT").run(),r("thread_root")||e.prepare("ALTER TABLE chat_messages ADD COLUMN thread_root TEXT").run(),r("prompt_id")||e.prepare("ALTER TABLE chat_messages ADD COLUMN prompt_id TEXT").run(),r("approval_shape")||e.prepare("ALTER TABLE chat_messages ADD COLUMN approval_shape TEXT").run(),r("role_id")||e.prepare("ALTER TABLE chat_messages ADD COLUMN role_id TEXT").run(),r("attachments")||e.prepare("ALTER TABLE chat_messages ADD COLUMN attachments TEXT").run(),r("mirrored_to_targets")||e.prepare("ALTER TABLE chat_messages ADD COLUMN mirrored_to_targets TEXT").run(),r("platform_message_id")||e.prepare("ALTER TABLE chat_messages ADD COLUMN platform_message_id TEXT").run(),r("seq")||e.prepare("ALTER TABLE chat_messages ADD COLUMN seq INTEGER").run(),e.prepare("UPDATE chat_messages SET kind = 'user_message' WHERE kind IS NULL AND role = 'user'").run(),e.prepare("UPDATE chat_messages SET kind = 'assistant_text' WHERE kind IS NULL AND role = 'assistant'").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_chat_messages_thread_root ON chat_messages(thread_root, created_at) WHERE thread_root IS NOT NULL").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_chat_messages_prompt_id ON chat_messages(prompt_id) WHERE prompt_id IS NOT NULL").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_chat_messages_platform_msg ON chat_messages(platform_message_id) WHERE platform_message_id IS NOT NULL").run(),e.prepare("UPDATE server_state SET schema_version = 48 WHERE id = 1").run(),console.info("[db migration v48] chat_messages: added 10 envelope columns + 3 indexes; back-filled kind")}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<49&&(e.exec(`
770
+ `),e.exec("CREATE INDEX IF NOT EXISTS idx_delayed_retries_retry_at ON delayed_retries(retry_at)"),e.exec("CREATE INDEX IF NOT EXISTS idx_delayed_retries_task_id ON delayed_retries(task_id)"),e.prepare("UPDATE server_state SET schema_version = 45 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<46&&(e.prepare("PRAGMA table_info(role_scores)").all().some(t=>t.name==="task_type")||e.prepare("ALTER TABLE role_scores ADD COLUMN task_type TEXT").run(),e.prepare("UPDATE server_state SET schema_version = 46 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<47&&(e.prepare("PRAGMA table_info(template_execution_artifacts)").all().some(i=>i.name==="original_filename")||e.prepare("ALTER TABLE template_execution_artifacts ADD COLUMN original_filename TEXT").run(),e.prepare("UPDATE server_state SET schema_version = 47 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<48){let r=e.prepare("PRAGMA table_info(chat_messages)").all(),t=i=>r.some(E=>E.name===i);t("kind")||e.prepare("ALTER TABLE chat_messages ADD COLUMN kind TEXT").run(),t("parent_message_id")||e.prepare("ALTER TABLE chat_messages ADD COLUMN parent_message_id TEXT").run(),t("thread_root")||e.prepare("ALTER TABLE chat_messages ADD COLUMN thread_root TEXT").run(),t("prompt_id")||e.prepare("ALTER TABLE chat_messages ADD COLUMN prompt_id TEXT").run(),t("approval_shape")||e.prepare("ALTER TABLE chat_messages ADD COLUMN approval_shape TEXT").run(),t("role_id")||e.prepare("ALTER TABLE chat_messages ADD COLUMN role_id TEXT").run(),t("attachments")||e.prepare("ALTER TABLE chat_messages ADD COLUMN attachments TEXT").run(),t("mirrored_to_targets")||e.prepare("ALTER TABLE chat_messages ADD COLUMN mirrored_to_targets TEXT").run(),t("platform_message_id")||e.prepare("ALTER TABLE chat_messages ADD COLUMN platform_message_id TEXT").run(),t("seq")||e.prepare("ALTER TABLE chat_messages ADD COLUMN seq INTEGER").run(),e.prepare("UPDATE chat_messages SET kind = 'user_message' WHERE kind IS NULL AND role = 'user'").run(),e.prepare("UPDATE chat_messages SET kind = 'assistant_text' WHERE kind IS NULL AND role = 'assistant'").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_chat_messages_thread_root ON chat_messages(thread_root, created_at) WHERE thread_root IS NOT NULL").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_chat_messages_prompt_id ON chat_messages(prompt_id) WHERE prompt_id IS NOT NULL").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_chat_messages_platform_msg ON chat_messages(platform_message_id) WHERE platform_message_id IS NOT NULL").run(),e.prepare("UPDATE server_state SET schema_version = 48 WHERE id = 1").run(),console.info("[db migration v48] chat_messages: added 10 envelope columns + 3 indexes; back-filled kind")}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<49&&(e.exec(`
742
771
  CREATE TABLE IF NOT EXISTS pending_prompts (
743
772
  id TEXT PRIMARY KEY,
744
773
  session_id TEXT NOT NULL,
@@ -754,7 +783,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
754
783
  resolved_value TEXT,
755
784
  expired_reason TEXT
756
785
  )
757
- `),e.exec("CREATE INDEX IF NOT EXISTS idx_pending_prompts_session_open ON pending_prompts(session_id, expires_at) WHERE resolved_at IS NULL"),e.exec("CREATE INDEX IF NOT EXISTS idx_pending_prompts_task ON pending_prompts(task_id) WHERE task_id IS NOT NULL"),e.prepare("UPDATE server_state SET schema_version = 49 WHERE id = 1").run(),console.info("[db migration v49] pending_prompts: created table + 2 indexes")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<50){if(e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='template_execution_artifacts'").get()){let r=e.prepare("PRAGMA table_info(template_execution_artifacts)").all(),i=E=>r.some(n=>n.name===E);i("locator")||e.prepare("ALTER TABLE template_execution_artifacts ADD COLUMN locator TEXT").run(),i("content_hash")||e.prepare("ALTER TABLE template_execution_artifacts ADD COLUMN content_hash TEXT").run(),i("retention_hint")||e.prepare("ALTER TABLE template_execution_artifacts ADD COLUMN retention_hint TEXT").run(),i("encryption_class")||e.prepare("ALTER TABLE template_execution_artifacts ADD COLUMN encryption_class TEXT").run(),i("purpose")||e.prepare("ALTER TABLE template_execution_artifacts ADD COLUMN purpose TEXT").run(),i("replaces")||e.prepare("ALTER TABLE template_execution_artifacts ADD COLUMN replaces TEXT").run(),i("produced_by_role")||e.prepare("ALTER TABLE template_execution_artifacts ADD COLUMN produced_by_role TEXT").run(),i("access")||e.prepare("ALTER TABLE template_execution_artifacts ADD COLUMN access TEXT").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_artifacts_content_hash ON template_execution_artifacts(content_hash) WHERE content_hash IS NOT NULL").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_artifacts_replaces ON template_execution_artifacts(replaces) WHERE replaces IS NOT NULL").run(),console.info("[db migration v50] template_execution_artifacts: added 8 storage-hook columns + 2 indexes")}else console.info("[db migration v50] skipped \u2014 template_execution_artifacts already renamed to artifacts in v72");e.prepare("UPDATE server_state SET schema_version = 50 WHERE id = 1").run()}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<51){let t=e.prepare("PRAGMA table_info(chat_messages)").all();t.some(r=>r.name==="source_channel_id")||e.exec("ALTER TABLE chat_messages ADD COLUMN source_channel_id TEXT"),t.some(r=>r.name==="source_chat_id")||e.exec("ALTER TABLE chat_messages ADD COLUMN source_chat_id TEXT"),e.prepare("UPDATE server_state SET schema_version = 51 WHERE id = 1").run(),console.info("[db migration v51] chat_messages: added source_channel_id + source_chat_id columns")}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<52&&(e.exec(`
786
+ `),e.exec("CREATE INDEX IF NOT EXISTS idx_pending_prompts_session_open ON pending_prompts(session_id, expires_at) WHERE resolved_at IS NULL"),e.exec("CREATE INDEX IF NOT EXISTS idx_pending_prompts_task ON pending_prompts(task_id) WHERE task_id IS NOT NULL"),e.prepare("UPDATE server_state SET schema_version = 49 WHERE id = 1").run(),console.info("[db migration v49] pending_prompts: created table + 2 indexes")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<50){if(e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='template_execution_artifacts'").get()){let t=e.prepare("PRAGMA table_info(template_execution_artifacts)").all(),i=E=>t.some(n=>n.name===E);i("locator")||e.prepare("ALTER TABLE template_execution_artifacts ADD COLUMN locator TEXT").run(),i("content_hash")||e.prepare("ALTER TABLE template_execution_artifacts ADD COLUMN content_hash TEXT").run(),i("retention_hint")||e.prepare("ALTER TABLE template_execution_artifacts ADD COLUMN retention_hint TEXT").run(),i("encryption_class")||e.prepare("ALTER TABLE template_execution_artifacts ADD COLUMN encryption_class TEXT").run(),i("purpose")||e.prepare("ALTER TABLE template_execution_artifacts ADD COLUMN purpose TEXT").run(),i("replaces")||e.prepare("ALTER TABLE template_execution_artifacts ADD COLUMN replaces TEXT").run(),i("produced_by_role")||e.prepare("ALTER TABLE template_execution_artifacts ADD COLUMN produced_by_role TEXT").run(),i("access")||e.prepare("ALTER TABLE template_execution_artifacts ADD COLUMN access TEXT").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_artifacts_content_hash ON template_execution_artifacts(content_hash) WHERE content_hash IS NOT NULL").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_artifacts_replaces ON template_execution_artifacts(replaces) WHERE replaces IS NOT NULL").run(),console.info("[db migration v50] template_execution_artifacts: added 8 storage-hook columns + 2 indexes")}else console.info("[db migration v50] skipped \u2014 template_execution_artifacts already renamed to artifacts in v72");e.prepare("UPDATE server_state SET schema_version = 50 WHERE id = 1").run()}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<51){let r=e.prepare("PRAGMA table_info(chat_messages)").all();r.some(t=>t.name==="source_channel_id")||e.exec("ALTER TABLE chat_messages ADD COLUMN source_channel_id TEXT"),r.some(t=>t.name==="source_chat_id")||e.exec("ALTER TABLE chat_messages ADD COLUMN source_chat_id TEXT"),e.prepare("UPDATE server_state SET schema_version = 51 WHERE id = 1").run(),console.info("[db migration v51] chat_messages: added source_channel_id + source_chat_id columns")}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<52&&(e.exec(`
758
787
  CREATE TABLE IF NOT EXISTS audit_violations (
759
788
  id TEXT PRIMARY KEY,
760
789
  step_task_id TEXT NOT NULL,
@@ -770,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"
770
799
  CREATE INDEX IF NOT EXISTS idx_audit_violations_role ON audit_violations(role_id, created_at DESC);
771
800
  CREATE INDEX IF NOT EXISTS idx_audit_violations_task ON audit_violations(step_task_id);
772
801
  CREATE INDEX IF NOT EXISTS idx_audit_violations_execution ON audit_violations(execution_id, created_at DESC);
773
- `),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 t=e.prepare("SELECT id, learned_rules FROM roles").all(),r=e.prepare("UPDATE roles SET learned_rules = ? WHERE id = ?"),i=0;for(let E of t){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:[]};r.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(`
774
803
  CREATE TABLE IF NOT EXISTS user_visible_events (
775
804
  id TEXT PRIMARY KEY,
776
805
  event_key TEXT NOT NULL UNIQUE,
@@ -796,7 +825,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
796
825
  ON user_visible_events(viewer_key, source_id);
797
826
  CREATE INDEX IF NOT EXISTS idx_user_visible_events_trace_id
798
827
  ON user_visible_events(trace_id) WHERE trace_id IS NOT NULL;
799
- `);let t="local-owner",r=e.prepare("SELECT value FROM config WHERE key = 'identity.ownerViewerKey'").get();if(r)try{let n=JSON.parse(r.value);typeof n=="string"&&n.trim().length>0&&(t=n)}catch{r.value.trim().length>0&&(t=r.value)}let i=e.prepare("SELECT id, config FROM channels").all(),E=e.prepare("UPDATE channels SET config = ?, updated_at = ? WHERE id = ?");for(let n of i)try{let T=JSON.parse(n.config);(typeof T.viewerKey!="string"||T.viewerKey.trim().length===0)&&(T.viewerKey=t,E.run(JSON.stringify(T),Date.now(),n.id))}catch{}e.prepare("UPDATE server_state SET schema_version = 54 WHERE id = 1").run(),console.info("[db migration v54] user_visible_events: created delivery ledger and backfilled channel viewerKey")}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<55&&(e.exec(`
828
+ `);let r="local-owner",t=e.prepare("SELECT value FROM config WHERE key = 'identity.ownerViewerKey'").get();if(t)try{let n=JSON.parse(t.value);typeof n=="string"&&n.trim().length>0&&(r=n)}catch{t.value.trim().length>0&&(r=t.value)}let i=e.prepare("SELECT id, config FROM channels").all(),E=e.prepare("UPDATE channels SET config = ?, updated_at = ? WHERE id = ?");for(let n of i)try{let T=JSON.parse(n.config);(typeof T.viewerKey!="string"||T.viewerKey.trim().length===0)&&(T.viewerKey=r,E.run(JSON.stringify(T),Date.now(),n.id))}catch{}e.prepare("UPDATE server_state SET schema_version = 54 WHERE id = 1").run(),console.info("[db migration v54] user_visible_events: created delivery ledger and backfilled channel viewerKey")}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<55&&(e.exec(`
800
829
  CREATE TABLE IF NOT EXISTS audit_diagnostics (
801
830
  id TEXT PRIMARY KEY,
802
831
  source TEXT NOT NULL,
@@ -871,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"
871
900
  ON assistant_delivery_commitments(session_id, created_at);
872
901
  CREATE INDEX IF NOT EXISTS idx_assistant_delivery_commitments_source_message
873
902
  ON assistant_delivery_commitments(source_message_id) WHERE source_message_id IS NOT NULL;
874
- `),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 r="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&&(r=T)}catch{i.value.trim().length>0&&(r=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),L=typeof c.viewerKey=="string"&&c.viewerKey.trim().length>0?c.viewerKey:r;delete c.viewerKey,n.run(JSON.stringify(c),L,Date.now(),T.id)}catch{e.prepare("UPDATE channels SET viewer_key = ?, updated_at = ? WHERE id = ?").run(r,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 r=e.prepare("SELECT id FROM delivery_rules WHERE created_by = 'system' AND target LIKE '%_default_block_%'").all();for(let i of r)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(r){console.warn("[db v59 repair] cleanup of legacy seed failed (non-fatal):",r)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<59){let r=e.prepare("SELECT id, match_criteria FROM delivery_rules WHERE event_type = 'task_complete'").all(),i=0;for(let E of r)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:[],L=[...new Set([...c,...s])],o={...n,excludePromptPatterns:L};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 r=e.prepare("SELECT id, match_criteria FROM delivery_rules WHERE event_type = 'task_complete'").all();for(let i of r)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(v=>!T.includes(v));if(c.length===0)continue;let L=[...T,...c],o={...E,excludePromptPatterns:L};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(r){console.warn("[db v59 reconcile] post-migration repair failed (non-fatal):",r)}}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(r=>r.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 r=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 r)try{let L=c.match_criteria?JSON.parse(c.match_criteria):{};if(!L.templateId&&!L.roleId&&!L.promptPattern&&!L.taskStatus){let v=JSON.parse(c.target);if(v?.type==="channel"&&typeof v.channelId=="string"){i=v.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(`
875
904
  CREATE TABLE effect_receipts (
876
905
  id TEXT PRIMARY KEY,
877
906
  trace_id TEXT NOT NULL,
@@ -931,7 +960,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
931
960
  SET verdict_pair = divergence_subtype
932
961
  WHERE verdict_pair IS NULL OR verdict_pair = 'agreed_pass'
933
962
  AND divergence_subtype IN ('old_blocks_new_passes', 'old_passes_new_blocks')
934
- `).run();let t=e.prepare("DELETE FROM effect_receipts WHERE trace_id LIKE 'trace-%' OR trace_id LIKE 'test-%'").run().changes;t>0&&console.info(`[db migration] v65: cleaned ${t} fixture row(s) from effect_receipts`),e.prepare("UPDATE server_state SET schema_version = 65 WHERE id = 1").run()}catch(t){throw t}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<66)try{let t=e.prepare("PRAGMA table_info(roles)").all();t.some(r=>r.name==="effort_tier")||e.prepare("ALTER TABLE roles ADD COLUMN effort_tier TEXT").run(),t.some(r=>r.name==="skills")||e.prepare("ALTER TABLE roles ADD COLUMN skills TEXT").run(),e.prepare("UPDATE server_state SET schema_version = 66 WHERE id = 1").run()}catch(t){throw new Error(`Schema v66 migration failed: ${t}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<67)try{e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='chat_tool_calls'").get()||(e.exec(`
963
+ `).run();let r=e.prepare("DELETE FROM effect_receipts WHERE trace_id LIKE 'trace-%' OR trace_id LIKE 'test-%'").run().changes;r>0&&console.info(`[db migration] v65: cleaned ${r} fixture row(s) from effect_receipts`),e.prepare("UPDATE server_state SET schema_version = 65 WHERE id = 1").run()}catch(r){throw r}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<66)try{let r=e.prepare("PRAGMA table_info(roles)").all();r.some(t=>t.name==="effort_tier")||e.prepare("ALTER TABLE roles ADD COLUMN effort_tier TEXT").run(),r.some(t=>t.name==="skills")||e.prepare("ALTER TABLE roles ADD COLUMN skills TEXT").run(),e.prepare("UPDATE server_state SET schema_version = 66 WHERE id = 1").run()}catch(r){throw new Error(`Schema v66 migration failed: ${r}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<67)try{e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='chat_tool_calls'").get()||(e.exec(`
935
964
  CREATE TABLE chat_tool_calls (
936
965
  id TEXT PRIMARY KEY,
937
966
  trace_id TEXT NOT NULL,
@@ -945,7 +974,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
945
974
  CREATE INDEX idx_chat_tool_calls_trace ON chat_tool_calls(trace_id, called_at)
946
975
  `),e.exec(`
947
976
  CREATE INDEX idx_chat_tool_calls_session ON chat_tool_calls(session_id, called_at) WHERE session_id IS NOT NULL
948
- `)),e.prepare("UPDATE server_state SET schema_version = 67 WHERE id = 1").run()}catch(t){throw new Error(`Schema v67 migration failed: ${t}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<68)try{e.prepare("PRAGMA table_info(memories)").all().some(n=>n.name==="kind")||e.exec("ALTER TABLE memories ADD COLUMN kind TEXT NOT NULL DEFAULT 'observation'"),e.prepare("PRAGMA table_info(roles)").all().some(n=>n.name==="last_reflection_at")||e.exec("ALTER TABLE roles ADD COLUMN last_reflection_at INTEGER"),e.prepare("PRAGMA table_info(server_state)").all().some(n=>n.name==="last_memory_gc_at")||e.exec("ALTER TABLE server_state ADD COLUMN last_memory_gc_at INTEGER"),e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='beliefs'").get()||(e.exec(`
977
+ `)),e.prepare("UPDATE server_state SET schema_version = 67 WHERE id = 1").run()}catch(r){throw new Error(`Schema v67 migration failed: ${r}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<68)try{e.prepare("PRAGMA table_info(memories)").all().some(n=>n.name==="kind")||e.exec("ALTER TABLE memories ADD COLUMN kind TEXT NOT NULL DEFAULT 'observation'"),e.prepare("PRAGMA table_info(roles)").all().some(n=>n.name==="last_reflection_at")||e.exec("ALTER TABLE roles ADD COLUMN last_reflection_at INTEGER"),e.prepare("PRAGMA table_info(server_state)").all().some(n=>n.name==="last_memory_gc_at")||e.exec("ALTER TABLE server_state ADD COLUMN last_memory_gc_at INTEGER"),e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='beliefs'").get()||(e.exec(`
949
978
  CREATE TABLE beliefs (
950
979
  id TEXT PRIMARY KEY,
951
980
  role_id TEXT NOT NULL,
@@ -982,7 +1011,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
982
1011
  INSERT INTO beliefs_fts(beliefs_fts, rowid, content) VALUES ('delete', old.rowid, old.content);
983
1012
  INSERT INTO beliefs_fts(rowid, content) VALUES (new.rowid, new.content);
984
1013
  END
985
- `)),e.prepare("UPDATE server_state SET schema_version = 68 WHERE id = 1").run()}catch(t){throw new Error(`Schema v68 migration failed: ${t}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<69)try{e.prepare("PRAGMA table_info(tasks)").all().some(i=>i.name==="context_meta")||e.exec("ALTER TABLE tasks ADD COLUMN context_meta TEXT"),e.prepare("PRAGMA table_info(roles)").all().some(i=>i.name==="memory_budget_tokens")||e.exec("ALTER TABLE roles ADD COLUMN memory_budget_tokens INTEGER"),e.prepare("UPDATE server_state SET schema_version = 69 WHERE id = 1").run()}catch(t){throw new Error(`Schema v69 migration failed: ${t}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<70)try{e.prepare("PRAGMA table_info(task_templates)").all().some(r=>r.name==="retry_policy")||e.exec("ALTER TABLE task_templates ADD COLUMN retry_policy TEXT"),e.prepare("UPDATE server_state SET schema_version = 70 WHERE id = 1").run()}catch(t){throw new Error(`Schema v70 migration failed: ${t}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<71)try{e.prepare(`CREATE TABLE IF NOT EXISTS extensions (
1014
+ `)),e.prepare("UPDATE server_state SET schema_version = 68 WHERE id = 1").run()}catch(r){throw new Error(`Schema v68 migration failed: ${r}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<69)try{e.prepare("PRAGMA table_info(tasks)").all().some(i=>i.name==="context_meta")||e.exec("ALTER TABLE tasks ADD COLUMN context_meta TEXT"),e.prepare("PRAGMA table_info(roles)").all().some(i=>i.name==="memory_budget_tokens")||e.exec("ALTER TABLE roles ADD COLUMN memory_budget_tokens INTEGER"),e.prepare("UPDATE server_state SET schema_version = 69 WHERE id = 1").run()}catch(r){throw new Error(`Schema v69 migration failed: ${r}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<70)try{e.prepare("PRAGMA table_info(task_templates)").all().some(t=>t.name==="retry_policy")||e.exec("ALTER TABLE task_templates ADD COLUMN retry_policy TEXT"),e.prepare("UPDATE server_state SET schema_version = 70 WHERE id = 1").run()}catch(r){throw new Error(`Schema v70 migration failed: ${r}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<71)try{e.prepare(`CREATE TABLE IF NOT EXISTS extensions (
986
1015
  id TEXT PRIMARY KEY,
987
1016
  name TEXT NOT NULL UNIQUE,
988
1017
  version TEXT NOT NULL,
@@ -1009,7 +1038,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
1009
1038
  last_error TEXT,
1010
1039
  last_role_id TEXT,
1011
1040
  last_task_id TEXT
1012
- )`).run(),e.prepare("UPDATE server_state SET schema_version = 71 WHERE id = 1").run()}catch(t){throw new Error(`Schema v71 migration failed: ${t}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<72)try{if(e.exec(`
1041
+ )`).run(),e.prepare("UPDATE server_state SET schema_version = 71 WHERE id = 1").run()}catch(r){throw new Error(`Schema v71 migration failed: ${r}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<72)try{if(e.exec(`
1013
1042
  CREATE TABLE IF NOT EXISTS artifacts (
1014
1043
  id TEXT PRIMARY KEY,
1015
1044
  source_kind TEXT NOT NULL CHECK (source_kind IN ('template_step', 'task_published', 'chat_sent')),
@@ -1040,7 +1069,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
1040
1069
  OR (source_kind = 'chat_sent' AND chat_session_id IS NOT NULL AND task_id IS NULL AND execution_id IS NULL)
1041
1070
  )
1042
1071
  )
1043
- `),e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='template_execution_artifacts'").get()){let r=e.prepare("SELECT COUNT(*) AS n FROM template_execution_artifacts").get().n;e.exec(`
1072
+ `),e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='template_execution_artifacts'").get()){let t=e.prepare("SELECT COUNT(*) AS n FROM template_execution_artifacts").get().n;e.exec(`
1044
1073
  INSERT INTO artifacts (
1045
1074
  id, source_kind, execution_id, task_id, chat_session_id, step_id, role_id,
1046
1075
  key, kind, value_json, blob_path, mime, original_filename, size_bytes, created_at,
@@ -1057,7 +1086,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
1057
1086
  key, kind, value_json, blob_path, mime, original_filename, size_bytes, created_at,
1058
1087
  locator, content_hash, retention_hint, encryption_class, purpose, replaces, produced_by_role, access
1059
1088
  FROM template_execution_artifacts
1060
- `);let i=e.prepare("SELECT COUNT(*) AS n FROM artifacts WHERE source_kind = 'template_step'").get().n;if(i!==r)throw new Error(`v72 migration row-count mismatch: legacy=${r}, migrated=${i}`);e.exec("DROP TABLE template_execution_artifacts")}e.prepare("CREATE INDEX IF NOT EXISTS idx_artifacts_execution_id ON artifacts(execution_id) WHERE execution_id IS NOT NULL").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_artifacts_task_id ON artifacts(task_id) WHERE task_id IS NOT NULL").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_artifacts_chat_session_id ON artifacts(chat_session_id) WHERE chat_session_id IS NOT NULL").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_artifacts_role_id ON artifacts(role_id) WHERE role_id IS NOT NULL").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_artifacts_created_at ON artifacts(created_at DESC)").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_artifacts_source_kind ON artifacts(source_kind)").run(),e.prepare("CREATE UNIQUE INDEX IF NOT EXISTS idx_artifacts_template_step_key ON artifacts(execution_id, step_id, key) WHERE source_kind = 'template_step'").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_artifacts_replaces ON artifacts(replaces) WHERE replaces IS NOT NULL").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_artifacts_content_hash ON artifacts(content_hash) WHERE content_hash IS NOT NULL").run(),e.prepare("UPDATE server_state SET schema_version = 72 WHERE id = 1").run()}catch(t){throw new Error(`Schema v72 migration failed: ${t}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<73)try{e.prepare("PRAGMA table_info(artifacts)").all().some(i=>i.name==="priority")||e.prepare("ALTER TABLE artifacts ADD COLUMN priority INTEGER").run(),e.prepare("UPDATE server_state SET schema_version = 73 WHERE id = 1").run()}catch(t){throw new Error(`Schema v73 migration failed: ${t}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<74)try{let t=e.prepare("PRAGMA table_info(channels)").all(),r=t.some(E=>E.name==="recipient_cap_map_json"),i=t.some(E=>E.name==="default_recipient_cap_bytes");r||e.prepare("ALTER TABLE channels ADD COLUMN recipient_cap_map_json TEXT").run(),i||e.prepare("ALTER TABLE channels ADD COLUMN default_recipient_cap_bytes INTEGER").run(),e.prepare("UPDATE server_state SET schema_version = 74 WHERE id = 1").run()}catch(t){throw new Error(`Schema v74 migration failed: ${t}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<75)try{e.prepare("PRAGMA table_info(audit_violations)").all().length>0&&((e.prepare("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = 'audit_violations'").get()?.sql.includes("'A', 'B', 'C'")??!1)||(e.prepare(`
1089
+ `);let i=e.prepare("SELECT COUNT(*) AS n FROM artifacts WHERE source_kind = 'template_step'").get().n;if(i!==t)throw new Error(`v72 migration row-count mismatch: legacy=${t}, migrated=${i}`);e.exec("DROP TABLE template_execution_artifacts")}e.prepare("CREATE INDEX IF NOT EXISTS idx_artifacts_execution_id ON artifacts(execution_id) WHERE execution_id IS NOT NULL").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_artifacts_task_id ON artifacts(task_id) WHERE task_id IS NOT NULL").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_artifacts_chat_session_id ON artifacts(chat_session_id) WHERE chat_session_id IS NOT NULL").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_artifacts_role_id ON artifacts(role_id) WHERE role_id IS NOT NULL").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_artifacts_created_at ON artifacts(created_at DESC)").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_artifacts_source_kind ON artifacts(source_kind)").run(),e.prepare("CREATE UNIQUE INDEX IF NOT EXISTS idx_artifacts_template_step_key ON artifacts(execution_id, step_id, key) WHERE source_kind = 'template_step'").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_artifacts_replaces ON artifacts(replaces) WHERE replaces IS NOT NULL").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_artifacts_content_hash ON artifacts(content_hash) WHERE content_hash IS NOT NULL").run(),e.prepare("UPDATE server_state SET schema_version = 72 WHERE id = 1").run()}catch(r){throw new Error(`Schema v72 migration failed: ${r}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<73)try{e.prepare("PRAGMA table_info(artifacts)").all().some(i=>i.name==="priority")||e.prepare("ALTER TABLE artifacts ADD COLUMN priority INTEGER").run(),e.prepare("UPDATE server_state SET schema_version = 73 WHERE id = 1").run()}catch(r){throw new Error(`Schema v73 migration failed: ${r}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<74)try{let r=e.prepare("PRAGMA table_info(channels)").all(),t=r.some(E=>E.name==="recipient_cap_map_json"),i=r.some(E=>E.name==="default_recipient_cap_bytes");t||e.prepare("ALTER TABLE channels ADD COLUMN recipient_cap_map_json TEXT").run(),i||e.prepare("ALTER TABLE channels ADD COLUMN default_recipient_cap_bytes INTEGER").run(),e.prepare("UPDATE server_state SET schema_version = 74 WHERE id = 1").run()}catch(r){throw new Error(`Schema v74 migration failed: ${r}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<75)try{e.prepare("PRAGMA table_info(audit_violations)").all().length>0&&((e.prepare("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = 'audit_violations'").get()?.sql.includes("'A', 'B', 'C'")??!1)||(e.prepare(`
1061
1090
  CREATE TABLE audit_violations_new (
1062
1091
  id TEXT PRIMARY KEY,
1063
1092
  step_task_id TEXT NOT NULL,
@@ -1076,7 +1105,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
1076
1105
  SELECT
1077
1106
  id, step_task_id, execution_id, role_id, contract_field, layer, severity, message, metadata_json, created_at
1078
1107
  FROM audit_violations
1079
- `).run(),e.prepare("DROP TABLE audit_violations").run(),e.prepare("ALTER TABLE audit_violations_new RENAME TO audit_violations").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_audit_violations_role ON audit_violations(role_id, created_at DESC)").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_audit_violations_task ON audit_violations(step_task_id)").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_audit_violations_execution ON audit_violations(execution_id, created_at DESC)").run())),e.prepare("UPDATE server_state SET schema_version = 75 WHERE id = 1").run(),console.info("[db migration v75] audit_violations.layer CHECK extended to include 'C' for Phase 1 customAssertions")}catch(t){throw new Error(`Schema v75 migration failed: ${t}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<76)try{e.prepare("SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='task_files'").get().cnt>0||(e.prepare(`
1108
+ `).run(),e.prepare("DROP TABLE audit_violations").run(),e.prepare("ALTER TABLE audit_violations_new RENAME TO audit_violations").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_audit_violations_role ON audit_violations(role_id, created_at DESC)").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_audit_violations_task ON audit_violations(step_task_id)").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_audit_violations_execution ON audit_violations(execution_id, created_at DESC)").run())),e.prepare("UPDATE server_state SET schema_version = 75 WHERE id = 1").run(),console.info("[db migration v75] audit_violations.layer CHECK extended to include 'C' for Phase 1 customAssertions")}catch(r){throw new Error(`Schema v75 migration failed: ${r}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<76)try{e.prepare("SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='task_files'").get().cnt>0||(e.prepare(`
1080
1109
  CREATE TABLE task_files (
1081
1110
  id TEXT PRIMARY KEY,
1082
1111
  task_id TEXT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
@@ -1087,7 +1116,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
1087
1116
  inode INTEGER,
1088
1117
  created_at INTEGER NOT NULL
1089
1118
  )
1090
- `).run(),e.prepare("CREATE INDEX idx_task_files_task_id ON task_files(task_id)").run(),e.prepare("CREATE INDEX idx_task_files_path ON task_files(path)").run()),e.prepare("UPDATE server_state SET schema_version = 76 WHERE id = 1").run(),console.info("[db migration v76] task_files table created for workspace snapshot inventory")}catch(t){throw new Error(`Schema v76 migration failed: ${t}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<77)try{e.prepare("SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='editor_scores'").get().cnt>0||(e.prepare(`
1119
+ `).run(),e.prepare("CREATE INDEX idx_task_files_task_id ON task_files(task_id)").run(),e.prepare("CREATE INDEX idx_task_files_path ON task_files(path)").run()),e.prepare("UPDATE server_state SET schema_version = 76 WHERE id = 1").run(),console.info("[db migration v76] task_files table created for workspace snapshot inventory")}catch(r){throw new Error(`Schema v76 migration failed: ${r}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<77)try{e.prepare("SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='editor_scores'").get().cnt>0||(e.prepare(`
1091
1120
  CREATE TABLE editor_scores (
1092
1121
  id TEXT PRIMARY KEY,
1093
1122
  template_run_id TEXT NOT NULL,
@@ -1098,7 +1127,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
1098
1127
  brief_diff TEXT,
1099
1128
  created_at INTEGER NOT NULL
1100
1129
  )
1101
- `).run(),e.prepare("CREATE INDEX idx_editor_scores_template_run_id ON editor_scores(template_run_id)").run(),e.prepare("CREATE INDEX idx_editor_scores_created_at ON editor_scores(created_at)").run()),e.prepare("UPDATE server_state SET schema_version = 77 WHERE id = 1").run(),console.info("[db migration v77] editor_scores table created for podcast Phase 2 retrospective")}catch(t){throw new Error(`Schema v77 migration failed: ${t}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<78)try{e.prepare("PRAGMA table_info(artifacts)").all().some(r=>r.name==="artifact_role")||e.prepare("ALTER TABLE artifacts ADD COLUMN artifact_role TEXT").run(),e.prepare("UPDATE server_state SET schema_version = 78 WHERE id = 1").run(),console.info("[db migration v78] artifacts.artifact_role column added for expectedArtifacts contract")}catch(t){throw new Error(`Schema v78 migration failed: ${t}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<79)try{let t=e.prepare("PRAGMA table_info(beliefs)").all();t.some(E=>E.name==="scope_key")||e.prepare("ALTER TABLE beliefs ADD COLUMN scope_key TEXT").run(),t.some(E=>E.name==="status")||e.prepare("ALTER TABLE beliefs ADD COLUMN status TEXT NOT NULL DEFAULT 'candidate'").run(),t.some(E=>E.name==="trial_count")||e.prepare("ALTER TABLE beliefs ADD COLUMN trial_count INTEGER NOT NULL DEFAULT 0").run(),t.some(E=>E.name==="delta_sum")||e.prepare("ALTER TABLE beliefs ADD COLUMN delta_sum REAL NOT NULL DEFAULT 0").run(),t.some(E=>E.name==="expires_at")||e.prepare("ALTER TABLE beliefs ADD COLUMN expires_at INTEGER").run(),t.some(E=>E.name==="success_ema")||e.prepare("ALTER TABLE beliefs ADD COLUMN success_ema REAL").run(),e.exec(`
1130
+ `).run(),e.prepare("CREATE INDEX idx_editor_scores_template_run_id ON editor_scores(template_run_id)").run(),e.prepare("CREATE INDEX idx_editor_scores_created_at ON editor_scores(created_at)").run()),e.prepare("UPDATE server_state SET schema_version = 77 WHERE id = 1").run(),console.info("[db migration v77] editor_scores table created for podcast Phase 2 retrospective")}catch(r){throw new Error(`Schema v77 migration failed: ${r}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<78)try{e.prepare("PRAGMA table_info(artifacts)").all().some(t=>t.name==="artifact_role")||e.prepare("ALTER TABLE artifacts ADD COLUMN artifact_role TEXT").run(),e.prepare("UPDATE server_state SET schema_version = 78 WHERE id = 1").run(),console.info("[db migration v78] artifacts.artifact_role column added for expectedArtifacts contract")}catch(r){throw new Error(`Schema v78 migration failed: ${r}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<79)try{let r=e.prepare("PRAGMA table_info(beliefs)").all();r.some(E=>E.name==="scope_key")||e.prepare("ALTER TABLE beliefs ADD COLUMN scope_key TEXT").run(),r.some(E=>E.name==="status")||e.prepare("ALTER TABLE beliefs ADD COLUMN status TEXT NOT NULL DEFAULT 'candidate'").run(),r.some(E=>E.name==="trial_count")||e.prepare("ALTER TABLE beliefs ADD COLUMN trial_count INTEGER NOT NULL DEFAULT 0").run(),r.some(E=>E.name==="delta_sum")||e.prepare("ALTER TABLE beliefs ADD COLUMN delta_sum REAL NOT NULL DEFAULT 0").run(),r.some(E=>E.name==="expires_at")||e.prepare("ALTER TABLE beliefs ADD COLUMN expires_at INTEGER").run(),r.some(E=>E.name==="success_ema")||e.prepare("ALTER TABLE beliefs ADD COLUMN success_ema REAL").run(),e.exec(`
1102
1131
  CREATE TABLE IF NOT EXISTS belief_scopes (
1103
1132
  scope_key TEXT PRIMARY KEY,
1104
1133
  role_id TEXT NOT NULL,
@@ -1109,7 +1138,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
1109
1138
  current_challenger_id TEXT,
1110
1139
  updated_at INTEGER NOT NULL
1111
1140
  )
1112
- `),e.exec("CREATE INDEX IF NOT EXISTS idx_beliefs_scope_status ON beliefs(scope_key, status)"),e.exec("CREATE INDEX IF NOT EXISTS idx_beliefs_expires ON beliefs(expires_at)");let r=14*86400*1e3,i=Date.now()+r;e.prepare("UPDATE beliefs SET scope_key = role_id || '::pool', status = 'candidate', expires_at = ? WHERE scope_key IS NULL").run(i),e.prepare("UPDATE server_state SET schema_version = 79 WHERE id = 1").run(),console.info("[db migration v79] beliefs scope/status columns + belief_scopes table created")}catch(t){throw new Error(`Schema v79 migration failed: ${t}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<80)try{e.exec(`
1141
+ `),e.exec("CREATE INDEX IF NOT EXISTS idx_beliefs_scope_status ON beliefs(scope_key, status)"),e.exec("CREATE INDEX IF NOT EXISTS idx_beliefs_expires ON beliefs(expires_at)");let t=14*86400*1e3,i=Date.now()+t;e.prepare("UPDATE beliefs SET scope_key = role_id || '::pool', status = 'candidate', expires_at = ? WHERE scope_key IS NULL").run(i),e.prepare("UPDATE server_state SET schema_version = 79 WHERE id = 1").run(),console.info("[db migration v79] beliefs scope/status columns + belief_scopes table created")}catch(r){throw new Error(`Schema v79 migration failed: ${r}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<80)try{e.exec(`
1113
1142
  CREATE TABLE IF NOT EXISTS user_feedback (
1114
1143
  id TEXT PRIMARY KEY,
1115
1144
  execution_id TEXT NOT NULL,
@@ -1117,7 +1146,7 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
1117
1146
  rating TEXT NOT NULL CHECK(rating IN ('good','bad')),
1118
1147
  created_at INTEGER NOT NULL
1119
1148
  )
1120
- `),e.prepare("UPDATE server_state SET schema_version = 80 WHERE id = 1").run(),console.info("[db migration v80] user_feedback table created")}catch(t){throw new Error(`Schema v80 migration failed: ${t}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<81)try{e.prepare("PRAGMA table_info(roles)").all().some(r=>r.name==="task_seq")||e.exec("ALTER TABLE roles ADD COLUMN task_seq INTEGER NOT NULL DEFAULT 0"),e.prepare("DROP TRIGGER IF EXISTS beliefs_fts_insert").run(),e.prepare("DROP TRIGGER IF EXISTS beliefs_fts_delete").run(),e.prepare("DROP TRIGGER IF EXISTS beliefs_fts_update").run(),e.prepare("DROP TABLE IF EXISTS beliefs_fts").run(),e.exec(`
1149
+ `),e.prepare("UPDATE server_state SET schema_version = 80 WHERE id = 1").run(),console.info("[db migration v80] user_feedback table created")}catch(r){throw new Error(`Schema v80 migration failed: ${r}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<81)try{e.prepare("PRAGMA table_info(roles)").all().some(t=>t.name==="task_seq")||e.exec("ALTER TABLE roles ADD COLUMN task_seq INTEGER NOT NULL DEFAULT 0"),e.prepare("DROP TRIGGER IF EXISTS beliefs_fts_insert").run(),e.prepare("DROP TRIGGER IF EXISTS beliefs_fts_delete").run(),e.prepare("DROP TRIGGER IF EXISTS beliefs_fts_update").run(),e.prepare("DROP TABLE IF EXISTS beliefs_fts").run(),e.exec(`
1121
1150
  CREATE TABLE beliefs_new (
1122
1151
  id TEXT PRIMARY KEY,
1123
1152
  role_id TEXT NOT NULL,
@@ -1156,4 +1185,36 @@ import{d as B,e as W,h as Y}from"./chunk-VO24C673.js";import{c as g,h as K}from"
1156
1185
  INSERT INTO beliefs_fts(beliefs_fts, rowid, content) VALUES ('delete', old.rowid, old.content);
1157
1186
  INSERT INTO beliefs_fts(rowid, content) VALUES (new.rowid, new.content);
1158
1187
  END
1159
- `),e.exec("INSERT INTO beliefs_fts(rowid, content) SELECT rowid, content FROM beliefs"),e.exec("DROP TABLE IF EXISTS belief_scopes"),e.prepare("UPDATE server_state SET schema_version = 81 WHERE id = 1").run(),console.info("[db migration v81] belief evolution v3: three-state collapse + task_seq clock + inject_count (DP-001) + FTS5 rebuild")}catch(t){throw new Error(`Schema v81 migration failed: ${t instanceof Error?t.message:String(t)}`)}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<82)try{let t=e.prepare("UPDATE beliefs SET scope_key = NULL WHERE scope_key LIKE '%::pool'").run(),r=e.prepare("UPDATE beliefs SET last_used_at = COALESCE((SELECT task_seq FROM roles WHERE roles.id = beliefs.role_id), 0) WHERE last_used_at > 1000000000").run();e.prepare("UPDATE server_state SET schema_version = 82 WHERE id = 1").run(),console.info(`[db migration v82] belief data normalization: ${t.changes} ::pool rows nulled, ${r.changes} ms-timestamp last_used_at clamped`)}catch(t){throw new Error(`Schema v82 migration failed: ${t instanceof Error?t.message:String(t)}`)}try{let s=e.prepare("SELECT id, name, steps, role_preference FROM task_templates WHERE enabled = 1").all(),t=0;for(let r of s){if(r.role_preference)continue;let i;try{i=JSON.parse(r.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(),r.id),t+=1,console.info(`[db migration] template auto-repaired: id=${r.id} name=${r.name}`))}t>0&&console.info(`[db migration] auto-repaired ${t} enabled template(s) with missing role config`)}catch(s){console.error("[db migration] template auto-repair failed:",s)}}function 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{oe as a,ve 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};
1188
+ `),e.exec("INSERT INTO beliefs_fts(rowid, content) SELECT rowid, content FROM beliefs"),e.exec("DROP TABLE IF EXISTS belief_scopes"),e.prepare("UPDATE server_state SET schema_version = 81 WHERE id = 1").run(),console.info("[db migration v81] belief evolution v3: three-state collapse + task_seq clock + inject_count (DP-001) + FTS5 rebuild")}catch(r){throw new Error(`Schema v81 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)<82)try{let r=e.prepare("UPDATE beliefs SET scope_key = NULL WHERE scope_key LIKE '%::pool'").run(),t=e.prepare("UPDATE beliefs SET last_used_at = COALESCE((SELECT task_seq FROM roles WHERE roles.id = beliefs.role_id), 0) WHERE last_used_at > 1000000000").run();e.prepare("UPDATE server_state SET schema_version = 82 WHERE id = 1").run(),console.info(`[db migration v82] belief data normalization: ${r.changes} ::pool rows nulled, ${t.changes} ms-timestamp last_used_at clamped`)}catch(r){throw new Error(`Schema v82 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)<83)try{e.prepare("PRAGMA table_info(tasks)").all().some(t=>t.name==="cost_breakdown")||e.exec("ALTER TABLE tasks ADD COLUMN cost_breakdown TEXT"),e.prepare("UPDATE server_state SET schema_version = 83 WHERE id = 1").run(),console.info("[db migration v83] tasks.cost_breakdown column added")}catch(r){throw new Error(`Schema v83 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)<84)try{e.exec(`
1189
+ CREATE TABLE IF NOT EXISTS llm_costs (
1190
+ id TEXT PRIMARY KEY,
1191
+ call_id TEXT NOT NULL,
1192
+ source TEXT NOT NULL,
1193
+ model TEXT NOT NULL,
1194
+ role_id TEXT,
1195
+ task_id TEXT,
1196
+ session_id TEXT,
1197
+ message_id TEXT,
1198
+ input_tokens INTEGER NOT NULL DEFAULT 0,
1199
+ output_tokens INTEGER NOT NULL DEFAULT 0,
1200
+ cache_read_tokens INTEGER NOT NULL DEFAULT 0,
1201
+ cache_creation_tokens INTEGER NOT NULL DEFAULT 0,
1202
+ cost_usd REAL NOT NULL DEFAULT 0,
1203
+ priced INTEGER NOT NULL DEFAULT 0,
1204
+ estimated INTEGER NOT NULL DEFAULT 0,
1205
+ sdk_total_cost_usd REAL,
1206
+ num_turns INTEGER,
1207
+ created_at INTEGER NOT NULL
1208
+ );
1209
+ CREATE INDEX IF NOT EXISTS idx_llm_costs_created ON llm_costs(created_at);
1210
+ CREATE INDEX IF NOT EXISTS idx_llm_costs_source ON llm_costs(source);
1211
+ CREATE INDEX IF NOT EXISTS idx_llm_costs_model ON llm_costs(model);
1212
+ CREATE INDEX IF NOT EXISTS idx_llm_costs_role ON llm_costs(role_id);
1213
+ `);let r=e.prepare("SELECT id, cost_usd, token_usage, cost_breakdown, created_at FROM tasks WHERE cost_usd IS NOT NULL").all(),t=e.prepare(`
1214
+ INSERT OR IGNORE INTO llm_costs
1215
+ (id, call_id, source, model, role_id, task_id, session_id, message_id,
1216
+ input_tokens, output_tokens, cache_read_tokens, cache_creation_tokens,
1217
+ cost_usd, priced, estimated, sdk_total_cost_usd, num_turns, created_at)
1218
+ VALUES
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 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};