adam-agent-server 1.2.0 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/README.md +4 -7
  2. package/dist/{adam-tools-SXOVOPS2.js → adam-tools-V22LRDCP.js} +1 -1
  3. package/dist/{chunk-XTGWQUO4.js → chunk-IZWULGUS.js} +1 -1
  4. package/dist/index.js +3 -3
  5. package/package.json +1 -1
  6. package/web/dist/assets/{ChannelDetail-e6rVX_y8.js → ChannelDetail-eWtIGhAd.js} +1 -1
  7. package/web/dist/assets/{Channels-DJvZPKer.js → Channels-2veauYsm.js} +1 -1
  8. package/web/dist/assets/{Chat-hTZdEwyE.js → Chat-Bha4vXwT.js} +1 -1
  9. package/web/dist/assets/{Dashboard-B4rL_ePs.js → Dashboard-cDHpOWnY.js} +1 -1
  10. package/web/dist/assets/EnvVarEditor-CaCpNT3y.js +1 -0
  11. package/web/dist/assets/{Evolution-BGwFCo7X.js → Evolution-Ao-gdHbS.js} +1 -1
  12. package/web/dist/assets/{GoalDetail-BH2ku-0t.js → GoalDetail-CX2i9A5a.js} +1 -1
  13. package/web/dist/assets/{Goals-DynDtpMC.js → Goals-DdM0tFus.js} +1 -1
  14. package/web/dist/assets/{Logs-CyJFouE6.js → Logs-DJhpDtCA.js} +1 -1
  15. package/web/dist/assets/{Memories-ClcFD7OG.js → Memories-CYN99g2T.js} +1 -1
  16. package/web/dist/assets/{Plugins-SNOQNNcL.js → Plugins-gcMpBdyq.js} +1 -1
  17. package/web/dist/assets/{RoleDetail-vlTPiYwY.js → RoleDetail-s7u-Shk3.js} +2 -2
  18. package/web/dist/assets/{Roles-CFcuHIvA.js → Roles-CCy1H7PY.js} +1 -1
  19. package/web/dist/assets/{Settings-C9Kuz-6D.js → Settings-JbgBxBeo.js} +1 -1
  20. package/web/dist/assets/{Strategies-DZWlQCHp.js → Strategies-CO4LwZjS.js} +1 -1
  21. package/web/dist/assets/{Switch-DOi0EFHj.js → Switch-CTAIxUd_.js} +1 -1
  22. package/web/dist/assets/{TaskDetail-DjmmnldI.js → TaskDetail-DEg_oUwx.js} +1 -1
  23. package/web/dist/assets/{Work-CvESHC3Y.js → Work-BpKK_uXA.js} +1 -1
  24. package/web/dist/assets/{index-BFmC20R2.js → index-rvaixveh.js} +5 -5
  25. package/web/dist/index.html +1 -1
  26. package/web/dist/assets/EnvVarEditor-C8kRWejV.js +0 -1
package/README.md CHANGED
@@ -95,8 +95,7 @@ npm install -g adam-agent-server
95
95
  # Option B: From source
96
96
  git clone https://github.com/n0rvyn/adam.git
97
97
  cd adam
98
- pnpm install && pnpm build
99
- cd web && pnpm install && pnpm build && cd ..
98
+ pnpm install && pnpm build:all
100
99
  pnpm link --global
101
100
  ```
102
101
 
@@ -347,9 +346,8 @@ pnpm test:coverage # Coverage report
347
346
  pnpm typecheck # Type check
348
347
 
349
348
  # Web UI development
350
- cd web
351
- pnpm dev # Vite dev server (hot reload)
352
- pnpm build # Production build
349
+ pnpm --filter adam-web dev # Vite dev server (hot reload)
350
+ pnpm --filter adam-web build # Production build
353
351
  ```
354
352
 
355
353
  ## License
@@ -390,8 +388,7 @@ npm install -g adam-agent-server
390
388
  # 方式 B: 从源码
391
389
  git clone https://github.com/n0rvyn/adam.git
392
390
  cd adam
