adam-agent-server 1.13.0 → 1.15.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 (210) hide show
  1. package/README.md +4 -5
  2. package/dist/App-6TRGTNZ7.js +13 -0
  3. package/dist/approval-handler-YLO3V75T.js +1 -0
  4. package/dist/audit-diagnostics-MASYIEGZ.js +1 -0
  5. package/dist/audit-manager-LYBXP7U4.js +1 -0
  6. package/dist/bree-engine-AA7EVKTG.js +1 -0
  7. package/dist/{channels-WFC26TED.js → channels-2IL6USWL.js} +1 -1
  8. package/dist/channels-6BEGHNOK.js +1 -0
  9. package/dist/chat-tool-calls-KARPW7PE.js +1 -0
  10. package/dist/chunk-245WE5AF.js +1 -0
  11. package/dist/chunk-2N4EOZZ4.js +9 -0
  12. package/dist/chunk-3BRHWRZ5.js +2 -0
  13. package/dist/chunk-3KNR2F6H.js +3 -0
  14. package/dist/chunk-42V6ZPCS.js +5 -0
  15. package/dist/chunk-6NWIZ3BH.js +220 -0
  16. package/dist/chunk-APAOIZN4.js +114 -0
  17. package/dist/chunk-ASPPM7TQ.js +1 -0
  18. package/dist/chunk-BKNXRSJU.js +4 -0
  19. package/dist/{chunk-MRTJFYPR.js → chunk-BLCNUT53.js} +1 -1
  20. package/dist/chunk-BPXS4QEO.js +1006 -0
  21. package/dist/chunk-CLNYHWZ6.js +5 -0
  22. package/dist/chunk-D3SPXZZY.js +6 -0
  23. package/dist/{chunk-SWP2JC54.js → chunk-DRO3DG7X.js} +1 -1
  24. package/dist/chunk-EVUZ5LH2.js +1 -0
  25. package/dist/chunk-F6U5TMM3.js +5 -0
  26. package/dist/chunk-FD4IKMXV.js +1 -0
  27. package/dist/chunk-GXWB47NF.js +9 -0
  28. package/dist/{chunk-PXGK5H5C.js → chunk-I7LJ4432.js} +1 -1
  29. package/dist/chunk-ICAM2GUU.js +1 -0
  30. package/dist/{chunk-B44X7JAJ.js → chunk-IRUR4DVD.js} +1 -1
  31. package/dist/chunk-ISKCTUI7.js +9 -0
  32. package/dist/{chunk-7T4B2MZ7.js → chunk-J3VYLSJI.js} +1 -1
  33. package/dist/chunk-KJNAORKM.js +15 -0
  34. package/dist/chunk-L47LZYVG.js +21 -0
  35. package/dist/chunk-LU3D53ZV.js +34 -0
  36. package/dist/{chunk-YKYRNTPV.js → chunk-N2OLEUAQ.js} +1 -1
  37. package/dist/{chunk-PHT24MOV.js → chunk-NLTYJUQG.js} +1 -1
  38. package/dist/chunk-NNMQGISW.js +1 -0
  39. package/dist/chunk-NPGZRSGL.js +5 -0
  40. package/dist/chunk-NTVLV7NI.js +1 -0
  41. package/dist/chunk-NUJSTEV4.js +1 -0
  42. package/dist/{chunk-FUWPDXXG.js → chunk-NWGRLNUM.js} +1 -1
  43. package/dist/chunk-OQ3JOTPK.js +1 -0
  44. package/dist/chunk-RBJPQYV3.js +6 -0
  45. package/dist/chunk-SVUP3F4V.js +14 -0
  46. package/dist/chunk-TLMG5W3L.js +4 -0
  47. package/dist/chunk-TLP4ZMJB.js +19 -0
  48. package/dist/{chunk-WQFNB2MQ.js → chunk-TZCMK3UG.js} +6 -6
  49. package/dist/chunk-UFWMUBFH.js +25 -0
  50. package/dist/chunk-VKKDSXMR.js +1 -0
  51. package/dist/chunk-VNXTBIPI.js +31 -0
  52. package/dist/chunk-XF7YHFVR.js +15 -0
  53. package/dist/{chunk-X5V4VMET.js → chunk-XIVFVKMB.js} +2 -2
  54. package/dist/chunk-XYZVMTNN.js +1 -0
  55. package/dist/{chunk-Q2JQFDAK.js → chunk-XZEBYOFR.js} +3 -3
  56. package/dist/chunk-Z6LHGA27.js +1 -0
  57. package/dist/cli.js +10 -10
  58. package/dist/config-VHWLMFIN.js +1 -0
  59. package/dist/{config-GKVOAMY2.js → config-XO7TGH27.js} +1 -1
  60. package/dist/db-WCTOLFAZ.js +1 -0
  61. package/dist/delivery-log-ML4RJOBM.js +1 -0
  62. package/dist/dist-HCSYRPJU.js +1 -0
  63. package/dist/engine-XLH4VL6Y.js +1 -0
  64. package/dist/evolution-audit-HLU7LQL6.js +1 -0
  65. package/dist/execution-tools-SYP3GR6T.js +1 -0
  66. package/dist/{external-api-DOVGA3ML.js → external-api-YMEFVZGG.js} +1 -1
  67. package/dist/index.js +240 -36
  68. package/dist/learner-NJXX2RUL.js +1 -0
  69. package/dist/{logger-WEXZORHP.js → logger-PAMNFWI3.js} +1 -1
  70. package/dist/memories-JDTQM3UN.js +1 -0
  71. package/dist/memory-extractor-5PTMCSOX.js +1 -0
  72. package/dist/memory-gc-BCHTOSXK.js +1 -0
  73. package/dist/memory-service-66EMRJXO.js +1 -0
  74. package/dist/onnxruntime_binding-2BPLI7ZQ.node +0 -0
  75. package/dist/onnxruntime_binding-5J67DTMJ.node +0 -0
  76. package/dist/onnxruntime_binding-7ZZLEQ2F.node +0 -0
  77. package/dist/onnxruntime_binding-KDCXAPN5.node +0 -0
  78. package/dist/onnxruntime_binding-R73P2IQW.node +0 -0
  79. package/dist/outbound-gateway-3INYZDOR.js +1 -0
  80. package/dist/presets-DT3J2ON4.js +1 -0
  81. package/dist/reflection-job-ST4ANCGB.js +23 -0
  82. package/dist/role-presets-3IQKCSVQ.js +1 -0
  83. package/dist/role-workspace-SIHNI6HO.js +1 -0
  84. package/dist/roles-F6AEM6B5.js +1 -0
  85. package/dist/{runtime-QA2DCZYQ.js → runtime-TWLGJSL6.js} +1 -1
  86. package/dist/session-manager-JTQRJI7R.js +1 -0
  87. package/dist/skill-registry-4JT62GEF.js +1 -0
  88. package/dist/target-resolution-PSSBM4LX.js +1 -0
  89. package/dist/task-templates-6G46OVYT.js +1 -0
  90. package/dist/template-dispatch-2K7KV7YS.js +1 -0
  91. package/dist/template-execution-artifacts-NEPSVD2B.js +1 -0
  92. package/dist/trace-context-UR7DI5ME.js +1 -0
  93. package/package.json +34 -14
  94. package/web/dist/assets/{Button-VPwTNGpF.js → Button-fLMsJd5o.js} +1 -1
  95. package/web/dist/assets/{Card-C2N6k4gh.js → Card-cy-gHU0O.js} +1 -1
  96. package/web/dist/assets/{ChannelDetail-DktmpO0A.js → ChannelDetail-CsKBPHkT.js} +1 -1
  97. package/web/dist/assets/Channels-DMutLV9r.js +14 -0
  98. package/web/dist/assets/Chat-DWTs-iOw.js +2 -0
  99. package/web/dist/assets/Dashboard-CoatfhW8.js +1 -0
  100. package/web/dist/assets/{EmptyState-CWS9PJND.js → EmptyState-C5kVDHc7.js} +1 -1
  101. package/web/dist/assets/{EnvVarEditor-D0kGIBcl.js → EnvVarEditor-BvRsHayG.js} +1 -1
  102. package/web/dist/assets/{EventDefDetail-BiXTA6LF.js → EventDefDetail-zuJydp12.js} +1 -1
  103. package/web/dist/assets/Events-nCImjXyr.js +1 -0
  104. package/web/dist/assets/{Evolution-C884p_CE.js → Evolution-Br41g99g.js} +1 -1
  105. package/web/dist/assets/ExtensionDetail-BXlphIkn.js +1 -0
  106. package/web/dist/assets/Extensions-3lhbw0A2.js +1 -0
  107. package/web/dist/assets/{FeatureRequests-Ck0WQnXX.js → FeatureRequests-oaXQNu43.js} +1 -1
  108. package/web/dist/assets/{GoalDetail-DJOyf7By.js → GoalDetail-DRDg1JDv.js} +1 -1
  109. package/web/dist/assets/Goals-DGmKvtGA.js +1 -0
  110. package/web/dist/assets/{Logs-6r7fnBn7.js → Logs-BZKxhdnb.js} +1 -1
  111. package/web/dist/assets/{Memories-CvPaqv5r.js → Memories-DhJJk-KB.js} +1 -1
  112. package/web/dist/assets/{Mistakes-aUhkqHDC.js → Mistakes-DxThj9as.js} +1 -1
  113. package/web/dist/assets/{NotFound-R6tIzhL0.js → NotFound-buXr2gl7.js} +1 -1
  114. package/web/dist/assets/{PageHeader-D9lLjo0N.js → PageHeader-BgNbz3JV.js} +1 -1
  115. package/web/dist/assets/Plugins-BXrsGsXs.js +1 -0
  116. package/web/dist/assets/RoleDetail-rClUsHwS.js +35 -0
  117. package/web/dist/assets/Roles-DH9cRv8h.js +1 -0
  118. package/web/dist/assets/{SectionHeader-BB3H3F_P.js → SectionHeader-CwX6m1f6.js} +1 -1
  119. package/web/dist/assets/Settings-My2lOEWv.js +1 -0
  120. package/web/dist/assets/{Strategies-DUps-2I9.js → Strategies-YLMryJlG.js} +1 -1
  121. package/web/dist/assets/{Switch-B_R_EX9s.js → Switch-PNpjNoGn.js} +1 -1
  122. package/web/dist/assets/{Table-D4lT5uHx.js → Table-BrERwl-F.js} +1 -1
  123. package/web/dist/assets/{Tabs-CwzWpI-7.js → Tabs-CGHmpUAD.js} +1 -1
  124. package/web/dist/assets/TaskDetail-Bkaq0NwW.js +2 -0
  125. package/web/dist/assets/Work-4OcGMu_a.js +1 -0
  126. package/web/dist/assets/api-BkdixMz9.js +1 -0
  127. package/web/dist/assets/{es2015-DCW7LI8d.js → es2015-JqLIWAgH.js} +1 -1
  128. package/web/dist/assets/index-C-e-qpXc.js +12 -0
  129. package/web/dist/assets/index-DGTVc0qD.css +2 -0
  130. package/web/dist/assets/{useIsMobileLayout-D6Tz5o5h.js → useIsMobileLayout-Blj4Mk4K.js} +1 -1
  131. package/web/dist/assets/{usePluginsWithUsage-CSQr03vZ.js → usePluginsWithUsage-Ch9WCFTb.js} +1 -1
  132. package/web/dist/assets/vendor-icons-U4igmrUq.js +1 -0
  133. package/web/dist/assets/{vendor-react-CIkiuNDu.js → vendor-react-Bp_V-Hsf.js} +1 -1
  134. package/web/dist/assets/{vendor-state-CEOsUh-T.js → vendor-state-Zjl_6-V3.js} +1 -1
  135. package/web/dist/index.html +8 -8
  136. package/dist/App-5QZKMPRM.js +0 -13
  137. package/dist/adam-tools-SQD2V4RJ.js +0 -1
  138. package/dist/approval-handler-J6RUTICJ.js +0 -1
  139. package/dist/audit-manager-CWVHQAUI.js +0 -1
  140. package/dist/bree-engine-VGEYMVNP.js +0 -1
  141. package/dist/channels-OOIM62BX.js +0 -1
  142. package/dist/chunk-2BXTT4P2.js +0 -6
  143. package/dist/chunk-47COBMRF.js +0 -1
  144. package/dist/chunk-6JBSBSCL.js +0 -1
  145. package/dist/chunk-6WRZJVQ2.js +0 -1
  146. package/dist/chunk-7IFLU3CY.js +0 -4
  147. package/dist/chunk-AQO6IIHV.js +0 -684
  148. package/dist/chunk-AVM3O74V.js +0 -5
  149. package/dist/chunk-B544JOZM.js +0 -3
  150. package/dist/chunk-DZIEY4CH.js +0 -47
  151. package/dist/chunk-E4WIUUL4.js +0 -27
  152. package/dist/chunk-HDHMNT6D.js +0 -1
  153. package/dist/chunk-JYHOGBCP.js +0 -12
  154. package/dist/chunk-M3RZWIW3.js +0 -50
  155. package/dist/chunk-N4ES7TCL.js +0 -1
  156. package/dist/chunk-NPIXYK5G.js +0 -5
  157. package/dist/chunk-O7XQSONJ.js +0 -5
  158. package/dist/chunk-OZL6VNOR.js +0 -146
  159. package/dist/chunk-Q2ISNOBQ.js +0 -1
  160. package/dist/chunk-QYRI4HYA.js +0 -1
  161. package/dist/chunk-R2WB5BKF.js +0 -7
  162. package/dist/chunk-RMGBR3XZ.js +0 -21
  163. package/dist/chunk-S6OV7Z6K.js +0 -1
  164. package/dist/chunk-SC2DDRYB.js +0 -5
  165. package/dist/chunk-SGIKNIC5.js +0 -49
  166. package/dist/chunk-TI3AKKWZ.js +0 -80
  167. package/dist/chunk-U2LBBBWO.js +0 -8
  168. package/dist/chunk-UXDTFTG5.js +0 -10
  169. package/dist/chunk-Y5FFL6UO.js +0 -5
  170. package/dist/chunk-ZFDULJGB.js +0 -3
  171. package/dist/chunk-ZQ4PNKMQ.js +0 -10
  172. package/dist/config-DRFRLIVN.js +0 -1
  173. package/dist/db-FACSMWEY.js +0 -1
  174. package/dist/delivery-log-JIQMHBJ5.js +0 -1
  175. package/dist/dist-CDWBOTZS.js +0 -1
  176. package/dist/engine-OHYWUUMJ.js +0 -1
  177. package/dist/evolution-audit-M7FSYRQR.js +0 -1
  178. package/dist/learner-OUNQSWN7.js +0 -1
  179. package/dist/memories-ABE7PMQL.js +0 -1
  180. package/dist/memory-extractor-ZX2NJIBV.js +0 -6
  181. package/dist/memory-service-UWER3T2S.js +0 -1
  182. package/dist/onnxruntime_binding-6Q6HXASN.node +0 -0
  183. package/dist/onnxruntime_binding-EKZT2NRK.node +0 -0
  184. package/dist/onnxruntime_binding-P6S7V3CI.node +0 -0
  185. package/dist/onnxruntime_binding-PJNNIIUO.node +0 -0
  186. package/dist/onnxruntime_binding-UN6SPTQK.node +0 -0
  187. package/dist/outbound-gateway-XDCGAXXW.js +0 -1
  188. package/dist/presets-RMW3WO5P.js +0 -1
  189. package/dist/role-presets-FAXQRBII.js +0 -1
  190. package/dist/role-workspace-ISGPO25D.js +0 -1
  191. package/dist/roles-WNKRM6FD.js +0 -1
  192. package/dist/session-manager-SOJXQHHY.js +0 -1
  193. package/dist/task-templates-IS3DJCZB.js +0 -1
  194. package/dist/token-estimator-HMPVGDCN.js +0 -1
  195. package/dist/workflow-executor-LOMKVFPV.js +0 -1
  196. package/web/dist/assets/Channels-ozCXdZMq.js +0 -12
  197. package/web/dist/assets/Chat-CggvtidD.js +0 -2
  198. package/web/dist/assets/Dashboard-z37ZVhzH.js +0 -1
  199. package/web/dist/assets/Events-C4P3jjZd.js +0 -1
  200. package/web/dist/assets/Goals-CDZWDuXR.js +0 -1
  201. package/web/dist/assets/Plugins-CtwoMUoj.js +0 -1
  202. package/web/dist/assets/RoleDetail-B32225ae.js +0 -33
  203. package/web/dist/assets/Roles-CGYsxuq8.js +0 -1
  204. package/web/dist/assets/Settings-D2jrO8-G.js +0 -1
  205. package/web/dist/assets/TaskDetail-DKminIM_.js +0 -2
  206. package/web/dist/assets/Work-uD_6IieV.js +0 -1
  207. package/web/dist/assets/api-D-UzHSDq.js +0 -1
  208. package/web/dist/assets/index-6f2jcj0h.css +0 -2
  209. package/web/dist/assets/index-Bl-2p6d8.js +0 -12
  210. package/web/dist/assets/vendor-icons-jzPiR6xl.js +0 -1
