@crewx/sdk 0.9.0-rc.30 → 0.9.0-rc.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/esm/index.js CHANGED
@@ -1,58 +1,58 @@
1
- import*as Q from'path';import Q__default,{join,resolve,dirname,isAbsolute,basename}from'path';import {fileURLToPath}from'url';import*as Fo from'fs';import {existsSync,readFileSync,readdirSync,mkdirSync,appendFileSync,writeFileSync,statSync}from'fs';import {spawn,execFile,execFileSync}from'child_process';import {StringDecoder}from'string_decoder';import {ndJsonStream,ClientSideConnection}from'@agentclientprotocol/sdk';import {load}from'js-yaml';import {z}from'zod';import {createRequire}from'module';import*as _e from'handlebars';import _e__default from'handlebars';import {readFile,access,readdir}from'fs/promises';import {createHash,randomBytes}from'crypto';import {EventEmitter}from'events';import {AsyncLocalStorage}from'async_hooks';import {sql,eq,desc,and,isNull,lt as lt$1,or as or$1,like,asc,inArray,gte}from'drizzle-orm';import _a,{homedir}from'os';import {sqliteTable,text,integer,real,index,unique,uniqueIndex}from'drizzle-orm/sqlite-core';import {McpServer}from'@modelcontextprotocol/sdk/server/mcp.js';import {WebStandardStreamableHTTPServerTransport}from'@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js';import {performance}from'perf_hooks';var Er=Object.defineProperty;var Ds=Object.getOwnPropertyDescriptor;var Ls=Object.getOwnPropertyNames;var $s=Object.prototype.hasOwnProperty;var re=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var N=(n,e)=>()=>(n&&(e=n(n=0)),e);var Bt=(n,e)=>{for(var t in e)Er(n,t,{get:e[t],enumerable:true});},Us=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Ls(e))!$s.call(n,o)&&o!==t&&Er(n,o,{get:()=>e[o],enumerable:!(r=Ds(e,o))||r.enumerable});return n};var zn=n=>Us(Er({},"__esModule",{value:true}),n);var Kn,Hs,y,h,c=N(()=>{Kn=()=>fileURLToPath(import.meta.url),Hs=()=>Q__default.dirname(Kn()),y=Hs(),h=Kn();});function Jt(n){return typeof n!="string"?void 0:n.trim()||void 0}function Xt(n){return Jt(n)?.toLowerCase()??""}function ot(n){try{return statSync(n).isFile()}catch{return false}}function Xn(n,e){if(n.includes("/")||n.includes("\\")||Q__default.isAbsolute(n))return n;let r=(e.PATH??e.Path??process.env.PATH??process.env.Path??"").split(";").map(a=>a.trim()).filter(Boolean),o=Q__default.extname(n).length>0,s=e.PATHEXT??e.Pathext??process.env.PATHEXT??process.env.Pathext??".EXE;.CMD;.BAT;.COM",i=o?[""]:s.split(";").map(a=>a.trim()).filter(Boolean).map(a=>a.startsWith(".")?a:`.${a}`);for(let a of r)for(let d of i){let l=Xt(d),u=d.toUpperCase();for(let g of [d,l,u]){let f=Q__default.join(a,`${n}${g}`);if(ot(f))return f}}return n}function Zs(n){if(!ot(n))return null;try{let e=readFileSync(n,"utf8"),t=Q__default.dirname(n),r=[];for(let a of e.matchAll(/"([^"\r\n]*)"/g)){let u=(a[1]??"").match(/%~?dp0%?\s*[\\/]*(.*)$/i)?.[1]?.trim();if(!u)continue;let g=u.replace(/[\\/]+/g,Q__default.sep).replace(/^[\\/]+/,""),f=Q__default.resolve(t,g);ot(f)&&r.push(f);}let o=[],s=new Map;for(let a of e.matchAll(/SET\s+"(\w+)=%~?dp0%?[\\/]?([^"]+)"/gi)){let d=a[1].toUpperCase(),l=a[2].trim().replace(/[\\/]+/g,Q__default.sep).replace(/^[\\/]+/,"");s.set(d,Q__default.resolve(t,l));}for(let a of e.split(/\r?\n/))if(a.includes("%*"))for(let d of a.matchAll(/"%(\w+)%"/g)){let l=s.get(d[1].toUpperCase());l&&ot(l)&&o.push(l);}let i=a=>a.find(d=>{let l=Xt(Q__default.basename(d));return l!=="node.exe"&&l!=="node"})??null;return i(o)??i(r)}catch{return null}}function ei(n,e){if(typeof e=="string")return Jt(e)||null;if(!e||typeof e!="object")return null;if(n){let t=e[n],r=typeof t=="string"?Jt(t):void 0;if(r)return r}for(let t of Object.values(e)){let r=typeof t=="string"?Jt(t):void 0;if(r)return r}return null}function ti(n,e){if(!e)return null;let t=Q__default.dirname(n),r=[Q__default.resolve(t,"..",e),Q__default.resolve(t,"node_modules",e)];for(let o of r){let s=Q__default.join(o,"package.json");if(ot(s))try{let i=JSON.parse(readFileSync(s,"utf8")),a=ei(e,i.bin);if(!a)continue;let d=Q__default.resolve(o,a);if(ot(d))return d}catch{}}return null}function ri(n){let e=n.platform??process.platform,t=n.env??process.env,r=n.execPath??process.execPath;if(e!=="win32")return {command:n.command,leadingArgv:[],resolution:"direct"};let o=Xn(n.command,t),s=Xt(Q__default.extname(o));if(s===".js"||s===".cjs"||s===".mjs")return {command:r,leadingArgv:[o],resolution:"node-entrypoint",windowsHide:true};if(s===".cmd"||s===".bat"){let i=Zs(o)??ti(o,n.packageName);return i?Xt(Q__default.extname(i))===".exe"?{command:i,leadingArgv:[],resolution:"exe-entrypoint",windowsHide:true}:{command:r,leadingArgv:[i],resolution:"node-entrypoint",windowsHide:true}:{command:o,leadingArgv:[],resolution:"unresolved-wrapper"}}return {command:o,leadingArgv:[],resolution:"direct"}}function ni(n){if(n.candidate.resolution!=="unresolved-wrapper")return {command:n.candidate.command,leadingArgv:n.candidate.leadingArgv,resolution:n.candidate.resolution,windowsHide:n.candidate.windowsHide};if(n.allowShellFallback===true)return {command:n.candidate.command,leadingArgv:[],resolution:"shell-fallback",shell:true};throw new Error(`${Q__default.basename(n.candidate.command)} wrapper resolved, but no executable/Node entrypoint could be resolved without shell execution.`)}function gt(n){let e=ri(n);return ni({candidate:e,allowShellFallback:n.allowShellFallback})}function mt(n,e){return {command:n.command,argv:[...n.leadingArgv,...e],resolution:n.resolution,shell:n.shell,windowsHide:n.windowsHide}}var Yt=N(()=>{c();});function oi(n){if(n.type!=="usage"||!("input_tokens"in n))return null;let e=Number(n.input_tokens??0),t=Number(n.output_tokens??0),o="cache_read_input_tokens"in n?Number(n.cache_read_input_tokens):void 0,s="cached_input_tokens"in n?Number(n.cached_input_tokens):void 0,i=o!==void 0?o:s??0;return {inputTokens:o!==void 0?e+o:e,outputTokens:t,cachedInputTokens:i}}function si(n){let e=n.usage;if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(!("input_tokens"in t))return null;let r=Number(t.input_tokens??0),o=Number(t.output_tokens??0),i="cache_read_input_tokens"in t?Number(t.cache_read_input_tokens):void 0,a="cached_input_tokens"in t?Number(t.cached_input_tokens):void 0,d=i!==void 0?i:a??0;return {inputTokens:i!==void 0?r+i:r,outputTokens:o,cachedInputTokens:d}}function ii(n){if(n.type!=="step_finish")return null;let t=n.part?.tokens;if(!t)return null;let r=Number(t.input??0),o=Number(t.output??0),s=t.cache,i=s?Number(s.read??0):0;return {inputTokens:r+i,outputTokens:o,cachedInputTokens:i}}function Ee(n){if(!n||!n.trim())return;let e=null,t=null;for(let r of n.split(`
2
- `))if(r.trim())try{let o=JSON.parse(r),s=ii(o);if(s){t||(t={inputTokens:0,outputTokens:0,cachedInputTokens:0}),t.inputTokens+=s.inputTokens,t.outputTokens+=s.outputTokens,t.cachedInputTokens+=s.cachedInputTokens;continue}let i=oi(o)??si(o);i&&(e=i);}catch{}return t||(e??void 0)}var st=N(()=>{c();});var T,We,Be,ft=N(()=>{c();T=class extends Error{constructor(t,r,o){super(t);this.providerStr=r;this.name="ProviderError",this.code=o?.code??"UNKNOWN",this.kind=o?.kind??(this.code==="UNKNOWN"?"transient":void 0),this.retryAfterMs=o?.retryAfterMs;}providerStr;code;kind;retryAfterMs},We=class extends T{constructor(e,t){super(e,t,{code:"TIMEOUT_IDLE",kind:"permanent"}),this.name="IdleTimeoutError";}},Be=class extends T{constructor(e,t){super(e,t,{code:"TIMEOUT_TOTAL",kind:"permanent"}),this.name="TotalTimeoutError";}};});var ze,Cr=N(()=>{c();ft();ze=class extends T{name="RateLimitError";constructor(e,t="cli/claude"){super(e,t,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function de(n){return /crewx\s+(x|execute)\s/.test(n)}function le(n,e){let t=e.match(/@(\S+)/);return {timestamp:n,type:"agent_call",targetAgent:t?.[1]?.replace(/["']/g,""),toolInput:e}}var it=N(()=>{c();});function ce(n){if(typeof n=="string")return n;if(!n||typeof n!="object")return JSON.stringify(n??{});let e=n;return typeof e.command=="string"?e.command:typeof e.file_path=="string"?e.file_path:typeof e.filePath=="string"?e.filePath:typeof e.path=="string"?e.path:typeof e.query=="string"?e.query:typeof e.pattern=="string"?e.pattern:typeof e.url=="string"?e.url:typeof e.prompt=="string"?e.prompt.length>200?e.prompt.slice(0,200)+"\u2026":e.prompt:typeof e.description=="string"?e.description:JSON.stringify(e)}var at=N(()=>{c();});function Qt(n){if(!n)return {};let e=n.match(/^(.+?)\[([^\]]+)\]$/);if(e){let t=e[2].toLowerCase();return ai.has(t)?{model:e[1],effort:e[2]}:{model:n}}return {model:n}}function Yn(n){switch(n){case "agent-full-access":case "yolo":return ["--dangerously-bypass-approvals-and-sandbox"];case "read-only":case "plan":return ["--sandbox","read-only"];case "agent":return ["--sandbox","workspace-write"];default:return []}}function Qn(n){switch(n){case "agent-full-access":case "yolo":return ["--dangerously-bypass-approvals-and-sandbox"];case "read-only":case "plan":return ["-c","sandbox_mode=read-only"];case "agent":return ["-c","sandbox_mode=workspace-write"];default:return []}}function Zn(n){return n?["-c",`model_reasoning_effort=${n}`]:[]}function eo(n){if(!n)return [];let e=new Set(["acceptEdits","bypassPermissions","default","delegate","dontAsk","plan"]),t=n==="auto"?"default":n;return e.has(t)?["--permission-mode",t]:[]}function to(n){return n?new Set(["low","medium","high","xhigh","max"]).has(n)?["--effort",n]:[]:[]}var ai,Pr=N(()=>{c();ai=new Set(["minimal","low","medium","high","xhigh","max"]);});var Tr,ro=N(()=>{c();Tr={claude:{models:[{id:"claude-fable-5",name:"Claude Fable 5"},{id:"claude-sonnet-5",name:"Claude Sonnet 5"},{id:"claude-opus-4-8[1m]",name:"Claude Opus 4.8 (Extended)"},{id:"claude-opus-4-8",name:"Claude Opus 4.8"},{id:"claude-opus-4-7[1m]",name:"Claude Opus 4.7 (Extended)"},{id:"claude-opus-4-7",name:"Claude Opus 4.7"},{id:"claude-opus-4-6[1m]",name:"Claude Opus 4.6 (Extended)"},{id:"claude-opus-4-6",name:"Claude Opus 4.6"},{id:"claude-sonnet-4-6[1m]",name:"Claude Sonnet 4.6 (Extended)"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5"}],modes:[{id:"default",name:"Default"},{id:"acceptEdits",name:"Accept Edits"},{id:"plan",name:"Plan"},{id:"auto",name:"Auto"},{id:"dontAsk",name:"Don't Ask"},{id:"bypassPermissions",name:"Bypass Permissions"}],effort:["low","medium","high"],modelOverrides:{"claude-fable-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-sonnet-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-8[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-8":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-7[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-7":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-opus-4-6":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-haiku-4-5":{effort:[]}}},codex:{models:[{id:"gpt-5.6-sol",name:"GPT-5.6 Sol"},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra"},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna"},{id:"gpt-5.5",name:"GPT-5.5"},{id:"gpt-5.4",name:"GPT-5.4"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini"},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex"},{id:"gpt-5.3-codex-spark",name:"GPT-5.3 Codex Spark"}],modes:[{id:"agent",name:"Agent"},{id:"read-only",name:"Read Only"},{id:"plan",name:"Plan"},{id:"agent-full-access",name:"Agent Full Access"},{id:"yolo",name:"YOLO"}],effort:["minimal","low","medium","high"],modelOverrides:{"gpt-5.6-sol":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"xhigh"},"gpt-5.6-terra":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.6-luna":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.5":{effort:["minimal","low","medium","high","xhigh"],defaultEffort:"high"}}},copilot:{models:[{id:"auto",name:"Auto"},{id:"claude-sonnet-5",name:"Claude Sonnet 5"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"gpt-5.5",name:"GPT-5.5"},{id:"gpt-5.4",name:"GPT-5.4"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro"}],modes:[{id:"interactive",name:"Interactive"},{id:"plan",name:"Plan"},{id:"autopilot",name:"Autopilot"}],effort:["none","low","medium","high","xhigh","max"],modelOverrides:{}},antigravity:{models:[{id:"Gemini 3.5 Flash (Medium)",name:"Gemini 3.5 Flash (Medium)"},{id:"Gemini 3.5 Flash (High)",name:"Gemini 3.5 Flash (High)"},{id:"Gemini 3.5 Flash (Low)",name:"Gemini 3.5 Flash (Low)"},{id:"Gemini 3.1 Pro (Low)",name:"Gemini 3.1 Pro (Low)"},{id:"Gemini 3.1 Pro (High)",name:"Gemini 3.1 Pro (High)"},{id:"Claude Sonnet 4.6 (Thinking)",name:"Claude Sonnet 4.6 (Thinking)"},{id:"Claude Opus 4.6 (Thinking)",name:"Claude Opus 4.6 (Thinking)"},{id:"GPT-OSS 120B (Medium)",name:"GPT-OSS 120B (Medium)"}],modes:[],effort:[],modelOverrides:{}}},Object.fromEntries(Object.entries(Tr).map(([n,e])=>[n,e.models]));});function no(){return {models:[],modes:[],effort:[],modelOverrides:{}}}function di(n){return Array.isArray(n)?{models:n,modes:[],effort:[],modelOverrides:{}}:n?{models:n.models??[],modes:n.modes??[],effort:n.effort??[],modelOverrides:n.modelOverrides??{}}:no()}function br(n){Sr=Object.fromEntries(Object.entries(n).map(([e,t])=>[e,di(t)]));}function li(){Sr={};}function Ke(n){return dt(n).models}function dt(n){return Sr[n]??Tr[n]??no()}function yt(n){return dt(n).modes}function ht(n,e){let t=dt(n);return e?t.modelOverrides[e]?.effort??t.effort:t.effort}function oo(n){return dt(n).modelOverrides}function wt(){return Ke("claude")}function Ir(){return Ke("codex")}function Or(){return Ke("copilot")}function Mr(){return Ke("antigravity")}function vt(n,e){let t=new Map;for(let r of [...n,...e]){let o=t.get(r.id);(!o||!o.name&&r.name)&&t.set(r.id,r);}return Array.from(t.values())}var Sr,he=N(()=>{c();ro();Sr={};});function ui(n){let t=n.message?.content;return Array.isArray(t)?t.map(r=>typeof r.text=="string"?r.text.trim():"").filter(Boolean).join(`
1
+ import*as W from'path';import W__default,{join,resolve,dirname,isAbsolute,basename}from'path';import {fileURLToPath}from'url';import*as Bo from'fs';import {existsSync,readFileSync,readdirSync,mkdirSync,appendFileSync,writeFileSync,statSync}from'fs';import {spawn,execFile,execFileSync}from'child_process';import {StringDecoder}from'string_decoder';import {ndJsonStream,ClientSideConnection}from'@agentclientprotocol/sdk';import {load}from'js-yaml';import {z}from'zod';import {createRequire}from'module';import*as xe from'handlebars';import xe__default from'handlebars';import {readFile,access,readdir}from'fs/promises';import {createHash,randomBytes}from'crypto';import {EventEmitter}from'events';import {AsyncLocalStorage}from'async_hooks';import {sql,eq,desc,and,isNull,lt as lt$1,or as or$1,like,asc,inArray,gte}from'drizzle-orm';import Ta,{homedir}from'os';import {sqliteTable,text,integer,real,index,unique,uniqueIndex,primaryKey}from'drizzle-orm/sqlite-core';import {McpServer}from'@modelcontextprotocol/sdk/server/mcp.js';import {WebStandardStreamableHTTPServerTransport}from'@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js';import {performance}from'perf_hooks';var Cr=Object.defineProperty;var js=Object.getOwnPropertyDescriptor;var Fs=Object.getOwnPropertyNames;var Hs=Object.prototype.hasOwnProperty;var re=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var M=(n,e)=>()=>(n&&(e=n(n=0)),e);var Vt=(n,e)=>{for(var t in e)Cr(n,t,{get:e[t],enumerable:true});},qs=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Fs(e))!Hs.call(n,o)&&o!==t&&Cr(n,o,{get:()=>e[o],enumerable:!(r=js(e,o))||r.enumerable});return n};var Gn=n=>qs(Cr({},"__esModule",{value:true}),n);var Jn,zs,y,h,c=M(()=>{Jn=()=>fileURLToPath(import.meta.url),zs=()=>W__default.dirname(Jn()),y=zs(),h=Jn();});function Qt(n){return typeof n!="string"?void 0:n.trim()||void 0}function Zt(n){return Qt(n)?.toLowerCase()??""}function dt(n){try{return statSync(n).isFile()}catch{return false}}function oi(n,e){if(n===e)return true;let t=W__default.relative(n,e);return t!==""&&!t.startsWith("..")&&!W__default.isAbsolute(t)}function si(n,e){if(W__default.basename(n)!==".bin")return false;let t=W__default.dirname(n);if(W__default.basename(t)!=="node_modules")return false;let r=W__default.dirname(t);return oi(r,e)}function Tr(n,e={}){if(n.includes("/")||n.includes("\\")||W__default.isAbsolute(n))return n;let t=e.platform??process.platform,r=e.env??process.env,o=W__default.resolve(e.cwd??process.cwd()),s=(e.resolution??"global_first")==="global_first",i=r.PATH??r.Path??process.env.PATH??process.env.Path??"",a=t==="win32"?";":":",d=i.split(a).map(f=>f.trim()).filter(Boolean),l=W__default.extname(n).length>0,u=r.PATHEXT??r.Pathext??process.env.PATHEXT??process.env.Pathext??".EXE;.CMD;.BAT;.COM",g=t==="win32"?l?[""]:u.split(";").map(f=>f.trim()).filter(Boolean).map(f=>f.startsWith(".")?f:`.${f}`):[""];for(let f of d){let m=W__default.resolve(o,f);if(!(s&&si(m,o)))for(let w of g){let v=Zt(w),E=w.toUpperCase();for(let _ of [w,v,E]){let x=W__default.join(m,`${n}${_}`);if(dt(x))return x}}}return n}function ii(n,e){return Tr(n,{env:e,platform:"win32",resolution:"local_first"})}function ai(n){if(!dt(n))return null;try{let e=readFileSync(n,"utf8"),t=W__default.dirname(n),r=[];for(let a of e.matchAll(/"([^"\r\n]*)"/g)){let u=(a[1]??"").match(/%~?dp0%?\s*[\\/]*(.*)$/i)?.[1]?.trim();if(!u)continue;let g=u.replace(/[\\/]+/g,W__default.sep).replace(/^[\\/]+/,""),f=W__default.resolve(t,g);dt(f)&&r.push(f);}let o=[],s=new Map;for(let a of e.matchAll(/SET\s+"(\w+)=%~?dp0%?[\\/]?([^"]+)"/gi)){let d=a[1].toUpperCase(),l=a[2].trim().replace(/[\\/]+/g,W__default.sep).replace(/^[\\/]+/,"");s.set(d,W__default.resolve(t,l));}for(let a of e.split(/\r?\n/))if(a.includes("%*"))for(let d of a.matchAll(/"%(\w+)%"/g)){let l=s.get(d[1].toUpperCase());l&&dt(l)&&o.push(l);}let i=a=>a.find(d=>{let l=Zt(W__default.basename(d));return l!=="node.exe"&&l!=="node"})??null;return i(o)??i(r)}catch{return null}}function di(n,e){if(typeof e=="string")return Qt(e)||null;if(!e||typeof e!="object")return null;if(n){let t=e[n],r=typeof t=="string"?Qt(t):void 0;if(r)return r}for(let t of Object.values(e)){let r=typeof t=="string"?Qt(t):void 0;if(r)return r}return null}function li(n,e){if(!e)return null;let t=W__default.dirname(n),r=[W__default.resolve(t,"..",e),W__default.resolve(t,"node_modules",e)];for(let o of r){let s=W__default.join(o,"package.json");if(dt(s))try{let i=JSON.parse(readFileSync(s,"utf8")),a=di(e,i.bin);if(!a)continue;let d=W__default.resolve(o,a);if(dt(d))return d}catch{}}return null}function ci(n){let e=n.platform??process.platform,t=n.env??process.env,r=n.execPath??process.execPath,o=n.cwd,s=n.resolution;if(e!=="win32")return {command:Tr(n.command,{cwd:o,env:t,platform:e,resolution:s}),leadingArgv:[],resolution:"direct"};let i=Tr(n.command,{cwd:o,env:t,platform:e,resolution:s}),a=Zt(W__default.extname(i));if(a===".js"||a===".cjs"||a===".mjs")return {command:r,leadingArgv:[i],resolution:"node-entrypoint",windowsHide:true};if(a===".cmd"||a===".bat"){let d=ai(i)??li(i,n.packageName);return d?Zt(W__default.extname(d))===".exe"?{command:d,leadingArgv:[],resolution:"exe-entrypoint",windowsHide:true}:{command:r,leadingArgv:[d],resolution:"node-entrypoint",windowsHide:true}:{command:i,leadingArgv:[],resolution:"unresolved-wrapper"}}return {command:i,leadingArgv:[],resolution:"direct"}}function ui(n){if(n.candidate.resolution!=="unresolved-wrapper")return {command:n.candidate.command,leadingArgv:n.candidate.leadingArgv,resolution:n.candidate.resolution,windowsHide:n.candidate.windowsHide};if(n.allowShellFallback===true)return {command:n.candidate.command,leadingArgv:[],resolution:"shell-fallback",shell:true};throw new Error(`${W__default.basename(n.candidate.command)} wrapper resolved, but no executable/Node entrypoint could be resolved without shell execution.`)}function ze(n){let e=ci(n);return ui({candidate:e,allowShellFallback:n.allowShellFallback})}function Ke(n,e){return {command:n.command,argv:[...n.leadingArgv,...e],resolution:n.resolution,shell:n.shell,windowsHide:n.windowsHide}}var ht=M(()=>{c();});function pi(n){if(n.type!=="usage"||!("input_tokens"in n))return null;let e=Number(n.input_tokens??0),t=Number(n.output_tokens??0),o="cache_read_input_tokens"in n?Number(n.cache_read_input_tokens):void 0,s="cached_input_tokens"in n?Number(n.cached_input_tokens):void 0,i=o!==void 0?o:s??0;return {inputTokens:o!==void 0?e+o:e,outputTokens:t,cachedInputTokens:i}}function gi(n){let e=n.usage;if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(!("input_tokens"in t))return null;let r=Number(t.input_tokens??0),o=Number(t.output_tokens??0),i="cache_read_input_tokens"in t?Number(t.cache_read_input_tokens):void 0,a="cached_input_tokens"in t?Number(t.cached_input_tokens):void 0,d=i!==void 0?i:a??0;return {inputTokens:i!==void 0?r+i:r,outputTokens:o,cachedInputTokens:d}}function mi(n){if(n.type!=="step_finish")return null;let t=n.part?.tokens;if(!t)return null;let r=Number(t.input??0),o=Number(t.output??0),s=t.cache,i=s?Number(s.read??0):0;return {inputTokens:r+i,outputTokens:o,cachedInputTokens:i}}function Ce(n){if(!n||!n.trim())return;let e=null,t=null;for(let r of n.split(`
2
+ `))if(r.trim())try{let o=JSON.parse(r),s=mi(o);if(s){t||(t={inputTokens:0,outputTokens:0,cachedInputTokens:0}),t.inputTokens+=s.inputTokens,t.outputTokens+=s.outputTokens,t.cachedInputTokens+=s.cachedInputTokens;continue}let i=pi(o)??gi(o);i&&(e=i);}catch{}return t||(e??void 0)}var lt=M(()=>{c();});var T,Ve,Ge,wt=M(()=>{c();T=class extends Error{constructor(t,r,o){super(t);this.providerStr=r;this.name="ProviderError",this.code=o?.code??"UNKNOWN",this.kind=o?.kind??(this.code==="UNKNOWN"?"transient":void 0),this.retryAfterMs=o?.retryAfterMs;}providerStr;code;kind;retryAfterMs},Ve=class extends T{constructor(e,t){super(e,t,{code:"TIMEOUT_IDLE",kind:"permanent"}),this.name="IdleTimeoutError";}},Ge=class extends T{constructor(e,t){super(e,t,{code:"TIMEOUT_TOTAL",kind:"permanent"}),this.name="TotalTimeoutError";}};});var Je,Sr=M(()=>{c();wt();Je=class extends T{name="RateLimitError";constructor(e,t="cli/claude"){super(e,t,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function le(n){return /crewx\s+(x|execute)\s/.test(n)}function ce(n,e){let t=e.match(/@(\S+)/);return {timestamp:n,type:"agent_call",targetAgent:t?.[1]?.replace(/["']/g,""),toolInput:e}}var ct=M(()=>{c();});function ue(n){if(typeof n=="string")return n;if(!n||typeof n!="object")return JSON.stringify(n??{});let e=n;return typeof e.command=="string"?e.command:typeof e.file_path=="string"?e.file_path:typeof e.filePath=="string"?e.filePath:typeof e.path=="string"?e.path:typeof e.query=="string"?e.query:typeof e.pattern=="string"?e.pattern:typeof e.url=="string"?e.url:typeof e.prompt=="string"?e.prompt.length>200?e.prompt.slice(0,200)+"\u2026":e.prompt:typeof e.description=="string"?e.description:JSON.stringify(e)}var ut=M(()=>{c();});function er(n){if(!n)return {};let e=n.match(/^(.+?)\[([^\]]+)\]$/);if(e){let t=e[2].toLowerCase();return fi.has(t)?{model:e[1],effort:e[2]}:{model:n}}return {model:n}}function Zn(n){switch(n){case "agent-full-access":case "yolo":return ["--dangerously-bypass-approvals-and-sandbox"];case "read-only":case "plan":return ["--sandbox","read-only"];case "agent":return ["--sandbox","workspace-write"];default:return []}}function eo(n){switch(n){case "agent-full-access":case "yolo":return ["--dangerously-bypass-approvals-and-sandbox"];case "read-only":case "plan":return ["-c","sandbox_mode=read-only"];case "agent":return ["-c","sandbox_mode=workspace-write"];default:return []}}function to(n){return n?["-c",`model_reasoning_effort=${n}`]:[]}function ro(n){if(!n)return [];let e=new Set(["acceptEdits","bypassPermissions","default","delegate","dontAsk","plan"]),t=n==="auto"?"default":n;return e.has(t)?["--permission-mode",t]:[]}function no(n){return n?new Set(["low","medium","high","xhigh","max"]).has(n)?["--effort",n]:[]:[]}var fi,br=M(()=>{c();fi=new Set(["minimal","low","medium","high","xhigh","max"]);});var Ir,oo=M(()=>{c();Ir={claude:{models:[{id:"claude-fable-5",name:"Claude Fable 5"},{id:"claude-sonnet-5",name:"Claude Sonnet 5"},{id:"claude-opus-4-8[1m]",name:"Claude Opus 4.8 (Extended)"},{id:"claude-opus-4-8",name:"Claude Opus 4.8"},{id:"claude-opus-4-7[1m]",name:"Claude Opus 4.7 (Extended)"},{id:"claude-opus-4-7",name:"Claude Opus 4.7"},{id:"claude-opus-4-6[1m]",name:"Claude Opus 4.6 (Extended)"},{id:"claude-opus-4-6",name:"Claude Opus 4.6"},{id:"claude-sonnet-4-6[1m]",name:"Claude Sonnet 4.6 (Extended)"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5"}],modes:[{id:"default",name:"Default"},{id:"acceptEdits",name:"Accept Edits"},{id:"plan",name:"Plan"},{id:"auto",name:"Auto"},{id:"dontAsk",name:"Don't Ask"},{id:"bypassPermissions",name:"Bypass Permissions"}],effort:["low","medium","high"],modelOverrides:{"claude-fable-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-sonnet-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-8[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-8":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-7[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-7":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-opus-4-6":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-haiku-4-5":{effort:[]}}},codex:{models:[{id:"gpt-5.6-sol",name:"GPT-5.6 Sol"},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra"},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna"},{id:"gpt-5.5",name:"GPT-5.5"},{id:"gpt-5.4",name:"GPT-5.4"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini"},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex"},{id:"gpt-5.3-codex-spark",name:"GPT-5.3 Codex Spark"}],modes:[{id:"agent",name:"Agent"},{id:"read-only",name:"Read Only"},{id:"plan",name:"Plan"},{id:"agent-full-access",name:"Agent Full Access"},{id:"yolo",name:"YOLO"}],effort:["minimal","low","medium","high"],modelOverrides:{"gpt-5.6-sol":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"xhigh"},"gpt-5.6-terra":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.6-luna":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.5":{effort:["minimal","low","medium","high","xhigh"],defaultEffort:"high"}}},copilot:{models:[{id:"auto",name:"Auto"},{id:"claude-sonnet-5",name:"Claude Sonnet 5"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"gpt-5.5",name:"GPT-5.5"},{id:"gpt-5.4",name:"GPT-5.4"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro"}],modes:[{id:"interactive",name:"Interactive"},{id:"plan",name:"Plan"},{id:"autopilot",name:"Autopilot"}],effort:["none","low","medium","high","xhigh","max"],modelOverrides:{}},antigravity:{models:[{id:"Gemini 3.5 Flash (Medium)",name:"Gemini 3.5 Flash (Medium)"},{id:"Gemini 3.5 Flash (High)",name:"Gemini 3.5 Flash (High)"},{id:"Gemini 3.5 Flash (Low)",name:"Gemini 3.5 Flash (Low)"},{id:"Gemini 3.1 Pro (Low)",name:"Gemini 3.1 Pro (Low)"},{id:"Gemini 3.1 Pro (High)",name:"Gemini 3.1 Pro (High)"},{id:"Claude Sonnet 4.6 (Thinking)",name:"Claude Sonnet 4.6 (Thinking)"},{id:"Claude Opus 4.6 (Thinking)",name:"Claude Opus 4.6 (Thinking)"},{id:"GPT-OSS 120B (Medium)",name:"GPT-OSS 120B (Medium)"}],modes:[],effort:[],modelOverrides:{}}},Object.fromEntries(Object.entries(Ir).map(([n,e])=>[n,e.models]));});function so(){return {models:[],modes:[],effort:[],modelOverrides:{}}}function yi(n){return Array.isArray(n)?{models:n,modes:[],effort:[],modelOverrides:{}}:n?{models:n.models??[],modes:n.modes??[],effort:n.effort??[],modelOverrides:n.modelOverrides??{}}:so()}function Mr(n){Or=Object.fromEntries(Object.entries(n).map(([e,t])=>[e,yi(t)]));}function hi(){Or={};}function Xe(n){return pt(n).models}function pt(n){return Or[n]??Ir[n]??so()}function vt(n){return pt(n).modes}function _t(n,e){let t=pt(n);return e?t.modelOverrides[e]?.effort??t.effort:t.effort}function io(n){return pt(n).modelOverrides}function xt(){return Xe("claude")}function Nr(){return Xe("codex")}function Dr(){return Xe("copilot")}function Lr(){return Xe("antigravity")}function kt(n,e){let t=new Map;for(let r of [...n,...e]){let o=t.get(r.id);(!o||!o.name&&r.name)&&t.set(r.id,r);}return Array.from(t.values())}var Or,we=M(()=>{c();oo();Or={};});function vi(n){let t=n.message?.content;return Array.isArray(t)?t.map(r=>typeof r.text=="string"?r.text.trim():"").filter(Boolean).join(`
3
3
 
4
- `):""}function pi(n){let e=n.toLowerCase();return e.includes("out of extra usage")||e.includes("rate limit")||e.includes("quota")}function gi(n,e){let t=e.type;if(t==="text"){let r=String(e.text||"");return r?{timestamp:n,type:"text",content:r}:null}if(t==="thinking"){let r=String(e.thinking||"");return {timestamp:n,type:"thinking",content:r||"(thinking)"}}if(t==="tool_use"){let r=String(e.name||""),o=e.id,s=e.input,i=ce(s);return r==="Bash"&&de(i)?le(n,i):{timestamp:n,type:"tool_use",toolUseId:o,toolName:r,toolInput:i}}if(t==="tool_result"){let r=!!e.is_error,o=e.tool_use_id,s=e.output??e.content??"",i;return typeof s=="string"?i=s:Array.isArray(s)?i=s.filter(a=>a.type==="text"&&typeof a.text=="string").map(a=>a.text).join(`
5
- `):i=JSON.stringify(s),{timestamp:n,type:"tool_result",toolUseId:o,resultPreview:i,isError:r}}return null}var ci,Zt,Nr=N(()=>{c();Cr();it();at();Pr();he();ci=new Set(["tool_progress"]),Zt={command:"claude",meta:{displayName:"Claude",models:wt(),capabilities:{resume:true}},buildArgs(n,e,t){let{model:r,effort:o}=Qt(e.model),s=e.effort??o,i=eo(e.mode),a=to(s),d=r?["--model",r]:[],l=e.resumeSessionId?["--resume",e.resumeSessionId]:[];if(e.additionalArgs!==void 0){let g=[...e.additionalArgs];return g.indexOf("-p")!==-1?{args:["--output-format","stream-json","--verbose",...l,...i,...a,...d,...g],stdinMessage:n}:{args:["--output-format","stream-json","--verbose",...l,...i,...a,...d,...g],stdinMessage:n}}return {args:["-p","--output-format","stream-json","--verbose",...l,...i,...a,...d],stdinMessage:n}},extractText(n){let e=n.split(`
6
- `).filter(o=>o.trim()),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant"&&Array.isArray(s.message?.content))for(let i of s.message.content)i.type==="text"&&typeof i.text=="string"&&i.text.trim()&&t.push(i.text.trim());s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},extractFailure(n){try{let e=JSON.parse(n);if(e.type==="rate_limit_event"){let t=e.rate_limit_info??{};if(t.status==="rejected")return new ze(`Claude rate limit: ${t.rateLimitType??"unknown"} (status: ${t.status})`)}if(e.error==="rate_limit"){let t=ui(e);return new ze(t?`Claude rate limit: ${t}`:"Claude rate limit")}if(e.type==="result"&&e.is_error===!0){let t=typeof e.result=="string"?e.result:"";if(pi(t))return new ze(`Claude rate limit: ${t}`)}}catch{}return null},parseResultMeta(n){let e=n.split(`
7
- `);for(let t of e)if(t.trim())try{let r=JSON.parse(t);if(r.type==="result"){let o=r.usage,s=o?{inputTokens:Number(o.input_tokens??0)+Number(o.cache_read_input_tokens??0),outputTokens:Number(o.output_tokens??0),cachedInputTokens:Number(o.cache_read_input_tokens??0),costUsd:Number(r.total_cost_usd??0)}:null,i=r.modelUsage,a=i?Object.keys(i)[0]??null:null;return {usage:s,model:a}}}catch{}return {usage:null,model:null}},parseEvent(n,e){let t;try{t=JSON.parse(n);}catch{return []}let r=t.type;if(!r)return [];if(r!=="assistant"&&r!=="user")return [];let s=t.message?.content;if(!Array.isArray(s))return [];let i=e??new Date().toISOString(),a=[];for(let d of s){let l=gi(i,d);l&&a.push(l);}return a},suppressOutputLine(n){let e=n.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?ci.has(r):!1}catch{return false}}};});var mi,fi,er,Dr=N(()=>{c();st();it();at();he();mi=new Set(["interactive","plan","autopilot"]),fi=new Set(["none","low","medium","high","xhigh","max"]),er={command:"copilot",meta:{displayName:"Copilot",models:Or()},buildArgs(n,e,t){let r=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&r.push("--model",e.model),e.mode&&mi.has(e.mode)&&r.push("--mode",e.mode),e.effort&&fi.has(e.effort)&&r.push("--effort",e.effort),{args:r,stdinMessage:n}},extractText(n){let e=n.split(`
8
- `).filter(o=>o.trim()),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant.message"&&typeof s.data?.content=="string"){let i=s.data.content;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=Ee(n);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(n,e){let t;try{t=JSON.parse(n);}catch{return []}let r=t.type;if(!r)return [];if(!r.startsWith("tool.execution")&&!r.startsWith("assistant.")&&r!=="user.message")return [];let o=t.data;if(!o)return [];let s=e??new Date().toISOString(),i=o.toolCallId;if(r==="tool.execution_start"){let a=String(o.toolName||""),d=o.arguments,l=ce(d);return (a==="bash"||a==="Bash")&&de(l)?[le(s,l)]:[{timestamp:s,type:"tool_use",toolName:a,toolInput:l,...i&&{toolUseId:i}}]}if(r==="tool.execution_complete"){let a=o.error;if(a)return [{timestamp:s,type:"tool_result",isError:true,resultPreview:String(a.message||""),...i&&{toolUseId:i}}];let d=o.result,l=String(d?.content||"");return [{timestamp:s,type:"tool_result",resultPreview:l,isError:false,...i&&{toolUseId:i}}]}if(r==="assistant.message"){let a=String(o.content||"");return a?[{timestamp:s,type:"text",content:a}]:[]}return []}};});function hi(n){let e=[],t=0,r=false,o=false,s=0;for(let a=0;a<n.length;a++){let d=n[a];if(o){o=false;continue}if(d==="\\"&&r){o=true;continue}if(d==='"'){r=!r;continue}if(!r){if(d==="{")t++;else if(d==="}"&&(t--,t===0)){let l=n.slice(s,a+1).trim();l&&e.push(l),s=a+1;}}}let i=n.slice(s).trim();return i&&e.push(i),e}function wi(n){return n[0]==="exec"?n.slice(1):n}function vi(n,e){let t=e.type;if(t==="command_execution"){let r=String(e.command||"");return de(r)?[le(n,r)]:[{timestamp:n,type:"tool_use",toolName:"Bash",toolInput:r}]}return t==="web_search"?[]:t==="file_change"?[]:[]}function _i(n,e){let t=e.type;if(t==="message"||t==="text"){let r=e.content;if(Array.isArray(r))for(let o of r){let s=xi(n,o);if(s)return s}if(typeof e.text=="string")return {timestamp:n,type:"text",content:e.text}}if(t==="agent_message"&&typeof e.text=="string")return {timestamp:n,type:"text",content:e.text};if(t==="reasoning")return {timestamp:n,type:"text",content:String(e.text||"")};if(t==="command_execution"){let r=String(e.aggregated_output||e.output||""),o=!!e.is_error;return {timestamp:n,type:"tool_result",resultPreview:r,isError:o}}if(t==="tool_use"){let r=String(e.name||e.tool_name||""),o=e.input,s=ce(o);return r==="Bash"&&de(s)?le(n,s):{timestamp:n,type:"tool_use",toolName:r,toolInput:s}}if(t==="tool_result"){let r=!!e.is_error,o=String(e.output||e.content||"");return {timestamp:n,type:"tool_result",resultPreview:o,isError:r}}if(t==="web_search"){let r=e.action,o;if(r?.type==="search"){let s=r.queries;o=String(r.query||"")||(s?.length?s.join(", "):"")||String(e.query||"");}else o=e.query?"open: "+String(e.query):"";return o?{timestamp:n,type:"tool_use",toolName:"WebSearch",toolInput:o}:null}if(t==="file_change"){let r=e.changes;if(!Array.isArray(r)||r.length===0)return null;let o=r.map(i=>String(i.path||"")).filter(Boolean);if(o.length===0)return null;let s=o.length===1?o[0]:`${o.slice(0,2).join(", ")}${o.length>2?` (+${o.length-2})`:""}`;return {timestamp:n,type:"tool_use",toolName:"Edit",toolInput:s}}return null}function xi(n,e){let t=e.type;if(t==="text")return {timestamp:n,type:"text",content:String(e.text||"")};if(t==="tool_use"){let r=String(e.name||""),o=e.input,s=ce(o);return r==="Bash"&&de(s)?le(n,s):{timestamp:n,type:"tool_use",toolName:r,toolInput:s}}return null}var yi,tr,Lr=N(()=>{c();st();it();at();Pr();he();yi=new Set(["turn.started","turn.completed","item.updated"]);tr={command:"codex",meta:{displayName:"Codex",models:Ir(),capabilities:{resume:true}},buildArgs(n,e,t){let{model:r,effort:o}=Qt(e.model),s=e.effort??o,i=e.resumeSessionId?Qn(e.mode):Yn(e.mode),a=Zn(s),d=r?["-m",r]:[],l=wi(e.additionalArgs??[]),g=l.includes("--json")||l.includes("--experimental-json")?[]:["--json"];return e.resumeSessionId?{args:["exec","resume",...g,...i,...a,...d,...l,e.resumeSessionId,"-"],stdinMessage:n}:{args:["exec",...g,...i,...a,...d,...l],stdinMessage:n}},extractText(n){let e=n.split(`
9
- `).map(o=>o.trim()).filter(Boolean),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="item.completed"&&(s.item?.type==="message"||s.item?.type==="agent_message")&&typeof s.item?.text=="string"){let i=s.item.text;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=Ee(n);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(n,e){let t=e??new Date().toISOString(),r=[],o;try{JSON.parse(n),o=[n];}catch{o=hi(n),o.length>1&&console.warn("[codex] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let s of o){let i;try{i=JSON.parse(s);}catch{continue}let a=i.type;if(!a||!a.startsWith("item.")&&!a.startsWith("turn.")&&!a.startsWith("thread."))continue;let d=i.item;if(d){if(a==="item.started"){r.push(...vi(t,d));continue}if(a==="item.completed"){let l=_i(t,d);l&&r.push(l);continue}}}return r},suppressOutputLine(n){let e=n.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?yi.has(r):!1}catch{return false}}};});function Ri(n){return n?n==="default"||n==="build"?{agent:"build",skipPermissions:false}:n==="plan"?{agent:"plan",skipPermissions:false}:Ai.has(n)?{agent:"build",skipPermissions:true}:{agent:Ei.has(n)?n:"build",skipPermissions:false}:{agent:void 0,skipPermissions:false}}function Ci(n){let e=[],t=0,r=false,o=false,s=0;for(let a=0;a<n.length;a++){let d=n[a];if(o){o=false;continue}if(d==="\\"&&r){o=true;continue}if(d==='"'){r=!r;continue}if(!r){if(d==="{")t++;else if(d==="}"&&(t--,t===0)){let l=n.slice(s,a+1).trim();l&&e.push(l),s=a+1;}}}let i=n.slice(s).trim();return i&&e.push(i),e}var ki,Ai,Ei,rr,$r=N(()=>{c();st();at();ki=new Set(["step_start","step_finish"]),Ai=new Set(["bypassPermissions","yolo","agent-full-access"]),Ei=new Set(["build","plan"]);rr={command:"opencode",meta:{displayName:"OpenCode",capabilities:{resume:true}},buildArgs(n,e,t){let r=e.additionalArgs,o=r!==void 0?[...r]:["run"];o.includes("--format")||o.push("--format","json"),e.resumeSessionId&&!o.includes("-s")&&!o.includes("--session")&&o.push("-s",e.resumeSessionId);let{agent:s,skipPermissions:i}=Ri(e.mode);o.includes("--agent")||s!==void 0&&o.push("--agent",s),t&&i&&!o.includes("--dangerously-skip-permissions")&&o.push("--dangerously-skip-permissions"),e.effort!==void 0&&!o.includes("--variant")&&o.push("--variant",e.effort),e.model&&o.push("--model",e.model);let a;return !t&&!e.env?.OPENCODE_PERMISSION&&(a={OPENCODE_PERMISSION:JSON.stringify({external_directory:"allow"})}),{args:o,stdinMessage:n,env:a}},extractText(n){let e=n.split(`
10
- `).map(o=>o.trim()).filter(Boolean),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="text"&&typeof s.part?.text=="string"){let i=s.part.text;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=Ee(n);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(n,e){let t=e??new Date().toISOString(),r=[],o;try{JSON.parse(n),o=[n];}catch{o=Ci(n),o.length>1&&console.warn("[opencode] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let s of o){let i;try{i=JSON.parse(s);}catch{continue}let a=i.type;if(a){if(a==="text"){let l=i.part?.text;l&&r.push({timestamp:t,type:"text",content:l});continue}if(a==="tool_use"){let d=i.part;if(!d)continue;let l=String(d.tool||""),u=String(d.callID||""),g=d.state,f=String(g?.status||""),m=g?.input,w=ce(m);if(r.push({timestamp:t,type:"tool_use",toolName:l,toolUseId:u,toolInput:w}),f==="completed"&&g?.output!==void 0){let v=g.output,k=typeof v=="string"?v:JSON.stringify(v);r.push({timestamp:t,type:"tool_result",toolUseId:u,resultPreview:k,isError:false});}else f==="error"&&r.push({timestamp:t,type:"tool_result",toolUseId:u,resultPreview:String(g?.error||"tool error"),isError:true});continue}}}return r},suppressOutputLine(n){let e=n.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?ki.has(r):!1}catch{return false}}};});var Ur,jr=N(()=>{c();ft();he();Ur={command:"agy",meta:{displayName:"Antigravity",models:Mr(),defaultTimeoutMs:{query:12e4,execute:3e5},defaultIdleMs:0},buildArgs(n,e,t){if(e.additionalArgs!==void 0){let o=[...e.additionalArgs];return o.includes("--print")||o.unshift("--print",n),e.model&&o.push("--model",e.model),o.push("--dangerously-skip-permissions"),{args:o}}let r=["--print",n,"--dangerously-skip-permissions"];return e.model&&r.push("--model",e.model),{args:r}},extractText(n){let e=n.trim();if(!e)throw new T("Antigravity CLI returned empty output with exit code 0. agy may have hidden an auth/quota/model error in its log file; inspect ~/.gemini/antigravity-cli/log for details.","cli/antigravity",{code:"EMPTY_OUTPUT",kind:"transient"});return e},parseResultMeta(n){return {usage:null,model:null}},parseEvent(n,e){return []}};});var so,io=N(()=>{c();it();at();so={parseEvent(n,e){let t;try{t=JSON.parse(n);}catch{return []}let r=t.type;if(!r)return [];if(r!=="message"&&r!=="tool_use"&&r!=="tool_result")return [];let o=e??new Date().toISOString();if(r==="message"){if(t.role!=="assistant")return [];let i=t.content;return i?[{timestamp:o,type:"text",content:i}]:[]}if(r==="tool_use"){let s=String(t.tool_name||""),i=t.tool_id,a=t.parameters,d=ce(a);return /^bash$/i.test(s)&&de(d)?[le(o,d)]:[{timestamp:o,type:"tool_use",toolName:s,toolUseId:i,toolInput:d}]}if(r==="tool_result"){let s=t.tool_id,i=String(t.output||""),a=t.status!=="success";return [{timestamp:o,type:"tool_result",toolUseId:s,resultPreview:i,isError:a}]}return []}};});function _t(n,e,t){if(t){let r=we[t];if(r?.parseEvent)return r.parseEvent(e,n);let o=Pi[t];if(o?.parseEvent)return o.parseEvent(e,n)}for(let r of Object.values(we)){let o=r.parseEvent?.(e,n)??[];if(o.length>0)return o}return []}var we,Pi,Oe=N(()=>{c();Nr();Dr();Lr();$r();jr();io();Nr();Dr();Lr();$r();jr();it();we={codex:tr,claude:Zt,opencode:rr,antigravity:Ur,copilot:er},Pi={gemini:so};});var lt,Fr=N(()=>{c();lt=class{timeoutMs;onIdleCb;now;timer=null;lastActivity=0;settled=false;constructor(e){this.timeoutMs=e.timeoutMs,this.onIdleCb=e.onIdle,this.now=e.now??Date.now;}start(){this.settled||(this.lastActivity=this.now(),this.scheduleCheck());}refresh(){this.settled||(this.lastActivity=this.now());}stop(){this.settled||(this.settled=true,this.timer&&(clearTimeout(this.timer),this.timer=null));}scheduleCheck(){if(this.settled)return;let e=this.timeoutMs-(this.now()-this.lastActivity);if(e<=0){this.fireIdle();return}this.timer=setTimeout(()=>this.scheduleCheck(),e),this.timer.unref();}fireIdle(){this.settled||(this.settled=true,this.timer=null,this.onIdleCb());}};});function ao(n,e){if(n===void 0||n==="")return e;let t=parseInt(n,10);return Number.isNaN(t)?e:t}function Hr(n=process.env){let e=n.CREWX_TIMEOUT_IDLE;if(e===void 0||e==="")return;let t=parseInt(e,10);if(!(!Number.isFinite(t)||t<=0))return t}function lo(n=process.env){return {queryMs:ao(n.CREWX_TIMEOUT_QUERY,288e5),executeMs:ao(n.CREWX_TIMEOUT_EXECUTE,288e5),idleMs:Hr(n)??6e5}}var nr=N(()=>{c();});function Si(n){let e=n.split(`
4
+ `):""}function _i(n){let e=n.toLowerCase();return e.includes("out of extra usage")||e.includes("rate limit")||e.includes("quota")}function xi(n,e){let t=e.type;if(t==="text"){let r=String(e.text||"");return r?{timestamp:n,type:"text",content:r}:null}if(t==="thinking"){let r=String(e.thinking||"");return {timestamp:n,type:"thinking",content:r||"(thinking)"}}if(t==="tool_use"){let r=String(e.name||""),o=e.id,s=e.input,i=ue(s);return r==="Bash"&&le(i)?ce(n,i):{timestamp:n,type:"tool_use",toolUseId:o,toolName:r,toolInput:i}}if(t==="tool_result"){let r=!!e.is_error,o=e.tool_use_id,s=e.output??e.content??"",i;return typeof s=="string"?i=s:Array.isArray(s)?i=s.filter(a=>a.type==="text"&&typeof a.text=="string").map(a=>a.text).join(`
5
+ `):i=JSON.stringify(s),{timestamp:n,type:"tool_result",toolUseId:o,resultPreview:i,isError:r}}return null}var wi,tr,$r=M(()=>{c();Sr();ct();ut();br();we();wi=new Set(["tool_progress"]),tr={command:"claude",meta:{displayName:"Claude",models:xt(),capabilities:{resume:true}},buildArgs(n,e,t){let{model:r,effort:o}=er(e.model),s=e.effort??o,i=ro(e.mode),a=no(s),d=r?["--model",r]:[],l=e.resumeSessionId?["--resume",e.resumeSessionId]:[];if(e.additionalArgs!==void 0){let g=[...e.additionalArgs];return g.indexOf("-p")!==-1?{args:["--output-format","stream-json","--verbose",...l,...i,...a,...d,...g],stdinMessage:n}:{args:["--output-format","stream-json","--verbose",...l,...i,...a,...d,...g],stdinMessage:n}}return {args:["-p","--output-format","stream-json","--verbose",...l,...i,...a,...d],stdinMessage:n}},extractText(n){let e=n.split(`
6
+ `).filter(o=>o.trim()),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant"&&Array.isArray(s.message?.content))for(let i of s.message.content)i.type==="text"&&typeof i.text=="string"&&i.text.trim()&&t.push(i.text.trim());s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},extractFailure(n){try{let e=JSON.parse(n);if(e.type==="rate_limit_event"){let t=e.rate_limit_info??{};if(t.status==="rejected")return new Je(`Claude rate limit: ${t.rateLimitType??"unknown"} (status: ${t.status})`)}if(e.error==="rate_limit"){let t=vi(e);return new Je(t?`Claude rate limit: ${t}`:"Claude rate limit")}if(e.type==="result"&&e.is_error===!0){let t=typeof e.result=="string"?e.result:"";if(_i(t))return new Je(`Claude rate limit: ${t}`)}}catch{}return null},parseResultMeta(n){let e=n.split(`
7
+ `);for(let t of e)if(t.trim())try{let r=JSON.parse(t);if(r.type==="result"){let o=r.usage,s=o?{inputTokens:Number(o.input_tokens??0)+Number(o.cache_read_input_tokens??0),outputTokens:Number(o.output_tokens??0),cachedInputTokens:Number(o.cache_read_input_tokens??0),costUsd:Number(r.total_cost_usd??0)}:null,i=r.modelUsage,a=i?Object.keys(i)[0]??null:null;return {usage:s,model:a}}}catch{}return {usage:null,model:null}},parseEvent(n,e){let t;try{t=JSON.parse(n);}catch{return []}let r=t.type;if(!r)return [];if(r!=="assistant"&&r!=="user")return [];let s=t.message?.content;if(!Array.isArray(s))return [];let i=e??new Date().toISOString(),a=[];for(let d of s){let l=xi(i,d);l&&a.push(l);}return a},suppressOutputLine(n){let e=n.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?wi.has(r):!1}catch{return false}}};});var ki,Ai,rr,Ur=M(()=>{c();lt();ct();ut();we();ki=new Set(["interactive","plan","autopilot"]),Ai=new Set(["none","low","medium","high","xhigh","max"]),rr={command:"copilot",meta:{displayName:"Copilot",models:Dr()},buildArgs(n,e,t){let r=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&r.push("--model",e.model),e.mode&&ki.has(e.mode)&&r.push("--mode",e.mode),e.effort&&Ai.has(e.effort)&&r.push("--effort",e.effort),{args:r,stdinMessage:n}},extractText(n){let e=n.split(`
8
+ `).filter(o=>o.trim()),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant.message"&&typeof s.data?.content=="string"){let i=s.data.content;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=Ce(n);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(n,e){let t;try{t=JSON.parse(n);}catch{return []}let r=t.type;if(!r)return [];if(!r.startsWith("tool.execution")&&!r.startsWith("assistant.")&&r!=="user.message")return [];let o=t.data;if(!o)return [];let s=e??new Date().toISOString(),i=o.toolCallId;if(r==="tool.execution_start"){let a=String(o.toolName||""),d=o.arguments,l=ue(d);return (a==="bash"||a==="Bash")&&le(l)?[ce(s,l)]:[{timestamp:s,type:"tool_use",toolName:a,toolInput:l,...i&&{toolUseId:i}}]}if(r==="tool.execution_complete"){let a=o.error;if(a)return [{timestamp:s,type:"tool_result",isError:true,resultPreview:String(a.message||""),...i&&{toolUseId:i}}];let d=o.result,l=String(d?.content||"");return [{timestamp:s,type:"tool_result",resultPreview:l,isError:false,...i&&{toolUseId:i}}]}if(r==="assistant.message"){let a=String(o.content||"");return a?[{timestamp:s,type:"text",content:a}]:[]}return []}};});function Ri(n){let e=[],t=0,r=false,o=false,s=0;for(let a=0;a<n.length;a++){let d=n[a];if(o){o=false;continue}if(d==="\\"&&r){o=true;continue}if(d==='"'){r=!r;continue}if(!r){if(d==="{")t++;else if(d==="}"&&(t--,t===0)){let l=n.slice(s,a+1).trim();l&&e.push(l),s=a+1;}}}let i=n.slice(s).trim();return i&&e.push(i),e}function Ci(n){return n[0]==="exec"?n.slice(1):n}function Pi(n,e){let t=e.type;if(t==="command_execution"){let r=String(e.command||"");return le(r)?[ce(n,r)]:[{timestamp:n,type:"tool_use",toolName:"Bash",toolInput:r}]}return t==="web_search"?[]:t==="file_change"?[]:[]}function Ti(n,e){let t=e.type;if(t==="message"||t==="text"){let r=e.content;if(Array.isArray(r))for(let o of r){let s=Si(n,o);if(s)return s}if(typeof e.text=="string")return {timestamp:n,type:"text",content:e.text}}if(t==="agent_message"&&typeof e.text=="string")return {timestamp:n,type:"text",content:e.text};if(t==="reasoning")return {timestamp:n,type:"text",content:String(e.text||"")};if(t==="command_execution"){let r=String(e.aggregated_output||e.output||""),o=!!e.is_error;return {timestamp:n,type:"tool_result",resultPreview:r,isError:o}}if(t==="tool_use"){let r=String(e.name||e.tool_name||""),o=e.input,s=ue(o);return r==="Bash"&&le(s)?ce(n,s):{timestamp:n,type:"tool_use",toolName:r,toolInput:s}}if(t==="tool_result"){let r=!!e.is_error,o=String(e.output||e.content||"");return {timestamp:n,type:"tool_result",resultPreview:o,isError:r}}if(t==="web_search"){let r=e.action,o;if(r?.type==="search"){let s=r.queries;o=String(r.query||"")||(s?.length?s.join(", "):"")||String(e.query||"");}else o=e.query?"open: "+String(e.query):"";return o?{timestamp:n,type:"tool_use",toolName:"WebSearch",toolInput:o}:null}if(t==="file_change"){let r=e.changes;if(!Array.isArray(r)||r.length===0)return null;let o=r.map(i=>String(i.path||"")).filter(Boolean);if(o.length===0)return null;let s=o.length===1?o[0]:`${o.slice(0,2).join(", ")}${o.length>2?` (+${o.length-2})`:""}`;return {timestamp:n,type:"tool_use",toolName:"Edit",toolInput:s}}return null}function Si(n,e){let t=e.type;if(t==="text")return {timestamp:n,type:"text",content:String(e.text||"")};if(t==="tool_use"){let r=String(e.name||""),o=e.input,s=ue(o);return r==="Bash"&&le(s)?ce(n,s):{timestamp:n,type:"tool_use",toolName:r,toolInput:s}}return null}var Ei,nr,jr=M(()=>{c();lt();ct();ut();br();we();Ei=new Set(["turn.started","turn.completed","item.updated"]);nr={command:"codex",meta:{displayName:"Codex",models:Nr(),capabilities:{resume:true}},buildArgs(n,e,t){let{model:r,effort:o}=er(e.model),s=e.effort??o,i=e.resumeSessionId?eo(e.mode):Zn(e.mode),a=to(s),d=r?["-m",r]:[],l=Ci(e.additionalArgs??[]),g=l.includes("--json")||l.includes("--experimental-json")?[]:["--json"];return e.resumeSessionId?{args:["exec","resume",...g,...i,...a,...d,...l,e.resumeSessionId,"-"],stdinMessage:n}:{args:["exec",...g,...i,...a,...d,...l],stdinMessage:n}},extractText(n){let e=n.split(`
9
+ `).map(o=>o.trim()).filter(Boolean),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="item.completed"&&(s.item?.type==="message"||s.item?.type==="agent_message")&&typeof s.item?.text=="string"){let i=s.item.text;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=Ce(n);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(n,e){let t=e??new Date().toISOString(),r=[],o;try{JSON.parse(n),o=[n];}catch{o=Ri(n),o.length>1&&console.warn("[codex] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let s of o){let i;try{i=JSON.parse(s);}catch{continue}let a=i.type;if(!a||!a.startsWith("item.")&&!a.startsWith("turn.")&&!a.startsWith("thread."))continue;let d=i.item;if(d){if(a==="item.started"){r.push(...Pi(t,d));continue}if(a==="item.completed"){let l=Ti(t,d);l&&r.push(l);continue}}}return r},suppressOutputLine(n){let e=n.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?Ei.has(r):!1}catch{return false}}};});function Mi(n){return n?n==="default"||n==="build"?{agent:"build",skipPermissions:false}:n==="plan"?{agent:"plan",skipPermissions:false}:Ii.has(n)?{agent:"build",skipPermissions:true}:{agent:Oi.has(n)?n:"build",skipPermissions:false}:{agent:void 0,skipPermissions:false}}function Ni(n){let e=[],t=0,r=false,o=false,s=0;for(let a=0;a<n.length;a++){let d=n[a];if(o){o=false;continue}if(d==="\\"&&r){o=true;continue}if(d==='"'){r=!r;continue}if(!r){if(d==="{")t++;else if(d==="}"&&(t--,t===0)){let l=n.slice(s,a+1).trim();l&&e.push(l),s=a+1;}}}let i=n.slice(s).trim();return i&&e.push(i),e}var bi,Ii,Oi,or,Fr=M(()=>{c();lt();ut();bi=new Set(["step_start","step_finish"]),Ii=new Set(["bypassPermissions","yolo","agent-full-access"]),Oi=new Set(["build","plan"]);or={command:"opencode",meta:{displayName:"OpenCode",capabilities:{resume:true}},buildArgs(n,e,t){let r=e.additionalArgs,o=r!==void 0?[...r]:["run"];o.includes("--format")||o.push("--format","json"),e.resumeSessionId&&!o.includes("-s")&&!o.includes("--session")&&o.push("-s",e.resumeSessionId);let{agent:s,skipPermissions:i}=Mi(e.mode);o.includes("--agent")||s!==void 0&&o.push("--agent",s),t&&i&&!o.includes("--dangerously-skip-permissions")&&o.push("--dangerously-skip-permissions"),e.effort!==void 0&&!o.includes("--variant")&&o.push("--variant",e.effort),e.model&&o.push("--model",e.model);let a;return !t&&!e.env?.OPENCODE_PERMISSION&&(a={OPENCODE_PERMISSION:JSON.stringify({external_directory:"allow"})}),{args:o,stdinMessage:n,env:a}},extractText(n){let e=n.split(`
10
+ `).map(o=>o.trim()).filter(Boolean),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="text"&&typeof s.part?.text=="string"){let i=s.part.text;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=Ce(n);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(n,e){let t=e??new Date().toISOString(),r=[],o;try{JSON.parse(n),o=[n];}catch{o=Ni(n),o.length>1&&console.warn("[opencode] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let s of o){let i;try{i=JSON.parse(s);}catch{continue}let a=i.type;if(a){if(a==="text"){let l=i.part?.text;l&&r.push({timestamp:t,type:"text",content:l});continue}if(a==="tool_use"){let d=i.part;if(!d)continue;let l=String(d.tool||""),u=String(d.callID||""),g=d.state,f=String(g?.status||""),m=g?.input,w=ue(m);if(r.push({timestamp:t,type:"tool_use",toolName:l,toolUseId:u,toolInput:w}),f==="completed"&&g?.output!==void 0){let v=g.output,E=typeof v=="string"?v:JSON.stringify(v);r.push({timestamp:t,type:"tool_result",toolUseId:u,resultPreview:E,isError:false});}else f==="error"&&r.push({timestamp:t,type:"tool_result",toolUseId:u,resultPreview:String(g?.error||"tool error"),isError:true});continue}}}return r},suppressOutputLine(n){let e=n.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?bi.has(r):!1}catch{return false}}};});var Hr,qr=M(()=>{c();wt();we();Hr={command:"agy",meta:{displayName:"Antigravity",models:Lr(),defaultTimeoutMs:{query:12e4,execute:3e5},defaultIdleMs:0},buildArgs(n,e,t){if(e.additionalArgs!==void 0){let o=[...e.additionalArgs];return o.includes("--print")||o.unshift("--print",n),e.model&&o.push("--model",e.model),o.push("--dangerously-skip-permissions"),{args:o}}let r=["--print",n,"--dangerously-skip-permissions"];return e.model&&r.push("--model",e.model),{args:r}},extractText(n){let e=n.trim();if(!e)throw new T("Antigravity CLI returned empty output with exit code 0. agy may have hidden an auth/quota/model error in its log file; inspect ~/.gemini/antigravity-cli/log for details.","cli/antigravity",{code:"EMPTY_OUTPUT",kind:"transient"});return e},parseResultMeta(n){return {usage:null,model:null}},parseEvent(n,e){return []}};});var ao,lo=M(()=>{c();ct();ut();ao={parseEvent(n,e){let t;try{t=JSON.parse(n);}catch{return []}let r=t.type;if(!r)return [];if(r!=="message"&&r!=="tool_use"&&r!=="tool_result")return [];let o=e??new Date().toISOString();if(r==="message"){if(t.role!=="assistant")return [];let i=t.content;return i?[{timestamp:o,type:"text",content:i}]:[]}if(r==="tool_use"){let s=String(t.tool_name||""),i=t.tool_id,a=t.parameters,d=ue(a);return /^bash$/i.test(s)&&le(d)?[ce(o,d)]:[{timestamp:o,type:"tool_use",toolName:s,toolUseId:i,toolInput:d}]}if(r==="tool_result"){let s=t.tool_id,i=String(t.output||""),a=t.status!=="success";return [{timestamp:o,type:"tool_result",toolUseId:s,resultPreview:i,isError:a}]}return []}};});function At(n,e,t){if(t){let r=ve[t];if(r?.parseEvent)return r.parseEvent(e,n);let o=Di[t];if(o?.parseEvent)return o.parseEvent(e,n)}for(let r of Object.values(ve)){let o=r.parseEvent?.(e,n)??[];if(o.length>0)return o}return []}var ve,Di,Ne=M(()=>{c();$r();Ur();jr();Fr();qr();lo();$r();Ur();jr();Fr();qr();ct();ve={codex:nr,claude:tr,opencode:or,antigravity:Hr,copilot:rr},Di={gemini:ao};});var gt,Wr=M(()=>{c();gt=class{timeoutMs;onIdleCb;now;timer=null;lastActivity=0;settled=false;constructor(e){this.timeoutMs=e.timeoutMs,this.onIdleCb=e.onIdle,this.now=e.now??Date.now;}start(){this.settled||(this.lastActivity=this.now(),this.scheduleCheck());}refresh(){this.settled||(this.lastActivity=this.now());}stop(){this.settled||(this.settled=true,this.timer&&(clearTimeout(this.timer),this.timer=null));}scheduleCheck(){if(this.settled)return;let e=this.timeoutMs-(this.now()-this.lastActivity);if(e<=0){this.fireIdle();return}this.timer=setTimeout(()=>this.scheduleCheck(),e),this.timer.unref();}fireIdle(){this.settled||(this.settled=true,this.timer=null,this.onIdleCb());}};});function co(n,e){if(n===void 0||n==="")return e;let t=parseInt(n,10);return Number.isNaN(t)?e:t}function Br(n=process.env){let e=n.CREWX_TIMEOUT_IDLE;if(e===void 0||e==="")return;let t=parseInt(e,10);if(!(!Number.isFinite(t)||t<=0))return t}function uo(n=process.env){return {queryMs:co(n.CREWX_TIMEOUT_QUERY,288e5),executeMs:co(n.CREWX_TIMEOUT_EXECUTE,288e5),idleMs:Br(n)??6e5}}var sr=M(()=>{c();});function $i(n){let e=n.split(`
11
11
  `).filter(d=>d.trim()),t=[],r=[],o=[],s=[],i=[],a=null;for(let d of e)try{let l=JSON.parse(d);if(l.type==="assistant"&&Array.isArray(l.message?.content))for(let u of l.message.content)u.type==="text"&&typeof u.text=="string"&&u.text.trim()&&t.push(u.text.trim());if(l.type==="message"&&l.role==="assistant"&&l.delta===!0&&typeof l.content=="string"&&r.push(l.content),l.type==="assistant.message"&&typeof l.data?.content=="string"){let u=l.data.content;u.trim()&&o.push(u.trim());}if(l.type==="item.completed"&&(l.item?.type==="message"||l.item?.type==="agent_message")&&typeof l.item?.text=="string"){let u=l.item.text;u.trim()&&s.push(u.trim());}if(l.type==="text"&&typeof l.part?.text=="string"){let u=l.part.text;u.trim()&&i.push(u.trim());}l.type==="result"&&typeof l.result=="string"&&(a=l.result);}catch{}return t.length>0?t.join(`
12
12
 
13
13
  `):r.length>0?r.join(""):o.length>0?o.join(`
14
14
 
15
15
  `):s.length>0?s.join(`
16
16
 
17
- `):i.length>0?i.join(""):a||n.trim()}function bi(n){let e=Ee(n);return e?{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0}:null}function Ii(n,e,t=process.platform){return n==="copilot"&&t==="win32"&&e instanceof T&&e.message.includes('CLI command "copilot" not found')}function uo(n,e,t,r,o,s,i){return new Promise((a,d)=>{let l=o?.timeoutMs??288e5,u=o?.idleMs??6e5,g=gt({command:n,allowShellFallback:true}),f=mt(g,e),m=spawn(f.command,f.argv,{env:{...process.env,...o?.env??{}},cwd:o?.cwd,stdio:["pipe","pipe","pipe"],shell:f.shell??false,windowsHide:f.windowsHide,detached:process.platform!=="win32"});m.stdin.on("error",W=>{W.code!=="EPIPE"&&o?.onOutput?.(`stdin error: ${W.message}`,"stderr");}),s!==void 0&&m.stdin.write(s),m.stdin.end(),m.pid!==void 0&&o?.onPid?.(m.pid);let w=false,v=false,k=W=>{if(m.pid!==void 0)try{process.platform==="win32"?m.kill(W):process.kill(-m.pid,W);}catch{}},_=()=>{k("SIGKILL");},A=setTimeout(()=>{w||(v=true,I?.stop(),k("SIGTERM"),setTimeout(_,xt).unref());},l);A.unref();let I=u>0?new lt({timeoutMs:u,onIdle:()=>{if(w)return;w=true,clearTimeout(A),k("SIGTERM"),setTimeout(_,xt).unref();let W=Math.round(u/6e4);d(new We(`${t} produced no output for ${W}m (idle timeout). Process killed. The CLI may be waiting on interactive input or stuck \u2014 check the prompt or retry.`,t));}}):null;I?.start();let E=new StringDecoder("utf8"),K=new StringDecoder("utf8"),$="",O="",U="",q="";m.stdout.on("data",W=>{I?.refresh();let B=E.write(W);$+=B,U+=B;let J=U.split(`
18
- `);U=J.pop()??"";for(let z of J)if(z.trim()&&(o?.onOutput?.(z,"stdout"),i?.extractFailure)){let te=i.extractFailure(z);if(te){w=true,clearTimeout(A),I?.stop(),k("SIGTERM"),setTimeout(_,xt).unref(),d(te);return}}}),m.stderr.on("data",W=>{I?.refresh();let B=K.write(W);O+=B,q+=B;let J=q.split(`
19
- `);q=J.pop()??"";for(let z of J)z.trim()&&o?.onOutput?.(z,"stderr");}),m.on("error",W=>{w=true,clearTimeout(A),I?.stop(),W.code==="ENOENT"?d(new T(`CLI command "${n}" not found. Is ${t} installed?`,t)):d(new T(`Spawn error: ${W.message}`,t));}),m.on("close",(W,B)=>{if(w)return;w=true,clearTimeout(A),I?.stop();let J=E.end(),z=K.end();J&&($+=J,U+=J),z&&(O+=z,q+=z),U.trim()&&o?.onOutput?.(U,"stdout"),q.trim()&&o?.onOutput?.(q,"stderr");let te=W??0;if(o?.onExitCode?.(te),v)return d(new Be(`Total runtime exceeded ${l}ms; process killed.`,t));if(B)return d(new T(`Process terminated by signal ${B}`,t,{code:"PROVIDER_CRASHED",kind:"permanent"}));if(te!==0){if(i?.interpretExit){let j=i.interpretExit(te,O);if(j){d(j);return}}d(new T(`Process exited with code ${te}: ${O.slice(0,500)}`,t));return}let Z;try{Z=i?i.extractText($):Si($);}catch(j){d(j instanceof Error?j:new T(String(j),t));return}a({stdout:$,parsed:Z});});})}function Re(n,e){po.set(n,e);}function Ce(n,e){let t=n.split("/");if(t.length!==2)throw new T(`Invalid provider format: "${n}". Expected namespace/id (e.g., cli/claude)`,n);let[r,o]=t,s=po.get(r);if(s)return s(o,n);if(r==="cli"){let i=we[o];if(!i)throw new T(`Unknown CLI provider id: "${o}". Supported: ${Object.keys(we).join(", ")}`,n);return new qr(o,i,n,e)}throw new T(`Unsupported provider namespace: "${r}". Register a factory with registerProviderFactory('${r}', factory).`,n)}function go(n,e,t){if(!n||!e)return n??{};let r=e({providerStr:t.providerStr,providerId:t.providerId,mode:n.mode});return r.length===0?n:{...n,additionalArgs:[...n.additionalArgs??[],...r]}}var xt,ue,po,qr,ve=N(()=>{c();Yt();st();Oe();ft();Fr();nr();ft();xt=2e3;ue=class extends Error{constructor(t,r){super(`Client tool call required: ${t.toolName}`);this.toolCall=t;this.continuationState=r;}toolCall;continuationState;name="ClientToolCallRequiredError"},po=new Map;qr=class{constructor(e,t,r,o){this.providerId=e;this.adapter=t;this.providerStr=r;this.additionalArgsProvider=o;}providerId;adapter;providerStr;additionalArgsProvider;async execute(e,t){let r=this.composeMessage(e,t),o=this.applyAdditionalArgs(t),{args:s,stdinMessage:i,env:a}=this.adapter.buildArgs(r,o,true);o.onCommand?.(`${this.adapter.command} ${s.join(" ")}`);let d=a?{...o,env:{...o.env??{},...a}}:o,{stdout:l,parsed:u}=await this.runProcess(s,d,i);return this.handleResultMeta(l,o),u}async query(e,t){let r=this.composeMessage(e,t),o=this.applyAdditionalArgs(t),{args:s,stdinMessage:i,env:a}=this.adapter.buildArgs(r,o,false);o.onCommand?.(`${this.adapter.command} ${s.join(" ")}`);let d=a?{...o,env:{...o.env??{},...a}}:o,{stdout:l,parsed:u}=await this.runProcess(s,d,i);return this.handleResultMeta(l,o),u}applyAdditionalArgs(e){return go(e,this.additionalArgsProvider,{providerStr:this.providerStr,providerId:this.providerId})}composeMessage(e,t){return t?.systemPrompt?`${t.systemPrompt}
17
+ `):i.length>0?i.join(""):a||n.trim()}function Ui(n){let e=Ce(n);return e?{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0}:null}function ji(n,e,t=process.platform){return n==="copilot"&&t==="win32"&&e instanceof T&&e.message.includes('CLI command "copilot" not found')}function go(n,e,t,r,o,s,i){return new Promise((a,d)=>{let l=o?.timeoutMs??288e5,u=o?.idleMs??6e5,g={...process.env,...o?.env??{}},f=o?.cwd??process.cwd(),m=ze({command:n,env:g,cwd:f,allowShellFallback:true}),w=Ke(m,e),v=spawn(w.command,w.argv,{env:g,cwd:o?.cwd,stdio:["pipe","pipe","pipe"],shell:w.shell??false,windowsHide:w.windowsHide,detached:process.platform!=="win32"});v.stdin.on("error",U=>{U.code!=="EPIPE"&&o?.onOutput?.(`stdin error: ${U.message}`,"stderr");}),s!==void 0&&v.stdin.write(s),v.stdin.end(),v.pid!==void 0&&o?.onPid?.(v.pid);let E=false,_=false,x=U=>{if(v.pid!==void 0)try{process.platform==="win32"?v.kill(U):process.kill(-v.pid,U);}catch{}},k=()=>{x("SIGKILL");},A=setTimeout(()=>{E||(_=true,F?.stop(),x("SIGTERM"),setTimeout(k,Et).unref());},l);A.unref();let F=u>0?new gt({timeoutMs:u,onIdle:()=>{if(E)return;E=true,clearTimeout(A),x("SIGTERM"),setTimeout(k,Et).unref();let U=Math.round(u/6e4);d(new Ve(`${t} produced no output for ${U}m (idle timeout). Process killed. The CLI may be waiting on interactive input or stuck \u2014 check the prompt or retry.`,t));}}):null;F?.start();let B=new StringDecoder("utf8"),D=new StringDecoder("utf8"),H="",K="",te="",V="";v.stdout.on("data",U=>{F?.refresh();let X=B.write(U);H+=X,te+=X;let Z=te.split(`
18
+ `);te=Z.pop()??"";for(let z of Z)if(z.trim()&&(o?.onOutput?.(z,"stdout"),i?.extractFailure)){let $=i.extractFailure(z);if($){E=true,clearTimeout(A),F?.stop(),x("SIGTERM"),setTimeout(k,Et).unref(),d($);return}}}),v.stderr.on("data",U=>{F?.refresh();let X=D.write(U);K+=X,V+=X;let Z=V.split(`
19
+ `);V=Z.pop()??"";for(let z of Z)z.trim()&&o?.onOutput?.(z,"stderr");}),v.on("error",U=>{E=true,clearTimeout(A),F?.stop(),U.code==="ENOENT"?d(new T(`CLI command "${n}" not found. Is ${t} installed?`,t)):d(new T(`Spawn error: ${U.message}`,t));}),v.on("close",(U,X)=>{if(E)return;E=true,clearTimeout(A),F?.stop();let Z=B.end(),z=D.end();Z&&(H+=Z,te+=Z),z&&(K+=z,V+=z),te.trim()&&o?.onOutput?.(te,"stdout"),V.trim()&&o?.onOutput?.(V,"stderr");let $=U??0;if(o?.onExitCode?.($),_)return d(new Ge(`Total runtime exceeded ${l}ms; process killed.`,t));if(X)return d(new T(`Process terminated by signal ${X}`,t,{code:"PROVIDER_CRASHED",kind:"permanent"}));if($!==0){if(i?.interpretExit){let G=i.interpretExit($,K);if(G){d(G);return}}d(new T(`Process exited with code ${$}: ${K.slice(0,500)}`,t));return}let J;try{J=i?i.extractText(H):$i(H);}catch(G){d(G instanceof Error?G:new T(String(G),t));return}a({stdout:H,parsed:J});});})}function Pe(n,e){mo.set(n,e);}function Te(n,e){let t=n.split("/");if(t.length!==2)throw new T(`Invalid provider format: "${n}". Expected namespace/id (e.g., cli/claude)`,n);let[r,o]=t,s=mo.get(r);if(s)return s(o,n);if(r==="cli"){let i=ve[o];if(!i)throw new T(`Unknown CLI provider id: "${o}". Supported: ${Object.keys(ve).join(", ")}`,n);return new zr(o,i,n,e)}throw new T(`Unsupported provider namespace: "${r}". Register a factory with registerProviderFactory('${r}', factory).`,n)}function fo(n,e,t){if(!n||!e)return n??{};let r=e({providerStr:t.providerStr,providerId:t.providerId,mode:n.mode});return r.length===0?n:{...n,additionalArgs:[...n.additionalArgs??[],...r]}}var Et,pe,mo,zr,_e=M(()=>{c();ht();lt();Ne();wt();Wr();sr();wt();Et=2e3;pe=class extends Error{constructor(t,r){super(`Client tool call required: ${t.toolName}`);this.toolCall=t;this.continuationState=r;}toolCall;continuationState;name="ClientToolCallRequiredError"},mo=new Map;zr=class{constructor(e,t,r,o){this.providerId=e;this.adapter=t;this.providerStr=r;this.additionalArgsProvider=o;}providerId;adapter;providerStr;additionalArgsProvider;async execute(e,t){let r=this.composeMessage(e,t),o=this.applyAdditionalArgs(t),{args:s,stdinMessage:i,env:a}=this.adapter.buildArgs(r,o,true);o.onCommand?.(`${this.adapter.command} ${s.join(" ")}`);let d=a?{...o,env:{...o.env??{},...a}}:o,{stdout:l,parsed:u}=await this.runProcess(s,d,i);return this.handleResultMeta(l,o),u}async query(e,t){let r=this.composeMessage(e,t),o=this.applyAdditionalArgs(t),{args:s,stdinMessage:i,env:a}=this.adapter.buildArgs(r,o,false);o.onCommand?.(`${this.adapter.command} ${s.join(" ")}`);let d=a?{...o,env:{...o.env??{},...a}}:o,{stdout:l,parsed:u}=await this.runProcess(s,d,i);return this.handleResultMeta(l,o),u}applyAdditionalArgs(e){return fo(e,this.additionalArgsProvider,{providerStr:this.providerStr,providerId:this.providerId})}composeMessage(e,t){return t?.systemPrompt?`${t.systemPrompt}
20
20
 
21
21
  ---
22
22
 
23
- ${e}`:e}async runProcess(e,t,r){try{return await uo(this.adapter.command,e,this.providerStr,this.providerId,t,r,this.adapter)}catch(o){if(Ii(this.providerId,o)){let s=e[0]==="copilot"?e:["copilot",...e];return uo("gh",s,this.providerStr,this.providerId,t,r,this.adapter)}throw o}}handleResultMeta(e,t){if(!this.adapter.parseResultMeta){let i=bi(e);i&&t?.onUsage&&t.onUsage(i);return}let{usage:r,model:o}=this.adapter.parseResultMeta(e);r&&t?.onUsage&&t.onUsage(r);let s=o??(this.providerId==="opencode"?t?.model??null:null);s&&t?.onModel&&t.onModel(s);}};});function on(n){let e=n.update;if(e.sessionUpdate==="agent_message_chunk"){let t=e.content;if(t.type==="text"&&typeof t.text=="string")return t.text}return null}function pe(n,e){try{let t=JSON.parse(n);if(t!=null&&typeof t=="object"&&typeof t.type=="string"&&ha.has(t.type)){let r=e??new Date().toISOString();return [{...t,timestamp:t.timestamp||r}]}}catch{}return []}var ha,Me=N(()=>{c();ha=new Set(["text","tool_use","tool_result","error","running_instruction","agent_call"]);});var Vo,Go,Nt,gn=N(()=>{c();ve();Vo=10,Go=50,Nt=class{config;constructor(e){this.config=e;}async query(e,t){return this._run(e,"query",t)}async execute(e,t){return this._run(e,"execute",t)}async _run(e,t,r){let{generateText:o,tool:s}=await import('ai'),i=this.convertTools(r?.tools??[],s),a=this.createModel(r?.model),d=Math.min(r?.maxSteps??this.config.maxSteps??Vo,Go);try{let l=0,u=await o({model:a,system:r?.systemPrompt??void 0,prompt:e,tools:i,maxSteps:d,...this.config.temperature!==void 0&&{temperature:this.config.temperature},...this.config.maxTokens!==void 0&&{maxTokens:this.config.maxTokens},onStepFinish:f=>{if(l++,!!r?.onOutput){if(f.toolCalls&&f.toolCalls.length>0)for(let m of f.toolCalls)r.onOutput(JSON.stringify({type:"assistant",message:{content:[{type:"tool_use",id:m.toolCallId,name:m.toolName,input:m.args}]}}),"stdout");if(f.toolResults&&f.toolResults.length>0)for(let m of f.toolResults){let w=typeof m.result=="string"?m.result:JSON.stringify(m.result);r.onOutput(JSON.stringify({type:"user",message:{content:[{type:"tool_result",tool_use_id:m.toolCallId,output:w,is_error:!1}]}}),"stdout");}}}}),g=new Set((r?.tools??[]).filter(f=>!f.execute).map(f=>f.name));if(u.finishReason==="tool-calls"&&Array.isArray(u.toolCalls)&&u.toolCalls.length>0){let f=u.toolCalls.filter(m=>g.has(m.toolName));if(f.length>0){let m=f[0];throw new ue({toolCallId:m.toolCallId,toolName:m.toolName,args:m.args},{userMessage:e,responseMessages:u.response?.messages??[],toolDefinitions:r?.tools??[],maxSteps:d,systemPrompt:r?.systemPrompt,modelOverride:r?.model})}}if(r?.onUsage&&u.usage){let f={inputTokens:u.usage.promptTokens??0,outputTokens:u.usage.completionTokens??0,cachedInputTokens:0,costUsd:0};r.onUsage(f);}return r?.onModel&&r.onModel(r.model??this.config.model),u.text??""}catch(l){throw l instanceof ue?l:l.status===401?new T(`Authentication failed for ${this.config.provider}. Check your API key.`,this.config.provider):l.status===429?new T(`Rate limit exceeded for ${this.config.provider}.`,this.config.provider):new T(`Provider error: ${l.message}`,this.config.provider)}}async continueWithToolResults(e,t,r){let{generateText:o,tool:s}=await import('ai'),i=this.convertTools(e.toolDefinitions,s),a=this.createModel(e.modelOverride),d=Math.min(e.maxSteps??this.config.maxSteps??Vo,Go),l=[{role:"user",content:e.userMessage},...e.responseMessages,{role:"tool",content:t.map(u=>({type:"tool-result",toolCallId:u.toolCallId,toolName:u.toolName,result:typeof u.result=="string"?u.result:JSON.stringify(u.result)}))}];try{let u=await o({model:a,system:e.systemPrompt??void 0,messages:l,tools:i,maxSteps:d,...this.config.temperature!==void 0&&{temperature:this.config.temperature},...this.config.maxTokens!==void 0&&{maxTokens:this.config.maxTokens}}),g=new Set(e.toolDefinitions.filter(f=>!f.execute).map(f=>f.name));if(u.finishReason==="tool-calls"&&Array.isArray(u.toolCalls)&&u.toolCalls.length>0){let f=u.toolCalls.filter(m=>g.has(m.toolName));if(f.length>0){let m=f[0];throw new ue({toolCallId:m.toolCallId,toolName:m.toolName,args:m.args},{userMessage:e.userMessage,responseMessages:[...e.responseMessages,{role:"tool",content:t.map(w=>({type:"tool-result",toolCallId:w.toolCallId,toolName:w.toolName,result:typeof w.result=="string"?w.result:JSON.stringify(w.result)}))},...u.response?.messages??[]],toolDefinitions:e.toolDefinitions,maxSteps:e.maxSteps,systemPrompt:e.systemPrompt,modelOverride:e.modelOverride})}}return r?.onUsage&&u.usage&&r.onUsage({inputTokens:u.usage.promptTokens??0,outputTokens:u.usage.completionTokens??0,cachedInputTokens:0,costUsd:0}),r?.onModel&&r.onModel(e.modelOverride??this.config.model),u.text??""}catch(u){throw u instanceof ue?u:new T(`Provider error: ${u.message}`,this.config.provider)}}convertTools(e,t){let{z:r}=re("zod"),o={};for(let s of e){let i=this.jsonSchemaToZod(s.parameters??{},r);s.execute?o[s.name]=t({description:s.description,parameters:i,execute:async a=>s.execute(a)}):o[s.name]=t({description:s.description,parameters:i});}return o}jsonSchemaToZod(e,t){if(!e||!e.properties)return t.object({});let r={},o=e.properties,s=e.required??[];for(let[i,a]of Object.entries(o)){let d;switch(a.type){case "string":d=t.string();break;case "number":d=t.number();break;case "integer":d=t.number().int();break;case "boolean":d=t.boolean();break;case "array":d=t.array(t.any());break;default:d=t.any();}a.description&&(d=d.describe(a.description)),s.includes(i)||(d=d.optional()),r[i]=d;}return t.object(r)}createModel(e){let{provider:t,apiKey:r,baseURL:o}=this.config,s=e||this.config.model;switch(t){case "api/openrouter":{let{createOpenAI:i}=re("@ai-sdk/openai");return i({apiKey:r||process.env.OPENROUTER_API_KEY,baseURL:o||"https://openrouter.ai/api/v1"})(s)}case "api/openai":{let{createOpenAI:i}=re("@ai-sdk/openai");return i({apiKey:r||process.env.OPENAI_API_KEY,...o&&{baseURL:o}})(s)}case "api/anthropic":{let{createAnthropic:i}=re("@ai-sdk/anthropic");return i({apiKey:r||process.env.ANTHROPIC_API_KEY,...o&&{baseURL:o}})(s)}case "api/google":{let{createGoogleGenerativeAI:i}=re("@ai-sdk/google");return i({apiKey:r||process.env.GOOGLE_API_KEY})(s)}default:throw new T(`Unsupported API provider: ${t}`,t)}}};});var Xo={};Bt(Xo,{registerApiProviders:()=>Jo});function Jo(n){Re("api",(e,t)=>{let r=n?.apiKeys?.[e];return new Nt({provider:t,model:"",apiKey:r,maxSteps:n?.defaults?.maxSteps,temperature:n?.defaults?.temperature})});}var mn=N(()=>{c();ve();gn();});var Ie,fn=N(()=>{c();Ie=class extends Error{constructor(t,r,o){super(t);this.code=r;this.data=o;}code;data;name="AcpProtocolError"};});var hd,wd,Yo,Qo,vd,tt,yr=N(()=>{c();fn();ve();Fr();nr();hd=-32e3,wd=2e3,Yo=3e4,Qo=1e4,vd=8*36e5,tt=class{constructor(e){this.options=e;}options;proc=null;sdkConnection=null;disposed=false;stderrBuffer="";collectedStderr="";pendingUpdateCallback=null;idleWatchdog=null;idleReject=null;idlePromise=null;authMethods=[];_initResponse=null;get initResponse(){return this._initResponse}async connect(e){if(this.disposed)throw new T("AcpConnection has been disposed","acp");let t=this.options.spawn,r=process.platform==="win32"&&(t.shellOnWindows??true),o=spawn(t.command,t.args,{stdio:["pipe","pipe","pipe"],env:{...process.env,...this.options.env??{}},cwd:this.options.cwd,shell:r,windowsHide:true,detached:process.platform!=="win32"});o.pid!==void 0&&this.options.onPid?.(o.pid),o.stderr.on("data",w=>{let v=w.toString();this.collectedStderr+=v,this.stderrBuffer+=v;let k=this.stderrBuffer.split(`
24
- `);this.stderrBuffer=k.pop()??"";for(let _ of k)_.trim()&&this.options.onStderr?.(_);}),this.proc=o;let s=this.options.idleMs??6e5;s>0&&(this.idlePromise=new Promise((w,v)=>{this.idleReject=v;}),this.idlePromise.catch(()=>{}),this.idleWatchdog=new lt({timeoutMs:s,onIdle:()=>{let w=Math.round(s/6e4),v=new We(`acp produced no output for ${w}m (idle timeout). Process killed. The CLI may be waiting on interactive input or stuck \u2014 check the prompt or retry.`,"acp");this.idleReject?.(v),this.dispose();}}),this.idleWatchdog.start()),o.stdin.on("error",w=>{w.code!=="EPIPE"&&this.options.onStderr?.(`ACP stdin error: ${w.message}`);});let i=new WritableStream({write:w=>new Promise((v,k)=>{o.stdin.write(w,_=>{_?k(_):v();});}),close:()=>{o.stdin.end();}}),a=new ReadableStream({start:w=>{o.stdout.on("data",v=>{this.idleWatchdog?.refresh(),w.enqueue(new Uint8Array(v));}),o.stdout.on("end",()=>{w.close();}),o.stdout.on("error",v=>{w.error(v);});}}),d=ndJsonStream(i,a),l=this,u=new ClientSideConnection(w=>({requestPermission:async v=>{if(l.options.configOptions?.allow_all!==void 0){let k=v.options;if(Array.isArray(k)&&k.length>0)return {outcome:{outcome:"selected",optionId:(k.find(x=>x.kind==="allow_once")??k.find(x=>x.kind?.startsWith("allow_"))??k[0]).optionId}}}return {outcome:{outcome:"cancelled"}}},sessionUpdate:async v=>{l.pendingUpdateCallback?.(v);}}),d);this.sdkConnection=u;let g=new Promise((w,v)=>{o.on("error",k=>{if(k.code==="ENOENT"){let x=t.command==="npx"&&t.args.length>0?`@agentclientprotocol/${t.args[0]}`:t.command;v(new T(`ACP command "${t.command}" not found. Is the ACP adapter installed? Try: npm install -g ${x}`,"acp"));}else v(new T(`ACP spawn error: ${k.message}`,"acp"));});}),f=this.doInitialize(u,e),m=new Promise((w,v)=>{setTimeout(()=>{v(new Ie(`ACP connect timeout after ${Yo}ms. The ACP adapter may not be installed or may require interactive setup.`));},Yo).unref();});await Promise.race([f,m,g]);}async doInitialize(e,t){let r=await e.initialize({protocolVersion:1,clientCapabilities:{auth:{}},clientInfo:{name:t?.name??"crewx-sdk",version:t?.version??"0.8.4"}});this._initResponse=r,this.authMethods=r.authMethods??[];}async newSession(e){if(!this.sdkConnection)throw new T("AcpConnection not connected. Call connect() first.","acp");try{return await this.newSessionWithTimeout(e)}catch(t){if(!this.isAuthError(t))throw t;return await this.tryAuthenticate(),this.newSessionWithTimeout(e)}}async newSessionWithTimeout(e){return (await this.newSessionRawTimeout(e)).sessionId}async newSessionRaw(e){if(!this.sdkConnection)throw new T("AcpConnection not connected. Call connect() first.","acp");try{return await this.newSessionRawTimeout(e)}catch(t){if(!this.isAuthError(t))throw t;return await this.tryAuthenticate(),this.newSessionRawTimeout(e)}}async newSessionRawTimeout(e){let t=this.sdkConnection.newSession(e),r=new Promise((o,s)=>{setTimeout(()=>{s(new Ie(`ACP session/new timeout after ${Qo}ms`));},Qo).unref();});return Promise.race([t,r])}isAuthError(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code===hd}async tryAuthenticate(){if(!this.sdkConnection)throw new T("AcpConnection not connected.","acp");let e=this.authMethods.find(r=>r.type==="env_var"&&this.hasEnvVarsFor(r));if(e){await this.sdkConnection.authenticate({methodId:e.id});return}let t=this.authMethods.map(r=>`${r.id} (${r.type??"agent"})`).join(", ");if(this.authMethods.length>0){let r=this.authMethods.filter(o=>o.type==="env_var");if(r.length>0){let o=r.flatMap(s=>(s.vars??[]).filter(i=>!i.optional&&!process.env[i.name]).map(i=>i.name));throw new Ie(`ACP authentication required. Missing environment variables: ${o.join(", ")}. Set them in your shell or crewx.yaml env block.`)}throw new Ie(`ACP authentication required but no supported method found. Available methods: ${t}. CrewX currently supports env_var authentication only.`)}throw new Ie("ACP agent requires authentication but advertised no auth methods.")}hasEnvVarsFor(e){return !e.vars||e.vars.length===0?true:e.vars.filter(t=>!t.optional).every(t=>!!process.env[t.name])}async setModel(e,t){if(!this.sdkConnection)throw new T("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.unstable_setSessionModel({sessionId:e,modelId:t});}async setMode(e,t){if(!this.sdkConnection)throw new T("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.setSessionMode({sessionId:e,modeId:t});}async setConfigOption(e,t,r){if(!this.sdkConnection)throw new T("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.setSessionConfigOption({sessionId:e,configId:t,value:r});}async prompt(e,t,r,o){if(!this.sdkConnection||!this.proc)throw new T("AcpConnection not connected. Call connect() first.","acp");this.pendingUpdateCallback=r??null;let s=this.sdkConnection,i=this.proc,a=o??vd,d=false,l=s.prompt({sessionId:e,prompt:t}).finally(()=>{d=true;}),u=new Promise((m,w)=>{setTimeout(()=>{s.cancel({sessionId:e}).catch(()=>{}),w(new Be(`ACP prompt timeout after ${a}ms`,"acp"));},a).unref();}),g=new Promise((m,w)=>{let v=(A,I,E)=>{if(d)return;let K=I!=null?`signal=${I}`:`code=${String(A)}`;w(new T(`ACP process terminated unexpectedly (${K}) [${E}]: ${this.collectedStderr.slice(-500)}`,"acp"));},k=(A,I)=>v(A,I,"exit"),_=(A,I)=>v(A,I,"close");i.once("exit",k),i.once("close",_);let x=()=>{i.off("exit",k),i.off("close",_);};l.then(x,x);}),f=[l,u,g];this.idlePromise&&f.push(this.idlePromise);try{return await Promise.race(f)}finally{this.pendingUpdateCallback=null;}}async dispose(){if(this.disposed)return;this.disposed=true,this.idleWatchdog?.stop(),this.pendingUpdateCallback=null,this.sdkConnection=null;let e=this.proc;if(!e)return;this.proc=null,this.stderrBuffer.trim()&&(this.options.onStderr?.(this.stderrBuffer),this.stderrBuffer="");let t=e.pid,r=o=>{if(t!==void 0&&process.platform!=="win32")try{process.kill(-t,o);}catch{}else try{e.kill(o);}catch{}};await new Promise(o=>{let s=()=>{clearTimeout(i),o();};e.once("close",s),e.once("error",s);try{r("SIGTERM");}catch{s();return}let i=setTimeout(()=>{r("SIGKILL");},wd);});}get isConnected(){return !this.disposed&&this.sdkConnection!==null&&this.proc!==null}};});function Zo(n,e){if(n!=null&&typeof n=="object"){let t=n;if(typeof t.command=="string")return t.command;if(typeof t.file_path=="string")return t.file_path;if(typeof t.filePath=="string")return t.filePath;if(typeof t.path=="string")return t.path;if(typeof t.query=="string")return t.query;if(typeof t.pattern=="string")return t.pattern;if(typeof t.url=="string")return t.url;if(Object.keys(t).length>0)return JSON.stringify(t)}if(e&&e.length>0)return e.map(t=>t.path).join(", ")}var _d,Dt,yn=N(()=>{c();Me();yr();_d={read:"Read",edit:"Edit",delete:"Delete",move:"Move",search:"Search",execute:"Bash",think:"Think",fetch:"WebFetch",switch_mode:"SwitchMode"};Dt=class{constructor(e,t,r){this.adapter=t;}adapter;async query(e,t){return this.runPrompt(e,t)}async execute(e,t){return this.runPrompt(e,t)}async dispose(){}async runPrompt(e,t){let{command:r,args:o}=this.adapter.spawn;t?.onCommand?.(`${r} ${o.join(" ")}`);let s=this.adapter.buildSpawnEnv?.(t?.model??""),i=s?{...t?.env,...s}:t?.env,a=new tt({spawn:this.adapter.spawn,env:i,cwd:t?.cwd,timeoutMs:t?.timeoutMs,idleMs:t?.idleMs,onPid:t?.onPid,onStderr:d=>t?.onOutput?.(d,"stderr"),configOptions:t?.configOptions});try{await a.connect(this.adapter.clientInfo);let d=this.adapter.buildSessionParams({cwd:t?.cwd,env:t?.env,model:t?.model,systemPrompt:t?.systemPrompt}),l=await a.newSession(d);await this.applySessionOptions(a,l,t);let u=this.composePrompt(e,t),g=[],f=await a.prompt(l,u,m=>this.handleUpdate(m,t,g),t?.timeoutMs);return this.handleUsage(f,t),g.join("")}finally{await a.dispose().catch(()=>{});}}async applySessionOptions(e,t,r){if(r?.model&&r.model!=="default"&&!this.adapter.buildSpawnEnv){let o=this.adapter.buildEffortAction?.(r.effort??"",r.model);try{o?.type==="set_model"?await e.setModel(t,o.modelId):await e.setModel(t,r.model);}catch(s){console.warn(`[acp] setModel(${r.model}) failed: ${s instanceof Error?s.message:String(s)}`);}}if(r?.mode){let o=this.adapter.resolveMode?.(r.mode)??r.mode;if(o)try{await e.setMode(t,o);}catch(s){console.warn(`[acp] setMode(${o}) failed: ${s instanceof Error?s.message:String(s)}`);}}if(r?.effort){let o=this.adapter.buildEffortAction?.(r.effort,r.model);if(o&&o.type==="set_config_option")try{await e.setConfigOption(t,o.configId,o.value);}catch(s){console.warn(`[acp] setConfigOption(${o.configId}) effort failed: ${s instanceof Error?s.message:String(s)}`);}}if(r?.configOptions)for(let[o,s]of Object.entries(r.configOptions))try{await e.setConfigOption(t,o,s);}catch(i){console.warn(`[acp] setConfigOption(${o}) failed, retrying: ${i instanceof Error?i.message:String(i)}`);try{await new Promise(a=>setTimeout(a,500)),await e.setConfigOption(t,o,s);}catch(a){console.warn(`[acp] setConfigOption(${o}) retry failed: ${a instanceof Error?a.message:String(a)}`);}}}composePrompt(e,t){let r=[];return t?.systemPrompt?.trim()&&(r.push(t.systemPrompt),r.push("---")),t?.context&&(r.push(t.context),r.push("---")),r.push(e),[{type:"text",text:r.join(`
23
+ ${e}`:e}async runProcess(e,t,r){try{return await go(this.adapter.command,e,this.providerStr,this.providerId,t,r,this.adapter)}catch(o){if(ji(this.providerId,o)){let s=e[0]==="copilot"?e:["copilot",...e];return go("gh",s,this.providerStr,this.providerId,t,r,this.adapter)}throw o}}handleResultMeta(e,t){if(!this.adapter.parseResultMeta){let i=Ui(e);i&&t?.onUsage&&t.onUsage(i);return}let{usage:r,model:o}=this.adapter.parseResultMeta(e);r&&t?.onUsage&&t.onUsage(r);let s=o??(this.providerId==="opencode"?t?.model??null:null);s&&t?.onModel&&t.onModel(s);}};});function dn(n){let e=n.update;if(e.sessionUpdate==="agent_message_chunk"){let t=e.content;if(t.type==="text"&&typeof t.text=="string")return t.text}return null}function ge(n,e){try{let t=JSON.parse(n);if(t!=null&&typeof t=="object"&&typeof t.type=="string"&&Ra.has(t.type)){let r=e??new Date().toISOString();return [{...t,timestamp:t.timestamp||r}]}}catch{}return []}var Ra,De=M(()=>{c();Ra=new Set(["text","tool_use","tool_result","error","running_instruction","agent_call"]);});var Yo,Qo,$t,yn=M(()=>{c();_e();Yo=10,Qo=50,$t=class{config;constructor(e){this.config=e;}async query(e,t){return this._run(e,"query",t)}async execute(e,t){return this._run(e,"execute",t)}async _run(e,t,r){let{generateText:o,tool:s}=await import('ai'),i=this.convertTools(r?.tools??[],s),a=this.createModel(r?.model),d=Math.min(r?.maxSteps??this.config.maxSteps??Yo,Qo);try{let l=0,u=await o({model:a,system:r?.systemPrompt??void 0,prompt:e,tools:i,maxSteps:d,...this.config.temperature!==void 0&&{temperature:this.config.temperature},...this.config.maxTokens!==void 0&&{maxTokens:this.config.maxTokens},onStepFinish:f=>{if(l++,!!r?.onOutput){if(f.toolCalls&&f.toolCalls.length>0)for(let m of f.toolCalls)r.onOutput(JSON.stringify({type:"assistant",message:{content:[{type:"tool_use",id:m.toolCallId,name:m.toolName,input:m.args}]}}),"stdout");if(f.toolResults&&f.toolResults.length>0)for(let m of f.toolResults){let w=typeof m.result=="string"?m.result:JSON.stringify(m.result);r.onOutput(JSON.stringify({type:"user",message:{content:[{type:"tool_result",tool_use_id:m.toolCallId,output:w,is_error:!1}]}}),"stdout");}}}}),g=new Set((r?.tools??[]).filter(f=>!f.execute).map(f=>f.name));if(u.finishReason==="tool-calls"&&Array.isArray(u.toolCalls)&&u.toolCalls.length>0){let f=u.toolCalls.filter(m=>g.has(m.toolName));if(f.length>0){let m=f[0];throw new pe({toolCallId:m.toolCallId,toolName:m.toolName,args:m.args},{userMessage:e,responseMessages:u.response?.messages??[],toolDefinitions:r?.tools??[],maxSteps:d,systemPrompt:r?.systemPrompt,modelOverride:r?.model})}}if(r?.onUsage&&u.usage){let f={inputTokens:u.usage.promptTokens??0,outputTokens:u.usage.completionTokens??0,cachedInputTokens:0,costUsd:0};r.onUsage(f);}return r?.onModel&&r.onModel(r.model??this.config.model),u.text??""}catch(l){throw l instanceof pe?l:l.status===401?new T(`Authentication failed for ${this.config.provider}. Check your API key.`,this.config.provider):l.status===429?new T(`Rate limit exceeded for ${this.config.provider}.`,this.config.provider):new T(`Provider error: ${l.message}`,this.config.provider)}}async continueWithToolResults(e,t,r){let{generateText:o,tool:s}=await import('ai'),i=this.convertTools(e.toolDefinitions,s),a=this.createModel(e.modelOverride),d=Math.min(e.maxSteps??this.config.maxSteps??Yo,Qo),l=[{role:"user",content:e.userMessage},...e.responseMessages,{role:"tool",content:t.map(u=>({type:"tool-result",toolCallId:u.toolCallId,toolName:u.toolName,result:typeof u.result=="string"?u.result:JSON.stringify(u.result)}))}];try{let u=await o({model:a,system:e.systemPrompt??void 0,messages:l,tools:i,maxSteps:d,...this.config.temperature!==void 0&&{temperature:this.config.temperature},...this.config.maxTokens!==void 0&&{maxTokens:this.config.maxTokens}}),g=new Set(e.toolDefinitions.filter(f=>!f.execute).map(f=>f.name));if(u.finishReason==="tool-calls"&&Array.isArray(u.toolCalls)&&u.toolCalls.length>0){let f=u.toolCalls.filter(m=>g.has(m.toolName));if(f.length>0){let m=f[0];throw new pe({toolCallId:m.toolCallId,toolName:m.toolName,args:m.args},{userMessage:e.userMessage,responseMessages:[...e.responseMessages,{role:"tool",content:t.map(w=>({type:"tool-result",toolCallId:w.toolCallId,toolName:w.toolName,result:typeof w.result=="string"?w.result:JSON.stringify(w.result)}))},...u.response?.messages??[]],toolDefinitions:e.toolDefinitions,maxSteps:e.maxSteps,systemPrompt:e.systemPrompt,modelOverride:e.modelOverride})}}return r?.onUsage&&u.usage&&r.onUsage({inputTokens:u.usage.promptTokens??0,outputTokens:u.usage.completionTokens??0,cachedInputTokens:0,costUsd:0}),r?.onModel&&r.onModel(e.modelOverride??this.config.model),u.text??""}catch(u){throw u instanceof pe?u:new T(`Provider error: ${u.message}`,this.config.provider)}}convertTools(e,t){let{z:r}=re("zod"),o={};for(let s of e){let i=this.jsonSchemaToZod(s.parameters??{},r);s.execute?o[s.name]=t({description:s.description,parameters:i,execute:async a=>s.execute(a)}):o[s.name]=t({description:s.description,parameters:i});}return o}jsonSchemaToZod(e,t){if(!e||!e.properties)return t.object({});let r={},o=e.properties,s=e.required??[];for(let[i,a]of Object.entries(o)){let d;switch(a.type){case "string":d=t.string();break;case "number":d=t.number();break;case "integer":d=t.number().int();break;case "boolean":d=t.boolean();break;case "array":d=t.array(t.any());break;default:d=t.any();}a.description&&(d=d.describe(a.description)),s.includes(i)||(d=d.optional()),r[i]=d;}return t.object(r)}createModel(e){let{provider:t,apiKey:r,baseURL:o}=this.config,s=e||this.config.model;switch(t){case "api/openrouter":{let{createOpenAI:i}=re("@ai-sdk/openai");return i({apiKey:r||process.env.OPENROUTER_API_KEY,baseURL:o||"https://openrouter.ai/api/v1"})(s)}case "api/openai":{let{createOpenAI:i}=re("@ai-sdk/openai");return i({apiKey:r||process.env.OPENAI_API_KEY,...o&&{baseURL:o}})(s)}case "api/anthropic":{let{createAnthropic:i}=re("@ai-sdk/anthropic");return i({apiKey:r||process.env.ANTHROPIC_API_KEY,...o&&{baseURL:o}})(s)}case "api/google":{let{createGoogleGenerativeAI:i}=re("@ai-sdk/google");return i({apiKey:r||process.env.GOOGLE_API_KEY})(s)}default:throw new T(`Unsupported API provider: ${t}`,t)}}};});var es={};Vt(es,{registerApiProviders:()=>Zo});function Zo(n){Pe("api",(e,t)=>{let r=n?.apiKeys?.[e];return new $t({provider:t,model:"",apiKey:r,maxSteps:n?.defaults?.maxSteps,temperature:n?.defaults?.temperature})});}var hn=M(()=>{c();_e();yn();});var Me,wn=M(()=>{c();Me=class extends Error{constructor(t,r,o){super(t);this.code=r;this.data=o;}code;data;name="AcpProtocolError"};});var Sd,bd,ts,rs,Id,st,wr=M(()=>{c();ht();wn();_e();Wr();sr();Sd=-32e3,bd=2e3,ts=3e4,rs=1e4,Id=8*36e5,st=class{constructor(e){this.options=e;}options;proc=null;sdkConnection=null;disposed=false;stderrBuffer="";collectedStderr="";pendingUpdateCallback=null;idleWatchdog=null;idleReject=null;idlePromise=null;authMethods=[];_initResponse=null;get initResponse(){return this._initResponse}async connect(e){if(this.disposed)throw new T("AcpConnection has been disposed","acp");let t=this.options.spawn,r=process.platform==="win32"&&(t.shellOnWindows??true),o={...process.env,...this.options.env??{}},s=this.options.cwd??process.cwd(),i;try{let _=ze({command:t.command,env:o,cwd:s,allowShellFallback:r});i=Ke(_,t.args);}catch(_){throw new T(_ instanceof Error?_.message:String(_),"acp")}let a=spawn(i.command,i.argv,{stdio:["pipe","pipe","pipe"],env:o,cwd:this.options.cwd,shell:i.shell??false,windowsHide:true,detached:process.platform!=="win32"});a.pid!==void 0&&this.options.onPid?.(a.pid),a.stderr.on("data",_=>{let x=_.toString();this.collectedStderr+=x,this.stderrBuffer+=x;let k=this.stderrBuffer.split(`
24
+ `);this.stderrBuffer=k.pop()??"";for(let I of k)I.trim()&&this.options.onStderr?.(I);}),this.proc=a;let d=this.options.idleMs??6e5;d>0&&(this.idlePromise=new Promise((_,x)=>{this.idleReject=x;}),this.idlePromise.catch(()=>{}),this.idleWatchdog=new gt({timeoutMs:d,onIdle:()=>{let _=Math.round(d/6e4),x=new Ve(`acp produced no output for ${_}m (idle timeout). Process killed. The CLI may be waiting on interactive input or stuck \u2014 check the prompt or retry.`,"acp");this.idleReject?.(x),this.dispose();}}),this.idleWatchdog.start()),a.stdin.on("error",_=>{_.code!=="EPIPE"&&this.options.onStderr?.(`ACP stdin error: ${_.message}`);});let l=new WritableStream({write:_=>new Promise((x,k)=>{a.stdin.write(_,I=>{I?k(I):x();});}),close:()=>{a.stdin.end();}}),u=new ReadableStream({start:_=>{a.stdout.on("data",x=>{this.idleWatchdog?.refresh(),_.enqueue(new Uint8Array(x));}),a.stdout.on("end",()=>{_.close();}),a.stdout.on("error",x=>{_.error(x);});}}),g=ndJsonStream(l,u),f=this,m=new ClientSideConnection(_=>({requestPermission:async x=>{if(f.options.configOptions?.allow_all!==void 0){let k=x.options;if(Array.isArray(k)&&k.length>0)return {outcome:{outcome:"selected",optionId:(k.find(A=>A.kind==="allow_once")??k.find(A=>A.kind?.startsWith("allow_"))??k[0]).optionId}}}return {outcome:{outcome:"cancelled"}}},sessionUpdate:async x=>{f.pendingUpdateCallback?.(x);}}),g);this.sdkConnection=m;let w=new Promise((_,x)=>{a.on("error",k=>{if(k.code==="ENOENT"){let A=t.command==="npx"&&t.args.length>0?`@agentclientprotocol/${t.args[0]}`:t.command;x(new T(`ACP command "${t.command}" not found. Is the ACP adapter installed? Try: npm install -g ${A}`,"acp"));}else x(new T(`ACP spawn error: ${k.message}`,"acp"));});}),v=this.doInitialize(m,e),E=new Promise((_,x)=>{setTimeout(()=>{x(new Me(`ACP connect timeout after ${ts}ms. The ACP adapter may not be installed or may require interactive setup.`));},ts).unref();});await Promise.race([v,E,w]);}async doInitialize(e,t){let r=await e.initialize({protocolVersion:1,clientCapabilities:{auth:{}},clientInfo:{name:t?.name??"crewx-sdk",version:t?.version??"0.8.4"}});this._initResponse=r,this.authMethods=r.authMethods??[];}async newSession(e){if(!this.sdkConnection)throw new T("AcpConnection not connected. Call connect() first.","acp");try{return await this.newSessionWithTimeout(e)}catch(t){if(!this.isAuthError(t))throw t;return await this.tryAuthenticate(),this.newSessionWithTimeout(e)}}async newSessionWithTimeout(e){return (await this.newSessionRawTimeout(e)).sessionId}async newSessionRaw(e){if(!this.sdkConnection)throw new T("AcpConnection not connected. Call connect() first.","acp");try{return await this.newSessionRawTimeout(e)}catch(t){if(!this.isAuthError(t))throw t;return await this.tryAuthenticate(),this.newSessionRawTimeout(e)}}async newSessionRawTimeout(e){let t=this.sdkConnection.newSession(e),r=new Promise((o,s)=>{setTimeout(()=>{s(new Me(`ACP session/new timeout after ${rs}ms`));},rs).unref();});return Promise.race([t,r])}isAuthError(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code===Sd}async tryAuthenticate(){if(!this.sdkConnection)throw new T("AcpConnection not connected.","acp");let e=this.authMethods.find(r=>r.type==="env_var"&&this.hasEnvVarsFor(r));if(e){await this.sdkConnection.authenticate({methodId:e.id});return}let t=this.authMethods.map(r=>`${r.id} (${r.type??"agent"})`).join(", ");if(this.authMethods.length>0){let r=this.authMethods.filter(o=>o.type==="env_var");if(r.length>0){let o=r.flatMap(s=>(s.vars??[]).filter(i=>!i.optional&&!process.env[i.name]).map(i=>i.name));throw new Me(`ACP authentication required. Missing environment variables: ${o.join(", ")}. Set them in your shell or crewx.yaml env block.`)}throw new Me(`ACP authentication required but no supported method found. Available methods: ${t}. CrewX currently supports env_var authentication only.`)}throw new Me("ACP agent requires authentication but advertised no auth methods.")}hasEnvVarsFor(e){return !e.vars||e.vars.length===0?true:e.vars.filter(t=>!t.optional).every(t=>!!process.env[t.name])}async setModel(e,t){if(!this.sdkConnection)throw new T("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.unstable_setSessionModel({sessionId:e,modelId:t});}async setMode(e,t){if(!this.sdkConnection)throw new T("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.setSessionMode({sessionId:e,modeId:t});}async setConfigOption(e,t,r){if(!this.sdkConnection)throw new T("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.setSessionConfigOption({sessionId:e,configId:t,value:r});}async prompt(e,t,r,o){if(!this.sdkConnection||!this.proc)throw new T("AcpConnection not connected. Call connect() first.","acp");this.pendingUpdateCallback=r??null;let s=this.sdkConnection,i=this.proc,a=o??Id,d=false,l=s.prompt({sessionId:e,prompt:t}).finally(()=>{d=true;}),u=new Promise((m,w)=>{setTimeout(()=>{s.cancel({sessionId:e}).catch(()=>{}),w(new Ge(`ACP prompt timeout after ${a}ms`,"acp"));},a).unref();}),g=new Promise((m,w)=>{let v=(k,I,A)=>{if(d)return;let F=I!=null?`signal=${I}`:`code=${String(k)}`;w(new T(`ACP process terminated unexpectedly (${F}) [${A}]: ${this.collectedStderr.slice(-500)}`,"acp"));},E=(k,I)=>v(k,I,"exit"),_=(k,I)=>v(k,I,"close");i.once("exit",E),i.once("close",_);let x=()=>{i.off("exit",E),i.off("close",_);};l.then(x,x);}),f=[l,u,g];this.idlePromise&&f.push(this.idlePromise);try{return await Promise.race(f)}finally{this.pendingUpdateCallback=null;}}async dispose(){if(this.disposed)return;this.disposed=true,this.idleWatchdog?.stop(),this.pendingUpdateCallback=null,this.sdkConnection=null;let e=this.proc;if(!e)return;this.proc=null,this.stderrBuffer.trim()&&(this.options.onStderr?.(this.stderrBuffer),this.stderrBuffer="");let t=e.pid,r=o=>{if(t!==void 0&&process.platform!=="win32")try{process.kill(-t,o);}catch{}else try{e.kill(o);}catch{}};await new Promise(o=>{let s=()=>{clearTimeout(i),o();};e.once("close",s),e.once("error",s);try{r("SIGTERM");}catch{s();return}let i=setTimeout(()=>{r("SIGKILL");},bd);});}get isConnected(){return !this.disposed&&this.sdkConnection!==null&&this.proc!==null}};});function ns(n,e){if(n!=null&&typeof n=="object"){let t=n;if(typeof t.command=="string")return t.command;if(typeof t.file_path=="string")return t.file_path;if(typeof t.filePath=="string")return t.filePath;if(typeof t.path=="string")return t.path;if(typeof t.query=="string")return t.query;if(typeof t.pattern=="string")return t.pattern;if(typeof t.url=="string")return t.url;if(Object.keys(t).length>0)return JSON.stringify(t)}if(e&&e.length>0)return e.map(t=>t.path).join(", ")}var Od,Ut,vn=M(()=>{c();De();wr();Od={read:"Read",edit:"Edit",delete:"Delete",move:"Move",search:"Search",execute:"Bash",think:"Think",fetch:"WebFetch",switch_mode:"SwitchMode"};Ut=class{constructor(e,t,r){this.adapter=t;}adapter;async query(e,t){return this.runPrompt(e,t)}async execute(e,t){return this.runPrompt(e,t)}async dispose(){}async runPrompt(e,t){let{command:r,args:o}=this.adapter.spawn;t?.onCommand?.(`${r} ${o.join(" ")}`);let s=this.adapter.buildSpawnEnv?.(t?.model??""),i=s?{...t?.env,...s}:t?.env,a=new st({spawn:this.adapter.spawn,env:i,cwd:t?.cwd,timeoutMs:t?.timeoutMs,idleMs:t?.idleMs,onPid:t?.onPid,onStderr:d=>t?.onOutput?.(d,"stderr"),configOptions:t?.configOptions});try{await a.connect(this.adapter.clientInfo);let d=this.adapter.buildSessionParams({cwd:t?.cwd,env:t?.env,model:t?.model,systemPrompt:t?.systemPrompt}),l=await a.newSession(d);await this.applySessionOptions(a,l,t);let u=this.composePrompt(e,t),g=[],f=await a.prompt(l,u,m=>this.handleUpdate(m,t,g),t?.timeoutMs);return this.handleUsage(f,t),g.join("")}finally{await a.dispose().catch(()=>{});}}async applySessionOptions(e,t,r){if(r?.model&&r.model!=="default"&&!this.adapter.buildSpawnEnv){let o=this.adapter.buildEffortAction?.(r.effort??"",r.model);try{o?.type==="set_model"?await e.setModel(t,o.modelId):await e.setModel(t,r.model);}catch(s){console.warn(`[acp] setModel(${r.model}) failed: ${s instanceof Error?s.message:String(s)}`);}}if(r?.mode){let o=this.adapter.resolveMode?.(r.mode)??r.mode;if(o)try{await e.setMode(t,o);}catch(s){console.warn(`[acp] setMode(${o}) failed: ${s instanceof Error?s.message:String(s)}`);}}if(r?.effort){let o=this.adapter.buildEffortAction?.(r.effort,r.model);if(o&&o.type==="set_config_option")try{await e.setConfigOption(t,o.configId,o.value);}catch(s){console.warn(`[acp] setConfigOption(${o.configId}) effort failed: ${s instanceof Error?s.message:String(s)}`);}}if(r?.configOptions)for(let[o,s]of Object.entries(r.configOptions))try{await e.setConfigOption(t,o,s);}catch(i){console.warn(`[acp] setConfigOption(${o}) failed, retrying: ${i instanceof Error?i.message:String(i)}`);try{await new Promise(a=>setTimeout(a,500)),await e.setConfigOption(t,o,s);}catch(a){console.warn(`[acp] setConfigOption(${o}) retry failed: ${a instanceof Error?a.message:String(a)}`);}}}composePrompt(e,t){let r=[];return t?.systemPrompt?.trim()&&(r.push(t.systemPrompt),r.push("---")),t?.context&&(r.push(t.context),r.push("---")),r.push(e),[{type:"text",text:r.join(`
25
25
 
26
- `)}]}handleUpdate(e,t,r){let o=e.update;if(o.sessionUpdate==="agent_message_chunk"){let s=null;this.adapter.extractTextFromUpdate?s=this.adapter.extractTextFromUpdate(e):s=on(e),s!==null&&(r.push(s),t?.onOutput?.(s,"stdout"));}else if(o.sessionUpdate==="tool_call"){this.pushBlockBoundary(r);let s=new Date().toISOString(),i=o,a={title:i.title??"",kind:i.kind,rawInput:i.rawInput,rawOutput:i.rawOutput,locations:i.locations,_meta:i._meta},d=this.resolveToolCall(a),l={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:d.toolName,toolInput:d.toolInput};t?.onTaskLog?.([l]);}else if(o.sessionUpdate==="tool_call_update"){let s=new Date().toISOString(),i=o;if(i.status==="completed"||i.status==="failed"){let d=this.extractResultPreview(i.rawOutput),l={timestamp:s,type:"tool_result",toolUseId:i.toolCallId,resultPreview:d,isError:i.status==="failed"};t?.onTaskLog?.([l]);}else if(i.rawInput!=null&&typeof i.rawInput=="object"&&Object.keys(i.rawInput).length>0){this.pushBlockBoundary(r);let d={title:i.title??"",kind:i.kind,rawInput:i.rawInput,rawOutput:i.rawOutput,locations:i.locations,_meta:i._meta},l=this.resolveToolCall(d),u={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:l.toolName,toolInput:l.toolInput};t?.onTaskLog?.([u]);}}else o.sessionUpdate;}pushBlockBoundary(e){e.length===0||e[e.length-1].endsWith(`
26
+ `)}]}handleUpdate(e,t,r){let o=e.update;if(o.sessionUpdate==="agent_message_chunk"){let s=null;this.adapter.extractTextFromUpdate?s=this.adapter.extractTextFromUpdate(e):s=dn(e),s!==null&&(r.push(s),t?.onOutput?.(s,"stdout"));}else if(o.sessionUpdate==="tool_call"){this.pushBlockBoundary(r);let s=new Date().toISOString(),i=o,a={title:i.title??"",kind:i.kind,rawInput:i.rawInput,rawOutput:i.rawOutput,locations:i.locations,_meta:i._meta},d=this.resolveToolCall(a),l={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:d.toolName,toolInput:d.toolInput};t?.onTaskLog?.([l]);}else if(o.sessionUpdate==="tool_call_update"){let s=new Date().toISOString(),i=o;if(i.status==="completed"||i.status==="failed"){let d=this.extractResultPreview(i.rawOutput),l={timestamp:s,type:"tool_result",toolUseId:i.toolCallId,resultPreview:d,isError:i.status==="failed"};t?.onTaskLog?.([l]);}else if(i.rawInput!=null&&typeof i.rawInput=="object"&&Object.keys(i.rawInput).length>0){this.pushBlockBoundary(r);let d={title:i.title??"",kind:i.kind,rawInput:i.rawInput,rawOutput:i.rawOutput,locations:i.locations,_meta:i._meta},l=this.resolveToolCall(d),u={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:l.toolName,toolInput:l.toolInput};t?.onTaskLog?.([u]);}}else o.sessionUpdate;}pushBlockBoundary(e){e.length===0||e[e.length-1].endsWith(`
27
27
 
28
28
  `)||e.push(`
29
29
 
30
- `);}resolveToolCall(e){let t=e._meta;if(t?.claudeCode?.toolName)return {toolName:t.claudeCode.toolName,toolInput:Zo(e.rawInput,e.locations)??(e.title||void 0)};if(this.adapter.parseToolCall){let s=this.adapter.parseToolCall(e);if(s)return {toolName:s.toolName??e.title??"unknown",toolInput:s.toolInput}}let r=_d[e.kind??""]??e.title??"unknown",o=Zo(e.rawInput,e.locations)??(e.title||void 0);return {toolName:r,toolInput:o}}extractResultPreview(e){if(e!=null){if(typeof e=="string")return e;if(Array.isArray(e)){let t=e.filter(r=>r!=null&&typeof r=="object"&&r.type==="text"&&typeof r.text=="string").map(r=>r.text);if(t.length>0)return t.join(`
31
- `)}if(typeof e=="object"){let t=e;if(typeof t.formatted_output=="string")return t.formatted_output;if(typeof t.content=="string")return t.content;if(Array.isArray(t.content)){let r=this.extractResultPreview(t.content);if(r)return r}if(typeof t.output=="string")return t.output;if(typeof t.text=="string")return t.text;if(typeof t.message=="string")return t.message;if(t.result!=null){let r=this.extractResultPreview(t.result);if(r)return r}if(t.error!=null){let r=this.extractResultPreview(t.error);if(r)return r}}return JSON.stringify(e)}}handleUsage(e,t){if(!t?.onUsage)return;if(this.adapter.extractUsage){let o=this.adapter.extractUsage(e);if(o){t.onUsage(o);return}}let r=e.usage;r&&t.onUsage({inputTokens:r.inputTokens??0,outputTokens:r.outputTokens??0,cachedInputTokens:r.cachedReadTokens??0,costUsd:0});}};});var hr,hn=N(()=>{c();Me();hr={spawn:{command:"npx",args:["-y","@agentclientprotocol/claude-agent-acp"],shellOnWindows:true},npmPackage:"@agentclientprotocol/claude-agent-acp",clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Claude",defaultMode:"default"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},extractUsage(n){let e=n.usage;return e?{inputTokens:(e.inputTokens??0)+(e.cachedReadTokens??0),outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"bypassPermissions",buildEffortAction(n){return n?{type:"set_config_option",configId:"effort",value:n}:null},buildSpawnEnv(n){if(!(!n||n==="default"))return {ANTHROPIC_MODEL:n}},resolveMode(n){return {yolo:"bypassPermissions"}[n]??n},parseEvent:pe};});var wr,wn=N(()=>{c();Me();wr={spawn:{command:"npx",args:["-y","@agentclientprotocol/codex-acp"],shellOnWindows:true},npmPackage:"@agentclientprotocol/codex-acp",clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Codex",defaultMode:"agent"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},extractUsage(n){let e=n.usage;return e?{inputTokens:(e.inputTokens??0)+(e.cachedReadTokens??0),outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"agent-full-access",buildEffortAction(n,e){if(!e)return null;let t=e.match(/^(.+?)\[([^\]]+)\]$/),r=t?t[1]:e,o=t?t[2]:void 0;return {type:"set_model",modelId:`${r}[${n||o||"medium"}]`}},resolveMode(n){return {yolo:"agent-full-access",default:"agent",plan:"read-only"}[n]??n},parseEvent:pe};});var pt,vr,vn=N(()=>{c();Me();pt="https://agentclientprotocol.com/protocol/session-modes",vr={spawn:{command:"copilot",args:["--acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"GitHub Copilot"},buildSessionParams(n){return {cwd:n.cwd?resolve(n.cwd):process.cwd(),mcpServers:[]}},yoloModeId:`${pt}#autopilot`,buildEffortAction(n){return n?{type:"set_config_option",configId:"reasoning_effort",value:n}:null},resolveMode(n){return n.startsWith("https://")?n:{yolo:`${pt}#autopilot`,default:`${pt}#agent`,agent:`${pt}#agent`,plan:`${pt}#plan`,autopilot:`${pt}#autopilot`}[n]??null},parseEvent:pe};});var _r,_n=N(()=>{c();Me();_r={spawn:{command:"opencode",args:["acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"OpenCode"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},yoloModeId:void 0,buildEffortAction(n){return null},resolveMode(n){let e={default:"build"};return n==="yolo"?null:e[n]??n},parseEvent:pe};});var rt,xr=N(()=>{c();hn();wn();vn();_n();hn();wn();vn();_n();rt={codex:wr,claude:hr,opencode:_r,copilot:vr};});var ts={};Bt(ts,{registerAcpProviders:()=>es});function es(n){if(n){Re("acp",n);return}Re("acp",(e,t)=>{let r=rt[e];if(!r)throw new T(`Unknown ACP provider id: "${e}". Supported: ${Object.keys(rt).join(", ")}`,t);return new Dt(e,r,t)});}var xn=N(()=>{c();ve();yn();xr();ve();});function kd(n){if(!n)return n;let e=n.trim().replace(/\/+$/,"");return e.toLowerCase().endsWith("/mcp")?e.slice(0,-4):e}var Lt,kn=N(()=>{c();Lt=class{endpoint;headers;timeoutMs;constructor(e){let t=kd(e.url);this.endpoint=`${t}/mcp`,this.headers={"Content-Type":"application/json",...e.headers??{}},e.apiKey&&(this.headers.Authorization=`Bearer ${e.apiKey}`),this.timeoutMs=e.timeoutMs??3e4;}async send(e){let t=new AbortController,r=setTimeout(()=>t.abort(),this.timeoutMs);try{let o=await fetch(this.endpoint,{method:"POST",headers:this.headers,body:JSON.stringify(e),signal:t.signal});if(clearTimeout(r),!o.ok){let a=await o.text();throw new Error(`HTTP ${o.status}: ${o.statusText}${a?` - ${a}`:""}`)}let s=o.headers.get("content-type");if(s?.includes("application/json"))return await o.json();let i=await o.text();return {jsonrpc:"2.0",id:e.id,error:{code:-32600,message:`Unexpected response content-type: ${s}`,data:i}}}catch(o){throw clearTimeout(r),o instanceof Error&&o.name==="AbortError"?new Error(`MCP-HTTP request timeout after ${this.timeoutMs}ms to ${this.endpoint}`):o}}async close(){}};});var $t,An=N(()=>{c();kn();$t=class{logger;configs=new Map;transports=new Map;constructor(e={}){this.logger=e.logger??(()=>{});}loadConfig(e,t){this.validateConfig(t),this.configs.set(e,t),this.transports.set(e,new Lt({url:t.url,apiKey:t.apiKey,headers:t.headers,timeoutMs:t.timeoutMs})),this.logger(`Loaded remote agent config for: ${e}`,"debug");}loadConfigWithTransport(e,t,r){this.validateConfig(t),this.configs.set(e,t),this.transports.set(e,r),this.logger(`Loaded remote agent config for: ${e} (custom transport)`,"debug");}getConfig(e){return this.configs.get(e)}isRemoteAgent(e){return this.configs.has(e)}getRemoteAgentIds(){return Array.from(this.configs.keys())}async query(e,t){let r=this.requireConfig(e),o=r.tools?.query??"crewx_queryAgent",i={agentId:r.agentId??e,query:t.query};t.context&&(i.context=t.context),t.model&&(i.model=t.model),t.platform&&(i.platform=t.platform),t.messages?.length&&(i.messages=t.messages);try{let a=await this.callRemoteTool(e,o,i);return this.normalizeResponse(a)}catch(a){let d=a instanceof Error?a.message:String(a);throw this.logger(`Remote query failed for agent ${e}: ${d}`,"error"),a}}async execute(e,t){let r=this.requireConfig(e),o=r.tools?.execute??"crewx_executeAgent",i={agentId:r.agentId??e,task:t.task};t.context&&(i.context=t.context),t.model&&(i.model=t.model),t.platform&&(i.platform=t.platform),t.messages?.length&&(i.messages=t.messages);try{let a=await this.callRemoteTool(e,o,i);return this.normalizeResponse(a)}catch(a){let d=a instanceof Error?a.message:String(a);throw this.logger(`Remote execute failed for agent ${e}: ${d}`,"error"),a}}mapToolNames(e,t){let r=this.requireConfig(e);r.tools={query:t.query??r.tools?.query??"crewx_queryAgent",execute:t.execute??r.tools?.execute??"crewx_executeAgent"},this.logger(`Updated tool name mapping for agent ${e}`,"debug");}async clearConfigs(){for(let e of this.transports.values())await e.close();this.configs.clear(),this.transports.clear(),this.logger("Cleared all remote agent configurations","debug");}requireConfig(e){let t=this.configs.get(e);if(!t)throw new Error(`Agent ${e} is not configured as a remote agent`);return t}async callRemoteTool(e,t,r){let o=this.transports.get(e);if(!o)throw new Error(`No transport available for agent ${e}`);let s={jsonrpc:"2.0",id:`${t}-${Date.now()}`,method:"tools/call",params:{name:t,arguments:r}};this.logger(`Calling remote MCP tool ${t} for agent ${e}`,"debug");let i=await o.send(s);if(i.error)throw new Error(i.error.message||"MCP server returned an error");return i.result}normalizeResponse(e){if(!e)return {success:false,content:[{type:"text",text:"Remote agent returned no response."}]};let t=e;if(Array.isArray(t.content)&&t.content.length>0)return t;let r=t.response??t.implementation??t.message??t.output,o=typeof r=="string"?r:JSON.stringify(r??e,null,2);return {...t,content:[{type:"text",text:o}]}}validateConfig(e){if(!e.url)throw new Error("Remote agent configuration requires a URL");if(!e.url.startsWith("http://")&&!e.url.startsWith("https://"))throw new Error("Remote agent URL must start with http:// or https://");if(e.type!=="mcp-http")throw new Error(`Unsupported remote agent type: ${e.type}`)}};});var ns={};Bt(ns,{RemoteProviderRuntime:()=>Ut,createRemoteProviderFactory:()=>rs,resolveFileRemoteAgent:()=>bd});function Td(n){let e=readFileSync(n,"utf-8"),t=load(e);return {agents:Array.isArray(t?.agents)?t.agents:void 0}}function Sd(n){let e=Array.isArray(n.provider)?n.provider[0]:n.provider;return e||(Array.isArray(n.inline?.provider)?n.inline.provider[0]:n.inline?.provider)}function bd(n,e=Td,t=existsSync){let r=n.location.replace("file://","");if(!t(r))throw new Error(`Remote config file not found: ${r}`);if(!n.external_agent_id)throw new Error(`external_agent_id is required for file:// remote provider "${n.id}"`);let s=e(r).agents?.find(d=>d.id===n.external_agent_id);if(!s)throw new Error(`Agent "${n.external_agent_id}" not found in ${r}`);let i=Sd(s);if(!i)throw new Error(`Agent "${n.external_agent_id}" in ${r} has no provider configured`);if(i.startsWith("remote/"))throw new Error(`Chained remotes not allowed: ${n.id} \u2192 ${i}`);let a=resolve(dirname(r),s.working_directory??".");return {agent:{...s,working_directory:a},provider:i}}function rs(n,e=Ce){return (t,r)=>{let o=n.get(t);if(!o)throw new Error(`Remote provider "${t}" not found. Available: ${Array.from(n.keys()).join(", ")||"(none)"}`);if(o.location.startsWith("file://"))throw new Error(`Remote provider "${t}" uses file:// location which is not supported at the SDK level. Use the CLI commands (crewx query / crewx execute) which handle file:// remotes automatically.`);return new Ut(t,o,e)}}function Id(n,e){let t=e.location;if(!t)throw new Error("Remote provider config requires a location");if(!t.startsWith("http://")&&!t.startsWith("https://"))throw new Error(`Unsupported remote location protocol for MCP-HTTP: ${t}`);return {type:"mcp-http",url:t,apiKey:e.apiKey,headers:e.headers,timeoutMs:e.timeout?.query??3e4,agentId:e.external_agent_id??n}}var Ut,En=N(()=>{c();ve();An();Ut=class{manager;agentId;constructor(e,t,r=Ce){this.agentId=t.external_agent_id??e,this.manager=new $t;let o=Id(e,t);this.manager.loadConfig(this.agentId,o);}async query(e,t){return (await this.manager.query(this.agentId,{agentId:this.agentId,query:e,model:t?.model,context:t?.context??t?.systemPrompt})).content.map(o=>o.text).join(`
30
+ `);}resolveToolCall(e){let t=e._meta;if(t?.claudeCode?.toolName)return {toolName:t.claudeCode.toolName,toolInput:ns(e.rawInput,e.locations)??(e.title||void 0)};if(this.adapter.parseToolCall){let s=this.adapter.parseToolCall(e);if(s)return {toolName:s.toolName??e.title??"unknown",toolInput:s.toolInput}}let r=Od[e.kind??""]??e.title??"unknown",o=ns(e.rawInput,e.locations)??(e.title||void 0);return {toolName:r,toolInput:o}}extractResultPreview(e){if(e!=null){if(typeof e=="string")return e;if(Array.isArray(e)){let t=e.filter(r=>r!=null&&typeof r=="object"&&r.type==="text"&&typeof r.text=="string").map(r=>r.text);if(t.length>0)return t.join(`
31
+ `)}if(typeof e=="object"){let t=e;if(typeof t.formatted_output=="string")return t.formatted_output;if(typeof t.content=="string")return t.content;if(Array.isArray(t.content)){let r=this.extractResultPreview(t.content);if(r)return r}if(typeof t.output=="string")return t.output;if(typeof t.text=="string")return t.text;if(typeof t.message=="string")return t.message;if(t.result!=null){let r=this.extractResultPreview(t.result);if(r)return r}if(t.error!=null){let r=this.extractResultPreview(t.error);if(r)return r}}return JSON.stringify(e)}}handleUsage(e,t){if(!t?.onUsage)return;if(this.adapter.extractUsage){let o=this.adapter.extractUsage(e);if(o){t.onUsage(o);return}}let r=e.usage;r&&t.onUsage({inputTokens:r.inputTokens??0,outputTokens:r.outputTokens??0,cachedInputTokens:r.cachedReadTokens??0,costUsd:0});}};});var vr,_n=M(()=>{c();De();vr={spawn:{command:"npx",args:["-y","@agentclientprotocol/claude-agent-acp"],shellOnWindows:true},npmPackage:"@agentclientprotocol/claude-agent-acp",clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Claude",defaultMode:"default"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},extractUsage(n){let e=n.usage;return e?{inputTokens:(e.inputTokens??0)+(e.cachedReadTokens??0),outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"bypassPermissions",buildEffortAction(n){return n?{type:"set_config_option",configId:"effort",value:n}:null},buildSpawnEnv(n){if(!(!n||n==="default"))return {ANTHROPIC_MODEL:n}},resolveMode(n){return {yolo:"bypassPermissions"}[n]??n},parseEvent:ge};});var _r,xn=M(()=>{c();De();_r={spawn:{command:"npx",args:["-y","@agentclientprotocol/codex-acp"],shellOnWindows:true},npmPackage:"@agentclientprotocol/codex-acp",clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Codex",defaultMode:"agent"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},extractUsage(n){let e=n.usage;return e?{inputTokens:(e.inputTokens??0)+(e.cachedReadTokens??0),outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"agent-full-access",buildEffortAction(n,e){if(!e)return null;let t=e.match(/^(.+?)\[([^\]]+)\]$/),r=t?t[1]:e,o=t?t[2]:void 0;return {type:"set_model",modelId:`${r}[${n||o||"medium"}]`}},resolveMode(n){return {yolo:"agent-full-access",default:"agent",plan:"read-only"}[n]??n},parseEvent:ge};});var yt,xr,kn=M(()=>{c();De();yt="https://agentclientprotocol.com/protocol/session-modes",xr={spawn:{command:"copilot",args:["--acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"GitHub Copilot"},buildSessionParams(n){return {cwd:n.cwd?resolve(n.cwd):process.cwd(),mcpServers:[]}},yoloModeId:`${yt}#autopilot`,buildEffortAction(n){return n?{type:"set_config_option",configId:"reasoning_effort",value:n}:null},resolveMode(n){return n.startsWith("https://")?n:{yolo:`${yt}#autopilot`,default:`${yt}#agent`,agent:`${yt}#agent`,plan:`${yt}#plan`,autopilot:`${yt}#autopilot`}[n]??null},parseEvent:ge};});var kr,An=M(()=>{c();De();kr={spawn:{command:"opencode",args:["acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"OpenCode"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},yoloModeId:void 0,buildEffortAction(n){return null},resolveMode(n){let e={default:"build"};return n==="yolo"?null:e[n]??n},parseEvent:ge};});var it,Ar=M(()=>{c();_n();xn();kn();An();_n();xn();kn();An();it={codex:_r,claude:vr,opencode:kr,copilot:xr};});var ss={};Vt(ss,{registerAcpProviders:()=>os});function os(n){if(n){Pe("acp",n);return}Pe("acp",(e,t)=>{let r=it[e];if(!r)throw new T(`Unknown ACP provider id: "${e}". Supported: ${Object.keys(it).join(", ")}`,t);return new Ut(e,r,t)});}var En=M(()=>{c();_e();vn();Ar();_e();});function Nd(n){if(!n)return n;let e=n.trim().replace(/\/+$/,"");return e.toLowerCase().endsWith("/mcp")?e.slice(0,-4):e}var jt,Rn=M(()=>{c();jt=class{endpoint;headers;timeoutMs;constructor(e){let t=Nd(e.url);this.endpoint=`${t}/mcp`,this.headers={"Content-Type":"application/json",...e.headers??{}},e.apiKey&&(this.headers.Authorization=`Bearer ${e.apiKey}`),this.timeoutMs=e.timeoutMs??3e4;}async send(e){let t=new AbortController,r=setTimeout(()=>t.abort(),this.timeoutMs);try{let o=await fetch(this.endpoint,{method:"POST",headers:this.headers,body:JSON.stringify(e),signal:t.signal});if(clearTimeout(r),!o.ok){let a=await o.text();throw new Error(`HTTP ${o.status}: ${o.statusText}${a?` - ${a}`:""}`)}let s=o.headers.get("content-type");if(s?.includes("application/json"))return await o.json();let i=await o.text();return {jsonrpc:"2.0",id:e.id,error:{code:-32600,message:`Unexpected response content-type: ${s}`,data:i}}}catch(o){throw clearTimeout(r),o instanceof Error&&o.name==="AbortError"?new Error(`MCP-HTTP request timeout after ${this.timeoutMs}ms to ${this.endpoint}`):o}}async close(){}};});var Ft,Cn=M(()=>{c();Rn();Ft=class{logger;configs=new Map;transports=new Map;constructor(e={}){this.logger=e.logger??(()=>{});}loadConfig(e,t){this.validateConfig(t),this.configs.set(e,t),this.transports.set(e,new jt({url:t.url,apiKey:t.apiKey,headers:t.headers,timeoutMs:t.timeoutMs})),this.logger(`Loaded remote agent config for: ${e}`,"debug");}loadConfigWithTransport(e,t,r){this.validateConfig(t),this.configs.set(e,t),this.transports.set(e,r),this.logger(`Loaded remote agent config for: ${e} (custom transport)`,"debug");}getConfig(e){return this.configs.get(e)}isRemoteAgent(e){return this.configs.has(e)}getRemoteAgentIds(){return Array.from(this.configs.keys())}async query(e,t){let r=this.requireConfig(e),o=r.tools?.query??"crewx_queryAgent",i={agentId:r.agentId??e,query:t.query};t.context&&(i.context=t.context),t.model&&(i.model=t.model),t.platform&&(i.platform=t.platform),t.messages?.length&&(i.messages=t.messages);try{let a=await this.callRemoteTool(e,o,i);return this.normalizeResponse(a)}catch(a){let d=a instanceof Error?a.message:String(a);throw this.logger(`Remote query failed for agent ${e}: ${d}`,"error"),a}}async execute(e,t){let r=this.requireConfig(e),o=r.tools?.execute??"crewx_executeAgent",i={agentId:r.agentId??e,task:t.task};t.context&&(i.context=t.context),t.model&&(i.model=t.model),t.platform&&(i.platform=t.platform),t.messages?.length&&(i.messages=t.messages);try{let a=await this.callRemoteTool(e,o,i);return this.normalizeResponse(a)}catch(a){let d=a instanceof Error?a.message:String(a);throw this.logger(`Remote execute failed for agent ${e}: ${d}`,"error"),a}}mapToolNames(e,t){let r=this.requireConfig(e);r.tools={query:t.query??r.tools?.query??"crewx_queryAgent",execute:t.execute??r.tools?.execute??"crewx_executeAgent"},this.logger(`Updated tool name mapping for agent ${e}`,"debug");}async clearConfigs(){for(let e of this.transports.values())await e.close();this.configs.clear(),this.transports.clear(),this.logger("Cleared all remote agent configurations","debug");}requireConfig(e){let t=this.configs.get(e);if(!t)throw new Error(`Agent ${e} is not configured as a remote agent`);return t}async callRemoteTool(e,t,r){let o=this.transports.get(e);if(!o)throw new Error(`No transport available for agent ${e}`);let s={jsonrpc:"2.0",id:`${t}-${Date.now()}`,method:"tools/call",params:{name:t,arguments:r}};this.logger(`Calling remote MCP tool ${t} for agent ${e}`,"debug");let i=await o.send(s);if(i.error)throw new Error(i.error.message||"MCP server returned an error");return i.result}normalizeResponse(e){if(!e)return {success:false,content:[{type:"text",text:"Remote agent returned no response."}]};let t=e;if(Array.isArray(t.content)&&t.content.length>0)return t;let r=t.response??t.implementation??t.message??t.output,o=typeof r=="string"?r:JSON.stringify(r??e,null,2);return {...t,content:[{type:"text",text:o}]}}validateConfig(e){if(!e.url)throw new Error("Remote agent configuration requires a URL");if(!e.url.startsWith("http://")&&!e.url.startsWith("https://"))throw new Error("Remote agent URL must start with http:// or https://");if(e.type!=="mcp-http")throw new Error(`Unsupported remote agent type: ${e.type}`)}};});var as={};Vt(as,{RemoteProviderRuntime:()=>Ht,createRemoteProviderFactory:()=>is,resolveFileRemoteAgent:()=>qd});function Fd(n){let e=readFileSync(n,"utf-8"),t=load(e);return {agents:Array.isArray(t?.agents)?t.agents:void 0}}function Hd(n){let e=Array.isArray(n.provider)?n.provider[0]:n.provider;return e||(Array.isArray(n.inline?.provider)?n.inline.provider[0]:n.inline?.provider)}function qd(n,e=Fd,t=existsSync){let r=n.location.replace("file://","");if(!t(r))throw new Error(`Remote config file not found: ${r}`);if(!n.external_agent_id)throw new Error(`external_agent_id is required for file:// remote provider "${n.id}"`);let s=e(r).agents?.find(d=>d.id===n.external_agent_id);if(!s)throw new Error(`Agent "${n.external_agent_id}" not found in ${r}`);let i=Hd(s);if(!i)throw new Error(`Agent "${n.external_agent_id}" in ${r} has no provider configured`);if(i.startsWith("remote/"))throw new Error(`Chained remotes not allowed: ${n.id} \u2192 ${i}`);let a=resolve(dirname(r),s.working_directory??".");return {agent:{...s,working_directory:a},provider:i}}function is(n,e=Te){return (t,r)=>{let o=n.get(t);if(!o)throw new Error(`Remote provider "${t}" not found. Available: ${Array.from(n.keys()).join(", ")||"(none)"}`);if(o.location.startsWith("file://"))throw new Error(`Remote provider "${t}" uses file:// location which is not supported at the SDK level. Use the CLI commands (crewx query / crewx execute) which handle file:// remotes automatically.`);return new Ht(t,o,e)}}function Wd(n,e){let t=e.location;if(!t)throw new Error("Remote provider config requires a location");if(!t.startsWith("http://")&&!t.startsWith("https://"))throw new Error(`Unsupported remote location protocol for MCP-HTTP: ${t}`);return {type:"mcp-http",url:t,apiKey:e.apiKey,headers:e.headers,timeoutMs:e.timeout?.query??3e4,agentId:e.external_agent_id??n}}var Ht,Pn=M(()=>{c();_e();Cn();Ht=class{manager;agentId;constructor(e,t,r=Te){this.agentId=t.external_agent_id??e,this.manager=new Ft;let o=Wd(e,t);this.manager.loadConfig(this.agentId,o);}async query(e,t){return (await this.manager.query(this.agentId,{agentId:this.agentId,query:e,model:t?.model,context:t?.context??t?.systemPrompt})).content.map(o=>o.text).join(`
32
32
  `)}async execute(e,t){return (await this.manager.execute(this.agentId,{agentId:this.agentId,task:e,model:t?.model,context:t?.context??t?.systemPrompt})).content.map(o=>o.text).join(`
33
- `)}};});var as={};Bt(as,{PluginProviderRuntime:()=>jt,createPluginProviderFactory:()=>is});function is(n){return (e,t)=>{let r=n.get(e);if(!r)throw new T(`Plugin provider "${e}" not found. Available: ${Array.from(n.keys()).join(", ")||"(none)"}`,`plugin/${e}`);return new jt(e,r)}}function os(n,e,t,r){let o=n.map(s=>s.replace(/\{model\}/g,e));return r&&o.push(t),o}function Md(n){if(!n||typeof n!="string")throw new Error("Plugin provider requires a cli_command")}function ss(n){if(!Array.isArray(n))throw new Error("CLI arguments must be an array");for(let e of n)if(typeof e!="string")throw new Error("Each CLI argument must be a string")}function Nd(n){for(let{pattern:e}of n)if(typeof e!="string")throw new Error("Error pattern must be a string")}function Dd(n){for(let[e,t]of Object.entries(n))if(typeof e!="string"||typeof t!="string")throw new Error("env entries must be string key/value pairs")}var jt,Rn=N(()=>{c();ve();Yt();jt=class{constructor(e,t){this.config=t;this.providerStr=`plugin/${e}`,Md(t.cli_command),ss(t.query_args),ss(t.execute_args),t.error_patterns&&Nd(t.error_patterns),t.env&&Dd(t.env);}config;providerStr;async query(e,t){let r=t?.model??this.config.default_model??"default",o=os(this.config.query_args,r,e,this.config.prompt_in_args),s=this.config.prompt_in_args?void 0:e;t?.onCommand?.(`${this.config.cli_command} ${o.join(" ")}`);let i=this.config.timeout?.query??6e5;return this.runProcess(o,t,s,i)}async execute(e,t){let r=t?.model??this.config.default_model??"default",o=os(this.config.execute_args,r,e,this.config.prompt_in_args),s=this.config.prompt_in_args?void 0:e;t?.onCommand?.(`${this.config.cli_command} ${o.join(" ")}`);let i=this.config.timeout?.execute??6e5;return this.runProcess(o,t,s,i)}runProcess(e,t,r,o){return new Promise((s,i)=>{let a={...process.env,...this.config.env??{}},d=gt({command:this.config.cli_command,allowShellFallback:true}),l=mt(d,e),u=spawn(l.command,l.argv,{env:a,shell:l.shell??false,stdio:["pipe","pipe","pipe"],windowsHide:l.windowsHide});r!==void 0&&u.stdin.write(r),u.stdin.end(),u.pid!==void 0&&t?.onPid?.(u.pid);let g="",f="",m="",w="";u.stdout.on("data",k=>{let _=k.toString();g+=_,m+=_;let x=m.split(`
34
- `);m=x.pop()??"";for(let A of x)A.trim()&&t?.onOutput?.(A,"stdout");}),u.stderr.on("data",k=>{let _=k.toString();f+=_,w+=_;let x=w.split(`
35
- `);w=x.pop()??"";for(let A of x)A.trim()&&t?.onOutput?.(A,"stderr");});let v=setTimeout(()=>{u.kill("SIGTERM"),i(new T(`Plugin provider "${this.providerStr}" timed out after ${o}ms`,this.providerStr));},o);u.on("error",k=>{if(clearTimeout(v),k.code==="ENOENT"){let _=this.config.not_installed_message??`CLI command "${this.config.cli_command}" not found. Is ${this.config.id} installed?`;i(new T(_,this.providerStr));}else i(new T(`Spawn error: ${k.message}`,this.providerStr));}),u.on("close",k=>{clearTimeout(v),m.trim()&&t?.onOutput?.(m,"stdout"),w.trim()&&t?.onOutput?.(w,"stderr");let _=k??0;if(t?.onExitCode?.(_),this.config.error_patterns){let x=f||g;for(let A of this.config.error_patterns)if(x.includes(A.pattern)){i(new T(A.message,this.providerStr));return}}if(k!==0){i(new T(`Process exited with code ${k}: ${f.slice(0,500)}`,this.providerStr));return}s(g.trim());});})}};});c();c();c();function qs(n){let e=o=>o.replace(/[.+^${}()|[\]\\]/g,"\\$&"),r=n.split("/").map(o=>o==="**"?".*":o.split("*").map(e).join("[^/]*"));return new RegExp(`^${r.join("\\/")}$`)}function ye(n,e){try{return qs(e).test(n)}catch{return false}}c();c();var Ws=z.object({model:z.string().optional(),system_prompt:z.string().optional(),prompt:z.string().optional(),layout:z.union([z.string(),z.object({id:z.string(),props:z.record(z.unknown()).optional()}),z.object({props:z.record(z.unknown())}),z.object({template:z.string()})]).optional()}).catchall(z.unknown()),Vn=z.object({include:z.array(z.string()).optional()}).optional(),Bs=z.object({id:z.string(),name:z.string().optional(),role:z.string().optional(),team:z.string().optional(),provider:z.union([z.string(),z.array(z.string())]),working_directory:z.string().optional(),description:z.string().optional(),tags:z.array(z.string()).optional(),inline:Ws.optional(),skills:Vn}).catchall(z.unknown()),Gn=z.object({agents:z.array(Bs).optional(),hooks:z.array(z.unknown()).optional(),settings:z.record(z.unknown()).optional(),skills:z.unknown().optional(),layouts:z.record(z.unknown()).optional(),documents:z.record(z.unknown()).optional()}).catchall(z.unknown());var He=class extends Error{constructor(t,r){super(t);this.cause=r;this.name="ConfigLoadError";}cause};function zt(n){if(!n||typeof n!="string"||!n.trim())throw new He("YAML content must be a non-empty string");let e;try{e=load(n);}catch(o){throw new He(`YAML parse error: ${o.message}`,o)}let t=Vs(e),r=Gn.safeParse(t);if(!r.success)throw new He(`Config validation error: ${r.error.message}`);return r.data}function Kt(n){let e;try{e=readFileSync(n,"utf-8");}catch(t){throw new He(`Cannot read file: ${n}`,t)}return zt(e)}function Vs(n){if(!n||typeof n!="object")return {agents:[]};let e=n,t;if(e.agents&&typeof e.agents=="object"&&!Array.isArray(e.agents)){let o=e.agents;t=Object.entries(o).map(([s,i])=>({id:s,...i&&typeof i=="object"?i:{}}));}else if(Array.isArray(e.agents))t=e.agents;else return {...e,agents:[]};let r=t.map(o=>{if(o.provider===void 0&&o.inline&&typeof o.inline=="object"){let s=o.inline;if(s.provider!==void 0)return {...o,provider:s.provider}}return o});return {...e,agents:r}}c();var qe=join("templates","agents");function Xs(){try{let e=(typeof re=="function"?re:createRequire(typeof h<"u"?h:process.cwd()+"/")).resolve("@crewx/sdk/package.json");return dirname(e)}catch{return null}}function nt(n){if(n&&existsSync(n))return n;let e=process.env.CREWX_SDK_TEMPLATES_PATH;if(e&&existsSync(e))return e;let t=Xs();if(t){let o=join(t,qe);if(existsSync(o))return o}let r=[join(y,"..",qe),join(y,"..","..",qe),join(y,"..","..","..",qe),join(process.cwd(),"packages","sdk",qe),join(process.cwd(),qe)];for(let o of r)if(existsSync(o))return o;throw new Error(`[@crewx/sdk] Templates directory not found.
36
- `+(t?` package anchor: ${join(t,qe)}
33
+ `)}};});var us={};Vt(us,{PluginProviderRuntime:()=>qt,createPluginProviderFactory:()=>cs});function cs(n){return (e,t)=>{let r=n.get(e);if(!r)throw new T(`Plugin provider "${e}" not found. Available: ${Array.from(n.keys()).join(", ")||"(none)"}`,`plugin/${e}`);return new qt(e,r)}}function ds(n,e,t,r){let o=n.map(s=>s.replace(/\{model\}/g,e));return r&&o.push(t),o}function zd(n){if(!n||typeof n!="string")throw new Error("Plugin provider requires a cli_command")}function ls(n){if(!Array.isArray(n))throw new Error("CLI arguments must be an array");for(let e of n)if(typeof e!="string")throw new Error("Each CLI argument must be a string")}function Kd(n){for(let{pattern:e}of n)if(typeof e!="string")throw new Error("Error pattern must be a string")}function Vd(n){for(let[e,t]of Object.entries(n))if(typeof e!="string"||typeof t!="string")throw new Error("env entries must be string key/value pairs")}var qt,Tn=M(()=>{c();_e();ht();qt=class{constructor(e,t){this.config=t;this.providerStr=`plugin/${e}`,zd(t.cli_command),ls(t.query_args),ls(t.execute_args),t.error_patterns&&Kd(t.error_patterns),t.env&&Vd(t.env);}config;providerStr;async query(e,t){let r=t?.model??this.config.default_model??"default",o=ds(this.config.query_args,r,e,this.config.prompt_in_args),s=this.config.prompt_in_args?void 0:e;t?.onCommand?.(`${this.config.cli_command} ${o.join(" ")}`);let i=this.config.timeout?.query??6e5;return this.runProcess(o,t,s,i)}async execute(e,t){let r=t?.model??this.config.default_model??"default",o=ds(this.config.execute_args,r,e,this.config.prompt_in_args),s=this.config.prompt_in_args?void 0:e;t?.onCommand?.(`${this.config.cli_command} ${o.join(" ")}`);let i=this.config.timeout?.execute??6e5;return this.runProcess(o,t,s,i)}runProcess(e,t,r,o){return new Promise((s,i)=>{let a={...process.env,...this.config.env??{}},d=ze({command:this.config.cli_command,env:a,cwd:process.cwd(),resolution:this.config.prefer_local_bin?"local_first":"global_first",allowShellFallback:true}),l=Ke(d,e),u=spawn(l.command,l.argv,{env:a,shell:l.shell??false,stdio:["pipe","pipe","pipe"],windowsHide:l.windowsHide});r!==void 0&&u.stdin.write(r),u.stdin.end(),u.pid!==void 0&&t?.onPid?.(u.pid);let g="",f="",m="",w="";u.stdout.on("data",E=>{let _=E.toString();g+=_,m+=_;let x=m.split(`
34
+ `);m=x.pop()??"";for(let k of x)k.trim()&&t?.onOutput?.(k,"stdout");}),u.stderr.on("data",E=>{let _=E.toString();f+=_,w+=_;let x=w.split(`
35
+ `);w=x.pop()??"";for(let k of x)k.trim()&&t?.onOutput?.(k,"stderr");});let v=setTimeout(()=>{u.kill("SIGTERM"),i(new T(`Plugin provider "${this.providerStr}" timed out after ${o}ms`,this.providerStr));},o);u.on("error",E=>{if(clearTimeout(v),E.code==="ENOENT"){let _=this.config.not_installed_message??`CLI command "${this.config.cli_command}" not found. Is ${this.config.id} installed?`;i(new T(_,this.providerStr));}else i(new T(`Spawn error: ${E.message}`,this.providerStr));}),u.on("close",E=>{clearTimeout(v),m.trim()&&t?.onOutput?.(m,"stdout"),w.trim()&&t?.onOutput?.(w,"stderr");let _=E??0;if(t?.onExitCode?.(_),this.config.error_patterns){let x=f||g;for(let k of this.config.error_patterns)if(x.includes(k.pattern)){i(new T(k.message,this.providerStr));return}}if(E!==0){i(new T(`Process exited with code ${E}: ${f.slice(0,500)}`,this.providerStr));return}s(g.trim());});})}};});c();c();c();function Ks(n){let e=o=>o.replace(/[.+^${}()|[\]\\]/g,"\\$&"),r=n.split("/").map(o=>o==="**"?".*":o.split("*").map(e).join("[^/]*"));return new RegExp(`^${r.join("\\/")}$`)}function he(n,e){try{return Ks(e).test(n)}catch{return false}}c();c();var Vs=z.object({model:z.string().optional(),system_prompt:z.string().optional(),prompt:z.string().optional(),layout:z.union([z.string(),z.object({id:z.string(),props:z.record(z.unknown()).optional()}),z.object({props:z.record(z.unknown())}),z.object({template:z.string()})]).optional()}).catchall(z.unknown()),Xn=z.object({include:z.array(z.string()).optional()}).optional(),Gs=z.object({id:z.string(),name:z.string().optional(),role:z.string().optional(),team:z.string().optional(),provider:z.union([z.string(),z.array(z.string())]),working_directory:z.string().optional(),description:z.string().optional(),tags:z.array(z.string()).optional(),inline:Vs.optional(),skills:Xn}).catchall(z.unknown()),Js=z.object({bin_resolution:z.enum(["global_first","local_first"]).optional()}).catchall(z.unknown()),Yn=z.object({agents:z.array(Gs).optional(),hooks:z.array(z.unknown()).optional(),settings:Js.optional(),skills:z.unknown().optional(),layouts:z.record(z.unknown()).optional(),documents:z.record(z.unknown()).optional()}).catchall(z.unknown());var We=class extends Error{constructor(t,r){super(t);this.cause=r;this.name="ConfigLoadError";}cause};function Gt(n){if(!n||typeof n!="string"||!n.trim())throw new We("YAML content must be a non-empty string");let e;try{e=load(n);}catch(o){throw new We(`YAML parse error: ${o.message}`,o)}let t=Qs(e),r=Yn.safeParse(t);if(!r.success)throw new We(`Config validation error: ${r.error.message}`);return r.data}function Jt(n){let e;try{e=readFileSync(n,"utf-8");}catch(t){throw new We(`Cannot read file: ${n}`,t)}return Gt(e)}function Qs(n){if(!n||typeof n!="object")return {agents:[]};let e=n,t;if(e.agents&&typeof e.agents=="object"&&!Array.isArray(e.agents)){let o=e.agents;t=Object.entries(o).map(([s,i])=>({id:s,...i&&typeof i=="object"?i:{}}));}else if(Array.isArray(e.agents))t=e.agents;else return {...e,agents:[]};let r=t.map(o=>{if(o.provider===void 0&&o.inline&&typeof o.inline=="object"){let s=o.inline;if(s.provider!==void 0)return {...o,provider:s.provider}}return o});return {...e,agents:r}}c();var Be=join("templates","agents");function ti(){try{let e=(typeof re=="function"?re:createRequire(typeof h<"u"?h:process.cwd()+"/")).resolve("@crewx/sdk/package.json");return dirname(e)}catch{return null}}function at(n){if(n&&existsSync(n))return n;let e=process.env.CREWX_SDK_TEMPLATES_PATH;if(e&&existsSync(e))return e;let t=ti();if(t){let o=join(t,Be);if(existsSync(o))return o}let r=[join(y,"..",Be),join(y,"..","..",Be),join(y,"..","..","..",Be),join(process.cwd(),"packages","sdk",Be),join(process.cwd(),Be)];for(let o of r)if(existsSync(o))return o;throw new Error(`[@crewx/sdk] Templates directory not found.
36
+ `+(t?` package anchor: ${join(t,Be)}
37
37
  `:` package anchor: (unresolved)
38
38
  `)+r.map(o=>` candidate: ${o}`).join(`
39
39
  `)+`
40
- Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function Rr(){let n=nt();return {yamlPath:join(n,"default.yaml"),dir:n}}c();var Ae=class extends Error{constructor(e,t){let r=t.length>0?` Available: ${t.join(", ")}`:"";super(`Agent not found: "${e}".${r}`),this.name="AgentNotFoundError";}},Ys={claude:{id:"claude",provider:"cli/claude"},copilot:{id:"copilot",provider:"cli/copilot"},codex:{id:"codex",provider:"cli/codex"}};function Gt(n,e){let t=n.startsWith("@")?n.slice(1):n,r=e.find(s=>s.id===t);if(r)return r;let o=Ys[t];if(o)return o;throw new Ae(n,e.map(s=>s.id))}ve();nr();c();c();var ct={"claude-fable-5":{input:10,cachedInput:1,output:50},"claude-opus-4-8":{input:5,cachedInput:.5,output:25},"claude-opus-4-7":{input:5,cachedInput:.5,output:25},"claude-opus-4-6":{input:5,cachedInput:.5,output:25},"claude-sonnet-5":{input:2,cachedInput:.2,output:10},"claude-sonnet-4-6":{input:3,cachedInput:.3,output:15},"claude-haiku-4-5":{input:1,cachedInput:.1,output:5},"gpt-5.6-sol":{input:5,cachedInput:.5,output:30},"gpt-5.6-terra":{input:2.5,cachedInput:.25,output:15},"gpt-5.6-luna":{input:1,cachedInput:.1,output:6},"gpt-5.5":{input:5,cachedInput:1.25,output:15},"gpt-5.4":{input:2.5,cachedInput:.625,output:10},"gpt-5.3-codex":{input:1.5,cachedInput:.375,output:6},"gpt-5-mini":{input:.4,cachedInput:.1,output:1.6},"gpt-4.1":{input:2,cachedInput:.5,output:8},"gpt-4o":{input:2.5,cachedInput:1.25,output:10},"glm-5.2":{input:1.4,cachedInput:.26,output:4.4},"glm-5.1":{input:1.4,cachedInput:.26,output:4.4}};var Oi={opus:"claude-opus-4-8",sonnet:"claude-sonnet-4-6",haiku:"claude-haiku-4-5","codex-mini":"gpt-5.3-codex",codex:"gpt-5.3-codex"},Wr={input:0,cachedInput:0,output:0},At={};function mo(n){At=n;}function Br(n){let e=n.toLowerCase().trim();e=e.replace(/\[[^\]]*\]$/g,"");let t=e.lastIndexOf("/");return t>=0&&(e=e.slice(t+1)),e=e.replace(/-\d{8}$/,""),e}function Mi(n){if(!n)return Wr;let e=Br(n),t=Oi[e];if(t)return At[t]??ct[t]??Wr;if(At[e])return At[e];if(ct[e])return ct[e];let r={...ct,...At};for(let o of Object.keys(r))if(e.includes(o))return r[o];return console.warn(`[pricing] Unknown model: ${n}, cost_usd=0`),Wr}function Ni(n,e,t,r=0,o){let s=Mi(t),i=Math.min(r,n),d=(n-i)*s.input/1e6,l=i*s.cachedInput/1e6,u=e*s.output/1e6;return d+l+u}function zr(n,e,t,r,o,s){return n&&n>0?n:!e&&!t?0:Ni(e??0,t??0,o,r??0)}c();function fo(n){if(!n||typeof n!="object"||Array.isArray(n))return;let e=n,t={};return typeof e.provider=="string"&&e.provider.trim()&&(t.provider=e.provider.trim()),typeof e.model=="string"&&e.model.trim()&&(t.model=e.model.trim()),typeof e.mode=="string"&&e.mode.trim()&&(t.mode=e.mode.trim()),typeof e.effort=="string"&&e.effort.trim()&&(t.effort=e.effort.trim()),t}function or(n){if(n==null||n===false)return {active:false};if(n===true)return {active:true};if(typeof n=="object"){let e=n.mode;return {active:true,mode:e==="count"||e==="latch"?e:void 0}}return {active:false}}function sr(n,e,t,r){if(!r.active)return {active:false,crossProvider:false};if(!n||typeof n!="object"||Array.isArray(n))return {active:false,crossProvider:false};let s=n[e];if(!s||typeof s!="object"||Array.isArray(s))return {active:false,crossProvider:false};let i=fo(s.overdrive);if(!i||!i.provider||!i.model)return {active:false,crossProvider:false};let a=i.provider!==t;return {active:true,provider:i.provider,model:i.model,mode:i.mode,effort:i.effort,crossProvider:a}}c();c();var Li=[/^ANTHROPIC_/i,/^OPENAI_/i,/^AWS_SECRET/i,/^SLACK_/i,/^GITHUB_TOKEN$/i,/^CREWX_MCP_KEY$/i,/^DATABASE_/i,/^AWS_ACCESS_KEY/i,/^AWS_SESSION_TOKEN$/i,/^GH_TOKEN$/i,/^GH_APP_/i,/^NPM_TOKEN$/i,/^NPM_AUTH/i,/^GOOGLE_APPLICATION/i,/^GCLOUD_/i,/^AZURE_/i,/^ARM_/i,/^DOCKER_PASSWORD$/i,/^DOCKER_AUTH/i,/^SSH_PRIVATE/i,/^SSH_AUTH_SOCK$/i,/^CI_JOB_TOKEN$/i,/^ACTIONS_RUNTIME_TOKEN$/i,/^VAULT_TOKEN$/i,/^SONAR_TOKEN$/i,/^CODECOV_TOKEN$/i,/TOKEN$/i,/SECRET$/i,/PASSWORD$/i,/API_KEY$/i],$i=/[;|&`$(){}!><\n\r]/,Ui=2,ji=["*","**","*:*","* *","**/*"];function Fi(){let n={};for(let[e,t]of Object.entries(process.env))t!==void 0&&(Li.some(r=>r.test(e))||(n[e]=t));return n}function Hi(n){if($i.test(n))throw new Error(`exec blocked: shell metacharacter detected in "${n}"`)}function qi(n){return /^npx\s+@crewx\/[\w-]+/.test(n)}function Wi(n){if(ji.includes(n.trim()))throw new Error(`exec config error: overly broad pattern "${n}" is not allowed`);if(!/^[\w./@-]/.test(n))throw new Error("exec config error: pattern must start with a command name")}function Bi(n,e){let t=e.allow??[],r=e.deny??[];for(let o of [...t,...r])Wi(o);return r.some(o=>ye(n,o))?false:qi(n)?true:t.some(o=>ye(n,o))}var yo=false;function zi(n){yo=n;}function Et(n){if(!yo)return;let e=JSON.stringify({span:"template_exec",...n,timestamp:new Date().toISOString()});console.error(e);}function Ki(n){let e=[],t="",r=false,o=false;for(let s=0;s<n.length;s++){let i=n[s];i==="'"&&!o?r=!r:i==='"'&&!r?o=!o:i===" "&&!r&&!o?t.length>0&&(e.push(t),t=""):t+=i;}return t.length>0&&e.push(t),e}function ho(n,e){let t=Date.now(),r=parseInt(process.env.CREWX_EXEC_DEPTH??"0",10);if(isNaN(r)||r>=Ui)return Et({command:n,status:"denied",reason:"invalid or max recursion depth"}),"(exec blocked: max recursion depth reached)";try{Hi(n);}catch{return Et({command:n,status:"denied",reason:"shell metacharacter detected"}),`(exec blocked: shell metacharacter detected in "${n}")`}if(!Bi(n,e))return Et({command:n,status:"denied",reason:"not in allow list"}),`(exec blocked: ${n})`;try{let o=Ki(n),[s,...i]=o;if(!s)return `(exec failed: ${n})`;let a=Fi(),d=execFileSync(s,i,{timeout:e.timeout??5e3,maxBuffer:64*1024,encoding:"utf-8",env:{...a,CREWX_EXEC_DEPTH:String(r+1)},stdio:["pipe","pipe","pipe"]}),l=Date.now()-t;return Et({command:n,status:"allowed",allowed_by:"policy",duration_ms:l}),`<exec-output cmd="${n}">
40
+ Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function Pr(){let n=at();return {yamlPath:join(n,"default.yaml"),dir:n}}c();var Re=class extends Error{constructor(e,t){let r=t.length>0?` Available: ${t.join(", ")}`:"";super(`Agent not found: "${e}".${r}`),this.name="AgentNotFoundError";}},ri={claude:{id:"claude",provider:"cli/claude"},copilot:{id:"copilot",provider:"cli/copilot"},codex:{id:"codex",provider:"cli/codex"}};function Yt(n,e){let t=n.startsWith("@")?n.slice(1):n,r=e.find(s=>s.id===t);if(r)return r;let o=ri[t];if(o)return o;throw new Re(n,e.map(s=>s.id))}_e();sr();c();c();var mt={"claude-fable-5":{input:10,cachedInput:1,output:50},"claude-opus-4-8":{input:5,cachedInput:.5,output:25},"claude-opus-4-7":{input:5,cachedInput:.5,output:25},"claude-opus-4-6":{input:5,cachedInput:.5,output:25},"claude-sonnet-5":{input:2,cachedInput:.2,output:10},"claude-sonnet-4-6":{input:3,cachedInput:.3,output:15},"claude-haiku-4-5":{input:1,cachedInput:.1,output:5},"gpt-5.6-sol":{input:5,cachedInput:.5,output:30},"gpt-5.6-terra":{input:2.5,cachedInput:.25,output:15},"gpt-5.6-luna":{input:1,cachedInput:.1,output:6},"gpt-5.5":{input:5,cachedInput:1.25,output:15},"gpt-5.4":{input:2.5,cachedInput:.625,output:10},"gpt-5.3-codex":{input:1.5,cachedInput:.375,output:6},"gpt-5-mini":{input:.4,cachedInput:.1,output:1.6},"gpt-4.1":{input:2,cachedInput:.5,output:8},"gpt-4o":{input:2.5,cachedInput:1.25,output:10},"glm-5.2":{input:1.4,cachedInput:.26,output:4.4},"glm-5.1":{input:1.4,cachedInput:.26,output:4.4}};var Fi={opus:"claude-opus-4-8",sonnet:"claude-sonnet-4-6",haiku:"claude-haiku-4-5","codex-mini":"gpt-5.3-codex",codex:"gpt-5.3-codex"},Kr={input:0,cachedInput:0,output:0},Ct={};function yo(n){Ct=n;}function Vr(n){let e=n.toLowerCase().trim();e=e.replace(/\[[^\]]*\]$/g,"");let t=e.lastIndexOf("/");return t>=0&&(e=e.slice(t+1)),e=e.replace(/-\d{8}$/,""),e}function Hi(n){if(!n)return Kr;let e=Vr(n),t=Fi[e];if(t)return Ct[t]??mt[t]??Kr;if(Ct[e])return Ct[e];if(mt[e])return mt[e];let r={...mt,...Ct};for(let o of Object.keys(r))if(e.includes(o))return r[o];return console.warn(`[pricing] Unknown model: ${n}, cost_usd=0`),Kr}function qi(n,e,t,r=0,o){let s=Hi(t),i=Math.min(r,n),d=(n-i)*s.input/1e6,l=i*s.cachedInput/1e6,u=e*s.output/1e6;return d+l+u}function Gr(n,e,t,r,o,s){return n&&n>0?n:!e&&!t?0:qi(e??0,t??0,o,r??0)}c();function ho(n){if(!n||typeof n!="object"||Array.isArray(n))return;let e=n,t={};return typeof e.provider=="string"&&e.provider.trim()&&(t.provider=e.provider.trim()),typeof e.model=="string"&&e.model.trim()&&(t.model=e.model.trim()),typeof e.mode=="string"&&e.mode.trim()&&(t.mode=e.mode.trim()),typeof e.effort=="string"&&e.effort.trim()&&(t.effort=e.effort.trim()),t}function ir(n){if(n==null||n===false)return {active:false};if(n===true)return {active:true};if(typeof n=="object"){let e=n.mode;return {active:true,mode:e==="count"||e==="latch"?e:void 0}}return {active:false}}function ar(n,e,t,r){if(!r.active)return {active:false,crossProvider:false};if(!n||typeof n!="object"||Array.isArray(n))return {active:false,crossProvider:false};let s=n[e];if(!s||typeof s!="object"||Array.isArray(s))return {active:false,crossProvider:false};let i=ho(s.overdrive);if(!i||!i.provider||!i.model)return {active:false,crossProvider:false};let a=i.provider!==t;return {active:true,provider:i.provider,model:i.model,mode:i.mode,effort:i.effort,crossProvider:a}}c();c();var Bi=[/^ANTHROPIC_/i,/^OPENAI_/i,/^AWS_SECRET/i,/^SLACK_/i,/^GITHUB_TOKEN$/i,/^CREWX_MCP_KEY$/i,/^DATABASE_/i,/^AWS_ACCESS_KEY/i,/^AWS_SESSION_TOKEN$/i,/^GH_TOKEN$/i,/^GH_APP_/i,/^NPM_TOKEN$/i,/^NPM_AUTH/i,/^GOOGLE_APPLICATION/i,/^GCLOUD_/i,/^AZURE_/i,/^ARM_/i,/^DOCKER_PASSWORD$/i,/^DOCKER_AUTH/i,/^SSH_PRIVATE/i,/^SSH_AUTH_SOCK$/i,/^CI_JOB_TOKEN$/i,/^ACTIONS_RUNTIME_TOKEN$/i,/^VAULT_TOKEN$/i,/^SONAR_TOKEN$/i,/^CODECOV_TOKEN$/i,/TOKEN$/i,/SECRET$/i,/PASSWORD$/i,/API_KEY$/i],zi=/[;|&`$(){}!><\n\r]/,Ki=2,Vi=["*","**","*:*","* *","**/*"];function Gi(){let n={};for(let[e,t]of Object.entries(process.env))t!==void 0&&(Bi.some(r=>r.test(e))||(n[e]=t));return n}function Ji(n){if(zi.test(n))throw new Error(`exec blocked: shell metacharacter detected in "${n}"`)}function Xi(n){return /^npx\s+@crewx\/[\w-]+/.test(n)}function Yi(n){if(Vi.includes(n.trim()))throw new Error(`exec config error: overly broad pattern "${n}" is not allowed`);if(!/^[\w./@-]/.test(n))throw new Error("exec config error: pattern must start with a command name")}function Qi(n,e){let t=e.allow??[],r=e.deny??[];for(let o of [...t,...r])Yi(o);return r.some(o=>he(n,o))?false:Xi(n)?true:t.some(o=>he(n,o))}var wo=false;function Zi(n){wo=n;}function Pt(n){if(!wo)return;let e=JSON.stringify({span:"template_exec",...n,timestamp:new Date().toISOString()});console.error(e);}function ea(n){let e=[],t="",r=false,o=false;for(let s=0;s<n.length;s++){let i=n[s];i==="'"&&!o?r=!r:i==='"'&&!r?o=!o:i===" "&&!r&&!o?t.length>0&&(e.push(t),t=""):t+=i;}return t.length>0&&e.push(t),e}function vo(n,e){let t=Date.now(),r=parseInt(process.env.CREWX_EXEC_DEPTH??"0",10);if(isNaN(r)||r>=Ki)return Pt({command:n,status:"denied",reason:"invalid or max recursion depth"}),"(exec blocked: max recursion depth reached)";try{Ji(n);}catch{return Pt({command:n,status:"denied",reason:"shell metacharacter detected"}),`(exec blocked: shell metacharacter detected in "${n}")`}if(!Qi(n,e))return Pt({command:n,status:"denied",reason:"not in allow list"}),`(exec blocked: ${n})`;try{let o=ea(n),[s,...i]=o;if(!s)return `(exec failed: ${n})`;let a=Gi(),d=execFileSync(s,i,{timeout:e.timeout??5e3,maxBuffer:64*1024,encoding:"utf-8",env:{...a,CREWX_EXEC_DEPTH:String(r+1)},stdio:["pipe","pipe","pipe"]}),l=Date.now()-t;return Pt({command:n,status:"allowed",allowed_by:"policy",duration_ms:l}),`<exec-output cmd="${n}">
41
41
  ${d.trim()}
42
- </exec-output>`}catch{return Et({command:n,status:"error",reason:"execution failed"}),`(exec failed: ${n})`}}c();function wo(n){return n==null?"":String(n)}c();function vo(n,e){return `\`\`\`${e?.hash?.lang??""}
42
+ </exec-output>`}catch{return Pt({command:n,status:"error",reason:"execution failed"}),`(exec failed: ${n})`}}c();function _o(n){return n==null?"":String(n)}c();function xo(n,e){return `\`\`\`${e?.hash?.lang??""}
43
43
  ${n??""}
44
- \`\`\``}c();function Kr(n,e){if(!n)return "";if(n.length<=e)return n;let t=n.length-e;return `${n.substring(0,e)} (...+${t} chars)`}function Vr(n){return Array.isArray(n)||typeof n=="string"?n.length:0}function Gr(n){return typeof n!="string"?"":n.replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;")}var _o=["B","KB","MB","GB"];function Jr(n){if(n===0)return "0 B";let e=Math.min(Math.floor(Math.log(n)/Math.log(1024)),_o.length-1);return `${Math.round(n/Math.pow(1024,e)*100)/100} ${_o[e]}`}function Xr(n){if(!n)return "";try{let e=n instanceof Date?n:new Date(n);return isNaN(e.getTime())?"":e.toLocaleString("ko-KR",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}catch{return ""}}var Rt=class{hbs;execPolicy;execEnabled;constructor(e={}){this.hbs=_e.create(),this.execPolicy=e.execPolicy??{allow:[],deny:[]},this.execEnabled=e.execEnabled??true,this.registerHelpers();}registerHelpers(){let e=this.hbs,t=this.execPolicy,r=this.execEnabled;e.registerHelper("exec",function(o){return typeof o!="string"?"":r?new e.SafeString(ho(o,t)):"(exec disabled)"}),e.registerHelper("include",function(o){return new e.SafeString(wo(o))}),e.registerHelper("fenced_code",function(o,s){return new e.SafeString(vo(o,s))}),e.registerHelper("eq",function(o,s){return o===s}),e.registerHelper("ne",function(o,s){return o!==s}),e.registerHelper("and",function(o,s){return o&&s}),e.registerHelper("or",function(o,s){return o||s}),e.registerHelper("not",function(o){return !o}),e.registerHelper("contains",function(o,s){return Array.isArray(o)&&o.includes(s)}),e.registerHelper("json",function(o){return JSON.stringify(o,null,2)}),e.registerHelper("truncate",function(o,s){return Kr(o,s)}),e.registerHelper("length",function(o){return Vr(o)}),e.registerHelper("escapeHandlebars",function(o){return new e.SafeString(Gr(o))}),e.registerHelper("formatFileSize",function(o){return Jr(o)}),e.registerHelper("formatTimestamp",function(o){return Xr(o)});}async render(e,t={}){return this.hbs.compile(e,{noEscape:true})(t)}};c();c();var ir=class{async readFile(e){return readFile(e,"utf-8")}async exists(e){try{return await access(e),!0}catch{return false}}resolvePath(...e){return e.length===1?resolve(e[0]):resolve(join(...e))}isAbsolute(e){return isAbsolute(e)}async readdir(e){try{return await readdir(e)}catch{return []}}},Ve=new ir;var Ge=class{docs=new Map;fs;constructor(e){this.fs=e??Ve;}async load(e,t){if(e)for(let[r,o]of Object.entries(e)){let s=o;if(typeof s=="string")this.docs.set(r,{content:s});else if(s&&typeof s=="object"){let i=s;"content"in i&&typeof i.content=="string"?this.docs.set(r,{content:i.content}):"path"in i&&typeof i.path=="string"?await this.loadFromFile(r,i.path,t):console.warn(`[DocumentLoader] Skipping '${r}': unsupported format`);}else console.warn(`[DocumentLoader] Skipping '${r}': unsupported format`);}}async getContent(e){return this.docs.get(e)?.content}async getToc(e){let t=this.docs.get(e);if(!t)return;let r=[];for(let o of t.content.split(`
44
+ \`\`\``}c();function Jr(n,e){if(!n)return "";if(n.length<=e)return n;let t=n.length-e;return `${n.substring(0,e)} (...+${t} chars)`}function Xr(n){return Array.isArray(n)||typeof n=="string"?n.length:0}function Yr(n){return typeof n!="string"?"":n.replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;")}var ko=["B","KB","MB","GB"];function Qr(n){if(n===0)return "0 B";let e=Math.min(Math.floor(Math.log(n)/Math.log(1024)),ko.length-1);return `${Math.round(n/Math.pow(1024,e)*100)/100} ${ko[e]}`}function Zr(n){if(!n)return "";try{let e=n instanceof Date?n:new Date(n);return isNaN(e.getTime())?"":e.toLocaleString("ko-KR",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}catch{return ""}}var Tt=class{hbs;execPolicy;execEnabled;constructor(e={}){this.hbs=xe.create(),this.execPolicy=e.execPolicy??{allow:[],deny:[]},this.execEnabled=e.execEnabled??true,this.registerHelpers();}registerHelpers(){let e=this.hbs,t=this.execPolicy,r=this.execEnabled;e.registerHelper("exec",function(o){return typeof o!="string"?"":r?new e.SafeString(vo(o,t)):"(exec disabled)"}),e.registerHelper("include",function(o){return new e.SafeString(_o(o))}),e.registerHelper("fenced_code",function(o,s){return new e.SafeString(xo(o,s))}),e.registerHelper("eq",function(o,s){return o===s}),e.registerHelper("ne",function(o,s){return o!==s}),e.registerHelper("and",function(o,s){return o&&s}),e.registerHelper("or",function(o,s){return o||s}),e.registerHelper("not",function(o){return !o}),e.registerHelper("contains",function(o,s){return Array.isArray(o)&&o.includes(s)}),e.registerHelper("json",function(o){return JSON.stringify(o,null,2)}),e.registerHelper("truncate",function(o,s){return Jr(o,s)}),e.registerHelper("length",function(o){return Xr(o)}),e.registerHelper("escapeHandlebars",function(o){return new e.SafeString(Yr(o))}),e.registerHelper("formatFileSize",function(o){return Qr(o)}),e.registerHelper("formatTimestamp",function(o){return Zr(o)});}async render(e,t={}){return this.hbs.compile(e,{noEscape:true})(t)}};c();c();var dr=class{async readFile(e){return readFile(e,"utf-8")}async exists(e){try{return await access(e),!0}catch{return false}}resolvePath(...e){return e.length===1?resolve(e[0]):resolve(join(...e))}isAbsolute(e){return isAbsolute(e)}async readdir(e){try{return await readdir(e)}catch{return []}}},Ye=new dr;var Qe=class{docs=new Map;fs;constructor(e){this.fs=e??Ye;}async load(e,t){if(e)for(let[r,o]of Object.entries(e)){let s=o;if(typeof s=="string")this.docs.set(r,{content:s});else if(s&&typeof s=="object"){let i=s;"content"in i&&typeof i.content=="string"?this.docs.set(r,{content:i.content}):"path"in i&&typeof i.path=="string"?await this.loadFromFile(r,i.path,t):console.warn(`[DocumentLoader] Skipping '${r}': unsupported format`);}else console.warn(`[DocumentLoader] Skipping '${r}': unsupported format`);}}async getContent(e){return this.docs.get(e)?.content}async getToc(e){let t=this.docs.get(e);if(!t)return;let r=[];for(let o of t.content.split(`
45
45
  `)){let s=/^(#{1,6})\s+(.+)$/.exec(o.trim());s&&r.push({depth:s[1].length,text:s[2].trim()});}if(r.length!==0)return r.map(({depth:o,text:s})=>`${" ".repeat(o-1)}- ${s}`).join(`
46
- `)}getPath(e){return this.docs.get(e)?.path}getNames(){return Array.from(this.docs.keys())}async buildContext(){let e={};for(let t of this.docs.keys()){let r=await this.getContent(t)??"",o=await this.getToc(t),s=this.getPath(t);e[t]={content:r,toc:o,...s?{path:s}:{}};}return e}async loadFromFile(e,t,r){try{let o=this.resolve(t,r),s=await this.fs.readFile(o);this.docs.set(e,{content:s,path:o});}catch(o){let s=o instanceof Error?o.message:String(o);console.warn(`[DocumentLoader] Failed to load '${e}' from '${t}': ${s}`);}}resolve(e,t){return this.fs.isAbsolute(e)?e:t?this.fs.resolvePath(t,e):this.fs.resolvePath(e)}};c();c();var ne=class extends Error{constructor(t,r,o){super(t);this.layoutId=r;this.cause=o;this.name="LayoutLoadError";}layoutId;cause},Pe=class extends Error{constructor(t,r=[],o){super(t);this.errors=r;this.cause=o;this.name="PropsValidationError";}errors;cause};var ra={validationMode:"lenient",fallbackLayoutId:"crewx/default"},Ct=class{layouts=new Map;options;constructor(e){this.options={...ra,...e,templatesPath:e?.templatesPath??nt()},this.loadAllLayouts();}load(e,t){let r=this.layouts.get(e);if(!r){let o=this.normalizeLayoutId(e);r=this.layouts.get(o);}if(!r&&(console.warn(`Layout not found: ${e}, falling back to ${this.options.fallbackLayoutId}`),r=this.layouts.get(this.options.fallbackLayoutId),!r))throw new ne(`Fallback layout not found: ${this.options.fallbackLayoutId}`,this.options.fallbackLayoutId);return t&&Object.keys(t).length>0?{...r,defaultProps:{...r.defaultProps,...t}}:r}getLayoutIds(){return Array.from(this.layouts.keys())}hasLayout(e){if(this.layouts.has(e))return true;let t=this.normalizeLayoutId(e);return this.layouts.has(t)}reload(){this.layouts.clear(),this.loadAllLayouts();}registerLayout(e,t){if(!e||typeof e!="string")throw new ne("Layout ID must be a non-empty string",e);let r=typeof t=="string"?{template:t}:t,o=typeof r.template=="string"?r.template:"";if(!o||o.trim().length===0)throw new ne(`Custom layout template is empty for ${e}`,e);let s=r.propsSchema||{},i=this.extractDefaultProps(s),a=r.defaultProps||{},d={id:e,version:r.version||"1.0.0",description:r.description||`Custom layout ${e}`,template:o,propsSchema:this.parsePropsSchema(s),defaultProps:{...i,...a}},l=this.layouts.get(e),u=l?.template===o&&JSON.stringify(l?.defaultProps??{})===JSON.stringify(d.defaultProps??{})&&JSON.stringify(l?.propsSchema??{})===JSON.stringify(d.propsSchema??{});this.layouts.set(e,d),process.env.CREWX_VERBOSE==="1"&&(l?u||console.error(`Updated custom layout: ${e}`):console.error(`Registered custom layout: ${e}`));}registerLayouts(e){for(let[t,r]of Object.entries(e))try{this.registerLayout(t,r);}catch(o){console.warn(`Failed to register custom layout ${t}:`,o instanceof Error?o.message:o);}}loadAllLayouts(){let e=this.options.templatesPath;if(!existsSync(e))throw new ne(`Templates directory not found: ${e}`,void 0,new Error(`Directory does not exist: ${e}`));try{let t=readdirSync(e).filter(r=>r.endsWith(".yaml")||r.endsWith(".yml"));t.length===0&&console.warn(`No layout files found in ${e}`);for(let r of t){let o=r.replace(/\.(yaml|yml)$/,""),s=Q.join(e,r);try{let i=this.loadLayoutFile(s,o),a=`crewx/${o}`;this.layouts.set(a,i),a!=="crewx/minimal"&&process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded layout: ${a} from ${r}`);}catch(i){console.error(`Failed to load layout file ${r}:`,i);}}process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded ${this.layouts.size} layouts from ${e}`);}catch(t){throw new ne(`Failed to read layouts directory: ${e}`,void 0,t instanceof Error?t:new Error(String(t)))}}loadLayoutFile(e,t){try{let r=readFileSync(e,"utf-8");if(!r||r.trim().length===0)throw console.warn(`Empty YAML file: ${e}, will use fallback`),new ne(`Empty YAML file: ${e}`,t,new Error("File content is empty"));let o=load(r);if(!o||typeof o!="object")throw console.warn(`Invalid YAML content in ${e} (parsed as ${typeof o}), will use fallback`),new ne(`Invalid or empty YAML in ${e}`,t,new Error("YAML parsing returned null/undefined or non-object"));if(o.layouts&&typeof o.layouts=="object"){let s=this.resolveLayoutEntry(o.layouts,t);if(!s||s.template.trim().length===0)throw console.warn(`Empty or missing layout template in ${e} for ${t}`),new ne(`Layout template not found or empty in layouts map: ${t}`,t);let i=s.propsSchema||o.propsSchema||{};return {id:`crewx/${t}`,version:o.version||"1.0.0",description:o.description||`CrewX ${t} layout`,template:s.template,propsSchema:this.parsePropsSchema(i),defaultProps:this.extractDefaultProps(i)}}else {if(!o.template||typeof o.template=="string"&&o.template.trim().length===0)throw console.warn(`Empty or missing template field in ${e}`),new ne(`Layout template is missing or empty in ${e}`,t);return {id:o.id||`crewx/${t}`,version:o.version||"1.0.0",description:o.description||"",template:o.template,propsSchema:this.parsePropsSchema(o.propsSchema||{}),defaultProps:this.extractDefaultProps(o.propsSchema||{})}}}catch(r){throw new ne(`Failed to load layout file: ${e}`,t,r instanceof Error?r:new Error(String(r)))}}parsePropsSchema(e){let t={};for(let[r,o]of Object.entries(e))typeof o=="object"&&o!==null&&(t[r]=o);return t}extractDefaultProps(e){let t={};for(let[r,o]of Object.entries(e))o&&typeof o=="object"&&("defaultValue"in o?t[r]=o.defaultValue:"default"in o&&(t[r]=o.default));return t}normalizeLayoutId(e){return e?e.includes("/")?e:`crewx/${e}`:this.options.fallbackLayoutId}resolveLayoutEntry(e,t){let r=new Set;if(t)if(r.add(t),t.includes("/")){let o=t.split("/"),s=o[o.length-1];s&&r.add(s);}else r.add(`crewx/${t}`);r.add("default");for(let o of r){let s=e[o];if(typeof s=="string"&&s.trim().length>0)return {template:s};if(s&&typeof s=="object"&&typeof s.template=="string"&&s.template.trim().length>0)return {template:s.template,propsSchema:s.propsSchema}}for(let o of Object.values(e)){if(typeof o=="string"&&o.trim().length>0)return {template:o};let s=o;if(s&&typeof s=="object"&&typeof s.template=="string"&&s.template.trim().length>0)return {template:s.template,propsSchema:s.propsSchema}}}};c();c();c();function Je(n){return String(Math.floor(Math.abs(n))).padStart(2,"0")}function Pt(n){if(!(n instanceof Date)||Number.isNaN(n.getTime()))return "";let e=-n.getTimezoneOffset(),t=e>=0?"+":"-";return `${n.getFullYear()}-${Je(n.getMonth()+1)}-${Je(n.getDate())}T${Je(n.getHours())}:${Je(n.getMinutes())}:${Je(n.getSeconds())}${t}${Je(e/60)}:${Je(e%60)}`}function na(n){return n.map(e=>{let t=typeof e?.timestamp=="number"?e.timestamp:null;return t===null?e:{...e,created_at:Pt(new Date(t))}})}function oa(n){let e=[];for(let t of n)t?.isAssistant&&t?.metadata?.agent_id?e.push(String(t.metadata.agent_id)):!t?.isAssistant&&t?.metadata?.caller_agent_id&&e.push(String(t.metadata.caller_agent_id));return Array.from(new Set(e))}function Eo(...n){let e=n[n.length-1],t=n[0],r=n[1],o=typeof n[2]=="string"?n[2]:"",s=typeof n[3]=="string"?n[3]:"";if(!Array.isArray(t)||t.length===0||!(e&&typeof e.fn=="function"))return "";let a=oa(t),d=a.length>0?a[0]:"",l=Date.now(),u={messages:na(t),platform:typeof r=="string"?r:"",messagesCount:t.length,agentIds:a,primaryAgentId:d,currentAgentId:o,threadId:s,now:Pt(new Date(l))};return e.fn(u)}c();var Tt=class{defaultMode;constructor(e={}){this.defaultMode=e.defaultMode??"lenient";}validate(e,t,r=this.defaultMode){let o=[],s=this.validateObject(e??{},t,r,["props"],o);if(o.length>0&&r==="strict")throw new Pe("Props validation failed in strict mode",o);return {valid:o.length===0,props:s,errors:o}}validateObject(e,t,r,o,s){let i={};if(r==="strict")for(let a of Object.keys(e))t[a]||s.push({path:this.buildPath([...o,a]),message:`Unknown prop '${a}'`,value:e[a]});for(let[a,d]of Object.entries(t)){let l=[...o,a],u=e[a],g=this.resolveProp(u,d,l,r,s);g.shouldAssign&&(i[a]=g.value);}return i}resolveProp(e,t,r,o,s){let i=this.buildPath(r);if(this.isNil(e)){if(t.isRequired&&s.push({path:i,message:`Required prop '${r[r.length-1]}' is missing`}),t.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(t.defaultValue)};if(t.type==="shape"&&t.shape){let d=this.applyDefaults(t.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}let a=this.validateType(e,t,r,o,s);if(!a.valid){if(t.type==="shape"&&a.value&&this.isPlainObject(a.value))return {shouldAssign:true,value:a.value};if(s.push({path:i,message:a.error??"Invalid value",value:e}),t.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(t.defaultValue)};if(t.type==="shape"&&t.shape){let d=this.applyDefaults(t.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}return {shouldAssign:true,value:a.value}}validateType(e,t,r,o,s){let{type:i}=t;switch(i){case "string":return this.validateString(e,t);case "number":return this.validateNumber(e,t);case "bool":return this.validateBoolean(e);case "array":return this.validateArray(e,t);case "arrayOf":return this.validateArrayOf(e,t,r,o,s);case "object":return this.validatePlainObject(e);case "shape":return this.validateShape(e,t,r,o,s);case "oneOfType":return this.validateOneOfType(e,t);case "func":return this.validateFunction(e);case "node":return {valid:true,value:e};default:return {valid:true,value:e}}}validateString(e,t){return typeof e!="string"?{valid:false,error:`Expected string, got ${this.describeType(e)}`}:t.oneOf&&!t.oneOf.includes(e)?{valid:false,error:`Expected one of: ${t.oneOf.join(", ")}`}:t.minLength!==void 0&&e.length<t.minLength?{valid:false,error:`String length must be >= ${t.minLength}`}:t.maxLength!==void 0&&e.length>t.maxLength?{valid:false,error:`String length must be <= ${t.maxLength}`}:t.pattern&&!new RegExp(t.pattern).test(e)?{valid:false,error:`String does not match pattern ${t.pattern}`}:{valid:true,value:e}}validateNumber(e,t){return typeof e!="number"||Number.isNaN(e)?{valid:false,error:`Expected number, got ${this.describeType(e)}`}:t.min!==void 0&&e<t.min?{valid:false,error:`Number must be >= ${t.min}`}:t.max!==void 0&&e>t.max?{valid:false,error:`Number must be <= ${t.max}`}:t.oneOf&&!t.oneOf.includes(e)?{valid:false,error:`Expected one of: ${t.oneOf.join(", ")}`}:{valid:true,value:e}}validateBoolean(e){return typeof e!="boolean"?{valid:false,error:`Expected boolean, got ${this.describeType(e)}`}:{valid:true,value:e}}validateArray(e,t){return Array.isArray(e)?t.minLength!==void 0&&e.length<t.minLength?{valid:false,error:`Array length must be >= ${t.minLength}`}:t.maxLength!==void 0&&e.length>t.maxLength?{valid:false,error:`Array length must be <= ${t.maxLength}`}:{valid:true,value:[...e]}:{valid:false,error:`Expected array, got ${this.describeType(e)}`}}validateArrayOf(e,t,r,o,s){let i=this.validateArray(e,t);if(!i.valid)return i;let a=[],d=t.itemType,l=t.itemOneOf,u=s.length;return i.value.forEach((g,f)=>{let m=[...r,String(f)];if(d){let w=this.validateType(g,{type:d},m,o,s);w.valid?a.push(w.value):s.push({path:this.buildPath(m),message:w.error??"Invalid array item",value:g});}else a.push(g);l&&!l.includes(g)&&s.push({path:this.buildPath(m),message:`Array item must be one of: ${l.join(", ")}`,value:g});}),{valid:s.length===u,value:a}}validatePlainObject(e){return this.isPlainObject(e)?{valid:true,value:{...e}}:{valid:false,error:`Expected object, got ${this.describeType(e)}`}}validateFunction(e){return typeof e!="function"?{valid:false,error:`Expected function, got ${this.describeType(e)}`}:{valid:true,value:e}}validateShape(e,t,r,o,s){if(!this.isPlainObject(e))return {valid:false,error:`Expected object, got ${this.describeType(e)}`};let i=s.length,a=this.validateObject(e,t.shape??{},o,r,s);return {valid:s.length===i,value:a}}validateOneOfType(e,t){let r=t.types??[];return r.some(s=>this.matchesType(e,s))?{valid:true,value:e}:{valid:false,error:`Value does not match any allowed type: ${r.join(", ")}`}}matchesType(e,t){switch(t){case "string":return typeof e=="string";case "number":return typeof e=="number"&&!Number.isNaN(e);case "bool":case "boolean":return typeof e=="boolean";case "array":return Array.isArray(e);case "object":return this.isPlainObject(e);case "func":case "function":return typeof e=="function";case "shape":return this.isPlainObject(e);case "node":return e==null||typeof e!="symbol";default:return true}}applyDefaults(e){let t={};for(let[r,o]of Object.entries(e)){if(o.defaultValue!==void 0){t[r]=this.cloneValue(o.defaultValue);continue}if(o.type==="shape"&&o.shape){let s=this.applyDefaults(o.shape);Object.keys(s).length>0&&(t[r]=s);}}return t}cloneValue(e){if(Array.isArray(e))return e.map(t=>this.cloneValue(t));if(this.isPlainObject(e)){let t={};for(let[r,o]of Object.entries(e))t[r]=this.cloneValue(o);return t}return e}isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}isNil(e){return e==null}buildPath(e){return e.join(".")}describeType(e){return Array.isArray(e)?"array":e===null?"null":typeof e}};var St=class{handlebars;propsValidator;constructor(e){this.handlebars=_e__default.create(),this.propsValidator=e??new Tt,this.registerHelpers();}render(e,t,r={}){try{let o=this.prepareRenderContext(e,t,r);return this.handlebars.compile(e.template,{noEscape:!0})(o)}catch(o){throw o instanceof Error?new Error(`Template rendering failed for layout '${e.id}': ${o.message}`):new Error(`Unknown error rendering layout '${e.id}'`)}}validate(e,t,r="lenient"){return this.executeValidation(e,t,r)}resolveProps(e,t,r="lenient"){let o=this.mergeProps(e.defaultProps,t);return !e.propsSchema||Object.keys(e.propsSchema).length===0?{valid:true,props:o,errors:[]}:this.executeValidation(o,e.propsSchema,r)}prepareRenderContext(e,t,r){let{validationMode:o="lenient",skipValidation:s=false}=r,i=s?this.mergeProps(e.defaultProps,t.props):this.resolveProps(e,t.props,o).props;return {...t,vars:this.sanitizeVars(t.vars),props:i}}registerHelpers(){this.handlebars.registerHelper("formatConversation",Eo),_e__default.helpers.each&&this.handlebars.registerHelper("each",_e__default.helpers.each),_e__default.helpers.if&&this.handlebars.registerHelper("if",_e__default.helpers.if),_e__default.helpers.unless&&this.handlebars.registerHelper("unless",_e__default.helpers.unless),_e__default.helpers.with&&this.handlebars.registerHelper("with",_e__default.helpers.with),this.handlebars.registerHelper("eq",function(e,t){return e===t}),this.handlebars.registerHelper("ne",function(e,t){return e!==t}),this.handlebars.registerHelper("gt",function(e,t){return e>t}),this.handlebars.registerHelper("lt",function(e,t){return e<t}),this.handlebars.registerHelper("json",function(e){return new _e__default.SafeString(JSON.stringify(e))}),this.handlebars.registerHelper("raw",function(e){return typeof e?.fn=="function"?e.fn(this):""}),this.handlebars.registerHelper("escapeHandlebars",function(e){return typeof e!="string"?"":e.replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;")}),this.handlebars.registerHelper("formatFileSize",function(e){if(e===0)return "0 B";let t=["B","KB","MB","GB"],r=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/Math.pow(1024,r)*100)/100+" "+t[r]});}executeValidation(e,t,r){try{return this.propsValidator.validate(e,t,r)}catch(o){if(o instanceof Pe&&o.errors&&o.errors.length>0){let s=o.errors[0];if(s)throw new Pe(s.message,o.errors)}throw o}}mergeProps(e,t){let r=this.cloneDeep(e??{});return t?this.deepMerge(r,t):r}deepMerge(e,t){for(let[r,o]of Object.entries(t)){if(this.isPlainObject(o)){let s=e[r];e[r]=this.deepMerge(this.isPlainObject(s)?s:{},o);continue}if(Array.isArray(o)){e[r]=this.cloneDeep(o);continue}e[r]=o;}return e}cloneDeep(e){if(Array.isArray(e))return e.map(t=>this.cloneDeep(t));if(this.isPlainObject(e)){let t={};for(let[r,o]of Object.entries(e))t[r]=this.cloneDeep(o);return t}return e}isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}sanitizeVars(e){if(!e)return {};let t={...e};if(typeof e.user_input=="string"){t.user_input_raw=e.user_input;let r=e.user_input.replace(/\{\{\{/g,"&#123;&#123;&#123;").replace(/\}\}\}/g,"&#125;&#125;&#125;").replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;");t.user_input=this.handlebars.escapeExpression(r);}return t}};c();var Yr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function sa(n){let e=randomBytes(n*2),t="";for(let r=0;r<e.length&&t.length<n;r++){let o=e[r];o<248&&(t+=Yr[o%62]);}for(;t.length<n;)t+=Yr[randomBytes(1)[0]%62];return t}function Xe(n){return `${n}_${sa(8)}`}function ia(n,e){let{createHash:t}=re("crypto"),r=t("sha256").update(e).digest(),o=Buffer.alloc(8);for(let i=0;i<32;i++)o[i%8]^=r[i];let s="";for(let i of o)s+=Yr[i%62];return `${n}_${s}`}c();function Qr(n){let e=t=>String(t).padStart(2,"0");return `${n.getFullYear()}${e(n.getMonth()+1)}${e(n.getDate())}T${e(n.getHours())}${e(n.getMinutes())}${e(n.getSeconds())}`}c();function Co(n,e){return t=>{try{let r=e(t);r instanceof Promise&&r.catch(o=>{console.error(`[crewx] event listener error (${n}): ${o instanceof Error?o.message:String(o)}`);});}catch(r){console.error(`[crewx] event listener error (${n}): ${r instanceof Error?r.message:String(r)}`);}}}var bt=class{_emitter=new EventEmitter;on(e,t){let r=Co(e,t);return this._emitter.on(e,r),()=>this._emitter.off(e,r)}once(e,t){let r=Co(e,t);return this._emitter.once(e,r),()=>this._emitter.off(e,r)}emit(e,t){this._emitter.emit(e,t);}};c();function Zr(n){let e=new Map,t=r=>r.startsWith(`${n}::`)?r:`${n}::${r}`;return {async get(r){let o=e.get(t(r));return o?o.value:void 0},async set(r,o){e.set(t(r),{value:o});},async delete(r){return e.delete(t(r))},async list(r){let o=r?t(r):`${n}::`,s=[];for(let i of e.keys())i.startsWith(o)&&s.push(i.slice(n.length+2));return s}}}c();var en=new AsyncLocalStorage;function la(){return en}function ca(n,e){return en.run(n,e)}function tn(n){let e=n.log??n.logger??{debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},t=n.agentRunner??{run:async()=>({output:""})},r=n.db??{get:async()=>{},set:async()=>{},delete:async()=>false,list:async()=>[]},o=n.storage??{put:async()=>"",get:async()=>{},delete:async()=>false},s=n.audit??{log:async()=>{}},i=n.onInbound??(async()=>({accepted:true})),a=n.onEmitEvent??(async()=>({accepted:true})),d=n.onUpdateMessage??(async()=>{}),l=n.onResolveUser??(async f=>({userId:f,displayName:f})),u=async f=>{let m=en.getStore();if(!m){e.warn("respondSync called outside sync window \u2014 graceful degradation (no-op)",{textPreview:typeof f=="object"&&"text"in f?f.text.slice(0,80):void 0});return}let w="text"in f?f.text:"";m.res.status(200).json({text:w});},g=n.httpRouter??{registerRoute:()=>{e.warn("httpRouter not configured \u2014 registerRoute is a no-op");}};return {instanceId:n.instanceId,config:n.config,capabilities:n.capabilities,log:e,agentRunner:t,db:r,storage:o,audit:s,abortSignal:n.abortSignal??new AbortController().signal,httpRouter:g,inbound:i,emitEvent:a,updateMessage:d,resolveUser:l,respondSync:u}}Oe();c();var ua=/^-\s*Status:\s*active/m,pa=/^---\n([\s\S]*?)\n---/,ga=/^type:\s*goal\s*$/m;async function Po(n,e=Ve,t){let r=typeof t=="string"?[t]:Array.isArray(t)?t:void 0;if(r){let a=[];for(let d of r){let l=e.resolvePath(n,d);await e.exists(l)&&a.push(await e.readFile(l));}return a.join(`
46
+ `)}getPath(e){return this.docs.get(e)?.path}getNames(){return Array.from(this.docs.keys())}async buildContext(){let e={};for(let t of this.docs.keys()){let r=await this.getContent(t)??"",o=await this.getToc(t),s=this.getPath(t);e[t]={content:r,toc:o,...s?{path:s}:{}};}return e}async loadFromFile(e,t,r){try{let o=this.resolve(t,r),s=await this.fs.readFile(o);this.docs.set(e,{content:s,path:o});}catch(o){let s=o instanceof Error?o.message:String(o);console.warn(`[DocumentLoader] Failed to load '${e}' from '${t}': ${s}`);}}resolve(e,t){return this.fs.isAbsolute(e)?e:t?this.fs.resolvePath(t,e):this.fs.resolvePath(e)}};c();c();var oe=class extends Error{constructor(t,r,o){super(t);this.layoutId=r;this.cause=o;this.name="LayoutLoadError";}layoutId;cause},Se=class extends Error{constructor(t,r=[],o){super(t);this.errors=r;this.cause=o;this.name="PropsValidationError";}errors;cause};var ca={validationMode:"lenient",fallbackLayoutId:"crewx/default"},St=class{layouts=new Map;options;constructor(e){this.options={...ca,...e,templatesPath:e?.templatesPath??at()},this.loadAllLayouts();}load(e,t){let r=this.layouts.get(e);if(!r){let o=this.normalizeLayoutId(e);r=this.layouts.get(o);}if(!r&&(console.warn(`Layout not found: ${e}, falling back to ${this.options.fallbackLayoutId}`),r=this.layouts.get(this.options.fallbackLayoutId),!r))throw new oe(`Fallback layout not found: ${this.options.fallbackLayoutId}`,this.options.fallbackLayoutId);return t&&Object.keys(t).length>0?{...r,defaultProps:{...r.defaultProps,...t}}:r}getLayoutIds(){return Array.from(this.layouts.keys())}hasLayout(e){if(this.layouts.has(e))return true;let t=this.normalizeLayoutId(e);return this.layouts.has(t)}reload(){this.layouts.clear(),this.loadAllLayouts();}registerLayout(e,t){if(!e||typeof e!="string")throw new oe("Layout ID must be a non-empty string",e);let r=typeof t=="string"?{template:t}:t,o=typeof r.template=="string"?r.template:"";if(!o||o.trim().length===0)throw new oe(`Custom layout template is empty for ${e}`,e);let s=r.propsSchema||{},i=this.extractDefaultProps(s),a=r.defaultProps||{},d={id:e,version:r.version||"1.0.0",description:r.description||`Custom layout ${e}`,template:o,propsSchema:this.parsePropsSchema(s),defaultProps:{...i,...a}},l=this.layouts.get(e),u=l?.template===o&&JSON.stringify(l?.defaultProps??{})===JSON.stringify(d.defaultProps??{})&&JSON.stringify(l?.propsSchema??{})===JSON.stringify(d.propsSchema??{});this.layouts.set(e,d),process.env.CREWX_VERBOSE==="1"&&(l?u||console.error(`Updated custom layout: ${e}`):console.error(`Registered custom layout: ${e}`));}registerLayouts(e){for(let[t,r]of Object.entries(e))try{this.registerLayout(t,r);}catch(o){console.warn(`Failed to register custom layout ${t}:`,o instanceof Error?o.message:o);}}loadAllLayouts(){let e=this.options.templatesPath;if(!existsSync(e))throw new oe(`Templates directory not found: ${e}`,void 0,new Error(`Directory does not exist: ${e}`));try{let t=readdirSync(e).filter(r=>r.endsWith(".yaml")||r.endsWith(".yml"));t.length===0&&console.warn(`No layout files found in ${e}`);for(let r of t){let o=r.replace(/\.(yaml|yml)$/,""),s=W.join(e,r);try{let i=this.loadLayoutFile(s,o),a=`crewx/${o}`;this.layouts.set(a,i),a!=="crewx/minimal"&&process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded layout: ${a} from ${r}`);}catch(i){console.error(`Failed to load layout file ${r}:`,i);}}process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded ${this.layouts.size} layouts from ${e}`);}catch(t){throw new oe(`Failed to read layouts directory: ${e}`,void 0,t instanceof Error?t:new Error(String(t)))}}loadLayoutFile(e,t){try{let r=readFileSync(e,"utf-8");if(!r||r.trim().length===0)throw console.warn(`Empty YAML file: ${e}, will use fallback`),new oe(`Empty YAML file: ${e}`,t,new Error("File content is empty"));let o=load(r);if(!o||typeof o!="object")throw console.warn(`Invalid YAML content in ${e} (parsed as ${typeof o}), will use fallback`),new oe(`Invalid or empty YAML in ${e}`,t,new Error("YAML parsing returned null/undefined or non-object"));if(o.layouts&&typeof o.layouts=="object"){let s=this.resolveLayoutEntry(o.layouts,t);if(!s||s.template.trim().length===0)throw console.warn(`Empty or missing layout template in ${e} for ${t}`),new oe(`Layout template not found or empty in layouts map: ${t}`,t);let i=s.propsSchema||o.propsSchema||{};return {id:`crewx/${t}`,version:o.version||"1.0.0",description:o.description||`CrewX ${t} layout`,template:s.template,propsSchema:this.parsePropsSchema(i),defaultProps:this.extractDefaultProps(i)}}else {if(!o.template||typeof o.template=="string"&&o.template.trim().length===0)throw console.warn(`Empty or missing template field in ${e}`),new oe(`Layout template is missing or empty in ${e}`,t);return {id:o.id||`crewx/${t}`,version:o.version||"1.0.0",description:o.description||"",template:o.template,propsSchema:this.parsePropsSchema(o.propsSchema||{}),defaultProps:this.extractDefaultProps(o.propsSchema||{})}}}catch(r){throw new oe(`Failed to load layout file: ${e}`,t,r instanceof Error?r:new Error(String(r)))}}parsePropsSchema(e){let t={};for(let[r,o]of Object.entries(e))typeof o=="object"&&o!==null&&(t[r]=o);return t}extractDefaultProps(e){let t={};for(let[r,o]of Object.entries(e))o&&typeof o=="object"&&("defaultValue"in o?t[r]=o.defaultValue:"default"in o&&(t[r]=o.default));return t}normalizeLayoutId(e){return e?e.includes("/")?e:`crewx/${e}`:this.options.fallbackLayoutId}resolveLayoutEntry(e,t){let r=new Set;if(t)if(r.add(t),t.includes("/")){let o=t.split("/"),s=o[o.length-1];s&&r.add(s);}else r.add(`crewx/${t}`);r.add("default");for(let o of r){let s=e[o];if(typeof s=="string"&&s.trim().length>0)return {template:s};if(s&&typeof s=="object"&&typeof s.template=="string"&&s.template.trim().length>0)return {template:s.template,propsSchema:s.propsSchema}}for(let o of Object.values(e)){if(typeof o=="string"&&o.trim().length>0)return {template:o};let s=o;if(s&&typeof s=="object"&&typeof s.template=="string"&&s.template.trim().length>0)return {template:s.template,propsSchema:s.propsSchema}}}};c();c();c();function Ze(n){return String(Math.floor(Math.abs(n))).padStart(2,"0")}function bt(n){if(!(n instanceof Date)||Number.isNaN(n.getTime()))return "";let e=-n.getTimezoneOffset(),t=e>=0?"+":"-";return `${n.getFullYear()}-${Ze(n.getMonth()+1)}-${Ze(n.getDate())}T${Ze(n.getHours())}:${Ze(n.getMinutes())}:${Ze(n.getSeconds())}${t}${Ze(e/60)}:${Ze(e%60)}`}function ua(n){return n.map(e=>{let t=typeof e?.timestamp=="number"?e.timestamp:null;return t===null?e:{...e,created_at:bt(new Date(t))}})}function pa(n){let e=[];for(let t of n)t?.isAssistant&&t?.metadata?.agent_id?e.push(String(t.metadata.agent_id)):!t?.isAssistant&&t?.metadata?.caller_agent_id&&e.push(String(t.metadata.caller_agent_id));return Array.from(new Set(e))}function Co(...n){let e=n[n.length-1],t=n[0],r=n[1],o=typeof n[2]=="string"?n[2]:"",s=typeof n[3]=="string"?n[3]:"";if(!Array.isArray(t)||t.length===0||!(e&&typeof e.fn=="function"))return "";let a=pa(t),d=a.length>0?a[0]:"",l=Date.now(),u={messages:ua(t),platform:typeof r=="string"?r:"",messagesCount:t.length,agentIds:a,primaryAgentId:d,currentAgentId:o,threadId:s,now:bt(new Date(l))};return e.fn(u)}c();var It=class{defaultMode;constructor(e={}){this.defaultMode=e.defaultMode??"lenient";}validate(e,t,r=this.defaultMode){let o=[],s=this.validateObject(e??{},t,r,["props"],o);if(o.length>0&&r==="strict")throw new Se("Props validation failed in strict mode",o);return {valid:o.length===0,props:s,errors:o}}validateObject(e,t,r,o,s){let i={};if(r==="strict")for(let a of Object.keys(e))t[a]||s.push({path:this.buildPath([...o,a]),message:`Unknown prop '${a}'`,value:e[a]});for(let[a,d]of Object.entries(t)){let l=[...o,a],u=e[a],g=this.resolveProp(u,d,l,r,s);g.shouldAssign&&(i[a]=g.value);}return i}resolveProp(e,t,r,o,s){let i=this.buildPath(r);if(this.isNil(e)){if(t.isRequired&&s.push({path:i,message:`Required prop '${r[r.length-1]}' is missing`}),t.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(t.defaultValue)};if(t.type==="shape"&&t.shape){let d=this.applyDefaults(t.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}let a=this.validateType(e,t,r,o,s);if(!a.valid){if(t.type==="shape"&&a.value&&this.isPlainObject(a.value))return {shouldAssign:true,value:a.value};if(s.push({path:i,message:a.error??"Invalid value",value:e}),t.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(t.defaultValue)};if(t.type==="shape"&&t.shape){let d=this.applyDefaults(t.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}return {shouldAssign:true,value:a.value}}validateType(e,t,r,o,s){let{type:i}=t;switch(i){case "string":return this.validateString(e,t);case "number":return this.validateNumber(e,t);case "bool":return this.validateBoolean(e);case "array":return this.validateArray(e,t);case "arrayOf":return this.validateArrayOf(e,t,r,o,s);case "object":return this.validatePlainObject(e);case "shape":return this.validateShape(e,t,r,o,s);case "oneOfType":return this.validateOneOfType(e,t);case "func":return this.validateFunction(e);case "node":return {valid:true,value:e};default:return {valid:true,value:e}}}validateString(e,t){return typeof e!="string"?{valid:false,error:`Expected string, got ${this.describeType(e)}`}:t.oneOf&&!t.oneOf.includes(e)?{valid:false,error:`Expected one of: ${t.oneOf.join(", ")}`}:t.minLength!==void 0&&e.length<t.minLength?{valid:false,error:`String length must be >= ${t.minLength}`}:t.maxLength!==void 0&&e.length>t.maxLength?{valid:false,error:`String length must be <= ${t.maxLength}`}:t.pattern&&!new RegExp(t.pattern).test(e)?{valid:false,error:`String does not match pattern ${t.pattern}`}:{valid:true,value:e}}validateNumber(e,t){return typeof e!="number"||Number.isNaN(e)?{valid:false,error:`Expected number, got ${this.describeType(e)}`}:t.min!==void 0&&e<t.min?{valid:false,error:`Number must be >= ${t.min}`}:t.max!==void 0&&e>t.max?{valid:false,error:`Number must be <= ${t.max}`}:t.oneOf&&!t.oneOf.includes(e)?{valid:false,error:`Expected one of: ${t.oneOf.join(", ")}`}:{valid:true,value:e}}validateBoolean(e){return typeof e!="boolean"?{valid:false,error:`Expected boolean, got ${this.describeType(e)}`}:{valid:true,value:e}}validateArray(e,t){return Array.isArray(e)?t.minLength!==void 0&&e.length<t.minLength?{valid:false,error:`Array length must be >= ${t.minLength}`}:t.maxLength!==void 0&&e.length>t.maxLength?{valid:false,error:`Array length must be <= ${t.maxLength}`}:{valid:true,value:[...e]}:{valid:false,error:`Expected array, got ${this.describeType(e)}`}}validateArrayOf(e,t,r,o,s){let i=this.validateArray(e,t);if(!i.valid)return i;let a=[],d=t.itemType,l=t.itemOneOf,u=s.length;return i.value.forEach((g,f)=>{let m=[...r,String(f)];if(d){let w=this.validateType(g,{type:d},m,o,s);w.valid?a.push(w.value):s.push({path:this.buildPath(m),message:w.error??"Invalid array item",value:g});}else a.push(g);l&&!l.includes(g)&&s.push({path:this.buildPath(m),message:`Array item must be one of: ${l.join(", ")}`,value:g});}),{valid:s.length===u,value:a}}validatePlainObject(e){return this.isPlainObject(e)?{valid:true,value:{...e}}:{valid:false,error:`Expected object, got ${this.describeType(e)}`}}validateFunction(e){return typeof e!="function"?{valid:false,error:`Expected function, got ${this.describeType(e)}`}:{valid:true,value:e}}validateShape(e,t,r,o,s){if(!this.isPlainObject(e))return {valid:false,error:`Expected object, got ${this.describeType(e)}`};let i=s.length,a=this.validateObject(e,t.shape??{},o,r,s);return {valid:s.length===i,value:a}}validateOneOfType(e,t){let r=t.types??[];return r.some(s=>this.matchesType(e,s))?{valid:true,value:e}:{valid:false,error:`Value does not match any allowed type: ${r.join(", ")}`}}matchesType(e,t){switch(t){case "string":return typeof e=="string";case "number":return typeof e=="number"&&!Number.isNaN(e);case "bool":case "boolean":return typeof e=="boolean";case "array":return Array.isArray(e);case "object":return this.isPlainObject(e);case "func":case "function":return typeof e=="function";case "shape":return this.isPlainObject(e);case "node":return e==null||typeof e!="symbol";default:return true}}applyDefaults(e){let t={};for(let[r,o]of Object.entries(e)){if(o.defaultValue!==void 0){t[r]=this.cloneValue(o.defaultValue);continue}if(o.type==="shape"&&o.shape){let s=this.applyDefaults(o.shape);Object.keys(s).length>0&&(t[r]=s);}}return t}cloneValue(e){if(Array.isArray(e))return e.map(t=>this.cloneValue(t));if(this.isPlainObject(e)){let t={};for(let[r,o]of Object.entries(e))t[r]=this.cloneValue(o);return t}return e}isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}isNil(e){return e==null}buildPath(e){return e.join(".")}describeType(e){return Array.isArray(e)?"array":e===null?"null":typeof e}};var Ot=class{handlebars;propsValidator;constructor(e){this.handlebars=xe__default.create(),this.propsValidator=e??new It,this.registerHelpers();}render(e,t,r={}){try{let o=this.prepareRenderContext(e,t,r);return this.handlebars.compile(e.template,{noEscape:!0})(o)}catch(o){throw o instanceof Error?new Error(`Template rendering failed for layout '${e.id}': ${o.message}`):new Error(`Unknown error rendering layout '${e.id}'`)}}validate(e,t,r="lenient"){return this.executeValidation(e,t,r)}resolveProps(e,t,r="lenient"){let o=this.mergeProps(e.defaultProps,t);return !e.propsSchema||Object.keys(e.propsSchema).length===0?{valid:true,props:o,errors:[]}:this.executeValidation(o,e.propsSchema,r)}prepareRenderContext(e,t,r){let{validationMode:o="lenient",skipValidation:s=false}=r,i=s?this.mergeProps(e.defaultProps,t.props):this.resolveProps(e,t.props,o).props;return {...t,vars:this.sanitizeVars(t.vars),props:i}}registerHelpers(){this.handlebars.registerHelper("formatConversation",Co),xe__default.helpers.each&&this.handlebars.registerHelper("each",xe__default.helpers.each),xe__default.helpers.if&&this.handlebars.registerHelper("if",xe__default.helpers.if),xe__default.helpers.unless&&this.handlebars.registerHelper("unless",xe__default.helpers.unless),xe__default.helpers.with&&this.handlebars.registerHelper("with",xe__default.helpers.with),this.handlebars.registerHelper("eq",function(e,t){return e===t}),this.handlebars.registerHelper("ne",function(e,t){return e!==t}),this.handlebars.registerHelper("gt",function(e,t){return e>t}),this.handlebars.registerHelper("lt",function(e,t){return e<t}),this.handlebars.registerHelper("json",function(e){return new xe__default.SafeString(JSON.stringify(e))}),this.handlebars.registerHelper("raw",function(e){return typeof e?.fn=="function"?e.fn(this):""}),this.handlebars.registerHelper("escapeHandlebars",function(e){return typeof e!="string"?"":e.replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;")}),this.handlebars.registerHelper("formatFileSize",function(e){if(e===0)return "0 B";let t=["B","KB","MB","GB"],r=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/Math.pow(1024,r)*100)/100+" "+t[r]});}executeValidation(e,t,r){try{return this.propsValidator.validate(e,t,r)}catch(o){if(o instanceof Se&&o.errors&&o.errors.length>0){let s=o.errors[0];if(s)throw new Se(s.message,o.errors)}throw o}}mergeProps(e,t){let r=this.cloneDeep(e??{});return t?this.deepMerge(r,t):r}deepMerge(e,t){for(let[r,o]of Object.entries(t)){if(this.isPlainObject(o)){let s=e[r];e[r]=this.deepMerge(this.isPlainObject(s)?s:{},o);continue}if(Array.isArray(o)){e[r]=this.cloneDeep(o);continue}e[r]=o;}return e}cloneDeep(e){if(Array.isArray(e))return e.map(t=>this.cloneDeep(t));if(this.isPlainObject(e)){let t={};for(let[r,o]of Object.entries(e))t[r]=this.cloneDeep(o);return t}return e}isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}sanitizeVars(e){if(!e)return {};let t={...e};if(typeof e.user_input=="string"){t.user_input_raw=e.user_input;let r=e.user_input.replace(/\{\{\{/g,"&#123;&#123;&#123;").replace(/\}\}\}/g,"&#125;&#125;&#125;").replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;");t.user_input=this.handlebars.escapeExpression(r);}return t}};c();var en="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function ga(n){let e=randomBytes(n*2),t="";for(let r=0;r<e.length&&t.length<n;r++){let o=e[r];o<248&&(t+=en[o%62]);}for(;t.length<n;)t+=en[randomBytes(1)[0]%62];return t}function et(n){return `${n}_${ga(8)}`}function ma(n,e){let{createHash:t}=re("crypto"),r=t("sha256").update(e).digest(),o=Buffer.alloc(8);for(let i=0;i<32;i++)o[i%8]^=r[i];let s="";for(let i of o)s+=en[i%62];return `${n}_${s}`}c();function tn(n){let e=t=>String(t).padStart(2,"0");return `${n.getFullYear()}${e(n.getMonth()+1)}${e(n.getDate())}T${e(n.getHours())}${e(n.getMinutes())}${e(n.getSeconds())}`}c();function To(n,e){return t=>{try{let r=e(t);r instanceof Promise&&r.catch(o=>{console.error(`[crewx] event listener error (${n}): ${o instanceof Error?o.message:String(o)}`);});}catch(r){console.error(`[crewx] event listener error (${n}): ${r instanceof Error?r.message:String(r)}`);}}}var Mt=class{_emitter=new EventEmitter;on(e,t){let r=To(e,t);return this._emitter.on(e,r),()=>this._emitter.off(e,r)}once(e,t){let r=To(e,t);return this._emitter.once(e,r),()=>this._emitter.off(e,r)}emit(e,t){this._emitter.emit(e,t);}};c();function rn(n){let e=new Map,t=r=>r.startsWith(`${n}::`)?r:`${n}::${r}`;return {async get(r){let o=e.get(t(r));return o?o.value:void 0},async set(r,o){e.set(t(r),{value:o});},async delete(r){return e.delete(t(r))},async list(r){let o=r?t(r):`${n}::`,s=[];for(let i of e.keys())i.startsWith(o)&&s.push(i.slice(n.length+2));return s}}}c();var nn=new AsyncLocalStorage;function ha(){return nn}function wa(n,e){return nn.run(n,e)}function on(n){let e=n.log??n.logger??{debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},t=n.agentRunner??{run:async()=>({output:""})},r=n.db??{get:async()=>{},set:async()=>{},delete:async()=>false,list:async()=>[]},o=n.storage??{put:async()=>"",get:async()=>{},delete:async()=>false},s=n.audit??{log:async()=>{}},i=n.onInbound??(async()=>({accepted:true})),a=n.onEmitEvent??(async()=>({accepted:true})),d=n.onUpdateMessage??(async()=>{}),l=n.onResolveUser??(async f=>({userId:f,displayName:f})),u=async f=>{let m=nn.getStore();if(!m){e.warn("respondSync called outside sync window \u2014 graceful degradation (no-op)",{textPreview:typeof f=="object"&&"text"in f?f.text.slice(0,80):void 0});return}let w="text"in f?f.text:"";m.res.status(200).json({text:w});},g=n.httpRouter??{registerRoute:()=>{e.warn("httpRouter not configured \u2014 registerRoute is a no-op");}};return {instanceId:n.instanceId,config:n.config,capabilities:n.capabilities,log:e,agentRunner:t,db:r,storage:o,audit:s,abortSignal:n.abortSignal??new AbortController().signal,httpRouter:g,inbound:i,emitEvent:a,updateMessage:d,resolveUser:l,respondSync:u}}Ne();c();var va=/^-\s*Status:\s*active/m,_a=/^---\n([\s\S]*?)\n---/,xa=/^type:\s*goal\s*$/m;async function So(n,e=Ye,t){let r=typeof t=="string"?[t]:Array.isArray(t)?t:void 0;if(r){let a=[];for(let d of r){let l=e.resolvePath(n,d);await e.exists(l)&&a.push(await e.readFile(l));}return a.join(`
47
47
  ---
48
- `)}let s=(await e.readdir(n)).filter(a=>a.endsWith(".md"));if(s.length===0)return "";let i=[];for(let a of s){let d=e.resolvePath(n,a),l=await e.readFile(d),u=pa.exec(l);!u||!ga.test(u[1])||ua.test(l)&&i.push(l);}return i.join(`
48
+ `)}let s=(await e.readdir(n)).filter(a=>a.endsWith(".md"));if(s.length===0)return "";let i=[];for(let a of s){let d=e.resolvePath(n,a),l=await e.readFile(d),u=_a.exec(l);!u||!xa.test(u[1])||va.test(l)&&i.push(l);}return i.join(`
49
49
  ---
50
- `)}c();function ma(){let n=new Date,e=n.getFullYear(),t=String(n.getMonth()+1).padStart(2,"0"),r=String(n.getDate()).padStart(2,"0");return `${e}-${t}-${r}`}async function To(n,e=Ve){let t=e.resolvePath(n,`${ma()}.md`);return await e.exists(t)?e.readFile(t):""}Oe();c();var It=new AsyncLocalStorage;function rn(n){if(n)return {parentTaskId:n.parentTaskId??null,rootTraceId:n.rootTraceId,callerAgentId:n.callerAgentId??null}}c();function ya(n){return typeof n!="string"?"":n.replace(/</g,"&lt;").replace(/>/g,"&gt;")}function nn(n){return n.messages.map(e=>({text:ya(e.text),isAssistant:e.isAssistant,timestamp:e.timestamp,metadata:e.metadata,files:void 0}))}c();Oe();Me();c();c();var ut=class{resolveDbPath(){return process.env.CREWX_DB?process.env.CREWX_DB:process.env.CREWX_TRACES_DB?process.env.CREWX_TRACES_DB:join(_a.homedir(),".crewx","crewx.db")}resolveDbPaths(){return [this.resolveDbPath()]}isMissingTableError(e){return e instanceof Error&&/no such table:/i.test(e.message)}dbExists(e){return existsSync(e??this.resolveDbPath())}};c();function xe(n){let e=re("better-sqlite3"),{drizzle:t}=re("drizzle-orm/better-sqlite3"),r=new e(n);return r.exec("PRAGMA journal_mode = WAL"),r.exec("PRAGMA busy_timeout = 5000"),r.exec("PRAGMA foreign_keys = ON"),r.exec("PRAGMA analysis_limit = 400"),r.exec("PRAGMA optimize"),{db:t(r),runRaw:(o,s=[])=>r.prepare(o).run(...s),close:()=>r.close()}}c();var So=new Set,xa={agent_id:"TEXT",status:"TEXT DEFAULT 'running'",started_at:"TEXT",trace_id:"TEXT",parent_task_id:"TEXT",crewx_version:"TEXT",pid:"INTEGER",thread_id:"TEXT",workspace_id:"TEXT",workspace_ref:"TEXT",workspace_name:"TEXT",project_id:"TEXT",project_name:"TEXT"};function sn(n,e){return (n.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function ka(n,e){if(e>0||!sn(n,"tasks"))return;let t=n.all("PRAGMA table_info(tasks)"),r=new Set(t.map(o=>o.name));for(let[o,s]of Object.entries(xa))r.has(o)||n.run(`ALTER TABLE tasks ADD COLUMN ${o} ${s}`);}var Aa={"0002_normalize_task_names":{workspace_name:"TEXT",project_name:"TEXT"}};function Ea(n,e,t){if(!sn(n,"__drizzle_migrations")||!sn(n,"tasks"))return;let r=n.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(readFileSync(Q__default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=Aa[i.tag];if(!a)continue;let d=Q__default.join(e,`${i.tag}.sql`);if(!existsSync(d))continue;let l=readFileSync(d,"utf-8"),u=createHash("sha256").update(l).digest("hex");if(o.has(u))continue;let g=n.all("PRAGMA table_info(tasks)"),f=new Set(g.map(m=>m.name));for(let[m,w]of Object.entries(a))f.has(m)||(n.run(`ALTER TABLE tasks ADD COLUMN ${m} ${w}`),f.add(m));}}function Ra(n,e,t){let r=n.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(readFileSync(Q__default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=Q__default.join(e,`${i.tag}.sql`);if(!existsSync(a))continue;let d=readFileSync(a,"utf-8"),l=createHash("sha256").update(d).digest("hex");if(o.has(l))continue;let u=/ALTER\s+TABLE\s+[`"]?(\w+)[`"]?\s+ADD\s+[`"]?(\w+)[`"]?/gi,g=[],f;for(;(f=u.exec(d))!==null;)g.push({table:f[1],column:f[2]});if(g.length===0||!d.split(/-->\s*statement-breakpoint/).map(v=>v.trim()).filter(Boolean).every(v=>/^ALTER\s+TABLE\s+.+\s+ADD\s+/i.test(v)))continue;g.every(({table:v,column:k})=>n.all(`PRAGMA table_info("${v}")`).some(x=>x.name===k))&&n.run(t`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${l}, ${i.when})`);}}function Ca(n){let{migrate:e}=re("drizzle-orm/better-sqlite3/migrator"),{sql:t}=re("drizzle-orm"),r=[Q__default.join(y,"../migrations"),Q__default.join(y,"migrations"),Q__default.join(y,"../../../../drizzle/migrations"),Q__default.join(process.cwd(),"drizzle/migrations")],o=r.find(l=>existsSync(Q__default.join(l,"meta/_journal.json")));if(!o)throw new Error(`migrations folder not found. Searched:
50
+ `)}c();function ka(){let n=new Date,e=n.getFullYear(),t=String(n.getMonth()+1).padStart(2,"0"),r=String(n.getDate()).padStart(2,"0");return `${e}-${t}-${r}`}async function bo(n,e=Ye){let t=e.resolvePath(n,`${ka()}.md`);return await e.exists(t)?e.readFile(t):""}Ne();c();var Nt=new AsyncLocalStorage;function sn(n){if(n)return {parentTaskId:n.parentTaskId??null,rootTraceId:n.rootTraceId,callerAgentId:n.callerAgentId??null}}c();function Ea(n){return typeof n!="string"?"":n.replace(/</g,"&lt;").replace(/>/g,"&gt;")}function an(n){return n.messages.map(e=>({text:Ea(e.text),isAssistant:e.isAssistant,timestamp:e.timestamp,metadata:e.metadata,files:void 0}))}c();Ne();De();c();c();var ft=class{resolveDbPath(){return process.env.CREWX_DB?process.env.CREWX_DB:process.env.CREWX_TRACES_DB?process.env.CREWX_TRACES_DB:join(Ta.homedir(),".crewx","crewx.db")}resolveDbPaths(){return [this.resolveDbPath()]}isMissingTableError(e){return e instanceof Error&&/no such table:/i.test(e.message)}dbExists(e){return existsSync(e??this.resolveDbPath())}};c();function ke(n){let e=re("better-sqlite3"),{drizzle:t}=re("drizzle-orm/better-sqlite3"),r=new e(n);return r.exec("PRAGMA journal_mode = WAL"),r.exec("PRAGMA busy_timeout = 5000"),r.exec("PRAGMA foreign_keys = ON"),r.exec("PRAGMA analysis_limit = 400"),r.exec("PRAGMA optimize"),{db:t(r),runRaw:(o,s=[])=>r.prepare(o).run(...s),close:()=>r.close()}}c();var Io=new Set,Sa={agent_id:"TEXT",status:"TEXT DEFAULT 'running'",started_at:"TEXT",trace_id:"TEXT",parent_task_id:"TEXT",crewx_version:"TEXT",pid:"INTEGER",thread_id:"TEXT",workspace_id:"TEXT",workspace_ref:"TEXT",workspace_name:"TEXT",project_id:"TEXT",project_name:"TEXT"};function ln(n,e){return (n.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function ba(n,e){if(e>0||!ln(n,"tasks"))return;let t=n.all("PRAGMA table_info(tasks)"),r=new Set(t.map(o=>o.name));for(let[o,s]of Object.entries(Sa))r.has(o)||n.run(`ALTER TABLE tasks ADD COLUMN ${o} ${s}`);}var Ia={"0002_normalize_task_names":{workspace_name:"TEXT",project_name:"TEXT"}};function Oa(n,e,t){if(!ln(n,"__drizzle_migrations")||!ln(n,"tasks"))return;let r=n.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(readFileSync(W__default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=Ia[i.tag];if(!a)continue;let d=W__default.join(e,`${i.tag}.sql`);if(!existsSync(d))continue;let l=readFileSync(d,"utf-8"),u=createHash("sha256").update(l).digest("hex");if(o.has(u))continue;let g=n.all("PRAGMA table_info(tasks)"),f=new Set(g.map(m=>m.name));for(let[m,w]of Object.entries(a))f.has(m)||(n.run(`ALTER TABLE tasks ADD COLUMN ${m} ${w}`),f.add(m));}}function Ma(n,e,t){let r=n.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(readFileSync(W__default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=W__default.join(e,`${i.tag}.sql`);if(!existsSync(a))continue;let d=readFileSync(a,"utf-8"),l=createHash("sha256").update(d).digest("hex");if(o.has(l))continue;let u=/ALTER\s+TABLE\s+[`"]?(\w+)[`"]?\s+ADD\s+[`"]?(\w+)[`"]?/gi,g=[],f;for(;(f=u.exec(d))!==null;)g.push({table:f[1],column:f[2]});if(g.length===0||!d.split(/-->\s*statement-breakpoint/).map(v=>v.trim()).filter(Boolean).every(v=>/^ALTER\s+TABLE\s+.+\s+ADD\s+/i.test(v)))continue;g.every(({table:v,column:E})=>n.all(`PRAGMA table_info("${v}")`).some(x=>x.name===E))&&n.run(t`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${l}, ${i.when})`);}}function Na(n){let{migrate:e}=re("drizzle-orm/better-sqlite3/migrator"),{sql:t}=re("drizzle-orm"),r=[W__default.join(y,"../migrations"),W__default.join(y,"migrations"),W__default.join(y,"../../../../drizzle/migrations"),W__default.join(process.cwd(),"drizzle/migrations")],o=r.find(l=>existsSync(W__default.join(l,"meta/_journal.json")));if(!o)throw new Error(`migrations folder not found. Searched:
51
51
  ${r.join(`
52
- `)}`);let s=n.get(t`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'`),i=0;s?.cnt&&(i=n.get(t`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0),ka(n,i),s?.cnt&&(Ra(n,o,t),Ea(n,o,t)),e(n,{migrationsFolder:o});let d=(n.get(t`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0)-i;if(d>0){let l=s?.cnt?"Database migrated":"Database initialized";console.error(`[crewx] ${l} (${d} migration${d>1?"s":""} applied).`);}}function dr(n,e){So.has(e)||(Ca(n),So.add(e));}c();var M=class extends Error{code;cause;constructor(e,t,r){super(t),this.name="RepositoryError",this.code=e,this.cause=r,Object.setPrototypeOf(this,new.target.prototype);}};c();c();var Io=sqliteTable("workspaces",{id:text("id").primaryKey(),slug:text("slug").notNull().unique(),name:text("name").notNull(),workspace_path:text("workspace_path"),description:text("description"),is_active:integer("is_active").notNull().default(1),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull()});c();var p=sqliteTable("tasks",{id:text("id").primaryKey(),agent_id:text("agent_id").notNull(),user_id:text("user_id"),prompt:text("prompt").notNull(),mode:text("mode").notNull().default("execute"),status:text("status").notNull().default("running"),result:text("result"),error:text("error"),started_at:text("started_at").notNull(),completed_at:text("completed_at"),duration_ms:integer("duration_ms"),metadata:text("metadata"),workspace_id:text("workspace_id"),trace_id:text("trace_id"),parent_task_id:text("parent_task_id"),caller_agent_id:text("caller_agent_id"),model:text("model"),platform:text("platform").default("cli"),crewx_version:text("crewx_version"),input_tokens:integer("input_tokens").default(0),output_tokens:integer("output_tokens").default(0),cost_usd:real("cost_usd").default(0),pid:integer("pid"),rendered_prompt:text("rendered_prompt"),command:text("command"),coding_agent_command:text("coding_agent_command"),exit_code:integer("exit_code"),logs:text("logs"),thread_id:text("thread_id"),workspace_ref:text("workspace_ref"),project_id:text("project_id"),project_ref:text("project_ref"),cached_input_tokens:integer("cached_input_tokens").default(0),run_epoch:integer("run_epoch").default(0)},n=>({idx_tasks_agent_id:index("idx_tasks_agent_id").on(n.agent_id),idx_tasks_status:index("idx_tasks_status").on(n.status),idx_tasks_started_at:index("idx_tasks_started_at").on(n.started_at),idx_tasks_trace_id:index("idx_tasks_trace_id").on(n.trace_id),idx_tasks_parent_task_id:index("idx_tasks_parent_task_id").on(n.parent_task_id),idx_tasks_crewx_version:index("idx_tasks_crewx_version").on(n.crewx_version),idx_tasks_pid:index("idx_tasks_pid").on(n.pid),idx_tasks_thread_id:index("idx_tasks_thread_id").on(n.thread_id),idx_tasks_workspace_id:index("idx_tasks_workspace_id").on(n.workspace_id),idx_tasks_workspace_ref:index("idx_tasks_workspace_ref").on(n.workspace_ref),idx_tasks_project_id:index("idx_tasks_project_id").on(n.project_id),idx_tasks_ws_started:index("idx_tasks_ws_started").on(n.workspace_id,n.started_at)}));c();var Oo=sqliteTable("threads",{id:text("id").primaryKey(),workspace_id:text("workspace_id").references(()=>Io.id,{onDelete:"set null"}),platform:text("platform").notNull().default("cli"),title:text("title"),first_message:text("first_message"),last_message:text("last_message"),message_count:integer("message_count").notNull().default(0),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull(),metadata:text("metadata"),title_locked:integer("title_locked").notNull().default(0),pinned:integer("pinned").notNull().default(0),starred:integer("starred").notNull().default(0)},n=>({idx_threads_updated_at:index("idx_threads_updated_at").on(n.updated_at),idx_threads_workspace_id:index("idx_threads_workspace_id").on(n.workspace_id),idx_threads_ws_updated:index("idx_threads_ws_updated").on(n.workspace_id,n.updated_at),idx_threads_title:index("idx_threads_title").on(n.title)}));c();var Ze=sqliteTable("spans",{id:text("id").primaryKey(),task_id:text("task_id").references(()=>p.id,{onDelete:"set null"}),parent_span_id:text("parent_span_id").references(()=>Ze.id,{onDelete:"set null"}),name:text("name").notNull(),kind:text("kind").notNull().default("internal"),status:text("status").notNull().default("ok"),started_at:text("started_at").notNull(),completed_at:text("completed_at"),duration_ms:integer("duration_ms"),input:text("input"),output:text("output"),error:text("error"),attributes:text("attributes")},n=>({idx_spans_task_id:index("idx_spans_task_id").on(n.task_id),idx_spans_parent_span_id:index("idx_spans_parent_span_id").on(n.parent_span_id)}));c();sqliteTable("tool_calls",{id:text("id").primaryKey(),task_id:text("task_id").references(()=>p.id,{onDelete:"cascade"}),session_id:text("session_id"),tool_name:text("tool_name").notNull(),files:text("files"),input:text("input"),output:text("output"),duration_ms:integer("duration_ms"),timestamp:text("timestamp").notNull()},n=>({idx_tool_calls_task_id:index("idx_tool_calls_task_id").on(n.task_id),idx_tool_calls_tool_name:index("idx_tool_calls_tool_name").on(n.tool_name),idx_tool_calls_timestamp:index("idx_tool_calls_timestamp").on(n.timestamp)}));c();sqliteTable("thread_boxes",{id:text("id").primaryKey(),thread_id:text("thread_id").notNull().references(()=>Oo.id,{onDelete:"cascade"}),seq:integer("seq").notNull(),first_task_id:text("first_task_id").notNull(),mid_task_id:text("mid_task_id").notNull(),last_task_id:text("last_task_id").notNull(),task_count:integer("task_count").notNull(),summary:text("summary"),source_tokens:integer("source_tokens").notNull(),summary_tokens:integer("summary_tokens"),created_at:text("created_at").notNull()},n=>({idx_thread_boxes_thread_id:index("idx_thread_boxes_thread_id").on(n.thread_id),idx_thread_boxes_seq:index("idx_thread_boxes_seq").on(n.thread_id,n.seq),uniq_thread_boxes_thread_seq:unique().on(n.thread_id,n.seq)}));c();sqliteTable("request_logs",{id:text("id").primaryKey(),path:text("path").notNull(),method:text("method").notNull(),status_code:integer("status_code").notNull(),duration_ms:integer("duration_ms").notNull(),ip:text("ip"),request_headers:text("request_headers"),response_headers:text("response_headers"),request_body:text("request_body"),response_body:text("response_body"),query:text("query"),user_id:text("user_id"),project_id:text("project_id"),partition_key:text("partition_key").notNull(),timestamp:text("timestamp").notNull().default(sql`(datetime('now'))`),metadata:text("metadata")},n=>({idx_request_logs_timestamp:index("idx_request_logs_timestamp").on(n.timestamp),idx_request_logs_path:index("idx_request_logs_path").on(n.path),idx_request_logs_status_code:index("idx_request_logs_status_code").on(n.status_code),idx_request_logs_partition_key:index("idx_request_logs_partition_key").on(n.partition_key)}));c();sqliteTable("usage_limit_snapshots",{id:text("id").primaryKey(),provider:text("provider").notNull(),account_ref:text("account_ref").notNull().default("default"),limit_window:text("limit_window").notNull(),bucket_start:text("bucket_start").notNull(),captured_at:text("captured_at").notNull(),used_percent:integer("used_percent").notNull(),remaining_percent:integer("remaining_percent").notNull(),resets_at:text("resets_at"),source:text("source").notNull(),metadata:text("metadata")},n=>({uniq_usage_limit_snapshots_bucket:uniqueIndex("uniq_usage_limit_snapshots_bucket").on(n.provider,n.account_ref,n.limit_window,n.bucket_start),idx_usage_limit_snapshots_window_bucket:index("idx_usage_limit_snapshots_window_bucket").on(n.limit_window,n.bucket_start),idx_usage_limit_snapshots_provider_window_bucket:index("idx_usage_limit_snapshots_provider_window_bucket").on(n.provider,n.limit_window,n.bucket_start)}));c();sqliteTable("usage_reports",{id:text("id").primaryKey(),workspace_id:text("workspace_id").notNull(),month:text("month").notNull(),generated_at:text("generated_at").notNull(),source_range:text("source_range").notNull(),tier:text("tier").notNull(),total_tokens:integer("total_tokens").notNull(),total_cost_usd:real("total_cost_usd").notNull(),payload:text("payload").notNull(),payload_hash:text("payload_hash"),signature:text("signature"),signed_at:text("signed_at"),issuer:text("issuer")},n=>({uniq_usage_reports_ws_month:uniqueIndex("uniq_usage_reports_ws_month").on(n.workspace_id,n.month)}));var $e="2026-05-09",Xa="0.8.9-rc.13",Ue=10,je=parseInt(Xa.split("rc.")[1]),Ya=new Set(["workflow","mcp"]),jo=600*1e3,Mt=class extends ut{dbPath;pidNullObservedSince=new Map;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=dirname(t);existsSync(o)||mkdirSync(o,{recursive:true});}else if(!existsSync(t))throw new M("NOT_FOUND","Database not found");let r=xe(t);if(e)try{dr(r.db,t);}catch(o){throw r.close(),o}return r}startTask(e){let t=this.openHandle(true);try{t.db.insert(p).values({id:e.id,agent_id:e.agentId,prompt:e.prompt,mode:e.mode,status:e.status,started_at:e.startedAt,pid:e.pid??null,parent_task_id:e.parentTaskId??null,caller_agent_id:e.callerAgentId??null,trace_id:e.traceId??null,command:e.command??null,metadata:e.metadata??null,workspace_id:e.workspaceId??null,platform:e.platform??"cli",crewx_version:e.crewxVersion??null,thread_id:e.threadId??null,model:e.model??null,rendered_prompt:e.renderedPrompt??null,coding_agent_command:e.codingAgentCommand??null}).onConflictDoUpdate({target:p.id,set:{pid:sql`COALESCE(excluded.pid, ${p.pid})`},setWhere:eq(p.status,"running")}).run();}catch(r){throw r instanceof M?r:new M("DB_ERROR","Failed to start task",r)}finally{t.close();}}finishTask(e){let t=this.openHandle(true);try{let r=e.runEpoch??null;t.runRaw(`UPDATE tasks SET status=?, result=?, error=?, completed_at=?, duration_ms=?,
52
+ `)}`);let s=n.get(t`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'`),i=0;s?.cnt&&(i=n.get(t`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0),ba(n,i),s?.cnt&&(Ma(n,o,t),Oa(n,o,t)),e(n,{migrationsFolder:o});let d=(n.get(t`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0)-i;if(d>0){let l=s?.cnt?"Database migrated":"Database initialized";console.error(`[crewx] ${l} (${d} migration${d>1?"s":""} applied).`);}}function cr(n,e){Io.has(e)||(Na(n),Io.add(e));}c();var O=class extends Error{code;cause;constructor(e,t,r){super(t),this.name="RepositoryError",this.code=e,this.cause=r,Object.setPrototypeOf(this,new.target.prototype);}};c();c();var Mo=sqliteTable("workspaces",{id:text("id").primaryKey(),slug:text("slug").notNull().unique(),name:text("name").notNull(),workspace_path:text("workspace_path"),description:text("description"),is_active:integer("is_active").notNull().default(1),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull()});c();var p=sqliteTable("tasks",{id:text("id").primaryKey(),agent_id:text("agent_id").notNull(),user_id:text("user_id"),prompt:text("prompt").notNull(),mode:text("mode").notNull().default("execute"),status:text("status").notNull().default("running"),result:text("result"),error:text("error"),started_at:text("started_at").notNull(),completed_at:text("completed_at"),duration_ms:integer("duration_ms"),metadata:text("metadata"),workspace_id:text("workspace_id"),trace_id:text("trace_id"),parent_task_id:text("parent_task_id"),caller_agent_id:text("caller_agent_id"),model:text("model"),platform:text("platform").default("cli"),crewx_version:text("crewx_version"),input_tokens:integer("input_tokens").default(0),output_tokens:integer("output_tokens").default(0),cost_usd:real("cost_usd").default(0),pid:integer("pid"),rendered_prompt:text("rendered_prompt"),command:text("command"),coding_agent_command:text("coding_agent_command"),exit_code:integer("exit_code"),logs:text("logs"),thread_id:text("thread_id"),workspace_ref:text("workspace_ref"),project_id:text("project_id"),project_ref:text("project_ref"),cached_input_tokens:integer("cached_input_tokens").default(0),run_epoch:integer("run_epoch").default(0)},n=>({idx_tasks_agent_id:index("idx_tasks_agent_id").on(n.agent_id),idx_tasks_status:index("idx_tasks_status").on(n.status),idx_tasks_started_at:index("idx_tasks_started_at").on(n.started_at),idx_tasks_trace_id:index("idx_tasks_trace_id").on(n.trace_id),idx_tasks_parent_task_id:index("idx_tasks_parent_task_id").on(n.parent_task_id),idx_tasks_crewx_version:index("idx_tasks_crewx_version").on(n.crewx_version),idx_tasks_pid:index("idx_tasks_pid").on(n.pid),idx_tasks_thread_id:index("idx_tasks_thread_id").on(n.thread_id),idx_tasks_workspace_id:index("idx_tasks_workspace_id").on(n.workspace_id),idx_tasks_workspace_ref:index("idx_tasks_workspace_ref").on(n.workspace_ref),idx_tasks_project_id:index("idx_tasks_project_id").on(n.project_id),idx_tasks_ws_started:index("idx_tasks_ws_started").on(n.workspace_id,n.started_at)}));c();var No=sqliteTable("threads",{id:text("id").primaryKey(),workspace_id:text("workspace_id").references(()=>Mo.id,{onDelete:"set null"}),platform:text("platform").notNull().default("cli"),title:text("title"),first_message:text("first_message"),last_message:text("last_message"),message_count:integer("message_count").notNull().default(0),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull(),metadata:text("metadata"),title_locked:integer("title_locked").notNull().default(0),pinned:integer("pinned").notNull().default(0),starred:integer("starred").notNull().default(0)},n=>({idx_threads_updated_at:index("idx_threads_updated_at").on(n.updated_at),idx_threads_workspace_id:index("idx_threads_workspace_id").on(n.workspace_id),idx_threads_ws_updated:index("idx_threads_ws_updated").on(n.workspace_id,n.updated_at),idx_threads_title:index("idx_threads_title").on(n.title)}));c();var nt=sqliteTable("spans",{id:text("id").primaryKey(),task_id:text("task_id").references(()=>p.id,{onDelete:"set null"}),parent_span_id:text("parent_span_id").references(()=>nt.id,{onDelete:"set null"}),name:text("name").notNull(),kind:text("kind").notNull().default("internal"),status:text("status").notNull().default("ok"),started_at:text("started_at").notNull(),completed_at:text("completed_at"),duration_ms:integer("duration_ms"),input:text("input"),output:text("output"),error:text("error"),attributes:text("attributes")},n=>({idx_spans_task_id:index("idx_spans_task_id").on(n.task_id),idx_spans_parent_span_id:index("idx_spans_parent_span_id").on(n.parent_span_id)}));c();sqliteTable("tool_calls",{id:text("id").primaryKey(),task_id:text("task_id").references(()=>p.id,{onDelete:"cascade"}),session_id:text("session_id"),tool_name:text("tool_name").notNull(),files:text("files"),input:text("input"),output:text("output"),duration_ms:integer("duration_ms"),timestamp:text("timestamp").notNull()},n=>({idx_tool_calls_task_id:index("idx_tool_calls_task_id").on(n.task_id),idx_tool_calls_tool_name:index("idx_tool_calls_tool_name").on(n.tool_name),idx_tool_calls_timestamp:index("idx_tool_calls_timestamp").on(n.timestamp)}));c();sqliteTable("thread_boxes",{id:text("id").primaryKey(),thread_id:text("thread_id").notNull().references(()=>No.id,{onDelete:"cascade"}),seq:integer("seq").notNull(),first_task_id:text("first_task_id").notNull(),mid_task_id:text("mid_task_id").notNull(),last_task_id:text("last_task_id").notNull(),task_count:integer("task_count").notNull(),summary:text("summary"),source_tokens:integer("source_tokens").notNull(),summary_tokens:integer("summary_tokens"),created_at:text("created_at").notNull()},n=>({idx_thread_boxes_thread_id:index("idx_thread_boxes_thread_id").on(n.thread_id),idx_thread_boxes_seq:index("idx_thread_boxes_seq").on(n.thread_id,n.seq),uniq_thread_boxes_thread_seq:unique().on(n.thread_id,n.seq)}));c();sqliteTable("request_logs",{id:text("id").primaryKey(),path:text("path").notNull(),method:text("method").notNull(),status_code:integer("status_code").notNull(),duration_ms:integer("duration_ms").notNull(),ip:text("ip"),request_headers:text("request_headers"),response_headers:text("response_headers"),request_body:text("request_body"),response_body:text("response_body"),query:text("query"),user_id:text("user_id"),project_id:text("project_id"),partition_key:text("partition_key").notNull(),timestamp:text("timestamp").notNull().default(sql`(datetime('now'))`),metadata:text("metadata")},n=>({idx_request_logs_timestamp:index("idx_request_logs_timestamp").on(n.timestamp),idx_request_logs_path:index("idx_request_logs_path").on(n.path),idx_request_logs_status_code:index("idx_request_logs_status_code").on(n.status_code),idx_request_logs_partition_key:index("idx_request_logs_partition_key").on(n.partition_key)}));c();sqliteTable("usage_limit_snapshots",{id:text("id").primaryKey(),provider:text("provider").notNull(),account_ref:text("account_ref").notNull().default("default"),limit_window:text("limit_window").notNull(),bucket_start:text("bucket_start").notNull(),captured_at:text("captured_at").notNull(),used_percent:integer("used_percent").notNull(),remaining_percent:integer("remaining_percent").notNull(),resets_at:text("resets_at"),source:text("source").notNull(),metadata:text("metadata")},n=>({uniq_usage_limit_snapshots_bucket:uniqueIndex("uniq_usage_limit_snapshots_bucket").on(n.provider,n.account_ref,n.limit_window,n.bucket_start),idx_usage_limit_snapshots_window_bucket:index("idx_usage_limit_snapshots_window_bucket").on(n.limit_window,n.bucket_start),idx_usage_limit_snapshots_provider_window_bucket:index("idx_usage_limit_snapshots_provider_window_bucket").on(n.provider,n.limit_window,n.bucket_start)}));c();sqliteTable("usage_reports",{id:text("id").primaryKey(),workspace_id:text("workspace_id").notNull(),month:text("month").notNull(),generated_at:text("generated_at").notNull(),source_range:text("source_range").notNull(),tier:text("tier").notNull(),total_tokens:integer("total_tokens").notNull(),total_cost_usd:real("total_cost_usd").notNull(),payload:text("payload").notNull(),payload_hash:text("payload_hash"),signature:text("signature"),signed_at:text("signed_at"),issuer:text("issuer")},n=>({uniq_usage_reports_ws_month:uniqueIndex("uniq_usage_reports_ws_month").on(n.workspace_id,n.month)}));c();sqliteTable("notifications",{id:text("id").primaryKey(),workspace_id:text("workspace_id").notNull(),agent_id:text("agent_id"),task_id:text("task_id"),thread_id:text("thread_id"),source:text("source").notNull().default("agent"),level:text("level").notNull().default("info"),title:text("title").notNull(),body:text("body"),target_user_id:text("target_user_id"),created_at:text("created_at").notNull(),metadata:text("metadata")},n=>({idx_notifications_ws_created:index("idx_notifications_ws_created").on(n.workspace_id,sql`${n.created_at} DESC`)}));sqliteTable("notification_reads",{notification_id:text("notification_id").notNull(),user_id:text("user_id").notNull(),read_at:text("read_at").notNull()},n=>({pk:primaryKey({columns:[n.notification_id,n.user_id]})}));c();sqliteTable("agent_suggestions",{id:text("id").primaryKey(),workspace_id:text("workspace_id").notNull(),agent_id:text("agent_id").notNull(),task_id:text("task_id"),type:text("type").notNull(),status:text("status").notNull().default("pending"),payload:text("payload").notNull(),applied_commit_sha:text("applied_commit_sha"),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull()},n=>({idx_agent_suggestions_ws_agent:index("idx_agent_suggestions_ws_agent").on(n.workspace_id,n.agent_id),idx_agent_suggestions_ws_created:index("idx_agent_suggestions_ws_created").on(n.workspace_id,n.created_at)}));var je="2026-05-09",dd="0.8.9-rc.13",Fe=10,He=parseInt(dd.split("rc.")[1]),ld=new Set(["workflow","mcp"]),Wo=600*1e3,Lt=class extends ft{dbPath;pidNullObservedSince=new Map;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=dirname(t);existsSync(o)||mkdirSync(o,{recursive:true});}else if(!existsSync(t))throw new O("NOT_FOUND","Database not found");let r=ke(t);if(e)try{cr(r.db,t);}catch(o){throw r.close(),o}return r}startTask(e){let t=this.openHandle(true);try{t.db.insert(p).values({id:e.id,agent_id:e.agentId,prompt:e.prompt,mode:e.mode,status:e.status,started_at:e.startedAt,pid:e.pid??null,parent_task_id:e.parentTaskId??null,caller_agent_id:e.callerAgentId??null,trace_id:e.traceId??null,command:e.command??null,metadata:e.metadata??null,workspace_id:e.workspaceId??null,platform:e.platform??"cli",crewx_version:e.crewxVersion??null,thread_id:e.threadId??null,model:e.model??null,rendered_prompt:e.renderedPrompt??null,coding_agent_command:e.codingAgentCommand??null}).onConflictDoUpdate({target:p.id,set:{pid:sql`COALESCE(excluded.pid, ${p.pid})`},setWhere:eq(p.status,"running")}).run();}catch(r){throw r instanceof O?r:new O("DB_ERROR","Failed to start task",r)}finally{t.close();}}finishTask(e){let t=this.openHandle(true);try{let r=e.runEpoch??null;t.runRaw(`UPDATE tasks SET status=?, result=?, error=?, completed_at=?, duration_ms=?,
53
53
  exit_code=?, input_tokens=?, output_tokens=?, cached_input_tokens=?, cost_usd=?,
54
54
  model=COALESCE(?, model)
55
- WHERE id=? AND status='running' AND COALESCE(run_epoch, 0) = COALESCE(?, 0)`,[e.status,e.result??null,e.error??null,e.completedAt,e.durationMs??null,e.exitCode??null,e.inputTokens??0,e.outputTokens??0,e.cachedInputTokens??0,e.costUsd??0,e.model??null,e.id,r]);}catch(r){throw r instanceof M?r:new M("DB_ERROR","Failed to finish task",r)}finally{t.close();}}appendLog(e,t){let r=this.openHandle(true);try{r.db.transaction(o=>{let s=o.select({logs:p.logs}).from(p).where(eq(p.id,e)).limit(1).get(),i=s?.logs?JSON.parse(s.logs):[];i.push(t),o.update(p).set({logs:JSON.stringify(i)}).where(eq(p.id,e)).run();},{behavior:"immediate"});}catch(o){throw o instanceof M?o:new M("DB_ERROR","Failed to append log",o)}finally{r.close();}}getRunningTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(p).where(eq(p.status,"running")).orderBy(desc(p.started_at)).all()}catch(t){throw new M("DB_ERROR","Failed to get running tasks",t)}finally{e.close();}}getAllTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(p).orderBy(desc(p.started_at)).limit(100).all()}catch(t){throw new M("DB_ERROR","Failed to get all tasks",t)}finally{e.close();}}getTask(e){if(!this.dbExists())return;let t=this.openHandle(false);try{return t.db.select().from(p).where(eq(p.id,e)).limit(1).get()??void 0}catch(r){throw new M("DB_ERROR","Failed to get task",r)}finally{t.close();}}killTask(e){if(!this.dbExists())return {killed:false};let t=this.openHandle(true);try{let r=t.db.select({id:p.id,status:p.status,pid:p.pid}).from(p).where(eq(p.id,e)).limit(1).get();if(!r||r.status!=="running")return {killed:!1};if(r.pid)try{process.kill(r.pid,"SIGTERM");}catch{}return t.db.update(p).set({status:"failed",error:"Killed by user",completed_at:new Date().toISOString()}).where(and(eq(p.id,e),eq(p.status,"running"))).run(),{killed:!0,pid:r.pid??void 0}}catch(r){throw r instanceof M?r:new M("DB_ERROR","Failed to kill task",r)}finally{t.close();}}reapOrphanedTasks(){if(!this.dbExists())return 0;let e=this.openHandle(true);try{let t=e.db.select({id:p.id,pid:p.pid,platform:p.platform,run_epoch:p.run_epoch}).from(p).where(eq(p.status,"running")).all(),r=Date.now(),o=new Set,s=0;for(let i of t){if(i.pid){let l=!1;try{process.kill(i.pid,0),l=!0;}catch{}l||(e.db.update(p).set({status:"failed",error:"Reaped: process not found (orphaned task)",completed_at:new Date().toISOString()}).where(and(eq(p.id,i.id),eq(p.status,"running"))).run(),s++);continue}if(Ya.has(i.platform??"cli"))continue;let a=`${i.id}:${i.run_epoch??0}`;o.add(a);let d=this.pidNullObservedSince.get(a);if(d===void 0){this.pidNullObservedSince.set(a,r);continue}r-d>=jo&&(e.db.update(p).set({status:"failed",error:"Reaped: pid never recorded after resume (stale running_instruction)",completed_at:new Date().toISOString()}).where(and(eq(p.id,i.id),eq(p.status,"running"))).run(),s++,this.pidNullObservedSince.delete(a));}for(let i of Array.from(this.pidNullObservedSince.keys()))o.has(i)||this.pidNullObservedSince.delete(i);return s}finally{e.close();}}reapRunningWorkflowTasks(e=jo){if(!this.dbExists())return 0;let t=this.openHandle(true);try{let r=new Date(Date.now()-e).toISOString();return t.db.update(p).set({status:"failed",error:"Reaped: stale workflow run (finally not executed)",completed_at:new Date().toISOString()}).where(and(eq(p.status,"running"),eq(p.platform,"workflow"),isNull(p.pid),lt$1(p.started_at,r))).run().changes??0}finally{t.close();}}findTaskStatus(e,t){let r=this.resolveDbPaths();for(let o of r){if(!existsSync(o))continue;let s=xe(o);try{let i=t?eq(p.workspace_id,t):void 0,a=i?and(eq(p.id,e),i):eq(p.id,e),d=s.db.select().from(p).where(a).limit(1).get()??void 0;if(!d){let l=or$1(eq(p.thread_id,e),and(isNull(p.thread_id),like(p.command,`%--thread=${e}%`))),u=i?and(l,i):l;d=s.db.select().from(p).where(u).orderBy(desc(p.started_at)).limit(1).get()??void 0;}if(d)return d}catch(i){throw new M("DB_ERROR","Failed to find task status",i)}finally{s.close();}}}findChildTasks(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!existsSync(i))continue;let a=xe(i);try{let d=t?and(eq(p.parent_task_id,e),eq(p.workspace_id,t)):eq(p.parent_task_id,e),l=a.db.select().from(p).where(d).orderBy(asc(p.started_at)).all();for(let u of l)o.has(u.id)||(o.add(u.id),s.push(u));}catch(d){throw new M("DB_ERROR","Failed to find child tasks",d)}finally{a.close();}}return s}getWorkspaceUsageSummary(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.all(e?sql`
55
+ WHERE id=? AND status='running' AND COALESCE(run_epoch, 0) = COALESCE(?, 0)`,[e.status,e.result??null,e.error??null,e.completedAt,e.durationMs??null,e.exitCode??null,e.inputTokens??0,e.outputTokens??0,e.cachedInputTokens??0,e.costUsd??0,e.model??null,e.id,r]);}catch(r){throw r instanceof O?r:new O("DB_ERROR","Failed to finish task",r)}finally{t.close();}}appendLog(e,t){let r=this.openHandle(true);try{r.db.transaction(o=>{let s=o.select({logs:p.logs}).from(p).where(eq(p.id,e)).limit(1).get(),i=s?.logs?JSON.parse(s.logs):[];i.push(t),o.update(p).set({logs:JSON.stringify(i)}).where(eq(p.id,e)).run();},{behavior:"immediate"});}catch(o){throw o instanceof O?o:new O("DB_ERROR","Failed to append log",o)}finally{r.close();}}getRunningTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(p).where(eq(p.status,"running")).orderBy(desc(p.started_at)).all()}catch(t){throw new O("DB_ERROR","Failed to get running tasks",t)}finally{e.close();}}getAllTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(p).orderBy(desc(p.started_at)).limit(100).all()}catch(t){throw new O("DB_ERROR","Failed to get all tasks",t)}finally{e.close();}}getTask(e){if(!this.dbExists())return;let t=this.openHandle(false);try{return t.db.select().from(p).where(eq(p.id,e)).limit(1).get()??void 0}catch(r){throw new O("DB_ERROR","Failed to get task",r)}finally{t.close();}}killTask(e){if(!this.dbExists())return {killed:false};let t=this.openHandle(true);try{let r=t.db.select({id:p.id,status:p.status,pid:p.pid}).from(p).where(eq(p.id,e)).limit(1).get();if(!r||r.status!=="running")return {killed:!1};if(r.pid)try{process.kill(r.pid,"SIGTERM");}catch{}return t.db.update(p).set({status:"failed",error:"Killed by user",completed_at:new Date().toISOString()}).where(and(eq(p.id,e),eq(p.status,"running"))).run(),{killed:!0,pid:r.pid??void 0}}catch(r){throw r instanceof O?r:new O("DB_ERROR","Failed to kill task",r)}finally{t.close();}}reapOrphanedTasks(){if(!this.dbExists())return 0;let e=this.openHandle(true);try{let t=e.db.select({id:p.id,pid:p.pid,platform:p.platform,run_epoch:p.run_epoch}).from(p).where(eq(p.status,"running")).all(),r=Date.now(),o=new Set,s=0;for(let i of t){if(i.pid){let l=!1;try{process.kill(i.pid,0),l=!0;}catch{}l||(e.db.update(p).set({status:"failed",error:"Reaped: process not found (orphaned task)",completed_at:new Date().toISOString()}).where(and(eq(p.id,i.id),eq(p.status,"running"))).run(),s++);continue}if(ld.has(i.platform??"cli"))continue;let a=`${i.id}:${i.run_epoch??0}`;o.add(a);let d=this.pidNullObservedSince.get(a);if(d===void 0){this.pidNullObservedSince.set(a,r);continue}r-d>=Wo&&(e.db.update(p).set({status:"failed",error:"Reaped: pid never recorded after resume (stale running_instruction)",completed_at:new Date().toISOString()}).where(and(eq(p.id,i.id),eq(p.status,"running"))).run(),s++,this.pidNullObservedSince.delete(a));}for(let i of Array.from(this.pidNullObservedSince.keys()))o.has(i)||this.pidNullObservedSince.delete(i);return s}finally{e.close();}}reapRunningWorkflowTasks(e=Wo){if(!this.dbExists())return 0;let t=this.openHandle(true);try{let r=new Date(Date.now()-e).toISOString();return t.db.update(p).set({status:"failed",error:"Reaped: stale workflow run (finally not executed)",completed_at:new Date().toISOString()}).where(and(eq(p.status,"running"),eq(p.platform,"workflow"),isNull(p.pid),lt$1(p.started_at,r))).run().changes??0}finally{t.close();}}findTaskStatus(e,t){let r=this.resolveDbPaths();for(let o of r){if(!existsSync(o))continue;let s=ke(o);try{let i=t?eq(p.workspace_id,t):void 0,a=i?and(eq(p.id,e),i):eq(p.id,e),d=s.db.select().from(p).where(a).limit(1).get()??void 0;if(!d){let l=or$1(eq(p.thread_id,e),and(isNull(p.thread_id),like(p.command,`%--thread=${e}%`))),u=i?and(l,i):l;d=s.db.select().from(p).where(u).orderBy(desc(p.started_at)).limit(1).get()??void 0;}if(d)return d}catch(i){throw new O("DB_ERROR","Failed to find task status",i)}finally{s.close();}}}findChildTasks(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!existsSync(i))continue;let a=ke(i);try{let d=t?and(eq(p.parent_task_id,e),eq(p.workspace_id,t)):eq(p.parent_task_id,e),l=a.db.select().from(p).where(d).orderBy(asc(p.started_at)).all();for(let u of l)o.has(u.id)||(o.add(u.id),s.push(u));}catch(d){throw new O("DB_ERROR","Failed to find child tasks",d)}finally{a.close();}}return s}getWorkspaceUsageSummary(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.all(e?sql`
56
56
  SELECT
57
57
  COALESCE(workspace_id, 'unknown') AS workspace_id,
58
58
  COALESCE(SUM(input_tokens), 0) AS input_tokens,
@@ -73,7 +73,7 @@ ${r.join(`
73
73
  FROM tasks
74
74
  GROUP BY workspace_id
75
75
  ORDER BY (COALESCE(SUM(input_tokens), 0) + COALESCE(SUM(output_tokens), 0)) DESC
76
- `)}catch(r){throw new M("DB_ERROR","Failed to get workspace usage summary",r)}finally{t.close();}}getThreadTokenUsage(e,t){let r=this.resolveDbPaths(),o=new Set,s=0,i=0,a=0;for(let d of r){if(!existsSync(d))continue;let l=xe(d);try{let u=or$1(eq(p.thread_id,e),and(isNull(p.thread_id),like(p.command,`%--thread=${e}%`))),g=t?and(u,eq(p.workspace_id,t)):u,f=l.db.select({id:p.id,input_tokens:p.input_tokens,output_tokens:p.output_tokens,cost_usd:p.cost_usd}).from(p).where(g).all();for(let m of f)o.has(m.id)||(o.add(m.id),s+=m.input_tokens??0,i+=m.output_tokens??0,a+=m.cost_usd??0);}catch(u){throw new M("DB_ERROR","Failed to get thread token usage",u)}finally{l.close();}}return {inputTokens:s,outputTokens:i,costUsd:a}}findTasksByThread(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!existsSync(i))continue;let a=xe(i);try{let d=or$1(eq(p.thread_id,e),and(isNull(p.thread_id),like(p.command,`%--thread=${e}%`))),l=t?and(d,eq(p.workspace_id,t)):d,u=a.db.select().from(p).where(l).orderBy(asc(p.started_at)).all();for(let g of u)o.has(g.id)||(o.add(g.id),s.push(g));}catch(d){throw new M("DB_ERROR","Failed to find tasks by thread",d)}finally{a.close();}}return s}parseWorkflowCardMetadata(e){if(!e)return {};try{let t=JSON.parse(e);return {kind:typeof t.kind=="string"?t.kind:void 0,workflowRunId:typeof t.workflowRunId=="string"?t.workflowRunId:void 0}}catch{return {}}}extractThreadIdFromCommand(e){return e?/--thread=(\S+)/.exec(e)?.[1]??null:null}batchFetchWorkflowCards(e,t){let r=new Map;if(e.length===0)return r;let o=new Set(e),s=new Map,i=t?eq(p.workspace_id,t):void 0,a=(d,l)=>{if(!d)return;let u=s.get(d);if(u&&l.started_at<=u)return;let g=this.parseWorkflowCardMetadata(l.metadata);g.kind==="workflow_card"&&(s.set(d,l.started_at),r.set(d,{taskId:l.id,workflowRunId:g.workflowRunId,raw:l.result??void 0}));};for(let d of this.resolveDbPaths()){if(!existsSync(d))continue;let l=xe(d);try{let u=and(inArray(p.thread_id,e),like(p.metadata,'%"kind":"workflow_card"%')),g=l.db.select({id:p.id,thread_id:p.thread_id,metadata:p.metadata,result:p.result,started_at:p.started_at}).from(p).where(i?and(u,i):u).all();for(let w of g)a(w.thread_id,w);let f=and(isNull(p.thread_id),like(p.metadata,'%"kind":"workflow_card"%')),m=l.db.select({id:p.id,command:p.command,metadata:p.metadata,result:p.result,started_at:p.started_at}).from(p).where(i?and(f,i):f).all();for(let w of m){let v=this.extractThreadIdFromCommand(w.command);!v||!o.has(v)||a(v,w);}}catch(u){throw new M("DB_ERROR","Failed to batch fetch workflow cards",u)}finally{l.close();}}return r}findAllTasks(e){if(!this.dbExists())return {rows:[],total:0};let t=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(eq(p.workspace_id,e.workspaceId));let o=e.agents&&e.agents.length>0?e.agents:e.agentId?[e.agentId]:null;o&&r.push(inArray(p.agent_id,o));let s=e.statuses&&e.statuses.length>0?e.statuses:e.status?[e.status]:null;s&&r.push(inArray(p.status,s));let i=e.q??e.search;i&&r.push(like(p.prompt,`%${i}%`)),e.from&&r.push(gte(p.started_at,e.from)),e.to&&r.push(lt$1(p.started_at,e.to));let a=r.length>0?and(...r):void 0,d=t.db.select({count:sql`count(*)`}).from(p).where(a).get(),l=(e.sortDir??"DESC")==="ASC"?asc(p.started_at):desc(p.started_at);return {rows:t.db.select().from(p).where(a).orderBy(l).limit(e.limit).offset(e.offset).all(),total:d?.count??0}}catch(r){throw new M("DB_ERROR","Failed to find all tasks",r)}finally{t.close();}}getAgentUsage(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.all(r?sql`
76
+ `)}catch(r){throw new O("DB_ERROR","Failed to get workspace usage summary",r)}finally{t.close();}}getThreadTokenUsage(e,t){let r=this.resolveDbPaths(),o=new Set,s=0,i=0,a=0;for(let d of r){if(!existsSync(d))continue;let l=ke(d);try{let u=or$1(eq(p.thread_id,e),and(isNull(p.thread_id),like(p.command,`%--thread=${e}%`))),g=t?and(u,eq(p.workspace_id,t)):u,f=l.db.select({id:p.id,input_tokens:p.input_tokens,output_tokens:p.output_tokens,cost_usd:p.cost_usd}).from(p).where(g).all();for(let m of f)o.has(m.id)||(o.add(m.id),s+=m.input_tokens??0,i+=m.output_tokens??0,a+=m.cost_usd??0);}catch(u){throw new O("DB_ERROR","Failed to get thread token usage",u)}finally{l.close();}}return {inputTokens:s,outputTokens:i,costUsd:a}}findTasksByThread(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!existsSync(i))continue;let a=ke(i);try{let d=or$1(eq(p.thread_id,e),and(isNull(p.thread_id),like(p.command,`%--thread=${e}%`))),l=t?and(d,eq(p.workspace_id,t)):d,u=a.db.select().from(p).where(l).orderBy(asc(p.started_at)).all();for(let g of u)o.has(g.id)||(o.add(g.id),s.push(g));}catch(d){throw new O("DB_ERROR","Failed to find tasks by thread",d)}finally{a.close();}}return s}parseWorkflowCardMetadata(e){if(!e)return {};try{let t=JSON.parse(e);return {kind:typeof t.kind=="string"?t.kind:void 0,workflowRunId:typeof t.workflowRunId=="string"?t.workflowRunId:void 0}}catch{return {}}}extractThreadIdFromCommand(e){return e?/--thread=(\S+)/.exec(e)?.[1]??null:null}batchFetchWorkflowCards(e,t){let r=new Map;if(e.length===0)return r;let o=new Set(e),s=new Map,i=t?eq(p.workspace_id,t):void 0,a=(d,l)=>{if(!d)return;let u=s.get(d);if(u&&l.started_at<=u)return;let g=this.parseWorkflowCardMetadata(l.metadata);g.kind==="workflow_card"&&(s.set(d,l.started_at),r.set(d,{taskId:l.id,workflowRunId:g.workflowRunId,raw:l.result??void 0}));};for(let d of this.resolveDbPaths()){if(!existsSync(d))continue;let l=ke(d);try{let u=and(inArray(p.thread_id,e),like(p.metadata,'%"kind":"workflow_card"%')),g=l.db.select({id:p.id,thread_id:p.thread_id,metadata:p.metadata,result:p.result,started_at:p.started_at}).from(p).where(i?and(u,i):u).all();for(let w of g)a(w.thread_id,w);let f=and(isNull(p.thread_id),like(p.metadata,'%"kind":"workflow_card"%')),m=l.db.select({id:p.id,command:p.command,metadata:p.metadata,result:p.result,started_at:p.started_at}).from(p).where(i?and(f,i):f).all();for(let w of m){let v=this.extractThreadIdFromCommand(w.command);!v||!o.has(v)||a(v,w);}}catch(u){throw new O("DB_ERROR","Failed to batch fetch workflow cards",u)}finally{l.close();}}return r}findAllTasks(e){if(!this.dbExists())return {rows:[],total:0};let t=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(eq(p.workspace_id,e.workspaceId));let o=e.agents&&e.agents.length>0?e.agents:e.agentId?[e.agentId]:null;o&&r.push(inArray(p.agent_id,o));let s=e.statuses&&e.statuses.length>0?e.statuses:e.status?[e.status]:null;s&&r.push(inArray(p.status,s));let i=e.q??e.search;i&&r.push(like(p.prompt,`%${i}%`)),e.from&&r.push(gte(p.started_at,e.from)),e.to&&r.push(lt$1(p.started_at,e.to));let a=r.length>0?and(...r):void 0,d=t.db.select({count:sql`count(*)`}).from(p).where(a).get(),l=(e.sortDir??"DESC")==="ASC"?asc(p.started_at):desc(p.started_at);return {rows:t.db.select().from(p).where(a).orderBy(l).limit(e.limit).offset(e.offset).all(),total:d?.count??0}}catch(r){throw new O("DB_ERROR","Failed to find all tasks",r)}finally{t.close();}}getAgentUsage(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.all(r?sql`
77
77
  SELECT
78
78
  t.agent_id,
79
79
  t.workspace_id,
@@ -81,11 +81,11 @@ ${r.join(`
81
81
  COALESCE(SUM(
82
82
  COALESCE(t.input_tokens, 0)
83
83
  + CASE
84
- WHEN t.started_at >= ${$e}
84
+ WHEN t.started_at >= ${je}
85
85
  AND (
86
86
  t.crewx_version IS NULL
87
87
  OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
88
- OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${Ue}) AS INTEGER) < ${je})
88
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${Fe}) AS INTEGER) < ${He})
89
89
  )
90
90
  THEN COALESCE(t.cached_input_tokens, 0)
91
91
  ELSE 0
@@ -104,11 +104,11 @@ ${r.join(`
104
104
  COALESCE(SUM(
105
105
  COALESCE(t.input_tokens, 0)
106
106
  + CASE
107
- WHEN t.started_at >= ${$e}
107
+ WHEN t.started_at >= ${je}
108
108
  AND (
109
109
  t.crewx_version IS NULL
110
110
  OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
111
- OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${Ue}) AS INTEGER) < ${je})
111
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${Fe}) AS INTEGER) < ${He})
112
112
  )
113
113
  THEN COALESCE(t.cached_input_tokens, 0)
114
114
  ELSE 0
@@ -124,11 +124,11 @@ ${r.join(`
124
124
  COALESCE(SUM(
125
125
  COALESCE(t.input_tokens, 0)
126
126
  + CASE
127
- WHEN t.started_at >= ${$e}
127
+ WHEN t.started_at >= ${je}
128
128
  AND (
129
129
  t.crewx_version IS NULL
130
130
  OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
131
- OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${Ue}) AS INTEGER) < ${je})
131
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${Fe}) AS INTEGER) < ${He})
132
132
  )
133
133
  THEN COALESCE(t.cached_input_tokens, 0)
134
134
  ELSE 0
@@ -146,11 +146,11 @@ ${r.join(`
146
146
  COALESCE(SUM(
147
147
  COALESCE(t.input_tokens, 0)
148
148
  + CASE
149
- WHEN t.started_at >= ${$e}
149
+ WHEN t.started_at >= ${je}
150
150
  AND (
151
151
  t.crewx_version IS NULL
152
152
  OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
153
- OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${Ue}) AS INTEGER) < ${je})
153
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${Fe}) AS INTEGER) < ${He})
154
154
  )
155
155
  THEN COALESCE(t.cached_input_tokens, 0)
156
156
  ELSE 0
@@ -158,18 +158,18 @@ ${r.join(`
158
158
  ), 0)
159
159
  + COALESCE(SUM(t.output_tokens), 0)
160
160
  ) DESC
161
- `).map(i=>({agentId:i.agent_id,workspaceId:i.workspace_id??null,totalTasks:i.total_tasks,inputTokens:i.input_tokens,outputTokens:i.output_tokens,cachedInputTokens:i.cached_input_tokens,costUsd:i.cost_usd,totalTokens:i.input_tokens+i.output_tokens}))}catch(s){throw new M("DB_ERROR","Failed to get agent usage",s)}finally{o.close();}}getAgentUsageTrendRaw(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.all(r?sql`
161
+ `).map(i=>({agentId:i.agent_id,workspaceId:i.workspace_id??null,totalTasks:i.total_tasks,inputTokens:i.input_tokens,outputTokens:i.output_tokens,cachedInputTokens:i.cached_input_tokens,costUsd:i.cost_usd,totalTokens:i.input_tokens+i.output_tokens}))}catch(s){throw new O("DB_ERROR","Failed to get agent usage",s)}finally{o.close();}}getAgentUsageTrendRaw(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.all(r?sql`
162
162
  SELECT
163
163
  date(t.started_at) AS date,
164
164
  t.agent_id,
165
165
  COALESCE(SUM(
166
166
  COALESCE(t.input_tokens, 0)
167
167
  + CASE
168
- WHEN t.started_at >= ${$e}
168
+ WHEN t.started_at >= ${je}
169
169
  AND (
170
170
  t.crewx_version IS NULL
171
171
  OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
172
- OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${Ue}) AS INTEGER) < ${je})
172
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${Fe}) AS INTEGER) < ${He})
173
173
  )
174
174
  THEN COALESCE(t.cached_input_tokens, 0)
175
175
  ELSE 0
@@ -192,11 +192,11 @@ ${r.join(`
192
192
  COALESCE(SUM(
193
193
  COALESCE(t.input_tokens, 0)
194
194
  + CASE
195
- WHEN t.started_at >= ${$e}
195
+ WHEN t.started_at >= ${je}
196
196
  AND (
197
197
  t.crewx_version IS NULL
198
198
  OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
199
- OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${Ue}) AS INTEGER) < ${je})
199
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${Fe}) AS INTEGER) < ${He})
200
200
  )
201
201
  THEN COALESCE(t.cached_input_tokens, 0)
202
202
  ELSE 0
@@ -211,7 +211,7 @@ ${r.join(`
211
211
  AND t.started_at < ${t}
212
212
  GROUP BY date(t.started_at), t.agent_id
213
213
  ORDER BY date(t.started_at) ASC
214
- `).map(i=>({date:i.date,agentId:i.agent_id,inputTokens:i.input_tokens,outputTokens:i.output_tokens,cachedInputTokens:i.cached_input_tokens,costUsd:i.cost_usd,totalTokens:i.input_tokens+i.output_tokens}))}catch(s){throw new M("DB_ERROR","Failed to get agent usage trend",s)}finally{o.close();}}findTaskForStop(e,t){if(!this.dbExists())return;let r=this.openHandle(false);try{return r.db.select().from(p).where(and(eq(p.id,e),eq(p.workspace_id,t))).limit(1).get()??void 0}catch(o){throw new M("DB_ERROR","Failed to find task for stop",o)}finally{r.close();}}markTaskFailed(e,t,r){if(!this.dbExists())return;let o=this.openHandle(true);try{let s=new Date().toISOString(),i=r?and(eq(p.id,e),eq(p.status,"running"),eq(p.workspace_id,r)):and(eq(p.id,e),eq(p.status,"running"));o.db.update(p).set({status:"failed",error:t,completed_at:s}).where(i).run();}catch(s){throw s instanceof M?s:new M("DB_ERROR","Failed to mark task failed",s)}finally{o.close();}}findTasksByPromptHint(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!existsSync(i))continue;let a=xe(i);try{let d=t?and(like(p.prompt,`%${e}%`),eq(p.workspace_id,t)):like(p.prompt,`%${e}%`),l=a.db.select().from(p).where(d).orderBy(asc(p.started_at)).all();for(let u of l)o.has(u.id)||(o.add(u.id),s.push(u));}catch(d){throw new M("DB_ERROR","Failed to find tasks by prompt hint",d)}finally{a.close();}}return s}getProviderUsage(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=sql`
214
+ `).map(i=>({date:i.date,agentId:i.agent_id,inputTokens:i.input_tokens,outputTokens:i.output_tokens,cachedInputTokens:i.cached_input_tokens,costUsd:i.cost_usd,totalTokens:i.input_tokens+i.output_tokens}))}catch(s){throw new O("DB_ERROR","Failed to get agent usage trend",s)}finally{o.close();}}findTaskForStop(e,t){if(!this.dbExists())return;let r=this.openHandle(false);try{return r.db.select().from(p).where(and(eq(p.id,e),eq(p.workspace_id,t))).limit(1).get()??void 0}catch(o){throw new O("DB_ERROR","Failed to find task for stop",o)}finally{r.close();}}markTaskFailed(e,t,r){if(!this.dbExists())return;let o=this.openHandle(true);try{let s=new Date().toISOString(),i=r?and(eq(p.id,e),eq(p.status,"running"),eq(p.workspace_id,r)):and(eq(p.id,e),eq(p.status,"running"));o.db.update(p).set({status:"failed",error:t,completed_at:s}).where(i).run();}catch(s){throw s instanceof O?s:new O("DB_ERROR","Failed to mark task failed",s)}finally{o.close();}}findTasksByPromptHint(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!existsSync(i))continue;let a=ke(i);try{let d=t?and(like(p.prompt,`%${e}%`),eq(p.workspace_id,t)):like(p.prompt,`%${e}%`),l=a.db.select().from(p).where(d).orderBy(asc(p.started_at)).all();for(let u of l)o.has(u.id)||(o.add(u.id),s.push(u));}catch(d){throw new O("DB_ERROR","Failed to find tasks by prompt hint",d)}finally{a.close();}}return s}getProviderUsage(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=sql`
215
215
  CASE
216
216
  WHEN ${p.model} LIKE 'claude-%' OR ${p.model} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
217
217
  WHEN ${p.model} LIKE 'gpt-%' OR ${p.model} LIKE 'codex-%' THEN 'codex'
@@ -224,11 +224,11 @@ ${r.join(`
224
224
  `,i=sql`
225
225
  COALESCE(${p.input_tokens}, 0)
226
226
  + CASE
227
- WHEN ${p.started_at} >= ${$e}
227
+ WHEN ${p.started_at} >= ${je}
228
228
  AND (
229
229
  ${p.crewx_version} IS NULL
230
230
  OR (${p.crewx_version} LIKE '0.8.%' AND ${p.crewx_version} NOT LIKE '0.8.9%')
231
- OR (${p.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${p.crewx_version}, ${Ue}) AS INTEGER) < ${je})
231
+ OR (${p.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${p.crewx_version}, ${Fe}) AS INTEGER) < ${He})
232
232
  )
233
233
  THEN COALESCE(${p.cached_input_tokens}, 0)
234
234
  ELSE 0
@@ -247,7 +247,7 @@ ${r.join(`
247
247
  ${a}
248
248
  GROUP BY provider
249
249
  ORDER BY (COALESCE(SUM(${i}), 0) + COALESCE(SUM(${p.output_tokens}), 0)) DESC
250
- `).map(l=>({provider:l.provider,totalTasks:l.total_tasks,inputTokens:l.input_tokens,outputTokens:l.output_tokens,cachedInputTokens:l.cached_input_tokens,costUsd:l.cost_usd,totalTokens:l.input_tokens+l.output_tokens,activeDurationMs:l.active_duration_ms??0,lastActiveAt:l.last_active_at??null}))}catch(s){throw new M("DB_ERROR","Failed to get provider usage",s)}finally{o.close();}}getModelUsage(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=sql`
250
+ `).map(l=>({provider:l.provider,totalTasks:l.total_tasks,inputTokens:l.input_tokens,outputTokens:l.output_tokens,cachedInputTokens:l.cached_input_tokens,costUsd:l.cost_usd,totalTokens:l.input_tokens+l.output_tokens,activeDurationMs:l.active_duration_ms??0,lastActiveAt:l.last_active_at??null}))}catch(s){throw new O("DB_ERROR","Failed to get provider usage",s)}finally{o.close();}}getModelUsage(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=sql`
251
251
  CASE
252
252
  WHEN ${p.model} LIKE 'claude-%' OR ${p.model} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
253
253
  WHEN ${p.model} LIKE 'gpt-%' OR ${p.model} LIKE 'codex-%' THEN 'codex'
@@ -260,11 +260,11 @@ ${r.join(`
260
260
  `,i=sql`
261
261
  COALESCE(${p.input_tokens}, 0)
262
262
  + CASE
263
- WHEN ${p.started_at} >= ${$e}
263
+ WHEN ${p.started_at} >= ${je}
264
264
  AND (
265
265
  ${p.crewx_version} IS NULL
266
266
  OR (${p.crewx_version} LIKE '0.8.%' AND ${p.crewx_version} NOT LIKE '0.8.9%')
267
- OR (${p.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${p.crewx_version}, ${Ue}) AS INTEGER) < ${je})
267
+ OR (${p.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${p.crewx_version}, ${Fe}) AS INTEGER) < ${He})
268
268
  )
269
269
  THEN COALESCE(${p.cached_input_tokens}, 0)
270
270
  ELSE 0
@@ -283,7 +283,7 @@ ${r.join(`
283
283
  FROM ${p}
284
284
  ${a}
285
285
  GROUP BY ${p.model}
286
- `),l=new Map;for(let u of d){let g=Br(u.model??""),f=l.get(g);f?(f.totalTasks+=u.total_tasks,f.inputTokens+=u.input_tokens,f.outputTokens+=u.output_tokens,f.cachedInputTokens+=u.cached_input_tokens,f.costUsd+=u.cost_usd,f.totalTokens+=u.input_tokens+u.output_tokens,f.activeDurationMs+=u.active_duration_ms??0,u.last_active_at&&(!f.lastActiveAt||u.last_active_at>f.lastActiveAt)&&(f.lastActiveAt=u.last_active_at)):l.set(g,{model:g,provider:u.provider,totalTasks:u.total_tasks,inputTokens:u.input_tokens,outputTokens:u.output_tokens,cachedInputTokens:u.cached_input_tokens,costUsd:u.cost_usd,totalTokens:u.input_tokens+u.output_tokens,activeDurationMs:u.active_duration_ms??0,lastActiveAt:u.last_active_at??null});}return Array.from(l.values()).sort((u,g)=>g.costUsd-u.costUsd)}catch(s){throw new M("DB_ERROR","Failed to get model usage",s)}finally{o.close();}}getTasksForReport(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=r?sql`WHERE ${p.started_at} >= ${e} AND ${p.started_at} < ${t} AND ${p.workspace_id} = ${r}`:sql`WHERE ${p.started_at} >= ${e} AND ${p.started_at} < ${t}`;return o.db.all(sql`
286
+ `),l=new Map;for(let u of d){let g=Vr(u.model??""),f=l.get(g);f?(f.totalTasks+=u.total_tasks,f.inputTokens+=u.input_tokens,f.outputTokens+=u.output_tokens,f.cachedInputTokens+=u.cached_input_tokens,f.costUsd+=u.cost_usd,f.totalTokens+=u.input_tokens+u.output_tokens,f.activeDurationMs+=u.active_duration_ms??0,u.last_active_at&&(!f.lastActiveAt||u.last_active_at>f.lastActiveAt)&&(f.lastActiveAt=u.last_active_at)):l.set(g,{model:g,provider:u.provider,totalTasks:u.total_tasks,inputTokens:u.input_tokens,outputTokens:u.output_tokens,cachedInputTokens:u.cached_input_tokens,costUsd:u.cost_usd,totalTokens:u.input_tokens+u.output_tokens,activeDurationMs:u.active_duration_ms??0,lastActiveAt:u.last_active_at??null});}return Array.from(l.values()).sort((u,g)=>g.costUsd-u.costUsd)}catch(s){throw new O("DB_ERROR","Failed to get model usage",s)}finally{o.close();}}getTasksForReport(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=r?sql`WHERE ${p.started_at} >= ${e} AND ${p.started_at} < ${t} AND ${p.workspace_id} = ${r}`:sql`WHERE ${p.started_at} >= ${e} AND ${p.started_at} < ${t}`;return o.db.all(sql`
287
287
  SELECT
288
288
  ${p.thread_id} AS thread_id,
289
289
  ${p.agent_id} AS agent_id,
@@ -294,19 +294,19 @@ ${r.join(`
294
294
  FROM ${p}
295
295
  ${s}
296
296
  ORDER BY ${p.started_at} ASC
297
- `).map(a=>({threadId:a.thread_id,agentId:a.agent_id,startedAt:a.started_at,status:a.status,error:a.error,exitCode:a.exit_code}))}catch(s){throw new M("DB_ERROR","Failed to get tasks for report",s)}finally{o.close();}}};var Qa=new Set(["Read","Grep","Find","Glob"]),Za=["git status","git log","git branch","git diff --stat","git show","git remote","git rev-parse","git ls-files","pwd","ls ","echo ","cat ","head ","tail ","npx crewx memory index","npx crewx memory find","npx crewx memory get","npx crewx doc toc","npx crewx doc section","npx crewx doc status","npx crewx search","npx skill tsserver find","npx skill tsserver refs","npx skill tsserver type","crewx memory index","crewx memory find","crewx memory get","crewx doc toc","crewx doc section","crewx doc status","crewx search","crewx agent ls","crewx agent list"],ed=[/\bgit\s+(commit|push|pull|merge|rebase|reset|checkout|switch|add|rm)\b/,/\bnpm\s+(install|ci|publish|run\s+(test|lint|build))\b/,/\bnpx\s+tsc\b/,/\bpnpm\s+(install|run)\b/,/\bvitest\b/,/\bjest\b/];function td(n){let e=n.toLowerCase();return e==="bash"||e==="terminal"?"Bash":e==="read"||e==="view"?"Read":e==="edit"||e==="apply_patch"?"Edit":e==="write"?"Write":e==="grep"||e==="rg"?"Grep":e==="glob"||e==="find"?"Find":n}function rd(n,e){if(Qa.has(n))return true;if(n!=="Bash"||!e)return false;let t=e.split(`
298
- `)[0].trimStart();return ed.some(r=>r.test(t))?false:Za.some(r=>t.startsWith(r))}function fr(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function nd(n,e,t){if(n!=="Read"||!e)return "ok";let o=e.split(`
299
- `).find(s=>s.trim()&&!s.startsWith("Read "))?.trim()??e.trim();if(!o)return "unknown";try{let s=Fo.statSync(o);if(t){let i=Date.parse(t);if(!Number.isNaN(i)&&s.mtimeMs>i)return "stale"}return "ok"}catch{return "unknown"}}function od(n){let e=new Set;for(let t of n)try{let r=JSON.parse(t);r.type&&e.add(r.type);}catch{}return e.has("turn.started")||e.has("thread.started")?"codex":e.has("assistant.message_delta")?"copilot":e.has("step_start")&&e.has("step_finish")?"opencode":e.has("system")&&e.has("result")?"claude":e.has("init")&&e.has("message")?"gemini":e.has("result")&&e.has("assistant")?"claude":null}function sd(n){if(!Array.isArray(n))return [];let e=n,t=e.filter(a=>a.level==="stdout"&&a.message).map(a=>a.message),r=od(t),o=[];for(let a of e)a.level==="info"&&a.message?o.push(...pe(a.message,a.timestamp)):a.level==="stdout"&&a.message&&r&&o.push(..._t("",a.message,r));let s=new Map,i=[];for(let a of o)if(a.type==="tool_use"){let d={tool:td(a.toolName??""),input:a.toolInput??null,result:null,isError:false},l=a.toolUseId;if(l){if(s.has(l)){s.get(l).input=d.input;continue}s.set(l,d);}i.push(d);}else if(a.type==="tool_result"){if(a.toolUseId&&s.has(a.toolUseId)){let d=s.get(a.toolUseId);d.isError=a.isError===true,d.result=a.resultPreview??null;}else for(let d=i.length-1;d>=0;d--)if(i[d].result===null){i[d].isError=a.isError===true,i[d].result=a.resultPreview??null;break}}return i}function id(n,e){let t=sd(n),r=[];for(let o of t){let s=o.tool==="Bash"?o.input?.split(`
300
- `)[0]?.slice(0,150)??null:o.input?.slice(0,150)??null,i=rd(o.tool,o.input)&&!o.isError;r.push({tool:o.tool,cmd:s,result:o.result,status:nd(o.tool,o.input,e),reusable:i});}return r}function ad(n,e,t){let r=["<activity_log>"];if(n.length===0&&e===0)r.push(" <!-- no activity found in previous tasks -->");else {r.push(" <!-- tool activity from previous tasks -->"),e>0&&r.push(` <!-- ${e} entries omitted (cap) -->`);for(let o of n){let s=`tool="${fr(o.tool)}"`,i=o.cmd?` cmd="${fr(o.cmd)}"`:"",a="";if(o.reusable&&(a=o.status==="stale"?' reused="stale"':' reused="ok"'),o.reusable&&o.status==="stale")r.push(` <entry ${s}${i}${a}>\u26A0\uFE0F changed since \u2014 re-read</entry>`);else if(o.result){r.push(` <entry ${s}${i}${a}>`);let d=t&&t>0?t:8e3,l=o.result;l.length>d?r.push(fr(l.slice(0,d))+` \u2026 [truncated, ${d}/${l.length} chars shown]`):r.push(fr(l)),r.push(" </entry>");}else r.push(` <entry ${s}${i}${a} />`);}}return r.push("</activity_log>"),r}function Ho(n){let{threadId:e,agentId:t,lookback:r,maxEntryChars:o,decayRate:s}=n;if(!r||!e||!t)return new Map;let i;try{i=new Mt().findTasksByThread(e).filter(f=>!f.parent_task_id&&f.agent_id===t).sort((f,m)=>m.started_at>f.started_at?1:-1).slice(0,Math.min(r,5));}catch{return new Map}if(!i.length)return new Map;let a=[];for(let g of i){let f=[];try{let m=JSON.parse(g.logs??"[]");Array.isArray(m)&&(f=m);}catch{}a.push({taskId:g.id,entries:id(f,g.completed_at)});}let d=new Map,l=typeof s=="number"&&s>0&&s<=1?s:1,u=1e3;for(let g=0;g<a.length;g++){let{taskId:f,entries:m}=a[g];if(m.length===0)continue;let w=Math.max(Math.floor((o??8e3)*Math.pow(l,g)),u),v=Math.max(0,m.length-200),k=v>0?m.slice(v):m,_=ad(k,v,w);d.set(f,_.join(`
301
- `));}return d}c();c();var dd={agentId:z.string().describe("The agent ID to query"),query:z.string().describe("The query message to send"),context:z.string().optional().describe("Additional context"),thread:z.string().optional().describe("Thread ID for conversation continuity")},ld={agentId:z.string().describe("The agent ID to execute"),task:z.string().describe("The task description to execute"),context:z.string().optional().describe("Additional context"),thread:z.string().optional().describe("Thread ID for conversation continuity")};function qo(n,e,t){n.tool("crewx_listAgents","List available CrewX agents exposed by this server",async()=>{let r=[];for(let o of t){let s=e.agents.get(o);s&&r.push({id:s.id,name:s.name??s.id,description:s.description??""});}return {content:[{type:"text",text:JSON.stringify(r,null,2)}]}}),n.tool("crewx_queryAgent","Query a CrewX agent with a read-only question",dd,async({agentId:r,query:o,context:s,thread:i})=>{if(!t.has(r))return {content:[{type:"text",text:`Agent '${r}' is not exposed by this server`}],isError:true};let a=await e.query(r,o,{context:s,threadId:i});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Query failed"}],isError:true}}),n.tool("crewx_executeAgent","Execute a task on a CrewX agent (may modify state)",ld,async({agentId:r,task:o,context:s,thread:i})=>{if(!t.has(r))return {content:[{type:"text",text:`Agent '${r}' is not exposed by this server`}],isError:true};let a=await e.execute(r,o,{context:s,threadId:i});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Execute failed"}],isError:true}});}c();function Wo(n){return n.headers.get("Origin")?null:new Response(JSON.stringify({error:"Forbidden: Origin header required"}),{status:403,headers:{"Content-Type":"application/json"}})}async function Bo(n,e){return e?await e(n)?null:new Response(JSON.stringify({error:"Unauthorized"}),{status:401,headers:{"Content-Type":"application/json"}}):null}function pd(n,e){let t=new McpServer({name:"crewx-mcp-server",version:"1.0.0"},{capabilities:{tools:{}}});return qo(t,n,e),t}function un(n,e){if(!e.agents||e.agents.length===0)throw new Error("crewx.handler() requires at least one agent in the agents option");let t=new Set(e.agents),r=new Map;return async o=>{let s=Wo(o);if(s)return s;let i=await Bo(o,e.auth);if(i)return i;let a=o.headers.get("mcp-session-id");if(a&&r.has(a))return r.get(a).transport.handleRequest(o);let d=pd(n,t),l=new WebStandardStreamableHTTPServerTransport({sessionIdGenerator:()=>crypto.randomUUID(),onsessioninitialized:u=>{r.set(u,{transport:l,server:d});},onsessionclosed:u=>{r.delete(u);},enableJsonResponse:true});return await d.connect(l),l.handleRequest(o)}}c();function Ko(n){let e=Q.resolve(n);return process.platform==="win32"&&(e=e.replace(/\\/g,"/"),e=e.replace(/^([A-Z]):/,(t,r)=>`${r.toLowerCase()}:`)),e.length>1&&!/^[a-zA-Z]:\/$/.test(e)&&(e=e.replace(/\/+$/,"")),e}function pn(n){let e=Ko(n);return createHash("sha256").update(e).digest("hex")}function jd(n){return n?n.settings?.template?.exec:void 0}function Fd(){try{let n=new Uint8Array(8);return globalThis.crypto.getRandomValues(n),Array.from(n,e=>e.toString(16).padStart(2,"0")).join("")}catch{let{randomBytes:n}=re("crypto");return n(8).toString("hex")}}var Tn=class n extends bt{_agents;_templateEngine;_documentLoader;_layoutLoader;_layoutRenderer;_config;_projectRoot;_workspaceId;_workspaceName;_plugins=[];_tools=new Map;_activeAdapters=new Map;_pendingThreads=new Map;_activeTasks=new Map;_remoteFactory;_remoteTargets=new Map;_additionalArgsProvider;constructor(e,t={},r,o,s){super(),this._agents=new Map(e.map(d=>[d.id,d])),this._config=r,this._projectRoot=s??(typeof process<"u"?process.cwd():"/");let i=s??(typeof process<"u"?process.env.CREWX_WORKSPACE??process.cwd():"/");this._workspaceId=pn(i),this._workspaceName=basename(i);let a=jd(r);this._templateEngine=new Rt({execPolicy:t.execPolicy??a}),this._documentLoader=o??new Ge,this._layoutLoader=new Ct({templatesPath:nt()}),this._layoutRenderer=new St,this._remoteFactory=t.remoteFactory,this._additionalArgsProvider=t.additionalArgsProvider;}async resolveFileRemoteTarget(e){let t=this.getAgent(e),r=Array.isArray(t?.provider)?t?.provider[0]:t?.provider;if(!r?.startsWith("remote/"))return null;let o=r.slice(7),s=this.getRemoteProviderConfig(o);if(!s?.location?.startsWith("file://"))return null;let i=resolve(s.location.replace("file://","")),a=s.external_agent_id??e.replace(/^@/,""),d=this._remoteTargets.get(i);d||(d=(this._remoteFactory??(m=>n.loadYaml(m)))(i),this._remoteTargets.set(i,d),d.catch(()=>this._remoteTargets.delete(i)));let l=await d,u=l.getAgent("@"+a),g=Array.isArray(u?.provider)?u?.provider[0]:u?.provider;if(g?.startsWith("remote/"))throw new Error(`Chained remotes not allowed: "${o}" \u2192 "${g}"`);return {target:l,agentRef:"@"+a}}static async loadBuiltInConfig(e){let{yamlPath:t,dir:r}=Rr(),o;try{o=readFileSync(t,"utf-8");}catch(i){throw new Error(`[@crewx/sdk] Cannot read built-in config: ${t}
302
- ${i.message}`)}let s=zt(o);if(s.documents&&typeof s.documents=="object"){let i={};for(let[a,d]of Object.entries(s.documents))if(d&&typeof d=="object"){let l=d;typeof l.path=="string"&&!isAbsolute(l.path)?i[a]={...l,path:resolve(r,l.path)}:i[a]=l;}else i[a]=d;return {...s,documents:i}}return s}static mergeCrewxConfig(e,t){let r=new Map;for(let x of e.agents??[])r.set(x.id,x);for(let x of t.agents??[])r.has(x.id)&&console.warn(`[agent-loader] User agent "${x.id}" overrides built-in`),r.set(x.id,x);let o=Array.from(r.values()),s={...e.layouts??{},...t.layouts??{}},i={...e.documents??{},...t.documents??{}},a=e,d=t,l=ls(a.vars,d.vars),u=ls(a.settings,d.settings),g;e.skills&&t.skills&&typeof e.skills=="object"&&typeof t.skills=="object"&&!Array.isArray(e.skills)&&!Array.isArray(t.skills)?g={...e.skills,...t.skills}:g=t.skills??e.skills;let f=[...e.hooks??[],...t.hooks??[]],m=Hd(a.providers,d.providers),w={...e},v={...t};for(let x of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete w[x],delete v[x];let _={...{...w,...v},agents:o,layouts:s,documents:i,skills:g};return f.length>0&&(_.hooks=f),l!==void 0&&(_.vars=l),u!==void 0&&(_.settings=u),m!==void 0&&(_.providers=m),_}static async loadYaml(e,t,r){let o=t?.includeBuiltIns!==false,s,i;if(o){let u=await n.loadBuiltInConfig(r);if(e!==void 0){let g=Kt(e);s=n.mergeCrewxConfig(u,g),i=dirname(e);}else s=u,i=process.cwd();}else {if(e===void 0)throw new Error("[@crewx/sdk] loadYaml: path is required when includeBuiltIns is false");s=Kt(e),i=dirname(e);}let a=new Ge(r);await a.load(s.documents,i);let d=s.agents??[];return await cs(d,s,t),new n(d,t??{},s,a,i)}static async fromConfig(e,t,r,o){let s=t?.includeBuiltIns===true,i=e;if(s){let u=await n.loadBuiltInConfig(o);i=n.mergeCrewxConfig(u,e);}let a=new Ge(o);await a.load(i.documents,r??(typeof process<"u"?process.cwd():"/"));let d=i.agents??[];return await cs(d,i,t),new n(d,t??{},i,a,r)}get agents(){return this._agents}get config(){return this._config}get plugins(){return this._plugins}get tools(){return this._tools}get workspaceId(){return this._workspaceId}get workspaceName(){return this._workspaceName}getAgent(e){let t=e.startsWith("@")?e.slice(1):e;return this._agents.get(t)}getRemoteProviderConfig(e){let t=this._config?.providers;return Array.isArray(t)?t.find(o=>o.type==="remote"&&o.id===e):void 0}computeTaskLogPath(e,t){let r=Qr(t);return join(this._projectRoot,".crewx","logs",`${r}_${e}.log`)}registerTool(e,t){this._tools.set(e,{name:e,...t});}async use(e){this._plugins.includes(e)||(await e.attach(this),this._plugins.push(e));}handler(e){return un(this,e)}async registerChannelAdapter(e){let{adapter:t,instanceId:r,config:o}=e;if(this._activeAdapters.has(r))throw new Error(`Adapter instance already registered: ${r}`);let s=new Set(t.manifest.capabilities),i=e.store??Zr(r),a=e.defaultMode??"query",d=t.manifest.platform,l=e.agentRunner??{run:async(m,w,v)=>{let _=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${m}`,w,{threadId:v?.threadId,platform:d});return {output:_.ok?_.data:_.error?.message??""}}},u=e.onInbound??(async m=>{let w=m.routingHints?.agentId??e.defaultAgent;if(!w)return {accepted:false,reason:"no_agent"};let{output:v}=await l.run(w,m.text,{threadId:m.threadId});return {accepted:true,output:v}}),g=tn({instanceId:r,config:o,capabilities:s,db:i,agentRunner:l,onInbound:u}),f={adapter:t,ctx:g,state:"starting"};this._activeAdapters.set(r,f),this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"starting",timestamp:new Date});try{await t.start(g),f.state="started",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"started",timestamp:new Date});}catch(m){throw f.state="failed",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"failed",error:m instanceof Error?m:new Error(String(m)),timestamp:new Date}),this._activeAdapters.delete(r),m}}async unregisterChannelAdapter(e){let t=this._activeAdapters.get(e);if(t){t.state="stopping",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"stopping",timestamp:new Date});try{await t.adapter.stop(t.ctx),t.state="stopped",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"stopped",timestamp:new Date});}catch(r){t.state="failed",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"failed",error:r instanceof Error?r:new Error(String(r)),timestamp:new Date});}finally{this._activeAdapters.delete(e);}}}async stopAllAdapters(e={}){let t=e.timeoutMs??1e4,r=Array.from(this._activeAdapters.keys()),o=await Promise.allSettled(r.map(s=>Promise.race([this.unregisterChannelAdapter(s),new Promise((i,a)=>setTimeout(()=>a(new Error(`Adapter stop timeout: ${s}`)),t))])));for(let s=0;s<o.length;s++)o[s].status==="rejected"&&console.error(`[crewx] adapter stop error (${r[s]}): ${o[s].reason}`);}abortAll(){for(let[e,t]of this._activeTasks)if(t.pid!==void 0)try{process.platform==="win32"?process.kill(t.pid,"SIGTERM"):process.kill(-t.pid,"SIGTERM");}catch(r){console.error(`[crewx] abort task ${e} (pid=${t.pid}) error: ${r instanceof Error?r.message:String(r)}`);}}async _drainActiveTasks(e){let t=Array.from(this._activeTasks.values()).map(r=>r.done);t.length!==0&&await Promise.race([Promise.allSettled(t),new Promise(r=>setTimeout(r,e).unref())]);}async close(){this.abortAll(),await this._drainActiveTasks(xt+1e3),await this.stopAllAdapters({timeoutMs:1e4});let e=[...this._remoteTargets.values()];this._remoteTargets.clear(),await Promise.allSettled(e.map(async r=>{try{await(await r).close();}catch(o){console.error(`[crewx] remote target close error: ${o instanceof Error?o.message:String(o)}`);}}));let t=[...this._plugins].reverse();for(let r of t)try{await r.detach(this);}catch(o){console.error(`[crewx] plugin ${r.name} detach error: ${o instanceof Error?o.message:String(o)}`);}this._plugins.length=0;}filterAgents(e){let t=a=>a?a.split(",").map(d=>d.trim().toLowerCase()).filter(Boolean):void 0,r=t(e.role),o=t(e.team),s=t(e.provider),i=Array.from(this._agents.values());return r&&(i=i.filter(a=>a.role&&r.some(d=>ye(a.role.toLowerCase(),d)))),o&&(i=i.filter(a=>a.team&&o.some(d=>ye(a.team.toLowerCase(),d)))),s&&(i=i.filter(a=>(Array.isArray(a.provider)?a.provider:[a.provider]).some(l=>s.some(u=>ye(l.toLowerCase(),u))))),i}renderAgentPrompt(e){let t=e.startsWith("@")?e.slice(1):e,r=this._agents.get(t);if(!r)throw new Ae(t,Array.from(this._agents.keys()));return r.inline?.prompt??r.inline?.system_prompt??r.description??`You are an expert ${t}.`}async renderPrompt(e,t){let o={...await this._documentLoader.buildContext(),...t?.documents??{}},s={...t,documents:o};return this._templateEngine.render(e,s)}registerLayout(e,t){this._layoutLoader.registerLayout(e,t);}async renderAgentPromptFull(e,t){let r=e.startsWith("@")?e.slice(1):e,o=this._agents.get(r);if(!o)throw new Ae(r,Array.from(this._agents.keys()));let s=this._resolveLayoutSpec(o,t?.layout),i=this._extractLayoutId(s),a=this._extractLayoutProps(o,s,t?.layout),d=this._layoutLoader.load(i,a),l=o.inline?.prompt??o.inline?.system_prompt??o.description??`You are an expert ${r}.`,u=await this._documentLoader.buildContext(),g=t?.env??(typeof process<"u"?process.env:{}),f=t?.vars?.security_key??Fd(),m={...t?.vars??{},documents:u,env:g,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??""}},w=await this._templateEngine.render(l,m),v={mode:t?.session?.mode??"query",platform:t?.session?.platform??"cli",options:t?.session?.options??[]},k=o.provider,_=Array.isArray(k)?k:typeof k=="string"&&k.length>0?[k]:[],x=_.join(", ")||(typeof k=="string"?k:""),A=o.options,I=["goals","daily"],E={goals:false,daily:false},K;if(!Array.isArray(A)&&typeof A=="object"&&A!==null){let C=A;if("goals"in C){let P=C.goals;typeof P=="string"||Array.isArray(P)?E.goals=P:E.goals=!!P;}"daily"in C&&(E.daily=!!C.daily);let b={};for(let[P,F]of Object.entries(C))I.includes(P)||(b[P]=F);if(Object.keys(b).length>0){let P=_.some(se=>se.startsWith("cli/")),F={};for(let[se,Y]of Object.entries(b)){let fe={};if(Array.isArray(Y))P&&(fe.rawArgs=Y);else if(typeof Y=="object"&&Y!==null){let Bn=Y;Object.keys(Bn).length>0&&(fe.named=Bn);}(fe.named||fe.rawArgs&&fe.rawArgs.length>0)&&(F[se]=fe);}K=Object.keys(F).length>0?F:void 0;}}let $=Array.isArray(A)?A:void 0,O={};for(let[C,b]of Object.entries(u))O[C]={content:b.content??"",toc:b.toc,summary:b.summary,path:b.path};if(E.goals){let C=join(this._projectRoot,"docs","goal"),b=await Po(C,void 0,E.goals);b&&(O.active_goals={content:b});}if(E.daily){let C=join(this._projectRoot,"docs","daily"),b=await To(C);b&&(O.today_daily={content:b});}let U=t?.vars?.user_input??void 0,B=this._config?.settings?.dreaming?.continuity,J=B?.reuseReadOnly!==false,z=typeof B?.lookback=="number"?B.lookback:5,te=typeof B?.maxEntryChars=="number"?B.maxEntryChars:8e3,Z=typeof B?.decayRate=="number"?B.decayRate:.5,j=t?.threadId??"",X=o.id,ee=J&&z>0&&j&&t?.messages&&t.messages.length>0?Ho({threadId:j,agentId:X,lookback:z,maxEntryChars:te,decayRate:Z}):new Map,me=(t?.messages??[]).map(C=>{if(!C.isAssistant)return C;let b=C.metadata?.task_id;return !b||!ee.has(b)?C:{...C,activity_log:ee.get(b)}}),R={user_input:U,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??"",provider:x,providerList:_,model:o.inline?.model,workingDirectory:o.working_directory??o.workingDirectory??".",inline:{...o.inline??{},prompt:w},specialties:o.specialties??[],capabilities:o.capabilities??[],remote:o.remote??null,optionsByMode:K,optionsArray:$},agentMetadata:{specialties:o.specialties??[],capabilities:o.capabilities??[],description:o.description??""},contextOptions:E,documents:O,skills:t?.skills??[],session:v,env:g,vars:{security_key:f,...t?.vars??{}},props:{...a??{},...t?.messages&&t.messages.length>0?{showConversationHistory:true}:{}},platform:v.platform,mode:v.mode,thread_id:j,now:Pt(new Date),has_activity_log:ee.size>0,messages:me,tools:this._tools.size>0?{list:Array.from(this._tools.values()).map(C=>({name:C.name,description:C.description,parameters:C.parameters})),json:JSON.stringify(Array.from(this._tools.values()).map(C=>({name:C.name,description:C.description,parameters:C.parameters})),null,2),count:this._tools.size}:null,metadata:{}};return this._layoutRenderer.render(d,R)}_filterToolsByMode(e){return e?e.map(t=>this._tools.get(t)).filter(t=>t!==void 0):Array.from(this._tools.values())}_resolveLayoutSpec(e,t){if(t!==void 0)return t;let r=e.inline?.layout;if(r!==void 0)return r;let o=this._config?.layouts?.default;return typeof o=="string"&&o?o:"crewx/default"}_extractLayoutId(e){if(typeof e=="string")return e;if("id"in e)return e.id;if("template"in e&&typeof e.template=="string"&&e.template.trim()){let t=`crewx/__inline_${Date.now()}`;return this._layoutLoader.registerLayout(t,e.template),t}return "crewx/default"}_extractLayoutProps(e,t,r){let o=e.inline?.layout,s=o&&typeof o=="object"&&"props"in o?o.props:void 0,i=r&&typeof r=="object"&&"id"in r?r.props:void 0;if(s||i)return {...s??{},...i??{}}}_getConversationProvider(){return this._plugins.find(t=>t.name==="conversation")?.conversationProvider}async _fetchHistoryMessages(e,t,r){if(r&&r.length>0)return r;if(!e)return;let o=this._getConversationProvider();if(o)try{let s=await o.fetchHistory(e,{currentTraceId:t});return s.messages.length===0?void 0:nn(s)}catch{return}}_resolveTimeout(e,t){let r=e==="query"?"CREWX_TIMEOUT_QUERY":"CREWX_TIMEOUT_EXECUTE";if(process.env[r]!=null&&process.env[r]!==""){let o=lo();return e==="query"?o.queryMs:o.executeMs}if(t?.meta?.defaultTimeoutMs){let o=e==="query"?t.meta.defaultTimeoutMs.query:t.meta.defaultTimeoutMs.execute;if(o!==void 0)return o}return 8*36e5}_resolveIdleTimeout(e){let t=Hr();return t!==void 0?t:e?.meta?.defaultIdleMs!==void 0?e.meta.defaultIdleMs:6e5}_lookupCliAdapter(e){if(e.startsWith("cli/"))return we[e.slice(4)]}_resolveEffectiveCwd(e,t){return t?.cwd??(e.working_directory?resolve(this._projectRoot,e.working_directory):this._projectRoot)}_buildFileRemoteOptions(e,t){let r={path:this._projectRoot,id:this._workspaceId,name:this._workspaceName,agentRef:e};return {...t,cwd:void 0,metadata:{...t?.metadata??{},crewx:{...t?.metadata?.crewx??{},callerWorkspace:r}},vars:{...t?.vars??{},crewx_caller_workspace_path:r.path,crewx_caller_workspace_id:r.id,crewx_caller_workspace_name:r.name}}}emitToolEvents(e,t,r,o,s,i,a){try{let l=this._lookupCliAdapter(r)?.parseEvent?.(o)??_t(new Date().toISOString(),o);for(let u of l)u.type==="tool_use"&&u.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:u.toolName,rawName:u.toolName,input:u.toolInput?this.tryParseJson(u.toolInput):void 0,toolUseId:u.toolUseId}}),u.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:u.toolName??"unknown",rawName:u.toolName??"unknown",toolUseId:u.toolUseId,result:u.resultPreview,isError:u.isError}});}catch{}}emitTaskLogEntries(e,t,r,o,s,i,a){try{for(let d of a)d.type==="tool_use"&&d.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:r,threadId:o,sessionId:s,provider:i,tool:{name:d.toolName,rawName:d.toolName,input:d.toolInput?this.tryParseJson(d.toolInput):void 0,toolUseId:d.toolUseId}}),d.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:t,agentId:r,threadId:o,sessionId:s,provider:i,tool:{name:d.toolName??"unknown",rawName:d.toolName??"unknown",toolUseId:d.toolUseId,result:d.resultPreview,isError:d.isError}});}catch{}}tryParseJson(e){try{return JSON.parse(e)}catch{return e}}async query(e,t,r){let o=await this.resolveFileRemoteTarget(e);if(o)return o.target.query(o.agentRef,t,this._buildFileRemoteOptions(e,r));let s=It.getStore()??rn(r?.trace),i=r?.taskId??Xe("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null};return It.run(d,async()=>{let l=Date.now(),u=new Date,g;try{g=Gt(e,Array.from(this._agents.values()));}catch(R){if(R instanceof Ae){this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let C=Date.now()-l,b={code:"AGENT_NOT_FOUND",message:R.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:C,error:b,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:b,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:C,taskId:i}}}throw R}d.callerAgentId=g.id;let f=Array.isArray(g.provider)?g.provider[0]??"cli/claude":g.provider,m=sr(g.options,"query",f,or(r?.overdrive)),w=m.active&&m.provider?m.provider:r?.provider??f,v=m.active&&m.model?m.model:r?.model??g.inline?.model;v&&v.includes("{{")&&(v=await this._templateEngine.render(v,{...r?.vars??{}}));let k=m.crossProvider?void 0:r?.resumeSessionId,_;try{_=Ce(w,this._additionalArgsProvider);}catch(R){this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let C=Date.now()-l,b={code:"PROVIDER_ERROR",message:R.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:C,error:b,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:b,meta:{agentId:g.id,provider:w,model:v,durationMs:C,taskId:i}}}let x=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),A;try{A=await this.renderAgentPromptFull(e,{session:{mode:"query",platform:r?.platform},vars:{user_input:t,...r?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(g,r)},messages:x,threadId:r?.threadId});}catch(R){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${R instanceof Error?R.message:String(R)}`);}let I,E,K,$=v,O=false,U=R=>{O||(O=true,this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"query",pid:R,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:$,provider:w,codingAgentCommand:I,renderedPrompt:A,metadata:{...r?.metadata??{},provider:w,...m.active?{overdrive:true}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},q=g.options,W=m.active?m.mode:q?.query?.mode,B=m.active?m.effort:q?.query?.effort,J=Array.isArray(q?.query?.tools)?q.query.tools:void 0,z=this._tools.size>0?this._filterToolsByMode(J):[],te=(()=>{let R=q?.query;if(!R||Array.isArray(R))return;let{tools:C,effort:b,mode:P,...F}=R,se=Object.entries(F).filter(([,Y])=>Y!=null);if(se.length!==0)return Object.fromEntries(se.map(([Y,fe])=>[Y,String(fe)]))})(),Z=g.inline?.max_steps;w.startsWith("api/")&&U();let j=false,X=0,ee=()=>{},me=new Promise(R=>{ee=R;});this._activeTasks.set(i,{pid:void 0,done:me});try{let R=await _.query(t,{model:v,effort:B,mode:W,context:r?.context,systemPrompt:A??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(q?.query)?q.query:void 0,resumeSessionId:k,tools:z.length>0?z:void 0,maxSteps:Z,configOptions:te,timeoutMs:this._resolveTimeout("query",this._lookupCliAdapter(w)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(w)),cwd:this._resolveEffectiveCwd(g,r),env:{CREWX_AGENT_ID:g.id,CREWX_AGENT_ROLE:g.role??"",CREWX_AGENT_TEAM:g.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:w,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,u)},onPid:P=>{let F=this._activeTasks.get(i);F&&(F.pid=P),U(P);},onOutput:(P,F)=>{let se=this._lookupCliAdapter(w);F==="stdout"&&se?.suppressOutputLine?.(P)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:P,level:F}),F==="stdout"&&this.emitToolEvents(i,e,w,P,g.id,r?.threadId??"","");},onTaskLog:P=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",w,P);for(let F of P)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(F),level:"info"});},onCommand:P=>{I=P;},onUsage:P=>{E=P;},onExitCode:P=>{K=P;},onModel:P=>{$||($=P);}});X=zr(E?.costUsd,E?.inputTokens,E?.outputTokens,E?.cachedInputTokens,$,new Date(l)),U();let C=Date.now()-l,b={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",result:R,durationMs:C,exitCode:K,inputTokens:E?.inputTokens,outputTokens:E?.outputTokens,cachedInputTokens:E?.cachedInputTokens,costUsd:X,model:$,metadata:Object.keys(b).length>0?b:void 0}),j=!0,{ok:!0,data:R,meta:{agentId:g.id,provider:w,model:v,durationMs:C,taskId:i}}}catch(R){if(R instanceof ue){let P=Xe("thd");return this._pendingThreads.set(P,{agentRef:g.id,providerStr:w,continuationState:R.continuationState,toolCall:R.toolCall,traceId:i,startMs:l,model:v}),j=true,{ok:true,status:"requires_action",data:"",toolCall:R.toolCall,threadId:P,meta:{agentId:g.id,provider:w,model:v,durationMs:Date.now()-l,taskId:i}}}U();let C=Date.now()-l,b={code:"QUERY_FAILED",message:R.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:C,error:b,exitCode:K,inputTokens:E?.inputTokens,outputTokens:E?.outputTokens,cachedInputTokens:E?.cachedInputTokens,costUsd:X,model:$,metadata:r?.metadata?{...r.metadata}:void 0}),j=true,{ok:false,data:"",error:b,meta:{agentId:g.id,provider:w,model:v,durationMs:C,taskId:i}}}finally{j||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:Date.now()-l,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:K??-1,inputTokens:E?.inputTokens,outputTokens:E?.outputTokens,cachedInputTokens:E?.cachedInputTokens,costUsd:X,model:$}),this._activeTasks.delete(i),ee();}})}async continueQuery(e,t){let r=this._pendingThreads.get(e);if(!r)return {ok:false,data:"",error:{code:"THREAD_NOT_FOUND",message:`No pending thread: ${e}`},meta:{agentId:"",provider:"",durationMs:0}};this._pendingThreads.delete(e);let o=Ce(r.providerStr,this._additionalArgsProvider);if(!o.continueWithToolResults)return {ok:false,data:"",error:{code:"UNSUPPORTED",message:"Provider does not support client tool continuation"},meta:{agentId:r.agentRef,provider:r.providerStr,durationMs:0}};let s=t.map(i=>({...i,toolName:r.toolCall.toolCallId===i.toolCallId?r.toolCall.toolName:i.toolCallId}));try{let i=await o.continueWithToolResults(r.continuationState,s),a=Date.now()-r.startMs;return this.emit("task:end",{traceId:r.traceId,timestamp:new Date,agentRef:r.agentRef,mode:"query",result:i,durationMs:a}),{ok:!0,status:"complete",data:i,meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:a}}}catch(i){if(i instanceof ue)return this._pendingThreads.set(e,{...r,continuationState:i.continuationState,toolCall:i.toolCall}),{ok:true,status:"requires_action",data:"",toolCall:i.toolCall,threadId:e,meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:Date.now()-r.startMs}};let a=Date.now()-r.startMs;return {ok:false,data:"",error:{code:"CONTINUE_FAILED",message:i.message},meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:a}}}}async execute(e,t,r){let o=await this.resolveFileRemoteTarget(e);if(o)return o.target.execute(o.agentRef,t,this._buildFileRemoteOptions(e,r));let s=It.getStore()??rn(r?.trace),i=r?.taskId??Xe("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null};return It.run(d,async()=>{let l=Date.now(),u=new Date,g;try{g=Gt(e,Array.from(this._agents.values()));}catch(R){if(R instanceof Ae){this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let C=Date.now()-l,b={code:"AGENT_NOT_FOUND",message:R.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:C,error:b,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:b,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:C,taskId:i}}}throw R}d.callerAgentId=g.id;let f=Array.isArray(g.provider)?g.provider[0]??"cli/claude":g.provider,m=sr(g.options,"execute",f,or(r?.overdrive)),w=m.active&&m.provider?m.provider:r?.provider??f,v=m.active&&m.model?m.model:r?.model??g.inline?.model;v&&v.includes("{{")&&(v=await this._templateEngine.render(v,{...r?.vars??{}}));let k=m.crossProvider?void 0:r?.resumeSessionId,_;try{_=Ce(w,this._additionalArgsProvider);}catch(R){this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let C=Date.now()-l,b={code:"PROVIDER_ERROR",message:R.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:C,error:b,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:b,meta:{agentId:g.id,provider:w,model:v,durationMs:C,taskId:i}}}let x=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),A;try{A=await this.renderAgentPromptFull(e,{session:{mode:"execute",platform:r?.platform},vars:{user_input:t,...r?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(g,r)},messages:x,threadId:r?.threadId});}catch(R){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${R instanceof Error?R.message:String(R)}`);}let I,E,K,$=v,O=false,U=R=>{O||(O=true,this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"execute",pid:R,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:$,provider:w,codingAgentCommand:I,renderedPrompt:A,metadata:{...r?.metadata??{},provider:w,...m.active?{overdrive:true}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},q=g.options,W=m.active?m.mode:q?.execute?.mode,B=m.active?m.effort:q?.execute?.effort,J=Array.isArray(q?.execute?.tools)?q.execute.tools:void 0,z=this._tools.size>0?this._filterToolsByMode(J):[],te=(()=>{let R=q?.execute;if(!R||Array.isArray(R))return;let{tools:C,effort:b,mode:P,...F}=R,se=Object.entries(F).filter(([,Y])=>Y!=null);if(se.length!==0)return Object.fromEntries(se.map(([Y,fe])=>[Y,String(fe)]))})(),Z=g.inline?.max_steps;w.startsWith("api/")&&U();let j=false,X=0,ee=()=>{},me=new Promise(R=>{ee=R;});this._activeTasks.set(i,{pid:void 0,done:me});try{let R=await _.execute(t,{model:v,effort:B,mode:W,context:r?.context,systemPrompt:A??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(q?.execute)?q.execute:void 0,resumeSessionId:k,tools:z.length>0?z:void 0,maxSteps:Z,configOptions:te,timeoutMs:this._resolveTimeout("execute",this._lookupCliAdapter(w)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(w)),cwd:this._resolveEffectiveCwd(g,r),env:{CREWX_AGENT_ID:g.id,CREWX_AGENT_ROLE:g.role??"",CREWX_AGENT_TEAM:g.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:w,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,u)},onPid:P=>{let F=this._activeTasks.get(i);F&&(F.pid=P),U(P);},onOutput:(P,F)=>{let se=this._lookupCliAdapter(w);F==="stdout"&&se?.suppressOutputLine?.(P)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:P,level:F}),F==="stdout"&&this.emitToolEvents(i,e,w,P,g.id,r?.threadId??"","");},onTaskLog:P=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",w,P);for(let F of P)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(F),level:"info"});},onCommand:P=>{I=P;},onUsage:P=>{E=P;},onExitCode:P=>{K=P;},onModel:P=>{$||($=P);}});X=zr(E?.costUsd,E?.inputTokens,E?.outputTokens,E?.cachedInputTokens,$,new Date(l)),U();let C=Date.now()-l,b={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",result:R,durationMs:C,exitCode:K,inputTokens:E?.inputTokens,outputTokens:E?.outputTokens,cachedInputTokens:E?.cachedInputTokens,costUsd:X,model:$,metadata:Object.keys(b).length>0?b:void 0}),j=!0,{ok:!0,data:R,meta:{agentId:g.id,provider:w,model:v,durationMs:C,taskId:i}}}catch(R){U();let C=Date.now()-l,b={code:"EXECUTE_FAILED",message:R.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:C,error:b,exitCode:K,inputTokens:E?.inputTokens,outputTokens:E?.outputTokens,cachedInputTokens:E?.cachedInputTokens,costUsd:X,model:$,metadata:r?.metadata?{...r.metadata}:void 0}),j=true,{ok:false,data:"",error:b,meta:{agentId:g.id,provider:w,model:v,durationMs:C,taskId:i}}}finally{j||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:Date.now()-l,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:K??-1,inputTokens:E?.inputTokens,outputTokens:E?.outputTokens,cachedInputTokens:E?.cachedInputTokens,costUsd:X,model:$}),this._activeTasks.delete(i),ee();}})}};function ls(n,e){let t=Sn(n)?n:void 0,r=Sn(e)?e:void 0;if(!(!t&&!r))return {...t??{},...r??{}}}function Sn(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Hd(n,e){let t=Array.isArray(n)?n:void 0,r=Array.isArray(e)?e:void 0;if(!t&&!r)return;let o=a=>{if(!Sn(a))return;let d=a.id;if(typeof d=="string")return `id:${d}`;let l=a.name;if(typeof l=="string")return `name:${l}`},s=new Set;for(let a of r??[]){let d=o(a);d&&s.add(d);}let i=[];for(let a of t??[]){let d=o(a);d&&s.has(d)||i.push(a);}for(let a of r??[])i.push(a);return i}async function cs(n,e,t){if(n.some(o=>(Array.isArray(o.provider)?o.provider:[o.provider]).some(i=>i.startsWith("api/")))){let{registerApiProviders:o}=await Promise.resolve().then(()=>(mn(),Xo));o(t?.api);}await Wd(n,e),Bd(n,e),qd(n);}function qd(n){if(!n.some(r=>(Array.isArray(r.provider)?r.provider:[r.provider]).some(s=>s.startsWith("acp/"))))return;let{registerAcpProviders:t}=(xn(),zn(ts));t();}async function Wd(n,e){if(!n.some(i=>(Array.isArray(i.provider)?i.provider:[i.provider]).some(d=>d.startsWith("remote/"))))return;let r=e.providers;if(!Array.isArray(r))return;let{createRemoteProviderFactory:o}=await Promise.resolve().then(()=>(En(),ns)),s=new Map;for(let i of r)i.type==="remote"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&Re("remote",o(s,Ce));}function Bd(n,e){if(!n.some(i=>(Array.isArray(i.provider)?i.provider:[i.provider]).some(d=>d.startsWith("plugin/"))))return;let r=e.providers;if(!Array.isArray(r))return;let{createPluginProviderFactory:o}=(Rn(),zn(as)),s=new Map;for(let i of r)i.type==="plugin"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&Re("plugin",o(s));}c();var bn=class{detach(e){}};c();var zd="crewx:fs:",In=class{prefix;store;constructor(e){this.prefix=e?.prefix??zd,this.store=e?.storage??new Map;}async readFile(e){let t=this.toKey(e),r=this.store.get(t);if(r===void 0)throw new Error(`BrowserFsAdapter: file not found: ${e}`);return r}async exists(e){return this.store.has(this.toKey(e))}resolvePath(...e){let t=e.map(i=>i.replace(/\\/g,"/")).join("/").replace(/\/+/g,"/"),r=t.split("/"),o=[];for(let i of r)i==="."||i===""||(i===".."?o.pop():o.push(i));let s=o.join("/");return t.startsWith("/")?`/${s}`:s}isAbsolute(e){return e.startsWith("/")}setItem(e,t){this.store.set(this.toKey(e),t);}removeItem(e){this.store.delete(this.toKey(e));}keys(){return Array.from(this.store.keys()).filter(e=>e.startsWith(this.prefix)).map(e=>e.slice(this.prefix.length))}async readdir(e){let t=e.replace(/\\/g,"/").replace(/\/$/,""),r=this.toKey(t+"/"),o=[];for(let s of this.store.keys())if(s.startsWith(r)){let a=s.slice(r.length).split("/")[0];a&&!o.includes(a)&&o.push(a);}return o}toKey(e){return `${this.prefix}${e.replace(/\\/g,"/")}`}};c();he();function ps(n){if(!n)return "";let e=n.lastIndexOf("/");return e===-1?n.trim():n.slice(e+1).trim()}function us(n){return n?dt(n).models.length>0:false}function On(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Kd(n,e,t){let r=n,o=false,s=[],i=()=>(o||(r={...n},o=true),r);us(e)&&(typeof r.mode=="string"&&(yt(e).map(l=>l.id).includes(r.mode)||(delete i().mode,s.push("mode"))),typeof r.effort=="string"&&(ht(e,t).includes(r.effort)||(delete i().effort,s.push("effort"))));let a=r.overdrive;if(On(a)){let d=ps(typeof a.provider=="string"?a.provider:void 0),l=typeof a.model=="string"?a.model:void 0;if(us(d)){let u,g=()=>(u||(u={...a},i().overdrive=u),u);typeof a.mode=="string"&&(yt(d).map(m=>m.id).includes(a.mode)||(delete g().mode,s.push("overdrive.mode"))),typeof a.effort=="string"&&(ht(d,l).includes(a.effort)||(delete g().effort,s.push("overdrive.effort")));}}return {block:r,removed:s}}function Vd(n){let{options:e}=n;if(!On(e))return {options:e,changed:false,removed:[]};let t=ps(n.provider),r=[],o=e,s=false,i=()=>(s||(o={...e},s=true),o);for(let a of ["query","execute"]){let d=e[a];if(!On(d))continue;let{block:l,removed:u}=Kd(d,t,n.model);u.length>0&&(i()[a]=l,r.push(...u.map(g=>`${a}.${g}`)));}return {options:o,changed:r.length>0,removed:r}}c();var Gd="https://api.crewx.dev/v1/models",Jd=3600*1e3,gs=0;async function Xd(n){let e=n?.ttlMs??Jd,t=Date.now();if(!(t-gs<e)){gs=t;try{let r=await fetch(n?.endpoint??Gd);if(!r.ok)return;let o=await r.json();if(!o?.models||typeof o.models!="object")return;let s={};for(let[i,a]of Object.entries(o.models))a!=null&&(s[i]={input:a.input,cachedInput:a.cachedInput,output:a.output});mo(s);}catch{}}}c();he();var Yd="https://api.crewx.dev/v1/models",Qd=900*1e3,ms=0;async function Zd(n){let e=n?.ttlMs??Qd,t=Date.now();if(!(t-ms<e)){ms=t;try{let r=await fetch(n?.endpoint??Yd);if(!r.ok)return;let o=await r.json();if(!o?.providers||typeof o.providers!="object")return;let s={};for(let[i,a]of Object.entries(o.providers)){let d=Array.isArray(a)?a:a.models??[],l=Array.isArray(a)?[]:a.modes??[],u=Array.isArray(a)?[]:a.effort??[],g=Array.isArray(a)?{}:a.modelOverrides??{},f=d.filter(m=>m!=null&&typeof m.id=="string").map(m=>({id:m.id,name:m.name??m.id,...m.description!=null?{description:m.description}:{}}));s[i]={models:f,modes:l.filter(m=>m!=null&&typeof m.id=="string").map(m=>({id:m.id,name:m.name??m.id,...m.description!=null?{description:m.description}:{}})),effort:u.filter(m=>typeof m=="string"),modelOverrides:g};}br(s);}catch{}}}c();function el(n,e){let t=n.skills?.include;if(t===void 0)return [...e];if(t.length===0)return [];let r=new Set(t);return e.filter(o=>r.has(o))}c();var Mn=["codex","claude","opencode","antigravity","copilot"];function tl(n){let e=n.indexOf("/");return e===-1?n:n.slice(e+1)}function Nn(n){let e=tl(n),t=Mn.indexOf(e);return t===-1?Mn.length:t}function Ft(n,e){return Nn(n)-Nn(e)}var rl=new Set(["claude","copilot","codex","opencode"]);function nl(n){if(!n)return "";if(n.startsWith("acp/")){let e=n.slice(4);if(rl.has(e))return `cli/${e}`}return n}he();ve();gn();mn();c();fn();Me();c();yr();xr();he();var ol="model",sl="mode",il="thought_level";function Dn(n){if(n.length===0)return [];if(n[0]?.group!=null){let e=[];for(let t of n)for(let r of t.options??[])e.push(r);return e}return n}function al(n,e){let t=new Map;for(let r of [...n,...e])t.has(r.id)||t.set(r.id,r);return Array.from(t.values())}function dl(n,e,t,r){let o=t.agentInfo?.name,s=e??o??n,i=r.configOptions??[],d=(r.modes?.availableModes??[]).map(_=>({id:_.id,name:_.name,..._.description!=null?{description:_.description}:{}})),l=[];for(let _ of i)if(_.category?.trim().toLowerCase()===sl&&_.options!=null)for(let x of Dn(_.options))x.value!=null&&l.push({id:x.value,name:x.name??x.value});let u=al(d,l),g=[];for(let _ of i)if(_.category?.trim().toLowerCase()===il&&_.type==="select")for(let x of Dn(_.options??[]))x.value!=null&&g.push(x.value);if(n==="claude"){let _=wt().map(A=>({id:A.id,name:A.name})),x=fs(t);return ys(n,{models:_,modes:u,availableModelsCount:0,configModelsCount:0,skipModelWarn:true}),{id:`acp/${n}`,name:s,modes:u,effort:g,models:_,capabilities:x}}let m=(r.models?.availableModels??[]).map(_=>({id:_.modelId})),w=[];for(let _ of i)if(_.category?.trim().toLowerCase()===ol&&_.options!=null)for(let x of Dn(_.options))x.value!=null&&w.push({id:x.value,...x.name!=null?{name:x.name}:{}});let v=vt(m,w);ys(n,{models:v,modes:u,availableModelsCount:m.length,configModelsCount:w.length,skipModelWarn:false});let k=fs(t);return {id:`acp/${n}`,name:s,modes:u,effort:g,models:v,capabilities:k}}function fs(n){let e=n.agentCapabilities??{};return {loadSession:e.loadSession??false,image:e.promptCapabilities?.image??false,audio:e.promptCapabilities?.audio??false,mcp:e.mcpCapabilities!=null}}function ys(n,e){!e.skipModelWarn&&e.models.length===0&&console.warn(`[acp] ${n} meta: models empty (availableModels=${e.availableModelsCount}, configOptions[model]=${e.configModelsCount})`),e.modes.length===0&&console.warn(`[acp] ${n} meta: modes empty`);}async function hs(n){let e=rt[n];if(!e)return null;let t=e.meta?.displayName,r=new tt({spawn:e.spawn,cwd:process.cwd()});try{await r.connect(e.clientInfo);let o=r.initResponse;if(!o)return null;let s=e.buildSessionParams({cwd:process.cwd()}),i=await r.newSessionRaw(s);return dl(n,t,o,i)}catch(o){return console.warn(`[acp] ${n} meta query failed: ${o instanceof Error?o.message:String(o)}`),null}finally{await r.dispose();}}async function ll(){let n=Object.keys(rt),e=await Promise.allSettled(n.map(r=>hs(r))),t=[];for(let r of e)r.status==="fulfilled"&&r.value!==null&&t.push(r.value);return t.sort((r,o)=>Ft(r.id,o.id))}yr();yn();xr();xn();Cr();Oe();c();Oe();he();function ul(n){return n.charAt(0).toUpperCase()+n.slice(1)}async function ws(){return new Promise(n=>{execFile("opencode",["models"],{timeout:5e3,maxBuffer:1048576},(t,r)=>{if(t){n([]);return}let o=r.split(`
303
- `).map(s=>s.trim()).filter(s=>s.length>0).map(s=>({id:s}));n(o);}).on("error",()=>n([]));})}function pl(n,e,t){if(!e.meta)return null;let r=e.meta.capabilities??{},o=Ke(n),s=o.length>0?o:e.meta.models??[],i=t!==void 0?vt(t,s):s;return {id:`cli/${n}`,name:e.meta.displayName??ul(n),modes:yt(n),effort:ht(n),models:i,modelOverrides:oo(n),capabilities:{loadSession:r.loadSession??false,resume:r.resume??false,image:r.image??false,audio:r.audio??false,mcp:r.mcp??false}}}async function gl(n={}){let e=n.includeOpencodeRuntimeModels?await ws():void 0,t=[];for(let[r,o]of Object.entries(we)){let i=pl(r,o,r==="opencode"?e:void 0);i&&t.push(i);}return t.sort((r,o)=>Ft(r.id,o.id))}c();var Ln=0;function ml(n){let e=n.meta?.taskId,t=e?` taskId=${e}`:"";if(n.ok)return `Task completed:${t}
297
+ `).map(a=>({threadId:a.thread_id,agentId:a.agent_id,startedAt:a.started_at,status:a.status,error:a.error,exitCode:a.exit_code}))}catch(s){throw new O("DB_ERROR","Failed to get tasks for report",s)}finally{o.close();}}};var cd=new Set(["Read","Grep","Find","Glob"]),ud=["git status","git log","git branch","git diff --stat","git show","git remote","git rev-parse","git ls-files","pwd","ls ","echo ","cat ","head ","tail ","npx crewx memory index","npx crewx memory find","npx crewx memory get","npx crewx doc toc","npx crewx doc section","npx crewx doc status","npx crewx search","npx skill tsserver find","npx skill tsserver refs","npx skill tsserver type","crewx memory index","crewx memory find","crewx memory get","crewx doc toc","crewx doc section","crewx doc status","crewx search","crewx agent ls","crewx agent list"],pd=[/\bgit\s+(commit|push|pull|merge|rebase|reset|checkout|switch|add|rm)\b/,/\bnpm\s+(install|ci|publish|run\s+(test|lint|build))\b/,/\bnpx\s+tsc\b/,/\bpnpm\s+(install|run)\b/,/\bvitest\b/,/\bjest\b/];function gd(n){let e=n.toLowerCase();return e==="bash"||e==="terminal"?"Bash":e==="read"||e==="view"?"Read":e==="edit"||e==="apply_patch"?"Edit":e==="write"?"Write":e==="grep"||e==="rg"?"Grep":e==="glob"||e==="find"?"Find":n}function md(n,e){if(cd.has(n))return true;if(n!=="Bash"||!e)return false;let t=e.split(`
298
+ `)[0].trimStart();return pd.some(r=>r.test(t))?false:ud.some(r=>t.startsWith(r))}function hr(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function fd(n,e,t){if(n!=="Read"||!e)return "ok";let o=e.split(`
299
+ `).find(s=>s.trim()&&!s.startsWith("Read "))?.trim()??e.trim();if(!o)return "unknown";try{let s=Bo.statSync(o);if(t){let i=Date.parse(t);if(!Number.isNaN(i)&&s.mtimeMs>i)return "stale"}return "ok"}catch{return "unknown"}}function yd(n){let e=new Set;for(let t of n)try{let r=JSON.parse(t);r.type&&e.add(r.type);}catch{}return e.has("turn.started")||e.has("thread.started")?"codex":e.has("assistant.message_delta")?"copilot":e.has("step_start")&&e.has("step_finish")?"opencode":e.has("system")&&e.has("result")?"claude":e.has("init")&&e.has("message")?"gemini":e.has("result")&&e.has("assistant")?"claude":null}function hd(n){if(!Array.isArray(n))return [];let e=n,t=e.filter(a=>a.level==="stdout"&&a.message).map(a=>a.message),r=yd(t),o=[];for(let a of e)a.level==="info"&&a.message?o.push(...ge(a.message,a.timestamp)):a.level==="stdout"&&a.message&&r&&o.push(...At("",a.message,r));let s=new Map,i=[];for(let a of o)if(a.type==="tool_use"){let d={tool:gd(a.toolName??""),input:a.toolInput??null,result:null,isError:false},l=a.toolUseId;if(l){if(s.has(l)){s.get(l).input=d.input;continue}s.set(l,d);}i.push(d);}else if(a.type==="tool_result"){if(a.toolUseId&&s.has(a.toolUseId)){let d=s.get(a.toolUseId);d.isError=a.isError===true,d.result=a.resultPreview??null;}else for(let d=i.length-1;d>=0;d--)if(i[d].result===null){i[d].isError=a.isError===true,i[d].result=a.resultPreview??null;break}}return i}function wd(n,e){let t=hd(n),r=[];for(let o of t){let s=o.tool==="Bash"?o.input?.split(`
300
+ `)[0]?.slice(0,150)??null:o.input?.slice(0,150)??null,i=md(o.tool,o.input)&&!o.isError;r.push({tool:o.tool,cmd:s,result:o.result,status:fd(o.tool,o.input,e),reusable:i});}return r}function vd(n,e,t){let r=["<activity_log>"];if(n.length===0&&e===0)r.push(" <!-- no activity found in previous tasks -->");else {r.push(" <!-- tool activity from previous tasks -->"),e>0&&r.push(` <!-- ${e} entries omitted (cap) -->`);for(let o of n){let s=`tool="${hr(o.tool)}"`,i=o.cmd?` cmd="${hr(o.cmd)}"`:"",a="";if(o.reusable&&(a=o.status==="stale"?' reused="stale"':' reused="ok"'),o.reusable&&o.status==="stale")r.push(` <entry ${s}${i}${a}>\u26A0\uFE0F changed since \u2014 re-read</entry>`);else if(o.result){r.push(` <entry ${s}${i}${a}>`);let d=t&&t>0?t:8e3,l=o.result;l.length>d?r.push(hr(l.slice(0,d))+` \u2026 [truncated, ${d}/${l.length} chars shown]`):r.push(hr(l)),r.push(" </entry>");}else r.push(` <entry ${s}${i}${a} />`);}}return r.push("</activity_log>"),r}function zo(n){let{threadId:e,agentId:t,lookback:r,maxEntryChars:o,decayRate:s}=n;if(!r||!e||!t)return new Map;let i;try{i=new Lt().findTasksByThread(e).filter(f=>!f.parent_task_id&&f.agent_id===t).sort((f,m)=>m.started_at>f.started_at?1:-1).slice(0,Math.min(r,5));}catch{return new Map}if(!i.length)return new Map;let a=[];for(let g of i){let f=[];try{let m=JSON.parse(g.logs??"[]");Array.isArray(m)&&(f=m);}catch{}a.push({taskId:g.id,entries:wd(f,g.completed_at)});}let d=new Map,l=typeof s=="number"&&s>0&&s<=1?s:1,u=1e3;for(let g=0;g<a.length;g++){let{taskId:f,entries:m}=a[g];if(m.length===0)continue;let w=Math.max(Math.floor((o??8e3)*Math.pow(l,g)),u),v=Math.max(0,m.length-200),E=v>0?m.slice(v):m,_=vd(E,v,w);d.set(f,_.join(`
301
+ `));}return d}c();c();var _d={agentId:z.string().describe("The agent ID to query"),query:z.string().describe("The query message to send"),context:z.string().optional().describe("Additional context"),thread:z.string().optional().describe("Thread ID for conversation continuity")},xd={agentId:z.string().describe("The agent ID to execute"),task:z.string().describe("The task description to execute"),context:z.string().optional().describe("Additional context"),thread:z.string().optional().describe("Thread ID for conversation continuity")};function Ko(n,e,t){n.tool("crewx_listAgents","List available CrewX agents exposed by this server",async()=>{let r=[];for(let o of t){let s=e.agents.get(o);s&&r.push({id:s.id,name:s.name??s.id,description:s.description??""});}return {content:[{type:"text",text:JSON.stringify(r,null,2)}]}}),n.tool("crewx_queryAgent","Query a CrewX agent with a read-only question",_d,async({agentId:r,query:o,context:s,thread:i})=>{if(!t.has(r))return {content:[{type:"text",text:`Agent '${r}' is not exposed by this server`}],isError:true};let a=await e.query(r,o,{context:s,threadId:i});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Query failed"}],isError:true}}),n.tool("crewx_executeAgent","Execute a task on a CrewX agent (may modify state)",xd,async({agentId:r,task:o,context:s,thread:i})=>{if(!t.has(r))return {content:[{type:"text",text:`Agent '${r}' is not exposed by this server`}],isError:true};let a=await e.execute(r,o,{context:s,threadId:i});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Execute failed"}],isError:true}});}c();function Vo(n){return n.headers.get("Origin")?null:new Response(JSON.stringify({error:"Forbidden: Origin header required"}),{status:403,headers:{"Content-Type":"application/json"}})}async function Go(n,e){return e?await e(n)?null:new Response(JSON.stringify({error:"Unauthorized"}),{status:401,headers:{"Content-Type":"application/json"}}):null}function Ed(n,e){let t=new McpServer({name:"crewx-mcp-server",version:"1.0.0"},{capabilities:{tools:{}}});return Ko(t,n,e),t}function mn(n,e){if(!e.agents||e.agents.length===0)throw new Error("crewx.handler() requires at least one agent in the agents option");let t=new Set(e.agents),r=new Map;return async o=>{let s=Vo(o);if(s)return s;let i=await Go(o,e.auth);if(i)return i;let a=o.headers.get("mcp-session-id");if(a&&r.has(a))return r.get(a).transport.handleRequest(o);let d=Ed(n,t),l=new WebStandardStreamableHTTPServerTransport({sessionIdGenerator:()=>crypto.randomUUID(),onsessioninitialized:u=>{r.set(u,{transport:l,server:d});},onsessionclosed:u=>{r.delete(u);},enableJsonResponse:true});return await d.connect(l),l.handleRequest(o)}}c();function Xo(n){let e=W.resolve(n);return process.platform==="win32"&&(e=e.replace(/\\/g,"/"),e=e.replace(/^([A-Z]):/,(t,r)=>`${r.toLowerCase()}:`)),e.length>1&&!/^[a-zA-Z]:\/$/.test(e)&&(e=e.replace(/\/+$/,"")),e}function fn(n){let e=Xo(n);return createHash("sha256").update(e).digest("hex")}function Yd(n){return n?n.settings?.template?.exec:void 0}function Qd(){try{let n=new Uint8Array(8);return globalThis.crypto.getRandomValues(n),Array.from(n,e=>e.toString(16).padStart(2,"0")).join("")}catch{let{randomBytes:n}=re("crypto");return n(8).toString("hex")}}var In=class n extends Mt{_agents;_templateEngine;_documentLoader;_layoutLoader;_layoutRenderer;_config;_projectRoot;_workspaceId;_workspaceName;_plugins=[];_tools=new Map;_activeAdapters=new Map;_pendingThreads=new Map;_activeTasks=new Map;_remoteFactory;_remoteTargets=new Map;_additionalArgsProvider;constructor(e,t={},r,o,s){super(),this._agents=new Map(e.map(d=>[d.id,d])),this._config=r,this._projectRoot=s??(typeof process<"u"?process.cwd():"/");let i=s??(typeof process<"u"?process.env.CREWX_WORKSPACE??process.cwd():"/");this._workspaceId=fn(i),this._workspaceName=basename(i);let a=Yd(r);this._templateEngine=new Tt({execPolicy:t.execPolicy??a}),this._documentLoader=o??new Qe,this._layoutLoader=new St({templatesPath:at()}),this._layoutRenderer=new Ot,this._remoteFactory=t.remoteFactory,this._additionalArgsProvider=t.additionalArgsProvider;}async resolveFileRemoteTarget(e){let t=this.getAgent(e),r=Array.isArray(t?.provider)?t?.provider[0]:t?.provider;if(!r?.startsWith("remote/"))return null;let o=r.slice(7),s=this.getRemoteProviderConfig(o);if(!s?.location?.startsWith("file://"))return null;let i=resolve(s.location.replace("file://","")),a=s.external_agent_id??e.replace(/^@/,""),d=this._remoteTargets.get(i);d||(d=(this._remoteFactory??(m=>n.loadYaml(m)))(i),this._remoteTargets.set(i,d),d.catch(()=>this._remoteTargets.delete(i)));let l=await d,u=l.getAgent("@"+a),g=Array.isArray(u?.provider)?u?.provider[0]:u?.provider;if(g?.startsWith("remote/"))throw new Error(`Chained remotes not allowed: "${o}" \u2192 "${g}"`);return {target:l,agentRef:"@"+a}}static async loadBuiltInConfig(e){let{yamlPath:t,dir:r}=Pr(),o;try{o=readFileSync(t,"utf-8");}catch(i){throw new Error(`[@crewx/sdk] Cannot read built-in config: ${t}
302
+ ${i.message}`)}let s=Gt(o);if(s.documents&&typeof s.documents=="object"){let i={};for(let[a,d]of Object.entries(s.documents))if(d&&typeof d=="object"){let l=d;typeof l.path=="string"&&!isAbsolute(l.path)?i[a]={...l,path:resolve(r,l.path)}:i[a]=l;}else i[a]=d;return {...s,documents:i}}return s}static mergeCrewxConfig(e,t){let r=new Map;for(let x of e.agents??[])r.set(x.id,x);for(let x of t.agents??[])r.has(x.id)&&console.warn(`[agent-loader] User agent "${x.id}" overrides built-in`),r.set(x.id,x);let o=Array.from(r.values()),s={...e.layouts??{},...t.layouts??{}},i={...e.documents??{},...t.documents??{}},a=e,d=t,l=gs(a.vars,d.vars),u=gs(a.settings,d.settings),g;e.skills&&t.skills&&typeof e.skills=="object"&&typeof t.skills=="object"&&!Array.isArray(e.skills)&&!Array.isArray(t.skills)?g={...e.skills,...t.skills}:g=t.skills??e.skills;let f=[...e.hooks??[],...t.hooks??[]],m=Zd(a.providers,d.providers),w={...e},v={...t};for(let x of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete w[x],delete v[x];let _={...{...w,...v},agents:o,layouts:s,documents:i,skills:g};return f.length>0&&(_.hooks=f),l!==void 0&&(_.vars=l),u!==void 0&&(_.settings=u),m!==void 0&&(_.providers=m),_}static async loadYaml(e,t,r){let o=t?.includeBuiltIns!==false,s,i;if(o){let u=await n.loadBuiltInConfig(r);if(e!==void 0){let g=Jt(e);s=n.mergeCrewxConfig(u,g),i=dirname(e);}else s=u,i=process.cwd();}else {if(e===void 0)throw new Error("[@crewx/sdk] loadYaml: path is required when includeBuiltIns is false");s=Jt(e),i=dirname(e);}let a=new Qe(r);await a.load(s.documents,i);let d=s.agents??[];return await ms(d,s,t),new n(d,t??{},s,a,i)}static async fromConfig(e,t,r,o){let s=t?.includeBuiltIns===true,i=e;if(s){let u=await n.loadBuiltInConfig(o);i=n.mergeCrewxConfig(u,e);}let a=new Qe(o);await a.load(i.documents,r??(typeof process<"u"?process.cwd():"/"));let d=i.agents??[];return await ms(d,i,t),new n(d,t??{},i,a,r)}get agents(){return this._agents}get config(){return this._config}get plugins(){return this._plugins}get tools(){return this._tools}get workspaceId(){return this._workspaceId}get workspaceName(){return this._workspaceName}getAgent(e){let t=e.startsWith("@")?e.slice(1):e;return this._agents.get(t)}getRemoteProviderConfig(e){let t=this._config?.providers;return Array.isArray(t)?t.find(o=>o.type==="remote"&&o.id===e):void 0}computeTaskLogPath(e,t){let r=tn(t);return join(this._projectRoot,".crewx","logs",`${r}_${e}.log`)}registerTool(e,t){this._tools.set(e,{name:e,...t});}async use(e){this._plugins.includes(e)||(await e.attach(this),this._plugins.push(e));}handler(e){return mn(this,e)}async registerChannelAdapter(e){let{adapter:t,instanceId:r,config:o}=e;if(this._activeAdapters.has(r))throw new Error(`Adapter instance already registered: ${r}`);let s=new Set(t.manifest.capabilities),i=e.store??rn(r),a=e.defaultMode??"query",d=t.manifest.platform,l=e.agentRunner??{run:async(m,w,v)=>{let _=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${m}`,w,{threadId:v?.threadId,platform:d});return {output:_.ok?_.data:_.error?.message??""}}},u=e.onInbound??(async m=>{let w=m.routingHints?.agentId??e.defaultAgent;if(!w)return {accepted:false,reason:"no_agent"};let{output:v}=await l.run(w,m.text,{threadId:m.threadId});return {accepted:true,output:v}}),g=on({instanceId:r,config:o,capabilities:s,db:i,agentRunner:l,onInbound:u}),f={adapter:t,ctx:g,state:"starting"};this._activeAdapters.set(r,f),this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"starting",timestamp:new Date});try{await t.start(g),f.state="started",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"started",timestamp:new Date});}catch(m){throw f.state="failed",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"failed",error:m instanceof Error?m:new Error(String(m)),timestamp:new Date}),this._activeAdapters.delete(r),m}}async unregisterChannelAdapter(e){let t=this._activeAdapters.get(e);if(t){t.state="stopping",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"stopping",timestamp:new Date});try{await t.adapter.stop(t.ctx),t.state="stopped",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"stopped",timestamp:new Date});}catch(r){t.state="failed",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"failed",error:r instanceof Error?r:new Error(String(r)),timestamp:new Date});}finally{this._activeAdapters.delete(e);}}}async stopAllAdapters(e={}){let t=e.timeoutMs??1e4,r=Array.from(this._activeAdapters.keys()),o=await Promise.allSettled(r.map(s=>Promise.race([this.unregisterChannelAdapter(s),new Promise((i,a)=>setTimeout(()=>a(new Error(`Adapter stop timeout: ${s}`)),t))])));for(let s=0;s<o.length;s++)o[s].status==="rejected"&&console.error(`[crewx] adapter stop error (${r[s]}): ${o[s].reason}`);}abortAll(){for(let[e,t]of this._activeTasks)if(t.pid!==void 0)try{process.platform==="win32"?process.kill(t.pid,"SIGTERM"):process.kill(-t.pid,"SIGTERM");}catch(r){console.error(`[crewx] abort task ${e} (pid=${t.pid}) error: ${r instanceof Error?r.message:String(r)}`);}}async _drainActiveTasks(e){let t=Array.from(this._activeTasks.values()).map(r=>r.done);t.length!==0&&await Promise.race([Promise.allSettled(t),new Promise(r=>setTimeout(r,e).unref())]);}async close(){this.abortAll(),await this._drainActiveTasks(Et+1e3),await this.stopAllAdapters({timeoutMs:1e4});let e=[...this._remoteTargets.values()];this._remoteTargets.clear(),await Promise.allSettled(e.map(async r=>{try{await(await r).close();}catch(o){console.error(`[crewx] remote target close error: ${o instanceof Error?o.message:String(o)}`);}}));let t=[...this._plugins].reverse();for(let r of t)try{await r.detach(this);}catch(o){console.error(`[crewx] plugin ${r.name} detach error: ${o instanceof Error?o.message:String(o)}`);}this._plugins.length=0;}filterAgents(e){let t=a=>a?a.split(",").map(d=>d.trim().toLowerCase()).filter(Boolean):void 0,r=t(e.role),o=t(e.team),s=t(e.provider),i=Array.from(this._agents.values());return r&&(i=i.filter(a=>a.role&&r.some(d=>he(a.role.toLowerCase(),d)))),o&&(i=i.filter(a=>a.team&&o.some(d=>he(a.team.toLowerCase(),d)))),s&&(i=i.filter(a=>(Array.isArray(a.provider)?a.provider:[a.provider]).some(l=>s.some(u=>he(l.toLowerCase(),u))))),i}renderAgentPrompt(e){let t=e.startsWith("@")?e.slice(1):e,r=this._agents.get(t);if(!r)throw new Re(t,Array.from(this._agents.keys()));return r.inline?.prompt??r.inline?.system_prompt??r.description??`You are an expert ${t}.`}async renderPrompt(e,t){let o={...await this._documentLoader.buildContext(),...t?.documents??{}},s={...t,documents:o};return this._templateEngine.render(e,s)}registerLayout(e,t){this._layoutLoader.registerLayout(e,t);}async renderAgentPromptFull(e,t){let r=e.startsWith("@")?e.slice(1):e,o=this._agents.get(r);if(!o)throw new Re(r,Array.from(this._agents.keys()));let s=this._resolveLayoutSpec(o,t?.layout),i=this._extractLayoutId(s),a=this._extractLayoutProps(o,s,t?.layout),d=this._layoutLoader.load(i,a),l=o.inline?.prompt??o.inline?.system_prompt??o.description??`You are an expert ${r}.`,u=await this._documentLoader.buildContext(),g=t?.env??(typeof process<"u"?process.env:{}),f=t?.vars?.security_key??Qd(),m={...t?.vars??{},documents:u,env:g,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??""}},w=await this._templateEngine.render(l,m),v={mode:t?.session?.mode??"query",platform:t?.session?.platform??"cli",options:t?.session?.options??[]},E=o.provider,_=Array.isArray(E)?E:typeof E=="string"&&E.length>0?[E]:[],x=_.join(", ")||(typeof E=="string"?E:""),k=o.options,I=["goals","daily"],A={goals:false,daily:false},F;if(!Array.isArray(k)&&typeof k=="object"&&k!==null){let C=k;if("goals"in C){let P=C.goals;typeof P=="string"||Array.isArray(P)?A.goals=P:A.goals=!!P;}"daily"in C&&(A.daily=!!C.daily);let b={};for(let[P,j]of Object.entries(C))I.includes(P)||(b[P]=j);if(Object.keys(b).length>0){let P=_.some(ie=>ie.startsWith("cli/")),j={};for(let[ie,ee]of Object.entries(b)){let ye={};if(Array.isArray(ee))P&&(ye.rawArgs=ee);else if(typeof ee=="object"&&ee!==null){let Vn=ee;Object.keys(Vn).length>0&&(ye.named=Vn);}(ye.named||ye.rawArgs&&ye.rawArgs.length>0)&&(j[ie]=ye);}F=Object.keys(j).length>0?j:void 0;}}let B=Array.isArray(k)?k:void 0,D={};for(let[C,b]of Object.entries(u))D[C]={content:b.content??"",toc:b.toc,summary:b.summary,path:b.path};if(A.goals){let C=join(this._projectRoot,"docs","goal"),b=await So(C,void 0,A.goals);b&&(D.active_goals={content:b});}if(A.daily){let C=join(this._projectRoot,"docs","daily"),b=await bo(C);b&&(D.today_daily={content:b});}let H=t?.vars?.user_input??void 0,V=this._config?.settings?.dreaming?.continuity,U=V?.reuseReadOnly!==false,X=typeof V?.lookback=="number"?V.lookback:5,Z=typeof V?.maxEntryChars=="number"?V.maxEntryChars:8e3,z=typeof V?.decayRate=="number"?V.decayRate:.5,$=t?.threadId??"",J=o.id,G=U&&X>0&&$&&t?.messages&&t.messages.length>0?zo({threadId:$,agentId:J,lookback:X,maxEntryChars:Z,decayRate:z}):new Map,fe=(t?.messages??[]).map(C=>{if(!C.isAssistant)return C;let b=C.metadata?.task_id;return !b||!G.has(b)?C:{...C,activity_log:G.get(b)}}),R={user_input:H,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??"",provider:x,providerList:_,model:o.inline?.model,workingDirectory:o.working_directory??o.workingDirectory??".",inline:{...o.inline??{},prompt:w},specialties:o.specialties??[],capabilities:o.capabilities??[],remote:o.remote??null,optionsByMode:F,optionsArray:B},agentMetadata:{specialties:o.specialties??[],capabilities:o.capabilities??[],description:o.description??""},contextOptions:A,documents:D,skills:t?.skills??[],session:v,env:g,vars:{security_key:f,...t?.vars??{}},props:{...a??{},...t?.messages&&t.messages.length>0?{showConversationHistory:true}:{}},platform:v.platform,mode:v.mode,thread_id:$,now:bt(new Date),has_activity_log:G.size>0,messages:fe,tools:this._tools.size>0?{list:Array.from(this._tools.values()).map(C=>({name:C.name,description:C.description,parameters:C.parameters})),json:JSON.stringify(Array.from(this._tools.values()).map(C=>({name:C.name,description:C.description,parameters:C.parameters})),null,2),count:this._tools.size}:null,metadata:{}};return this._layoutRenderer.render(d,R)}_filterToolsByMode(e){return e?e.map(t=>this._tools.get(t)).filter(t=>t!==void 0):Array.from(this._tools.values())}_resolveLayoutSpec(e,t){if(t!==void 0)return t;let r=e.inline?.layout;if(r!==void 0)return r;let o=this._config?.layouts?.default;return typeof o=="string"&&o?o:"crewx/default"}_extractLayoutId(e){if(typeof e=="string")return e;if("id"in e)return e.id;if("template"in e&&typeof e.template=="string"&&e.template.trim()){let t=`crewx/__inline_${Date.now()}`;return this._layoutLoader.registerLayout(t,e.template),t}return "crewx/default"}_extractLayoutProps(e,t,r){let o=e.inline?.layout,s=o&&typeof o=="object"&&"props"in o?o.props:void 0,i=r&&typeof r=="object"&&"id"in r?r.props:void 0;if(s||i)return {...s??{},...i??{}}}_getConversationProvider(){return this._plugins.find(t=>t.name==="conversation")?.conversationProvider}async _fetchHistoryMessages(e,t,r){if(r&&r.length>0)return r;if(!e)return;let o=this._getConversationProvider();if(o)try{let s=await o.fetchHistory(e,{currentTraceId:t});return s.messages.length===0?void 0:an(s)}catch{return}}_resolveTimeout(e,t){let r=e==="query"?"CREWX_TIMEOUT_QUERY":"CREWX_TIMEOUT_EXECUTE";if(process.env[r]!=null&&process.env[r]!==""){let o=uo();return e==="query"?o.queryMs:o.executeMs}if(t?.meta?.defaultTimeoutMs){let o=e==="query"?t.meta.defaultTimeoutMs.query:t.meta.defaultTimeoutMs.execute;if(o!==void 0)return o}return 8*36e5}_resolveIdleTimeout(e){let t=Br();return t!==void 0?t:e?.meta?.defaultIdleMs!==void 0?e.meta.defaultIdleMs:6e5}_lookupCliAdapter(e){if(e.startsWith("cli/"))return ve[e.slice(4)]}_resolveEffectiveCwd(e,t){return t?.cwd??(e.working_directory?resolve(this._projectRoot,e.working_directory):this._projectRoot)}_buildFileRemoteOptions(e,t){let r={path:this._projectRoot,id:this._workspaceId,name:this._workspaceName,agentRef:e};return {...t,cwd:void 0,metadata:{...t?.metadata??{},crewx:{...t?.metadata?.crewx??{},callerWorkspace:r}},vars:{...t?.vars??{},crewx_caller_workspace_path:r.path,crewx_caller_workspace_id:r.id,crewx_caller_workspace_name:r.name}}}emitToolEvents(e,t,r,o,s,i,a){try{let l=this._lookupCliAdapter(r)?.parseEvent?.(o)??At(new Date().toISOString(),o);for(let u of l)u.type==="tool_use"&&u.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:u.toolName,rawName:u.toolName,input:u.toolInput?this.tryParseJson(u.toolInput):void 0,toolUseId:u.toolUseId}}),u.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:u.toolName??"unknown",rawName:u.toolName??"unknown",toolUseId:u.toolUseId,result:u.resultPreview,isError:u.isError}});}catch{}}emitTaskLogEntries(e,t,r,o,s,i,a){try{for(let d of a)d.type==="tool_use"&&d.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:r,threadId:o,sessionId:s,provider:i,tool:{name:d.toolName,rawName:d.toolName,input:d.toolInput?this.tryParseJson(d.toolInput):void 0,toolUseId:d.toolUseId}}),d.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:t,agentId:r,threadId:o,sessionId:s,provider:i,tool:{name:d.toolName??"unknown",rawName:d.toolName??"unknown",toolUseId:d.toolUseId,result:d.resultPreview,isError:d.isError}});}catch{}}tryParseJson(e){try{return JSON.parse(e)}catch{return e}}async query(e,t,r){let o=await this.resolveFileRemoteTarget(e);if(o)return o.target.query(o.agentRef,t,this._buildFileRemoteOptions(e,r));let s=Nt.getStore()??sn(r?.trace),i=r?.taskId??et("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null};return Nt.run(d,async()=>{let l=Date.now(),u=new Date,g;try{g=Yt(e,Array.from(this._agents.values()));}catch(R){if(R instanceof Re){this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let C=Date.now()-l,b={code:"AGENT_NOT_FOUND",message:R.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:C,error:b,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:b,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:C,taskId:i}}}throw R}d.callerAgentId=g.id;let f=Array.isArray(g.provider)?g.provider[0]??"cli/claude":g.provider,m=ar(g.options,"query",f,ir(r?.overdrive)),w=m.active&&m.provider?m.provider:r?.provider??f,v=m.active&&m.model?m.model:r?.model??g.inline?.model;v&&v.includes("{{")&&(v=await this._templateEngine.render(v,{...r?.vars??{}}));let E=m.crossProvider?void 0:r?.resumeSessionId,_;try{_=Te(w,this._additionalArgsProvider);}catch(R){this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let C=Date.now()-l,b={code:"PROVIDER_ERROR",message:R.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:C,error:b,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:b,meta:{agentId:g.id,provider:w,model:v,durationMs:C,taskId:i}}}let x=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),k;try{k=await this.renderAgentPromptFull(e,{session:{mode:"query",platform:r?.platform},vars:{user_input:t,...r?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(g,r)},messages:x,threadId:r?.threadId});}catch(R){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${R instanceof Error?R.message:String(R)}`);}let I,A,F,B=v,D=false,H=R=>{D||(D=true,this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"query",pid:R,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:B,provider:w,codingAgentCommand:I,renderedPrompt:k,metadata:{...r?.metadata??{},provider:w,...m.active?{overdrive:true}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},K=g.options,te=m.active?m.mode:K?.query?.mode,V=m.active?m.effort:K?.query?.effort,U=Array.isArray(K?.query?.tools)?K.query.tools:void 0,X=this._tools.size>0?this._filterToolsByMode(U):[],Z=(()=>{let R=K?.query;if(!R||Array.isArray(R))return;let{tools:C,effort:b,mode:P,...j}=R,ie=Object.entries(j).filter(([,ee])=>ee!=null);if(ie.length!==0)return Object.fromEntries(ie.map(([ee,ye])=>[ee,String(ye)]))})(),z=g.inline?.max_steps;w.startsWith("api/")&&H();let $=false,J=0,G=()=>{},fe=new Promise(R=>{G=R;});this._activeTasks.set(i,{pid:void 0,done:fe});try{let R=await _.query(t,{model:v,effort:V,mode:te,context:r?.context,systemPrompt:k??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(K?.query)?K.query:void 0,resumeSessionId:E,tools:X.length>0?X:void 0,maxSteps:z,configOptions:Z,timeoutMs:this._resolveTimeout("query",this._lookupCliAdapter(w)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(w)),cwd:this._resolveEffectiveCwd(g,r),env:{CREWX_AGENT_ID:g.id,CREWX_AGENT_ROLE:g.role??"",CREWX_AGENT_TEAM:g.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:w,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,u)},onPid:P=>{let j=this._activeTasks.get(i);j&&(j.pid=P),H(P);},onOutput:(P,j)=>{let ie=this._lookupCliAdapter(w);j==="stdout"&&ie?.suppressOutputLine?.(P)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:P,level:j}),j==="stdout"&&this.emitToolEvents(i,e,w,P,g.id,r?.threadId??"","");},onTaskLog:P=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",w,P);for(let j of P)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(j),level:"info"});},onCommand:P=>{I=P;},onUsage:P=>{A=P;},onExitCode:P=>{F=P;},onModel:P=>{B||(B=P);}});J=Gr(A?.costUsd,A?.inputTokens,A?.outputTokens,A?.cachedInputTokens,B,new Date(l)),H();let C=Date.now()-l,b={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",result:R,durationMs:C,exitCode:F,inputTokens:A?.inputTokens,outputTokens:A?.outputTokens,cachedInputTokens:A?.cachedInputTokens,costUsd:J,model:B,metadata:Object.keys(b).length>0?b:void 0}),$=!0,{ok:!0,data:R,meta:{agentId:g.id,provider:w,model:v,durationMs:C,taskId:i}}}catch(R){if(R instanceof pe){let P=et("thd");return this._pendingThreads.set(P,{agentRef:g.id,providerStr:w,continuationState:R.continuationState,toolCall:R.toolCall,traceId:i,startMs:l,model:v}),$=true,{ok:true,status:"requires_action",data:"",toolCall:R.toolCall,threadId:P,meta:{agentId:g.id,provider:w,model:v,durationMs:Date.now()-l,taskId:i}}}H();let C=Date.now()-l,b={code:"QUERY_FAILED",message:R.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:C,error:b,exitCode:F,inputTokens:A?.inputTokens,outputTokens:A?.outputTokens,cachedInputTokens:A?.cachedInputTokens,costUsd:J,model:B,metadata:r?.metadata?{...r.metadata}:void 0}),$=true,{ok:false,data:"",error:b,meta:{agentId:g.id,provider:w,model:v,durationMs:C,taskId:i}}}finally{$||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:Date.now()-l,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:F??-1,inputTokens:A?.inputTokens,outputTokens:A?.outputTokens,cachedInputTokens:A?.cachedInputTokens,costUsd:J,model:B}),this._activeTasks.delete(i),G();}})}async continueQuery(e,t){let r=this._pendingThreads.get(e);if(!r)return {ok:false,data:"",error:{code:"THREAD_NOT_FOUND",message:`No pending thread: ${e}`},meta:{agentId:"",provider:"",durationMs:0}};this._pendingThreads.delete(e);let o=Te(r.providerStr,this._additionalArgsProvider);if(!o.continueWithToolResults)return {ok:false,data:"",error:{code:"UNSUPPORTED",message:"Provider does not support client tool continuation"},meta:{agentId:r.agentRef,provider:r.providerStr,durationMs:0}};let s=t.map(i=>({...i,toolName:r.toolCall.toolCallId===i.toolCallId?r.toolCall.toolName:i.toolCallId}));try{let i=await o.continueWithToolResults(r.continuationState,s),a=Date.now()-r.startMs;return this.emit("task:end",{traceId:r.traceId,timestamp:new Date,agentRef:r.agentRef,mode:"query",result:i,durationMs:a}),{ok:!0,status:"complete",data:i,meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:a}}}catch(i){if(i instanceof pe)return this._pendingThreads.set(e,{...r,continuationState:i.continuationState,toolCall:i.toolCall}),{ok:true,status:"requires_action",data:"",toolCall:i.toolCall,threadId:e,meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:Date.now()-r.startMs}};let a=Date.now()-r.startMs;return {ok:false,data:"",error:{code:"CONTINUE_FAILED",message:i.message},meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:a}}}}async execute(e,t,r){let o=await this.resolveFileRemoteTarget(e);if(o)return o.target.execute(o.agentRef,t,this._buildFileRemoteOptions(e,r));let s=Nt.getStore()??sn(r?.trace),i=r?.taskId??et("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null};return Nt.run(d,async()=>{let l=Date.now(),u=new Date,g;try{g=Yt(e,Array.from(this._agents.values()));}catch(R){if(R instanceof Re){this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let C=Date.now()-l,b={code:"AGENT_NOT_FOUND",message:R.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:C,error:b,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:b,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:C,taskId:i}}}throw R}d.callerAgentId=g.id;let f=Array.isArray(g.provider)?g.provider[0]??"cli/claude":g.provider,m=ar(g.options,"execute",f,ir(r?.overdrive)),w=m.active&&m.provider?m.provider:r?.provider??f,v=m.active&&m.model?m.model:r?.model??g.inline?.model;v&&v.includes("{{")&&(v=await this._templateEngine.render(v,{...r?.vars??{}}));let E=m.crossProvider?void 0:r?.resumeSessionId,_;try{_=Te(w,this._additionalArgsProvider);}catch(R){this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let C=Date.now()-l,b={code:"PROVIDER_ERROR",message:R.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:C,error:b,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:b,meta:{agentId:g.id,provider:w,model:v,durationMs:C,taskId:i}}}let x=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),k;try{k=await this.renderAgentPromptFull(e,{session:{mode:"execute",platform:r?.platform},vars:{user_input:t,...r?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(g,r)},messages:x,threadId:r?.threadId});}catch(R){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${R instanceof Error?R.message:String(R)}`);}let I,A,F,B=v,D=false,H=R=>{D||(D=true,this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"execute",pid:R,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:B,provider:w,codingAgentCommand:I,renderedPrompt:k,metadata:{...r?.metadata??{},provider:w,...m.active?{overdrive:true}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},K=g.options,te=m.active?m.mode:K?.execute?.mode,V=m.active?m.effort:K?.execute?.effort,U=Array.isArray(K?.execute?.tools)?K.execute.tools:void 0,X=this._tools.size>0?this._filterToolsByMode(U):[],Z=(()=>{let R=K?.execute;if(!R||Array.isArray(R))return;let{tools:C,effort:b,mode:P,...j}=R,ie=Object.entries(j).filter(([,ee])=>ee!=null);if(ie.length!==0)return Object.fromEntries(ie.map(([ee,ye])=>[ee,String(ye)]))})(),z=g.inline?.max_steps;w.startsWith("api/")&&H();let $=false,J=0,G=()=>{},fe=new Promise(R=>{G=R;});this._activeTasks.set(i,{pid:void 0,done:fe});try{let R=await _.execute(t,{model:v,effort:V,mode:te,context:r?.context,systemPrompt:k??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(K?.execute)?K.execute:void 0,resumeSessionId:E,tools:X.length>0?X:void 0,maxSteps:z,configOptions:Z,timeoutMs:this._resolveTimeout("execute",this._lookupCliAdapter(w)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(w)),cwd:this._resolveEffectiveCwd(g,r),env:{CREWX_AGENT_ID:g.id,CREWX_AGENT_ROLE:g.role??"",CREWX_AGENT_TEAM:g.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:w,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,u)},onPid:P=>{let j=this._activeTasks.get(i);j&&(j.pid=P),H(P);},onOutput:(P,j)=>{let ie=this._lookupCliAdapter(w);j==="stdout"&&ie?.suppressOutputLine?.(P)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:P,level:j}),j==="stdout"&&this.emitToolEvents(i,e,w,P,g.id,r?.threadId??"","");},onTaskLog:P=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",w,P);for(let j of P)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(j),level:"info"});},onCommand:P=>{I=P;},onUsage:P=>{A=P;},onExitCode:P=>{F=P;},onModel:P=>{B||(B=P);}});J=Gr(A?.costUsd,A?.inputTokens,A?.outputTokens,A?.cachedInputTokens,B,new Date(l)),H();let C=Date.now()-l,b={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",result:R,durationMs:C,exitCode:F,inputTokens:A?.inputTokens,outputTokens:A?.outputTokens,cachedInputTokens:A?.cachedInputTokens,costUsd:J,model:B,metadata:Object.keys(b).length>0?b:void 0}),$=!0,{ok:!0,data:R,meta:{agentId:g.id,provider:w,model:v,durationMs:C,taskId:i}}}catch(R){H();let C=Date.now()-l,b={code:"EXECUTE_FAILED",message:R.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:C,error:b,exitCode:F,inputTokens:A?.inputTokens,outputTokens:A?.outputTokens,cachedInputTokens:A?.cachedInputTokens,costUsd:J,model:B,metadata:r?.metadata?{...r.metadata}:void 0}),$=true,{ok:false,data:"",error:b,meta:{agentId:g.id,provider:w,model:v,durationMs:C,taskId:i}}}finally{$||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:Date.now()-l,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:F??-1,inputTokens:A?.inputTokens,outputTokens:A?.outputTokens,cachedInputTokens:A?.cachedInputTokens,costUsd:J,model:B}),this._activeTasks.delete(i),G();}})}};function gs(n,e){let t=On(n)?n:void 0,r=On(e)?e:void 0;if(!(!t&&!r))return {...t??{},...r??{}}}function On(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Zd(n,e){let t=Array.isArray(n)?n:void 0,r=Array.isArray(e)?e:void 0;if(!t&&!r)return;let o=a=>{if(!On(a))return;let d=a.id;if(typeof d=="string")return `id:${d}`;let l=a.name;if(typeof l=="string")return `name:${l}`},s=new Set;for(let a of r??[]){let d=o(a);d&&s.add(d);}let i=[];for(let a of t??[]){let d=o(a);d&&s.has(d)||i.push(a);}for(let a of r??[])i.push(a);return i}async function ms(n,e,t){if(n.some(o=>(Array.isArray(o.provider)?o.provider:[o.provider]).some(i=>i.startsWith("api/")))){let{registerApiProviders:o}=await Promise.resolve().then(()=>(hn(),es));o(t?.api);}await tl(n,e),rl(n,e),el(n);}function el(n){if(!n.some(r=>(Array.isArray(r.provider)?r.provider:[r.provider]).some(s=>s.startsWith("acp/"))))return;let{registerAcpProviders:t}=(En(),Gn(ss));t();}async function tl(n,e){if(!n.some(i=>(Array.isArray(i.provider)?i.provider:[i.provider]).some(d=>d.startsWith("remote/"))))return;let r=e.providers;if(!Array.isArray(r))return;let{createRemoteProviderFactory:o}=await Promise.resolve().then(()=>(Pn(),as)),s=new Map;for(let i of r)i.type==="remote"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&Pe("remote",o(s,Te));}function rl(n,e){if(!n.some(i=>(Array.isArray(i.provider)?i.provider:[i.provider]).some(d=>d.startsWith("plugin/"))))return;let r=e.providers;if(!Array.isArray(r))return;let{createPluginProviderFactory:o}=(Tn(),Gn(us)),s=new Map;for(let i of r)i.type==="plugin"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&Pe("plugin",o(s));}c();var Mn=class{detach(e){}};c();var nl="crewx:fs:",Nn=class{prefix;store;constructor(e){this.prefix=e?.prefix??nl,this.store=e?.storage??new Map;}async readFile(e){let t=this.toKey(e),r=this.store.get(t);if(r===void 0)throw new Error(`BrowserFsAdapter: file not found: ${e}`);return r}async exists(e){return this.store.has(this.toKey(e))}resolvePath(...e){let t=e.map(i=>i.replace(/\\/g,"/")).join("/").replace(/\/+/g,"/"),r=t.split("/"),o=[];for(let i of r)i==="."||i===""||(i===".."?o.pop():o.push(i));let s=o.join("/");return t.startsWith("/")?`/${s}`:s}isAbsolute(e){return e.startsWith("/")}setItem(e,t){this.store.set(this.toKey(e),t);}removeItem(e){this.store.delete(this.toKey(e));}keys(){return Array.from(this.store.keys()).filter(e=>e.startsWith(this.prefix)).map(e=>e.slice(this.prefix.length))}async readdir(e){let t=e.replace(/\\/g,"/").replace(/\/$/,""),r=this.toKey(t+"/"),o=[];for(let s of this.store.keys())if(s.startsWith(r)){let a=s.slice(r.length).split("/")[0];a&&!o.includes(a)&&o.push(a);}return o}toKey(e){return `${this.prefix}${e.replace(/\\/g,"/")}`}};c();we();function ys(n){if(!n)return "";let e=n.lastIndexOf("/");return e===-1?n.trim():n.slice(e+1).trim()}function fs(n){return n?pt(n).models.length>0:false}function Dn(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function ol(n,e,t){let r=n,o=false,s=[],i=()=>(o||(r={...n},o=true),r);fs(e)&&(typeof r.mode=="string"&&(vt(e).map(l=>l.id).includes(r.mode)||(delete i().mode,s.push("mode"))),typeof r.effort=="string"&&(_t(e,t).includes(r.effort)||(delete i().effort,s.push("effort"))));let a=r.overdrive;if(Dn(a)){let d=ys(typeof a.provider=="string"?a.provider:void 0),l=typeof a.model=="string"?a.model:void 0;if(fs(d)){let u,g=()=>(u||(u={...a},i().overdrive=u),u);typeof a.mode=="string"&&(vt(d).map(m=>m.id).includes(a.mode)||(delete g().mode,s.push("overdrive.mode"))),typeof a.effort=="string"&&(_t(d,l).includes(a.effort)||(delete g().effort,s.push("overdrive.effort")));}}return {block:r,removed:s}}function sl(n){let{options:e}=n;if(!Dn(e))return {options:e,changed:false,removed:[]};let t=ys(n.provider),r=[],o=e,s=false,i=()=>(s||(o={...e},s=true),o);for(let a of ["query","execute"]){let d=e[a];if(!Dn(d))continue;let{block:l,removed:u}=ol(d,t,n.model);u.length>0&&(i()[a]=l,r.push(...u.map(g=>`${a}.${g}`)));}return {options:o,changed:r.length>0,removed:r}}c();var il="https://api.crewx.dev/v1/models",al=3600*1e3,hs=0;async function dl(n){let e=n?.ttlMs??al,t=Date.now();if(!(t-hs<e)){hs=t;try{let r=await fetch(n?.endpoint??il);if(!r.ok)return;let o=await r.json();if(!o?.models||typeof o.models!="object")return;let s={};for(let[i,a]of Object.entries(o.models))a!=null&&(s[i]={input:a.input,cachedInput:a.cachedInput,output:a.output});yo(s);}catch{}}}c();we();var ll="https://api.crewx.dev/v1/models",cl=900*1e3,ws=0;async function ul(n){let e=n?.ttlMs??cl,t=Date.now();if(!(t-ws<e)){ws=t;try{let r=await fetch(n?.endpoint??ll);if(!r.ok)return;let o=await r.json();if(!o?.providers||typeof o.providers!="object")return;let s={};for(let[i,a]of Object.entries(o.providers)){let d=Array.isArray(a)?a:a.models??[],l=Array.isArray(a)?[]:a.modes??[],u=Array.isArray(a)?[]:a.effort??[],g=Array.isArray(a)?{}:a.modelOverrides??{},f=d.filter(m=>m!=null&&typeof m.id=="string").map(m=>({id:m.id,name:m.name??m.id,...m.description!=null?{description:m.description}:{}}));s[i]={models:f,modes:l.filter(m=>m!=null&&typeof m.id=="string").map(m=>({id:m.id,name:m.name??m.id,...m.description!=null?{description:m.description}:{}})),effort:u.filter(m=>typeof m=="string"),modelOverrides:g};}Mr(s);}catch{}}}c();function pl(n,e){let t=n.skills?.include;if(t===void 0)return [...e];if(t.length===0)return [];let r=new Set(t);return e.filter(o=>r.has(o))}c();var Ln=["codex","claude","opencode","antigravity","copilot"];function gl(n){let e=n.indexOf("/");return e===-1?n:n.slice(e+1)}function $n(n){let e=gl(n),t=Ln.indexOf(e);return t===-1?Ln.length:t}function Wt(n,e){return $n(n)-$n(e)}var ml=new Set(["claude","copilot","codex","opencode"]);function fl(n){if(!n)return "";if(n.startsWith("acp/")){let e=n.slice(4);if(ml.has(e))return `cli/${e}`}return n}we();_e();yn();hn();c();wn();De();c();wr();Ar();we();var yl="model",hl="mode",wl="thought_level";function Un(n){if(n.length===0)return [];if(n[0]?.group!=null){let e=[];for(let t of n)for(let r of t.options??[])e.push(r);return e}return n}function vl(n,e){let t=new Map;for(let r of [...n,...e])t.has(r.id)||t.set(r.id,r);return Array.from(t.values())}function _l(n,e,t,r){let o=t.agentInfo?.name,s=e??o??n,i=r.configOptions??[],d=(r.modes?.availableModes??[]).map(_=>({id:_.id,name:_.name,..._.description!=null?{description:_.description}:{}})),l=[];for(let _ of i)if(_.category?.trim().toLowerCase()===hl&&_.options!=null)for(let x of Un(_.options))x.value!=null&&l.push({id:x.value,name:x.name??x.value});let u=vl(d,l),g=[];for(let _ of i)if(_.category?.trim().toLowerCase()===wl&&_.type==="select")for(let x of Un(_.options??[]))x.value!=null&&g.push(x.value);if(n==="claude"){let _=xt().map(k=>({id:k.id,name:k.name})),x=vs(t);return _s(n,{models:_,modes:u,availableModelsCount:0,configModelsCount:0,skipModelWarn:true}),{id:`acp/${n}`,name:s,modes:u,effort:g,models:_,capabilities:x}}let m=(r.models?.availableModels??[]).map(_=>({id:_.modelId})),w=[];for(let _ of i)if(_.category?.trim().toLowerCase()===yl&&_.options!=null)for(let x of Un(_.options))x.value!=null&&w.push({id:x.value,...x.name!=null?{name:x.name}:{}});let v=kt(m,w);_s(n,{models:v,modes:u,availableModelsCount:m.length,configModelsCount:w.length,skipModelWarn:false});let E=vs(t);return {id:`acp/${n}`,name:s,modes:u,effort:g,models:v,capabilities:E}}function vs(n){let e=n.agentCapabilities??{};return {loadSession:e.loadSession??false,image:e.promptCapabilities?.image??false,audio:e.promptCapabilities?.audio??false,mcp:e.mcpCapabilities!=null}}function _s(n,e){!e.skipModelWarn&&e.models.length===0&&console.warn(`[acp] ${n} meta: models empty (availableModels=${e.availableModelsCount}, configOptions[model]=${e.configModelsCount})`),e.modes.length===0&&console.warn(`[acp] ${n} meta: modes empty`);}async function xs(n){let e=it[n];if(!e)return null;let t=e.meta?.displayName,r=new st({spawn:e.spawn,cwd:process.cwd()});try{await r.connect(e.clientInfo);let o=r.initResponse;if(!o)return null;let s=e.buildSessionParams({cwd:process.cwd()}),i=await r.newSessionRaw(s);return _l(n,t,o,i)}catch(o){return console.warn(`[acp] ${n} meta query failed: ${o instanceof Error?o.message:String(o)}`),null}finally{await r.dispose();}}async function xl(){let n=Object.keys(it),e=await Promise.allSettled(n.map(r=>xs(r))),t=[];for(let r of e)r.status==="fulfilled"&&r.value!==null&&t.push(r.value);return t.sort((r,o)=>Wt(r.id,o.id))}wr();vn();Ar();En();Sr();Ne();c();Ne();we();function Al(n){return n.charAt(0).toUpperCase()+n.slice(1)}async function ks(){return new Promise(n=>{execFile("opencode",["models"],{timeout:5e3,maxBuffer:1048576},(t,r)=>{if(t){n([]);return}let o=r.split(`
303
+ `).map(s=>s.trim()).filter(s=>s.length>0).map(s=>({id:s}));n(o);}).on("error",()=>n([]));})}function El(n,e,t){if(!e.meta)return null;let r=e.meta.capabilities??{},o=Xe(n),s=o.length>0?o:e.meta.models??[],i=t!==void 0?kt(t,s):s;return {id:`cli/${n}`,name:e.meta.displayName??Al(n),modes:vt(n),effort:_t(n),models:i,modelOverrides:io(n),capabilities:{loadSession:r.loadSession??false,resume:r.resume??false,image:r.image??false,audio:r.audio??false,mcp:r.mcp??false}}}async function Rl(n={}){let e=n.includeOpencodeRuntimeModels?await ks():void 0,t=[];for(let[r,o]of Object.entries(ve)){let i=El(r,o,r==="opencode"?e:void 0);i&&t.push(i);}return t.sort((r,o)=>Wt(r.id,o.id))}c();var jn=0;function Cl(n){let e=n.meta?.taskId,t=e?` taskId=${e}`:"";if(n.ok)return `Task completed:${t}
304
304
 
305
305
  ${n.data}`;let r=n.error?.message??"Unknown error";return `Task failed:${t}
306
- Error: ${r}`}function fl(n){let e=Array.from(n.agents.keys());return {name:"delegate_to_agent",description:`Delegate a task to another agent. Available agents: ${e.join(", ")}`,parameters:{type:"object",properties:{agent:{type:"string",description:`Agent ID to delegate to. One of: ${e.join(", ")}`},message:{type:"string",description:"Task description for the target agent"},mode:{type:"string",description:'Execution mode: "query" for questions, "execute" for actions. Default: query'}},required:["agent","message"]},execute:async t=>{if(Ln>=3)return "Error: Maximum delegation depth (3) reached. Cannot delegate further.";let r=t.agent,o=t.message,s=t.mode??"query";if(!e.includes(r))return `Error: Unknown agent "${r}". Available: ${e.join(", ")}`;Ln++;try{let i=s==="execute"?await n.execute(r,o):await n.query(r,o);return ml(i)}finally{Ln--;}}}}c();var vs=typeof process<"u"?process.env:{};function yl(){return vs.CREWX_CLI||"npx crewx"}function hl(){return vs.CREWX_WORKSPACE||(typeof process<"u"?process.cwd():"/")}c();var wl=/^[a-zA-Z0-9._-]+$/,$n=class{constructor(e){this.storage=e;}storage;listBoxes(e){this.validateId(e);let r=this.storage.listBoxes(e).map(o=>this.toBoxResponse(o));return {boxes:r,total:r.length}}getBox(e,t){this.validateId(e),this.validateId(t);let r=this.storage.findBox(e,t);return r?this.toBoxResponse(r):null}createBox(e,t){this.validateId(e);let r=this.generateBoxId(),o=new Date().toISOString(),s=this.storage.insertBox(e,{id:r,seq:t.seq,firstTaskId:t.firstTaskId,midTaskId:t.midTaskId,lastTaskId:t.lastTaskId,taskCount:t.taskCount,summary:t.summary??null,sourceTokens:t.sourceTokens,summaryTokens:t.summaryTokens??null,createdAt:o});return this.toBoxResponse(s)}toBoxResponse(e){return {id:e.id,threadId:e.thread_id,seq:e.seq,firstTaskId:e.first_task_id,lastTaskId:e.last_task_id,taskCount:e.task_count,sourceTokens:e.source_tokens,summaryTokens:e.summary_tokens,summary:e.summary,previewFirst:this.storage.getTaskPreview(e.first_task_id,200),previewMid:this.storage.getTaskPreview(e.mid_task_id,200),previewLast:this.storage.getTaskPreview(e.last_task_id,200),createdAt:e.created_at}}validateId(e){if(!wl.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return Xe("box")}};c();function vl(n,e,t,r,o){let{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}=r,d=s*i,l=s*a,u=d+l,g=e.getThreadMessages(n),f=[],m=0,w=false,v=[];for(let x=0;x<g.length;x+=2){let A=g[x],I=g[x+1],E=A?.content||"",K=I?.content||"",$=o.countTokens(E+K),O=[];A&&O.push(A),I&&O.push(I),v.push({messages:O,tokens:$});}for(let x=v.length-1;x>=0;x--){let A=v[x];if(m+A.tokens>d){w=true;break}m+=A.tokens,f.unshift(...A.messages);}let k=[],_=0;if(w&&l>0)try{let{boxes:x}=t.listBoxes(n);for(let A=x.length-1;A>=0;A--){let I=x[A],E=I.summaryTokens??I.sourceTokens;if(_+E>l)break;_+=E,k.unshift({boxId:I.id,seq:I.seq,taskCount:I.taskCount,sourceTokens:I.sourceTokens,summary:I.summary,previewFirst:I.previewFirst,previewMid:I.previewMid,previewLast:I.previewLast,createdAt:I.createdAt});}}catch(x){if(x instanceof Error&&!/not found/i.test(x.message))throw x}return {hot:f,warm:k,hotTokens:m,warmTokens:_,hotOverflow:w,totalBudget:u,config:{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}}}Oe();st();c();var kr=class extends Error{constructor(t,r){super(`Task ${t} timed out after ${r}ms`);this.taskId=t;this.timeoutMs=r;this.name="ParallelRunnerTimeoutError";}taskId;timeoutMs},qt=class{constructor(e={}){this.defaults=e;}defaults;metrics={totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0};async run(e,t={}){if(!Array.isArray(e))throw new TypeError("ParallelRunner.run expects an array of tasks");if(e.length===0)return this.metrics={totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0},[];let r=this.mergeOptions(t),o=Math.max(1,r.maxConcurrency??5),s=r.timeoutMs,i=r.failFast??false,a=r.callbacks,d=r.evaluateTaskSuccess??(()=>true),l=[],u=0,g=0,f=0,m=false,w=0,v=performance.now(),k=async O=>{a?.onTaskStart&&await a.onTaskStart(O),f+=1;let U=new AbortController,q={signal:U.signal},W,B;typeof s=="number"&&Number.isFinite(s)&&s>0&&(B=new Promise((Z,j)=>{W=setTimeout(()=>{let X=new kr(O.id,s);U.abort(X),j(X);},s);}));let J=performance.now(),z=O.run(q),te=B?Promise.race([z,B]):z;try{let Z=await te,j=performance.now(),X=j-J,ee=d(Z,O),me={taskId:O.id,success:ee,value:Z,durationMs:X,startedAt:J,finishedAt:j,metadata:O.metadata,aborted:!1};l.push(me),ee?u+=1:g+=1,a?.onTaskComplete&&await a.onTaskComplete(me),i&&!ee&&(m=!0);}catch(Z){let j=performance.now(),X=j-J,ee=Z instanceof Error?Z:new Error(String(Z)),me={taskId:O.id,success:false,error:ee,durationMs:X,startedAt:J,finishedAt:j,metadata:O.metadata,aborted:U.signal.aborted};l.push(me),g+=1,a?.onError&&await a.onError(O,ee,X),i&&(m=true);}finally{W&&clearTimeout(W),B&&z.catch(()=>{});}},_=async()=>{for(;!m;){let O=w;if(O>=e.length)break;w+=1;let U=e[O];if(!U||(await k(U),m))break}},x=Math.min(o,e.length),A=[];for(let O=0;O<x;O++)A.push(_());await Promise.all(A);let E=performance.now()-v,K=l.length?l.reduce((O,U)=>O+U.durationMs,0)/l.length:0,$=E>0?l.length/(E/1e3):l.length;return this.metrics={totalTasks:e.length,startedTasks:f,completedTasks:l.length,successCount:u,failureCount:g,totalDurationMs:E,averageDurationMs:K,throughput:$},l}getMetrics(){return this.metrics}mergeOptions(e){return {maxConcurrency:e.maxConcurrency??this.defaults.maxConcurrency,timeoutMs:e.timeoutMs??this.defaults.timeoutMs,failFast:e.failFast??this.defaults.failFast,evaluateTaskSuccess:e.evaluateTaskSuccess??this.defaults.evaluateTaskSuccess,callbacks:this.mergeCallbacks(this.defaults.callbacks,e.callbacks)}}mergeCallbacks(e,t){if(!(!e&&!t))return {onTaskStart:async r=>{e?.onTaskStart&&await e.onTaskStart(r),t?.onTaskStart&&await t.onTaskStart(r);},onTaskComplete:async r=>{e?.onTaskComplete&&await e.onTaskComplete(r),t?.onTaskComplete&&await t.onTaskComplete(r);},onError:async(r,o,s)=>{e?.onError&&await e.onError(r,o,s),t?.onError&&await t.onError(r,o,s);}}}};c();c();var Wt=class{async query(e){throw new Error("AgentRuntime.query is not implemented. Provide a subclass or mock AgentRuntime.prototype.query.")}async execute(e){throw new Error("AgentRuntime.execute is not implemented. Provide a subclass or mock AgentRuntime.prototype.execute.")}};var _s=3,xs=3e4,ks=500,_l=n=>{if(typeof n!="number"||Number.isNaN(n)||!Number.isFinite(n))return _s;let e=Math.floor(n);return e>0?e:_s},xl=n=>n===void 0||typeof n!="number"||Number.isNaN(n)||n<=0?xs:n,kl=n=>{if(!n)return {maxRetries:0,retryDelay:ks};let e=Number.isInteger(n.maxRetries)&&n.maxRetries>=0?n.maxRetries:0,t=typeof n.retryDelay=="number"&&n.retryDelay>=0?n.retryDelay:ks;return {maxRetries:e,retryDelay:t}},Un=n=>{let e=n.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},Al=(n,e)=>n<=0?Promise.resolve():new Promise((t,r)=>{let o=setTimeout(()=>{e.removeEventListener("abort",s),t();},n),s=()=>{clearTimeout(o),r(Un(e));};if(e.aborted){s();return}e.addEventListener("abort",s,{once:true});}),El=async(n,e,t)=>{let r,o;for(let s=0;s<=e.maxRetries;s++){if(t.aborted)throw Un(t);try{let i=await n();if(r=i,i.success||s===e.maxRetries)return i}catch(i){if(o=i,t.aborted)throw Un(t);if(s===e.maxRetries)throw i instanceof Error?i:new Error(String(i))}s<e.maxRetries&&await Al(e.retryDelay,t);}if(r)return r;throw o?o instanceof Error?o:new Error(String(o)):new Error("Parallel helper encountered an unexpected state")},As=(n,e,t)=>{e.completed+=1,t?e.success+=1:e.failure+=1;try{n.onProgress?.(e.completed,e.total);}catch(r){process.env.NODE_ENV!=="production"&&console.warn("Parallel helper onProgress callback threw an error:",r);}},Rl=n=>n.map(t=>({metadata:t.metadata,taskResult:t})).slice().sort((t,r)=>t.metadata.index-r.metadata.index).map(({metadata:t,taskResult:r})=>{if(r.value){let s=r.value;return {...s,agentId:s.agentId??t.request.agentId,metadata:{...s.metadata,requestIndex:t.index,mode:t.mode}}}let o=r.error??new Error("Unknown error");return {agentId:t.request.agentId,content:o.message,success:false,metadata:{error:o.message,aborted:r.aborted??false,requestIndex:t.index,mode:t.mode}}}),Cl=n=>n.filter(e=>!e.success).map(e=>{let t=e.metadata;if(e.error instanceof Error)return {index:t.index,error:e.error};if(e.value&&!e.value.success){let r=String(e.value.metadata?.error??e.value.content??"Agent returned unsuccessful result");return {index:t.index,error:new Error(r)}}return {index:t.index,error:new Error("Unknown failure")}}),Pl=(n,e)=>({onTaskComplete:async t=>{As(e,n,t.success);},onError:async()=>{As(e,n,false);}}),Es=async(n,e,t={})=>{if(!Array.isArray(n))throw new TypeError("Parallel helpers expect an array of requests");if(n.length===0){let k={total:0,completed:0,successCount:0,failureCount:0,results:[],errors:[],metrics:{totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0}};return t.onComplete?.(k),[]}let r=_l(t.concurrency),o=xl(t.timeout),s=kl(t.retryPolicy),i=new qt,a=new Wt,d=n.map((v,k)=>({id:`${e}:${v.agentId??"anonymous"}:${k}`,metadata:{index:k,mode:e,request:v},run:_=>El(()=>e==="query"?a.query(v):a.execute(v),s,_.signal)})),l={completed:0,success:0,failure:0,total:n.length},u=await i.run(d,{maxConcurrency:r,timeoutMs:o,evaluateTaskSuccess:v=>v.success,callbacks:Pl(l,t)}),g=Rl(u),f=Cl(u),m=i.getMetrics(),w={total:n.length,completed:n.length,successCount:g.filter(v=>v.success).length,failureCount:g.filter(v=>!v.success).length,results:g,errors:f,metrics:m};return t.onComplete?.(w),g},Tl=(n,e)=>Es(n,"query",e),Sl=(n,e)=>Es(n,"execute",e);Rn();c();var jn=class extends ut{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=dirname(t);existsSync(o)||mkdirSync(o,{recursive:true});}else if(!existsSync(t))throw new M("NOT_FOUND","Database not found");let r=xe(t);if(e)try{dr(r.db,t);}catch(o){throw r.close(),o}return r}insertSpan(e){let t=this.openHandle(true);try{t.db.insert(Ze).values(e).run();}catch(r){throw r instanceof M?r:new M("DB_ERROR","Failed to insert span",r)}finally{t.close();}}findByTaskId(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.select().from(Ze).where(eq(Ze.task_id,e)).all()}catch(r){throw new M("DB_ERROR","Failed to find spans by task id",r)}finally{t.close();}}findById(e){if(!this.dbExists())return;let t=this.openHandle(false);try{return t.db.select().from(Ze).where(eq(Ze.id,e)).limit(1).get()??void 0}catch(r){throw new M("DB_ERROR","Failed to find span by id",r)}finally{t.close();}}};En();An();kn();c();c();var Ar=class{capabilities={required:[]}};c();c();c();var Ps=2e3;function Ts(n){let e=n.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=Ps?e:e.slice(0,Ps-11)+" [redacted]"}var Fl=10*1024*1024,Hl={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function Fn(n,e){return n===void 0?true:Array.isArray(n)?n.includes(e):n===e}function ql(n,e){return n===void 0?true:Array.isArray(n)?n.some(t=>e.includes(t)):e.includes(n)}function bs(n){if(typeof n=="number")return n;let e=n.match(/^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/i);if(!e)return 0;let t=parseFloat(e[1]),r=(e[2]??"b").toLowerCase();return Math.floor(t*(Hl[r]??1))}function Is(n){return typeof n=="string"}function Os(n){try{let e=statSync(n);return e.size>Fl?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${n} (${e.size} bytes)
306
+ Error: ${r}`}function Pl(n){let e=Array.from(n.agents.keys());return {name:"delegate_to_agent",description:`Delegate a task to another agent. Available agents: ${e.join(", ")}`,parameters:{type:"object",properties:{agent:{type:"string",description:`Agent ID to delegate to. One of: ${e.join(", ")}`},message:{type:"string",description:"Task description for the target agent"},mode:{type:"string",description:'Execution mode: "query" for questions, "execute" for actions. Default: query'}},required:["agent","message"]},execute:async t=>{if(jn>=3)return "Error: Maximum delegation depth (3) reached. Cannot delegate further.";let r=t.agent,o=t.message,s=t.mode??"query";if(!e.includes(r))return `Error: Unknown agent "${r}". Available: ${e.join(", ")}`;jn++;try{let i=s==="execute"?await n.execute(r,o):await n.query(r,o);return Cl(i)}finally{jn--;}}}}c();var As=typeof process<"u"?process.env:{};function Tl(){return As.CREWX_CLI||"npx crewx"}function Sl(){return As.CREWX_WORKSPACE||(typeof process<"u"?process.cwd():"/")}c();var bl=/^[a-zA-Z0-9._-]+$/,Fn=class{constructor(e){this.storage=e;}storage;listBoxes(e){this.validateId(e);let r=this.storage.listBoxes(e).map(o=>this.toBoxResponse(o));return {boxes:r,total:r.length}}getBox(e,t){this.validateId(e),this.validateId(t);let r=this.storage.findBox(e,t);return r?this.toBoxResponse(r):null}createBox(e,t){this.validateId(e);let r=this.generateBoxId(),o=new Date().toISOString(),s=this.storage.insertBox(e,{id:r,seq:t.seq,firstTaskId:t.firstTaskId,midTaskId:t.midTaskId,lastTaskId:t.lastTaskId,taskCount:t.taskCount,summary:t.summary??null,sourceTokens:t.sourceTokens,summaryTokens:t.summaryTokens??null,createdAt:o});return this.toBoxResponse(s)}toBoxResponse(e){return {id:e.id,threadId:e.thread_id,seq:e.seq,firstTaskId:e.first_task_id,lastTaskId:e.last_task_id,taskCount:e.task_count,sourceTokens:e.source_tokens,summaryTokens:e.summary_tokens,summary:e.summary,previewFirst:this.storage.getTaskPreview(e.first_task_id,200),previewMid:this.storage.getTaskPreview(e.mid_task_id,200),previewLast:this.storage.getTaskPreview(e.last_task_id,200),createdAt:e.created_at}}validateId(e){if(!bl.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return et("box")}};c();function Il(n,e,t,r,o){let{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}=r,d=s*i,l=s*a,u=d+l,g=e.getThreadMessages(n),f=[],m=0,w=false,v=[];for(let x=0;x<g.length;x+=2){let k=g[x],I=g[x+1],A=k?.content||"",F=I?.content||"",B=o.countTokens(A+F),D=[];k&&D.push(k),I&&D.push(I),v.push({messages:D,tokens:B});}for(let x=v.length-1;x>=0;x--){let k=v[x];if(m+k.tokens>d){w=true;break}m+=k.tokens,f.unshift(...k.messages);}let E=[],_=0;if(w&&l>0)try{let{boxes:x}=t.listBoxes(n);for(let k=x.length-1;k>=0;k--){let I=x[k],A=I.summaryTokens??I.sourceTokens;if(_+A>l)break;_+=A,E.unshift({boxId:I.id,seq:I.seq,taskCount:I.taskCount,sourceTokens:I.sourceTokens,summary:I.summary,previewFirst:I.previewFirst,previewMid:I.previewMid,previewLast:I.previewLast,createdAt:I.createdAt});}}catch(x){if(x instanceof Error&&!/not found/i.test(x.message))throw x}return {hot:f,warm:E,hotTokens:m,warmTokens:_,hotOverflow:w,totalBudget:u,config:{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}}}Ne();lt();c();var Er=class extends Error{constructor(t,r){super(`Task ${t} timed out after ${r}ms`);this.taskId=t;this.timeoutMs=r;this.name="ParallelRunnerTimeoutError";}taskId;timeoutMs},zt=class{constructor(e={}){this.defaults=e;}defaults;metrics={totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0};async run(e,t={}){if(!Array.isArray(e))throw new TypeError("ParallelRunner.run expects an array of tasks");if(e.length===0)return this.metrics={totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0},[];let r=this.mergeOptions(t),o=Math.max(1,r.maxConcurrency??5),s=r.timeoutMs,i=r.failFast??false,a=r.callbacks,d=r.evaluateTaskSuccess??(()=>true),l=[],u=0,g=0,f=0,m=false,w=0,v=performance.now(),E=async D=>{a?.onTaskStart&&await a.onTaskStart(D),f+=1;let H=new AbortController,K={signal:H.signal},te,V;typeof s=="number"&&Number.isFinite(s)&&s>0&&(V=new Promise((z,$)=>{te=setTimeout(()=>{let J=new Er(D.id,s);H.abort(J),$(J);},s);}));let U=performance.now(),X=D.run(K),Z=V?Promise.race([X,V]):X;try{let z=await Z,$=performance.now(),J=$-U,G=d(z,D),fe={taskId:D.id,success:G,value:z,durationMs:J,startedAt:U,finishedAt:$,metadata:D.metadata,aborted:!1};l.push(fe),G?u+=1:g+=1,a?.onTaskComplete&&await a.onTaskComplete(fe),i&&!G&&(m=!0);}catch(z){let $=performance.now(),J=$-U,G=z instanceof Error?z:new Error(String(z)),fe={taskId:D.id,success:false,error:G,durationMs:J,startedAt:U,finishedAt:$,metadata:D.metadata,aborted:H.signal.aborted};l.push(fe),g+=1,a?.onError&&await a.onError(D,G,J),i&&(m=true);}finally{te&&clearTimeout(te),V&&X.catch(()=>{});}},_=async()=>{for(;!m;){let D=w;if(D>=e.length)break;w+=1;let H=e[D];if(!H||(await E(H),m))break}},x=Math.min(o,e.length),k=[];for(let D=0;D<x;D++)k.push(_());await Promise.all(k);let A=performance.now()-v,F=l.length?l.reduce((D,H)=>D+H.durationMs,0)/l.length:0,B=A>0?l.length/(A/1e3):l.length;return this.metrics={totalTasks:e.length,startedTasks:f,completedTasks:l.length,successCount:u,failureCount:g,totalDurationMs:A,averageDurationMs:F,throughput:B},l}getMetrics(){return this.metrics}mergeOptions(e){return {maxConcurrency:e.maxConcurrency??this.defaults.maxConcurrency,timeoutMs:e.timeoutMs??this.defaults.timeoutMs,failFast:e.failFast??this.defaults.failFast,evaluateTaskSuccess:e.evaluateTaskSuccess??this.defaults.evaluateTaskSuccess,callbacks:this.mergeCallbacks(this.defaults.callbacks,e.callbacks)}}mergeCallbacks(e,t){if(!(!e&&!t))return {onTaskStart:async r=>{e?.onTaskStart&&await e.onTaskStart(r),t?.onTaskStart&&await t.onTaskStart(r);},onTaskComplete:async r=>{e?.onTaskComplete&&await e.onTaskComplete(r),t?.onTaskComplete&&await t.onTaskComplete(r);},onError:async(r,o,s)=>{e?.onError&&await e.onError(r,o,s),t?.onError&&await t.onError(r,o,s);}}}};c();c();var Kt=class{async query(e){throw new Error("AgentRuntime.query is not implemented. Provide a subclass or mock AgentRuntime.prototype.query.")}async execute(e){throw new Error("AgentRuntime.execute is not implemented. Provide a subclass or mock AgentRuntime.prototype.execute.")}};var Es=3,Rs=3e4,Cs=500,Ol=n=>{if(typeof n!="number"||Number.isNaN(n)||!Number.isFinite(n))return Es;let e=Math.floor(n);return e>0?e:Es},Ml=n=>n===void 0||typeof n!="number"||Number.isNaN(n)||n<=0?Rs:n,Nl=n=>{if(!n)return {maxRetries:0,retryDelay:Cs};let e=Number.isInteger(n.maxRetries)&&n.maxRetries>=0?n.maxRetries:0,t=typeof n.retryDelay=="number"&&n.retryDelay>=0?n.retryDelay:Cs;return {maxRetries:e,retryDelay:t}},Hn=n=>{let e=n.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},Dl=(n,e)=>n<=0?Promise.resolve():new Promise((t,r)=>{let o=setTimeout(()=>{e.removeEventListener("abort",s),t();},n),s=()=>{clearTimeout(o),r(Hn(e));};if(e.aborted){s();return}e.addEventListener("abort",s,{once:true});}),Ll=async(n,e,t)=>{let r,o;for(let s=0;s<=e.maxRetries;s++){if(t.aborted)throw Hn(t);try{let i=await n();if(r=i,i.success||s===e.maxRetries)return i}catch(i){if(o=i,t.aborted)throw Hn(t);if(s===e.maxRetries)throw i instanceof Error?i:new Error(String(i))}s<e.maxRetries&&await Dl(e.retryDelay,t);}if(r)return r;throw o?o instanceof Error?o:new Error(String(o)):new Error("Parallel helper encountered an unexpected state")},Ps=(n,e,t)=>{e.completed+=1,t?e.success+=1:e.failure+=1;try{n.onProgress?.(e.completed,e.total);}catch(r){process.env.NODE_ENV!=="production"&&console.warn("Parallel helper onProgress callback threw an error:",r);}},$l=n=>n.map(t=>({metadata:t.metadata,taskResult:t})).slice().sort((t,r)=>t.metadata.index-r.metadata.index).map(({metadata:t,taskResult:r})=>{if(r.value){let s=r.value;return {...s,agentId:s.agentId??t.request.agentId,metadata:{...s.metadata,requestIndex:t.index,mode:t.mode}}}let o=r.error??new Error("Unknown error");return {agentId:t.request.agentId,content:o.message,success:false,metadata:{error:o.message,aborted:r.aborted??false,requestIndex:t.index,mode:t.mode}}}),Ul=n=>n.filter(e=>!e.success).map(e=>{let t=e.metadata;if(e.error instanceof Error)return {index:t.index,error:e.error};if(e.value&&!e.value.success){let r=String(e.value.metadata?.error??e.value.content??"Agent returned unsuccessful result");return {index:t.index,error:new Error(r)}}return {index:t.index,error:new Error("Unknown failure")}}),jl=(n,e)=>({onTaskComplete:async t=>{Ps(e,n,t.success);},onError:async()=>{Ps(e,n,false);}}),Ts=async(n,e,t={})=>{if(!Array.isArray(n))throw new TypeError("Parallel helpers expect an array of requests");if(n.length===0){let E={total:0,completed:0,successCount:0,failureCount:0,results:[],errors:[],metrics:{totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0}};return t.onComplete?.(E),[]}let r=Ol(t.concurrency),o=Ml(t.timeout),s=Nl(t.retryPolicy),i=new zt,a=new Kt,d=n.map((v,E)=>({id:`${e}:${v.agentId??"anonymous"}:${E}`,metadata:{index:E,mode:e,request:v},run:_=>Ll(()=>e==="query"?a.query(v):a.execute(v),s,_.signal)})),l={completed:0,success:0,failure:0,total:n.length},u=await i.run(d,{maxConcurrency:r,timeoutMs:o,evaluateTaskSuccess:v=>v.success,callbacks:jl(l,t)}),g=$l(u),f=Ul(u),m=i.getMetrics(),w={total:n.length,completed:n.length,successCount:g.filter(v=>v.success).length,failureCount:g.filter(v=>!v.success).length,results:g,errors:f,metrics:m};return t.onComplete?.(w),g},Fl=(n,e)=>Ts(n,"query",e),Hl=(n,e)=>Ts(n,"execute",e);Tn();c();var qn=class extends ft{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=dirname(t);existsSync(o)||mkdirSync(o,{recursive:true});}else if(!existsSync(t))throw new O("NOT_FOUND","Database not found");let r=ke(t);if(e)try{cr(r.db,t);}catch(o){throw r.close(),o}return r}insertSpan(e){let t=this.openHandle(true);try{t.db.insert(nt).values(e).run();}catch(r){throw r instanceof O?r:new O("DB_ERROR","Failed to insert span",r)}finally{t.close();}}findByTaskId(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.select().from(nt).where(eq(nt.task_id,e)).all()}catch(r){throw new O("DB_ERROR","Failed to find spans by task id",r)}finally{t.close();}}findById(e){if(!this.dbExists())return;let t=this.openHandle(false);try{return t.db.select().from(nt).where(eq(nt.id,e)).limit(1).get()??void 0}catch(r){throw new O("DB_ERROR","Failed to find span by id",r)}finally{t.close();}}};Pn();Cn();Rn();c();c();var Rr=class{capabilities={required:[]}};c();c();c();var Is=2e3;function Os(n){let e=n.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=Is?e:e.slice(0,Is-11)+" [redacted]"}var Ql=10*1024*1024,Zl={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function Wn(n,e){return n===void 0?true:Array.isArray(n)?n.includes(e):n===e}function ec(n,e){return n===void 0?true:Array.isArray(n)?n.some(t=>e.includes(t)):e.includes(n)}function Ns(n){if(typeof n=="number")return n;let e=n.match(/^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/i);if(!e)return 0;let t=parseFloat(e[1]),r=(e[2]??"b").toLowerCase();return Math.floor(t*(Zl[r]??1))}function Ds(n){return typeof n=="string"}function Ls(n){try{let e=statSync(n);return e.size>Ql?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${n} (${e.size} bytes)
307
307
  `),null):readFileSync(n,"utf8").split(`
308
- `).length}catch{return null}}function Ms(n){try{return statSync(n).size}catch{return null}}function Wl(n,e,t){if(!n)return true;let r=e,o=r?.path??r?.file_path??r?.filePath??r?.filename;if(typeof o!="string")return false;if(ye(o,n))return true;if(t&&o.startsWith("/")){let{relative:s,isAbsolute:i}=re("path");if(i(o)){let a=s(t,o);if(a&&!a.startsWith("..")&&ye(a,n))return true}}return false}function Bl(n,e){return n?JSON.stringify(e).includes(n):true}function zl(n,e){if(!n)return true;try{let t=new RegExp(n),r=JSON.stringify(e);return t.test(r)}catch{return false}}function Kl(n,e){if(!n)return true;try{let t=new RegExp(n),r=JSON.stringify(e);return t.test(r)}catch{return false}}function Vl(n,e){if(n.pathSizeMin===void 0&&n.pathSizeMax===void 0)return true;let t=e,r=t?.path??t?.file_path??t?.filePath??t?.filename;if(typeof r!="string")return false;if(n.pathSizeMin!==void 0)if(Is(n.pathSizeMin)){let o=Ms(r);if(o===null||o<bs(n.pathSizeMin))return false}else {let o=Os(r);if(o===null||o<n.pathSizeMin)return false}if(n.pathSizeMax!==void 0)if(Is(n.pathSizeMax)){let o=Ms(r);if(o===null||o>bs(n.pathSizeMax))return false}else {let o=Os(r);if(o===null||o>n.pathSizeMax)return false}return true}function Gl(n){let e=[],t=[];for(let r=0;r<n.length;r++){let o=n[r];if(!o||typeof o!="object"){t.push(`Hook at index ${r}: not an object, skipping`);continue}let s=o;if(typeof s.name!="string"||!s.name){t.push(`Hook at index ${r}: missing or invalid "name", skipping`);continue}let i=s.guide&&typeof s.guide=="object",a=s.deny&&typeof s.deny=="object",d=typeof s.plugin=="string";if(!i&&!a&&!d){t.push(`Hook "${s.name}": missing guide/deny/plugin, skipping`);continue}if(i&&typeof s.guide.say!="string"){t.push(`Hook "${s.name}": guide.say is required and must be string, skipping`);continue}if(a&&typeof s.deny.reason!="string"){t.push(`Hook "${s.name}": deny.reason is required and must be string, skipping`);continue}e.push(s);}return {valid:e,warnings:t}}var qn=class extends Ar{name="@crewx/yaml-hook-plugin";version="0.1.0";capabilities={required:["inject"]};hooks;agentMap;constructor(e){super(),this.hooks=e.hooks,this.agentMap=new Map((e.agents??[]).map(t=>[t.id,t]));}async run(e){let t=[],r=process.env.CREWX_TASK_LOG_PATH,o=process.env.CREWX_HOOK_LOG_VERBOSE==="1";for(let s of this.hooks)if(this.matchEntryLevel(s,e)&&s.guide){if(!this.matchRuleLevel(s.guide,e)){o&&r&&this.appendHookLog(r,{rule:s.name,action:"pass",once:s.guide.once??false,ctx:e,matched:false});continue}s.guide.once&&this.hasFired(e.sessionId,s.name)||(s.guide.once&&this.markFired(e.sessionId,s.name),t.push(s.guide.say),r&&this.appendHookLog(r,{rule:s.name,action:"inject",once:s.guide.once??false,ctx:e,matched:true,message:s.guide.say}));}return t.length?e.inject(t.join(`
308
+ `).length}catch{return null}}function $s(n){try{return statSync(n).size}catch{return null}}function tc(n,e,t){if(!n)return true;let r=e,o=r?.path??r?.file_path??r?.filePath??r?.filename;if(typeof o!="string")return false;if(he(o,n))return true;if(t&&o.startsWith("/")){let{relative:s,isAbsolute:i}=re("path");if(i(o)){let a=s(t,o);if(a&&!a.startsWith("..")&&he(a,n))return true}}return false}function rc(n,e){return n?JSON.stringify(e).includes(n):true}function nc(n,e){if(!n)return true;try{let t=new RegExp(n),r=JSON.stringify(e);return t.test(r)}catch{return false}}function oc(n,e){if(!n)return true;try{let t=new RegExp(n),r=JSON.stringify(e);return t.test(r)}catch{return false}}function sc(n,e){if(n.pathSizeMin===void 0&&n.pathSizeMax===void 0)return true;let t=e,r=t?.path??t?.file_path??t?.filePath??t?.filename;if(typeof r!="string")return false;if(n.pathSizeMin!==void 0)if(Ds(n.pathSizeMin)){let o=$s(r);if(o===null||o<Ns(n.pathSizeMin))return false}else {let o=Ls(r);if(o===null||o<n.pathSizeMin)return false}if(n.pathSizeMax!==void 0)if(Ds(n.pathSizeMax)){let o=$s(r);if(o===null||o>Ns(n.pathSizeMax))return false}else {let o=Ls(r);if(o===null||o>n.pathSizeMax)return false}return true}function ic(n){let e=[],t=[];for(let r=0;r<n.length;r++){let o=n[r];if(!o||typeof o!="object"){t.push(`Hook at index ${r}: not an object, skipping`);continue}let s=o;if(typeof s.name!="string"||!s.name){t.push(`Hook at index ${r}: missing or invalid "name", skipping`);continue}let i=s.guide&&typeof s.guide=="object",a=s.deny&&typeof s.deny=="object",d=typeof s.plugin=="string";if(!i&&!a&&!d){t.push(`Hook "${s.name}": missing guide/deny/plugin, skipping`);continue}if(i&&typeof s.guide.say!="string"){t.push(`Hook "${s.name}": guide.say is required and must be string, skipping`);continue}if(a&&typeof s.deny.reason!="string"){t.push(`Hook "${s.name}": deny.reason is required and must be string, skipping`);continue}e.push(s);}return {valid:e,warnings:t}}var zn=class extends Rr{name="@crewx/yaml-hook-plugin";version="0.1.0";capabilities={required:["inject"]};hooks;agentMap;constructor(e){super(),this.hooks=e.hooks,this.agentMap=new Map((e.agents??[]).map(t=>[t.id,t]));}async run(e){let t=[],r=process.env.CREWX_TASK_LOG_PATH,o=process.env.CREWX_HOOK_LOG_VERBOSE==="1";for(let s of this.hooks)if(this.matchEntryLevel(s,e)&&s.guide){if(!this.matchRuleLevel(s.guide,e)){o&&r&&this.appendHookLog(r,{rule:s.name,action:"pass",once:s.guide.once??false,ctx:e,matched:false});continue}s.guide.once&&this.hasFired(e.sessionId,s.name)||(s.guide.once&&this.markFired(e.sessionId,s.name),t.push(s.guide.say),r&&this.appendHookLog(r,{rule:s.name,action:"inject",once:s.guide.once??false,ctx:e,matched:true,message:s.guide.say}));}return t.length?e.inject(t.join(`
309
309
 
310
- `)):e.pass()}appendHookLog(e,t){try{let r={rule:t.rule,action:t.action,once:t.once,sessionId:t.ctx.sessionId,provider:t.ctx.provider,agent:t.ctx.agent.id,toolName:t.ctx.tool.name,rawToolName:t.ctx.tool.rawName};t.message&&(r.chars=t.message.length,process.env.CREWX_HOOK_LOG_VERBOSE==="1"&&(r.message=Ts(t.message).slice(0,500)));let o=`[${new Date().toISOString()}] HOOK: ${JSON.stringify(r)}
311
- `;appendFileSync(e,o,{encoding:"utf8",mode:384});}catch{}}matchEntryLevel(e,t){if(e.provider!==void 0){let r=t.provider.replace(/^cli\//,"");if(!Fn(e.provider,r))return false}if(e.team!==void 0){let o=this.agentMap.get(t.agent.id)?.team??t.agent.team;if(!Fn(e.team,o))return false}if(e.role!==void 0){let o=this.agentMap.get(t.agent.id)?.role??t.agent.role;if(!Fn(e.role,o))return false}if(e.tag!==void 0){let o=this.agentMap.get(t.agent.id)?.tags??[];if(!ql(e.tag,o))return false}return !(e.agents!==void 0&&!e.agents.includes(t.agent.id))}matchRuleLevel(e,t){return !(e.when!==void 0&&e.when.length>0&&!e.when.includes(t.tool.name)&&!e.when.includes(t.tool.rawName)||!Bl(e.pattern,t.tool.input)||!zl(e.regex,t.tool.input)||!Wl(e.pathPattern,t.tool.input,t.cwd)||!Vl(e,t.tool.input)||!Kl(e.whenInputRegex,t.tool.input))}hasFired(e,t){try{let r=this.firedFilePath(e);if(!existsSync(r))return !1;let o=JSON.parse(readFileSync(r,"utf8"));return Array.isArray(o.fired)&&o.fired.includes(t)}catch{return false}}markFired(e,t){try{let r=this.firedFilePath(e);mkdirSync(dirname(r),{recursive:!0,mode:448});let o=existsSync(r)?JSON.parse(readFileSync(r,"utf8")):{fired:[]};Array.isArray(o.fired)||(o.fired=[]),o.fired.includes(t)||(o.fired.push(t),writeFileSync(r,JSON.stringify(o),{mode:384}));}catch(r){process.stderr.write(`[YamlHookPlugin] once state write failed: ${r}
312
- `);}}firedFilePath(e){let t=createHash("sha1").update(e).digest("hex");return join(homedir(),".crewx","sessions",t,"fired-rules.json")}};c();c();c();function Jl(n){let e=n.messages.map(t=>({id:t.id,role:t.isAssistant?"assistant":"user",content:t.text,timestamp:new Date(t.timestamp).toISOString(),metadata:t.metadata??null}));return {getThreadMessages(t){return e}}}c();var Wn=class extends Error{code;kind;retryAfterMs;constructor(e,t,r){super(`AdapterError: ${e}`),this.name="AdapterError",this.code=e,this.kind=t,this.retryAfterMs=r;}};c();function Xl(n){return n}function Yl(n){return {name:n.name,async attach(e){let t=await n.configFactory(e),o=e.registerChannelAdapter,s=n.instanceId??n.name;o&&await o({adapter:n.adapter,instanceId:s,config:t}),n.onAttach&&await n.onAttach(e);},async detach(e){let r=e.unregisterChannelAdapter;r&&await r(n.instanceId??n.name),n.onDetach&&await n.onDetach(e);}}}Yt();export{rt as ACP_ADAPTERS,tt as AcpConnection,Ie as AcpProtocolError,Dt as AcpProviderRuntime,Wn as AdapterError,Ae as AgentNotFoundError,Wt as AgentRuntime,Vn as AgentSkillsSchema,we as BUILTIN_ADAPTERS,In as BrowserFsAdapter,ue as ClientToolCallRequiredError,He as ConfigLoadError,Tn as Crewx,bn as CrewxPlugin,Ge as DocumentLoader,ne as LayoutLoadError,Ct as LayoutLoader,St as LayoutRenderer,Lt as McpHttpTransport,ir as NodeFsAdapter,Mn as PROVIDER_ORDER,qt as ParallelRunner,kr as ParallelRunnerTimeoutError,jt as PluginProviderRuntime,Pe as PropsValidationError,Tt as PropsValidator,T as ProviderError,ze as RateLimitError,$t as RemoteAgentManager,Ut as RemoteProviderRuntime,$n as SdkBoxService,jn as SpanRepository,Mt as TaskRepository,Rt as TemplateEngine,bt as TypedEventEmitter,Nt as VercelProviderRuntime,qn as YamlHookPlugin,vl as buildContext,Vd as canonicalizeAgentOptions,hr as claudeAcpAdapter,Zt as claudeAdapter,li as clearModelsOverride,wr as codexAcpAdapter,tr as codexAdapter,Ft as compareProviders,vr as copilotAcpAdapter,er as copilotAdapter,tn as createAdapterContext,fl as createDelegateTool,un as createHandler,is as createPluginProviderFactory,Ce as createProvider,rs as createRemoteProviderFactory,Zr as createScopedAdapterStore,on as defaultExtractText,Ve as defaultFsAdapter,pe as defaultParseEvent,Xl as defineChannelAdapter,Yl as defineChannelAdapterPlugin,Gr as escapeHandlebarsHelper,Jr as formatFileSizeHelper,Qr as formatTimestamp,Xr as formatTimestampHelper,ia as generateFingerprint,Xe as generateId,Mr as getAntigravityModels,wt as getClaudeModels,Ir as getCodexModels,Or as getCopilotModels,Ke as getProviderModels,la as getSyncWindowStore,pn as hashWorkspaceId,Zd as initModelsRemote,Xd as initPricingRemote,Vr as lengthHelper,Kt as loadYamlFile,mt as materializeWindowsSpawnProgram,go as mergeAdditionalArgs,vt as mergeModels,nl as normalizeProviderId,Ko as normalizeWorkspacePath,_r as opencodeAcpAdapter,rr as opencodeAdapter,fo as parseOverdriveProfile,or as parseOverdriveSignal,_t as parseStdoutEvent,Ee as parseUsage,zt as parseYamlContent,Nn as providerRank,hs as queryAcpProviderMeta,ll as queryAllAcpProviderMetas,gl as queryAllCliProviderMetas,ws as queryOpencodeModels,es as registerAcpProviders,Jo as registerApiProviders,Re as registerProviderFactory,Gt as resolveAgent,el as resolveAgentSkills,yl as resolveCrewxCli,hl as resolveCrewxWorkspace,Rr as resolveDefaultAgentsYaml,sr as resolveOverdrive,nt as resolveTemplatesPath,Xn as resolveWindowsExecutablePath,gt as resolveWindowsSpawnProgram,Sl as runExecutesParallel,ca as runInSyncWindow,Tl as runQueriesParallel,zi as setAuditVerbose,br as setModelsOverride,Jl as toTaskReader,nn as toTemplateMessages,Kr as truncateHelper,Gl as validateHooksSchema};
310
+ `)):e.pass()}appendHookLog(e,t){try{let r={rule:t.rule,action:t.action,once:t.once,sessionId:t.ctx.sessionId,provider:t.ctx.provider,agent:t.ctx.agent.id,toolName:t.ctx.tool.name,rawToolName:t.ctx.tool.rawName};t.message&&(r.chars=t.message.length,process.env.CREWX_HOOK_LOG_VERBOSE==="1"&&(r.message=Os(t.message).slice(0,500)));let o=`[${new Date().toISOString()}] HOOK: ${JSON.stringify(r)}
311
+ `;appendFileSync(e,o,{encoding:"utf8",mode:384});}catch{}}matchEntryLevel(e,t){if(e.provider!==void 0){let r=t.provider.replace(/^cli\//,"");if(!Wn(e.provider,r))return false}if(e.team!==void 0){let o=this.agentMap.get(t.agent.id)?.team??t.agent.team;if(!Wn(e.team,o))return false}if(e.role!==void 0){let o=this.agentMap.get(t.agent.id)?.role??t.agent.role;if(!Wn(e.role,o))return false}if(e.tag!==void 0){let o=this.agentMap.get(t.agent.id)?.tags??[];if(!ec(e.tag,o))return false}return !(e.agents!==void 0&&!e.agents.includes(t.agent.id))}matchRuleLevel(e,t){return !(e.when!==void 0&&e.when.length>0&&!e.when.includes(t.tool.name)&&!e.when.includes(t.tool.rawName)||!rc(e.pattern,t.tool.input)||!nc(e.regex,t.tool.input)||!tc(e.pathPattern,t.tool.input,t.cwd)||!sc(e,t.tool.input)||!oc(e.whenInputRegex,t.tool.input))}hasFired(e,t){try{let r=this.firedFilePath(e);if(!existsSync(r))return !1;let o=JSON.parse(readFileSync(r,"utf8"));return Array.isArray(o.fired)&&o.fired.includes(t)}catch{return false}}markFired(e,t){try{let r=this.firedFilePath(e);mkdirSync(dirname(r),{recursive:!0,mode:448});let o=existsSync(r)?JSON.parse(readFileSync(r,"utf8")):{fired:[]};Array.isArray(o.fired)||(o.fired=[]),o.fired.includes(t)||(o.fired.push(t),writeFileSync(r,JSON.stringify(o),{mode:384}));}catch(r){process.stderr.write(`[YamlHookPlugin] once state write failed: ${r}
312
+ `);}}firedFilePath(e){let t=createHash("sha1").update(e).digest("hex");return join(homedir(),".crewx","sessions",t,"fired-rules.json")}};c();c();c();function ac(n){let e=n.messages.map(t=>({id:t.id,role:t.isAssistant?"assistant":"user",content:t.text,timestamp:new Date(t.timestamp).toISOString(),metadata:t.metadata??null}));return {getThreadMessages(t){return e}}}c();var Kn=class extends Error{code;kind;retryAfterMs;constructor(e,t,r){super(`AdapterError: ${e}`),this.name="AdapterError",this.code=e,this.kind=t,this.retryAfterMs=r;}};c();function dc(n){return n}function lc(n){return {name:n.name,async attach(e){let t=await n.configFactory(e),o=e.registerChannelAdapter,s=n.instanceId??n.name;o&&await o({adapter:n.adapter,instanceId:s,config:t}),n.onAttach&&await n.onAttach(e);},async detach(e){let r=e.unregisterChannelAdapter;r&&await r(n.instanceId??n.name),n.onDetach&&await n.onDetach(e);}}}ht();export{it as ACP_ADAPTERS,st as AcpConnection,Me as AcpProtocolError,Ut as AcpProviderRuntime,Kn as AdapterError,Re as AgentNotFoundError,Kt as AgentRuntime,Xn as AgentSkillsSchema,ve as BUILTIN_ADAPTERS,Nn as BrowserFsAdapter,pe as ClientToolCallRequiredError,We as ConfigLoadError,In as Crewx,Mn as CrewxPlugin,Qe as DocumentLoader,oe as LayoutLoadError,St as LayoutLoader,Ot as LayoutRenderer,jt as McpHttpTransport,dr as NodeFsAdapter,Ln as PROVIDER_ORDER,zt as ParallelRunner,Er as ParallelRunnerTimeoutError,qt as PluginProviderRuntime,Se as PropsValidationError,It as PropsValidator,T as ProviderError,Je as RateLimitError,Ft as RemoteAgentManager,Ht as RemoteProviderRuntime,Fn as SdkBoxService,qn as SpanRepository,Lt as TaskRepository,Tt as TemplateEngine,Mt as TypedEventEmitter,$t as VercelProviderRuntime,zn as YamlHookPlugin,Il as buildContext,sl as canonicalizeAgentOptions,vr as claudeAcpAdapter,tr as claudeAdapter,hi as clearModelsOverride,_r as codexAcpAdapter,nr as codexAdapter,Wt as compareProviders,xr as copilotAcpAdapter,rr as copilotAdapter,on as createAdapterContext,Pl as createDelegateTool,mn as createHandler,cs as createPluginProviderFactory,Te as createProvider,is as createRemoteProviderFactory,rn as createScopedAdapterStore,dn as defaultExtractText,Ye as defaultFsAdapter,ge as defaultParseEvent,dc as defineChannelAdapter,lc as defineChannelAdapterPlugin,Yr as escapeHandlebarsHelper,Qr as formatFileSizeHelper,tn as formatTimestamp,Zr as formatTimestampHelper,ma as generateFingerprint,et as generateId,Lr as getAntigravityModels,xt as getClaudeModels,Nr as getCodexModels,Dr as getCopilotModels,Xe as getProviderModels,ha as getSyncWindowStore,fn as hashWorkspaceId,ul as initModelsRemote,dl as initPricingRemote,Xr as lengthHelper,Jt as loadYamlFile,Ke as materializeWindowsSpawnProgram,fo as mergeAdditionalArgs,kt as mergeModels,fl as normalizeProviderId,Xo as normalizeWorkspacePath,kr as opencodeAcpAdapter,or as opencodeAdapter,ho as parseOverdriveProfile,ir as parseOverdriveSignal,At as parseStdoutEvent,Ce as parseUsage,Gt as parseYamlContent,$n as providerRank,xs as queryAcpProviderMeta,xl as queryAllAcpProviderMetas,Rl as queryAllCliProviderMetas,ks as queryOpencodeModels,os as registerAcpProviders,Zo as registerApiProviders,Pe as registerProviderFactory,Yt as resolveAgent,pl as resolveAgentSkills,Tl as resolveCrewxCli,Sl as resolveCrewxWorkspace,Pr as resolveDefaultAgentsYaml,ar as resolveOverdrive,at as resolveTemplatesPath,ii as resolveWindowsExecutablePath,ze as resolveWindowsSpawnProgram,Hl as runExecutesParallel,wa as runInSyncWindow,Fl as runQueriesParallel,Zi as setAuditVerbose,Mr as setModelsOverride,ac as toTaskReader,an as toTemplateMessages,Jr as truncateHelper,ic as validateHooksSchema};