393
- pnpm install && pnpm build
394
- cd web && pnpm install && pnpm build && cd ..
391
+ pnpm install && pnpm build:all
395
392
  pnpm link --global
396
393
 
397
394
  # 启动
@@ -1 +1 @@
1
- import{n as a,o as b}from"./chunk-XTGWQUO4.js";import"./chunk-5V36ACKZ.js";import"./chunk-OEKM2W3K.js";import"./chunk-EJVUUIAV.js";import"./chunk-GMCIKDTC.js";import"./chunk-6YURWVQG.js";import"./chunk-CDVIT7L5.js";import"./chunk-W3554FQ7.js";import"./chunk-RPTHFQX7.js";import"./chunk-AJVN3KPM.js";import"./chunk-AR2IZMM2.js";import"./chunk-SWPXG2CY.js";import"./chunk-KLQOILIJ.js";import"./chunk-L7JP7DUO.js";import"./chunk-GUQAIWCQ.js";import"./chunk-2CMR5AG7.js";import"./chunk-4TCP2AT7.js";import"./chunk-6DXNXLYG.js";import"./chunk-SBX3HMDA.js";import"./chunk-ZM6YED5F.js";import"./chunk-7IFLU3CY.js";import"./chunk-6HD6NYIB.js";import"./chunk-B4WHT7DX.js";import"./chunk-7LBDLAUQ.js";import"./chunk-KVSO3KGZ.js";import"./chunk-WBAPIPST.js";import"./chunk-INNDBLZE.js";import"./chunk-FCV2DPZQ.js";export{b as createAdamTools,a as getToolsFingerprint};
1
+ import{n as a,o as b}from"./chunk-IZWULGUS.js";import"./chunk-5V36ACKZ.js";import"./chunk-OEKM2W3K.js";import"./chunk-EJVUUIAV.js";import"./chunk-GMCIKDTC.js";import"./chunk-6YURWVQG.js";import"./chunk-CDVIT7L5.js";import"./chunk-W3554FQ7.js";import"./chunk-RPTHFQX7.js";import"./chunk-AJVN3KPM.js";import"./chunk-AR2IZMM2.js";import"./chunk-SWPXG2CY.js";import"./chunk-KLQOILIJ.js";import"./chunk-L7JP7DUO.js";import"./chunk-GUQAIWCQ.js";import"./chunk-2CMR5AG7.js";import"./chunk-4TCP2AT7.js";import"./chunk-6DXNXLYG.js";import"./chunk-SBX3HMDA.js";import"./chunk-ZM6YED5F.js";import"./chunk-7IFLU3CY.js";import"./chunk-6HD6NYIB.js";import"./chunk-B4WHT7DX.js";import"./chunk-7LBDLAUQ.js";import"./chunk-KVSO3KGZ.js";import"./chunk-WBAPIPST.js";import"./chunk-INNDBLZE.js";import"./chunk-FCV2DPZQ.js";export{b as createAdamTools,a as getToolsFingerprint};
@@ -65,7 +65,7 @@ Complete tasks with high quality.
65
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
66
 
