adam-agent-server 1.16.0 → 1.17.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 (191) hide show
  1. package/dist/App-SIQUVFJY.js +14 -0
  2. package/dist/approval-handler-FONN2EGB.js +1 -0
  3. package/dist/{artifacts-S2KD6W76.js → artifacts-DMY2MI2F.js} +1 -1
  4. package/dist/audit-diagnostics-D4M4SA5O.js +1 -0
  5. package/dist/audit-manager-YEOJRE6K.js +1 -0
  6. package/dist/bree-engine-RGTBKKFE.js +1 -0
  7. package/dist/channels-VYNJFXDD.js +1 -0
  8. package/dist/channels-WFU4CVGW.js +1 -0
  9. package/dist/chat-tool-calls-WQGFYTUV.js +1 -0
  10. package/dist/{chunk-TCBGUVVU.js → chunk-2RBYM3X7.js} +1 -1
  11. package/dist/chunk-2V2H5PG5.js +182 -0
  12. package/dist/{chunk-TJTH7LHX.js → chunk-2WPUKCDA.js} +1 -1
  13. package/dist/{chunk-6Y2DN2UH.js → chunk-32D5GWJD.js} +1 -1
  14. package/dist/chunk-3GK65T2V.js +6 -0
  15. package/dist/chunk-3R7VGMAK.js +6 -0
  16. package/dist/{chunk-OXGWWSKT.js → chunk-3RITIMKB.js} +1 -1
  17. package/dist/{chunk-3UR2PN5N.js → chunk-3VUEB67V.js} +1 -1
  18. package/dist/{chunk-P5Q2UINT.js → chunk-4G2OZPP5.js} +1 -1
  19. package/dist/{chunk-NUJSTEV4.js → chunk-4N5G7ND2.js} +1 -1
  20. package/dist/{chunk-YNS5LQX5.js → chunk-4WJ2VSEJ.js} +1 -1
  21. package/dist/{chunk-TLMG5W3L.js → chunk-5G64P4KE.js} +1 -1
  22. package/dist/{chunk-245WE5AF.js → chunk-5M6IGE5G.js} +1 -1
  23. package/dist/chunk-5PELJRUQ.js +1 -0
  24. package/dist/{chunk-I44JKROJ.js → chunk-5WBFQMJL.js} +1 -1
  25. package/dist/chunk-725BGAO2.js +143 -0
  26. package/dist/{chunk-OGY42NUN.js → chunk-73GP6K5S.js} +1 -1
  27. package/dist/{chunk-HC34HJFF.js → chunk-7IXYCDUF.js} +1 -1
  28. package/dist/{chunk-H4MMEULK.js → chunk-A2S67EQG.js} +2 -2
  29. package/dist/{chunk-HXDS4NWI.js → chunk-A57SY3E4.js} +1 -1
  30. package/dist/{chunk-N2OLEUAQ.js → chunk-BRUHXRKK.js} +1 -1
  31. package/dist/{chunk-XYZVMTNN.js → chunk-CFPXWGFD.js} +1 -1
  32. package/dist/{chunk-VVQ532U2.js → chunk-D5PAJ3CB.js} +1 -1
  33. package/dist/{chunk-LQVBWVLE.js → chunk-DCTNMUQ5.js} +1 -1
  34. package/dist/{chunk-LVHLUAZW.js → chunk-ED2JAMEN.js} +8 -7
  35. package/dist/{chunk-BLCNUT53.js → chunk-EZLBMUQD.js} +1 -1
  36. package/dist/{chunk-ASPPM7TQ.js → chunk-FJ3DUJXO.js} +1 -1
  37. package/dist/chunk-FMJVKJJE.js +1 -0
  38. package/dist/{chunk-NLTYJUQG.js → chunk-HL373H4P.js} +1 -1
  39. package/dist/chunk-K3HWZBE5.js +10 -0
  40. package/dist/{chunk-R24YRJRG.js → chunk-MQTK4Q6M.js} +1 -1
  41. package/dist/chunk-NV5ZXKKF.js +61 -0
  42. package/dist/chunk-OH6VBBDV.js +1 -0
  43. package/dist/{chunk-SCUPWMI5.js → chunk-OII5SDMS.js} +1 -1
  44. package/dist/{chunk-MTQI6B7T.js → chunk-P76VP2UH.js} +3 -3
  45. package/dist/{chunk-AQAHVNNG.js → chunk-PBKZDNNV.js} +5 -5
  46. package/dist/{chunk-HJICGOD4.js → chunk-QWIBCFPC.js} +1 -1
  47. package/dist/{chunk-AG5SADAI.js → chunk-SJTIMT5U.js} +1 -1
  48. package/dist/chunk-TNBQFCXR.js +14 -0
  49. package/dist/chunk-TO27F23C.js +2 -0
  50. package/dist/chunk-UAF4KNXE.js +32 -0
  51. package/dist/{chunk-FYULPPFR.js → chunk-UUJ24BNJ.js} +1 -1
  52. package/dist/{chunk-QL2ZOLMC.js → chunk-VARIYH6K.js} +92 -6
  53. package/dist/{chunk-WBAPIPST.js → chunk-VO24C673.js} +1 -1
  54. package/dist/{chunk-52FETPCI.js → chunk-VSSKQAG5.js} +1 -1
  55. package/dist/{chunk-VKKDSXMR.js → chunk-VVBN35YG.js} +1 -1
  56. package/dist/chunk-WDSCTXT7.js +1 -0
  57. package/dist/chunk-YEBC67DJ.js +1 -0
  58. package/dist/cli.js +2 -2
  59. package/dist/config-GRL6O2ZY.js +1 -0
  60. package/dist/config-ZDKMTZJC.js +1 -0
  61. package/dist/db-LIKGSZCL.js +1 -0
  62. package/dist/{delivery-log-3O3OHKY4.js → delivery-log-2ILFP673.js} +1 -1
  63. package/dist/engine-JVPM3XE5.js +1 -0
  64. package/dist/evolution-audit-BDQM6NAX.js +1 -0
  65. package/dist/execution-tools-7MK257DY.js +1 -0
  66. package/dist/{external-api-YMEFVZGG.js → external-api-7GB3U775.js} +1 -1
  67. package/dist/index.js +41 -41
  68. package/dist/learner-V2HBTRAE.js +1 -0
  69. package/dist/logger-TEZSHFTZ.js +1 -0
  70. package/dist/{memories-2DY5G6ZN.js → memories-B3QGTYLX.js} +1 -1
  71. package/dist/memory-extractor-RYZ3VU7A.js +1 -0
  72. package/dist/memory-gc-5AYND3RL.js +1 -0
  73. package/dist/memory-service-XI3JZQ4E.js +1 -0
  74. package/dist/outbound-gateway-O27KKVOI.js +1 -0
  75. package/dist/presets-UAH3OG3C.js +1 -0
  76. package/dist/reflection-job-P6GIQVQN.js +23 -0
  77. package/dist/role-presets-RVYTO5FS.js +1 -0
  78. package/dist/role-workspace-KOTVFJD3.js +1 -0
  79. package/dist/roles-B6YC4GDC.js +1 -0
  80. package/dist/{runtime-TWLGJSL6.js → runtime-C3XN33A3.js} +1 -1
  81. package/dist/server-bus-6QGH2AVL.js +1 -0
  82. package/dist/session-manager-HO2ZCB47.js +1 -0
  83. package/dist/skill-registry-X2GY7SMI.js +1 -0
  84. package/dist/target-resolution-RLNUCT6M.js +1 -0
  85. package/dist/{task-templates-4YPKFFKG.js → task-templates-MNCF7JON.js} +1 -1
  86. package/dist/template-dispatch-BAMKX3QH.js +1 -0
  87. package/dist/trace-context-NVCN6UPC.js +1 -0
  88. package/package.json +2 -1
  89. package/web/dist/assets/{ArtifactDetail-9DJdEqCz.js → ArtifactDetail-Dt_xkaYJ.js} +2 -2
  90. package/web/dist/assets/{Artifacts-CQ6SAemH.js → Artifacts-DlPMk9VQ.js} +1 -1
  91. package/web/dist/assets/{Button-xVc-P0vm.js → Button-CRNb8sD3.js} +1 -1
  92. package/web/dist/assets/{Card-WUD1cwG6.js → Card-Cwvv0An8.js} +1 -1
  93. package/web/dist/assets/{ChannelDetail-B21nBQwi.js → ChannelDetail-kYtMmy6P.js} +1 -1
  94. package/web/dist/assets/{Channels-CAeGE1r7.js → Channels-BppR0Qc_.js} +2 -2
  95. package/web/dist/assets/{Chat-KpFWchPp.js → Chat-BLVREMCu.js} +2 -2
  96. package/web/dist/assets/{Dashboard-DkRwHNmr.js → Dashboard-XURc0f15.js} +1 -1
  97. package/web/dist/assets/{EmptyState-BLB33cKG.js → EmptyState-BvQA1o5K.js} +1 -1
  98. package/web/dist/assets/{EnvVarEditor-BchUNrmz.js → EnvVarEditor-DR-bSU0w.js} +1 -1
  99. package/web/dist/assets/{EventDefDetail-DnBwWWfT.js → EventDefDetail-DtkbGbQ0.js} +1 -1
  100. package/web/dist/assets/{Events-ByIzPIs2.js → Events-C_J4jvDh.js} +1 -1
  101. package/web/dist/assets/{Evolution-Vh9RKdma.js → Evolution-CEaSpRAm.js} +1 -1
  102. package/web/dist/assets/{ExtensionDetail-0CtJh5rF.js → ExtensionDetail-D5Qfq-W4.js} +1 -1
  103. package/web/dist/assets/{Extensions--O1ulwlC.js → Extensions-B_egkUP1.js} +1 -1
  104. package/web/dist/assets/{FeatureRequests-XhQbGg_q.js → FeatureRequests-D8WEYtoU.js} +1 -1
  105. package/web/dist/assets/{GoalDetail-DIOxf7ES.js → GoalDetail-DnMS_WWw.js} +1 -1
  106. package/web/dist/assets/{Goals-CZnHu9qC.js → Goals-BeKwpAss.js} +1 -1
  107. package/web/dist/assets/Logs-BfXBv-dV.js +1 -0
  108. package/web/dist/assets/{Memories-D-EAODUg.js → Memories-QRH7O8qP.js} +1 -1
  109. package/web/dist/assets/{Mistakes-wW78K3cP.js → Mistakes-mXU9PXft.js} +1 -1
  110. package/web/dist/assets/{NotFound-BsxIP-Xm.js → NotFound-DuH6sFz7.js} +1 -1
  111. package/web/dist/assets/{PageHeader-D8pqg_wk.js → PageHeader-acLQTYct.js} +1 -1
  112. package/web/dist/assets/Plugins-C8v4AsvM.js +1 -0
  113. package/web/dist/assets/{RoleDetail-CU3G9j_q.js → RoleDetail-Ct-k3uoK.js} +3 -3
  114. package/web/dist/assets/Roles-B8dQCKuS.js +1 -0
  115. package/web/dist/assets/{SectionHeader-DZo4QVWr.js → SectionHeader-NZWZgoOs.js} +1 -1
  116. package/web/dist/assets/Settings-CqtCBP6I.js +1 -0
  117. package/web/dist/assets/{Strategies-Bg4qlLei.js → Strategies-DFUWEKfU.js} +1 -1
  118. package/web/dist/assets/{Switch-WWPXnSOG.js → Switch-BcS5rOWb.js} +1 -1
  119. package/web/dist/assets/{Table-XjSmrOyn.js → Table-D2K039zr.js} +1 -1
  120. package/web/dist/assets/{Tabs-CSbcG_5T.js → Tabs-BwyLSH2c.js} +1 -1
  121. package/web/dist/assets/TaskDetail-BdhBhvKg.js +2 -0
  122. package/web/dist/assets/Work-D-t80Ekv.js +1 -0
  123. package/web/dist/assets/api-BRfbZQSW.js +1 -0
  124. package/web/dist/assets/{es2015-BgPT8VkR.js → es2015-BkFSNOYE.js} +1 -1
  125. package/web/dist/assets/index-DWU9AURw.css +2 -0
  126. package/web/dist/assets/index-PIFMZAPo.js +12 -0
  127. package/web/dist/assets/{useIsMobileLayout-DF2fEEM9.js → useIsMobileLayout-BogOiFTv.js} +1 -1
  128. package/web/dist/assets/{usePluginsWithUsage-CjU8Lkdn.js → usePluginsWithUsage-DE13JW16.js} +1 -1
  129. package/web/dist/assets/{vendor-icons-H7p0EuQJ.js → vendor-icons-Bc_e_XXa.js} +1 -1
  130. package/web/dist/assets/{vendor-react-C1yKjxEP.js → vendor-react-bQ_cvNuA.js} +1 -1
  131. package/web/dist/assets/{vendor-state-D0TNAbOY.js → vendor-state-BMVR_B0I.js} +1 -1
  132. package/web/dist/index.html +8 -8
  133. package/dist/App-Z2GJAMX3.js +0 -14
  134. package/dist/approval-handler-6NPN24UN.js +0 -1
  135. package/dist/audit-diagnostics-2MDM3IQT.js +0 -1
  136. package/dist/audit-manager-QG7CMBV2.js +0 -1
  137. package/dist/bree-engine-3QSLZF3W.js +0 -1
  138. package/dist/channels-S4AAOOTN.js +0 -1
  139. package/dist/channels-TYXSSI7D.js +0 -1
  140. package/dist/chat-tool-calls-2C7O4B2X.js +0 -1
  141. package/dist/chunk-32LOJEHE.js +0 -32
  142. package/dist/chunk-3UZIEE2D.js +0 -6
  143. package/dist/chunk-4234WJJD.js +0 -178
  144. package/dist/chunk-C2XFPUFV.js +0 -1
  145. package/dist/chunk-DRO3DG7X.js +0 -1
  146. package/dist/chunk-EWYXVBOG.js +0 -61
  147. package/dist/chunk-FCV2DPZQ.js +0 -1
  148. package/dist/chunk-FHESRUJY.js +0 -9
  149. package/dist/chunk-K2TZW4DU.js +0 -132
  150. package/dist/chunk-K4IE6DPX.js +0 -6
  151. package/dist/chunk-MNSZE3NV.js +0 -1
  152. package/dist/chunk-WVHN54MA.js +0 -14
  153. package/dist/chunk-Z6LHGA27.js +0 -1
  154. package/dist/config-HDAAV5FV.js +0 -1
  155. package/dist/config-VHWLMFIN.js +0 -1
  156. package/dist/db-HFBXO2O5.js +0 -1
  157. package/dist/dist-HCSYRPJU.js +0 -1
  158. package/dist/engine-J43ECCH7.js +0 -1
  159. package/dist/evolution-audit-BSGPFGFK.js +0 -1
  160. package/dist/execution-tools-HHUPWLCF.js +0 -1
  161. package/dist/learner-TQQZKRSB.js +0 -1
  162. package/dist/logger-PAMNFWI3.js +0 -1
  163. package/dist/memory-extractor-TUOOFST2.js +0 -1
  164. package/dist/memory-gc-MRO53MEY.js +0 -1
  165. package/dist/memory-service-23WVAW7T.js +0 -1
  166. package/dist/onnxruntime_binding-2BPLI7ZQ.node +0 -0
  167. package/dist/onnxruntime_binding-5J67DTMJ.node +0 -0
  168. package/dist/onnxruntime_binding-7ZZLEQ2F.node +0 -0
  169. package/dist/onnxruntime_binding-KDCXAPN5.node +0 -0
  170. package/dist/onnxruntime_binding-R73P2IQW.node +0 -0
  171. package/dist/outbound-gateway-VXODXSQR.js +0 -1
  172. package/dist/presets-KJV6SNNB.js +0 -1
  173. package/dist/reflection-job-EFFW3WOR.js +0 -23
  174. package/dist/role-presets-PHHL3OEN.js +0 -1
  175. package/dist/role-workspace-USY47ZPQ.js +0 -1
  176. package/dist/roles-3JXNHL7K.js +0 -1
  177. package/dist/server-bus-GEGVMSCA.js +0 -1
  178. package/dist/session-manager-PI3JEINK.js +0 -1
  179. package/dist/skill-registry-ROGU2WED.js +0 -1
  180. package/dist/target-resolution-PSSBM4LX.js +0 -1
  181. package/dist/template-dispatch-46TN534D.js +0 -1
  182. package/dist/trace-context-UR7DI5ME.js +0 -1
  183. package/web/dist/assets/Logs-DdeG3GiY.js +0 -1
  184. package/web/dist/assets/Plugins-DDUdX51_.js +0 -1
  185. package/web/dist/assets/Roles-BCoSzDBg.js +0 -1
  186. package/web/dist/assets/Settings-K3usfV-2.js +0 -1
  187. package/web/dist/assets/TaskDetail-C5roukcV.js +0 -2
  188. package/web/dist/assets/Work-DGTWSgtc.js +0 -1
  189. package/web/dist/assets/api-BkdixMz9.js +0 -1
  190. package/web/dist/assets/index-KNUbHDLy.css +0 -2
  191. package/web/dist/assets/index-iD-HOtIu.js +0 -12
