adam-agent-server 1.13.0 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -5
- package/dist/App-6TRGTNZ7.js +13 -0
- package/dist/approval-handler-YLO3V75T.js +1 -0
- package/dist/audit-diagnostics-MASYIEGZ.js +1 -0
- package/dist/audit-manager-LYBXP7U4.js +1 -0
- package/dist/bree-engine-AA7EVKTG.js +1 -0
- package/dist/{channels-WFC26TED.js → channels-2IL6USWL.js} +1 -1
- package/dist/channels-6BEGHNOK.js +1 -0
- package/dist/chat-tool-calls-KARPW7PE.js +1 -0
- package/dist/chunk-245WE5AF.js +1 -0
- package/dist/chunk-2N4EOZZ4.js +9 -0
- package/dist/chunk-3BRHWRZ5.js +2 -0
- package/dist/chunk-3KNR2F6H.js +3 -0
- package/dist/chunk-42V6ZPCS.js +5 -0
- package/dist/chunk-6NWIZ3BH.js +220 -0
- package/dist/chunk-APAOIZN4.js +114 -0
- package/dist/chunk-ASPPM7TQ.js +1 -0
- package/dist/chunk-BKNXRSJU.js +4 -0
- package/dist/{chunk-MRTJFYPR.js → chunk-BLCNUT53.js} +1 -1
- package/dist/chunk-BPXS4QEO.js +1006 -0
- package/dist/chunk-CLNYHWZ6.js +5 -0
- package/dist/chunk-D3SPXZZY.js +6 -0
- package/dist/{chunk-SWP2JC54.js → chunk-DRO3DG7X.js} +1 -1
- package/dist/chunk-EVUZ5LH2.js +1 -0
- package/dist/chunk-F6U5TMM3.js +5 -0
- package/dist/chunk-FD4IKMXV.js +1 -0
- package/dist/chunk-GXWB47NF.js +9 -0
- package/dist/{chunk-PXGK5H5C.js → chunk-I7LJ4432.js} +1 -1
- package/dist/chunk-ICAM2GUU.js +1 -0
- package/dist/{chunk-B44X7JAJ.js → chunk-IRUR4DVD.js} +1 -1
- package/dist/chunk-ISKCTUI7.js +9 -0
- package/dist/{chunk-7T4B2MZ7.js → chunk-J3VYLSJI.js} +1 -1
- package/dist/chunk-KJNAORKM.js +15 -0
- package/dist/chunk-L47LZYVG.js +21 -0
- package/dist/chunk-LU3D53ZV.js +34 -0
- package/dist/{chunk-YKYRNTPV.js → chunk-N2OLEUAQ.js} +1 -1
- package/dist/{chunk-PHT24MOV.js → chunk-NLTYJUQG.js} +1 -1
- package/dist/chunk-NNMQGISW.js +1 -0
- package/dist/chunk-NPGZRSGL.js +5 -0
- package/dist/chunk-NTVLV7NI.js +1 -0
- package/dist/chunk-NUJSTEV4.js +1 -0
- package/dist/{chunk-FUWPDXXG.js → chunk-NWGRLNUM.js} +1 -1
- package/dist/chunk-OQ3JOTPK.js +1 -0
- package/dist/chunk-RBJPQYV3.js +6 -0
- package/dist/chunk-SVUP3F4V.js +14 -0
- package/dist/chunk-TLMG5W3L.js +4 -0
- package/dist/chunk-TLP4ZMJB.js +19 -0
- package/dist/{chunk-WQFNB2MQ.js → chunk-TZCMK3UG.js} +6 -6
- package/dist/chunk-UFWMUBFH.js +25 -0
- package/dist/chunk-VKKDSXMR.js +1 -0
- package/dist/chunk-VNXTBIPI.js +31 -0
- package/dist/chunk-XF7YHFVR.js +15 -0
- package/dist/{chunk-X5V4VMET.js → chunk-XIVFVKMB.js} +2 -2
- package/dist/chunk-XYZVMTNN.js +1 -0
- package/dist/{chunk-Q2JQFDAK.js → chunk-XZEBYOFR.js} +3 -3
- package/dist/chunk-Z6LHGA27.js +1 -0
- package/dist/cli.js +10 -10
- package/dist/config-VHWLMFIN.js +1 -0
- package/dist/{config-GKVOAMY2.js → config-XO7TGH27.js} +1 -1
- package/dist/db-WCTOLFAZ.js +1 -0
- package/dist/delivery-log-ML4RJOBM.js +1 -0
- package/dist/dist-HCSYRPJU.js +1 -0
- package/dist/engine-XLH4VL6Y.js +1 -0
- package/dist/evolution-audit-HLU7LQL6.js +1 -0
- package/dist/execution-tools-SYP3GR6T.js +1 -0
- package/dist/{external-api-DOVGA3ML.js → external-api-YMEFVZGG.js} +1 -1
- package/dist/index.js +240 -36
- package/dist/learner-NJXX2RUL.js +1 -0
- package/dist/{logger-WEXZORHP.js → logger-PAMNFWI3.js} +1 -1
- package/dist/memories-JDTQM3UN.js +1 -0
- package/dist/memory-extractor-5PTMCSOX.js +1 -0
- package/dist/memory-gc-BCHTOSXK.js +1 -0
- package/dist/memory-service-66EMRJXO.js +1 -0
- package/dist/onnxruntime_binding-2BPLI7ZQ.node +0 -0
- package/dist/onnxruntime_binding-5J67DTMJ.node +0 -0
- package/dist/onnxruntime_binding-7ZZLEQ2F.node +0 -0
- package/dist/onnxruntime_binding-KDCXAPN5.node +0 -0
- package/dist/onnxruntime_binding-R73P2IQW.node +0 -0
- package/dist/outbound-gateway-3INYZDOR.js +1 -0
- package/dist/presets-DT3J2ON4.js +1 -0
- package/dist/reflection-job-ST4ANCGB.js +23 -0
- package/dist/role-presets-3IQKCSVQ.js +1 -0
- package/dist/role-workspace-SIHNI6HO.js +1 -0
- package/dist/roles-F6AEM6B5.js +1 -0
- package/dist/{runtime-QA2DCZYQ.js → runtime-TWLGJSL6.js} +1 -1
- package/dist/session-manager-JTQRJI7R.js +1 -0
- package/dist/skill-registry-4JT62GEF.js +1 -0
- package/dist/target-resolution-PSSBM4LX.js +1 -0
- package/dist/task-templates-6G46OVYT.js +1 -0
- package/dist/template-dispatch-2K7KV7YS.js +1 -0
- package/dist/template-execution-artifacts-NEPSVD2B.js +1 -0
- package/dist/trace-context-UR7DI5ME.js +1 -0
- package/package.json +34 -14
- package/web/dist/assets/{Button-VPwTNGpF.js → Button-fLMsJd5o.js} +1 -1
- package/web/dist/assets/{Card-C2N6k4gh.js → Card-cy-gHU0O.js} +1 -1
- package/web/dist/assets/{ChannelDetail-DktmpO0A.js → ChannelDetail-CsKBPHkT.js} +1 -1
- package/web/dist/assets/Channels-DMutLV9r.js +14 -0
- package/web/dist/assets/Chat-DWTs-iOw.js +2 -0
- package/web/dist/assets/Dashboard-CoatfhW8.js +1 -0
- package/web/dist/assets/{EmptyState-CWS9PJND.js → EmptyState-C5kVDHc7.js} +1 -1
- package/web/dist/assets/{EnvVarEditor-D0kGIBcl.js → EnvVarEditor-BvRsHayG.js} +1 -1
- package/web/dist/assets/{EventDefDetail-BiXTA6LF.js → EventDefDetail-zuJydp12.js} +1 -1
- package/web/dist/assets/Events-nCImjXyr.js +1 -0
- package/web/dist/assets/{Evolution-C884p_CE.js → Evolution-Br41g99g.js} +1 -1
- package/web/dist/assets/ExtensionDetail-BXlphIkn.js +1 -0
- package/web/dist/assets/Extensions-3lhbw0A2.js +1 -0
- package/web/dist/assets/{FeatureRequests-Ck0WQnXX.js → FeatureRequests-oaXQNu43.js} +1 -1
- package/web/dist/assets/{GoalDetail-DJOyf7By.js → GoalDetail-DRDg1JDv.js} +1 -1
- package/web/dist/assets/Goals-DGmKvtGA.js +1 -0
- package/web/dist/assets/{Logs-6r7fnBn7.js → Logs-BZKxhdnb.js} +1 -1
- package/web/dist/assets/{Memories-CvPaqv5r.js → Memories-DhJJk-KB.js} +1 -1
- package/web/dist/assets/{Mistakes-aUhkqHDC.js → Mistakes-DxThj9as.js} +1 -1
- package/web/dist/assets/{NotFound-R6tIzhL0.js → NotFound-buXr2gl7.js} +1 -1
- package/web/dist/assets/{PageHeader-D9lLjo0N.js → PageHeader-BgNbz3JV.js} +1 -1
- package/web/dist/assets/Plugins-BXrsGsXs.js +1 -0
- package/web/dist/assets/RoleDetail-rClUsHwS.js +35 -0
- package/web/dist/assets/Roles-DH9cRv8h.js +1 -0
- package/web/dist/assets/{SectionHeader-BB3H3F_P.js → SectionHeader-CwX6m1f6.js} +1 -1
- package/web/dist/assets/Settings-My2lOEWv.js +1 -0
- package/web/dist/assets/{Strategies-DUps-2I9.js → Strategies-YLMryJlG.js} +1 -1
- package/web/dist/assets/{Switch-B_R_EX9s.js → Switch-PNpjNoGn.js} +1 -1
- package/web/dist/assets/{Table-D4lT5uHx.js → Table-BrERwl-F.js} +1 -1
- package/web/dist/assets/{Tabs-CwzWpI-7.js → Tabs-CGHmpUAD.js} +1 -1
- package/web/dist/assets/TaskDetail-Bkaq0NwW.js +2 -0
- package/web/dist/assets/Work-4OcGMu_a.js +1 -0
- package/web/dist/assets/api-BkdixMz9.js +1 -0
- package/web/dist/assets/{es2015-DCW7LI8d.js → es2015-JqLIWAgH.js} +1 -1
- package/web/dist/assets/index-C-e-qpXc.js +12 -0
- package/web/dist/assets/index-DGTVc0qD.css +2 -0
- package/web/dist/assets/{useIsMobileLayout-D6Tz5o5h.js → useIsMobileLayout-Blj4Mk4K.js} +1 -1
- package/web/dist/assets/{usePluginsWithUsage-CSQr03vZ.js → usePluginsWithUsage-Ch9WCFTb.js} +1 -1
- package/web/dist/assets/vendor-icons-U4igmrUq.js +1 -0
- package/web/dist/assets/{vendor-react-CIkiuNDu.js → vendor-react-Bp_V-Hsf.js} +1 -1
- package/web/dist/assets/{vendor-state-CEOsUh-T.js → vendor-state-Zjl_6-V3.js} +1 -1
- package/web/dist/index.html +8 -8
- package/dist/App-5QZKMPRM.js +0 -13
- package/dist/adam-tools-SQD2V4RJ.js +0 -1
- package/dist/approval-handler-J6RUTICJ.js +0 -1
- package/dist/audit-manager-CWVHQAUI.js +0 -1
- package/dist/bree-engine-VGEYMVNP.js +0 -1
- package/dist/channels-OOIM62BX.js +0 -1
- package/dist/chunk-2BXTT4P2.js +0 -6
- package/dist/chunk-47COBMRF.js +0 -1
- package/dist/chunk-6JBSBSCL.js +0 -1
- package/dist/chunk-6WRZJVQ2.js +0 -1
- package/dist/chunk-7IFLU3CY.js +0 -4
- package/dist/chunk-AQO6IIHV.js +0 -684
- package/dist/chunk-AVM3O74V.js +0 -5
- package/dist/chunk-B544JOZM.js +0 -3
- package/dist/chunk-DZIEY4CH.js +0 -47
- package/dist/chunk-E4WIUUL4.js +0 -27
- package/dist/chunk-HDHMNT6D.js +0 -1
- package/dist/chunk-JYHOGBCP.js +0 -12
- package/dist/chunk-M3RZWIW3.js +0 -50
- package/dist/chunk-N4ES7TCL.js +0 -1
- package/dist/chunk-NPIXYK5G.js +0 -5
- package/dist/chunk-O7XQSONJ.js +0 -5
- package/dist/chunk-OZL6VNOR.js +0 -146
- package/dist/chunk-Q2ISNOBQ.js +0 -1
- package/dist/chunk-QYRI4HYA.js +0 -1
- package/dist/chunk-R2WB5BKF.js +0 -7
- package/dist/chunk-RMGBR3XZ.js +0 -21
- package/dist/chunk-S6OV7Z6K.js +0 -1
- package/dist/chunk-SC2DDRYB.js +0 -5
- package/dist/chunk-SGIKNIC5.js +0 -49
- package/dist/chunk-TI3AKKWZ.js +0 -80
- package/dist/chunk-U2LBBBWO.js +0 -8
- package/dist/chunk-UXDTFTG5.js +0 -10
- package/dist/chunk-Y5FFL6UO.js +0 -5
- package/dist/chunk-ZFDULJGB.js +0 -3
- package/dist/chunk-ZQ4PNKMQ.js +0 -10
- package/dist/config-DRFRLIVN.js +0 -1
- package/dist/db-FACSMWEY.js +0 -1
- package/dist/delivery-log-JIQMHBJ5.js +0 -1
- package/dist/dist-CDWBOTZS.js +0 -1
- package/dist/engine-OHYWUUMJ.js +0 -1
- package/dist/evolution-audit-M7FSYRQR.js +0 -1
- package/dist/learner-OUNQSWN7.js +0 -1
- package/dist/memories-ABE7PMQL.js +0 -1
- package/dist/memory-extractor-ZX2NJIBV.js +0 -6
- package/dist/memory-service-UWER3T2S.js +0 -1
- package/dist/onnxruntime_binding-6Q6HXASN.node +0 -0
- package/dist/onnxruntime_binding-EKZT2NRK.node +0 -0
- package/dist/onnxruntime_binding-P6S7V3CI.node +0 -0
- package/dist/onnxruntime_binding-PJNNIIUO.node +0 -0
- package/dist/onnxruntime_binding-UN6SPTQK.node +0 -0
- package/dist/outbound-gateway-XDCGAXXW.js +0 -1
- package/dist/presets-RMW3WO5P.js +0 -1
- package/dist/role-presets-FAXQRBII.js +0 -1
- package/dist/role-workspace-ISGPO25D.js +0 -1
- package/dist/roles-WNKRM6FD.js +0 -1
- package/dist/session-manager-SOJXQHHY.js +0 -1
- package/dist/task-templates-IS3DJCZB.js +0 -1
- package/dist/token-estimator-HMPVGDCN.js +0 -1
- package/dist/workflow-executor-LOMKVFPV.js +0 -1
- package/web/dist/assets/Channels-ozCXdZMq.js +0 -12
- package/web/dist/assets/Chat-CggvtidD.js +0 -2
- package/web/dist/assets/Dashboard-z37ZVhzH.js +0 -1
- package/web/dist/assets/Events-C4P3jjZd.js +0 -1
- package/web/dist/assets/Goals-CDZWDuXR.js +0 -1
- package/web/dist/assets/Plugins-CtwoMUoj.js +0 -1
- package/web/dist/assets/RoleDetail-B32225ae.js +0 -33
- package/web/dist/assets/Roles-CGYsxuq8.js +0 -1
- package/web/dist/assets/Settings-D2jrO8-G.js +0 -1
- package/web/dist/assets/TaskDetail-DKminIM_.js +0 -2
- package/web/dist/assets/Work-uD_6IieV.js +0 -1
- package/web/dist/assets/api-D-UzHSDq.js +0 -1
- package/web/dist/assets/index-6f2jcj0h.css +0 -2
- package/web/dist/assets/index-Bl-2p6d8.js +0 -12
- package/web/dist/assets/vendor-icons-jzPiR6xl.js +0 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import{a as T}from"./chunk-FD4IKMXV.js";import{a as be}from"./chunk-F6U5TMM3.js";import{a as Ee}from"./chunk-D3SPXZZY.js";import{a as xe}from"./chunk-DRO3DG7X.js";import{a as _e,b as ne,c as ve,k as Ae}from"./chunk-XIVFVKMB.js";import{e as Y}from"./chunk-LU3D53ZV.js";import{e as ke,i as Ge}from"./chunk-VNXTBIPI.js";import{b as re,k as oe,m as W,s as V}from"./chunk-RBJPQYV3.js";import{C as te,I as Xe,b as U,c as ge,o as Ye}from"./chunk-KJNAORKM.js";import{a as we}from"./chunk-L7JP7DUO.js";import{a as H,b as J,c as ce,f as de,g as le,i as ue,j as pe,l as Ue}from"./chunk-L47LZYVG.js";import{b as Z,c as me,d as fe,e as he,f as ye,j as We,l as O,n as ee}from"./chunk-BPXS4QEO.js";import{c as L,h as ae}from"./chunk-BLCNUT53.js";import{c as Ie,e as Ve}from"./chunk-245WE5AF.js";Xe();Ge();Ye();import{createSdkMcpServer as Dt,tool as C}from"@anthropic-ai/claude-agent-sdk";import{z as c}from"zod";import{v4 as qe}from"uuid";Ue();ae();ee();var Qe=L("audit");function g(r){try{O().prepare(`
|
|
2
|
+
INSERT INTO artifact_access_log (
|
|
3
|
+
timestamp, task_id, role_id, execution_id, step_id, tool, artifact_key, artifact_id,
|
|
4
|
+
size_bytes, outcome, error_reason
|
|
5
|
+
)
|
|
6
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
7
|
+
`).run(r.timestamp,r.taskId??null,r.roleId??null,r.executionId,r.stepId??null,r.tool,r.artifactKey??null,r.artifactId??null,r.sizeBytes??null,r.outcome,r.errorReason??null)}catch(e){Qe.error({err:e,entry:r},"Failed to write artifact access log")}}We();import{tool as B}from"@anthropic-ai/claude-agent-sdk";import{z as w}from"zod";import{v4 as Ze}from"uuid";function D(r){return{content:[{type:"text",text:JSON.stringify(r)}]}}var et={query:w.string().describe("Search query for memory retrieval"),roleId:re.optional().describe("Role ID to scope search (omit for cross-role)"),topK:w.number().optional().describe("Max results to return (default 5)")},tt={query:w.string().describe("Search query for memory retrieval"),topK:w.number().optional().describe("Max results to return (default 5)")},rt={id:w.string().optional().describe("Memory ID to update. Omit to create new."),roleId:re.describe("Role ID to save memory under"),content:w.string().describe("Memory content text"),type:w.enum(["event","thought","reflection"]).optional().describe("Memory type (default: thought)"),keywords:w.array(w.string()).optional().describe("Keywords for BM25 search"),importance:w.number().min(1).max(5).optional().describe("Importance 1-5 (default: 3)"),tier:w.enum(["working","episodic","semantic"]).optional().describe("Memory tier (default: episodic)")},ot={id:w.string().optional().describe("Memory ID to update. Omit to create new."),content:w.string().describe("Memory content text"),type:w.enum(["event","thought","reflection"]).optional().describe("Memory type (default: thought)"),keywords:w.array(w.string()).optional().describe("Keywords for BM25 search"),importance:w.number().min(1).max(5).optional().describe("Importance 1-5 (default: 3)"),tier:w.enum(["working","episodic","semantic"]).optional().describe("Memory tier (default: episodic)")},Se={id:w.string().describe("Memory ID to delete")};async function Ce(r,e){let o=r??e.roleId,i=e.topK??5,s=await Ee(o,e.query,{topK:i});return D({results:s.map(a=>({id:a.id,type:a.type,content:a.content,keywords:a.keywords,importance:a.importance,score:a.score}))})}async function Re(r,e){let o=r??e.roleId;if(!o)return D({error:"roleId is required"});let i,s=!0;try{i=await xe(e.content)}catch{s=!1}if(e.id){let I=ne(e.id);if(!I)return D({error:`Memory ${e.id} not found`});let n=ve(e.id,{content:e.content,embedding:i,keywords:e.keywords,importance:e.importance,type:e.type});return T({toolName:"save_memory",entityType:"memory",verb:"update",entityId:e.id,fieldChanges:[{path:"content",op:"set",before:I.content,after:e.content}],roleId:o}),D({id:e.id,action:"updated",success:n,embeddingUpdated:s})}let a=`mem-${Ze().slice(0,8)}`,u=Date.now();return _e({id:a,roleId:o,type:e.type??"thought",content:e.content,embedding:i,keywords:e.keywords??[],importance:e.importance??3,sourceType:"manual",createdAt:u,lastAccessed:u,retrievedCount:0,tier:e.tier??"episodic"}),T({toolName:"save_memory",entityType:"memory",verb:"create",entityId:a,fieldChanges:[{path:"_entity",op:"set",before:null,after:{id:a,roleId:o,type:e.type??"thought",content:e.content.length>200?`${e.content.slice(0,200)}\u2026`:e.content,tier:e.tier??"episodic"}}],roleId:o}),D({id:a,action:"created",success:!0,embeddingUpdated:s})}async function Te(r,e){let o=ne(e.id);if(r){if(!o)return D({error:`Memory ${e.id} not found`});if(o.roleId!==r)return D({error:`Memory ${e.id} does not belong to this role`})}return Ae(e.id),T({toolName:"delete_memory",entityType:"memory",verb:"delete",entityId:e.id,fieldChanges:[{path:"_entity",op:"set",before:o?{id:o.id,roleId:o.roleId,content:o.content.length>200?`${o.content.slice(0,200)}\u2026`:o.content}:null,after:null}],roleId:r??o?.roleId}),D({id:e.id,deleted:!0})}function De(r){return r?[B("search_memories","Search agent memory using hybrid vector + keyword search. Returns scored memories ranked by relevance, recency, and importance.",tt,async e=>Ce(r,e)),B("save_memory","Create a new memory or update an existing one. Provide 'id' to update, omit to create. Embedding is auto-generated from content.",ot,async e=>Re(r,e)),B("delete_memory","Delete a memory by ID.",Se,async e=>Te(r,e))]:[B("search_memories","Search agent memory using hybrid vector + keyword search. Returns scored memories ranked by relevance, recency, and importance.",et,async e=>Ce(void 0,e)),B("save_memory","Create a new memory or update an existing one. Provide 'id' to update, omit to create. Embedding is auto-generated from content.",rt,async e=>Re(void 0,e)),B("delete_memory","Delete a memory by ID.",Se,async e=>Te(void 0,e))]}ae();import{basename as se}from"path";ee();import{v4 as nt}from"uuid";function Ne(r){let e=[];if(r.verb||e.push("verb is required"),r.entityType||e.push("entityType is required"),!r.expected)return e.push("expected is required"),{valid:!1,errors:e};let o=r.expected;if(o.kind==="outbound")o.target?.channelId||e.push("expected.target.channelId is required for outbound"),o.attachmentCount!==void 0&&(typeof o.attachmentCount!="number"||o.attachmentCount<0)&&e.push("expected.attachmentCount must be a non-negative number");else if(o.kind==="field_change")o.entityId||e.push("expected.entityId is required for field_change"),o.fieldPath||e.push("expected.fieldPath is required for field_change"),o.op!=="set"&&o.op!=="list_add"&&o.op!=="list_remove"&&e.push("expected.op must be 'set', 'list_add', or 'list_remove'"),o.op==="set"&&(o.after===void 0&&e.push("expected.after is required when op='set'"),(o.added!==void 0||o.removed!==void 0)&&e.push("expected.added/removed must be absent when op='set'")),o.op==="list_add"&&((!Array.isArray(o.added)||o.added.length===0)&&e.push("expected.added (non-empty array) is required when op='list_add'"),(o.after!==void 0||o.removed!==void 0)&&e.push("expected.after/removed must be absent when op='list_add'")),o.op==="list_remove"&&((!Array.isArray(o.removed)||o.removed.length===0)&&e.push("expected.removed (non-empty array) is required when op='list_remove'"),(o.after!==void 0||o.added!==void 0)&&e.push("expected.after/added must be absent when op='list_remove'"));else if(o.kind==="batch"){o.entityType||e.push("expected.entityType is required for batch");let i=Array.isArray(o.entityIds)&&o.entityIds.length>0,s=!!o.scope&&typeof o.scope.expectedCount=="number"&&o.scope.expectedCount>=0&&!!o.scope.filter;!i&&!s&&e.push("batch claims require entityIds (non-empty) or scope (with filter + non-negative expectedCount)")}else e.push(`expected.kind must be 'outbound', 'field_change', or 'batch'; got '${o.kind}'`);return{valid:e.length===0,errors:e}}var F=class extends Error{constructor(o){super(`Invalid claim spec: ${o.join("; ")}`);this.errors=o;this.name="InvalidClaimError"}errors};function $e(r){if(!r.traceId)throw new F(["traceId is required"]);if(!Array.isArray(r.claims)||r.claims.length===0)throw new F(["claims must be a non-empty array"]);for(let[o,i]of r.claims.entries()){let s=Ne(i);if(!s.valid)throw new F([`claims[${o}]: ${s.errors.join("; ")}`])}let e={id:r.id??nt(),traceId:r.traceId,sessionId:r.sessionId,taskId:r.taskId,sourceMessageId:r.sourceMessageId,claims:r.claims,declaredAt:r.declaredAt??Date.now()};return O().prepare(`
|
|
8
|
+
INSERT INTO assistant_claims (
|
|
9
|
+
id, trace_id, session_id, task_id, source_message_id, claims_json, declared_at
|
|
10
|
+
)
|
|
11
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
12
|
+
`).run(e.id,e.traceId,e.sessionId??null,e.taskId??null,e.sourceMessageId??null,JSON.stringify(e.claims),e.declaredAt),e}function Zt(r){return O().prepare(`
|
|
13
|
+
SELECT * FROM assistant_claims WHERE trace_id = ? ORDER BY declared_at ASC
|
|
14
|
+
`).all(r).map(it)}function it(r){return{id:r.id,traceId:r.trace_id,sessionId:r.session_id??void 0,taskId:r.task_id??void 0,sourceMessageId:r.source_message_id??void 0,claims:JSON.parse(r.claims_json),declaredAt:r.declared_at}}Ve();import{execFile as _t}from"child_process";import{promisify as vt}from"util";import{isAbsolute as At,basename as Et}from"path";import Fe from"vm";import{isAbsolute as st}from"path";var S=class extends Error{constructor(e,o){super(`DSL parse error in "${e}": ${o}`),this.name="DslParseError"}},at=/^[a-z][a-z0-9_.]*$/i,ct=/\.\./;function K(r){if(!at.test(r))throw new S(r,`invalid handler key format "${r}" \u2014 must match [a-z][a-z0-9_.]*`);if(ct.test(r))throw new S(r,'handler key must not contain ".."')}function Me(r){let e=r.trim();try{let i=JSON.parse(e);if(typeof i=="number"||typeof i=="string"||typeof i=="boolean")return i}catch{}let o=parseFloat(e);return Number.isNaN(o)?e:o}var dt=/^([a-z][a-z0-9_.]*)\s+matches\s+\/(.+)\/([gimsuy]*)$/i,lt=/^([a-z][a-z0-9_.]*)\s*(<=|>=|==|!=)\s*(.+)$/i,ut=/^([a-z][a-z0-9_.]*)\s*(<|>)\s*(.+)$/i,pt=/^([a-z][a-z0-9_.]*)\s+between\s+(-?\d+(?:\.\d+)?)\s+and\s+(-?\d+(?:\.\d+)?)$/i,mt=/^([a-z][a-z0-9_.]*)\s+in\s+\[([^\]]+)\]$/i;function Oe(r){if(typeof r=="object"&&r!==null&&"script"in r){let o=String(r.script);if(!st(o))throw new S(`{script: "${o}"}`,"script path must be absolute");return{kind:"script",scriptPath:o}}if(typeof r!="string")throw new S(String(r),"assertion must be a string or {script: string} object");let e=r.trim();if(!e)throw new S(e,"empty assertion string");{let o=dt.exec(e);if(o){let i=o[1];return K(i),{kind:"matches",key:i,regexSource:o[2],regexFlags:o[3]??""}}}{let o=pt.exec(e);if(o){let i=o[1];return K(i),{kind:"between",key:i,min:parseFloat(o[2]),max:parseFloat(o[3])}}}{let o=mt.exec(e);if(o){let i=o[1];K(i);let s=o[2],a=[];for(let u of s.split(",")){let I=u.trim();if(I)try{let n=JSON.parse(I);typeof n=="number"||typeof n=="string"||typeof n=="boolean"?a.push(n):a.push(I)}catch{a.push(I)}}return{kind:"in",key:i,values:a}}}{let o=lt.exec(e);if(o){let i=o[1];return K(i),{kind:"comparison",key:i,op:o[2],value:Me(o[3])}}}{let o=ut.exec(e);if(o){let i=o[1];return K(i),{kind:"comparison",key:i,op:o[2],value:Me(o[3])}}}throw new S(e,"unrecognized assertion syntax \u2014 expected key <op> value, between, in [...], matches /.../, or {script: ...}")}import{execFile as ht,spawn as yt}from"child_process";import{promisify as It}from"util";import{readFile as q}from"fs/promises";import{existsSync as gt}from"fs";import{createHash as bt}from"crypto";function ft(r){return typeof r=="number"?Number.isInteger(r)?r.toString():r.toFixed(4):JSON.stringify(r)}var P=class extends Error{constructor(o){super(`NO_HANDLER: ${o}, install relevant capability or remove assertion`);this.handlerKey=o;this.name="NoHandlerError"}handlerKey},v=class extends Error{constructor(o,i,s){super(`ASSERTION_FAILED: ${o}=${ft(i)}, expected ${s}`);this.handlerKey=o;this.measured=i;this.expected=s;this.name="AssertionFailedError"}handlerKey;measured;expected},k=class extends Error{constructor(o,i){super(`HANDLER_RUNTIME_ERROR: ${o}: ${i}`);this.handlerKey=o;this.detail=i;this.name="HandlerRuntimeError"}handlerKey;detail};var kt=It(ht);function N(r,e){if(!gt(e))throw new k(r,`file not found: ${e}`)}async function wt(r){try{return await kt("ffprobe",r,{maxBuffer:10*1024*1024})}catch(e){throw e.code==="ENOENT"?new k("audio.*","ffprobe not found on PATH \u2014 install ffmpeg/ffprobe"):new k("audio.*",`ffprobe failed: ${e.message}`)}}async function Pe(r,e){return new Promise((o,i)=>{let s=[],a=yt("ffmpeg",["-v","error","-i",r,"-f","s16le","-ar",String(e),"-ac","1","-"]);a.stdout.on("data",I=>s.push(I));let u="";a.stderr.on("data",I=>{u+=I.toString()}),a.on("error",I=>{I.code==="ENOENT"?i(new k("audio.*","ffmpeg not found on PATH \u2014 install ffmpeg/ffprobe")):i(new k("audio.*",`ffmpeg failed: ${I.message}`))}),a.on("close",I=>{I!==0?i(new k("audio.*",`ffmpeg exit ${I}: ${u.trim()}`)):o(Buffer.concat(s))})})}var ze=new Map;async function xt(r){let e=JSON.stringify(r);if(/"\$ref"\s*:\s*"https?:\/\//.test(e))throw new k("json.schema_valid","remote $ref not supported in schema");let o=bt("sha256").update(e).digest("hex"),i=ze.get(o);if(i)return i;let s=(await import("ajv")).default,u=new s({strict:!1,allErrors:!1}).compile(r);return ze.set(o,u),u}var Be={"audio.duration_s":async r=>{N("audio.duration_s",r);let{stdout:e}=await wt(["-v","error","-show_entries","format=duration","-of","default=noprint_wrappers=1:nokey=1",r]),o=parseFloat(e.trim());if(!Number.isFinite(o))throw new k("audio.duration_s",`ffprobe returned non-numeric duration: ${e.trim()}`);return o},"audio.zc_rate_per_s":async r=>{N("audio.zc_rate_per_s",r);let e=24e3,o=await Pe(r,e),i=new Int16Array(o.buffer,o.byteOffset,o.byteLength/2),s=0;for(let u=1;u<i.length;u++)i[u-1]>=0!=i[u]>=0&&s++;let a=i.length/e;return a>0?s/a:0},"audio.rms":async r=>{N("audio.rms",r);let o=await Pe(r,24e3),i=new Int16Array(o.buffer,o.byteOffset,o.byteLength/2),s=0;for(let a=0;a<i.length;a++){let u=i[a]/32768;s+=u*u}return i.length>0?Math.sqrt(s/i.length):0},"markdown.word_count":async r=>{N("markdown.word_count",r);let e=await q(r,"utf-8");return e.trim().length===0?0:e.trim().split(/\s+/).length},"image.width_px":async r=>{N("image.width_px",r);let{imageSize:e}=await import("image-size"),o=await q(r),i=e(o);if(typeof i.width!="number")throw new k("image.width_px","could not determine image width");return i.width},"image.height_px":async r=>{N("image.height_px",r);let{imageSize:e}=await import("image-size"),o=await q(r),i=e(o);if(typeof i.height!="number")throw new k("image.height_px","could not determine image height");return i.height},"pdf.page_count":async r=>{N("pdf.page_count",r);let{PDFDocument:e}=await import("pdf-lib"),o=await q(r);return(await e.load(o,{ignoreEncryption:!0})).getPageCount()},"json.schema_valid":async(r,e)=>{if(N("json.schema_valid",r),!e||typeof e!="object"||!("schema"in e))throw new k("json.schema_valid","missing schema arg");let o=await xt(e.schema),i=await q(r,"utf-8"),s;try{s=JSON.parse(i)}catch(a){throw new k("json.schema_valid",`file is not valid JSON: ${a.message}`)}return o(s)===!0}};var St=vt(_t);async function Ke(r,e,o={}){let i=o.handlerRegistry??Be;for(let s=0;s<e.length;s++){let a=e[s],u=Oe(a);if(u.kind==="script"){await Rt(u.scriptPath,r);continue}let I=i[u.key];if(!I)throw new P(u.key);let n=o.handlerArgsByIndex?.[s],t=await I(r,n);Ct(u,t)}}function Ct(r,e){switch(r.kind){case"comparison":{let{key:o,op:i,value:s}=r,a=!1;if(i==="<"?a=e<s:i===">"?a=e>s:i==="<="?a=e<=s:i===">="?a=e>=s:i==="=="?a=e==s:i==="!="&&(a=e!=s),!a)throw new v(o,e,`${i} ${s}`);break}case"between":{let{key:o,min:i,max:s}=r;if(e<i||e>s)throw new v(o,e,`between ${i} and ${s}`);break}case"in":{let{key:o,values:i}=r;if(!i.includes(e))throw new v(o,e,`in [${i.join(", ")}]`);break}case"matches":{let{key:o,regexSource:i,regexFlags:s}=r;if(!Tt(String(e),i,s,100))throw new v(o,e,`matches /${i}/${s}`);break}}}async function Rt(r,e){if(!At(r))throw new k("script",`script path must be absolute: ${r}`);try{await St(r,[e],{timeout:6e4,maxBuffer:1024*1024})}catch(o){let i=o;if(i.code==="ENOENT")throw new k("script",`script not found: ${r}`);let s=i.exitCode;throw new v("script:"+Et(r),s??"error",i.stderr?.trim()??i.message)}}function Tt(r,e,o,i){let s={value:r,regex:new RegExp(e,o),result:!1};Fe.createContext(s);try{return Fe.runInContext("result = regex.test(value)",s,{timeout:i}),s.result}catch(a){throw new k("matches",`regex evaluation timeout or error: ${a.message}`)}}ee();var X=L("execution"),Nt=/^[\p{L}0-9._-]{1,256}$/u,$t=/^[\p{L}0-9._-]{1,128}$/u,je=256*1024,Mt=/^[a-z]+\/[a-z0-9.+-]+$/;async function Ot(r){let{listChannels:e}=await import("./channels-2IL6USWL.js"),o=e(),{listSessions:i}=await import("./session-manager-JTQRJI7R.js"),s=[...i("active"),...i("archived")],{getDefaultChatIdForChannel:a}=await import("./target-resolution-PSSBM4LX.js"),u=o.find(n=>n.name.toLowerCase().includes(r.toLowerCase()));if(!u)return null;let I=a(u,s)??"";return{channelId:u.id,chatId:I}}function d(r){return{content:[{type:"text",text:JSON.stringify(r)}]}}function G(r){return Nt.test(r)?null:"Invalid artifact key. Use only letters, numbers, dot, underscore, or dash (1-256 chars)."}function ie(r){return $t.test(r)?null:"Invalid stepId format. Use only letters, numbers, dot, underscore, or dash (1-128 chars)."}function Le(r,e,o){return r!==e?r:se(o)}function He(r,e){let o=Y(r);if(!o)return null;let i=V(o.templateId);return i?i.steps.find(u=>u.id===e)?.outputAs??null:null}var Pt=r=>{if(!r)return!1;let e=U(r);return!!(e?.parentId&&e.templateId&&e.stepId)};function Jr(r,e,o){let i=r?te(r):void 0,s=o??(()=>{}),a=async()=>{if(!e)return{error:"artifact tools require a task context"};let n=U(e);if(!n)return{error:`task not found: ${e}`};if(!n.parentId)return{error:"this task is not a TemplateExecution step (no execution context)"};if(!n.stepId)return{error:"this task is not a TemplateExecution step (no step_id)"};let t=n.roleId??r;if(!t)return{error:"this template execution task has no role context"};let l=te(t);return l?{executionId:n.parentId,stepId:n.stepId,roleId:t,roleWorkspacePath:ke(l.name),taskId:e}:{error:`role not found: ${t}`}},u=[...De(r),C("list_channels","List all available channels. Use this to discover what channels can be used with send_to_channel.",{},async()=>{let{listChannels:n}=await import("./channels-2IL6USWL.js"),t=n();return d({channels:t.map(l=>({id:l.id,name:l.name,enabled:l.enabled,type:l.config?.type??"unknown"}))})}),C("send_to_channel","Send a message to a connected channel by name. This role can only send to channels in its allowedChannels list (if configured).",{channelName:c.string().describe("The channel name, e.g., 'WeChat on iPad' or 'Client Mail'"),message:c.string().describe("The message content to send")},async n=>{if(i?.allowedChannels!==void 0){if(i.allowedChannels.length===0)return d({error:"This role is not allowed to send to any channels"});if(!i.allowedChannels.some(f=>f.toLowerCase()===n.channelName.toLowerCase()))return d({error:`Channel "${n.channelName}" is not in the allowed channels list for this role`})}let t=await Ot(n.channelName);if(!t)return d({error:`Channel "${n.channelName}" not found or has no chatId available`});let{getOutboundGateway:l}=await import("./outbound-gateway-3INYZDOR.js"),h=await l().send({channelId:t.channelId,chatId:t.chatId,content:n.message,messageType:"reply"});return d({success:h.success,channelName:n.channelName})}),C("write_artifact","Persist a small structured value (JSON <= 256KB) for downstream TemplateExecution steps to read. USE THIS for: extracted fields, status flags, URL lists, summaries, structured key-value data. Do NOT use for: files (audio, video, reports). For files use publish_artifact_file instead.",{key:c.string().describe("Artifact key \u2014 a unique identifier for this value within the template execution."),value:c.unknown().describe("The JSON value to persist (must be <= 256KB serialized).")},async n=>{let t=await a();if("error"in t)return d({error:t.error});let l=G(n.key);if(l)return g({timestamp:Date.now(),taskId:t.taskId,roleId:t.roleId,executionId:t.executionId,stepId:t.stepId,tool:"write_artifact",artifactKey:n.key,outcome:"denied",errorReason:l}),d({error:l});let p=He(t.executionId,t.stepId),h=Y(t.executionId),m=h?V(h.templateId):null,f=m?m.steps.some(b=>b.id===t.stepId):!1,x=n.key,$,j=m!=null&&m.steps.some(b=>!!b.outputAs);if(p===null&&f&&j){let b=`Step "${t.stepId}" in template "${h.templateId}" has no outputAs declared. This template must be migrated before its steps can publish artifacts. Operator action required: run \`pnpm tsx scripts/migrate-all-templates-outputAs.ts --apply\` from the project root, or have the operator ask ChatManager in chat to upgrade the template.`;return X.warn({taskId:t.taskId,stepId:t.stepId,templateId:h.templateId},"write_artifact: step has no outputAs in migrated template"),g({timestamp:Date.now(),taskId:t.taskId,roleId:t.roleId,executionId:t.executionId,stepId:t.stepId,tool:"write_artifact",artifactKey:n.key,outcome:"denied",errorReason:b}),d({error:b})}p&&n.key!==p&&(x=p,$=`key '${n.key}' replaced with step.outputAs '${p}'`,X.warn({taskId:t.taskId,llmKey:n.key,outputAs:p},"write_artifact: server key override"));try{let b=JSON.stringify(n.value),_=Buffer.byteLength(b,"utf8");if(_>je){let E=`Artifact JSON exceeds ${je} bytes`;return g({timestamp:Date.now(),taskId:t.taskId,roleId:t.roleId,executionId:t.executionId,stepId:t.stepId,tool:"write_artifact",artifactKey:n.key,sizeBytes:_,outcome:"denied",errorReason:E}),d({error:E})}let A=qe();return H({id:A,executionId:t.executionId,stepId:t.stepId,key:x,kind:"json",value:n.value,sizeBytes:_,createdAt:Date.now()}),T({toolName:"write_artifact",entityType:"artifact",verb:"create",entityId:A,fieldChanges:[{path:"_entity",op:"set",before:null,after:{artifactId:A,key:x,kind:"json",taskId:t.taskId}}],taskId:t.taskId,roleId:t.roleId}),g({timestamp:Date.now(),taskId:t.taskId,roleId:t.roleId,executionId:t.executionId,stepId:t.stepId,tool:"write_artifact",artifactKey:x,artifactId:A,sizeBytes:_,outcome:"success"}),d({success:!0,artifactId:A,sizeBytes:_,...$?{note:$}:{}})}catch(b){let _=b instanceof Error?b.message:String(b);return g({timestamp:Date.now(),taskId:t.taskId,roleId:t.roleId,executionId:t.executionId,stepId:t.stepId,tool:"write_artifact",artifactKey:n.key,outcome:"error",errorReason:_}),d({error:_})}}),C("read_artifact","Read a structured value previously written by an upstream step's write_artifact. Returns the JSON value. For files, use fetch_artifact_file instead.",{stepId:W.describe("TemplateExecution step ID of the artifact's source step."),key:c.string().describe("Artifact key \u2014 a unique identifier for this value within the template execution.")},async n=>{let t=await a();if("error"in t)return d({error:t.error});let l=ie(n.stepId),p=G(n.key),h=l??p;if(h)return g({timestamp:Date.now(),taskId:t.taskId,roleId:t.roleId,executionId:t.executionId,stepId:t.stepId,tool:"read_artifact",artifactKey:n.key,outcome:"denied",errorReason:h}),d({error:h});let m=J(t.executionId,n.stepId,n.key);if(!m){let f=`no artifact at ${n.stepId}/${n.key}`;return g({timestamp:Date.now(),taskId:t.taskId,roleId:t.roleId,executionId:t.executionId,stepId:t.stepId,tool:"read_artifact",artifactKey:n.key,outcome:"error",errorReason:f}),d({error:f})}if(m.kind!=="json"){let f="artifact is a file; use fetch_artifact_file";return g({timestamp:Date.now(),taskId:t.taskId,roleId:t.roleId,executionId:t.executionId,stepId:t.stepId,tool:"read_artifact",artifactKey:n.key,artifactId:m.id,sizeBytes:m.sizeBytes,outcome:"denied",errorReason:f}),d({error:f})}return g({timestamp:Date.now(),taskId:t.taskId,roleId:t.roleId,executionId:t.executionId,stepId:t.stepId,tool:"read_artifact",artifactKey:n.key,artifactId:m.id,sizeBytes:m.sizeBytes,outcome:"success"}),d({value:m.value,sizeBytes:m.sizeBytes})}),C("publish_artifact_file","Publish a file from your workspace as a TemplateExecution artifact. The file is COPIED to the template execution's shared storage. USE THIS for: generated audio, video, reports, images, or large outputs. Do NOT use for: small structured values; use write_artifact instead. If you publish with cleanup=true, this step will not be retryable through publish; only choose cleanup=true when you do not need the source file again.",{key:c.string().describe("Artifact key \u2014 a unique identifier for this value within the template execution."),sourcePath:oe.describe("Source file path in the Role workspace to publish as a TemplateExecution artifact."),mime:c.string().optional().describe("MIME type of the file (e.g., 'image/png', 'audio/mp3'). Auto-detected if omitted."),cleanup:c.boolean().optional().describe("If true, delete the source file after publishing. Only use when the source file is no longer needed.")},async n=>{let t=await a();if("error"in t)return d({error:t.error});let l=G(n.key);if(l)return g({timestamp:Date.now(),taskId:t.taskId,roleId:t.roleId,executionId:t.executionId,stepId:t.stepId,tool:"publish_artifact_file",artifactKey:n.key,outcome:"denied",errorReason:l}),d({error:l});if(n.mime&&!Mt.test(n.mime)){let y=`Invalid MIME type: ${n.mime}`;return g({timestamp:Date.now(),taskId:t.taskId,roleId:t.roleId,executionId:t.executionId,stepId:t.stepId,tool:"publish_artifact_file",artifactKey:n.key,outcome:"denied",errorReason:y}),d({error:y})}let p=He(t.executionId,t.stepId),h=Y(t.executionId),m=h?V(h.templateId):null,f=m?m.steps.some(y=>y.id===t.stepId):!1,x=n.key,$,j=m!=null&&m.steps.some(y=>!!y.outputAs);if(p===null&&f&&j){let y=`Step "${t.stepId}" in template "${h.templateId}" has no outputAs declared. This template must be migrated before its steps can publish artifacts. Operator action required: run \`pnpm tsx scripts/migrate-all-templates-outputAs.ts --apply\` from the project root, or have the operator ask ChatManager in chat to upgrade the template.`;return X.warn({taskId:t.taskId,stepId:t.stepId,templateId:h.templateId},"publish_artifact_file: step has no outputAs in migrated template"),g({timestamp:Date.now(),taskId:t.taskId,roleId:t.roleId,executionId:t.executionId,stepId:t.stepId,tool:"publish_artifact_file",artifactKey:n.key,outcome:"denied",errorReason:y}),d({error:y})}p&&n.key!==p&&(x=p,$=`key '${n.key}' replaced with step.outputAs '${p}'`,X.warn({taskId:t.taskId,llmKey:n.key,outputAs:p},"publish_artifact_file: server key override"));try{Z(n.sourcePath,t.roleWorkspacePath,!0)}catch(y){let z=y instanceof Error?y.message:String(y);return g({timestamp:Date.now(),taskId:t.taskId,roleId:t.roleId,executionId:t.executionId,stepId:t.stepId,tool:"publish_artifact_file",artifactKey:x,outcome:"denied",errorReason:z}),d({error:z})}let b=qe(),_=null,A=!1,E=null;try{let y=me({executionId:t.executionId,artifactId:b,sourcePath:n.sourcePath});_=y.blobPath;let Q=(m?.steps?.find?.(M=>M.id===t.stepId)??null)?.assertions??[];Q.length>0&&await Ke(_,Q);let R={id:b,executionId:t.executionId,stepId:t.stepId,key:x,kind:"file",blobPath:_,mime:n.mime,originalFilename:se(n.sourcePath),sizeBytes:y.sizeBytes,createdAt:Date.now()};if(p&&j){let M=J(t.executionId,t.stepId,p);if(!M)H(R),A=!0,E=R;else if(M.kind==="file")E=pe(t.executionId,t.stepId,p,M,{...R,key:Le(n.key,p,n.sourcePath)}).childArtifact;else if(M.kind==="json"&&le(M.value))E=ue(t.executionId,t.stepId,p,{...R,key:Le(n.key,p,n.sourcePath)}).childArtifact;else throw new Error(`Artifact key "${p}" already contains a non-collection JSON artifact`)}else H(R),A=!0,E=R;return n.cleanup===!0&&fe(n.sourcePath),T({toolName:"publish_artifact_file",entityType:"artifact",verb:"create",entityId:b,fieldChanges:[{path:"_entity",op:"set",before:null,after:{artifactId:b,key:E?.key??x,kind:"file",filename:se(n.sourcePath),taskId:t.taskId}}],taskId:t.taskId,roleId:t.roleId}),g({timestamp:Date.now(),taskId:t.taskId,roleId:t.roleId,executionId:t.executionId,stepId:t.stepId,tool:"publish_artifact_file",artifactKey:E?.key??x,artifactId:b,sizeBytes:y.sizeBytes,outcome:"success"}),d({success:!0,artifactId:b,sizeBytes:y.sizeBytes,...$?{note:$}:{}})}catch(y){if(A)try{de(b)}catch{}if(_&&(!E||A))try{ye(_)}catch{}let z=y instanceof Error?y.message:String(y);if(g({timestamp:Date.now(),taskId:t.taskId,roleId:t.roleId,executionId:t.executionId,stepId:t.stepId,tool:"publish_artifact_file",artifactKey:x,artifactId:b,outcome:"error",errorReason:z}),y instanceof v||y instanceof P)try{let R=(O().prepare("SELECT COUNT(*) as n FROM step_logs WHERE task_id = ?").get(t.taskId)?.n??0)+1;be({id:`step-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,taskId:t.taskId,index:R,type:"validator_error",content:y.message,toolName:"publish_artifact_file",timestamp:Date.now()})}catch{}return d({error:z})}}),C("fetch_artifact_file","Copy an upstream step's published file into your current Role workspace. Use this when an earlier step published audio, video, reports, or other files you need to process.",{stepId:W.describe("TemplateExecution step ID of the artifact's source step."),key:c.string().describe("Artifact key \u2014 a unique identifier for this value within the template execution."),destPath:oe.describe("Destination path in the Role workspace where the file will be copied.")},async n=>{let t=await a();if("error"in t)return d({error:t.error});let l=ie(n.stepId),p=G(n.key),h=l??p;if(h)return g({timestamp:Date.now(),taskId:t.taskId,roleId:t.roleId,executionId:t.executionId,stepId:t.stepId,tool:"fetch_artifact_file",artifactKey:n.key,outcome:"denied",errorReason:h}),d({error:h});try{Z(n.destPath,t.roleWorkspacePath,!1)}catch(f){let x=f instanceof Error?f.message:String(f);return g({timestamp:Date.now(),taskId:t.taskId,roleId:t.roleId,executionId:t.executionId,stepId:t.stepId,tool:"fetch_artifact_file",artifactKey:n.key,outcome:"denied",errorReason:x}),d({error:x})}let m=J(t.executionId,n.stepId,n.key);if(!m){let f=`no artifact at ${n.stepId}/${n.key}`;return g({timestamp:Date.now(),taskId:t.taskId,roleId:t.roleId,executionId:t.executionId,stepId:t.stepId,tool:"fetch_artifact_file",artifactKey:n.key,outcome:"error",errorReason:f}),d({error:f})}if(m.kind!=="file"||!m.blobPath){let f="artifact is not a file";return g({timestamp:Date.now(),taskId:t.taskId,roleId:t.roleId,executionId:t.executionId,stepId:t.stepId,tool:"fetch_artifact_file",artifactKey:n.key,artifactId:m.id,outcome:"denied",errorReason:f}),d({error:f})}try{let f=he({blobPath:m.blobPath,destPath:n.destPath});return g({timestamp:Date.now(),taskId:t.taskId,roleId:t.roleId,executionId:t.executionId,stepId:t.stepId,tool:"fetch_artifact_file",artifactKey:n.key,artifactId:m.id,sizeBytes:f.sizeBytes,outcome:"success"}),d({success:!0,sizeBytes:f.sizeBytes,mime:m.mime,destPath:n.destPath})}catch(f){let x=f instanceof Error?f.message:String(f);return g({timestamp:Date.now(),taskId:t.taskId,roleId:t.roleId,executionId:t.executionId,stepId:t.stepId,tool:"fetch_artifact_file",artifactKey:n.key,artifactId:m.id,outcome:"error",errorReason:x}),d({error:x})}}),C("list_artifacts","Discover artifacts published by upstream steps in this template execution. Returns step_id, key, kind ('json' or 'file'), size, mime. Use this to learn what is available before calling read_artifact or fetch_artifact_file.",{stepId:W.optional().describe("Filter to a specific TemplateExecution step (omit to list all artifacts in the execution).")},async n=>{let t=await a();if("error"in t)return d({error:t.error});let l=n.stepId?ie(n.stepId):null;if(l)return g({timestamp:Date.now(),taskId:t.taskId,roleId:t.roleId,executionId:t.executionId,stepId:t.stepId,tool:"list_artifacts",outcome:"denied",errorReason:l}),d({error:l});let p=ce(t.executionId,n.stepId);return g({timestamp:Date.now(),taskId:t.taskId,roleId:t.roleId,executionId:t.executionId,stepId:t.stepId,tool:"list_artifacts",sizeBytes:p.length,outcome:"success"}),d({artifacts:p.map(h=>({id:h.id,stepId:h.stepId,key:h.key,kind:h.kind,sizeBytes:h.sizeBytes,mime:h.mime,createdAt:h.createdAt}))})}),C("report_blocked","Report that the task cannot proceed due to a missing prerequisite (e.g., missing credential, missing input, missing target). This sets the task status to 'blocked', stores the reason for the UI to display, and aborts the execution loop.",{reason:c.string().describe("Short reason, e.g. 'missing_credential', 'missing_target', 'missing_input'"),missingPrereqs:c.array(c.string()).optional().describe("Specific keys/IDs that are missing, e.g. ['MINIMAX_API_KEY']"),resumeHint:c.string().optional().describe("How the user can unblock, e.g. 'set MINIMAX_API_KEY in role env'")},async n=>{if(!e)return d({error:"report_blocked requires a task context (taskId not available)"});let t=U(e);if(!t)return d({error:`task not found: ${e}`});let l={reason:n.reason,missingPrereqs:n.missingPrereqs,resumeHint:n.resumeHint};return ge(e,{status:"blocked",blockReason:l,completedAt:Date.now()}),we.emit({type:"task_status_change",taskId:e,oldStatus:t.status,newStatus:"blocked"}),T({toolName:"report_blocked",entityType:"task",verb:"update",entityId:e,fieldChanges:[{path:"status",op:"set",before:t.status,after:"blocked"},{path:"blockReason",op:"set",before:void 0,after:n.reason},{path:"completedAt",op:"set",before:void 0,after:Date.now()}],taskId:e,roleId:t.roleId}),s(),d({success:!0,blocked:!0,reason:n.reason})}),C("commit_claim","Declare structured claims about what this worker task just did so the audit engine can verify against effect receipts. Call this in the SAME task turn before reporting completion text. Mirror of the ChatManager tool \u2014 workers may also need to declare claims for actions taken inside template execution steps.",{claims:c.array(c.object({verb:c.string().min(1).describe("What was done: 'send', 'update', 'create', 'delete', 'cancel', 'enable', 'disable', 'bind', 'unbind', etc."),entityType:c.string().min(1).describe("What kind of thing was affected: 'channel_message', 'task_template', 'task', 'goal', 'role', 'delivery_rule', 'plugin', 'mcp_binding', 'config_field', etc."),expected:c.discriminatedUnion("kind",[c.object({kind:c.literal("outbound").describe("Used when verb='send' \u2014 declares a channel message was sent."),target:c.object({channelId:c.string().min(1).describe("Channel that received the message."),chatId:c.string().min(1).optional().describe("Specific chat within the channel; omit for any chat.")}).describe("Where the message went."),attachmentCount:c.number().int().min(0).optional().describe("How many attachments were sent. Verifier requires receipt.attachmentCount >= this."),textPresent:c.boolean().optional().describe("Whether the message body had non-empty text. Verifier requires receipt.textChars > 0 when true.")}),c.object({kind:c.literal("field_change").describe("Used for single-entity updates \u2014 declares a specific field on a specific entity changed."),entityId:c.string().min(1).describe("Identifier of the entity that was changed."),fieldPath:c.string().min(1).describe("Dotted path to the field that changed, e.g. 'deliverTo', 'cron', 'config.timeout'."),op:c.enum(["set","list_add","list_remove"]).describe("How the field changed: scalar set, list append, or list removal."),added:c.array(c.unknown()).min(1).optional().describe("Items appended when op='list_add'. Verifier accepts a superset (receipt may have appended more items)."),removed:c.array(c.unknown()).min(1).optional().describe("Items removed when op='list_remove'. Verifier accepts a superset."),after:c.unknown().optional().describe("New value when op='set'. Verifier requires deep-equal match.")}),c.object({kind:c.literal("batch").describe("Used for batch operations like cancel-many or delete-many."),entityType:c.string().min(1).describe("Restrict matching to this entity type."),entityIds:c.array(c.string()).min(1).optional().describe("Specific entity IDs affected. Verifier checks receipt.entityIds is a superset."),scope:c.object({filter:c.string().min(1).describe("Free-text description of the filter applied (e.g., 'status=running AND role_id=role-x'). Verifier ignores this; human-readable only."),expectedCount:c.number().int().min(0).describe("Minimum number of entities expected to have been affected. Verifier requires receipt.scope.matchedCount >= this.")}).optional().describe("Filter+count for scope-based batches when individual IDs aren't enumerated.")})]).describe("Structured expectation matched against effect_receipts. Pick the kind that fits the action."),note:c.string().optional().describe("Free-text human note kept in the audit log only. Verifier ignores this.")})).min(1).max(20).describe("One or more claims declaring exactly what just happened. Each claim is verified independently against receipts.")},async n=>{let t=Ie();if(!t)return d({error:"commit_claim requires an active trace context"});try{let l=$e({traceId:t,taskId:e,claims:n.claims});return d({claimRowId:l.id,claimsCount:l.claims.length,declaredAt:l.declaredAt})}catch(l){let p=l instanceof Error?l.message:String(l);return d({error:p})}})],I=Pt(e)?u.filter(n=>n.name!=="list_channels"&&n.name!=="send_to_channel"):u;return Dt({name:"execution-tools",version:"1.0.0",tools:I})}export{$e as a,Zt as b,De as c,Nt as d,Jr as e};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{g as u,h as g}from"./chunk-WBAPIPST.js";g();import{readFileSync as p,writeFileSync as h,existsSync as m}from"fs";var f={ANTHROPIC_API_KEY:"anthropic.apiKey",ANTHROPIC_BASE_URL:"anthropic.baseUrl",ANTHROPIC_MODEL:"anthropic.model",ANTHROPIC_DEFAULT_OPUS_MODEL:"anthropic.defaultOpusModel",ANTHROPIC_DEFAULT_SONNET_MODEL:"anthropic.defaultSonnetModel",ANTHROPIC_DEFAULT_HAIKU_MODEL:"anthropic.defaultHaikuModel",ANTHROPIC_SMALL_FAST_MODEL:"anthropic.smallFastModel",ADAM_EMAIL_ADDRESS:"emailGateway.address",ADAM_EMAIL_IMAP_HOST:"emailGateway.imap.host",ADAM_EMAIL_IMAP_PORT:"emailGateway.imap.port",ADAM_EMAIL_IMAP_SECURE:"emailGateway.imap.secure",ADAM_EMAIL_IMAP_USER:"emailGateway.imap.auth.user",ADAM_EMAIL_IMAP_PASS:"emailGateway.imap.auth.pass",ADAM_EMAIL_IMAP_MAILBOX:"emailGateway.imap.mailbox",ADAM_EMAIL_SMTP_HOST:"emailGateway.smtp.host",ADAM_EMAIL_SMTP_PORT:"emailGateway.smtp.port",ADAM_EMAIL_SMTP_SECURE:"emailGateway.smtp.secure",ADAM_EMAIL_SMTP_USER:"emailGateway.smtp.auth.user",ADAM_EMAIL_SMTP_PASS:"emailGateway.smtp.auth.pass",ADAM_EMAIL_SMTP_FROM:"emailGateway.smtp.from",ADAM_EMAIL_SUBJECT_PREFIX:"emailGateway.subjectPrefix"},y=Object.fromEntries(Object.entries(f).map(([r,e])=>[e,r]));function P(r){return r in f}function v(r,e){if(r==="server.port"||r.endsWith(".port")){let n=parseInt(e,10);return Number.isNaN(n)?e:n}return r.endsWith(".secure")||r.endsWith(".enabled")?e==="true"||e==="1":e}function E(r){let e={};for(let n of r.split(`
|
|
2
|
+
`)){let o=n.trim();if(!o||o.startsWith("#"))continue;let i=o.startsWith("export ")?o.slice(7).trim():o,a=i.indexOf("=");if(a===-1)continue;let s=i.slice(0,a).trim(),t=i.slice(a+1).trim();(t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'"))&&(t=t.slice(1,-1)),!(t.includes("$")&&(t=t.replace(/\$\{(\w+)\}|\$(\w+)/g,(c,_,l)=>{let A=_??l;return e[A]??process.env[A]??""}),!t))&&(e[s]=t)}return e}function R(){if(!m(u))return null;let r=E(p(u,"utf-8")),e={};for(let[n,o]of Object.entries(r))n in f&&(e[n]=o);return e}function O(){return m(u)?E(p(u,"utf-8")):null}function b(r){let e=O();if(!e)return[];let n=[];for(let[i,a]of Object.entries(f)){let s=r[a],t=e[i];if(t===void 0)continue;let c=s?String(s):"";c!==t&&n.push({configPath:a,envKey:i,dbValue:c,envValue:t})}let o=r["defaults.env"]??{};for(let[i,a]of Object.entries(e)){if(i in f)continue;let s=o[i]??"";s!==a&&n.push({configPath:`defaults.env.${i}`,envKey:i,dbValue:s,envValue:a})}for(let[i,a]of Object.entries(o))i in e||n.push({configPath:`defaults.env.${i}`,envKey:i,dbValue:a,envValue:""});return n}function T(r){if(!m(u))return 0;let n=p(u,"utf-8").split(`
|
|
3
|
+
`),o=0,i=new Set,a=r["defaults.env"]??{};for(let s=0;s<n.length;s++){let t=n[s].trim();if(!t||t.startsWith("#"))continue;let c=t.startsWith("export ")?t.slice(7).trim():t,_=c.indexOf("=");if(_===-1)continue;let l=c.slice(0,_).trim(),A=t.startsWith("export ")?"export ":"",M=f[l];if(M){let d=r[M];d!=null&&String(d).length>0&&(n[s]=`${A}${l}=${String(d)}`,i.add(l),o++);continue}l in a&&(n[s]=`${A}${l}=${a[l]}`,i.add(l),o++)}for(let[s,t]of Object.entries(f)){if(i.has(s))continue;let c=r[t];c&&String(c).length>0&&(n.push(`${s}=${String(c)}`),o++)}for(let[s,t]of Object.entries(a))i.has(s)||t&&t.length>0&&(n.push(`${s}=${t}`),o++);return o>0&&h(u,n.join(`
|
|
4
|
+
`)),o}export{f as a,P as b,v as c,R as d,O as e,b as f,T as g};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import{d as h}from"./chunk-J3VYLSJI.js";import{b as C}from"./chunk-F6U5TMM3.js";import{b as A,o as w}from"./chunk-KJNAORKM.js";import{l as c,n as k}from"./chunk-BPXS4QEO.js";import{c as T,h as I}from"./chunk-BLCNUT53.js";w();k();k();function U(e){c().prepare(`
|
|
2
|
+
INSERT INTO audit_violations
|
|
3
|
+
(id, step_task_id, execution_id, role_id, contract_field, layer, severity, message, metadata_json, created_at)
|
|
4
|
+
VALUES
|
|
5
|
+
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
6
|
+
`).run(e.id,e.stepTaskId,e.executionId??null,e.roleId,e.contractField,e.layer,e.severity,e.message,e.metadata?JSON.stringify(e.metadata):null,e.createdAt)}function y(e){return{id:e.id,stepTaskId:e.step_task_id,executionId:e.execution_id??void 0,roleId:e.role_id,contractField:e.contract_field,layer:e.layer,severity:e.severity,message:e.message,metadata:e.metadata_json?JSON.parse(e.metadata_json):void 0,createdAt:e.created_at}}function b(e,r=50){return c().prepare("SELECT * FROM audit_violations WHERE role_id = ? ORDER BY created_at DESC LIMIT ?").all(e,r).map(y)}function O(e){return c().prepare("SELECT * FROM audit_violations WHERE step_task_id = ? ORDER BY created_at DESC").all(e).map(y)}function v(e){return c().prepare("SELECT * FROM audit_violations WHERE execution_id = ? ORDER BY created_at DESC").all(e).map(y)}function x(e){return{id:e.id,roleId:e.role_id,taskId:e.task_id,scores:JSON.parse(e.score_json),emaScore:e.ema_score,createdAt:e.created_at,taskType:e.task_type??void 0}}function L(e){c().prepare(`
|
|
7
|
+
INSERT INTO role_scores (id, role_id, task_id, task_type, score_json, ema_score, created_at)
|
|
8
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
9
|
+
`).run(e.id,e.roleId,e.taskId,e.taskType??null,JSON.stringify(e.scores),e.emaScore,e.createdAt)}function V(e,r=50){return c().prepare("SELECT * FROM role_scores WHERE role_id = ? ORDER BY created_at DESC LIMIT ?").all(e,r).map(x)}function N(e){return c().prepare("SELECT ema_score FROM role_scores WHERE role_id = ? ORDER BY created_at DESC LIMIT 1").get(e)?.ema_score}function D(e){let t=c().prepare(`
|
|
10
|
+
SELECT token_usage FROM tasks
|
|
11
|
+
WHERE role_id = ? AND status = 'completed' AND token_usage IS NOT NULL
|
|
12
|
+
ORDER BY completed_at DESC LIMIT 50
|
|
13
|
+
`).all(e);if(t.length===0)return 1e4;let o=t.map(n=>{let i=JSON.parse(n.token_usage);return(i.input??0)+(i.output??0)}).sort((n,i)=>n-i);return o[Math.floor(o.length/2)]}function q(e){let t=c().prepare("SELECT * FROM role_scores WHERE role_id = ? ORDER BY created_at DESC LIMIT 1").get(e);return t?x(t):void 0}function G(e,r,t,o,n){let i=c(),s=i.prepare("SELECT id, role_id, score_json FROM role_scores WHERE task_id = ?").get(e);if(!s)return;let a=JSON.parse(s.score_json);a.intentFulfillment=r,a.intentFulfillmentFailed=t,a.weighted=o(a);let l=i.prepare("SELECT ema_score FROM role_scores WHERE role_id = ? AND created_at < (SELECT created_at FROM role_scores WHERE id = ?) ORDER BY created_at DESC LIMIT 1").get(s.role_id,s.id),m=l!==void 0?n*a.weighted+(1-n)*l.ema_score:a.weighted;return i.prepare("UPDATE role_scores SET score_json = ?, ema_score = ? WHERE id = ?").run(JSON.stringify(a),m,s.id),m}function K(e,r){let o=c().prepare(`
|
|
14
|
+
SELECT rs.score_json, t.cost_usd, t.completed_at, rs.created_at
|
|
15
|
+
FROM role_scores rs
|
|
16
|
+
JOIN tasks t ON t.id = rs.task_id
|
|
17
|
+
WHERE rs.role_id = ? AND rs.task_type = ?
|
|
18
|
+
ORDER BY rs.created_at DESC
|
|
19
|
+
`).all(e,r);if(o.length===0)return{totalTasks:0,successRate:0,avgCostUsd:0,lastAttempt:null};let n=o.length,s=o.filter(d=>JSON.parse(d.score_json).taskSuccess===1).length/n,l=o.map(d=>d.cost_usd??0).reduce((d,R)=>d+R,0)/n,m=o[0]?.created_at??null;return{totalTasks:n,successRate:s,avgCostUsd:l,lastAttempt:m}}function X(e,r=50){let o=V(e,r).map(s=>s.scores.contractCompliance).filter(s=>s!=null);return o.length===0?{emaScore:null,recentViolations:b(e,10),contractsCheckedRowCount:0}:{emaScore:[...o].reverse().reduce((s,a,l)=>l===0?a:p*a+(1-p)*s,0),recentViolations:b(e,10),contractsCheckedRowCount:o.length}}I();import{v4 as F}from"uuid";var M=T("audit"),f={taskSuccess:.25,planAccuracy:.2,permissionCompliance:.2,efficiency:.15,intentFulfillment:.2},g={taskSuccess:.3,planAccuracy:.25,permissionCompliance:.25,efficiency:.2},p=.3;function H(e){return e.intentFulfillment===null||e.intentFulfillment===void 0?e.taskSuccess*g.taskSuccess+e.planAccuracy*g.planAccuracy+e.permissionCompliance*g.permissionCompliance+e.efficiency*g.efficiency:e.taskSuccess*f.taskSuccess+e.planAccuracy*f.planAccuracy+e.permissionCompliance*f.permissionCompliance+e.efficiency*f.efficiency+e.intentFulfillment*f.intentFulfillment}function W(e,r){let t=A(e),o=t?.status==="completed"?1:0,n=1,i=h(e);i?.deviationReport&&(n=i.deviationReport.overallAccuracy);let s=1,a=C(e,1e3),l=a.filter(u=>u.type==="tool_result"||u.type==="permission_denied").length,m=a.filter(u=>u.type==="permission_denied").length;l>0&&(s=1-m/l);let d=1;if(t?.tokenUsage){let u=t.tokenUsage.input+t.tokenUsage.output,E=r?D(r):1e4;u>E&&(d=Math.max(0,1-(u-E)/E))}let R=H({taskSuccess:o,planAccuracy:n,permissionCompliance:s,efficiency:d,intentFulfillment:void 0}),_=t?.config?.outputContractCheckCount??0,S=null;if(_>0){let u=O(e);S=Math.max(0,Math.min(1,1-u.length/_))}return{taskSuccess:o,planAccuracy:n,permissionCompliance:s,efficiency:d,contractCompliance:S,contractsCheckedThisTask:_,weighted:R}}function ne(e,r,t){let o=W(r,e),n=N(e),i=n!==void 0?p*o.weighted+(1-p)*n:o.weighted;return L({id:F(),roleId:e,taskId:r,scores:o,emaScore:i,createdAt:Date.now(),taskType:t}),M.debug({roleId:e,taskId:r,scores:{...o,weighted:o.weighted.toFixed(3)},ema:i.toFixed(3)},"Task score recorded"),i}function ie(e,r){let t=e.toLowerCase(),o=e;return/\b401\b/.test(t)||/unauthorized/i.test(t)||/invalid.*(?:api.?)?key/i.test(t)||/auth.*fail/i.test(t)||/invalid.*token/i.test(t)||r?.httpStatus===401?{category:"AUTH",originalError:o,retryable:!1,userAction:"Update the API key or credentials in the Role configuration",sameRoleRetry:!1,differentRoleHelp:!1}:/\b429\b/.test(t)||/rate.?limit/i.test(t)||/too many requests/i.test(t)||/quota.?exhaust/i.test(t)||/rate.?limit.?exceed/i.test(t)||/too.?many.?calls/i.test(t)?{category:"RATE_LIMIT",originalError:o,retryable:!0,userAction:"Wait before retrying, or increase the rate limit quota",sameRoleRetry:!0,differentRoleHelp:!1}:/econnrefused/i.test(t)||/enotfound/i.test(t)||/dns/i.test(t)||/connection.?refused/i.test(t)||/connection.?reset/i.test(t)||/connection.?timed? ?out/i.test(t)||/fetch.?failed/i.test(t)||/network.?error/i.test(t)||/socket.?hang.?up/i.test(t)||/etimedout/i.test(t)?{category:"NETWORK",originalError:o,retryable:!0,userAction:"Check network connectivity and that the target service is reachable",sameRoleRetry:!0,differentRoleHelp:!1}:/prompt is too long/i.test(t)||/context.*exceed/i.test(t)||/context.*window/i.test(t)||/too many tokens/i.test(t)||/max.?tokens/i.test(t)||/token.?limit/i.test(t)?{category:"CONTEXT_OVERFLOW",originalError:o,retryable:!1,userAction:"Shorten the task prompt or simplify the request",sameRoleRetry:!1,differentRoleHelp:!1}:r?.sandboxViolation||/sandbox/i.test(t)||/not allowed.*sandbox/i.test(t)||/sandbox.*deny/i.test(t)||/operation.*denied.*sandbox/i.test(t)?{category:"SANDBOX_VIOLATION",originalError:o,retryable:!1,userAction:"Grant filesystem access in Role settings, or run without sandbox",sameRoleRetry:!1,differentRoleHelp:!0}:/tool.*not found/i.test(t)||/command not found/i.test(t)||/enoent/i.test(t)||/no such file/i.test(t)||/mcp.*error.*tool/i.test(t)||/tool.*blocked/i.test(t)||r?.toolName&&/not.*found/.test(t)&&/tool/.test(t)?{category:"TOOL_UNAVAILABLE",originalError:o,retryable:!1,userAction:"Install the required tool or plugin, or add it to the Role's allowed tools",sameRoleRetry:!1,differentRoleHelp:!0}:/timeout/i.test(t)||/timed out/i.test(t)||/exceeded.*seconds/i.test(t)?{category:"TIMEOUT",originalError:o,retryable:!0,userAction:"Increase the task timeout or simplify the task",sameRoleRetry:!0,differentRoleHelp:!1}:/invalid.*url/i.test(t)||/bad request/i.test(t)||/400\b/.test(t)||/wrong.*method/i.test(t)||/invalid.*param/i.test(t)||/missing.*param/i.test(t)?{category:"MALFORMED_REQUEST",originalError:o,retryable:!1,userAction:"Fix the task parameters and retry",sameRoleRetry:!1,differentRoleHelp:!1}:/internal.*error/i.test(t)||/unexpected.*error/i.test(t)||/500\b/.test(t)||/503\b/.test(t)?{category:"INTERNAL_ERROR",originalError:o,retryable:!0,userAction:"The service had an internal error. Retry may succeed.",sameRoleRetry:!0,differentRoleHelp:!1}:{category:"UNKNOWN",originalError:o,retryable:!1,userAction:void 0,sameRoleRetry:!1,differentRoleHelp:!1}}export{U as a,v as b,p as c,H as d,ne as e,V as f,N as g,q as h,G as i,K as j,X as k,ie as l};
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{l as o,n as a}from"./chunk-BPXS4QEO.js";import{c as u,e as c}from"./chunk-245WE5AF.js";a();c();import{v4 as p}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, trace_id)
|
|
3
3
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
4
|
-
`).run(
|
|
4
|
+
`).run(p(),t.timestamp,t.oldRules,t.newRules,t.diff,t.triggerTaskId??null,t.roleId??null,t.source??"reflection",t.traceId??u()??null)}function _(t=100,e=0){return o().prepare(`
|
|
5
5
|
SELECT id, timestamp, old_rules as oldRules, new_rules as newRules, diff,
|
|
6
6
|
trigger_task_id as triggerTaskId, role_id as roleId, source,
|
|
7
7
|
trace_id as traceId
|
|
8
8
|
FROM evolution_audit
|
|
9
9
|
ORDER BY timestamp DESC
|
|
10
10
|
LIMIT ? OFFSET ?
|
|
11
|
-
`).all(t,e)}function
|
|
11
|
+
`).all(t,e)}function m(t,e=100,i=0){return o().prepare(`
|
|
12
12
|
SELECT id, timestamp, old_rules as oldRules, new_rules as newRules, diff,
|
|
13
13
|
trigger_task_id as triggerTaskId, role_id as roleId, source,
|
|
14
14
|
trace_id as traceId
|
|
@@ -16,7 +16,7 @@ import{c as u}from"./chunk-6JBSBSCL.js";import{b as o,d as a}from"./chunk-AQO6II
|
|
|
16
16
|
WHERE role_id = ?
|
|
17
17
|
ORDER BY timestamp DESC
|
|
18
18
|
LIMIT ? OFFSET ?
|
|
19
|
-
`).all(t,e,i)}function
|
|
19
|
+
`).all(t,e,i)}function v(t){return o().prepare(`
|
|
20
20
|
SELECT id, timestamp, old_rules as oldRules, new_rules as newRules, diff,
|
|
21
21
|
trigger_task_id as triggerTaskId, role_id as roleId, source,
|
|
22
22
|
trace_id as traceId
|
|
@@ -24,9 +24,9 @@ import{c as u}from"./chunk-6JBSBSCL.js";import{b as o,d as a}from"./chunk-AQO6II
|
|
|
24
24
|
WHERE role_id = ?
|
|
25
25
|
ORDER BY timestamp DESC
|
|
26
26
|
LIMIT 1
|
|
27
|
-
`).get(t)}function
|
|
27
|
+
`).get(t)}function I(t,e){let i=t.split(`
|
|
28
28
|
`).filter(Boolean),r=e.split(`
|
|
29
29
|
`).filter(Boolean),s=r.filter(d=>!i.includes(d)),l=i.filter(d=>!r.includes(d)),n=[];return s.length>0&&n.push(`+ ${s.join(`
|
|
30
30
|
+ `)}`),l.length>0&&n.push(`- ${l.join(`
|
|
31
31
|
- `)}`),n.join(`
|
|
32
|
-
`)||"(no changes)"}export{
|
|
32
|
+
`)||"(no changes)"}export{R as a,_ as b,m as c,v as d,I as e};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import{a as B,b as J,e as X}from"./chunk-LU3D53ZV.js";import{b as z,c as I,d as D}from"./chunk-NPGZRSGL.js";import{a as G,e as Y,g as Q}from"./chunk-3KNR2F6H.js";import{b as A}from"./chunk-CLNYHWZ6.js";import{a as C,d as ge}from"./chunk-BKNXRSJU.js";import{s as H}from"./chunk-RBJPQYV3.js";import{a as v}from"./chunk-L7JP7DUO.js";import{c as W,l as ue}from"./chunk-L47LZYVG.js";import{l as E,n as me}from"./chunk-BPXS4QEO.js";import{c as F,h as ce}from"./chunk-BLCNUT53.js";import{c as w,e as q}from"./chunk-245WE5AF.js";import{existsSync as _e}from"fs";import{createHash as Ie}from"crypto";import{isAbsolute as be}from"path";ge();me();q();import{v4 as pe}from"uuid";function re(e){return{id:e.id,eventKey:e.event_key,sourceType:e.source_type,sourceId:e.source_id,taskId:e.task_id??void 0,templateId:e.template_id??void 0,templateName:e.template_name??void 0,messageType:e.message_type,viewerKey:e.viewer_key,title:e.title??void 0,contentPreview:e.content_preview,attachments:k(e.attachments_json),targets:k(e.targets_json),firstDeliveredAt:e.first_delivered_at,lastDeliveredAt:e.last_delivered_at,createdAt:e.created_at,traceId:e.trace_id??void 0}}function k(e){try{let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}}function ne(e){if(!e.viewerKey||e.viewerKey.trim().length===0)throw new Error("recordUserVisibleDeliveryEvent requires viewerKey");if(!e.eventKey||e.eventKey.trim().length===0)throw new Error("recordUserVisibleDeliveryEvent requires eventKey");if(!e.sourceId||e.sourceId.trim().length===0)throw new Error("recordUserVisibleDeliveryEvent requires sourceId");let t=E(),r=Date.now(),n=e.deliveredAt??r,i=t.prepare("SELECT * FROM user_visible_events WHERE event_key = ?").get(e.eventKey);if(!i){let p=pe();return t.prepare(`
|
|
2
|
+
INSERT INTO user_visible_events (
|
|
3
|
+
id, event_key, source_type, source_id, task_id, template_id, template_name,
|
|
4
|
+
message_type, viewer_key, title, content_preview, attachments_json,
|
|
5
|
+
targets_json, first_delivered_at, last_delivered_at, created_at, trace_id
|
|
6
|
+
)
|
|
7
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
8
|
+
`).run(p,e.eventKey,e.sourceType,e.sourceId,e.taskId??null,e.templateId??null,e.templateName??null,e.messageType,e.viewerKey,e.title??null,e.contentPreview,JSON.stringify(e.attachments??[]),JSON.stringify(e.targets??[]),n,n,r,e.traceId??w()??null),Z(e.eventKey)}let s=fe(k(i.targets_json),e.targets??[]),l=ye(k(i.attachments_json),e.attachments??[]);return t.prepare(`
|
|
9
|
+
UPDATE user_visible_events
|
|
10
|
+
SET task_id = COALESCE(task_id, ?),
|
|
11
|
+
template_id = COALESCE(template_id, ?),
|
|
12
|
+
template_name = COALESCE(template_name, ?),
|
|
13
|
+
title = COALESCE(title, ?),
|
|
14
|
+
content_preview = CASE WHEN content_preview = '' THEN ? ELSE content_preview END,
|
|
15
|
+
attachments_json = ?,
|
|
16
|
+
targets_json = ?,
|
|
17
|
+
last_delivered_at = MAX(last_delivered_at, ?),
|
|
18
|
+
trace_id = COALESCE(trace_id, ?)
|
|
19
|
+
WHERE event_key = ?
|
|
20
|
+
`).run(e.taskId??null,e.templateId??null,e.templateName??null,e.title??null,e.contentPreview,JSON.stringify(l),JSON.stringify(s),n,e.traceId??w()??null,e.eventKey),Z(e.eventKey)}function Z(e){let t=E().prepare("SELECT * FROM user_visible_events WHERE event_key = ?").get(e);return t?re(t):void 0}function Le(e){let t=E(),r=e.excludeSourceIds??[],n=[e.viewerKey,e.since,e.until],i=`
|
|
21
|
+
SELECT * FROM user_visible_events
|
|
22
|
+
WHERE viewer_key = ?
|
|
23
|
+
AND last_delivered_at >= ?
|
|
24
|
+
AND last_delivered_at <= ?
|
|
25
|
+
`;return r.length>0&&(i+=` AND source_id NOT IN (${r.map(()=>"?").join(",")})`,n.push(...r)),i+=" ORDER BY last_delivered_at ASC",e.limit!==void 0&&(i+=" LIMIT ?",n.push(e.limit)),t.prepare(i).all(...n).map(re)}function fe(e,t){let r=[...e];for(let n of t){let i=ee(n);r.some(s=>ee(s)===i)||r.push(n)}return r}function ee(e){return[e.type,e.channelId??"",e.webhookUrl??"",e.chatId??"",e.sessionId??""].join("|")}function ye(e,t){let r=[...e];for(let n of t){let i=te(n),s=r.findIndex(l=>te(l)===i);s>=0?r[s]={...r[s],...n}:r.push(n)}return r}function te(e){return e.artifactId?`artifact:${e.artifactId}`:["file",e.filename??"",e.sizeBytes??"",e.mimeType??""].join("|")}ce();import{v4 as oe}from"uuid";q();ue();import{basename as x,extname as se}from"path";function ie(e){return W(e).filter(t=>t.kind==="file"&&!!t.blobPath)}function he(e){let t=e.mime??"";return t.startsWith("image/")?"image":t.startsWith("audio/")?"audio":t.startsWith("video/")?"video":"file"}function ve(e){let t=x(e.key).replace(/[\\/]/g,"-");if(e.originalFilename){let r=x(e.originalFilename).replace(/[\\/]/g,"-");if(se(r))return r}if(se(t))return t;if(e.mime){let r=Q(e.mime);if(r&&r!==".bin"&&t)return`${t}${r}`}return e.originalFilename?x(e.originalFilename).replace(/[\\/]/g,"-"):t||(e.blobPath?x(e.blobPath):e.id)}function ae(e){return e.map(t=>({path:t.blobPath,mediaType:he(t),filename:ve(t),contentType:t.mime,mimeType:t.mime,artifactId:t.id,locator:t.locator,sizeBytes:t.sizeBytes,purpose:t.purpose,contentHash:t.contentHash}))}var b=F("adam"),K=class{_dedupCache=new Map;_rateLimitWindows=new Map;_recentlySentIds=new Set;_laneTails=new Map;async _acquireLane(t,r){let n=`${t}:${r}`,i=this._laneTails.get(n)??Promise.resolve(),s,l=new Promise(p=>{s=p});return this._laneTails.set(n,l),l.then(()=>{this._laneTails.get(n)===l&&this._laneTails.delete(n)}),await i,s}isRecentlySent(t){return this._recentlySentIds.has(t)}async send(t){let{taskId:r,channelId:n,chatId:i,content:s,messageType:l,platform:p,webhookUrl:o,replyMarkup:T,replyToMessageId:_,quoteExcerpt:L,quoteTitle:R,mediaUrl:U,mediaType:N,attachments:P,dedupDiscriminator:j}=t,g=Ve(l),le=g!=="reply"&&!!r,d;if(le){d=`${r}:${n??"none"}:${i??"none"}:${g}${j?`:${j}`:""}`;let m=this._dedupCache.get(d);if(m&&Date.now()-m.timestamp<300*1e3)return b.debug({dedupKey:d},"Dedup hit, returning cached log entry"),{success:!0,logEntryId:m.logEntryId}}if(n){let m=Date.now(),f=6e4,u=this._rateLimitWindows.get(n);u||(u=[],this._rateLimitWindows.set(n,u));let V=m-f;for(;u.length>0&&u[0]<V;)u.shift();if(u.length>=60){let O=oe();b.warn({channelId:n,count:u.length},"Rate limited, not sending");let y={type:"channel",channelId:n,chatId:i??""};return this._writeOutboundReceipt(t,y,s,"failure"),{success:!1,logEntryId:O,error:"rate_limited"}}u.push(m)}let de=p??(n?A(n)?.platform:void 0)??"unknown",$=o?s:G(s,de,r),a=oe(),c={id:a,ruleId:void 0,taskId:r??void 0,status:"pending",target:n&&i?{type:"channel",channelId:n,chatId:i}:o?{type:"webhook",webhookUrl:o}:{type:"channel",channelId:n??"",chatId:i??""},content:$,attempts:0,createdAt:Date.now(),expiresAt:Date.now()+1440*60*1e3,source:"direct",messageType:g};z(c),d&&this._dedupCache.set(d,{logEntryId:a,timestamp:Date.now()});try{let m=Ue(U);if(m)return I(a,"failed",m),d&&this._dedupCache.delete(d),v.emit({type:"delivery_status_change",logEntryId:a,taskId:r,target:c.target,status:"failed",error:m,messageType:g}),this._writeOutboundReceipt(t,c.target,s,"failure"),{success:!1,logEntryId:a,error:m};if(o){let f=await fetch(o,{method:"POST",body:JSON.stringify({result:s,taskId:r,timestamp:new Date().toISOString()}),signal:AbortSignal.timeout(1e4)});if(f.ok)return D(a),this._recordDeliveryLedgerAfterSuccess(t,c.target,g,s),v.emit({type:"delivery_status_change",logEntryId:a,taskId:r,target:c.target,status:"delivered",messageType:g}),{success:!0,logEntryId:a};{let u=`Webhook returned ${f.status}`;return I(a,"failed",u),d&&this._dedupCache.delete(d),v.emit({type:"delivery_status_change",logEntryId:a,taskId:r,target:c.target,status:"failed",error:u,messageType:g}),{success:!1,logEntryId:a,error:u}}}else if(n&&i){let{getChannelManager:f}=await Se(),u=f();if(!u){let h="ChannelManager not available";return I(a,"failed",h),d&&this._dedupCache.delete(d),v.emit({type:"delivery_status_change",logEntryId:a,taskId:r,target:c.target,status:"failed",error:h,messageType:g}),this._writeOutboundReceipt(t,c.target,s,"failure"),{success:!1,logEntryId:a,error:h}}let V={content:$,messageType:g,...T?{replyMarkup:T}:{},..._?{replyToMessageId:_}:{},...L?{quoteExcerpt:L}:{},...R?{quoteTitle:R}:{},...U?{mediaUrl:U}:{},...N?{mediaType:N}:{},...P?{attachments:P}:{}},O=await this._acquireLane(n,i),y;try{y=await u.sendMessage(n,i,V)}finally{O()}if(y===null){let h="Channel adapter send failed (returned null)";return I(a,"failed",h),d&&this._dedupCache.delete(d),v.emit({type:"delivery_status_change",logEntryId:a,taskId:r,target:c.target,status:"failed",error:h,messageType:g}),this._writeOutboundReceipt(t,c.target,s,"failure"),{success:!1,logEntryId:a,error:h}}if(y&&(this._recentlySentIds.add(y),setTimeout(()=>this._recentlySentIds.delete(y),300*1e3)),y?.startsWith("queued-")){let h="queued_not_delivered";return d&&this._dedupCache.delete(d),v.emit({type:"delivery_status_change",logEntryId:a,taskId:r,target:c.target,status:"pending",error:h,messageType:g}),{success:!1,messageId:y,logEntryId:a,error:h}}return D(a),this._recordDeliveryLedgerAfterSuccess(t,c.target,g,s),this._writeOutboundReceipt(t,c.target,s,"success"),v.emit({type:"delivery_status_change",logEntryId:a,taskId:r,target:c.target,status:"delivered",messageType:g}),{success:!0,messageId:y??void 0,logEntryId:a}}else{let f="No channelId/chatId or webhookUrl provided";return I(a,"failed",f),d&&this._dedupCache.delete(d),{success:!1,logEntryId:a,error:f}}}catch(m){let f=m instanceof Error?m.message:String(m);return I(a,"failed",f),d&&this._dedupCache.delete(d),v.emit({type:"delivery_status_change",logEntryId:a,taskId:r,target:c.target,status:"failed",error:f,messageType:g}),this._writeOutboundReceipt(t,c.target,s,"failure"),{success:!1,logEntryId:a,error:f}}}_writeOutboundReceipt(t,r,n,i){if(r.type!=="channel"||!r.channelId)return;let s=w();if(!s){b.debug({taskId:t.taskId,channelId:r.channelId,outcome:i},"Outbound receipt skipped: no active trace context");return}let l=(t.attachments??[]).map(o=>o.artifactId).filter(o=>typeof o=="string"&&o.length>0),p=t.actorToolName??"OutboundGateway.send";try{J({traceId:s,taskId:t.taskId,sessionId:t.sessionId,effectCategory:"outbound_message",verb:"send",entityType:"channel_message",target:{channelId:r.channelId,chatId:r.chatId,platform:t.platform},payload:{textChars:n.length,attachmentCount:t.attachments?.length??0,attachmentRefs:l.length>0?l:void 0},actor:{traceId:s,toolName:p,taskId:t.taskId},outcome:i})}catch(o){o instanceof B?b.warn({errors:o.errors,taskId:t.taskId,channelId:r.channelId},"Outbound receipt validation failed"):b.warn({error:o instanceof Error?o.message:String(o),taskId:t.taskId},"Outbound receipt write failed")}}async redeliverExecutionTo(t){let r=t.includeArtifacts??!0,n=t.messageType??"result_delivery",i=t.dedupDiscriminator??`redelivery:${Date.now()}`,s=r?t.fileArtifacts??ie(t.executionId):[],l=s.length>0?ae(s):void 0,p=[];for(let o of t.targets){let T=A(o.channelId);if(!T){p.push({target:{channelId:o.channelId,chatId:o.chatId},deliveryLogId:"",status:"failed",attachmentCount:0,error:`Channel not found: ${o.channelId}`});continue}let _=await this.send({taskId:t.executionId,sessionId:t.sessionId,channelId:o.channelId,chatId:o.chatId,content:t.content,messageType:n,platform:T.platform,attachments:l,dedupDiscriminator:i,actorToolName:t.actorToolName});p.push({target:{channelId:o.channelId,chatId:o.chatId},deliveryLogId:_.logEntryId,status:_.success?"delivered":"failed",attachmentCount:s.length,..._.error?{error:_.error}:{}})}return{deliveries:p}}_recordDeliveryLedgerAfterSuccess(t,r,n,i){if(Te(n,t.taskId))try{let s=we(t,r);if(!s){C({source:"delivery_ledger",severity:"warning",sourceId:t.taskId,message:`Skipped user-visible delivery ledger write for ${n}: viewer identity unresolved`});return}let l=Ee(t.taskId),p=xe(i);ne({eventKey:`${s}|${l.sourceId}|${n}|${p}`,sourceType:l.sourceType,sourceId:l.sourceId,taskId:t.taskId,templateId:l.templateId,templateName:l.templateName,messageType:n,viewerKey:s,title:l.templateName,contentPreview:i,attachments:(t.attachments??[]).map(Ae),targets:[ke(r)]})}catch(s){let l=s instanceof Error?s.message:String(s);b.warn({error:l,taskId:t.taskId,messageType:n},"User-visible delivery ledger write failed");try{C({source:"delivery_ledger",severity:"error",sourceId:t.taskId,message:l})}catch{}}}};function Te(e,t){return t?!["reply","assistant_text","user_message","approval","approval_prompt"].includes(e):!1}function we(e,t){if(e.viewerKey)return e.viewerKey;if(t.type==="channel"&&t.channelId)return Y({type:"channel",channelId:t.channelId,chatId:t.chatId})}function Ee(e){let t=X(e);if(!t)return{sourceType:"task",sourceId:e};let r=H(t.templateId);return{sourceType:"template_execution",sourceId:t.id,templateId:t.templateId,templateName:r?.name}}function Ae(e){return{artifactId:e.artifactId,locator:e.locator,filename:e.filename,mimeType:e.mimeType??e.contentType,sizeBytes:e.sizeBytes,purpose:e.purpose,contentHash:e.contentHash}}function ke(e){if(e.type==="webhook")return{type:"webhook",webhookUrl:e.webhookUrl};let t=e.channelId?A(e.channelId):void 0;return{type:"channel",channelId:e.channelId,chatId:e.chatId,label:t?.name}}function xe(e){return Ie("sha256").update(e).digest("hex")}var S=null;function Se(){return S||(S=import("./channels-6BEGHNOK.js")),S}function it(){S=null}function Ue(e){if(!e)return;if(e.includes("://")&&!e.startsWith("file://"))return"mediaUrl must be a local file path";let t=e.startsWith("file://")?new URL(e).pathname:e;if(!be(t))return"mediaUrl must be absolute";if(!_e(t))return"mediaUrl file does not exist"}function Ve(e){return e==="report"?"status_report":e==="deliver"?"result_delivery":e}var M=null;function Oe(){return M||(M=new K),M}function at(e){return Oe().isRecentlySent(e)}export{Le as a,ie as b,K as c,it as d,Oe as e,at as f};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as i}from"./chunk-ASPPM7TQ.js";import{a as d,b as p,c as g,e as h}from"./chunk-TLMG5W3L.js";import{d as f}from"./chunk-Z6LHGA27.js";import{f as l,h as _}from"./chunk-WBAPIPST.js";import{c as v,h as O}from"./chunk-BLCNUT53.js";_();import{readFileSync as E,existsSync as w}from"fs";import{resolve as T}from"path";import{homedir as S}from"os";import{parse as k}from"yaml";O();var D=v("config");function I(e){return e.replace(/\$\{(\w+)}/g,(t,n)=>process.env[n]??"")}function m(e){return e.startsWith("~/")?T(S(),e.slice(2)):e}function c(e){if(typeof e=="string")return I(e);if(Array.isArray(e))return e.map(c);if(e!==null&&typeof e=="object"){let t={};for(let[n,r]of Object.entries(e))t[n]=c(r);return t}return e}function C(e,t){let n={...e};for(let r of Object.keys(t)){let o=t[r],s=e[r];o!==null&&typeof o=="object"&&!Array.isArray(o)&&s!==null&&typeof s=="object"&&!Array.isArray(s)?n[r]=C(s,o):n[r]=o}return n}function A(e){return e.defaults.deniedReadPaths&&(e.defaults.deniedReadPaths=e.defaults.deniedReadPaths.map(m)),e.defaults.sensitivePaths&&!e.defaults.deniedReadPaths&&(D.warn("config.defaults.sensitivePaths is deprecated \u2014 use config.defaults.deniedReadPaths instead. Values have been migrated automatically."),e.defaults.deniedReadPaths=e.defaults.sensitivePaths.map(m)),e}function M(){let e={};for(let t of process.argv.slice(2)){let n=t.match(/^--([a-z-]+)=(.+)$/);n&&(e[n[1]]=n[2])}return e}function R(e){let t=process.env.ADAM_PORT;t&&(e.server.port=parseInt(t,10));let n=process.env.ANTHROPIC_MODEL;n&&(e.defaults.model=n);let r=process.env.ADAM_API_KEY;return r&&(e.server.apiKey=r),e}function y(e){let t=M();return t.port&&(e.server.port=parseInt(t.port,10)),t.host&&(e.server.host=t.host),t.timeout&&(e.defaults.timeout=parseInt(t.timeout,10)),t["api-key"]&&(e.server.apiKey=t["api-key"]),e}function N(e){let t=e??l,n={};if(w(t)){let P=E(t,"utf-8"),u=k(P);u&&(n=c(u))}let r=C(i,n),o=R(r),s=y(o);return A(s)}function F(){let e=JSON.parse(JSON.stringify(i)),t=R(e),n=y(t);return A(n)}function b(){let e={},t={...d,ANTHROPIC_API_KEY:"anthropic.apiKey",ANTHROPIC_BASE_URL:"anthropic.baseUrl",ANTHROPIC_MODEL:"anthropic.model",ANTHROPIC_DEFAULT_OPUS_MODEL:"anthropic.defaultOpusModel",ANTHROPIC_DEFAULT_SONNET_MODEL:"anthropic.defaultSonnetModel",ANTHROPIC_DEFAULT_HAIKU_MODEL:"anthropic.defaultHaikuModel",ANTHROPIC_SMALL_FAST_MODEL:"anthropic.smallFastModel",ADAM_PORT:"server.port",ADAM_API_KEY:"server.apiKey"},n={};for(let[o,s]of Object.entries(t)){let a=process.env[o];a&&a.length>0&&(e[s]=g(s,a))}let r=h();if(r)for(let[o,s]of Object.entries(r))p(o)||o in t||o.startsWith("ANTHROPIC_")||o.startsWith("ADAM_")||(n[o]=s);return Object.keys(n).length>0&&(e["defaults.env"]=n),e}function J(){try{return f().defaults}catch{return i.defaults}}function $(){try{return f().chat??i.chat}catch{return i.chat}}export{N as a,F as b,b as c,J as d,$ as e};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import{E as R,I as E}from"./chunk-KJNAORKM.js";import{d as h,h as A}from"./chunk-WBAPIPST.js";import{c as y,h as V}from"./chunk-BLCNUT53.js";import{c as v}from"./chunk-FCV2DPZQ.js";import{readFileSync as P,writeFileSync as I,existsSync as b}from"fs";import{join as x}from"path";function k(n){let e=x(m(n),".env");if(!b(e))return null;let s=P(e,"utf-8"),r={};for(let c of s.split(`
|
|
2
|
+
`)){let t=c.trim();if(!t||t.startsWith("#"))continue;let i=t.startsWith("export ")?t.slice(7).trim():t,a=i.indexOf("=");if(a===-1)continue;let d=i.slice(0,a).trim(),o=i.slice(a+1).trim();(o.startsWith('"')&&o.endsWith('"')||o.startsWith("'")&&o.endsWith("'"))&&(o=o.slice(1,-1)),!(o.includes("$")&&(o=o.replace(/\$\{(\w+)\}|\$(\w+)/g,(f,l,u)=>{let g=l??u;return r[g]??process.env[g]??""}),!o))&&(r[d]=o)}return r}function W(n,e){let s=k(n);if(!s)return e;let r={...e},c=0;for(let[t,i]of Object.entries(s)){if(t.startsWith("ANTHROPIC_")){$.warn({roleName:n,key:t},"Role .env contains ANTHROPIC_* key; ignored (managed globally)");continue}t in r||(r[t]=i,c++)}return c>0&&$.info({roleName:n,seeded:c},"Seeded role envVars from .env file"),Object.keys(r).length>0?r:void 0}function U(n,e){let s=k(n);if(!s)return[];let r=e??{},c=[];for(let[t,i]of Object.entries(s)){if(t.startsWith("ANTHROPIC_"))continue;let a=r[t]??"";a!==i&&c.push({envKey:t,dbValue:a,envValue:i})}for(let[t,i]of Object.entries(r))t in s||c.push({envKey:t,dbValue:i,envValue:""});return c}function q(n,e){let s=x(m(n),".env"),r=e??{},c=[],t=new Set;if(b(s)){let a=P(s,"utf-8");for(let d of a.split(`
|
|
3
|
+
`)){let o=d.trim();if(!o||o.startsWith("#")){c.push(d);continue}let f=o.startsWith("export ")?o.slice(7).trim():o,l=f.indexOf("=");if(l===-1){c.push(d);continue}let u=f.slice(0,l).trim(),g=o.startsWith("export ")?"export ":"";u in r&&(c.push(`${g}${u}=${r[u]}`),t.add(u))}}let i=0;for(let[a,d]of Object.entries(r)){if(t.has(a)){i++;continue}d&&d.length>0&&(c.push(`${a}=${d}`),i++)}return I(s,c.join(`
|
|
4
|
+
`)+`
|
|
5
|
+
`,"utf-8"),i}var $,j=v(()=>{"use strict";w();V();$=y("manager")});import{mkdirSync as O,writeFileSync as S}from"fs";import{join as p,basename as F}from"path";function T(){return process.env.ADAM_TEST_DIR||h}function m(n){let e=F(n);if(e!==n||!n)throw new Error(`Invalid role name for workspace: ${n}`);return p(T(),"roles",e)}function Q(n){let e=m(n.name);O(e,{recursive:!0}),O(p(e,".claude"),{recursive:!0}),C(e,n),D(n.id,n.allowedTools,e);let s=W(n.name,n.envVars);return s&&JSON.stringify(s)!==JSON.stringify(n.envVars)&&R(n.id,{envVars:s}),e}function C(n,e){let s=e.learnedRules.stylePreferences.length>0?e.learnedRules.stylePreferences.map(i=>`- ${i}`).join(`
|
|
6
|
+
`):"(none yet)",r=e.learnedRules.avoidedActions.length>0?e.learnedRules.avoidedActions.map(i=>`- ${i}`).join(`
|
|
7
|
+
`):"(none yet)",c=e.learnedRules.pinnedParameters.length>0?e.learnedRules.pinnedParameters.map(i=>{let a=Object.entries(i.params).map(([o,f])=>`${o}=${JSON.stringify(f)}`).join(", "),d=i.condition?` [when: ${i.condition}]`:"";return`- ${i.tool} \u2192 ${a}${d}`}).join(`
|
|
8
|
+
`):"(none yet)",t=`# ${e.name}
|
|
9
|
+
|
|
10
|
+
${e.cagPrompt}
|
|
11
|
+
|
|
12
|
+
## Learned Rules
|
|
13
|
+
|
|
14
|
+
### Style Preferences
|
|
15
|
+
${s}
|
|
16
|
+
|
|
17
|
+
### Avoided Actions
|
|
18
|
+
${r}
|
|
19
|
+
|
|
20
|
+
### Pinned Parameters
|
|
21
|
+
When invoking matching tools, prefer these parameter values unless overridden:
|
|
22
|
+
${c}
|
|
23
|
+
`;e.name==="chat-manager"&&(t+=`
|
|
24
|
+
## Compaction Instructions
|
|
25
|
+
When summarizing, preserve:
|
|
26
|
+
- Active task IDs and their current status
|
|
27
|
+
- User's pending requests not yet addressed
|
|
28
|
+
- Key decisions made and their rationale
|
|
29
|
+
- Role assignments and execution outcomes
|
|
30
|
+
- Channel/session routing context
|
|
31
|
+
`),S(p(n,"CLAUDE.md"),t,"utf-8")}function D(n,e,s){let r={};e&&(r.allowedTools=e),S(p(s,".claude","settings.json"),JSON.stringify(r,null,2),"utf-8")}var w=v(()=>{A();j();E()});export{k as a,U as b,q as c,j as d,m as e,Q as f,C as g,D as h,w as i};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import{l as n,n as o}from"./chunk-BPXS4QEO.js";import{c as r,e as c}from"./chunk-245WE5AF.js";o();c();function a(e){return{id:e.id,sessionId:e.session_id,role:e.role,content:e.content,source:{type:e.source_type,...e.source_channel_id?{channelId:e.source_channel_id}:{},...e.source_chat_id?{chatId:e.source_chat_id}:{}},taskId:e.task_id??void 0,channelMessageId:e.channel_message_id??void 0,metadata:e.metadata?JSON.parse(e.metadata):void 0,createdAt:e.created_at,traceId:e.trace_id??void 0,kind:e.kind??void 0,parentMessageId:e.parent_message_id??void 0,threadRoot:e.thread_root??void 0,promptId:e.prompt_id??void 0,approvalShape:e.approval_shape??void 0,roleId:e.role_id??void 0,attachments:e.attachments?JSON.parse(e.attachments):void 0,mirroredToTargets:e.mirrored_to_targets?JSON.parse(e.mirrored_to_targets):void 0,platformMessageId:e.platform_message_id??void 0,seq:e.seq??void 0}}function p(e){let s=n(),t=e.kind??(e.role==="user"?"user_message":"assistant_text");s.prepare(`
|
|
2
|
+
INSERT INTO chat_messages (
|
|
3
|
+
id, session_id, role, content, source_type, task_id,
|
|
4
|
+
channel_message_id, metadata, created_at, trace_id,
|
|
5
|
+
kind, parent_message_id, thread_root, prompt_id, approval_shape,
|
|
6
|
+
role_id, attachments, mirrored_to_targets, platform_message_id, seq,
|
|
7
|
+
source_channel_id, source_chat_id
|
|
8
|
+
)
|
|
9
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
10
|
+
`).run(e.id,e.sessionId,e.role,e.content,e.source.type,e.taskId??null,e.channelMessageId??null,e.metadata?JSON.stringify(e.metadata):null,e.createdAt,e.traceId??r()??null,t,e.parentMessageId??null,e.threadRoot??null,e.promptId??null,e.approvalShape??null,e.roleId??null,e.attachments?JSON.stringify(e.attachments):null,e.mirroredToTargets?JSON.stringify(e.mirroredToTargets):null,e.platformMessageId??null,e.seq??null,e.source.channelId??null,e.source.chatId??null)}function _(e){let t=n().prepare("SELECT * FROM chat_messages WHERE id = ?").get(e);return t?a(t):void 0}function g(e,s=100,t=0){return n().prepare("SELECT * FROM chat_messages WHERE session_id = ? ORDER BY created_at ASC LIMIT ? OFFSET ?").all(e,s,t).map(a)}function h(e){return n().prepare("SELECT * FROM chat_messages WHERE session_id = ? ORDER BY created_at ASC").all(e).map(a)}function E(e){n().prepare("DELETE FROM chat_messages WHERE session_id = ?").run(e)}function m(e){let t=n().prepare("SELECT * FROM chat_messages WHERE task_id = ? LIMIT 1").get(e);return t?a(t):void 0}function f(e,s=50,t=0){return n().prepare(`
|
|
11
|
+
SELECT m.* FROM chat_messages m
|
|
12
|
+
JOIN chat_sessions s ON m.session_id = s.id
|
|
13
|
+
WHERE s.source_type = 'channel' AND s.source_channel_id = ?
|
|
14
|
+
ORDER BY m.created_at DESC LIMIT ? OFFSET ?
|
|
15
|
+
`).all(e,s,t).map(a)}function M(e){let t=n().prepare("SELECT * FROM chat_messages WHERE platform_message_id = ? ORDER BY created_at DESC LIMIT 1").get(e);return t?a(t):void 0}function R(e){return n().prepare("SELECT * FROM chat_messages WHERE prompt_id = ? ORDER BY created_at ASC").all(e).map(a)}function I(e,s){n().prepare("UPDATE chat_messages SET prompt_id = ? WHERE id = ?").run(s,e)}export{p as a,_ as b,g as c,h as d,E as e,m as f,f as g,M as h,R as i,I as j};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{C as M,I as D}from"./chunk-KJNAORKM.js";import{l as u,n as O}from"./chunk-BPXS4QEO.js";O();D();function E(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 _(e){return Buffer.from(e.buffer,e.byteOffset,e.byteLength)}function I(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)
|
|
@@ -23,4 +23,4 @@ import{l as M,r as D}from"./chunk-U2LBBBWO.js";import{b as u,d as O}from"./chunk
|
|
|
23
23
|
ORDER BY importance ASC, retrieved_count ASC, created_at ASC
|
|
24
24
|
LIMIT ?
|
|
25
25
|
)
|
|
26
|
-
`).run(e,m),t+=m}return t}function Q(e,r,o,n,t=H,c){let s=C(e,r,n*2,c),b=W(e,o,n*2),l=new Map;for(let{node:i,cosine:p}of s)l.set(i.id,{node:i,cosine:p,bm25:0});for(let{node:i,bm25:p}of b){let y=l.get(i.id);y?y.bm25=p:l.set(i.id,{node:i,cosine:0,bm25:p})}let f=c?.tiers&&c.tiers.length>0?new Set(c.tiers):null,d=c?.excludeSuperseded===!0,a=[];for(let i of l.values())f&&!f.has(i.node.tier??"episodic")||d&&i.node.supersededBy||a.push(i);let m=1/0,g=-1/0,R=0;for(let{bm25:i}of a)i!==0&&(R++,i<m&&(m=i),i>g&&(g=i));let h=g-m,N=i=>i===0||R===0?0:h<=0?1:(i-m)/h;return a.map(({node:i,cosine:p,bm25:y})=>{let T=N(y),A=t.vectorWeight*p+t.bm25Weight*T;return{node:i,cosine:p,bm25:y,combinedRelevance:A}}).sort((i,p)=>p.combinedRelevance-i.combinedRelevance).slice(0,n)}export{I as a,U as b,Y as c,J as d,j as e,q as f,V as g,
|
|
26
|
+
`).run(e,m),t+=m}return t}function Q(e,r,o,n,t=H,c){let s=C(e,r,n*2,c),b=W(e,o,n*2),l=new Map;for(let{node:i,cosine:p}of s)l.set(i.id,{node:i,cosine:p,bm25:0});for(let{node:i,bm25:p}of b){let y=l.get(i.id);y?y.bm25=p:l.set(i.id,{node:i,cosine:0,bm25:p})}let f=c?.tiers&&c.tiers.length>0?new Set(c.tiers):null,d=c?.excludeSuperseded===!0,a=[];for(let i of l.values())f&&!f.has(i.node.tier??"episodic")||d&&i.node.supersededBy||a.push(i);let m=1/0,g=-1/0,R=0;for(let{bm25:i}of a)i!==0&&(R++,i<m&&(m=i),i>g&&(g=i));let h=g-m,N=i=>i===0||R===0?0:h<=0?1:(i-m)/h;return a.map(({node:i,cosine:p,bm25:y})=>{let T=N(y),A=t.vectorWeight*p+t.bm25Weight*T;return{node:i,cosine:p,bm25:y,combinedRelevance:A}}).sort((i,p)=>p.combinedRelevance-i.combinedRelevance).slice(0,n)}export{I as a,U as b,Y as c,J as d,j as e,q as f,V as g,v as h,C as i,W as j,$ as k,S as l,F as m,z as n,G as o,H as p,P as q,Q as r};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as n,h as d}from"./chunk-BLCNUT53.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,s){await a.mkdir(m,{recursive:!0});let t=typeof s=="string"?{systemPrompt:s}:s??{},o={cwd:m,maxTurns:t.maxTurns??3,maxBudgetUsd:t.maxBudgetUsd??.05,persistSession:!1};t.systemPrompt&&(o.systemPrompt=t.systemPrompt),t.model&&(o.model=t.model);let p=f({prompt:u,options:o}),e="";for await(let g of p){let r=g;r.type==="result"&&typeof r.result=="string"&&(e=r.result)}return e}export{y as a};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{f as R,
|
|
1
|
+
import{f as R,i as z}from"./chunk-VNXTBIPI.js";import{r as T,t as _,u as f}from"./chunk-RBJPQYV3.js";import{B as y,C as S,D as c,E as A,F as x,I as H}from"./chunk-KJNAORKM.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-SIHNI6HO.js"),{getRole:e}=await import("./roles-F6AEM6B5.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
2
|
|
|
3
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
4
|
|
|
@@ -37,7 +37,7 @@ and routing tasks to the appropriate roles. You have broad memory access across
|
|
|
37
37
|
Capabilities: Run preset Skills under .claude/skills/. Read/write files in the assigned workspace.
|
|
38
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
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:["
|
|
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:["Read","Write","Edit","Bash","Grep","Glob"],skills:"all",evaluationCriteria:{determinism:5,skill_invocation_rate:5},executionMode:"isolated",effortTier:"low"};var q={presetId:"feature-miner",name:"Feature Miner",cagPrompt:`Role: Feature request analyst.
|
|
41
41
|
You are given chat session data inline in the prompt (the dispatcher pre-fetched it). You cannot read other sessions.
|
|
42
42
|
|
|
43
43
|
What counts as a feature request:
|
|
@@ -74,4 +74,4 @@ Constraints:
|
|
|
74
74
|
|
|
75
75
|
=== CHAT EXCERPTS ===
|
|
76
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};
|
|
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:{stylePreferences:[],avoidedActions:[],pinnedParameters:[]},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,effortTier:e.effortTier,skills:e.skills,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};T(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,effortTier:e.effortTier,skills:e.skills,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:{stylePreferences:[],avoidedActions:[],pinnedParameters:[]},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,effortTier:e.effortTier,skills:e.skills,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&&(_(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)_(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};T(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 b=["defaults.model","defaults.effort","defaults.maxTurns","defaults.maxBudgetUsd","defaults.timeout","logging.level","roles.evolution.triggerEvery","roles.evolution.reflectionThreshold","identity.ownerViewerKey","chat.sessionTimeoutMinutes","chat.maxSessionTurns","chat.autoTitle","chat.archiveExtractMemory","chat.artifactThresholdChars","chat.commitmentDetection.locales","chat.commitmentDetection.blockedText.zh","chat.commitmentDetection.blockedText.en","chat.commitmentDetection.unsupportedSuccessText.zh","chat.commitmentDetection.unsupportedSuccessText.en","chat.commitmentDetection.unsupportedFailureText.zh","chat.commitmentDetection.unsupportedFailureText.en","chat.commitmentDetection.unsupportedMutationText.zh","chat.commitmentDetection.unsupportedMutationText.en","memory.midTaskInjection.enabled","memory.midTaskInjection.toolCallThreshold","memory.midTaskInjection.cooldownMs","memory.midTaskInjection.topK","memory.midTaskInjection.maxTokens","memory.retrievalWeights.cosSim","memory.retrievalWeights.recency","memory.retrievalWeights.confidence","memory.retrievalWeights.successRate","memory.retrievalWeights.tokenCost","memory.globalBudgetTokens","memory.retrievalDecayDays","memory.attributionThresholds.high","memory.attributionThresholds.low","memory.antiFlipMinUses","memory.antiFlipMaxSuccessRate","memory.reflection.maxBudgetUsd","server.timezone","anthropic.apiKey","anthropic.baseUrl","anthropic.model","anthropic.defaultOpusModel","anthropic.defaultSonnetModel","anthropic.defaultHaikuModel","anthropic.smallFastModel","audit.intentEval.maxBudgetUsd","audit.intentEval.timeoutMs","evaluation.model","defaults.approvalTimeout","defaults.deniedReadPaths","defaults.approvalRequired","watchdog.rules.artifactCleanup.enabled","watchdog.rules.artifactCleanup.ttlDays","watchdog.rules.artifactCleanup.orphanGcMinAgeHours","watchdog.rules.staleTemplateExecutions.enabled","watchdog.rules.staleTemplateExecutions.action","watchdog.rules.staleTemplateExecutions.maxOrphanMinutes","emailGateway.enabled","emailGateway.address","emailGateway.displayName","emailGateway.imap.host","emailGateway.imap.port","emailGateway.imap.secure","emailGateway.imap.auth.user","emailGateway.imap.auth.pass","emailGateway.imap.mailbox","emailGateway.smtp.host","emailGateway.smtp.port","emailGateway.smtp.secure","emailGateway.smtp.auth.user","emailGateway.smtp.auth.pass","emailGateway.smtp.from","emailGateway.subjectPrefix","storage.localProfile"],w=["server.port","server.host","server.apiKey"],T={"anthropic.apiKey":"ANTHROPIC_API_KEY","anthropic.baseUrl":"ANTHROPIC_BASE_URL","anthropic.model":"ANTHROPIC_MODEL","anthropic.defaultOpusModel":"ANTHROPIC_DEFAULT_OPUS_MODEL","anthropic.defaultSonnetModel":"ANTHROPIC_DEFAULT_SONNET_MODEL","anthropic.defaultHaikuModel":"ANTHROPIC_DEFAULT_HAIKU_MODEL","anthropic.smallFastModel":"ANTHROPIC_SMALL_FAST_MODEL"},u=null,E=["ADAM_EMAIL_"],R={"audit.intentEval.maxBudgetUsd":t=>d(t)?null:"must be a positive number.","audit.intentEval.timeoutMs":t=>s(t)?null:"must be a positive integer in milliseconds.","memory.reflection.maxBudgetUsd":t=>d(t)?null:"must be a positive number (USD).","chat.artifactThresholdChars":t=>s(t)?null:"must be a positive integer (chars).","storage.localProfile":t=>typeof t=="string"&&/^[a-zA-Z0-9_-]+$/.test(t)?null:"must match /^[a-zA-Z0-9_-]+$/ (no path separators, no special chars).","chat.commitmentDetection.locales":t=>Array.isArray(t)&&t.length>0&&t.every(n=>n==="zh"||n==="en")?null:"must be a non-empty array of 'zh' | 'en'.","chat.commitmentDetection.blockedText.zh":t=>typeof t=="string"&&t.length>0?null:"must be a non-empty string.","chat.commitmentDetection.blockedText.en":t=>typeof t=="string"&&t.length>0?null:"must be a non-empty string.","chat.commitmentDetection.unsupportedSuccessText.zh":t=>typeof t=="string"&&t.length>0?null:"must be a non-empty string.","chat.commitmentDetection.unsupportedSuccessText.en":t=>typeof t=="string"&&t.length>0?null:"must be a non-empty string.","chat.commitmentDetection.unsupportedFailureText.zh":t=>typeof t=="string"&&t.length>0?null:"must be a non-empty string.","chat.commitmentDetection.unsupportedFailureText.en":t=>typeof t=="string"&&t.length>0?null:"must be a non-empty string.","chat.commitmentDetection.unsupportedMutationText.zh":t=>typeof t=="string"&&t.length>0?null:"must be a non-empty string.","chat.commitmentDetection.unsupportedMutationText.en":t=>typeof t=="string"&&t.length>0?null:"must be a non-empty string.","emailGateway.address":t=>f(t,{allowEmpty:!1})?null:"must be a single valid email address.","emailGateway.imap.host":t=>g(t)?null:"must be a non-empty host without protocol.","emailGateway.imap.port":t=>s(t)?null:"must be a positive integer port.","emailGateway.imap.mailbox":t=>_(t)?null:"must be a non-empty mailbox without NUL bytes.","emailGateway.smtp.host":t=>g(t)?null:"must be a non-empty host without protocol.","emailGateway.smtp.port":t=>s(t)?null:"must be a positive integer port.","emailGateway.smtp.from":t=>f(t,{allowEmpty:!0})?null:"must be empty or a single valid email address.","identity.ownerViewerKey":t=>typeof t=="string"&&t.trim().length>0?null:"must be a non-empty string."};function S(t){u=JSON.parse(JSON.stringify(t))}function a(){if(!u)throw new Error("Runtime config not initialized. Call initRuntimeConfig first.");return u}function C(t){let n=a(),o=t();for(let[e,i]of Object.entries(o))y(e,i)||h(n,e,i)}function k(){let t=a(),n={};for(let[o,e]of Object.entries(T)){let i=A(t,o);i&&typeof i=="string"&&i.length>0?n[e]=i:process.env[e]&&(n[e]=process.env[e])}return n}function m(t){let n={};for(let[o,e]of Object.entries(t))o.startsWith("ANTHROPIC_")||(n[o]=e);return n}var p=/key|token|secret|password|credential/i;function O(t){let n={};for(let[o,e]of Object.entries(t))n[o]=p.test(o)&&e.length>4?e.slice(0,4)+"****":p.test(o)&&e.length>0?"****":e;return n}function I(t){let o=a().defaults?.env??{};return D({...process.env,...o,...k(),...m(t?.roleEnvVars??{}),...m(t?.taskEnv??{}),DISABLE_TELEMETRY:"1",DISABLE_ERROR_REPORTING:"1",CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC:"1",DISABLE_AUTOUPDATER:"1"})}function P(t,n){let o=a(),e=[],i=[];for(let[r,l]of Object.entries(t)){if(!v(r)){x(r)?i.push(`"${r}" requires restart. Cannot modify at runtime.`):i.push(`"${r}" is not a recognized config path.`);continue}let c=y(r,l);if(c){i.push(`"${r}" ${c}`);continue}h(o,r,l)&&(e.push(r),n?.(r,l))}return{success:i.length===0,updated:e,errors:i}}function h(t,n,o){let e=n.split("."),i=t;for(let r=0;r<e.length-1;r++)if(i&&typeof i=="object")i=i[e[r]];else return!1;return i&&typeof i=="object"?(i[e[e.length-1]]=o,!0):!1}function A(t,n){let o=n.split("."),e=t;for(let i of o)if(e&&typeof e=="object")e=e[i];else return;return e}function v(t){return b.includes(t)}function x(t){return w.includes(t)}function y(t,n){return R[t]?.(n)??null}function d(t){return typeof t=="number"&&Number.isFinite(t)&&t>0}function s(t){return typeof t=="number"&&Number.isInteger(t)&&t>0}function g(t){return typeof t=="string"&&t.trim().length>0&&!/^[a-z][a-z0-9+.-]*:\/\//i.test(t.trim())}function _(t){return typeof t=="string"&&t.trim().length>0&&!t.includes("\0")}function f(t,n){if(typeof t!="string")return!1;let o=t.trim();return o?o.includes(",")||/[<>]/.test(o)?!1:/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(o):n.allowEmpty}function D(t){let n={};for(let[o,e]of Object.entries(t))E.some(i=>o.startsWith(i))||(n[o]=e);return n}export{b as a,w as b,S as c,a as d,C as e,k as f,m as g,O as h,I as i,P as j,A as k,v as l,x as m};
|
package/dist/cli.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{a as
|
|
2
|
+
import{a as G,b as h,c as W,e as z}from"./chunk-NLTYJUQG.js";import{a as B,b as J}from"./chunk-NTVLV7NI.js";import{a as q}from"./chunk-N2OLEUAQ.js";import{c as R,e as K,g as ce}from"./chunk-IRUR4DVD.js";import{d as F}from"./chunk-TLMG5W3L.js";import"./chunk-Z6LHGA27.js";import{l as H,m as j,n as le}from"./chunk-BPXS4QEO.js";import"./chunk-WBAPIPST.js";import"./chunk-BLCNUT53.js";import"./chunk-FCV2DPZQ.js";import{Command as Se}from"commander";import{fork as de}from"child_process";import{readFileSync as L,writeFileSync as ue,existsSync as v,unlinkSync as $,mkdirSync as me,openSync as pe}from"fs";import{join as E}from"path";import{homedir as ge}from"os";var P=E(ge(),".adam"),y=E(P,"adam.pid"),k=E(P,"adam.port"),b=E(P,"server.log");function fe(){v(P)||me(P,{recursive:!0})}function C(){if(!v(y))return null;let e=parseInt(L(y,"utf-8").trim(),10);return isNaN(e)?null:e}function he(){if(!v(k))return null;let e=parseInt(L(k,"utf-8").trim(),10);return isNaN(e)?null:e}function O(e){try{return process.kill(e,0),!0}catch{return!1}}async function N(){fe();let e=C();if(e&&O(e))throw new Error(`Server already running (PID ${e})`);v(y)&&$(y),v(k)&&$(k);let o=pe(b,"a"),t=E(B,"dist/index.js"),n=de(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:
|
|
6
|
-
${s}`:`Check logs: ${b}`}`))}),n.on("error",a=>{clearTimeout(g),c(a)})});return
|
|
7
|
-
Task cancelled.`)),process.exit(130)};process.on("SIGINT",l);let i=new
|
|
6
|
+
${s}`:`Check logs: ${b}`}`))}),n.on("error",a=>{clearTimeout(g),c(a)})});return ue(y,String(n.pid)),n.disconnect(),n.unref(),{pid:n.pid,port:l}}async function U(){let e=C();if(!e)throw new Error("No PID file found \u2014 server not running?");if(!O(e))throw v(y)&&$(y),v(k)&&$(k),new Error("Server not running (stale PID file)");process.kill(e,"SIGTERM"),await new Promise(o=>{let t=0,n=setInterval(()=>{O(e)?(t++,t>=10&&(clearInterval(n),process.kill(e,"SIGKILL"),o())):(clearInterval(n),o())},500)}),v(y)&&$(y),v(k)&&$(k)}function I(){let e=C(),o=e?O(e):!1,t=he();return{running:o,pid:e,port:t}}function V(){return b}import{readFileSync as we,existsSync as ke,createReadStream as Te}from"fs";import be from"react";import{render as $e}from"ink";import d from"chalk";import*as Y from"readline";async function Q(e,o){try{let t={};o.model&&(t.model=o.model),o.timeout&&(t.timeout=o.timeout),o.budget&&(t.maxBudgetUsd=o.budget),o.workspace&&(t.workspacePath=o.workspace);let{taskId:n}=await h("/tasks",{method:"POST",body:{prompt:e,config:Object.keys(t).length>0?t:void 0}});o.json?console.log(JSON.stringify({taskId:n,status:"submitted"})):console.log(d.dim(`Task ${n} submitted`));let l=()=>{h(`/tasks/${n}/cancel`,{method:"POST"}).catch(()=>{}),o.json||console.log(d.yellow(`
|
|
7
|
+
Task cancelled.`)),process.exit(130)};process.on("SIGINT",l);let i=new z(n);await i.connect();let c=[];await new Promise(a=>{i.on("reasoning",s=>{let r=s;o.json?c.push({type:"reasoning",...r}):process.stdout.write(d.gray(r.content??""))}),i.on("tool_call",s=>{let r=s;o.json?c.push({type:"tool_call",...r}):console.log(d.blue(`
|
|
8
8
|
[tool] ${r.toolName??"unknown"}`))}),i.on("tool_result",s=>{let r=s;if(o.json)c.push({type:"tool_result",...r});else{let m=r.content??"",f=m.split(`
|
|
9
9
|
`);f.length>5?console.log(d.green(`[result] (${f.length} lines) \u25B8 truncated`)):console.log(d.green(`[result] ${m}`))}}),i.on("error",s=>{let r=s;o.json?c.push({type:"error",...r}):console.error(d.red(`
|
|
10
10
|
[error] ${r.error??"unknown error"}`))}),i.on("approval_needed",s=>{let r=s;if(o.approval===!1){h(`/tasks/${n}/approve`,{method:"POST",body:{approvalId:r.approvalId,reason:"auto-approved via --no-approval"}}).catch(()=>{});return}if(o.json){c.push({type:"approval_needed",...r}),h(`/tasks/${n}/approve`,{method:"POST",body:{approvalId:r.approvalId}}).catch(()=>{});return}console.log(d.yellow(`
|
|
11
|
-
\u26A0 Approval needed: ${r.toolName}`)),console.log(d.yellow(` Pattern: ${r.matchedPattern}`)),console.log(d.yellow(` Input: ${JSON.stringify(r.toolInput)}`));let m=
|
|
12
|
-
\u2500\u2500\u2500 Task complete \u2500\u2500\u2500`)),r.costUsd!==void 0&&console.log(d.dim(`Cost: $${r.costUsd.toFixed(4)}`)),r.numTurns!==void 0&&console.log(d.dim(`Turns: ${r.numTurns}`))),i.close(),a()}),i.on("*",s=>{s.type})});let g=await h(`/tasks/${n}`);(g.task.status==="failed"||g.task.status==="cancelled")&&process.exit(1),process.exit(0)}catch(t){o.json?console.log(JSON.stringify({error:t.message})):console.error(d.red(t.message)),process.exit(1)}}import u from"chalk";var
|
|
13
|
-
`)),l&&console.log(
|
|
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(
|
|
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?
|
|
16
|
-
`));for(let n of t){let l=new Date(n.timestamp).toLocaleString();console.log(
|
|
17
|
-
`))i.startsWith("+")?console.log(
|
|
11
|
+
\u26A0 Approval needed: ${r.toolName}`)),console.log(d.yellow(` Pattern: ${r.matchedPattern}`)),console.log(d.yellow(` Input: ${JSON.stringify(r.toolInput)}`));let m=Y.createInterface({input:process.stdin,output:process.stdout});m.question(d.yellow(" [a]pprove / [r]eject: "),f=>{m.close();let x=f.toLowerCase().startsWith("a")?"approve":"reject";h(`/tasks/${n}/${x}`,{method:"POST",body:{approvalId:r.approvalId}}).catch(()=>{})})}),i.on("complete",s=>{let r=s;o.json?console.log(JSON.stringify({taskId:n,status:"completed",events:c,result:r})):(console.log(d.dim(`
|
|
12
|
+
\u2500\u2500\u2500 Task complete \u2500\u2500\u2500`)),r.costUsd!==void 0&&console.log(d.dim(`Cost: $${r.costUsd.toFixed(4)}`)),r.numTurns!==void 0&&console.log(d.dim(`Turns: ${r.numTurns}`))),i.close(),a()}),i.on("*",s=>{s.type})});let g=await h(`/tasks/${n}`);(g.task.status==="failed"||g.task.status==="cancelled")&&process.exit(1),process.exit(0)}catch(t){o.json?console.log(JSON.stringify({error:t.message})):console.error(d.red(t.message)),process.exit(1)}}import u from"chalk";var ve={pending:u.gray,queued:u.gray,running:u.yellow,paused:u.yellow,completed:u.green,failed:u.red,cancelled:u.gray};function X(e){return(ve[e]??u.white)(e)}function Z(e,o){return e.length<=o?e:e.slice(0,o-3)+"..."}function ee(e){if(e<1e3)return`${e}ms`;let o=Math.floor(e/1e3);if(o<60)return`${o}s`;let t=Math.floor(o/60),n=o%60;return`${t}m ${n}s`}async function oe(e){try{let o=new URLSearchParams;e.status&&o.set("status",e.status),e.limit&&o.set("limit",e.limit);let t=o.toString(),{tasks:n}=await h(`/tasks${t?`?${t}`:""}`);if(n.length===0){console.log(u.dim("No tasks found"));return}console.log(u.bold(T("ID",10)+T("STATUS",12)+T("PROMPT",40)+T("DURATION",10)+"COST"));for(let l of n){let i=l.totalDurationMs?ee(l.totalDurationMs):"\u2014",c=l.costUsd!==void 0?`$${l.costUsd.toFixed(4)}`:"\u2014";console.log(T(l.id.slice(0,8),10)+T(X(l.status),22)+T(Z(l.prompt,38),40)+T(i,10)+c)}}catch(o){console.error(u.red(o.message)),process.exit(1)}}async function te(e){try{let{task:o}=await h(`/tasks/${e}`);console.log(u.bold("Task Details")),console.log(` ID: ${o.id}`),console.log(` Status: ${X(o.status)}`),console.log(` Prompt: ${o.prompt}`),console.log(` Created: ${new Date(o.createdAt).toLocaleString()}`),o.startedAt&&console.log(` Started: ${new Date(o.startedAt).toLocaleString()}`),o.completedAt&&console.log(` Finished: ${new Date(o.completedAt).toLocaleString()}`),o.totalDurationMs&&console.log(` Duration: ${ee(o.totalDurationMs)}`),o.costUsd!==void 0&&console.log(` Cost: $${o.costUsd.toFixed(4)}`),o.result&&console.log(` Result: ${Z(o.result,200)}`),o.error&&console.log(` Error: ${u.red(o.error)}`)}catch(o){console.error(u.red(o.message)),process.exit(1)}}async function re(e){try{await h(`/tasks/${e}/cancel`,{method:"POST"}),console.log(`Task ${e} cancelled`)}catch(o){console.error(u.red(o.message)),process.exit(1)}}function T(e,o){return e.length>=o?e:e+" ".repeat(o-e.length)}le();ce();import A from"chalk";async function se(e){try{let o=H();if(e.json){let t=R();console.log(JSON.stringify(t,null,2))}else{let t=R(),n=F(),l=K();console.log(A.bold(`Adam Configuration
|
|
13
|
+
`)),l&&console.log(A.yellow(`No configuration saved. Use Settings UI or create ~/.adam/.env
|
|
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(A.cyan(`${g}:`));for(let[r,m]of s){let f=c[r]??r,M=r.includes("apiKey")||r.includes("token")||r.includes("secret")?ne(String(m)):String(m);console.log(` ${f}: ${M}`)}console.log("")}}if(n){console.log(A.bold(`.env File Values:
|
|
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?ne(n[a]):n[a]}`)}console.log("")}}}finally{j()}}function ne(e){return!e||e.length<8?"****":e.slice(0,4)+"****"}import S from"chalk";async function ie(e){try{let o=e.limit??"20",t=await h(`/evolution-audit?limit=${o}`);if(t.length===0){console.log(S.dim("No evolution records yet"));return}console.log(S.bold(`Evolution Audit Log (${t.length} records)
|
|
16
|
+
`));for(let n of t){let l=new Date(n.timestamp).toLocaleString();console.log(S.bold(`[${l}]`)+(n.triggerTaskId?S.dim(` task: ${n.triggerTaskId.slice(0,8)}`):"")),console.log(S.dim(" Diff:"));for(let i of n.diff.split(`
|
|
17
|
+
`))i.startsWith("+")?console.log(S.green(` ${i}`)):i.startsWith("-")?console.log(S.red(` ${i}`)):console.log(S.dim(` ${i}`));console.log()}}catch(o){console.error(S.red(o.message)),process.exit(1)}}import p from"chalk";import{WebSocket as ye}from"ws";async function ae(e){let o=I(),t=e.port?Number(e.port):o.port??7100,n=G(),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 ye(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,M=p.cyan(`[${r.component}]`);console.log(`${p.dim(m)} ${x(r.level.toUpperCase().padEnd(5))} ${M} ${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 w=new Se;w.name("adam").description("Adam Agent Server CLI").version(J());var D=w.command("server").description("Server management");D.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)}});D.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)}});D.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)}});D.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")});D.command("logs").description("Show server logs").option("-f, --follow","Follow log output").action(async e=>{let o=V();if(!ke(o)){console.log("No log file found");return}if(e.follow){let t=Te(o,{encoding:"utf-8"});for await(let n of t)process.stdout.write(n)}else console.log(we(o,"utf-8"))});w.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(Q);var _=w.command("tasks").description("Task management");_.command("list").description("List recent tasks").option("-s, --status <status>","Filter by status").option("-l, --limit <number>","Limit results","20").action(oe);_.command("show <id>").description("Show task details").action(te);_.command("cancel <id>").description("Cancel a running task").action(re);w.command("config").description("Display current configuration").option("--json","Output as JSON").action(se);w.command("evolution").description("Show self-evolution audit log").option("-l, --limit <number>","Limit results","20").action(ie);w.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(ae);w.action(async()=>{try{await W()}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-6TRGTNZ7.js")).default,{waitUntilExit:o}=$e(be.createElement(e));await o()});w.parse();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as b,b as c,d,e}from"./chunk-VKKDSXMR.js";import{a}from"./chunk-ASPPM7TQ.js";import"./chunk-TLMG5W3L.js";import"./chunk-Z6LHGA27.js";import"./chunk-WBAPIPST.js";import"./chunk-BLCNUT53.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,e,f,g}from"./chunk-
|
|
1
|
+
import{a,b,c,d,e,f,g}from"./chunk-IRUR4DVD.js";import"./chunk-BPXS4QEO.js";import"./chunk-WBAPIPST.js";import"./chunk-BLCNUT53.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{k as a,l as b,m as c,n as d}from"./chunk-BPXS4QEO.js";import"./chunk-WBAPIPST.js";import"./chunk-BLCNUT53.js";import"./chunk-FCV2DPZQ.js";d();export{c as closeDb,b as getDb,a as runMigrations};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a,b,c,d,e,f,g,h,i,j,k}from"./chunk-NPGZRSGL.js";import"./chunk-BPXS4QEO.js";import"./chunk-WBAPIPST.js";import"./chunk-BLCNUT53.js";import"./chunk-245WE5AF.js";import"./chunk-FCV2DPZQ.js";export{a as TTL_MS,g as cleanupExpired,b as createDeliveryLog,j as getDeliveryLogByExecution,i as getDeliveryLogByRule,h as getDeliveryLogByTask,f as getFailedDeliveries,k as getLatestDeliveryForContext,e as getPendingDeliveries,d as markDelivered,c as updateDeliveryLogStatus};
|