67
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"}}};C();Ae();import{v4 as y}from"uuid";import{spawnSync as tt}from"child_process";import{createRequire as Rt}from"module";import{dirname as _t,join as rt}from"path";import{openSync as Mt,readFileSync as xt,unlinkSync as Lt}from"fs";var Pt=3e4,nt=12e4;function ot(){let t=Rt(import.meta.url).resolve("@anthropic-ai/claude-agent-sdk");return rt(_t(t),"cli.js")}function G(e,t){let r=ot(),n=t?.timeout??Pt;if(t?.json){let i=rt("/tmp",`adam-cli-stdout-${process.pid}-${Date.now()}.txt`),s=Mt(i,"w");try{let l=tt("node",[r,...e],{cwd:t.cwd,timeout:n,stdio:["ignore",s,"pipe"],encoding:"utf-8"});if(l.status!==0)throw new Error(l.stderr?.trim()||`CLI exited with status ${l.status}`);return xt(i,"utf-8")}finally{try{Lt(i)}catch{}}}let o=tt("node",[r,...e],{cwd:t?.cwd,timeout:n,encoding:"utf-8"});if(o.status!==0)throw new Error(o.stderr?.trim()||`CLI exited with status ${o.status}`);return o.stdout}function at(){let e=G(["plugin","list","--available","--json"],{json:!0});return JSON.parse(e)}function we(e,t="user",r){return G(["plugin","install",e,"--scope",t],{cwd:r,timeout:nt})}function ve(e,t,r){return G(["plugin","uninstall",e],{cwd:r,timeout:nt})}function it(e,t){return G(["plugin","enable",e])}function st(e,t){return G(["plugin","disable",e])}function Sn(){try{return!!ot()}catch{return!1}}C();import*as lt from"crypto";var V=w("api"),B=class{cancelTask(t){let r=h(t);r&&(E(t,{status:"cancelled",completedAt:Date.now()}),me.emit({type:"task_status_change",taskId:t,oldStatus:r.status,newStatus:"cancelled"}),V.debug({taskId:t,oldStatus:r.status},"Task cancelled"))}resolveApproval(t,r,n){return V.debug({approvalId:t,action:r,reason:n},"Approval resolved (no-op in Pure C)"),!0}resolvePlanApproval(t,r,n,o){let i=_e(t);if(!i)return V.warn({planId:t},"Plan not found or already resolved"),!1;let s=h(i.taskId);return s?(Me(t,r==="allow"?"approved":"denied",n),r==="allow"&&n==="permanent"&&xe({id:lt.randomUUID(),roleId:i.roleId,taskPattern:s.prompt.slice(0,100).replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),maxRiskLevel:i.plan.overallRisk,createdAt:Date.now(),createdByTaskId:s.id}),me.emit({type:"plan_approval_decision",taskId:s.id,planId:t,decision:r,approvalType:n,reason:o}),V.debug({planId:t,decision:r,approvalType:n},"Plan approval resolved"),!0):(V.warn({planId:t},"Task not found for plan"),!1)}};import{existsSync as At}from"fs";function ct(e,t){return t?{allowedTools:Et(t.allowedTools,e.allowedTools),disallowedTools:Ie(e.disallowedTools,t.disallowedTools),approvalRequired:Ie(e.approvalRequired,t.approvalRequired),maxBudgetUsd:t.maxBudgetUsd!==void 0&&t.maxBudgetUsd>0?Math.min(t.maxBudgetUsd,e.maxBudgetUsd):e.maxBudgetUsd,plugins:Ie(e.plugins??[],t.plugins)}:{allowedTools:e.allowedTools,disallowedTools:e.disallowedTools,approvalRequired:e.approvalRequired,maxBudgetUsd:e.maxBudgetUsd,plugins:e.plugins??[]}}function Et(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 Ie(e,t){return t===void 0?e:[...new Set([...e,...t])]}var ie=w("manager");function c(e){return{content:[{type:"text",text:JSON.stringify(e)}]}}async function R(e){let{listChannels:t}=await import("./channels-WZOYE4O4.js"),r=t(),{listSessions:n}=await import("./session-manager-Z6MIYRD3.js"),o=[...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 l=s.channelId,d=s.chatId;if(!l&&s.channelName){let u=r.find(m=>m.name.toLowerCase().includes(s.channelName.toLowerCase()));u&&(l=u.id)}if(l&&!d){let u=o.find(m=>m.source.type==="channel"&&m.source.channelId===l&&m.source.chatId);u?.source.chatId?d=u.source.chatId:d=r.find(g=>g.id===l)?.config?.userId}l&&d?i.push({type:"channel",channelId:l,chatId:d}):ie.warn({channelName:s.channelName,channelId:l,chatId:d},"Could not resolve channel notify target")}return i}async function Nt(e){let{listRoles:t}=await import("./roles-3UTFKSHI.js"),r=t(void 0,100,0);for(let n of r)if(n.name.toLowerCase().includes(e.toLowerCase()))return n.id}var Ut={goalId:a.string()},$t={goalId:a.string(),status:a.string().optional(),currentValue:a.number().optional(),budgetUsd:a.number().optional(),notes:a.string().optional()},jt={goalId:a.string(),goalDescription:a.string(),maxSubtasks:a.number().optional()},x=a.union([a.object({type:a.literal("session"),sessionId:a.string()}),a.object({type:a.literal("channel"),channelName:a.string()}),a.object({type:a.literal("channel"),channelId:a.string(),chatId:a.string().optional()})]),Ot={prompt:a.string(),roleId:a.string().describe("Role ID. Call list_roles first to find the best role for the task."),deliverTo:a.array(x).optional().describe("Where to deliver the task output (result full text). E.g., send result to a specific channel."),reportTo:a.array(x).optional().describe("Where to send status reports (completion summary). Defaults to the originating channel/session."),toolOverrides:a.object({allowedTools:a.array(a.string()).optional(),disallowedTools:a.array(a.string()).optional()}).optional()},Ft={taskId:a.string(),goalId:a.string().optional(),strategyId:a.string().optional()},Gt={roleId:a.string(),taskType:a.string(),name:a.string().optional()},Vt={status:a.string().optional(),limit:a.number().optional()},Bt={taskId:a.string(),roleId:a.string()},qt={taskId:a.string().optional(),status:a.string().optional(),limit:a.number().optional()},Wt={roleId:a.string(),allowedTools:a.array(a.string()).optional(),disallowedTools:a.array(a.string()).optional(),additionalDirectories:a.array(a.object({path:a.string(),mode:a.enum(["ro","rw"]).optional().describe("Read-only or read-write access. Default: rw. Enforced by OS sandbox."),inheritPlugins:a.boolean().optional(),inheritMcp:a.boolean().optional(),inheritPermissions:a.boolean().optional()})).optional(),allowedChannels:a.array(a.string()).optional(),inheritUserSettings:a.boolean().optional().describe("Enable/disable inheriting user-level settings (global plugins, MCP servers). Default: false (isolated).")},Jt={roleId:a.string().optional(),limit:a.number().optional()},Ht={name:a.string(),cagPrompt:a.string(),traits:a.array(a.string()).optional(),allowedTools:a.array(a.string()).optional(),disallowedTools:a.array(a.string()).optional(),additionalDirectories:a.array(a.object({path:a.string(),mode:a.enum(["ro","rw"]).optional().describe("Read-only or read-write access. Default: rw. Enforced by OS sandbox."),inheritPlugins:a.boolean().optional(),inheritMcp:a.boolean().optional(),inheritPermissions:a.boolean().optional()})).optional()},Yt={roleId:a.string(),reason:a.string().optional()},zt={name:a.string(),description:a.string().optional(),roleId:a.string().optional(),metric:a.string().optional(),targetValue:a.number().optional(),deadline:a.number().optional(),budgetUsd:a.number().optional(),deliverTo:a.array(x).optional().describe("Where to deliver goal completion notifications.")},Kt={name:a.string(),description:a.string().optional(),triggerType:a.enum(["cron","event"]),triggerCron:a.string().optional(),triggerEvent:a.string().optional(),prompt:a.string(),roleId:a.string().optional(),enabled:a.boolean().optional(),goalIds:a.array(a.string()).optional(),deliverTo:a.array(x).optional().describe("Where to deliver the task output (result full text)."),reportTo:a.array(x).optional().describe("Where to send status reports (completion summary).")},Qt={status:a.enum(["active","retired","probation"]).optional(),limit:a.number().optional()},Xt={enabled:a.boolean().optional()},Zt={},er={},tr={prompt:a.string().describe("The task prompt to execute after the delay"),delayMinutes:a.number().optional().describe("Minutes from now to execute (e.g., 30 for 'half an hour later')"),runAt:a.string().optional().describe("ISO 8601 timestamp to execute at (e.g., '2026-04-01T15:00:00+08:00')"),roleId:a.string().describe("Role ID to assign the task to. Call list_roles first."),deliverTo:a.array(x).optional().describe("Where to deliver the task output (result full text)."),reportTo:a.array(x).optional().describe("Where to send status reports (completion summary).")},rr={roleId:a.string().optional().describe("If provided, shows which plugins are installed in that role's workspace.")},nr={roleId:a.string().describe("Role ID to install the plugin under (project-scope)."),pluginId:a.string().describe("Plugin ID (e.g. 'github@anthropic'). Use list_available_plugins to discover available plugins.")},or={roleId:a.string().describe("Role ID to uninstall the plugin from."),pluginId:a.string().describe("Plugin ID to uninstall.")},ar={roleId:a.string().describe("Role ID to bind the MCP server to."),mcpName:a.string().describe("Name for this MCP server (e.g., 'github', 'filesystem')."),mcpConfig:a.record(a.string(),a.unknown()).describe("MCP server configuration object.")},ir={roleId:a.string().describe("Role ID to unbind the MCP server from."),mcpName:a.string().describe("Name of the MCP server to remove.")},sr={pluginId:a.string().describe("Plugin ID (e.g., 'github@anthropic').")},lr={pluginId:a.string().describe("Plugin ID (e.g., 'github@anthropic').")},cr={pluginId:a.string().describe("Plugin ID (e.g., 'github@anthropic').")},dr={pluginId:a.string().describe("Plugin ID (e.g., 'github@anthropic').")},ur={},pr={},mr={pluginId:a.string().describe("Plugin ID (e.g., 'github@anthropic').")},gr={roleId:a.string().describe("Role ID to associate scanned plugins with."),path:a.string().describe("Directory path to scan for .claude/settings.json.")},fr={taskId:a.string().describe("Task ID to cancel.")},hr={taskId:a.string().describe("Task ID to get logs for."),limit:a.number().optional().describe("Max log entries (default 20).")},br={roleId:a.string().describe("Role ID to delete.")},yr={},wr={updates:a.record(a.string(),a.unknown()).describe("Config key-value pairs to update. Example: { 'defaults.maxTurns': 50, 'logging.level': 'debug' }")},vr={roleId:a.string().describe("Role ID to list memories for."),limit:a.number().optional().describe("Max results (default 20).")},Ir={templateId:a.string().describe("Template ID to update."),name:a.string().optional(),enabled:a.boolean().optional(),prompt:a.string().optional(),triggerCron:a.string().optional(),triggerEvent:a.string().optional(),roleId:a.string().optional()},Tr={templateId:a.string().describe("Template ID to delete.")},Sr={templateId:a.string().describe("Template ID to run immediately.")},kr={enabled:a.boolean().optional().describe("Filter by enabled status.")},Rr={eventType:a.string().describe("Event type that triggers this rule (e.g., 'task_complete')."),channelId:a.string().describe("Channel ID to deliver to."),format:a.string().optional().describe("Format template (e.g., 'summary', 'full'). Default: 'summary'."),matchCriteria:a.record(a.string(),a.unknown()).optional().describe("JSON match criteria for event fields."),enabled:a.boolean().optional().describe("Enable this rule immediately (default true).")},_r={ruleId:a.string().describe("Delivery rule ID to delete.")},Mr={roleId:a.string().optional().describe("Role ID to filter strategies by.")},dt=[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.",Ut,async e=>{let t=k(e.goalId);if(!t)return c({error:"Goal not found"});let r=Date.now(),n=t.targetValue>0?t.currentValue/t.targetValue:0;return c({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.",$t,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(),X(e.goalId,t)),c({success:!0})}),p("decompose_goal","Decompose a goal into actionable subtasks using LLM reasoning.",jt,async e=>{let t=I(),r=Math.min(e.maxSubtasks??5,10);try{let{query:o}=await import("@anthropic-ai/claude-agent-sdk"),i=`Decompose this goal into ${r} actionable subtasks.
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"}}};C();Ae();import{v4 as y}from"uuid";import{spawnSync as tt}from"child_process";import{createRequire as Rt}from"module";import{dirname as _t,join as rt}from"path";import{openSync as Mt,readFileSync as xt,unlinkSync as Lt}from"fs";var Pt=3e4,nt=12e4;function ot(){let t=Rt(import.meta.url).resolve("@anthropic-ai/claude-agent-sdk");return rt(_t(t),"cli.js")}function G(e,t){let r=ot(),n=t?.timeout??Pt;if(t?.json){let i=rt("/tmp",`adam-cli-stdout-${process.pid}-${Date.now()}.txt`),s=Mt(i,"w");try{let l=tt("node",[r,...e],{cwd:t.cwd,timeout:n,stdio:["ignore",s,"pipe"],encoding:"utf-8"});if(l.status!==0)throw new Error(l.stderr?.trim()||`CLI exited with status ${l.status}`);return xt(i,"utf-8")}finally{try{Lt(i)}catch{}}}let o=tt("node",[r,...e],{cwd:t?.cwd,timeout:n,encoding:"utf-8"});if(o.status!==0)throw new Error(o.stderr?.trim()||`CLI exited with status ${o.status}`);return o.stdout}function at(){let e=G(["plugin","list","--available","--json"],{json:!0});return JSON.parse(e)}function we(e,t="user",r){return G(["plugin","install",e,"--scope",t],{cwd:r,timeout:nt})}function ve(e,t,r){let n=["plugin","uninstall",e];return t&&n.push("--scope",t),G(n,{cwd:r,timeout:nt})}function it(e,t){return G(["plugin","enable",e])}function st(e,t){return G(["plugin","disable",e])}function Sn(){try{return!!ot()}catch{return!1}}C();import*as lt from"crypto";var V=w("api"),B=class{cancelTask(t){let r=h(t);r&&(E(t,{status:"cancelled",completedAt:Date.now()}),me.emit({type:"task_status_change",taskId:t,oldStatus:r.status,newStatus:"cancelled"}),V.debug({taskId:t,oldStatus:r.status},"Task cancelled"))}resolveApproval(t,r,n){return V.debug({approvalId:t,action:r,reason:n},"Approval resolved (no-op in Pure C)"),!0}resolvePlanApproval(t,r,n,o){let i=_e(t);if(!i)return V.warn({planId:t},"Plan not found or already resolved"),!1;let s=h(i.taskId);return s?(Me(t,r==="allow"?"approved":"denied",n),r==="allow"&&n==="permanent"&&xe({id:lt.randomUUID(),roleId:i.roleId,taskPattern:s.prompt.slice(0,100).replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),maxRiskLevel:i.plan.overallRisk,createdAt:Date.now(),createdByTaskId:s.id}),me.emit({type:"plan_approval_decision",taskId:s.id,planId:t,decision:r,approvalType:n,reason:o}),V.debug({planId:t,decision:r,approvalType:n},"Plan approval resolved"),!0):(V.warn({planId:t},"Task not found for plan"),!1)}};import{existsSync as At}from"fs";function ct(e,t){return t?{allowedTools:Et(t.allowedTools,e.allowedTools),disallowedTools:Ie(e.disallowedTools,t.disallowedTools),approvalRequired:Ie(e.approvalRequired,t.approvalRequired),maxBudgetUsd:t.maxBudgetUsd!==void 0&&t.maxBudgetUsd>0?Math.min(t.maxBudgetUsd,e.maxBudgetUsd):e.maxBudgetUsd,plugins:Ie(e.plugins??[],t.plugins)}:{allowedTools:e.allowedTools,disallowedTools:e.disallowedTools,approvalRequired:e.approvalRequired,maxBudgetUsd:e.maxBudgetUsd,plugins:e.plugins??[]}}function Et(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 Ie(e,t){return t===void 0?e:[...new Set([...e,...t])]}var ie=w("manager");function c(e){return{content:[{type:"text",text:JSON.stringify(e)}]}}async function R(e){let{listChannels:t}=await import("./channels-WZOYE4O4.js"),r=t(),{listSessions:n}=await import("./session-manager-Z6MIYRD3.js"),o=[...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 l=s.channelId,d=s.chatId;if(!l&&s.channelName){let u=r.find(m=>m.name.toLowerCase().includes(s.channelName.toLowerCase()));u&&(l=u.id)}if(l&&!d){let u=o.find(m=>m.source.type==="channel"&&m.source.channelId===l&&m.source.chatId);u?.source.chatId?d=u.source.chatId:d=r.find(g=>g.id===l)?.config?.userId}l&&d?i.push({type:"channel",channelId:l,chatId:d}):ie.warn({channelName:s.channelName,channelId:l,chatId:d},"Could not resolve channel notify target")}return i}async function Nt(e){let{listRoles:t}=await import("./roles-3UTFKSHI.js"),r=t(void 0,100,0);for(let n of r)if(n.name.toLowerCase().includes(e.toLowerCase()))return n.id}var Ut={goalId:a.string()},$t={goalId:a.string(),status:a.string().optional(),currentValue:a.number().optional(),budgetUsd:a.number().optional(),notes:a.string().optional()},jt={goalId:a.string(),goalDescription:a.string(),maxSubtasks:a.number().optional()},x=a.union([a.object({type:a.literal("session"),sessionId:a.string()}),a.object({type:a.literal("channel"),channelName:a.string()}),a.object({type:a.literal("channel"),channelId:a.string(),chatId:a.string().optional()})]),Ot={prompt:a.string(),roleId:a.string().describe("Role ID. Call list_roles first to find the best role for the task."),deliverTo:a.array(x).optional().describe("Where to deliver the task output (result full text). E.g., send result to a specific channel."),reportTo:a.array(x).optional().describe("Where to send status reports (completion summary). Defaults to the originating channel/session."),toolOverrides:a.object({allowedTools:a.array(a.string()).optional(),disallowedTools:a.array(a.string()).optional()}).optional()},Ft={taskId:a.string(),goalId:a.string().optional(),strategyId:a.string().optional()},Gt={roleId:a.string(),taskType:a.string(),name:a.string().optional()},Vt={status:a.string().optional(),limit:a.number().optional()},Bt={taskId:a.string(),roleId:a.string()},qt={taskId:a.string().optional(),status:a.string().optional(),limit:a.number().optional()},Wt={roleId:a.string(),allowedTools:a.array(a.string()).optional(),disallowedTools:a.array(a.string()).optional(),additionalDirectories:a.array(a.object({path:a.string(),mode:a.enum(["ro","rw"]).optional().describe("Read-only or read-write access. Default: rw. Enforced by OS sandbox."),inheritPlugins:a.boolean().optional(),inheritMcp:a.boolean().optional(),inheritPermissions:a.boolean().optional()})).optional(),allowedChannels:a.array(a.string()).optional(),inheritUserSettings:a.boolean().optional().describe("Enable/disable inheriting user-level settings (global plugins, MCP servers). Default: false (isolated).")},Jt={roleId:a.string().optional(),limit:a.number().optional()},Ht={name:a.string(),cagPrompt:a.string(),traits:a.array(a.string()).optional(),allowedTools:a.array(a.string()).optional(),disallowedTools:a.array(a.string()).optional(),additionalDirectories:a.array(a.object({path:a.string(),mode:a.enum(["ro","rw"]).optional().describe("Read-only or read-write access. Default: rw. Enforced by OS sandbox."),inheritPlugins:a.boolean().optional(),inheritMcp:a.boolean().optional(),inheritPermissions:a.boolean().optional()})).optional()},Yt={roleId:a.string(),reason:a.string().optional()},zt={name:a.string(),description:a.string().optional(),roleId:a.string().optional(),metric:a.string().optional(),targetValue:a.number().optional(),deadline:a.number().optional(),budgetUsd:a.number().optional(),deliverTo:a.array(x).optional().describe("Where to deliver goal completion notifications.")},Kt={name:a.string(),description:a.string().optional(),triggerType:a.enum(["cron","event"]),triggerCron:a.string().optional(),triggerEvent:a.string().optional(),prompt:a.string(),roleId:a.string().optional(),enabled:a.boolean().optional(),goalIds:a.array(a.string()).optional(),deliverTo:a.array(x).optional().describe("Where to deliver the task output (result full text)."),reportTo:a.array(x).optional().describe("Where to send status reports (completion summary).")},Qt={status:a.enum(["active","retired","probation"]).optional(),limit:a.number().optional()},Xt={enabled:a.boolean().optional()},Zt={},er={},tr={prompt:a.string().describe("The task prompt to execute after the delay"),delayMinutes:a.number().optional().describe("Minutes from now to execute (e.g., 30 for 'half an hour later')"),runAt:a.string().optional().describe("ISO 8601 timestamp to execute at (e.g., '2026-04-01T15:00:00+08:00')"),roleId:a.string().describe("Role ID to assign the task to. Call list_roles first."),deliverTo:a.array(x).optional().describe("Where to deliver the task output (result full text)."),reportTo:a.array(x).optional().describe("Where to send status reports (completion summary).")},rr={roleId:a.string().optional().describe("If provided, shows which plugins are installed in that role's workspace.")},nr={roleId:a.string().describe("Role ID to install the plugin under (project-scope)."),pluginId:a.string().describe("Plugin ID (e.g. 'github@anthropic'). Use list_available_plugins to discover available plugins.")},or={roleId:a.string().describe("Role ID to uninstall the plugin from."),pluginId:a.string().describe("Plugin ID to uninstall.")},ar={roleId:a.string().describe("Role ID to bind the MCP server to."),mcpName:a.string().describe("Name for this MCP server (e.g., 'github', 'filesystem')."),mcpConfig:a.record(a.string(),a.unknown()).describe("MCP server configuration object.")},ir={roleId:a.string().describe("Role ID to unbind the MCP server from."),mcpName:a.string().describe("Name of the MCP server to remove.")},sr={pluginId:a.string().describe("Plugin ID (e.g., 'github@anthropic').")},lr={pluginId:a.string().describe("Plugin ID (e.g., 'github@anthropic').")},cr={pluginId:a.string().describe("Plugin ID (e.g., 'github@anthropic').")},dr={pluginId:a.string().describe("Plugin ID (e.g., 'github@anthropic').")},ur={},pr={},mr={pluginId:a.string().describe("Plugin ID (e.g., 'github@anthropic').")},gr={roleId:a.string().describe("Role ID to associate scanned plugins with."),path:a.string().describe("Directory path to scan for .claude/settings.json.")},fr={taskId:a.string().describe("Task ID to cancel.")},hr={taskId:a.string().describe("Task ID to get logs for."),limit:a.number().optional().describe("Max log entries (default 20).")},br={roleId:a.string().describe("Role ID to delete.")},yr={},wr={updates:a.record(a.string(),a.unknown()).describe("Config key-value pairs to update. Example: { 'defaults.maxTurns': 50, 'logging.level': 'debug' }")},vr={roleId:a.string().describe("Role ID to list memories for."),limit:a.number().optional().describe("Max results (default 20).")},Ir={templateId:a.string().describe("Template ID to update."),name:a.string().optional(),enabled:a.boolean().optional(),prompt:a.string().optional(),triggerCron:a.string().optional(),triggerEvent:a.string().optional(),roleId:a.string().optional()},Tr={templateId:a.string().describe("Template ID to delete.")},Sr={templateId:a.string().describe("Template ID to run immediately.")},kr={enabled:a.boolean().optional().describe("Filter by enabled status.")},Rr={eventType:a.string().describe("Event type that triggers this rule (e.g., 'task_complete')."),channelId:a.string().describe("Channel ID to deliver to."),format:a.string().optional().describe("Format template (e.g., 'summary', 'full'). Default: 'summary'."),matchCriteria:a.record(a.string(),a.unknown()).optional().describe("JSON match criteria for event fields."),enabled:a.boolean().optional().describe("Enable this rule immediately (default true).")},_r={ruleId:a.string().describe("Delivery rule ID to delete.")},Mr={roleId:a.string().optional().describe("Role ID to filter strategies by.")},dt=[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.",Ut,async e=>{let t=k(e.goalId);if(!t)return c({error:"Goal not found"});let r=Date.now(),n=t.targetValue>0?t.currentValue/t.targetValue:0;return c({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.",$t,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(),X(e.goalId,t)),c({success:!0})}),p("decompose_goal","Decompose a goal into actionable subtasks using LLM reasoning.",jt,async e=>{let t=I(),r=Math.min(e.maxSubtasks??5,10);try{let{query:o}=await import("@anthropic-ai/claude-agent-sdk"),i=`Decompose this goal into ${r} actionable subtasks.
69
69
 
70
70
  Goal: ${e.goalDescription}
71
71