adam-agent-server 1.3.0 → 1.5.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 +22 -9
- package/dist/App-JGH6G5US.js +13 -0
- package/dist/adam-tools-W5AOIGEQ.js +1 -0
- package/dist/{approval-handler-RIJO3OBO.js → approval-handler-ORD4MUVM.js} +1 -1
- package/dist/audit-manager-YCJT2WP5.js +1 -0
- package/dist/bree-engine-R5YLSDCL.js +1 -0
- package/dist/{channels-LUJ7GTSP.js → channels-HYSB2EEK.js} +1 -1
- package/dist/channels-JCMPPQED.js +1 -0
- package/dist/{chunk-CLHSPXZ6.js → chunk-23VZKIB6.js} +1 -1
- package/dist/{chunk-AZBNUSM2.js → chunk-2DLVAKH7.js} +1 -1
- package/dist/chunk-2YAP4YJV.js +57 -0
- package/dist/{chunk-YPOTHL7X.js → chunk-5S6BMWD2.js} +1 -1
- package/dist/chunk-5XUR3M23.js +12 -0
- package/dist/chunk-6775OYXA.js +47 -0
- package/dist/chunk-6FXNB7NE.js +1 -0
- package/dist/{chunk-WKS7QVIX.js → chunk-7L2WQM7N.js} +1 -1
- package/dist/{chunk-NDP6LWXX.js → chunk-BR2JY5X2.js} +1 -1
- package/dist/{chunk-IZGTTLTG.js → chunk-C6BOQJJF.js} +1 -1
- package/dist/{chunk-4NW2DNDZ.js → chunk-DZEVMYPB.js} +1 -1
- package/dist/chunk-GBTG5B5R.js +8 -0
- package/dist/chunk-GY52JA5I.js +10 -0
- package/dist/{chunk-HFN7Y3IM.js → chunk-H54ZXA26.js} +1 -1
- package/dist/{chunk-DBUEHITK.js → chunk-H7VDC6FY.js} +2 -2
- package/dist/{chunk-ZQYKT5UY.js → chunk-HDP7A4XY.js} +1 -1
- package/dist/{chunk-4LSIHSCO.js → chunk-HTPUEIFT.js} +1 -1
- package/dist/{chunk-JZNBFZ7W.js → chunk-ISZJV72D.js} +1 -1
- package/dist/{chunk-4MJF77RD.js → chunk-JAS3TUZX.js} +4 -3
- package/dist/chunk-MTWLLE26.js +49 -0
- package/dist/{chunk-NUTUI5KM.js → chunk-QVKI7H7W.js} +1 -1
- package/dist/{chunk-7IXLL673.js → chunk-QWCRZDZS.js} +1 -1
- package/dist/{chunk-P6KWAGAY.js → chunk-R4GIIQ7G.js} +1 -1
- package/dist/chunk-RAW263MQ.js +99 -0
- package/dist/{chunk-IKUBP3SY.js → chunk-S3BAIZ4Q.js} +2 -2
- package/dist/chunk-VRJ7R766.js +1 -0
- package/dist/{chunk-WTRM5VO7.js → chunk-XL46AGRZ.js} +2 -2
- package/dist/{chunk-AKPLOO2V.js → chunk-Y3AMO6WC.js} +1 -1
- package/dist/{chunk-TCHBOWQ5.js → chunk-YVS565QY.js} +1 -1
- package/dist/{chunk-TKDT7EQO.js → chunk-Z4D3L2HR.js} +1 -1
- package/dist/cli.js +2 -2
- package/dist/{config-HR4MBTIS.js → config-EMNKHR3W.js} +1 -1
- package/dist/{db-6KUGCGVR.js → db-YUYXVV3A.js} +1 -1
- package/dist/{delivery-log-7DJJTPXL.js → delivery-log-VKONLSVD.js} +1 -1
- package/dist/engine-BM5BMPIC.js +1 -0
- package/dist/{evolution-audit-I2ITWAEC.js → evolution-audit-LZSQPDHH.js} +1 -1
- package/dist/index.js +18 -12
- package/dist/{learner-CBPQZ3HL.js → learner-IJN6B7KV.js} +1 -1
- package/dist/{memories-HBBW44MG.js → memories-ZII5QSTJ.js} +1 -1
- package/dist/{memory-extractor-XO2HJ22Y.js → memory-extractor-DIYJFBCI.js} +2 -2
- package/dist/memory-service-QMYJPBAE.js +1 -0
- package/dist/outbound-gateway-6K6P2BEH.js +1 -0
- package/dist/role-presets-K2BDRZBS.js +1 -0
- package/dist/roles-L34L5MK3.js +1 -0
- package/dist/{session-manager-JICVE4CO.js → session-manager-GRJ3FV3L.js} +1 -1
- package/dist/{task-templates-NC7XIZIC.js → task-templates-23YOAF3E.js} +1 -1
- package/dist/workflow-executor-JTUWX5DC.js +1 -0
- package/package.json +2 -2
- package/web/dist/assets/AlertDialog-r3y6IhpW.js +51 -0
- package/web/dist/assets/Button-BjXgrQ95.js +1 -0
- package/web/dist/assets/Card-C153tGfJ.js +1 -0
- package/web/dist/assets/ChannelDetail-C2uAZv1u.js +1 -0
- package/web/dist/assets/Channels-C62Qrg-n.js +12 -0
- package/web/dist/assets/Chat-kH2owmB_.js +1 -0
- package/web/dist/assets/Dashboard-BhD8SpFb.js +1 -0
- package/web/dist/assets/EmptyState-CXwJFCDQ.js +1 -0
- package/web/dist/assets/EnvVarEditor-GSapLD96.js +1 -0
- package/web/dist/assets/Evolution-BO5hysLD.js +6 -0
- package/web/dist/assets/GoalDetail-cxa8OvEi.js +1 -0
- package/web/dist/assets/Goals-Dz3qqp_l.js +1 -0
- package/web/dist/assets/Logs-Ckp3-hYV.js +1 -0
- package/web/dist/assets/Memories-DEuSRoP3.js +1 -0
- package/web/dist/assets/NotFound-Bvn39vSk.js +1 -0
- package/web/dist/assets/PageHeader-BMvN0xiB.js +1 -0
- package/web/dist/assets/Plugins-CRym22JF.js +1 -0
- package/web/dist/assets/RoleDetail-BWMjP9aZ.js +33 -0
- package/web/dist/assets/Roles-DD7NBDku.js +1 -0
- package/web/dist/assets/SectionHeader-CiCj3Is0.js +1 -0
- package/web/dist/assets/Settings-BlU19KuR.js +1 -0
- package/web/dist/assets/Strategies-CJ_q94-v.js +1 -0
- package/web/dist/assets/Switch-CoUUy5jr.js +1 -0
- package/web/dist/assets/Table-CaFJieh_.js +1 -0
- package/web/dist/assets/TaskDetail-DVrjU-E6.js +2 -0
- package/web/dist/assets/Work-BMl61RRi.js +1 -0
- package/web/dist/assets/dist-Bdqp1ixJ.js +1 -0
- package/web/dist/assets/index-DcXMQByM.css +2 -0
- package/web/dist/assets/index-pF--tN9F.js +2 -0
- package/web/dist/assets/ui-B_uMx2Fy.js +1 -0
- package/web/dist/assets/useIsMobileLayout-Bwrm84kJ.js +1 -0
- package/web/dist/assets/vendor-icons-BlMaTTx3.js +1 -0
- package/web/dist/assets/{vendor-react-DLRtONKt.js → vendor-react-7e01TWy7.js} +2 -2
- package/web/dist/assets/vendor-state-Bj70wnRm.js +1 -0
- package/web/dist/index.html +8 -6
- package/dist/App-3OBJDI2C.js +0 -9
- package/dist/adam-tools-4LZYFB6J.js +0 -1
- package/dist/audit-manager-6FFPXID3.js +0 -1
- package/dist/bree-engine-2NOTIBAZ.js +0 -1
- package/dist/channels-TSZLEU3L.js +0 -1
- package/dist/chunk-6NUHSHS5.js +0 -4
- package/dist/chunk-72VLUJ2S.js +0 -1
- package/dist/chunk-7CJGPCSJ.js +0 -49
- package/dist/chunk-NLD7WK3R.js +0 -6
- package/dist/chunk-OTH4M5L3.js +0 -8
- package/dist/chunk-PVYEGQEG.js +0 -83
- package/dist/chunk-XTHP5JMO.js +0 -10
- package/dist/chunk-ZKMDHQJY.js +0 -104
- package/dist/engine-HJUE6I4I.js +0 -1
- package/dist/memory-service-HIFTKEW2.js +0 -1
- package/dist/outbound-gateway-GGFMU5JW.js +0 -1
- package/dist/role-presets-W452Y3RV.js +0 -1
- package/dist/roles-NYGWZMQI.js +0 -1
- package/dist/workflow-executor-QN4KP7B4.js +0 -1
- package/web/dist/assets/Card-4mOZntHG.js +0 -1
- package/web/dist/assets/ChannelDetail-DX4QnE8j.js +0 -1
- package/web/dist/assets/Channels-EXkNOQpB.js +0 -12
- package/web/dist/assets/Chat-Da-mCR0c.js +0 -1
- package/web/dist/assets/Dashboard-Bq6sEDdP.js +0 -1
- package/web/dist/assets/EmptyState-BlgMMAr-.js +0 -1
- package/web/dist/assets/EnvVarEditor-CNxXpVbD.js +0 -1
- package/web/dist/assets/Evolution-DPdmbooj.js +0 -6
- package/web/dist/assets/GoalDetail-BamCfVzS.js +0 -1
- package/web/dist/assets/Goals-CHPEg0RK.js +0 -1
- package/web/dist/assets/Logs-BHkBvH0T.js +0 -1
- package/web/dist/assets/Memories-BY2pJhVd.js +0 -1
- package/web/dist/assets/NotFound-CSjhzSGa.js +0 -1
- package/web/dist/assets/Plugins-C5xLM0BU.js +0 -1
- package/web/dist/assets/RoleDetail-Dnp-W14x.js +0 -33
- package/web/dist/assets/Roles-BVOVoHvc.js +0 -1
- package/web/dist/assets/Settings-eBHvn6s_.js +0 -1
- package/web/dist/assets/Strategies-BbFbLKBJ.js +0 -1
- package/web/dist/assets/Switch-Q-inggPs.js +0 -1
- package/web/dist/assets/Table-BxbnOSbq.js +0 -1
- package/web/dist/assets/TaskDetail-BEjZ1gco.js +0 -2
- package/web/dist/assets/Work-CF2iLs8i.js +0 -1
- package/web/dist/assets/dist-HyCSN_hp.js +0 -1
- package/web/dist/assets/index-CaHdOfAc.js +0 -52
- package/web/dist/assets/index-D0SvKqKc.css +0 -2
- package/web/dist/assets/vendor-icons-CkI4-NxL.js +0 -1
- package/web/dist/assets/vendor-state-B_-GdGNJ.js +0 -1
- /package/web/dist/assets/{format-DvtQjPZn.js → format-CHfBBLog.js} +0 -0
package/dist/chunk-PVYEGQEG.js
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import{a as re}from"./chunk-5V36ACKZ.js";import{a as Ee,c as De,d as Ae,e as Z,f as Ne,g as Ue,h as $e,i as ht,j as Oe,k as We,l as N,n as ye}from"./chunk-6NUHSHS5.js";import{b as Le,c as me,e as Ce}from"./chunk-HFN7Y3IM.js";import{b as z}from"./chunk-AKPLOO2V.js";import{a as Je,c as we,e as He}from"./chunk-NDP6LWXX.js";import{a as ee,b as x,c as te,d as Be,e as qe}from"./chunk-NLD7WK3R.js";import{a as Y,b as y,c as O,d as E}from"./chunk-JZNBFZ7W.js";import{d as he}from"./chunk-CLHSPXZ6.js";import{j as be}from"./chunk-TKDT7EQO.js";import{e as xe,f as Q,g as Pe,i as pe,j as X}from"./chunk-7IXLL673.js";import{a as ge}from"./chunk-L7JP7DUO.js";import{g as je}from"./chunk-IZGTTLTG.js";import{a as fe,b as j,c as Fe,f as Ge,g as Ve}from"./chunk-IKUBP3SY.js";import{d as T,j as ke}from"./chunk-GSMC3VUM.js";import{d as _e,e as v,g as D,h as A,i as Me,j as ue,k as K}from"./chunk-OTH4M5L3.js";import{b as w,d as de}from"./chunk-4MJF77RD.js";import{c as S,d as Re,h as $}from"./chunk-INNDBLZE.js";import{f as L}from"./chunk-FCV2DPZQ.js";import{createSdkMcpServer as Ut,tool as p}from"@anthropic-ai/claude-agent-sdk";import{z as o}from"zod";K();X();import{v4 as G}from"uuid";de();function bt(e){return{id:e.id,goalId:e.goal_id,level:e.level,parentId:e.parent_id??void 0,name:e.name,description:e.description??void 0,weight:e.weight,calibrationFactor:e.calibration_factor,createdAt:e.created_at}}function F(e){w().prepare(`
|
|
2
|
-
INSERT INTO metric_tree (id, goal_id, level, parent_id, name, description,
|
|
3
|
-
weight, calibration_factor, created_at)
|
|
4
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
5
|
-
`).run(e.id,e.goalId,e.level,e.parentId??null,e.name,e.description??null,e.weight,e.calibrationFactor,e.createdAt)}function Ye(e){return w().prepare("SELECT * FROM metric_tree WHERE goal_id = ? ORDER BY level, created_at").all(e).map(bt)}$();var yt=S("goal-manager");async function Or(e){let t;try{let n=JSON.parse(e);t={name:n.name??"",description:n.description,metric:n.metric??"",targetValue:n.targetValue??0,currentValue:n.currentValue??0,deadline:n.deadline??0,budget:n.budget??0,roleId:n.roleId??"engineer",status:"active"}}catch{t=await wt(e)}let r=vt(t);return{goalState:t,validationResult:r,rawInput:e}}async function wt(e){let t=`Extract SMART goal fields from this natural language input.
|
|
6
|
-
|
|
7
|
-
Input: "${e}"
|
|
8
|
-
|
|
9
|
-
Respond ONLY with a JSON object:
|
|
10
|
-
{
|
|
11
|
-
"name": "short goal name (max 100 chars)",
|
|
12
|
-
"description": "detailed description of what the goal aims to achieve",
|
|
13
|
-
"metric": "measurable metric name (e.g. completion, reports_written, accuracy_score)",
|
|
14
|
-
"targetValue": <number, the target to reach>,
|
|
15
|
-
"deadline_days": <number, days from now to complete>,
|
|
16
|
-
"budget": <number, estimated budget in USD>,
|
|
17
|
-
"role": "<best matching role: engineer | analyst | content_creator | reviewer>"
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
Rules:
|
|
21
|
-
- name: concise, actionable title
|
|
22
|
-
- metric: quantifiable measure of success; use "completion" if the goal is binary (done/not done)
|
|
23
|
-
- targetValue: realistic target for the metric; use 1 for binary goals
|
|
24
|
-
- deadline_days: reasonable timeframe; default 7 if unclear
|
|
25
|
-
- budget: estimated cost in USD; default 5 if unclear
|
|
26
|
-
- role: match to the nature of work (research=analyst, writing=content_creator, coding=engineer, review=reviewer)`;try{let n=(await re(t,"You extract structured SMART goal fields from natural language. Reply with only valid JSON.")).match(/\{[\s\S]*\}/);if(n){let a=JSON.parse(n[0]),i=a.deadline_days??7;return{name:(a.name??e.slice(0,100)).slice(0,100),description:a.description??e,metric:a.metric??"completion",targetValue:a.targetValue??1,currentValue:0,deadline:Date.now()+i*24*60*60*1e3,budget:a.budget??5,roleId:a.roleId??"engineer",status:"active"}}}catch(r){yt.warn({error:r},"LLM goal parsing failed, using fallback")}return{name:e.trim().slice(0,100),description:e.trim(),metric:"completion",targetValue:1,currentValue:0,deadline:Date.now()+10080*60*1e3,budget:5,roleId:"engineer",status:"active"}}function vt(e){let t=[],r=[];return(!e.name||e.name.trim().length===0)&&t.push("S: name must be non-empty"),(!e.description||e.description.trim().length===0)&&t.push("S: description must be non-empty"),(!e.metric||e.metric.trim().length===0)&&t.push("M: metric must be specified"),e.targetValue<=0&&t.push("A: targetValue must be > 0"),(!e.roleId||e.roleId.trim().length===0)&&t.push("R: roleId must be non-empty"),e.deadline<=Date.now()&&t.push("T: deadline must be in the future"),e.budget<=0&&r.push("budget is zero or negative; goal will have no spending limit"),{isValid:t.length===0,errors:t,warnings:r}}function jr(e,t,r){let n=G(),a=Date.now(),i={id:n,name:e.name,description:e.description,roleId:e.roleId,metricType:e.metric,targetValue:e.targetValue,currentValue:e.currentValue,deadline:e.deadline,budgetUsd:e.budget,status:e.status,createdAt:a,deliverTo:t,reportTo:r};return ee(i),i}function ze(e,t){let r=Date.now(),n=[],a={id:G(),goalId:e,level:"L0",name:`${t}_goal_progress`,description:`Goal-level ${t} progress (monthly)`,weight:1,calibrationFactor:1,createdAt:r};n.push(a),F(a);let i={id:G(),goalId:e,level:"L1",parentId:a.id,name:`${t}_weekly_trend`,description:`Weekly trend for ${t}`,weight:.8,calibrationFactor:1,createdAt:r};n.push(i),F(i);let s={id:G(),goalId:e,level:"L2",parentId:i.id,name:`${t}_daily_process`,description:`Daily process metric for ${t}`,weight:.6,calibrationFactor:1,createdAt:r};n.push(s),F(s);let c={id:G(),goalId:e,level:"L3",parentId:s.id,name:`${t}_per_task`,description:`Per-task instant metric for ${t}`,weight:.4,calibrationFactor:1,createdAt:r};return n.push(c),F(c),n}var ne=class{static collect(t,r){let n=y(t);if(!n)return this.emptyMetrics(t,r);let a=z(t,500,0),i=n.completedAt&&n.startedAt?n.completedAt-n.startedAt:0,s=new Set,c=0,d=0;for(let m of a)m.type==="tool_call"&&m.toolName&&s.add(m.toolName),m.type==="error"&&c++,m.type==="approval_request"&&d++;let u={taskId:t,goalId:r,timestamp:Date.now(),durationMs:i,costUsd:n.costUsd??0,turns:n.numTurns??0,toolCount:s.size,errorCount:c,approvalCount:d,rawScore:0,isComplete:n.status==="completed"};return u.rawScore=this.computeRawScore(u),u}static computeRawScore(t){let n=1-Math.min(t.durationMs/6e5,1),i=1-Math.min(t.costUsd/5,1),c=1-Math.min(t.turns/50,1),d;t.toolCount>=3&&t.toolCount<=15?d=1:t.toolCount<3?d=t.toolCount/3:d=Math.max(0,1-(t.toolCount-15)/15);let u=t.errorCount===0?1:Math.max(0,1-t.errorCount*.2),m=Math.min(1,.5+t.approvalCount*.25);return .3*n+.2*i+.2*c+.1*d+.15*u+.05*m}static cache=new Map;static persist(t){this.cache.set(t.taskId,t)}static getCached(t){return this.cache.get(t)}static clearCache(){this.cache.clear()}static emptyMetrics(t,r){return{taskId:t,goalId:r,timestamp:Date.now(),durationMs:0,costUsd:0,turns:0,toolCount:0,errorCount:0,approvalCount:0,rawScore:0,isComplete:!1}}};de();function It(e){return{id:e.id,strategyId:e.strategy_id,goalId:e.goal_id,taskId:e.task_id??void 0,reward:e.reward??void 0,metricL2Score:e.metric_l2_score??void 0,metricL3Score:e.metric_l3_score??void 0,context:e.context??void 0,completedAt:e.completed_at}}function Ke(e){w().prepare(`
|
|
27
|
-
INSERT INTO trials (id, strategy_id, goal_id, task_id, reward,
|
|
28
|
-
metric_l2_score, metric_l3_score, context, completed_at)
|
|
29
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
30
|
-
`).run(e.id,e.strategyId,e.goalId,e.taskId??null,e.reward??null,e.metricL2Score??null,e.metricL3Score??null,e.context??null,e.completedAt)}function Qe(e,t=100){return w().prepare("SELECT * FROM trials WHERE goal_id = ? ORDER BY completed_at DESC LIMIT ?").all(e,t).map(It)}var oe=class{static collect(t){let r=x(t);if(!r)return this.emptyMetrics(t);let n=Date.now(),a=r.targetValue>0?Math.min(r.currentValue/r.targetValue,1):0,i=Math.max(0,(r.deadline-n)/(1e3*60*60*24)),s=this.calculateBudgetSpent(t),c=r.budgetUsd>0?Math.max(0,1-s/r.budgetUsd):1,d=this.calculateExpectedCompletion(r),u={goalId:t,metricType:r.metricType,targetValue:r.targetValue,currentValue:r.currentValue,progressPct:a,deadlineRemainingDays:i,budgetRemainingPct:c,expectedCompletionPct:d,rawScore:0};return u.rawScore=this.computeRawScore(u),u}static computeRawScore(t){let r=Math.min(t.progressPct,1),n;t.expectedCompletionPct>=1?n=1:t.expectedCompletionPct>=.8?n=.5+(t.expectedCompletionPct-.8)*2.5:n=t.expectedCompletionPct*.625;let a=t.budgetRemainingPct;return .5*r+.3*n+.2*a}static calculateExpectedCompletion(t){let r=Date.now(),n=t.deadline-t.createdAt,a=r-t.createdAt;if(n<=0)return 0;let i=a/n;if(i<.1)return .5;let s=t.targetValue>0?t.currentValue/t.targetValue:0;return i>0?s/i:0}static calculateBudgetSpent(t){let r=Qe(t,1e3),n=0,a=new Set;for(let i of r)if(i.taskId&&!a.has(i.taskId)){a.add(i.taskId);let s=y(i.taskId);s?.costUsd&&(n+=s.costUsd)}return n}static emptyMetrics(t){return{goalId:t,metricType:"",targetValue:0,currentValue:0,progressPct:0,deadlineRemainingDays:0,budgetRemainingPct:0,expectedCompletionPct:0,rawScore:0}}};$();var Tt=S("agent"),V=class{static cache=new Map;static CACHE_TTL=1440*60*1e3;static async callClaude(t){let a=(await re(t,'You are an AI quality evaluator. Respond with JSON: {"score": 0-1, "confidence": 0-1, "reasoning": "..."}')).match(/\{[\s\S]*\}/);if(!a)throw new Error("Failed to parse LLM Judge response as JSON");let i=JSON.parse(a[0]);return{score:Math.max(0,Math.min(1,i.score??0)),confidence:Math.max(.3,Math.min(.95,i.confidence??.5)),reasoning:i.reasoning??"No reasoning provided"}}static async evaluate(t,r){let n=`${t}:${r}`,a=this.cache.get(n);if(a&&Date.now()-a.evaluatedAt<this.CACHE_TTL)return a;let i=y(t);if(!i){let f={taskId:t,criteria:r,score:0,confidence:.3,reasoning:"Task not found",evaluatedAt:Date.now()};return this.cache.set(n,f),f}let s=this.getPromptTemplate(i.prompt??"",i.result??i.error??"",r),c,d,u;try{let f=await this.callClaude(s);c=f.score,d=f.confidence,u=f.reasoning}catch(f){Tt.warn({error:f,taskId:t},"LLM Judge Claude API call failed, using heuristic fallback"),i.status==="failed"?(c=.1,d=.6,u=`Task failed: ${i.error??"unknown error"} (heuristic fallback)`):i.status==="completed"&&i.result?(c=.7,d=.5,u="Task completed with result (heuristic fallback due to API error)"):i.status==="completed"?(c=.5,d=.4,u="Task completed without explicit result (heuristic fallback)"):(c=.3,d=.3,u=`Task in status: ${i.status} (heuristic fallback)`)}let m={taskId:t,criteria:r,score:c,confidence:d,reasoning:u,evaluatedAt:Date.now()};return this.cache.set(n,m),m}static shouldUseObjective(t){let r=y(t);return r?r.status==="completed"&&r.costUsd!==void 0&&r.numTurns!==void 0:!1}static clearCache(){this.cache.clear()}static getPromptTemplate(t,r,n){return`You are an expert evaluator. Evaluate the following task result against these criteria:
|
|
31
|
-
|
|
32
|
-
Task: ${t}
|
|
33
|
-
Result: ${r}
|
|
34
|
-
Criteria: ${n}
|
|
35
|
-
|
|
36
|
-
Provide:
|
|
37
|
-
1. Score (0-1): How well did the task meet the criteria?
|
|
38
|
-
2. Confidence (0-1): How confident are you in this evaluation?
|
|
39
|
-
3. Reasoning: Brief explanation of your scoring
|
|
40
|
-
|
|
41
|
-
Respond in JSON: {"score": number, "confidence": number, "reasoning": "string"}`}};var St={L0:.2,L1:.15,L2:.35,L3:.3},ae=class e{goalId;nodes;children;constructor(t,r){this.goalId=t,this.nodes=new Map(r.map(n=>[n.id,n])),this.children=new Map;for(let n of r){let a=n.parentId,i=this.children.get(a)??[];i.push(n),this.children.set(a,i)}this.validateAcyclicity()}validateAcyclicity(){for(let t of this.nodes.values()){if(t.parentId&&!this.nodes.has(t.parentId))continue;let r=new Set,n=t.id;for(;n;){if(r.has(n))throw new Error(`Cycle detected in metric tree at node ${n}`);r.add(n),n=this.nodes.get(n)?.parentId}}}static buildFromGoal(t){let r=Ye(t);return new e(t,r)}static fromNodes(t,r){return new e(t,r)}queryPath(t){let r=[];for(let n of this.nodes.values())n.level===t&&r.push(n);return r.sort((n,a)=>a.weight-n.weight)}aggregateScores(t,r){let n=this.queryPath(t);if(n.length===0)return 0;let a=0,i=0;for(let s of n){let c=r.get(s.id)??0,d=s.weight*s.calibrationFactor;a+=c*d,i+=d}return i>0?a/i:0}getWeightedScore(t){let r=0;for(let[n,a]of Object.entries(St)){let i=this.aggregateScores(n,t);r+=i*a}return Math.max(0,Math.min(1,r))}getNodeCount(){return this.nodes.size}getChildren(t){return this.children.get(t)??[]}};$();var ln=S("agent");function ie(e,t){let r=Date.now(),n=ae.buildFromGoal(e),a=new Map,i=oe.collect(e);for(let d of n.queryPath("L0"))a.set(d.id,i.rawScore);let s=kt(n);if(t){let d=ne.collect(t,e);if(d.isComplete){for(let m of n.queryPath("L3"))a.set(m.id,d.rawScore);let u=n.getNodeCount()>0?n.getWeightedScore(a):Math.max(0,Math.min(1,d.rawScore*.65+i.rawScore*.35));return{goalId:e,taskId:t,reward:u,breakdown:{L0:i.rawScore,L1:0,L2:0,L3:d.rawScore},calibrationFactors:s,source:"objective",confidence:.9,computedAt:r}}}if(t&&!V.shouldUseObjective(t)){let u=V.evaluate(t,"general_quality"),m=i.rawScore*.5+.5*.5;return{goalId:e,taskId:t,reward:i.rawScore,breakdown:{L0:i.rawScore,L1:0,L2:0,L3:0,llmJudge:.5},calibrationFactors:s,source:"llm_judge",confidence:.4,computedAt:r}}let c=n.getNodeCount()>0?n.getWeightedScore(a):i.rawScore;return{goalId:e,reward:c,breakdown:{L0:i.rawScore,L1:0,L2:0,L3:0},calibrationFactors:s,source:"fallback",confidence:.3,computedAt:r}}function kt(e){let t={L0:1,L1:1,L2:1,L3:1};for(let r of["L0","L1","L2","L3"]){let n=e.queryPath(r);n.length>0&&(t[r]=n[0].calibrationFactor)}return t}import{v4 as rt}from"uuid";de();function se(e){return{id:e.id,roleId:e.role_id,taskType:e.task_type,name:e.name,promptTemplate:e.prompt_template,alpha:e.alpha,beta:e.beta,totalTrials:e.total_trials,avgReward:e.avg_reward??void 0,createdAt:e.created_at,updatedAt:e.updated_at??void 0}}function Xe(e){w().prepare(`
|
|
42
|
-
INSERT INTO strategies (id, role_id, task_type, name, prompt_template,
|
|
43
|
-
alpha, beta, total_trials, avg_reward, created_at, updated_at)
|
|
44
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
45
|
-
`).run(e.id,e.roleId,e.taskType,e.name,e.promptTemplate,e.alpha,e.beta,e.totalTrials,e.avgReward??null,e.createdAt,e.updatedAt??null)}function Ze(e){let r=w().prepare("SELECT * FROM strategies WHERE id = ?").get(e);return r?se(r):void 0}function un(e=100){return w().prepare("SELECT * FROM strategies ORDER BY created_at LIMIT ?").all(e).map(se)}function et(e){return w().prepare("SELECT * FROM strategies WHERE role_id = ? ORDER BY created_at").all(e).map(se)}function C(e,t){return w().prepare("SELECT * FROM strategies WHERE role_id = ? AND task_type = ? ORDER BY created_at").all(e,t).map(se)}function tt(e,t){w().prepare(`
|
|
46
|
-
UPDATE strategies
|
|
47
|
-
SET alpha = alpha + ?,
|
|
48
|
-
beta = beta + ?,
|
|
49
|
-
total_trials = total_trials + 1,
|
|
50
|
-
avg_reward = CASE
|
|
51
|
-
WHEN total_trials = 0 THEN ?
|
|
52
|
-
ELSE (avg_reward * total_trials + ?) / (total_trials + 1)
|
|
53
|
-
END,
|
|
54
|
-
updated_at = ?
|
|
55
|
-
WHERE id = ?
|
|
56
|
-
`).run(t,1-t,t,t,Date.now(),e)}var B=class{static sampleBeta(t,r){let n=this.sampleGamma(t,1),a=this.sampleGamma(r,1);return n/(n+a)}static sampleGamma(t,r){if(t<1)return this.sampleGamma(t+1,r)*Math.pow(Math.random(),1/t);let n=t-1/3,a=1/Math.sqrt(9*n);for(;;){let i,s;do i=this.randn(),s=1+a*i;while(s<=0);s=s*s*s;let c=Math.random();if(c<1-.0331*i*i*i*i||Math.log(c)<.5*i*i+n*(1-s+Math.log(s)))return n*s/r}}static randn(){let t=Math.random(),r=Math.random();return Math.sqrt(-2*Math.log(t))*Math.cos(2*Math.PI*r)}static sample(t){if(t.length===0)return null;let r=null,n=-1;for(let a of t){let i=this.sampleBeta(a.alpha,a.beta);i>n&&(n=i,r=a)}return r}static getProbabilities(t,r=1e4){let n=new Map;for(let i=0;i<r;i++){let s=this.sample(t);s&&n.set(s.id,(n.get(s.id)||0)+1)}let a=new Map;for(let[i,s]of n)a.set(i,s/r);return a}};var Rt=5,ve=20,nt=.5,k=class{static selectStrategy(t,r){let n=C(t,r);return B.sample(n)}static recordTrial(t,r,n,a,i,s,c){tt(t,a),Ke({id:rt(),strategyId:t,goalId:r,taskId:n,reward:a,metricL2Score:i,metricL3Score:s,context:c,completedAt:Date.now()})}static getStrategies(t,r){return C(t,r)}static getStrategyById(t){return Ze(t)}static getPopulationStats(t,r){let n=C(t,r);if(n.length===0)return{count:0,avgTrials:0,avgReward:0,minTrials:0,maxTrials:0};let i=n.reduce((d,u)=>d+u.totalTrials,0)/n.length,s=n.filter(d=>d.avgReward!==void 0).map(d=>d.avgReward),c=s.length>0?s.reduce((d,u)=>d+u,0)/s.length:0;return{count:n.length,avgTrials:i,avgReward:c,minTrials:Math.min(...n.map(d=>d.totalTrials)),maxTrials:Math.max(...n.map(d=>d.totalTrials))}}static shouldEvolve(t,r){let n=this.getPopulationStats(t,r);return n.count<Rt?!0:n.count<ve&&n.maxTrials>0}static addStrategy(t,r,n,a){if(C(t,r).length>=ve)throw new Error(`Strategy population at maximum (${ve}) for ${t}/${r}`);let s={id:`strat-${rt().slice(0,8)}`,roleId:t,taskType:r,name:n,promptTemplate:a,alpha:nt,beta:nt,totalTrials:0,createdAt:Date.now()};return Xe(s),s}static getTopStrategies(t,r,n=3){let i=C(t,r).filter(s=>s.totalTrials>0);return i.sort((s,c)=>(c.avgReward??0)-(s.avgReward??0)),i.slice(0,n)}static getSamplingProbabilities(t,r){let n=C(t,r);return B.getProbabilities(n)}static evaluateAndRecord(t,r,n,a,i,s){let c=ie(r,n);return this.recordTrial(t,r,n,c.reward,a,i,s),c.reward}};var _t=3,Mt=2,le=class{static async generateVariants(t,r,n=_t,a=Mt){let i=k.getTopStrategies(t,r,n);if(i.length===0){let c=`baseline-${r}-v1`;return k.addStrategy(t,r,c,this.generateBaselinePrompt(t,r)),[c]}let s=[];for(let c=0;c<a;c++){let d=i[0].totalTrials+c+1,u=`${r}-evolved-v${d}`,m=i[0].promptTemplate,f=this.mutateTemplate(m);k.addStrategy(t,r,u,f),s.push(u)}return s}static generateBaselinePrompt(t,r){return`You are a ${t} agent specializing in ${r}.
|
|
57
|
-
|
|
58
|
-
## Core Focus
|
|
59
|
-
Complete tasks with high quality.
|
|
60
|
-
|
|
61
|
-
## Approach
|
|
62
|
-
1. Understand the task requirements thoroughly
|
|
63
|
-
2. Plan your approach before executing
|
|
64
|
-
3. Execute systematically, checking your work
|
|
65
|
-
4. Verify completion against requirements`}static mutateTemplate(t){let r=[this.addProcessEmphasis(),this.addQualityFocus(),this.addVerificationStep()],n=r[Math.floor(Math.random()*r.length)];return`${t}
|
|
66
|
-
|
|
67
|
-
## Evolution
|
|
68
|
-
${n}`}static addProcessEmphasis(){let t=["Break down complex tasks into smaller steps","Iterate on solutions, testing each component","Document your reasoning at each step"];return`**Process:** ${t[Math.floor(Math.random()*t.length)]}`}static addQualityFocus(){let t=["Double-check all outputs before completing","Consider edge cases and error conditions","Optimize for correctness over speed"];return`**Quality:** ${t[Math.floor(Math.random()*t.length)]}`}static addVerificationStep(){return"**Verification:** After completing, verify your work meets all requirements."}static async generateWithLLM(t,r,n){return{promptTemplate:this.generateBaselinePrompt(t,r),rationale:"Generated baseline - LLM integration in Phase 5"}}};$();Oe();import{v4 as I}from"uuid";import{spawnSync as ot}from"child_process";import{createRequire as xt}from"module";import{dirname as Pt,join as at}from"path";import{openSync as Lt,readFileSync as Ct,unlinkSync as Et}from"fs";var Dt=3e4,it=12e4;function st(){let t=xt(import.meta.url).resolve("@anthropic-ai/claude-agent-sdk");return at(Pt(t),"cli.js")}function q(e,t){let r=st(),n=t?.timeout??Dt;if(t?.json){let i=at("/tmp",`adam-cli-stdout-${process.pid}-${Date.now()}.txt`),s=Lt(i,"w");try{let c=ot("node",[r,...e],{cwd:t.cwd,timeout:n,stdio:["ignore",s,"pipe"],encoding:"utf-8"});if(c.status!==0)throw new Error(c.stderr?.trim()||`CLI exited with status ${c.status}`);return Ct(i,"utf-8")}finally{try{Et(i)}catch{}}}let a=ot("node",[r,...e],{cwd:t?.cwd,timeout:n,encoding:"utf-8"});if(a.status!==0)throw new Error(a.stderr?.trim()||`CLI exited with status ${a.status}`);return a.stdout}function lt(){let e=q(["plugin","list","--available","--json"],{json:!0});return JSON.parse(e)}function Ie(e,t="user",r){return q(["plugin","install",e,"--scope",t],{cwd:r,timeout:it})}function Te(e,t,r){let n=["plugin","uninstall",e];return t&&n.push("--scope",t),q(n,{cwd:r,timeout:it})}function ct(e,t){return q(["plugin","enable",e])}function dt(e,t){return q(["plugin","disable",e])}function _n(){try{return!!st()}catch{return!1}}$();import*as ut from"crypto";var W=S("api"),J=class{cancelTask(t){let r=y(t);r&&(O(t,{status:"cancelled",completedAt:Date.now()}),ge.emit({type:"task_status_change",taskId:t,oldStatus:r.status,newStatus:"cancelled"}),W.debug({taskId:t,oldStatus:r.status},"Task cancelled"))}resolveApproval(t,r,n){return W.debug({approvalId:t,action:r,reason:n},"Approval resolved (no-op in Pure C)"),!0}resolvePlanApproval(t,r,n,a){let i=Le(t);if(!i)return W.warn({planId:t},"Plan not found or already resolved"),!1;let s=y(i.taskId);return s?(Ce(t,r==="allow"?"approved":"denied",n),r==="allow"&&n==="permanent"&&Ee({id:ut.randomUUID(),roleId:i.roleId,taskPattern:s.prompt.slice(0,100).replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),maxRiskLevel:i.plan.overallRisk,createdAt:Date.now(),createdByTaskId:s.id}),ge.emit({type:"plan_approval_decision",taskId:s.id,planId:t,decision:r,approvalType:n,reason:a}),W.debug({planId:t,decision:r,approvalType:n},"Plan approval resolved"),!0):(W.warn({planId:t},"Task not found for plan"),!1)}};import{existsSync as mt}from"fs";function pt(e,t){return t?{allowedTools:Nt(t.allowedTools,e.allowedTools),disallowedTools:Se(e.disallowedTools,t.disallowedTools),approvalRequired:Se(e.approvalRequired,t.approvalRequired),maxBudgetUsd:t.maxBudgetUsd!==void 0&&t.maxBudgetUsd>0?Math.min(t.maxBudgetUsd,e.maxBudgetUsd):e.maxBudgetUsd,plugins:Se(e.plugins??[],t.plugins)}:{allowedTools:e.allowedTools,disallowedTools:e.disallowedTools,approvalRequired:e.approvalRequired,maxBudgetUsd:e.maxBudgetUsd,plugins:e.plugins??[]}}function Nt(e,t){if(e===void 0)return t;if(e.length===0)return[];if(t.length===0)return e;let r=new Set(t);return e.filter(n=>r.has(n))}function Se(e,t){return t===void 0?e:[...new Set([...e,...t])]}var H=S("manager");function l(e){return{content:[{type:"text",text:JSON.stringify(e)}]}}async function R(e){let{listChannels:t}=await import("./channels-LUJ7GTSP.js"),r=t(),{listSessions:n}=await import("./session-manager-JICVE4CO.js"),a=[...n("active"),...n("archived")],i=[];for(let s of e)if(s.type==="session"&&s.sessionId)i.push({type:"session",sessionId:s.sessionId});else if(s.type==="channel"){let c=s.channelId,d=s.chatId;if(!c&&s.channelName){let u=r.find(m=>m.name.toLowerCase().includes(s.channelName.toLowerCase()));u&&(c=u.id)}if(c&&!d){let u=a.find(m=>m.source.type==="channel"&&m.source.channelId===c&&m.source.chatId);u?.source.chatId?d=u.source.chatId:d=r.find(f=>f.id===c)?.config?.userId}c&&d?i.push({type:"channel",channelId:c,chatId:d}):H.warn({channelName:s.channelName,channelId:c,chatId:d},"Could not resolve channel notify target")}return i}async function $t(e){let{listRoles:t}=await import("./roles-NYGWZMQI.js"),r=t(void 0,100,0);for(let n of r)if(n.name.toLowerCase().includes(e.toLowerCase()))return n.id}var Ot={goalId:o.string()},jt={goalId:o.string(),status:o.string().optional(),currentValue:o.number().optional(),budgetUsd:o.number().optional(),notes:o.string().optional()},Ft={goalId:o.string(),goalDescription:o.string(),maxSubtasks:o.number().optional()},_=o.union([o.object({type:o.literal("session"),sessionId:o.string()}),o.object({type:o.literal("channel"),channelName:o.string()}),o.object({type:o.literal("channel"),channelId:o.string(),chatId:o.string().optional()})]),Gt={prompt:o.string(),roleId:o.string().describe("Role ID. Call list_roles first to find the best role for the task."),deliverTo:o.array(_).optional().describe("Where to deliver the task output (result full text). E.g., send result to a specific channel."),reportTo:o.array(_).optional().describe("Where to send status reports (completion summary). Defaults to the originating channel/session."),toolOverrides:o.object({allowedTools:o.array(o.string()).optional(),disallowedTools:o.array(o.string()).optional()}).optional()},Vt={taskId:o.string(),goalId:o.string().optional(),strategyId:o.string().optional()},Bt={roleId:o.string(),taskType:o.string(),name:o.string().optional()},qt={status:o.string().optional(),limit:o.number().optional()},Wt={taskId:o.string(),roleId:o.string()},Jt={taskId:o.string().optional(),status:o.string().optional(),limit:o.number().optional()},Ht={roleId:o.string(),allowedTools:o.array(o.string()).optional(),disallowedTools:o.array(o.string()).optional(),additionalDirectories:o.array(o.object({path:o.string(),mode:o.enum(["ro","rw"]).optional().describe("Read-only or read-write access. Default: rw. Enforced by OS sandbox."),inheritPlugins:o.boolean().optional(),inheritMcp:o.boolean().optional(),inheritPermissions:o.boolean().optional()})).optional(),allowedChannels:o.array(o.string()).optional(),inheritUserSettings:o.boolean().optional().describe("Enable/disable inheriting user-level settings (global plugins, MCP servers). Default: false (isolated).")},Yt={roleId:o.string().describe("Role ID to update."),name:o.string().min(1).optional(),cagPrompt:o.string().optional(),learnedRules:o.array(o.string()).optional(),status:o.enum(["active","inactive","retired"]).optional(),executionMode:o.enum(["isolated","inline"]).optional(),model:o.string().optional(),maxBudgetUsd:o.number().optional(),approvalRequired:o.array(o.string()).optional(),preferences:o.object({model:o.string().optional(),effort:o.enum(["low","medium","high","max"]).optional(),maxTurns:o.number().optional()}).optional(),permissionMode:o.enum(["default","acceptEdits","dontAsk","bypassPermissions","plan","auto"]).optional(),allowedBashPatterns:o.array(o.string()).optional(),deniedBashPatterns:o.array(o.string()).optional(),evaluationCriteria:o.record(o.string(),o.number()).optional(),envVars:o.record(o.string(),o.string()).optional()},zt={roleId:o.string().optional(),limit:o.number().optional()},Kt={name:o.string(),cagPrompt:o.string(),traits:o.array(o.string()).optional(),allowedTools:o.array(o.string()).optional(),disallowedTools:o.array(o.string()).optional(),additionalDirectories:o.array(o.object({path:o.string(),mode:o.enum(["ro","rw"]).optional().describe("Read-only or read-write access. Default: rw. Enforced by OS sandbox."),inheritPlugins:o.boolean().optional(),inheritMcp:o.boolean().optional(),inheritPermissions:o.boolean().optional()})).optional()},Qt={roleId:o.string(),reason:o.string().optional()},Xt={name:o.string(),description:o.string().optional(),roleId:o.string().optional(),metric:o.string().optional(),targetValue:o.number().optional(),deadline:o.number().optional(),budgetUsd:o.number().optional(),deliverTo:o.array(_).optional().describe("Where to deliver goal completion notifications.")},Zt={name:o.string(),description:o.string().optional(),triggerType:o.enum(["cron","event"]),triggerCron:o.string().optional(),triggerEvent:o.string().optional(),prompt:o.string(),roleId:o.string().optional(),enabled:o.boolean().optional(),goalIds:o.array(o.string()).optional(),deliverTo:o.array(_).optional().describe("Where to deliver the task output (result full text)."),reportTo:o.array(_).optional().describe("Where to send status reports (completion summary).")},er={status:o.enum(["active","retired","probation"]).optional(),limit:o.number().optional()},tr={enabled:o.boolean().optional()},rr={},nr={},or={prompt:o.string().describe("The task prompt to execute after the delay"),delayMinutes:o.number().optional().describe("Minutes from now to execute (e.g., 30 for 'half an hour later')"),runAt:o.string().optional().describe("ISO 8601 timestamp to execute at (e.g., '2026-04-01T15:00:00+08:00')"),roleId:o.string().describe("Role ID to assign the task to. Call list_roles first."),deliverTo:o.array(_).optional().describe("Where to deliver the task output (result full text)."),reportTo:o.array(_).optional().describe("Where to send status reports (completion summary).")},ar={roleId:o.string().optional().describe("If provided, shows which plugins are installed in that role's workspace.")},ir={roleId:o.string().describe("Role ID to install the plugin under (project-scope)."),pluginId:o.string().describe("Plugin ID (e.g. 'github@anthropic'). Use list_available_plugins to discover available plugins.")},sr={roleId:o.string().describe("Role ID to uninstall the plugin from."),pluginId:o.string().describe("Plugin ID to uninstall.")},lr={roleId:o.string().describe("Role ID to bind the MCP server to."),mcpName:o.string().describe("Name for this MCP server (e.g., 'github', 'filesystem')."),mcpConfig:o.record(o.string(),o.unknown()).describe("MCP server configuration object.")},cr={roleId:o.string().describe("Role ID to unbind the MCP server from."),mcpName:o.string().describe("Name of the MCP server to remove.")},dr={pluginId:o.string().describe("Plugin ID (e.g., 'github@anthropic').")},ur={pluginId:o.string().describe("Plugin ID (e.g., 'github@anthropic').")},pr={pluginId:o.string().describe("Plugin ID (e.g., 'github@anthropic').")},mr={pluginId:o.string().describe("Plugin ID (e.g., 'github@anthropic').")},gr={},fr={},hr={pluginId:o.string().describe("Plugin ID (e.g., 'github@anthropic').")},br={roleId:o.string().describe("Role ID to associate scanned plugins with."),path:o.string().describe("Directory path to scan for .claude/settings.json.")},yr={taskId:o.string().describe("Task ID to cancel.")},wr={taskId:o.string().describe("Task ID to get logs for."),limit:o.number().optional().describe("Max log entries (default 20).")},vr={roleId:o.string().describe("Role ID to delete.")},Ir={},Tr={updates:o.record(o.string(),o.unknown()).describe("Config key-value pairs to update. Example: { 'defaults.maxTurns': 50, 'logging.level': 'debug' }")},Sr={roleId:o.string().describe("Role ID to list memories for."),limit:o.number().optional().describe("Max results (default 20).")},kr={templateId:o.string().describe("Template ID to update."),name:o.string().optional(),enabled:o.boolean().optional(),prompt:o.string().optional(),triggerCron:o.string().optional(),triggerEvent:o.string().optional(),roleId:o.string().optional()},Rr={templateId:o.string().describe("Template ID to delete.")},_r={templateId:o.string().describe("Template ID to run immediately.")},Mr={enabled:o.boolean().optional().describe("Filter by enabled status.")},xr={eventType:o.string().describe("Event type that triggers this rule (e.g., 'task_complete')."),channelId:o.string().describe("Channel ID to deliver to."),format:o.string().optional().describe("Format template (e.g., 'summary', 'full'). Default: 'summary'."),matchCriteria:o.record(o.string(),o.unknown()).optional().describe("JSON match criteria for event fields."),enabled:o.boolean().optional().describe("Enable this rule immediately (default true).")},Pr={ruleId:o.string().describe("Delivery rule ID to delete.")},Lr={roleId:o.string().optional().describe("Role ID to filter strategies by.")},gt=[p("read_goal_state","Read a single goal's detailed state: progress percentage, time remaining, budget spent, and current value. Use this for deep-dive on one goal; use list_goals for an overview of all goals.",Ot,async e=>{let t=x(e.goalId);if(!t)return l({error:"Goal not found"});let r=Date.now(),n=t.targetValue>0?t.currentValue/t.targetValue:0;return l({id:t.id,name:t.name,description:t.description,roleId:t.roleId,metricType:t.metricType,targetValue:t.targetValue,currentValue:t.currentValue,deadline:t.deadline,budgetUsd:t.budgetUsd,status:t.status,progress:n,timeRemainingMs:Math.max(0,t.deadline-r),budgetRemainingUsd:t.budgetUsd})}),p("update_goal_state","Update a goal's status, current value, or budget.",jt,async e=>{let t={};return e.status&&(t.status=e.status),e.currentValue!==void 0&&(t.currentValue=e.currentValue),e.budgetUsd!==void 0&&(t.budgetUsd=e.budgetUsd),Object.keys(t).length>0&&(t.updatedAt=Date.now(),te(e.goalId,t)),l({success:!0})}),p("decompose_goal","Decompose a goal into actionable subtasks using LLM reasoning.",Ft,async e=>{let t=T(),r=Math.min(e.maxSubtasks??5,10);try{let{query:a}=await import("@anthropic-ai/claude-agent-sdk"),i=`Decompose this goal into ${r} actionable subtasks.
|
|
69
|
-
|
|
70
|
-
Goal: ${e.goalDescription}
|
|
71
|
-
|
|
72
|
-
Respond ONLY with a JSON array. Each item: {"description": "...", "prompt": "detailed task instruction", "complexity": "low|medium|high", "role": "engineer|analyst|content_creator|reviewer"}
|
|
73
|
-
|
|
74
|
-
Rules:
|
|
75
|
-
- Each subtask must be independently executable
|
|
76
|
-
- Order from foundational to dependent
|
|
77
|
-
- Be specific about what each subtask should accomplish
|
|
78
|
-
- For each subtask, specify the best role from: 'engineer', 'analyst', 'content_creator', 'reviewer'. Match role to the nature of the work.`,s=a({prompt:i,options:{cwd:process.cwd(),maxTurns:1,maxBudgetUsd:.02}}),c="";for await(let u of s){let m=u;m.type==="result"&&typeof m.result=="string"&&(c=m.result)}let d=c.match(/\[[\s\S]*\]/);if(d){let u=JSON.parse(d[0]),m=[];for(let f=0;f<Math.min(u.length,r);f++){let h=u[f],U=`subtask-${I().slice(0,8)}`,P=h.role,g=P?await $t(P):void 0;Y({id:U,status:"pending",prompt:h.prompt,parentId:e.goalId,roleId:g,config:t.defaults,createdAt:Date.now()}),m.push({id:U,description:h.description,prompt:h.prompt,dependencies:f>0?[m[f-1].id]:[],estimatedComplexity:h.complexity??"medium",role:P})}if(m.length>0)return l({subtasks:m})}}catch(a){H.error({error:a},"LLM decomposition failed, using fallback")}let n=[];for(let a=0;a<r;a++){let i=`subtask-${I().slice(0,8)}`,s=`Subtask ${a+1} of goal: ${e.goalDescription.slice(0,100)}`,c=`${e.goalDescription}
|
|
79
|
-
|
|
80
|
-
Subtask ${a+1}/${r}`;Y({id:i,status:"pending",prompt:c,parentId:e.goalId,config:t.defaults,createdAt:Date.now()}),n.push({id:i,description:s,prompt:c,dependencies:a>0?[n[a-1].id]:[],estimatedComplexity:"medium"})}return l({subtasks:n})}),p("dispatch_task","Create and immediately dispatch a task to the execution pool. roleId is required \u2014 call list_roles first to find the best role. The assigned role determines which tools the worker can use. Pass deliverTo (result delivery) and/or reportTo (status reports) to route output when the task completes.",Gt,async e=>{let t=v(e.roleId);if(!t||t.status!=="active"){let ce=A("active",20,0).filter(M=>M.source!=="system").map(M=>({id:M.id,name:M.name,allowedTools:M.allowedTools??[],capabilitySummary:N(M)}));return l({error:`Role not found or not active: ${e.roleId}. Pick a roleId from the list below.`,availableRoles:ce})}let r=I(),n=T(),a=e.prompt.toLowerCase(),i={coding:["code","implement","fix","debug","refactor","build"],analysis:["analyze","data","report","statistics","investigate"],content:["write","translate","summarize","content","draft"],review:["review","check","audit","evaluate","assess"],admin:["config","permission","deploy","manage"]},s="general";for(let[ce,M]of Object.entries(i))if(M.some(ft=>a.includes(ft))){s=ce;break}let c,d=e.prompt,u=k.selectStrategy(e.roleId,s);u?.promptTemplate&&(d=`${u.promptTemplate}
|
|
81
|
-
|
|
82
|
-
## Task
|
|
83
|
-
${e.prompt}`,c=u.id);let m=t?{allowedTools:t.allowedTools,disallowedTools:t.disallowedTools,approvalRequired:t.approvalRequired,maxBudgetUsd:t.maxBudgetUsd,plugins:void 0}:void 0,f=pt(n.defaults,m),h=f.allowedTools;e.toolOverrides?.allowedTools&&(h=[...e.toolOverrides.allowedTools]);let U={...n.defaults,...f,allowedTools:h,disallowedTools:e.toolOverrides?.disallowedTools??f.disallowedTools},P=e.deliverTo?await R(e.deliverTo):void 0,g=e.reportTo?await R(e.reportTo):void 0;Y({id:r,status:"pending",prompt:d,roleId:e.roleId,deliverTo:P,reportTo:g,config:U,createdAt:Date.now()});let{serverBus:b}=await import("./server-bus-GEGVMSCA.js");return b.emit({type:"task_created",taskId:r}),l({taskId:r,roleId:e.roleId,strategyId:c})}),p("dispatch_workflow","Create and execute a multi-role workflow. Use when the user's request decomposes into sequential or parallel steps handled by different roles. Each step is a complete task; roles handle conditions and decisions internally. Use {{stepId.result}} in prompts to reference prior step outputs. Minimum 2 steps.",{steps:o.array(o.object({id:o.string().describe("Unique step identifier"),prompt:o.string().describe("Task prompt for this step"),roleId:o.string().describe("Role ID for this step. Call list_roles first to find roles."),dependsOn:o.array(o.string()).optional().describe("Step IDs this step depends on"),config:o.object({timeout:o.number().optional(),maxTurns:o.number().optional()}).optional()})).min(2).describe("Workflow steps (min 2)"),name:o.string().optional().describe("Workflow name for tracking"),deliverTo:o.array(_).optional().describe("Where to deliver the aggregated workflow output"),reportTo:o.array(_).optional().describe("Where to send workflow status reports"),continueOnError:o.boolean().optional().describe("Continue remaining steps if one fails (default false)")},async e=>{let t=[];for(let g of e.steps){let b=v(g.roleId);(!b||b.status!=="active")&&t.push(g.roleId)}if(t.length>0){let g=A("active",20,0).filter(b=>b.source!=="system").map(b=>({id:b.id,name:b.name,capabilitySummary:N(b)}));return l({error:`Invalid or inactive roles: ${t.join(", ")}. Pick from available roles.`,availableRoles:g})}let r=new Set(e.steps.map(g=>g.id));for(let g of e.steps)if(g.dependsOn)for(let b of g.dependsOn){if(!r.has(b))return l({error:`Step "${g.id}" depends on unknown step "${b}"`});if(b===g.id)return l({error:`Step "${g.id}" cannot depend on itself`})}let n=new Set,a=new Set,i=new Map(e.steps.map(g=>[g.id,g.dependsOn??[]])),s=g=>{if(a.has(g))return!0;if(n.has(g))return!1;n.add(g),a.add(g);for(let b of i.get(g)??[])if(s(b))return!0;return a.delete(g),!1};for(let g of e.steps)if(s(g.id))return l({error:"Circular dependency detected in workflow steps"});let c=e.deliverTo?await R(e.deliverTo):void 0,d=e.reportTo?await R(e.reportTo):void 0,u=I(),m=T(),f={id:`workflow-${u}`,name:e.name??"Ad-hoc workflow",trigger:{type:"manual"},steps:e.steps.map(g=>({id:g.id,prompt:g.prompt,roleId:g.roleId,dependsOn:g.dependsOn,config:g.config})),enabled:!0,createdAt:Date.now(),config:{...m.defaults,continueOnError:e.continueOnError??!1},deliverTo:c,reportTo:d};fe(f);let{WorkflowExecutor:h}=await import("./workflow-executor-QN4KP7B4.js");new h().execute(f,u).catch(g=>{H.error({executionId:u,error:g},"dispatch_workflow execution failed")});let P=e.steps.map(g=>v(g.roleId)?.name??g.roleId);return l({executionId:u,templateId:f.id,stepCount:e.steps.length,roles:[...new Set(P)],status:"started"})}),p("evaluate_result","Evaluate a completed task's result and record a trial for Thompson Sampling.",Vt,async e=>{let{goalId:t,taskId:r,strategyId:n}=e,a=ie(t??"",r);return n&&t&&k.recordTrial(n,t,r,a.reward,a.breakdown.L2||void 0,a.breakdown.L3||void 0,"Evaluated via adam-tools"),l({reward:a.reward,metricL2Score:a.breakdown.L2||void 0,metricL3Score:a.breakdown.L3||void 0,source:a.source,reasoning:`Evaluated via ${a.source} with confidence ${a.confidence.toFixed(2)}`})}),p("create_strategy","Create a new strategy variant for a role/taskType using LLM evolution.",Bt,async e=>{let{roleId:t,taskType:r}=e;await le.generateVariants(t,r,3,1);let n=k.getStrategies(t,r),a=n[n.length-1];return l(a?{id:a.id,name:a.name,promptTemplate:a.promptTemplate}:{error:`Failed to create strategy for ${t}/${r}`})}),p("list_goals","List all goals with progress percentage, budget, deadline, and time remaining. Goal statuses: active (in progress), paused, completed, failed. Use this to check current goal status before making decisions.",qt,async e=>{let t=e.status;return l(Be(t,e.limit??10,0))}),p("delete_goal","Delete a goal by ID.",{goalId:o.string()},async e=>x(e.goalId)?(qe(e.goalId),l({success:!0,goalId:e.goalId})):l({error:"Goal not found"})),p("pause_goal","Pause an active goal.",{goalId:o.string()},async e=>x(e.goalId)?(te(e.goalId,{status:"paused",updatedAt:Date.now()}),l({success:!0,goalId:e.goalId,status:"paused"})):l({error:"Goal not found"})),p("assign_role","Assign a role to a pending task.",Wt,async e=>{let{taskId:t,roleId:r}=e;if(!y(t))return l({error:`Task not found: ${t}`});let a=v(r);return a?(O(t,{roleId:r}),H.debug({taskId:t,roleId:r,roleName:a.name},"Role assigned to task"),l({success:!0,taskId:t,roleId:r})):l({error:`Role not found: ${r}`})}),...We(),p("read_task_status","Read a single task's details (prompt, status, result, roleId) by ID, or list all tasks filtered by status (pending, running, completed, failed). Use this to check task progress and results.",Jt,async e=>{if(e.taskId){let r=y(e.taskId);return l(r??{error:"Task not found"})}let t=e.status;return l(E(t,e.limit??100,0))}),p("modify_role_permissions","Update a role's RBAC permissions (paths, tools).",Ht,async e=>{if(!v(e.roleId))return l({error:`Role not found: ${e.roleId}`});let r={};return e.allowedTools&&(r.allowedTools=e.allowedTools),e.disallowedTools&&(r.disallowedTools=e.disallowedTools),e.additionalDirectories!==void 0&&(r.additionalDirectories=e.additionalDirectories),e.allowedChannels!==void 0&&(r.allowedChannels=e.allowedChannels),"inheritUserSettings"in e&&(r.inheritUserSettings=e.inheritUserSettings),D(e.roleId,r),l({success:!0})}),p("update_role","Update a role's identity and config fields (name, CAG prompt, learned rules, status, model, execution mode, preferences, permission mode, bash patterns, evaluation criteria, env vars). For permission fields (allowedTools, disallowedTools, additionalDirectories, allowedChannels, inheritUserSettings) use modify_role_permissions instead.",Yt,async e=>{if(!v(e.roleId))return l({error:`Role not found: ${e.roleId}`});let{roleId:r,...n}=e,a={...n,updatedAt:Date.now()};D(r,a);let i=v(r);if(!i)return l({error:"Role disappeared after update"});if(e.cagPrompt!==void 0||e.learnedRules!==void 0){let s=xe(i.name);mt(s)&&Pe(s,i)}return l({success:!0,role:i})}),p("view_audit_log","View the evolution audit log for role changes.",zt,async e=>{let{listEvolutionAudit:t}=await import("./evolution-audit-I2ITWAEC.js"),r=t(e.limit??50);return l({entries:r})}),p("list_roles","List all roles with their capabilities including bound plugins (skills/agents). Use this to discover available roles before dispatching tasks.",er,async e=>{let r=A(e.status,e.limit??50,0).map(n=>{let a=ye(n);return{id:n.id,name:n.name,status:n.status,allowedTools:n.allowedTools??[],disallowedTools:n.disallowedTools??[],additionalDirectories:n.additionalDirectories??[],cagPrompt:n.cagPrompt.slice(0,500)+(n.cagPrompt.length>500?"...":""),capabilitySummary:N(n,a),plugins:a.plugins.map(i=>({name:i.name,skills:i.skills.map(s=>s.name),agents:i.agents.map(s=>s.name)}))}});return l({roles:r})}),p("create_role","Create a new role with a name, CAG prompt, and optional tool permissions.",Kt,async e=>{let t=`role-${I().slice(0,8)}`,r={id:t,name:e.name,cagPrompt:e.cagPrompt,learnedRules:[],memoryStreamId:`mem-${I().slice(0,8)}`,status:"active",preferences:{},createdAt:Date.now(),allowedTools:e.allowedTools,disallowedTools:e.disallowedTools,additionalDirectories:e.additionalDirectories};return _e(r),Q(r),l({roleId:t,name:e.name,allowedTools:e.allowedTools,additionalDirectories:e.additionalDirectories??[]})}),p("retire_role","Retire a role (marks as retired, stops receiving tasks).",Qt,async e=>v(e.roleId)?(D(e.roleId,{status:"retired"}),H.info({roleId:e.roleId,reason:e.reason},"Role retired"),l({success:!0})):l({error:`Role not found: ${e.roleId}`})),p("create_goal","Create a new goal with optional budget, deadline, and metric tracking.",Xt,async e=>{let t=I(),r=Date.now(),n=r+10080*60*1e3,a={id:t,name:e.name,description:e.description,roleId:e.roleId??"engineer",metricType:e.metric??"completion",targetValue:e.targetValue??1,currentValue:0,deadline:e.deadline??n,budgetUsd:e.budgetUsd??5,status:"active",createdAt:r,deliverTo:e.deliverTo?await R(e.deliverTo):void 0};ee(a),ze(t,a.metricType);let i=x(t);return l({goalId:i.id,name:i.name,status:i.status})}),p("create_template","Create a recurring scheduled task using cron expressions (e.g., 'every hour', 'daily at 9am', 'weekly'). For one-shot delayed tasks ('in 30 minutes', 'tomorrow at 3pm'), use schedule_task instead.",Zt,async e=>{let{createTaskTemplate:t}=await import("./task-templates-NC7XIZIC.js"),r=I(),n=I(),a=e.deliverTo?await R(e.deliverTo):void 0,i=e.reportTo?await R(e.reportTo):void 0,s={id:r,name:e.name,description:e.description,trigger:{type:e.triggerType,cron:e.triggerCron,event:e.triggerEvent},steps:[{id:n,prompt:e.prompt}],rolePreference:e.roleId,enabled:e.enabled??!0,createdAt:Date.now(),goalIds:e.goalIds,deliverTo:a,reportTo:i};return t(s),l({templateId:r,name:s.name,trigger:s.trigger})}),p("list_templates","List task templates (automations). Use this to check existing scheduled/recurring tasks before creating new ones.",{enabled:o.boolean().optional().describe("Filter by enabled status. Omit to list all."),limit:o.number().optional().describe("Max results (default 50)")},async e=>{let{listTaskTemplates:t}=await import("./task-templates-NC7XIZIC.js"),r=t(e.enabled,e.limit??50,0);return l(r.map(n=>({id:n.id,name:n.name,description:n.description,trigger:n.trigger,enabled:n.enabled,rolePreference:n.rolePreference,deliverTo:n.deliverTo,createdAt:n.createdAt})))}),p("send_to_channel","Send a message (text, image, voice, video, file) to a connected channel by name. Use this to deliver task results, media, or notifications to a specific channel (e.g., WeChat on iPad). For media: provide mediaUrl as an absolute local file path and mediaType. Do NOT use remote URLs \u2014 download files locally first.",{channelName:o.string().describe("The channel name, e.g., 'WeChat on iPad'"),message:o.string().describe("The message content to send (text caption when sending media)"),mediaUrl:o.string().optional().describe("Absolute local file path to the media file (e.g. /Users/.../file.png). Must exist on disk. Do NOT use remote URLs \u2014 download files locally first."),mediaType:o.enum(["image","audio","video","file"]).optional().describe("Type of the media file. Required when mediaUrl is provided")},async e=>{if(e.mediaUrl){if(e.mediaUrl.includes("://")&&!e.mediaUrl.startsWith("file://"))return l({error:`mediaUrl must be a local file path, not a remote URL. Got: ${e.mediaUrl.slice(0,80)}. Download the file to a local path first, then pass the local path.`});let s=e.mediaUrl.startsWith("file://")?new URL(e.mediaUrl).pathname:e.mediaUrl;if(!mt(s))return l({error:`Media file not found: ${s}. Verify the file exists before sending.`});if(!e.mediaType)return l({error:"mediaType is required when mediaUrl is provided. Specify one of: image, audio, video, file."})}let t=await R([{type:"channel",channelName:e.channelName}]);if(t.length===0)return l({error:`Channel "${e.channelName}" not found or no chatId available`});let r=t[0];if(r.type!=="channel")return l({error:"Resolved target is not a channel"});let{getOutboundGateway:n}=await import("./outbound-gateway-GGFMU5JW.js"),i=await n().send({channelId:r.channelId,chatId:r.chatId,content:e.message,messageType:"deliver",mediaUrl:e.mediaUrl,mediaType:e.mediaType});return l({success:i.success,channelName:e.channelName,...i.error?{error:i.error}:{}})}),p("list_channels","List all connected channels with their platform, status, and chatId for message delivery. Use this to discover available channels before sending messages or setting up notifications.",tr,async e=>{let t=he(e.enabled),r=[...be("active"),...be("archived")],n=t.map(a=>{let i,s=r.find(c=>c.source.type==="channel"&&c.source.channelId===a.id&&c.source.chatId);return s?.source.chatId?i=s.source.chatId:i=a.config?.userId,{id:a.id,name:a.name,platform:a.platform,status:a.status,chatId:i}});return l({channels:n})}),p("get_system_status","Get current system status: execution pool capacity (active/max/queued slots), running task count, and system health. Use this to check if the system has capacity before dispatching tasks.",rr,async()=>{let e=T(),t=E("running"),r=E("pending");return l({executionPool:{active:t.length,max:e.execution?.maxConcurrent??5,queued:r.length},timestamp:new Date().toISOString()})}),p("schedule_task","Schedule a one-shot delayed task. roleId is required \u2014 call list_roles first. Use this when the user wants something done later (e.g., '\u534A\u5C0F\u65F6\u540E', 'in 30 minutes', 'tomorrow at 3pm'). For recurring schedules ('every day', 'weekly'), use create_template instead.",or,async e=>{let t=v(e.roleId);if(!t||t.status!=="active"){let f=A("active",20,0).filter(h=>h.source!=="system").map(h=>({id:h.id,name:h.name,allowedTools:h.allowedTools??[],capabilitySummary:N(h)}));return l({error:`Role not found or not active: ${e.roleId}. Pick a roleId from the list below.`,availableRoles:f})}let r=Date.now(),n;if(e.delayMinutes!==void 0&&e.runAt!==void 0)return l({error:"Provide exactly one of delayMinutes or runAt, not both"});if(e.delayMinutes!==void 0)n=r+e.delayMinutes*60*1e3;else if(e.runAt!==void 0){if(n=new Date(e.runAt).getTime(),isNaN(n))return l({error:"Invalid ISO 8601 timestamp in runAt"})}else return l({error:"Provide either delayMinutes or runAt"});if(n<=r)return l({error:"Scheduled time must be in the future"});let a=10080*60*1e3;if(n-r>a)return l({error:"Schedule exceeds maximum of 7 days"});let i=I(),s=new Date(n).toISOString(),c=e.deliverTo?await R(e.deliverTo):void 0,d=e.reportTo?await R(e.reportTo):void 0;fe({id:i,name:e.prompt.slice(0,80),description:`One-shot scheduled task: ${e.prompt.slice(0,200)}`,trigger:{type:"once",runAt:s},steps:[{id:"main",prompt:e.prompt}],rolePreference:e.roleId,config:{...T().defaults},tags:["scheduled","once"],enabled:!0,createdAt:r,deliverTo:c,reportTo:d});let{getBreeEngine:u}=await import("./bree-engine-2NOTIBAZ.js"),m=u();return m&&m.scheduleOnceJob(i),l({templateId:i,executeAt:s,prompt:e.prompt})}),p("cancel_scheduled_task","Cancel a previously scheduled one-shot task by its template ID. The task will not execute.",{templateId:o.string().describe("The template ID returned by schedule_task")},async e=>{let t=j(e.templateId);if(!t)return l({error:`Template not found: ${e.templateId}`});if(t.trigger.type!=="once")return l({error:"This is not a one-shot scheduled task. Use disable_template for recurring automations."});Ge(e.templateId);let{getBreeEngine:r}=await import("./bree-engine-2NOTIBAZ.js"),n=r();return n&&await n.unscheduleJob(e.templateId),l({cancelled:!0,templateId:e.templateId})}),p("list_available_plugins","List all installed plugins with their scope and global enabled state. If roleId is provided, shows which plugins are installed in that role's workspace.",ar,async e=>{let t=De(),r=Z(),n=e.roleId?(()=>{let{getRoleWorkspacePath:a}=(X(),L(pe)),{getRole:i}=(K(),L(ue)),{listInstalledPlugins:s}=(Oe(),L(ht)),c=i(e.roleId);if(!c)return[];let d=a(c.name);return s({scope:"project",projectPath:d}).map(u=>u.id)})():[];return l({plugins:r.map(a=>({id:a.id,name:a.name,scope:a.scope,projectPath:a.projectPath,enabled:a.enabled,globalEnabled:t[a.id]??a.enabled,isInstalledInRole:n.includes(a.id),description:a.version?`v${a.version}`:void 0}))})}),p("install_plugin_for_role","Install a plugin into a role's workspace (project-scope). The plugin will be available when that role executes tasks.",ir,async e=>{let{getRole:t}=(K(),L(ue)),{getRoleWorkspacePath:r}=(X(),L(pe)),n=t(e.roleId);if(!n)return l({error:`Role not found: ${e.roleId}`});let a=r(n.name);try{return Ie(e.pluginId,"project",a),l({success:!0,roleId:e.roleId,pluginId:e.pluginId,scope:"project",cwd:a})}catch(i){return l({error:`Failed to install plugin: ${i}`})}}),p("uninstall_plugin_from_role","Uninstall a plugin from a role's workspace.",sr,async e=>{let{getRole:t}=(K(),L(ue)),{getRoleWorkspacePath:r}=(X(),L(pe)),n=t(e.roleId);if(!n)return l({error:`Role not found: ${e.roleId}`});let a=r(n.name);try{return Te(e.pluginId,"project",a),l({success:!0,roleId:e.roleId,pluginId:e.pluginId})}catch(i){return l({error:`Failed to uninstall plugin: ${i}`})}}),p("bind_mcp_to_role","Bind an MCP server configuration to a role. The MCP server will be available to the role during task execution.",lr,async e=>{let t=v(e.roleId);if(!t)return l({error:`Role not found: ${e.roleId}`});let n={...t.mcpServers??{},[e.mcpName]:e.mcpConfig};try{return D(e.roleId,{mcpServers:n}),Q(t),l({success:!0,roleId:e.roleId,mcpName:e.mcpName,mcpServers:n})}catch(a){return l({error:`Failed to bind MCP server: ${a}`})}}),p("unbind_mcp_from_role","Remove an MCP server binding from a role.",cr,async e=>{let t=v(e.roleId);if(!t)return l({error:`Role not found: ${e.roleId}`});let r={...t.mcpServers??{}};if(!(e.mcpName in r))return l({error:`MCP server "${e.mcpName}" not bound to this role`});delete r[e.mcpName];try{return D(e.roleId,{mcpServers:r}),Q(t),l({success:!0,roleId:e.roleId,mcpName:e.mcpName})}catch(n){return l({error:`Failed to unbind MCP server: ${n}`})}}),p("get_capabilities","Get a comprehensive overview of Adam's current capabilities: available roles and their tools, connected channels, installed plugins, active automations, and execution capacity. Call this when the user asks what you can do, or asks for help.",nr,async()=>{let{listTaskTemplates:e}=await import("./task-templates-NC7XIZIC.js"),t=T(),r=A(void 0,100,0),n=he(),a=e(!0,100,0),i=E("running"),s=E("pending");return l({roles:{description:"Specialized worker identities \u2014 each has its own tools, MCP servers, plugins (skills/agents), and learned rules",active:r.filter(c=>c.status==="active"&&c.source!=="system").map(c=>{let d=ye(c);return{name:c.name,tools:c.allowedTools??[],mcpServers:Object.keys(c.mcpServers??{}),channels:c.allowedChannels??[],capabilitySummary:N(c,d),plugins:d.plugins.map(u=>({name:u.name,skills:u.skills.map(m=>m.name),agents:u.agents.map(m=>m.name)}))}}),retired:r.filter(c=>c.status==="retired").length,probation:r.filter(c=>c.status==="probation").length},channels:{description:"Send/receive messages via connected platforms",connected:n.filter(c=>c.enabled).map(c=>({name:c.name,platform:c.platform,status:c.status}))},plugins:{description:"Extensions that add capabilities to roles",installed:Z().filter(c=>c.enabled).map(c=>({name:c.name,scope:c.scope,description:c.version?`v${c.version}`:void 0}))},automations:{description:"Recurring cron tasks and event-triggered templates",active:a.map(c=>({name:c.name,trigger:c.trigger}))},execution:{description:"Parallel task execution pool",maxConcurrent:t.execution?.maxConcurrent??5,running:i.length,queued:s.length},coreFeatures:["Goal management \u2014 SMART goals with budget/deadline/metric, auto-decomposition into subtasks","Memory \u2014 per-Role vector + keyword searchable memory across tasks","Strategy evolution \u2014 Thompson Sampling optimizes task approaches over time","Monitor \u2014 automatic quality scoring, role retirement/reinstatement","Delivery engine \u2014 event-driven result routing to channels/webhooks","Schedule \u2014 cron recurring templates + one-shot delayed tasks"]})}),p("enable_plugin","Enable a globally installed plugin (makes it available to all roles).",dr,async e=>{try{return ct(e.pluginId),l({success:!0,pluginId:e.pluginId})}catch(t){return l({error:`Failed to enable plugin: ${t}`})}}),p("disable_plugin","Disable a globally installed plugin (removes it from all roles).",ur,async e=>{try{return dt(e.pluginId),l({success:!0,pluginId:e.pluginId})}catch(t){return l({error:`Failed to disable plugin: ${t}`})}}),p("install_plugin_for_user","Install a plugin globally for the current user (user-scope).",pr,async e=>{try{return Ie(e.pluginId,"user"),l({success:!0,pluginId:e.pluginId,scope:"user"})}catch(t){return l({error:`Failed to install plugin: ${t}`})}}),p("uninstall_plugin_for_user","Uninstall a globally installed plugin from the current user.",mr,async e=>{try{return Te(e.pluginId,"user"),l({success:!0,pluginId:e.pluginId})}catch(t){return l({error:`Failed to uninstall plugin: ${t}`})}}),p("browse_marketplace","Browse all available plugins from configured marketplaces (shows installed and available).",gr,async()=>{try{let e=lt(),t=Z();return l({available:e,installed:t})}catch(e){return l({error:`Failed to browse marketplace: ${e}`})}}),p("list_marketplace_sources","List configured plugin marketplace sources.",fr,async()=>{let e=Ue();return l({sources:e})}),p("get_plugin_detail","Get detailed manifest for an installed plugin (skills, agents, MCP servers, hooks).",hr,async e=>{let t=Ne(e.pluginId);if(!t)return l({error:`Plugin not found: ${e.pluginId}`});let r=Ae(t.installPath);return l({id:t.id,name:t.name,version:t.version,scope:t.scope,projectPath:t.projectPath,enabled:t.enabled,manifest:r})}),p("scan_directory","Scan a directory for .claude/settings.json and return its plugin/MCP configuration.",br,async e=>{let{getRole:t}=await import("./roles-NYGWZMQI.js");if(!t(e.roleId))return l({error:`Role not found: ${e.roleId}`});try{let n=$e(e.path);return l({roleId:e.roleId,path:e.path,config:n})}catch(n){return l({error:`Failed to scan directory: ${n}`})}}),p("cancel_task","Cancel a running or pending task by setting its status to 'cancelled'. Emits a task_status_change event.",yr,async e=>{let t=y(e.taskId);if(!t)return l({error:`Task not found: ${e.taskId}`});let r=t.status;O(e.taskId,{status:"cancelled"});let{serverBus:n}=await import("./server-bus-GEGVMSCA.js");return n.emit({type:"task_status_change",taskId:e.taskId,oldStatus:r,newStatus:"cancelled"}),l({success:!0,taskId:e.taskId,status:"cancelled"})}),p("view_task_logs","Retrieve step-by-step execution logs for a task.",wr,async e=>{let t=z(e.taskId,e.limit??20);return l({taskId:e.taskId,count:t.length,logs:t})}),p("delete_role","Delete a role by ID. This removes the role and its workspace.",vr,async e=>v(e.roleId)?(Me(e.roleId),l({success:!0,roleId:e.roleId})):l({error:`Role not found: ${e.roleId}`})),p("view_config","Get the current runtime configuration (mutable fields and restart-required fields).",Ir,async()=>{let{MUTABLE_PATHS:e,RESTART_REQUIRED_PATHS:t}=await import("./runtime-VDBZZ4KG.js"),r=T(),n={};try{let c=T().server?.port??7100,d=await fetch(`http://127.0.0.1:${c}/config`);d.ok&&(n=await d.json())}catch{}let a=[...e,...t],i=[...t],s={};for(let c of a){let d=c.split("."),u=r;for(let m of d)if(u&&typeof u=="object")u=u[m];else{u=void 0;break}s[c]={value:u,mutable:!t.includes(c)}}return l({config:s,mutable:[...e],restartRequired:[...t]})}),p("update_config","Update mutable runtime configuration fields. Returns partial-success: some fields may update while others return errors.",Tr,async e=>{let{isRestartRequiredPath:t}=await import("./runtime-VDBZZ4KG.js"),{setConfigValue:r}=await import("./config-HR4MBTIS.js"),n=ke(e.updates,r);if(e.updates["logging.level"]&&Re(e.updates["logging.level"]),n.updated.length>0){let{serverBus:a}=await import("./server-bus-GEGVMSCA.js");a.emit({type:"config_changed",changes:n.updated.map(i=>({path:i,value:e.updates[i]}))})}return l(n)}),p("list_memories","List memories stored under a specific role.",Sr,async e=>{let t=je(e.roleId,e.limit??20);return l({roleId:e.roleId,count:t.length,memories:t})}),p("update_template","Update a task template's fields (name, prompt, cron, enabled, etc.).",kr,async e=>{let t=j(e.templateId);if(!t)return l({error:`Template not found: ${e.templateId}`});let r={};if(e.name!==void 0&&(r.name=e.name),e.enabled!==void 0&&(r.enabled=e.enabled),e.prompt!==void 0){let n=t.steps?.length?[...t.steps]:[];n.length===0?n.push({id:I(),prompt:e.prompt}):n[0]={...n[0],prompt:e.prompt},r.steps=n}return(e.triggerCron!==void 0||e.triggerEvent!==void 0)&&(r.trigger={type:e.triggerEvent?"event":"cron",cron:e.triggerCron,event:e.triggerEvent}),e.roleId!==void 0&&(r.rolePreference=e.roleId),Fe(e.templateId,r),l({success:!0,templateId:e.templateId,updated:Object.keys(r)})}),p("delete_template","Delete a task template by ID.",Rr,async e=>j(e.templateId)?(Ve(e.templateId),l({success:!0,templateId:e.templateId})):l({error:`Template not found: ${e.templateId}`})),p("run_template","Trigger a template immediately (runs the webhook endpoint for its name).",_r,async e=>{let t=j(e.templateId);if(!t)return l({error:`Template not found: ${e.templateId}`});try{let r=T().server?.port??7100,n=await fetch(`http://127.0.0.1:${r}/webhooks/${t.name}`,{method:"POST"}),a=await n.json();return n.ok?l({success:!0,templateId:e.templateId,templateName:t.name,response:a}):l({error:`Webhook failed: ${a.code??n.status} \u2014 ${a.message??""}`})}catch(r){return l({error:`Failed to trigger template: ${r}`})}}),p("list_delivery_rules","List delivery rules, optionally filtered by enabled status.",Mr,async e=>{let t=we(e.enabled);return l({count:t.length,rules:t})}),p("create_delivery_rule","Create a new delivery rule for event-driven result routing.",xr,async e=>{let t=I(),r={id:t,eventType:e.eventType,matchCriteria:e.matchCriteria??{},target:{type:"channel",channelId:e.channelId},formatTemplate:e.format,maxPerMinute:10,skipOriginChannel:!1,enabled:e.enabled??!0,createdAt:Date.now()};return Je(r),l({success:!0,ruleId:t,rule:r})}),p("delete_delivery_rule","Delete a delivery rule by ID.",Pr,async e=>we().find(n=>n.id===e.ruleId)?(He(e.ruleId),l({success:!0,ruleId:e.ruleId})):l({error:`Delivery rule not found: ${e.ruleId}`})),p("list_strategies","List Thompson Sampling strategy populations for a role, or all strategies if roleId omitted.",Lr,async e=>{let t;if(e.roleId)t=et(e.roleId);else{let{getDb:r}=await import("./db-6KUGCGVR.js");t=r().prepare("SELECT * FROM strategies ORDER BY created_at").all().map(a=>({id:a.id,roleId:a.role_id,name:a.name,taskType:a.task_type,createdAt:a.created_at,updatedAt:a.updated_at??void 0,promptTemplate:a.prompt_template??"",alpha:a.alpha,beta:a.beta,totalTrials:a.trials,avgReward:a.total_reward&&a.trials>0?a.total_reward/a.trials:void 0,enabled:a.enabled===1}))}return l({roleId:e.roleId??null,count:t.length,strategies:t})}),p("authorize_task_operation","Authorize a pending privilege escalation for a task. The paused operation will proceed.",{taskId:o.string(),operationId:o.string().optional().describe("ID of the specific operation. If omitted, authorizes the most recent pending operation."),scope:o.enum(["once","permanent"]).default("once").describe("'once' = this operation only. 'permanent' = auto-authorize matching patterns in the future.")},async e=>{let t=me(e.taskId),r=e.operationId?t.find(a=>a.id===e.operationId):t.find(a=>a.status==="pending");return r?(new J().resolvePlanApproval(r.id,"allow",e.scope),l({success:!0,operationId:r.id,decision:"allow",scope:e.scope})):l({error:"No pending operation found for this task"})}),p("deny_task_operation","Deny a pending privilege escalation for a task. The paused operation will be rejected.",{taskId:o.string(),operationId:o.string().optional(),reason:o.string().optional().describe("Reason for denial, provided to the executor as feedback.")},async e=>{let t=me(e.taskId),r=e.operationId?t.find(a=>a.id===e.operationId):t.find(a=>a.status==="pending");return r?(new J().resolvePlanApproval(r.id,"deny","once",e.reason),l({success:!0,operationId:r.id,decision:"deny"})):l({error:"No pending operation found for this task"})})];function so(){return gt.map(e=>e.name).sort().join(",")}function lo(){return Ut({name:"adam-tools",version:"1.0.0",tools:gt})}export{J as a,Or as b,jr as c,ze as d,un as e,et as f,k as g,lt as h,Ie as i,Te as j,ct as k,dt as l,_n as m,so as n,lo as o};
|
package/dist/chunk-XTHP5JMO.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import{a as D}from"./chunk-YHVFZB6Q.js";import{a as x,b as y}from"./chunk-JZNBFZ7W.js";import{b as _}from"./chunk-WTRM5VO7.js";import{b}from"./chunk-CLHSPXZ6.js";import{a as g}from"./chunk-L7JP7DUO.js";import{d as v}from"./chunk-7K4AQBDD.js";import{e as C,k as z}from"./chunk-OTH4M5L3.js";import{b as h,d as $}from"./chunk-4MJF77RD.js";import{c as E,h as A}from"./chunk-INNDBLZE.js";A();z();$();function M(u){return{id:u.id,templateId:u.template_id,status:u.status,stepStatuses:JSON.parse(u.step_statuses),startedAt:u.started_at,completedAt:u.completed_at??void 0,error:u.error??void 0}}function P(u,e){h().prepare(`
|
|
2
|
-
INSERT INTO workflow_executions (id, template_id, status, step_statuses, started_at)
|
|
3
|
-
VALUES (?, ?, 'running', '{}', ?)
|
|
4
|
-
`).run(u,e,Date.now())}function I(u){let t=h().prepare("SELECT * FROM workflow_executions WHERE id = ?").get(u);return t?M(t):void 0}function R(u,e){let t=h(),s=[],r=[];e.status!==void 0&&(s.push("status = ?"),r.push(e.status)),e.stepStatuses!==void 0&&(s.push("step_statuses = ?"),r.push(JSON.stringify(e.stepStatuses))),e.completedAt!==void 0&&(s.push("completed_at = ?"),r.push(e.completedAt)),e.error!==void 0&&(s.push("error = ?"),r.push(e.error)),s.length!==0&&(r.push(u),t.prepare(`UPDATE workflow_executions SET ${s.join(", ")} WHERE id = ?`).run(...r))}function F(u,e=50,t=0){let s=h(),r="SELECT * FROM workflow_executions",o=[];return u&&(r+=" WHERE template_id = ?",o.push(u)),r+=" ORDER BY started_at DESC LIMIT ? OFFSET ?",o.push(e,t),s.prepare(r).all(...o).map(M)}import{v4 as N}from"uuid";var m=E("scheduler"),O=class{maxRetries;baseDelayMs;constructor(e){this.maxRetries=e?.maxRetries??3,this.baseDelayMs=e?.baseDelayMs??1e3}async execute(e,t){let s=v(),r={timeout:e.config?.timeout??s.timeout,approvalRequired:s.approvalRequired,approvalTimeout:s.approvalTimeout,plugins:e.config?.plugins,mcpServers:e.config?.mcpServers,model:e.config?.model??s.model,maxTurns:e.config?.maxTurns??s.maxTurns,maxBudgetUsd:e.config?.maxBudgetUsd??s.maxBudgetUsd,env:{...s.env,...e.config?.env},claudeCodePath:s.claudeCodePath},o={templateId:e.id,executionId:t,stepResults:new Map,stepStatuses:{},config:r,continueOnError:e.config?.continueOnError??!1,failedStepIds:new Set,rolePreference:e.rolePreference,deliverTo:e.deliverTo,reportTo:e.reportTo};P(t,e.id),D(t),g.emit({type:"workflow_status_change",executionId:t,templateId:e.id,status:"running"});let i=this.groupIntoLayers(e.steps);for(let f of i){if(this.syncExternalState(o)==="cancelled")return this.finalizeCancelledWorkflow(e,o);let k=f.filter(d=>!this.shouldSkip(d,o)),W=f.filter(d=>this.shouldSkip(d,o));for(let d of W){let p={stepId:d.id,taskId:"",status:"skipped",error:"Skipped: dependency failed"};o.stepResults.set(d.id,p),o.stepStatuses[d.id]={taskId:"",status:"skipped",error:"Skipped: dependency failed"},m.info({stepId:d.id,executionId:t},"Step skipped due to failed dependency")}if(k.length===0)continue;let T=await Promise.allSettled(k.map(d=>this.executeStep(d,o)));if(this.syncExternalState(o)==="cancelled")return this.finalizeCancelledWorkflow(e,o);for(let d=0;d<k.length;d++){let p=k[d],c=T[d];if(c.status==="rejected"){m.error({stepId:p.id,error:c.reason},"Workflow step threw");let S={stepId:p.id,taskId:"",status:"failed",error:String(c.reason)};o.stepResults.set(p.id,S),o.failedStepIds.add(p.id),o.stepStatuses[p.id]={taskId:"",status:"failed",error:String(c.reason)}}let w=o.stepResults.get(p.id);if(w?.status==="failed"&&(o.failedStepIds.add(p.id),!o.continueOnError)){if(this.isWorkflowCancelled(o.executionId))return this.finalizeCancelledWorkflow(e,o);let S="failed";return R(t,{status:S,stepStatuses:o.stepStatuses,completedAt:Date.now(),error:w.error}),g.emit({type:"workflow_status_change",executionId:t,templateId:e.id,status:S}),m.warn({stepId:p.id,executionId:t},"Workflow step failed, workflow aborted"),{executionId:t,status:S,stepResults:o.stepResults}}}if(this.isWorkflowCancelled(o.executionId))return this.finalizeCancelledWorkflow(e,o);R(t,{stepStatuses:o.stepStatuses})}if(this.isWorkflowCancelled(o.executionId))return this.finalizeCancelledWorkflow(e,o);let a=o.failedStepIds.size>0,l=[...o.stepResults.values()].some(f=>f.status==="skipped"||f.status==="cancelled"),n=a||l?"partial":"completed";return R(t,{status:n,stepStatuses:o.stepStatuses,completedAt:Date.now()}),g.emit({type:"workflow_status_change",executionId:t,templateId:e.id,status:n}),m.info({executionId:t,status:n,completedSteps:o.stepResults.size,totalSteps:e.steps.length,failedSteps:o.failedStepIds.size},"Workflow completed"),await this.deliverWorkflowResult(o,n),{executionId:t,status:n,stepResults:o.stepResults}}groupIntoLayers(e){let t=new Map(e.map(a=>[a.id,a])),s=new Map,r=new Map;for(let a of e)s.set(a.id,0),r.set(a.id,[]);for(let a of e)if(a.dependsOn)for(let l of a.dependsOn)t.has(l)&&(s.set(a.id,(s.get(a.id)??0)+1),r.get(l)?.push(a.id));let o=[],i=new Set(e.map(a=>a.id));for(;i.size>0;){let a=[];for(let l of i)if((s.get(l)??0)===0){let n=t.get(l);n&&a.push(n)}if(a.length===0){m.warn({remaining:[...i]},"Cycle detected in step dependencies");for(let l of i){let n=t.get(l);n&&o.push([n])}break}o.push(a);for(let l of a){i.delete(l.id);for(let n of r.get(l.id)??[])s.set(n,(s.get(n)??0)-1)}}return o}syncExternalState(e){let t=I(e.executionId);if(t){for(let[s,r]of Object.entries(t.stepStatuses))(r.status==="skipped"||r.status==="failed"||r.status==="cancelled")&&!e.stepResults.has(s)&&!e.failedStepIds.has(s)&&(r.status==="skipped"?e.stepResults.set(s,{stepId:s,taskId:r.taskId,status:"skipped",error:r.error??"Manually skipped via API"}):r.status==="cancelled"?e.stepResults.set(s,{stepId:s,taskId:r.taskId,status:"cancelled",error:r.error??"Cancelled"}):(e.failedStepIds.add(s),e.stepResults.set(s,{stepId:s,taskId:r.taskId,status:"failed",error:r.error})),e.stepStatuses[s]=r,m.info({stepId:s,status:r.status,executionId:e.executionId},"Synced external step status from DB"));return t.status==="cancelled"?"cancelled":void 0}}shouldSkip(e,t){return e.dependsOn?e.dependsOn.some(s=>t.failedStepIds.has(s)?!0:t.stepResults.get(s)?.status==="skipped"):!1}async executeStep(e,t){let s=this.resolveVariables(e.prompt,t.stepResults),r=e.roleId??t.rolePreference,o=r?C(r):void 0,i={...t.config,...e.config?.timeout!==void 0?{timeout:e.config.timeout}:{},...e.config?.maxTurns!==void 0?{maxTurns:e.config.maxTurns}:{}},a=(i.timeout??600)*1e3,l="",n="failed";for(let p=1;p<=this.maxRetries;p++){let c=N();if(l=c,x({id:c,status:"pending",prompt:s,config:i,createdAt:Date.now(),parentId:t.executionId,templateId:t.templateId,roleId:r,stepId:e.id}),t.stepStatuses[e.id]={taskId:c,status:"running",roleId:r},m.debug({stepId:e.id,taskId:c,roleId:r,attempt:p},"Created workflow step as task"),g.emit({type:"task_created",taskId:c}),n=await this.waitForTaskCompletion(c,a),n==="completed"||n==="cancelled")break;if(p<this.maxRetries){let w=this.baseDelayMs*Math.pow(2,p-1);m.info({stepId:e.id,attempt:p,maxRetries:this.maxRetries,delayMs:w},"Workflow step failed, retrying with new task"),await this.sleep(w)}}let f=y(l),k=I(t.executionId),W=k?.stepStatuses[e.id],T=n==="completed"?"completed":W?.status==="skipped"?"skipped":W?.status==="cancelled"||k?.status==="cancelled"?"cancelled":"failed",d={stepId:e.id,taskId:l,status:T,roleId:r,roleName:o?.name,result:f?.result,error:f?.error};t.stepResults.set(e.id,d),t.stepStatuses[e.id]={taskId:l,status:d.status,roleId:r,result:f?.result,error:f?.error}}async deliverWorkflowResult(e,t){let s=_();if(e.deliverTo&&e.deliverTo.length>0){let r=this.assembleWorkflowSummary(e);for(let o of e.deliverTo)if(o.type==="channel"){let i=b(o.channelId);try{await s.send({taskId:e.executionId,channelId:o.channelId,chatId:o.chatId,platform:i?.platform,content:r,messageType:"deliver"})}catch(a){m.error({executionId:e.executionId,channelId:o.channelId,error:a},"Workflow delivery failed")}}}if(e.reportTo&&e.reportTo.length>0){let r=[...e.stepResults.values()].filter(n=>n.status==="completed").length,o=e.failedStepIds.size,i=[...e.stepResults.values()].filter(n=>n.status==="skipped").length,a=e.stepResults.size,l=`Workflow ${t}: ${r}/${a} steps completed${o>0?`, ${o} failed`:""}${i>0?`, ${i} skipped`:""}`;for(let n of e.reportTo)if(n.type==="channel"){let f=b(n.channelId);try{await s.send({taskId:e.executionId,channelId:n.channelId,chatId:n.chatId,platform:f?.platform,content:l,messageType:"report"})}catch(k){m.error({executionId:e.executionId,channelId:n.channelId,error:k},"Workflow report delivery failed")}}}}assembleWorkflowSummary(e){let t=[];for(let[s,r]of e.stepResults){let o=r.status==="completed"?"OK":r.status==="skipped"?"SKIP":"FAIL",i=r.roleName?` (${r.roleName})`:"",a=r.result??r.error??"No output";t.push(`## [${o}] Step: ${s}${i}
|
|
5
|
-
|
|
6
|
-
${a}`)}return t.join(`
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
`)}resolveVariables(e,t){return e.replace(/\{\{([^}]+)\.result\}\}/g,(s,r)=>t.get(r)?.result??`[no result from ${r}]`)}waitForTaskCompletion(e,t=6e5){return new Promise(s=>{let r=!1,o=Date.now(),i=()=>{r=!0,g.off("task_status_change",a)},a=n=>{r||n.taskId!==e||(n.newStatus==="completed"?(i(),s("completed")):n.newStatus==="failed"?(i(),s("failed")):n.newStatus==="cancelled"&&(i(),s("cancelled")))};g.on("task_status_change",a);let l=()=>{if(r)return;if(Date.now()-o>t){i(),s("failed");return}let n=y(e);if(!n){i(),s("failed");return}if(n.status==="completed"){i(),s("completed");return}if(n.status==="failed"){i(),s("failed");return}if(n.status==="cancelled"){i(),s("cancelled");return}setTimeout(l,5e3)};setTimeout(l,100)})}sleep(e){return new Promise(t=>setTimeout(t,e))}isWorkflowCancelled(e){return I(e)?.status==="cancelled"}finalizeCancelledWorkflow(e,t){let s=I(t.executionId);return R(t.executionId,{status:"cancelled",stepStatuses:s?.stepStatuses??t.stepStatuses,completedAt:s?.completedAt??Date.now(),error:s?.error}),m.info({executionId:t.executionId,templateId:e.id},"Workflow cancelled"),{executionId:t.executionId,status:"cancelled",stepResults:t.stepResults}}};export{I as a,R as b,F as c,O as d};
|
package/dist/chunk-ZKMDHQJY.js
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import{b as tt,k as dt,m as ct}from"./chunk-6NUHSHS5.js";import{a as ke,d as et,e as we}from"./chunk-HFN7Y3IM.js";import{a as Ke,b as Je}from"./chunk-AKPLOO2V.js";import{b as xe,c as nt,d as st,e as it,f as at}from"./chunk-YHVFZB6Q.js";import{b as Z,c as F,d as Q,f as He}from"./chunk-JZNBFZ7W.js";import{a as W,e as lt}from"./chunk-YPOTHL7X.js";import{a as Ze}from"./chunk-4NW2DNDZ.js";import{e as te,f as Ye,j as Xe}from"./chunk-7IXLL673.js";import{b as Qe}from"./chunk-NUTUI5KM.js";import{a as I}from"./chunk-L7JP7DUO.js";import{b as rt}from"./chunk-P6KWAGAY.js";import{b as ot}from"./chunk-T33BLZV2.js";import{d as z,i as Fe}from"./chunk-GSMC3VUM.js";import{a as ee,b as qe,e as S,g as N,h as be,k as U}from"./chunk-OTH4M5L3.js";import{a as Ge,g as co}from"./chunk-WKS7QVIX.js";import{b as w,d as X}from"./chunk-4MJF77RD.js";import{d as Ie,h as ao}from"./chunk-WBAPIPST.js";import{c as k,h as C}from"./chunk-INNDBLZE.js";X();function lo(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}}function ut(e){w().prepare(`
|
|
2
|
-
INSERT INTO role_scores (id, role_id, task_id, score_json, ema_score, created_at)
|
|
3
|
-
VALUES (?, ?, ?, ?, ?, ?)
|
|
4
|
-
`).run(e.id,e.roleId,e.taskId,JSON.stringify(e.scores),e.emaScore,e.createdAt)}function oe(e,t=50){return w().prepare("SELECT * FROM role_scores WHERE role_id = ? ORDER BY created_at DESC LIMIT ?").all(e,t).map(lo)}function pt(e){return w().prepare("SELECT ema_score FROM role_scores WHERE role_id = ? ORDER BY created_at DESC LIMIT 1").get(e)?.ema_score}function mt(e){let r=w().prepare(`
|
|
5
|
-
SELECT token_usage FROM tasks
|
|
6
|
-
WHERE role_id = ? AND status = 'completed' AND token_usage IS NOT NULL
|
|
7
|
-
ORDER BY completed_at DESC LIMIT 50
|
|
8
|
-
`).all(e);if(r.length===0)return 1e4;let n=r.map(i=>{let s=JSON.parse(i.token_usage);return(s.input??0)+(s.output??0)}).sort((i,s)=>i-s);return n[Math.floor(n.length/2)]}C();import{v4 as uo}from"uuid";var po=k("audit"),re={taskSuccess:.3,planAccuracy:.25,permissionCompliance:.25,efficiency:.2},ft=.3;function mo(e,t){let r=Z(e),n=r?.status==="completed"?1:0,i=1,s=et(e);s?.deviationReport&&(i=s.deviationReport.overallAccuracy);let o=1,a=Je(e,1e3),c=a.filter(f=>f.type==="tool_result"||f.type==="permission_denied").length,d=a.filter(f=>f.type==="permission_denied").length;c>0&&(o=1-d/c);let u=1;if(r?.tokenUsage){let f=r.tokenUsage.input+r.tokenUsage.output,R=t?mt(t):1e4;f>R&&(u=Math.max(0,1-(f-R)/R))}let l=n*re.taskSuccess+i*re.planAccuracy+o*re.permissionCompliance+u*re.efficiency;return{taskSuccess:n,planAccuracy:i,permissionCompliance:o,efficiency:u,weighted:l}}function gt(e,t){let r=mo(t,e),n=pt(e),i=n!==void 0?ft*r.weighted+(1-ft)*n:r.weighted;return ut({id:uo(),roleId:e,taskId:t,scores:r,emaScore:i,createdAt:Date.now()}),po.debug({roleId:e,taskId:t,scores:{...r,weighted:r.weighted.toFixed(3)},ema:i.toFixed(3)},"Task score recorded"),i}U();U();C();var fo=k("audit");function ne(e,t=7){let r=S(e),n=oe(e,100),i=Date.now(),s=i-t*24*60*60*1e3,o=n.filter(m=>m.createdAt>=s),a=o.map(m=>m.emaScore),c=o.length>0?o.reduce((m,O)=>m+O.scores.weighted,0)/o.length:1,d=[],u=o.filter(m=>m.scores.taskSuccess<.5);u.length>0&&d.push({category:"task_failures",count:u.length,examples:u.slice(0,3).map(m=>m.taskId)});let l=o.filter(m=>m.scores.planAccuracy<.5);l.length>0&&d.push({category:"plan_deviations",count:l.length,examples:l.slice(0,3).map(m=>m.taskId)});let f=o.filter(m=>m.scores.permissionCompliance<.8);f.length>0&&d.push({category:"permission_violations",count:f.length,examples:f.slice(0,3).map(m=>m.taskId)});let R=o.filter(m=>m.scores.efficiency<.3);R.length>0&&d.push({category:"inefficiency",count:R.length,examples:R.slice(0,3).map(m=>m.taskId)});let A=[],E=[];return u.length>o.length*.3&&(A.push("High task failure rate"),E.push({action:"add_rule",detail:"Add rule: verify task feasibility before execution"})),f.length>0&&(A.push("Permission boundary violations"),E.push({action:"adjust_permission",detail:"Review and expand allowedTools if tasks legitimately need wider access"})),l.length>o.length*.5&&(A.push("Frequent plan deviations"),E.push({action:"add_rule",detail:"Add rule: follow execution plan steps more closely, request plan revision if steps are unclear"})),fo.info({roleId:e,taskCount:o.length,avgScore:c.toFixed(3),failureCategories:d.map(m=>m.category)},"Diagnostic report generated"),{roleId:e,agentName:r?.name??"Unknown",period:{start:s,end:i},taskCount:o.length,avgScore:c,scoreHistory:a,failureBehaviors:d,rootCauses:A,recommendations:E}}C();var se=k("audit"),ht=.4,go=5;function yt(e,t,r=ht){if(t>=r)return;let n=S(e);if(!n||n.status==="retired"||n.status==="dead")return;se.warn({roleId:e,emaScore:t,threshold:r},"Agent EMA below threshold, retiring");let i=ne(e),s=JSON.stringify(n.learnedRules),o=ho(n.learnedRules,i);N(e,{status:"retired",learnedRules:o});let a=[...i.failureBehaviors.map(d=>`${d.category}: ${d.count} occurrences`),...i.rootCauses.map(d=>`Root cause: ${d}`),...i.recommendations.map(d=>`Recommendation [${d.action}]: ${d.detail}`)].join(`
|
|
9
|
-
`),c=lt(s,JSON.stringify(o));return W({timestamp:Date.now(),oldRules:s,newRules:JSON.stringify(o),diff:a?`--- Diagnostic Report ---
|
|
10
|
-
${a}
|
|
11
|
-
|
|
12
|
-
--- Rules Diff ---
|
|
13
|
-
${c}`:c,roleId:e,source:"audit"}),se.info({roleId:e,oldRulesCount:n.learnedRules.length,newRulesCount:o.length,recommendations:i.recommendations.length},"Agent retired with targeted learnedRules modification"),i}function It(e){let t=S(e);return!t||t.status!=="retired"?!1:(N(e,{status:"probation"}),W({timestamp:Date.now(),oldRules:"status: retired",newRules:"status: probation",diff:`- status: retired
|
|
14
|
-
+ status: probation`,roleId:e,source:"audit"}),se.info({roleId:e},"Agent reinstated to probation"),!0)}function bt(e,t,r=ht,n=go){let i=S(e);return!i||i.status!=="probation"||oe(e,n+1).length<n?!1:t>=r?(N(e,{status:"active"}),W({timestamp:Date.now(),oldRules:"status: probation",newRules:"status: idle",diff:`- status: probation
|
|
15
|
-
+ status: idle (graduated, EMA: ${t.toFixed(3)})`,roleId:e,source:"audit"}),se.info({roleId:e,emaScore:t},"Agent graduated from probation to active"),!0):!1}function ho(e,t){let r=[...e];for(let n of t.recommendations){let i=`[audit:${n.action}] ${n.detail}`;r.includes(i)||r.push(i)}if(t.failureBehaviors.length>0){let i=`[audit:diagnostic] Failure patterns detected: ${t.failureBehaviors.map(s=>`${s.category}(${s.count})`).join(", ")}. Review and adjust behavior accordingly.`;r.includes(i)||r.push(i)}return r}import{spawn as Kt}from"child_process";U();import{accessSync as wt,constants as xt}from"fs";import{accessSync as yo,constants as Io,existsSync as kt,realpathSync as bo}from"fs";import{join as _e}from"path";import{spawn as ko}from"child_process";import{execFileSync as wo}from"child_process";var H=null;function K(){if(H)return H;let e=typeof import.meta.dirname=="string"?import.meta.dirname:__dirname??".",t=_e(e,"landlock-exec","landlock-exec");if(kt(t))return H=t,t;let r=process.env.PATH?.split(":").find(n=>kt(_e(n,"landlock-exec")));return r?(H=_e(r,"landlock-exec"),H):t}var ie=class{platform="landlock";async isAvailable(){if(process.platform!=="linux")return!1;try{yo(K(),Io.X_OK)}catch{return!1}try{return wo(K(),["--check"],{timeout:5e3,stdio:["ignore","pipe","pipe"]}),!0}catch{return!1}}spawn(t){let r=t.command??"node",n=t.args??[],i=[];for(let s of t.visiblePaths??[]){let o=s.mode==="rw"?"--rw":"--ro",a;try{a=bo(s.path)}catch{a=s.path}i.push(o,a),a!==s.path&&i.push(o,s.path)}return i.push("--",r,...n),ko(K(),i,{cwd:t.cwd,env:t.env,stdio:"pipe",signal:t.signal})}};function _t(){if(process.platform==="linux")try{return wt(K(),xt.X_OK),"landlock"}catch{return"none"}if(process.platform==="darwin")try{return wt("/usr/bin/sandbox-exec",xt.X_OK),"sandbox-exec"}catch{return"none"}return"none"}C();import{spawn as xo}from"child_process";import{readFileSync as vt,writeFileSync as _o,mkdtempSync as So,realpathSync as Se,rmSync as vo}from"fs";import{join as D}from"path";import{tmpdir as Ro}from"os";var Rt=k("sandbox-macos"),St="/usr/bin/sandbox-exec";function Po(){let e=[D(typeof import.meta.dirname=="string"?import.meta.dirname:".","profiles","role-sandbox.sb"),D(typeof import.meta.dirname=="string"?import.meta.dirname:".","..","src","sandbox","profiles","role-sandbox.sb"),D(process.cwd(),"src","sandbox","profiles","role-sandbox.sb")];for(let t of e)try{return vt(t,"utf-8"),t}catch{}return e[e.length-1]}var To=Po();function ae(e){if(!e.startsWith("/"))throw new Error(`Sandbox path must be absolute: ${e}`);if(e.includes('"')||e.includes(")")||e.includes("(")||e.includes("$"))throw new Error(`Sandbox path contains invalid characters for SBPL: ${e}`)}function Eo(e){let t=[`
|
|
16
|
-
; ===== Per-Role writable paths =====`];for(let r of e){if(r.mode!=="rw")continue;let n;try{n=Se(r.path)}catch{n=r.path}ae(n),t.push(`(allow file-write* (subpath "${n}"))`),n!==r.path&&(ae(r.path),t.push(`(allow file-write* (subpath "${r.path}"))`))}return t.join(`
|
|
17
|
-
`)}function Co(e){if(!e.length)return"";let t=[`
|
|
18
|
-
; ===== Global read blacklist (deniedReadPaths) =====`];for(let r of e){let n;try{n=Se(r)}catch{n=r}try{ae(n),t.push(`(deny file-read-data (subpath "${n}"))`),t.push(`(deny file-read-metadata (subpath "${n}"))`),n!==r&&(ae(r),t.push(`(deny file-read-data (subpath "${r}"))`),t.push(`(deny file-read-metadata (subpath "${r}"))`))}catch(i){Rt.warn({path:r,error:i.message},"Skipping deniedReadPath: invalid for SBPL")}}return t.join(`
|
|
19
|
-
`)}var de=class{platform="sandbox-exec";async isAvailable(){try{let{existsSync:t}=await import("fs");return t(St)}catch{return!1}}spawn(t){let{command:r,args:n,cwd:i,env:s,signal:o,visiblePaths:a,deniedReadPaths:c}=t,d=vt(To,"utf-8"),u=Eo(a),l=Co(c??[]),f=d+u+l+`
|
|
20
|
-
`,R=Se(So(D(Ro(),"adam-sandbox-"))),A=D(R,"role.sb");_o(A,f,"utf-8");let E=R,m=s?.HOME??process.env.HOME??"/tmp",O={...s,TMPDIR:E,CLAUDE_CODE_TMPDIR:E,CLAUDE_CONFIG_DIR:D(m,".claude")};Rt.debug({command:r,visiblePaths:a.length,profilePath:A},"Spawning sandboxed process");let V=xo(St,["-f",A,"-D",`TMPDIR=${E}`,"-D",`CLAUDE_CONFIG=${D(m,".claude")}`,"-D",`HOME_CACHE=${D(m,"Library","Caches")}`,r,...n],{cwd:i,env:O,stdio:"pipe",signal:o});return V.on("exit",()=>{try{vo(R,{recursive:!0,force:!0})}catch{}}),V}};import{spawn as Ao}from"child_process";var j=null,Pt=null,ce=null;function M(){if(j)return j;let e=Pt??_t();return Pt=e,e==="sandbox-exec"?j=new de:e==="landlock"?j=new ie:j=new ve(e),j}async function Tt(){return ce!==null||(ce=await M().isAvailable()),ce}var ve=class{platform;constructor(t){this.platform=t}async isAvailable(){return!1}spawn(t){let r=t.command??"node",n=t.args??[];return Ao(r,n,{cwd:t.cwd,env:t.env,stdio:"pipe",signal:t.signal})}};import{query as Ho}from"@anthropic-ai/claude-agent-sdk";import{v4 as Wt}from"uuid";function Et(e){let t=e.roleName?`## Role Context
|
|
21
|
-
- Role: ${e.roleName}
|
|
22
|
-
${e.roleCagPrompt?`- CAG Prompt: ${e.roleCagPrompt}`:""}`:"",r=e.allowedTools&&e.allowedTools.length>0?`## Available Tools
|
|
23
|
-
You have access to: ${e.allowedTools.join(", ")}. Use them as needed to complete the task.`:"",n=e.workflowStep?`## Workflow Step Context
|
|
24
|
-
You are executing step \`${e.workflowStep.stepId}\` of workflow \`${e.workflowStep.executionId}\`.
|
|
25
|
-
Other workflow steps may have already published structured data or files for you to use, and your output may be consumed by downstream steps.
|
|
26
|
-
|
|
27
|
-
### Artifact tools (use these to share data across steps)
|
|
28
|
-
- \`write_artifact\`: Save small structured JSON for downstream steps. Use for fields, flags, URLs, or summaries. Example: save extracted metadata.
|
|
29
|
-
- \`read_artifact\`: Read structured JSON previously written by an upstream step. Use for fields or state, not files.
|
|
30
|
-
- \`publish_artifact_file\`: Publish a file from your workspace into workflow storage. Use for audio, video, reports, images, or other large outputs.
|
|
31
|
-
- \`fetch_artifact_file\`: Copy an upstream file artifact into your current workspace. Use when you need to process a file produced by another step.
|
|
32
|
-
- \`list_artifacts\`: Discover what upstream artifacts exist before choosing a read or fetch call.
|
|
33
|
-
|
|
34
|
-
### When to use which
|
|
35
|
-
- Small JSON, fields, numbers, status, URLs: \`write_artifact\` and \`read_artifact\`
|
|
36
|
-
- Files such as audio, video, reports, images, or large outputs: \`publish_artifact_file\` and \`fetch_artifact_file\`
|
|
37
|
-
- Discover upstream output first: \`list_artifacts\`
|
|
38
|
-
|
|
39
|
-
The artifact tools handle storage and isolation automatically; never write to ~/.adam/ or other shared directories yourself.`:"";return`# Execution Agent \u2014 Task Focus
|
|
40
|
-
|
|
41
|
-
You are executing a specific task assigned to you. Your job is to complete the work, not manage goals or strategies.
|
|
42
|
-
|
|
43
|
-
## Task
|
|
44
|
-
- Task ID: ${e.taskId}
|
|
45
|
-
- Prompt: ${e.prompt}
|
|
46
|
-
|
|
47
|
-
${t}
|
|
48
|
-
|
|
49
|
-
${r}
|
|
50
|
-
|
|
51
|
-
${n}
|
|
52
|
-
|
|
53
|
-
## Focus
|
|
54
|
-
- Focus entirely on completing the task
|
|
55
|
-
- Use the standard SDK tools to do the work
|
|
56
|
-
- Do NOT attempt strategic decisions \u2014 just execute
|
|
57
|
-
|
|
58
|
-
## Constraints
|
|
59
|
-
- You have standard SDK tools only (no adam-tools MCP)
|
|
60
|
-
- Stay within your assigned permissions and allowed paths
|
|
61
|
-
- File writes: persistent outputs go under your working directory${e.cwd?` (\`${e.cwd}\`)`:""}. Temporary files may use \`os.tmpdir()\` (auto-redirected by the sandbox to a per-task dir). Do NOT write to absolute paths like \`/tmp/*\`, \`/var/*\`, \`~/Documents/*\`, or anywhere outside your workspace; the sandbox will reject them.
|
|
62
|
-
- Report completion with a clear result summary
|
|
63
|
-
- If WebSearch or WebFetch fails (network error, invalid params), report the failure honestly \u2014 do not fabricate data
|
|
64
|
-
- If a tool is unavailable, state it clearly in the result rather than guessing
|
|
65
|
-
`}import{isAbsolute as Do,relative as Oo,resolve as Mo}from"path";qe();C();var Bo=new Set(["Read","Glob","Grep","LSP"]),Lo=new Set(["Edit","Write","NotebookEdit"]);function Re(e){let t=e.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");return new RegExp(`^${t}$`)}function Pe(e){return Mo(ee(e))}function Ct(e,t){return t.some(r=>{let n=Pe(r),i=Oo(n,e);return i===""||!i.startsWith("..")&&!Do(i)})}function At(e,t,r){return async(n,i,{agentID:s,blockedPath:o})=>{if(o){let c=Pe(o);if(r?.deniedReadPaths?.length)for(let d of r.deniedReadPaths){let u=Pe(d);if(Ct(c,[u]))return $o.warn({toolName:n,blockedPath:o,agentID:s,deniedPath:d},"Denied: path in deniedReadPaths (absolute blacklist)"),{behavior:"deny",message:`Access denied: ${o} is in the global denied read paths list. This restriction is configured in Settings > Advanced and cannot be overridden by privilege escalation.`}}return r?.roleScope?.length&&Ct(c,r.roleScope)?{behavior:"allow",updatedInput:i}:t?await t(n,i,`blockedPath:${o}`,s):{behavior:"deny",message:`Access denied: ${o} is outside this role's allowed scope (cwd + additionalDirectories). Configure additionalDirectories to expand access.`}}if(Bo.has(n))return{behavior:"allow",updatedInput:i};if(Lo.has(n))return{behavior:"allow",updatedInput:i};let a=e(s??"");if(n==="Bash"&&a){let c=i.command??"";if(a.allowedBashPatterns?.length)for(let d of a.allowedBashPatterns)try{if(Re(d).test(c))return{behavior:"allow",updatedInput:i}}catch{}if(a.deniedBashPatterns?.length)for(let d of a.deniedBashPatterns)try{if(Re(d).test(c))return{behavior:"deny",message:`Bash command denied by pattern: ${d}`}}catch{}}if(a?.disallowedTools?.includes(n))return{behavior:"deny",message:`Tool ${n} is not allowed for this role.`};if(t&&a?.approvalRequired?.length){let c=n==="Bash"?i.command??"":`${n} ${JSON.stringify(i)}`;for(let d of a.approvalRequired)try{if(Re(d).test(c))return await t(n,i,d,s)}catch{}}return{behavior:"allow",updatedInput:i}}}var $o=k("manager");function Dt(e){return{SessionStart:[{hooks:[async t=>{if(!e.roleId)return{};let r=t.source,n=e.roleId==="role-chat-manager";if(!n&&r!=="startup"&&r!=="resume")return{};try{let{queryMemoryByTier:i}=await import("./memory-service-HIFTKEW2.js"),s=e.taskPrompt||"role context and recent interactions",o=n?["semantic","working"]:["semantic","episodic"],a=await i(e.roleId,s,o,{topK:5});if(a.length>0)return{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:`[Memory Context]
|
|
66
|
-
${a.map(u=>`- [${u.tier??"episodic"}] ${u.content}`).join(`
|
|
67
|
-
`)}
|
|
68
|
-
|
|
69
|
-
`}}}catch{}return{}}]}],SubagentStart:[{hooks:[async t=>{let r=e.roleId??t.agent_id;if(!r)return{};try{let n=e.taskPrompt||"role context",i=await rt(n,r,5);if(i)return{hookSpecificOutput:{hookEventName:"SubagentStart",additionalContext:i}}}catch{}return{}}]}],SubagentStop:[{hooks:[async t=>{let r=t.agent_id;if(!r||!e.currentTaskId)return{};try{let{createMemory:n}=await import("./memories-HBBW44MG.js"),{getDb:i}=await import("./db-6KUGCGVR.js"),s=t.transcript;if(!s||s.length<=100)return{};if(i().prepare("SELECT 1 FROM memories WHERE source_task_id = ? AND type = 'thought' LIMIT 1").get(e.currentTaskId))return{};let a=`[Task ${e.currentTaskId} reasoning] ${s.slice(0,3e3)}`;n({id:`session-${Date.now()}`,roleId:e.roleId??r,type:"thought",content:a,keywords:[],importance:3,sourceType:"task_complete",sourceTaskId:e.currentTaskId,createdAt:Date.now(),lastAccessed:Date.now(),retrievedCount:0,tier:"episodic"})}catch{}return{}}]}],PostToolUse:[{hooks:[async t=>{if(!e.currentTaskId)return{};let r=t.tool_name,n=t.tool_input,i=t.tool_response,s=typeof i=="string"?i:JSON.stringify(i??"");try{Ke({id:`step-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,taskId:e.currentTaskId,index:0,type:"tool_call",content:`${r}: ${JSON.stringify(n??{})} \u2192 ${s.slice(0,200)}`,toolName:r,toolInput:n,toolOutput:s,timestamp:Date.now()})}catch{}return{}}]}],PreCompact:[{hooks:[async t=>{let r=t.compact_summary;if(!r)return{};try{let{createMemory:n}=await import("./memories-HBBW44MG.js");n({id:`compact-${Date.now()}`,roleId:e.roleId??"role-chat-manager",type:"thought",content:r.slice(0,5e3),keywords:["compaction","context","decisions"],importance:4,sourceType:"pre_compact",createdAt:Date.now(),lastAccessed:Date.now(),retrievedCount:0,tier:"working"})}catch{}return{}}]}]}}U();Xe();ao();C();X();import{randomUUID as No}from"crypto";function Ot(e,t,r){let i=w().prepare(`
|
|
70
|
-
INSERT INTO task_plugins (id, task_id, plugin_path, plugin_name, role_id, used_at)
|
|
71
|
-
VALUES (?, ?, ?, ?, ?, ?)
|
|
72
|
-
`),s=Date.now();for(let o of t){let a=o.split("/").pop()??o;i.run(No(),e,o,a,r??null,s)}}function Gr(e){return w().prepare(`
|
|
73
|
-
SELECT plugin_name as pluginName, COUNT(*) as usageCount
|
|
74
|
-
FROM task_plugins
|
|
75
|
-
WHERE role_id = ?
|
|
76
|
-
GROUP BY plugin_path
|
|
77
|
-
ORDER BY usageCount DESC
|
|
78
|
-
`).all(e)}function Yr(e=50){return w().prepare(`
|
|
79
|
-
SELECT plugin_path as pluginPath, plugin_name as pluginName, COUNT(*) as usageCount, MAX(used_at) as lastUsed
|
|
80
|
-
FROM task_plugins
|
|
81
|
-
GROUP BY plugin_path
|
|
82
|
-
ORDER BY usageCount DESC
|
|
83
|
-
LIMIT ?
|
|
84
|
-
`).all(e)}U();Xe();import{createSdkMcpServer as Wo,tool as B}from"@anthropic-ai/claude-agent-sdk";import{z as v}from"zod";import{v4 as Lt}from"uuid";X();function Mt(e){return{id:e.id,executionId:e.execution_id,stepId:e.step_id,key:e.key,kind:e.kind,value:e.value_json?JSON.parse(e.value_json):void 0,blobPath:e.blob_path??void 0,mime:e.mime??void 0,sizeBytes:e.size_bytes,createdAt:e.created_at}}function Te(e){w().prepare(`
|
|
85
|
-
INSERT INTO workflow_artifacts (
|
|
86
|
-
id, execution_id, step_id, key, kind, value_json, blob_path, mime, size_bytes, created_at
|
|
87
|
-
)
|
|
88
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
89
|
-
`).run(e.id,e.executionId,e.stepId,e.key,e.kind,e.value!==void 0?JSON.stringify(e.value):null,e.blobPath??null,e.mime??null,e.sizeBytes,e.createdAt)}function Ee(e,t,r){let i=w().prepare(`
|
|
90
|
-
SELECT * FROM workflow_artifacts
|
|
91
|
-
WHERE execution_id = ? AND step_id = ? AND key = ?
|
|
92
|
-
`).get(e,t,r);return i?Mt(i):void 0}function Ce(e,t){let r=w(),n="SELECT * FROM workflow_artifacts WHERE execution_id = ?",i=[e];return t&&(n+=" AND step_id = ?",i.push(t)),n+=" ORDER BY created_at ASC",r.prepare(n).all(...i).map(Mt)}function Qr(e){let t=w(),r=Ce(e);return t.prepare("DELETE FROM workflow_artifacts WHERE execution_id = ?").run(e),r}function Bt(e){w().prepare("DELETE FROM workflow_artifacts WHERE id = ?").run(e)}function en(e){return w().prepare(`
|
|
93
|
-
SELECT id
|
|
94
|
-
FROM workflow_executions
|
|
95
|
-
WHERE status != 'running' AND COALESCE(completed_at, started_at) < ?
|
|
96
|
-
`).all(e).map(n=>n.id)}C();X();var Uo=k("audit");function y(e){try{w().prepare(`
|
|
97
|
-
INSERT INTO artifact_access_log (
|
|
98
|
-
timestamp, task_id, role_id, execution_id, step_id, tool, artifact_key, artifact_id,
|
|
99
|
-
size_bytes, outcome, error_reason
|
|
100
|
-
)
|
|
101
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
102
|
-
`).run(e.timestamp,e.taskId??null,e.roleId??null,e.executionId,e.stepId??null,e.tool,e.artifactKey??null,e.artifactId??null,e.sizeBytes??null,e.outcome,e.errorReason??null)}catch(t){Uo.error({err:t,entry:e},"Failed to write artifact access log")}}var jo=/^[A-Za-z0-9._-]{1,256}$/,Vo=/^[A-Za-z0-9._-]{1,128}$/,$t=256*1024,zo=/^[a-z]+\/[a-z0-9.+-]+$/;async function Fo(e){let{listChannels:t}=await import("./channels-LUJ7GTSP.js"),r=t(),{listSessions:n}=await import("./session-manager-JICVE4CO.js"),i=[...n("active"),...n("archived")],s=r.find(c=>c.name.toLowerCase().includes(e.toLowerCase()));if(!s)return null;let a=i.find(c=>c.source.type==="channel"&&c.source.channelId===s.id&&c.source.chatId)?.source.chatId??s.config?.userId??"";return{channelId:s.id,chatId:a}}function p(e){return{content:[{type:"text",text:JSON.stringify(e)}]}}function le(e){return jo.test(e)?null:"Invalid artifact key. Use only letters, numbers, dot, underscore, or dash (1-256 chars)."}function Ae(e){return Vo.test(e)?null:"Invalid stepId format. Use only letters, numbers, dot, underscore, or dash (1-128 chars)."}function Nt(e,t){let r=e?S(e):void 0,n=async()=>{if(!t)return{error:"artifact tools require a task context"};let s=Z(t);if(!s)return{error:`task not found: ${t}`};if(!s.parentId)return{error:"this task is not a workflow step (no execution context)"};if(!s.stepId)return{error:"this task is not a workflow step (no step_id)"};let o=s.roleId??e;if(!o)return{error:"this workflow task has no role context"};let a=S(o);return a?{executionId:s.parentId,stepId:s.stepId,roleId:o,roleWorkspacePath:te(a.name),taskId:t}:{error:`role not found: ${o}`}},i=[...dt(e),B("list_channels","List all available channels. Use this to discover what channels can be used with send_to_channel.",{},async()=>{let{listChannels:s}=await import("./channels-LUJ7GTSP.js"),o=s();return p({channels:o.map(a=>({id:a.id,name:a.name,enabled:a.enabled,type:a.config?.type??"unknown"}))})}),B("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:v.string().describe("The channel name, e.g., 'WeChat on iPad'"),message:v.string().describe("The message content to send")},async s=>{if(r?.allowedChannels!==void 0){if(r.allowedChannels.length===0)return p({error:"This role is not allowed to send to any channels"});if(!r.allowedChannels.some(l=>l.toLowerCase()===s.channelName.toLowerCase()))return p({error:`Channel "${s.channelName}" is not in the allowed channels list for this role`})}let o=await Fo(s.channelName);if(!o)return p({error:`Channel "${s.channelName}" not found or has no chatId available`});let{getOutboundGateway:a}=await import("./outbound-gateway-GGFMU5JW.js"),d=await a().send({channelId:o.channelId,chatId:o.chatId,content:s.message,messageType:"reply"});return p({success:d.success,channelName:s.channelName})}),B("write_artifact","Persist a small structured value (JSON <= 256KB) for downstream workflow 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:v.string(),value:v.unknown()},async s=>{let o=await n();if("error"in o)return p({error:o.error});let a=le(s.key);if(a)return y({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"write_artifact",artifactKey:s.key,outcome:"denied",errorReason:a}),p({error:a});try{let c=JSON.stringify(s.value),d=Buffer.byteLength(c,"utf8");if(d>$t){let l=`Artifact JSON exceeds ${$t} bytes`;return y({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"write_artifact",artifactKey:s.key,sizeBytes:d,outcome:"denied",errorReason:l}),p({error:l})}let u=Lt();return Te({id:u,executionId:o.executionId,stepId:o.stepId,key:s.key,kind:"json",value:s.value,sizeBytes:d,createdAt:Date.now()}),y({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"write_artifact",artifactKey:s.key,artifactId:u,sizeBytes:d,outcome:"success"}),p({success:!0,artifactId:u,sizeBytes:d})}catch(c){let d=c instanceof Error?c.message:String(c);return y({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"write_artifact",artifactKey:s.key,outcome:"error",errorReason:d}),p({error:d})}}),B("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:v.string(),key:v.string()},async s=>{let o=await n();if("error"in o)return p({error:o.error});let a=Ae(s.stepId),c=le(s.key),d=a??c;if(d)return y({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"read_artifact",artifactKey:s.key,outcome:"denied",errorReason:d}),p({error:d});let u=Ee(o.executionId,s.stepId,s.key);if(!u){let l=`no artifact at ${s.stepId}/${s.key}`;return y({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"read_artifact",artifactKey:s.key,outcome:"error",errorReason:l}),p({error:l})}if(u.kind!=="json"){let l="artifact is a file; use fetch_artifact_file";return y({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"read_artifact",artifactKey:s.key,artifactId:u.id,sizeBytes:u.sizeBytes,outcome:"denied",errorReason:l}),p({error:l})}return y({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"read_artifact",artifactKey:s.key,artifactId:u.id,sizeBytes:u.sizeBytes,outcome:"success"}),p({value:u.value,sizeBytes:u.sizeBytes})}),B("publish_artifact_file","Publish a file from your workspace as a workflow artifact. The file is COPIED to the workflow'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:v.string(),sourcePath:v.string(),mime:v.string().optional(),cleanup:v.boolean().optional()},async s=>{let o=await n();if("error"in o)return p({error:o.error});let a=le(s.key);if(a)return y({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"publish_artifact_file",artifactKey:s.key,outcome:"denied",errorReason:a}),p({error:a});if(s.mime&&!zo.test(s.mime)){let l=`Invalid MIME type: ${s.mime}`;return y({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"publish_artifact_file",artifactKey:s.key,outcome:"denied",errorReason:l}),p({error:l})}try{xe(s.sourcePath,o.roleWorkspacePath,!0)}catch(l){let f=l instanceof Error?l.message:String(l);return y({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"publish_artifact_file",artifactKey:s.key,outcome:"denied",errorReason:f}),p({error:f})}let c=Lt(),d=null,u=!1;try{let l=nt({executionId:o.executionId,artifactId:c,sourcePath:s.sourcePath});return d=l.blobPath,Te({id:c,executionId:o.executionId,stepId:o.stepId,key:s.key,kind:"file",blobPath:d,mime:s.mime,sizeBytes:l.sizeBytes,createdAt:Date.now()}),u=!0,s.cleanup===!0&&st(s.sourcePath),y({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"publish_artifact_file",artifactKey:s.key,artifactId:c,sizeBytes:l.sizeBytes,outcome:"success"}),p({success:!0,artifactId:c,sizeBytes:l.sizeBytes})}catch(l){if(u)try{Bt(c)}catch{}if(d)try{at(d)}catch{}let f=l instanceof Error?l.message:String(l);return y({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"publish_artifact_file",artifactKey:s.key,artifactId:c,outcome:"error",errorReason:f}),p({error:f})}}),B("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:v.string(),key:v.string(),destPath:v.string()},async s=>{let o=await n();if("error"in o)return p({error:o.error});let a=Ae(s.stepId),c=le(s.key),d=a??c;if(d)return y({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"fetch_artifact_file",artifactKey:s.key,outcome:"denied",errorReason:d}),p({error:d});try{xe(s.destPath,o.roleWorkspacePath,!1)}catch(l){let f=l instanceof Error?l.message:String(l);return y({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"fetch_artifact_file",artifactKey:s.key,outcome:"denied",errorReason:f}),p({error:f})}let u=Ee(o.executionId,s.stepId,s.key);if(!u){let l=`no artifact at ${s.stepId}/${s.key}`;return y({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"fetch_artifact_file",artifactKey:s.key,outcome:"error",errorReason:l}),p({error:l})}if(u.kind!=="file"||!u.blobPath){let l="artifact is not a file";return y({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"fetch_artifact_file",artifactKey:s.key,artifactId:u.id,outcome:"denied",errorReason:l}),p({error:l})}try{let l=it({blobPath:u.blobPath,destPath:s.destPath});return y({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"fetch_artifact_file",artifactKey:s.key,artifactId:u.id,sizeBytes:l.sizeBytes,outcome:"success"}),p({success:!0,sizeBytes:l.sizeBytes,mime:u.mime,destPath:s.destPath})}catch(l){let f=l instanceof Error?l.message:String(l);return y({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"fetch_artifact_file",artifactKey:s.key,artifactId:u.id,outcome:"error",errorReason:f}),p({error:f})}}),B("list_artifacts","Discover artifacts published by upstream steps in this workflow. 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:v.string().optional()},async s=>{let o=await n();if("error"in o)return p({error:o.error});let a=s.stepId?Ae(s.stepId):null;if(a)return y({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"list_artifacts",outcome:"denied",errorReason:a}),p({error:a});let c=Ce(o.executionId,s.stepId);return y({timestamp:Date.now(),taskId:o.taskId,roleId:o.roleId,executionId:o.executionId,stepId:o.stepId,tool:"list_artifacts",sizeBytes:c.length,outcome:"success"}),p({artifacts:c.map(d=>({id:d.id,stepId:d.stepId,key:d.key,kind:d.kind,sizeBytes:d.sizeBytes,mime:d.mime,createdAt:d.createdAt}))})})];return Wo({name:"execution-tools",version:"1.0.0",tools:i})}co();qe();import{realpathSync as Ko}from"fs";var x=k("execution"),Ut=new Set;async function Jo(e,t){if(t&&Ut.has(t))return x.info({taskId:e,roleName:t},"Sandbox bypass: approved from session cache"),!0;let r=Wt(),n={steps:[{index:0,description:"Execute task without OS sandbox \u2014 filesystem isolation not enforced",toolsNeeded:[],expectedOutput:"Task result or denial message",riskLevel:"high"}],requiredPermissions:{allowedTools:[],disallowedTools:[],approvalRequired:[],maxBudgetUsd:0,plugins:[]},overallRisk:"high"};return ke({id:r,taskId:e,plan:n,status:"pending",createdAt:Date.now()}),I.emit({type:"plan_approval_request",taskId:e,planId:r,plan:n}),x.info({taskId:e,operationId:r,roleName:t},"Sandbox unavailable: awaiting privilege escalation decision"),new Promise(i=>{let o=setTimeout(()=>{c(),we(r,"denied"),x.warn({taskId:e,operationId:r},"Sandbox bypass timed out, auto-denied"),i(!1)},12e4),a=d=>{d.planId===r&&(c(),d.decision==="allow"?(x.info({taskId:e,operationId:r},"Sandbox bypass approved by user"),t&&Ut.add(t),i(!0)):(x.info({taskId:e,operationId:r},"Sandbox bypass denied by user"),i(!1)))},c=()=>{clearTimeout(o),I.off("plan_approval_decision",a)};I.on("plan_approval_decision",a)})}var ue=class{async execute(t,r){let n=Date.now(),i,s,o;F(t.id,{status:"running",startedAt:Date.now()}),I.emit({type:"task_status_change",taskId:t.id,oldStatus:t.status,newStatus:"running"}),x.info({taskId:t.id,roleId:t.roleId},"ExecutionManager: starting task");try{let a=t.roleId?S(t.roleId):void 0,c=Ie;a&&(Ye(a),c=te(a.name));let d={taskId:t.id,prompt:t.prompt,roleName:a?.name,roleCagPrompt:a?.cagPrompt,allowedTools:a?.allowedTools,cwd:c,workflowStep:t.parentId&&t.stepId?{executionId:t.parentId,stepId:t.stepId}:void 0},u=Et(d),l=Dt({currentTaskId:t.id,roleId:t.roleId,taskPrompt:t.prompt}),f=t.config.approvalTimeout??300,R=async(g,h,b,L)=>{let _=Wt(),We=tt(L??t.roleId,t.prompt,"medium");if(We)return x.info({operationId:_,ruleId:We.id,taskId:t.id},"Auto-approved by permanent rule"),{behavior:"allow",updatedInput:h};let je={steps:[{index:0,description:`${g}: ${JSON.stringify(h).slice(0,300)}`,toolsNeeded:[g],expectedOutput:"",riskLevel:"medium"}],requiredPermissions:{},overallRisk:"medium"};return ke({id:_,taskId:t.id,roleId:L??t.roleId,plan:je,status:"pending",createdAt:Date.now()}),I.emit({type:"plan_approval_request",taskId:t.id,planId:_,plan:je}),x.info({taskId:t.id,operationId:_,toolName:g,matchedPattern:b},"Privilege escalation: awaiting user decision"),new Promise(ye=>{let so=setTimeout(()=>{ze(),we(_,"denied"),x.warn({taskId:t.id,operationId:_},"Privilege escalation timed out, auto-denied"),ye({behavior:"deny",message:`Operation timed out after ${f}s. Auto-denied. Try a safer alternative that does not require approval.`})},f*1e3),Ve=$=>{if($.planId===_)if(ze(),$.decision==="allow")x.info({taskId:t.id,operationId:_,approvalType:$.approvalType},"Operation authorized by user"),ye({behavior:"allow",updatedInput:h});else{let io=$.reason?`Operation denied by user: ${$.reason}. Try a safer alternative.`:"Operation denied by user. Try a safer alternative approach.";x.info({taskId:t.id,operationId:_,reason:$.reason??"no reason given"},"Operation denied by user"),ye({behavior:"deny",message:io})}},ze=()=>{clearTimeout(so),I.off("plan_approval_decision",Ve)};I.on("plan_approval_decision",Ve)})},E=(Ge("defaults.deniedReadPaths")??[]).map(g=>{let h=ee(g);try{return Ko(h)}catch{return h}}),m=a?.additionalDirectories??[],O=a?ct(a):[],V=[...m.map(g=>g.path)].filter((g,h,b)=>b.indexOf(g)===h),Yt=At(g=>({disallowedTools:a?.disallowedTools,approvalRequired:a?.approvalRequired??t.config.approvalRequired,allowedBashPatterns:a?.allowedBashPatterns,deniedBashPatterns:a?.deniedBashPatterns}),R,{deniedReadPaths:E,roleScope:[c,...V]}),Xt=Fe({roleEnvVars:a?.envVars,taskEnv:t.config.env}),Zt=t.config.maxBudgetUsd??z().defaults.maxBudgetUsd,Qt=t.config.maxTurns??100,eo=Nt(t.roleId??"",t.id),to=a?.mcpServers??{},oo=t.config.mcpServers??{},ro={...to,...oo,"execution-tools":eo},ge=[{path:c,mode:"rw"}];t.roleId===Ze&&ge.push({path:Ie,mode:"ro"});for(let g of m)ge.push({path:g.path,mode:g.mode??"rw"});let Le=M();if(Le.platform==="none"&&!await Jo(t.id,a?.name))return F(t.id,{status:"failed",error:"Sandbox unavailable; execution denied by user"}),{taskId:t.id,status:"failed",error:"Sandbox bypass denied"};let $e=a?.permissionMode??"default",no=Ho({prompt:t.prompt,options:{cwd:c,additionalDirectories:V,systemPrompt:u,maxTurns:Qt,maxBudgetUsd:Zt,allowedTools:a?.allowedTools,model:a?.model,mcpServers:ro,settingSources:a?.inheritUserSettings?["project","user"]:["project"],hooks:l,canUseTool:Yt,env:Xt,plugins:O.map(g=>({type:"local",path:g})),permissionMode:$e,...$e==="bypassPermissions"?{allowDangerouslySkipPermissions:!0}:{},spawnClaudeCodeProcess:g=>{let h=Le.spawn({command:g.command,args:g.args,cwd:g.cwd,env:g.env,signal:g.signal,visiblePaths:ge,deniedReadPaths:E}),b=h;b.pid&&(jt(b.pid,t.roleId??"unknown",t.id),b.on("exit",()=>Vt(b.pid)));let L="";return b.stderr?.on("data",_=>{L+=_.toString()}),b.on("exit",_=>{_!==null&&_!==0&&L.includes("sandbox")&&(x.error({taskId:t.id,roleId:t.roleId,exitCode:_,stderr:L.slice(0,500)},"Sandbox wrapper failed \u2014 task process exited before execution"),pe({roleId:t.roleId??"unknown",taskId:t.id,path:c,operation:`sandbox_init_failure:exit_${_}`,timestamp:Date.now()}))}),h},stderr:g=>{g.trim()&&x.debug({stderr:g.trim().slice(0,500)},"ExecutionManager SDK stderr")}}}),Y="",Ne=0,Ue=()=>{x.warn({taskId:t.id},"ExecutionManager: abort signal received")};r&&r.addEventListener("abort",Ue);try{for await(let g of no){let h=g;if(x.debug({eventType:h.type,taskId:t.id},"ExecutionManager SDK event"),h.type==="result"&&typeof h.result=="string"&&(Y=h.result),h.type==="result"){Ne++,typeof h.total_cost_usd=="number"&&(s=h.total_cost_usd);let b=h.usage;b?.input_tokens!==void 0&&b?.output_tokens!==void 0&&(i={input:b.input_tokens,output:b.output_tokens})}if(h.token_usage){let b=h.token_usage;b.input_tokens!==void 0&&b.output_tokens!==void 0&&(i={input:b.input_tokens,output:b.output_tokens})}}}finally{r&&r.removeEventListener("abort",Ue)}o=Ne;let he=Date.now()-n;return F(t.id,{status:"completed",result:Y,completedAt:Date.now(),costUsd:s,tokenUsage:i,numTurns:o,totalDurationMs:he}),I.emit({type:"task_status_change",taskId:t.id,oldStatus:"running",newStatus:"completed"}),I.emit({type:"task_complete_event",taskId:t.id,result:Y}),O.length>0&&Ot(t.id,O,t.roleId),x.info({taskId:t.id,durationMs:he,costUsd:s},"ExecutionManager: task completed"),{taskId:t.id,status:"completed",result:Y,costUsd:s,tokenUsage:i,numTurns:o,durationMs:he}}catch(a){let c=a instanceof Error?a.message:String(a),d=Date.now()-n;return(c.includes("Prompt is too long")||c.includes("prompt is too long"))&&x.warn({taskId:t.id,error:c},"Task prompt exceeds model context window \u2014 task failed"),F(t.id,{status:"failed",error:c,completedAt:Date.now(),totalDurationMs:d}),I.emit({type:"task_status_change",taskId:t.id,oldStatus:"running",newStatus:"failed"}),I.emit({type:"task_complete_event",taskId:t.id,error:c}),x.error({taskId:t.id,error:a},"ExecutionManager: task failed"),{taskId:t.id,status:"failed",error:c,durationMs:d}}}};C();var P=k("execution-pool"),De=new Map;function jt(e,t,r){De.set(e,{roleId:t,taskId:r})}function Vt(e){De.delete(e)}function Oe(e){return De.get(e)}var zt=class{slots;running=!1;pollTimeoutId=null;executor;constructor(t,r){this.slots=Array.from({length:t},(n,i)=>({index:i,taskId:null,abortController:null})),this.executor=r??new ue}async start(){if(this.running)return;this.running=!0,I.on("task_created",n=>{this.onTaskCreated(n.taskId)}),I.on("task_status_change",n=>{n.newStatus==="pending"&&this.pickupPendingTasks()});let r=z().execution?.pollIntervalMs??3e4;this.pollTimeoutId=setTimeout(this.poll,r),P.info({maxConcurrent:this.slots.length},"ExecutionPool started")}stop(){this.running=!1,this.pollTimeoutId&&(clearTimeout(this.pollTimeoutId),this.pollTimeoutId=null);for(let t of this.slots)t.abortController&&(t.abortController.abort(),t.taskId=null,t.abortController=null);P.info("ExecutionPool stopped")}poll=()=>{if(!this.running)return;this.pickupPendingTasks();let r=z().execution?.pollIntervalMs??3e4;this.pollTimeoutId=setTimeout(this.poll,r)};async onTaskCreated(t){this.running&&await this.pickupPendingTasks()}async pickupPendingTasks(){if(!this.running)return;let t=this.slots.find(a=>a.taskId===null);if(!t){P.debug("No free slots available");return}let r=Q("pending");if(r.length===0)return;let i=[...r].sort((a,c)=>a.createdAt-c.createdAt)[0];t.taskId=i.id,t.abortController=new AbortController;let s=t.index,o=i.id;P.info({slotIndex:s,taskId:o},"ExecutionPool: claimed slot for task"),this.emitSlotChange(),this.executeTask(i,s).catch(a=>{P.error({taskId:o,error:a},"ExecutionPool: executeTask failed unexpectedly")})}async executeTask(t,r){let n=this.slots[r];if(!n)return;let i="completed";try{I.emit({type:"execution_task_start",taskId:t.id,slotIndex:r});let s=await this.executor.execute(t,n.abortController?.signal);i=s.status,P.info({taskId:t.id,status:s.status,slotIndex:r},"ExecutionPool: task finished")}finally{n.taskId=null,n.abortController=null,I.emit({type:"execution_task_end",taskId:t.id,slotIndex:r,status:i}),this.emitSlotChange(),this.runPostCompletion(t.id,t.roleId).catch(s=>{P.error({taskId:t.id,error:s},"Post-completion processing failed (non-fatal)")}),this.running&&this.pickupPendingTasks()}}emitSlotChange(){let t=this.slots.filter(i=>i.taskId!==null).length,r=Q("pending");I.emit({type:"execution_slot_change",active:t,max:this.slots.length,queued:r.length});let n=ot();I.emit({type:"stats_update",activeTasks:t,queuedTasks:r.length,totalCostToday:He(n)})}async runPostCompletion(t,r){if(r){try{let{processTaskCompletion:n}=await import("./memory-extractor-XO2HJ22Y.js"),i=await n(t,r);i>0&&P.debug({taskId:t,roleId:r,memoriesStored:i},"Post-completion: memories extracted")}catch(n){P.error({taskId:t,roleId:r,error:n},"Post-completion: memory extraction failed")}try{let{processTaskReview:n}=await import("./learner-CBPQZ3HL.js");await n(t)}catch(n){P.error({taskId:t,roleId:r,error:n},"Post-completion: task review failed")}try{let{evaluateTaskCompletion:n}=await import("./audit-manager-6FFPXID3.js");n(t,r)}catch(n){P.error({taskId:t,roleId:r,error:n},"Post-completion: audit evaluation failed")}}}getStatus(){let t=this.slots.filter(n=>n.taskId!==null).length,r=Q("pending");return{active:t,max:this.slots.length,queued:r.length}}isHealthy(){return this.running}releaseSlot(t){let r=this.slots.find(n=>n.taskId===t);r&&(P.warn({taskId:t,slotIndex:r.index},"ExecutionPool: force-releasing slot"),r.abortController&&r.abortController.abort(),r.taskId=null,r.abortController=null,this.emitSlotChange(),this.running&&this.pickupPendingTasks())}};C();var T=k("audit"),qo="sandbox_violation",J=new Map,Me=1440*60*1e3,me=[],Go=100;function Be(e){let t=e.roleId,r=J.get(t)??{count:0,timestamps:[]};r.count++,r.timestamps.push(e.timestamp);let n=Date.now()-Me;if(r.timestamps=r.timestamps.filter(i=>i>=n),J.set(t,r),r.count%100===0)for(let[i,s]of J.entries()){let o=Date.now()-Me;s.timestamps.filter(a=>a>=o).length===0&&J.delete(i)}me.push(e),me.length>Go&&me.shift();try{Qe({id:`sv-${Date.now()}-${Math.random().toString(36).slice(2,7)}`,ruleId:void 0,taskId:e.taskId,status:"delivered",target:{type:"channel",channelId:"audit"},content:"",attempts:1,messageType:qo,source:"audit",createdAt:e.timestamp,deliveredAt:e.timestamp,expiresAt:e.timestamp+864e5,error:`${e.operation} on ${e.path}`})}catch(i){T.error({error:i},"Failed to record violation to delivery_log")}try{let i=S(e.roleId);W({timestamp:e.timestamp,oldRules:"sandbox_violation",newRules:`${e.operation} on ${e.path}`,diff:`Sandbox violation: ${e.operation} on ${e.path} (taskId=${e.taskId??"unknown"})`,roleId:e.roleId,source:"audit"})}catch(i){T.error({error:i},"Failed to record violation to evolution_audit")}I.emit({type:"sandbox_violation",roleId:e.roleId,taskId:e.taskId,path:e.path,operation:e.operation,timestamp:e.timestamp})}async function Jt(){let e=M();if(e.platform==="none")return T.info("Sandbox platform is 'none'; violation watcher not started"),()=>{};if(!await e.isAvailable())return T.warn({platform:e.platform},"Sandbox platform detected but not available; violation watcher not started"),()=>{};let r=null;return e.platform==="sandbox-exec"?r=Yo():e.platform==="landlock"&&(r=await Xo()),()=>{if(r){let n=r;r=null,n.kill("SIGTERM");let i=setTimeout(()=>{try{n.kill("SIGKILL")}catch{}},2e3);n.on("exit",()=>clearTimeout(i))}T.info("Violation watcher stopped")}}function Yo(){let e=Kt("log",["stream","--predicate",'subsystem == "com.apple.sandbox"',"--style","ndjson","--signal","exit"],{stdio:["ignore","pipe","pipe"]});return e.stdout?.on("data",t=>{let r=t.toString().split(`
|
|
103
|
-
`).filter(Boolean);for(let n of r)try{let i=JSON.parse(n),s=i.eventMessage??i.message??"";if(s.includes("deny")&&(s.includes("file-read")||s.includes("file-write"))){let o=Zo(i,s);o&&Be(o)}}catch{}}),e.stderr?.on("data",t=>{T.debug({msg:t.toString()},"log stream stderr")}),e.on("error",t=>{T.warn({error:t},"macOS violation watcher failed to start")}),T.info("macOS sandbox violation watcher started (log stream)"),e}async function Xo(){let e=await Ft("journalctl",["-kf","--no-pager","-o","short","--grep","landlock"]);if(e)return Ht(e),T.info("Linux violation watcher started (journalctl -kf)"),e;let t=await Ft("dmesg",["-w","-t"]);return t?(Ht(t),T.info("Linux violation watcher started (dmesg -w)"),t):(T.warn("Linux violation watcher unavailable: neither journalctl nor dmesg accessible. Sandbox enforcement still active; monitoring disabled."),null)}async function Ft(e,t){return new Promise(r=>{let n=Kt(e,t,{stdio:["ignore","pipe","pipe"]}),i=setTimeout(()=>r(n),500);n.on("error",()=>{clearTimeout(i),r(null)}),n.on("exit",s=>{s!==0&&(clearTimeout(i),r(null))})})}function Ht(e){e.stdout?.on("data",t=>{let r=t.toString().split(`
|
|
104
|
-
`).filter(Boolean);for(let n of r)if(n.includes("landlock")&&n.includes("denied")){let i=Qo(n);i&&Be(i)}}),e.stderr?.on("data",t=>{T.debug({msg:t.toString().trim()},"Linux watcher stderr")})}function Zo(e,t){let r=t.match(/(?:path|file)=["']([^"']+)["']/),n=t.match(/deny\s+(file-read|file-write|file-[^\s]+)/),i=r?.[1],s=n?.[1]??"unknown";if(!i)return null;let o=typeof e.processID=="number"?e.processID:void 0,a=o?Oe(o):void 0;return{roleId:a?.roleId??"unknown",taskId:a?.taskId,path:i,operation:s,timestamp:Date.now(),count:1}}function Qo(e){let t=e.match(/path="([^"]+)"/)??e.match(/\/[\w\-\.\/\+ ]+/g),r=e.match(/deny\s+(\w+)/),n=e.match(/pid=(\d+)/),i=Array.isArray(t)?t[t.length-1]:t?.[1],s=r?.[1]??"unknown";if(!i)return null;let o=n?parseInt(n[1],10):void 0,a=o?Oe(o):void 0;return{roleId:a?.roleId??"unknown",taskId:a?.taskId,path:i,operation:s,timestamp:Date.now(),count:1}}function pe(e){Be({roleId:e.roleId,taskId:e.taskId,path:e.path,operation:e.operation,timestamp:e.timestamp,count:1})}function qt(e){let t=J.get(e);if(!t)return 0;let r=Date.now()-Me;return t.timestamps.filter(n=>n>=r).length}function Gt(){return[...me]}U();C();var q=k("audit"),er=.4,tr=1440*60*1e3,G=null,fe=null;function ls(e,t,r=er){let n=S(t);if(!n||n.status==="retired"||n.status==="inactive"||n.status==="dead")return;let i=gt(t,e);N(t,{performanceScore:i}),bt(t,i,r)?q.info({roleId:t,emaScore:i},"Probation role graduated"):i<r&&yt(t,i,r)&&It(t)}async function us(){G===null&&(G=setInterval(()=>{q.info("Running daily diagnostic reports");let e=be(void 0,1e3);for(let t of e)if(!(t.status==="retired"||t.status==="inactive"))try{ne(t.id)}catch(r){q.error({roleId:t.id,error:r},"Daily diagnostic failed")}},tr),fe=await Jt(),q.info("AuditManager started"))}function ps(){G!==null&&(clearInterval(G),G=null),fe!==null&&(fe(),fe=null),q.info("AuditManager stopped")}function ms(e){pe(e)}async function fs(){let e=M(),t=be(void 0,1e3),n=Date.now()-1440*60*1e3,i=Gt(),s=i.filter(c=>c.timestamp>=n).length,o=t.map(c=>{let d=i.filter(l=>l.roleId===c.id),u=d[d.length-1];return{roleId:c.id,roleName:c.name,sandboxed:e.platform!=="none",violationCount:qt(c.id),lastViolation:u?.timestamp}}),a=await Tt();return{platform:e.platform,available:a,violationCount24h:s,rolePostures:o}}export{oe as a,pt as b,At as c,Dt as d,M as e,Tt as f,Gr as g,Yr as h,Ce as i,Qr as j,en as k,ls as l,us as m,ps as n,ms as o,fs as p,zt as q};
|
package/dist/engine-HJUE6I4I.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a,b,c,d}from"./chunk-DBUEHITK.js";import"./chunk-NDP6LWXX.js";import"./chunk-TCHBOWQ5.js";import"./chunk-JZNBFZ7W.js";import"./chunk-WTRM5VO7.js";import"./chunk-CLHSPXZ6.js";import"./chunk-AZBNUSM2.js";import"./chunk-ZQYKT5UY.js";import"./chunk-NUTUI5KM.js";import"./chunk-L7JP7DUO.js";import"./chunk-4MJF77RD.js";import"./chunk-WBAPIPST.js";import"./chunk-INNDBLZE.js";import"./chunk-FCV2DPZQ.js";export{a as DeliveryEngine,b as getDeliveryEngine,c as initDeliveryEngine,d as stopDeliveryEngine};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a,b,c}from"./chunk-P6KWAGAY.js";import"./chunk-2CMR5AG7.js";import"./chunk-IZGTTLTG.js";import"./chunk-OTH4M5L3.js";import"./chunk-WKS7QVIX.js";import"./chunk-4MJF77RD.js";import"./chunk-WBAPIPST.js";import"./chunk-INNDBLZE.js";import"./chunk-FCV2DPZQ.js";export{b as getRelevantMemoryContext,a as queryMemory,c as queryMemoryByTier};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a,b,c}from"./chunk-WTRM5VO7.js";import"./chunk-CLHSPXZ6.js";import"./chunk-NUTUI5KM.js";import"./chunk-L7JP7DUO.js";import"./chunk-4MJF77RD.js";import"./chunk-WBAPIPST.js";import"./chunk-INNDBLZE.js";import"./chunk-FCV2DPZQ.js";export{a as OutboundGateway,b as getOutboundGateway,c as isRecentlySent};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a,b}from"./chunk-4NW2DNDZ.js";import"./chunk-7IXLL673.js";import"./chunk-OTH4M5L3.js";import"./chunk-WKS7QVIX.js";import"./chunk-4MJF77RD.js";import"./chunk-WBAPIPST.js";import"./chunk-INNDBLZE.js";import"./chunk-FCV2DPZQ.js";export{a as CHAT_MANAGER_ROLE_ID,b as initializeDefaultRoles};
|
package/dist/roles-NYGWZMQI.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as a,d as b,e as c,f as d,g as e,h as f,i as g,k as h}from"./chunk-OTH4M5L3.js";import"./chunk-WKS7QVIX.js";import"./chunk-4MJF77RD.js";import"./chunk-WBAPIPST.js";import"./chunk-INNDBLZE.js";import"./chunk-FCV2DPZQ.js";h();export{b as createRole,g as deleteRole,c as getRole,d as getRoleByName,f as listRoles,e as updateRole,a as validateAdditionalDirectories};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{d as a}from"./chunk-XTHP5JMO.js";import"./chunk-YHVFZB6Q.js";import"./chunk-JZNBFZ7W.js";import"./chunk-WTRM5VO7.js";import"./chunk-CLHSPXZ6.js";import"./chunk-NUTUI5KM.js";import"./chunk-L7JP7DUO.js";import"./chunk-7K4AQBDD.js";import"./chunk-UQJZU3R5.js";import"./chunk-7IFLU3CY.js";import"./chunk-GSMC3VUM.js";import"./chunk-OTH4M5L3.js";import"./chunk-WKS7QVIX.js";import"./chunk-4MJF77RD.js";import"./chunk-WBAPIPST.js";import"./chunk-INNDBLZE.js";import"./chunk-FCV2DPZQ.js";export{a as WorkflowExecutor};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{nt as t}from"./vendor-icons-CkI4-NxL.js";import{t as n}from"./vendor-react-DLRtONKt.js";import{n as r}from"./dist-HyCSN_hp.js";var i=e(t(),1),a=n(),o=i.forwardRef(({className:e,padding:t=!0,...n},i)=>(0,a.jsx)(`div`,{ref:i,className:r(`rounded-lg border border-slate-800 bg-slate-900 text-slate-200 shadow-sm`,t&&`p-4`,e),...n}));o.displayName=`Card`;var s=i.forwardRef(({className:e,...t},n)=>(0,a.jsx)(`div`,{ref:n,className:r(`mb-3 flex items-center justify-between`,e),...t}));s.displayName=`CardHeader`;var c=i.forwardRef(({className:e,...t},n)=>(0,a.jsx)(`h3`,{ref:n,className:r(`text-sm font-medium text-slate-400`,e),...t}));c.displayName=`CardTitle`;var l=i.forwardRef(({className:e,...t},n)=>(0,a.jsx)(`p`,{ref:n,className:r(`text-xs text-slate-500`,e),...t}));l.displayName=`CardDescription`;var u=i.forwardRef(({className:e,...t},n)=>(0,a.jsx)(`div`,{ref:n,className:r(``,e),...t}));u.displayName=`CardContent`;var d=i.forwardRef(({className:e,...t},n)=>(0,a.jsx)(`div`,{ref:n,className:r(`flex items-center pt-2`,e),...t}));d.displayName=`CardFooter`;export{s as n,c as r,o as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{$ as t,H as n,N as r,nt as i,w as a,y as o}from"./vendor-icons-CkI4-NxL.js";import{d as s,r as c,t as l}from"./vendor-react-DLRtONKt.js";import{r as u}from"./dist-HyCSN_hp.js";import{t as d}from"./index-CaHdOfAc.js";import{n as f,r as p,t as m}from"./Card-4mOZntHG.js";import{n as h}from"./format-DvtQjPZn.js";var g=e(i(),1),_=l();function v(){let{id:e}=s(),[i,l]=(0,g.useState)(null),[v,b]=(0,g.useState)([]),[x,S]=(0,g.useState)([]),[C,w]=(0,g.useState)(null);if((0,g.useEffect)(()=>{e&&((async()=>{try{l((await u(`/channels/${e}`)).channel),w(null)}catch(e){w(e instanceof Error?e.message:`Failed to load channel`)}})(),u(`/delivery-rules`).then(t=>b(t.filter(t=>t.target.type===`channel`&&t.target.channelId===e))).catch(()=>b([])),u(`/delivery-rules`).then(async t=>{let n=t.filter(t=>t.target.type===`channel`&&t.target.channelId===e),r=[];for(let e of n.slice(0,3))try{let t=await u(`/delivery-rules/${e.id}/log`);r.push(...t.log??[])}catch{}r.sort((e,t)=>t.createdAt-e.createdAt),S(r.slice(0,20))}).catch(()=>S([])))},[e]),C)return(0,_.jsxs)(`div`,{className:`space-y-4`,children:[(0,_.jsxs)(c,{to:`/channels`,className:`flex items-center gap-1.5 text-sm text-slate-400 hover:text-slate-200`,children:[(0,_.jsx)(t,{size:14}),` Back to Channels`]}),(0,_.jsx)(m,{className:`text-center text-red-400`,children:C})]});if(!i)return(0,_.jsxs)(`div`,{className:`space-y-4`,children:[(0,_.jsxs)(c,{to:`/channels`,className:`flex items-center gap-1.5 text-sm text-slate-400 hover:text-slate-200`,children:[(0,_.jsx)(t,{size:14}),` Back to Channels`]}),(0,_.jsx)(m,{className:`text-center text-slate-500`,children:`Loading...`})]});let T=e=>e===`connected`?`success`:e===`connecting`?`warning`:e===`error`?`destructive`:`secondary`,E=e=>{switch(e){case`wechat`:return`WeChat`;case`telegram`:return`Telegram`;case`slack`:return`Slack`;case`discord`:return`Discord`;default:return e.charAt(0).toUpperCase()+e.slice(1)}},D={...i.config};for(let e of[`botToken`,`apiKey`,`secret`,`password`,`token`])e in D&&(D[e]=`********`);return(0,_.jsxs)(`div`,{className:`space-y-4`,children:[(0,_.jsxs)(c,{to:`/channels`,className:`flex items-center gap-1.5 text-sm text-slate-400 hover:text-slate-200`,children:[(0,_.jsx)(t,{size:14}),` Back to Channels`]}),(0,_.jsx)(m,{children:(0,_.jsx)(`div`,{className:`flex items-start justify-between gap-4`,children:(0,_.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,_.jsxs)(`div`,{className:`flex items-center gap-2 mb-2`,children:[(0,_.jsx)(d,{variant:T(i.status),children:i.status}),(0,_.jsx)(d,{variant:`outline`,children:E(i.platform)}),i.enabled?(0,_.jsx)(d,{variant:`success`,children:`enabled`}):(0,_.jsx)(d,{variant:`secondary`,children:`disabled`}),(0,_.jsx)(`span`,{className:`font-mono text-xs text-slate-500`,children:i.id})]}),(0,_.jsx)(`h2`,{className:`text-lg font-semibold text-slate-200`,children:i.name})]})})}),(0,_.jsxs)(`div`,{className:`grid grid-cols-2 gap-3 lg:grid-cols-4`,children:[(0,_.jsx)(y,{icon:n,label:`Created`,value:h(i.createdAt),mono:!0}),(0,_.jsx)(y,{icon:a,label:`Messages`,value:String(i.messageCount),mono:!0}),i.lastMessageAt&&(0,_.jsx)(y,{icon:n,label:`Last Message`,value:h(i.lastMessageAt),mono:!0}),i.linkedRoleId&&(0,_.jsx)(y,{icon:o,label:`Linked Role`,value:i.linkedRoleId.slice(0,8)+`...`,mono:!0})]}),(0,_.jsxs)(m,{children:[(0,_.jsx)(f,{children:(0,_.jsx)(p,{children:`Configuration`})}),(0,_.jsx)(`pre`,{className:`max-h-64 overflow-auto whitespace-pre-wrap rounded-md bg-slate-800 p-3 font-mono text-xs text-slate-300`,children:JSON.stringify(D,null,2)})]}),v.length>0&&(0,_.jsxs)(m,{children:[(0,_.jsx)(f,{children:(0,_.jsxs)(p,{className:`flex items-center gap-2`,children:[(0,_.jsx)(r,{size:14}),` Delivery Rules (`,v.length,`)`]})}),(0,_.jsx)(`div`,{className:`space-y-2`,children:v.map(e=>(0,_.jsxs)(`div`,{className:`rounded-md border border-slate-700 bg-slate-800/50 p-2`,children:[(0,_.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,_.jsx)(d,{variant:`outline`,children:e.eventType}),e.enabled?(0,_.jsx)(d,{variant:`success`,children:`active`}):(0,_.jsx)(d,{variant:`secondary`,children:`disabled`}),(0,_.jsxs)(`span`,{className:`text-xs text-slate-500`,children:[`max `,e.maxPerMinute,`/min`]})]}),(0,_.jsxs)(`p`,{className:`mt-1 text-xs text-slate-400 font-mono`,children:[`Rule: `,e.id]})]},e.id))})]}),x.length>0&&(0,_.jsxs)(m,{children:[(0,_.jsx)(f,{children:(0,_.jsxs)(p,{className:`flex items-center gap-2`,children:[(0,_.jsx)(a,{size:14}),` Delivery Log (`,x.length,`)`]})}),(0,_.jsx)(`div`,{className:`space-y-2`,children:x.slice(0,10).map(e=>(0,_.jsxs)(`div`,{className:`flex items-center justify-between rounded-md border border-slate-800 p-2`,children:[(0,_.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,_.jsx)(`span`,{className:`text-sm text-slate-300 font-mono`,children:e.taskId.slice(0,8)}),(0,_.jsx)(`span`,{className:`text-xs text-slate-500 ml-2`,children:h(e.createdAt)})]}),(0,_.jsx)(d,{variant:e.status===`delivered`?`default`:e.status===`failed`?`destructive`:`outline`,children:e.status})]},e.id))})]})]})}function y({icon:e,label:t,value:n,mono:r}){return(0,_.jsxs)(m,{className:`flex flex-col gap-1`,children:[(0,_.jsxs)(`div`,{className:`flex items-center gap-1.5 text-slate-500`,children:[(0,_.jsx)(e,{size:12}),(0,_.jsx)(`span`,{className:`text-xs`,children:t})]}),(0,_.jsx)(`span`,{className:`text-sm text-slate-200 truncate ${r?`font-mono text-xs`:``}`,children:n})]})}export{v as ChannelDetail};
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{S as t,b as n,g as r,nt as i,o as a,t as o,v as s,w as c,y as l}from"./vendor-icons-CkI4-NxL.js";import{t as u}from"./vendor-react-DLRtONKt.js";import{r as d}from"./dist-HyCSN_hp.js";import{f,t as p}from"./index-CaHdOfAc.js";import{n as m,r as h,t as g}from"./Card-4mOZntHG.js";import{t as _}from"./EmptyState-BlgMMAr-.js";var v=e(i(),1),y=u(),b=[`telegram`,`slack`,`discord`,`openclaw`,`wechat`,`whatsapp`],x={telegram:`{
|
|
2
|
-
"botToken": ""
|
|
3
|
-
}`,slack:`{
|
|
4
|
-
"botToken": "",
|
|
5
|
-
"signingSecret": ""
|
|
6
|
-
}`,discord:`{
|
|
7
|
-
"botToken": ""
|
|
8
|
-
}`,openclaw:`{
|
|
9
|
-
"gatewayUrl": "ws://127.0.0.1:18789"
|
|
10
|
-
}`,wechat:`{
|
|
11
|
-
"baseUrl": "https://ilinkai.weixin.qq.com"
|
|
12
|
-
}`,whatsapp:`{}`},S=e=>{switch(e){case`connected`:return`success`;case`connecting`:return`warning`;case`degraded`:return`warning`;case`error`:return`destructive`;default:return`secondary`}};function C({initial:e,onSubmit:t,onCancel:n}){let[r,i]=(0,v.useState)(e?.name??``),[a,s]=(0,v.useState)(e?.platform??`telegram`),[c,l]=(0,v.useState)(e?.config?JSON.stringify(e.config,null,2):x[e?.platform??`telegram`]??`{}`),[u,d]=(0,v.useState)(e?.enabled??!0),[p,m]=(0,v.useState)(``);function _(e){if(e.preventDefault(),!r.trim()){m(`Name is required`);return}let n;try{n=JSON.parse(c)}catch{m(`Invalid JSON in config`);return}m(``),t({name:r.trim(),platform:a,config:n,enabled:u})}return(0,y.jsx)(g,{children:(0,y.jsxs)(`form`,{onSubmit:_,className:`space-y-3`,children:[(0,y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,y.jsx)(h,{className:`text-slate-200`,children:e?`Edit Channel`:`New Channel`}),(0,y.jsx)(f,{variant:`ghost`,size:`icon`,type:`button`,onClick:n,children:(0,y.jsx)(o,{size:14})})]}),p&&(0,y.jsx)(`div`,{className:`text-xs text-red-400`,children:p}),(0,y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,y.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,y.jsx)(`label`,{className:`text-xs text-slate-400`,children:`Name`}),(0,y.jsx)(`input`,{value:r,onChange:e=>i(e.target.value),placeholder:`My Telegram Bot`,className:`rounded-md border border-slate-700 bg-slate-800 px-3 py-1.5 text-sm text-slate-200 placeholder:text-slate-500 focus:border-blue-500 focus:outline-none`})]}),(0,y.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,y.jsx)(`label`,{className:`text-xs text-slate-400`,children:`Platform`}),(0,y.jsx)(`select`,{value:a,onChange:t=>{s(t.target.value),e||l(x[t.target.value]??`{}`)},className:`rounded-md border border-slate-700 bg-slate-800 px-3 py-1.5 text-sm text-slate-200 focus:border-blue-500 focus:outline-none`,children:b.map(e=>(0,y.jsx)(`option`,{value:e,children:e},e))})]})]}),(0,y.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,y.jsx)(`label`,{className:`text-xs text-slate-400`,children:`Config (JSON)`}),(0,y.jsx)(`textarea`,{value:c,onChange:e=>l(e.target.value),rows:4,className:`resize-none rounded-md border border-slate-700 bg-slate-800 px-3 py-1.5 font-mono text-xs text-slate-200 placeholder:text-slate-500 focus:border-blue-500 focus:outline-none`})]}),(0,y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,y.jsx)(`input`,{type:`checkbox`,id:`ch-enabled`,checked:u,onChange:e=>d(e.target.checked),className:`rounded border-slate-700 bg-slate-800`}),(0,y.jsx)(`label`,{htmlFor:`ch-enabled`,className:`text-xs text-slate-400`,children:`Enabled`})]}),!e&&a===`wechat`&&(0,y.jsx)(`div`,{className:`rounded bg-blue-900/30 border border-blue-800/50 px-3 py-2 text-xs text-blue-300`,children:`Creating a WeChat channel will start a QR code scan. Have your WeChat app ready.`}),(0,y.jsxs)(`div`,{className:`flex gap-2`,children:[(0,y.jsx)(f,{type:`submit`,size:`sm`,children:e?`Save`:a===`wechat`&&!e?`Create & Connect`:`Create`}),(0,y.jsx)(f,{type:`button`,variant:`ghost`,size:`sm`,onClick:n,children:`Cancel`})]})]})})}function w({channelId:e,onClose:t}){let[n,r]=(0,v.useState)([]),[i,a]=(0,v.useState)(!0);return(0,v.useEffect)(()=>{(async()=>{try{r((await d(`/channels/${e}/messages`)).messages)}catch{}a(!1)})()},[e]),(0,y.jsxs)(g,{children:[(0,y.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,y.jsx)(h,{children:`Channel Messages`}),(0,y.jsx)(f,{variant:`ghost`,size:`icon`,onClick:t,children:(0,y.jsx)(o,{size:14})})]}),i?(0,y.jsx)(`div`,{className:`text-xs text-slate-500`,children:`Loading...`}):n.length===0?(0,y.jsx)(`div`,{className:`text-xs text-slate-500`,children:`No messages yet`}):(0,y.jsx)(`div`,{className:`max-h-64 overflow-y-auto space-y-2`,children:n.map(e=>(0,y.jsxs)(`div`,{className:`rounded bg-slate-800/50 px-3 py-2 text-xs`,children:[(0,y.jsx)(`span`,{className:e.role===`user`?`text-blue-400`:`text-emerald-400`,children:e.role}),(0,y.jsx)(`span`,{className:`text-slate-500 ml-2`,children:new Date(e.createdAt).toLocaleTimeString()}),(0,y.jsx)(`div`,{className:`mt-1 text-slate-300`,children:e.content})]},e.id))})]})}function T(){let[e,i]=(0,v.useState)([]),[o,u]=(0,v.useState)(!0),[b,x]=(0,v.useState)(!1),[T,E]=(0,v.useState)(null),[D,O]=(0,v.useState)(null),[k,A]=(0,v.useState)(null),[j,M]=(0,v.useState)(!1);(0,v.useEffect)(()=>{N()},[]);async function N(){try{i((await d(`/channels`)).channels)}catch{}u(!1)}async function P(e){try{let t=await d(`/channels`,{method:`POST`,body:JSON.stringify(e)});x(!1),N(),e.platform===`wechat`&&t.channel?.id&&I(t.channel.id)}catch{}}async function F(e){if(T)try{await d(`/channels/${T.id}`,{method:`PATCH`,body:JSON.stringify(e)}),E(null),N()}catch{}}async function I(t){if(e.find(e=>e.id===t)?.platform===`wechat`)try{let e=await d(`/channels/${t}/wechat/qr-start`,{method:`POST`});if(e.qrcodeUrl&&e.sessionKey){A({channelId:t,qrcodeUrl:e.qrcodeUrl,sessionKey:e.sessionKey}),M(!0);try{(await d(`/channels/${t}/wechat/qr-wait`,{method:`POST`,body:JSON.stringify({sessionKey:e.sessionKey,timeoutMs:12e4})})).connected&&N()}catch{}A(null),M(!1)}}catch{}else try{await d(`/channels/${t}/connect`,{method:`POST`}),N()}catch{}}async function L(e){try{await d(`/channels/${e}/disconnect`,{method:`POST`}),N()}catch{}}async function R(e){try{await d(`/channels/${e}`,{method:`DELETE`}),i(t=>t.filter(t=>t.id!==e))}catch{}}return o?(0,y.jsx)(`div`,{className:`flex h-full items-center justify-center`,children:(0,y.jsx)(`div`,{className:`h-8 w-8 animate-spin rounded-full border-2 border-slate-700 border-t-blue-500`})}):(0,y.jsxs)(`div`,{className:`space-y-6`,children:[(0,y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,y.jsx)(`h1`,{className:`text-lg font-semibold text-slate-100`,children:`Channels`}),(0,y.jsxs)(f,{size:`sm`,onClick:()=>{x(!0),E(null)},children:[(0,y.jsx)(s,{size:14}),` Add Channel`]})]}),b&&!T&&(0,y.jsx)(C,{onSubmit:P,onCancel:()=>x(!1)}),T&&(0,y.jsx)(C,{initial:T,onSubmit:F,onCancel:()=>E(null)}),D&&(0,y.jsx)(w,{channelId:D,onClose:()=>O(null)}),k&&(0,y.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center bg-black/60`,children:(0,y.jsxs)(g,{className:`max-w-sm text-center`,children:[(0,y.jsx)(h,{className:`mb-3 text-slate-200`,children:`Scan QR Code with WeChat`}),(0,y.jsx)(`img`,{src:`https://api.qrserver.com/v1/create-qr-code/?size=256x256&data=${encodeURIComponent(k.qrcodeUrl)}`,alt:`WeChat QR Code`,className:`mx-auto h-64 w-64 rounded bg-white p-2`}),(0,y.jsx)(`p`,{className:`mt-3 text-xs text-slate-400`,children:j?`Waiting for scan...`:`Open WeChat and scan the QR code`}),(0,y.jsx)(`a`,{href:k.qrcodeUrl,target:`_blank`,rel:`noopener noreferrer`,className:`mt-1 block text-[10px] text-blue-400 hover:text-blue-300 truncate max-w-[280px] mx-auto`,children:k.qrcodeUrl}),(0,y.jsx)(f,{variant:`ghost`,size:`sm`,className:`mt-3`,onClick:()=>{A(null),M(!1)},children:`Cancel`})]})}),e.length===0&&!b?(0,y.jsx)(_,{icon:(0,y.jsx)(r,{size:24}),title:`No channels`,description:`Add a channel to connect Adam to messaging platforms like Telegram, Slack, or Discord.`}):(0,y.jsx)(`div`,{className:`grid gap-4 md:grid-cols-2 lg:grid-cols-3`,children:e.map(e=>(0,y.jsxs)(g,{children:[(0,y.jsxs)(m,{children:[(0,y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,y.jsx)(r,{size:16,className:`text-slate-400`}),(0,y.jsx)(h,{className:`text-slate-200`,children:e.name})]}),(0,y.jsx)(p,{variant:S(e.status),children:e.status})]}),(0,y.jsxs)(`div`,{className:`space-y-2 text-xs text-slate-400`,children:[(0,y.jsxs)(`div`,{className:`flex justify-between`,children:[(0,y.jsx)(`span`,{children:`Platform`}),(0,y.jsx)(`span`,{className:`text-slate-300`,children:e.platform})]}),(0,y.jsxs)(`div`,{className:`flex justify-between`,children:[(0,y.jsx)(`span`,{children:`Messages`}),(0,y.jsx)(`span`,{className:`text-slate-300`,children:e.messageCount})]}),(0,y.jsxs)(`div`,{className:`flex justify-between`,children:[(0,y.jsx)(`span`,{children:`Enabled`}),(0,y.jsx)(`span`,{className:e.enabled?`text-emerald-400`:`text-slate-500`,children:e.enabled?`Yes`:`No`})]})]}),(0,y.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-2 border-t border-slate-800 pt-3`,children:[e.status===`connected`?(0,y.jsxs)(f,{variant:`secondary`,size:`sm`,onClick:()=>void L(e.id),children:[(0,y.jsx)(n,{size:12}),` Disconnect`]}):(0,y.jsxs)(f,{variant:`secondary`,size:`sm`,onClick:()=>void I(e.id),children:[(0,y.jsx)(l,{size:12}),` Connect`]}),(0,y.jsx)(f,{variant:`ghost`,size:`sm`,onClick:()=>{E(e),x(!1)},children:(0,y.jsx)(t,{size:12})}),(0,y.jsx)(f,{variant:`ghost`,size:`sm`,onClick:()=>O(e.id),children:(0,y.jsx)(c,{size:12})}),(0,y.jsx)(f,{variant:`ghost`,size:`sm`,onClick:()=>void R(e.id),children:(0,y.jsx)(a,{size:12})})]})]},e.id))})]})}export{T as Channels};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{T as t,d as n,et as r,m as i,nt as a,o,v as s}from"./vendor-icons-CkI4-NxL.js";import{t as c}from"./vendor-react-DLRtONKt.js";import{a as l,r as u}from"./dist-HyCSN_hp.js";import{t as d}from"./vendor-state-B_-GdGNJ.js";import{f}from"./index-CaHdOfAc.js";import{a as p}from"./format-DvtQjPZn.js";var m=e(a(),1),h=d((e,t)=>({sessions:[],activeSessionId:null,messages:[],loading:!1,sending:!1,_chatWs:null,_chatWsReconnectDelay:1e3,fetchSessions:async()=>{try{e({sessions:(await u(`/chat/sessions`)).sessions})}catch{}},fetchMessages:async t=>{e({loading:!0});try{e({messages:(await u(`/chat/sessions/${t}`)).messages,loading:!1})}catch{e({messages:[],loading:!1})}},sendMessage:async n=>{if(t().sending)return null;e({sending:!0});try{let r=await u(`/chat/messages`,{method:`POST`,body:JSON.stringify({content:n,source:{type:`web`},sessionId:t().activeSessionId??void 0})});return e({activeSessionId:r.sessionId,sending:!1}),t().fetchSessions(),r}catch{return e({sending:!1}),null}},createSession:async()=>{try{let t=await u(`/chat/sessions`,{method:`POST`,body:JSON.stringify({source:{type:`web`}})});return e(e=>({sessions:[t.session,...e.sessions],activeSessionId:t.session.id,messages:[]})),t.session}catch{return null}},archiveSession:async t=>{try{await u(`/chat/sessions/${t}/archive`,{method:`POST`}),e(e=>({sessions:e.sessions.map(e=>e.id===t?{...e,status:`archived`}:e),activeSessionId:e.activeSessionId===t?null:e.activeSessionId,messages:e.activeSessionId===t?[]:e.messages}))}catch{}},restoreSession:async t=>{try{await u(`/chat/sessions/${t}/restore`,{method:`POST`}),e(e=>({sessions:e.sessions.map(e=>e.id===t?{...e,status:`active`}:e)}))}catch{}},deleteSession:async t=>{try{await u(`/chat/sessions/${t}`,{method:`DELETE`}),e(e=>({sessions:e.sessions.filter(e=>e.id!==t),activeSessionId:e.activeSessionId===t?null:e.activeSessionId,messages:e.activeSessionId===t?[]:e.messages}))}catch{}},setActiveSession:n=>{e({activeSessionId:n,messages:[]}),n&&t().fetchMessages(n)},connectChatStream:()=>{let n=t()._chatWs;if(n&&n.readyState<=1)return;let r=window.location.protocol===`https:`?`wss:`:`ws:`,i=localStorage.getItem(`adam_api_key`),a=new URL(`${r}//${window.location.host}/chat/stream`);i&&a.searchParams.set(`api_key`,i);let o=new WebSocket(a.toString());o.onopen=()=>{e({_chatWs:o,_chatWsReconnectDelay:1e3})},o.onclose=()=>{let n=t()._chatWsReconnectDelay;e({_chatWs:null,_chatWsReconnectDelay:Math.min(n*2,1e4)}),setTimeout(()=>{t().connectChatStream()},n)},o.onerror=()=>{o.close()},o.onmessage=n=>{try{let r=JSON.parse(n.data);if(r.type===`chat_message`&&r.message){let n=r.message,{activeSessionId:i,messages:a}=t();if(n.sessionId!==i||a.some(e=>e.id===n.id))return;e(e=>({messages:[...e.messages,n]}))}else r.type===`session_created`&&t().fetchSessions()}catch{}},e({_chatWs:o})},disconnectChatStream:()=>{let n=t()._chatWs;n&&(n.onclose=null,n.onerror=null,n.onmessage=null,n.close(),e({_chatWs:null}))}})),g=c();function _({message:e}){let t=e.role===`user`;return(0,g.jsx)(`div`,{className:l(`flex`,t?`justify-end`:`justify-start`),children:(0,g.jsxs)(`div`,{className:l(`max-w-[80%] rounded-lg px-3.5 py-2.5 text-sm leading-relaxed`,t?`bg-blue-600 text-white`:`border border-slate-700 bg-slate-800 text-slate-200`),children:[(0,g.jsx)(`div`,{className:`whitespace-pre-wrap break-words`,children:e.content}),(0,g.jsx)(`div`,{className:l(`mt-1.5 text-[10px]`,t?`text-blue-200/60`:`text-slate-500`),children:p(typeof e.createdAt==`number`?e.createdAt:new Date(e.createdAt).getTime())})]})})}function v({onSend:e,disabled:t,placeholder:r=`Type a message...`}){let[i,a]=(0,m.useState)(``),o=(0,m.useRef)(null),s=()=>{let n=i.trim();!n||t||(e(n),a(``),o.current&&(o.current.style.height=`auto`))},c=e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),s())},l=()=>{let e=o.current;e&&(e.style.height=`auto`,e.style.height=`${Math.min(e.scrollHeight,120)}px`)};return(0,g.jsxs)(`div`,{className:`flex items-end gap-2 border-t border-slate-800 bg-slate-950 px-4 py-3`,children:[(0,g.jsx)(`textarea`,{ref:o,value:i,onChange:e=>{a(e.target.value),l()},onKeyDown:c,placeholder:r,disabled:t,rows:1,className:`flex-1 resize-none rounded-md border border-slate-700 bg-slate-800 px-3 py-2 text-sm text-slate-200 placeholder:text-slate-500 focus:border-blue-500 focus:outline-none focus:ring-1 focus:ring-blue-500 disabled:opacity-50`}),(0,g.jsx)(f,{onClick:s,disabled:t||!i.trim(),size:`default`,"aria-label":`Send message`,children:(0,g.jsx)(n,{size:16})})]})}function y(e){let t=Math.floor((Date.now()-e)/1e3);if(t<60)return`just now`;let n=Math.floor(t/60);if(n<60)return`${n}m ago`;let r=Math.floor(n/60);return r<24?`${r}h ago`:`${Math.floor(r/24)}d ago`}function b({session:e,isActive:t,onSelect:n,onArchive:a,onRestore:s,onDelete:c}){let u=e.status===`archived`;return(0,g.jsxs)(`button`,{onClick:n,className:l(`group flex w-full flex-col gap-1 rounded-md px-2.5 py-2 text-left transition-colors`,t?`bg-slate-800 text-slate-100`:`text-slate-400 hover:bg-slate-800/50 hover:text-slate-300`,u&&`opacity-60`),children:[(0,g.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,g.jsx)(`span`,{className:`truncate text-xs font-medium`,children:e.title??e.id.slice(0,8)}),(0,g.jsxs)(`div`,{className:`flex gap-0.5 opacity-0 group-hover:opacity-100`,children:[u?(0,g.jsx)(`span`,{role:`button`,tabIndex:0,onClick:e=>{e.stopPropagation(),s()},onKeyDown:e=>{e.key===`Enter`&&(e.stopPropagation(),s())},className:`rounded p-0.5 text-slate-500 hover:text-emerald-400`,title:`Restore`,children:(0,g.jsx)(i,{size:12})}):(0,g.jsx)(`span`,{role:`button`,tabIndex:0,onClick:e=>{e.stopPropagation(),a()},onKeyDown:e=>{e.key===`Enter`&&(e.stopPropagation(),a())},className:`rounded p-0.5 text-slate-500 hover:text-amber-400`,title:`Archive`,children:(0,g.jsx)(r,{size:12})}),(0,g.jsx)(`span`,{role:`button`,tabIndex:0,onClick:e=>{e.stopPropagation(),c()},onKeyDown:e=>{e.key===`Enter`&&(e.stopPropagation(),c())},className:`rounded p-0.5 text-slate-500 hover:text-red-400`,title:`Delete`,children:(0,g.jsx)(o,{size:12})})]})]}),(0,g.jsxs)(`div`,{className:`flex items-center gap-2 text-[10px] text-slate-500`,children:[(0,g.jsxs)(`span`,{children:[e.messageCount,` turns`]}),(0,g.jsx)(`span`,{children:y(e.lastActiveAt)}),u&&(0,g.jsx)(`span`,{className:`rounded bg-slate-700 px-1 py-0.5 text-[9px]`,children:`archived`})]})]})}function x({sessions:e,activeSessionId:t,onSelectSession:n,onNewSession:r,onArchiveSession:i,onRestoreSession:a,onDeleteSession:o}){let c=e.filter(e=>e.status===`active`),l=e.filter(e=>e.status===`archived`);return(0,g.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,g.jsxs)(`div`,{className:`flex items-center justify-between border-b border-slate-800 px-3 py-2.5`,children:[(0,g.jsx)(`span`,{className:`text-xs font-medium text-slate-400`,children:`Sessions`}),(0,g.jsx)(f,{variant:`ghost`,size:`sm`,onClick:r,children:(0,g.jsx)(s,{size:14})})]}),(0,g.jsxs)(`div`,{className:`flex-1 overflow-y-auto px-1.5 py-1.5`,children:[c.length===0&&l.length===0&&(0,g.jsx)(`div`,{className:`px-2 py-4 text-center text-xs text-slate-500`,children:`No sessions yet`}),c.length>0&&(0,g.jsx)(`div`,{className:`space-y-0.5`,children:c.map(e=>(0,g.jsx)(b,{session:e,isActive:e.id===t,onSelect:()=>n(e.id),onArchive:()=>i(e.id),onRestore:()=>a(e.id),onDelete:()=>o(e.id)},e.id))}),l.length>0&&(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`div`,{className:`mt-3 mb-1 px-2 text-[10px] font-medium uppercase tracking-wider text-slate-600`,children:`Archived`}),(0,g.jsx)(`div`,{className:`space-y-0.5`,children:l.map(e=>(0,g.jsx)(b,{session:e,isActive:e.id===t,onSelect:()=>n(e.id),onArchive:()=>i(e.id),onRestore:()=>a(e.id),onDelete:()=>o(e.id)},e.id))})]})]})]})}function S(){let e=h(e=>e.sessions),n=h(e=>e.activeSessionId),r=h(e=>e.messages),i=h(e=>e.sending),a=h(e=>e.fetchSessions),o=h(e=>e.sendMessage),s=h(e=>e.createSession),c=h(e=>e.archiveSession),l=h(e=>e.restoreSession),u=h(e=>e.deleteSession),d=h(e=>e.setActiveSession),f=h(e=>e.connectChatStream),p=h(e=>e.disconnectChatStream),y=(0,m.useRef)(null);return(0,m.useEffect)(()=>{a()},[a]),(0,m.useEffect)(()=>(f(),()=>p()),[f,p]),(0,m.useEffect)(()=>{y.current?.scrollIntoView?.({behavior:`smooth`})},[r]),(0,g.jsxs)(`div`,{className:`flex h-full overflow-hidden`,children:[(0,g.jsx)(`div`,{className:`hidden w-56 flex-shrink-0 border-r border-slate-800 bg-slate-950 lg:block`,children:(0,g.jsx)(x,{sessions:e,activeSessionId:n,onSelectSession:d,onNewSession:()=>void s(),onArchiveSession:e=>void c(e),onRestoreSession:e=>void l(e),onDeleteSession:e=>void u(e)})}),(0,g.jsxs)(`div`,{className:`flex flex-1 flex-col`,children:[(0,g.jsx)(`div`,{className:`flex-1 overflow-y-auto px-4 py-4`,children:r.length===0?(0,g.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center gap-3 text-slate-500`,children:[(0,g.jsx)(`div`,{className:`rounded-full bg-slate-800 p-3`,children:(0,g.jsx)(t,{size:24})}),(0,g.jsx)(`div`,{className:`text-sm`,children:`Start a conversation with Adam`}),(0,g.jsx)(`div`,{className:`text-xs text-slate-600`,children:`Type a message below to begin`})]}):(0,g.jsxs)(`div`,{className:`mx-auto max-w-3xl space-y-3`,children:[r.map(e=>(0,g.jsx)(_,{message:e},e.id)),(0,g.jsx)(`div`,{ref:y})]})}),(0,g.jsx)(`div`,{className:`mx-auto w-full max-w-3xl`,children:(0,g.jsx)(v,{onSend:async e=>{await o(e)},disabled:i})})]})]})}export{S as Chat};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{G as t,K as n,V as r,W as i,c as a,k as o,nt as s,q as c,tt as l}from"./vendor-icons-CkI4-NxL.js";import{r as u,t as d}from"./vendor-react-DLRtONKt.js";import{C as f,n as p,t as m}from"./index-CaHdOfAc.js";import{n as h,r as g,t as _}from"./Card-4mOZntHG.js";import{a as v,o as y,t as b}from"./format-DvtQjPZn.js";import{a as x,i as S,n as C,o as w,r as T,t as E}from"./Table-BxbnOSbq.js";var D=e(s(),1),O=d();function k(){let e=f(e=>e.tasks),s=f(e=>e.goals),d=f(e=>e.stats),k=f(e=>e.readiness),j=f(e=>e.roles),M=f(e=>e.executionPool),N=f(e=>e.fetchTasks),P=f(e=>e.fetchGoals),F=f(e=>e.fetchRoles),I=f(e=>e.fetchExecutionPool);(0,D.useEffect)(()=>{N(),P(),F(),I();let e=setInterval(()=>{N(),I()},5e3);return()=>clearInterval(e)},[N,P,F,I]);let L=e.filter(e=>e.status===`running`).length,R=e.filter(e=>e.status===`completed`).length,z=e.filter(e=>e.status===`failed`).length,B=[...e].sort((e,t)=>t.createdAt-e.createdAt).slice(0,8);return(0,O.jsxs)(`div`,{className:`space-y-6`,children:[(0,O.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,O.jsx)(`h1`,{className:`text-lg font-semibold text-slate-100`,children:`Dashboard`}),k&&(0,O.jsx)(`span`,{role:`status`,"aria-live":`polite`,children:(0,O.jsx)(m,{variant:k.status===`ready`?`success`:`destructive`,children:k.status===`ready`?`Server Ready`:`Not Ready`})})]}),(0,O.jsxs)(`div`,{className:`grid grid-cols-2 gap-3 lg:grid-cols-4`,role:`region`,"aria-label":`Server statistics`,children:[(0,O.jsx)(A,{icon:o,label:`Active Tasks`,value:d.activeTasks||L,color:`text-blue-400`}),(()=>{let e=j.filter(e=>e.status===`active`).length,t=j.length,n=j.filter(e=>e.status===`probation`).length,r=j.filter(e=>e.status===`retired`).length,i=[n>0?`${n} probation`:``,r>0?`${r} retired`:``].filter(Boolean).join(` · `);return(0,O.jsx)(A,{icon:l,label:`Role Health`,value:i?`${e}/${t} | ${i}`:`${e}/${t}`,color:r>0?`text-red-400`:n>0?`text-amber-400`:`text-emerald-400`})})(),(0,O.jsx)(A,{icon:i,label:`Roles`,value:j.length,color:`text-emerald-400`}),(0,O.jsx)(A,{icon:t,label:`Cost Today`,value:b(d.totalCostToday),color:`text-purple-400`})]}),(0,O.jsxs)(`div`,{className:`grid grid-cols-2 gap-3 lg:grid-cols-4`,role:`region`,"aria-label":`Additional statistics`,children:[(0,O.jsx)(A,{icon:n,label:`Completed`,value:R,color:`text-emerald-400`}),(0,O.jsx)(A,{icon:c,label:`Failed`,value:z,color:`text-red-400`}),(0,O.jsx)(A,{icon:a,label:`Goals`,value:s.length,color:`text-orange-400`}),(0,O.jsx)(A,{icon:r,label:`Execution Pool`,value:`${M.active}/${M.max} | ${M.queued} queued`,color:`text-blue-400`})]}),(0,O.jsx)(`div`,{className:`grid gap-4 lg:grid-cols-1`,children:(0,O.jsxs)(_,{children:[(0,O.jsx)(h,{children:(0,O.jsx)(g,{children:`System Checks`})}),k?(0,O.jsx)(`div`,{className:`grid grid-cols-2 gap-2`,children:Object.entries(k.checks).map(([e,t])=>(0,O.jsxs)(`div`,{className:`flex items-center gap-2 rounded-md bg-slate-800/30 px-3 py-2`,children:[(0,O.jsx)(`div`,{className:t?`h-2 w-2 rounded-full bg-emerald-500`:`h-2 w-2 rounded-full bg-red-500`}),(0,O.jsx)(`span`,{className:`text-xs capitalize text-slate-300`,children:e})]},e))}):(0,O.jsx)(`span`,{className:`text-xs text-slate-500`,children:`Loading...`})]})}),(0,O.jsxs)(_,{padding:!1,children:[(0,O.jsxs)(`div`,{className:`flex items-center justify-between px-4 pt-4`,children:[(0,O.jsx)(g,{children:`Recent Tasks`}),(0,O.jsx)(u,{to:`/work`,className:`text-xs text-blue-400 hover:text-blue-300`,children:`View all`})]}),(0,O.jsx)(`div`,{className:`mt-3`,children:(0,O.jsxs)(E,{children:[(0,O.jsx)(x,{children:(0,O.jsxs)(w,{children:[(0,O.jsx)(S,{children:`ID`}),(0,O.jsx)(S,{children:`Prompt`}),(0,O.jsx)(S,{children:`Status`}),(0,O.jsx)(S,{children:`Role`}),(0,O.jsx)(S,{children:`Created`})]})}),(0,O.jsxs)(C,{children:[B.map(e=>(0,O.jsxs)(w,{children:[(0,O.jsx)(T,{children:(0,O.jsx)(u,{to:`/tasks/${e.id}`,className:`font-mono text-xs text-blue-400 hover:text-blue-300`,children:e.id.slice(0,8)})}),(0,O.jsx)(T,{children:y(e.prompt,60)}),(0,O.jsx)(T,{children:(0,O.jsx)(m,{variant:p(e.status),children:e.status})}),(0,O.jsx)(T,{children:(0,O.jsx)(`span`,{className:`font-mono text-xs text-slate-500`,children:e.roleId?e.roleId.slice(0,12):`—`})}),(0,O.jsx)(T,{className:`text-xs text-slate-500`,children:v(e.createdAt)})]},e.id)),B.length===0&&(0,O.jsx)(w,{children:(0,O.jsx)(T,{colSpan:5,className:`text-center text-slate-500`,children:`No tasks yet`})})]})]})})]})]})}function A({icon:e,label:t,value:n,color:r}){return(0,O.jsxs)(_,{className:`flex items-center gap-3`,children:[(0,O.jsx)(`div`,{className:`rounded-md bg-slate-800 p-2 ${r}`,children:(0,O.jsx)(e,{size:16})}),(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`div`,{className:`text-lg font-semibold text-slate-100`,children:n}),(0,O.jsx)(`div`,{className:`text-xs text-slate-500`,children:t})]})]})}export{k as Dashboard};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./vendor-react-DLRtONKt.js";import{n as t}from"./dist-HyCSN_hp.js";var n=e();function r({icon:e,title:r,description:i,action:a,className:o}){return(0,n.jsxs)(`div`,{className:t(`flex flex-col items-center justify-center py-16 text-center`,o),children:[e&&(0,n.jsx)(`div`,{className:`mb-3 text-slate-600`,children:e}),(0,n.jsx)(`h3`,{className:`text-sm font-medium text-slate-400`,children:r}),i&&(0,n.jsx)(`p`,{className:`mt-1 text-xs text-slate-500`,children:i}),a&&(0,n.jsx)(`div`,{className:`mt-4`,children:a})]})}export{r as t};
|