adam-agent-server 1.8.0 → 1.9.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 (135) hide show
  1. package/README.md +8 -0
  2. package/dist/App-5QZKMPRM.js +13 -0
  3. package/dist/adam-tools-FSI5XKDL.js +1 -0
  4. package/dist/{approval-handler-PB7PSLUS.js → approval-handler-JYCGXQUE.js} +1 -1
  5. package/dist/audit-manager-CLKTJPLM.js +1 -0
  6. package/dist/bree-engine-XJR5TKVC.js +1 -0
  7. package/dist/channels-DY2OW7YQ.js +1 -0
  8. package/dist/{channels-ULFUCUUZ.js → channels-ZNMTMMCY.js} +1 -1
  9. package/dist/{chunk-BQ3ZAYHC.js → chunk-3HZE5DQZ.js} +1 -1
  10. package/dist/chunk-3IQADR6L.js +144 -0
  11. package/dist/{chunk-NASJH4NT.js → chunk-3N7MGASP.js} +1 -1
  12. package/dist/{chunk-TAF2DBBC.js → chunk-56QP5ZHF.js} +7 -7
  13. package/dist/{chunk-PG6LMSX6.js → chunk-5AUQIK3Q.js} +1 -1
  14. package/dist/{chunk-NUITL62I.js → chunk-6M2QCKAS.js} +1 -1
  15. package/dist/{chunk-WMB7P64J.js → chunk-6XVWIRR2.js} +1 -1
  16. package/dist/{chunk-5EPG2US5.js → chunk-7F4SZXI2.js} +39 -10
  17. package/dist/{chunk-JJH2RCVC.js → chunk-7WJF65TQ.js} +1 -1
  18. package/dist/{chunk-RZ7LCZVK.js → chunk-ARQF52V6.js} +1 -1
  19. package/dist/{chunk-NWMOV23A.js → chunk-C2SD2NMZ.js} +1 -1
  20. package/dist/{chunk-2L2347UQ.js → chunk-DKMF4B33.js} +1 -1
  21. package/dist/{chunk-EQZFOBAJ.js → chunk-EJBGJLA2.js} +1 -1
  22. package/dist/{chunk-T33BLZV2.js → chunk-HSEP6LNQ.js} +1 -1
  23. package/dist/{chunk-GSFLLRS7.js → chunk-IZ3WZHCM.js} +1 -1
  24. package/dist/chunk-J4Y54LIC.js +50 -0
  25. package/dist/{chunk-AQ3ASS4B.js → chunk-KO7XBNPV.js} +1 -1
  26. package/dist/{chunk-RI3V72RP.js → chunk-KUJFQDT5.js} +2 -2
  27. package/dist/{chunk-DVN3BFPP.js → chunk-LV4XLPCD.js} +1 -1
  28. package/dist/chunk-MYVYH4PQ.js +77 -0
  29. package/dist/chunk-OFTIPZTH.js +1 -0
  30. package/dist/{chunk-K4C43YDD.js → chunk-OY2KVSIX.js} +1 -1
  31. package/dist/{chunk-IKPYPZ64.js → chunk-PFYYS7CI.js} +1 -1
  32. package/dist/chunk-QMW7VEPC.js +0 -0
  33. package/dist/{chunk-A5OCDYTW.js → chunk-QPIWPQWM.js} +1 -1
  34. package/dist/chunk-S6OV7Z6K.js +1 -0
  35. package/dist/{chunk-2YTDCR6A.js → chunk-TTP7QRAQ.js} +1 -1
  36. package/dist/{chunk-B6LOT5CG.js → chunk-UQDC3X6O.js} +1 -1
  37. package/dist/{chunk-M4YI4WVX.js → chunk-UYOLAFUR.js} +1 -1
  38. package/dist/chunk-VPZSOYE5.js +6 -0
  39. package/dist/{chunk-5QZXYKMS.js → chunk-W7U3ASGR.js} +1 -1
  40. package/dist/chunk-XIQVXRZH.js +27 -0
  41. package/dist/{chunk-FPZEZYUB.js → chunk-XTOOD44S.js} +1 -1
  42. package/dist/{chunk-6KF7OO2B.js → chunk-YKMWAVUH.js} +1 -1
  43. package/dist/{chunk-UQJZU3R5.js → chunk-YVVKUPGL.js} +1 -1
  44. package/dist/{chunk-HQRUJQN7.js → chunk-YWUX3ZTO.js} +4 -4
  45. package/dist/cli.js +2 -2
  46. package/dist/{config-HBQPBIWL.js → config-CILWJYZB.js} +1 -1
  47. package/dist/config-W2OD7PXZ.js +1 -0
  48. package/dist/{db-QEWTZGU3.js → db-JO24ZLIN.js} +1 -1
  49. package/dist/{delivery-log-AC476GX7.js → delivery-log-QPQM5YU7.js} +1 -1
  50. package/dist/engine-ZAPYG7G4.js +1 -0
  51. package/dist/{evolution-audit-XMBDUN3T.js → evolution-audit-ZLYQ3ZYV.js} +1 -1
  52. package/dist/{external-api-V74YTLBY.js → external-api-QKRNGSYS.js} +1 -1
  53. package/dist/index.js +20 -16
  54. package/dist/{learner-VCS3Q7BR.js → learner-ACHENH6R.js} +1 -1
  55. package/dist/{memories-VMOGFVPU.js → memories-LXH4VHCH.js} +1 -1
  56. package/dist/{memory-extractor-4WJNHYWR.js → memory-extractor-URH4YHK3.js} +2 -2
  57. package/dist/memory-service-23P6VNKZ.js +1 -0
  58. package/dist/outbound-gateway-Y3P3T3VH.js +1 -0
  59. package/dist/presets-XR2OBXUP.js +1 -0
  60. package/dist/role-presets-DYWDEQYU.js +1 -0
  61. package/dist/role-workspace-LHW7AWPF.js +1 -0
  62. package/dist/{roles-ZYCFQMAY.js → roles-DRPLO4LY.js} +1 -1
  63. package/dist/{runtime-VDBZZ4KG.js → runtime-YPBWWMXW.js} +1 -1
  64. package/dist/session-manager-Z6K4U5X7.js +1 -0
  65. package/dist/{task-templates-4KCZOUN5.js → task-templates-4DWXHLFZ.js} +1 -1
  66. package/dist/workflow-executor-6ZMNL34C.js +1 -0
  67. package/package.json +2 -1
  68. package/web/dist/assets/{AlertDialog-B1zj0Qs3.js → AlertDialog-DhA65f_0.js} +1 -1
  69. package/web/dist/assets/{Button-BehrGSvy.js → Button-CYDgoTTo.js} +1 -1
  70. package/web/dist/assets/{Card-B5E56u94.js → Card-DDGXsHus.js} +1 -1
  71. package/web/dist/assets/{ChannelDetail-BaSlX2yb.js → ChannelDetail-Bb8P8It_.js} +1 -1
  72. package/web/dist/assets/{Channels-CLhgGEmS.js → Channels-8j28oydE.js} +2 -2
  73. package/web/dist/assets/{Chat-BZpf1DSF.js → Chat-BZwLDoYO.js} +2 -2
  74. package/web/dist/assets/{Dashboard-HR4Qmdwg.js → Dashboard-Cv0AtO-o.js} +1 -1
  75. package/web/dist/assets/{EmptyState-tTclFq_B.js → EmptyState-EuQHAv5Y.js} +1 -1
  76. package/web/dist/assets/{EnvVarEditor-BzJNsDt0.js → EnvVarEditor-r-l-u4V7.js} +1 -1
  77. package/web/dist/assets/{EventDefDetail-CjoqsH0e.js → EventDefDetail-asUFrbQE.js} +1 -1
  78. package/web/dist/assets/Events-DtkHL-r2.js +1 -0
  79. package/web/dist/assets/{Evolution-CUn8g34X.js → Evolution-DIqYOSb8.js} +1 -1
  80. package/web/dist/assets/FeatureRequests-BxPqLR1x.js +1 -0
  81. package/web/dist/assets/{GoalDetail-DgPvXb6z.js → GoalDetail-Bkvgg6uI.js} +1 -1
  82. package/web/dist/assets/Goals-CkKJDCiU.js +1 -0
  83. package/web/dist/assets/{Logs-CvFC-GbD.js → Logs-DnaaHV0Y.js} +1 -1
  84. package/web/dist/assets/{Memories-B5pvI6Oj.js → Memories-Dq9S-Tsi.js} +1 -1
  85. package/web/dist/assets/Mistakes-D5lW31Co.js +1 -0
  86. package/web/dist/assets/{NotFound-D-OII_Lp.js → NotFound-gJVrOtER.js} +1 -1
  87. package/web/dist/assets/{PageHeader-B2CgcZ-t.js → PageHeader-CugYeCci.js} +1 -1
  88. package/web/dist/assets/Plugins-CoRmK2UG.js +1 -0
  89. package/web/dist/assets/{RoleDetail-BBJxaZip.js → RoleDetail-BHJA_PAn.js} +2 -2
  90. package/web/dist/assets/Roles-EBUueS_P.js +1 -0
  91. package/web/dist/assets/{SectionHeader-CmXz6PM3.js → SectionHeader-DihC0CnO.js} +1 -1
  92. package/web/dist/assets/Settings-DZHAGazz.js +1 -0
  93. package/web/dist/assets/{Strategies-Ddb5HiUS.js → Strategies-3IV9eueQ.js} +1 -1
  94. package/web/dist/assets/{Switch-yrTepsdl.js → Switch-B3w5KMMc.js} +1 -1
  95. package/web/dist/assets/{Table-CXAcZ8Ru.js → Table-Cf6m8zLu.js} +1 -1
  96. package/web/dist/assets/{TaskDetail-CHwHgfZq.js → TaskDetail-BmXaH3sx.js} +2 -2
  97. package/web/dist/assets/Work-CvQrOKtL.js +1 -0
  98. package/web/dist/assets/api-D-UzHSDq.js +1 -0
  99. package/web/dist/assets/index-BsKlGx3x.js +2 -0
  100. package/web/dist/assets/index-EqsPGp9a.css +2 -0
  101. package/web/dist/assets/{useIsMobileLayout-dYzXP1EC.js → useIsMobileLayout-2GbB90oO.js} +1 -1
  102. package/web/dist/assets/{vendor-icons-Dk0hMuJz.js → vendor-icons-PF9RcPJx.js} +1 -1
  103. package/web/dist/assets/{vendor-react-C6faO6LO.js → vendor-react-Cxy4EVtR.js} +1 -1
  104. package/web/dist/assets/{vendor-state-DahK0J-G.js → vendor-state-aQJ7d4tA.js} +1 -1
  105. package/web/dist/index.html +8 -8
  106. package/dist/App-ZRCRM7WR.js +0 -13
  107. package/dist/adam-automator-skills-EZGBICHT.js +0 -18
  108. package/dist/adam-tools-V5LPU47X.js +0 -1
  109. package/dist/audit-manager-BSBBDUER.js +0 -1
  110. package/dist/bree-engine-7S33CWS7.js +0 -1
  111. package/dist/channels-SITUUC4J.js +0 -1
  112. package/dist/chunk-4PQHGLZH.js +0 -99
  113. package/dist/chunk-5XOTPEAK.js +0 -6
  114. package/dist/chunk-BCH2HAIM.js +0 -23
  115. package/dist/chunk-GSMC3VUM.js +0 -1
  116. package/dist/chunk-IZNEOYRP.js +0 -1
  117. package/dist/chunk-QGYDGZSC.js +0 -49
  118. package/dist/chunk-ULTK7RD6.js +0 -27
  119. package/dist/config-ZBNGRASI.js +0 -1
  120. package/dist/engine-6K4RG644.js +0 -1
  121. package/dist/memory-service-ZS6MBUIC.js +0 -1
  122. package/dist/outbound-gateway-H7RFG6D2.js +0 -1
  123. package/dist/role-presets-XAEOYEAW.js +0 -1
  124. package/dist/role-workspace-NKGAH6J6.js +0 -1
  125. package/dist/session-manager-COLCNIB7.js +0 -1
  126. package/dist/workflow-executor-Z7JFMR56.js +0 -1
  127. package/web/dist/assets/Events-IeznRpCj.js +0 -1
  128. package/web/dist/assets/Goals-DYrggK-M.js +0 -1
  129. package/web/dist/assets/Plugins-BuE7GImW.js +0 -1
  130. package/web/dist/assets/Roles-C5eVA6LM.js +0 -1
  131. package/web/dist/assets/Settings-BblOdOih.js +0 -1
  132. package/web/dist/assets/Work-Corw0ITh.js +0 -1
  133. package/web/dist/assets/api-Bux34u4-.js +0 -1
  134. package/web/dist/assets/index-B3_4_qY6.js +0 -2
  135. package/web/dist/assets/index-Cu5neZGw.css +0 -2