@@ -0,0 +1,61 @@
1
+ import{d as V}from"./chunk-2RBYM3X7.js";import{b as L}from"./chunk-A57SY3E4.js";import{b as N,p as Z}from"./chunk-P76VP2UH.js";import{n as d,p as k}from"./chunk-VARIYH6K.js";import{c as F,h as X}from"./chunk-EZLBMUQD.js";Z();k();k();function Ee(e){d().prepare(`
2
+ INSERT INTO audit_violations
3
+ (id, step_task_id, execution_id, role_id, contract_field, layer, severity, message, metadata_json, created_at)
4
+ VALUES
5
+ (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
6
+ `).run(e.id,e.stepTaskId,e.executionId??null,e.roleId,e.contractField,e.layer,e.severity,e.message,e.metadata?JSON.stringify(e.metadata):null,e.createdAt)}function h(e){return{id:e.id,stepTaskId:e.step_task_id,executionId:e.execution_id??void 0,roleId:e.role_id,contractField:e.contract_field,layer:e.layer,severity:e.severity,message:e.message,metadata:e.metadata_json?JSON.parse(e.metadata_json):void 0,createdAt:e.created_at}}function D(e,s=50){return d().prepare("SELECT * FROM audit_violations WHERE role_id = ? ORDER BY created_at DESC LIMIT ?").all(e,s).map(h)}function H(e){return d().prepare("SELECT * FROM audit_violations WHERE step_task_id = ? ORDER BY created_at DESC").all(e).map(h)}function Te(e){return d().prepare("SELECT * FROM audit_violations WHERE execution_id = ? ORDER BY created_at DESC").all(e).map(h)}function P(e){return{id:e.id,roleId:e.role_id,taskId:e.task_id,scores:JSON.parse(e.score_json),emaScore:e.ema_score,createdAt:e.created_at,taskType:e.task_type??void 0}}function W(e){d().prepare(`
7
+ INSERT INTO role_scores (id, role_id, task_id, task_type, score_json, ema_score, created_at)
8
+ VALUES (?, ?, ?, ?, ?, ?, ?)
9
+ `).run(e.id,e.roleId,e.taskId,e.taskType??null,JSON.stringify(e.scores),e.emaScore,e.createdAt)}function ee(e,s=50){return d().prepare("SELECT * FROM role_scores WHERE role_id = ? ORDER BY created_at DESC LIMIT ?").all(e,s).map(P)}function B(e){return d().prepare("SELECT ema_score FROM role_scores WHERE role_id = ? ORDER BY created_at DESC LIMIT 1").get(e)?.ema_score}function U(e){let t=d().prepare(`
10
+ SELECT token_usage FROM tasks
11
+ WHERE role_id = ? AND status = 'completed' AND token_usage IS NOT NULL
12
+ ORDER BY completed_at DESC LIMIT 50
13
+ `).all(e);if(t.length===0)return 1e4;let n=t.map(r=>{let a=JSON.parse(r.token_usage);return(a.input??0)+(a.output??0)}).sort((r,a)=>r-a);return n[Math.floor(n.length/2)]}function Ie(e){let t=d().prepare("SELECT * FROM role_scores WHERE role_id = ? ORDER BY created_at DESC LIMIT 1").get(e);return t?P(t):void 0}function xe(e,s,t,n,r){let a=d(),o=a.prepare("SELECT id, role_id, score_json FROM role_scores WHERE task_id = ?").get(e);if(!o)return;let l=JSON.parse(o.score_json);l.intentFulfillment=s,l.intentFulfillmentFailed=t,l.weighted=n(l);let p=a.prepare("SELECT ema_score FROM role_scores WHERE role_id = ? AND created_at < (SELECT created_at FROM role_scores WHERE id = ?) ORDER BY created_at DESC LIMIT 1").get(o.role_id,o.id),u=p!==void 0?r*l.weighted+(1-r)*p.ema_score:l.weighted;return a.prepare("UPDATE role_scores SET score_json = ?, ema_score = ? WHERE id = ?").run(JSON.stringify(l),u,o.id),u}function Me(e,s){let n=d().prepare(`
14
+ SELECT rs.score_json, t.cost_usd, t.completed_at, rs.created_at
15
+ FROM role_scores rs
16
+ JOIN tasks t ON t.id = rs.task_id
17
+ WHERE rs.role_id = ? AND rs.task_type = ?
18
+ ORDER BY rs.created_at DESC
19
+ `).all(e,s);if(n.length===0)return{totalTasks:0,successRate:0,avgCostUsd:0,lastAttempt:null};let r=n.length,o=n.filter(f=>JSON.parse(f.score_json).taskSuccess===1).length/r,p=n.map(f=>f.cost_usd??0).reduce((f,E)=>f+E,0)/r,u=n[0]?.created_at??null;return{totalTasks:r,successRate:o,avgCostUsd:p,lastAttempt:u}}function he(e,s=50){let n=ee(e,s).map(o=>o.scores.contractCompliance).filter(o=>o!=null);return n.length===0?{emaScore:null,recentViolations:D(e,10),contractsCheckedRowCount:0}:{emaScore:[...n].reverse().reduce((o,l,p)=>p===0?l:A*l+(1-A)*o,0),recentViolations:D(e,10),contractsCheckedRowCount:n.length}}X();import{v4 as te}from"uuid";var se=F("audit"),O={taskSuccess:.25,planAccuracy:.2,permissionCompliance:.2,efficiency:.15,intentFulfillment:.2},M={taskSuccess:.3,planAccuracy:.25,permissionCompliance:.25,efficiency:.2},A=.3;function ne(e){return e.intentFulfillment===null||e.intentFulfillment===void 0?e.taskSuccess*M.taskSuccess+e.planAccuracy*M.planAccuracy+e.permissionCompliance*M.permissionCompliance+e.efficiency*M.efficiency:e.taskSuccess*O.taskSuccess+e.planAccuracy*O.planAccuracy+e.permissionCompliance*O.permissionCompliance+e.efficiency*O.efficiency+e.intentFulfillment*O.intentFulfillment}function re(e,s){let t=N(e),n=t?.status==="completed"?1:0,r=1,a=V(e);a?.deviationReport&&(r=a.deviationReport.overallAccuracy);let o=1,l=L(e,1e3),p=l.filter(_=>_.type==="tool_result"||_.type==="permission_denied").length,u=l.filter(_=>_.type==="permission_denied").length;p>0&&(o=1-u/p);let f=1;if(t?.tokenUsage){let _=t.tokenUsage.input+t.tokenUsage.output,c=s?U(s):1e4;_>c&&(f=Math.max(0,1-(_-c)/c))}let E=ne({taskSuccess:n,planAccuracy:r,permissionCompliance:o,efficiency:f,intentFulfillment:void 0}),T=t?.config?.outputContractCheckCount??0,x=null;if(T>0){let c=H(e).filter(i=>!(i.severity==="warning"&&i.layer==="C"));x=Math.max(0,Math.min(1,1-c.length/T))}return{taskSuccess:n,planAccuracy:r,permissionCompliance:o,efficiency:f,contractCompliance:x,contractsCheckedThisTask:T,weighted:E}}function He(e,s,t){let n=re(s,e),r=B(e),a=r!==void 0?A*n.weighted+(1-A)*r:n.weighted;return W({id:te(),roleId:e,taskId:s,scores:n,emaScore:a,createdAt:Date.now(),taskType:t}),se.debug({roleId:e,taskId:s,scores:{...n,weighted:n.weighted.toFixed(3)},ema:a.toFixed(3)},"Task score recorded"),a}k();function q(e){return{id:e.id,sourceSessionId:e.source_session_id??void 0,sourceMessageId:e.source_message_id??void 0,extractedAt:e.extracted_at,extractedByRoleId:e.extracted_by_role_id??void 0,content:e.content,summary:e.summary??void 0,status:e.status,tags:e.tags?JSON.parse(e.tags):void 0,evidenceQuote:e.evidence_quote??void 0,createdAt:e.created_at,updatedAt:e.updated_at}}var oe=`
20
+ INSERT INTO feature_requests
21
+ (id, source_session_id, source_message_id, extracted_at, extracted_by_role_id,
22
+ content, summary, status, tags, evidence_quote, created_at, updated_at)
23
+ VALUES
24
+ (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
25
+ `.trim(),ie=`
26
+ UPDATE feature_requests SET status = ?, updated_at = ? WHERE id = ?
27
+ `.trim();function J(e){d().prepare(oe).run(e.id,e.sourceSessionId??null,e.sourceMessageId??null,e.extractedAt,e.extractedByRoleId??null,e.content,e.summary??null,e.status,e.tags?JSON.stringify(e.tags):null,e.evidenceQuote??null,e.createdAt,e.updatedAt)}function Be(e,s=100,t=0){let n=d();return(e?n.prepare("SELECT * FROM feature_requests WHERE status = ? ORDER BY extracted_at DESC LIMIT ? OFFSET ?").all(e,s,t):n.prepare("SELECT * FROM feature_requests ORDER BY extracted_at DESC LIMIT ? OFFSET ?").all(s,t)).map(q)}function Ue(e){let t=d().prepare("SELECT * FROM feature_requests WHERE id = ?").get(e);return t?q(t):void 0}function qe(e,s){d().prepare(ie).run(s,Date.now(),e)}k();function v(e){return{id:e.id,dimensionType:e.dimension_type,dimensionValue:e.dimension_value,count:e.count,roleIds:JSON.parse(e.role_ids),sampleEvidenceIds:JSON.parse(e.sample_evidence_ids),status:e.status,firstSeen:e.first_seen,lastSeen:e.last_seen,createdAt:e.created_at,updatedAt:e.updated_at}}var ae=`
28
+ INSERT INTO mistake_patterns
29
+ (id, dimension_type, dimension_value, count, role_ids, sample_evidence_ids,
30
+ status, first_seen, last_seen, created_at, updated_at)
31
+ VALUES
32
+ (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
33
+ `.trim(),ce=`
34
+ UPDATE mistake_patterns SET status = ?, updated_at = ? WHERE id = ?
35
+ `.trim();function j(e){let s=d(),t=Date.now(),n=e.sampleEvidenceIds.slice(-10),r=s.prepare("SELECT * FROM mistake_patterns WHERE dimension_type = ? AND dimension_value = ?").get(e.dimensionType,e.dimensionValue);if(r){let o=JSON.parse(r.role_ids),l=Array.from(new Set([...o,...e.roleIds])),u=[...JSON.parse(r.sample_evidence_ids),...n].slice(-10);s.prepare(`
36
+ UPDATE mistake_patterns SET
37
+ count = count + 1,
38
+ role_ids = ?,
39
+ sample_evidence_ids = ?,
40
+ last_seen = ?,
41
+ updated_at = ?
42
+ WHERE dimension_type = ? AND dimension_value = ?
43
+ `).run(JSON.stringify(l),JSON.stringify(u),e.lastSeen,t,e.dimensionType,e.dimensionValue)}else s.prepare(ae).run(`mp-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,e.dimensionType,e.dimensionValue,1,JSON.stringify(e.roleIds),JSON.stringify(n),"new",e.firstSeen,e.lastSeen,t,t);let a=s.prepare("SELECT * FROM mistake_patterns WHERE dimension_type = ? AND dimension_value = ?").get(e.dimensionType,e.dimensionValue);return v(a)}function Ye(e,s=100,t=0){let n=d();return(e?n.prepare("SELECT * FROM mistake_patterns WHERE status = ? ORDER BY last_seen DESC LIMIT ? OFFSET ?").all(e,s,t):n.prepare("SELECT * FROM mistake_patterns ORDER BY last_seen DESC LIMIT ? OFFSET ?").all(s,t)).map(v)}function Ke(e){let t=d().prepare("SELECT * FROM mistake_patterns WHERE id = ?").get(e);return t?v(t):void 0}function Qe(e,s){d().prepare(ce).run(s,Date.now(),e)}k();import{randomUUID as Y}from"crypto";function Xe(e,s){if(s.added.length===0&&s.modified.length===0&&s.deleted.length===0)return;let t=d(),n=t.prepare("INSERT INTO task_files (id, task_id, path, op, mtime_ns, size_bytes, inode, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");n.safeIntegers(!0);let r=Date.now();t.transaction(()=>{let a=(o,l)=>{n.run(Y(),e,o.path,l,o.mtime_ns,o.size,o.inode,r)};for(let o of s.added)a(o,"added");for(let o of s.modified)a(o,"modified");for(let o of s.deleted)n.run(Y(),e,o,"deleted",null,null,null,r)})()}function Ze(e){let t=d().prepare("SELECT * FROM task_files WHERE task_id = ? ORDER BY created_at, path");return t.safeIntegers(!0),t.all(e)}import{createSdkMcpServer as de,tool as le}from"@anthropic-ai/claude-agent-sdk";import{z as S}from"zod";import{v4 as ue}from"uuid";var K={content:S.string().min(1).max(5e3),summary:S.string().max(500).optional(),tags:S.array(S.string().max(50)).max(10).optional(),evidenceQuote:S.string().max(1e3).optional(),sourceSessionId:S.string().optional(),sourceMessageId:S.string().optional()};function me(e){return le("record_feature_request","Record a feature request extracted from chat sessions. Call this once per distinct feature request found in the provided chat data. Do not fabricate \u2014 only record requests that appear verbatim or clearly in the chat content.",K,async s=>{let t=S.object(K).safeParse(s);if(!t.success)return{content:[{type:"text",text:JSON.stringify({ok:!1,error:t.error.message})}]};let n=t.data,r=Date.now(),a=ue(),o={id:a,content:n.content,summary:n.summary,status:"new",tags:n.tags??[],evidenceQuote:n.evidenceQuote,sourceSessionId:n.sourceSessionId,sourceMessageId:n.sourceMessageId,extractedByRoleId:e,extractedAt:r,createdAt:r,updatedAt:r};try{J(o)}catch{return{content:[{type:"text",text:JSON.stringify({ok:!1,error:"failed to write feature request"})}]}}return{content:[{type:"text",text:JSON.stringify({success:!0,featureRequestId:a,summary:n.summary??n.content.slice(0,80)})}]}})}function Q(e){return de({name:"mining-tools",version:"1.0.0",tools:[me(e)]})}import{createSdkMcpServer as fe,tool as _e}from"@anthropic-ai/claude-agent-sdk";import{z as I}from"zod";k();var C=.5,w=.3;function pe(e,s,t,n){let r=e<t,a=s<n;return r&&a?"both":r?"low_ema":"low_task"}function z(e={}){let{windowDays:s=14,dimensions:t=["event_type","score_degradation","tool_call_pattern"],minOccurrences:n=3,minRoles:r=2,scoreThresholdEma:a=C,scoreThresholdTask:o=w}=e,l=d(),p=Date.now()-s*864e5,u=new Map;if(t.includes("event_type")){let c=l.prepare(`
44
+ SELECT id, role_id, source, timestamp
45
+ FROM evolution_audit
46
+ WHERE timestamp >= ? AND source IN ('audit','monitor','admin','manual')
47
+ ORDER BY timestamp ASC
48
+ `).all(p);for(let i of c){let g=i.source,R=`event_type|${g}`;u.has(R)||u.set(R,{dimensionType:"event_type",dimensionValue:g,count:0,roleIds:new Set,evidenceIds:[],firstSeen:1/0,lastSeen:0});let m=u.get(R);m.count++,i.role_id&&m.roleIds.add(i.role_id),m.evidenceIds.push({source:"evolution_audit",id:i.id}),i.timestamp<m.firstSeen&&(m.firstSeen=i.timestamp),i.timestamp>m.lastSeen&&(m.lastSeen=i.timestamp)}}if(t.includes("score_degradation")){let c=l.prepare(`
49
+ SELECT id, role_id, score_json, ema_score, created_at
50
+ FROM role_scores
51
+ WHERE created_at >= ?
52
+ ORDER BY created_at ASC
53
+ `).all(p);for(let i of c){let g=i.ema_score;try{let b=JSON.parse(i.score_json);typeof b.weighted=="number"?g=b.weighted:typeof b.task=="number"?g=b.task:typeof b.score=="number"&&(g=b.score)}catch{}let R=pe(i.ema_score,g,a,o),m=`score_degradation|${R}`;u.has(m)||u.set(m,{dimensionType:"score_degradation",dimensionValue:R,count:0,roleIds:new Set,evidenceIds:[],firstSeen:1/0,lastSeen:0});let y=u.get(m);y.count++,y.roleIds.add(i.role_id),y.evidenceIds.push({source:"role_scores",id:i.id}),i.created_at<y.firstSeen&&(y.firstSeen=i.created_at),i.created_at>y.lastSeen&&(y.lastSeen=i.created_at)}}if(t.includes("tool_call_pattern")){let c=l.prepare(`
54
+ SELECT dl.id, dl.task_id, dl.error, dl.created_at, t.role_id
55
+ FROM delivery_log dl
56
+ LEFT JOIN tasks t ON t.id = dl.task_id
57
+ WHERE dl.created_at >= ?
58
+ AND dl.message_type = 'sandbox_violation'
59
+ AND dl.source = 'audit'
60
+ ORDER BY dl.created_at ASC
61
+ `).all(p);for(let i of c){let g=(i.error??"").slice(0,60),R=`tool_call_pattern|${g}`;u.has(R)||u.set(R,{dimensionType:"tool_call_pattern",dimensionValue:g,count:0,roleIds:new Set,evidenceIds:[],firstSeen:1/0,lastSeen:0});let m=u.get(R);m.count++,i.role_id&&m.roleIds.add(i.role_id),m.evidenceIds.push({source:"delivery_log",id:i.id}),i.created_at<m.firstSeen&&(m.firstSeen=i.created_at),i.created_at>m.lastSeen&&(m.lastSeen=i.created_at)}}let f={};for(let c of u.keys()){let[i]=c.split("|");f[i]=(f[i]??0)+1}let E=Array.from(u.values()).filter(c=>c.count>=n&&c.roleIds.size>=r),T=0,x=l.transaction(()=>{for(let c of E)j({dimensionType:c.dimensionType,dimensionValue:c.dimensionValue,roleIds:Array.from(c.roleIds),sampleEvidenceIds:c.evidenceIds.slice(-10),firstSeen:c.firstSeen===1/0?Date.now():c.firstSeen,lastSeen:c.lastSeen}),T++});try{x()}catch(c){throw new Error(`aggregateMistakes: transaction failed: ${c}`)}let _=0;for(let c of u.values())_+=c.count;return{patternsUpserted:T,totalEventsScanned:_,dimensionCounts:f}}var $={windowDays:I.number().int().min(1).max(365).optional(),dimensions:I.enum(["event_type","score_degradation","tool_call_pattern"]).array().min(1).max(3).optional(),minOccurrences:I.number().int().min(1).max(100).optional(),minRoles:I.number().int().min(1).max(100).optional()};function ge(){return _e("aggregate_mistakes","Aggregate cross-role failure signals from the last N days into mistake patterns. Returns counts + dimensions; patterns are persisted to mistake_patterns for UI review. Notify-only: no role/permission/CAG mutation.",$,async e=>{let s=I.object($).safeParse(e);if(!s.success)return{content:[{type:"text",text:JSON.stringify({ok:!1,error:s.error.message})}]};let t=s.data,n={windowDays:t.windowDays??14,dimensions:t.dimensions??["event_type","score_degradation","tool_call_pattern"],minOccurrences:t.minOccurrences??3,minRoles:t.minRoles??2,scoreThresholdEma:C,scoreThresholdTask:w};try{let r=z(n);return{content:[{type:"text",text:JSON.stringify({ok:!0,...r})}]}}catch(r){return{content:[{type:"text",text:JSON.stringify({ok:!1,error:String(r)})}]}}})}var Re="audit-tools";function G(){return fe({name:Re,version:"1.0.0",tools:[ge()]})}var Se=new Set(["mcp__execution-tools__","mcp__mining-tools__","mcp__audit-tools__"]);function gt(e){if(!e)return!1;for(let s of Se)if(e.startsWith(s))return!0;return!1}function Rt(e){return e.presetId==="feature-miner"?{"mining-tools":Q(e.id)}:e.presetId==="mistake-digester"?{"audit-tools":G()}:{}}function yt(e,s){let t=e.toLowerCase(),n=e;return/\b401\b/.test(t)||/unauthorized/i.test(t)||/invalid.*(?:api.?)?key/i.test(t)||/auth.*fail/i.test(t)||/invalid.*token/i.test(t)||s?.httpStatus===401?{category:"AUTH",originalError:n,retryable:!1,userAction:"Update the API key or credentials in the Role configuration",sameRoleRetry:!1,differentRoleHelp:!1}:/\b429\b/.test(t)||/rate.?limit/i.test(t)||/too many requests/i.test(t)||/quota.?exhaust/i.test(t)||/rate.?limit.?exceed/i.test(t)||/too.?many.?calls/i.test(t)?{category:"RATE_LIMIT",originalError:n,retryable:!0,userAction:"Wait before retrying, or increase the rate limit quota",sameRoleRetry:!0,differentRoleHelp:!1}:/econnrefused/i.test(t)||/enotfound/i.test(t)||/dns/i.test(t)||/connection.?refused/i.test(t)||/connection.?reset/i.test(t)||/connection.?timed? ?out/i.test(t)||/fetch.?failed/i.test(t)||/network.?error/i.test(t)||/socket.?hang.?up/i.test(t)||/etimedout/i.test(t)?{category:"NETWORK",originalError:n,retryable:!0,userAction:"Check network connectivity and that the target service is reachable",sameRoleRetry:!0,differentRoleHelp:!1}:/prompt is too long/i.test(t)||/context.*exceed/i.test(t)||/context.*window/i.test(t)||/too many tokens/i.test(t)||/max.?tokens/i.test(t)||/token.?limit/i.test(t)?{category:"CONTEXT_OVERFLOW",originalError:n,retryable:!1,userAction:"Shorten the task prompt or simplify the request",sameRoleRetry:!1,differentRoleHelp:!1}:s?.sandboxViolation||/sandbox/i.test(t)||/not allowed.*sandbox/i.test(t)||/sandbox.*deny/i.test(t)||/operation.*denied.*sandbox/i.test(t)?{category:"SANDBOX_VIOLATION",originalError:n,retryable:!1,userAction:"Grant filesystem access in Role settings, or run without sandbox",sameRoleRetry:!1,differentRoleHelp:!0}:/tool.*not found/i.test(t)||/command not found/i.test(t)||/enoent/i.test(t)||/no such file/i.test(t)||/mcp.*error.*tool/i.test(t)||/tool.*blocked/i.test(t)||s?.toolName&&/not.*found/.test(t)&&/tool/.test(t)?{category:"TOOL_UNAVAILABLE",originalError:n,retryable:!1,userAction:"Install the required tool or plugin, or add it to the Role's allowed tools",sameRoleRetry:!1,differentRoleHelp:!0}:/timeout/i.test(t)||/timed out/i.test(t)||/exceeded.*seconds/i.test(t)?{category:"TIMEOUT",originalError:n,retryable:!0,userAction:"Increase the task timeout or simplify the task",sameRoleRetry:!0,differentRoleHelp:!1}:/invalid.*url/i.test(t)||/bad request/i.test(t)||/400\b/.test(t)||/wrong.*method/i.test(t)||/invalid.*param/i.test(t)||/missing.*param/i.test(t)?{category:"MALFORMED_REQUEST",originalError:n,retryable:!1,userAction:"Fix the task parameters and retry",sameRoleRetry:!1,differentRoleHelp:!1}:/internal.*error/i.test(t)||/unexpected.*error/i.test(t)||/500\b/.test(t)||/503\b/.test(t)?{category:"INTERNAL_ERROR",originalError:n,retryable:!0,userAction:"The service had an internal error. Retry may succeed.",sameRoleRetry:!0,differentRoleHelp:!1}:{category:"UNKNOWN",originalError:n,retryable:!1,userAction:void 0,sameRoleRetry:!1,differentRoleHelp:!1}}export{Ee as a,Te as b,A as c,ne as d,He as e,ee as f,B as g,Ie as h,xe as i,Me as j,he as k,J as l,Be as m,Ue as n,qe as o,Ye as p,Ke as q,Qe as r,Se as s,gt as t,Rt as u,yt as v,Xe as w,Ze as x};
@@ -0,0 +1 @@
1
+ var b=["defaults.model","defaults.effort","defaults.maxTurns","defaults.maxBudgetUsd","defaults.timeout","logging.level","roles.evolution.triggerEvery","roles.evolution.reflectionThreshold","identity.ownerViewerKey","chat.sessionTimeoutMinutes","chat.maxSessionTurns","chat.autoTitle","chat.archiveExtractMemory","chat.artifactThresholdChars","chat.commitmentDetection.locales","chat.commitmentDetection.blockedText.zh","chat.commitmentDetection.blockedText.en","chat.commitmentDetection.unsupportedSuccessText.zh","chat.commitmentDetection.unsupportedSuccessText.en","chat.commitmentDetection.unsupportedFailureText.zh","chat.commitmentDetection.unsupportedFailureText.en","chat.commitmentDetection.unsupportedMutationText.zh","chat.commitmentDetection.unsupportedMutationText.en","memory.midTaskInjection.enabled","memory.midTaskInjection.toolCallThreshold","memory.midTaskInjection.cooldownMs","memory.midTaskInjection.topK","memory.midTaskInjection.maxTokens","memory.retrievalWeights.cosSim","memory.retrievalWeights.recency","memory.retrievalWeights.tokenCost","memory.globalBudgetTokens","memory.retrievalDecayDays","memory.attributionThresholds.high","memory.attributionThresholds.low","memory.antiFlipMinUses","memory.antiFlipSuccessEmaThreshold","memory.reflection.maxBudgetUsd","memory.scope.emaAlpha","memory.scope.humanFeedbackWeight","memory.scope.reflectionPoolMax","memory.scope.decayBase","memory.scope.archiveThreshold","memory.embeddingModel","server.timezone","anthropic.apiKey","anthropic.baseUrl","anthropic.model","anthropic.defaultOpusModel","anthropic.defaultSonnetModel","anthropic.defaultHaikuModel","anthropic.smallFastModel","audit.intentEval.maxBudgetUsd","audit.intentEval.timeoutMs","evaluation.model","defaults.approvalTimeout","defaults.deniedReadPaths","defaults.approvalRequired","watchdog.rules.artifactCleanup.enabled","watchdog.rules.artifactCleanup.ttlDays","watchdog.rules.artifactCleanup.orphanGcMinAgeHours","watchdog.rules.staleTemplateExecutions.enabled","watchdog.rules.staleTemplateExecutions.action","watchdog.rules.staleTemplateExecutions.maxOrphanMinutes","emailGateway.enabled","emailGateway.address","emailGateway.displayName","emailGateway.imap.host","emailGateway.imap.port","emailGateway.imap.secure","emailGateway.imap.auth.user","emailGateway.imap.auth.pass","emailGateway.imap.mailbox","emailGateway.smtp.host","emailGateway.smtp.port","emailGateway.smtp.secure","emailGateway.smtp.auth.user","emailGateway.smtp.auth.pass","emailGateway.smtp.from","emailGateway.subjectPrefix","storage.localProfile"],w=["server.port","server.host","server.apiKey"],T={"anthropic.apiKey":"ANTHROPIC_API_KEY","anthropic.baseUrl":"ANTHROPIC_BASE_URL","anthropic.model":"ANTHROPIC_MODEL","anthropic.defaultOpusModel":"ANTHROPIC_DEFAULT_OPUS_MODEL","anthropic.defaultSonnetModel":"ANTHROPIC_DEFAULT_SONNET_MODEL","anthropic.defaultHaikuModel":"ANTHROPIC_DEFAULT_HAIKU_MODEL","anthropic.smallFastModel":"ANTHROPIC_SMALL_FAST_MODEL"},m=null,E=["ADAM_EMAIL_"],R={"audit.intentEval.maxBudgetUsd":e=>d(e)?null:"must be a positive number.","audit.intentEval.timeoutMs":e=>s(e)?null:"must be a positive integer in milliseconds.","memory.reflection.maxBudgetUsd":e=>d(e)?null:"must be a positive number (USD).","memory.scope.emaAlpha":e=>typeof e=="number"&&e>=0&&e<=1?null:"must be a number between 0 and 1.","memory.scope.humanFeedbackWeight":e=>typeof e=="number"&&e>=1?null:"must be a number >= 1.","memory.scope.decayBase":e=>typeof e=="number"&&e>0&&e<1?null:"must be a number between 0 and 1 (exclusive).","memory.scope.archiveThreshold":e=>typeof e=="number"&&e>=0&&e<=1?null:"must be a number between 0 and 1.","memory.scope.reflectionPoolMax":e=>s(e)?null:"must be a positive integer.","memory.antiFlipSuccessEmaThreshold":e=>typeof e=="number"&&e>=0&&e<=1?null:"must be a number between 0 and 1.","chat.artifactThresholdChars":e=>s(e)?null:"must be a positive integer (chars).","storage.localProfile":e=>typeof e=="string"&&/^[a-zA-Z0-9_-]+$/.test(e)?null:"must match /^[a-zA-Z0-9_-]+$/ (no path separators, no special chars).","chat.commitmentDetection.locales":e=>Array.isArray(e)&&e.length>0&&e.every(n=>n==="zh"||n==="en")?null:"must be a non-empty array of 'zh' | 'en'.","chat.commitmentDetection.blockedText.zh":e=>typeof e=="string"&&e.length>0?null:"must be a non-empty string.","chat.commitmentDetection.blockedText.en":e=>typeof e=="string"&&e.length>0?null:"must be a non-empty string.","chat.commitmentDetection.unsupportedSuccessText.zh":e=>typeof e=="string"&&e.length>0?null:"must be a non-empty string.","chat.commitmentDetection.unsupportedSuccessText.en":e=>typeof e=="string"&&e.length>0?null:"must be a non-empty string.","chat.commitmentDetection.unsupportedFailureText.zh":e=>typeof e=="string"&&e.length>0?null:"must be a non-empty string.","chat.commitmentDetection.unsupportedFailureText.en":e=>typeof e=="string"&&e.length>0?null:"must be a non-empty string.","chat.commitmentDetection.unsupportedMutationText.zh":e=>typeof e=="string"&&e.length>0?null:"must be a non-empty string.","chat.commitmentDetection.unsupportedMutationText.en":e=>typeof e=="string"&&e.length>0?null:"must be a non-empty string.","emailGateway.address":e=>h(e,{allowEmpty:!1})?null:"must be a single valid email address.","emailGateway.imap.host":e=>g(e)?null:"must be a non-empty host without protocol.","emailGateway.imap.port":e=>s(e)?null:"must be a positive integer port.","emailGateway.imap.mailbox":e=>v(e)?null:"must be a non-empty mailbox without NUL bytes.","emailGateway.smtp.host":e=>g(e)?null:"must be a non-empty host without protocol.","emailGateway.smtp.port":e=>s(e)?null:"must be a positive integer port.","emailGateway.smtp.from":e=>h(e,{allowEmpty:!0})?null:"must be empty or a single valid email address.","identity.ownerViewerKey":e=>typeof e=="string"&&e.trim().length>0?null:"must be a non-empty string."};function S(e){m=JSON.parse(JSON.stringify(e))}function a(){if(!m)throw new Error("Runtime config not initialized. Call initRuntimeConfig first.");return m}function C(e){let n=a(),o=e();for(let[t,i]of Object.entries(o))y(t,i)||f(n,t,i)}function k(){let e=a(),n={};for(let[o,t]of Object.entries(T)){let i=A(e,o);i&&typeof i=="string"&&i.length>0?n[t]=i:process.env[t]&&(n[t]=process.env[t])}return n}function c(e){let n={};for(let[o,t]of Object.entries(e))o.startsWith("ANTHROPIC_")||(n[o]=t);return n}var p=/key|token|secret|password|credential/i;function O(e){let n={};for(let[o,t]of Object.entries(e))n[o]=p.test(o)&&t.length>4?t.slice(0,4)+"****":p.test(o)&&t.length>0?"****":t;return n}function P(e){let o=a().defaults?.env??{};return M({...process.env,...o,...k(),...c(e?.roleEnvVars??{}),...c(e?.taskEnv??{}),DISABLE_TELEMETRY:"1",DISABLE_ERROR_REPORTING:"1",CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC:"1",DISABLE_AUTOUPDATER:"1"})}function I(e,n){let o=a(),t=[],i=[];for(let[r,l]of Object.entries(e)){if(!x(r)){_(r)?i.push(`"${r}" requires restart. Cannot modify at runtime.`):i.push(`"${r}" is not a recognized config path.`);continue}let u=y(r,l);if(u){i.push(`"${r}" ${u}`);continue}f(o,r,l)&&(t.push(r),n?.(r,l))}return{success:i.length===0,updated:t,errors:i}}function f(e,n,o){let t=n.split("."),i=e;for(let r=0;r<t.length-1;r++)if(i&&typeof i=="object")i=i[t[r]];else return!1;return i&&typeof i=="object"?(i[t[t.length-1]]=o,!0):!1}function A(e,n){let o=n.split("."),t=e;for(let i of o)if(t&&typeof t=="object")t=t[i];else return;return t}function x(e){return b.includes(e)}function _(e){return w.includes(e)}function y(e,n){return R[e]?.(n)??null}function d(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function s(e){return typeof e=="number"&&Number.isInteger(e)&&e>0}function g(e){return typeof e=="string"&&e.trim().length>0&&!/^[a-z][a-z0-9+.-]*:\/\//i.test(e.trim())}function v(e){return typeof e=="string"&&e.trim().length>0&&!e.includes("\0")}function h(e,n){if(typeof e!="string")return!1;let o=e.trim();return o?o.includes(",")||/[<>]/.test(o)?!1:/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(o):n.allowEmpty}function M(e){let n={};for(let[o,t]of Object.entries(e))E.some(i=>o.startsWith(i))||(n[o]=t);return n}export{b as a,w as b,S as c,a as d,C as e,k as f,c as g,O as h,P as i,I as j,A as k,x as l,_ as m};
@@ -1,4 +1,4 @@
1
- import{g as y}from"./chunk-32LOJEHE.js";import{c as m}from"./chunk-VVQ532U2.js";import{c as h,h as w}from"./chunk-BLCNUT53.js";w();var v="",I=Buffer.alloc(0);function O(o){v=o,I=Buffer.from(o)}function g(){return v}function C(){return I}var p=h("channels"),u=new Map,x=3e5,$=new Set(["telegram"]);function T(o){let e=o.trim().toLowerCase().match(/^(yes|y|是|允许|no|n|否|拒绝)\s+(\S+)$/);if(!e)return null;let[,c,l]=e,r=["yes","y","\u662F","\u5141\u8BB8"].includes(c);return{requestId:l,decision:r?"allow":"deny"}}function P(o){let n=m(o);return n?$.has(n.platform):!1}var b={low:"\u{1F7E2}",medium:"\u{1F7E1}",high:"\u{1F534}"},k={low:"\u4F4E",medium:"\u4E2D",high:"\u9AD8"};function _(o){let n=["\u{1F512} \u9700\u8981\u5BA1\u6279",""];for(let e of o.steps){if(e.description.startsWith("Execute task without OS sandbox"))n.push("\u26A0\uFE0F \u65E0\u6C99\u7BB1\u6267\u884C \u2014 \u6587\u4EF6\u7CFB\u7EDF\u9694\u79BB\u672A\u542F\u7528");else{let r=e.description.indexOf(": "),s=r>0?e.description.slice(0,r):"Operation";if(n.push(`\u64CD\u4F5C: ${s}`),s==="Bash"&&r>0)try{let t=JSON.parse(e.description.slice(r+2));if(t.command){let i=String(t.command).trim();n.push(`\u547D\u4EE4: ${i.length>120?i.slice(0,117)+"...":i}`)}}catch{let t=e.description.slice(r+2,r+122);n.push(`\u8BE6\u60C5: ${t}${e.description.length>r+122?"...":""}`)}else if(r>0){let t=e.description.slice(r+2,r+122);n.push(`\u8BE6\u60C5: ${t}${e.description.length>r+122?"...":""}`)}}let c=b[e.riskLevel]??"\u{1F7E1}",l=k[e.riskLevel]??e.riskLevel;n.push(`\u98CE\u9669: ${c} ${l}`),n.push("")}return n.join(`
1
+ import{g as y}from"./chunk-UAF4KNXE.js";import{c as m}from"./chunk-D5PAJ3CB.js";import{c as h,h as w}from"./chunk-EZLBMUQD.js";w();var v="",I=Buffer.alloc(0);function O(o){v=o,I=Buffer.from(o)}function g(){return v}function C(){return I}var p=h("channels"),u=new Map,x=3e5,$=new Set(["telegram"]);function T(o){let e=o.trim().toLowerCase().match(/^(yes|y|是|允许|no|n|否|拒绝)\s+(\S+)$/);if(!e)return null;let[,c,l]=e,r=["yes","y","\u662F","\u5141\u8BB8"].includes(c);return{requestId:l,decision:r?"allow":"deny"}}function P(o){let n=m(o);return n?$.has(n.platform):!1}var b={low:"\u{1F7E2}",medium:"\u{1F7E1}",high:"\u{1F534}"},k={low:"\u4F4E",medium:"\u4E2D",high:"\u9AD8"};function _(o){let n=["\u{1F512} \u9700\u8981\u5BA1\u6279",""];for(let e of o.steps){if(e.description.startsWith("Execute task without OS sandbox"))n.push("\u26A0\uFE0F \u65E0\u6C99\u7BB1\u6267\u884C \u2014 \u6587\u4EF6\u7CFB\u7EDF\u9694\u79BB\u672A\u542F\u7528");else{let r=e.description.indexOf(": "),s=r>0?e.description.slice(0,r):"Operation";if(n.push(`\u64CD\u4F5C: ${s}`),s==="Bash"&&r>0)try{let t=JSON.parse(e.description.slice(r+2));if(t.command){let i=String(t.command).trim();n.push(`\u547D\u4EE4: ${i.length>120?i.slice(0,117)+"...":i}`)}}catch{let t=e.description.slice(r+2,r+122);n.push(`\u8BE6\u60C5: ${t}${e.description.length>r+122?"...":""}`)}else if(r>0){let t=e.description.slice(r+2,r+122);n.push(`\u8BE6\u60C5: ${t}${e.description.length>r+122?"...":""}`)}}let c=b[e.riskLevel]??"\u{1F7E1}",l=k[e.riskLevel]??e.riskLevel;n.push(`\u98CE\u9669: ${c} ${l}`),n.push("")}return n.join(`
2
2
  `).trimEnd()}async function q(o,n,e,c,l,r=x){let s=e,t=s.slice(0,8);u.set(t,{planId:e,taskId:c,channelId:o,chatId:n,requestId:s,timestamp:Date.now(),timeoutMs:r});let i=y(),d=P(o);if(d){let a=`${l}
3
3
 
4
4
  `;await i.send({channelId:o,chatId:n,content:a,messageType:"approval",replyMarkup:{inlineKeyboard:[[{text:"\u2705 Allow",callbackData:`yes ${t}`},{text:"\u274C Deny",callbackData:`no ${t}`}]]}})}else{let a=[l,"",`Reply 'yes ${t}' or 'no ${t}'`].join(`
@@ -1,10 +1,10 @@
1
- import{a as m,g as L}from"./chunk-OGY42NUN.js";import{n as a,p as x}from"./chunk-QL2ZOLMC.js";import{b as u,h as _}from"./chunk-WBAPIPST.js";import{c as v,e as N}from"./chunk-245WE5AF.js";import{c as l}from"./chunk-FCV2DPZQ.js";var f,p,T=l(()=>{"use strict";f={stylePreferences:[],avoidedActions:[],pinnedParameters:[]},p=class extends Error{constructor(i,r,n,s){super(`Role '${r}' has ${n} active task(s) (${s.join(", ")}) and cannot be deleted without the force flag.`);this.roleId=i;this.roleName=r;this.activeTaskCount=n;this.taskStatuses=s;this.name="RoleHasActiveTasksError"}roleId;roleName;activeTaskCount;taskStatuses;code="ROLE_HAS_ACTIVE_TASKS"}});import*as R from"os";import*as S from"path";function g(e){return e.startsWith("~/")||e==="~"?S.join(R.homedir(),e.slice(1)):e}var C=l(()=>{"use strict";_()});function E(e){return A.includes(e)}function I(e){return k[e]}function B(){return A.map(e=>k[e])}function ee(e,t=e!=="none"){return B().map(i=>J(i,e,t))}function J(e,t,i=t!=="none"){return process.platform==="darwin"?e.status==="runtime-enforced"&&(t!=="sandbox-exec"||!i)?{...e,availability:"runtime-unavailable",editable:!1,effectiveDisabledReason:"Current runtime has no macOS sandbox backend; Adam cannot enforce this capability on Roles."}:e.status==="runtime-enforced"?{...e,availability:"editable",editable:!0}:{...e,availability:e.status,editable:!1,effectiveDisabledReason:e.disabledReason}:{...e,availability:"platform-unsupported",editable:!1,effectiveDisabledReason:"macOS only"}}function te(e){if(!e?.length)return;for(let i of e)if(!E(i.id))throw new Error(`Unknown OS capability: ${i.id}`);let t=c(e);if(t?.length){for(let i of t){let r=I(i.id);if(r.status!=="runtime-enforced")throw new Error(`OS capability '${r.label}' is not editable in Role settings`);if(r.supportsTargets){if(!i.targets?.length)throw new Error(`OS capability '${r.label}' requires at least one target bundle id`);for(let n of i.targets)if(!F(n))throw new Error(`Invalid automation target bundle id: ${n}`)}else if(i.targets?.length)throw new Error(`OS capability '${r.label}' does not accept targets`)}return t}}function c(e){if(!e||e.length===0)return;let t=new Set,i=[];for(let r of e){if(!E(r.id))throw new Error(`Unknown OS capability: ${r.id}`);if(t.has(r.id))continue;t.add(r.id);let n=I(r.id),s={id:r.id};n.supportsTargets&&r.targets?.length&&(s.targets=[...new Set(r.targets.map(o=>o.trim()).filter(Boolean))]),i.push(s)}return i.length>0?i.sort((r,n)=>r.id.localeCompare(n.id)):void 0}function F(e){return U.test(e)}var A,k,U,w=l(()=>{"use strict";A=["location-services","calendars","contacts","files-and-folders","full-disk-access","homekit","media-and-apple-music","passkeys-access-for-web-browsers","photos","reminders","accessibility","app-management","automation","bluetooth","camera","developer-tools","focus","input-monitoring","local-network","microphone","motion-and-fitness","remote-desktop","screen-and-system-audio-recording","speech-recognition"],k={"location-services":{id:"location-services",label:"Location Services",description:"Access device location and region context.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},calendars:{id:"calendars",label:"Calendars",description:"Access Calendar data via macOS privacy controls.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},contacts:{id:"contacts",label:"Contacts",description:"Access Contacts data via macOS privacy controls.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},"files-and-folders":{id:"files-and-folders",label:"Files & Folders",description:"Host-level file access categories managed outside Role sandboxing.",platform:"darwin",status:"host-only",disabledReason:"Role file boundaries are already controlled by visiblePaths and deniedReadPaths."},"full-disk-access":{id:"full-disk-access",label:"Full Disk Access",description:"Host-level macOS grant for protected storage locations.",platform:"darwin",status:"host-only",disabledReason:"This is a host app permission, not a Role-level control."},homekit:{id:"homekit",label:"HomeKit",description:"Access HomeKit devices and home automation data.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},"media-and-apple-music":{id:"media-and-apple-music",label:"Media & Apple Music",description:"Access Apple Music and media library data.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},"passkeys-access-for-web-browsers":{id:"passkeys-access-for-web-browsers",label:"Passkeys Access for Web Browsers",description:"Access passkeys for browser-integrated authentication.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},photos:{id:"photos",label:"Photos",description:"Access the Photos library via macOS privacy controls.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},reminders:{id:"reminders",label:"Reminders",description:"Access Reminder data via macOS privacy controls.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},accessibility:{id:"accessibility",label:"Accessibility",description:"Control desktop UI and accessibility automation surfaces.",platform:"darwin",status:"runtime-enforced"},"app-management":{id:"app-management",label:"App Management",description:"Manage or inspect other installed applications.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},automation:{id:"automation",label:"Automation",description:"Launch and control other apps via Apple Events.",platform:"darwin",status:"runtime-enforced",supportsTargets:!0},bluetooth:{id:"bluetooth",label:"Bluetooth",description:"Access nearby Bluetooth devices.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},camera:{id:"camera",label:"Camera",description:"Capture camera input.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},"developer-tools":{id:"developer-tools",label:"Developer Tools",description:"Use system developer tooling privileges.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},focus:{id:"focus",label:"Focus",description:"Access Focus state and related automation.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},"input-monitoring":{id:"input-monitoring",label:"Input Monitoring",description:"Observe keyboard and input device activity.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},"local-network":{id:"local-network",label:"Local Network",description:"Discover and communicate with devices on the local network.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},microphone:{id:"microphone",label:"Microphone",description:"Capture microphone input.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},"motion-and-fitness":{id:"motion-and-fitness",label:"Motion & Fitness",description:"Access motion and fitness sensor data.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},"remote-desktop":{id:"remote-desktop",label:"Remote Desktop",description:"Control or observe remote desktop sessions.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},"screen-and-system-audio-recording":{id:"screen-and-system-audio-recording",label:"Screen & System Audio Recording",description:"Capture the screen and system audio.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},"speech-recognition":{id:"speech-recognition",label:"Speech Recognition",description:"Use system speech recognition services.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."}},U=/^[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)+$/});function b(e){return{id:e.id,parentId:e.parent_id??void 0,status:e.status,prompt:e.prompt,originalPrompt:e.original_prompt??void 0,config:JSON.parse(e.config),result:e.result??void 0,error:e.error??void 0,sdkSessionId:e.sdk_session_id??void 0,templateId:e.template_id??void 0,roleId:e.role_id??void 0,stepId:e.step_id??void 0,sourceSessionId:e.source_session_id??void 0,deliverTo:e.deliver_to?JSON.parse(e.deliver_to):void 0,reportTo:e.report_to?JSON.parse(e.report_to):void 0,createdAt:e.created_at,startedAt:e.started_at??void 0,completedAt:e.completed_at??void 0,costUsd:e.cost_usd??void 0,tokenUsage:e.token_usage?JSON.parse(e.token_usage):void 0,numTurns:e.num_turns??void 0,totalDurationMs:e.total_duration_ms??void 0,blockReason:e.block_reason_json?JSON.parse(e.block_reason_json):void 0,traceId:e.trace_id??void 0,errorCategory:e.error_category??void 0,retryCount:e.retry_count}}function se(e){a().prepare(`
1
+ import{a as m,g as L}from"./chunk-73GP6K5S.js";import{n as a,p as x}from"./chunk-VARIYH6K.js";import{b as u,h as _}from"./chunk-VO24C673.js";import{c as v,e as N}from"./chunk-5M6IGE5G.js";import{b as l}from"./chunk-5PELJRUQ.js";var f,p,T=l(()=>{"use strict";f={stylePreferences:[],avoidedActions:[],pinnedParameters:[]},p=class extends Error{constructor(n,r,i,s){super(`Role '${r}' has ${i} active task(s) (${s.join(", ")}) and cannot be deleted without the force flag.`);this.roleId=n;this.roleName=r;this.activeTaskCount=i;this.taskStatuses=s;this.name="RoleHasActiveTasksError"}roleId;roleName;activeTaskCount;taskStatuses;code="ROLE_HAS_ACTIVE_TASKS"}});import*as R from"os";import*as S from"path";function g(e){return e.startsWith("~/")||e==="~"?S.join(R.homedir(),e.slice(1)):e}var C=l(()=>{"use strict";_()});function E(e){return A.includes(e)}function I(e){return k[e]}function B(){return A.map(e=>k[e])}function te(e,t=e!=="none"){return B().map(n=>J(n,e,t))}function J(e,t,n=t!=="none"){return process.platform==="darwin"?e.status==="runtime-enforced"&&(t!=="sandbox-exec"||!n)?{...e,availability:"runtime-unavailable",editable:!1,effectiveDisabledReason:"Current runtime has no macOS sandbox backend; Adam cannot enforce this capability on Roles."}:e.status==="runtime-enforced"?{...e,availability:"editable",editable:!0}:{...e,availability:e.status,editable:!1,effectiveDisabledReason:e.disabledReason}:{...e,availability:"platform-unsupported",editable:!1,effectiveDisabledReason:"macOS only"}}function re(e){if(!e?.length)return;for(let n of e)if(!E(n.id))throw new Error(`Unknown OS capability: ${n.id}`);let t=c(e);if(t?.length){for(let n of t){let r=I(n.id);if(r.status!=="runtime-enforced")throw new Error(`OS capability '${r.label}' is not editable in Role settings`);if(r.supportsTargets){if(!n.targets?.length)throw new Error(`OS capability '${r.label}' requires at least one target bundle id`);for(let i of n.targets)if(!F(i))throw new Error(`Invalid automation target bundle id: ${i}`)}else if(n.targets?.length)throw new Error(`OS capability '${r.label}' does not accept targets`)}return t}}function c(e){if(!e||e.length===0)return;let t=new Set,n=[];for(let r of e){if(!E(r.id))throw new Error(`Unknown OS capability: ${r.id}`);if(t.has(r.id))continue;t.add(r.id);let i=I(r.id),s={id:r.id};i.supportsTargets&&r.targets?.length&&(s.targets=[...new Set(r.targets.map(o=>o.trim()).filter(Boolean))]),n.push(s)}return n.length>0?n.sort((r,i)=>r.id.localeCompare(i.id)):void 0}function F(e){return U.test(e)}var A,k,U,w=l(()=>{"use strict";A=["location-services","calendars","contacts","files-and-folders","full-disk-access","homekit","media-and-apple-music","passkeys-access-for-web-browsers","photos","reminders","accessibility","app-management","automation","bluetooth","camera","developer-tools","focus","input-monitoring","local-network","microphone","motion-and-fitness","remote-desktop","screen-and-system-audio-recording","speech-recognition"],k={"location-services":{id:"location-services",label:"Location Services",description:"Access device location and region context.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},calendars:{id:"calendars",label:"Calendars",description:"Access Calendar data via macOS privacy controls.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},contacts:{id:"contacts",label:"Contacts",description:"Access Contacts data via macOS privacy controls.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},"files-and-folders":{id:"files-and-folders",label:"Files & Folders",description:"Host-level file access categories managed outside Role sandboxing.",platform:"darwin",status:"host-only",disabledReason:"Role file boundaries are already controlled by visiblePaths and deniedReadPaths."},"full-disk-access":{id:"full-disk-access",label:"Full Disk Access",description:"Host-level macOS grant for protected storage locations.",platform:"darwin",status:"host-only",disabledReason:"This is a host app permission, not a Role-level control."},homekit:{id:"homekit",label:"HomeKit",description:"Access HomeKit devices and home automation data.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},"media-and-apple-music":{id:"media-and-apple-music",label:"Media & Apple Music",description:"Access Apple Music and media library data.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},"passkeys-access-for-web-browsers":{id:"passkeys-access-for-web-browsers",label:"Passkeys Access for Web Browsers",description:"Access passkeys for browser-integrated authentication.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},photos:{id:"photos",label:"Photos",description:"Access the Photos library via macOS privacy controls.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},reminders:{id:"reminders",label:"Reminders",description:"Access Reminder data via macOS privacy controls.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},accessibility:{id:"accessibility",label:"Accessibility",description:"Control desktop UI and accessibility automation surfaces.",platform:"darwin",status:"runtime-enforced"},"app-management":{id:"app-management",label:"App Management",description:"Manage or inspect other installed applications.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},automation:{id:"automation",label:"Automation",description:"Launch and control other apps via Apple Events.",platform:"darwin",status:"runtime-enforced",supportsTargets:!0},bluetooth:{id:"bluetooth",label:"Bluetooth",description:"Access nearby Bluetooth devices.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},camera:{id:"camera",label:"Camera",description:"Capture camera input.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},"developer-tools":{id:"developer-tools",label:"Developer Tools",description:"Use system developer tooling privileges.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},focus:{id:"focus",label:"Focus",description:"Access Focus state and related automation.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},"input-monitoring":{id:"input-monitoring",label:"Input Monitoring",description:"Observe keyboard and input device activity.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},"local-network":{id:"local-network",label:"Local Network",description:"Discover and communicate with devices on the local network.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},microphone:{id:"microphone",label:"Microphone",description:"Capture microphone input.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},"motion-and-fitness":{id:"motion-and-fitness",label:"Motion & Fitness",description:"Access motion and fitness sensor data.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},"remote-desktop":{id:"remote-desktop",label:"Remote Desktop",description:"Control or observe remote desktop sessions.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},"screen-and-system-audio-recording":{id:"screen-and-system-audio-recording",label:"Screen & System Audio Recording",description:"Capture the screen and system audio.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."},"speech-recognition":{id:"speech-recognition",label:"Speech Recognition",description:"Use system speech recognition services.",platform:"darwin",status:"registered-unwired",disabledReason:"Not wired into Adam runtime yet."}},U=/^[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)+$/});function b(e){return{id:e.id,parentId:e.parent_id??void 0,status:e.status,prompt:e.prompt,originalPrompt:e.original_prompt??void 0,config:JSON.parse(e.config),result:e.result??void 0,error:e.error??void 0,sdkSessionId:e.sdk_session_id??void 0,templateId:e.template_id??void 0,roleId:e.role_id??void 0,stepId:e.step_id??void 0,sourceSessionId:e.source_session_id??void 0,deliverTo:e.deliver_to?JSON.parse(e.deliver_to):void 0,reportTo:e.report_to?JSON.parse(e.report_to):void 0,createdAt:e.created_at,startedAt:e.started_at??void 0,completedAt:e.completed_at??void 0,costUsd:e.cost_usd??void 0,tokenUsage:e.token_usage?JSON.parse(e.token_usage):void 0,numTurns:e.num_turns??void 0,totalDurationMs:e.total_duration_ms??void 0,blockReason:e.block_reason_json?JSON.parse(e.block_reason_json):void 0,traceId:e.trace_id??void 0,errorCategory:e.error_category??void 0,retryCount:e.retry_count}}function ae(e){a().prepare(`
2
2
  INSERT INTO tasks (id, parent_id, status, prompt, original_prompt, config, result, error,
3
3
  sdk_session_id, template_id, role_id, step_id, source_session_id, notify_targets, deliver_to, report_to,
4
4
  created_at, started_at, completed_at,
5
5
  cost_usd, token_usage, num_turns, total_duration_ms, trace_id, error_category, retry_count)
6
6
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
7
- `).run(e.id,e.parentId??null,e.status,e.prompt,e.originalPrompt??null,JSON.stringify(e.config),e.result??null,e.error??null,e.sdkSessionId??null,e.templateId??null,e.roleId??null,e.stepId??null,e.sourceSessionId??null,null,e.deliverTo?JSON.stringify(e.deliverTo):null,e.reportTo?JSON.stringify(e.reportTo):null,e.createdAt,e.startedAt??null,e.completedAt??null,e.costUsd??null,e.tokenUsage?JSON.stringify(e.tokenUsage):null,e.numTurns??null,e.totalDurationMs??null,e.traceId??v()??null,e.errorCategory??null,e.retryCount??0)}function H(e){let i=a().prepare("SELECT * FROM tasks WHERE id = ?").get(e);return i?b(i):void 0}function W(e,t){let i=a(),r=[],n=[],s={parentId:"parent_id",status:"status",prompt:"prompt",result:"result",error:"error",sdkSessionId:"sdk_session_id",templateId:"template_id",roleId:"role_id",stepId:"step_id",sourceSessionId:"source_session_id",originalPrompt:"original_prompt",startedAt:"started_at",completedAt:"completed_at",costUsd:"cost_usd",numTurns:"num_turns",totalDurationMs:"total_duration_ms",errorCategory:"error_category",retryCount:"retry_count"};for(let[o,d]of Object.entries(s))o in t&&(r.push(`${d} = ?`),n.push(t[o]??null));"config"in t&&(r.push("config = ?"),n.push(JSON.stringify(t.config))),"tokenUsage"in t&&(r.push("token_usage = ?"),n.push(t.tokenUsage?JSON.stringify(t.tokenUsage):null)),"deliverTo"in t&&(r.push("deliver_to = ?"),n.push(t.deliverTo?JSON.stringify(t.deliverTo):null)),"reportTo"in t&&(r.push("report_to = ?"),n.push(t.reportTo?JSON.stringify(t.reportTo):null)),"blockReason"in t&&(r.push("block_reason_json = ?"),n.push(t.blockReason?JSON.stringify(t.blockReason):null)),"contextMeta"in t&&(r.push("context_meta = ?"),n.push(t.contextMeta?JSON.stringify(t.contextMeta):null)),r.length!==0&&(n.push(e),i.prepare(`UPDATE tasks SET ${r.join(", ")} WHERE id = ?`).run(...n))}function ae(e,t){let i=H(e);if(!i)return;let r={...i.config??{},...t};W(e,{config:r})}function O(e,t=100,i=0,r){let n=a(),s="SELECT * FROM tasks",o=[],d=[];return e&&(o.push("status = ?"),d.push(e)),r&&(o.push("role_id = ?"),d.push(r)),o.length>0&&(s+=" WHERE "+o.join(" AND ")),s+=" ORDER BY created_at DESC LIMIT ? OFFSET ?",d.push(t,i),n.prepare(s).all(...d).map(b)}function oe(e){return a().prepare("SELECT * FROM tasks WHERE parent_id = ? ORDER BY created_at ASC").all(e).map(b)}function de(e){return a().prepare("SELECT COALESCE(SUM(cost_usd), 0) as total FROM tasks WHERE completed_at >= ? AND cost_usd IS NOT NULL").get(e).total}function le(e){return a().prepare("SELECT trace_id FROM tasks WHERE id = ?").get(e)?.trace_id??void 0}function ce(e){let t=a();return t.prepare("UPDATE tasks SET retry_count = retry_count + 1 WHERE id = ?").run(e),t.prepare("SELECT retry_count FROM tasks WHERE id = ?").get(e)?.retry_count??1}function q(e){return{id:e.id,taskId:e.task_id,retryAt:e.retry_at,createdAt:e.created_at}}function ue(e){a().prepare("INSERT INTO delayed_retries (id, task_id, retry_at, created_at) VALUES (?, ?, ?, ?)").run(e.id,e.taskId,e.retryAt,e.createdAt)}function pe(e){return a().prepare("SELECT * FROM delayed_retries WHERE retry_at <= ? ORDER BY retry_at ASC").all(e).map(q)}function ge(e){a().prepare("DELETE FROM delayed_retries WHERE id = ?").run(e)}function me(e){let i=a().prepare("SELECT context_meta FROM tasks WHERE id = ?").get(e);if(!i||i.context_meta===null)return null;try{return JSON.parse(i.context_meta)}catch{return null}}function fe(e,t){if(t.length===0)return;let i=a(),r=i.prepare("SELECT context_meta FROM tasks WHERE id = ?").get(e),n={usedMemoryIds:[]};if(r?.context_meta!==null&&r?.context_meta!==void 0)try{let o=JSON.parse(r.context_meta);Array.isArray(o.usedMemoryIds)&&(n.usedMemoryIds=o.usedMemoryIds)}catch{}let s=Array.from(new Set([...n.usedMemoryIds,...t]));i.prepare("UPDATE tasks SET context_meta = ? WHERE id = ?").run(JSON.stringify({usedMemoryIds:s}),e)}var P=l(()=>{"use strict";x();N()});import{existsSync as V}from"fs";import{resolve as y}from"path";function M(e){if(e==null)return{...f};if(Array.isArray(e))return{stylePreferences:e.filter(t=>typeof t=="string"),avoidedActions:[],pinnedParameters:[]};if(typeof e=="object"){let t=e;return{stylePreferences:Array.isArray(t.stylePreferences)?t.stylePreferences.filter(i=>typeof i=="string"):[],avoidedActions:Array.isArray(t.avoidedActions)?t.avoidedActions.filter(i=>typeof i=="string"):[],pinnedParameters:Array.isArray(t.pinnedParameters)?t.pinnedParameters.filter(i=>i!==null&&typeof i=="object"&&typeof i.tool=="string"):[]}}return{...f}}function D(e,t){for(let i of e){let r=typeof i=="string"?i:i.path;if(!r.startsWith("/")&&!r.startsWith("~/")&&r!=="~")throw new Error(`additionalDirectories must be absolute paths: '${r}' is not absolute`);let n=y(g(r));if(!n.startsWith("/"))throw new Error(`additionalDirectories must be absolute paths: '${r}' is not absolute`);for(let s of u){let o=y(g(s));if(n.startsWith(o))throw new Error(`additionalDirectories cannot include hardcoded denied path: '${r}' matches '${s}'`)}if(t?.length)for(let s of t){let o=y(g(s));if(n.startsWith(o)||o.startsWith(n))throw new Error(`additionalDirectories cannot overlap with deniedReadPaths: '${r}' conflicts with '${s}'`)}if(!V(n))throw new Error(`additionalDirectories path does not exist: '${r}'`)}}function h(e){return{id:e.id,name:e.name,cagPrompt:e.cag_prompt,learnedRules:M(e.learned_rules?JSON.parse(e.learned_rules):null),memoryStreamId:e.memory_stream_id,status:e.status,performanceScore:e.performance_score??void 0,preferences:e.preferences?JSON.parse(e.preferences):{},createdAt:e.created_at,updatedAt:e.updated_at??void 0,allowedTools:e.allowed_tools?JSON.parse(e.allowed_tools):void 0,disallowedTools:e.disallowed_tools?JSON.parse(e.disallowed_tools):void 0,evaluationCriteria:e.evaluation_criteria?JSON.parse(e.evaluation_criteria):void 0,executionMode:e.execution_mode??void 0,model:e.model??void 0,maxBudgetUsd:e.max_budget_usd??void 0,approvalRequired:e.approval_required?JSON.parse(e.approval_required):void 0,source:e.source??void 0,additionalDirectories:(()=>{if(e.additional_directories!==null)try{let t=JSON.parse(e.additional_directories);return Array.isArray(t)?t.map(i=>typeof i=="string"?{path:i}:i):void 0}catch{return}})(),allowedChannels:e.allowed_channels?JSON.parse(e.allowed_channels):void 0,mcpServers:e.mcp_servers?JSON.parse(e.mcp_servers):void 0,inheritUserSettings:e.inherit_user_settings===1?!0:void 0,permissionMode:e.permission_mode??void 0,allowedBashPatterns:e.allowed_bash_patterns?JSON.parse(e.allowed_bash_patterns):void 0,deniedBashPatterns:e.denied_bash_patterns?JSON.parse(e.denied_bash_patterns):void 0,envVars:e.env_vars?JSON.parse(e.env_vars):void 0,osCapabilities:e.os_capabilities?c(JSON.parse(e.os_capabilities)):void 0,presetId:e.preset_id??void 0,effortTier:e.effort_tier??void 0,skills:e.skills?JSON.parse(e.skills):void 0}}function Ae(e){let t=m("defaults.deniedReadPaths")??[...u];e.additionalDirectories&&D(e.additionalDirectories,t),a().prepare(`
7
+ `).run(e.id,e.parentId??null,e.status,e.prompt,e.originalPrompt??null,JSON.stringify(e.config),e.result??null,e.error??null,e.sdkSessionId??null,e.templateId??null,e.roleId??null,e.stepId??null,e.sourceSessionId??null,null,e.deliverTo?JSON.stringify(e.deliverTo):null,e.reportTo?JSON.stringify(e.reportTo):null,e.createdAt,e.startedAt??null,e.completedAt??null,e.costUsd??null,e.tokenUsage?JSON.stringify(e.tokenUsage):null,e.numTurns??null,e.totalDurationMs??null,e.traceId??v()??null,e.errorCategory??null,e.retryCount??0)}function W(e){let n=a().prepare("SELECT * FROM tasks WHERE id = ?").get(e);return n?b(n):void 0}function H(e,t){let n=a(),r=[],i=[],s={parentId:"parent_id",status:"status",prompt:"prompt",result:"result",error:"error",sdkSessionId:"sdk_session_id",templateId:"template_id",roleId:"role_id",stepId:"step_id",sourceSessionId:"source_session_id",originalPrompt:"original_prompt",startedAt:"started_at",completedAt:"completed_at",costUsd:"cost_usd",numTurns:"num_turns",totalDurationMs:"total_duration_ms",errorCategory:"error_category",retryCount:"retry_count"};for(let[o,d]of Object.entries(s))o in t&&(r.push(`${d} = ?`),i.push(t[o]??null));"config"in t&&(r.push("config = ?"),i.push(JSON.stringify(t.config))),"tokenUsage"in t&&(r.push("token_usage = ?"),i.push(t.tokenUsage?JSON.stringify(t.tokenUsage):null)),"deliverTo"in t&&(r.push("deliver_to = ?"),i.push(t.deliverTo?JSON.stringify(t.deliverTo):null)),"reportTo"in t&&(r.push("report_to = ?"),i.push(t.reportTo?JSON.stringify(t.reportTo):null)),"blockReason"in t&&(r.push("block_reason_json = ?"),i.push(t.blockReason?JSON.stringify(t.blockReason):null)),"contextMeta"in t&&(r.push("context_meta = ?"),i.push(t.contextMeta?JSON.stringify(t.contextMeta):null)),r.length!==0&&(i.push(e),n.prepare(`UPDATE tasks SET ${r.join(", ")} WHERE id = ?`).run(...i))}function oe(e,t){let n=W(e);if(!n)return;let r={...n.config??{},...t};H(e,{config:r})}function O(e,t=100,n=0,r){let i=a(),s="SELECT * FROM tasks",o=[],d=[];return e&&(o.push("status = ?"),d.push(e)),r&&(o.push("role_id = ?"),d.push(r)),o.length>0&&(s+=" WHERE "+o.join(" AND ")),s+=" ORDER BY created_at DESC LIMIT ? OFFSET ?",d.push(t,n),i.prepare(s).all(...d).map(b)}function de(e){return a().prepare("SELECT * FROM tasks WHERE parent_id = ? ORDER BY created_at ASC").all(e).map(b)}function le(e){return a().prepare("SELECT COALESCE(SUM(cost_usd), 0) as total FROM tasks WHERE completed_at >= ? AND cost_usd IS NOT NULL").get(e).total}function ce(e){return a().prepare("SELECT trace_id FROM tasks WHERE id = ?").get(e)?.trace_id??void 0}function ue(e){let t=a();return t.prepare("UPDATE tasks SET retry_count = retry_count + 1 WHERE id = ?").run(e),t.prepare("SELECT retry_count FROM tasks WHERE id = ?").get(e)?.retry_count??1}function q(e){return{id:e.id,taskId:e.task_id,retryAt:e.retry_at,createdAt:e.created_at}}function pe(e){a().prepare("INSERT INTO delayed_retries (id, task_id, retry_at, created_at) VALUES (?, ?, ?, ?)").run(e.id,e.taskId,e.retryAt,e.createdAt)}function ge(e){return a().prepare("SELECT * FROM delayed_retries WHERE retry_at <= ? ORDER BY retry_at ASC").all(e).map(q)}function me(e){a().prepare("DELETE FROM delayed_retries WHERE id = ?").run(e)}function V(e,t){let n=a();n.transaction(()=>{let r=n.prepare("SELECT context_meta FROM tasks WHERE id = ?").get(e),i=(()=>{if(r?.context_meta)try{return JSON.parse(r.context_meta)}catch{return{}}return{}})();t(i),n.prepare("UPDATE tasks SET context_meta = ? WHERE id = ?").run(JSON.stringify(i),e)})()}function fe(e){let n=a().prepare("SELECT context_meta FROM tasks WHERE id = ?").get(e);if(!n||n.context_meta===null)return null;try{return JSON.parse(n.context_meta)}catch{return null}}function be(e,t){t.length!==0&&V(e,n=>{let r=Array.isArray(n.usedMemoryIds)?n.usedMemoryIds:[];n.usedMemoryIds=Array.from(new Set([...r,...t]))})}var P=l(()=>{"use strict";x();N()});import{existsSync as K}from"fs";import{resolve as y}from"path";function M(e){if(e==null)return{...f};if(Array.isArray(e))return{stylePreferences:e.filter(t=>typeof t=="string"),avoidedActions:[],pinnedParameters:[]};if(typeof e=="object"){let t=e;return{stylePreferences:Array.isArray(t.stylePreferences)?t.stylePreferences.filter(n=>typeof n=="string"):[],avoidedActions:Array.isArray(t.avoidedActions)?t.avoidedActions.filter(n=>typeof n=="string"):[],pinnedParameters:Array.isArray(t.pinnedParameters)?t.pinnedParameters.filter(n=>n!==null&&typeof n=="object"&&typeof n.tool=="string"):[]}}return{...f}}function D(e,t){for(let n of e){let r=typeof n=="string"?n:n.path;if(!r.startsWith("/")&&!r.startsWith("~/")&&r!=="~")throw new Error(`additionalDirectories must be absolute paths: '${r}' is not absolute`);let i=y(g(r));if(!i.startsWith("/"))throw new Error(`additionalDirectories must be absolute paths: '${r}' is not absolute`);for(let s of u){let o=y(g(s));if(i.startsWith(o))throw new Error(`additionalDirectories cannot include hardcoded denied path: '${r}' matches '${s}'`)}if(t?.length)for(let s of t){let o=y(g(s));if(i.startsWith(o)||o.startsWith(i))throw new Error(`additionalDirectories cannot overlap with deniedReadPaths: '${r}' conflicts with '${s}'`)}if(!K(i))throw new Error(`additionalDirectories path does not exist: '${r}'`)}}function h(e){return{id:e.id,name:e.name,cagPrompt:e.cag_prompt,learnedRules:M(e.learned_rules?JSON.parse(e.learned_rules):null),memoryStreamId:e.memory_stream_id,status:e.status,performanceScore:e.performance_score??void 0,preferences:e.preferences?JSON.parse(e.preferences):{},createdAt:e.created_at,updatedAt:e.updated_at??void 0,allowedTools:e.allowed_tools?JSON.parse(e.allowed_tools):void 0,disallowedTools:e.disallowed_tools?JSON.parse(e.disallowed_tools):void 0,evaluationCriteria:e.evaluation_criteria?JSON.parse(e.evaluation_criteria):void 0,executionMode:e.execution_mode??void 0,model:e.model??void 0,maxBudgetUsd:e.max_budget_usd??void 0,approvalRequired:e.approval_required?JSON.parse(e.approval_required):void 0,source:e.source??void 0,additionalDirectories:(()=>{if(e.additional_directories!==null)try{let t=JSON.parse(e.additional_directories);return Array.isArray(t)?t.map(n=>typeof n=="string"?{path:n}:n):void 0}catch{return}})(),allowedChannels:e.allowed_channels?JSON.parse(e.allowed_channels):void 0,mcpServers:e.mcp_servers?JSON.parse(e.mcp_servers):void 0,inheritUserSettings:e.inherit_user_settings===1?!0:void 0,permissionMode:e.permission_mode??void 0,allowedBashPatterns:e.allowed_bash_patterns?JSON.parse(e.allowed_bash_patterns):void 0,deniedBashPatterns:e.denied_bash_patterns?JSON.parse(e.denied_bash_patterns):void 0,envVars:e.env_vars?JSON.parse(e.env_vars):void 0,osCapabilities:e.os_capabilities?c(JSON.parse(e.os_capabilities)):void 0,presetId:e.preset_id??void 0,effortTier:e.effort_tier??void 0,skills:e.skills?JSON.parse(e.skills):void 0}}function ke(e){let t=m("defaults.deniedReadPaths")??[...u];e.additionalDirectories&&D(e.additionalDirectories,t),a().prepare(`
8
8
  INSERT INTO roles (id, name, cag_prompt, learned_rules, memory_stream_id, status,
9
9
  performance_score, preferences, created_at, updated_at,
10
10
  allowed_tools, disallowed_tools, evaluation_criteria, execution_mode, model,
@@ -12,4 +12,4 @@ import{a as m,g as L}from"./chunk-OGY42NUN.js";import{n as a,p as x}from"./chunk
12
12
  permission_mode, allowed_bash_patterns, denied_bash_patterns, env_vars, os_capabilities, preset_id,
13
13
  effort_tier, skills)
14
14
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
15
- `).run(e.id,e.name,e.cagPrompt,JSON.stringify(e.learnedRules),e.memoryStreamId,e.status,e.performanceScore??null,e.preferences?JSON.stringify(e.preferences):null,e.createdAt,e.updatedAt??null,e.allowedTools?JSON.stringify(e.allowedTools):null,e.disallowedTools?JSON.stringify(e.disallowedTools):null,e.evaluationCriteria?JSON.stringify(e.evaluationCriteria):null,e.executionMode??null,e.model??null,e.maxBudgetUsd??null,e.approvalRequired?JSON.stringify(e.approvalRequired):null,e.source??null,e.additionalDirectories?JSON.stringify(e.additionalDirectories):null,e.allowedChannels?JSON.stringify(e.allowedChannels):null,e.mcpServers?JSON.stringify(e.mcpServers):null,e.inheritUserSettings?1:0,e.permissionMode??null,e.allowedBashPatterns?JSON.stringify(e.allowedBashPatterns):null,e.deniedBashPatterns?JSON.stringify(e.deniedBashPatterns):null,e.envVars?JSON.stringify(e.envVars):null,e.osCapabilities?JSON.stringify(c(e.osCapabilities)):null,e.presetId??null,e.effortTier??null,e.skills?JSON.stringify(e.skills):null)}function j(e){let i=a().prepare("SELECT * FROM roles WHERE id = ?").get(e);return i?h(i):void 0}function ke(e){let i=a().prepare("SELECT * FROM roles WHERE name = ?").get(e);return i?h(i):void 0}function Ee(e,t){let i=a(),r=[],n=[];if("name"in t&&(r.push("name = ?"),n.push(t.name)),"cagPrompt"in t&&(r.push("cag_prompt = ?"),n.push(t.cagPrompt)),"learnedRules"in t&&(r.push("learned_rules = ?"),n.push(JSON.stringify(M(t.learnedRules)))),"memoryStreamId"in t&&(r.push("memory_stream_id = ?"),n.push(t.memoryStreamId)),"status"in t&&(r.push("status = ?"),n.push(t.status)),"performanceScore"in t&&(r.push("performance_score = ?"),n.push(t.performanceScore??null)),"preferences"in t&&(r.push("preferences = ?"),n.push(t.preferences?JSON.stringify(t.preferences):null)),"updatedAt"in t&&(r.push("updated_at = ?"),n.push(t.updatedAt??null)),"allowedTools"in t&&(r.push("allowed_tools = ?"),n.push(t.allowedTools?JSON.stringify(t.allowedTools):null)),"disallowedTools"in t&&(r.push("disallowed_tools = ?"),n.push(t.disallowedTools?JSON.stringify(t.disallowedTools):null)),"evaluationCriteria"in t&&(r.push("evaluation_criteria = ?"),n.push(t.evaluationCriteria?JSON.stringify(t.evaluationCriteria):null)),"executionMode"in t&&(r.push("execution_mode = ?"),n.push(t.executionMode??null)),"model"in t&&(r.push("model = ?"),n.push(t.model??null)),"maxBudgetUsd"in t&&(r.push("max_budget_usd = ?"),n.push(t.maxBudgetUsd??null)),"approvalRequired"in t&&(r.push("approval_required = ?"),n.push(t.approvalRequired?JSON.stringify(t.approvalRequired):null)),"source"in t&&(r.push("source = ?"),n.push(t.source??null)),"additionalDirectories"in t){let s=m("defaults.deniedReadPaths")??[...u];t.additionalDirectories&&D(t.additionalDirectories,s),r.push("additional_directories = ?"),n.push(t.additionalDirectories?JSON.stringify(t.additionalDirectories):null)}"allowedChannels"in t&&(r.push("allowed_channels = ?"),n.push(t.allowedChannels?JSON.stringify(t.allowedChannels):null)),"mcpServers"in t&&(r.push("mcp_servers = ?"),n.push(t.mcpServers?JSON.stringify(t.mcpServers):null)),"inheritUserSettings"in t&&(r.push("inherit_user_settings = ?"),n.push(t.inheritUserSettings?1:0)),"permissionMode"in t&&(r.push("permission_mode = ?"),n.push(t.permissionMode??null)),"allowedBashPatterns"in t&&(r.push("allowed_bash_patterns = ?"),n.push(t.allowedBashPatterns?JSON.stringify(t.allowedBashPatterns):null)),"deniedBashPatterns"in t&&(r.push("denied_bash_patterns = ?"),n.push(t.deniedBashPatterns?JSON.stringify(t.deniedBashPatterns):null)),"envVars"in t&&(r.push("env_vars = ?"),n.push(t.envVars?JSON.stringify(t.envVars):null)),"osCapabilities"in t&&(r.push("os_capabilities = ?"),n.push(t.osCapabilities?JSON.stringify(c(t.osCapabilities)):null)),"presetId"in t&&(r.push("preset_id = ?"),n.push(t.presetId??null)),"effortTier"in t&&(r.push("effort_tier = ?"),n.push(t.effortTier??null)),"skills"in t&&(r.push("skills = ?"),n.push(t.skills?JSON.stringify(t.skills):null)),r.length!==0&&(n.push(e),i.prepare(`UPDATE roles SET ${r.join(", ")} WHERE id = ?`).run(...n))}function Ie(e,t,i=0){let r=a(),n="SELECT * FROM roles",s=[];return e&&(n+=" WHERE status = ?",s.push(e)),n+=" ORDER BY COALESCE(updated_at, created_at) DESC",typeof t=="number"&&(n+=" LIMIT ? OFFSET ?",s.push(t,i)),r.prepare(n).all(...s).map(h)}function G(e){let t=["pending","queued","running"],r=O(void 0,1e3,0,e).filter(s=>t.includes(s.status)),n=[...new Set(r.map(s=>s.status))];return{hasActive:r.length>0,count:r.length,statuses:n}}function we(e,t=!1){if(!t){let{hasActive:r,count:n,statuses:s}=G(e);if(r){let o=j(e);throw new p(e,o?.name??e,n,s)}}a().prepare("DELETE FROM roles WHERE id = ?").run(e)}var K=l(()=>{x();T();_();C();L();w();P()});export{se as a,H as b,W as c,ae as d,O as e,oe as f,de as g,le as h,ce as i,ue as j,pe as k,ge as l,me as m,fe as n,P as o,p,T as q,g as r,C as s,A as t,U as u,I as v,ee as w,te as x,c as y,w as z,D as A,Ae as B,j as C,ke as D,Ee as E,Ie as F,G,we as H,K as I};
15
+ `).run(e.id,e.name,e.cagPrompt,JSON.stringify(e.learnedRules),e.memoryStreamId,e.status,e.performanceScore??null,e.preferences?JSON.stringify(e.preferences):null,e.createdAt,e.updatedAt??null,e.allowedTools?JSON.stringify(e.allowedTools):null,e.disallowedTools?JSON.stringify(e.disallowedTools):null,e.evaluationCriteria?JSON.stringify(e.evaluationCriteria):null,e.executionMode??null,e.model??null,e.maxBudgetUsd??null,e.approvalRequired?JSON.stringify(e.approvalRequired):null,e.source??null,e.additionalDirectories?JSON.stringify(e.additionalDirectories):null,e.allowedChannels?JSON.stringify(e.allowedChannels):null,e.mcpServers?JSON.stringify(e.mcpServers):null,e.inheritUserSettings?1:0,e.permissionMode??null,e.allowedBashPatterns?JSON.stringify(e.allowedBashPatterns):null,e.deniedBashPatterns?JSON.stringify(e.deniedBashPatterns):null,e.envVars?JSON.stringify(e.envVars):null,e.osCapabilities?JSON.stringify(c(e.osCapabilities)):null,e.presetId??null,e.effortTier??null,e.skills?JSON.stringify(e.skills):null)}function j(e){let n=a().prepare("SELECT * FROM roles WHERE id = ?").get(e);return n?h(n):void 0}function Ee(e){let n=a().prepare("SELECT * FROM roles WHERE name = ?").get(e);return n?h(n):void 0}function Ie(e,t){let n=a(),r=[],i=[];if("name"in t&&(r.push("name = ?"),i.push(t.name)),"cagPrompt"in t&&(r.push("cag_prompt = ?"),i.push(t.cagPrompt)),"learnedRules"in t&&(r.push("learned_rules = ?"),i.push(JSON.stringify(M(t.learnedRules)))),"memoryStreamId"in t&&(r.push("memory_stream_id = ?"),i.push(t.memoryStreamId)),"status"in t&&(r.push("status = ?"),i.push(t.status)),"performanceScore"in t&&(r.push("performance_score = ?"),i.push(t.performanceScore??null)),"preferences"in t&&(r.push("preferences = ?"),i.push(t.preferences?JSON.stringify(t.preferences):null)),"updatedAt"in t&&(r.push("updated_at = ?"),i.push(t.updatedAt??null)),"allowedTools"in t&&(r.push("allowed_tools = ?"),i.push(t.allowedTools?JSON.stringify(t.allowedTools):null)),"disallowedTools"in t&&(r.push("disallowed_tools = ?"),i.push(t.disallowedTools?JSON.stringify(t.disallowedTools):null)),"evaluationCriteria"in t&&(r.push("evaluation_criteria = ?"),i.push(t.evaluationCriteria?JSON.stringify(t.evaluationCriteria):null)),"executionMode"in t&&(r.push("execution_mode = ?"),i.push(t.executionMode??null)),"model"in t&&(r.push("model = ?"),i.push(t.model??null)),"maxBudgetUsd"in t&&(r.push("max_budget_usd = ?"),i.push(t.maxBudgetUsd??null)),"approvalRequired"in t&&(r.push("approval_required = ?"),i.push(t.approvalRequired?JSON.stringify(t.approvalRequired):null)),"source"in t&&(r.push("source = ?"),i.push(t.source??null)),"additionalDirectories"in t){let s=m("defaults.deniedReadPaths")??[...u];t.additionalDirectories&&D(t.additionalDirectories,s),r.push("additional_directories = ?"),i.push(t.additionalDirectories?JSON.stringify(t.additionalDirectories):null)}"allowedChannels"in t&&(r.push("allowed_channels = ?"),i.push(t.allowedChannels?JSON.stringify(t.allowedChannels):null)),"mcpServers"in t&&(r.push("mcp_servers = ?"),i.push(t.mcpServers?JSON.stringify(t.mcpServers):null)),"inheritUserSettings"in t&&(r.push("inherit_user_settings = ?"),i.push(t.inheritUserSettings?1:0)),"permissionMode"in t&&(r.push("permission_mode = ?"),i.push(t.permissionMode??null)),"allowedBashPatterns"in t&&(r.push("allowed_bash_patterns = ?"),i.push(t.allowedBashPatterns?JSON.stringify(t.allowedBashPatterns):null)),"deniedBashPatterns"in t&&(r.push("denied_bash_patterns = ?"),i.push(t.deniedBashPatterns?JSON.stringify(t.deniedBashPatterns):null)),"envVars"in t&&(r.push("env_vars = ?"),i.push(t.envVars?JSON.stringify(t.envVars):null)),"osCapabilities"in t&&(r.push("os_capabilities = ?"),i.push(t.osCapabilities?JSON.stringify(c(t.osCapabilities)):null)),"presetId"in t&&(r.push("preset_id = ?"),i.push(t.presetId??null)),"effortTier"in t&&(r.push("effort_tier = ?"),i.push(t.effortTier??null)),"skills"in t&&(r.push("skills = ?"),i.push(t.skills?JSON.stringify(t.skills):null)),r.length!==0&&(i.push(e),n.prepare(`UPDATE roles SET ${r.join(", ")} WHERE id = ?`).run(...i))}function we(e,t,n=0){let r=a(),i="SELECT * FROM roles",s=[];return e&&(i+=" WHERE status = ?",s.push(e)),i+=" ORDER BY COALESCE(updated_at, created_at) DESC",typeof t=="number"&&(i+=" LIMIT ? OFFSET ?",s.push(t,n)),r.prepare(i).all(...s).map(h)}function G(e){let t=["pending","queued","running"],r=O(void 0,1e3,0,e).filter(s=>t.includes(s.status)),i=[...new Set(r.map(s=>s.status))];return{hasActive:r.length>0,count:r.length,statuses:i}}function Oe(e,t=!1){if(!t){let{hasActive:r,count:i,statuses:s}=G(e);if(r){let o=j(e);throw new p(e,o?.name??e,i,s)}}a().prepare("DELETE FROM roles WHERE id = ?").run(e)}function Pe(e){a().prepare("UPDATE roles SET task_seq = task_seq + 1 WHERE id = ?").run(e)}function Me(e){return a().prepare("SELECT task_seq FROM roles WHERE id = ?").get(e)?.task_seq??0}var $=l(()=>{x();T();_();C();L();w();P()});export{ae as a,W as b,H as c,oe as d,O as e,de as f,le as g,ce as h,ue as i,pe as j,ge as k,me as l,V as m,fe as n,be as o,P as p,p as q,T as r,g as s,C as t,A as u,U as v,I as w,te as x,re as y,c as z,w as A,D as B,ke as C,j as D,Ee as E,Ie as F,we as G,G as H,Oe as I,Pe as J,Me as K,$ as L};
@@ -1,7 +1,7 @@
1
- import{n as a,p as l}from"./chunk-QL2ZOLMC.js";l();function c(e){return{id:e.id,templateId:e.template_id,status:e.status,stepStatuses:JSON.parse(e.step_statuses),startedAt:e.started_at,completedAt:e.completed_at??void 0,error:e.error??void 0,eventId:e.event_id??void 0,stepResultsJson:e.step_results_json??void 0}}function _(e,t,s){a().prepare(`
1
+ import{n as a,p as l}from"./chunk-VARIYH6K.js";l();function c(e){return{id:e.id,templateId:e.template_id,status:e.status,stepStatuses:JSON.parse(e.step_statuses),startedAt:e.started_at,completedAt:e.completed_at??void 0,error:e.error??void 0,eventId:e.event_id??void 0,stepResultsJson:e.step_results_json??void 0}}function _(e,t,n){a().prepare(`
2
2
  INSERT INTO template_executions (id, template_id, status, step_statuses, started_at, event_id)
3
3
  VALUES (?, ?, 'running', '{}', ?, ?)
4
- `).run(e,t,Date.now(),s??null)}function y(e){let s=a().prepare("SELECT * FROM template_executions WHERE id = ?").get(e);return s?c(s):void 0}function E(e,t){let s=a(),r=[],i=[];t.status!==void 0&&(r.push("status = ?"),i.push(t.status)),t.stepStatuses!==void 0&&(r.push("step_statuses = ?"),i.push(JSON.stringify(t.stepStatuses))),t.completedAt!==void 0&&(r.push("completed_at = ?"),i.push(t.completedAt)),t.error!==void 0&&(r.push("error = ?"),i.push(t.error)),r.length!==0&&(i.push(e),s.prepare(`UPDATE template_executions SET ${r.join(", ")} WHERE id = ?`).run(...i))}function R(e){let t=a(),s=Date.now()-e;return t.prepare("SELECT * FROM template_executions WHERE status = 'running' AND started_at < ?").all(s).map(c)}function I(e,t=50,s=0){let r=a(),i="SELECT * FROM template_executions",n=[];return e&&(i+=" WHERE template_id = ?",n.push(e)),i+=" ORDER BY started_at DESC LIMIT ? OFFSET ?",n.push(t,s),r.prepare(i).all(...n).map(c)}function h(e,t=20,s=0){return a().prepare(`
4
+ `).run(e,t,Date.now(),n??null)}function y(e){let n=a().prepare("SELECT * FROM template_executions WHERE id = ?").get(e);return n?c(n):void 0}function E(e,t){let n=a(),r=[],i=[];t.status!==void 0&&(r.push("status = ?"),i.push(t.status)),t.stepStatuses!==void 0&&(r.push("step_statuses = ?"),i.push(JSON.stringify(t.stepStatuses))),t.completedAt!==void 0&&(r.push("completed_at = ?"),i.push(t.completedAt)),t.error!==void 0&&(r.push("error = ?"),i.push(t.error)),r.length!==0&&(i.push(e),n.prepare(`UPDATE template_executions SET ${r.join(", ")} WHERE id = ?`).run(...i))}function R(e){let t=a(),n=Date.now()-e;return t.prepare("SELECT * FROM template_executions WHERE status = 'running' AND started_at < ?").all(n).map(c)}function I(e,t=50,n=0){let r=a(),i="SELECT * FROM template_executions",s=[];return e&&(i+=" WHERE template_id = ?",s.push(e)),i+=" ORDER BY started_at DESC LIMIT ? OFFSET ?",s.push(t,n),r.prepare(i).all(...s).map(c)}function h(e,t=20,n=0){return a().prepare(`
5
5
  SELECT te.id AS execution_id,
6
6
  te.template_id,
7
7
  tt.name AS template_name,
@@ -18,7 +18,7 @@ import{n as a,p as l}from"./chunk-QL2ZOLMC.js";l();function c(e){return{id:e.id,
18
18
  WHERE e.event_def_id = ?
19
19
  ORDER BY te.started_at DESC
20
20
  LIMIT ? OFFSET ?
21
- `).all(e,t,s).map(n=>({executionId:n.execution_id,templateId:n.template_id,templateName:n.template_name,status:n.status,startedAt:n.started_at,completedAt:n.completed_at,error:n.error,eventId:n.event_id,eventOccurredAt:n.event_occurred_at,eventPayload:n.event_payload?JSON.parse(n.event_payload):null}))}function T(e,t){let s=JSON.stringify(Array.from(t.entries()));a().prepare("UPDATE template_executions SET step_results_json = ? WHERE id = ?").run(s,e)}l();import{v4 as p}from"uuid";function u(e){let t=[];e.traceId||t.push("traceId is required"),e.actor?(e.actor.traceId||t.push("actor.traceId is required"),e.actor.toolName||t.push("actor.toolName is required"),e.traceId&&e.actor.traceId&&e.actor.traceId!==e.traceId&&t.push(`actor.traceId ('${e.actor.traceId}') must equal top-level traceId ('${e.traceId}')`)):t.push("actor is required"),e.effectCategory!=="outbound_message"&&e.effectCategory!=="entity_mutation"&&t.push(`effectCategory must be 'outbound_message' or 'entity_mutation', got '${e.effectCategory}'`),e.verb||t.push("verb is required"),e.entityType||t.push("entityType is required");let s=e.entityId!==void 0&&e.entityId!==null,r=Array.isArray(e.entityIds)&&e.entityIds.length>0;if(s&&r&&t.push("entityId and entityIds are mutually exclusive \u2014 provide one only"),e.effectCategory==="outbound_message"&&(e.target?.channelId||t.push("outbound_message receipts require target.channelId"),(!e.payload||typeof e.payload.textChars!="number"||typeof e.payload.attachmentCount!="number")&&t.push("outbound_message receipts require payload with textChars and attachmentCount (numbers)")),e.outcome!==void 0&&e.outcome!=="success"&&e.outcome!=="failure"&&t.push(`outcome must be 'success' or 'failure', got '${String(e.outcome)}'`),e.effectCategory==="entity_mutation"){!s&&!r&&t.push("entity_mutation receipts require entityId or entityIds (verifier needs an entity to anchor the change)");let i=Array.isArray(e.fieldChanges)&&e.fieldChanges.length>0,n=!!e.scope&&typeof e.scope.matchedCount=="number"&&!!e.scope.filter;!i&&!n&&t.push("entity_mutation receipts require either fieldChanges (non-empty) or scope (with filter+matchedCount)"),r&&!n&&t.push("batch entity_mutation receipts (entityIds set) require scope to describe the matched set")}return{valid:t.length===0,errors:t}}var d=class extends Error{constructor(s){super(`Invalid effect receipt: ${s.join("; ")}`);this.errors=s;this.name="InvalidReceiptError"}errors};function C(e){let t=u(e);if(!t.valid)throw new d(t.errors);let s={id:e.id??p(),traceId:e.traceId,taskId:e.taskId,sessionId:e.sessionId,effectCategory:e.effectCategory,verb:e.verb,entityType:e.entityType,entityId:e.entityId,entityIds:e.entityIds,target:e.target,payload:e.payload,fieldChanges:e.fieldChanges,scope:e.scope,actor:e.actor,outcome:e.outcome??"success",createdAt:e.createdAt??Date.now()};return a().prepare(`
21
+ `).all(e,t,n).map(s=>({executionId:s.execution_id,templateId:s.template_id,templateName:s.template_name,status:s.status,startedAt:s.started_at,completedAt:s.completed_at,error:s.error,eventId:s.event_id,eventOccurredAt:s.event_occurred_at,eventPayload:s.event_payload?JSON.parse(s.event_payload):null}))}function T(e,t){let n=JSON.stringify(Array.from(t.entries()));a().prepare("UPDATE template_executions SET step_results_json = ? WHERE id = ?").run(n,e)}l();import{v4 as p}from"uuid";function u(e){let t=[];e.traceId||t.push("traceId is required"),e.actor?(e.actor.traceId||t.push("actor.traceId is required"),e.actor.toolName||t.push("actor.toolName is required"),e.traceId&&e.actor.traceId&&e.actor.traceId!==e.traceId&&t.push(`actor.traceId ('${e.actor.traceId}') must equal top-level traceId ('${e.traceId}')`)):t.push("actor is required"),e.effectCategory!=="outbound_message"&&e.effectCategory!=="entity_mutation"&&t.push(`effectCategory must be 'outbound_message' or 'entity_mutation', got '${e.effectCategory}'`),e.verb||t.push("verb is required"),e.entityType||t.push("entityType is required");let n=e.entityId!==void 0&&e.entityId!==null,r=Array.isArray(e.entityIds)&&e.entityIds.length>0;if(n&&r&&t.push("entityId and entityIds are mutually exclusive \u2014 provide one only"),e.effectCategory==="outbound_message"&&(e.target?.channelId||t.push("outbound_message receipts require target.channelId"),(!e.payload||typeof e.payload.textChars!="number"||typeof e.payload.attachmentCount!="number")&&t.push("outbound_message receipts require payload with textChars and attachmentCount (numbers)")),e.outcome!==void 0&&e.outcome!=="success"&&e.outcome!=="failure"&&t.push(`outcome must be 'success' or 'failure', got '${String(e.outcome)}'`),e.effectCategory==="entity_mutation"){!n&&!r&&t.push("entity_mutation receipts require entityId or entityIds (verifier needs an entity to anchor the change)");let i=Array.isArray(e.fieldChanges)&&e.fieldChanges.length>0,s=!!e.scope&&typeof e.scope.matchedCount=="number"&&!!e.scope.filter;!i&&!s&&t.push("entity_mutation receipts require either fieldChanges (non-empty) or scope (with filter+matchedCount)"),r&&!s&&t.push("batch entity_mutation receipts (entityIds set) require scope to describe the matched set")}return{valid:t.length===0,errors:t}}var d=class extends Error{constructor(n){super(`Invalid effect receipt: ${n.join("; ")}`);this.errors=n;this.name="InvalidReceiptError"}errors};function A(e){let t=u(e);if(!t.valid)throw new d(t.errors);let n={id:e.id??p(),traceId:e.traceId,taskId:e.taskId,sessionId:e.sessionId,effectCategory:e.effectCategory,verb:e.verb,entityType:e.entityType,entityId:e.entityId,entityIds:e.entityIds,target:e.target,payload:e.payload,fieldChanges:e.fieldChanges,scope:e.scope,actor:e.actor,outcome:e.outcome??"success",createdAt:e.createdAt??Date.now()};return a().prepare(`
22
22
  INSERT INTO effect_receipts (
23
23
  id, trace_id, task_id, session_id,
24
24
  effect_category, verb, entity_type,
@@ -27,8 +27,8 @@ import{n as a,p as l}from"./chunk-QL2ZOLMC.js";l();function c(e){return{id:e.id,
27
27
  actor_json, outcome, created_at
28
28
  )
29
29
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
30
- `).run(s.id,s.traceId,s.taskId??null,s.sessionId??null,s.effectCategory,s.verb,s.entityType,s.entityId??null,s.entityIds?JSON.stringify(s.entityIds):null,s.target?JSON.stringify(s.target):null,s.payload?JSON.stringify(s.payload):null,s.fieldChanges?JSON.stringify(s.fieldChanges):null,s.scope?JSON.stringify(s.scope):null,JSON.stringify(s.actor),s.outcome,s.createdAt),s}function O(e){return a().prepare(`
30
+ `).run(n.id,n.traceId,n.taskId??null,n.sessionId??null,n.effectCategory,n.verb,n.entityType,n.entityId??null,n.entityIds?JSON.stringify(n.entityIds):null,n.target?JSON.stringify(n.target):null,n.payload?JSON.stringify(n.payload):null,n.fieldChanges?JSON.stringify(n.fieldChanges):null,n.scope?JSON.stringify(n.scope):null,JSON.stringify(n.actor),n.outcome,n.createdAt),n}function O(e){return a().prepare(`
31
31
  SELECT * FROM effect_receipts
32
32
  WHERE trace_id = ?
33
33
  ORDER BY created_at ASC
34
- `).all(e).map(f)}function f(e){return{id:e.id,traceId:e.trace_id,taskId:e.task_id??void 0,sessionId:e.session_id??void 0,effectCategory:e.effect_category,verb:e.verb,entityType:e.entity_type,entityId:e.entity_id??void 0,entityIds:o(e.entity_ids_json)??void 0,target:o(e.target_json)??void 0,payload:o(e.payload_json)??void 0,fieldChanges:o(e.field_changes_json)??void 0,scope:o(e.scope_json)??void 0,actor:JSON.parse(e.actor_json),outcome:e.outcome??"success",createdAt:e.created_at}}function o(e){if(e!==null)try{return JSON.parse(e)}catch{return}}export{_ as a,y as b,E as c,R as d,I as e,h as f,T as g,d as h,C as i,O as j};
34
+ `).all(e).map(f)}function f(e){return{id:e.id,traceId:e.trace_id,taskId:e.task_id??void 0,sessionId:e.session_id??void 0,effectCategory:e.effect_category,verb:e.verb,entityType:e.entity_type,entityId:e.entity_id??void 0,entityIds:o(e.entity_ids_json)??void 0,target:o(e.target_json)??void 0,payload:o(e.payload_json)??void 0,fieldChanges:o(e.field_changes_json)??void 0,scope:o(e.scope_json)??void 0,actor:JSON.parse(e.actor_json),outcome:e.outcome??"success",createdAt:e.created_at}}function o(e){if(e!==null)try{return JSON.parse(e)}catch{return}}export{_ as a,y as b,E as c,R as d,I as e,h as f,T as g,d as h,A as i,O as j};
@@ -1,4 +1,4 @@
1
- import{n,p as o}from"./chunk-QL2ZOLMC.js";import{c as r,e as c}from"./chunk-245WE5AF.js";o();c();function a(e){return{id:e.id,sessionId:e.session_id,role:e.role,content:e.content,source:{type:e.source_type,...e.source_channel_id?{channelId:e.source_channel_id}:{},...e.source_chat_id?{chatId:e.source_chat_id}:{}},taskId:e.task_id??void 0,channelMessageId:e.channel_message_id??void 0,metadata:e.metadata?JSON.parse(e.metadata):void 0,createdAt:e.created_at,traceId:e.trace_id??void 0,kind:e.kind??void 0,parentMessageId:e.parent_message_id??void 0,threadRoot:e.thread_root??void 0,promptId:e.prompt_id??void 0,approvalShape:e.approval_shape??void 0,roleId:e.role_id??void 0,attachments:e.attachments?JSON.parse(e.attachments):void 0,mirroredToTargets:e.mirrored_to_targets?JSON.parse(e.mirrored_to_targets):void 0,platformMessageId:e.platform_message_id??void 0,seq:e.seq??void 0}}function p(e){let s=n(),t=e.kind??(e.role==="user"?"user_message":"assistant_text");s.prepare(`
1
+ import{n,p as o}from"./chunk-VARIYH6K.js";import{c as r,e as c}from"./chunk-5M6IGE5G.js";o();c();function a(e){return{id:e.id,sessionId:e.session_id,role:e.role,content:e.content,source:{type:e.source_type,...e.source_channel_id?{channelId:e.source_channel_id}:{},...e.source_chat_id?{chatId:e.source_chat_id}:{}},taskId:e.task_id??void 0,channelMessageId:e.channel_message_id??void 0,metadata:e.metadata?JSON.parse(e.metadata):void 0,createdAt:e.created_at,traceId:e.trace_id??void 0,kind:e.kind??void 0,parentMessageId:e.parent_message_id??void 0,threadRoot:e.thread_root??void 0,promptId:e.prompt_id??void 0,approvalShape:e.approval_shape??void 0,roleId:e.role_id??void 0,attachments:e.attachments?JSON.parse(e.attachments):void 0,mirroredToTargets:e.mirrored_to_targets?JSON.parse(e.mirrored_to_targets):void 0,platformMessageId:e.platform_message_id??void 0,seq:e.seq??void 0}}function p(e){let s=n(),t=e.kind??(e.role==="user"?"user_message":"assistant_text");s.prepare(`
2
2
  INSERT INTO chat_messages (
3
3
  id, session_id, role, content, source_type, task_id,
4
4
  channel_message_id, metadata, created_at, trace_id,
@@ -1,4 +1,4 @@
1
- import{n as i,p as u}from"./chunk-QL2ZOLMC.js";u();function c(t){return{id:t.id,status:t.status,source:{type:t.source_type,channelId:t.source_channel_id??void 0,chatId:t.source_chat_id??void 0},title:t.title??void 0,createdAt:t.created_at,lastActiveAt:t.last_active_at,archivedAt:t.archived_at??void 0,messageCount:t.message_count}}function d(t){i().prepare(`
1
+ import{n as i,p as u}from"./chunk-VARIYH6K.js";u();function c(t){return{id:t.id,status:t.status,source:{type:t.source_type,channelId:t.source_channel_id??void 0,chatId:t.source_chat_id??void 0},title:t.title??void 0,createdAt:t.created_at,lastActiveAt:t.last_active_at,archivedAt:t.archived_at??void 0,messageCount:t.message_count}}function d(t){i().prepare(`
2
2
  INSERT INTO chat_sessions (id, status, source_type, source_channel_id, source_chat_id,
3
3
  title, created_at, last_active_at, archived_at, message_count)
4
4
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
@@ -0,0 +1,14 @@
1
+ import{a as D,g as Be}from"./chunk-FMJVKJJE.js";import{a as Te}from"./chunk-A57SY3E4.js";import{b as ie}from"./chunk-PBKZDNNV.js";import{e as Re,i as nt}from"./chunk-3VUEB67V.js";import{b as pe,k as me,m as re,s as oe}from"./chunk-3R7VGMAK.js";import{a as Oe}from"./chunk-L7JP7DUO.js";import{c as $e}from"./chunk-3GK65T2V.js";import{b as Me}from"./chunk-TO27F23C.js";import{a as Ne,b as fe,c as De,k as Pe}from"./chunk-2WPUKCDA.js";import{D as ue,L as it,b as j,c as Ce,p as ot}from"./chunk-P76VP2UH.js";import{a as J,b as ee,d as _e,j as ae,l as be,n as ge,o as ke,r as tt}from"./chunk-ED2JAMEN.js";import{a as xe,b as te,c as we,d as ce,e as ve,f as de,j as Ee,l as Ae,n as K,p as le}from"./chunk-VARIYH6K.js";import{c as Z,h as Ie}from"./chunk-EZLBMUQD.js";import{c as Se,e as rt}from"./chunk-5M6IGE5G.js";it();nt();ot();import{createSdkMcpServer as Ft,tool as M}from"@anthropic-ai/claude-agent-sdk";import{z as d}from"zod";import{v4 as he}from"uuid";tt();Ie();le();var st=Z("audit");function I(t){try{K().prepare(`
2
+ INSERT INTO artifact_access_log (
3
+ timestamp, task_id, role_id, execution_id, step_id, tool, artifact_key, artifact_id,
4
+ size_bytes, outcome, error_reason
5
+ )
6
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
7
+ `).run(t.timestamp,t.taskId??null,t.roleId??null,t.executionId,t.stepId??null,t.tool,t.artifactKey??null,t.artifactId??null,t.sizeBytes??null,t.outcome,t.errorReason??null)}catch(e){st.error({err:e,entry:t},"Failed to write artifact access log")}}Ae();import{tool as q}from"@anthropic-ai/claude-agent-sdk";import{z as k}from"zod";import{v4 as at}from"uuid";function B(t){return{content:[{type:"text",text:JSON.stringify(t)}]}}var ct={query:k.string().describe("Search query for memory retrieval"),roleId:pe.optional().describe("Role ID to scope search (omit for cross-role)"),topK:k.number().optional().describe("Max results to return (default 5)")},dt={query:k.string().describe("Search query for memory retrieval"),topK:k.number().optional().describe("Max results to return (default 5)")},lt={id:k.string().optional().describe("Memory ID to update. Omit to create new."),roleId:pe.describe("Role ID to save memory under"),content:k.string().describe("Memory content text"),type:k.enum(["event","thought","reflection"]).optional().describe("Memory type (default: thought)"),keywords:k.array(k.string()).optional().describe("Keywords for BM25 search"),importance:k.number().min(1).max(5).optional().describe("Importance 1-5 (default: 3)"),tier:k.enum(["working","episodic","semantic"]).optional().describe("Memory tier (default: episodic)")},ut={id:k.string().optional().describe("Memory ID to update. Omit to create new."),content:k.string().describe("Memory content text"),type:k.enum(["event","thought","reflection"]).optional().describe("Memory type (default: thought)"),keywords:k.array(k.string()).optional().describe("Keywords for BM25 search"),importance:k.number().min(1).max(5).optional().describe("Importance 1-5 (default: 3)"),tier:k.enum(["working","episodic","semantic"]).optional().describe("Memory tier (default: episodic)")},ze={id:k.string().describe("Memory ID to delete")};async function Fe(t,e){let r=t??e.roleId,n=e.topK??5,a=await $e(r,e.query,{topK:n});return B({results:a.map(c=>({id:c.id,type:c.type,content:c.content,keywords:c.keywords,importance:c.importance,score:c.score}))})}async function Ke(t,e){let r=t??e.roleId;if(!r)return B({error:"roleId is required"});let n,a=!0;try{n=await Me(e.content)}catch{a=!1}if(e.id){let y=fe(e.id);if(!y)return B({error:`Memory ${e.id} not found`});let A=De(e.id,{content:e.content,embedding:n,keywords:e.keywords,importance:e.importance,type:e.type});return D({toolName:"save_memory",entityType:"memory",verb:"update",entityId:e.id,fieldChanges:[{path:"content",op:"set",before:y.content,after:e.content}],roleId:r}),B({id:e.id,action:"updated",success:A,embeddingUpdated:a})}let c=`mem-${at().slice(0,8)}`,m=Date.now();return Ne({id:c,roleId:r,type:e.type??"thought",content:e.content,embedding:n,keywords:e.keywords??[],importance:e.importance??3,sourceType:"manual",createdAt:m,lastAccessed:m,retrievedCount:0,tier:e.tier??"episodic"}),D({toolName:"save_memory",entityType:"memory",verb:"create",entityId:c,fieldChanges:[{path:"_entity",op:"set",before:null,after:{id:c,roleId:r,type:e.type??"thought",content:e.content.length>200?`${e.content.slice(0,200)}\u2026`:e.content,tier:e.tier??"episodic"}}],roleId:r}),B({id:c,action:"created",success:!0,embeddingUpdated:a})}async function Le(t,e){let r=fe(e.id);if(t){if(!r)return B({error:`Memory ${e.id} not found`});if(r.roleId!==t)return B({error:`Memory ${e.id} does not belong to this role`})}return Pe(e.id),D({toolName:"delete_memory",entityType:"memory",verb:"delete",entityId:e.id,fieldChanges:[{path:"_entity",op:"set",before:r?{id:r.id,roleId:r.roleId,content:r.content.length>200?`${r.content.slice(0,200)}\u2026`:r.content}:null,after:null}],roleId:t??r?.roleId}),B({id:e.id,deleted:!0})}function je(t){return t?[q("search_memories","Search agent memory using hybrid vector + keyword search. Returns scored memories ranked by relevance, recency, and importance.",dt,async e=>Fe(t,e)),q("save_memory","Create a new memory or update an existing one. Provide 'id' to update, omit to create. Embedding is auto-generated from content.",ut,async e=>Ke(t,e)),q("delete_memory","Delete a memory by ID.",ze,async e=>Le(t,e))]:[q("search_memories","Search agent memory using hybrid vector + keyword search. Returns scored memories ranked by relevance, recency, and importance.",ct,async e=>Fe(void 0,e)),q("save_memory","Create a new memory or update an existing one. Provide 'id' to update, omit to create. Embedding is auto-generated from content.",lt,async e=>Ke(void 0,e)),q("delete_memory","Delete a memory by ID.",ze,async e=>Le(void 0,e))]}Ae();import{basename as Y,join as Lt}from"path";import{writeFileSync as jt}from"fs";Ie();le();import{v4 as pt}from"uuid";function qe(t){let e=[];if(t.verb||e.push("verb is required"),t.entityType||e.push("entityType is required"),!t.expected)return e.push("expected is required"),{valid:!1,errors:e};let r=t.expected;if(r.kind==="outbound")r.target?.channelId||e.push("expected.target.channelId is required for outbound"),r.attachmentCount!==void 0&&(typeof r.attachmentCount!="number"||r.attachmentCount<0)&&e.push("expected.attachmentCount must be a non-negative number");else if(r.kind==="field_change")r.entityId||e.push("expected.entityId is required for field_change"),r.fieldPath||e.push("expected.fieldPath is required for field_change"),r.op!=="set"&&r.op!=="list_add"&&r.op!=="list_remove"&&e.push("expected.op must be 'set', 'list_add', or 'list_remove'"),r.op==="set"&&(r.after===void 0&&e.push("expected.after is required when op='set'"),(r.added!==void 0||r.removed!==void 0)&&e.push("expected.added/removed must be absent when op='set'")),r.op==="list_add"&&((!Array.isArray(r.added)||r.added.length===0)&&e.push("expected.added (non-empty array) is required when op='list_add'"),(r.after!==void 0||r.removed!==void 0)&&e.push("expected.after/removed must be absent when op='list_add'")),r.op==="list_remove"&&((!Array.isArray(r.removed)||r.removed.length===0)&&e.push("expected.removed (non-empty array) is required when op='list_remove'"),(r.after!==void 0||r.added!==void 0)&&e.push("expected.after/added must be absent when op='list_remove'"));else if(r.kind==="batch"){r.entityType||e.push("expected.entityType is required for batch");let n=Array.isArray(r.entityIds)&&r.entityIds.length>0,a=!!r.scope&&typeof r.scope.expectedCount=="number"&&r.scope.expectedCount>=0&&!!r.scope.filter;!n&&!a&&e.push("batch claims require entityIds (non-empty) or scope (with filter + non-negative expectedCount)")}else e.push(`expected.kind must be 'outbound', 'field_change', or 'batch'; got '${r.kind}'`);return{valid:e.length===0,errors:e}}var H=class extends Error{constructor(r){super(`Invalid claim spec: ${r.join("; ")}`);this.errors=r;this.name="InvalidClaimError"}errors};function He(t){if(!t.traceId)throw new H(["traceId is required"]);if(!Array.isArray(t.claims)||t.claims.length===0)throw new H(["claims must be a non-empty array"]);for(let[r,n]of t.claims.entries()){let a=qe(n);if(!a.valid)throw new H([`claims[${r}]: ${a.errors.join("; ")}`])}let e={id:t.id??pt(),traceId:t.traceId,sessionId:t.sessionId,taskId:t.taskId,sourceMessageId:t.sourceMessageId,claims:t.claims,declaredAt:t.declaredAt??Date.now()};return K().prepare(`
8
+ INSERT INTO assistant_claims (
9
+ id, trace_id, session_id, task_id, source_message_id, claims_json, declared_at
10
+ )
11
+ VALUES (?, ?, ?, ?, ?, ?, ?)
12
+ `).run(e.id,e.traceId,e.sessionId??null,e.taskId??null,e.sourceMessageId??null,JSON.stringify(e.claims),e.declaredAt),e}function dr(t){return K().prepare(`
13
+ SELECT * FROM assistant_claims WHERE trace_id = ? ORDER BY declared_at ASC
14
+ `).all(t).map(mt)}function mt(t){return{id:t.id,traceId:t.trace_id,sessionId:t.session_id??void 0,taskId:t.task_id??void 0,sourceMessageId:t.source_message_id??void 0,claims:JSON.parse(t.claims_json),declaredAt:t.declared_at}}rt();import{execFile as Ot}from"child_process";import{promisify as Nt}from"util";import{isAbsolute as Dt,basename as Pt}from"path";import Ye from"vm";import{isAbsolute as ft}from"path";var P=class extends Error{constructor(e,r){super(`DSL parse error in "${e}": ${r}`),this.name="DslParseError"}},ht=/^[a-z][a-z0-9_.]*$/i,yt=/\.\./;function V(t){if(!ht.test(t))throw new P(t,`invalid handler key format "${t}" \u2014 must match [a-z][a-z0-9_.]*`);if(yt.test(t))throw new P(t,'handler key must not contain ".."')}function Ue(t){let e=t.trim();try{let n=JSON.parse(e);if(typeof n=="number"||typeof n=="string"||typeof n=="boolean")return n}catch{}let r=parseFloat(e);return Number.isNaN(r)?e:r}var It=/^([a-z][a-z0-9_.]*)\s+matches\s+\/(.+)\/([gimsuy]*)$/i,_t=/^([a-z][a-z0-9_.]*)\s*(<=|>=|==|!=)\s*(.+)$/i,bt=/^([a-z][a-z0-9_.]*)\s*(<|>)\s*(.+)$/i,gt=/^([a-z][a-z0-9_.]*)\s+between\s+(-?\d+(?:\.\d+)?)\s+and\s+(-?\d+(?:\.\d+)?)$/i,kt=/^([a-z][a-z0-9_.]*)\s+in\s+\[([^\]]+)\]$/i;function We(t){if(typeof t=="object"&&t!==null&&"script"in t){let r=String(t.script);if(!ft(r))throw new P(`{script: "${r}"}`,"script path must be absolute");return{kind:"script",scriptPath:r}}if(typeof t!="string")throw new P(String(t),"assertion must be a string or {script: string} object");let e=t.trim();if(!e)throw new P(e,"empty assertion string");{let r=It.exec(e);if(r){let n=r[1];return V(n),{kind:"matches",key:n,regexSource:r[2],regexFlags:r[3]??""}}}{let r=gt.exec(e);if(r){let n=r[1];return V(n),{kind:"between",key:n,min:parseFloat(r[2]),max:parseFloat(r[3])}}}{let r=kt.exec(e);if(r){let n=r[1];V(n);let a=r[2],c=[];for(let m of a.split(",")){let y=m.trim();if(y)try{let A=JSON.parse(y);typeof A=="number"||typeof A=="string"||typeof A=="boolean"?c.push(A):c.push(y)}catch{c.push(y)}}return{kind:"in",key:n,values:c}}}{let r=_t.exec(e);if(r){let n=r[1];return V(n),{kind:"comparison",key:n,op:r[2],value:Ue(r[3])}}}{let r=bt.exec(e);if(r){let n=r[1];return V(n),{kind:"comparison",key:n,op:r[2],value:Ue(r[3])}}}throw new P(e,"unrecognized assertion syntax \u2014 expected key <op> value, between, in [...], matches /.../, or {script: ...}")}import{execFile as wt,spawn as vt}from"child_process";import{promisify as Et}from"util";import{readFile as X}from"fs/promises";import{existsSync as At}from"fs";import{createHash as St}from"crypto";function xt(t){return typeof t=="number"?Number.isInteger(t)?t.toString():t.toFixed(4):JSON.stringify(t)}var L=class extends Error{constructor(r){super(`NO_HANDLER: ${r}, install relevant capability or remove assertion`);this.handlerKey=r;this.name="NoHandlerError"}handlerKey},C=class extends Error{constructor(r,n,a){super(`ASSERTION_FAILED: ${r}=${xt(n)}, expected ${a}`);this.handlerKey=r;this.measured=n;this.expected=a;this.name="AssertionFailedError"}handlerKey;measured;expected},g=class extends Error{constructor(r,n){super(`HANDLER_RUNTIME_ERROR: ${r}: ${n}`);this.handlerKey=r;this.detail=n;this.name="HandlerRuntimeError"}handlerKey;detail};var Ct=Et(wt);function z(t,e){if(!At(e))throw new g(t,`file not found: ${e}`)}async function Tt(t){try{return await Ct("ffprobe",t,{maxBuffer:10*1024*1024})}catch(e){throw e.code==="ENOENT"?new g("audio.*","ffprobe not found on PATH \u2014 install ffmpeg/ffprobe"):new g("audio.*",`ffprobe failed: ${e.message}`)}}async function Je(t,e){return new Promise((r,n)=>{let a=[],c=vt("ffmpeg",["-v","error","-i",t,"-f","s16le","-ar",String(e),"-ac","1","-"]);c.stdout.on("data",y=>a.push(y));let m="";c.stderr.on("data",y=>{m+=y.toString()}),c.on("error",y=>{y.code==="ENOENT"?n(new g("audio.*","ffmpeg not found on PATH \u2014 install ffmpeg/ffprobe")):n(new g("audio.*",`ffmpeg failed: ${y.message}`))}),c.on("close",y=>{y!==0?n(new g("audio.*",`ffmpeg exit ${y}: ${m.trim()}`)):r(Buffer.concat(a))})})}var Ve=new Map;async function Rt(t){let e=JSON.stringify(t);if(/"\$ref"\s*:\s*"https?:\/\//.test(e))throw new g("json.schema_valid","remote $ref not supported in schema");let r=St("sha256").update(e).digest("hex"),n=Ve.get(r);if(n)return n;let a=(await import("ajv")).default,m=new a({strict:!1,allErrors:!1}).compile(t);return Ve.set(r,m),m}var Xe={"audio.duration_s":async t=>{z("audio.duration_s",t);let{stdout:e}=await Tt(["-v","error","-show_entries","format=duration","-of","default=noprint_wrappers=1:nokey=1",t]),r=parseFloat(e.trim());if(!Number.isFinite(r))throw new g("audio.duration_s",`ffprobe returned non-numeric duration: ${e.trim()}`);return r},"audio.zc_rate_per_s":async t=>{z("audio.zc_rate_per_s",t);let e=24e3,r=await Je(t,e),n=new Int16Array(r.buffer,r.byteOffset,r.byteLength/2),a=0;for(let m=1;m<n.length;m++)n[m-1]>=0!=n[m]>=0&&a++;let c=n.length/e;return c>0?a/c:0},"audio.rms":async t=>{z("audio.rms",t);let r=await Je(t,24e3),n=new Int16Array(r.buffer,r.byteOffset,r.byteLength/2),a=0;for(let c=0;c<n.length;c++){let m=n[c]/32768;a+=m*m}return n.length>0?Math.sqrt(a/n.length):0},"markdown.word_count":async t=>{z("markdown.word_count",t);let e=await X(t,"utf-8");return e.trim().length===0?0:e.trim().split(/\s+/).length},"image.width_px":async t=>{z("image.width_px",t);let{imageSize:e}=await import("image-size"),r=await X(t),n=e(r);if(typeof n.width!="number")throw new g("image.width_px","could not determine image width");return n.width},"image.height_px":async t=>{z("image.height_px",t);let{imageSize:e}=await import("image-size"),r=await X(t),n=e(r);if(typeof n.height!="number")throw new g("image.height_px","could not determine image height");return n.height},"pdf.page_count":async t=>{z("pdf.page_count",t);let{PDFDocument:e}=await import("pdf-lib"),r=await X(t);return(await e.load(r,{ignoreEncryption:!0})).getPageCount()},"json.schema_valid":async(t,e)=>{if(z("json.schema_valid",t),!e||typeof e!="object"||!("schema"in e))throw new g("json.schema_valid","missing schema arg");let r=await Rt(e.schema),n=await X(t,"utf-8"),a;try{a=JSON.parse(n)}catch(c){throw new g("json.schema_valid",`file is not valid JSON: ${c.message}`)}return r(a)===!0}};var Mt=Nt(Ot);async function Ge(t,e,r={}){let n=r.handlerRegistry??Xe;for(let a=0;a<e.length;a++){let c=e[a],m=We(c);if(m.kind==="script"){await Bt(m.scriptPath,t);continue}let y=n[m.key];if(!y)throw new L(m.key);let A=r.handlerArgsByIndex?.[a],i=await y(t,A);$t(m,i)}}function $t(t,e){switch(t.kind){case"comparison":{let{key:r,op:n,value:a}=t,c=!1;if(n==="<"?c=e<a:n===">"?c=e>a:n==="<="?c=e<=a:n===">="?c=e>=a:n==="=="?c=e==a:n==="!="&&(c=e!=a),!c)throw new C(r,e,`${n} ${a}`);break}case"between":{let{key:r,min:n,max:a}=t;if(e<n||e>a)throw new C(r,e,`between ${n} and ${a}`);break}case"in":{let{key:r,values:n}=t;if(!n.includes(e))throw new C(r,e,`in [${n.join(", ")}]`);break}case"matches":{let{key:r,regexSource:n,regexFlags:a}=t;if(!zt(String(e),n,a,100))throw new C(r,e,`matches /${n}/${a}`);break}}}async function Bt(t,e){if(!Dt(t))throw new g("script",`script path must be absolute: ${t}`);try{await Mt(t,[e],{timeout:6e4,maxBuffer:1024*1024})}catch(r){let n=r;if(n.code==="ENOENT")throw new g("script",`script not found: ${t}`);let a=n.exitCode;throw new C("script:"+Pt(t),a??"error",n.stderr?.trim()??n.message)}}function zt(t,e,r,n){let a={value:t,regex:new RegExp(e,r),result:!1};Ye.createContext(a);try{return Ye.runInContext("result = regex.test(value)",a,{timeout:n}),a.result}catch(c){throw new g("matches",`regex evaluation timeout or error: ${c.message}`)}}le();var Kt="execution-tools",Pr="mcp__execution-tools__",Mr=["mcp__execution-tools__write_artifact","mcp__execution-tools__publish_artifact_file","mcp__execution-tools__send_to_channel","mcp__execution-tools__report_blocked","mcp__execution-tools__commit_claim","mcp__execution-tools__save_memory","mcp__execution-tools__delete_memory"],$r=["mcp__execution-tools__list_channels","mcp__execution-tools__read_artifact","mcp__execution-tools__fetch_artifact_file","mcp__execution-tools__list_artifacts","mcp__execution-tools__search_memories"],Br=["mcp__execution-tools__write_artifact","mcp__execution-tools__publish_artifact_file","mcp__execution-tools__send_to_channel","mcp__execution-tools__report_blocked","mcp__execution-tools__commit_claim","mcp__execution-tools__save_memory","mcp__execution-tools__delete_memory","mcp__execution-tools__list_channels","mcp__execution-tools__read_artifact","mcp__execution-tools__fetch_artifact_file","mcp__execution-tools__list_artifacts","mcp__execution-tools__search_memories"],U=Z("execution"),qt=/^[\p{L}0-9._-]{1,256}$/u,Ht=/^[\p{L}0-9._-]{1,128}$/u,ne=256*1024,Qe=/^[a-z]+\/[a-z0-9.+-]+$/;async function Ut(t){let{listChannels:e}=await import("./channels-VYNJFXDD.js"),r=e(),{listSessions:n}=await import("./session-manager-HO2ZCB47.js"),a=[...n("active"),...n("archived")],{getDefaultChatIdForChannel:c}=await import("./target-resolution-RLNUCT6M.js"),m=r.find(A=>A.name.toLowerCase().includes(t.toLowerCase()));if(!m)return null;let y=c(m,a)??"";return{channelId:m.id,chatId:y}}function l(t){return{content:[{type:"text",text:JSON.stringify(t)}]}}function se(t){return qt.test(t)?null:"Invalid artifact key. Use only letters, numbers, dot, underscore, or dash (1-256 chars)."}function ye(t){return Ht.test(t)?null:"Invalid stepId format. Use only letters, numbers, dot, underscore, or dash (1-128 chars)."}function Ze(t,e,r){return t!==e?t:Y(r)}function et(t,e){let r=ie(t);if(!r)return null;let n=oe(r.templateId);return n?n.steps.find(m=>m.id===e)?.outputAs??null:null}var Wt=t=>{if(!t)return!1;let e=j(t);return!!(e?.parentId&&e.templateId&&e.stepId)};function co(t,e,r){let n=t?ue(t):void 0,a=r??(()=>{}),c=async()=>{if(!e)return{error:"artifact tools require a task context"};let i=j(e);if(!i)return{error:`task not found: ${e}`};let o=i.roleId??t;if(!o)return{error:"this template execution task has no role context"};let p=ue(o);return p?{taskId:e,roleId:o,roleWorkspacePath:Re(p.name)}:{error:`role not found: ${o}`}},m=async()=>{let i=await c();if("error"in i)return i;let o=j(i.taskId);return o.parentId?o.stepId?{executionId:o.parentId,stepId:o.stepId,roleId:i.roleId,roleWorkspacePath:i.roleWorkspacePath,taskId:i.taskId}:{error:"this task is not a TemplateExecution step (no step_id)"}:{error:"this task is not a TemplateExecution step (no execution context)"}},y=[...je(t),M("list_channels","List all available channels. Use this to discover what channels can be used with send_to_channel.",{},async()=>{let{listChannels:i}=await import("./channels-VYNJFXDD.js"),o=i();return l({channels:o.map(p=>({id:p.id,name:p.name,enabled:p.enabled,type:p.config?.type??"unknown"}))})}),M("send_to_channel","Send a message to a connected channel by name. This role can only send to channels in its allowedChannels list (if configured).",{channelName:d.string().describe("The channel name, e.g., 'WeChat on iPad' or 'Client Mail'"),message:d.string().describe("The message content to send")},async i=>{if(n?.allowedChannels!==void 0){if(n.allowedChannels.length===0)return l({error:"This role is not allowed to send to any channels"});if(!n.allowedChannels.some(u=>u.toLowerCase()===i.channelName.toLowerCase()))return l({error:`Channel "${i.channelName}" is not in the allowed channels list for this role`})}let o=await Ut(i.channelName);if(!o)return l({error:`Channel "${i.channelName}" not found or has no chatId available`});let{getOutboundGateway:p}=await import("./outbound-gateway-O27KKVOI.js"),s=await p().send({channelId:o.channelId,chatId:o.chatId,content:i.message,messageType:"reply"});return l({success:s.success,channelName:i.channelName})}),M("write_artifact","Persist a small structured value (JSON <= 256KB) for downstream TemplateExecution steps to read. USE THIS for: extracted fields, status flags, URL lists, summaries, structured key-value data. Do NOT use for: files (audio, video, reports). For files use publish_artifact_file instead.",{key:d.string().describe("Artifact key \u2014 a unique identifier for this value within the template execution."),value:d.unknown().describe("The JSON value to persist (must be <= 256KB serialized)."),priority:d.number().int().min(0).max(1e3).optional().describe("Lower = higher priority for delivery packing. Use 10 for primary deliverables (audio/video), 50 for text/markdown, 100 for images. Omit to use server-side heuristic.")},async i=>{let o=await m();if("error"in o)return l({error:o.error});if(i.priority!==void 0&&(i.priority<0||i.priority>1e3||!Number.isInteger(i.priority)))return l({error:`Invalid priority: ${i.priority}. Must be an integer between 0 and 1000.`});let p=se(i.key);if(p)return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"write_artifact",artifactKey:i.key,outcome:"denied",errorReason:p}),l({error:p});let x=et(o.executionId,o.stepId),s=ie(o.executionId),h=s?oe(s.templateId):null,u=h?h.steps.some(_=>_.id===o.stepId):!1,w=i.key,$,G=h!=null&&h.steps.some(_=>!!_.outputAs);if(x===null&&u&&G){let _=`Step "${o.stepId}" in template "${s.templateId}" has no outputAs declared. This template must be migrated before its steps can publish artifacts. Operator action required: run \`pnpm tsx scripts/migrate-all-templates-outputAs.ts --apply\` from the project root, or have the operator ask ChatManager in chat to upgrade the template.`;return U.warn({taskId:o.taskId,stepId:o.stepId,templateId:s.templateId},"write_artifact: step has no outputAs in migrated template"),I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"write_artifact",artifactKey:i.key,outcome:"denied",errorReason:_}),l({error:_})}x&&i.key!==x&&(w=x,$=`key '${i.key}' replaced with step.outputAs '${x}'`,U.warn({taskId:o.taskId,llmKey:i.key,outputAs:x},"write_artifact: server key override"));let Q=h?.steps?.find(_=>_.id===o.stepId),T=Q?Be(Q,i.value):!1;try{let _=he(),v,S;if(T){let R=i.value;if(v=Buffer.byteLength(R,"utf8"),v>ne){let O=`Artifact text exceeds ${ne} bytes`;return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"write_artifact",artifactKey:i.key,sizeBytes:v,outcome:"denied",errorReason:O}),l({error:O})}S=Lt(xe(o.executionId),`${_}.bin`),jt(S,R,"utf8")}else{let R=JSON.stringify(i.value);if(v=Buffer.byteLength(R,"utf8"),v>ne){let O=`Artifact JSON exceeds ${ne} bytes`;return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"write_artifact",artifactKey:i.key,sizeBytes:v,outcome:"denied",errorReason:O}),l({error:O})}}return J({id:_,sourceKind:"template_step",executionId:o.executionId,stepId:o.stepId,key:w,...T?{kind:"file",blobPath:S,mime:"text/markdown",originalFilename:`${w}.md`}:{kind:"json",value:i.value},sizeBytes:v,createdAt:Date.now(),roleId:o.roleId,priority:i.priority}),D({toolName:"write_artifact",entityType:"artifact",verb:"create",entityId:_,fieldChanges:[{path:"_entity",op:"set",before:null,after:{artifactId:_,key:w,kind:T?"file":"json",taskId:o.taskId}}],taskId:o.taskId,roleId:o.roleId}),I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"write_artifact",artifactKey:w,artifactId:_,sizeBytes:v,outcome:"success"}),l({success:!0,artifactId:_,sizeBytes:v,...$?{note:$}:{}})}catch(_){let v=_ instanceof Error?_.message:String(_);return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"write_artifact",artifactKey:i.key,outcome:"error",errorReason:v}),l({error:v})}}),M("read_artifact","Read a structured value previously written by an upstream step's write_artifact. Returns the JSON value. For files, use fetch_artifact_file instead.",{stepId:re.describe("TemplateExecution step ID of the artifact's source step."),key:d.string().describe("Artifact key \u2014 a unique identifier for this value within the template execution.")},async i=>{let o=await m();if("error"in o)return l({error:o.error});let p=ye(i.stepId),x=se(i.key),s=p??x;if(s)return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"read_artifact",artifactKey:i.key,outcome:"denied",errorReason:s}),l({error:s});let h=ee(o.executionId,i.stepId,i.key);if(!h){let u=`no artifact at ${i.stepId}/${i.key}`;return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"read_artifact",artifactKey:i.key,outcome:"error",errorReason:u}),l({error:u})}if(h.kind!=="json"){let u="artifact is a file; use fetch_artifact_file";return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"read_artifact",artifactKey:i.key,artifactId:h.id,sizeBytes:h.sizeBytes,outcome:"denied",errorReason:u}),l({error:u})}return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"read_artifact",artifactKey:i.key,artifactId:h.id,sizeBytes:h.sizeBytes,outcome:"success"}),l({value:h.value,sizeBytes:h.sizeBytes})}),M("publish_artifact_file",'REQUIRED final action for any TemplateExecution step that produces a file deliverable. If your step declares outputAs and you finish work (writing audio/video/report/image to disk via Write, Edit, or Bash) WITHOUT calling this tool, the step is marked FAILED \u2014 downstream steps and delivery rules will not see your file, regardless of whether your work succeeded. "I wrote a file to my workspace" is NOT the same as "I published an artifact": the file must be registered through this call to count. Call this AFTER the file is fully written to disk, BEFORE ending your turn. The file is COPIED to template execution shared storage. USE for: generated audio, video, reports, images, large outputs. Do NOT use for small structured JSON values (<=256KB) \u2014 use write_artifact instead. sourcePath must be inside your role workspace (~/.adam/roles/<your-role>/...); if your file was written to an additionalDirectories location (InfoHub/PKOS/Code/etc.), Bash-copy it into the workspace first then publish from there. cleanup=true deletes the source after publish \u2014 only set when you no longer need the source file (the step becomes non-retryable through publish).',{key:d.string().describe("Artifact key \u2014 a unique identifier for this value within the template execution."),sourcePath:me.describe("Source file path in the Role workspace to publish as a TemplateExecution artifact."),mime:d.string().optional().describe("MIME type of the file (e.g., 'image/png', 'audio/mp3'). Auto-detected if omitted."),cleanup:d.boolean().optional().describe("If true, delete the source file after publishing. Only use when the source file is no longer needed."),priority:d.number().int().min(0).max(1e3).optional().describe("Lower = higher priority for delivery packing. Use 10 for primary deliverables (audio/video), 50 for text/markdown, 100 for images. Omit to use server-side heuristic."),role:d.string().optional().describe("Logical artifact role. REQUIRED when the step's outputContract declares expectedArtifacts \u2014 use one of the declared roles (e.g. 'podcast', 'song'). Publishing more than the declared count for a role, or an undeclared role, is rejected.")},async i=>{let o=await c();if("error"in o)return l({error:o.error});if(i.priority!==void 0&&(i.priority<0||i.priority>1e3||!Number.isInteger(i.priority)))return l({error:`Invalid priority: ${i.priority}. Must be an integer between 0 and 1000.`});let p=j(o.taskId);if(!!!(p.parentId&&p.templateId&&p.stepId)){if(i.mime&&!Qe.test(i.mime))return l({error:`Invalid MIME type: ${i.mime}`});try{te(i.sourcePath,o.roleWorkspacePath,!0)}catch(b){return l({error:b instanceof Error?b.message:String(b)})}let f=he(),E=null,N=!1;try{let b=Ee({kind:"task",artifactId:f,sourcePath:i.sourcePath});E=b.blobPath;let W={id:f,sourceKind:"task_published",taskId:o.taskId,roleId:o.roleId,kind:"file",blobPath:E,mime:i.mime,originalFilename:Y(i.sourcePath),sizeBytes:b.sizeBytes,createdAt:Date.now(),priority:i.priority};return J(W),N=!0,i.cleanup===!0&&ce(i.sourcePath),D({toolName:"publish_artifact_file",entityType:"artifact",verb:"create",entityId:f,fieldChanges:[{path:"_entity",op:"set",before:null,after:{artifactId:f,kind:"file",filename:Y(i.sourcePath),taskId:o.taskId,sourceKind:"task_published"}}],taskId:o.taskId,roleId:o.roleId}),U.info({taskId:o.taskId,roleId:o.roleId,artifactId:f,sizeBytes:b.sizeBytes},"publish_artifact_file task_published: success"),l({success:!0,artifactId:f,sizeBytes:b.sizeBytes})}catch(b){if(N)try{ae(f)}catch{}if(E)try{de(E)}catch{}let W=b instanceof Error?b.message:String(b);return U.warn({taskId:o.taskId,roleId:o.roleId,artifactId:f,err:b},"publish_artifact_file task_published: failed"),l({error:W})}}let s={executionId:p.parentId,stepId:p.stepId,roleId:o.roleId,roleWorkspacePath:o.roleWorkspacePath,taskId:o.taskId},h=se(i.key);if(h)return I({timestamp:Date.now(),taskId:s.taskId,roleId:s.roleId,executionId:s.executionId,stepId:s.stepId,tool:"publish_artifact_file",artifactKey:i.key,outcome:"denied",errorReason:h}),l({error:h});if(i.mime&&!Qe.test(i.mime)){let f=`Invalid MIME type: ${i.mime}`;return I({timestamp:Date.now(),taskId:s.taskId,roleId:s.roleId,executionId:s.executionId,stepId:s.stepId,tool:"publish_artifact_file",artifactKey:i.key,outcome:"denied",errorReason:f}),l({error:f})}let u=et(s.executionId,s.stepId),w=ie(s.executionId),$=w?oe(w.templateId):null,G=$?$.steps.find(f=>f.id===s.stepId)??null:null,Q=G!=null,T=i.key,_,v=$!=null&&$.steps.some(f=>!!f.outputAs);if(u===null&&Q&&v){let f=`Step "${s.stepId}" in template "${w.templateId}" has no outputAs declared. This template must be migrated before its steps can publish artifacts. Operator action required: run \`pnpm tsx scripts/migrate-all-templates-outputAs.ts --apply\` from the project root, or have the operator ask ChatManager in chat to upgrade the template.`;return U.warn({taskId:s.taskId,stepId:s.stepId,templateId:w.templateId},"publish_artifact_file: step has no outputAs in migrated template"),I({timestamp:Date.now(),taskId:s.taskId,roleId:s.roleId,executionId:s.executionId,stepId:s.stepId,tool:"publish_artifact_file",artifactKey:i.key,outcome:"denied",errorReason:f}),l({error:f})}u&&i.key!==u&&(T=u,_=`key '${i.key}' replaced with step.outputAs '${u}'`,U.warn({taskId:s.taskId,llmKey:i.key,outputAs:u},"publish_artifact_file: server key override"));try{te(i.sourcePath,s.roleWorkspacePath,!0)}catch(f){let E=f instanceof Error?f.message:String(f);return I({timestamp:Date.now(),taskId:s.taskId,roleId:s.roleId,executionId:s.executionId,stepId:s.stepId,tool:"publish_artifact_file",artifactKey:T,outcome:"denied",errorReason:E}),l({error:E})}let S=he(),R=null,O=!1,F=null;try{let f=we({executionId:s.executionId,artifactId:S,sourcePath:i.sourcePath});R=f.blobPath;let E=G?.assertions??[];E.length>0&&await Ge(R,E);let N={id:S,sourceKind:"template_step",executionId:s.executionId,stepId:s.stepId,key:T,kind:"file",blobPath:R,mime:i.mime,originalFilename:Y(i.sourcePath),sizeBytes:f.sizeBytes,createdAt:Date.now(),roleId:s.roleId,priority:i.priority,...i.role!==void 0?{artifactRole:i.role}:{}};if(u&&v){let b=ee(s.executionId,s.stepId,u);if(!b)J(N),O=!0,F=N;else if(b.kind==="file")F=ke(s.executionId,s.stepId,u,b,{...N,key:Ze(i.key,u,i.sourcePath)}).childArtifact;else if(b.kind==="json"&&be(b.value))F=ge(s.executionId,s.stepId,u,{...N,key:Ze(i.key,u,i.sourcePath)}).childArtifact;else throw new Error(`Artifact key "${u}" already contains a non-collection JSON artifact`)}else J(N),O=!0,F=N;return i.cleanup===!0&&ce(i.sourcePath),D({toolName:"publish_artifact_file",entityType:"artifact",verb:"create",entityId:S,fieldChanges:[{path:"_entity",op:"set",before:null,after:{artifactId:S,key:F?.key??T,kind:"file",filename:Y(i.sourcePath),taskId:s.taskId}}],taskId:s.taskId,roleId:s.roleId}),I({timestamp:Date.now(),taskId:s.taskId,roleId:s.roleId,executionId:s.executionId,stepId:s.stepId,tool:"publish_artifact_file",artifactKey:F?.key??T,artifactId:S,sizeBytes:f.sizeBytes,outcome:"success"}),l({success:!0,artifactId:S,sizeBytes:f.sizeBytes,..._?{note:_}:{}})}catch(f){if(O)try{ae(S)}catch{}if(R&&(!F||O))try{de(R)}catch{}let E=f instanceof Error?f.message:String(f);if(I({timestamp:Date.now(),taskId:s.taskId,roleId:s.roleId,executionId:s.executionId,stepId:s.stepId,tool:"publish_artifact_file",artifactKey:T,artifactId:S,outcome:"error",errorReason:E}),f instanceof C||f instanceof L)try{let b=(K().prepare("SELECT COUNT(*) as n FROM step_logs WHERE task_id = ?").get(s.taskId)?.n??0)+1;Te({id:`step-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,taskId:s.taskId,index:b,type:"validator_error",content:f.message,toolName:"publish_artifact_file",timestamp:Date.now()})}catch{}return l({error:E})}}),M("fetch_artifact_file","Copy an upstream step's published file into your current Role workspace. Use this when an earlier step published audio, video, reports, or other files you need to process.",{stepId:re.describe("TemplateExecution step ID of the artifact's source step."),key:d.string().describe("Artifact key \u2014 a unique identifier for this value within the template execution."),destPath:me.describe("Destination path in the Role workspace where the file will be copied.")},async i=>{let o=await m();if("error"in o)return l({error:o.error});let p=ye(i.stepId),x=se(i.key),s=p??x;if(s)return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"fetch_artifact_file",artifactKey:i.key,outcome:"denied",errorReason:s}),l({error:s});try{te(i.destPath,o.roleWorkspacePath,!1)}catch(u){let w=u instanceof Error?u.message:String(u);return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"fetch_artifact_file",artifactKey:i.key,outcome:"denied",errorReason:w}),l({error:w})}let h=ee(o.executionId,i.stepId,i.key);if(!h){let u=`no artifact at ${i.stepId}/${i.key}`;return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"fetch_artifact_file",artifactKey:i.key,outcome:"error",errorReason:u}),l({error:u})}if(h.kind!=="file"||!h.blobPath){let u="artifact is not a file";return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"fetch_artifact_file",artifactKey:i.key,artifactId:h.id,outcome:"denied",errorReason:u}),l({error:u})}try{let u=ve({blobPath:h.blobPath,destPath:i.destPath});return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"fetch_artifact_file",artifactKey:i.key,artifactId:h.id,sizeBytes:u.sizeBytes,outcome:"success"}),l({success:!0,sizeBytes:u.sizeBytes,mime:h.mime,destPath:i.destPath})}catch(u){let w=u instanceof Error?u.message:String(u);return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"fetch_artifact_file",artifactKey:i.key,artifactId:h.id,outcome:"error",errorReason:w}),l({error:w})}}),M("list_artifacts","Discover artifacts published by upstream steps in this template execution. Returns step_id, key, kind ('json' or 'file'), size, mime. Use this to learn what is available before calling read_artifact or fetch_artifact_file.",{stepId:re.optional().describe("Filter to a specific TemplateExecution step (omit to list all artifacts in the execution).")},async i=>{let o=await m();if("error"in o)return l({error:o.error});let p=i.stepId?ye(i.stepId):null;if(p)return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"list_artifacts",outcome:"denied",errorReason:p}),l({error:p});let x=_e(o.executionId,i.stepId);return I({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"list_artifacts",sizeBytes:x.length,outcome:"success"}),l({artifacts:x.map(s=>({id:s.id,stepId:s.stepId,key:s.key,kind:s.kind,sizeBytes:s.sizeBytes,mime:s.mime,createdAt:s.createdAt}))})}),M("report_blocked","Report that the task cannot proceed due to a missing prerequisite (e.g., missing credential, missing input, missing target). This sets the task status to 'blocked', stores the reason for the UI to display, and aborts the execution loop.",{reason:d.string().describe("Short reason, e.g. 'missing_credential', 'missing_target', 'missing_input'"),missingPrereqs:d.array(d.string()).optional().describe("Specific keys/IDs that are missing, e.g. ['MINIMAX_API_KEY']"),resumeHint:d.string().optional().describe("How the user can unblock, e.g. 'set MINIMAX_API_KEY in role env'")},async i=>{if(!e)return l({error:"report_blocked requires a task context (taskId not available)"});let o=j(e);if(!o)return l({error:`task not found: ${e}`});let p={reason:i.reason,missingPrereqs:i.missingPrereqs,resumeHint:i.resumeHint};return Ce(e,{status:"blocked",blockReason:p,completedAt:Date.now()}),Oe.emit({type:"task_status_change",taskId:e,oldStatus:o.status,newStatus:"blocked"}),D({toolName:"report_blocked",entityType:"task",verb:"update",entityId:e,fieldChanges:[{path:"status",op:"set",before:o.status,after:"blocked"},{path:"blockReason",op:"set",before:void 0,after:i.reason},{path:"completedAt",op:"set",before:void 0,after:Date.now()}],taskId:e,roleId:o.roleId}),a(),l({success:!0,blocked:!0,reason:i.reason})}),M("commit_claim","Declare structured claims about what this worker task just did so the audit engine can verify against effect receipts. Call this in the SAME task turn before reporting completion text. Mirror of the ChatManager tool \u2014 workers may also need to declare claims for actions taken inside template execution steps.",{claims:d.array(d.object({verb:d.string().min(1).describe("What was done: 'send', 'update', 'create', 'delete', 'cancel', 'enable', 'disable', 'bind', 'unbind', etc."),entityType:d.string().min(1).describe("What kind of thing was affected: 'channel_message', 'task_template', 'task', 'goal', 'role', 'delivery_rule', 'plugin', 'mcp_binding', 'config_field', etc."),expected:d.discriminatedUnion("kind",[d.object({kind:d.literal("outbound").describe("Used when verb='send' \u2014 declares a channel message was sent."),target:d.object({channelId:d.string().min(1).describe("Channel that received the message."),chatId:d.string().min(1).optional().describe("Specific chat within the channel; omit for any chat.")}).describe("Where the message went."),attachmentCount:d.number().int().min(0).optional().describe("How many attachments were sent. Verifier requires receipt.attachmentCount >= this."),textPresent:d.boolean().optional().describe("Whether the message body had non-empty text. Verifier requires receipt.textChars > 0 when true.")}),d.object({kind:d.literal("field_change").describe("Used for single-entity updates \u2014 declares a specific field on a specific entity changed."),entityId:d.string().min(1).describe("Identifier of the entity that was changed."),fieldPath:d.string().min(1).describe("Dotted path to the field that changed, e.g. 'deliverTo', 'cron', 'config.timeout'."),op:d.enum(["set","list_add","list_remove"]).describe("How the field changed: scalar set, list append, or list removal."),added:d.array(d.unknown()).min(1).optional().describe("Items appended when op='list_add'. Verifier accepts a superset (receipt may have appended more items)."),removed:d.array(d.unknown()).min(1).optional().describe("Items removed when op='list_remove'. Verifier accepts a superset."),after:d.unknown().optional().describe("New value when op='set'. Verifier requires deep-equal match.")}),d.object({kind:d.literal("batch").describe("Used for batch operations like cancel-many or delete-many."),entityType:d.string().min(1).describe("Restrict matching to this entity type."),entityIds:d.array(d.string()).min(1).optional().describe("Specific entity IDs affected. Verifier checks receipt.entityIds is a superset."),scope:d.object({filter:d.string().min(1).describe("Free-text description of the filter applied (e.g., 'status=running AND role_id=role-x'). Verifier ignores this; human-readable only."),expectedCount:d.number().int().min(0).describe("Minimum number of entities expected to have been affected. Verifier requires receipt.scope.matchedCount >= this.")}).optional().describe("Filter+count for scope-based batches when individual IDs aren't enumerated.")})]).describe("Structured expectation matched against effect_receipts. Pick the kind that fits the action."),note:d.string().optional().describe("Free-text human note kept in the audit log only. Verifier ignores this.")})).min(1).max(20).describe("One or more claims declaring exactly what just happened. Each claim is verified independently against receipts.")},async i=>{let o=Se();if(!o)return l({error:"commit_claim requires an active trace context"});try{let p=He({traceId:o,taskId:e,claims:i.claims});return l({claimRowId:p.id,claimsCount:p.claims.length,declaredAt:p.declaredAt})}catch(p){let x=p instanceof Error?p.message:String(p);return l({error:x})}})],A=Wt(e)?y.filter(i=>i.name!=="list_channels"&&i.name!=="send_to_channel"):y;return Ft({name:Kt,version:"1.0.0",tools:A})}export{je as a,He as b,dr as c,Xe as d,Kt as e,Pr as f,Mr as g,$r as h,Br as i,qt as j,co as k};
@@ -0,0 +1,2 @@
1
+ import{d as O}from"./chunk-OH6VBBDV.js";import{c as A,h as B}from"./chunk-EZLBMUQD.js";B();import*as c from"fs";import*as a from"path";import{homedir as R}from"os";import{createRequire as _}from"module";var k=A("embedding"),L=512,N=a.join(R(),".adam","models"),T={"bge-small-zh-v1.5":{repo:"Xenova/bge-small-zh-v1.5",onnxFile:"onnx/model.onnx",tokenizerFile:"tokenizer.json",dim:512},"paraphrase-multilingual-MiniLM-L12-v2":{repo:"Xenova/paraphrase-multilingual-MiniLM-L12-v2",onnxFile:"onnx/model.onnx",tokenizerFile:"tokenizer.json",dim:384}},S="bge-small-zh-v1.5",C="https://huggingface.co",y=null,j=null,I=null,M=!1,x=null;function E(){try{return O().memory?.embeddingModel??S}catch{return S}}function D(){let o=E();return T[o]??T[S]}function z(){let o=D(),e=a.join(N,o.repo.replace("/","_"));return c.existsSync(e)||c.mkdirSync(e,{recursive:!0}),e}async function v(o,e){if(c.existsSync(e))return;k.info({file:a.basename(e)},"Downloading model file");let t=await fetch(o);if(!t.ok)throw new Error(`Failed to download ${o}: ${t.status}`);let n=Buffer.from(await t.arrayBuffer());c.mkdirSync(a.dirname(e),{recursive:!0}),c.writeFileSync(e,n),k.info({file:a.basename(e),sizeMb:(n.length/1024/1024).toFixed(1)},"Downloaded")}async function $(){let o=D(),e=z(),t=a.join(e,"model.onnx"),n=a.join(e,"tokenizer.json"),i=`${C}/${o.repo}/resolve/main`;return await v(`${i}/${o.onnxFile}`,t),await v(`${i}/${o.tokenizerFile}`,n),{modelPath:t,tokenizerPath:n}}function P(){let o=_(import.meta.url),e=o.resolve("onnxruntime-web"),t=a.dirname(e),n=o(a.join(t,"ort.all.min.js"));return n.env.wasm.wasmPaths=t+"/",n}async function q(){if(M)throw x??new Error("Embedding session unavailable.");if(y&&j){let t=P(),n=z();return{session:y,ort:t,tokenizerPath:a.join(n,"tokenizer.json")}}if(I||(I=(async()=>{try{let{modelPath:t,tokenizerPath:n}=await $(),i=P();k.info({model:E()},"Loading ONNX inference session");let s=c.readFileSync(t),l=s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength);y=await i.InferenceSession.create(l,{executionProviders:["wasm"]}),j=JSON.parse(c.readFileSync(n,"utf-8")),k.info({model:E()},"Embedding session ready")}catch(t){throw M=!0,x=t instanceof Error?t:new Error(String(t)),k.warn({err:t},"Embedding session failed to load"),x}})()),await I,!y)throw x??new Error("Embedding session unavailable.");let o=P(),e=z();return{session:y,ort:o,tokenizerPath:a.join(e,"tokenizer.json")}}function X(o){let e=[];for(let t of o){let n=t.codePointAt(0)??0;if(n===0||n===65533)continue;if(new RegExp("^\\p{Cc}|\\p{Cf}","u").test(t)){(t===" "||t===`
2
+ `||t==="\r")&&e.push(" ");continue}n>=19968&&n<=40959||n>=13312&&n<=19903||n>=131072&&n<=173791||n>=173824&&n<=177983||n>=177984&&n<=178207||n>=178208&&n<=183983||n>=63744&&n<=64255||n>=194560&&n<=195103?e.push(" ",t," "):e.push(t)}return e.join("")}function G(o){let e=o.codePointAt(0)??0;return e>=33&&e<=47||e>=58&&e<=64||e>=91&&e<=96||e>=123&&e<=126?!0:new RegExp("^\\p{P}","u").test(o)}function U(o){let e=[];for(let t of o.split(/\s+/)){if(!t)continue;let n=[];for(let i of t)G(i)?(n.length>0&&(e.push(n.join("")),n=[]),e.push(i)):n.push(i);n.length>0&&e.push(n.join(""))}return e}function H(o,e,t){let n=Array.from(o);if(n.length>100)return[t];let i=[],s=0;for(;s<n.length;){let l=n.length,u=!1;for(;l>s;){let h=n.slice(s,l).join(""),d=s===0?h:"##"+h;if(d in e){i.push(e[d]),s=l,u=!0;break}l--}if(!u)return[t]}return i}function J(o,e,t=512){let n=e["[CLS]"]??101,i=e["[SEP]"]??102,s=e["[UNK]"]??100,l=e["[PAD]"]??0,u=X(o),h=U(u),d=[];for(let r of h){let b=H(r,e,s);d.push(...b)}let F=d.slice(0,t-2),w=[n,...F,i],m=w.length,f=new BigInt64Array(t),p=new BigInt64Array(t),g=new BigInt64Array(t);for(let r=0;r<t;r++)r<m?(f[r]=BigInt(w[r]),p[r]=1n):(f[r]=BigInt(l),p[r]=0n),g[r]=0n;return{inputIds:f,attentionMask:p,tokenTypeIds:g}}async function V(o){let{session:e,ort:t}=await q(),n=j.model.vocab,{inputIds:i,attentionMask:s,tokenTypeIds:l}=J(o,n),u=i.length,h={input_ids:new t.Tensor("int64",i,[1,u]),attention_mask:new t.Tensor("int64",s,[1,u]),token_type_ids:new t.Tensor("int64",l,[1,u])},d=await e.run(h),w=(d.last_hidden_state??d[Object.keys(d)[0]]).data,m=L,f=new Float32Array(m),p=0;for(let r=0;r<u;r++)if(s[r]===1n){p++;for(let b=0;b<m;b++)f[b]+=w[r*m+b]}if(p>0)for(let r=0;r<m;r++)f[r]/=p;let g=0;for(let r=0;r<m;r++)g+=f[r]*f[r];if(g=Math.sqrt(g),g>0)for(let r=0;r<m;r++)f[r]/=g;return f}function Z(){if(M)return!1;if(y)return!0;try{let o=z();return c.existsSync(a.join(o,"model.onnx"))&&c.existsSync(a.join(o,"tokenizer.json"))}catch{return!1}}export{L as a,V as b,Z as c};
@@ -0,0 +1,32 @@
1
+ import{b as K,c as k,d as L}from"./chunk-DCTNMUQ5.js";import{a as te,e as re,g as ne}from"./chunk-32D5GWJD.js";import{a as N,d as be}from"./chunk-UUJ24BNJ.js";import{b as X,h as Q,i as Z}from"./chunk-PBKZDNNV.js";import{s as G}from"./chunk-3R7VGMAK.js";import{a as w}from"./chunk-L7JP7DUO.js";import{c as R,h as ee}from"./chunk-D5PAJ3CB.js";import{d as Y,r as ve}from"./chunk-ED2JAMEN.js";import{n as S,p as _e}from"./chunk-VARIYH6K.js";import{c as q,h as Ie}from"./chunk-EZLBMUQD.js";import{c as O,e as J}from"./chunk-5M6IGE5G.js";import{existsSync as Re}from"fs";import{createHash as Ce}from"crypto";import{isAbsolute as Ue}from"path";be();_e();J();import{v4 as Te}from"uuid";function oe(e){return{id:e.id,eventKey:e.event_key,sourceType:e.source_type,sourceId:e.source_id,taskId:e.task_id??void 0,templateId:e.template_id??void 0,templateName:e.template_name??void 0,messageType:e.message_type,viewerKey:e.viewer_key,title:e.title??void 0,contentPreview:e.content_preview,attachments:C(e.attachments_json),targets:C(e.targets_json),firstDeliveredAt:e.first_delivered_at,lastDeliveredAt:e.last_delivered_at,createdAt:e.created_at,traceId:e.trace_id??void 0}}function C(e){try{let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}}function de(e){if(!e.viewerKey||e.viewerKey.trim().length===0)throw new Error("recordUserVisibleDeliveryEvent requires viewerKey");if(!e.eventKey||e.eventKey.trim().length===0)throw new Error("recordUserVisibleDeliveryEvent requires eventKey");if(!e.sourceId||e.sourceId.trim().length===0)throw new Error("recordUserVisibleDeliveryEvent requires sourceId");let t=S(),r=Date.now(),n=e.deliveredAt??r,a=t.prepare("SELECT * FROM user_visible_events WHERE event_key = ?").get(e.eventKey);if(!a){let d=Te();return t.prepare(`
2
+ INSERT INTO user_visible_events (
3
+ id, event_key, source_type, source_id, task_id, template_id, template_name,
4
+ message_type, viewer_key, title, content_preview, attachments_json,
5
+ targets_json, first_delivered_at, last_delivered_at, created_at, trace_id
6
+ )
7
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
8
+ `).run(d,e.eventKey,e.sourceType,e.sourceId,e.taskId??null,e.templateId??null,e.templateName??null,e.messageType,e.viewerKey,e.title??null,e.contentPreview,JSON.stringify(e.attachments??[]),JSON.stringify(e.targets??[]),n,n,r,e.traceId??O()??null),se(e.eventKey)}let s=we(C(a.targets_json),e.targets??[]),o=ke(C(a.attachments_json),e.attachments??[]);return t.prepare(`
9
+ UPDATE user_visible_events
10
+ SET task_id = COALESCE(task_id, ?),
11
+ template_id = COALESCE(template_id, ?),
12
+ template_name = COALESCE(template_name, ?),
13
+ title = COALESCE(title, ?),
14
+ content_preview = CASE WHEN content_preview = '' THEN ? ELSE content_preview END,
15
+ attachments_json = ?,
16
+ targets_json = ?,
17
+ last_delivered_at = MAX(last_delivered_at, ?),
18
+ trace_id = COALESCE(trace_id, ?)
19
+ WHERE event_key = ?
20
+ `).run(e.taskId??null,e.templateId??null,e.templateName??null,e.title??null,e.contentPreview,JSON.stringify(o),JSON.stringify(s),n,e.traceId??O()??null,e.eventKey),se(e.eventKey)}function se(e){let t=S().prepare("SELECT * FROM user_visible_events WHERE event_key = ?").get(e);return t?oe(t):void 0}function qe(e){let t=S(),r=e.excludeSourceIds??[],n=[e.viewerKey,e.since,e.until],a=`
21
+ SELECT * FROM user_visible_events
22
+ WHERE viewer_key = ?
23
+ AND last_delivered_at >= ?
24
+ AND last_delivered_at <= ?
25
+ `;return r.length>0&&(a+=` AND source_id NOT IN (${r.map(()=>"?").join(",")})`,n.push(...r)),a+=" ORDER BY last_delivered_at ASC",e.limit!==void 0&&(a+=" LIMIT ?",n.push(e.limit)),t.prepare(a).all(...n).map(oe)}function we(e,t){let r=[...e];for(let n of t){let a=ie(n);r.some(s=>ie(s)===a)||r.push(n)}return r}function ie(e){return[e.type,e.channelId??"",e.webhookUrl??"",e.chatId??"",e.sessionId??""].join("|")}function ke(e,t){let r=[...e];for(let n of t){let a=ae(n),s=r.findIndex(o=>ae(o)===a);s>=0?r[s]={...r[s],...n}:r.push(n)}return r}function ae(e){return e.artifactId?`artifact:${e.artifactId}`:["file",e.filename??"",e.sizeBytes??"",e.mimeType??""].join("|")}Ie();import{v4 as F}from"uuid";J();ve();import{basename as U,extname as ce}from"path";function le(e){return Y(e).filter(t=>t.kind==="file"&&!!t.blobPath)}function Ae(e){let t=e.mime??"";return t.startsWith("image/")?"image":t.startsWith("audio/")?"audio":t.startsWith("video/")?"video":"file"}function Ee(e){let t=U(e.key??"").replace(/[\\/]/g,"-");if(e.originalFilename){let r=U(e.originalFilename).replace(/[\\/]/g,"-");if(ce(r))return r}if(ce(t))return t;if(e.mime){let r=ne(e.mime);if(r&&r!==".bin"&&t)return`${t}${r}`}return e.originalFilename?U(e.originalFilename).replace(/[\\/]/g,"-"):t||(e.blobPath?U(e.blobPath):e.id)}function ue(e){return e.map(t=>({path:t.blobPath,mediaType:Ae(t),filename:Ee(t),contentType:t.mime,mimeType:t.mime,artifactId:t.id,locator:t.locator,sizeBytes:t.sizeBytes,purpose:t.purpose,contentHash:t.contentHash}))}function $(e){if(e.priority!==void 0&&e.priority!==null)return e.priority;let t=e.mime??"";return t.startsWith("audio/")||t.startsWith("video/")?10:t==="text/markdown"||t==="text/plain"?50:t.startsWith("image/")?100:200}var x=1.33;function me(e,t){if(e.length===0)return{included:[],dropped:[]};let r=[...e].sort((d,i)=>{let g=$(d),y=$(i);return g!==y?g-y:i.sizeBytes-d.sizeBytes}),n=r[0];if(n.sizeBytes*x>t){if(r.length===1)return{firstItemOverflow:n};let d=r.slice(1),i=[],g=[],y=0;for(let _ of d){let l=_.sizeBytes*x;y+l<=t?(i.push(_),y+=l):g.push(_)}return i.length===0?{firstItemOverflow:n}:{included:i,dropped:[n,...g],firstOverflowWarning:!0}}let a=[],s=[],o=0;for(let d of r){let i=d.sizeBytes*x;o+i<=t?(a.push(d),o+=i):s.push(d)}return{included:a,dropped:s}}function pe(e,t,r,n){if(t.length===0)return e;let a=(r/(1024*1024)).toFixed(1),s=t.map(d=>`- ${d.filename} (${Oe(d.sizeBytes)})`),o=e.endsWith(`---
26
+ `)||e.endsWith("---")?"":`
27
+
28
+ ---`;return`${e}${o}
29
+ \u26A0\uFE0F \u56E0 ${n} \u90AE\u7BB1 ${a}MB \u4E0A\u9650\uFF0C\u4EE5\u4E0B\u4EA7\u7269\u672A\u9644\uFF1A
30
+ ${s.join(`
31
+ `)}
32
+ `}function Oe(e){return e<1024?`${e} bytes`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(2)} MB`}var B=class extends Error{constructor(r,n,a,s,o){super(`OutboundFirstAttachmentExceedsCap: artifactKey=${r} sizeBytes=${n} effectiveSizeBytes=${a} capBytes=${s} recipientDomain=${o}`);this.artifactKey=r;this.sizeBytes=n;this.effectiveSizeBytes=a;this.capBytes=s;this.recipientDomain=o;this.name="OutboundFirstAttachmentExceedsCap"}artifactKey;sizeBytes;effectiveSizeBytes;capBytes;recipientDomain};function xe(e){if(!e)return"";let t=e.lastIndexOf("@");return t<0||t===e.length-1?"":e.slice(t+1).toLowerCase().trim()}function De(e,t){return t.find(r=>r.id===e)?.key??e}function Se(e,t){return t.find(r=>r.artifactId===e)?.filename??e}function fe(e,t,r,n,a){let s=xe(t),o=ee(e,s),d=r.map(l=>({id:l.id,sizeBytes:l.sizeBytes??0,priority:l.priority??void 0,mime:l.mime??void 0})),i=me(d,o);if("firstItemOverflow"in i){let l=i.firstItemOverflow,h=De(l.id,r);return{ok:!1,error:new B(h,l.sizeBytes,Math.floor(l.sizeBytes*x),o,s).message}}let g=new Set(i.included.map(l=>l.id)),y=n.filter(l=>l.artifactId&&g.has(l.artifactId)),_=a;if(i.dropped.length>0){let l=i.dropped.map(h=>({filename:Se(h.id,n),sizeBytes:h.sizeBytes}));_=pe(a,l,o,s)}return{ok:!0,result:{perTargetAttachments:y,perTargetContent:_}}}var E=q("adam"),W=class{_dedupCache=new Map;_rateLimitWindows=new Map;_recentlySentIds=new Set;_laneTails=new Map;async _acquireLane(t,r){let n=`${t}:${r}`,a=this._laneTails.get(n)??Promise.resolve(),s,o=new Promise(d=>{s=d});return this._laneTails.set(n,o),o.then(()=>{this._laneTails.get(n)===o&&this._laneTails.delete(n)}),await a,s}isRecentlySent(t){return this._recentlySentIds.has(t)}async send(t){let{taskId:r,channelId:n,chatId:a,content:s,messageType:o,platform:d,webhookUrl:i,replyMarkup:g,replyToMessageId:y,quoteExcerpt:_,quoteTitle:l,mediaUrl:h,mediaType:A,attachments:D,dedupDiscriminator:z}=t,I=ge(o),ye=I!=="reply"&&!!r,u;if(ye){u=`${r}:${n??"none"}:${a??"none"}:${I}${z?`:${z}`:""}`;let f=this._dedupCache.get(u);if(f&&Date.now()-f.timestamp<300*1e3)return E.debug({dedupKey:u},"Dedup hit, returning cached log entry"),{success:!0,logEntryId:f.logEntryId}}if(n){let f=Date.now(),v=6e4,p=this._rateLimitWindows.get(n);p||(p=[],this._rateLimitWindows.set(n,p));let P=f-v;for(;p.length>0&&p[0]<P;)p.shift();if(p.length>=60){let M=F();E.warn({channelId:n,count:p.length},"Rate limited, not sending");let b={type:"channel",channelId:n,chatId:a??""};return this._writeOutboundReceipt(t,b,s,"failure"),{success:!1,logEntryId:M,error:"rate_limited"}}p.push(f)}let he=d??(n?R(n)?.platform:void 0)??"unknown",H=i?s:te(s,he,r),c=F(),m={id:c,ruleId:void 0,taskId:r??void 0,status:"pending",target:n&&a?{type:"channel",channelId:n,chatId:a}:i?{type:"webhook",webhookUrl:i}:{type:"channel",channelId:n??"",chatId:a??""},content:H,attempts:0,createdAt:Date.now(),expiresAt:Date.now()+1440*60*1e3,source:"direct",messageType:I};K(m),u&&this._dedupCache.set(u,{logEntryId:c,timestamp:Date.now()});try{let f=Be(h);if(f)return k(c,"failed",f),u&&this._dedupCache.delete(u),w.emit({type:"delivery_status_change",logEntryId:c,taskId:r,target:m.target,status:"failed",error:f,messageType:I}),this._writeOutboundReceipt(t,m.target,s,"failure"),{success:!1,logEntryId:c,error:f};if(i){let v=await fetch(i,{method:"POST",body:JSON.stringify({result:s,taskId:r,timestamp:new Date().toISOString()}),signal:AbortSignal.timeout(1e4)});if(v.ok)return L(c),this._recordDeliveryLedgerAfterSuccess(t,m.target,I,s),w.emit({type:"delivery_status_change",logEntryId:c,taskId:r,target:m.target,status:"delivered",messageType:I}),{success:!0,logEntryId:c};{let p=`Webhook returned ${v.status}`;return k(c,"failed",p),u&&this._dedupCache.delete(u),w.emit({type:"delivery_status_change",logEntryId:c,taskId:r,target:m.target,status:"failed",error:p,messageType:I}),{success:!1,logEntryId:c,error:p}}}else if(n&&a){let{getChannelManager:v}=await $e(),p=v();if(!p){let T="ChannelManager not available";return k(c,"failed",T),u&&this._dedupCache.delete(u),w.emit({type:"delivery_status_change",logEntryId:c,taskId:r,target:m.target,status:"failed",error:T,messageType:I}),this._writeOutboundReceipt(t,m.target,s,"failure"),{success:!1,logEntryId:c,error:T}}let P={content:H,messageType:I,...g?{replyMarkup:g}:{},...y?{replyToMessageId:y}:{},..._?{quoteExcerpt:_}:{},...l?{quoteTitle:l}:{},...h?{mediaUrl:h}:{},...A?{mediaType:A}:{},...D?{attachments:D}:{}},M=await this._acquireLane(n,a),b;try{b=await p.sendMessage(n,a,P)}finally{M()}if(b===null){let T="Channel adapter send failed (returned null)";return k(c,"failed",T),u&&this._dedupCache.delete(u),w.emit({type:"delivery_status_change",logEntryId:c,taskId:r,target:m.target,status:"failed",error:T,messageType:I}),this._writeOutboundReceipt(t,m.target,s,"failure"),{success:!1,logEntryId:c,error:T}}if(b&&(this._recentlySentIds.add(b),setTimeout(()=>this._recentlySentIds.delete(b),300*1e3)),b?.startsWith("queued-")){let T="queued_not_delivered";return u&&this._dedupCache.delete(u),w.emit({type:"delivery_status_change",logEntryId:c,taskId:r,target:m.target,status:"pending",error:T,messageType:I}),{success:!1,messageId:b,logEntryId:c,error:T}}return L(c),this._recordDeliveryLedgerAfterSuccess(t,m.target,I,s),this._writeOutboundReceipt(t,m.target,s,"success"),w.emit({type:"delivery_status_change",logEntryId:c,taskId:r,target:m.target,status:"delivered",messageType:I}),{success:!0,messageId:b??void 0,logEntryId:c}}else{let v="No channelId/chatId or webhookUrl provided";return k(c,"failed",v),u&&this._dedupCache.delete(u),{success:!1,logEntryId:c,error:v}}}catch(f){let v=f instanceof Error?f.message:String(f);return k(c,"failed",v),u&&this._dedupCache.delete(u),w.emit({type:"delivery_status_change",logEntryId:c,taskId:r,target:m.target,status:"failed",error:v,messageType:I}),this._writeOutboundReceipt(t,m.target,s,"failure"),{success:!1,logEntryId:c,error:v}}}_writeOutboundReceipt(t,r,n,a){if(r.type!=="channel"||!r.channelId)return;let s=O();if(!s){E.debug({taskId:t.taskId,channelId:r.channelId,outcome:a},"Outbound receipt skipped: no active trace context");return}let o=(t.attachments??[]).map(i=>i.artifactId).filter(i=>typeof i=="string"&&i.length>0),d=t.actorToolName??"OutboundGateway.send";try{Z({traceId:s,taskId:t.taskId,sessionId:t.sessionId,effectCategory:"outbound_message",verb:"send",entityType:"channel_message",target:{channelId:r.channelId,chatId:r.chatId,platform:t.platform},payload:{textChars:n.length,attachmentCount:t.attachments?.length??0,attachmentRefs:o.length>0?o:void 0},actor:{traceId:s,toolName:d,taskId:t.taskId},outcome:a})}catch(i){i instanceof Q?E.warn({errors:i.errors,taskId:t.taskId,channelId:r.channelId},"Outbound receipt validation failed"):E.warn({error:i instanceof Error?i.message:String(i),taskId:t.taskId},"Outbound receipt write failed")}}async redeliverExecutionTo(t){let r=t.includeArtifacts??!0,n=t.messageType??"result_delivery",a=t.dedupDiscriminator??`redelivery:${Date.now()}`,s=r?t.fileArtifacts??le(t.executionId):[],o=s.length>0?ue(s):void 0,d=[];for(let i of t.targets){let g=R(i.channelId);if(!g){d.push({target:{channelId:i.channelId,chatId:i.chatId},deliveryLogId:"",status:"failed",attachmentCount:0,error:`Channel not found: ${i.channelId}`});continue}let y=o,_=t.content;if(g.platform==="email"&&o&&o.length>0){let h=fe(i.channelId,i.chatId,s,o,t.content);if(!h.ok){let A=F(),D={type:"channel",channelId:i.channelId,chatId:i.chatId??""};K({id:A,ruleId:void 0,taskId:t.executionId,status:"pending",target:D,content:t.content,attempts:0,createdAt:Date.now(),expiresAt:Date.now()+1440*60*1e3,source:"direct",messageType:ge(n)}),k(A,"failed",h.error),d.push({target:{channelId:i.channelId,chatId:i.chatId},deliveryLogId:A,status:"failed",attachmentCount:0,error:h.error});continue}y=h.result.perTargetAttachments,_=h.result.perTargetContent}let l=await this.send({taskId:t.executionId,sessionId:t.sessionId,channelId:i.channelId,chatId:i.chatId,content:_,messageType:n,platform:g.platform,attachments:y,dedupDiscriminator:a,actorToolName:t.actorToolName});d.push({target:{channelId:i.channelId,chatId:i.chatId},deliveryLogId:l.logEntryId,status:l.success?"delivered":"failed",attachmentCount:y?.length??0,...l.error?{error:l.error}:{}})}return{deliveries:d}}_recordDeliveryLedgerAfterSuccess(t,r,n,a){if(Ve(n,t.taskId))try{let s=Pe(t,r);if(!s){N({source:"delivery_ledger",severity:"warning",sourceId:t.taskId,message:`Skipped user-visible delivery ledger write for ${n}: viewer identity unresolved`});return}let o=Me(t.taskId),d=Ne(a);de({eventKey:`${s}|${o.sourceId}|${n}|${d}`,sourceType:o.sourceType,sourceId:o.sourceId,taskId:t.taskId,templateId:o.templateId,templateName:o.templateName,messageType:n,viewerKey:s,title:o.templateName,contentPreview:a,attachments:(t.attachments??[]).map(Ke),targets:[Le(r)]})}catch(s){let o=s instanceof Error?s.message:String(s);E.warn({error:o,taskId:t.taskId,messageType:n},"User-visible delivery ledger write failed");try{N({source:"delivery_ledger",severity:"error",sourceId:t.taskId,message:o})}catch{}}}};function Ve(e,t){return t?!["reply","assistant_text","user_message","approval","approval_prompt"].includes(e):!1}function Pe(e,t){if(e.viewerKey)return e.viewerKey;if(t.type==="channel"&&t.channelId)return re({type:"channel",channelId:t.channelId,chatId:t.chatId})}function Me(e){let t=X(e);if(!t)return{sourceType:"task",sourceId:e};let r=G(t.templateId);return{sourceType:"template_execution",sourceId:t.id,templateId:t.templateId,templateName:r?.name}}function Ke(e){return{artifactId:e.artifactId,locator:e.locator,filename:e.filename,mimeType:e.mimeType??e.contentType,sizeBytes:e.sizeBytes,purpose:e.purpose,contentHash:e.contentHash}}function Le(e){if(e.type==="webhook")return{type:"webhook",webhookUrl:e.webhookUrl};let t=e.channelId?R(e.channelId):void 0;return{type:"channel",channelId:e.channelId,chatId:e.chatId,label:t?.name}}function Ne(e){return Ce("sha256").update(e).digest("hex")}var V=null;function $e(){return V||(V=import("./channels-WFU4CVGW.js")),V}function At(){V=null}function Be(e){if(!e)return;if(e.includes("://")&&!e.startsWith("file://"))return"mediaUrl must be a local file path";let t=e.startsWith("file://")?new URL(e).pathname:e;if(!Ue(t))return"mediaUrl must be absolute";if(!Re(t))return"mediaUrl file does not exist"}function ge(e){return e==="report"?"status_report":e==="deliver"?"result_delivery":e}var j=null;function Fe(){return j||(j=new W),j}function Et(e){return Fe().isRecentlySent(e)}export{qe as a,le as b,Ae as c,Ee as d,W as e,At as f,Fe as g,Et as h};
@@ -1,4 +1,4 @@
1
- import{n as r,p as n}from"./chunk-QL2ZOLMC.js";import{c,e as u}from"./chunk-245WE5AF.js";import{c as d,e as o}from"./chunk-FCV2DPZQ.js";var D={};o(D,{listAuditDiagnostics:()=>A,recordAuditDiagnostic:()=>g});import{v4 as a}from"uuid";function g(e){let t={id:a(),source:e.source,severity:e.severity,traceId:e.traceId??c()??void 0,sourceId:e.sourceId,message:e.message,createdAt:e.createdAt??Date.now()};return r().prepare(`
1
+ import{n as r,p as n}from"./chunk-VARIYH6K.js";import{c,e as u}from"./chunk-5M6IGE5G.js";import{b as d,c as o}from"./chunk-5PELJRUQ.js";var D={};o(D,{listAuditDiagnostics:()=>A,recordAuditDiagnostic:()=>g});import{v4 as a}from"uuid";function g(e){let t={id:a(),source:e.source,severity:e.severity,traceId:e.traceId??c()??void 0,sourceId:e.sourceId,message:e.message,createdAt:e.createdAt??Date.now()};return r().prepare(`
2
2
  INSERT INTO audit_diagnostics (id, source, severity, trace_id, source_id, message, created_at)
3
3
  VALUES (?, ?, ?, ?, ?, ?, ?)
4
4
  `).run(t.id,t.source,t.severity,t.traceId??null,t.sourceId??null,t.message,t.createdAt),t}function A(e={}){let t=[],i=[];e.source&&(t.push("source = ?"),i.push(e.source)),e.traceId&&(t.push("trace_id = ?"),i.push(e.traceId));let s="SELECT * FROM audit_diagnostics";return t.length>0&&(s+=` WHERE ${t.join(" AND ")}`),s+=" ORDER BY created_at DESC",e.limit!==void 0&&(s+=" LIMIT ?",i.push(e.limit)),r().prepare(s).all(...i).map(m)}function m(e){return{id:e.id,source:e.source,severity:e.severity,traceId:e.trace_id??void 0,sourceId:e.source_id??void 0,message:e.message,createdAt:e.created_at}}var I=d(()=>{n();u()});export{g as a,A as b,D as c,I as d};