@@ -1,5 +0,0 @@
1
- import{c as o}from"./chunk-6JBSBSCL.js";import{b as e,d as i}from"./chunk-AQO6IIHV.js";i();function d(t){return{id:t.id,taskId:t.task_id,index:t.index,type:t.type,content:t.content,toolName:t.tool_name??void 0,toolInput:t.tool_input?JSON.parse(t.tool_input):void 0,toolOutput:t.tool_output??void 0,truncated:t.truncated===1,timestamp:t.timestamp,tokenUsage:t.token_usage?JSON.parse(t.token_usage):void 0,planStepIndex:t.plan_step_index??void 0,traceId:t.trace_id??void 0}}function l(t){e().prepare(`
2
- INSERT INTO step_logs (id, task_id, "index", type, content, tool_name,
3
- tool_input, tool_output, truncated, timestamp, token_usage, plan_step_index, trace_id)
4
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
5
- `).run(t.id,t.taskId,t.index,t.type,t.content,t.toolName??null,t.toolInput?JSON.stringify(t.toolInput):null,t.toolOutput??null,t.truncated?1:0,t.timestamp,t.tokenUsage?JSON.stringify(t.tokenUsage):null,t.planStepIndex??null,t.traceId??o()??null)}function _(t,n=100,p=0){return e().prepare('SELECT * FROM step_logs WHERE task_id = ? ORDER BY "index" ASC LIMIT ? OFFSET ?').all(t,n,p).map(d)}export{l as a,_ as b};
@@ -1,3 +0,0 @@
1
- import{b as C}from"./chunk-Y5FFL6UO.js";import{a as p}from"./chunk-L7JP7DUO.js";import{b as D,c as f,d as w}from"./chunk-O7XQSONJ.js";import{c as M,h as U}from"./chunk-MRTJFYPR.js";function O(s,c,n){switch(c){case"wechat":return $(s);case"telegram":return s;case"slack":return P(s);case"webhook":return JSON.stringify({result:s,taskId:n,timestamp:new Date().toISOString()});default:return $(s)}}function $(s){return s.replace(/^#{1,6}\s+/gm,"").replace(/\*\*(.+?)\*\*/g,"$1").replace(/\*(.+?)\*/g,"$1").replace(/__(.+?)__/g,"$1").replace(/_(.+?)_/g,"$1").replace(/`([^`]+)`/g,"$1").replace(/```[\s\S]*?```/g,c=>c.replace(/```\w*\n?/g,"").trim()).replace(/\[([^\]]+)\]\([^)]+\)/g,"$1").replace(/!\[([^\]]*)\]\([^)]+\)/g,"$1").replace(/\n{3,}/g,`
2
-
3
- `).trim()}function P(s){return s.replace(/\*\*(.+?)\*\*/g,"*$1*").replace(/\[([^\]]+)\]\(([^)]+)\)/g,"<$2|$1>")}U();import{v4 as T}from"uuid";var x=M("adam"),v=class{_dedupCache=new Map;_rateLimitWindows=new Map;_recentlySentIds=new Set;isRecentlySent(c){return this._recentlySentIds.has(c)}async send(c){let{taskId:n,channelId:a,chatId:m,content:y,messageType:d,platform:E,webhookUrl:h,replyMarkup:I,mediaUrl:S,mediaType:b}=c,R=d!=="reply"&&!!n,r;if(R){r=`${n}:${a??"none"}:${m??"none"}:${d}`;let t=this._dedupCache.get(r);if(t&&Date.now()-t.timestamp<300*1e3)return x.debug({dedupKey:r},"Dedup hit, returning cached log entry"),{success:!0,logEntryId:t.logEntryId}}if(a){let t=Date.now(),i=6e4,o=this._rateLimitWindows.get(a);o||(o=[],this._rateLimitWindows.set(a,o));let u=t-i;for(;o.length>0&&o[0]<u;)o.shift();if(o.length>=60){let l=T();return x.warn({channelId:a,count:o.length},"Rate limited, not sending"),{success:!1,logEntryId:l,error:"rate_limited"}}o.push(t)}let L=E??(a?C(a)?.platform:void 0)??"unknown",k=h?y:O(y,L,n),e=T(),g={id:e,ruleId:void 0,taskId:n??void 0,status:"pending",target:a&&m?{type:"channel",channelId:a,chatId:m}:h?{type:"webhook",webhookUrl:h}:{type:"channel",channelId:a??"",chatId:m??""},content:k,attempts:0,createdAt:Date.now(),expiresAt:Date.now()+1440*60*1e3,source:"direct",messageType:d};D(g),r&&this._dedupCache.set(r,{logEntryId:e,timestamp:Date.now()});try{if(h){let t=await fetch(h,{method:"POST",body:JSON.stringify({result:y,taskId:n,timestamp:new Date().toISOString()}),signal:AbortSignal.timeout(1e4)});if(t.ok)return w(e),p.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:g.target,status:"delivered",messageType:d}),{success:!0,logEntryId:e};{let i=`Webhook returned ${t.status}`;return f(e,"failed",i),r&&this._dedupCache.delete(r),p.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:g.target,status:"failed",error:i,messageType:d}),{success:!1,logEntryId:e,error:i}}}else if(a&&m){let{getChannelManager:t}=await import("./channels-OOIM62BX.js"),i=t();if(!i){let l="ChannelManager not available";return f(e,"failed",l),r&&this._dedupCache.delete(r),p.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:g.target,status:"failed",error:l,messageType:d}),{success:!1,logEntryId:e,error:l}}let o={content:k,...I?{replyMarkup:I}:{},...S?{mediaUrl:S}:{},...b?{mediaType:b}:{}},u=await i.sendMessage(a,m,o);if(u===null){let l="Channel adapter send failed (returned null)";return f(e,"failed",l),r&&this._dedupCache.delete(r),p.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:g.target,status:"failed",error:l,messageType:d}),{success:!1,logEntryId:e,error:l}}return u&&(this._recentlySentIds.add(u),setTimeout(()=>this._recentlySentIds.delete(u),300*1e3)),w(e),p.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:g.target,status:"delivered",messageType:d}),{success:!0,messageId:u??void 0,logEntryId:e}}else{let t="No channelId/chatId or webhookUrl provided";return f(e,"failed",t),r&&this._dedupCache.delete(r),{success:!1,logEntryId:e,error:t}}}catch(t){let i=t instanceof Error?t.message:String(t);return f(e,"failed",i),r&&this._dedupCache.delete(r),p.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:g.target,status:"failed",error:i,messageType:d}),{success:!1,logEntryId:e,error:i}}}},_=null;function W(){return _||(_=new v),_}function q(s){return W().isRecentlySent(s)}export{v as a,W as b,q as c};
@@ -1,47 +0,0 @@
1
- import{k as F}from"./chunk-Q2ISNOBQ.js";import{a as oe}from"./chunk-S6OV7Z6K.js";import{b as ee}from"./chunk-AVM3O74V.js";import{a as Z,b as h}from"./chunk-R2WB5BKF.js";import{e as N,f as D,j as Ie}from"./chunk-RMGBR3XZ.js";import{a as Q}from"./chunk-47COBMRF.js";import{d as K}from"./chunk-6WRZJVQ2.js";import{c as te,i as Ce,l as re,o as ne,r as xe}from"./chunk-U2LBBBWO.js";import{b as u,d as v}from"./chunk-AQO6IIHV.js";import{a as z,h as Le}from"./chunk-WBAPIPST.js";import{c as k,h as X}from"./chunk-MRTJFYPR.js";Ce();import{homedir as Ae}from"os";import{resolve as j}from"path";import{z as g}from"zod";Le();function ie(){return[...z]}xe();Ie();var Oe=new Set(ie()),Pe=g.object({tools:g.array(g.string().refine(t=>Oe.has(t),{message:"Unknown tool"})).optional(),paths:g.array(g.object({path:g.string().refine(t=>t.startsWith("/")||t.startsWith("~"),{message:"path must be absolute or tilde-prefixed"}),access:g.enum(["ro","rw"])})).optional(),osCapabilities:g.array(g.object({id:g.enum(te),targets:g.array(g.string()).optional()})).optional(),network:g.boolean().optional(),plugins:g.array(g.string()).optional()});function ae(t){return t.startsWith("~")?t.replace(/^~/,Ae()):t}function Ne(t){let e=ae(t);return e.startsWith("/")?j(e):null}function ce(t,e){let n=[{path:j(e),access:"rw"}];for(let r of t.additionalDirectories??[])n.push({path:j(ae(r.path)),access:r.mode??"rw"});return n}function U(t,e){let n=Ne(t.path);if(!n)return!1;let r=e.filter(o=>n===o.path||n.startsWith(`${o.path}/`)).sort((o,s)=>s.path.length-o.path.length);if(r.length===0)return!1;let i=r[0];return t.access==="rw"?i.access==="rw":!0}function B(t,e){if(!t?.length)return[];let n=new Set(e??[]);return t.filter(r=>!n.has(r))}function G(t,e){if(!t?.length)return[];let n=new Set((e??[]).map(r=>r.id));return t.filter(r=>!n.has(r.id))}function W(t,e){if(!t?.length)return[];let n=new Set(e);return t.filter(r=>!n.has(r))}function H(t,e){return t?(e??[]).some(n=>n.id==="local-network"):!0}function le(t,e,n,r){let i=[];if(e.tools?.length){let o=B(e.tools,t.allowedTools).length;i.push((e.tools.length-o)/e.tools.length)}if(e.paths?.length){let o=e.paths.filter(s=>U(s,n)).length;i.push(o/e.paths.length)}if(e.osCapabilities?.length){let o=G(e.osCapabilities,t.osCapabilities).length;i.push((e.osCapabilities.length-o)/e.osCapabilities.length)}if(e.plugins?.length){let o=W(e.plugins,r).length;i.push((e.plugins.length-o)/e.plugins.length)}return e.network===!0&&i.push(H(e.network,t.osCapabilities)?1:0),i.length===0?1:i.reduce((o,s)=>o+s,0)/i.length}function De(t,e){if(!e.tools?.length||!t.approvalRequired?.length)return[];let n=new Set(t.approvalRequired),r=e.tools.filter(o=>n.has(o));if(!r.length)return[];let i=e.paths?.filter(o=>o.access==="rw").length??0;return[{code:"APPROVAL_WILL_TRIGGER",tools:r,expectedPromptCount:Math.max(r.length,i||r.length)}]}function Fe(t,e,n,r){let i=B(e.tools,t.allowedTools),o=(e.paths??[]).filter(d=>!U(d,n)),s=G(e.osCapabilities,t.osCapabilities),c=W(e.plugins,r),a={};return i.length&&(a.tools=i),o.length&&(a.paths=o),s.length&&(a.osCapabilities=s),c.length&&(a.plugins=c),e.network===!0&&!H(e.network,t.osCapabilities)&&(a.network=!0),a}function de(t,e){D(t);let n=N(t.name),r=ce(t,n),o=F(t).plugins.map(l=>l.name),s=B(e.tools,t.allowedTools);if(s.length)return{ok:!1,code:"ROLE_TOOL_MISMATCH",reason:`Missing tools: ${s.join(", ")}`,missing:{tools:s}};let c=(e.paths??[]).filter(l=>!U(l,r));if(c.length)return{ok:!1,code:"ROLE_PATH_SCOPE_MISMATCH",reason:`Missing path scope: ${c.map(l=>`${l.path} (${l.access})`).join(", ")}`,missing:{paths:c}};let a=G(e.osCapabilities,t.osCapabilities);if(a.length)return{ok:!1,code:"ROLE_OS_CAPABILITY_MISMATCH",reason:`Missing OS capabilities: ${a.map(l=>l.id).join(", ")}`,missing:{osCapabilities:a}};let d=W(e.plugins,o);return d.length?{ok:!1,code:"ROLE_PLUGIN_MISMATCH",reason:`Missing plugins: ${d.join(", ")}`,missing:{plugins:d}}:e.network===!0&&!H(e.network,t.osCapabilities)?{ok:!1,code:"ROLE_NETWORK_MISMATCH",reason:"Role lacks network capability (local-network)",missing:{network:!0}}:{ok:!0,roleId:t.id,executionProfile:t,fitScore:le(t,e,r,o),warnings:De(t,e)}}function se(t){return ne("active",100,0).filter(e=>e.source!=="system").map(e=>{D(e);let n=ce(e,N(e.name)),i=F(e).plugins.map(s=>s.name),o=de(e,t);return{role:e,evaluation:o,fitScore:le(e,t,n,i),missing:Fe(e,t,n,i)}}).sort((e,n)=>{let r=n.fitScore-e.fitScore;return r!==0?r:(n.role.performanceScore??0)-(e.role.performanceScore??0)})}async function ue(t){let{requirements:e,roleId:n,autoSelectRole:r}=t;if(!n&&!r)return{ok:!1,code:"REQUIREMENTS_MISSING",reason:"Must provide either roleId or autoSelectRole=true"};if(e){let l=Pe.safeParse(e);if(!l.success)return{ok:!1,code:"REQUIREMENTS_MISSING",reason:g.prettifyError(l.error)}}if(r&&!e)return{ok:!1,code:"REQUIREMENTS_MISSING",reason:"autoSelectRole requires a requirements object"};let i=e??{};if(n&&!r){let l=re(n);if(!l||l.status!=="active")return{ok:!1,code:"ROLE_NOT_FOUND",reason:`Role not found or not active: ${n}`};let p=de(l,i);return p.ok?(p.auditCandidates=[{roleId:l.id,name:l.name,fitScore:p.fitScore,fits:!0}],p):(e&&(p.candidates=se(e).map(S=>({roleId:S.role.id,name:S.role.name,fitScore:S.fitScore,missing:S.missing}))),p)}let o=se(e),s=o.filter(l=>l.evaluation.ok);if(!s.length)return{ok:!1,code:"ROLE_SELECTION_AMBIGUOUS",reason:"No role covers the requirements",candidates:o.map(l=>({roleId:l.role.id,name:l.role.name,fitScore:l.fitScore,missing:l.missing}))};let c=s[0],a=c.evaluation,d=s[1];return d&&d.fitScore===c.fitScore&&(a.tieBreakReason=`fitScore tie at ${c.fitScore}; chose ${c.role.name} by performanceScore`),a.auditCandidates=o.map(l=>({roleId:l.role.id,name:l.role.name,fitScore:l.fitScore,fits:l.evaluation.ok})),a}v();function L(t){return{id:t.id,roleId:t.role_id,taskType:t.task_type,name:t.name,promptTemplate:t.prompt_template,alpha:t.alpha,beta:t.beta,totalTrials:t.total_trials,avgReward:t.avg_reward??void 0,createdAt:t.created_at,updatedAt:t.updated_at??void 0}}function pe(t){u().prepare(`
2
- INSERT INTO strategies (id, role_id, task_type, name, prompt_template,
3
- alpha, beta, total_trials, avg_reward, created_at, updated_at)
4
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
5
- `).run(t.id,t.roleId,t.taskType,t.name,t.promptTemplate,t.alpha,t.beta,t.totalTrials,t.avgReward??null,t.createdAt,t.updatedAt??null)}function ge(t){let n=u().prepare("SELECT * FROM strategies WHERE id = ?").get(t);return n?L(n):void 0}function ct(t=100){return u().prepare("SELECT * FROM strategies ORDER BY created_at LIMIT ?").all(t).map(L)}function lt(t){return u().prepare("SELECT * FROM strategies WHERE role_id = ? ORDER BY created_at").all(t).map(L)}function b(t,e){return u().prepare("SELECT * FROM strategies WHERE role_id = ? AND task_type = ? ORDER BY created_at").all(t,e).map(L)}function me(t,e){u().prepare(`
6
- UPDATE strategies
7
- SET alpha = alpha + ?,
8
- beta = beta + ?,
9
- total_trials = total_trials + 1,
10
- avg_reward = CASE
11
- WHEN total_trials = 0 THEN ?
12
- ELSE (avg_reward * total_trials + ?) / (total_trials + 1)
13
- END,
14
- updated_at = ?
15
- WHERE id = ?
16
- `).run(e,1-e,e,e,Date.now(),t)}v();function fe(t){return{id:t.id,name:t.name,description:t.description??void 0,roleId:t.role,metricType:t.metric_type,targetValue:t.target_value,currentValue:t.current_value,deadline:t.deadline,budgetUsd:t.budget_usd,status:t.status,createdAt:t.created_at,updatedAt:t.updated_at??void 0,sourceSessionId:t.source_session_id??void 0,deliverTo:t.deliver_to?JSON.parse(t.deliver_to):void 0,reportTo:t.report_to?JSON.parse(t.report_to):void 0}}function pt(t){u().prepare(`
17
- INSERT INTO goals (id, name, description, role, metric_type, target_value,
18
- current_value, deadline, budget_usd, status, created_at, updated_at,
19
- source_session_id, deliver_to, report_to)
20
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
21
- `).run(t.id,t.name,t.description??null,t.roleId,t.metricType,t.targetValue,t.currentValue,t.deadline,t.budgetUsd,t.status,t.createdAt,t.updatedAt??null,t.sourceSessionId??null,t.deliverTo?JSON.stringify(t.deliverTo):null,t.reportTo?JSON.stringify(t.reportTo):null)}function he(t){let n=u().prepare("SELECT * FROM goals WHERE id = ?").get(t);return n?fe(n):void 0}function gt(t,e){let n=u(),r=[],i=[],o={name:"name",description:"description",roleId:"role",metricType:"metric_type",targetValue:"target_value",currentValue:"current_value",deadline:"deadline",budgetUsd:"budget_usd",status:"status",updatedAt:"updated_at",sourceSessionId:"source_session_id"};for(let[s,c]of Object.entries(o))s in e&&(r.push(`${c} = ?`),i.push(e[s]??null));"deliverTo"in e&&(r.push("deliver_to = ?"),i.push(JSON.stringify(e.deliverTo))),"reportTo"in e&&(r.push("report_to = ?"),i.push(JSON.stringify(e.reportTo))),r.length!==0&&(i.push(t),n.prepare(`UPDATE goals SET ${r.join(", ")} WHERE id = ?`).run(...i))}function mt(t,e=100,n=0){let r=u(),i="SELECT * FROM goals",o=[];return t&&(i+=" WHERE status = ?",o.push(t)),i+=" ORDER BY created_at DESC LIMIT ? OFFSET ?",o.push(e,n),r.prepare(i).all(...o).map(fe)}function ft(t){u().prepare("DELETE FROM goals WHERE id = ?").run(t)}var C=class{static collect(e,n){let r=h(e);if(!r)return this.emptyMetrics(e,n);let i=ee(e,500,0),o=r.completedAt&&r.startedAt?r.completedAt-r.startedAt:0,s=new Set,c=0,a=0;for(let l of i)l.type==="tool_call"&&l.toolName&&s.add(l.toolName),l.type==="error"&&c++,l.type==="approval_request"&&a++;let d={taskId:e,goalId:n,timestamp:Date.now(),durationMs:o,costUsd:r.costUsd??0,turns:r.numTurns??0,toolCount:s.size,errorCount:c,approvalCount:a,rawScore:0,isComplete:r.status==="completed"};return d.rawScore=this.computeRawScore(d),d}static computeRawScore(e){let r=1-Math.min(e.durationMs/6e5,1),o=1-Math.min(e.costUsd/5,1),c=1-Math.min(e.turns/50,1),a;e.toolCount>=3&&e.toolCount<=15?a=1:e.toolCount<3?a=e.toolCount/3:a=Math.max(0,1-(e.toolCount-15)/15);let d=e.errorCount===0?1:Math.max(0,1-e.errorCount*.2),l=Math.min(1,.5+e.approvalCount*.25);return .3*r+.2*o+.2*c+.1*a+.15*d+.05*l}static cache=new Map;static persist(e){this.cache.set(e.taskId,e)}static getCached(e){return this.cache.get(e)}static clearCache(){this.cache.clear()}static emptyMetrics(e,n){return{taskId:e,goalId:n,timestamp:Date.now(),durationMs:0,costUsd:0,turns:0,toolCount:0,errorCount:0,approvalCount:0,rawScore:0,isComplete:!1}}};v();function je(t){return{id:t.id,strategyId:t.strategy_id,goalId:t.goal_id,taskId:t.task_id??void 0,reward:t.reward??void 0,metricL2Score:t.metric_l2_score??void 0,metricL3Score:t.metric_l3_score??void 0,context:t.context??void 0,completedAt:t.completed_at}}function be(t){u().prepare(`
22
- INSERT INTO trials (id, strategy_id, goal_id, task_id, reward,
23
- metric_l2_score, metric_l3_score, context, completed_at)
24
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
25
- `).run(t.id,t.strategyId,t.goalId,t.taskId??null,t.reward??null,t.metricL2Score??null,t.metricL3Score??null,t.context??null,t.completedAt)}function Se(t,e=100){return u().prepare("SELECT * FROM trials WHERE goal_id = ? ORDER BY completed_at DESC LIMIT ?").all(t,e).map(je)}var x=class{static collect(e){let n=he(e);if(!n)return this.emptyMetrics(e);let r=Date.now(),i=n.targetValue>0?Math.min(n.currentValue/n.targetValue,1):0,o=Math.max(0,(n.deadline-r)/(1e3*60*60*24)),s=this.calculateBudgetSpent(e),c=n.budgetUsd>0?Math.max(0,1-s/n.budgetUsd):1,a=this.calculateExpectedCompletion(n),d={goalId:e,metricType:n.metricType,targetValue:n.targetValue,currentValue:n.currentValue,progressPct:i,deadlineRemainingDays:o,budgetRemainingPct:c,expectedCompletionPct:a,rawScore:0};return d.rawScore=this.computeRawScore(d),d}static computeRawScore(e){let n=Math.min(e.progressPct,1),r;e.expectedCompletionPct>=1?r=1:e.expectedCompletionPct>=.8?r=.5+(e.expectedCompletionPct-.8)*2.5:r=e.expectedCompletionPct*.625;let i=e.budgetRemainingPct;return .5*n+.3*r+.2*i}static calculateExpectedCompletion(e){let n=Date.now(),r=e.deadline-e.createdAt,i=n-e.createdAt;if(r<=0)return 0;let o=i/r;if(o<.1)return .5;let s=e.targetValue>0?e.currentValue/e.targetValue:0;return o>0?s/o:0}static calculateBudgetSpent(e){let n=Se(e,1e3),r=0,i=new Set;for(let o of n)if(o.taskId&&!i.has(o.taskId)){i.add(o.taskId);let s=h(o.taskId);s?.costUsd&&(r+=s.costUsd)}return r}static emptyMetrics(e){return{goalId:e,metricType:"",targetValue:0,currentValue:0,progressPct:0,deadlineRemainingDays:0,budgetRemainingPct:0,expectedCompletionPct:0,rawScore:0}}};X();var Ue=k("agent"),y=class{static cache=new Map;static CACHE_TTL=1440*60*1e3;static async callClaude(e){let i=(await oe(e,'You are an AI quality evaluator. Respond with JSON: {"score": 0-1, "confidence": 0-1, "reasoning": "..."}')).match(/\{[\s\S]*\}/);if(!i)throw new Error("Failed to parse LLM Judge response as JSON");let o=JSON.parse(i[0]);return{score:Math.max(0,Math.min(1,o.score??0)),confidence:Math.max(.3,Math.min(.95,o.confidence??.5)),reasoning:o.reasoning??"No reasoning provided"}}static async evaluate(e,n){let r=`${e}:${n}`,i=this.cache.get(r);if(i&&Date.now()-i.evaluatedAt<this.CACHE_TTL)return i;let o=h(e);if(!o){let p={taskId:e,criteria:n,score:0,confidence:.3,reasoning:"Task not found",evaluatedAt:Date.now()};return this.cache.set(r,p),p}let s=this.getPromptTemplate(o.prompt??"",o.result??o.error??"",n),c,a,d;try{let p=await this.callClaude(s);c=p.score,a=p.confidence,d=p.reasoning}catch(p){Ue.warn({error:p,taskId:e},"LLM Judge Claude API call failed, using heuristic fallback"),o.status==="failed"?(c=.1,a=.6,d=`Task failed: ${o.error??"unknown error"} (heuristic fallback)`):o.status==="completed"&&o.result?(c=.7,a=.5,d="Task completed with result (heuristic fallback due to API error)"):o.status==="completed"?(c=.5,a=.4,d="Task completed without explicit result (heuristic fallback)"):(c=.3,a=.3,d=`Task in status: ${o.status} (heuristic fallback)`)}let l={taskId:e,criteria:n,score:c,confidence:a,reasoning:d,evaluatedAt:Date.now()};return this.cache.set(r,l),l}static shouldUseObjective(e){let n=h(e);return n?n.status==="completed"&&n.costUsd!==void 0&&n.numTurns!==void 0:!1}static clearCache(){this.cache.clear()}static getPromptTemplate(e,n,r){return`You are an expert evaluator. Evaluate the following task result against these criteria:
26
-
27
- Task: ${e}
28
- Result: ${n}
29
- Criteria: ${r}
30
-
31
- Provide:
32
- 1. Score (0-1): How well did the task meet the criteria?
33
- 2. Confidence (0-1): How confident are you in this evaluation?
34
- 3. Reasoning: Brief explanation of your scoring
35
-
36
- Respond in JSON: {"score": number, "confidence": number, "reasoning": "string"}`}};v();function Be(t){return{id:t.id,goalId:t.goal_id,level:t.level,parentId:t.parent_id??void 0,name:t.name,description:t.description??void 0,weight:t.weight,calibrationFactor:t.calibration_factor,createdAt:t.created_at}}function It(t){u().prepare(`
37
- INSERT INTO metric_tree (id, goal_id, level, parent_id, name, description,
38
- weight, calibration_factor, created_at)
39
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
40
- `).run(t.id,t.goalId,t.level,t.parentId??null,t.name,t.description??null,t.weight,t.calibrationFactor,t.createdAt)}function Re(t){return u().prepare("SELECT * FROM metric_tree WHERE goal_id = ? ORDER BY level, created_at").all(t).map(Be)}var Ge={L0:.2,L1:.15,L2:.35,L3:.3},I=class t{goalId;nodes;children;constructor(e,n){this.goalId=e,this.nodes=new Map(n.map(r=>[r.id,r])),this.children=new Map;for(let r of n){let i=r.parentId,o=this.children.get(i)??[];o.push(r),this.children.set(i,o)}this.validateAcyclicity()}validateAcyclicity(){for(let e of this.nodes.values()){if(e.parentId&&!this.nodes.has(e.parentId))continue;let n=new Set,r=e.id;for(;r;){if(n.has(r))throw new Error(`Cycle detected in metric tree at node ${r}`);n.add(r),r=this.nodes.get(r)?.parentId}}}static buildFromGoal(e){let n=Re(e);return new t(e,n)}static fromNodes(e,n){return new t(e,n)}queryPath(e){let n=[];for(let r of this.nodes.values())r.level===e&&n.push(r);return n.sort((r,i)=>i.weight-r.weight)}aggregateScores(e,n){let r=this.queryPath(e);if(r.length===0)return 0;let i=0,o=0;for(let s of r){let c=n.get(s.id)??0,a=s.weight*s.calibrationFactor;i+=c*a,o+=a}return o>0?i/o:0}getWeightedScore(e){let n=0;for(let[r,i]of Object.entries(Ge)){let o=this.aggregateScores(r,e);n+=o*i}return Math.max(0,Math.min(1,n))}getNodeCount(){return this.nodes.size}getChildren(e){return this.children.get(e)??[]}};X();var Bt=k("agent");function Te(t,e){let n=Date.now(),r=I.buildFromGoal(t),i=new Map,o=x.collect(t);for(let a of r.queryPath("L0"))i.set(a.id,o.rawScore);let s=We(r);if(e){let a=C.collect(e,t);if(a.isComplete){for(let l of r.queryPath("L3"))i.set(l.id,a.rawScore);let d=r.getNodeCount()>0?r.getWeightedScore(i):Math.max(0,Math.min(1,a.rawScore*.65+o.rawScore*.35));return{goalId:t,taskId:e,reward:d,breakdown:{L0:o.rawScore,L1:0,L2:0,L3:a.rawScore},calibrationFactors:s,source:"objective",confidence:.9,computedAt:n}}}if(e&&!y.shouldUseObjective(e)){let d=y.evaluate(e,"general_quality"),l=o.rawScore*.5+.5*.5;return{goalId:t,taskId:e,reward:o.rawScore,breakdown:{L0:o.rawScore,L1:0,L2:0,L3:0,llmJudge:.5},calibrationFactors:s,source:"llm_judge",confidence:.4,computedAt:n}}let c=r.getNodeCount()>0?r.getWeightedScore(i):o.rawScore;return{goalId:t,reward:c,breakdown:{L0:o.rawScore,L1:0,L2:0,L3:0},calibrationFactors:s,source:"fallback",confidence:.3,computedAt:n}}function We(t){let e={L0:1,L1:1,L2:1,L3:1};for(let n of["L0","L1","L2","L3"]){let r=t.queryPath(n);r.length>0&&(e[n]=r[0].calibrationFactor)}return e}import{v4 as we}from"uuid";var M=class{static sampleBeta(e,n){let r=this.sampleGamma(e,1),i=this.sampleGamma(n,1);return r/(r+i)}static sampleGamma(e,n){if(e<1)return this.sampleGamma(e+1,n)*Math.pow(Math.random(),1/e);let r=e-1/3,i=1/Math.sqrt(9*r);for(;;){let o,s;do o=this.randn(),s=1+i*o;while(s<=0);s=s*s*s;let c=Math.random();if(c<1-.0331*o*o*o*o||Math.log(c)<.5*o*o+r*(1-s+Math.log(s)))return r*s/n}}static randn(){let e=Math.random(),n=Math.random();return Math.sqrt(-2*Math.log(e))*Math.cos(2*Math.PI*n)}static sample(e){if(e.length===0)return null;let n=null,r=-1;for(let i of e){let o=this.sampleBeta(i.alpha,i.beta);o>r&&(r=o,n=i)}return n}static getProbabilities(e,n=1e4){let r=new Map;for(let o=0;o<n;o++){let s=this.sample(e);s&&r.set(s.id,(r.get(s.id)||0)+1)}let i=new Map;for(let[o,s]of r)i.set(o,s/n);return i}};var He=5,$=20,_e=.5,A=class{static selectStrategy(e,n){let r=b(e,n);return M.sample(r)}static recordTrial(e,n,r,i,o,s,c){me(e,i),be({id:we(),strategyId:e,goalId:n,taskId:r,reward:i,metricL2Score:o,metricL3Score:s,context:c,completedAt:Date.now()})}static getStrategies(e,n){return b(e,n)}static getStrategyById(e){return ge(e)}static getPopulationStats(e,n){let r=b(e,n);if(r.length===0)return{count:0,avgTrials:0,avgReward:0,minTrials:0,maxTrials:0};let o=r.reduce((a,d)=>a+d.totalTrials,0)/r.length,s=r.filter(a=>a.avgReward!==void 0).map(a=>a.avgReward),c=s.length>0?s.reduce((a,d)=>a+d,0)/s.length:0;return{count:r.length,avgTrials:o,avgReward:c,minTrials:Math.min(...r.map(a=>a.totalTrials)),maxTrials:Math.max(...r.map(a=>a.totalTrials))}}static shouldEvolve(e,n){let r=this.getPopulationStats(e,n);return r.count<He?!0:r.count<$&&r.maxTrials>0}static addStrategy(e,n,r,i){if(b(e,n).length>=$)throw new Error(`Strategy population at maximum (${$}) for ${e}/${n}`);let s={id:`strat-${we().slice(0,8)}`,roleId:e,taskType:n,name:r,promptTemplate:i,alpha:_e,beta:_e,totalTrials:0,createdAt:Date.now()};return pe(s),s}static getTopStrategies(e,n,r=3){let o=b(e,n).filter(s=>s.totalTrials>0);return o.sort((s,c)=>(c.avgReward??0)-(s.avgReward??0)),o.slice(0,r)}static getSamplingProbabilities(e,n){let r=b(e,n);return M.getProbabilities(r)}static evaluateAndRecord(e,n,r,i,o,s){let c=Te(n,r);return this.recordTrial(e,n,r,c.reward,i,o,s),c.reward}};import{v4 as Je}from"uuid";v();import{v4 as $e}from"uuid";function ve(t){u().prepare(`
41
- INSERT INTO manager_decisions
42
- (id, task_id, role_id, decision_type, requirements_json, fit_score, candidates_json, tie_break_reason, created_at)
43
- VALUES (?, ?, ?, 'admission', ?, ?, ?, ?, ?)
44
- `).run($e(),t.taskId,t.chosenRoleId,JSON.stringify(t.requirements),t.fitScore,JSON.stringify(t.candidates),t.tieBreakReason??null,Date.now())}function Ve(t){let e=t.toLowerCase(),n={coding:["code","implement","fix","debug","refactor","build"],analysis:["analyze","data","report","statistics","investigate"],content:["write","translate","summarize","content","draft"],review:["review","check","audit","evaluate","assess"],admin:["config","permission","deploy","manage"]};for(let[r,i]of Object.entries(n))if(i.some(o=>e.includes(o)))return r;return"general"}async function ir(t){let{prompt:e,roleId:n,requirements:r,autoSelectRole:i,deliverTo:o,reportTo:s,toolOverrides:c,config:a,sourceSessionId:d,parentId:l,templateId:p,stepId:S,traceId:Ye}=t,O;try{O=K()}catch{O=Q}let w=Je(),ye=Ve(e),f=await ue({taskId:w,requirements:r,roleId:n,autoSelectRole:i});if(!f.ok)return{ok:!1,code:f.code,reason:f.reason,requirements:r,missing:f.missing,candidates:f.candidates};let{executionProfile:R}=f,E=f.roleId,V,q=e,P=A.selectStrategy(E,ye);P?.promptTemplate&&(q=`${P.promptTemplate}
45
-
46
- ## Task
47
- ${e}`,V=P.id);let m=O.defaults,T={allowedTools:R.allowedTools??[],disallowedTools:R.disallowedTools??[],approvalRequired:R.approvalRequired??[],maxBudgetUsd:R.maxBudgetUsd??m.maxBudgetUsd,plugins:[]},_={allowedTools:qe(T.allowedTools,m.allowedTools),disallowedTools:J(T.disallowedTools,m.disallowedTools),approvalRequired:J(T.approvalRequired,m.approvalRequired),maxBudgetUsd:T.maxBudgetUsd>0?Math.min(T.maxBudgetUsd,m.maxBudgetUsd):m.maxBudgetUsd,plugins:J(T.plugins,m.plugins??[])},Y=_.allowedTools;c?.allowedTools&&(Y=c.allowedTools);let Me={timeout:a?.timeout??m.timeout,approvalRequired:_.approvalRequired,approvalTimeout:a?.approvalTimeout??m.approvalTimeout,allowedTools:Y,disallowedTools:c?.disallowedTools??_.disallowedTools,maxTurns:a?.maxTurns??m.maxTurns,maxBudgetUsd:_.maxBudgetUsd,mcpServers:a?.mcpServers,model:a?.model??R.model??m.model,effort:a?.effort??m.effort,settingSources:a?.settingSources??m.settingSources,workspacePath:a?.workspacePath,env:a?.env??m.env,claudeCodePath:m.claudeCodePath,plugins:a?.plugins??_.plugins,requirements:r,executionProfile:R},Ee={id:w,status:"pending",prompt:q,originalPrompt:e,roleId:E,parentId:l,templateId:p,stepId:S,deliverTo:o,reportTo:s,config:Me,sourceSessionId:d,createdAt:Date.now(),traceId:t.traceId};Z(Ee),f.auditCandidates&&ve({taskId:w,chosenRoleId:E,requirements:r??{},fitScore:f.fitScore,tieBreakReason:f.tieBreakReason,candidates:f.auditCandidates});let{serverBus:ke}=await import("./server-bus-GEGVMSCA.js");return ke.emit({type:"task_created",taskId:w}),{ok:!0,taskId:w,roleId:E,requirements:r??{},fitScore:f.fitScore,strategyId:V,warnings:f.warnings}}function qe(t,e){return t?.length?e?.length?t.filter(n=>e.includes(n)):t:e??[]}function J(t=[],e=[]){let n=new Set(t);for(let r of e)n.add(r);return[...n]}export{Pe as a,ce as b,U as c,De as d,se as e,ue as f,ct as g,lt as h,pt as i,he as j,gt as k,mt as l,ft as m,It as n,Te as o,A as p,ir as q};
@@ -1,27 +0,0 @@
1
- import{q as D}from"./chunk-DZIEY4CH.js";import{a as M}from"./chunk-N4ES7TCL.js";import{b as T}from"./chunk-R2WB5BKF.js";import{b as O}from"./chunk-B544JOZM.js";import{b as W}from"./chunk-Y5FFL6UO.js";import{a as I}from"./chunk-L7JP7DUO.js";import{a as C}from"./chunk-6JBSBSCL.js";import{d as x}from"./chunk-HDHMNT6D.js";import{l as A,r as L}from"./chunk-U2LBBBWO.js";import{b as S,d as z}from"./chunk-AQO6IIHV.js";import{c as E,h as F}from"./chunk-MRTJFYPR.js";F();L();z();function P(u){return{id:u.id,templateId:u.template_id,status:u.status,stepStatuses:JSON.parse(u.step_statuses),startedAt:u.started_at,completedAt:u.completed_at??void 0,error:u.error??void 0,eventId:u.event_id??void 0}}function N(u,e,t){S().prepare(`
2
- INSERT INTO workflow_executions (id, template_id, status, step_statuses, started_at, event_id)
3
- VALUES (?, ?, 'running', '{}', ?, ?)
4
- `).run(u,e,Date.now(),t??null)}function R(u){let t=S().prepare("SELECT * FROM workflow_executions WHERE id = ?").get(u);return t?P(t):void 0}function y(u,e){let t=S(),n=[],s=[];e.status!==void 0&&(n.push("status = ?"),s.push(e.status)),e.stepStatuses!==void 0&&(n.push("step_statuses = ?"),s.push(JSON.stringify(e.stepStatuses))),e.completedAt!==void 0&&(n.push("completed_at = ?"),s.push(e.completedAt)),e.error!==void 0&&(n.push("error = ?"),s.push(e.error)),n.length!==0&&(s.push(u),t.prepare(`UPDATE workflow_executions SET ${n.join(", ")} WHERE id = ?`).run(...s))}function j(u,e=50,t=0){let n=S(),s="SELECT * FROM workflow_executions",a=[];return u&&(s+=" WHERE template_id = ?",a.push(u)),s+=" ORDER BY started_at DESC LIMIT ? OFFSET ?",a.push(e,t),n.prepare(s).all(...a).map(P)}function q(u,e=20,t=0){return S().prepare(`
5
- SELECT we.id AS execution_id,
6
- we.template_id,
7
- tt.name AS template_name,
8
- we.status,
9
- we.started_at,
10
- we.completed_at,
11
- we.error,
12
- we.event_id,
13
- e.occurred_at AS event_occurred_at,
14
- e.payload AS event_payload
15
- FROM workflow_executions we
16
- LEFT JOIN task_templates tt ON tt.id = we.template_id
17
- INNER JOIN events e ON e.id = we.event_id
18
- WHERE e.event_def_id = ?
19
- ORDER BY we.started_at DESC
20
- LIMIT ? OFFSET ?
21
- `).all(u,e,t).map(a=>({executionId:a.execution_id,templateId:a.template_id,templateName:a.template_name,status:a.status,startedAt:a.started_at,completedAt:a.completed_at,error:a.error,eventId:a.event_id,eventOccurredAt:a.event_occurred_at,eventPayload:a.event_payload?JSON.parse(a.event_payload):null}))}var c=E("scheduler"),$=class{maxRetries;baseDelayMs;constructor(e){this.maxRetries=e?.maxRetries??3,this.baseDelayMs=e?.baseDelayMs??1e3}async execute(e,t,n){let s=x(),a={timeout:e.config?.timeout??s.timeout,approvalRequired:s.approvalRequired,approvalTimeout:s.approvalTimeout,plugins:e.config?.plugins,mcpServers:e.config?.mcpServers,model:e.config?.model??s.model,maxTurns:e.config?.maxTurns??s.maxTurns,maxBudgetUsd:e.config?.maxBudgetUsd??s.maxBudgetUsd,env:{...s.env,...e.config?.env},claudeCodePath:s.claudeCodePath},i=typeof e.config?.delivery_message_type=="string"&&e.config.delivery_message_type.length>0?e.config.delivery_message_type:void 0,r={templateId:e.id,executionId:t,stepResults:new Map,stepStatuses:{},config:a,continueOnError:e.config?.continueOnError??!1,failedStepIds:new Set,rolePreference:e.rolePreference,deliverTo:e.deliverTo,reportTo:e.reportTo,deliveryMessageType:i};N(t,e.id,n?.eventId),M(t),I.emit({type:"workflow_status_change",executionId:t,templateId:e.id,status:"running"});let d=this.groupIntoLayers(e.steps);for(let k of d){if(this.syncExternalState(r)==="cancelled")return this.finalizeCancelledWorkflow(e,r);let w=k.filter(l=>!this.shouldSkip(l,r)),_=k.filter(l=>this.shouldSkip(l,r));for(let l of _){let p={stepId:l.id,taskId:"",status:"skipped",error:"Skipped: dependency failed"};r.stepResults.set(l.id,p),r.stepStatuses[l.id]={taskId:"",status:"skipped",error:"Skipped: dependency failed"},c.info({stepId:l.id,executionId:t},"Step skipped due to failed dependency")}if(w.length===0)continue;let m=await Promise.allSettled(w.map(l=>this.executeStep(l,r)));if(this.syncExternalState(r)==="cancelled")return this.finalizeCancelledWorkflow(e,r);for(let l=0;l<w.length;l++){let p=w[l],v=m[l];if(v.status==="rejected"){c.error({stepId:p.id,error:v.reason},"Workflow step threw");let h={stepId:p.id,taskId:"",status:"failed",error:String(v.reason)};r.stepResults.set(p.id,h),r.failedStepIds.add(p.id),r.stepStatuses[p.id]={taskId:"",status:"failed",error:String(v.reason)}}let b=r.stepResults.get(p.id);if(b?.status==="failed"&&(r.failedStepIds.add(p.id),!r.continueOnError)){if(this.isWorkflowCancelled(r.executionId))return this.finalizeCancelledWorkflow(e,r);let h="failed";return y(t,{status:h,stepStatuses:r.stepStatuses,completedAt:Date.now(),error:b.error}),I.emit({type:"workflow_status_change",executionId:t,templateId:e.id,status:h}),c.warn({stepId:p.id,executionId:t},"Workflow step failed, workflow aborted"),{executionId:t,status:h,stepResults:r.stepResults}}}if(this.isWorkflowCancelled(r.executionId))return this.finalizeCancelledWorkflow(e,r);y(t,{stepStatuses:r.stepStatuses})}if(this.isWorkflowCancelled(r.executionId))return this.finalizeCancelledWorkflow(e,r);let o=r.failedStepIds.size>0,g=[...r.stepResults.values()].some(k=>k.status==="skipped"||k.status==="cancelled"),f=o||g?"partial":"completed";return y(t,{status:f,stepStatuses:r.stepStatuses,completedAt:Date.now()}),I.emit({type:"workflow_status_change",executionId:t,templateId:e.id,status:f}),c.info({executionId:t,status:f,completedSteps:r.stepResults.size,totalSteps:e.steps.length,failedSteps:r.failedStepIds.size},"Workflow completed"),await this.deliverWorkflowResult(r,f),{executionId:t,status:f,stepResults:r.stepResults}}groupIntoLayers(e){let t=new Map(e.map(r=>[r.id,r])),n=new Map,s=new Map;for(let r of e)n.set(r.id,0),s.set(r.id,[]);for(let r of e)if(r.dependsOn)for(let d of r.dependsOn)t.has(d)&&(n.set(r.id,(n.get(r.id)??0)+1),s.get(d)?.push(r.id));let a=[],i=new Set(e.map(r=>r.id));for(;i.size>0;){let r=[];for(let d of i)if((n.get(d)??0)===0){let o=t.get(d);o&&r.push(o)}if(r.length===0){c.warn({remaining:[...i]},"Cycle detected in step dependencies");for(let d of i){let o=t.get(d);o&&a.push([o])}break}a.push(r);for(let d of r){i.delete(d.id);for(let o of s.get(d.id)??[])n.set(o,(n.get(o)??0)-1)}}return a}syncExternalState(e){let t=R(e.executionId);if(t){for(let[n,s]of Object.entries(t.stepStatuses))(s.status==="skipped"||s.status==="failed"||s.status==="cancelled")&&!e.stepResults.has(n)&&!e.failedStepIds.has(n)&&(s.status==="skipped"?e.stepResults.set(n,{stepId:n,taskId:s.taskId,status:"skipped",error:s.error??"Manually skipped via API"}):s.status==="cancelled"?e.stepResults.set(n,{stepId:n,taskId:s.taskId,status:"cancelled",error:s.error??"Cancelled"}):(e.failedStepIds.add(n),e.stepResults.set(n,{stepId:n,taskId:s.taskId,status:"failed",error:s.error})),e.stepStatuses[n]=s,c.info({stepId:n,status:s.status,executionId:e.executionId},"Synced external step status from DB"));return t.status==="cancelled"?"cancelled":void 0}}shouldSkip(e,t){return e.dependsOn?e.dependsOn.some(n=>t.failedStepIds.has(n)?!0:t.stepResults.get(n)?.status==="skipped"):!1}async executeStep(e,t){let n=this.resolveVariables(e.prompt,t.stepResults),s=e.roleId??t.rolePreference,a=s?A(s):void 0,i=(e.config?.timeout??t.config?.timeout??600)*1e3,r="",d="failed",o;for(let m=1;m<=this.maxRetries;m++){let l=await C("template",async()=>D({prompt:n,roleId:s,requirements:e.requirements,autoSelectRole:e.autoSelectRole,config:{...t.config,...e.config?.timeout!==void 0?{timeout:e.config.timeout}:{},...e.config?.maxTurns!==void 0?{maxTurns:e.config.maxTurns}:{}},sourceSessionId:t.templateId,parentId:t.executionId,templateId:t.templateId,stepId:e.id}));if(!l.ok){o=l;break}if(r=l.taskId,t.stepStatuses[e.id]={taskId:r,status:"running",roleId:s},c.debug({stepId:e.id,taskId:r,roleId:s,attempt:m},"Workflow step task created via admission"),d=await this.waitForTaskCompletion(r,i),d==="completed"||d==="cancelled")break;if(m<this.maxRetries){let p=this.baseDelayMs*Math.pow(2,m-1);c.info({stepId:e.id,attempt:m,maxRetries:this.maxRetries,delayMs:p},"Workflow step failed, retrying"),await this.sleep(p)}}if(o&&!o.ok){let m={stepId:e.id,taskId:"",status:"failed",roleId:s,roleName:a?.name,error:`Admission failed: ${o.reason}`,admissionError:{code:o.code,reason:o.reason,candidates:o.candidates?.map(l=>({roleId:l.roleId,name:l.name,fitScore:l.fitScore}))}};t.stepResults.set(e.id,m),t.stepStatuses[e.id]={taskId:"",status:"failed",roleId:s,error:o.reason},c.warn({stepId:e.id,admissionCode:o.code,reason:o.reason},"Workflow step admission failed");return}let g=T(r),f=R(t.executionId),k=f?.stepStatuses[e.id],w=d==="completed"?"completed":k?.status==="skipped"?"skipped":k?.status==="cancelled"||f?.status==="cancelled"?"cancelled":"failed",_={stepId:e.id,taskId:r,status:w,roleId:s,roleName:a?.name,result:g?.result,error:g?.error};t.stepResults.set(e.id,_),t.stepStatuses[e.id]={taskId:r,status:_.status,roleId:s,result:g?.result,error:g?.error}}async deliverWorkflowResult(e,t){let n=O();if(e.deliverTo&&e.deliverTo.length>0){let s=this.assembleWorkflowSummary(e);for(let a of e.deliverTo)if(a.type==="channel"){let i=W(a.channelId);try{await n.send({taskId:e.executionId,channelId:a.channelId,chatId:a.chatId,platform:i?.platform,content:s,messageType:e.deliveryMessageType??"deliver"})}catch(r){c.error({executionId:e.executionId,channelId:a.channelId,error:r},"Workflow delivery failed")}}}if(e.reportTo&&e.reportTo.length>0){let s=[...e.stepResults.values()].filter(o=>o.status==="completed").length,a=e.failedStepIds.size,i=[...e.stepResults.values()].filter(o=>o.status==="skipped").length,r=e.stepResults.size,d=`Workflow ${t}: ${s}/${r} steps completed${a>0?`, ${a} failed`:""}${i>0?`, ${i} skipped`:""}`;for(let o of e.reportTo)if(o.type==="channel"){let g=W(o.channelId);try{await n.send({taskId:e.executionId,channelId:o.channelId,chatId:o.chatId,platform:g?.platform,content:d,messageType:"report"})}catch(f){c.error({executionId:e.executionId,channelId:o.channelId,error:f},"Workflow report delivery failed")}}}}assembleWorkflowSummary(e){let t=[];for(let[n,s]of e.stepResults){let a=s.status==="completed"?"OK":s.status==="skipped"?"SKIP":"FAIL",i=s.roleName?` (${s.roleName})`:"",r=s.result??s.error??"No output";t.push(`## [${a}] Step: ${n}${i}
22
-
23
- ${r}`)}return t.join(`
24
-
25
- ---
26
-
27
- `)}resolveVariables(e,t){return e.replace(/\{\{([^}]+)\.result\}\}/g,(n,s)=>t.get(s)?.result??`[no result from ${s}]`)}waitForTaskCompletion(e,t=6e5){return new Promise(n=>{let s=!1,a=Date.now(),i=()=>{s=!0,I.off("task_status_change",r)},r=o=>{s||o.taskId!==e||(o.newStatus==="completed"?(i(),n("completed")):o.newStatus==="failed"?(i(),n("failed")):o.newStatus==="cancelled"?(i(),n("cancelled")):o.newStatus==="blocked"&&(i(),n("blocked")))};I.on("task_status_change",r);let d=()=>{if(s)return;if(Date.now()-a>t){i(),n("failed");return}let o=T(e);if(!o){i(),n("failed");return}if(o.status==="completed"){i(),n("completed");return}if(o.status==="failed"){i(),n("failed");return}if(o.status==="cancelled"){i(),n("cancelled");return}if(o.status==="blocked"){i(),n("blocked");return}setTimeout(d,5e3)};setTimeout(d,100)})}sleep(e){return new Promise(t=>setTimeout(t,e))}isWorkflowCancelled(e){return R(e)?.status==="cancelled"}finalizeCancelledWorkflow(e,t){let n=R(t.executionId);return y(t.executionId,{status:"cancelled",stepStatuses:n?.stepStatuses??t.stepStatuses,completedAt:n?.completedAt??Date.now(),error:n?.error}),c.info({executionId:t.executionId,templateId:e.id},"Workflow cancelled"),{executionId:t.executionId,status:"cancelled",stepResults:t.stepResults}}};export{R as a,y as b,j as c,q as d,$ as e};
@@ -1 +0,0 @@
1
- import{a as i}from"./chunk-47COBMRF.js";import{c as p}from"./chunk-7IFLU3CY.js";import{d as c}from"./chunk-6WRZJVQ2.js";import{f as d,h as R}from"./chunk-WBAPIPST.js";import{c as g,h as y}from"./chunk-MRTJFYPR.js";R();import{readFileSync as P,existsSync as _}from"fs";import{resolve as O}from"path";import{homedir as E}from"os";import{parse as w}from"yaml";y();var T=g("config");function S(e){return e.replace(/\$\{(\w+)}/g,(t,r)=>process.env[r]??"")}function h(e){return e.startsWith("~/")?O(E(),e.slice(2)):e}function u(e){if(typeof e=="string")return S(e);if(Array.isArray(e))return e.map(u);if(e!==null&&typeof e=="object"){let t={};for(let[r,n]of Object.entries(e))t[r]=u(n);return t}return e}function m(e,t){let r={...e};for(let n of Object.keys(t)){let s=t[n],o=e[n];s!==null&&typeof s=="object"&&!Array.isArray(s)&&o!==null&&typeof o=="object"&&!Array.isArray(o)?r[n]=m(o,s):r[n]=s}return r}function v(e){return e.defaults.deniedReadPaths&&(e.defaults.deniedReadPaths=e.defaults.deniedReadPaths.map(h)),e.defaults.sensitivePaths&&!e.defaults.deniedReadPaths&&(T.warn("config.defaults.sensitivePaths is deprecated \u2014 use config.defaults.deniedReadPaths instead. Values have been migrated automatically."),e.defaults.deniedReadPaths=e.defaults.sensitivePaths.map(h)),e}function k(){let e={};for(let t of process.argv.slice(2)){let r=t.match(/^--([a-z-]+)=(.+)$/);r&&(e[r[1]]=r[2])}return e}function A(e){let t=process.env.ADAM_PORT;t&&(e.server.port=parseInt(t,10));let r=process.env.ANTHROPIC_MODEL;r&&(e.defaults.model=r);let n=process.env.ADAM_API_KEY;return n&&(e.server.apiKey=n),e}function C(e){let t=k();return t.port&&(e.server.port=parseInt(t.port,10)),t.host&&(e.server.host=t.host),t.timeout&&(e.defaults.timeout=parseInt(t.timeout,10)),t["api-key"]&&(e.server.apiKey=t["api-key"]),e}function D(e){let t=e??d,r={};if(_(t)){let f=P(t,"utf-8"),l=w(f);l&&(r=u(l))}let n=m(i,r),s=A(n),o=C(s);return v(o)}function I(){let e=JSON.parse(JSON.stringify(i)),t=A(e),r=C(t);return v(r)}function V(){let e={},t={ANTHROPIC_API_KEY:"anthropic.apiKey",ANTHROPIC_BASE_URL:"anthropic.baseUrl",ANTHROPIC_MODEL:"anthropic.model",ANTHROPIC_DEFAULT_OPUS_MODEL:"anthropic.defaultOpusModel",ANTHROPIC_DEFAULT_SONNET_MODEL:"anthropic.defaultSonnetModel",ANTHROPIC_DEFAULT_HAIKU_MODEL:"anthropic.defaultHaikuModel",ANTHROPIC_SMALL_FAST_MODEL:"anthropic.smallFastModel",ADAM_PORT:"server.port",ADAM_API_KEY:"server.apiKey"},r={};for(let[s,o]of Object.entries(t)){let a=process.env[s];if(a&&a.length>0)if(o==="server.port"){let f=parseInt(a,10);isNaN(f)||(e[o]=f)}else e[o]=a}let n=p();if(n)for(let[s,o]of Object.entries(n))s in t||s.startsWith("ANTHROPIC_")||s.startsWith("ADAM_")||(r[s]=o);return Object.keys(r).length>0&&(e["defaults.env"]=r),e}function j(){try{return c().defaults}catch{return i.defaults}}function W(){try{return c().chat??i.chat}catch{return i.chat}}export{D as a,I as b,V as c,j as d,W as e};
@@ -1,12 +0,0 @@
1
- import{a as F}from"./chunk-UXDTFTG5.js";import{a as L}from"./chunk-SWP2JC54.js";import{a as $,b as P,c as N,j as B}from"./chunk-X5V4VMET.js";import{d as C,h as k,i as pe}from"./chunk-U2LBBBWO.js";import{b as R,d as ce}from"./chunk-AQO6IIHV.js";import{c as T,h as de}from"./chunk-MRTJFYPR.js";import{z as i}from"zod";var l=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,me=/^role-[a-z0-9][a-z0-9-]*$/,ue=/^tmpl-[a-f0-9]+$/,fe=/^[a-zA-Z][\w-]*@[a-zA-Z][\w-]*$/,be=/^(?:\/|~\/)/,Ge=i.string().regex(l,"taskId must be a UUID (e.g., 'a1b2c3d4-...'). Use list_tasks to find existing IDs.").describe("Task ID (UUID). Use list_tasks or read_task_status to find existing IDs."),U=i.string().refine(t=>l.test(t)||me.test(t),{message:"roleId must be a UUID or a system role ID like 'role-chat-manager'. Use list_roles to find IDs (do NOT pass the Role's display name)."}).describe("Role ID (UUID or 'role-<name>' for presets). Use list_roles to find IDs \u2014 NOT the human-readable name."),He=i.string().regex(l,"goalId must be a UUID. Use list_goals to find existing IDs.").describe("Goal ID (UUID). Use list_goals to find existing IDs."),qe=i.string().regex(l,"channelId must be a UUID. Use list_channels to find IDs (do NOT pass the channel's display name).").describe("Channel ID (UUID). Use list_channels to find IDs \u2014 NOT the channel's display name."),Ve=i.string().regex(l,"sessionId must be a UUID.").describe("Chat session ID (UUID)."),Xe=i.string().refine(t=>l.test(t)||ue.test(t),{message:"templateId must be a UUID or 'tmpl-<hex>' identifier. Use list_templates to find IDs."}).describe("Task template ID. Use list_templates to find IDs."),Ye=i.string().regex(fe,"pluginId must be '<name>@<scope>' (e.g., 'github@anthropic'). Use list_available_plugins to discover.").describe("Plugin ID in '<name>@<scope>' format (e.g., 'github@anthropic'). Use list_available_plugins to discover."),Je=i.string().regex(l,"eventDefId must be a UUID. Use list_event_defs to find IDs.").describe("Event definition ID (UUID). Use list_event_defs to find IDs."),We=i.string().regex(l,"ruleId must be a UUID. Use list_delivery_rules to find IDs.").describe("Delivery rule ID (UUID). Use list_delivery_rules to find IDs."),Ze=i.string().regex(l,"strategyId must be a UUID. Use list_strategies to find IDs.").describe("Strategy ID (UUID). Use list_strategies to find IDs."),Qe=i.string().regex(be,"Path must be absolute ('/Users/.../file' or '~/...'). Do NOT use relative paths or remote URLs.").describe("Absolute local file path (e.g., '/Users/me/file.txt' or '~/Documents/file.txt'). Remote URLs are NOT accepted \u2014 download files locally first."),et=i.string().regex(/^[A-Za-z0-9._-]+$/,"stepId must be 1-128 chars: letters, digits, dots, underscores, or dashes.").describe("Workflow step ID \u2014 a human-readable identifier for a workflow step.");import{tool as u}from"@anthropic-ai/claude-agent-sdk";import{z as a}from"zod";import{v4 as ye}from"uuid";function p(t){return{content:[{type:"text",text:JSON.stringify(t)}]}}var he={query:a.string().describe("Search query for memory retrieval"),roleId:U.optional().describe("Role ID to scope search (omit for cross-role)"),topK:a.number().optional().describe("Max results to return (default 5)")},ge={query:a.string().describe("Search query for memory retrieval"),topK:a.number().optional().describe("Max results to return (default 5)")},xe={id:a.string().optional().describe("Memory ID to update. Omit to create new."),roleId:U.describe("Role ID to save memory under"),content:a.string().describe("Memory content text"),type:a.enum(["event","thought","reflection"]).optional().describe("Memory type (default: thought)"),keywords:a.array(a.string()).optional().describe("Keywords for BM25 search"),importance:a.number().min(1).max(5).optional().describe("Importance 1-5 (default: 3)"),tier:a.enum(["working","episodic","semantic"]).optional().describe("Memory tier (default: episodic)")},Se={id:a.string().optional().describe("Memory ID to update. Omit to create new."),content:a.string().describe("Memory content text"),type:a.enum(["event","thought","reflection"]).optional().describe("Memory type (default: thought)"),keywords:a.array(a.string()).optional().describe("Keywords for BM25 search"),importance:a.number().min(1).max(5).optional().describe("Importance 1-5 (default: 3)"),tier:a.enum(["working","episodic","semantic"]).optional().describe("Memory tier (default: episodic)")},j={id:a.string().describe("Memory ID to delete")};async function K(t,e){let r=t??e.roleId,o=e.topK??5,s=await F(r,e.query,{topK:o});return p({results:s.map(n=>({id:n.id,type:n.type,content:n.content,keywords:n.keywords,importance:n.importance,score:n.score}))})}async function z(t,e){let r=t??e.roleId;if(!r)return p({error:"roleId is required"});let o,s=!0;try{o=await L(e.content)}catch{s=!1}if(e.id){if(!P(e.id))return p({error:`Memory ${e.id} not found`});let v=N(e.id,{content:e.content,embedding:o,keywords:e.keywords,importance:e.importance,type:e.type});return p({id:e.id,action:"updated",success:v,embeddingUpdated:s})}let n=`mem-${ye().slice(0,8)}`,d=Date.now();return $({id:n,roleId:r,type:e.type??"thought",content:e.content,embedding:o,keywords:e.keywords??[],importance:e.importance??3,sourceType:"manual",createdAt:d,lastAccessed:d,retrievedCount:0,tier:e.tier??"episodic"}),p({id:n,action:"created",success:!0,embeddingUpdated:s})}async function G(t,e){if(t){let r=P(e.id);if(!r)return p({error:`Memory ${e.id} not found`});if(r.roleId!==t)return p({error:`Memory ${e.id} does not belong to this role`})}return B(e.id),p({id:e.id,deleted:!0})}function dt(t){return t?[u("search_memories","Search agent memory using hybrid vector + keyword search. Returns scored memories ranked by relevance, recency, and importance.",ge,async e=>K(t,e)),u("save_memory","Create a new memory or update an existing one. Provide 'id' to update, omit to create. Embedding is auto-generated from content.",Se,async e=>z(t,e)),u("delete_memory","Delete a memory by ID.",j,async e=>G(t,e))]:[u("search_memories","Search agent memory using hybrid vector + keyword search. Returns scored memories ranked by relevance, recency, and importance.",he,async e=>K(void 0,e)),u("save_memory","Create a new memory or update an existing one. Provide 'id' to update, omit to create. Embedding is auto-generated from content.",xe,async e=>z(void 0,e)),u("delete_memory","Delete a memory by ID.",j,async e=>G(void 0,e))]}import{accessSync as q,constants as V}from"fs";import{accessSync as ve,constants as Ie,existsSync as H,realpathSync as _e}from"fs";import{join as E}from"path";import{spawn as we}from"child_process";import{execFileSync as De}from"child_process";var b=null;function y(){if(b)return b;let t=typeof import.meta.dirname=="string"?import.meta.dirname:__dirname??".",e=E(t,"landlock-exec","landlock-exec");if(H(e))return b=e,e;let r=process.env.PATH?.split(":").find(o=>H(E(o,"landlock-exec")));return r?(b=E(r,"landlock-exec"),b):e}var h=class{platform="landlock";async isAvailable(){if(process.platform!=="linux")return!1;try{ve(y(),Ie.X_OK)}catch{return!1}try{return De(y(),["--check"],{timeout:5e3,stdio:["ignore","pipe","pipe"]}),!0}catch{return!1}}spawn(e){let r=e.command??"node",o=e.args??[],s=[];for(let n of e.visiblePaths??[]){let d=n.mode==="rw"?"--rw":"--ro",c;try{c=_e(n.path)}catch{c=n.path}s.push(d,c),c!==n.path&&s.push(d,n.path)}return s.push("--",r,...o),we(y(),s,{cwd:e.cwd,env:e.env,stdio:"pipe",signal:e.signal})}};function X(){if(process.platform==="linux")try{return q(y(),V.X_OK),"landlock"}catch{return"none"}if(process.platform==="darwin")try{return q("/usr/bin/sandbox-exec",V.X_OK),"sandbox-exec"}catch{return"none"}return"none"}de();import{spawn as Ae}from"child_process";import{readFileSync as Z,writeFileSync as Oe,mkdtempSync as Me,realpathSync as A,rmSync as Te}from"fs";import{join as m}from"path";import{tmpdir as Ce}from"os";pe();var Re=["com.apple.Accessibility","com.apple.CoreGraphics","com.apple.SpeakSelection","com.apple.TimeMachine","com.apple.assistant","com.apple.assistant.backedup","com.apple.assistant.support"],ke=["com.apple.coreservices.appleevents"];function Pe(t){if(!C.test(t))throw new Error(`Invalid bundle id for SBPL appleevent destination: ${t}`)}function Y(t,e){return k(t)?.find(r=>r.id===e)}function Ue(t){if(!t)return"";let e=["","; ===== Role OS capability: Automation =====","(allow lsopen)","(allow mach-lookup",...ke.map(o=>` (global-name "${o}")`),")"],r=t.targets??[];for(let o of r)Pe(o),e.push(`(allow appleevent-send (appleevent-destination "${o}"))`);return e.join(`
2
- `)}function Ee(t){return t?["","; ===== Role OS capability: Accessibility =====","(allow signal)","(allow mach-priv-host-port)","(allow mach-task-name)",'(allow mach-lookup (local-name "com.apple.axserver"))',"(allow user-preference-read",...Re.map(r=>` (preference-domain "${r}")`),")"].join(`
3
- `):""}function J(t){let e=k(t);return e?.length?[Ue(Y(e,"automation")),Ee(Y(e,"accessibility"))].filter(Boolean).join(`
4
- `):""}var Q=T("sandbox-macos"),W="/usr/bin/sandbox-exec";function Le(){let t=[m(typeof import.meta.dirname=="string"?import.meta.dirname:".","profiles","role-sandbox.sb"),m(typeof import.meta.dirname=="string"?import.meta.dirname:".","..","src","sandbox","profiles","role-sandbox.sb"),m(process.cwd(),"src","sandbox","profiles","role-sandbox.sb")];for(let e of t)try{return Z(e,"utf-8"),e}catch{}return t[t.length-1]}var $e=Le();function g(t){if(!t.startsWith("/"))throw new Error(`Sandbox path must be absolute: ${t}`);if(t.includes('"')||t.includes(")")||t.includes("(")||t.includes("$"))throw new Error(`Sandbox path contains invalid characters for SBPL: ${t}`)}function Ne(t){let e=[`
5
- ; ===== Per-Role writable paths =====`];for(let r of t){if(r.mode!=="rw")continue;let o;try{o=A(r.path)}catch{o=r.path}g(o),e.push(`(allow file-write* (subpath "${o}"))`),o!==r.path&&(g(r.path),e.push(`(allow file-write* (subpath "${r.path}"))`))}return e.join(`
6
- `)}function Be(t){if(!t.length)return"";let e=[`
7
- ; ===== Global read blacklist (deniedReadPaths) =====`];for(let r of t){let o;try{o=A(r)}catch{o=r}try{g(o),e.push(`(deny file-read-data (subpath "${o}"))`),e.push(`(deny file-read-metadata (subpath "${o}"))`),o!==r&&(g(r),e.push(`(deny file-read-data (subpath "${r}"))`),e.push(`(deny file-read-metadata (subpath "${r}"))`))}catch(s){Q.warn({path:r,error:s.message},"Skipping deniedReadPath: invalid for SBPL")}}return e.join(`
8
- `)}var x=class{platform="sandbox-exec";async isAvailable(){try{let{existsSync:e}=await import("fs");return e(W)}catch{return!1}}spawn(e){let{command:r,args:o,cwd:s,env:n,signal:d,visiblePaths:c,deniedReadPaths:v,osCapabilities:re}=e,oe=Z($e,"utf-8"),ne=Ne(c),ae=Be(v??[]),se=J(re),ie=oe+ne+ae+se+`
9
- `,I=A(Me(m(Ce(),"adam-sandbox-"))),_=m(I,"role.sb");Oe(_,ie,"utf-8");let w=I,D=n?.HOME??process.env.HOME??"/tmp",le={...n,TMPDIR:w,CLAUDE_CODE_TMPDIR:w,CLAUDE_CONFIG_DIR:m(D,".claude")};Q.debug({command:r,visiblePaths:c.length,profilePath:_},"Spawning sandboxed process");let M=Ae(W,["-f",_,"-D",`TMPDIR=${w}`,"-D",`CLAUDE_CONFIG=${m(D,".claude")}`,"-D",`HOME_CACHE=${m(D,"Library","Caches")}`,r,...o],{cwd:s,env:le,stdio:"pipe",signal:d});return M.on("exit",()=>{try{Te(I,{recursive:!0,force:!0})}catch{}}),M}};import{spawn as Fe}from"child_process";var f=null,ee=null,S=null;function je(){if(f)return f;let t=ee??X();return ee=t,t==="sandbox-exec"?f=new x:t==="landlock"?f=new h:f=new O(t),f}async function Ot(){return S!==null||(S=await je().isAvailable()),S}var O=class{platform;constructor(e){this.platform=e}async isAvailable(){return!1}spawn(e){let r=e.command??"node",o=e.args??[];return Fe(r,o,{cwd:e.cwd,env:e.env,stdio:"pipe",signal:e.signal})}};ce();function Ke(t){return{id:t.id,roleId:t.role_id??void 0,taskPattern:t.task_pattern,maxRiskLevel:t.max_risk_level,createdAt:t.created_at,createdByTaskId:t.created_by_task_id??void 0}}var te={low:1,medium:2,high:3};function Ct(t){R().prepare(`
10
- INSERT INTO approval_rules (id, role_id, task_pattern, max_risk_level, created_at, created_by_task_id)
11
- VALUES (?, ?, ?, ?, ?, ?)
12
- `).run(t.id,t.roleId??null,t.taskPattern,t.maxRiskLevel,t.createdAt,t.createdByTaskId??null)}function Lt(t,e,r){let s=R().prepare("SELECT * FROM approval_rules ORDER BY created_at DESC").all();for(let n of s)if(!(n.role_id&&n.role_id!==t)&&!(te[r]>te[n.max_risk_level]))try{if(new RegExp(n.task_pattern,"i").test(e))return Ke(n)}catch{}}export{Ct as a,Lt as b,Ge as c,U as d,He as e,qe as f,Ve as g,Xe as h,Ye as i,Je as j,We as k,Ze as l,Qe as m,et as n,dt as o,je as p,Ot as q};
@@ -1,50 +0,0 @@
1
- import{d as O}from"./chunk-FUWPDXXG.js";import{p as N}from"./chunk-X5V4VMET.js";import{b as H}from"./chunk-ZQ4PNKMQ.js";import{e as E}from"./chunk-E4WIUUL4.js";import{i as J,j as P,q as R}from"./chunk-DZIEY4CH.js";import{b as C}from"./chunk-R2WB5BKF.js";import{a as f}from"./chunk-L7JP7DUO.js";import{a as _}from"./chunk-6JBSBSCL.js";import{c as S,d as m,e as D,f as w,h as M}from"./chunk-2BXTT4P2.js";import{d as v}from"./chunk-HDHMNT6D.js";import{o as A,r as V}from"./chunk-U2LBBBWO.js";import{c as T,h as b}from"./chunk-MRTJFYPR.js";b();V();import{v4 as h}from"uuid";import{CronExpressionParser as Y}from"cron-parser";b();import{v4 as W}from"uuid";var u=T("scheduler"),X=new E,I=new Map;async function K(o){if(I.has(o.id))throw u.warn({templateId:o.id},"Feature-mining dispatch already in flight"),new Error("already in flight");let e=Q(o);I.set(o.id,e);try{return await e}finally{I.delete(o.id)}}async function Q(o){let e=o.config??{},t=e.last_run_at??null,s=e.max_sessions??15,r=e.max_messages_per_session??30,n=e.message_char_cap??500,c=Math.min(s,50),i=Math.min(r,100),l=Math.min(n,2e3);(c!==s||i!==r||l!==n)&&u.warn({templateId:o.id,rawMaxSessions:s,rawMaxMessages:r,rawCharCap:n,maxSessions:c,maxMessagesPerSession:i,messageCharCap:l},"Feature-mining caps clamped to hard ceilings (50/100/2000)");let x=O(void 0,c,0).filter(p=>t===null||p.lastActiveAt>t),y=[];for(let p of x){let z=H(p.id,i,0);for(let g of z){let q=g.content.length>l?g.content.slice(0,l)+" [...truncated]":g.content;y.push(`[${new Date(g.createdAt).toLocaleString()}] ${g.role}: ${q}`)}}let G=y.length>0?y.join(`
2
- `):"No new sessions.",F=t?new Date(t).toLocaleString():"the beginning of recorded history",L=o.steps.map(p=>({...p,prompt:p.prompt.replace(/\{\{CHAT_DATA\}\}/g,G).replace(/\{\{LAST_RUN_AT_HUMAN\}\}/g,F)})),U={...o,steps:L};return u.info({templateId:o.id,sessionCount:x.length,lastRunAt:t},"Feature-mining template rendered"),U}async function $(o,e={}){let t=e.executionId??W();if(u.info({templateName:o.name,executionId:t,trigger:e.triggerContext},"Dispatching template"),o.goalIds&&o.goalIds.length>0){for(let c of o.goalIds){let i=P(c);if(!i){u.warn({goalId:c,templateId:o.id},"Goal reference not found, skipping");continue}let l=W();J({id:l,name:i.name,description:i.description,roleId:i.roleId,metricType:i.metricType,targetValue:i.targetValue,currentValue:0,deadline:i.deadline,budgetUsd:i.budgetUsd,status:"active",createdAt:Date.now(),sourceSessionId:o.sourceSessionId,deliverTo:o.deliverTo,reportTo:o.reportTo});let d=await _("template",()=>R({prompt:`Decompose and execute goal: ${i.name}. ${i.description??""}`,roleId:o.rolePreference??i.roleId,config:{...v()},deliverTo:o.deliverTo,reportTo:o.reportTo,sourceSessionId:o.sourceSessionId,parentId:l,templateId:o.id}));if(!d.ok){u.error({templateId:o.id,sourceGoalId:c,newGoalId:l,code:d.code,reason:d.reason},"Decomposition task admission failed");continue}u.info({templateId:o.id,sourceGoalId:c,newGoalId:l,taskId:d.taskId},"Goal reference triggered, dispatched decomposition task")}return}let s=o,r=null;if(o.presetId==="feature-mining")try{s=await K(o),r=Date.now()}catch(c){if(c.message==="already in flight"){u.warn({templateId:o.id},"Skipping feature-mining dispatch \u2014 already in flight");return}throw c}let n=await X.execute(s,t,{eventId:e.triggerContext?.eventId});if(o.presetId==="feature-mining"&&r!==null)if(n.status==="completed"||n.status==="partial")try{D(o.id,{config:{...o.config??{},last_run_at:r}}),u.info({templateId:o.id,last_run_at:r},"Feature-mining last_run_at updated")}catch(c){u.error({templateId:o.id,err:c},"Failed to write back feature-mining last_run_at")}else u.warn({templateId:o.id,status:n.status},"Feature-mining execute did not succeed; last_run_at preserved for retry");u.info({templateName:o.name,executionId:t,status:n.status,steps:n.stepResults.size},"Workflow execution finished")}var a=T("scheduler"),k="ai-hourly-digest";function Z(){if(m(k)){a.debug({templateId:k},"Built-in template already exists");return}let e={id:k,name:"AI Hourly Digest",description:"\u6BCF\u5C0F\u65F6\u641C\u7D22 AI \u524D\u6CBF\u6587\u7AE0\uFF0C\u603B\u7ED3\u540E\u4FDD\u5B58\u5230 Omnifocus",trigger:{type:"cron",cron:"0 * * * *"},enabled:!0,steps:[{id:"search_ai_news",autoSelectRole:!0,requirements:{},prompt:`\u641C\u7D22\u8FC7\u53BB 24 \u5C0F\u65F6\u5185\u5173\u4E8E AI/\u4EBA\u5DE5\u667A\u80FD\u7684\u6700\u65B0\u524D\u6CBF\u6587\u7AE0\u3002
3
-
4
- \u641C\u7D22\u6765\u6E90:
5
- 1. Hacker News AI \u677F\u5757 (https://news.ycombinator.com/front?day=1)
6
- 2. ArXiv cs.AI \u6700\u65B0\u8BBA\u6587 (https://arxiv.org/list/cs.AI/recent)
7
- 3. Reddit r/MachineLearning \u70ED\u95E8\u5E16\u5B50
8
-
9
- \u627E\u51FA\u4E00\u7BC7\u6700\u6709\u4EF7\u503C\u3001\u6700\u6709\u6280\u672F\u6DF1\u5EA6\u7684\u6587\u7AE0\u3002
10
-
11
- \u8F93\u51FA\u683C\u5F0F:
12
- - \u6807\u9898\uFF1A[\u6587\u7AE0\u6807\u9898]
13
- - \u6765\u6E90\uFF1A[\u7F51\u7AD9/\u5E73\u53F0\u540D\u79F0]
14
- - \u94FE\u63A5\uFF1A[\u5B8C\u6574 URL]
15
- - \u6838\u5FC3\u4EF7\u503C\uFF1A[1-2 \u53E5\u8BDD\u8BF4\u660E\u4E3A\u4EC0\u4E48\u8FD9\u7BC7\u6587\u7AE0\u503C\u5F97\u770B]`},{id:"summarize_article",dependsOn:["search_ai_news"],autoSelectRole:!0,requirements:{},prompt:`\u9605\u8BFB\u5E76\u603B\u7ED3\u8FD9\u7BC7\u6587\u7AE0\u3002
16
-
17
- \u6587\u7AE0\u4FE1\u606F:
18
- {{search_ai_news.result}}
19
-
20
- \u8BF7:
21
- 1. \u7528 WebFetch \u83B7\u53D6\u6587\u7AE0\u5B8C\u6574\u5185\u5BB9
22
- 2. \u63D0\u53D6\u6838\u5FC3\u89C2\u70B9\u548C\u6280\u672F\u7EC6\u8282
23
- 3. \u7528\u4E2D\u6587\u5199\u51FA 300-500 \u5B57\u7684\u603B\u7ED3
24
-
25
- \u603B\u7ED3\u7ED3\u6784:
26
- ## \u6838\u5FC3\u53D1\u73B0
27
- [\u6587\u7AE0\u6700\u91CD\u8981\u7684\u53D1\u73B0/\u521B\u65B0\u70B9]
28
-
29
- ## \u6280\u672F\u7EC6\u8282
30
- [\u5173\u952E\u7684\u6280\u672F\u65B9\u6CD5/\u5B9E\u73B0\u7EC6\u8282]
31
-
32
- ## \u5F71\u54CD/\u610F\u4E49
33
- [\u8FD9\u9879\u5DE5\u4F5C\u7684\u610F\u4E49\u6216\u5BF9\u884C\u4E1A\u7684\u5F71\u54CD]
34
-
35
- ## \u539F\u6587\u94FE\u63A5
36
- [\u6587\u7AE0 URL]`},{id:"save_to_omnifocus",dependsOn:["summarize_article"],autoSelectRole:!0,requirements:{},prompt:`\u5C06\u6587\u7AE0\u603B\u7ED3\u4FDD\u5B58\u5230 Omnifocus\u3002
37
-
38
- \u603B\u7ED3\u5185\u5BB9:
39
- {{summarize_article.result}}
40
-
41
- \u63D0\u53D6\u6587\u7AE0\u6807\u9898\u548C\u5B8C\u6574\u603B\u7ED3\uFF0C\u7136\u540E\u6267\u884C\u4EE5\u4E0B\u547D\u4EE4\u6DFB\u52A0\u5230 Omnifocus Inbox\uFF1A
42
-
43
- osascript /Users/norvyn/Code/Projects/Adam/scripts/add-to-omnifocus.applescript "[\u6587\u7AE0\u6807\u9898] AI \u524D\u6CBF\u901F\u9012" "[\u5B8C\u6574\u603B\u7ED3\u5185\u5BB9]"
44
-
45
- \u6CE8\u610F\uFF1A
46
- - \u5C06 [\u6587\u7AE0\u6807\u9898] \u66FF\u6362\u4E3A\u5B9E\u9645\u6807\u9898
47
- - \u5C06 [\u5B8C\u6574\u603B\u7ED3\u5185\u5BB9] \u66FF\u6362\u4E3A\u5B8C\u6574\u7684\u603B\u7ED3\u6587\u672C\uFF08\u5305\u542B\u6838\u5FC3\u53D1\u73B0\u3001\u6280\u672F\u7EC6\u8282\u3001\u5F71\u54CD/\u610F\u4E49\u548C\u539F\u6587\u94FE\u63A5\uFF09
48
- - \u603B\u7ED3\u5185\u5BB9\u4F7F\u7528\u6362\u884C\u7B26\u5206\u9694\u5404\u90E8\u5206
49
-
50
- \u5B8C\u6210\u540E\u8F93\u51FA\uFF1A\u5DF2\u4FDD\u5B58\u5230 Omnifocus\uFF1A[\u4EFB\u52A1\u6807\u9898]`}],config:{timeout:300},tags:["ai","digest","hourly","automation"],createdAt:Date.now()};S(e),a.info({templateId:k,cron:"0 * * * *"},"Registered built-in AI Hourly Digest template")}var j=class{cronJobs=new Map;started=!1;taskCompletionHandler=null;workflowCompletionHandler=null;async start(){if(this.started)return;this.started=!0,Z();let e=w(!0),t=0;for(let r of e)r.trigger.type==="cron"&&r.trigger.cron&&(this.scheduleCronJob(r),t++);let s=0;for(let r of e)r.trigger.type==="once"&&r.trigger.runAt&&(this.scheduleOnceJob(r.id),s++);this.taskCompletionHandler=r=>{r.newStatus==="completed"&&this.checkTemplateCompleteTriggers(r.taskId).catch(n=>{a.error({taskId:r.taskId,error:n},"Template-complete trigger check failed")})},f.on("task_status_change",this.taskCompletionHandler),this.workflowCompletionHandler=r=>{(r.status==="completed"||r.status==="partial")&&this.checkWorkflowCompleteTriggers(r.templateId).catch(n=>{a.error({templateId:r.templateId,error:n},"Workflow-complete trigger check failed")})},f.on("workflow_status_change",this.workflowCompletionHandler),this.cronJobs.set("memory-cleanup",setInterval(()=>{this.runMemoryCleanup()},36e5)),a.info({cronCount:t,onceCount:s},"Bree engine started with cron jobs + memory cleanup")}runMemoryCleanup(){try{let e=A(void 0,1e3,0),t=0;for(let s of e)t+=N(s.id);t>0&&a.info({totalCleaned:t},"Memory cleanup completed")}catch(e){a.warn({error:e},"Memory cleanup failed")}}async stop(){for(let[,e]of this.cronJobs)clearTimeout(e),clearInterval(e);this.cronJobs.clear(),this.taskCompletionHandler&&(f.off("task_status_change",this.taskCompletionHandler),this.taskCompletionHandler=null),this.workflowCompletionHandler&&(f.off("workflow_status_change",this.workflowCompletionHandler),this.workflowCompletionHandler=null),this.started=!1,a.info("Bree engine stopped")}scheduleCronJob(e){let t=`template-${e.id}`;this.cronJobs.has(t)&&(clearTimeout(this.cronJobs.get(t)),this.cronJobs.delete(t));let s;try{s=Y.parse(e.trigger.cron)}catch{a.warn({templateId:e.id,cron:e.trigger.cron},"Invalid cron expression");return}let r=()=>{let d=s.next().getTime()-Date.now();return Math.max(d,1e3)},n=()=>{this.executeCronTrigger(e.id).catch(d=>{a.error({templateId:e.id,error:d},"Cron trigger failed")});let l=setTimeout(n,r());this.cronJobs.set(t,l)},c=r(),i=setTimeout(n,c);this.cronJobs.set(t,i),a.debug({jobName:t,nextRun:new Date(Date.now()+c).toISOString()},"Scheduled cron job")}async executeCronTrigger(e){let t=m(e);!t||!t.enabled||(a.info({templateName:t.name},"Cron triggered"),await this.executeWorkflow(t,h()))}async scheduleJob(e){let t=m(e);t&&t.trigger.type==="cron"&&t.trigger.cron&&this.scheduleCronJob(t)}async unscheduleJob(e){let t=`template-${e}`,s=this.cronJobs.get(t);s&&(clearTimeout(s),this.cronJobs.delete(t))}async runNow(e){let t=m(e);if(!t)throw new Error(`Template ${e} not found`);let s=h();return this.executeWorkflow(t,s).catch(r=>{a.error({templateId:e,error:r},"Workflow execution failed")}),s}async checkTemplateCompleteTriggers(e){let t=C(e);if(!t||!t.templateId)return;let r=w(!0).filter(n=>n.trigger.type!=="template_complete"||!n.trigger.event?!1:n.trigger.event===`template_complete:${t.templateId}`);for(let n of r)a.info({templateName:n.name,sourceTemplateId:t.templateId},"Template-complete trigger matched"),await this.executeWorkflow(n,h())}async executeWorkflow(e,t){await $(e,{executionId:t,triggerContext:{source:"bree"}})}async checkWorkflowCompleteTriggers(e){let s=w(!0).filter(r=>r.trigger.type!=="workflow_complete"||!r.trigger.event?!1:r.trigger.event===`workflow_complete:${e}`);for(let r of s)a.info({templateName:r.name,sourceTemplateId:e},"Workflow-complete trigger matched"),await this.executeWorkflow(r,h())}scheduleOnceJob(e){let t=m(e);if(!t||!t.enabled||t.trigger.type!=="once")return;let r=(t.trigger.runAt?new Date(t.trigger.runAt).getTime():0)-Date.now();if(r<=0){a.info({templateId:e,runAt:t.trigger.runAt},"Once-shot template past due, executing immediately"),this.executeOnceTrigger(e).catch(i=>{a.error({templateId:e,error:i},"Once trigger execution failed")});return}let n=`template-${e}`;this.cronJobs.has(n)&&clearTimeout(this.cronJobs.get(n));let c=setTimeout(()=>{this.cronJobs.delete(n),this.executeOnceTrigger(e).catch(i=>{a.error({templateId:e,error:i},"Once trigger execution failed")})},r);this.cronJobs.set(n,c),a.info({templateId:e,runAt:t.trigger.runAt,delayMs:r},"Scheduled once-shot job")}async executeOnceTrigger(e){let t=m(e);!t||!t.enabled||(a.info({templateName:t.name},"Once-shot triggered"),await this.executeWorkflow(t,h()),M(e),a.info({templateId:e},"Once-shot template auto-disabled after execution"))}},B=null;function Ie(){return B}function xe(o){B=o}export{$ as a,j as b,Ie as c,xe as d};
@@ -1 +0,0 @@
1
- import{d as b,h as k}from"./chunk-WBAPIPST.js";import{c as w,h as x}from"./chunk-MRTJFYPR.js";k();x();import{constants as S,copyFileSync as g,existsSync as d,lstatSync as P,mkdirSync as $,readdirSync as E,realpathSync as u,rmSync as z,statSync as m,unlinkSync as h}from"fs";import{dirname as I,extname as R,isAbsolute as B,join as a,sep as c}from"path";var y=w("watchdog");function W(){return process.env.ADAM_TEST_DIR||b}function p(){return a(W(),"workflows")}function v(t){return a(p(),t,"artifacts")}function D(t){let r=v(t);return $(r,{recursive:!0}),r}function T(t,r,i){if(!B(t))throw new Error(`path must be absolute: ${t}`);let o=u(r),s=o.endsWith(c)?o:o+c;if(i){let n=u(t),f=n.endsWith(c)?n:n+c;if(f===s||f.startsWith(s))return;throw new Error(`path escapes workspace: ${t} (resolved=${n}, root=${o})`)}if(d(t))throw P(t).isSymbolicLink()?new Error(`destination already exists and is a symlink: ${t}`):new Error(`destination already exists: ${t}`);let e=u(I(t)),l=e.endsWith(c)?e:e+c;if(!(l===s||l.startsWith(s)))throw new Error(`destination escapes workspace: ${t} (parent resolved=${e}, root=${o})`)}function C(t){let r=D(t.executionId),i=a(r,`${t.artifactId}.bin`);return g(t.sourcePath,i),{blobPath:i,sizeBytes:m(i).size}}function O(t){h(t)}function j(t){if(!d(t.blobPath))throw new Error(`blob file missing on disk: ${t.blobPath}`);return g(t.blobPath,t.destPath,S.COPYFILE_EXCL),{sizeBytes:m(t.destPath).size}}function F(t){try{h(t)}catch(r){y.warn({err:r,blobPath:t},"Failed to remove workflow artifact blob")}}function N(t){try{z(a(p(),t),{recursive:!0,force:!0})}catch(r){y.warn({err:r,executionId:t},"Failed to remove workflow artifacts directory")}}function U(t,r,i){let o=v(t);if(!d(o))return 0;let s=0;for(let e of E(o)){if(R(e)!==".bin")continue;let l=e.slice(0,-4);if(r.has(l))continue;let n=a(o,e),f=m(n);Date.now()-f.mtimeMs<i||(F(n),s++)}return s}export{D as a,T as b,C as c,O as d,j as e,F as f,N as g,U as h};
@@ -1,5 +0,0 @@
1
- import{b as a,d as u}from"./chunk-AQO6IIHV.js";u();function l(e){return{id:e.id,eventType:e.event_type,matchCriteria:JSON.parse(e.match_criteria),target:JSON.parse(e.target),formatTemplate:e.format_template??void 0,maxPerMinute:e.max_per_minute,skipOriginChannel:e.skip_origin_channel===1,enabled:e.enabled===1,createdAt:e.created_at,createdBy:e.created_by??void 0}}function d(e){a().prepare(`
2
- INSERT INTO delivery_rules (id, event_type, match_criteria, target, format_template,
3
- max_per_minute, skip_origin_channel, enabled, created_at, created_by)
4
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
5
- `).run(e.id,e.eventType,JSON.stringify(e.matchCriteria),JSON.stringify(e.target),e.formatTemplate??null,e.maxPerMinute,e.skipOriginChannel?1:0,e.enabled?1:0,e.createdAt,e.createdBy??null)}function f(e){let n=a().prepare("SELECT * FROM delivery_rules WHERE id = ?").get(e);return n?l(n):void 0}function s(e){let t=a(),n="SELECT * FROM delivery_rules",i=[];return e!==void 0&&(n+=" WHERE enabled = ?",i.push(e?1:0)),n+=" ORDER BY created_at DESC",t.prepare(n).all(...i).map(l)}function m(e,t){let n=a(),i=[],r=[];t.eventType!==void 0&&(i.push("event_type = ?"),r.push(t.eventType)),t.matchCriteria!==void 0&&(i.push("match_criteria = ?"),r.push(JSON.stringify(t.matchCriteria))),t.target!==void 0&&(i.push("target = ?"),r.push(JSON.stringify(t.target))),t.formatTemplate!==void 0&&(i.push("format_template = ?"),r.push(t.formatTemplate)),t.maxPerMinute!==void 0&&(i.push("max_per_minute = ?"),r.push(t.maxPerMinute)),t.skipOriginChannel!==void 0&&(i.push("skip_origin_channel = ?"),r.push(t.skipOriginChannel?1:0)),t.enabled!==void 0&&(i.push("enabled = ?"),r.push(t.enabled?1:0)),i.length!==0&&(r.push(e),n.prepare(`UPDATE delivery_rules SET ${i.join(", ")} WHERE id = ?`).run(...r))}function y(e){let t=a();t.prepare("DELETE FROM delivery_log WHERE rule_id = ?").run(e),t.prepare("DELETE FROM delivery_rules WHERE id = ?").run(e)}function o(e,t){return s(!0).filter(i=>{if(i.eventType!=="*"&&i.eventType!==e)return!1;let r=i.matchCriteria;if(r.templateId&&r.templateId!==t.templateId||r.roleId&&r.roleId!==t.roleId||r.taskStatus&&r.taskStatus!==t.taskStatus)return!1;if(r.promptPattern)try{if(!new RegExp(r.promptPattern,"i").test(t.prompt??""))return!1}catch{return!1}return!0})}export{d as a,f as b,s as c,m as d,y as e,o as f};
@@ -1,5 +0,0 @@
1
- import{c as l}from"./chunk-6JBSBSCL.js";import{b as s,d}from"./chunk-AQO6IIHV.js";d();function i(e){return{id:e.id,ruleId:e.rule_id??void 0,taskId:e.task_id??void 0,status:e.status,target:JSON.parse(e.target),content:e.content,attempts:e.attempts,error:e.error??void 0,createdAt:e.created_at,deliveredAt:e.delivered_at??void 0,expiresAt:e.expires_at,source:e.source,messageType:e.message_type??void 0,traceId:e.trace_id??void 0}}var p=1440*60*1e3;function c(e){s().prepare(`
2
- INSERT INTO delivery_log (id, rule_id, task_id, status, target, content,
3
- attempts, error, created_at, delivered_at, expires_at, source, message_type, trace_id)
4
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
5
- `).run(e.id,e.ruleId??null,e.taskId??null,e.status,JSON.stringify(e.target),e.content,e.attempts,e.error??null,e.createdAt,e.deliveredAt??null,e.expiresAt,e.source??null,e.messageType??null,e.traceId??l()??null)}function E(e,t,r){s().prepare("UPDATE delivery_log SET status = ?, error = ?, attempts = attempts + 1 WHERE id = ?").run(t,r??null,e)}function D(e){s().prepare("UPDATE delivery_log SET status = 'delivered', delivered_at = ?, attempts = attempts + 1 WHERE id = ?").run(Date.now(),e)}function v(e,t=100){let r=s(),a=Date.now(),n=e?"SELECT * FROM delivery_log WHERE status = 'pending' AND expires_at > ? AND source = ? ORDER BY created_at ASC LIMIT ?":"SELECT * FROM delivery_log WHERE status = 'pending' AND expires_at > ? ORDER BY created_at ASC LIMIT ?";return(e?r.prepare(n).all(a,e,t):r.prepare(n).all(a,t)).map(i)}function _(e,t=100){let r=s(),a=Date.now(),n=e?"SELECT * FROM delivery_log WHERE status = 'failed' AND expires_at > ? AND attempts < 3 AND source = ? ORDER BY created_at ASC LIMIT ?":"SELECT * FROM delivery_log WHERE status = 'failed' AND expires_at > ? AND attempts < 3 ORDER BY created_at ASC LIMIT ?";return(e?r.prepare(n).all(a,e,t):r.prepare(n).all(a,t)).map(i)}function y(){let e=s(),t=Date.now();return e.prepare("DELETE FROM delivery_log WHERE expires_at < ? AND status IN ('pending', 'failed')").run(t).changes}function R(e,t=50){return s().prepare("SELECT * FROM delivery_log WHERE task_id = ? ORDER BY created_at DESC LIMIT ?").all(e,t).map(i)}function L(e,t=50){return s().prepare("SELECT * FROM delivery_log WHERE rule_id = ? ORDER BY created_at DESC LIMIT ?").all(e,t).map(i)}export{p as a,c as b,E as c,D as d,v as e,_ as f,y as g,R as h,L as i};