@@ -1,4 +1,4 @@
1
- import{a as B}from"./chunk-IKPYPZ64.js";import{a as C}from"./chunk-SWP2JC54.js";import{a as L,b as k,c as T,j as $}from"./chunk-DVN3BFPP.js";import{d as I,h as P,i as de}from"./chunk-HQRUJQN7.js";import{b as _,d as se}from"./chunk-5EPG2US5.js";import{c as D,h as ie}from"./chunk-MRTJFYPR.js";import{tool as p}from"@anthropic-ai/claude-agent-sdk";import{z as a}from"zod";import{v4 as le}from"uuid";function l(t){return{content:[{type:"text",text:JSON.stringify(t)}]}}var ce={query:a.string().describe("Search query for memory retrieval"),roleId:a.string().optional().describe("Role ID to scope search (omit for cross-role)"),topK:a.number().optional().describe("Max results to return (default 5)")},pe={query:a.string().describe("Search query for memory retrieval"),topK:a.number().optional().describe("Max results to return (default 5)")},me={id:a.string().optional().describe("Memory ID to update. Omit to create new."),roleId:a.string().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)")},ue={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)")},N={id:a.string().describe("Memory ID to delete")};async function j(t,e){let r=t??e.roleId,n=e.topK??5,i=await B(r,e.query,{topK:n});return l({results:i.map(o=>({id:o.id,type:o.type,content:o.content,keywords:o.keywords,importance:o.importance,score:o.score}))})}async function F(t,e){let r=t??e.roleId;if(!r)return l({error:"roleId is required"});let n,i=!0;try{n=await C(e.content)}catch{i=!1}if(e.id){if(!k(e.id))return l({error:`Memory ${e.id} not found`});let v=T(e.id,{content:e.content,embedding:n,keywords:e.keywords,importance:e.importance,type:e.type});return l({id:e.id,action:"updated",success:v,embeddingUpdated:i})}let o=`mem-${le().slice(0,8)}`,s=Date.now();return L({id:o,roleId:r,type:e.type??"thought",content:e.content,embedding:n,keywords:e.keywords??[],importance:e.importance??3,sourceType:"manual",createdAt:s,lastAccessed:s,retrievedCount:0,tier:e.tier??"episodic"}),l({id:o,action:"created",success:!0,embeddingUpdated:i})}async function K(t,e){if(t){let r=k(e.id);if(!r)return l({error:`Memory ${e.id} not found`});if(r.roleId!==t)return l({error:`Memory ${e.id} does not belong to this role`})}return $(e.id),l({id:e.id,deleted:!0})}function Ue(t){return t?[p("search_memories","Search agent memory using hybrid vector + keyword search. Returns scored memories ranked by relevance, recency, and importance.",pe,async e=>j(t,e)),p("save_memory","Create a new memory or update an existing one. Provide 'id' to update, omit to create. Embedding is auto-generated from content.",ue,async e=>F(t,e)),p("delete_memory","Delete a memory by ID.",N,async e=>K(t,e))]:[p("search_memories","Search agent memory using hybrid vector + keyword search. Returns scored memories ranked by relevance, recency, and importance.",ce,async e=>j(void 0,e)),p("save_memory","Create a new memory or update an existing one. Provide 'id' to update, omit to create. Embedding is auto-generated from content.",me,async e=>F(void 0,e)),p("delete_memory","Delete a memory by ID.",N,async e=>K(void 0,e))]}import{accessSync as q,constants as H}from"fs";import{accessSync as fe,constants as ye,existsSync as U,realpathSync as be}from"fs";import{join as E}from"path";import{spawn as he}from"child_process";import{execFileSync as ge}from"child_process";var u=null;function f(){if(u)return u;let t=typeof import.meta.dirname=="string"?import.meta.dirname:__dirname??".",e=E(t,"landlock-exec","landlock-exec");if(U(e))return u=e,e;let r=process.env.PATH?.split(":").find(n=>U(E(n,"landlock-exec")));return r?(u=E(r,"landlock-exec"),u):e}var y=class{platform="landlock";async isAvailable(){if(process.platform!=="linux")return!1;try{fe(f(),ye.X_OK)}catch{return!1}try{return ge(f(),["--check"],{timeout:5e3,stdio:["ignore","pipe","pipe"]}),!0}catch{return!1}}spawn(e){let r=e.command??"node",n=e.args??[],i=[];for(let o of e.visiblePaths??[]){let s=o.mode==="rw"?"--rw":"--ro",d;try{d=be(o.path)}catch{d=o.path}i.push(s,d),d!==o.path&&i.push(s,o.path)}return i.push("--",r,...n),he(f(),i,{cwd:e.cwd,env:e.env,stdio:"pipe",signal:e.signal})}};function G(){if(process.platform==="linux")try{return q(f(),H.X_OK),"landlock"}catch{return"none"}if(process.platform==="darwin")try{return q("/usr/bin/sandbox-exec",H.X_OK),"sandbox-exec"}catch{return"none"}return"none"}ie();import{spawn as _e}from"child_process";import{readFileSync as z,writeFileSync as Pe,mkdtempSync as ke,realpathSync as A,rmSync as Ee}from"fs";import{join as c}from"path";import{tmpdir as Ae}from"os";de();var ve=["com.apple.Accessibility","com.apple.CoreGraphics","com.apple.SpeakSelection","com.apple.TimeMachine","com.apple.assistant","com.apple.assistant.backedup","com.apple.assistant.support"],xe=["com.apple.coreservices.appleevents"];function Se(t){if(!I.test(t))throw new Error(`Invalid bundle id for SBPL appleevent destination: ${t}`)}function V(t,e){return P(t)?.find(r=>r.id===e)}function we(t){if(!t)return"";let e=["","; ===== Role OS capability: Automation =====","(allow lsopen)","(allow mach-lookup",...xe.map(n=>` (global-name "${n}")`),")"],r=t.targets??[];for(let n of r)Se(n),e.push(`(allow appleevent-send (appleevent-destination "${n}"))`);return e.join(`
1
+ import{a as B}from"./chunk-PFYYS7CI.js";import{a as C}from"./chunk-SWP2JC54.js";import{a as L,b as k,c as T,j as $}from"./chunk-LV4XLPCD.js";import{d as I,h as P,i as de}from"./chunk-YWUX3ZTO.js";import{b as _,d as se}from"./chunk-7F4SZXI2.js";import{c as D,h as ie}from"./chunk-MRTJFYPR.js";import{tool as p}from"@anthropic-ai/claude-agent-sdk";import{z as a}from"zod";import{v4 as le}from"uuid";function l(t){return{content:[{type:"text",text:JSON.stringify(t)}]}}var ce={query:a.string().describe("Search query for memory retrieval"),roleId:a.string().optional().describe("Role ID to scope search (omit for cross-role)"),topK:a.number().optional().describe("Max results to return (default 5)")},pe={query:a.string().describe("Search query for memory retrieval"),topK:a.number().optional().describe("Max results to return (default 5)")},me={id:a.string().optional().describe("Memory ID to update. Omit to create new."),roleId:a.string().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)")},ue={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)")},N={id:a.string().describe("Memory ID to delete")};async function j(t,e){let r=t??e.roleId,n=e.topK??5,i=await B(r,e.query,{topK:n});return l({results:i.map(o=>({id:o.id,type:o.type,content:o.content,keywords:o.keywords,importance:o.importance,score:o.score}))})}async function F(t,e){let r=t??e.roleId;if(!r)return l({error:"roleId is required"});let n,i=!0;try{n=await C(e.content)}catch{i=!1}if(e.id){if(!k(e.id))return l({error:`Memory ${e.id} not found`});let v=T(e.id,{content:e.content,embedding:n,keywords:e.keywords,importance:e.importance,type:e.type});return l({id:e.id,action:"updated",success:v,embeddingUpdated:i})}let o=`mem-${le().slice(0,8)}`,s=Date.now();return L({id:o,roleId:r,type:e.type??"thought",content:e.content,embedding:n,keywords:e.keywords??[],importance:e.importance??3,sourceType:"manual",createdAt:s,lastAccessed:s,retrievedCount:0,tier:e.tier??"episodic"}),l({id:o,action:"created",success:!0,embeddingUpdated:i})}async function K(t,e){if(t){let r=k(e.id);if(!r)return l({error:`Memory ${e.id} not found`});if(r.roleId!==t)return l({error:`Memory ${e.id} does not belong to this role`})}return $(e.id),l({id:e.id,deleted:!0})}function Ue(t){return t?[p("search_memories","Search agent memory using hybrid vector + keyword search. Returns scored memories ranked by relevance, recency, and importance.",pe,async e=>j(t,e)),p("save_memory","Create a new memory or update an existing one. Provide 'id' to update, omit to create. Embedding is auto-generated from content.",ue,async e=>F(t,e)),p("delete_memory","Delete a memory by ID.",N,async e=>K(t,e))]:[p("search_memories","Search agent memory using hybrid vector + keyword search. Returns scored memories ranked by relevance, recency, and importance.",ce,async e=>j(void 0,e)),p("save_memory","Create a new memory or update an existing one. Provide 'id' to update, omit to create. Embedding is auto-generated from content.",me,async e=>F(void 0,e)),p("delete_memory","Delete a memory by ID.",N,async e=>K(void 0,e))]}import{accessSync as q,constants as H}from"fs";import{accessSync as fe,constants as ye,existsSync as U,realpathSync as be}from"fs";import{join as E}from"path";import{spawn as he}from"child_process";import{execFileSync as ge}from"child_process";var u=null;function f(){if(u)return u;let t=typeof import.meta.dirname=="string"?import.meta.dirname:__dirname??".",e=E(t,"landlock-exec","landlock-exec");if(U(e))return u=e,e;let r=process.env.PATH?.split(":").find(n=>U(E(n,"landlock-exec")));return r?(u=E(r,"landlock-exec"),u):e}var y=class{platform="landlock";async isAvailable(){if(process.platform!=="linux")return!1;try{fe(f(),ye.X_OK)}catch{return!1}try{return ge(f(),["--check"],{timeout:5e3,stdio:["ignore","pipe","pipe"]}),!0}catch{return!1}}spawn(e){let r=e.command??"node",n=e.args??[],i=[];for(let o of e.visiblePaths??[]){let s=o.mode==="rw"?"--rw":"--ro",d;try{d=be(o.path)}catch{d=o.path}i.push(s,d),d!==o.path&&i.push(s,o.path)}return i.push("--",r,...n),he(f(),i,{cwd:e.cwd,env:e.env,stdio:"pipe",signal:e.signal})}};function G(){if(process.platform==="linux")try{return q(f(),H.X_OK),"landlock"}catch{return"none"}if(process.platform==="darwin")try{return q("/usr/bin/sandbox-exec",H.X_OK),"sandbox-exec"}catch{return"none"}return"none"}ie();import{spawn as _e}from"child_process";import{readFileSync as z,writeFileSync as Pe,mkdtempSync as ke,realpathSync as A,rmSync as Ee}from"fs";import{join as c}from"path";import{tmpdir as Ae}from"os";de();var ve=["com.apple.Accessibility","com.apple.CoreGraphics","com.apple.SpeakSelection","com.apple.TimeMachine","com.apple.assistant","com.apple.assistant.backedup","com.apple.assistant.support"],xe=["com.apple.coreservices.appleevents"];function Se(t){if(!I.test(t))throw new Error(`Invalid bundle id for SBPL appleevent destination: ${t}`)}function V(t,e){return P(t)?.find(r=>r.id===e)}function we(t){if(!t)return"";let e=["","; ===== Role OS capability: Automation =====","(allow lsopen)","(allow mach-lookup",...xe.map(n=>` (global-name "${n}")`),")"],r=t.targets??[];for(let n of r)Se(n),e.push(`(allow appleevent-send (appleevent-destination "${n}"))`);return e.join(`
2
2
  `)}function Re(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",...ve.map(r=>` (preference-domain "${r}")`),")"].join(`
3
3
  `):""}function X(t){let e=P(t);return e?.length?[we(V(e,"automation")),Re(V(e,"accessibility"))].filter(Boolean).join(`
4
4
  `):""}var Y=D("sandbox-macos"),J="/usr/bin/sandbox-exec";function Oe(){let t=[c(typeof import.meta.dirname=="string"?import.meta.dirname:".","profiles","role-sandbox.sb"),c(typeof import.meta.dirname=="string"?import.meta.dirname:".","..","src","sandbox","profiles","role-sandbox.sb"),c(process.cwd(),"src","sandbox","profiles","role-sandbox.sb")];for(let e of t)try{return z(e,"utf-8"),e}catch{}return t[t.length-1]}var Me=Oe();function b(t){if(!t.startsWith("/"))throw new Error(`Sandbox path must be absolute: ${t}`);if(t.includes('"')||t.includes(")")||t.includes("(")||t.includes("$"))throw new Error(`Sandbox path contains invalid characters for SBPL: ${t}`)}function De(t){let e=[`
@@ -1,3 +1,3 @@
1
- import{b as C}from"./chunk-GSFLLRS7.js";import{a as p}from"./chunk-L7JP7DUO.js";import{b as D,c as f,d as w}from"./chunk-RZ7LCZVK.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,`
1
+ import{b as C}from"./chunk-IZ3WZHCM.js";import{a as p}from"./chunk-L7JP7DUO.js";import{b as D,c as f,d as w}from"./chunk-ARQF52V6.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
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-SITUUC4J.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};
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-DY2OW7YQ.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,4 +1,4 @@
1
- import{l as f,r as h}from"./chunk-HQRUJQN7.js";import{b as u,d as E}from"./chunk-5EPG2US5.js";E();h();function l(e){return{id:e.id,roleId:e.role_id,type:e.type,content:e.content,embedding:e.embedding?new Float32Array(e.embedding.buffer,e.embedding.byteOffset,e.embedding.byteLength/4):void 0,keywords:e.keywords?JSON.parse(e.keywords):[],importance:e.importance,sourceType:e.source_type,sourceTaskId:e.source_task_id??void 0,evidence:e.evidence?JSON.parse(e.evidence):void 0,createdAt:e.created_at,lastAccessed:e.last_accessed,retrievedCount:e.retrieved_count,tier:e.tier,supersededBy:e.superseded_by??void 0}}function b(e){return Buffer.from(e.buffer,e.byteOffset,e.byteLength)}function v(e){u().prepare(`
1
+ import{l as f,r as h}from"./chunk-YWUX3ZTO.js";import{b as u,d as E}from"./chunk-7F4SZXI2.js";E();h();function l(e){return{id:e.id,roleId:e.role_id,type:e.type,content:e.content,embedding:e.embedding?new Float32Array(e.embedding.buffer,e.embedding.byteOffset,e.embedding.byteLength/4):void 0,keywords:e.keywords?JSON.parse(e.keywords):[],importance:e.importance,sourceType:e.source_type,sourceTaskId:e.source_task_id??void 0,evidence:e.evidence?JSON.parse(e.evidence):void 0,createdAt:e.created_at,lastAccessed:e.last_accessed,retrievedCount:e.retrieved_count,tier:e.tier,supersededBy:e.superseded_by??void 0}}function b(e){return Buffer.from(e.buffer,e.byteOffset,e.byteLength)}function v(e){u().prepare(`
2
2
  INSERT INTO memories (id, role_id, type, content, embedding, keywords,
3
3
  importance, source_type, source_task_id, evidence,
4
4
  created_at, last_accessed, retrieved_count, tier, superseded_by)
@@ -0,0 +1,77 @@
1
+ import{f as R,j as z}from"./chunk-6XVWIRR2.js";import{c as _,e as T,f}from"./chunk-VPZSOYE5.js";import{k as y,l as S,m as c,n as A,o as x,r as H}from"./chunk-YWUX3ZTO.js";import{c as B,e as U,f as Y}from"./chunk-FCV2DPZQ.js";var O={};U(O,{seedAdamAutomatorSkills:()=>K});async function K(t){let{ensureRoleWorkspace:r}=await import("./role-workspace-LHW7AWPF.js"),{getRole:e}=await import("./roles-DRPLO4LY.js"),{mkdir:a,readFile:n,writeFile:o,access:s}=await import("fs/promises"),{join:l}=await import("path"),d=e(t);if(!d)throw new Error(`Role '${t}' not found`);let u=r(d),m=l(u,".claude","skills");await a(m,{recursive:!0});let i=[{name:"aggregate_feature",description:"Aggregate a feature value over a window",inputs:[{name:"feature_name",desc:"Name of the feature to aggregate"},{name:"aggregation",desc:"Aggregation type: sum | avg | count | latest"},{name:"window_days",desc:"Number of days to look back"},{name:"field",desc:"Event payload field to aggregate"}],body:"Query events via sqlite3, compute aggregation, print numeric result."},{name:"check_threshold",description:"Compare a value vs threshold, emit breach if exceeded",inputs:[{name:"feature",desc:"Feature value (number)"},{name:"operator",desc:"Comparison operator: gt | gte | lt | lte | eq"},{name:"threshold",desc:"Threshold value"},{name:"on_breach_type",desc:"Event type to emit on breach"},{name:"on_breach_payload",desc:"JSON payload for breach event"}],body:"Read feature value, compare against threshold using the operator. On breach, emit new event via emit_event Skill."},{name:"query_events",description:"Range-query events table",inputs:[{name:"type_pattern",desc:"Event type pattern (e.g. 'scheduler.tick')"},{name:"window",desc:"Lookback window in hours"},{name:"limit",desc:"Maximum number of events to return"}],body:"sqlite3 parameterized query against the events table, returning matching rows as JSON."},{name:"query_state",description:"Read latest state_snapshot (not yet available)",inputs:[{name:"select",desc:"Dot-notation path to select (e.g. 'goals.active')"}],body:`Returns { state: null, available: false } \u2014 state_snapshot table not yet built (deferred to Phase 2).
2
+
3
+ When the state_snapshot table is available, this Skill will query it for the latest snapshot matching the select path and return the value.`},{name:"query_goals",description:"Read active goals (goal_graph_nodes not built)",inputs:[{name:"types",desc:"Goal type filter (e.g. 'daily|weekly')"},{name:"status",desc:"Goal status filter: active | completed | paused"}],body:`Returns { goals: [], available: false } \u2014 goal_graph_nodes table not yet built (deferred to Phase 2).
4
+
5
+ When the goal_graph_nodes table is available, this Skill will query the goals table for active goals matching the type and status filters.`},{name:"classify_route",description:"Match event vs rules, print action name",inputs:[{name:"routes_json",desc:"JSON array of routing rules [{pattern, action}]"},{name:"fallback",desc:"Fallback action if no pattern matches"}],body:"Iterate rules in order, first deep-equal pattern match wins, print the action name. If no match, print the fallback."},{name:"persist_artifact",description:"Write content to iCloud output path",inputs:[{name:"artifact_type",desc:"Artifact type (subdirectory name)"},{name:"content",desc:"Content to write"},{name:"user_day",desc:"User day string (e.g. '2026-04-16')"}],body:`Write content to ~/Library/Mobile Documents/com~apple~CloudDocs/Adam/Outputs/<artifact_type>/<user_day>.md
6
+
7
+ NOTE: output_artifacts DB table not yet created (deferred to Phase 2). File write is performed but no DB row is inserted.`},{name:"emit_event",description:"Insert new events row + emit event_fired via OutboundGateway webhook",inputs:[{name:"type",desc:"Event type string (e.g. 'threshold.breach')"},{name:"payload",desc:"Event payload as JSON string"},{name:"dedup_key",desc:"Optional deduplication key"}],body:"POST to the configured webhook URL for the target event def, or use the internal createEvent API to insert a row directly."}];for(let P of i){let k=l(m,P.name),I=l(k,"SKILL.md");try{await s(I);continue}catch{}await a(k,{recursive:!0});let j=J(P);await o(I,j,"utf8")}}function J(t){let r=t.inputs.map(e=>`- ${e.name}: ${e.desc}`).join(`
8
+ `);return`---
9
+ description: ${t.description}
10
+ ---
11
+ # ${t.name}
12
+
13
+ ## Inputs
14
+ ${r}
15
+
16
+ ## Instructions
17
+ ${t.body}
18
+ `}var F=B(()=>{"use strict"});H();import{v4 as p}from"uuid";z();var C={presetId:"engineer",name:"Engineer",cagPrompt:`Role: General-purpose software engineer.
19
+ Capabilities: Read, write, and edit code; run shell commands; search codebases.
20
+ Approach: Analyze requirements \u2192 implement \u2192 test \u2192 verify. Write tests for new code. Follow existing code patterns.
21
+ Best for: Feature implementation, bug fixes, refactoring, build/deploy scripts.
22
+ Constraints: No web access. Works only within the assigned workspace directory.`,allowedTools:["Read","Write","Edit","Bash","Grep","Glob"],evaluationCriteria:{code_quality:4,test_pass:4,build_success:3},executionMode:"isolated"};var M={presetId:"reviewer",name:"Reviewer",cagPrompt:`Role: Code reviewer and security auditor. READ-ONLY \u2014 you do not modify files.
23
+ Capabilities: Read files, search code, run analysis commands (linters, type-checkers, test suites).
24
+ Approach: Systematically review code for bugs, security issues, performance problems, and style violations. Output structured findings with file:line references.
25
+ Best for: Code review, security audit, dependency audit, test coverage analysis.
26
+ Constraints: No Write or Edit tools. Cannot modify code \u2014 only report findings.`,allowedTools:["Read","Grep","Glob","Bash"],evaluationCriteria:{bug_detection_rate:5,insight_quality:4},executionMode:"isolated"};var N={presetId:"researcher",name:"Researcher",cagPrompt:`Role: Information researcher and analyst with web access.
27
+ Capabilities: Search the web, fetch web pages, read local files, run data processing scripts.
28
+ Approach: Gather information from multiple sources \u2192 cross-reference \u2192 synthesize findings into structured reports.
29
+ Best for: Market research, technical investigation, API documentation lookup, competitive analysis, news monitoring.
30
+ Constraints: No file write/edit permissions. Cannot modify the codebase \u2014 only research and report.`,allowedTools:["WebSearch","WebFetch","Read","Grep","Glob","Bash"],evaluationCriteria:{insight_quality:5,data_accuracy:5},executionMode:"isolated"};var D={presetId:"writer",name:"Writer",cagPrompt:`Role: Content writer and document generator.
31
+ Capabilities: Create and edit text files, read reference material, search for context.
32
+ Approach: Understand the target audience and format \u2192 draft \u2192 refine. Match the project's existing tone and terminology.
33
+ Best for: Documentation, reports, emails, translations, summaries, changelog entries.
34
+ Constraints: No shell command execution. No web access. Works only with file read/write operations.`,allowedTools:["Read","Write","Edit","Grep","Glob"],evaluationCriteria:{content_quality:5,engagement:4},executionMode:"isolated"};var E={presetId:"chat-manager",name:"Chat Manager",cagPrompt:`You are the Chat Manager \u2014 orchestrating conversations and managing agent interactions.
35
+ You coordinate between user requests and agent execution, maintaining conversation context
36
+ and routing tasks to the appropriate roles. You have broad memory access across all roles.`};var w={presetId:"adam-automator",name:"adam-automator",cagPrompt:`Role: Deterministic automation executor.
37
+ Capabilities: Run preset Skills under .claude/skills/. Read/write files in the assigned workspace.
38
+ Approach: When given an event and Skill name, invoke that Skill with the provided inputs. Do not interpret, do not deviate from the instruction, do not chain additional Skills unless told.
39
+ Best for: Event-triggered deterministic logic (feature aggregation, threshold checks, artifact persistence, routing classification, event chaining).
40
+ Constraints: Minimize LLM reasoning \u2014 call the specified Skill and return its output. If the instruction is ambiguous, return an error message instead of guessing.`,allowedTools:["Skill","Read","Write","Edit","Bash","Grep","Glob"],evaluationCriteria:{determinism:5,skill_invocation_rate:5},executionMode:"isolated",model:"claude-haiku-4-5-20251001"};var q={presetId:"feature-miner",name:"Feature Miner",cagPrompt:`Role: Feature request analyst.
41
+ You are given chat session data inline in the prompt (the dispatcher pre-fetched it). You cannot read other sessions.
42
+
43
+ What counts as a feature request:
44
+ - The user explicitly asks for a capability that is not currently provided by the platform
45
+ - The user proposes a new feature or improvement
46
+ - The user describes a workaround they use because a feature is missing
47
+
48
+ What does NOT count as a feature request:
49
+ - Bug reports (something broken that should work)
50
+ - Resolved confusion (user was unsure how to use existing functionality)
51
+ - Off-topic or conversational content
52
+
53
+ For each identified request in the provided chat data, call record_feature_request with content, summary, evidence_quote (verbatim user quote), tags. Do not fabricate.
54
+ If nothing found, record nothing and return "No feature requests found."
55
+
56
+ Dedupe note: if the user later repeats the same request, emit a fresh record \u2014 the reviewer will dismiss duplicates via the /feature-requests page. Do not attempt to guess prior runs.
57
+
58
+ Constraints: your ONLY callable tool is record_feature_request. No file access, no web search, no other channels.`,allowedTools:["mcp__mining-tools__record_feature_request"],disallowedTools:["Write","Edit","Bash","WebSearch","WebFetch","Read","Grep","Glob"],evaluationCriteria:{precision:5,recall:3,false_positive_rate:5},executionMode:"isolated"};var G={presetId:"mistake-digester",name:"Mistake Digester",cagPrompt:`Role: Cross-role failure analyst (notify-only).
59
+ Your task is to call aggregate_mistakes with a 14-day window and all three dimensions.
60
+ Then format the returned patterns as a markdown digest:
61
+
62
+ # Mistake Digest
63
+ - **{dimension_type}: {dimension_value}** \u2014 {count} occurrences across {N} roles
64
+ (first: {firstSeen}, last: {lastSeen})
65
+
66
+ If no patterns are returned, respond with: No mistake patterns this period.
67
+ Do not fabricate patterns.
68
+
69
+ Constraints:
70
+ - Your ONLY callable tool is aggregate_mistakes.
71
+ - Do NOT propose any Role changes, CAG updates, or permission modifications.
72
+ - This role is notify-only: report findings only.
73
+ `,allowedTools:["mcp__audit-tools__aggregate_mistakes"],disallowedTools:["Write","Edit","Bash","WebSearch","WebFetch","Read","Grep","Glob"],evaluationCriteria:{signal_quality:5,conciseness:3,notify_only_compliance:5},executionMode:"isolated"};var $={presetId:"feature-mining",name:"Feature Mining (preset)",description:"Scans recent chat sessions for unmet user needs and records them as feature_requests.",trigger:{type:"manual"},steps:[{id:"mine",prompt:`Analyze the chat session excerpts below (pre-fetched from sessions modified after {{LAST_RUN_AT_HUMAN}}). Identify unmet feature requests and record each via record_feature_request. Return a summary count.
74
+
75
+ === CHAT EXCERPTS ===
76
+ {{CHAT_DATA}}
77
+ === END EXCERPTS ===`,roleId:""}],config:{last_run_at:null,max_sessions:15,max_messages_per_session:30,message_char_cap:500},boundRolePresetId:"feature-miner"};var W={presetId:"mistake-digest",name:"Mistake Digest (preset)",description:"Weekly cross-role failure digest. Calls aggregate_mistakes and formats patterns for delivery. Configure deliverTo post-seed to enable channel delivery (left empty at seed since per-user channel target is unknown).",trigger:{type:"cron",cron:"0 8 * * 0"},steps:[{id:"digest",roleId:"",prompt:"Call aggregate_mistakes with default parameters (window 14 days, all 3 dimensions, minOccurrences 3, minRoles 2). Then format the returned patterns as a markdown digest with '# Mistake Digest' as the heading so it self-identifies. If no patterns, return 'No mistake patterns this period.'."}],config:{delivery_message_type:"mistake_digest"},boundRolePresetId:"mistake-digester"};var g=[C,M,N,D,E,w,q,G];var h=[$,W],Pe="role-chat-manager",V=g.map(t=>t.name);function ke(t){return t.source==="system"?!0:t.source==="user"?!1:V.includes(t.name)}function Ie(){v();let t=c(E.name);if(!t)throw new Error("ChatManager role not found after seedPresets()");return t}function Se(){v();let t=c(w.name);if(!t)throw new Error("adam-automator role not found after seedPresets()");return t}function Ae(){return v(),x(void 0,1e3,0)}function xe(){return g}function Ce(){return h}function L(t){return g.find(r=>r.presetId===t)}function X(t){return h.find(r=>r.presetId===t)}function b(t){let r=L(t);return r?c(r.name)?.id??"":""}function v(){let t=0,r=0;for(let e of g){if(c(e.name))continue;let o={id:e.presetId==="chat-manager"?"role-chat-manager":`role-${p().slice(0,8)}`,name:e.name,cagPrompt:e.cagPrompt,learnedRules:[],memoryStreamId:`mem-${p().slice(0,8)}`,status:"active",preferences:{},createdAt:Date.now(),allowedTools:e.allowedTools,disallowedTools:e.disallowedTools,evaluationCriteria:e.evaluationCriteria,executionMode:e.executionMode,model:e.model,source:"system",presetId:e.presetId};y(o),R(o),console.info(`[presets] Seeded Role preset: ${e.name} (${e.presetId})`),e.presetId==="adam-automator"&&Z(o.id).catch(s=>{console.warn(`[presets] Failed to seed adam-automator Skills: ${s}`)}),t++}for(let e of h){if(f().find(s=>s.presetId===e.presetId))continue;let n=b(e.boundRolePresetId),o={id:`tmpl-${p().slice(0,8)}`,name:e.name,description:e.description,trigger:e.trigger,steps:e.steps.map(s=>({...s,roleId:s.roleId===""?n:s.roleId})),config:e.config,enabled:!0,createdAt:Date.now(),isPreset:!0,presetId:e.presetId};_(o),r++,console.info(`[presets] Seeded Template preset: ${e.name} (${e.presetId})`)}return{rolesCreated:t,templatesCreated:r}}function Q(t,r){if(t==="role"){let e=L(r);if(!e)return{ok:!1,reason:"preset not found"};let a=c(e.name);if(a)A(a.id,{cagPrompt:e.cagPrompt,allowedTools:e.allowedTools,disallowedTools:e.disallowedTools,evaluationCriteria:e.evaluationCriteria,executionMode:e.executionMode,model:e.model,source:"system",presetId:e.presetId}),console.info(`[presets] Restored Role preset: ${e.name} (${r})`);else{let n=e.presetId==="chat-manager"?"role-chat-manager":`role-${p().slice(0,8)}`,o={id:n,name:e.name,cagPrompt:e.cagPrompt,learnedRules:[],memoryStreamId:`mem-${p().slice(0,8)}`,status:"active",preferences:{},createdAt:Date.now(),allowedTools:e.allowedTools,disallowedTools:e.disallowedTools,evaluationCriteria:e.evaluationCriteria,executionMode:e.executionMode,model:e.model,source:"system",presetId:e.presetId};y(o),R(o),console.info(`[presets] Re-created Role preset via restorePreset: ${e.name} (${r})`);let s=n;for(let l of h){if(l.boundRolePresetId!==r)continue;let d=f().find(i=>i.presetId===l.presetId);if(!d)continue;let u=!1,m=d.steps.map(i=>!i.roleId||S(i.roleId)?i:(u=!0,{...i,roleId:s}));u&&(T(d.id,{steps:m}),console.info(`[presets] Re-linked orphaned step roleIds on Template ${l.presetId} \u2192 Role ${r}`))}}return{ok:!0}}if(t==="template"){let e=X(r);if(!e)return{ok:!1,reason:"preset not found"};let a=b(e.boundRolePresetId);if(!a){if(!Q("role",e.boundRolePresetId).ok)return{ok:!1,reason:`bound role preset missing: ${e.boundRolePresetId}`};if(a=b(e.boundRolePresetId),!a)return{ok:!1,reason:`could not resolve bound role id after restore: ${e.boundRolePresetId}`}}let n=f().find(o=>o.presetId===e.presetId);if(n)T(n.id,{name:e.name,description:e.description,trigger:e.trigger,steps:e.steps.map(o=>({...o,roleId:o.roleId===""?a:o.roleId})),config:e.config,isPreset:!0,presetId:e.presetId}),console.info(`[presets] Restored Template preset: ${e.name} (${r})`);else{let o={id:`tmpl-${p().slice(0,8)}`,name:e.name,description:e.description,trigger:e.trigger,steps:e.steps.map(s=>({...s,roleId:s.roleId===""?a:s.roleId})),config:e.config,enabled:!0,createdAt:Date.now(),isPreset:!0,presetId:e.presetId};_(o),console.info(`[presets] Re-created Template preset via restorePreset: ${e.name} (${r})`)}return{ok:!0}}return{ok:!1,reason:"invalid type"}}async function Z(t){try{let{seedAdamAutomatorSkills:r}=(F(),Y(O));await r(t)}catch{console.warn(`[presets] seedAdamAutomatorSkills: module unavailable for roleId=${t}`)}}export{w as a,g as b,h as c,Pe as d,V as e,ke as f,Ie as g,Se as h,Ae as i,xe as j,Ce as k,L as l,X as m,v as n,Q as o};
@@ -0,0 +1 @@
1
+ var f=["defaults.model","defaults.effort","defaults.maxTurns","defaults.maxBudgetUsd","defaults.timeout","logging.level","roles.evolution.triggerEvery","roles.evolution.reflectionThreshold","chat.sessionTimeoutMinutes","chat.maxSessionTurns","chat.autoTitle","chat.archiveExtractMemory","server.timezone","anthropic.apiKey","anthropic.baseUrl","anthropic.model","anthropic.defaultOpusModel","anthropic.defaultSonnetModel","anthropic.defaultHaikuModel","anthropic.smallFastModel","evaluation.model","defaults.approvalTimeout","defaults.deniedReadPaths","defaults.approvalRequired","watchdog.rules.artifactCleanup.enabled","watchdog.rules.artifactCleanup.ttlDays","watchdog.rules.artifactCleanup.orphanGcMinAgeHours"],g=["server.port","server.host","server.apiKey"],p={"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"},a=null;function T(e){a=JSON.parse(JSON.stringify(e))}function i(){if(!a)throw new Error("Runtime config not initialized. Call initRuntimeConfig first.");return a}function _(e){let r=i(),o=e();for(let[t,n]of Object.entries(o))d(r,t,n)}function R(){let e=i(),r={};for(let[o,t]of Object.entries(p)){let n=h(e,o);n&&typeof n=="string"&&n.length>0?r[t]=n:process.env[t]&&(r[t]=process.env[t])}return r}function c(e){let r={};for(let[o,t]of Object.entries(e))o.startsWith("ANTHROPIC_")||(r[o]=t);return r}var l=/key|token|secret|password|credential/i;function k(e){let r={};for(let[o,t]of Object.entries(e))r[o]=l.test(o)&&t.length>4?t.slice(0,4)+"****":l.test(o)&&t.length>0?"****":t;return r}function O(e){let o=i().defaults?.env??{};return{...process.env,...o,...R(),...c(e?.roleEnvVars??{}),...c(e?.taskEnv??{}),DISABLE_TELEMETRY:"1",DISABLE_ERROR_REPORTING:"1",CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC:"1",DISABLE_AUTOUPDATER:"1"}}function C(e,r){let o=i(),t=[],n=[];for(let[s,u]of Object.entries(e)){if(!E(s)){v(s)?n.push(`"${s}" requires restart. Cannot modify at runtime.`):n.push(`"${s}" is not a recognized config path.`);continue}d(o,s,u)&&(t.push(s),r?.(s,u))}return{success:n.length===0,updated:t,errors:n}}function d(e,r,o){let t=r.split("."),n=e;for(let s=0;s<t.length-1;s++)if(n&&typeof n=="object")n=n[t[s]];else return!1;return n&&typeof n=="object"?(n[t[t.length-1]]=o,!0):!1}function h(e,r){let o=r.split("."),t=e;for(let n of o)if(t&&typeof t=="object")t=t[n];else return;return t}function E(e){return f.includes(e)}function v(e){return g.includes(e)}export{f as a,g as b,T as c,i as d,_ as e,R as f,c as g,k as h,O as i,C as j,h as k,E as l,v as m};
@@ -1,4 +1,4 @@
1
- import{b as i,d as a}from"./chunk-5EPG2US5.js";a();function d(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}}function c(e){i().prepare(`
1
+ import{b as i,d as a}from"./chunk-7F4SZXI2.js";a();function d(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}}function c(e){i().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,
@@ -1,4 +1,4 @@
1
- import{a as l}from"./chunk-SWP2JC54.js";import{d as f,k as g,m as p,n as h,o as M,q as b}from"./chunk-DVN3BFPP.js";function v(t,n){let i=0,s=0,m=0;for(let e=0;e<t.length;e++)i+=t[e]*n[e],s+=t[e]*t[e],m+=n[e]*n[e];let o=Math.sqrt(s)*Math.sqrt(m);return o===0?0:i/o}async function S(t,n,i={}){let s=i.topK??10,m=i.hybridConfig??M,o;try{o=await l(n)}catch{}let e=o??new Float32Array(384),a=b(t,e,n,s*2,m,{excludeSuperseded:!0}),d=t?h(t):g,y=a.map(r=>{let u=r.embedding?v(e,r.embedding):0,C=Math.min(.3,(r.retrievedCount??0)*.05),x=p(r.createdAt,u,r.importance,d)+C;return{...r,score:x}});y.sort((r,u)=>u.score-r.score);let c=y.slice(0,s);for(let r of c)f(r.id);return c}async function T(t,n,i=5,s=2e3){try{let{estimateTokens:m}=await import("./token-estimator-HMPVGDCN.js"),o=await S(n,t,{topK:i});if(o.length===0)return"";let e=[],a=0,d=m(`[Memory Context \u2014 retrieved from prior interactions]
1
+ import{a as l}from"./chunk-SWP2JC54.js";import{d as f,k as g,m as p,n as h,o as M,q as b}from"./chunk-LV4XLPCD.js";function v(t,n){let i=0,s=0,m=0;for(let e=0;e<t.length;e++)i+=t[e]*n[e],s+=t[e]*t[e],m+=n[e]*n[e];let o=Math.sqrt(s)*Math.sqrt(m);return o===0?0:i/o}async function S(t,n,i={}){let s=i.topK??10,m=i.hybridConfig??M,o;try{o=await l(n)}catch{}let e=o??new Float32Array(384),a=b(t,e,n,s*2,m,{excludeSuperseded:!0}),d=t?h(t):g,y=a.map(r=>{let u=r.embedding?v(e,r.embedding):0,C=Math.min(.3,(r.retrievedCount??0)*.05),x=p(r.createdAt,u,r.importance,d)+C;return{...r,score:x}});y.sort((r,u)=>u.score-r.score);let c=y.slice(0,s);for(let r of c)f(r.id);return c}async function T(t,n,i=5,s=2e3){try{let{estimateTokens:m}=await import("./token-estimator-HMPVGDCN.js"),o=await S(n,t,{topK:i});if(o.length===0)return"";let e=[],a=0,d=m(`[Memory Context \u2014 retrieved from prior interactions]
2
2
 
3
3
  [User Request]
4
4
  `);for(let c of o){let r=m(`- [${c.tier??"episodic"}] ${c.content}
File without changes
@@ -1,4 +1,4 @@
1
- import{b as o,d as u}from"./chunk-5EPG2US5.js";u();import{v4 as a}from"uuid";function R(t){o().prepare(`
1
+ import{b as o,d as u}from"./chunk-7F4SZXI2.js";u();import{v4 as a}from"uuid";function R(t){o().prepare(`
2
2
  INSERT INTO evolution_audit (id, timestamp, old_rules, new_rules, diff, trigger_task_id, role_id, source)
3
3
  VALUES (?, ?, ?, ?, ?, ?, ?, ?)
4
4
  `).run(a(),t.timestamp,t.oldRules,t.newRules,t.diff,t.triggerTaskId??null,t.roleId??null,t.source??"reflection")}function f(t=100,e=0){return o().prepare(`
@@ -0,0 +1 @@
1
+ import{c as n,h as d}from"./chunk-MRTJFYPR.js";d();import{query as f}from"@anthropic-ai/claude-agent-sdk";import*as a from"fs/promises";import*as i from"path";import*as l from"os";var x=n("manager"),m=i.join(l.homedir(),".adam","llm-eval");async function y(u,o){await a.mkdir(m,{recursive:!0});let t=typeof o=="string"?{systemPrompt:o}:o??{},r={cwd:m,maxTurns:t.maxTurns??3,maxBudgetUsd:t.maxBudgetUsd??.05};t.systemPrompt&&(r.systemPrompt=t.systemPrompt),t.model&&(r.model=t.model);let g=f({prompt:u,options:r}),e="";for await(let p of g){let s=p;s.type==="result"&&typeof s.result=="string"&&(e=s.result)}return e}export{y as a};
@@ -1,4 +1,4 @@
1
- import{b as i,d as u}from"./chunk-5EPG2US5.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{b as i,d as u}from"./chunk-7F4SZXI2.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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
@@ -1,4 +1,4 @@
1
- import{b as n,d as o}from"./chunk-5EPG2US5.js";o();function a(e){return{id:e.id,sessionId:e.session_id,role:e.role,content:e.content,source:{type:e.source_type},taskId:e.task_id??void 0,channelMessageId:e.channel_message_id??void 0,metadata:e.metadata?JSON.parse(e.metadata):void 0,createdAt:e.created_at}}function c(e){n().prepare(`
1
+ import{b as n,d as o}from"./chunk-7F4SZXI2.js";o();function a(e){return{id:e.id,sessionId:e.session_id,role:e.role,content:e.content,source:{type:e.source_type},taskId:e.task_id??void 0,channelMessageId:e.channel_message_id??void 0,metadata:e.metadata?JSON.parse(e.metadata):void 0,createdAt:e.created_at}}function c(e){n().prepare(`
2
2
  INSERT INTO chat_messages (id, session_id, role, content, source_type, task_id,
3
3
  channel_message_id, metadata, created_at)
4
4
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
@@ -1 +1 @@
1
- import{a as h,b as u,c,d as m,e as v,f as x}from"./chunk-2YTDCR6A.js";import{a as l}from"./chunk-SWP2JC54.js";import{b as S,d as y}from"./chunk-B6LOT5CG.js";import{a as i}from"./chunk-L7JP7DUO.js";import{a as C}from"./chunk-DVN3BFPP.js";import{e as p}from"./chunk-PG6LMSX6.js";import{v4 as D}from"uuid";import{v4 as I}from"uuid";function _(e){if(e.length<20)return null;let t=e.trim();return t.length>300?{content:`User request: ${t.slice(0,280)}...`,importance:3,type:"thought"}:{content:`User request: ${t}`,importance:3,type:"thought"}}function b(e){if(e.length<20)return null;let t=e.trim();return t.length>400?{content:`Assistant response: ${t.slice(0,370)}...`,importance:2,type:"event"}:{content:`Assistant response: ${t}`,importance:2,type:"event"}}function N(e){let t=S(e,200,0),s=[];for(let o of t){let r=o.role==="user"?_(o.content):b(o.content);r&&s.push(r)}return{facts:s}}function $(e){let t=e.toLowerCase().replace(/[^\w\s]/g," ").split(/\s+/).filter(s=>s.length>2);return[...new Set(t)].slice(0,20)}async function A(e,t){let{facts:s}=N(e),o=0;for(let r of s){let f=r.content.slice(0,500),g;try{g=await l(f)}catch{}let M=$(f),T={id:I(),roleId:t,type:r.type,content:f,embedding:g,keywords:M,importance:r.importance,sourceType:"session_archive",createdAt:Date.now(),lastAccessed:Date.now(),retrievedCount:0,tier:"episodic"};C(T),o++}return o}var n=new Map,a;function w(e){return`${e.type}:${e.channelId??""}:${e.chatId??""}`}function F(){n.clear();let e=m("active",1e3);for(let t of e)n.set(t.id,t)}function Q(e,t){let s=Date.now(),o={id:D(),status:"active",source:e,createdAt:s,lastActiveAt:s,messageCount:0};return h(o),n.set(o.id,o),i.emit({type:"session_created",session:o}),o}function V(e){for(let s of n.values())if(w(s.source)===w(e))return s;let t=v(e);return t&&n.set(t.id,t),t}function B(e){let t=n.get(e);return t||u(e)}function E(e){let t=Date.now();c(e,{status:"archived",archivedAt:t}),p().archiveExtractMemory&&u(e)&&A(e,"role-chat-manager").catch(()=>{}),n.delete(e),i.emit({type:"session_archived",sessionId:e})}function W(e){c(e,{status:"active",archivedAt:void 0});let t=u(e);return t&&(n.set(t.id,t),i.emit({type:"session_restored",session:t})),t}function X(e){y(e),x(e),n.delete(e),i.emit({type:"session_deleted",sessionId:e})}function Y(e){let t=Date.now();c(e,{lastActiveAt:t});let s=n.get(e);s&&(s.lastActiveAt=t)}function Z(e){let t=B(e);if(t){let s=t.messageCount+1;c(e,{messageCount:s});let o=n.get(e);o&&(o.messageCount=s)}}function ee(e){return m(e)}function P(){let t=p().sessionTimeoutMinutes*60*1e3,s=Date.now();for(let o of n.values())if(s-o.lastActiveAt>t)try{E(o.id)}catch{}}function R(e=6e4){d(),a=setInterval(P,e)}function d(){a&&(clearInterval(a),a=void 0)}function te(){return a}function se(){F(),R()}function oe(){d(),n.clear()}function ne(){d(),n.clear()}export{F as a,Q as b,V as c,B as d,E as e,W as f,X as g,Y as h,Z as i,ee as j,R as k,d as l,te as m,se as n,oe as o,ne as p};
1
+ import{a as l}from"./chunk-SWP2JC54.js";import{a as h,b as u,c,d as m,e as v,f as x}from"./chunk-TTP7QRAQ.js";import{a as C}from"./chunk-LV4XLPCD.js";import{b as S,d as y}from"./chunk-UQDC3X6O.js";import{a as i}from"./chunk-L7JP7DUO.js";import{e as p}from"./chunk-5AUQIK3Q.js";import{v4 as D}from"uuid";import{v4 as I}from"uuid";function _(e){if(e.length<20)return null;let t=e.trim();return t.length>300?{content:`User request: ${t.slice(0,280)}...`,importance:3,type:"thought"}:{content:`User request: ${t}`,importance:3,type:"thought"}}function b(e){if(e.length<20)return null;let t=e.trim();return t.length>400?{content:`Assistant response: ${t.slice(0,370)}...`,importance:2,type:"event"}:{content:`Assistant response: ${t}`,importance:2,type:"event"}}function N(e){let t=S(e,200,0),s=[];for(let o of t){let r=o.role==="user"?_(o.content):b(o.content);r&&s.push(r)}return{facts:s}}function $(e){let t=e.toLowerCase().replace(/[^\w\s]/g," ").split(/\s+/).filter(s=>s.length>2);return[...new Set(t)].slice(0,20)}async function A(e,t){let{facts:s}=N(e),o=0;for(let r of s){let f=r.content.slice(0,500),g;try{g=await l(f)}catch{}let M=$(f),T={id:I(),roleId:t,type:r.type,content:f,embedding:g,keywords:M,importance:r.importance,sourceType:"session_archive",createdAt:Date.now(),lastAccessed:Date.now(),retrievedCount:0,tier:"episodic"};C(T),o++}return o}var n=new Map,a;function w(e){return`${e.type}:${e.channelId??""}:${e.chatId??""}`}function F(){n.clear();let e=m("active",1e3);for(let t of e)n.set(t.id,t)}function Q(e,t){let s=Date.now(),o={id:D(),status:"active",source:e,createdAt:s,lastActiveAt:s,messageCount:0};return h(o),n.set(o.id,o),i.emit({type:"session_created",session:o}),o}function V(e){for(let s of n.values())if(w(s.source)===w(e))return s;let t=v(e);return t&&n.set(t.id,t),t}function B(e){let t=n.get(e);return t||u(e)}function E(e){let t=Date.now();c(e,{status:"archived",archivedAt:t}),p().archiveExtractMemory&&u(e)&&A(e,"role-chat-manager").catch(()=>{}),n.delete(e),i.emit({type:"session_archived",sessionId:e})}function W(e){c(e,{status:"active",archivedAt:void 0});let t=u(e);return t&&(n.set(t.id,t),i.emit({type:"session_restored",session:t})),t}function X(e){y(e),x(e),n.delete(e),i.emit({type:"session_deleted",sessionId:e})}function Y(e){let t=Date.now();c(e,{lastActiveAt:t});let s=n.get(e);s&&(s.lastActiveAt=t)}function Z(e){let t=B(e);if(t){let s=t.messageCount+1;c(e,{messageCount:s});let o=n.get(e);o&&(o.messageCount=s)}}function ee(e){return m(e)}function P(){let t=p().sessionTimeoutMinutes*60*1e3,s=Date.now();for(let o of n.values())if(s-o.lastActiveAt>t)try{E(o.id)}catch{}}function R(e=6e4){d(),a=setInterval(P,e)}function d(){a&&(clearInterval(a),a=void 0)}function te(){return a}function se(){F(),R()}function oe(){d(),n.clear()}function ne(){d(),n.clear()}export{F as a,Q as b,V as c,B as d,E as e,W as f,X as g,Y as h,Z as i,ee as j,R as k,d as l,te as m,se as n,oe as o,ne as p};
@@ -0,0 +1,6 @@
1
+ import{b as o,d as f}from"./chunk-7F4SZXI2.js";f();function T(e){if(e)return e.startsWith("event:")?e.slice(6):void 0}var d=class extends Error{constructor(r){super(`Template has ${r.length} step(s) without executable role config. Set template.rolePreference, OR set each failing step's roleId, OR set autoSelectRole=true. Failing step ids: ${r.join(", ")}`);this.failingStepIds=r;this.name="TemplateRoleConfigError"}failingStepIds;code="TEMPLATE_INVALID_ROLE_CONFIG"};function u(e){if(e.rolePreference)return;let n=[];for(let r of e.steps){let s=typeof r.roleId=="string"&&r.roleId.length>0,t=r.autoSelectRole===!0;!s&&!t&&n.push(r.id)}if(n.length>0)throw new d(n)}function c(e){let n=e.trigger_type,r={type:n,cron:n==="event"?void 0:e.trigger_cron??void 0,event:n==="event"?void 0:e.trigger_event??void 0,eventDefId:n==="event"?T(e.trigger_event):void 0,runAt:n==="once"?e.trigger_cron??void 0:void 0};return{id:e.id,name:e.name,description:e.description??void 0,trigger:r,steps:JSON.parse(e.steps),rolePreference:e.role_preference??void 0,config:e.config?JSON.parse(e.config):void 0,tags:e.tags?JSON.parse(e.tags):void 0,enabled:e.enabled===1,createdAt:e.created_at,updatedAt:e.updated_at??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,goalIds:e.goal_ids?JSON.parse(e.goal_ids):void 0,isPreset:e.is_preset===1?!0:void 0,presetId:e.preset_id??void 0}}function k(e){u(e),o().prepare(`
2
+ INSERT INTO task_templates (id, name, description, trigger_type, trigger_cron,
3
+ trigger_event, steps, role_preference, config, tags, enabled, created_at, updated_at,
4
+ source_session_id, deliver_to, report_to, goal_ids, is_preset, preset_id)
5
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
6
+ `).run(e.id,e.name,e.description??null,e.trigger.type,e.trigger.type==="once"?e.trigger.runAt??null:e.trigger.cron??null,e.trigger.type==="event"?`event:${e.trigger.eventDefId}`:e.trigger.event??null,JSON.stringify(e.steps),e.rolePreference??null,e.config?JSON.stringify(e.config):null,e.tags?JSON.stringify(e.tags):null,e.enabled?1:0,e.createdAt??Date.now(),e.updatedAt??null,e.sourceSessionId??null,e.deliverTo?JSON.stringify(e.deliverTo):null,e.reportTo?JSON.stringify(e.reportTo):null,e.goalIds?JSON.stringify(e.goalIds):null,e.presetId!=null?1:0,e.presetId??null)}function _(e){let r=o().prepare("SELECT * FROM task_templates WHERE id = ?").get(e);return r?c(r):void 0}function h(e,n){let r=o();if("steps"in n||"rolePreference"in n){let i=_(e);if(i){let a={rolePreference:"rolePreference"in n?n.rolePreference:i.rolePreference,steps:"steps"in n&&n.steps?n.steps:i.steps};u(a)}}let s=[],t=[];"name"in n&&(s.push("name = ?"),t.push(n.name)),"description"in n&&(s.push("description = ?"),t.push(n.description??null)),"trigger"in n&&n.trigger&&(s.push("trigger_type = ?"),t.push(n.trigger.type),s.push("trigger_cron = ?"),t.push(n.trigger.type==="once"?n.trigger.runAt??null:n.trigger.cron??null),s.push("trigger_event = ?"),t.push(n.trigger.type==="event"?`event:${n.trigger.eventDefId}`:n.trigger.event??null)),"steps"in n&&(s.push("steps = ?"),t.push(JSON.stringify(n.steps))),"rolePreference"in n&&(s.push("role_preference = ?"),t.push(n.rolePreference??null)),"config"in n&&(s.push("config = ?"),t.push(n.config?JSON.stringify(n.config):null)),"tags"in n&&(s.push("tags = ?"),t.push(n.tags?JSON.stringify(n.tags):null)),"enabled"in n&&(s.push("enabled = ?"),t.push(n.enabled?1:0)),"sourceSessionId"in n&&(s.push("source_session_id = ?"),t.push(n.sourceSessionId??null)),"deliverTo"in n&&(s.push("deliver_to = ?"),t.push(n.deliverTo?JSON.stringify(n.deliverTo):null)),"reportTo"in n&&(s.push("report_to = ?"),t.push(n.reportTo?JSON.stringify(n.reportTo):null)),"goalIds"in n&&(s.push("goal_ids = ?"),t.push(n.goalIds?JSON.stringify(n.goalIds):null)),"isPreset"in n&&(s.push("is_preset = ?"),t.push(n.isPreset?1:0)),"presetId"in n&&(s.push("preset_id = ?"),t.push(n.presetId??null)),s.length!==0&&(s.push("updated_at = ?"),t.push(Date.now()),t.push(e),r.prepare(`UPDATE task_templates SET ${s.join(", ")} WHERE id = ?`).run(...t))}function S(e=!1,n,r=0){let s=o(),t="SELECT * FROM task_templates",i=[];return e&&(t+=" WHERE enabled = 1"),t+=" ORDER BY COALESCE(updated_at, created_at) DESC",typeof n=="number"&&(t+=" LIMIT ? OFFSET ?",i.push(n,r)),s.prepare(t).all(...i).map(c)}function m(e){o().prepare("UPDATE task_templates SET enabled = 1, updated_at = ? WHERE id = ?").run(Date.now(),e)}function R(e){o().prepare("UPDATE task_templates SET enabled = 0, updated_at = ? WHERE id = ?").run(Date.now(),e)}function b(e){let n=o(),r=n.prepare("SELECT COUNT(*) AS n FROM workflow_executions WHERE template_id = ?").get(e),s=n.prepare("SELECT COUNT(*) AS n FROM tasks WHERE template_id = ?").get(e);return{executionCount:r.n,taskCount:s.n}}function y(e,n="template_only"){let r=o();r.transaction(()=>{if(n==="with_tasks"){let i=r.prepare("SELECT id FROM tasks WHERE template_id = ?").all(e).map(a=>a.id);if(i.length>0)for(let p=0;p<i.length;p+=500){let l=i.slice(p,p+500),g=l.map(()=>"?").join(",");r.prepare(`DELETE FROM role_scores WHERE task_id IN (${g})`).run(...l),r.prepare(`DELETE FROM manager_decisions WHERE task_id IN (${g})`).run(...l),r.prepare(`UPDATE chat_messages SET task_id = NULL WHERE task_id IN (${g})`).run(...l),r.prepare(`UPDATE approval_rules SET created_by_task_id = NULL WHERE created_by_task_id IN (${g})`).run(...l),r.prepare(`DELETE FROM tasks WHERE id IN (${g})`).run(...l)}}r.prepare("DELETE FROM workflow_executions WHERE template_id = ?").run(e),r.prepare("DELETE FROM task_templates WHERE id = ?").run(e)})()}export{d as a,u as b,k as c,_ as d,h as e,S as f,m as g,R as h,b as i,y as j};
@@ -1,4 +1,4 @@
1
- import{b as a,d as u}from"./chunk-5EPG2US5.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(`
1
+ import{b as a,d as u}from"./chunk-7F4SZXI2.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
2
  INSERT INTO delivery_rules (id, event_type, match_criteria, target, format_template,
3
3
  max_per_minute, skip_origin_channel, enabled, created_at, created_by)
4
4
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
@@ -0,0 +1,27 @@
1
+ import{q as A}from"./chunk-YKMWAVUH.js";import{a as O}from"./chunk-N4ES7TCL.js";import{b as W}from"./chunk-OY2KVSIX.js";import{b as D}from"./chunk-KUJFQDT5.js";import{b as T}from"./chunk-IZ3WZHCM.js";import{a as I}from"./chunk-L7JP7DUO.js";import{d as x}from"./chunk-5AUQIK3Q.js";import{l as C,r as z}from"./chunk-YWUX3ZTO.js";import{b as S,d as F}from"./chunk-7F4SZXI2.js";import{c as E,h as $}from"./chunk-MRTJFYPR.js";$();z();F();function M(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 P(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?M(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 B(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(M)}function j(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"),N=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};P(t,e.id,n?.eventId),O(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?C(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 A({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=W(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=D();if(e.deliverTo&&e.deliverTo.length>0){let s=this.assembleWorkflowSummary(e);for(let a of e.deliverTo)if(a.type==="channel"){let i=T(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=T(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=W(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,B as c,j as d,N as e};
@@ -1,2 +1,2 @@
1
- import{b as r,d as s}from"./chunk-5EPG2US5.js";import{c as i}from"./chunk-FCV2DPZQ.js";function p(e){let n=r().prepare("SELECT value FROM config WHERE key = ?").get(e);if(n)try{return JSON.parse(n.value)}catch{return n.value}}function E(e,t){let n=r(),o=JSON.stringify(t),u=Date.now();n.prepare(`INSERT INTO config (key, value, updated_at) VALUES (?, ?, ?)
1
+ import{b as r,d as s}from"./chunk-7F4SZXI2.js";import{c as i}from"./chunk-FCV2DPZQ.js";function p(e){let n=r().prepare("SELECT value FROM config WHERE key = ?").get(e);if(n)try{return JSON.parse(n.value)}catch{return n.value}}function E(e,t){let n=r(),o=JSON.stringify(t),u=Date.now();n.prepare(`INSERT INTO config (key, value, updated_at) VALUES (?, ?, ?)
2
2
  ON CONFLICT(key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at`).run(e,o,u)}function k(){let t=r().prepare("SELECT key, value FROM config").all(),n={};for(let o of t)try{n[o.key]=JSON.parse(o.value)}catch{n[o.key]=o.value}return n}function b(e){let t=r(),n=t.prepare("INSERT OR IGNORE INTO config (key, value, updated_at) VALUES (?, ?, ?)"),o=Date.now(),u=0;return t.transaction(()=>{for(let[c,a]of Object.entries(e)){if(a==null||a==="")continue;n.run(c,JSON.stringify(a),o).changes>0&&u++}})(),u}function w(){return r().prepare("SELECT COUNT(*) as count FROM config").get().count===0}function O(e){return r().prepare("DELETE FROM config WHERE key = ?").run(e).changes>0}var d=i(()=>{s()});export{p as a,E as b,k as c,b as d,w as e,O as f,d as g};
@@ -1,4 +1,4 @@
1
- import{a as oe}from"./chunk-IZNEOYRP.js";import{k as F}from"./chunk-NWMOV23A.js";import{b as ee}from"./chunk-2L2347UQ.js";import{a as Z,b as h}from"./chunk-K4C43YDD.js";import{e as N,f as D,j as Ae}from"./chunk-WMB7P64J.js";import{a as Q}from"./chunk-UQJZU3R5.js";import{d as K}from"./chunk-GSMC3VUM.js";import{c as te,i as Ce,l as re,o as ne,r as xe}from"./chunk-HQRUJQN7.js";import{b as u,d as v}from"./chunk-5EPG2US5.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 Ie}from"os";import{resolve as j}from"path";import{z as g}from"zod";Le();function ie(){return[...z]}xe();Ae();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(/^~/,Ie()):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(`
1
+ import{k as F}from"./chunk-C2SD2NMZ.js";import{a as oe}from"./chunk-S6OV7Z6K.js";import{b as ee}from"./chunk-DKMF4B33.js";import{a as Z,b as h}from"./chunk-OY2KVSIX.js";import{e as N,f as D,j as Ae}from"./chunk-6XVWIRR2.js";import{a as Q}from"./chunk-YVVKUPGL.js";import{d as K}from"./chunk-OFTIPZTH.js";import{c as te,i as Ce,l as re,o as ne,r as xe}from"./chunk-YWUX3ZTO.js";import{b as u,d as v}from"./chunk-7F4SZXI2.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 Ie}from"os";import{resolve as j}from"path";import{z as g}from"zod";Le();function ie(){return[...z]}xe();Ae();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(/^~/,Ie()):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
2
  INSERT INTO strategies (id, role_id, task_type, name, prompt_template,
3
3
  alpha, beta, total_trials, avg_reward, created_at, updated_at)
4
4
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
@@ -1 +1 @@
1
- import{b as e,d as t,h as a}from"./chunk-WBAPIPST.js";a();var n={defaults:{timeout:600,maxTurns:100,maxBudgetUsd:5,effort:"high",model:"",settingSources:["user","project"],allowedTools:[],disallowedTools:[],approvalRequired:["rm -rf *","git push*","git reset*","curl * -X POST*","curl * --request POST*"],approvalTimeout:600,env:{},plugins:[],workspacePath:t,workspaceRetention:"immediate",deniedReadPaths:[...e]},externalApis:[],server:{port:7100,host:"0.0.0.0",timezone:"system"},logging:{level:"info"},roles:{presets:[],evolution:{triggerEvery:5,reflectionThreshold:150,retirementThreshold:.4,probationTasks:5}},chat:{sessionTimeoutMinutes:30,maxSessionTurns:20,autoTitle:!0,archiveExtractMemory:!0},watchdog:{enabled:!0,intervalMinutes:5,rules:{managerHealthCheck:{enabled:!0,action:"notify",staleDurationMinutes:15},staleTasks:{enabled:!0,action:"notify",maxPendingMinutes:30},staleRunningTasks:{enabled:!0,action:"notify",maxRunningMinutes:15},dbMaintenance:{enabled:!0,action:"ignore",walCheckpointThresholdMB:100},artifactCleanup:{enabled:!0,action:"ignore",ttlDays:7,orphanGcMinAgeHours:1},sandboxViolation:{enabled:!0,action:"alert"}}},execution:{maxConcurrent:5,pollIntervalMs:3e4},anthropic:{apiKey:"",baseUrl:"",model:"",defaultOpusModel:"",defaultSonnetModel:"",defaultHaikuModel:"",smallFastModel:""}};export{n as a};
1
+ import{b as e,d as t,h as a}from"./chunk-WBAPIPST.js";a();var n={defaults:{timeout:600,maxTurns:100,maxBudgetUsd:5,effort:"high",model:"",settingSources:["user","project"],allowedTools:[],disallowedTools:[],approvalRequired:["rm -rf *","git push*","git reset*","curl * -X POST*","curl * --request POST*"],approvalTimeout:600,env:{},plugins:[],workspacePath:t,workspaceRetention:"immediate",deniedReadPaths:[...e]},externalApis:[],server:{port:7100,host:"0.0.0.0",timezone:"system"},logging:{level:"info"},roles:{presets:[],evolution:{triggerEvery:5,reflectionThreshold:150,retirementThreshold:.4,probationTasks:5}},chat:{sessionTimeoutMinutes:30,maxSessionTurns:20,autoTitle:!0,archiveExtractMemory:!0},watchdog:{enabled:!0,intervalMinutes:5,rules:{managerHealthCheck:{enabled:!0,action:"notify",staleDurationMinutes:15},staleTasks:{enabled:!0,action:"notify",maxPendingMinutes:30},staleRunningTasks:{enabled:!0,action:"notify",maxRunningMinutes:15},dbMaintenance:{enabled:!0,action:"ignore",walCheckpointThresholdMB:100},artifactCleanup:{enabled:!0,action:"ignore",ttlDays:7,orphanGcMinAgeHours:1},sandboxViolation:{enabled:!0,action:"alert"}}},execution:{maxConcurrent:5,pollIntervalMs:3e4},anthropic:{apiKey:"",baseUrl:"",model:"",defaultOpusModel:"",defaultSonnetModel:"",defaultHaikuModel:"",smallFastModel:""},evaluation:{}};export{n as a};
@@ -1,8 +1,8 @@
1
- import{a as p,g as N}from"./chunk-FPZEZYUB.js";import{b as o,d as C}from"./chunk-5EPG2US5.js";import{b as l,h as g}from"./chunk-WBAPIPST.js";import{c,e as A}from"./chunk-FCV2DPZQ.js";import*as h from"os";import*as y from"path";function u(e){return e.startsWith("~/")||e==="~"?y.join(h.homedir(),e.slice(1)):e}var _=c(()=>{"use strict";g()});function R(e){return w.includes(e)}function S(e){return v[e]}function E(){return w.map(e=>v[e])}function V(e,i=e!=="none"){return E().map(s=>T(s,e,i))}function T(e,i,s=i!=="none"){return process.platform==="darwin"?e.status==="runtime-enforced"&&(i!=="sandbox-exec"||!s)?{...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 z(e){if(!e?.length)return;for(let s of e)if(!R(s.id))throw new Error(`Unknown OS capability: ${s.id}`);let i=d(e);if(i?.length){for(let s of i){let t=S(s.id);if(t.status!=="runtime-enforced")throw new Error(`OS capability '${t.label}' is not editable in Role settings`);if(t.supportsTargets){if(!s.targets?.length)throw new Error(`OS capability '${t.label}' requires at least one target bundle id`);for(let n of s.targets)if(!D(n))throw new Error(`Invalid automation target bundle id: ${n}`)}else if(s.targets?.length)throw new Error(`OS capability '${t.label}' does not accept targets`)}return i}}function d(e){if(!e||e.length===0)return;let i=new Set,s=[];for(let t of e){if(!R(t.id))throw new Error(`Unknown OS capability: ${t.id}`);if(i.has(t.id))continue;i.add(t.id);let n=S(t.id),a={id:t.id};n.supportsTargets&&t.targets?.length&&(a.targets=[...new Set(t.targets.map(r=>r.trim()).filter(Boolean))]),s.push(a)}return s.length>0?s.sort((t,n)=>t.id.localeCompare(n.id)):void 0}function D(e){return x.test(e)}var w,v,x,O=c(()=>{"use strict";w=["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"],v={"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."}},x=/^[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)+$/});var L={};A(L,{createRole:()=>J,deleteRole:()=>U,getRole:()=>P,getRoleByName:()=>I,listRoles:()=>B,updateRole:()=>k,validateAdditionalDirectories:()=>f});import{existsSync as M}from"fs";import{resolve as m}from"path";function f(e,i){for(let s of e){let t=typeof s=="string"?s:s.path;if(!t.startsWith("/")&&!t.startsWith("~/")&&t!=="~")throw new Error(`additionalDirectories must be absolute paths: '${t}' is not absolute`);let n=m(u(t));if(!n.startsWith("/"))throw new Error(`additionalDirectories must be absolute paths: '${t}' is not absolute`);for(let a of l){let r=m(u(a));if(n.startsWith(r))throw new Error(`additionalDirectories cannot include hardcoded denied path: '${t}' matches '${a}'`)}if(i?.length)for(let a of i){let r=m(u(a));if(n.startsWith(r)||r.startsWith(n))throw new Error(`additionalDirectories cannot overlap with deniedReadPaths: '${t}' conflicts with '${a}'`)}if(!M(n))throw new Error(`additionalDirectories path does not exist: '${t}'`)}}function b(e){return{id:e.id,name:e.name,cagPrompt:e.cag_prompt,learnedRules:e.learned_rules?JSON.parse(e.learned_rules):[],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 i=JSON.parse(e.additional_directories);return Array.isArray(i)?i.map(s=>typeof s=="string"?{path:s}:s):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?d(JSON.parse(e.os_capabilities)):void 0}}function J(e){let i=p("defaults.deniedReadPaths")??[...l];e.additionalDirectories&&f(e.additionalDirectories,i),o().prepare(`
1
+ import{a as p,g as N}from"./chunk-XTOOD44S.js";import{b as o,d as C}from"./chunk-7F4SZXI2.js";import{b as l,h as g}from"./chunk-WBAPIPST.js";import{c,e as A}from"./chunk-FCV2DPZQ.js";import*as h from"os";import*as y from"path";function u(e){return e.startsWith("~/")||e==="~"?y.join(h.homedir(),e.slice(1)):e}var _=c(()=>{"use strict";g()});function R(e){return w.includes(e)}function S(e){return v[e]}function E(){return w.map(e=>v[e])}function V(e,i=e!=="none"){return E().map(s=>T(s,e,i))}function T(e,i,s=i!=="none"){return process.platform==="darwin"?e.status==="runtime-enforced"&&(i!=="sandbox-exec"||!s)?{...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 z(e){if(!e?.length)return;for(let s of e)if(!R(s.id))throw new Error(`Unknown OS capability: ${s.id}`);let i=d(e);if(i?.length){for(let s of i){let t=S(s.id);if(t.status!=="runtime-enforced")throw new Error(`OS capability '${t.label}' is not editable in Role settings`);if(t.supportsTargets){if(!s.targets?.length)throw new Error(`OS capability '${t.label}' requires at least one target bundle id`);for(let n of s.targets)if(!D(n))throw new Error(`Invalid automation target bundle id: ${n}`)}else if(s.targets?.length)throw new Error(`OS capability '${t.label}' does not accept targets`)}return i}}function d(e){if(!e||e.length===0)return;let i=new Set,s=[];for(let t of e){if(!R(t.id))throw new Error(`Unknown OS capability: ${t.id}`);if(i.has(t.id))continue;i.add(t.id);let n=S(t.id),r={id:t.id};n.supportsTargets&&t.targets?.length&&(r.targets=[...new Set(t.targets.map(a=>a.trim()).filter(Boolean))]),s.push(r)}return s.length>0?s.sort((t,n)=>t.id.localeCompare(n.id)):void 0}function D(e){return x.test(e)}var w,v,x,O=c(()=>{"use strict";w=["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"],v={"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."}},x=/^[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)+$/});var L={};A(L,{createRole:()=>I,deleteRole:()=>U,getRole:()=>J,getRoleByName:()=>P,listRoles:()=>B,updateRole:()=>k,validateAdditionalDirectories:()=>f});import{existsSync as M}from"fs";import{resolve as m}from"path";function f(e,i){for(let s of e){let t=typeof s=="string"?s:s.path;if(!t.startsWith("/")&&!t.startsWith("~/")&&t!=="~")throw new Error(`additionalDirectories must be absolute paths: '${t}' is not absolute`);let n=m(u(t));if(!n.startsWith("/"))throw new Error(`additionalDirectories must be absolute paths: '${t}' is not absolute`);for(let r of l){let a=m(u(r));if(n.startsWith(a))throw new Error(`additionalDirectories cannot include hardcoded denied path: '${t}' matches '${r}'`)}if(i?.length)for(let r of i){let a=m(u(r));if(n.startsWith(a)||a.startsWith(n))throw new Error(`additionalDirectories cannot overlap with deniedReadPaths: '${t}' conflicts with '${r}'`)}if(!M(n))throw new Error(`additionalDirectories path does not exist: '${t}'`)}}function b(e){return{id:e.id,name:e.name,cagPrompt:e.cag_prompt,learnedRules:e.learned_rules?JSON.parse(e.learned_rules):[],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 i=JSON.parse(e.additional_directories);return Array.isArray(i)?i.map(s=>typeof s=="string"?{path:s}:s):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?d(JSON.parse(e.os_capabilities)):void 0,presetId:e.preset_id??void 0}}function I(e){let i=p("defaults.deniedReadPaths")??[...l];e.additionalDirectories&&f(e.additionalDirectories,i),o().prepare(`
2
2
  INSERT INTO roles (id, name, cag_prompt, learned_rules, memory_stream_id, status,
3
3
  performance_score, preferences, created_at, updated_at,
4
4
  allowed_tools, disallowed_tools, evaluation_criteria, execution_mode, model,
5
5
  max_budget_usd, approval_required, source, additional_directories, allowed_channels, mcp_servers, inherit_user_settings,
6
- permission_mode, allowed_bash_patterns, denied_bash_patterns, env_vars, os_capabilities)
7
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
8
- `).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(d(e.osCapabilities)):null)}function P(e){let s=o().prepare("SELECT * FROM roles WHERE id = ?").get(e);return s?b(s):void 0}function I(e){let s=o().prepare("SELECT * FROM roles WHERE name = ?").get(e);return s?b(s):void 0}function k(e,i){let s=o(),t=[],n=[];if("name"in i&&(t.push("name = ?"),n.push(i.name)),"cagPrompt"in i&&(t.push("cag_prompt = ?"),n.push(i.cagPrompt)),"learnedRules"in i&&(t.push("learned_rules = ?"),n.push(JSON.stringify(i.learnedRules))),"memoryStreamId"in i&&(t.push("memory_stream_id = ?"),n.push(i.memoryStreamId)),"status"in i&&(t.push("status = ?"),n.push(i.status)),"performanceScore"in i&&(t.push("performance_score = ?"),n.push(i.performanceScore??null)),"preferences"in i&&(t.push("preferences = ?"),n.push(i.preferences?JSON.stringify(i.preferences):null)),"updatedAt"in i&&(t.push("updated_at = ?"),n.push(i.updatedAt??null)),"allowedTools"in i&&(t.push("allowed_tools = ?"),n.push(i.allowedTools?JSON.stringify(i.allowedTools):null)),"disallowedTools"in i&&(t.push("disallowed_tools = ?"),n.push(i.disallowedTools?JSON.stringify(i.disallowedTools):null)),"evaluationCriteria"in i&&(t.push("evaluation_criteria = ?"),n.push(i.evaluationCriteria?JSON.stringify(i.evaluationCriteria):null)),"executionMode"in i&&(t.push("execution_mode = ?"),n.push(i.executionMode??null)),"model"in i&&(t.push("model = ?"),n.push(i.model??null)),"maxBudgetUsd"in i&&(t.push("max_budget_usd = ?"),n.push(i.maxBudgetUsd??null)),"approvalRequired"in i&&(t.push("approval_required = ?"),n.push(i.approvalRequired?JSON.stringify(i.approvalRequired):null)),"source"in i&&(t.push("source = ?"),n.push(i.source??null)),"additionalDirectories"in i){let a=p("defaults.deniedReadPaths")??[...l];i.additionalDirectories&&f(i.additionalDirectories,a),t.push("additional_directories = ?"),n.push(i.additionalDirectories?JSON.stringify(i.additionalDirectories):null)}"allowedChannels"in i&&(t.push("allowed_channels = ?"),n.push(i.allowedChannels?JSON.stringify(i.allowedChannels):null)),"mcpServers"in i&&(t.push("mcp_servers = ?"),n.push(i.mcpServers?JSON.stringify(i.mcpServers):null)),"inheritUserSettings"in i&&(t.push("inherit_user_settings = ?"),n.push(i.inheritUserSettings?1:0)),"permissionMode"in i&&(t.push("permission_mode = ?"),n.push(i.permissionMode??null)),"allowedBashPatterns"in i&&(t.push("allowed_bash_patterns = ?"),n.push(i.allowedBashPatterns?JSON.stringify(i.allowedBashPatterns):null)),"deniedBashPatterns"in i&&(t.push("denied_bash_patterns = ?"),n.push(i.deniedBashPatterns?JSON.stringify(i.deniedBashPatterns):null)),"envVars"in i&&(t.push("env_vars = ?"),n.push(i.envVars?JSON.stringify(i.envVars):null)),"osCapabilities"in i&&(t.push("os_capabilities = ?"),n.push(i.osCapabilities?JSON.stringify(d(i.osCapabilities)):null)),t.length!==0&&(n.push(e),s.prepare(`UPDATE roles SET ${t.join(", ")} WHERE id = ?`).run(...n))}function B(e,i,s=0){let t=o(),n="SELECT * FROM roles",a=[];return e&&(n+=" WHERE status = ?",a.push(e)),n+=" ORDER BY COALESCE(updated_at, created_at) DESC",typeof i=="number"&&(n+=" LIMIT ? OFFSET ?",a.push(i,s)),t.prepare(n).all(...a).map(b)}function U(e){o().prepare("DELETE FROM roles WHERE id = ?").run(e)}var F=c(()=>{C();g();_();N();O()});export{u as a,_ as b,w as c,x as d,S as e,V as f,z as g,d as h,O as i,f as j,J as k,P as l,I as m,k as n,B as o,U as p,L as q,F as r};
6
+ permission_mode, allowed_bash_patterns, denied_bash_patterns, env_vars, os_capabilities, preset_id)
7
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
8
+ `).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(d(e.osCapabilities)):null,e.presetId??null)}function J(e){let s=o().prepare("SELECT * FROM roles WHERE id = ?").get(e);return s?b(s):void 0}function P(e){let s=o().prepare("SELECT * FROM roles WHERE name = ?").get(e);return s?b(s):void 0}function k(e,i){let s=o(),t=[],n=[];if("name"in i&&(t.push("name = ?"),n.push(i.name)),"cagPrompt"in i&&(t.push("cag_prompt = ?"),n.push(i.cagPrompt)),"learnedRules"in i&&(t.push("learned_rules = ?"),n.push(JSON.stringify(i.learnedRules))),"memoryStreamId"in i&&(t.push("memory_stream_id = ?"),n.push(i.memoryStreamId)),"status"in i&&(t.push("status = ?"),n.push(i.status)),"performanceScore"in i&&(t.push("performance_score = ?"),n.push(i.performanceScore??null)),"preferences"in i&&(t.push("preferences = ?"),n.push(i.preferences?JSON.stringify(i.preferences):null)),"updatedAt"in i&&(t.push("updated_at = ?"),n.push(i.updatedAt??null)),"allowedTools"in i&&(t.push("allowed_tools = ?"),n.push(i.allowedTools?JSON.stringify(i.allowedTools):null)),"disallowedTools"in i&&(t.push("disallowed_tools = ?"),n.push(i.disallowedTools?JSON.stringify(i.disallowedTools):null)),"evaluationCriteria"in i&&(t.push("evaluation_criteria = ?"),n.push(i.evaluationCriteria?JSON.stringify(i.evaluationCriteria):null)),"executionMode"in i&&(t.push("execution_mode = ?"),n.push(i.executionMode??null)),"model"in i&&(t.push("model = ?"),n.push(i.model??null)),"maxBudgetUsd"in i&&(t.push("max_budget_usd = ?"),n.push(i.maxBudgetUsd??null)),"approvalRequired"in i&&(t.push("approval_required = ?"),n.push(i.approvalRequired?JSON.stringify(i.approvalRequired):null)),"source"in i&&(t.push("source = ?"),n.push(i.source??null)),"additionalDirectories"in i){let r=p("defaults.deniedReadPaths")??[...l];i.additionalDirectories&&f(i.additionalDirectories,r),t.push("additional_directories = ?"),n.push(i.additionalDirectories?JSON.stringify(i.additionalDirectories):null)}"allowedChannels"in i&&(t.push("allowed_channels = ?"),n.push(i.allowedChannels?JSON.stringify(i.allowedChannels):null)),"mcpServers"in i&&(t.push("mcp_servers = ?"),n.push(i.mcpServers?JSON.stringify(i.mcpServers):null)),"inheritUserSettings"in i&&(t.push("inherit_user_settings = ?"),n.push(i.inheritUserSettings?1:0)),"permissionMode"in i&&(t.push("permission_mode = ?"),n.push(i.permissionMode??null)),"allowedBashPatterns"in i&&(t.push("allowed_bash_patterns = ?"),n.push(i.allowedBashPatterns?JSON.stringify(i.allowedBashPatterns):null)),"deniedBashPatterns"in i&&(t.push("denied_bash_patterns = ?"),n.push(i.deniedBashPatterns?JSON.stringify(i.deniedBashPatterns):null)),"envVars"in i&&(t.push("env_vars = ?"),n.push(i.envVars?JSON.stringify(i.envVars):null)),"osCapabilities"in i&&(t.push("os_capabilities = ?"),n.push(i.osCapabilities?JSON.stringify(d(i.osCapabilities)):null)),"presetId"in i&&(t.push("preset_id = ?"),n.push(i.presetId??null)),t.length!==0&&(n.push(e),s.prepare(`UPDATE roles SET ${t.join(", ")} WHERE id = ?`).run(...n))}function B(e,i,s=0){let t=o(),n="SELECT * FROM roles",r=[];return e&&(n+=" WHERE status = ?",r.push(e)),n+=" ORDER BY COALESCE(updated_at, created_at) DESC",typeof i=="number"&&(n+=" LIMIT ? OFFSET ?",r.push(i,s)),t.prepare(n).all(...r).map(b)}function U(e){o().prepare("DELETE FROM roles WHERE id = ?").run(e)}var F=c(()=>{C();g();_();N();O()});export{u as a,_ as b,w as c,x as d,S as e,V as f,z as g,d as h,O as i,f as j,I as k,J as l,P as m,k as n,B as o,U as p,L as q,F as r};
package/dist/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{a as W,b as h,c as z,e as V}from"./chunk-PHT24MOV.js";import{a as B,b as J,d as G}from"./chunk-NASJH4NT.js";import{a as q}from"./chunk-T33BLZV2.js";import"./chunk-5XOTPEAK.js";import{b as _}from"./chunk-7IFLU3CY.js";import"./chunk-GSMC3VUM.js";import{c as M,e as K,g as de}from"./chunk-FPZEZYUB.js";import{b as H,c as j,d as ce}from"./chunk-5EPG2US5.js";import"./chunk-WBAPIPST.js";import"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";import{Command as we}from"commander";import{fork as ue}from"child_process";import{readFileSync as L,writeFileSync as me,existsSync as v,unlinkSync as $,mkdirSync as pe,openSync as ge}from"fs";import{join as D}from"path";import{homedir as fe}from"os";var P=D(fe(),".adam"),S=D(P,"adam.pid"),k=D(P,"adam.port"),b=D(P,"server.log");function he(){v(P)||pe(P,{recursive:!0})}function C(){if(!v(S))return null;let e=parseInt(L(S,"utf-8").trim(),10);return isNaN(e)?null:e}function ve(){if(!v(k))return null;let e=parseInt(L(k,"utf-8").trim(),10);return isNaN(e)?null:e}function A(e){try{return process.kill(e,0),!0}catch{return!1}}async function N(){he();let e=C();if(e&&A(e))throw new Error(`Server already running (PID ${e})`);v(S)&&$(S),v(k)&&$(k);let o=ge(b,"a"),t=D(B,"dist/index.js"),n=ue(t,[],{detached:!0,stdio:["ignore",o,o,"ipc"]}),l=await new Promise((i,c)=>{let g=setTimeout(()=>{n.kill(),c(new Error(`Server start timeout. Check logs: ${b}`))},1e4);n.on("message",a=>{if(a&&typeof a=="object"&&a.type==="ready"){clearTimeout(g);let s=a.port;s?i(s):c(new Error("Ready signal received but missing port"))}}),n.on("exit",a=>{clearTimeout(g);let s=v(b)?L(b,"utf-8").split(`
2
+ import{a as W,b as h,c as z,e as V}from"./chunk-PHT24MOV.js";import{a as B,b as J,d as G}from"./chunk-3N7MGASP.js";import{a as q}from"./chunk-HSEP6LNQ.js";import"./chunk-VPZSOYE5.js";import{b as _}from"./chunk-7IFLU3CY.js";import"./chunk-OFTIPZTH.js";import{c as M,e as K,g as de}from"./chunk-XTOOD44S.js";import{b as H,c as j,d as ce}from"./chunk-7F4SZXI2.js";import"./chunk-WBAPIPST.js";import"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";import{Command as we}from"commander";import{fork as ue}from"child_process";import{readFileSync as L,writeFileSync as me,existsSync as v,unlinkSync as $,mkdirSync as pe,openSync as ge}from"fs";import{join as D}from"path";import{homedir as fe}from"os";var P=D(fe(),".adam"),S=D(P,"adam.pid"),k=D(P,"adam.port"),b=D(P,"server.log");function he(){v(P)||pe(P,{recursive:!0})}function C(){if(!v(S))return null;let e=parseInt(L(S,"utf-8").trim(),10);return isNaN(e)?null:e}function ve(){if(!v(k))return null;let e=parseInt(L(k,"utf-8").trim(),10);return isNaN(e)?null:e}function A(e){try{return process.kill(e,0),!0}catch{return!1}}async function N(){he();let e=C();if(e&&A(e))throw new Error(`Server already running (PID ${e})`);v(S)&&$(S),v(k)&&$(k);let o=ge(b,"a"),t=D(B,"dist/index.js"),n=ue(t,[],{detached:!0,stdio:["ignore",o,o,"ipc"]}),l=await new Promise((i,c)=>{let g=setTimeout(()=>{n.kill(),c(new Error(`Server start timeout. Check logs: ${b}`))},1e4);n.on("message",a=>{if(a&&typeof a=="object"&&a.type==="ready"){clearTimeout(g);let s=a.port;s?i(s):c(new Error("Ready signal received but missing port"))}}),n.on("exit",a=>{clearTimeout(g);let s=v(b)?L(b,"utf-8").split(`
3
3
  `).slice(-10).join(`
4
4
  `):"";c(new Error(`Server exited with code ${a}.
5
5
  ${s?`Last log lines:
@@ -14,4 +14,4 @@ Task cancelled.`)),process.exit(130)};process.on("SIGINT",l);let i=new V(n);awai
14
14
  `));let i={Anthropic:[["anthropic.apiKey",t["anthropic.apiKey"]],["anthropic.baseUrl",t["anthropic.baseUrl"]],["anthropic.model",t["anthropic.model"]],["anthropic.defaultOpusModel",t["anthropic.defaultOpusModel"]],["anthropic.defaultSonnetModel",t["anthropic.defaultSonnetModel"]],["anthropic.defaultHaikuModel",t["anthropic.defaultHaikuModel"]],["anthropic.smallFastModel",t["anthropic.smallFastModel"]]],Defaults:[["defaults.model",t["defaults.model"]],["defaults.effort",t["defaults.effort"]],["defaults.maxTurns",t["defaults.maxTurns"]],["defaults.maxBudgetUsd",t["defaults.maxBudgetUsd"]],["defaults.timeout",t["defaults.timeout"]]],Server:[["server.port",t["server.port"]],["server.host",t["server.host"]],["server.apiKey",t["server.apiKey"]],["server.timezone",t["server.timezone"]]],Logging:[["logging.level",t["logging.level"]]],Evolution:[["roles.evolution.triggerEvery",t["roles.evolution.triggerEvery"]],["roles.evolution.reflectionThreshold",t["roles.evolution.reflectionThreshold"]]],Chat:[["chat.sessionTimeoutMinutes",t["chat.sessionTimeoutMinutes"]],["chat.maxSessionTurns",t["chat.maxSessionTurns"]],["chat.autoTitle",t["chat.autoTitle"]],["chat.archiveExtractMemory",t["chat.archiveExtractMemory"]]]},c={"anthropic.apiKey":"API Key","anthropic.baseUrl":"Base URL","anthropic.model":"Model","anthropic.defaultOpusModel":"Default Opus","anthropic.defaultSonnetModel":"Default Sonnet","anthropic.defaultHaikuModel":"Default Haiku","anthropic.smallFastModel":"Small Fast","defaults.model":"Default Model","defaults.effort":"Effort","defaults.maxTurns":"Max Turns","defaults.maxBudgetUsd":"Max Budget (USD)","defaults.timeout":"Timeout (sec)","server.port":"Port","server.host":"Host","server.apiKey":"API Key","server.timezone":"Timezone","logging.level":"Log Level","roles.evolution.triggerEvery":"Evolution Trigger Every","chat.sessionTimeoutMinutes":"Session Timeout (min)","chat.maxSessionTurns":"Max Session Turns","chat.autoTitle":"Auto Title","chat.archiveExtractMemory":"Archive Extract Memory","roles.evolution.reflectionThreshold":"Reflection Threshold"};for(let[g,a]of Object.entries(i)){let s=a.filter(([,r])=>r!=null&&r!=="");if(s.length!==0){console.log(O.cyan(`${g}:`));for(let[r,m]of s){let f=c[r]??r,R=r.includes("apiKey")||r.includes("token")||r.includes("secret")?se(String(m)):String(m);console.log(` ${f}: ${R}`)}console.log("")}}if(n){console.log(O.bold(`.env File Values:
15
15
  `));let g=["ANTHROPIC_API_KEY","ANTHROPIC_BASE_URL","ANTHROPIC_MODEL","ANTHROPIC_DEFAULT_OPUS_MODEL","ANTHROPIC_DEFAULT_SONNET_MODEL","ANTHROPIC_DEFAULT_HAIKU_MODEL","ANTHROPIC_SMALL_FAST_MODEL"];for(let a of g)if(a in n){let s=a.includes("API_KEY");console.log(` ${a}: ${s?se(n[a]):n[a]}`)}console.log("")}}}finally{j()}}function se(e){return!e||e.length<8?"****":e.slice(0,4)+"****"}import w from"chalk";async function ae(e){try{let o=e.limit??"20",t=await h(`/evolution-audit?limit=${o}`);if(t.length===0){console.log(w.dim("No evolution records yet"));return}console.log(w.bold(`Evolution Audit Log (${t.length} records)
16
16
  `));for(let n of t){let l=new Date(n.timestamp).toLocaleString();console.log(w.bold(`[${l}]`)+(n.triggerTaskId?w.dim(` task: ${n.triggerTaskId.slice(0,8)}`):"")),console.log(w.dim(" Diff:"));for(let i of n.diff.split(`
17
- `))i.startsWith("+")?console.log(w.green(` ${i}`)):i.startsWith("-")?console.log(w.red(` ${i}`)):console.log(w.dim(` ${i}`));console.log()}}catch(o){console.error(w.red(o.message)),process.exit(1)}}import p from"chalk";import{WebSocket as Se}from"ws";async function le(e){let o=I(),t=e.port?Number(e.port):o.port??7100,n=W(),l=new URL(`ws://localhost:${t}/events`);n&&l.searchParams.set("api_key",n);let i=l.toString(),c=e.component,g=e.level;function a(){let r=new Se(i);r.on("open",()=>{console.log(p.dim(`Connected to ${i}`)),e.follow&&console.log(p.dim("Following logs... (Ctrl+C to exit)"))}),r.on("message",m=>{try{let f=JSON.parse(m.toString());if(f.type==="log_event"&&f.msg){if(c&&f.component!==c||g&&f.level!==g)return;s(f)}}catch{}}),r.on("error",m=>{console.error(p.red(`WebSocket error: ${m.message}`))}),r.on("close",()=>{e.follow&&(console.log(p.yellow("Connection closed, reconnecting...")),setTimeout(a,1e3))})}function s(r){let m=q(r.timestamp),x={debug:p.gray,info:p.blue,warn:p.yellow,error:p.red,fatal:p.bgRed.white}[r.level]||p.white,R=p.cyan(`[${r.component}]`);console.log(`${p.dim(m)} ${x(r.level.toUpperCase().padEnd(5))} ${R} ${r.msg}`),r.metadata&&typeof r.metadata=="object"&&Object.keys(r.metadata).length>0&&console.log(p.dim(" ")+p.dim(JSON.stringify(r.metadata)))}a(),await new Promise(r=>{process.on("SIGINT",()=>r()),process.on("SIGTERM",()=>r()),e.follow||setTimeout(r,3e3)})}var y=new we;y.name("adam").description("Adam Agent Server CLI").version(J());var E=y.command("server").description("Server management");E.command("start").description("Start the server daemon").action(async()=>{try{let{pid:e,port:o}=await N();console.log(`Server started (PID ${e}, port ${o})`)}catch(e){console.error("Failed to start server:",e.message),process.exit(1)}});E.command("stop").description("Stop the server daemon").action(async()=>{try{await U(),console.log("Server stopped")}catch(e){console.error("Failed to stop server:",e.message),process.exit(1)}});E.command("restart").description("Restart the server daemon").action(async()=>{try{I().running&&(await U(),console.log("Server stopped"));let{pid:o,port:t}=await N();console.log(`Server restarted (PID ${o}, port ${t})`)}catch(e){console.error("Failed to restart server:",e.message),process.exit(1)}});E.command("status").description("Show server status").action(()=>{let e=I();e.running?console.log(`Server is running (PID ${e.pid}, port ${e.port})`):e.pid?console.log("Server not running (stale PID file)"):console.log("Server not running")});E.command("logs").description("Show server logs").option("-f, --follow","Follow log output").action(async e=>{let o=Y();if(!Te(o)){console.log("No log file found");return}if(e.follow){let t=be(o,{encoding:"utf-8"});for await(let n of t)process.stdout.write(n)}else console.log(ke(o,"utf-8"))});y.command("run <prompt>").description("Submit a task and stream output").option("--model <model>","Model to use").option("--timeout <seconds>","Task timeout",parseInt).option("--budget <usd>","Max budget in USD",parseFloat).option("--template <name>","Task template to use").option("--workspace <path>","Workspace directory").option("--no-approval","Auto-approve all approval requests").option("--json","Output as JSON").option("--server <url>","Server URL").action(X);var F=y.command("tasks").description("Task management");F.command("list").description("List recent tasks").option("-s, --status <status>","Filter by status").option("-l, --limit <number>","Limit results","20").action(te);F.command("show <id>").description("Show task details").action(re);F.command("cancel <id>").description("Cancel a running task").action(ne);y.command("config").description("Display current configuration").option("--json","Output as JSON").action(ie);y.command("evolution").description("Show self-evolution audit log").option("-l, --limit <number>","Limit results","20").action(ae);y.command("logs").description("Stream server logs in real-time via WebSocket").option("-f, --follow","Follow logs continuously").option("-c, --component <component>","Filter by component (manager, worker, scheduler, api, ws)").option("-l, --level <level>","Filter by level (debug, info, warn, error)").option("-p, --port <port>","Server port").action(le);y.command("register-ai-digest").description("Register the AI Hourly Digest task template (cron: every hour)").action(()=>{try{G(),console.log("AI Digest template registered successfully")}catch(e){console.error("Failed to register AI Digest template:",e.message),process.exit(1)}});y.action(async()=>{try{await z()}catch{I().running?console.error("Server is running but not responding. Check: adam server logs"):console.error("Server not running. Run: adam server start"),process.exit(1)}let e=(await import("./App-ZRCRM7WR.js")).default,{waitUntilExit:o}=Ie($e.createElement(e));await o()});y.parse();
17
+ `))i.startsWith("+")?console.log(w.green(` ${i}`)):i.startsWith("-")?console.log(w.red(` ${i}`)):console.log(w.dim(` ${i}`));console.log()}}catch(o){console.error(w.red(o.message)),process.exit(1)}}import p from"chalk";import{WebSocket as Se}from"ws";async function le(e){let o=I(),t=e.port?Number(e.port):o.port??7100,n=W(),l=new URL(`ws://localhost:${t}/events`);n&&l.searchParams.set("api_key",n);let i=l.toString(),c=e.component,g=e.level;function a(){let r=new Se(i);r.on("open",()=>{console.log(p.dim(`Connected to ${i}`)),e.follow&&console.log(p.dim("Following logs... (Ctrl+C to exit)"))}),r.on("message",m=>{try{let f=JSON.parse(m.toString());if(f.type==="log_event"&&f.msg){if(c&&f.component!==c||g&&f.level!==g)return;s(f)}}catch{}}),r.on("error",m=>{console.error(p.red(`WebSocket error: ${m.message}`))}),r.on("close",()=>{e.follow&&(console.log(p.yellow("Connection closed, reconnecting...")),setTimeout(a,1e3))})}function s(r){let m=q(r.timestamp),x={debug:p.gray,info:p.blue,warn:p.yellow,error:p.red,fatal:p.bgRed.white}[r.level]||p.white,R=p.cyan(`[${r.component}]`);console.log(`${p.dim(m)} ${x(r.level.toUpperCase().padEnd(5))} ${R} ${r.msg}`),r.metadata&&typeof r.metadata=="object"&&Object.keys(r.metadata).length>0&&console.log(p.dim(" ")+p.dim(JSON.stringify(r.metadata)))}a(),await new Promise(r=>{process.on("SIGINT",()=>r()),process.on("SIGTERM",()=>r()),e.follow||setTimeout(r,3e3)})}var y=new we;y.name("adam").description("Adam Agent Server CLI").version(J());var E=y.command("server").description("Server management");E.command("start").description("Start the server daemon").action(async()=>{try{let{pid:e,port:o}=await N();console.log(`Server started (PID ${e}, port ${o})`)}catch(e){console.error("Failed to start server:",e.message),process.exit(1)}});E.command("stop").description("Stop the server daemon").action(async()=>{try{await U(),console.log("Server stopped")}catch(e){console.error("Failed to stop server:",e.message),process.exit(1)}});E.command("restart").description("Restart the server daemon").action(async()=>{try{I().running&&(await U(),console.log("Server stopped"));let{pid:o,port:t}=await N();console.log(`Server restarted (PID ${o}, port ${t})`)}catch(e){console.error("Failed to restart server:",e.message),process.exit(1)}});E.command("status").description("Show server status").action(()=>{let e=I();e.running?console.log(`Server is running (PID ${e.pid}, port ${e.port})`):e.pid?console.log("Server not running (stale PID file)"):console.log("Server not running")});E.command("logs").description("Show server logs").option("-f, --follow","Follow log output").action(async e=>{let o=Y();if(!Te(o)){console.log("No log file found");return}if(e.follow){let t=be(o,{encoding:"utf-8"});for await(let n of t)process.stdout.write(n)}else console.log(ke(o,"utf-8"))});y.command("run <prompt>").description("Submit a task and stream output").option("--model <model>","Model to use").option("--timeout <seconds>","Task timeout",parseInt).option("--budget <usd>","Max budget in USD",parseFloat).option("--template <name>","Task template to use").option("--workspace <path>","Workspace directory").option("--no-approval","Auto-approve all approval requests").option("--json","Output as JSON").option("--server <url>","Server URL").action(X);var F=y.command("tasks").description("Task management");F.command("list").description("List recent tasks").option("-s, --status <status>","Filter by status").option("-l, --limit <number>","Limit results","20").action(te);F.command("show <id>").description("Show task details").action(re);F.command("cancel <id>").description("Cancel a running task").action(ne);y.command("config").description("Display current configuration").option("--json","Output as JSON").action(ie);y.command("evolution").description("Show self-evolution audit log").option("-l, --limit <number>","Limit results","20").action(ae);y.command("logs").description("Stream server logs in real-time via WebSocket").option("-f, --follow","Follow logs continuously").option("-c, --component <component>","Filter by component (manager, worker, scheduler, api, ws)").option("-l, --level <level>","Filter by level (debug, info, warn, error)").option("-p, --port <port>","Server port").action(le);y.command("register-ai-digest").description("Register the AI Hourly Digest task template (cron: every hour)").action(()=>{try{G(),console.log("AI Digest template registered successfully")}catch(e){console.error("Failed to register AI Digest template:",e.message),process.exit(1)}});y.action(async()=>{try{await z()}catch{I().running?console.error("Server is running but not responding. Check: adam server logs"):console.error("Server not running. Run: adam server start"),process.exit(1)}let e=(await import("./App-5QZKMPRM.js")).default,{waitUntilExit:o}=Ie($e.createElement(e));await o()});y.parse();
@@ -1 +1 @@
1
- import{a,b,c,d,e,f,g}from"./chunk-FPZEZYUB.js";import"./chunk-5EPG2US5.js";import"./chunk-WBAPIPST.js";import"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";g();export{f as deleteConfigValue,c as getAllConfig,a as getConfigValue,e as isConfigEmpty,d as seedConfig,b as setConfigValue};
1
+ import{a,b,c,d,e,f,g}from"./chunk-XTOOD44S.js";import"./chunk-7F4SZXI2.js";import"./chunk-WBAPIPST.js";import"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";g();export{f as deleteConfigValue,c as getAllConfig,a as getConfigValue,e as isConfigEmpty,d as seedConfig,b as setConfigValue};
@@ -0,0 +1 @@
1
+ import{a as b,b as c,d,e}from"./chunk-5AUQIK3Q.js";import{a}from"./chunk-YVVKUPGL.js";import"./chunk-7IFLU3CY.js";import"./chunk-OFTIPZTH.js";import"./chunk-WBAPIPST.js";import"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";export{a as DEFAULT_CONFIG,e as getChatConfig,d as getDefaults,b as loadConfig,c as loadDefaultConfig};
@@ -1 +1 @@
1
- import{a,b,c,d}from"./chunk-5EPG2US5.js";import"./chunk-WBAPIPST.js";import"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";d();export{c as closeDb,b as getDb,a as runMigrations};
1
+ import{a,b,c,d}from"./chunk-7F4SZXI2.js";import"./chunk-WBAPIPST.js";import"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";d();export{c as closeDb,b as getDb,a as runMigrations};
@@ -1 +1 @@
1
- import{a,b,c,d,e,f,g,h,i}from"./chunk-RZ7LCZVK.js";import"./chunk-5EPG2US5.js";import"./chunk-WBAPIPST.js";import"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";export{a as TTL_MS,g as cleanupExpired,b as createDeliveryLog,i as getDeliveryLogByRule,h as getDeliveryLogByTask,f as getFailedDeliveries,e as getPendingDeliveries,d as markDelivered,c as updateDeliveryLogStatus};
1
+ import{a,b,c,d,e,f,g,h,i}from"./chunk-ARQF52V6.js";import"./chunk-7F4SZXI2.js";import"./chunk-WBAPIPST.js";import"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";export{a as TTL_MS,g as cleanupExpired,b as createDeliveryLog,i as getDeliveryLogByRule,h as getDeliveryLogByTask,f as getFailedDeliveries,e as getPendingDeliveries,d as markDelivered,c as updateDeliveryLogStatus};
@@ -0,0 +1 @@
1
+ import{a,b,c,d}from"./chunk-EJBGJLA2.js";import"./chunk-W7U3ASGR.js";import"./chunk-3HZE5DQZ.js";import"./chunk-TTP7QRAQ.js";import"./chunk-UQDC3X6O.js";import"./chunk-OY2KVSIX.js";import"./chunk-KUJFQDT5.js";import"./chunk-IZ3WZHCM.js";import"./chunk-L7JP7DUO.js";import"./chunk-ARQF52V6.js";import"./chunk-7F4SZXI2.js";import"./chunk-WBAPIPST.js";import"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";export{a as DeliveryEngine,b as getDeliveryEngine,c as initDeliveryEngine,d as stopDeliveryEngine};