adam-agent-server 1.19.0 → 1.19.1
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/dist/approval-handler-GXIVBJ4Z.js +1 -0
- package/dist/artifacts-DDHH47IE.js +1 -0
- package/dist/audit-diagnostics-HLHS3MHM.js +1 -0
- package/dist/audit-manager-PDMOR2MX.js +1 -0
- package/dist/bree-engine-6UKRI4UN.js +1 -0
- package/dist/{channels-ZHCTFSDA.js → channels-3J6U6GYH.js} +1 -1
- package/dist/channels-YOBMSBWV.js +1 -0
- package/dist/{chat-tool-calls-4BQWZCJH.js → chat-tool-calls-5Z53IXRF.js} +1 -1
- package/dist/{chunk-4ZESWP3J.js → chunk-2BLSA25Q.js} +1 -1
- package/dist/{chunk-WG3C43QS.js → chunk-3JTHJ3FZ.js} +1 -1
- package/dist/{chunk-PO66F7UQ.js → chunk-4NRIKWSD.js} +1 -1
- package/dist/{chunk-VZL2DGC4.js → chunk-5ZL6RHPE.js} +1 -1
- package/dist/{chunk-6GYNUTPP.js → chunk-6GVYOHD5.js} +5 -5
- package/dist/{chunk-GQS3ED3B.js → chunk-6NIWU43Z.js} +1 -1
- package/dist/{chunk-4ZG4UMAK.js → chunk-6SBLFYCU.js} +1 -1
- package/dist/{chunk-FN64ZULV.js → chunk-AKQ3AFVI.js} +1 -1
- package/dist/{chunk-JXZCQ5XW.js → chunk-CQDOIHPV.js} +1 -1
- package/dist/{chunk-QJXV4SQE.js → chunk-EXB2JIBR.js} +1 -1
- package/dist/{chunk-ORFLN4BF.js → chunk-G5I76LX2.js} +1 -1
- package/dist/{chunk-HEHST2E2.js → chunk-GYOZGA7G.js} +1 -1
- package/dist/{chunk-CN5NEJXG.js → chunk-ISTUK7Q6.js} +1 -1
- package/dist/chunk-J4JO7O3T.js +182 -0
- package/dist/{chunk-2JM3URDG.js → chunk-KO6UB6VW.js} +1 -1
- package/dist/chunk-LE5YRP37.js +14 -0
- package/dist/{chunk-FQHGIY3E.js → chunk-N4BV2WAU.js} +1 -1
- package/dist/{chunk-VOH52UDS.js → chunk-NUTGYMDP.js} +1 -1
- package/dist/{chunk-4G4CKAXY.js → chunk-NX3CIEZA.js} +1 -1
- package/dist/{chunk-ZGA52HRD.js → chunk-P2EDMFVO.js} +1 -1
- package/dist/{chunk-DRS5NOAA.js → chunk-PU2T7HBY.js} +1 -1
- package/dist/{chunk-R7Q6FSV4.js → chunk-PZH5NKUL.js} +11 -11
- package/dist/{chunk-EPLSB63A.js → chunk-QF3B4OWI.js} +1 -1
- package/dist/{chunk-JVYSSJKT.js → chunk-QQWUWGSK.js} +2 -2
- package/dist/{chunk-DFTRUOT6.js → chunk-QX65LEYA.js} +1 -1
- package/dist/{chunk-IAGTZGGV.js → chunk-R3MSLP6P.js} +2 -2
- package/dist/{chunk-KM4EFB4N.js → chunk-SDHMBWVC.js} +1 -1
- package/dist/{chunk-A3YUIWLK.js → chunk-SONOE4ZJ.js} +1 -1
- package/dist/{chunk-WDMSZS4W.js → chunk-VVPB3TD4.js} +1 -1
- package/dist/{chunk-L4APYD5A.js → chunk-X3PJNX2R.js} +1 -1
- package/dist/{chunk-EBZCHLYS.js → chunk-XEXSXMWK.js} +1 -1
- package/dist/{chunk-7QT2ZX3K.js → chunk-YGR5ZTGT.js} +1 -1
- package/dist/{chunk-76MMY2XC.js → chunk-YGZQMZTA.js} +1 -1
- package/dist/{chunk-YEGUFMLJ.js → chunk-YI2QQTZE.js} +1 -1
- package/dist/{chunk-KQMKRRYW.js → chunk-ZARKPBI2.js} +45 -45
- package/dist/{chunk-LMQPGVM7.js → chunk-ZEGZ2I35.js} +4 -4
- package/dist/cli.js +1 -1
- package/dist/{config-GOJLI3X2.js → config-7Y7I7KX4.js} +1 -1
- package/dist/{db-ROXIYW5B.js → db-P7ELD5DS.js} +1 -1
- package/dist/{delivery-log-TGJZ5HU7.js → delivery-log-EVRKJ5GD.js} +1 -1
- package/dist/engine-FE7NCHOG.js +1 -0
- package/dist/{evolution-audit-TFJF666X.js → evolution-audit-XIWF3JIF.js} +1 -1
- package/dist/execution-tools-PGURN3N6.js +1 -0
- package/dist/index.js +68 -67
- package/dist/{learner-ACBX3GI7.js → learner-PWDQUZ5O.js} +1 -1
- package/dist/{memories-RAIR5O2F.js → memories-2OJFLLBT.js} +1 -1
- package/dist/{memory-extractor-A6CAOFOX.js → memory-extractor-N7M4YSPL.js} +1 -1
- package/dist/{memory-gc-W63MGSDH.js → memory-gc-R42SPM52.js} +1 -1
- package/dist/memory-service-V7B5MY37.js +1 -0
- package/dist/outbound-gateway-NHNHVHF2.js +1 -0
- package/dist/presets-H2UV3HIF.js +1 -0
- package/dist/{reflection-job-XC2F7GTT.js → reflection-job-ECJX5ERQ.js} +1 -1
- package/dist/role-presets-7SWGUPV2.js +1 -0
- package/dist/role-workspace-AOYIGLG4.js +1 -0
- package/dist/{roles-LZCJ7QFS.js → roles-5TWJBGAQ.js} +1 -1
- package/dist/{session-manager-PU4GH3E4.js → session-manager-5P2FAEV3.js} +1 -1
- package/dist/skill-registry-XOX4OSHY.js +1 -0
- package/dist/{task-templates-52LAC6OA.js → task-templates-CTQHB6TA.js} +1 -1
- package/dist/template-dispatch-Z2TKWOMY.js +1 -0
- package/package.json +1 -1
- package/dist/approval-handler-S3NV7OPO.js +0 -1
- package/dist/artifacts-NFMM3ORE.js +0 -1
- package/dist/audit-diagnostics-IHU3CJYZ.js +0 -1
- package/dist/audit-manager-MUMEEP3C.js +0 -1
- package/dist/bree-engine-EEKUQA3U.js +0 -1
- package/dist/channels-IDBWHLLE.js +0 -1
- package/dist/chunk-MMVDXKYS.js +0 -14
- package/dist/chunk-NKS7LEA7.js +0 -182
- package/dist/engine-GN7PJPGQ.js +0 -1
- package/dist/execution-tools-BQD2O25X.js +0 -1
- package/dist/memory-service-H4OFUNCF.js +0 -1
- package/dist/outbound-gateway-LKRQYPA2.js +0 -1
- package/dist/presets-FO6RSGDN.js +0 -1
- package/dist/role-presets-SDA664QG.js +0 -1
- package/dist/role-workspace-NGJEJG3H.js +0 -1
- package/dist/skill-registry-XKLE2LXU.js +0 -1
- package/dist/template-dispatch-PJFSWEO2.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as m,i as d}from"./chunk-
|
|
1
|
+
import{h as m,i as d}from"./chunk-X3PJNX2R.js";import{c as s,h as u}from"./chunk-EZLBMUQD.js";import{c,e as f}from"./chunk-5M6IGE5G.js";f();u();var r=s("adam");function w(e){let n=e.traceIdOverride??c();if(!n){r.debug({toolName:e.toolName,entityType:e.entityType,verb:e.verb},"Mutation receipt skipped: no active trace context");return}let i={traceId:n,toolName:e.toolName,taskId:e.taskId,roleId:e.roleId};try{d({traceId:n,taskId:e.taskId,sessionId:e.sessionId,effectCategory:"entity_mutation",verb:e.verb,entityType:e.entityType,entityId:e.entityId,entityIds:e.entityIds,fieldChanges:e.fieldChanges,scope:e.scope,actor:i,outcome:"success"})}catch(o){o instanceof m?r.warn({errors:o.errors,toolName:e.toolName,entityType:e.entityType},"Mutation receipt validation failed"):r.warn({error:o instanceof Error?o.message:String(o),toolName:e.toolName},"Mutation receipt write failed")}}import{z as t}from"zod";var p=t.object({kind:t.literal("lengthTarget"),min:t.number().int().nonnegative(),max:t.number().int().positive(),unit:t.enum(["characters","words","bytes"])}).refine(e=>e.min<=e.max,{message:"min must be <= max"}),g=t.object({kind:t.literal("format"),value:t.enum(["markdown","json","text"])}),k=t.object({kind:t.literal("requireHeading"),value:t.boolean()}),y=t.object({kind:t.literal("mime"),declared:t.string().regex(/^[a-z]+\/[a-z0-9.+-]+(\/)?$/i,{message:"declared must be a valid MIME type (e.g. audio/mpeg, application/json)"})}),b=t.object({kind:t.literal("fileSizeBytes"),min:t.number().int().nonnegative().optional(),max:t.number().int().positive().optional()}).refine(e=>e.min!==void 0||e.max!==void 0,{message:"at least one of min/max required"}).refine(e=>e.min===void 0||e.max===void 0||e.min<=e.max,{message:"min must be <= max"}),x=t.object({kind:t.literal("audioZeroCrossingRatePerS"),max:t.number().positive()}),I=t.object({kind:t.literal("audioDurationMs"),min:t.number().int().nonnegative().optional(),max:t.number().int().positive().optional()}).refine(e=>e.min!==void 0||e.max!==void 0,{message:"at least one of min/max required"}).refine(e=>e.min===void 0||e.max===void 0||e.min<=e.max,{message:"min must be <= max"}),C=t.discriminatedUnion("kind",[p,g,k,y,b,x,I]),M=t.array(C);function l(e){return e.kind==="lengthTarget"||e.kind==="format"||e.kind==="requireHeading"||e.kind==="mime"}function a(e){return e.outputContract?.contractRules??[]}function S(e){return a(e).some(n=>!l(n)||n.kind==="mime"&&n.declared.toLowerCase()!=="application/json")}function B(e,n){return typeof n!="string"?!1:a(e).some(i=>i.kind==="format"&&(i.value==="markdown"||i.value==="text"))}var R="ExecutionManager: SDK loop force-closed after activity timeout";function h(e){return e===R}function q(e){if(e.kind==="json"){let n=e.value;return typeof n=="object"&&n!==null&&n.status==="no_content"?!0:!(typeof n=="string"&&(n.trim().length===0||h(n)))}return e.sizeBytes>0}function P(e){return S(e)?!1:!a(e).some(n=>n.kind==="format"&&n.value==="json"||n.kind==="mime"&&n.declared.toLowerCase()==="application/json")}export{w as a,C as b,M as c,l as d,a as e,S as f,B as g,R as h,h as i,q as j,P as k};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{o as e,q as s}from"./chunk-
|
|
1
|
+
import{o as e,q as s}from"./chunk-ZEGZ2I35.js";s();import{v4 as u}from"uuid";var r,a;function i(){return r||(r=e().prepare(`INSERT INTO chat_tool_calls (id, trace_id, session_id, tool_name, tool_input_json, tool_output_summary, called_at)
|
|
2
2
|
VALUES (?, ?, ?, ?, ?, ?, ?)`)),r}function d(){return a||(a=e().prepare("SELECT * FROM chat_tool_calls WHERE trace_id = ? ORDER BY called_at ASC")),a}function I(t){let o=u(),n=t.calledAt??Date.now(),l=t.toolInput!==void 0?JSON.stringify(t.toolInput):null;return i().run(o,t.traceId,t.sessionId??null,t.toolName,l,t.toolOutputSummary??null,n),{id:o,traceId:t.traceId,sessionId:t.sessionId,toolName:t.toolName,toolInput:t.toolInput,toolOutputSummary:t.toolOutputSummary,calledAt:n}}function g(t){return d().all(t).map(n=>({id:n.id,traceId:n.trace_id,sessionId:n.session_id??void 0,toolName:n.tool_name,toolInput:n.tool_input_json?c(n.tool_input_json):void 0,toolOutputSummary:n.tool_output_summary??void 0,calledAt:n.called_at}))}function f(t,o){if(o.length===0)return!1;let l=`SELECT 1 FROM chat_tool_calls WHERE trace_id = ? AND tool_name IN (${o.map(()=>"?").join(",")}) LIMIT 1`;return e().prepare(l).get(t,...o)!==void 0}function c(t){try{return JSON.parse(t)}catch{return}}export{I as a,g as b,f as c};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{o as r,q as n}from"./chunk-
|
|
1
|
+
import{o as r,q as n}from"./chunk-ZEGZ2I35.js";import{c,e as u}from"./chunk-5M6IGE5G.js";import{b as d,c as o}from"./chunk-5PELJRUQ.js";var D={};o(D,{listAuditDiagnostics:()=>A,recordAuditDiagnostic:()=>g});import{v4 as a}from"uuid";function g(e){let t={id:a(),source:e.source,severity:e.severity,traceId:e.traceId??c()??void 0,sourceId:e.sourceId,message:e.message,createdAt:e.createdAt??Date.now()};return r().prepare(`
|
|
2
2
|
INSERT INTO audit_diagnostics (id, source, severity, trace_id, source_id, message, created_at)
|
|
3
3
|
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
4
4
|
`).run(t.id,t.source,t.severity,t.traceId??null,t.sourceId??null,t.message,t.createdAt),t}function A(e={}){let t=[],i=[];e.source&&(t.push("source = ?"),i.push(e.source)),e.traceId&&(t.push("trace_id = ?"),i.push(e.traceId));let s="SELECT * FROM audit_diagnostics";return t.length>0&&(s+=` WHERE ${t.join(" AND ")}`),s+=" ORDER BY created_at DESC",e.limit!==void 0&&(s+=" LIMIT ?",i.push(e.limit)),r().prepare(s).all(...i).map(m)}function m(e){return{id:e.id,source:e.source,severity:e.severity,traceId:e.trace_id??void 0,sourceId:e.source_id??void 0,message:e.message,createdAt:e.created_at}}var I=d(()=>{n();u()});export{g as a,A as b,D as c,I as d};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{b as E,c as A,i as R}from"./chunk-
|
|
1
|
+
import{b as E,c as A,i as R}from"./chunk-SDHMBWVC.js";import{e as C,i as T}from"./chunk-6NIWU43Z.js";import{G as _,L as I}from"./chunk-3JTHJ3FZ.js";import{o as w,q as F}from"./chunk-ZEGZ2I35.js";I();T();import{existsSync as W,readdirSync as L,readFileSync as j}from"fs";import{join as P}from"path";function v(l){let s=l.split(`
|
|
2
2
|
`),n=s[0]??"";return n.startsWith("```yaml")||n.startsWith("```")?s.slice(1).join(`
|
|
3
3
|
`):l}function H(l){let s={},o=v(l).split(`
|
|
4
4
|
`);for(let t of o){let u=t.match(/^([a-zA-Z_][a-zA-Z0-9_]*):\s*(.*)$/);if(u)s[u[1].toLowerCase()]=u[2].trim();else if(t.trim()&&!t.startsWith("#")&&!t.startsWith(" ")&&!t.startsWith(" "))break}return s}function M(l,s){let n=[];try{let o=C(s),t=P(o,".claude","skills");if(!W(t))return n;let u=L(t,{withFileTypes:!0});for(let e of u){if(!e.isDirectory()&&!e.isSymbolicLink())continue;let i=P(t,e.name,"SKILL.md");if(W(i))try{let a=j(i,"utf-8"),r=H(a),m=r.name??e.name,c=r.description??"";n.push({name:m,description:c,roleName:s,roleId:l,path:i,rawFrontmatter:r})}catch{}}}catch{}return n}F();var O=new Set(["the","a","an","is","are","was","were","be","been","being","have","has","had","do","does","did","will","would","could","should","may","might","must","shall","can","need","dare","ought","used","to","of","in","for","on","with","at","by","from","as","into","through","during","before","after","above","below","between","under","again","further","then","once","here","there","when","where","why","how","all","each","few","more","most","other","some","such","no","nor","not","only","own","same","so","than","too","very","just","also","now","and","but","or","if","because","until","while","about","against","this","that","these","those","it","its"]);function S(l){return l.toLowerCase().replace(/[^a-z0-9\s]/g," ").split(/\s+/).filter(s=>s.length>1&&!O.has(s))}function g(l,s){if(s.length===0)return 0;let n=S(l),o=0;for(let t of s){n.includes(t)&&o++;for(let u of n)u.startsWith(t)&&u!==t&&(o+=.5)}return o}function D(l){let s=w(),n=new Map;if(l.length===0)return n;let o=l.map(()=>"?").join(","),t=s.prepare(`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{o as s,q as d}from"./chunk-
|
|
1
|
+
import{o as s,q as d}from"./chunk-ZEGZ2I35.js";import{c as l,e as u}from"./chunk-5M6IGE5G.js";d();u();function a(e){return{id:e.id,ruleId:e.rule_id??void 0,taskId:e.task_id??void 0,executionId:e.execution_id??void 0,status:e.status,target:JSON.parse(e.target),content:e.content,attempts:e.attempts,error:e.error??void 0,createdAt:e.created_at,deliveredAt:e.delivered_at??void 0,expiresAt:e.expires_at,source:e.source,messageType:e.message_type??void 0,traceId:e.trace_id??void 0}}var g=1440*60*1e3;function E(e){s().prepare(`
|
|
2
2
|
INSERT INTO delivery_log (id, rule_id, task_id, execution_id, status, target, content,
|
|
3
3
|
attempts, error, created_at, delivered_at, expires_at, source, message_type, trace_id)
|
|
4
4
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
import{d as V}from"./chunk-
|
|
1
|
+
import{d as V}from"./chunk-EXB2JIBR.js";import{b as L}from"./chunk-KO6UB6VW.js";import{b as N,p as ee}from"./chunk-3JTHJ3FZ.js";import{o as d,q as k}from"./chunk-ZEGZ2I35.js";import{c as F,h as Z}from"./chunk-EZLBMUQD.js";ee();k();k();function be(e){d().prepare(`
|
|
2
2
|
INSERT INTO audit_violations
|
|
3
3
|
(id, step_task_id, execution_id, role_id, contract_field, layer, severity, message, metadata_json, created_at)
|
|
4
4
|
VALUES
|
|
5
5
|
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
6
|
-
`).run(e.id,e.stepTaskId,e.executionId??null,e.roleId,e.contractField,e.layer,e.severity,e.message,e.metadata?JSON.stringify(e.metadata):null,e.createdAt)}function h(e){return{id:e.id,stepTaskId:e.step_task_id,executionId:e.execution_id??void 0,roleId:e.role_id,contractField:e.contract_field,layer:e.layer,severity:e.severity,message:e.message,metadata:e.metadata_json?JSON.parse(e.metadata_json):void 0,createdAt:e.created_at}}function D(e,s=50){return d().prepare("SELECT * FROM audit_violations WHERE role_id = ? ORDER BY created_at DESC LIMIT ?").all(e,s).map(h)}function H(e){return d().prepare("SELECT * FROM audit_violations WHERE step_task_id = ? ORDER BY created_at DESC").all(e).map(h)}function
|
|
6
|
+
`).run(e.id,e.stepTaskId,e.executionId??null,e.roleId,e.contractField,e.layer,e.severity,e.message,e.metadata?JSON.stringify(e.metadata):null,e.createdAt)}function h(e){return{id:e.id,stepTaskId:e.step_task_id,executionId:e.execution_id??void 0,roleId:e.role_id,contractField:e.contract_field,layer:e.layer,severity:e.severity,message:e.message,metadata:e.metadata_json?JSON.parse(e.metadata_json):void 0,createdAt:e.created_at}}function D(e,s=50){return d().prepare("SELECT * FROM audit_violations WHERE role_id = ? ORDER BY created_at DESC LIMIT ?").all(e,s).map(h)}function H(e){return d().prepare("SELECT * FROM audit_violations WHERE step_task_id = ? ORDER BY created_at DESC").all(e).map(h)}function ke(e){return d().prepare("SELECT * FROM audit_violations WHERE execution_id = ? ORDER BY created_at DESC").all(e).map(h)}function P(e){return{id:e.id,roleId:e.role_id,taskId:e.task_id,scores:JSON.parse(e.score_json),emaScore:e.ema_score,createdAt:e.created_at,taskType:e.task_type??void 0}}function W(e){d().prepare(`
|
|
7
7
|
INSERT INTO role_scores (id, role_id, task_id, task_type, score_json, ema_score, created_at)
|
|
8
8
|
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
9
|
-
`).run(e.id,e.roleId,e.taskId,e.taskType??null,JSON.stringify(e.scores),e.emaScore,e.createdAt)}function
|
|
9
|
+
`).run(e.id,e.roleId,e.taskId,e.taskType??null,JSON.stringify(e.scores),e.emaScore,e.createdAt)}function te(e,s=50){return d().prepare("SELECT * FROM role_scores WHERE role_id = ? ORDER BY created_at DESC LIMIT ?").all(e,s).map(P)}function U(e){return d().prepare("SELECT ema_score FROM role_scores WHERE role_id = ? ORDER BY created_at DESC LIMIT 1").get(e)?.ema_score}function B(e){let t=d().prepare(`
|
|
10
10
|
SELECT token_usage FROM tasks
|
|
11
11
|
WHERE role_id = ? AND status = 'completed' AND token_usage IS NOT NULL
|
|
12
12
|
ORDER BY completed_at DESC LIMIT 50
|
|
13
|
-
`).all(e);if(t.length===0)return 1e4;let n=t.map(r=>{let a=JSON.parse(r.token_usage);return(a.input??0)+(a.output??0)}).sort((r,a)=>r-a);return n[Math.floor(n.length/2)]}function
|
|
13
|
+
`).all(e);if(t.length===0)return 1e4;let n=t.map(r=>{let a=JSON.parse(r.token_usage);return(a.input??0)+(a.output??0)}).sort((r,a)=>r-a);return n[Math.floor(n.length/2)]}function Me(e){let t=d().prepare("SELECT * FROM role_scores WHERE role_id = ? ORDER BY created_at DESC LIMIT 1").get(e);return t?P(t):void 0}function he(e,s,t,n,r){let a=d(),o=a.prepare("SELECT id, role_id, score_json FROM role_scores WHERE task_id = ?").get(e);if(!o)return;let l=JSON.parse(o.score_json);l.intentFulfillment=s,l.intentFulfillmentFailed=t,l.weighted=n(l);let p=a.prepare("SELECT ema_score FROM role_scores WHERE role_id = ? AND created_at < (SELECT created_at FROM role_scores WHERE id = ?) ORDER BY created_at DESC LIMIT 1").get(o.role_id,o.id),u=p!==void 0?r*l.weighted+(1-r)*p.ema_score:l.weighted;return a.prepare("UPDATE role_scores SET score_json = ?, ema_score = ? WHERE id = ?").run(JSON.stringify(l),u,o.id),u}function De(e,s){let n=d().prepare(`
|
|
14
14
|
SELECT rs.score_json, t.cost_usd, t.completed_at, rs.created_at
|
|
15
15
|
FROM role_scores rs
|
|
16
16
|
JOIN tasks t ON t.id = rs.task_id
|
|
17
17
|
WHERE rs.role_id = ? AND rs.task_type = ?
|
|
18
18
|
ORDER BY rs.created_at DESC
|
|
19
|
-
`).all(e,s);if(n.length===0)return{totalTasks:0,successRate:0,avgCostUsd:0,lastAttempt:null};let r=n.length,o=n.filter(f=>JSON.parse(f.score_json).taskSuccess===1).length/r,p=n.map(f=>f.cost_usd??0).reduce((f,E)=>f+E,0)/r,u=n[0]?.created_at??null;return{totalTasks:r,successRate:o,avgCostUsd:p,lastAttempt:u}}function
|
|
19
|
+
`).all(e,s);if(n.length===0)return{totalTasks:0,successRate:0,avgCostUsd:0,lastAttempt:null};let r=n.length,o=n.filter(f=>JSON.parse(f.score_json).taskSuccess===1).length/r,p=n.map(f=>f.cost_usd??0).reduce((f,E)=>f+E,0)/r,u=n[0]?.created_at??null;return{totalTasks:r,successRate:o,avgCostUsd:p,lastAttempt:u}}function ve(e,s=50){let n=te(e,s).map(o=>o.scores.contractCompliance).filter(o=>o!=null);return n.length===0?{emaScore:null,recentViolations:D(e,10),contractsCheckedRowCount:0}:{emaScore:[...n].reverse().reduce((o,l,p)=>p===0?l:A*l+(1-A)*o,0),recentViolations:D(e,10),contractsCheckedRowCount:n.length}}Z();import{v4 as se}from"uuid";var ne=F("audit"),O={taskSuccess:.25,planAccuracy:.2,permissionCompliance:.2,efficiency:.15,intentFulfillment:.2},M={taskSuccess:.3,planAccuracy:.25,permissionCompliance:.25,efficiency:.2},A=.3;function re(e){return e.intentFulfillment===null||e.intentFulfillment===void 0?e.taskSuccess*M.taskSuccess+e.planAccuracy*M.planAccuracy+e.permissionCompliance*M.permissionCompliance+e.efficiency*M.efficiency:e.taskSuccess*O.taskSuccess+e.planAccuracy*O.planAccuracy+e.permissionCompliance*O.permissionCompliance+e.efficiency*O.efficiency+e.intentFulfillment*O.intentFulfillment}function oe(e,s){let t=N(e),n=t?.status==="completed"?1:0,r=1,a=V(e);a?.deviationReport&&(r=a.deviationReport.overallAccuracy);let o=1,l=L(e,1e3),p=l.filter(_=>_.type==="tool_result"||_.type==="permission_denied").length,u=l.filter(_=>_.type==="permission_denied").length;p>0&&(o=1-u/p);let f=1;if(t?.tokenUsage){let _=t.tokenUsage.input+t.tokenUsage.output,c=s?B(s):1e4;_>c&&(f=Math.max(0,1-(_-c)/c))}let E=re({taskSuccess:n,planAccuracy:r,permissionCompliance:o,efficiency:f,intentFulfillment:void 0}),T=t?.config?.outputContractCheckCount??0,I=null;if(T>0){let c=H(e).filter(i=>!(i.severity==="warning"&&i.layer==="C"));I=Math.max(0,Math.min(1,1-c.length/T))}return{taskSuccess:n,planAccuracy:r,permissionCompliance:o,efficiency:f,contractCompliance:I,contractsCheckedThisTask:T,weighted:E}}function We(e,s,t){let n=oe(s,e),r=U(e),a=r!==void 0?A*n.weighted+(1-A)*r:n.weighted;return W({id:se(),roleId:e,taskId:s,scores:n,emaScore:a,createdAt:Date.now(),taskType:t}),ne.debug({roleId:e,taskId:s,scores:{...n,weighted:n.weighted.toFixed(3)},ema:a.toFixed(3)},"Task score recorded"),a}k();function q(e){return{id:e.id,sourceSessionId:e.source_session_id??void 0,sourceMessageId:e.source_message_id??void 0,extractedAt:e.extracted_at,extractedByRoleId:e.extracted_by_role_id??void 0,content:e.content,summary:e.summary??void 0,status:e.status,tags:e.tags?JSON.parse(e.tags):void 0,evidenceQuote:e.evidence_quote??void 0,createdAt:e.created_at,updatedAt:e.updated_at}}var ie=`
|
|
20
20
|
INSERT INTO feature_requests
|
|
21
21
|
(id, source_session_id, source_message_id, extracted_at, extracted_by_role_id,
|
|
22
22
|
content, summary, status, tags, evidence_quote, created_at, updated_at)
|
|
23
23
|
VALUES
|
|
24
24
|
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
25
|
-
`.trim(),
|
|
25
|
+
`.trim(),ae=`
|
|
26
26
|
UPDATE feature_requests SET status = ?, updated_at = ? WHERE id = ?
|
|
27
|
-
`.trim();function J(e){d().prepare(
|
|
27
|
+
`.trim();function J(e){d().prepare(ie).run(e.id,e.sourceSessionId??null,e.sourceMessageId??null,e.extractedAt,e.extractedByRoleId??null,e.content,e.summary??null,e.status,e.tags?JSON.stringify(e.tags):null,e.evidenceQuote??null,e.createdAt,e.updatedAt)}function qe(e,s=100,t=0){let n=d();return(e?n.prepare("SELECT * FROM feature_requests WHERE status = ? ORDER BY extracted_at DESC LIMIT ? OFFSET ?").all(e,s,t):n.prepare("SELECT * FROM feature_requests ORDER BY extracted_at DESC LIMIT ? OFFSET ?").all(s,t)).map(q)}function Je(e){let t=d().prepare("SELECT * FROM feature_requests WHERE id = ?").get(e);return t?q(t):void 0}function je(e,s){d().prepare(ae).run(s,Date.now(),e)}k();function v(e){return{id:e.id,dimensionType:e.dimension_type,dimensionValue:e.dimension_value,count:e.count,roleIds:JSON.parse(e.role_ids),sampleEvidenceIds:JSON.parse(e.sample_evidence_ids),status:e.status,firstSeen:e.first_seen,lastSeen:e.last_seen,createdAt:e.created_at,updatedAt:e.updated_at}}var ce=`
|
|
28
28
|
INSERT INTO mistake_patterns
|
|
29
29
|
(id, dimension_type, dimension_value, count, role_ids, sample_evidence_ids,
|
|
30
30
|
status, first_seen, last_seen, created_at, updated_at)
|
|
31
31
|
VALUES
|
|
32
32
|
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
33
|
-
`.trim(),
|
|
33
|
+
`.trim(),de=`
|
|
34
34
|
UPDATE mistake_patterns SET status = ?, updated_at = ? WHERE id = ?
|
|
35
35
|
`.trim();function j(e){let s=d(),t=Date.now(),n=e.sampleEvidenceIds.slice(-10),r=s.prepare("SELECT * FROM mistake_patterns WHERE dimension_type = ? AND dimension_value = ?").get(e.dimensionType,e.dimensionValue);if(r){let o=JSON.parse(r.role_ids),l=Array.from(new Set([...o,...e.roleIds])),u=[...JSON.parse(r.sample_evidence_ids),...n].slice(-10);s.prepare(`
|
|
36
36
|
UPDATE mistake_patterns SET
|
|
@@ -40,7 +40,7 @@ import{d as V}from"./chunk-QJXV4SQE.js";import{b as L}from"./chunk-2JM3URDG.js";
|
|
|
40
40
|
last_seen = ?,
|
|
41
41
|
updated_at = ?
|
|
42
42
|
WHERE dimension_type = ? AND dimension_value = ?
|
|
43
|
-
`).run(JSON.stringify(l),JSON.stringify(u),e.lastSeen,t,e.dimensionType,e.dimensionValue)}else s.prepare(
|
|
43
|
+
`).run(JSON.stringify(l),JSON.stringify(u),e.lastSeen,t,e.dimensionType,e.dimensionValue)}else s.prepare(ce).run(`mp-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,e.dimensionType,e.dimensionValue,1,JSON.stringify(e.roleIds),JSON.stringify(n),"new",e.firstSeen,e.lastSeen,t,t);let a=s.prepare("SELECT * FROM mistake_patterns WHERE dimension_type = ? AND dimension_value = ?").get(e.dimensionType,e.dimensionValue);return v(a)}function Qe(e,s=100,t=0){let n=d();return(e?n.prepare("SELECT * FROM mistake_patterns WHERE status = ? ORDER BY last_seen DESC LIMIT ? OFFSET ?").all(e,s,t):n.prepare("SELECT * FROM mistake_patterns ORDER BY last_seen DESC LIMIT ? OFFSET ?").all(s,t)).map(v)}function ze(e){let t=d().prepare("SELECT * FROM mistake_patterns WHERE id = ?").get(e);return t?v(t):void 0}function Xe(e,s){d().prepare(de).run(s,Date.now(),e)}k();import{randomUUID as Y}from"crypto";function et(e,s){if(s.added.length===0&&s.modified.length===0&&s.deleted.length===0)return;let t=d(),n=t.prepare("INSERT INTO task_files (id, task_id, path, op, mtime_ns, size_bytes, inode, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");n.safeIntegers(!0);let r=Date.now();t.transaction(()=>{let a=(o,l)=>{n.run(Y(),e,o.path,l,o.mtime_ns,o.size,o.inode,r)};for(let o of s.added)a(o,"added");for(let o of s.modified)a(o,"modified");for(let o of s.deleted)n.run(Y(),e,o,"deleted",null,null,null,r)})()}function tt(e){let t=d().prepare("SELECT * FROM task_files WHERE task_id = ? ORDER BY created_at, path");return t.safeIntegers(!0),t.all(e)}import{createSdkMcpServer as le,tool as ue}from"@anthropic-ai/claude-agent-sdk";import{z as S}from"zod";import{v4 as me}from"uuid";var K={content:S.string().min(1).max(5e3),summary:S.string().max(500).optional(),tags:S.array(S.string().max(50)).max(10).optional(),evidenceQuote:S.string().max(1e3).optional(),sourceSessionId:S.string().optional(),sourceMessageId:S.string().optional()};function pe(e){return ue("record_feature_request","Record a feature request extracted from chat sessions. Call this once per distinct feature request found in the provided chat data. Do not fabricate \u2014 only record requests that appear verbatim or clearly in the chat content.",K,async s=>{let t=S.object(K).safeParse(s);if(!t.success)return{content:[{type:"text",text:JSON.stringify({ok:!1,error:t.error.message})}]};let n=t.data,r=Date.now(),a=me(),o={id:a,content:n.content,summary:n.summary,status:"new",tags:n.tags??[],evidenceQuote:n.evidenceQuote,sourceSessionId:n.sourceSessionId,sourceMessageId:n.sourceMessageId,extractedByRoleId:e,extractedAt:r,createdAt:r,updatedAt:r};try{J(o)}catch{return{content:[{type:"text",text:JSON.stringify({ok:!1,error:"failed to write feature request"})}]}}return{content:[{type:"text",text:JSON.stringify({success:!0,featureRequestId:a,summary:n.summary??n.content.slice(0,80)})}]}})}function Q(e){return le({name:"mining-tools",version:"1.0.0",tools:[pe(e)]})}import{createSdkMcpServer as _e,tool as ge}from"@anthropic-ai/claude-agent-sdk";import{z as x}from"zod";k();var C=.5,w=.3;function fe(e,s,t,n){let r=e<t,a=s<n;return r&&a?"both":r?"low_ema":"low_task"}function z(e={}){let{windowDays:s=14,dimensions:t=["event_type","score_degradation","tool_call_pattern"],minOccurrences:n=3,minRoles:r=2,scoreThresholdEma:a=C,scoreThresholdTask:o=w}=e,l=d(),p=Date.now()-s*864e5,u=new Map;if(t.includes("event_type")){let c=l.prepare(`
|
|
44
44
|
SELECT id, role_id, source, timestamp
|
|
45
45
|
FROM evolution_audit
|
|
46
46
|
WHERE timestamp >= ? AND source IN ('audit','monitor','admin','manual')
|
|
@@ -50,7 +50,7 @@ import{d as V}from"./chunk-QJXV4SQE.js";import{b as L}from"./chunk-2JM3URDG.js";
|
|
|
50
50
|
FROM role_scores
|
|
51
51
|
WHERE created_at >= ?
|
|
52
52
|
ORDER BY created_at ASC
|
|
53
|
-
`).all(p);for(let i of c){let g=i.ema_score;try{let b=JSON.parse(i.score_json);typeof b.weighted=="number"?g=b.weighted:typeof b.task=="number"?g=b.task:typeof b.score=="number"&&(g=b.score)}catch{}let R=
|
|
53
|
+
`).all(p);for(let i of c){let g=i.ema_score;try{let b=JSON.parse(i.score_json);typeof b.weighted=="number"?g=b.weighted:typeof b.task=="number"?g=b.task:typeof b.score=="number"&&(g=b.score)}catch{}let R=fe(i.ema_score,g,a,o),m=`score_degradation|${R}`;u.has(m)||u.set(m,{dimensionType:"score_degradation",dimensionValue:R,count:0,roleIds:new Set,evidenceIds:[],firstSeen:1/0,lastSeen:0});let y=u.get(m);y.count++,y.roleIds.add(i.role_id),y.evidenceIds.push({source:"role_scores",id:i.id}),i.created_at<y.firstSeen&&(y.firstSeen=i.created_at),i.created_at>y.lastSeen&&(y.lastSeen=i.created_at)}}if(t.includes("tool_call_pattern")){let c=l.prepare(`
|
|
54
54
|
SELECT dl.id, dl.task_id, dl.error, dl.created_at, t.role_id
|
|
55
55
|
FROM delivery_log dl
|
|
56
56
|
LEFT JOIN tasks t ON t.id = dl.task_id
|
|
@@ -58,4 +58,4 @@ import{d as V}from"./chunk-QJXV4SQE.js";import{b as L}from"./chunk-2JM3URDG.js";
|
|
|
58
58
|
AND dl.message_type = 'sandbox_violation'
|
|
59
59
|
AND dl.source = 'audit'
|
|
60
60
|
ORDER BY dl.created_at ASC
|
|
61
|
-
`).all(p);for(let i of c){let g=(i.error??"").slice(0,60),R=`tool_call_pattern|${g}`;u.has(R)||u.set(R,{dimensionType:"tool_call_pattern",dimensionValue:g,count:0,roleIds:new Set,evidenceIds:[],firstSeen:1/0,lastSeen:0});let m=u.get(R);m.count++,i.role_id&&m.roleIds.add(i.role_id),m.evidenceIds.push({source:"delivery_log",id:i.id}),i.created_at<m.firstSeen&&(m.firstSeen=i.created_at),i.created_at>m.lastSeen&&(m.lastSeen=i.created_at)}}let f={};for(let c of u.keys()){let[i]=c.split("|");f[i]=(f[i]??0)+1}let E=Array.from(u.values()).filter(c=>c.count>=n&&c.roleIds.size>=r),T=0,
|
|
61
|
+
`).all(p);for(let i of c){let g=(i.error??"").slice(0,60),R=`tool_call_pattern|${g}`;u.has(R)||u.set(R,{dimensionType:"tool_call_pattern",dimensionValue:g,count:0,roleIds:new Set,evidenceIds:[],firstSeen:1/0,lastSeen:0});let m=u.get(R);m.count++,i.role_id&&m.roleIds.add(i.role_id),m.evidenceIds.push({source:"delivery_log",id:i.id}),i.created_at<m.firstSeen&&(m.firstSeen=i.created_at),i.created_at>m.lastSeen&&(m.lastSeen=i.created_at)}}let f={};for(let c of u.keys()){let[i]=c.split("|");f[i]=(f[i]??0)+1}let E=Array.from(u.values()).filter(c=>c.count>=n&&c.roleIds.size>=r),T=0,I=l.transaction(()=>{for(let c of E)j({dimensionType:c.dimensionType,dimensionValue:c.dimensionValue,roleIds:Array.from(c.roleIds),sampleEvidenceIds:c.evidenceIds.slice(-10),firstSeen:c.firstSeen===1/0?Date.now():c.firstSeen,lastSeen:c.lastSeen}),T++});try{I()}catch(c){throw new Error(`aggregateMistakes: transaction failed: ${c}`)}let _=0;for(let c of u.values())_+=c.count;return{patternsUpserted:T,totalEventsScanned:_,dimensionCounts:f}}var X={windowDays:x.number().int().min(1).max(365).optional(),dimensions:x.enum(["event_type","score_degradation","tool_call_pattern"]).array().min(1).max(3).optional(),minOccurrences:x.number().int().min(1).max(100).optional(),minRoles:x.number().int().min(1).max(100).optional()};function Re(){return ge("aggregate_mistakes","Aggregate cross-role failure signals from the last N days into mistake patterns. Returns counts + dimensions; patterns are persisted to mistake_patterns for UI review. Notify-only: no role/permission/CAG mutation.",X,async e=>{let s=x.object(X).safeParse(e);if(!s.success)return{content:[{type:"text",text:JSON.stringify({ok:!1,error:s.error.message})}]};let t=s.data,n={windowDays:t.windowDays??14,dimensions:t.dimensions??["event_type","score_degradation","tool_call_pattern"],minOccurrences:t.minOccurrences??3,minRoles:t.minRoles??2,scoreThresholdEma:C,scoreThresholdTask:w};try{let r=z(n);return{content:[{type:"text",text:JSON.stringify({ok:!0,...r})}]}}catch(r){return{content:[{type:"text",text:JSON.stringify({ok:!1,error:String(r)})}]}}})}var Se="audit-tools";function $(){return _e({name:Se,version:"1.0.0",tools:[Re()]})}var ye=new Set(["mcp__execution-tools__","mcp__mining-tools__","mcp__audit-tools__"]);function St(e){if(!e)return!1;for(let s of ye)if(e.startsWith(s))return!0;return!1}var G=new Set(["mcp__claude_ai_"]);function Ee(e){if(!e)return!1;for(let s of G)if(e.startsWith(s))return!0;return!1}function yt(e){return(e??[]).some(t=>Ee(t))?[]:Array.from(G).map(t=>`${t}*`)}function Et(e){return e.presetId==="feature-miner"?{"mining-tools":Q(e.id)}:e.presetId==="mistake-digester"?{"audit-tools":$()}:{}}function bt(e,s){let t=e.toLowerCase(),n=e;return/\b401\b/.test(t)||/unauthorized/i.test(t)||/invalid.*(?:api.?)?key/i.test(t)||/auth.*fail/i.test(t)||/invalid.*token/i.test(t)||s?.httpStatus===401?{category:"AUTH",originalError:n,retryable:!1,userAction:"Update the API key or credentials in the Role configuration",sameRoleRetry:!1,differentRoleHelp:!1}:/\b429\b/.test(t)||/rate.?limit/i.test(t)||/too many requests/i.test(t)||/quota.?exhaust/i.test(t)||/rate.?limit.?exceed/i.test(t)||/too.?many.?calls/i.test(t)?{category:"RATE_LIMIT",originalError:n,retryable:!0,userAction:"Wait before retrying, or increase the rate limit quota",sameRoleRetry:!0,differentRoleHelp:!1}:/econnrefused/i.test(t)||/enotfound/i.test(t)||/dns/i.test(t)||/connection.?refused/i.test(t)||/connection.?reset/i.test(t)||/connection.?timed? ?out/i.test(t)||/fetch.?failed/i.test(t)||/network.?error/i.test(t)||/socket.?hang.?up/i.test(t)||/etimedout/i.test(t)?{category:"NETWORK",originalError:n,retryable:!0,userAction:"Check network connectivity and that the target service is reachable",sameRoleRetry:!0,differentRoleHelp:!1}:/prompt is too long/i.test(t)||/context.*exceed/i.test(t)||/context.*window/i.test(t)||/too many tokens/i.test(t)||/max.?tokens/i.test(t)||/token.?limit/i.test(t)?{category:"CONTEXT_OVERFLOW",originalError:n,retryable:!1,userAction:"Shorten the task prompt or simplify the request",sameRoleRetry:!1,differentRoleHelp:!1}:s?.sandboxViolation||/sandbox/i.test(t)||/not allowed.*sandbox/i.test(t)||/sandbox.*deny/i.test(t)||/operation.*denied.*sandbox/i.test(t)?{category:"SANDBOX_VIOLATION",originalError:n,retryable:!1,userAction:"Grant filesystem access in Role settings, or run without sandbox",sameRoleRetry:!1,differentRoleHelp:!0}:/tool.*not found/i.test(t)||/command not found/i.test(t)||/enoent/i.test(t)||/no such file/i.test(t)||/mcp.*error.*tool/i.test(t)||/tool.*blocked/i.test(t)||s?.toolName&&/not.*found/.test(t)&&/tool/.test(t)?{category:"TOOL_UNAVAILABLE",originalError:n,retryable:!1,userAction:"Install the required tool or plugin, or add it to the Role's allowed tools",sameRoleRetry:!1,differentRoleHelp:!0}:/timeout/i.test(t)||/timed out/i.test(t)||/exceeded.*seconds/i.test(t)?{category:"TIMEOUT",originalError:n,retryable:!0,userAction:"Increase the task timeout or simplify the task",sameRoleRetry:!0,differentRoleHelp:!1}:/invalid.*url/i.test(t)||/bad request/i.test(t)||/400\b/.test(t)||/wrong.*method/i.test(t)||/invalid.*param/i.test(t)||/missing.*param/i.test(t)?{category:"MALFORMED_REQUEST",originalError:n,retryable:!1,userAction:"Fix the task parameters and retry",sameRoleRetry:!1,differentRoleHelp:!1}:/internal.*error/i.test(t)||/unexpected.*error/i.test(t)||/500\b/.test(t)||/503\b/.test(t)?{category:"INTERNAL_ERROR",originalError:n,retryable:!0,userAction:"The service had an internal error. Retry may succeed.",sameRoleRetry:!0,differentRoleHelp:!1}:{category:"UNKNOWN",originalError:n,retryable:!1,userAction:void 0,sameRoleRetry:!1,differentRoleHelp:!1}}export{be as a,ke as b,A as c,re as d,We as e,te as f,U as g,Me as h,he as i,De as j,ve as k,J as l,qe as m,Je as n,je as o,Qe as p,ze as q,Xe as r,ye as s,St as t,Ee as u,yt as v,Et as w,bt as x,et as y,tt as z};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{k as D}from"./chunk-
|
|
1
|
+
import{k as D}from"./chunk-VVPB3TD4.js";import{c as L,p as K}from"./chunk-3JTHJ3FZ.js";import{a as M,e as E}from"./chunk-3MROEPGR.js";import{o as y,q as W}from"./chunk-ZEGZ2I35.js";import{c as b,h as w}from"./chunk-EZLBMUQD.js";W();function N(m){if(m.length===0)return;let s=y(),e=s.prepare(`
|
|
2
2
|
INSERT OR IGNORE INTO llm_costs
|
|
3
3
|
(id, call_id, source, model, role_id, task_id, session_id, message_id,
|
|
4
4
|
input_tokens, output_tokens, cache_read_tokens, cache_creation_tokens,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import{d as D}from"./chunk-
|
|
1
|
+
import{d as D}from"./chunk-YGZQMZTA.js";import{a as b}from"./chunk-4N5G7ND2.js";import{f as v}from"./chunk-VVPB3TD4.js";import{j as O}from"./chunk-R3MSLP6P.js";import{a as S,b as P,c,d as I,e as w,f as C,g as M}from"./chunk-PU2T7HBY.js";import{b as y}from"./chunk-YI2QQTZE.js";import{b as R}from"./chunk-X3PJNX2R.js";import{s as k}from"./chunk-G5I76LX2.js";import{a as f}from"./chunk-L7JP7DUO.js";import{b as h,p as B}from"./chunk-3JTHJ3FZ.js";import{c as x}from"./chunk-XEXSXMWK.js";import{o as d,q as j}from"./chunk-ZEGZ2I35.js";import{c as E,h as N}from"./chunk-EZLBMUQD.js";j();function L(i){return{id:i.id,eventType:i.event_type,matchCriteria:JSON.parse(i.match_criteria),target:JSON.parse(i.target),formatTemplate:i.format_template??void 0,maxPerMinute:i.max_per_minute,skipOriginChannel:i.skip_origin_channel===1,enabled:i.enabled===1,createdAt:i.created_at,createdBy:i.created_by??void 0}}function q(i){d().prepare(`
|
|
2
2
|
INSERT INTO delivery_rules (id, event_type, match_criteria, target, format_template,
|
|
3
3
|
max_per_minute, skip_origin_channel, enabled, created_at, created_by)
|
|
4
4
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
5
|
-
`).run(i.id,i.eventType,JSON.stringify(i.matchCriteria),JSON.stringify(i.target),i.formatTemplate??null,i.maxPerMinute,i.skipOriginChannel?1:0,i.enabled?1:0,i.createdAt,i.createdBy??null)}function H(i){let n=d().prepare("SELECT * FROM delivery_rules WHERE id = ?").get(i);return n?L(n):void 0}function W(i){let e=d(),n="SELECT * FROM delivery_rules",r=[];return i!==void 0&&(n+=" WHERE enabled = ?",r.push(i?1:0)),n+=" ORDER BY created_at DESC",e.prepare(n).all(...r).map(L)}function U(i,e){let n=d(),r=[],t=[];e.eventType!==void 0&&(r.push("event_type = ?"),t.push(e.eventType)),e.matchCriteria!==void 0&&(r.push("match_criteria = ?"),t.push(JSON.stringify(e.matchCriteria))),e.target!==void 0&&(r.push("target = ?"),t.push(JSON.stringify(e.target))),e.formatTemplate!==void 0&&(r.push("format_template = ?"),t.push(e.formatTemplate)),e.maxPerMinute!==void 0&&(r.push("max_per_minute = ?"),t.push(e.maxPerMinute)),e.skipOriginChannel!==void 0&&(r.push("skip_origin_channel = ?"),t.push(e.skipOriginChannel?1:0)),e.enabled!==void 0&&(r.push("enabled = ?"),t.push(e.enabled?1:0)),r.length!==0&&(t.push(i),n.prepare(`UPDATE delivery_rules SET ${r.join(", ")} WHERE id = ?`).run(...t))}function G(i){let e=d();e.prepare("DELETE FROM delivery_log WHERE rule_id = ?").run(i),e.prepare("DELETE FROM delivery_rules WHERE id = ?").run(i)}function A(i,e){return W(!0).filter(r=>{if(r.eventType!=="*"&&r.eventType!==i)return!1;let t=r.matchCriteria;if(t.templateId&&t.templateId!==e.templateId||t.roleId&&t.roleId!==e.roleId||t.taskStatus&&t.taskStatus!==e.taskStatus)return!1;if(t.promptPattern)try{if(!new RegExp(t.promptPattern,"i").test(e.prompt??""))return!1}catch{return!1}if(t.excludePromptPatterns&&t.excludePromptPatterns.length>0){let a=e.prompt??"";for(let s of t.excludePromptPatterns)if(!(typeof s!="string"||s.length>200))try{if(new RegExp(s,"i").test(a))return!1}catch{continue}}return!0})}B();N();import{v4 as J}from"uuid";function F(i){return!!(i.templateId&&i.stepId&&i.parentId)}var l=E("admin"),_=new Map,m=null,g=null,u=null,T=class{constructor(){f.on("task_status_change",e=>{(e.newStatus==="completed"||e.newStatus==="failed")&&this.handleTaskStatusChange(e.taskId,e.newStatus).catch(n=>{l.error({taskId:e.taskId,error:n},"Delivery processing failed")})}),f.on("plan_approval_request",e=>{this.handlePlanApprovalRequest(e.taskId,e.planId,e.plan).catch(n=>{l.error({taskId:e.taskId,error:n},"Delivery processing failed (plan_approval)")})}),f.on("template_execution_status_change",e=>{e.status==="failed"&&this.handleTemplateExecutionFailure(e.executionId,e.templateId).catch(n=>{l.error({executionId:e.executionId,error:n},"Template failure delivery processing failed")})}),l.info("DeliveryEngine initialized")}async handlePlanApprovalRequest(e,n,r){let t=h(e),a=this.getSourceChannelForTask(e);if(a){let o=D(r),{sendApprovalToChannel:p}=await import("./approval-handler-
|
|
5
|
+
`).run(i.id,i.eventType,JSON.stringify(i.matchCriteria),JSON.stringify(i.target),i.formatTemplate??null,i.maxPerMinute,i.skipOriginChannel?1:0,i.enabled?1:0,i.createdAt,i.createdBy??null)}function H(i){let n=d().prepare("SELECT * FROM delivery_rules WHERE id = ?").get(i);return n?L(n):void 0}function W(i){let e=d(),n="SELECT * FROM delivery_rules",r=[];return i!==void 0&&(n+=" WHERE enabled = ?",r.push(i?1:0)),n+=" ORDER BY created_at DESC",e.prepare(n).all(...r).map(L)}function U(i,e){let n=d(),r=[],t=[];e.eventType!==void 0&&(r.push("event_type = ?"),t.push(e.eventType)),e.matchCriteria!==void 0&&(r.push("match_criteria = ?"),t.push(JSON.stringify(e.matchCriteria))),e.target!==void 0&&(r.push("target = ?"),t.push(JSON.stringify(e.target))),e.formatTemplate!==void 0&&(r.push("format_template = ?"),t.push(e.formatTemplate)),e.maxPerMinute!==void 0&&(r.push("max_per_minute = ?"),t.push(e.maxPerMinute)),e.skipOriginChannel!==void 0&&(r.push("skip_origin_channel = ?"),t.push(e.skipOriginChannel?1:0)),e.enabled!==void 0&&(r.push("enabled = ?"),t.push(e.enabled?1:0)),r.length!==0&&(t.push(i),n.prepare(`UPDATE delivery_rules SET ${r.join(", ")} WHERE id = ?`).run(...t))}function G(i){let e=d();e.prepare("DELETE FROM delivery_log WHERE rule_id = ?").run(i),e.prepare("DELETE FROM delivery_rules WHERE id = ?").run(i)}function A(i,e){return W(!0).filter(r=>{if(r.eventType!=="*"&&r.eventType!==i)return!1;let t=r.matchCriteria;if(t.templateId&&t.templateId!==e.templateId||t.roleId&&t.roleId!==e.roleId||t.taskStatus&&t.taskStatus!==e.taskStatus)return!1;if(t.promptPattern)try{if(!new RegExp(t.promptPattern,"i").test(e.prompt??""))return!1}catch{return!1}if(t.excludePromptPatterns&&t.excludePromptPatterns.length>0){let a=e.prompt??"";for(let s of t.excludePromptPatterns)if(!(typeof s!="string"||s.length>200))try{if(new RegExp(s,"i").test(a))return!1}catch{continue}}return!0})}B();N();import{v4 as J}from"uuid";function F(i){return!!(i.templateId&&i.stepId&&i.parentId)}var l=E("admin"),_=new Map,m=null,g=null,u=null,T=class{constructor(){f.on("task_status_change",e=>{(e.newStatus==="completed"||e.newStatus==="failed")&&this.handleTaskStatusChange(e.taskId,e.newStatus).catch(n=>{l.error({taskId:e.taskId,error:n},"Delivery processing failed")})}),f.on("plan_approval_request",e=>{this.handlePlanApprovalRequest(e.taskId,e.planId,e.plan).catch(n=>{l.error({taskId:e.taskId,error:n},"Delivery processing failed (plan_approval)")})}),f.on("template_execution_status_change",e=>{e.status==="failed"&&this.handleTemplateExecutionFailure(e.executionId,e.templateId).catch(n=>{l.error({executionId:e.executionId,error:n},"Template failure delivery processing failed")})}),l.info("DeliveryEngine initialized")}async handlePlanApprovalRequest(e,n,r){let t=h(e),a=this.getSourceChannelForTask(e);if(a){let o=D(r),{sendApprovalToChannel:p}=await import("./approval-handler-GXIVBJ4Z.js");await p(a.channelId,a.chatId,n,e,o)}let s=D(r)+`
|
|
6
6
|
|
|
7
7
|
Task: ${e}`;await this.matchAndDeliver("plan_approval_request",{templateId:t?.templateId,roleId:t?.roleId,prompt:t?.prompt,taskStatus:"pending"},s,e)}async handleTemplateExecutionFailure(e,n){let r=R(e),t=n?k(n):null,a=r?Object.entries(r.stepStatuses).filter(([,o])=>o.status==="failed"):[],s=["\u26A0\uFE0F TemplateExecution failed",`Template: ${t?.name??n}`,`Execution: ${e}`,`Failed steps: ${a.map(([o])=>o).join(", ")||"(unknown \u2014 no failed step recorded)"}`,a[0]?.[1]?.error?`
|
|
8
8
|
First error: ${a[0][1].error.slice(0,300)}`:""].filter(Boolean).join(`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{g}from"./chunk-
|
|
1
|
+
import{g}from"./chunk-LE5YRP37.js";import{f as T,i as K}from"./chunk-6NIWU43Z.js";import{r as _,t as E,u as f}from"./chunk-G5I76LX2.js";import{C as R,D as A,E as c,F as x,G as C,L as z}from"./chunk-3JTHJ3FZ.js";import{b as U,c as Y,d as H}from"./chunk-5PELJRUQ.js";var L={};Y(L,{seedAdamAutomatorSkills:()=>J});async function J(t){let{ensureRoleWorkspace:r}=await import("./role-workspace-AOYIGLG4.js"),{getRole:e}=await import("./roles-5TWJBGAQ.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
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{b as K,c as A,d as L}from"./chunk-
|
|
1
|
+
import{b as K,c as A,d as L}from"./chunk-PU2T7HBY.js";import{a as te,e as re,g as ne}from"./chunk-5ZL6RHPE.js";import{a as N,d as be}from"./chunk-NX3CIEZA.js";import{b as X,h as Q,i as Z}from"./chunk-X3PJNX2R.js";import{s as G}from"./chunk-G5I76LX2.js";import{a as w}from"./chunk-L7JP7DUO.js";import{c as R,h as ee}from"./chunk-XEXSXMWK.js";import{e as Y,s as ve}from"./chunk-6GVYOHD5.js";import{o as D,q as _e}from"./chunk-ZEGZ2I35.js";import{c as q,h as Ie}from"./chunk-EZLBMUQD.js";import{c as O,e as J}from"./chunk-5M6IGE5G.js";import{existsSync as Ue}from"fs";import{createHash as Ve}from"crypto";import{isAbsolute as Pe}from"path";be();_e();J();import{v4 as Te}from"uuid";function oe(e){return{id:e.id,eventKey:e.event_key,sourceType:e.source_type,sourceId:e.source_id,taskId:e.task_id??void 0,templateId:e.template_id??void 0,templateName:e.template_name??void 0,messageType:e.message_type,viewerKey:e.viewer_key,title:e.title??void 0,contentPreview:e.content_preview,attachments:C(e.attachments_json),targets:C(e.targets_json),firstDeliveredAt:e.first_delivered_at,lastDeliveredAt:e.last_delivered_at,createdAt:e.created_at,traceId:e.trace_id??void 0}}function C(e){try{let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}}function de(e){if(!e.viewerKey||e.viewerKey.trim().length===0)throw new Error("recordUserVisibleDeliveryEvent requires viewerKey");if(!e.eventKey||e.eventKey.trim().length===0)throw new Error("recordUserVisibleDeliveryEvent requires eventKey");if(!e.sourceId||e.sourceId.trim().length===0)throw new Error("recordUserVisibleDeliveryEvent requires sourceId");let t=D(),r=Date.now(),n=e.deliveredAt??r,a=t.prepare("SELECT * FROM user_visible_events WHERE event_key = ?").get(e.eventKey);if(!a){let d=Te();return t.prepare(`
|
|
2
2
|
INSERT INTO user_visible_events (
|
|
3
3
|
id, event_key, source_type, source_id, task_id, template_id, template_name,
|
|
4
4
|
message_type, viewer_key, title, content_preview, attachments_json,
|
|
@@ -29,4 +29,4 @@ import{b as K,c as A,d as L}from"./chunk-DRS5NOAA.js";import{a as te,e as re,g a
|
|
|
29
29
|
\u26A0\uFE0F \u56E0 ${n} \u90AE\u7BB1 ${a}MB \u4E0A\u9650\uFF0C\u4EE5\u4E0B\u4EA7\u7269\u672A\u9644\uFF1A
|
|
30
30
|
${i.join(`
|
|
31
31
|
`)}
|
|
32
|
-
`}function Se(e){return e<1024?`${e} bytes`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(2)} MB`}var F=class extends Error{constructor(r,n,a,i,o){super(`OutboundFirstAttachmentExceedsCap: artifactKey=${r} sizeBytes=${n} effectiveSizeBytes=${a} capBytes=${i} recipientDomain=${o}`);this.artifactKey=r;this.sizeBytes=n;this.effectiveSizeBytes=a;this.capBytes=i;this.recipientDomain=o;this.name="OutboundFirstAttachmentExceedsCap"}artifactKey;sizeBytes;effectiveSizeBytes;capBytes;recipientDomain};function De(e){if(!e)return"";let t=e.lastIndexOf("@");return t<0||t===e.length-1?"":e.slice(t+1).toLowerCase().trim()}function Re(e,t){return t.find(r=>r.id===e)?.key??e}function Ce(e,t){return t.find(r=>r.artifactId===e)?.filename??e}function fe(e,t,r,n,a){let i=De(t),o=ee(e,i),d=r.map(l=>({id:l.id,sizeBytes:l.sizeBytes??0,priority:l.priority??void 0,mime:l.mime??void 0})),s=me(d,o);if("firstItemOverflow"in s){let l=s.firstItemOverflow,h=Re(l.id,r);return{ok:!1,error:new F(h,l.sizeBytes,Math.floor(l.sizeBytes*x),o,i).message}}let g=new Set(s.included.map(l=>l.id)),y=n.filter(l=>l.artifactId&&g.has(l.artifactId)),_=a;if(s.dropped.length>0){let l=s.dropped.map(h=>({filename:Ce(h.id,n),sizeBytes:h.sizeBytes}));_=pe(a,l,o,i)}return{ok:!0,result:{perTargetAttachments:y,perTargetContent:_}}}var E=q("adam"),z=class{_dedupCache=new Map;_rateLimitWindows=new Map;_recentlySentIds=new Set;_laneTails=new Map;async _acquireLane(t,r){let n=`${t}:${r}`,a=this._laneTails.get(n)??Promise.resolve(),i,o=new Promise(d=>{i=d});return this._laneTails.set(n,o),o.then(()=>{this._laneTails.get(n)===o&&this._laneTails.delete(n)}),await a,i}isRecentlySent(t){return this._recentlySentIds.has(t)}async send(t){let{taskId:r,channelId:n,chatId:a,content:i,messageType:o,platform:d,webhookUrl:s,replyMarkup:g,replyToMessageId:y,quoteExcerpt:_,quoteTitle:l,mediaUrl:h,mediaType:k,attachments:S,dedupDiscriminator:W}=t,I=ge(o),ye=I!=="reply"&&!!r,u;if(ye){u=`${r}:${n??"none"}:${a??"none"}:${I}${W?`:${W}`:""}`;let f=this._dedupCache.get(u);if(f&&Date.now()-f.timestamp<300*1e3)return E.debug({dedupKey:u},"Dedup hit, returning cached log entry"),{success:!0,logEntryId:f.logEntryId}}if(n){let f=Date.now(),v=6e4,p=this._rateLimitWindows.get(n);p||(p=[],this._rateLimitWindows.set(n,p));let P=f-v;for(;p.length>0&&p[0]<P;)p.shift();if(p.length>=60){let M=B();E.warn({channelId:n,count:p.length},"Rate limited, not sending");let b={type:"channel",channelId:n,chatId:a??""};return this._writeOutboundReceipt(t,b,i,"failure"),{success:!1,logEntryId:M,error:"rate_limited"}}p.push(f)}let he=d??(n?R(n)?.platform:void 0)??"unknown",H=s?i:te(i,he,r),c=B(),m={id:c,ruleId:void 0,taskId:r??void 0,status:"pending",target:n&&a?{type:"channel",channelId:n,chatId:a}:s?{type:"webhook",webhookUrl:s}:{type:"channel",channelId:n??"",chatId:a??""},content:H,attempts:0,createdAt:Date.now(),expiresAt:Date.now()+1440*60*1e3,source:"direct",messageType:I};K(m),u&&this._dedupCache.set(u,{logEntryId:c,timestamp:Date.now()});try{let f=je(h);if(f)return A(c,"failed",f),u&&this._dedupCache.delete(u),w.emit({type:"delivery_status_change",logEntryId:c,taskId:r,target:m.target,status:"failed",error:f,messageType:I}),this._writeOutboundReceipt(t,m.target,i,"failure"),{success:!1,logEntryId:c,error:f};if(s){let v=await fetch(s,{method:"POST",body:JSON.stringify({result:i,taskId:r,timestamp:new Date().toISOString()}),signal:AbortSignal.timeout(1e4)});if(v.ok)return L(c),this._recordDeliveryLedgerAfterSuccess(t,m.target,I,i),w.emit({type:"delivery_status_change",logEntryId:c,taskId:r,target:m.target,status:"delivered",messageType:I}),{success:!0,logEntryId:c};{let p=`Webhook returned ${v.status}`;return A(c,"failed",p),u&&this._dedupCache.delete(u),w.emit({type:"delivery_status_change",logEntryId:c,taskId:r,target:m.target,status:"failed",error:p,messageType:I}),{success:!1,logEntryId:c,error:p}}}else if(n&&a){let{getChannelManager:v}=await Be(),p=v();if(!p){let T="ChannelManager not available";return A(c,"failed",T),u&&this._dedupCache.delete(u),w.emit({type:"delivery_status_change",logEntryId:c,taskId:r,target:m.target,status:"failed",error:T,messageType:I}),this._writeOutboundReceipt(t,m.target,i,"failure"),{success:!1,logEntryId:c,error:T}}let P={content:H,messageType:I,...g?{replyMarkup:g}:{},...y?{replyToMessageId:y}:{},..._?{quoteExcerpt:_}:{},...l?{quoteTitle:l}:{},...h?{mediaUrl:h}:{},...k?{mediaType:k}:{},...S?{attachments:S}:{}},M=await this._acquireLane(n,a),b;try{b=await p.sendMessage(n,a,P)}finally{M()}if(b===null){let T="Channel adapter send failed (returned null)";return A(c,"failed",T),u&&this._dedupCache.delete(u),w.emit({type:"delivery_status_change",logEntryId:c,taskId:r,target:m.target,status:"failed",error:T,messageType:I}),this._writeOutboundReceipt(t,m.target,i,"failure"),{success:!1,logEntryId:c,error:T}}if(b&&(this._recentlySentIds.add(b),setTimeout(()=>this._recentlySentIds.delete(b),300*1e3)),b?.startsWith("queued-")){let T="queued_not_delivered";return u&&this._dedupCache.delete(u),w.emit({type:"delivery_status_change",logEntryId:c,taskId:r,target:m.target,status:"pending",error:T,messageType:I}),{success:!1,messageId:b,logEntryId:c,error:T}}return L(c),this._recordDeliveryLedgerAfterSuccess(t,m.target,I,i),this._writeOutboundReceipt(t,m.target,i,"success"),w.emit({type:"delivery_status_change",logEntryId:c,taskId:r,target:m.target,status:"delivered",messageType:I}),{success:!0,messageId:b??void 0,logEntryId:c}}else{let v="No channelId/chatId or webhookUrl provided";return A(c,"failed",v),u&&this._dedupCache.delete(u),{success:!1,logEntryId:c,error:v}}}catch(f){let v=f instanceof Error?f.message:String(f);return A(c,"failed",v),u&&this._dedupCache.delete(u),w.emit({type:"delivery_status_change",logEntryId:c,taskId:r,target:m.target,status:"failed",error:v,messageType:I}),this._writeOutboundReceipt(t,m.target,i,"failure"),{success:!1,logEntryId:c,error:v}}}_writeOutboundReceipt(t,r,n,a){if(r.type!=="channel"||!r.channelId)return;let i=O();if(!i){E.debug({taskId:t.taskId,channelId:r.channelId,outcome:a},"Outbound receipt skipped: no active trace context");return}let o=(t.attachments??[]).map(s=>s.artifactId).filter(s=>typeof s=="string"&&s.length>0),d=t.actorToolName??"OutboundGateway.send";try{Z({traceId:i,taskId:t.taskId,sessionId:t.sessionId,effectCategory:"outbound_message",verb:"send",entityType:"channel_message",target:{channelId:r.channelId,chatId:r.chatId,platform:t.platform},payload:{textChars:n.length,attachmentCount:t.attachments?.length??0,attachmentRefs:o.length>0?o:void 0},actor:{traceId:i,toolName:d,taskId:t.taskId},outcome:a})}catch(s){s instanceof Q?E.warn({errors:s.errors,taskId:t.taskId,channelId:r.channelId},"Outbound receipt validation failed"):E.warn({error:s instanceof Error?s.message:String(s),taskId:t.taskId},"Outbound receipt write failed")}}async redeliverExecutionTo(t){let r=t.includeArtifacts??!0,n=t.messageType??"result_delivery",a=t.dedupDiscriminator??`redelivery:${Date.now()}`,i=r?t.fileArtifacts??le(t.executionId):[],o=t.attachments??(i.length>0?ue(i):void 0),d=[];for(let s of t.targets){let g=R(s.channelId);if(!g){d.push({target:{channelId:s.channelId,chatId:s.chatId},deliveryLogId:"",status:"failed",attachmentCount:0,error:`Channel not found: ${s.channelId}`});continue}let y=o,_=t.content;if(g.platform==="email"&&o&&o.length>0){let h=fe(s.channelId,s.chatId,i,o,t.content);if(!h.ok){let k=B(),S={type:"channel",channelId:s.channelId,chatId:s.chatId??""};K({id:k,ruleId:void 0,taskId:t.executionId,status:"pending",target:S,content:t.content,attempts:0,createdAt:Date.now(),expiresAt:Date.now()+1440*60*1e3,source:"direct",messageType:ge(n)}),A(k,"failed",h.error),d.push({target:{channelId:s.channelId,chatId:s.chatId},deliveryLogId:k,status:"failed",attachmentCount:0,error:h.error});continue}y=h.result.perTargetAttachments,_=h.result.perTargetContent}let l=await this.send({taskId:t.executionId,sessionId:t.sessionId,channelId:s.channelId,chatId:s.chatId,content:_,messageType:n,platform:g.platform,attachments:y,dedupDiscriminator:a,actorToolName:t.actorToolName});d.push({target:{channelId:s.channelId,chatId:s.chatId},deliveryLogId:l.logEntryId,status:l.success?"delivered":"failed",attachmentCount:y?.length??0,...l.error?{error:l.error}:{}})}return{deliveries:d}}_recordDeliveryLedgerAfterSuccess(t,r,n,a){if(Me(n,t.taskId))try{let i=Ke(t,r);if(!i){N({source:"delivery_ledger",severity:"warning",sourceId:t.taskId,message:`Skipped user-visible delivery ledger write for ${n}: viewer identity unresolved`});return}let o=Le(t.taskId),d=Fe(a);de({eventKey:`${i}|${o.sourceId}|${n}|${d}`,sourceType:o.sourceType,sourceId:o.sourceId,taskId:t.taskId,templateId:o.templateId,templateName:o.templateName,messageType:n,viewerKey:i,title:o.templateName,contentPreview:a,attachments:(t.attachments??[]).map(Ne),targets:[$e(r)]})}catch(i){let o=i instanceof Error?i.message:String(i);E.warn({error:o,taskId:t.taskId,messageType:n},"User-visible delivery ledger write failed");try{N({source:"delivery_ledger",severity:"error",sourceId:t.taskId,message:o})}catch{}}}};function Me(e,t){return t?!["reply","assistant_text","user_message","approval","approval_prompt"].includes(e):!1}function Ke(e,t){if(e.viewerKey)return e.viewerKey;if(t.type==="channel"&&t.channelId)return re({type:"channel",channelId:t.channelId,chatId:t.chatId})}function Le(e){let t=X(e);if(!t)return{sourceType:"task",sourceId:e};let r=G(t.templateId);return{sourceType:"template_execution",sourceId:t.id,templateId:t.templateId,templateName:r?.name}}function Ne(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 $e(e){if(e.type==="webhook")return{type:"webhook",webhookUrl:e.webhookUrl};let t=e.channelId?R(e.channelId):void 0;return{type:"channel",channelId:e.channelId,chatId:e.chatId,label:t?.name}}function Fe(e){return Ve("sha256").update(e).digest("hex")}var V=null;function Be(){return V||(V=import("./channels-IDBWHLLE.js")),V}function Dt(){V=null}function je(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(!Pe(t))return"mediaUrl must be absolute";if(!Ue(t))return"mediaUrl file does not exist"}function ge(e){return e==="report"?"status_report":e==="deliver"?"result_delivery":e}var j=null;function ze(){return j||(j=new z),j}function Rt(e){return ze().isRecentlySent(e)}export{Je as a,le as b,tt as c,rt as d,Ee as e,Oe as f,xe as g,z as h,Dt as i,ze as j,Rt as k};
|
|
32
|
+
`}function Se(e){return e<1024?`${e} bytes`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(2)} MB`}var F=class extends Error{constructor(r,n,a,i,o){super(`OutboundFirstAttachmentExceedsCap: artifactKey=${r} sizeBytes=${n} effectiveSizeBytes=${a} capBytes=${i} recipientDomain=${o}`);this.artifactKey=r;this.sizeBytes=n;this.effectiveSizeBytes=a;this.capBytes=i;this.recipientDomain=o;this.name="OutboundFirstAttachmentExceedsCap"}artifactKey;sizeBytes;effectiveSizeBytes;capBytes;recipientDomain};function De(e){if(!e)return"";let t=e.lastIndexOf("@");return t<0||t===e.length-1?"":e.slice(t+1).toLowerCase().trim()}function Re(e,t){return t.find(r=>r.id===e)?.key??e}function Ce(e,t){return t.find(r=>r.artifactId===e)?.filename??e}function fe(e,t,r,n,a){let i=De(t),o=ee(e,i),d=r.map(l=>({id:l.id,sizeBytes:l.sizeBytes??0,priority:l.priority??void 0,mime:l.mime??void 0})),s=me(d,o);if("firstItemOverflow"in s){let l=s.firstItemOverflow,h=Re(l.id,r);return{ok:!1,error:new F(h,l.sizeBytes,Math.floor(l.sizeBytes*x),o,i).message}}let g=new Set(s.included.map(l=>l.id)),y=n.filter(l=>l.artifactId&&g.has(l.artifactId)),_=a;if(s.dropped.length>0){let l=s.dropped.map(h=>({filename:Ce(h.id,n),sizeBytes:h.sizeBytes}));_=pe(a,l,o,i)}return{ok:!0,result:{perTargetAttachments:y,perTargetContent:_}}}var E=q("adam"),z=class{_dedupCache=new Map;_rateLimitWindows=new Map;_recentlySentIds=new Set;_laneTails=new Map;async _acquireLane(t,r){let n=`${t}:${r}`,a=this._laneTails.get(n)??Promise.resolve(),i,o=new Promise(d=>{i=d});return this._laneTails.set(n,o),o.then(()=>{this._laneTails.get(n)===o&&this._laneTails.delete(n)}),await a,i}isRecentlySent(t){return this._recentlySentIds.has(t)}async send(t){let{taskId:r,channelId:n,chatId:a,content:i,messageType:o,platform:d,webhookUrl:s,replyMarkup:g,replyToMessageId:y,quoteExcerpt:_,quoteTitle:l,mediaUrl:h,mediaType:k,attachments:S,dedupDiscriminator:W}=t,I=ge(o),ye=I!=="reply"&&!!r,u;if(ye){u=`${r}:${n??"none"}:${a??"none"}:${I}${W?`:${W}`:""}`;let f=this._dedupCache.get(u);if(f&&Date.now()-f.timestamp<300*1e3)return E.debug({dedupKey:u},"Dedup hit, returning cached log entry"),{success:!0,logEntryId:f.logEntryId}}if(n){let f=Date.now(),v=6e4,p=this._rateLimitWindows.get(n);p||(p=[],this._rateLimitWindows.set(n,p));let P=f-v;for(;p.length>0&&p[0]<P;)p.shift();if(p.length>=60){let M=B();E.warn({channelId:n,count:p.length},"Rate limited, not sending");let b={type:"channel",channelId:n,chatId:a??""};return this._writeOutboundReceipt(t,b,i,"failure"),{success:!1,logEntryId:M,error:"rate_limited"}}p.push(f)}let he=d??(n?R(n)?.platform:void 0)??"unknown",H=s?i:te(i,he,r),c=B(),m={id:c,ruleId:void 0,taskId:r??void 0,status:"pending",target:n&&a?{type:"channel",channelId:n,chatId:a}:s?{type:"webhook",webhookUrl:s}:{type:"channel",channelId:n??"",chatId:a??""},content:H,attempts:0,createdAt:Date.now(),expiresAt:Date.now()+1440*60*1e3,source:"direct",messageType:I};K(m),u&&this._dedupCache.set(u,{logEntryId:c,timestamp:Date.now()});try{let f=je(h);if(f)return A(c,"failed",f),u&&this._dedupCache.delete(u),w.emit({type:"delivery_status_change",logEntryId:c,taskId:r,target:m.target,status:"failed",error:f,messageType:I}),this._writeOutboundReceipt(t,m.target,i,"failure"),{success:!1,logEntryId:c,error:f};if(s){let v=await fetch(s,{method:"POST",body:JSON.stringify({result:i,taskId:r,timestamp:new Date().toISOString()}),signal:AbortSignal.timeout(1e4)});if(v.ok)return L(c),this._recordDeliveryLedgerAfterSuccess(t,m.target,I,i),w.emit({type:"delivery_status_change",logEntryId:c,taskId:r,target:m.target,status:"delivered",messageType:I}),{success:!0,logEntryId:c};{let p=`Webhook returned ${v.status}`;return A(c,"failed",p),u&&this._dedupCache.delete(u),w.emit({type:"delivery_status_change",logEntryId:c,taskId:r,target:m.target,status:"failed",error:p,messageType:I}),{success:!1,logEntryId:c,error:p}}}else if(n&&a){let{getChannelManager:v}=await Be(),p=v();if(!p){let T="ChannelManager not available";return A(c,"failed",T),u&&this._dedupCache.delete(u),w.emit({type:"delivery_status_change",logEntryId:c,taskId:r,target:m.target,status:"failed",error:T,messageType:I}),this._writeOutboundReceipt(t,m.target,i,"failure"),{success:!1,logEntryId:c,error:T}}let P={content:H,messageType:I,...g?{replyMarkup:g}:{},...y?{replyToMessageId:y}:{},..._?{quoteExcerpt:_}:{},...l?{quoteTitle:l}:{},...h?{mediaUrl:h}:{},...k?{mediaType:k}:{},...S?{attachments:S}:{}},M=await this._acquireLane(n,a),b;try{b=await p.sendMessage(n,a,P)}finally{M()}if(b===null){let T="Channel adapter send failed (returned null)";return A(c,"failed",T),u&&this._dedupCache.delete(u),w.emit({type:"delivery_status_change",logEntryId:c,taskId:r,target:m.target,status:"failed",error:T,messageType:I}),this._writeOutboundReceipt(t,m.target,i,"failure"),{success:!1,logEntryId:c,error:T}}if(b&&(this._recentlySentIds.add(b),setTimeout(()=>this._recentlySentIds.delete(b),300*1e3)),b?.startsWith("queued-")){let T="queued_not_delivered";return u&&this._dedupCache.delete(u),w.emit({type:"delivery_status_change",logEntryId:c,taskId:r,target:m.target,status:"pending",error:T,messageType:I}),{success:!1,messageId:b,logEntryId:c,error:T}}return L(c),this._recordDeliveryLedgerAfterSuccess(t,m.target,I,i),this._writeOutboundReceipt(t,m.target,i,"success"),w.emit({type:"delivery_status_change",logEntryId:c,taskId:r,target:m.target,status:"delivered",messageType:I}),{success:!0,messageId:b??void 0,logEntryId:c}}else{let v="No channelId/chatId or webhookUrl provided";return A(c,"failed",v),u&&this._dedupCache.delete(u),{success:!1,logEntryId:c,error:v}}}catch(f){let v=f instanceof Error?f.message:String(f);return A(c,"failed",v),u&&this._dedupCache.delete(u),w.emit({type:"delivery_status_change",logEntryId:c,taskId:r,target:m.target,status:"failed",error:v,messageType:I}),this._writeOutboundReceipt(t,m.target,i,"failure"),{success:!1,logEntryId:c,error:v}}}_writeOutboundReceipt(t,r,n,a){if(r.type!=="channel"||!r.channelId)return;let i=O();if(!i){E.debug({taskId:t.taskId,channelId:r.channelId,outcome:a},"Outbound receipt skipped: no active trace context");return}let o=(t.attachments??[]).map(s=>s.artifactId).filter(s=>typeof s=="string"&&s.length>0),d=t.actorToolName??"OutboundGateway.send";try{Z({traceId:i,taskId:t.taskId,sessionId:t.sessionId,effectCategory:"outbound_message",verb:"send",entityType:"channel_message",target:{channelId:r.channelId,chatId:r.chatId,platform:t.platform},payload:{textChars:n.length,attachmentCount:t.attachments?.length??0,attachmentRefs:o.length>0?o:void 0},actor:{traceId:i,toolName:d,taskId:t.taskId},outcome:a})}catch(s){s instanceof Q?E.warn({errors:s.errors,taskId:t.taskId,channelId:r.channelId},"Outbound receipt validation failed"):E.warn({error:s instanceof Error?s.message:String(s),taskId:t.taskId},"Outbound receipt write failed")}}async redeliverExecutionTo(t){let r=t.includeArtifacts??!0,n=t.messageType??"result_delivery",a=t.dedupDiscriminator??`redelivery:${Date.now()}`,i=r?t.fileArtifacts??le(t.executionId):[],o=t.attachments??(i.length>0?ue(i):void 0),d=[];for(let s of t.targets){let g=R(s.channelId);if(!g){d.push({target:{channelId:s.channelId,chatId:s.chatId},deliveryLogId:"",status:"failed",attachmentCount:0,error:`Channel not found: ${s.channelId}`});continue}let y=o,_=t.content;if(g.platform==="email"&&o&&o.length>0){let h=fe(s.channelId,s.chatId,i,o,t.content);if(!h.ok){let k=B(),S={type:"channel",channelId:s.channelId,chatId:s.chatId??""};K({id:k,ruleId:void 0,taskId:t.executionId,status:"pending",target:S,content:t.content,attempts:0,createdAt:Date.now(),expiresAt:Date.now()+1440*60*1e3,source:"direct",messageType:ge(n)}),A(k,"failed",h.error),d.push({target:{channelId:s.channelId,chatId:s.chatId},deliveryLogId:k,status:"failed",attachmentCount:0,error:h.error});continue}y=h.result.perTargetAttachments,_=h.result.perTargetContent}let l=await this.send({taskId:t.executionId,sessionId:t.sessionId,channelId:s.channelId,chatId:s.chatId,content:_,messageType:n,platform:g.platform,attachments:y,dedupDiscriminator:a,actorToolName:t.actorToolName});d.push({target:{channelId:s.channelId,chatId:s.chatId},deliveryLogId:l.logEntryId,status:l.success?"delivered":"failed",attachmentCount:y?.length??0,...l.error?{error:l.error}:{}})}return{deliveries:d}}_recordDeliveryLedgerAfterSuccess(t,r,n,a){if(Me(n,t.taskId))try{let i=Ke(t,r);if(!i){N({source:"delivery_ledger",severity:"warning",sourceId:t.taskId,message:`Skipped user-visible delivery ledger write for ${n}: viewer identity unresolved`});return}let o=Le(t.taskId),d=Fe(a);de({eventKey:`${i}|${o.sourceId}|${n}|${d}`,sourceType:o.sourceType,sourceId:o.sourceId,taskId:t.taskId,templateId:o.templateId,templateName:o.templateName,messageType:n,viewerKey:i,title:o.templateName,contentPreview:a,attachments:(t.attachments??[]).map(Ne),targets:[$e(r)]})}catch(i){let o=i instanceof Error?i.message:String(i);E.warn({error:o,taskId:t.taskId,messageType:n},"User-visible delivery ledger write failed");try{N({source:"delivery_ledger",severity:"error",sourceId:t.taskId,message:o})}catch{}}}};function Me(e,t){return t?!["reply","assistant_text","user_message","approval","approval_prompt"].includes(e):!1}function Ke(e,t){if(e.viewerKey)return e.viewerKey;if(t.type==="channel"&&t.channelId)return re({type:"channel",channelId:t.channelId,chatId:t.chatId})}function Le(e){let t=X(e);if(!t)return{sourceType:"task",sourceId:e};let r=G(t.templateId);return{sourceType:"template_execution",sourceId:t.id,templateId:t.templateId,templateName:r?.name}}function Ne(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 $e(e){if(e.type==="webhook")return{type:"webhook",webhookUrl:e.webhookUrl};let t=e.channelId?R(e.channelId):void 0;return{type:"channel",channelId:e.channelId,chatId:e.chatId,label:t?.name}}function Fe(e){return Ve("sha256").update(e).digest("hex")}var V=null;function Be(){return V||(V=import("./channels-YOBMSBWV.js")),V}function Dt(){V=null}function je(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(!Pe(t))return"mediaUrl must be absolute";if(!Ue(t))return"mediaUrl file does not exist"}function ge(e){return e==="report"?"status_report":e==="deliver"?"result_delivery":e}var j=null;function ze(){return j||(j=new z),j}function Rt(e){return ze().isRecentlySent(e)}export{Je as a,le as b,tt as c,rt as d,Ee as e,Oe as f,xe as g,z as h,Dt as i,ze as j,Rt as k};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{e as A,i as J}from"./chunk-
|
|
1
|
+
import{e as A,i as J}from"./chunk-6NIWU43Z.js";import{A as D,w as v}from"./chunk-3JTHJ3FZ.js";import{existsSync as m,readFileSync as P,readdirSync as w}from"fs";import{join as d}from"path";import E from"os";var b=()=>d(E.homedir(),".claude","plugins"),S=()=>d(b(),"installed_plugins.json"),_=()=>d(b(),"known_marketplaces.json"),x=()=>d(E.homedir(),".claude","settings.json");function y(s){try{if(!m(s))return null;let i=P(s,"utf-8");return JSON.parse(i)}catch{return null}}function R(){return y(x())?.enabledPlugins??{}}function T(s){let i=s;function l(t,p){let a={};try{if(!m(t))return a;let u=P(t,"utf-8").replace(/^```yaml\r?\n/,"").replace(/^```\r?\n/,"");for(let f of p){let r=new RegExp(`^${f}:\\s*(.+)$`,"m"),e=u.match(r);e&&(a[f]=e[1].trim())}}catch{}return a}function o(t){try{if(!m(t))return{};let p=P(t,"utf-8"),a=p.match(/^```yaml\r?\n([\s\S]*?)\r?\n```\r?\n/);if(!a){let r={};for(let e of p.split(/\r?\n/)){let n=e.match(/^(\w+):\s*(.+)$/);n&&(r[n[1]]=n[2])}return{name:r.name,description:r.description}}let c=a[1],u={};for(let r of c.split(/\r?\n/)){let e=r.match(/^(\w+):\s*(.*)$/);if(e){let[,n,g]=e;g.trim()&&(u[n]=g.trim())}}let f=c.match(/error_patterns:\r?\n([\s\S]*?)(?=\n\w|\n$)/);if(f){let r=f[1],e=[],n={};for(let g of r.split(/\r?\n/)){let h=g.match(/^\s*-\s*pattern:\s*(.+)$/);if(h){n.pattern&&e.push(n),n={pattern:h[1].replace(/^["']|["']$/g,"")};continue}let k=g.match(/^\s*category:\s*(.+)$/);if(k){n.category=k[1].trim();continue}let j=g.match(/^\s*user_action:\s*(.+)$/);if(j){n.user_action=j[1].replace(/^["']|["']$/g,""),n.pattern&&n.category&&n.user_action&&(e.push(n),n={});continue}}n.pattern&&e.push(n),e.length>0&&(u.error_patterns=e)}return{name:u.name,description:u.description,error_patterns:u.error_patterns}}catch{}return{}}try{let t={name:"",skills:[],agents:[],mcpServers:[],hooks:[],lspServers:[]},p=d(i,".claude-plugin","plugin.json");if(m(p))try{let r=JSON.parse(P(p,"utf-8"));t.name=r.name??"",t.version=r.version,t.description=r.description,Array.isArray(r.lspServers)&&(t.lspServers=r.lspServers),Array.isArray(r.mcpServers)&&(t.mcpServers=r.mcpServers),Array.isArray(r.hooks)&&(t.hooks=r.hooks)}catch{}let a=d(i,"skills");if(m(a)){let r=w(a,{withFileTypes:!0});for(let e of r){if(!e.isDirectory()&&!e.isSymbolicLink())continue;let n=d(a,e.name,"SKILL.md"),g=o(n);g.name&&t.skills.push({name:g.name,description:g.description??"",error_patterns:g.error_patterns})}}let c=d(i,"agents");if(m(c)){let r=w(c,{withFileTypes:!0});for(let e of r){if(!e.isFile()||!e.name.endsWith(".md"))continue;let n=l(d(c,e.name),["name","description"]);n.name&&t.agents.push({name:n.name,description:n.description??""})}}let u=d(i,".mcp.json");if(m(u))try{let r=JSON.parse(P(u,"utf-8"));r.mcpServers&&typeof r.mcpServers=="object"&&(t.mcpServers=Object.keys(r.mcpServers))}catch{}let f=d(i,"hooks","hooks.json");if(m(f))try{let r=JSON.parse(P(f,"utf-8"));Array.isArray(r)&&(t.hooks=r.map(e=>typeof e=="object"&&e!==null&&"event"in e?String(e.event):String(e)))}catch{}return t}catch{return null}}function $(s){let i=y(S());if(!i?.plugins)return[];let l=R(),o=[];for(let[t,p]of Object.entries(i.plugins))if(!(!Array.isArray(p)||p.length===0))for(let a of p){let c=a.scope??"user";s?.scope&&c!==s.scope||s?.projectPath&&a.projectPath!==s.projectPath||o.push({id:t,name:t.split("@")[0],version:a.version??"",scope:c,projectPath:a.projectPath,installPath:a.installPath??d(b(),t),enabled:l[t]??a.enabled??!0,installedAt:a.installedAt??"",lastUpdated:a.lastUpdated??""})}return o}function G(s){let i=y(S());if(!i?.plugins?.[s])return null;let l=i.plugins[s];if(!Array.isArray(l)||l.length===0)return null;let o=l[0],t=R();return{id:s,name:s.split("@")[0],version:o.version??"",scope:o.scope??"user",projectPath:o.projectPath,installPath:o.installPath??d(b(),s),enabled:t[s]??o.enabled??!0,installedAt:o.installedAt??"",lastUpdated:o.lastUpdated??""}}function M(s){let i=y(S()),l=new Map;for(let o of s){let t=i?.plugins?.[o];Array.isArray(t)&&t.length>0&&l.set(o,t[0].installPath??d(b(),o))}return l}function U(){return y(_())?.marketplaces??[]}function I(s){let i=d(s,".claude","settings.json"),l=y(i);return{enabledPlugins:l?.enabledPlugins??{},mcpServers:l?.mcpServers??{},allowedTools:l?.allowedTools??[],disallowedTools:l?.disallowedTools??[]}}J();D();var C={Read:{category:"File",label:"read"},Write:{category:"File",label:"write"},Edit:{category:"File",label:"edit"},Glob:{category:"Search",label:"find files"},Grep:{category:"Search",label:"search content"},Bash:{category:"Execution",label:"shell commands"},WebSearch:{category:"Web",label:"web search"},WebFetch:{category:"Web",label:"fetch pages"},NotebookEdit:{category:"Execution",label:"Jupyter notebooks"}};function q(s,i){let l=s.allowedTools??[],o=s.osCapabilities??[];if(l.length===0&&o.length===0&&Object.keys(s.mcpServers??{}).length===0&&(s.additionalDirectories?.length??0)===0&&(!i||i.plugins.length===0))return"No tool permissions";let t=new Map,p=[];for(let e of l){let n=C[e];if(n){let g=t.get(n.category)??[];g.push(n.label),t.set(n.category,g)}else p.push(e)}let a=[];for(let[e,n]of t)a.push(`${e} (${n.join(", ")})`);p.length>0&&a.push(p.join(", "));let c=a.join(" \xB7 "),u=e=>{c=c?`${c} \xB7 ${e}`:e},f=Object.keys(s.mcpServers??{});f.length>0&&u(`MCP: ${f.join(", ")}`);let r=s.additionalDirectories??[];if(r.length>0&&u(`Dirs: ${r.map(e=>e.path).join(", ")}`),o.length>0){let e=o.map(n=>{let g=v(n.id);return n.id==="automation"&&n.targets?.length?`${g.label} (${n.targets.join(", ")})`:g.label});u(`OS: ${e.join(", ")}`)}if(i&&i.plugins.length>0){let e=i.plugins.map(n=>{let g=[];return n.skills.length>0&&g.push(`skills: ${n.skills.map(h=>h.name).join(", ")}`),n.agents.length>0&&g.push(`agents: ${n.agents.map(h=>h.name).join(", ")}`),g.length>0?`${n.name} (${g.join("; ")})`:n.name});u(`Plugins: ${e.join(", ")}`)}return c}function O(s){let i=[],l=s.additionalDirectories??[];for(let o of l){if(!o.inheritPlugins&&!o.inheritMcp)continue;let t=I(o.path),p=Object.entries(t.enabledPlugins).filter(([,c])=>c).map(([c])=>c),a=M(p);for(let[,c]of a)i.includes(c)||i.push(c)}try{let o=A(s.name),t=$({scope:"project",projectPath:o});for(let p of t)p.installPath&&!i.includes(p.installPath)&&i.push(p.installPath)}catch{}return i}function z(s){let i=O(s),l=[];for(let o of i){let t=T(o);t&&l.push({name:t.name||o.split("/").pop()||"unknown",description:t.description,skills:t.skills,agents:t.agents,mcpServers:t.mcpServers,hooks:t.hooks})}return{plugins:l}}export{R as a,T as b,$ as c,G as d,U as e,I as f,q as g,O as h,z as i};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{o,q as a}from"./chunk-
|
|
1
|
+
import{o,q as a}from"./chunk-ZEGZ2I35.js";import{c as u,e as c}from"./chunk-5M6IGE5G.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
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(`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{o as n,q as o}from"./chunk-
|
|
1
|
+
import{o as n,q as o}from"./chunk-ZEGZ2I35.js";import{c as r,e as c}from"./chunk-5M6IGE5G.js";o();c();function a(e){return{id:e.id,sessionId:e.session_id,role:e.role,content:e.content,source:{type:e.source_type,...e.source_channel_id?{channelId:e.source_channel_id}:{},...e.source_chat_id?{chatId:e.source_chat_id}:{}},taskId:e.task_id??void 0,channelMessageId:e.channel_message_id??void 0,metadata:e.metadata?JSON.parse(e.metadata):void 0,createdAt:e.created_at,traceId:e.trace_id??void 0,kind:e.kind??void 0,parentMessageId:e.parent_message_id??void 0,threadRoot:e.thread_root??void 0,promptId:e.prompt_id??void 0,approvalShape:e.approval_shape??void 0,roleId:e.role_id??void 0,attachments:e.attachments?JSON.parse(e.attachments):void 0,mirroredToTargets:e.mirrored_to_targets?JSON.parse(e.mirrored_to_targets):void 0,platformMessageId:e.platform_message_id??void 0,seq:e.seq??void 0}}function p(e){let s=n(),t=e.kind??(e.role==="user"?"user_message":"assistant_text");s.prepare(`
|
|
2
2
|
INSERT INTO chat_messages (
|
|
3
3
|
id, session_id, role, content, source_type, task_id,
|
|
4
4
|
channel_message_id, metadata, created_at, trace_id,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{o as a,q as l}from"./chunk-
|
|
1
|
+
import{o as a,q as l}from"./chunk-ZEGZ2I35.js";l();function c(e){return{id:e.id,templateId:e.template_id,status:e.status,stepStatuses:JSON.parse(e.step_statuses),startedAt:e.started_at,completedAt:e.completed_at??void 0,error:e.error??void 0,eventId:e.event_id??void 0,stepResultsJson:e.step_results_json??void 0}}function _(e,t,n){a().prepare(`
|
|
2
2
|
INSERT INTO template_executions (id, template_id, status, step_statuses, started_at, event_id)
|
|
3
3
|
VALUES (?, ?, 'running', '{}', ?, ?)
|
|
4
4
|
`).run(e,t,Date.now(),n??null)}function y(e){let n=a().prepare("SELECT * FROM template_executions WHERE id = ?").get(e);return n?c(n):void 0}function E(e,t){let n=a(),r=[],i=[];t.status!==void 0&&(r.push("status = ?"),i.push(t.status)),t.stepStatuses!==void 0&&(r.push("step_statuses = ?"),i.push(JSON.stringify(t.stepStatuses))),t.completedAt!==void 0&&(r.push("completed_at = ?"),i.push(t.completedAt)),t.error!==void 0&&(r.push("error = ?"),i.push(t.error)),r.length!==0&&(i.push(e),n.prepare(`UPDATE template_executions SET ${r.join(", ")} WHERE id = ?`).run(...i))}function R(e){let t=a(),n=Date.now()-e;return t.prepare("SELECT * FROM template_executions WHERE status = 'running' AND started_at < ?").all(n).map(c)}function I(e,t=50,n=0){let r=a(),i="SELECT * FROM template_executions",s=[];return e&&(i+=" WHERE template_id = ?",s.push(e)),i+=" ORDER BY started_at DESC LIMIT ? OFFSET ?",s.push(t,n),r.prepare(i).all(...s).map(c)}function h(e,t=20,n=0){return a().prepare(`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{o as s,q as m}from"./chunk-
|
|
1
|
+
import{o as s,q as m}from"./chunk-ZEGZ2I35.js";import{c as d,h as f}from"./chunk-EZLBMUQD.js";m();f();var p=/^[a-z0-9.-]+$/;var u=d("store");function r(e){let n;if(e.recipient_cap_map_json)try{n=JSON.parse(e.recipient_cap_map_json)}catch(i){u.warn({channelId:e.id,err:i},"Malformed recipient_cap_map_json; using empty map"),n=void 0}return{id:e.id,name:e.name,platform:e.platform,enabled:e.enabled===1,status:e.status,config:JSON.parse(e.config),linkedRoleId:e.linked_role_id??void 0,allowedChatIds:e.allowed_chat_ids?JSON.parse(e.allowed_chat_ids):void 0,viewerKey:e.viewer_key??void 0,createdAt:e.created_at,updatedAt:e.updated_at??void 0,lastMessageAt:e.last_message_at??void 0,messageCount:e.message_count,recipientCapMap:n,defaultRecipientCapBytes:e.default_recipient_cap_bytes??void 0}}function R(e){s().prepare(`
|
|
2
2
|
INSERT INTO channels (id, name, platform, enabled, status, config, linked_role_id,
|
|
3
3
|
allowed_chat_ids, viewer_key, created_at, updated_at, last_message_at, message_count,
|
|
4
4
|
recipient_cap_map_json, default_recipient_cap_bytes)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as b}from"./chunk-
|
|
1
|
+
import{t as b}from"./chunk-ZARKPBI2.js";import{s,u as m,w as x}from"./chunk-G5I76LX2.js";import{a as p}from"./chunk-L7JP7DUO.js";import{q as T}from"./chunk-AKQ3AFVI.js";import{G as f,L as J}from"./chunk-3JTHJ3FZ.js";import{c as h,h as C}from"./chunk-EZLBMUQD.js";C();J();import{v4 as l}from"uuid";import{CronExpressionParser as E}from"cron-parser";var n=h("scheduler"),y=class{cronJobs=new Map;started=!1;templateExecutionCompletionHandler=null;async start(){if(this.started)return;this.started=!0;let e=m(!0),t=0;for(let r of e)r.trigger.type==="cron"&&r.trigger.cron&&(this.scheduleCronJob(r),t++);let o=0;for(let r of e)r.trigger.type==="once"&&r.trigger.runAt&&(this.scheduleOnceJob(r.id),o++);this.templateExecutionCompletionHandler=r=>{(r.status==="completed"||r.status==="partial")&&this.checkTemplateCompleteTriggers(r.templateId).catch(i=>{n.error({templateId:r.templateId,error:i},"Template-complete trigger check failed")})},p.on("template_execution_status_change",this.templateExecutionCompletionHandler),this.cronJobs.set("memory-cleanup",setInterval(()=>{this.runMemoryCleanup()},36e5)),n.info({cronCount:t,onceCount:o},"Bree engine started with cron jobs + memory cleanup")}runMemoryCleanup(){try{let e=f(void 0,1e3,0),t=0;for(let o of e)t+=T(o.id);t>0&&n.info({totalCleaned:t},"Memory cleanup completed")}catch(e){n.warn({error:e},"Memory cleanup failed")}}async stop(){for(let[,e]of this.cronJobs)clearTimeout(e),clearInterval(e);this.cronJobs.clear(),this.templateExecutionCompletionHandler&&(p.off("template_execution_status_change",this.templateExecutionCompletionHandler),this.templateExecutionCompletionHandler=null),this.started=!1,n.info("Bree engine stopped")}scheduleCronJob(e){let t=`template-${e.id}`;this.cronJobs.has(t)&&(clearTimeout(this.cronJobs.get(t)),this.cronJobs.delete(t));let o;try{o=E.parse(e.trigger.cron)}catch{n.warn({templateId:e.id,cron:e.trigger.cron},"Invalid cron expression");return}let r=()=>{let u=o.next().getTime()-Date.now();return Math.max(u,1e3)},i=()=>{this.executeCronTrigger(e.id).catch(u=>{n.error({templateId:e.id,error:u},"Cron trigger failed")});let d=setTimeout(i,r());this.cronJobs.set(t,d)},c=r(),a=setTimeout(i,c);this.cronJobs.set(t,a),n.debug({jobName:t,nextRun:new Date(Date.now()+c).toISOString()},"Scheduled cron job")}async executeCronTrigger(e){let t=s(e);!t||!t.enabled||(n.info({templateName:t.name},"Cron triggered"),await this.executeTemplateExecution(t,l()))}async scheduleJob(e){let t=s(e);t&&t.trigger.type==="cron"&&t.trigger.cron&&this.scheduleCronJob(t)}async unscheduleJob(e){let t=`template-${e}`,o=this.cronJobs.get(t);o&&(clearTimeout(o),this.cronJobs.delete(t))}async runNow(e,t){let o=s(e);if(!o)throw new Error(`Template ${e} not found`);let r=l();return this.executeTemplateExecution(o,r,t).catch(i=>{n.error({templateId:e,error:i},"TemplateExecution failed")}),r}async checkTemplateCompleteTriggers(e){let o=m(!0).filter(r=>r.trigger.type!=="template_complete"||!r.trigger.event?!1:r.trigger.event===`template_complete:${e}`);for(let r of o)n.info({templateName:r.name,sourceTemplateId:e},"Template-complete trigger matched"),await this.executeTemplateExecution(r,l())}async executeTemplateExecution(e,t,o={}){await b(e,{...o,executionId:t,triggerContext:o.triggerContext??{source:"bree"}})}scheduleOnceJob(e){let t=s(e);if(!t||!t.enabled||t.trigger.type!=="once")return;let r=(t.trigger.runAt?new Date(t.trigger.runAt).getTime():0)-Date.now();if(r<=0){n.info({templateId:e,runAt:t.trigger.runAt},"Once-shot template past due, executing immediately"),this.executeOnceTrigger(e).catch(a=>{n.error({templateId:e,error:a},"Once trigger execution failed")});return}let i=`template-${e}`;this.cronJobs.has(i)&&clearTimeout(this.cronJobs.get(i));let c=setTimeout(()=>{this.cronJobs.delete(i),this.executeOnceTrigger(e).catch(a=>{n.error({templateId:e,error:a},"Once trigger execution failed")})},r);this.cronJobs.set(i,c),n.info({templateId:e,runAt:t.trigger.runAt,delayMs:r},"Scheduled once-shot job")}async executeOnceTrigger(e){let t=s(e);!t||!t.enabled||(n.info({templateName:t.name},"Once-shot triggered"),await this.executeTemplateExecution(t,l()),x(e),n.info({templateId:e},"Once-shot template auto-disabled after execution"))}},v=null;function N(){return v}function j(g){v=g}export{y as a,N as b,j as c};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{j as y}from"./chunk-
|
|
1
|
+
import{j as y}from"./chunk-R3MSLP6P.js";import{c as m}from"./chunk-XEXSXMWK.js";import{c as h,h as w}from"./chunk-EZLBMUQD.js";w();var v="",I=Buffer.alloc(0);function O(o){v=o,I=Buffer.from(o)}function g(){return v}function C(){return I}var p=h("channels"),u=new Map,x=3e5,$=new Set(["telegram"]);function T(o){let e=o.trim().toLowerCase().match(/^(yes|y|是|允许|no|n|否|拒绝)\s+(\S+)$/);if(!e)return null;let[,c,l]=e,r=["yes","y","\u662F","\u5141\u8BB8"].includes(c);return{requestId:l,decision:r?"allow":"deny"}}function P(o){let n=m(o);return n?$.has(n.platform):!1}var b={low:"\u{1F7E2}",medium:"\u{1F7E1}",high:"\u{1F534}"},k={low:"\u4F4E",medium:"\u4E2D",high:"\u9AD8"};function _(o){let n=["\u{1F512} \u9700\u8981\u5BA1\u6279",""];for(let e of o.steps){if(e.description.startsWith("Execute task without OS sandbox"))n.push("\u26A0\uFE0F \u65E0\u6C99\u7BB1\u6267\u884C \u2014 \u6587\u4EF6\u7CFB\u7EDF\u9694\u79BB\u672A\u542F\u7528");else{let r=e.description.indexOf(": "),s=r>0?e.description.slice(0,r):"Operation";if(n.push(`\u64CD\u4F5C: ${s}`),s==="Bash"&&r>0)try{let t=JSON.parse(e.description.slice(r+2));if(t.command){let i=String(t.command).trim();n.push(`\u547D\u4EE4: ${i.length>120?i.slice(0,117)+"...":i}`)}}catch{let t=e.description.slice(r+2,r+122);n.push(`\u8BE6\u60C5: ${t}${e.description.length>r+122?"...":""}`)}else if(r>0){let t=e.description.slice(r+2,r+122);n.push(`\u8BE6\u60C5: ${t}${e.description.length>r+122?"...":""}`)}}let c=b[e.riskLevel]??"\u{1F7E1}",l=k[e.riskLevel]??e.riskLevel;n.push(`\u98CE\u9669: ${c} ${l}`),n.push("")}return n.join(`
|
|
2
2
|
`).trimEnd()}async function q(o,n,e,c,l,r=x){let s=e,t=s.slice(0,8);u.set(t,{planId:e,taskId:c,channelId:o,chatId:n,requestId:s,timestamp:Date.now(),timeoutMs:r});let i=y(),d=P(o);if(d){let a=`${l}
|
|
3
3
|
|
|
4
4
|
`;await i.send({channelId:o,chatId:n,content:a,messageType:"approval",replyMarkup:{inlineKeyboard:[[{text:"\u2705 Allow",callbackData:`yes ${t}`},{text:"\u274C Deny",callbackData:`no ${t}`}]]}})}else{let a=[l,"",`Reply 'yes ${t}' or 'no ${t}'`].join(`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{o as a,q as o}from"./chunk-
|
|
1
|
+
import{o as a,q as o}from"./chunk-ZEGZ2I35.js";o();function u(t){return{id:t.id,status:t.status,source:{type:t.source_type,channelId:t.source_channel_id??void 0,chatId:t.source_chat_id??void 0},title:t.title??void 0,createdAt:t.created_at,lastActiveAt:t.last_active_at,archivedAt:t.archived_at??void 0,messageCount:t.message_count,sdkSessionId:t.sdk_session_id??void 0}}function d(t){a().prepare(`
|
|
2
2
|
INSERT INTO chat_sessions (id, status, source_type, source_channel_id, source_chat_id,
|
|
3
3
|
title, created_at, last_active_at, archived_at, message_count)
|
|
4
4
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|