@crewx/sdk 0.9.0-rc.46 → 0.9.0-rc.49

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/index.js CHANGED
@@ -1,64 +1,64 @@
1
- 'use strict';var ls=require('fs'),K=require('path'),child_process=require('child_process'),string_decoder=require('string_decoder'),sdk=require('@agentclientprotocol/sdk'),jsYaml=require('js-yaml'),zod=require('zod'),module$1=require('module'),xe=require('handlebars'),promises=require('fs/promises'),crypto$1=require('crypto'),events=require('events'),async_hooks=require('async_hooks'),drizzleOrm=require('drizzle-orm'),rd=require('os'),sqliteCore=require('drizzle-orm/sqlite-core'),mcp_js=require('@modelcontextprotocol/sdk/server/mcp.js'),webStandardStreamableHttp_js=require('@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js'),perf_hooks=require('perf_hooks');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var ls__namespace=/*#__PURE__*/_interopNamespace(ls);var K__namespace=/*#__PURE__*/_interopNamespace(K);var xe__namespace=/*#__PURE__*/_interopNamespace(xe);var rd__default=/*#__PURE__*/_interopDefault(rd);var zr=Object.defineProperty;var gi=Object.getOwnPropertyDescriptor;var fi=Object.getOwnPropertyNames;var mi=Object.prototype.hasOwnProperty;var oe=(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 lr=(n,e)=>{for(var t in e)zr(n,t,{get:e[t],enumerable:true});},hi=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of fi(e))!mi.call(n,o)&&o!==t&&zr(n,o,{get:()=>e[o],enumerable:!(r=gi(e,o))||r.enumerable});return n};var go=n=>hi(zr({},"__esModule",{value:true}),n);var u=M(()=>{});function gr(n){return typeof n!="string"?void 0:n.trim()||void 0}function fr(n){return gr(n)?.toLowerCase()??""}function ht(n){try{return ls.statSync(n).isFile()}catch{return false}}function Si(n,e){if(n===e)return true;let t=K__namespace.default.relative(n,e);return t!==""&&!t.startsWith("..")&&!K__namespace.default.isAbsolute(t)}function Ii(n,e){if(K__namespace.default.basename(n)!==".bin")return false;let t=K__namespace.default.dirname(n);if(K__namespace.default.basename(t)!=="node_modules")return false;let r=K__namespace.default.dirname(t);return Si(r,e)}function It(n,e={}){if(n.includes("/")||n.includes("\\")||K__namespace.default.isAbsolute(n))return n;let t=e.platform??process.platform,r=e.env??process.env,o=K__namespace.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(g=>g.trim()).filter(Boolean),l=K__namespace.default.extname(n).length>0,c=r.PATHEXT??r.Pathext??process.env.PATHEXT??process.env.Pathext??".EXE;.CMD;.BAT;.COM",f=t==="win32"?l?[""]:c.split(";").map(g=>g.trim()).filter(Boolean).map(g=>g.startsWith(".")?g:`.${g}`):[""];for(let g of d){let m=K__namespace.default.resolve(o,g);if(!(s&&Ii(m,o)))for(let w of f){let _=fr(w),k=w.toUpperCase();for(let y of [w,_,k]){let v=K__namespace.default.join(m,`${n}${y}`);if(ht(v))return v}}}return n}function Oi(n,e){return It(n,{env:e,platform:"win32",resolution:"local_first"})}function Mi(n){if(!ht(n))return null;try{let e=ls.readFileSync(n,"utf8"),t=K__namespace.default.dirname(n),r=[];for(let a of e.matchAll(/"([^"\r\n]*)"/g)){let c=(a[1]??"").match(/%~?dp0%?\s*[\\/]*(.*)$/i)?.[1]?.trim();if(!c)continue;let f=c.replace(/[\\/]+/g,K__namespace.default.sep).replace(/^[\\/]+/,""),g=K__namespace.default.resolve(t,f);ht(g)&&r.push(g);}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,K__namespace.default.sep).replace(/^[\\/]+/,"");s.set(d,K__namespace.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&&ht(l)&&o.push(l);}let i=a=>a.find(d=>{let l=fr(K__namespace.default.basename(d));return l!=="node.exe"&&l!=="node"})??null;return i(o)??i(r)}catch{return null}}function Ni(n,e){if(typeof e=="string")return gr(e)||null;if(!e||typeof e!="object")return null;if(n){let t=e[n],r=typeof t=="string"?gr(t):void 0;if(r)return r}for(let t of Object.values(e)){let r=typeof t=="string"?gr(t):void 0;if(r)return r}return null}function Di(n,e){if(!e)return null;let t=K__namespace.default.dirname(n),r=[K__namespace.default.resolve(t,"..",e),K__namespace.default.resolve(t,"node_modules",e)];for(let o of r){let s=K__namespace.default.join(o,"package.json");if(ht(s))try{let i=JSON.parse(ls.readFileSync(s,"utf8")),a=Ni(e,i.bin);if(!a)continue;let d=K__namespace.default.resolve(o,a);if(ht(d))return d}catch{}}return null}function Li(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:It(n.command,{cwd:o,env:t,platform:e,resolution:s}),leadingArgv:[],resolution:"direct"};let i=It(n.command,{cwd:o,env:t,platform:e,resolution:s}),a=fr(K__namespace.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=Mi(i)??Di(i,n.packageName);return d?fr(K__namespace.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 $i(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(`${K__namespace.default.basename(n.candidate.command)} wrapper resolved, but no executable/Node entrypoint could be resolved without shell execution.`)}function Xe(n){let e=Li(n);return $i({candidate:e,allowShellFallback:n.allowShellFallback})}function Ye(n,e){return {command:n.command,argv:[...n.leadingArgv,...e],resolution:n.resolution,shell:n.shell,windowsHide:n.windowsHide}}var yt=M(()=>{u();});function Ui(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 ji(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 Wi(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 wo(n){let e=new Map,t;for(let s of n.split(`
2
- `))if(s.trim())try{let i=JSON.parse(s);if(i.type!=="assistant")continue;let a=i.message,d=a?.id,l=a?.usage;if(typeof d!="string"||!l)continue;let c=Number(l.input_tokens??0),f=Number(l.cache_read_input_tokens??0);e.set(d,{inputTokens:c+f,cachedInputTokens:f});let g=a?.model;typeof g=="string"&&g&&(t=g);}catch{}if(e.size===0)return;let r=0,o=0;for(let s of e.values())r+=s.inputTokens,o+=s.cachedInputTokens;return {inputTokens:r,cachedInputTokens:o,model:t}}function Te(n){if(!n||!n.trim())return;let e=null,t=null;for(let r of n.split(`
3
- `))if(r.trim())try{let o=JSON.parse(r),s=Wi(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=Ui(o)??ji(o);i&&(e=i);}catch{}return t||(e??void 0)}var Qe=M(()=>{u();});exports.ProviderError=void 0;var Ze,et,Ot=M(()=>{u();exports.ProviderError=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;stdout},Ze=class extends exports.ProviderError{constructor(e,t){super(e,t,{code:"TIMEOUT_IDLE",kind:"permanent"}),this.name="IdleTimeoutError";}},et=class extends exports.ProviderError{constructor(e,t){super(e,t,{code:"TIMEOUT_TOTAL",kind:"permanent"}),this.name="TotalTimeoutError";}};});exports.RateLimitError=void 0;var Gr=M(()=>{u();Ot();exports.RateLimitError=class extends exports.ProviderError{name="RateLimitError";constructor(e,t="cli/claude"){super(e,t,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function pe(n){return /crewx\s+(x|execute)\s/.test(n)}function ge(n,e){let t=e.match(/@(\S+)/);return {timestamp:n,type:"agent_call",targetAgent:t?.[1]?.replace(/["']/g,""),toolInput:e}}var wt=M(()=>{u();});function fe(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 _t=M(()=>{u();});function mr(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 _o(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 vo(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 ko(n){return n?["-c",`model_reasoning_effort=${n}`]:[]}function xo(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 Ao(n){return n?new Set(["low","medium","high","xhigh","max"]).has(n)?["--effort",n]:[]:[]}var Fi,Vr=M(()=>{u();Fi=new Set(["minimal","low","medium","high","xhigh","max"]);});var Jr,Eo=M(()=>{u();Jr={claude:{models:[{id:"claude-fable-5",name:"Claude Fable 5"},{id:"claude-opus-5",name:"Claude Opus 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-opus-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(Jr).map(([n,e])=>[n,e.models]));});function Ro(){return {models:[],modes:[],effort:[],modelOverrides:{}}}function Hi(n){return Array.isArray(n)?{models:n,modes:[],effort:[],modelOverrides:{}}:n?{models:n.models??[],modes:n.modes??[],effort:n.effort??[],modelOverrides:n.modelOverrides??{}}:Ro()}function Yr(n){Xr=Object.fromEntries(Object.entries(n).map(([e,t])=>[e,Hi(t)]));}function Bi(){Xr={};}function rt(n){return vt(n).models}function vt(n){return Xr[n]??Jr[n]??Ro()}function Mt(n){return vt(n).modes}function Nt(n,e){let t=vt(n);return e?t.modelOverrides[e]?.effort??t.effort:t.effort}function Co(n){return vt(n).modelOverrides}function Dt(){return rt("claude")}function Qr(){return rt("codex")}function Zr(){return rt("copilot")}function en(){return rt("antigravity")}function Lt(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 Xr,_e=M(()=>{u();Eo();Xr={};});function zi(n){let t=n.message?.content;return Array.isArray(t)?t.map(r=>typeof r.text=="string"?r.text.trim():"").filter(Boolean).join(`
1
+ 'use strict';var hs=require('fs'),K=require('path'),child_process=require('child_process'),string_decoder=require('string_decoder'),sdk=require('@agentclientprotocol/sdk'),jsYaml=require('js-yaml'),zod=require('zod'),module$1=require('module'),xe=require('handlebars'),promises=require('fs/promises'),crypto$1=require('crypto'),events=require('events'),async_hooks=require('async_hooks'),drizzleOrm=require('drizzle-orm'),lo=require('os'),sqliteCore=require('drizzle-orm/sqlite-core'),mcp_js=require('@modelcontextprotocol/sdk/server/mcp.js'),webStandardStreamableHttp_js=require('@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js'),perf_hooks=require('perf_hooks');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var hs__namespace=/*#__PURE__*/_interopNamespace(hs);var K__namespace=/*#__PURE__*/_interopNamespace(K);var xe__namespace=/*#__PURE__*/_interopNamespace(xe);var lo__namespace=/*#__PURE__*/_interopNamespace(lo);var Vr=Object.defineProperty;var xi=Object.getOwnPropertyDescriptor;var Ai=Object.getOwnPropertyNames;var Ei=Object.prototype.hasOwnProperty;var oe=(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 cr=(n,e)=>{for(var t in e)Vr(n,t,{get:e[t],enumerable:true});},Ri=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Ai(e))!Ei.call(n,o)&&o!==t&&Vr(n,o,{get:()=>e[o],enumerable:!(r=xi(e,o))||r.enumerable});return n};var yo=n=>Ri(Vr({},"__esModule",{value:true}),n);var u=M(()=>{});function fr(n){return typeof n!="string"?void 0:n.trim()||void 0}function mr(n){return fr(n)?.toLowerCase()??""}function ht(n){try{return hs.statSync(n).isFile()}catch{return false}}function ji(n,e){if(n===e)return true;let t=K__namespace.default.relative(n,e);return t!==""&&!t.startsWith("..")&&!K__namespace.default.isAbsolute(t)}function Wi(n,e){if(K__namespace.default.basename(n)!==".bin")return false;let t=K__namespace.default.dirname(n);if(K__namespace.default.basename(t)!=="node_modules")return false;let r=K__namespace.default.dirname(t);return ji(r,e)}function It(n,e={}){if(n.includes("/")||n.includes("\\")||K__namespace.default.isAbsolute(n))return n;let t=e.platform??process.platform,r=e.env??process.env,o=K__namespace.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(g=>g.trim()).filter(Boolean),l=K__namespace.default.extname(n).length>0,c=r.PATHEXT??r.Pathext??process.env.PATHEXT??process.env.Pathext??".EXE;.CMD;.BAT;.COM",f=t==="win32"?l?[""]:c.split(";").map(g=>g.trim()).filter(Boolean).map(g=>g.startsWith(".")?g:`.${g}`):[""];for(let g of d){let m=K__namespace.default.resolve(o,g);if(!(s&&Wi(m,o)))for(let w of f){let _=mr(w),k=w.toUpperCase();for(let y of [w,_,k]){let v=K__namespace.default.join(m,`${n}${y}`);if(ht(v))return v}}}return n}function Fi(n,e){return It(n,{env:e,platform:"win32",resolution:"local_first"})}function Hi(n){if(!ht(n))return null;try{let e=hs.readFileSync(n,"utf8"),t=K__namespace.default.dirname(n),r=[];for(let a of e.matchAll(/"([^"\r\n]*)"/g)){let c=(a[1]??"").match(/%~?dp0%?\s*[\\/]*(.*)$/i)?.[1]?.trim();if(!c)continue;let f=c.replace(/[\\/]+/g,K__namespace.default.sep).replace(/^[\\/]+/,""),g=K__namespace.default.resolve(t,f);ht(g)&&r.push(g);}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,K__namespace.default.sep).replace(/^[\\/]+/,"");s.set(d,K__namespace.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&&ht(l)&&o.push(l);}let i=a=>a.find(d=>{let l=mr(K__namespace.default.basename(d));return l!=="node.exe"&&l!=="node"})??null;return i(o)??i(r)}catch{return null}}function Bi(n,e){if(typeof e=="string")return fr(e)||null;if(!e||typeof e!="object")return null;if(n){let t=e[n],r=typeof t=="string"?fr(t):void 0;if(r)return r}for(let t of Object.values(e)){let r=typeof t=="string"?fr(t):void 0;if(r)return r}return null}function qi(n,e){if(!e)return null;let t=K__namespace.default.dirname(n),r=[K__namespace.default.resolve(t,"..",e),K__namespace.default.resolve(t,"node_modules",e)];for(let o of r){let s=K__namespace.default.join(o,"package.json");if(ht(s))try{let i=JSON.parse(hs.readFileSync(s,"utf8")),a=Bi(e,i.bin);if(!a)continue;let d=K__namespace.default.resolve(o,a);if(ht(d))return d}catch{}}return null}function zi(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:It(n.command,{cwd:o,env:t,platform:e,resolution:s}),leadingArgv:[],resolution:"direct"};let i=It(n.command,{cwd:o,env:t,platform:e,resolution:s}),a=mr(K__namespace.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=Hi(i)??qi(i,n.packageName);return d?mr(K__namespace.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 Ki(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(`${K__namespace.default.basename(n.candidate.command)} wrapper resolved, but no executable/Node entrypoint could be resolved without shell execution.`)}function Xe(n){let e=zi(n);return Ki({candidate:e,allowShellFallback:n.allowShellFallback})}function Ye(n,e){return {command:n.command,argv:[...n.leadingArgv,...e],resolution:n.resolution,shell:n.shell,windowsHide:n.windowsHide}}var yt=M(()=>{u();});function Gi(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 Vi(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 Ji(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 xo(n){let e=new Map,t;for(let s of n.split(`
2
+ `))if(s.trim())try{let i=JSON.parse(s);if(i.type!=="assistant")continue;let a=i.message,d=a?.id,l=a?.usage;if(typeof d!="string"||!l)continue;let c=Number(l.input_tokens??0),f=Number(l.cache_read_input_tokens??0);e.set(d,{inputTokens:c+f,cachedInputTokens:f});let g=a?.model;typeof g=="string"&&g&&(t=g);}catch{}if(e.size===0)return;let r=0,o=0;for(let s of e.values())r+=s.inputTokens,o+=s.cachedInputTokens;return {inputTokens:r,cachedInputTokens:o,model:t}}function be(n){if(!n||!n.trim())return;let e=null,t=null;for(let r of n.split(`
3
+ `))if(r.trim())try{let o=JSON.parse(r),s=Ji(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=Gi(o)??Vi(o);i&&(e=i);}catch{}return t||(e??void 0)}var Qe=M(()=>{u();});exports.ProviderError=void 0;var Ze,et,Ot=M(()=>{u();exports.ProviderError=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;stdout},Ze=class extends exports.ProviderError{constructor(e,t){super(e,t,{code:"TIMEOUT_IDLE",kind:"permanent"}),this.name="IdleTimeoutError";}},et=class extends exports.ProviderError{constructor(e,t){super(e,t,{code:"TIMEOUT_TOTAL",kind:"permanent"}),this.name="TotalTimeoutError";}};});exports.RateLimitError=void 0;var Xr=M(()=>{u();Ot();exports.RateLimitError=class extends exports.ProviderError{name="RateLimitError";constructor(e,t="cli/claude"){super(e,t,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function pe(n){return /crewx\s+(x|execute)\s/.test(n)}function ge(n,e){let t=e.match(/@(\S+)/);return {timestamp:n,type:"agent_call",targetAgent:t?.[1]?.replace(/["']/g,""),toolInput:e}}var wt=M(()=>{u();});function fe(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 _t=M(()=>{u();});function hr(n){if(!n)return {};let e=n.match(/^(.+?)\[([^\]]+)\]$/);if(e){let t=e[2].toLowerCase();return Xi.has(t)?{model:e[1],effort:e[2]}:{model:n}}return {model:n}}function Ao(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 Ro(n){return n?["-c",`model_reasoning_effort=${n}`]:[]}function Po(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 Co(n){return n?new Set(["low","medium","high","xhigh","max"]).has(n)?["--effort",n]:[]:[]}var Xi,Yr=M(()=>{u();Xi=new Set(["minimal","low","medium","high","xhigh","max"]);});var Qr,bo,To=M(()=>{u();Qr={claude:{models:[{id:"claude-fable-5",name:"Claude Fable 5"},{id:"claude-opus-5",name:"Claude Opus 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-opus-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:{}}},bo={version:1,providers:{"cli/codex":{model:"gpt-5.6-sol",query:{mode:"agent",effort:"high"},execute:{mode:"agent-full-access",effort:"xhigh"}},"cli/claude":{model:"claude-opus-5",query:{mode:"auto",effort:"high"},execute:{mode:"bypassPermissions",effort:"xhigh"}}}},Object.fromEntries(Object.entries(Qr).map(([n,e])=>[n,e.models]));});function Io(){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??{}}:Io()}function en(n){Zr=Object.fromEntries(Object.entries(n).map(([e,t])=>[e,Yi(t)]));}function Qi(){Zr={};}function Mt(n){So={...n};}function rt(n){return vt(n).models}function vt(n){return Zr[n]??Qr[n]??Io()}function Oo(n){return So[n]??bo.providers[n]}function Nt(n){return vt(n).modes}function Dt(n,e){let t=vt(n);return e?t.modelOverrides[e]?.effort??t.effort:t.effort}function Mo(n){return vt(n).modelOverrides}function Lt(){return rt("claude")}function tn(){return rt("codex")}function rn(){return rt("copilot")}function nn(){return rt("antigravity")}function $t(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 Zr,So,_e=M(()=>{u();To();Zr={},So={};});function ea(n){let t=n.message?.content;return Array.isArray(t)?t.map(r=>typeof r.text=="string"?r.text.trim():"").filter(Boolean).join(`
4
4
 
5
- `):""}function Ki(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=fe(s);return r==="Bash"&&pe(i)?ge(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(`
6
- `):i=JSON.stringify(s),{timestamp:n,type:"tool_result",toolUseId:o,resultPreview:i,isError:r}}return null}var qi;exports.claudeAdapter=void 0;var tn=M(()=>{u();Gr();wt();_t();Vr();_e();Qe();qi=new Set(["tool_progress"]),exports.claudeAdapter={command:"claude",meta:{displayName:"Claude",models:Dt(),capabilities:{resume:true}},buildArgs(n,e,t){let{model:r,effort:o}=mr(e.model),s=e.effort??o,i=xo(e.mode),a=Ao(s),d=r?["--model",r]:[],l=e.resumeSessionId?["--resume",e.resumeSessionId]:[];if(e.additionalArgs!==void 0){let f=[...e.additionalArgs];return f.indexOf("-p")!==-1?{args:["--output-format","stream-json","--verbose",...l,...i,...a,...d,...f],stdinMessage:n}:{args:["--output-format","stream-json","--verbose",...l,...i,...a,...d,...f],stdinMessage:n}}return {args:["-p","--output-format","stream-json","--verbose",...l,...i,...a,...d],stdinMessage:n}},extractText(n){let e=n.split(`
7
- `).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 exports.RateLimitError(`Claude rate limit: ${t.rateLimitType??"unknown"} (status: ${t.status})`)}if(e.error==="rate_limit"){let t=zi(e);return new exports.RateLimitError(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(Ki(t))return new exports.RateLimitError(`Claude rate limit: ${t}`)}}catch{}return null},parseResultMeta(n){let e=n.split(`
8
- `);for(let r of e)if(r.trim())try{let o=JSON.parse(r);if(o.type==="result"){let s=o.usage,i=s?{inputTokens:Number(s.input_tokens??0)+Number(s.cache_read_input_tokens??0),outputTokens:Number(s.output_tokens??0),cachedInputTokens:Number(s.cache_read_input_tokens??0),costUsd:Number(o.total_cost_usd??0)}:null,a=o.modelUsage,d=a?Object.keys(a)[0]??null:null;return {usage:i,model:d}}}catch{}let t=wo(n);return t?{usage:{inputTokens:t.inputTokens,outputTokens:0,cachedInputTokens:t.cachedInputTokens,costUsd:0},model:t.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!=="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?qi.has(r):!1}catch{return false}}};});var Vi,Ji;exports.copilotAdapter=void 0;var rn=M(()=>{u();Qe();wt();_t();_e();Vi=new Set(["interactive","plan","autopilot"]),Ji=new Set(["none","low","medium","high","xhigh","max"]),exports.copilotAdapter={command:"copilot",meta:{displayName:"Copilot",models:Zr()},buildArgs(n,e,t){let r=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&r.push("--model",e.model),e.mode&&Vi.has(e.mode)&&r.push("--mode",e.mode),e.effort&&Ji.has(e.effort)&&r.push("--effort",e.effort),{args:r,stdinMessage:n}},extractText(n){let e=n.split(`
9
- `).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=Te(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=fe(d);return (a==="bash"||a==="Bash")&&pe(l)?[ge(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 Yi(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 Qi(n){return n[0]==="exec"?n.slice(1):n}function Zi(n,e){let t=e.type;if(t==="command_execution"){let r=String(e.command||"");return pe(r)?[ge(n,r)]:[{timestamp:n,type:"tool_use",toolName:"Bash",toolInput:r}]}return t==="web_search"?[]:t==="file_change"?[]:[]}function ea(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=ta(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=fe(o);return r==="Bash"&&pe(s)?ge(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 ta(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=fe(o);return r==="Bash"&&pe(s)?ge(n,s):{timestamp:n,type:"tool_use",toolName:r,toolInput:s}}return null}var Xi;exports.codexAdapter=void 0;var nn=M(()=>{u();Qe();wt();_t();Vr();_e();Xi=new Set(["turn.started","turn.completed","item.updated"]);exports.codexAdapter={command:"codex",meta:{displayName:"Codex",models:Qr(),capabilities:{resume:true}},buildArgs(n,e,t){let{model:r,effort:o}=mr(e.model),s=e.effort??o,i=e.resumeSessionId?vo(e.mode):_o(e.mode),a=ko(s),d=r?["-m",r]:[],l=Qi(e.additionalArgs??[]),f=l.includes("--json")||l.includes("--experimental-json")?[]:["--json"];return e.resumeSessionId?{args:["exec","resume",...f,...i,...a,...d,...l,e.resumeSessionId,"-"],stdinMessage:n}:{args:["exec",...f,...i,...a,...d,...l],stdinMessage:n}},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==="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=Te(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=Yi(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(...Zi(t,d));continue}if(a==="item.completed"){let l=ea(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?Xi.has(r):!1}catch{return false}}};});function sa(n){return n?n==="default"||n==="build"?{agent:"build",skipPermissions:false}:n==="plan"?{agent:"plan",skipPermissions:false}:na.has(n)?{agent:"build",skipPermissions:true}:{agent:oa.has(n)?n:"build",skipPermissions:false}:{agent:void 0,skipPermissions:false}}function ia(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 ra,na,oa;exports.opencodeAdapter=void 0;var on=M(()=>{u();Qe();_t();ra=new Set(["step_start","step_finish"]),na=new Set(["bypassPermissions","yolo","agent-full-access"]),oa=new Set(["build","plan"]);exports.opencodeAdapter={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}=sa(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(`
11
- `).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=Te(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=ia(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||""),c=String(d.callID||""),f=d.state,g=String(f?.status||""),m=f?.input,w=fe(m);if(r.push({timestamp:t,type:"tool_use",toolName:l,toolUseId:c,toolInput:w}),g==="completed"&&f?.output!==void 0){let _=f.output,k=typeof _=="string"?_:JSON.stringify(_);r.push({timestamp:t,type:"tool_result",toolUseId:c,resultPreview:k,isError:false});}else g==="error"&&r.push({timestamp:t,type:"tool_result",toolUseId:c,resultPreview:String(f?.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?ra.has(r):!1}catch{return false}}};});var sn,an=M(()=>{u();Ot();_e();sn={command:"agy",meta:{displayName:"Antigravity",models:en(),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 exports.ProviderError("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 bo,To=M(()=>{u();wt();_t();bo={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=fe(a);return /^bash$/i.test(s)&&pe(d)?[ge(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=exports.BUILTIN_ADAPTERS[t];if(r?.parseEvent)return r.parseEvent(e,n);let o=aa[t];if(o?.parseEvent)return o.parseEvent(e,n)}for(let r of Object.values(exports.BUILTIN_ADAPTERS)){let o=r.parseEvent?.(e,n)??[];if(o.length>0)return o}return []}exports.BUILTIN_ADAPTERS=void 0;var aa,$e=M(()=>{u();tn();rn();nn();on();an();To();tn();rn();nn();on();an();wt();exports.BUILTIN_ADAPTERS={codex:exports.codexAdapter,claude:exports.claudeAdapter,opencode:exports.opencodeAdapter,antigravity:sn,copilot:exports.copilotAdapter},aa={gemini:bo};});var kt,dn=M(()=>{u();kt=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 Po(n,e){if(n===void 0||n==="")return e;let t=parseInt(n,10);return Number.isNaN(t)?e:t}function ln(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 So(n=process.env){return {queryMs:Po(n.CREWX_TIMEOUT_QUERY,288e5),executeMs:Po(n.CREWX_TIMEOUT_EXECUTE,288e5),idleMs:ln(n)??6e5}}var vr=M(()=>{u();});function la(n){let e=n.split(`
5
+ `):""}function ta(n){let e=n.toLowerCase();return e.includes("out of extra usage")||e.includes("rate limit")||e.includes("quota")}function ra(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=fe(s);return r==="Bash"&&pe(i)?ge(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(`
6
+ `):i=JSON.stringify(s),{timestamp:n,type:"tool_result",toolUseId:o,resultPreview:i,isError:r}}return null}var Zi;exports.claudeAdapter=void 0;var on=M(()=>{u();Xr();wt();_t();Yr();_e();Qe();Zi=new Set(["tool_progress"]),exports.claudeAdapter={command:"claude",meta:{displayName:"Claude",models:Lt(),capabilities:{resume:true}},buildArgs(n,e,t){let{model:r,effort:o}=hr(e.model),s=e.effort??o,i=Po(e.mode),a=Co(s),d=r?["--model",r]:[],l=e.resumeSessionId?["--resume",e.resumeSessionId]:[];if(e.additionalArgs!==void 0){let f=[...e.additionalArgs];return f.indexOf("-p")!==-1?{args:["--output-format","stream-json","--verbose",...l,...i,...a,...d,...f],stdinMessage:n}:{args:["--output-format","stream-json","--verbose",...l,...i,...a,...d,...f],stdinMessage:n}}return {args:["-p","--output-format","stream-json","--verbose",...l,...i,...a,...d],stdinMessage:n}},extractText(n){let e=n.split(`
7
+ `).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 exports.RateLimitError(`Claude rate limit: ${t.rateLimitType??"unknown"} (status: ${t.status})`)}if(e.error==="rate_limit"){let t=ea(e);return new exports.RateLimitError(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(ta(t))return new exports.RateLimitError(`Claude rate limit: ${t}`)}}catch{}return null},parseResultMeta(n){let e=n.split(`
8
+ `);for(let r of e)if(r.trim())try{let o=JSON.parse(r);if(o.type==="result"){let s=o.usage,i=s?{inputTokens:Number(s.input_tokens??0)+Number(s.cache_read_input_tokens??0),outputTokens:Number(s.output_tokens??0),cachedInputTokens:Number(s.cache_read_input_tokens??0),costUsd:Number(o.total_cost_usd??0)}:null,a=o.modelUsage,d=a?Object.keys(a)[0]??null:null;return {usage:i,model:d}}}catch{}let t=xo(n);return t?{usage:{inputTokens:t.inputTokens,outputTokens:0,cachedInputTokens:t.cachedInputTokens,costUsd:0},model:t.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!=="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=ra(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?Zi.has(r):!1}catch{return false}}};});var na,oa;exports.copilotAdapter=void 0;var sn=M(()=>{u();Qe();wt();_t();_e();na=new Set(["interactive","plan","autopilot"]),oa=new Set(["none","low","medium","high","xhigh","max"]),exports.copilotAdapter={command:"copilot",meta:{displayName:"Copilot",models:rn()},buildArgs(n,e,t){let r=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&r.push("--model",e.model),e.mode&&na.has(e.mode)&&r.push("--mode",e.mode),e.effort&&oa.has(e.effort)&&r.push("--effort",e.effort),{args:r,stdinMessage:n}},extractText(n){let e=n.split(`
9
+ `).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=be(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=fe(d);return (a==="bash"||a==="Bash")&&pe(l)?[ge(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 ia(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 aa(n){return n[0]==="exec"?n.slice(1):n}function da(n,e){let t=e.type;if(t==="command_execution"){let r=String(e.command||"");return pe(r)?[ge(n,r)]:[{timestamp:n,type:"tool_use",toolName:"Bash",toolInput:r}]}return t==="web_search"?[]:t==="file_change"?[]:[]}function la(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=ca(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=fe(o);return r==="Bash"&&pe(s)?ge(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 ca(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=fe(o);return r==="Bash"&&pe(s)?ge(n,s):{timestamp:n,type:"tool_use",toolName:r,toolInput:s}}return null}var sa;exports.codexAdapter=void 0;var an=M(()=>{u();Qe();wt();_t();Yr();_e();sa=new Set(["turn.started","turn.completed","item.updated"]);exports.codexAdapter={command:"codex",meta:{displayName:"Codex",models:tn(),capabilities:{resume:true}},buildArgs(n,e,t){let{model:r,effort:o}=hr(e.model),s=e.effort??o,i=e.resumeSessionId?Eo(e.mode):Ao(e.mode),a=Ro(s),d=r?["-m",r]:[],l=aa(e.additionalArgs??[]),f=l.includes("--json")||l.includes("--experimental-json")?[]:["--json"];return e.resumeSessionId?{args:["exec","resume",...f,...i,...a,...d,...l,e.resumeSessionId,"-"],stdinMessage:n}:{args:["exec",...f,...i,...a,...d,...l],stdinMessage:n}},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==="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=be(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=ia(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(...da(t,d));continue}if(a==="item.completed"){let l=la(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?sa.has(r):!1}catch{return false}}};});function fa(n){return n?n==="default"||n==="build"?{agent:"build",skipPermissions:false}:n==="plan"?{agent:"plan",skipPermissions:false}:pa.has(n)?{agent:"build",skipPermissions:true}:{agent:ga.has(n)?n:"build",skipPermissions:false}:{agent:void 0,skipPermissions:false}}function ma(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 ua,pa,ga;exports.opencodeAdapter=void 0;var dn=M(()=>{u();Qe();_t();ua=new Set(["step_start","step_finish"]),pa=new Set(["bypassPermissions","yolo","agent-full-access"]),ga=new Set(["build","plan"]);exports.opencodeAdapter={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}=fa(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(`
11
+ `).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=be(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=ma(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||""),c=String(d.callID||""),f=d.state,g=String(f?.status||""),m=f?.input,w=fe(m);if(r.push({timestamp:t,type:"tool_use",toolName:l,toolUseId:c,toolInput:w}),g==="completed"&&f?.output!==void 0){let _=f.output,k=typeof _=="string"?_:JSON.stringify(_);r.push({timestamp:t,type:"tool_result",toolUseId:c,resultPreview:k,isError:false});}else g==="error"&&r.push({timestamp:t,type:"tool_result",toolUseId:c,resultPreview:String(f?.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?ua.has(r):!1}catch{return false}}};});var ln,cn=M(()=>{u();Ot();_e();ln={command:"agy",meta:{displayName:"Antigravity",models:nn(),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 exports.ProviderError("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 No,Do=M(()=>{u();wt();_t();No={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=fe(a);return /^bash$/i.test(s)&&pe(d)?[ge(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 Ut(n,e,t){if(t){let r=exports.BUILTIN_ADAPTERS[t];if(r?.parseEvent)return r.parseEvent(e,n);let o=ha[t];if(o?.parseEvent)return o.parseEvent(e,n)}for(let r of Object.values(exports.BUILTIN_ADAPTERS)){let o=r.parseEvent?.(e,n)??[];if(o.length>0)return o}return []}exports.BUILTIN_ADAPTERS=void 0;var ha,$e=M(()=>{u();on();sn();an();dn();cn();Do();on();sn();an();dn();cn();wt();exports.BUILTIN_ADAPTERS={codex:exports.codexAdapter,claude:exports.claudeAdapter,opencode:exports.opencodeAdapter,antigravity:ln,copilot:exports.copilotAdapter},ha={gemini:No};});var kt,un=M(()=>{u();kt=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 Lo(n,e){if(n===void 0||n==="")return e;let t=parseInt(n,10);return Number.isNaN(t)?e:t}function pn(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 $o(n=process.env){return {queryMs:Lo(n.CREWX_TIMEOUT_QUERY,288e5),executeMs:Lo(n.CREWX_TIMEOUT_EXECUTE,288e5),idleMs:pn(n)??6e5}}var kr=M(()=>{u();});function wa(n){let e=n.split(`
12
12
  `).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 c of l.message.content)c.type==="text"&&typeof c.text=="string"&&c.text.trim()&&t.push(c.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 c=l.data.content;c.trim()&&o.push(c.trim());}if(l.type==="item.completed"&&(l.item?.type==="message"||l.item?.type==="agent_message")&&typeof l.item?.text=="string"){let c=l.item.text;c.trim()&&s.push(c.trim());}if(l.type==="text"&&typeof l.part?.text=="string"){let c=l.part.text;c.trim()&&i.push(c.trim());}l.type==="result"&&typeof l.result=="string"&&(a=l.result);}catch{}return t.length>0?t.join(`
13
13
 
14
14
  `):r.length>0?r.join(""):o.length>0?o.join(`
15
15
 
16
16
  `):s.length>0?s.join(`
17
17
 
18
- `):i.length>0?i.join(""):a||n.trim()}function ca(n){let e=Te(n);return e?{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0}:null}function ua(n,e,t=process.platform){return n==="copilot"&&t==="win32"&&e instanceof exports.ProviderError&&e.message.includes('CLI command "copilot" not found')}function Oo(n,e,t,r,o,s,i){return new Promise((a,d)=>{let l=o?.timeoutMs??288e5,c=o?.idleMs??6e5,f={...process.env,...o?.env??{}},g=o?.cwd??process.cwd(),m=Xe({command:n,env:f,cwd:g,allowShellFallback:true}),w=Ye(m,e),_=child_process.spawn(w.command,w.argv,{env:f,cwd:o?.cwd,stdio:["pipe","pipe","pipe"],shell:w.shell??false,windowsHide:w.windowsHide,detached:process.platform!=="win32"});_.stdin.on("error",U=>{U.code!=="EPIPE"&&o?.onOutput?.(`stdin error: ${U.message}`,"stderr");}),s!==void 0&&_.stdin.write(s),_.stdin.end(),_.pid!==void 0&&o?.onPid?.(_.pid);let k=false,y=false,v=U=>{if(_.pid!==void 0)try{process.platform==="win32"?_.kill(U):process.kill(-_.pid,U);}catch{}},A=()=>{v("SIGKILL");},b=setTimeout(()=>{k||(y=true,V?.stop(),v("SIGTERM"),setTimeout(A,Ut).unref());},l);b.unref();let V=c>0?new kt({timeoutMs:c,onIdle:()=>{if(k)return;k=true,clearTimeout(b),v("SIGTERM"),setTimeout(A,Ut).unref();let U=Math.round(c/6e4);Z(new Ze(`${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;V?.start();let $=new string_decoder.StringDecoder("utf8"),I=new string_decoder.StringDecoder("utf8"),N="",de="",Y="",D="",Z=U=>{U instanceof Error&&(U.stdout=N),d(U);};_.stdout.on("data",U=>{V?.refresh();let ne=$.write(U);N+=ne,Y+=ne;let B=Y.split(`
19
- `);Y=B.pop()??"";for(let F of B)if(F.trim()&&(o?.onOutput?.(F,"stdout"),i?.extractFailure)){let Q=i.extractFailure(F);if(Q){k=true,clearTimeout(b),V?.stop(),v("SIGTERM"),setTimeout(A,Ut).unref(),Z(Q);return}}}),_.stderr.on("data",U=>{V?.refresh();let ne=I.write(U);de+=ne,D+=ne;let B=D.split(`
20
- `);D=B.pop()??"";for(let F of B)F.trim()&&o?.onOutput?.(F,"stderr");}),_.on("error",U=>{k=true,clearTimeout(b),V?.stop(),U.code==="ENOENT"?Z(new exports.ProviderError(`CLI command "${n}" not found. Is ${t} installed?`,t)):Z(new exports.ProviderError(`Spawn error: ${U.message}`,t));}),_.on("close",(U,ne)=>{if(k)return;k=true,clearTimeout(b),V?.stop();let B=$.end(),F=I.end();B&&(N+=B,Y+=B),F&&(de+=F,D+=F),Y.trim()&&o?.onOutput?.(Y,"stdout"),D.trim()&&o?.onOutput?.(D,"stderr");let Q=U??0;if(o?.onExitCode?.(Q),y)return Z(new et(`Total runtime exceeded ${l}ms; process killed.`,t));if(ne)return Z(new exports.ProviderError(`Process terminated by signal ${ne}`,t,{code:"PROVIDER_CRASHED",kind:"permanent"}));if(Q!==0){if(i?.interpretExit){let q=i.interpretExit(Q,de);if(q){Z(q);return}}Z(new exports.ProviderError(`Process exited with code ${Q}: ${de.slice(0,500)}`,t));return}let J;try{J=i?i.extractText(N):la(N);}catch(q){Z(q instanceof Error?q:new exports.ProviderError(String(q),t));return}a({stdout:N,parsed:J});});})}function Pe(n,e){Mo.set(n,e);}function Se(n,e){let t=n.split("/");if(t.length!==2)throw new exports.ProviderError(`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=exports.BUILTIN_ADAPTERS[o];if(!i)throw new exports.ProviderError(`Unknown CLI provider id: "${o}". Supported: ${Object.keys(exports.BUILTIN_ADAPTERS).join(", ")}`,n);return new cn(o,i,n,e)}throw new exports.ProviderError(`Unsupported provider namespace: "${r}". Register a factory with registerProviderFactory('${r}', factory).`,n)}function No(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 Ut;exports.ClientToolCallRequiredError=void 0;var Mo,cn,ke=M(()=>{u();yt();Qe();$e();Ot();dn();vr();Ot();Ut=2e3;exports.ClientToolCallRequiredError=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;cn=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:c}=await this.runProcess(s,d,i);return this.handleResultMeta(l,o),c}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:c}=await this.runProcess(s,d,i);return this.handleResultMeta(l,o),c}applyAdditionalArgs(e){return No(e,this.additionalArgsProvider,{providerStr:this.providerStr,providerId:this.providerId})}composeMessage(e,t){return t?.systemPrompt?`${t.systemPrompt}
18
+ `):i.length>0?i.join(""):a||n.trim()}function _a(n){let e=be(n);return e?{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0}:null}function va(n,e,t=process.platform){return n==="copilot"&&t==="win32"&&e instanceof exports.ProviderError&&e.message.includes('CLI command "copilot" not found')}function jo(n,e,t,r,o,s,i){return new Promise((a,d)=>{let l=o?.timeoutMs??288e5,c=o?.idleMs??6e5,f={...process.env,...o?.env??{}},g=o?.cwd??process.cwd(),m=Xe({command:n,env:f,cwd:g,allowShellFallback:true}),w=Ye(m,e),_=child_process.spawn(w.command,w.argv,{env:f,cwd:o?.cwd,stdio:["pipe","pipe","pipe"],shell:w.shell??false,windowsHide:w.windowsHide,detached:process.platform!=="win32"});_.stdin.on("error",U=>{U.code!=="EPIPE"&&o?.onOutput?.(`stdin error: ${U.message}`,"stderr");}),s!==void 0&&_.stdin.write(s),_.stdin.end(),_.pid!==void 0&&o?.onPid?.(_.pid);let k=false,y=false,v=U=>{if(_.pid!==void 0)try{process.platform==="win32"?_.kill(U):process.kill(-_.pid,U);}catch{}},A=()=>{v("SIGKILL");},C=setTimeout(()=>{k||(y=true,V?.stop(),v("SIGTERM"),setTimeout(A,jt).unref());},l);C.unref();let V=c>0?new kt({timeoutMs:c,onIdle:()=>{if(k)return;k=true,clearTimeout(C),v("SIGTERM"),setTimeout(A,jt).unref();let U=Math.round(c/6e4);Z(new Ze(`${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;V?.start();let $=new string_decoder.StringDecoder("utf8"),I=new string_decoder.StringDecoder("utf8"),N="",de="",Y="",D="",Z=U=>{U instanceof Error&&(U.stdout=N),d(U);};_.stdout.on("data",U=>{V?.refresh();let ne=$.write(U);N+=ne,Y+=ne;let B=Y.split(`
19
+ `);Y=B.pop()??"";for(let F of B)if(F.trim()&&(o?.onOutput?.(F,"stdout"),i?.extractFailure)){let Q=i.extractFailure(F);if(Q){k=true,clearTimeout(C),V?.stop(),v("SIGTERM"),setTimeout(A,jt).unref(),Z(Q);return}}}),_.stderr.on("data",U=>{V?.refresh();let ne=I.write(U);de+=ne,D+=ne;let B=D.split(`
20
+ `);D=B.pop()??"";for(let F of B)F.trim()&&o?.onOutput?.(F,"stderr");}),_.on("error",U=>{k=true,clearTimeout(C),V?.stop(),U.code==="ENOENT"?Z(new exports.ProviderError(`CLI command "${n}" not found. Is ${t} installed?`,t)):Z(new exports.ProviderError(`Spawn error: ${U.message}`,t));}),_.on("close",(U,ne)=>{if(k)return;k=true,clearTimeout(C),V?.stop();let B=$.end(),F=I.end();B&&(N+=B,Y+=B),F&&(de+=F,D+=F),Y.trim()&&o?.onOutput?.(Y,"stdout"),D.trim()&&o?.onOutput?.(D,"stderr");let Q=U??0;if(o?.onExitCode?.(Q),y)return Z(new et(`Total runtime exceeded ${l}ms; process killed.`,t));if(ne)return Z(new exports.ProviderError(`Process terminated by signal ${ne}`,t,{code:"PROVIDER_CRASHED",kind:"permanent"}));if(Q!==0){if(i?.interpretExit){let q=i.interpretExit(Q,de);if(q){Z(q);return}}Z(new exports.ProviderError(`Process exited with code ${Q}: ${de.slice(0,500)}`,t));return}let J;try{J=i?i.extractText(N):wa(N);}catch(q){Z(q instanceof Error?q:new exports.ProviderError(String(q),t));return}a({stdout:N,parsed:J});});})}function Te(n,e){Wo.set(n,e);}function Se(n,e){let t=n.split("/");if(t.length!==2)throw new exports.ProviderError(`Invalid provider format: "${n}". Expected namespace/id (e.g., cli/claude)`,n);let[r,o]=t,s=Wo.get(r);if(s)return s(o,n);if(r==="cli"){let i=exports.BUILTIN_ADAPTERS[o];if(!i)throw new exports.ProviderError(`Unknown CLI provider id: "${o}". Supported: ${Object.keys(exports.BUILTIN_ADAPTERS).join(", ")}`,n);return new gn(o,i,n,e)}throw new exports.ProviderError(`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 jt;exports.ClientToolCallRequiredError=void 0;var Wo,gn,ke=M(()=>{u();yt();Qe();$e();Ot();un();kr();Ot();jt=2e3;exports.ClientToolCallRequiredError=class extends Error{constructor(t,r){super(`Client tool call required: ${t.toolName}`);this.toolCall=t;this.continuationState=r;}toolCall;continuationState;name="ClientToolCallRequiredError"},Wo=new Map;gn=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:c}=await this.runProcess(s,d,i);return this.handleResultMeta(l,o),c}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:c}=await this.runProcess(s,d,i);return this.handleResultMeta(l,o),c}applyAdditionalArgs(e){return Fo(e,this.additionalArgsProvider,{providerStr:this.providerStr,providerId:this.providerId})}composeMessage(e,t){return t?.systemPrompt?`${t.systemPrompt}
21
21
 
22
22
  ---
23
23
 
24
- ${e}`:e}async runProcess(e,t,r){try{return await Oo(this.adapter.command,e,this.providerStr,this.providerId,t,r,this.adapter)}catch(o){if(ua(this.providerId,o)){let s=e[0]==="copilot"?e:["copilot",...e];try{return await Oo("gh",s,this.providerStr,this.providerId,t,r,this.adapter)}catch(i){throw this.recoverPartialUsage(i,t),i}}throw this.recoverPartialUsage(o,t),o}}recoverPartialUsage(e,t){let r=e instanceof Error?e.stdout:void 0;typeof r=="string"&&r.length>0&&this.handleResultMeta(r,t);}handleResultMeta(e,t){if(!this.adapter.parseResultMeta){let i=ca(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 bn(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 he(n,e){try{let t=JSON.parse(n);if(t!=null&&typeof t=="object"&&typeof t.type=="string"&&Za.has(t.type)){let r=e??new Date().toISOString();return [{...t,timestamp:t.timestamp||r}]}}catch{}return []}var Za,Ue=M(()=>{u();Za=new Set(["text","tool_use","tool_result","error","running_instruction","agent_call"]);});var hs,ys;exports.VercelProviderRuntime=void 0;var Nn=M(()=>{u();ke();hs=10,ys=50,exports.VercelProviderRuntime=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??hs,ys);try{let l=0,c=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:g=>{if(l++,!!r?.onOutput){if(g.toolCalls&&g.toolCalls.length>0)for(let m of g.toolCalls)r.onOutput(JSON.stringify({type:"assistant",message:{content:[{type:"tool_use",id:m.toolCallId,name:m.toolName,input:m.args}]}}),"stdout");if(g.toolResults&&g.toolResults.length>0)for(let m of g.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");}}}}),f=new Set((r?.tools??[]).filter(g=>!g.execute).map(g=>g.name));if(c.finishReason==="tool-calls"&&Array.isArray(c.toolCalls)&&c.toolCalls.length>0){let g=c.toolCalls.filter(m=>f.has(m.toolName));if(g.length>0){let m=g[0];throw new exports.ClientToolCallRequiredError({toolCallId:m.toolCallId,toolName:m.toolName,args:m.args},{userMessage:e,responseMessages:c.response?.messages??[],toolDefinitions:r?.tools??[],maxSteps:d,systemPrompt:r?.systemPrompt,modelOverride:r?.model})}}if(r?.onUsage&&c.usage){let g={inputTokens:c.usage.promptTokens??0,outputTokens:c.usage.completionTokens??0,cachedInputTokens:0,costUsd:0};r.onUsage(g);}return r?.onModel&&r.onModel(r.model??this.config.model),c.text??""}catch(l){throw l instanceof exports.ClientToolCallRequiredError?l:l.status===401?new exports.ProviderError(`Authentication failed for ${this.config.provider}. Check your API key.`,this.config.provider):l.status===429?new exports.ProviderError(`Rate limit exceeded for ${this.config.provider}.`,this.config.provider):new exports.ProviderError(`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??hs,ys),l=[{role:"user",content:e.userMessage},...e.responseMessages,{role:"tool",content:t.map(c=>({type:"tool-result",toolCallId:c.toolCallId,toolName:c.toolName,result:typeof c.result=="string"?c.result:JSON.stringify(c.result)}))}];try{let c=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}}),f=new Set(e.toolDefinitions.filter(g=>!g.execute).map(g=>g.name));if(c.finishReason==="tool-calls"&&Array.isArray(c.toolCalls)&&c.toolCalls.length>0){let g=c.toolCalls.filter(m=>f.has(m.toolName));if(g.length>0){let m=g[0];throw new exports.ClientToolCallRequiredError({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)}))},...c.response?.messages??[]],toolDefinitions:e.toolDefinitions,maxSteps:e.maxSteps,systemPrompt:e.systemPrompt,modelOverride:e.modelOverride})}}return r?.onUsage&&c.usage&&r.onUsage({inputTokens:c.usage.promptTokens??0,outputTokens:c.usage.completionTokens??0,cachedInputTokens:0,costUsd:0}),r?.onModel&&r.onModel(e.modelOverride??this.config.model),c.text??""}catch(c){throw c instanceof exports.ClientToolCallRequiredError?c:new exports.ProviderError(`Provider error: ${c.message}`,this.config.provider)}}convertTools(e,t){let{z:r}=oe("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}=oe("@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}=oe("@ai-sdk/openai");return i({apiKey:r||process.env.OPENAI_API_KEY,...o&&{baseURL:o}})(s)}case "api/anthropic":{let{createAnthropic:i}=oe("@ai-sdk/anthropic");return i({apiKey:r||process.env.ANTHROPIC_API_KEY,...o&&{baseURL:o}})(s)}case "api/google":{let{createGoogleGenerativeAI:i}=oe("@ai-sdk/google");return i({apiKey:r||process.env.GOOGLE_API_KEY})(s)}default:throw new exports.ProviderError(`Unsupported API provider: ${t}`,t)}}};});var _s={};lr(_s,{registerApiProviders:()=>ws});function ws(n){Pe("api",(e,t)=>{let r=n?.apiKeys?.[e];return new exports.VercelProviderRuntime({provider:t,model:"",apiKey:r,maxSteps:n?.defaults?.maxSteps,temperature:n?.defaults?.temperature})});}var Dn=M(()=>{u();ke();Nn();});exports.AcpProtocolError=void 0;var Ln=M(()=>{u();exports.AcpProtocolError=class extends Error{constructor(t,r,o){super(t);this.code=r;this.data=o;}code;data;name="AcpProtocolError"};});var ol,sl,vs,ks,il;exports.AcpConnection=void 0;var Nr=M(()=>{u();yt();Ln();ke();dn();vr();ol=-32e3,sl=2e3,vs=3e4,ks=1e4,il=8*36e5,exports.AcpConnection=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 exports.ProviderError("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 y=Xe({command:t.command,env:o,cwd:s,allowShellFallback:r});i=Ye(y,t.args);}catch(y){throw new exports.ProviderError(y instanceof Error?y.message:String(y),"acp")}let a=child_process.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",y=>{let v=y.toString();this.collectedStderr+=v,this.stderrBuffer+=v;let A=this.stderrBuffer.split(`
25
- `);this.stderrBuffer=A.pop()??"";for(let T of A)T.trim()&&this.options.onStderr?.(T);}),this.proc=a;let d=this.options.idleMs??6e5;d>0&&(this.idlePromise=new Promise((y,v)=>{this.idleReject=v;}),this.idlePromise.catch(()=>{}),this.idleWatchdog=new kt({timeoutMs:d,onIdle:()=>{let y=Math.round(d/6e4),v=new Ze(`acp produced no output for ${y}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()),a.stdin.on("error",y=>{y.code!=="EPIPE"&&this.options.onStderr?.(`ACP stdin error: ${y.message}`);});let l=new WritableStream({write:y=>new Promise((v,A)=>{a.stdin.write(y,T=>{T?A(T):v();});}),close:()=>{a.stdin.end();}}),c=new ReadableStream({start:y=>{a.stdout.on("data",v=>{this.idleWatchdog?.refresh(),y.enqueue(new Uint8Array(v));}),a.stdout.on("end",()=>{y.close();}),a.stdout.on("error",v=>{y.error(v);});}}),f=sdk.ndJsonStream(l,c),g=this,m=new sdk.ClientSideConnection(y=>({requestPermission:async v=>{if(g.options.configOptions?.allow_all!==void 0){let A=v.options;if(Array.isArray(A)&&A.length>0)return {outcome:{outcome:"selected",optionId:(A.find(b=>b.kind==="allow_once")??A.find(b=>b.kind?.startsWith("allow_"))??A[0]).optionId}}}return {outcome:{outcome:"cancelled"}}},sessionUpdate:async v=>{g.pendingUpdateCallback?.(v);}}),f);this.sdkConnection=m;let w=new Promise((y,v)=>{a.on("error",A=>{if(A.code==="ENOENT"){let b=t.command==="npx"&&t.args.length>0?`@agentclientprotocol/${t.args[0]}`:t.command;v(new exports.ProviderError(`ACP command "${t.command}" not found. Is the ACP adapter installed? Try: npm install -g ${b}`,"acp"));}else v(new exports.ProviderError(`ACP spawn error: ${A.message}`,"acp"));});}),_=this.doInitialize(m,e),k=new Promise((y,v)=>{setTimeout(()=>{v(new exports.AcpProtocolError(`ACP connect timeout after ${vs}ms. The ACP adapter may not be installed or may require interactive setup.`));},vs).unref();});await Promise.race([_,k,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 exports.ProviderError("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 exports.ProviderError("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 exports.AcpProtocolError(`ACP session/new timeout after ${ks}ms`));},ks).unref();});return Promise.race([t,r])}isAuthError(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code===ol}async tryAuthenticate(){if(!this.sdkConnection)throw new exports.ProviderError("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 exports.AcpProtocolError(`ACP authentication required. Missing environment variables: ${o.join(", ")}. Set them in your shell or crewx.yaml env block.`)}throw new exports.AcpProtocolError(`ACP authentication required but no supported method found. Available methods: ${t}. CrewX currently supports env_var authentication only.`)}throw new exports.AcpProtocolError("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 exports.ProviderError("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 exports.ProviderError("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 exports.ProviderError("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 exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");this.pendingUpdateCallback=r??null;let s=this.sdkConnection,i=this.proc,a=o??il,d=false,l=s.prompt({sessionId:e,prompt:t}).finally(()=>{d=true;}),c=new Promise((m,w)=>{setTimeout(()=>{s.cancel({sessionId:e}).catch(()=>{}),w(new et(`ACP prompt timeout after ${a}ms`,"acp"));},a).unref();}),f=new Promise((m,w)=>{let _=(A,T,b)=>{if(d)return;let V=T!=null?`signal=${T}`:`code=${String(A)}`;w(new exports.ProviderError(`ACP process terminated unexpectedly (${V}) [${b}]: ${this.collectedStderr.slice(-500)}`,"acp"));},k=(A,T)=>_(A,T,"exit"),y=(A,T)=>_(A,T,"close");i.once("exit",k),i.once("close",y);let v=()=>{i.off("exit",k),i.off("close",y);};l.then(v,v);}),g=[l,c,f];this.idlePromise&&g.push(this.idlePromise);try{return await Promise.race(g)}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");},sl);});}get isConnected(){return !this.disposed&&this.sdkConnection!==null&&this.proc!==null}};});function xs(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 al;exports.AcpProviderRuntime=void 0;var $n=M(()=>{u();Ue();Nr();al={read:"Read",edit:"Edit",delete:"Delete",move:"Move",search:"Search",execute:"Bash",think:"Think",fetch:"WebFetch",switch_mode:"SwitchMode"};exports.AcpProviderRuntime=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 exports.AcpConnection({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 c=this.composePrompt(e,t),f=[],g=await a.prompt(l,c,m=>this.handleUpdate(m,t,f),t?.timeoutMs);return this.handleUsage(g,t),f.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(`
24
+ ${e}`:e}async runProcess(e,t,r){try{return await jo(this.adapter.command,e,this.providerStr,this.providerId,t,r,this.adapter)}catch(o){if(va(this.providerId,o)){let s=e[0]==="copilot"?e:["copilot",...e];try{return await jo("gh",s,this.providerStr,this.providerId,t,r,this.adapter)}catch(i){throw this.recoverPartialUsage(i,t),i}}throw this.recoverPartialUsage(o,t),o}}recoverPartialUsage(e,t){let r=e instanceof Error?e.stdout:void 0;typeof r=="string"&&r.length>0&&this.handleResultMeta(r,t);}handleResultMeta(e,t){if(!this.adapter.parseResultMeta){let i=_a(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 Sn(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 he(n,e){try{let t=JSON.parse(n);if(t!=null&&typeof t=="object"&&typeof t.type=="string"&&dd.has(t.type)){let r=e??new Date().toISOString();return [{...t,timestamp:t.timestamp||r}]}}catch{}return []}var dd,Ue=M(()=>{u();dd=new Set(["text","tool_use","tool_result","error","running_instruction","agent_call"]);});var As,Es;exports.VercelProviderRuntime=void 0;var $n=M(()=>{u();ke();As=10,Es=50,exports.VercelProviderRuntime=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??As,Es);try{let l=0,c=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:g=>{if(l++,!!r?.onOutput){if(g.toolCalls&&g.toolCalls.length>0)for(let m of g.toolCalls)r.onOutput(JSON.stringify({type:"assistant",message:{content:[{type:"tool_use",id:m.toolCallId,name:m.toolName,input:m.args}]}}),"stdout");if(g.toolResults&&g.toolResults.length>0)for(let m of g.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");}}}}),f=new Set((r?.tools??[]).filter(g=>!g.execute).map(g=>g.name));if(c.finishReason==="tool-calls"&&Array.isArray(c.toolCalls)&&c.toolCalls.length>0){let g=c.toolCalls.filter(m=>f.has(m.toolName));if(g.length>0){let m=g[0];throw new exports.ClientToolCallRequiredError({toolCallId:m.toolCallId,toolName:m.toolName,args:m.args},{userMessage:e,responseMessages:c.response?.messages??[],toolDefinitions:r?.tools??[],maxSteps:d,systemPrompt:r?.systemPrompt,modelOverride:r?.model})}}if(r?.onUsage&&c.usage){let g={inputTokens:c.usage.promptTokens??0,outputTokens:c.usage.completionTokens??0,cachedInputTokens:0,costUsd:0};r.onUsage(g);}return r?.onModel&&r.onModel(r.model??this.config.model),c.text??""}catch(l){throw l instanceof exports.ClientToolCallRequiredError?l:l.status===401?new exports.ProviderError(`Authentication failed for ${this.config.provider}. Check your API key.`,this.config.provider):l.status===429?new exports.ProviderError(`Rate limit exceeded for ${this.config.provider}.`,this.config.provider):new exports.ProviderError(`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??As,Es),l=[{role:"user",content:e.userMessage},...e.responseMessages,{role:"tool",content:t.map(c=>({type:"tool-result",toolCallId:c.toolCallId,toolName:c.toolName,result:typeof c.result=="string"?c.result:JSON.stringify(c.result)}))}];try{let c=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}}),f=new Set(e.toolDefinitions.filter(g=>!g.execute).map(g=>g.name));if(c.finishReason==="tool-calls"&&Array.isArray(c.toolCalls)&&c.toolCalls.length>0){let g=c.toolCalls.filter(m=>f.has(m.toolName));if(g.length>0){let m=g[0];throw new exports.ClientToolCallRequiredError({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)}))},...c.response?.messages??[]],toolDefinitions:e.toolDefinitions,maxSteps:e.maxSteps,systemPrompt:e.systemPrompt,modelOverride:e.modelOverride})}}return r?.onUsage&&c.usage&&r.onUsage({inputTokens:c.usage.promptTokens??0,outputTokens:c.usage.completionTokens??0,cachedInputTokens:0,costUsd:0}),r?.onModel&&r.onModel(e.modelOverride??this.config.model),c.text??""}catch(c){throw c instanceof exports.ClientToolCallRequiredError?c:new exports.ProviderError(`Provider error: ${c.message}`,this.config.provider)}}convertTools(e,t){let{z:r}=oe("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}=oe("@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}=oe("@ai-sdk/openai");return i({apiKey:r||process.env.OPENAI_API_KEY,...o&&{baseURL:o}})(s)}case "api/anthropic":{let{createAnthropic:i}=oe("@ai-sdk/anthropic");return i({apiKey:r||process.env.ANTHROPIC_API_KEY,...o&&{baseURL:o}})(s)}case "api/google":{let{createGoogleGenerativeAI:i}=oe("@ai-sdk/google");return i({apiKey:r||process.env.GOOGLE_API_KEY})(s)}default:throw new exports.ProviderError(`Unsupported API provider: ${t}`,t)}}};});var Ps={};cr(Ps,{registerApiProviders:()=>Rs});function Rs(n){Te("api",(e,t)=>{let r=n?.apiKeys?.[e];return new exports.VercelProviderRuntime({provider:t,model:"",apiKey:r,maxSteps:n?.defaults?.maxSteps,temperature:n?.defaults?.temperature})});}var Un=M(()=>{u();ke();$n();});exports.AcpProtocolError=void 0;var jn=M(()=>{u();exports.AcpProtocolError=class extends Error{constructor(t,r,o){super(t);this.code=r;this.data=o;}code;data;name="AcpProtocolError"};});var gl,fl,Cs,bs,ml;exports.AcpConnection=void 0;var Dr=M(()=>{u();yt();jn();ke();un();kr();gl=-32e3,fl=2e3,Cs=3e4,bs=1e4,ml=8*36e5,exports.AcpConnection=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 exports.ProviderError("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 y=Xe({command:t.command,env:o,cwd:s,allowShellFallback:r});i=Ye(y,t.args);}catch(y){throw new exports.ProviderError(y instanceof Error?y.message:String(y),"acp")}let a=child_process.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",y=>{let v=y.toString();this.collectedStderr+=v,this.stderrBuffer+=v;let A=this.stderrBuffer.split(`
25
+ `);this.stderrBuffer=A.pop()??"";for(let b of A)b.trim()&&this.options.onStderr?.(b);}),this.proc=a;let d=this.options.idleMs??6e5;d>0&&(this.idlePromise=new Promise((y,v)=>{this.idleReject=v;}),this.idlePromise.catch(()=>{}),this.idleWatchdog=new kt({timeoutMs:d,onIdle:()=>{let y=Math.round(d/6e4),v=new Ze(`acp produced no output for ${y}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()),a.stdin.on("error",y=>{y.code!=="EPIPE"&&this.options.onStderr?.(`ACP stdin error: ${y.message}`);});let l=new WritableStream({write:y=>new Promise((v,A)=>{a.stdin.write(y,b=>{b?A(b):v();});}),close:()=>{a.stdin.end();}}),c=new ReadableStream({start:y=>{a.stdout.on("data",v=>{this.idleWatchdog?.refresh(),y.enqueue(new Uint8Array(v));}),a.stdout.on("end",()=>{y.close();}),a.stdout.on("error",v=>{y.error(v);});}}),f=sdk.ndJsonStream(l,c),g=this,m=new sdk.ClientSideConnection(y=>({requestPermission:async v=>{if(g.options.configOptions?.allow_all!==void 0){let A=v.options;if(Array.isArray(A)&&A.length>0)return {outcome:{outcome:"selected",optionId:(A.find(C=>C.kind==="allow_once")??A.find(C=>C.kind?.startsWith("allow_"))??A[0]).optionId}}}return {outcome:{outcome:"cancelled"}}},sessionUpdate:async v=>{g.pendingUpdateCallback?.(v);}}),f);this.sdkConnection=m;let w=new Promise((y,v)=>{a.on("error",A=>{if(A.code==="ENOENT"){let C=t.command==="npx"&&t.args.length>0?`@agentclientprotocol/${t.args[0]}`:t.command;v(new exports.ProviderError(`ACP command "${t.command}" not found. Is the ACP adapter installed? Try: npm install -g ${C}`,"acp"));}else v(new exports.ProviderError(`ACP spawn error: ${A.message}`,"acp"));});}),_=this.doInitialize(m,e),k=new Promise((y,v)=>{setTimeout(()=>{v(new exports.AcpProtocolError(`ACP connect timeout after ${Cs}ms. The ACP adapter may not be installed or may require interactive setup.`));},Cs).unref();});await Promise.race([_,k,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 exports.ProviderError("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 exports.ProviderError("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 exports.AcpProtocolError(`ACP session/new timeout after ${bs}ms`));},bs).unref();});return Promise.race([t,r])}isAuthError(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code===gl}async tryAuthenticate(){if(!this.sdkConnection)throw new exports.ProviderError("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 exports.AcpProtocolError(`ACP authentication required. Missing environment variables: ${o.join(", ")}. Set them in your shell or crewx.yaml env block.`)}throw new exports.AcpProtocolError(`ACP authentication required but no supported method found. Available methods: ${t}. CrewX currently supports env_var authentication only.`)}throw new exports.AcpProtocolError("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 exports.ProviderError("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 exports.ProviderError("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 exports.ProviderError("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 exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");this.pendingUpdateCallback=r??null;let s=this.sdkConnection,i=this.proc,a=o??ml,d=false,l=s.prompt({sessionId:e,prompt:t}).finally(()=>{d=true;}),c=new Promise((m,w)=>{setTimeout(()=>{s.cancel({sessionId:e}).catch(()=>{}),w(new et(`ACP prompt timeout after ${a}ms`,"acp"));},a).unref();}),f=new Promise((m,w)=>{let _=(A,b,C)=>{if(d)return;let V=b!=null?`signal=${b}`:`code=${String(A)}`;w(new exports.ProviderError(`ACP process terminated unexpectedly (${V}) [${C}]: ${this.collectedStderr.slice(-500)}`,"acp"));},k=(A,b)=>_(A,b,"exit"),y=(A,b)=>_(A,b,"close");i.once("exit",k),i.once("close",y);let v=()=>{i.off("exit",k),i.off("close",y);};l.then(v,v);}),g=[l,c,f];this.idlePromise&&g.push(this.idlePromise);try{return await Promise.race(g)}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");},fl);});}get isConnected(){return !this.disposed&&this.sdkConnection!==null&&this.proc!==null}};});function Ts(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 hl;exports.AcpProviderRuntime=void 0;var Wn=M(()=>{u();Ue();Dr();hl={read:"Read",edit:"Edit",delete:"Delete",move:"Move",search:"Search",execute:"Bash",think:"Think",fetch:"WebFetch",switch_mode:"SwitchMode"};exports.AcpProviderRuntime=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 exports.AcpConnection({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 c=this.composePrompt(e,t),f=[],g=await a.prompt(l,c,m=>this.handleUpdate(m,t,f),t?.timeoutMs);return this.handleUsage(g,t),f.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(`
26
26
 
27
- `)}]}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=bn(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),c={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:l.toolName,toolInput:l.toolInput};t?.onTaskLog?.([c]);}}else o.sessionUpdate;}pushBlockBoundary(e){e.length===0||e[e.length-1].endsWith(`
27
+ `)}]}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=Sn(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),c={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:l.toolName,toolInput:l.toolInput};t?.onTaskLog?.([c]);}}else o.sessionUpdate;}pushBlockBoundary(e){e.length===0||e[e.length-1].endsWith(`
28
28
 
29
29
  `)||e.push(`
30
30
 
31
- `);}resolveToolCall(e){let t=e._meta;if(t?.claudeCode?.toolName)return {toolName:t.claudeCode.toolName,toolInput:xs(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=al[e.kind??""]??e.title??"unknown",o=xs(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(`
32
- `)}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});}};});exports.claudeAcpAdapter=void 0;var Un=M(()=>{u();Ue();exports.claudeAcpAdapter={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:he};});exports.codexAcpAdapter=void 0;var jn=M(()=>{u();Ue();exports.codexAcpAdapter={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:he};});var Ct;exports.copilotAcpAdapter=void 0;var Wn=M(()=>{u();Ue();Ct="https://agentclientprotocol.com/protocol/session-modes",exports.copilotAcpAdapter={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?K.resolve(n.cwd):process.cwd(),mcpServers:[]}},yoloModeId:`${Ct}#autopilot`,buildEffortAction(n){return n?{type:"set_config_option",configId:"reasoning_effort",value:n}:null},resolveMode(n){return n.startsWith("https://")?n:{yolo:`${Ct}#autopilot`,default:`${Ct}#agent`,agent:`${Ct}#agent`,plan:`${Ct}#plan`,autopilot:`${Ct}#autopilot`}[n]??null},parseEvent:he};});exports.opencodeAcpAdapter=void 0;var Fn=M(()=>{u();Ue();exports.opencodeAcpAdapter={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:he};});exports.ACP_ADAPTERS=void 0;var jr=M(()=>{u();Un();jn();Wn();Fn();Un();jn();Wn();Fn();exports.ACP_ADAPTERS={codex:exports.codexAcpAdapter,claude:exports.claudeAcpAdapter,opencode:exports.opencodeAcpAdapter,copilot:exports.copilotAcpAdapter};});var Es={};lr(Es,{registerAcpProviders:()=>As});function As(n){if(n){Pe("acp",n);return}Pe("acp",(e,t)=>{let r=exports.ACP_ADAPTERS[e];if(!r)throw new exports.ProviderError(`Unknown ACP provider id: "${e}". Supported: ${Object.keys(exports.ACP_ADAPTERS).join(", ")}`,t);return new exports.AcpProviderRuntime(e,r,t)});}var Hn=M(()=>{u();ke();$n();jr();ke();});function ll(n){if(!n)return n;let e=n.trim().replace(/\/+$/,"");return e.toLowerCase().endsWith("/mcp")?e.slice(0,-4):e}exports.McpHttpTransport=void 0;var Bn=M(()=>{u();exports.McpHttpTransport=class{endpoint;headers;timeoutMs;constructor(e){let t=ll(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(){}};});exports.RemoteAgentManager=void 0;var qn=M(()=>{u();Bn();exports.RemoteAgentManager=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 exports.McpHttpTransport({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 Cs={};lr(Cs,{RemoteProviderRuntime:()=>exports.RemoteProviderRuntime,createRemoteProviderFactory:()=>Rs,resolveFileRemoteAgent:()=>yl});function ml(n){let e=ls.readFileSync(n,"utf-8"),t=jsYaml.load(e);return {agents:Array.isArray(t?.agents)?t.agents:void 0}}function hl(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 yl(n,e=ml,t=ls.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=hl(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=K.resolve(K.dirname(r),s.working_directory??".");return {agent:{...s,working_directory:a},provider:i}}function Rs(n,e=Se){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 exports.RemoteProviderRuntime(t,o,e)}}function wl(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}}exports.RemoteProviderRuntime=void 0;var zn=M(()=>{u();ke();qn();exports.RemoteProviderRuntime=class{manager;agentId;constructor(e,t,r=Se){this.agentId=t.external_agent_id??e,this.manager=new exports.RemoteAgentManager;let o=wl(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(`
31
+ `);}resolveToolCall(e){let t=e._meta;if(t?.claudeCode?.toolName)return {toolName:t.claudeCode.toolName,toolInput:Ts(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=hl[e.kind??""]??e.title??"unknown",o=Ts(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(`
32
+ `)}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});}};});exports.claudeAcpAdapter=void 0;var Fn=M(()=>{u();Ue();exports.claudeAcpAdapter={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:he};});exports.codexAcpAdapter=void 0;var Hn=M(()=>{u();Ue();exports.codexAcpAdapter={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:he};});var Pt;exports.copilotAcpAdapter=void 0;var Bn=M(()=>{u();Ue();Pt="https://agentclientprotocol.com/protocol/session-modes",exports.copilotAcpAdapter={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?K.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:he};});exports.opencodeAcpAdapter=void 0;var qn=M(()=>{u();Ue();exports.opencodeAcpAdapter={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:he};});exports.ACP_ADAPTERS=void 0;var Wr=M(()=>{u();Fn();Hn();Bn();qn();Fn();Hn();Bn();qn();exports.ACP_ADAPTERS={codex:exports.codexAcpAdapter,claude:exports.claudeAcpAdapter,opencode:exports.opencodeAcpAdapter,copilot:exports.copilotAcpAdapter};});var Is={};cr(Is,{registerAcpProviders:()=>Ss});function Ss(n){if(n){Te("acp",n);return}Te("acp",(e,t)=>{let r=exports.ACP_ADAPTERS[e];if(!r)throw new exports.ProviderError(`Unknown ACP provider id: "${e}". Supported: ${Object.keys(exports.ACP_ADAPTERS).join(", ")}`,t);return new exports.AcpProviderRuntime(e,r,t)});}var zn=M(()=>{u();ke();Wn();Wr();ke();});function wl(n){if(!n)return n;let e=n.trim().replace(/\/+$/,"");return e.toLowerCase().endsWith("/mcp")?e.slice(0,-4):e}exports.McpHttpTransport=void 0;var Kn=M(()=>{u();exports.McpHttpTransport=class{endpoint;headers;timeoutMs;constructor(e){let t=wl(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(){}};});exports.RemoteAgentManager=void 0;var Gn=M(()=>{u();Kn();exports.RemoteAgentManager=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 exports.McpHttpTransport({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 Ms={};cr(Ms,{RemoteProviderRuntime:()=>exports.RemoteProviderRuntime,createRemoteProviderFactory:()=>Os,resolveFileRemoteAgent:()=>Pl});function El(n){let e=hs.readFileSync(n,"utf-8"),t=jsYaml.load(e);return {agents:Array.isArray(t?.agents)?t.agents:void 0}}function Rl(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 Pl(n,e=El,t=hs.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=Rl(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=K.resolve(K.dirname(r),s.working_directory??".");return {agent:{...s,working_directory:a},provider:i}}function Os(n,e=Se){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 exports.RemoteProviderRuntime(t,o,e)}}function Cl(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}}exports.RemoteProviderRuntime=void 0;var Vn=M(()=>{u();ke();Gn();exports.RemoteProviderRuntime=class{manager;agentId;constructor(e,t,r=Se){this.agentId=t.external_agent_id??e,this.manager=new exports.RemoteAgentManager;let o=Cl(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(`
33
33
  `)}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(`
34
- `)}};});var Ss={};lr(Ss,{PluginProviderRuntime:()=>exports.PluginProviderRuntime,createPluginProviderFactory:()=>Ps});function Ps(n){return (e,t)=>{let r=n.get(e);if(!r)throw new exports.ProviderError(`Plugin provider "${e}" not found. Available: ${Array.from(n.keys()).join(", ")||"(none)"}`,`plugin/${e}`);return new exports.PluginProviderRuntime(e,r)}}function bs(n,e,t,r){let o=n.map(s=>s.replace(/\{model\}/g,e));return r&&o.push(t),o}function vl(n){if(!n||typeof n!="string")throw new Error("Plugin provider requires a cli_command")}function Ts(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 kl(n){for(let{pattern:e}of n)if(typeof e!="string")throw new Error("Error pattern must be a string")}function xl(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")}exports.PluginProviderRuntime=void 0;var Kn=M(()=>{u();ke();yt();exports.PluginProviderRuntime=class{constructor(e,t){this.config=t;this.providerStr=`plugin/${e}`,vl(t.cli_command),Ts(t.query_args),Ts(t.execute_args),t.error_patterns&&kl(t.error_patterns),t.env&&xl(t.env);}config;providerStr;async query(e,t){let r=t?.model??this.config.default_model??"default",o=bs(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=bs(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=Xe({command:this.config.cli_command,env:a,cwd:process.cwd(),resolution:this.config.prefer_local_bin?"local_first":"global_first",allowShellFallback:true}),l=Ye(d,e),c=child_process.spawn(l.command,l.argv,{env:a,shell:l.shell??false,stdio:["pipe","pipe","pipe"],windowsHide:l.windowsHide});r!==void 0&&c.stdin.write(r),c.stdin.end(),c.pid!==void 0&&t?.onPid?.(c.pid);let f="",g="",m="",w="";c.stdout.on("data",k=>{let y=k.toString();f+=y,m+=y;let v=m.split(`
34
+ `)}};});var $s={};cr($s,{PluginProviderRuntime:()=>exports.PluginProviderRuntime,createPluginProviderFactory:()=>Ls});function Ls(n){return (e,t)=>{let r=n.get(e);if(!r)throw new exports.ProviderError(`Plugin provider "${e}" not found. Available: ${Array.from(n.keys()).join(", ")||"(none)"}`,`plugin/${e}`);return new exports.PluginProviderRuntime(e,r)}}function Ns(n,e,t,r){let o=n.map(s=>s.replace(/\{model\}/g,e));return r&&o.push(t),o}function Tl(n){if(!n||typeof n!="string")throw new Error("Plugin provider requires a cli_command")}function Ds(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 Sl(n){for(let{pattern:e}of n)if(typeof e!="string")throw new Error("Error pattern must be a string")}function Il(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")}exports.PluginProviderRuntime=void 0;var Jn=M(()=>{u();ke();yt();exports.PluginProviderRuntime=class{constructor(e,t){this.config=t;this.providerStr=`plugin/${e}`,Tl(t.cli_command),Ds(t.query_args),Ds(t.execute_args),t.error_patterns&&Sl(t.error_patterns),t.env&&Il(t.env);}config;providerStr;async query(e,t){let r=t?.model??this.config.default_model??"default",o=Ns(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=Ns(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=Xe({command:this.config.cli_command,env:a,cwd:process.cwd(),resolution:this.config.prefer_local_bin?"local_first":"global_first",allowShellFallback:true}),l=Ye(d,e),c=child_process.spawn(l.command,l.argv,{env:a,shell:l.shell??false,stdio:["pipe","pipe","pipe"],windowsHide:l.windowsHide});r!==void 0&&c.stdin.write(r),c.stdin.end(),c.pid!==void 0&&t?.onPid?.(c.pid);let f="",g="",m="",w="";c.stdout.on("data",k=>{let y=k.toString();f+=y,m+=y;let v=m.split(`
35
35
  `);m=v.pop()??"";for(let A of v)A.trim()&&t?.onOutput?.(A,"stdout");}),c.stderr.on("data",k=>{let y=k.toString();g+=y,w+=y;let v=w.split(`
36
- `);w=v.pop()??"";for(let A of v)A.trim()&&t?.onOutput?.(A,"stderr");});let _=setTimeout(()=>{c.kill("SIGTERM"),i(new exports.ProviderError(`Plugin provider "${this.providerStr}" timed out after ${o}ms`,this.providerStr));},o);c.on("error",k=>{if(clearTimeout(_),k.code==="ENOENT"){let y=this.config.not_installed_message??`CLI command "${this.config.cli_command}" not found. Is ${this.config.id} installed?`;i(new exports.ProviderError(y,this.providerStr));}else i(new exports.ProviderError(`Spawn error: ${k.message}`,this.providerStr));}),c.on("close",k=>{clearTimeout(_),m.trim()&&t?.onOutput?.(m,"stdout"),w.trim()&&t?.onOutput?.(w,"stderr");let y=k??0;if(t?.onExitCode?.(y),this.config.error_patterns){let v=g||f;for(let A of this.config.error_patterns)if(v.includes(A.pattern)){i(new exports.ProviderError(A.message,this.providerStr));return}}if(k!==0){i(new exports.ProviderError(`Process exited with code ${k}: ${g.slice(0,500)}`,this.providerStr));return}s(f.trim());});})}};});u();u();u();function yi(n){let e=o=>o.replace(/[.+^${}()|[\]\\]/g,"\\$&"),r=n.split("/").map(o=>o==="**"?".*":o.split("*").map(e).join("[^/]*"));return new RegExp(`^${r.join("\\/")}$`)}function we(n,e){try{return yi(e).test(n)}catch{return false}}u();u();var wi=zod.z.object({model:zod.z.string().optional(),system_prompt:zod.z.string().optional(),prompt:zod.z.string().optional(),layout:zod.z.union([zod.z.string(),zod.z.object({id:zod.z.string(),props:zod.z.record(zod.z.unknown()).optional()}),zod.z.object({props:zod.z.record(zod.z.unknown())}),zod.z.object({template:zod.z.string()})]).optional()}).catchall(zod.z.unknown()),fo=zod.z.object({include:zod.z.array(zod.z.string()).optional()}).optional(),_i=zod.z.object({id:zod.z.string(),name:zod.z.string().optional(),role:zod.z.string().optional(),team:zod.z.string().optional(),provider:zod.z.union([zod.z.string(),zod.z.array(zod.z.string())]),working_directory:zod.z.string().optional(),description:zod.z.string().optional(),tags:zod.z.array(zod.z.string()).optional(),inline:wi.optional(),skills:fo}).catchall(zod.z.unknown()),vi=zod.z.object({id:zod.z.string(),name:zod.z.string(),workflow_id:zod.z.string(),description:zod.z.string().optional(),goal_id:zod.z.string().optional()}),ki=zod.z.object({bin_resolution:zod.z.enum(["global_first","local_first"]).optional(),wi:zod.z.object({boards:zod.z.array(zod.z.unknown()).optional().catch(()=>{})}).catchall(zod.z.unknown()).optional().catch(()=>{})}).catchall(zod.z.unknown()),mo=zod.z.object({agents:zod.z.array(_i).optional(),hooks:zod.z.array(zod.z.unknown()).optional(),settings:ki.optional(),skills:zod.z.unknown().optional(),layouts:zod.z.record(zod.z.unknown()).optional(),documents:zod.z.record(zod.z.unknown()).optional()}).catchall(zod.z.unknown());var Ge=class extends Error{constructor(t,r){super(t);this.cause=r;this.name="ConfigLoadError";}cause};function cr(n){if(!n||typeof n!="string"||!n.trim())throw new Ge("YAML content must be a non-empty string");let e;try{e=jsYaml.load(n);}catch(o){throw new Ge(`YAML parse error: ${o.message}`,o)}let t=Ei(e),r=mo.safeParse(t);if(!r.success)throw new Ge(`Config validation error: ${r.error.message}`);return r.data}function ur(n){let e;try{e=ls.readFileSync(n,"utf-8");}catch(t){throw new Ge(`Cannot read file: ${n}`,t)}return cr(e)}function Ei(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}}u();var Ve=K.join("templates","agents"),Je=K.join("templates","workflows");function ho(){try{let e=(typeof oe=="function"?oe:module$1.createRequire(typeof __filename<"u"?__filename:process.cwd()+"/")).resolve("@crewx/sdk/package.json");return K.dirname(e)}catch{return null}}function mt(n){if(n&&ls.existsSync(n))return n;let e=process.env.CREWX_SDK_TEMPLATES_PATH;if(e&&ls.existsSync(e))return e;let t=ho();if(t){let o=K.join(t,Ve);if(ls.existsSync(o))return o}let r=[K.join(__dirname,"..",Ve),K.join(__dirname,"..","..",Ve),K.join(__dirname,"..","..","..",Ve),K.join(process.cwd(),"packages","sdk",Ve),K.join(process.cwd(),Ve)];for(let o of r)if(ls.existsSync(o))return o;throw new Error(`[@crewx/sdk] Templates directory not found.
36
+ `);w=v.pop()??"";for(let A of v)A.trim()&&t?.onOutput?.(A,"stderr");});let _=setTimeout(()=>{c.kill("SIGTERM"),i(new exports.ProviderError(`Plugin provider "${this.providerStr}" timed out after ${o}ms`,this.providerStr));},o);c.on("error",k=>{if(clearTimeout(_),k.code==="ENOENT"){let y=this.config.not_installed_message??`CLI command "${this.config.cli_command}" not found. Is ${this.config.id} installed?`;i(new exports.ProviderError(y,this.providerStr));}else i(new exports.ProviderError(`Spawn error: ${k.message}`,this.providerStr));}),c.on("close",k=>{clearTimeout(_),m.trim()&&t?.onOutput?.(m,"stdout"),w.trim()&&t?.onOutput?.(w,"stderr");let y=k??0;if(t?.onExitCode?.(y),this.config.error_patterns){let v=g||f;for(let A of this.config.error_patterns)if(v.includes(A.pattern)){i(new exports.ProviderError(A.message,this.providerStr));return}}if(k!==0){i(new exports.ProviderError(`Process exited with code ${k}: ${g.slice(0,500)}`,this.providerStr));return}s(f.trim());});})}};});u();u();u();function Pi(n){let e=o=>o.replace(/[.+^${}()|[\]\\]/g,"\\$&"),r=n.split("/").map(o=>o==="**"?".*":o.split("*").map(e).join("[^/]*"));return new RegExp(`^${r.join("\\/")}$`)}function we(n,e){try{return Pi(e).test(n)}catch{return false}}u();u();var Ci=zod.z.object({model:zod.z.string().optional(),system_prompt:zod.z.string().optional(),prompt:zod.z.string().optional(),layout:zod.z.union([zod.z.string(),zod.z.object({id:zod.z.string(),props:zod.z.record(zod.z.unknown()).optional()}),zod.z.object({props:zod.z.record(zod.z.unknown())}),zod.z.object({template:zod.z.string()})]).optional()}).catchall(zod.z.unknown()),wo=zod.z.object({include:zod.z.array(zod.z.string()).optional()}).optional(),bi=zod.z.object({id:zod.z.string(),name:zod.z.string().optional(),role:zod.z.string().optional(),team:zod.z.string().optional(),provider:zod.z.union([zod.z.string(),zod.z.array(zod.z.string())]),working_directory:zod.z.string().optional(),description:zod.z.string().optional(),tags:zod.z.array(zod.z.string()).optional(),inline:Ci.optional(),skills:wo}).catchall(zod.z.unknown()),Ti=zod.z.object({id:zod.z.string(),name:zod.z.string(),workflow_id:zod.z.string(),description:zod.z.string().optional(),goal_id:zod.z.string().optional()}),Si=zod.z.object({bin_resolution:zod.z.enum(["global_first","local_first"]).optional(),wi:zod.z.object({boards:zod.z.array(zod.z.unknown()).optional().catch(()=>{})}).catchall(zod.z.unknown()).optional().catch(()=>{})}).catchall(zod.z.unknown()),_o=zod.z.object({agents:zod.z.array(bi).optional(),hooks:zod.z.array(zod.z.unknown()).optional(),settings:Si.optional(),skills:zod.z.unknown().optional(),layouts:zod.z.record(zod.z.unknown()).optional(),documents:zod.z.record(zod.z.unknown()).optional()}).catchall(zod.z.unknown());var Ge=class extends Error{constructor(t,r){super(t);this.cause=r;this.name="ConfigLoadError";}cause};function ur(n){if(!n||typeof n!="string"||!n.trim())throw new Ge("YAML content must be a non-empty string");let e;try{e=jsYaml.load(n);}catch(o){throw new Ge(`YAML parse error: ${o.message}`,o)}let t=Mi(e),r=_o.safeParse(t);if(!r.success)throw new Ge(`Config validation error: ${r.error.message}`);return r.data}function pr(n){let e;try{e=hs.readFileSync(n,"utf-8");}catch(t){throw new Ge(`Cannot read file: ${n}`,t)}return ur(e)}function Mi(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}}u();var Ve=K.join("templates","agents"),Je=K.join("templates","workflows");function vo(){try{let e=(typeof oe=="function"?oe:module$1.createRequire(typeof __filename<"u"?__filename:process.cwd()+"/")).resolve("@crewx/sdk/package.json");return K.dirname(e)}catch{return null}}function mt(n){if(n&&hs.existsSync(n))return n;let e=process.env.CREWX_SDK_TEMPLATES_PATH;if(e&&hs.existsSync(e))return e;let t=vo();if(t){let o=K.join(t,Ve);if(hs.existsSync(o))return o}let r=[K.join(__dirname,"..",Ve),K.join(__dirname,"..","..",Ve),K.join(__dirname,"..","..","..",Ve),K.join(process.cwd(),"packages","sdk",Ve),K.join(process.cwd(),Ve)];for(let o of r)if(hs.existsSync(o))return o;throw new Error(`[@crewx/sdk] Templates directory not found.
37
37
  `+(t?` package anchor: ${K.join(t,Ve)}
38
38
  `:` package anchor: (unresolved)
39
39
  `)+r.map(o=>` candidate: ${o}`).join(`
40
40
  `)+`
41
- Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function Kr(){let n=mt();return {yamlPath:K.join(n,"default.yaml"),dir:n}}function bi(n){if(n&&ls.existsSync(n))return n;let e=process.env.CREWX_SDK_WORKFLOW_TEMPLATES_PATH;if(e&&ls.existsSync(e))return e;let t=ho();if(t){let o=K.join(t,Je);if(ls.existsSync(o))return o}let r=[K.join(__dirname,"..",Je),K.join(__dirname,"..","..",Je),K.join(__dirname,"..","..","..",Je),K.join(process.cwd(),"packages","sdk",Je),K.join(process.cwd(),Je)];for(let o of r)if(ls.existsSync(o))return o;throw new Error(`[@crewx/sdk] Workflow templates directory not found.
41
+ Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function Jr(){let n=mt();return {yamlPath:K.join(n,"default.yaml"),dir:n}}function Li(n){if(n&&hs.existsSync(n))return n;let e=process.env.CREWX_SDK_WORKFLOW_TEMPLATES_PATH;if(e&&hs.existsSync(e))return e;let t=vo();if(t){let o=K.join(t,Je);if(hs.existsSync(o))return o}let r=[K.join(__dirname,"..",Je),K.join(__dirname,"..","..",Je),K.join(__dirname,"..","..","..",Je),K.join(process.cwd(),"packages","sdk",Je),K.join(process.cwd(),Je)];for(let o of r)if(hs.existsSync(o))return o;throw new Error(`[@crewx/sdk] Workflow templates directory not found.
42
42
  `+(t?` package anchor: ${K.join(t,Je)}
43
43
  `:` package anchor: (unresolved)
44
44
  `)+r.map(o=>` candidate: ${o}`).join(`
45
45
  `)+`
46
- Set CREWX_SDK_WORKFLOW_TEMPLATES_PATH or pass options.templatesPath.`)}u();var be=class extends Error{constructor(e,t){let r=t.length>0?` Available: ${t.join(", ")}`:"";super(`Agent not found: "${e}".${r}`),this.name="AgentNotFoundError";}},Ti={claude:{id:"claude",provider:"cli/claude"},copilot:{id:"copilot",provider:"cli/copilot"},codex:{id:"codex",provider:"cli/codex"}};function pr(n,e){let t=n.startsWith("@")?n.slice(1):n,r=e.find(s=>s.id===t);if(r)return r;let o=Ti[t];if(o)return o;throw new be(n,e.map(s=>s.id))}ke();vr();u();u();var xt={"claude-fable-5":{input:10,cachedInput:1,output:50},"claude-opus-5":{input:5,cachedInput:.5,output:25},"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 pa={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"},un={input:0,cachedInput:0,output:0},Wt={};function Do(n){Wt=n;}function pn(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 ga(n){if(!n)return un;let e=pn(n),t=pa[e];if(t)return Wt[t]??xt[t]??un;if(Wt[e])return Wt[e];if(xt[e])return xt[e];let r={...xt,...Wt};for(let o of Object.keys(r))if(e.includes(o))return r[o];return console.warn(`[pricing] Unknown model: ${n}, cost_usd=0`),un}function fa(n,e,t,r=0,o){let s=ga(t),i=Math.min(r,n),d=(n-i)*s.input/1e6,l=i*s.cachedInput/1e6,c=e*s.output/1e6;return d+l+c}function Lo(n,e,t,r,o,s){return n&&n>0?n:!e&&!t?0:fa(e??0,t??0,o,r??0)}u();function kr(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 xr(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=kr(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}}function Er(n,e){if(!n||typeof n!="object"||Array.isArray(n))return {};let r=n[e];if(!r||typeof r!="object"||Array.isArray(r))return {};let o=r,s={};return o.provider!==void 0&&(typeof o.provider=="string"?o.provider.trim()&&(s.provider=o.provider.trim()):console.warn(`[crewx] options.${e}.provider must be a single string; ignoring non-string value (${JSON.stringify(o.provider)})`)),typeof o.model=="string"&&o.model.trim()&&(s.model=o.model.trim()),s}u();u();var ha=[/^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],ya=/[;|&`$(){}!><\n\r]/,wa=2,_a=["*","**","*:*","* *","**/*"];function va(){let n={};for(let[e,t]of Object.entries(process.env))t!==void 0&&(ha.some(r=>r.test(e))||(n[e]=t));return n}function ka(n){if(ya.test(n))throw new Error(`exec blocked: shell metacharacter detected in "${n}"`)}function xa(n){return /^npx\s+@crewx\/[\w-]+/.test(n)}function Aa(n){if(_a.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 Ea(n,e){let t=e.allow??[],r=e.deny??[];for(let o of [...t,...r])Aa(o);return r.some(o=>we(n,o))?false:xa(n)?true:t.some(o=>we(n,o))}var $o=false;function Ra(n){$o=n;}function Ft(n){if(!$o)return;let e=JSON.stringify({span:"template_exec",...n,timestamp:new Date().toISOString()});console.error(e);}function Ca(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 Uo(n,e){let t=Date.now(),r=parseInt(process.env.CREWX_EXEC_DEPTH??"0",10);if(isNaN(r)||r>=wa)return Ft({command:n,status:"denied",reason:"invalid or max recursion depth"}),"(exec blocked: max recursion depth reached)";try{ka(n);}catch{return Ft({command:n,status:"denied",reason:"shell metacharacter detected"}),`(exec blocked: shell metacharacter detected in "${n}")`}if(!Ea(n,e))return Ft({command:n,status:"denied",reason:"not in allow list"}),`(exec blocked: ${n})`;try{let o=Ca(n),[s,...i]=o;if(!s)return `(exec failed: ${n})`;let a=va(),d=child_process.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 Ft({command:n,status:"allowed",allowed_by:"policy",duration_ms:l}),`<exec-output cmd="${n}">
46
+ Set CREWX_SDK_WORKFLOW_TEMPLATES_PATH or pass options.templatesPath.`)}u();var Ce=class extends Error{constructor(e,t){let r=t.length>0?` Available: ${t.join(", ")}`:"";super(`Agent not found: "${e}".${r}`),this.name="AgentNotFoundError";}},$i={claude:{id:"claude",provider:"cli/claude"},copilot:{id:"copilot",provider:"cli/copilot"},codex:{id:"codex",provider:"cli/codex"}};function gr(n,e){let t=n.startsWith("@")?n.slice(1):n,r=e.find(s=>s.id===t);if(r)return r;let o=$i[t];if(o)return o;throw new Ce(n,e.map(s=>s.id))}ke();kr();u();u();var xt={"claude-fable-5":{input:10,cachedInput:1,output:50},"claude-opus-5":{input:5,cachedInput:.5,output:25},"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 ka={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"},fn={input:0,cachedInput:0,output:0},Ft={};function Ho(n){Ft=n;}function mn(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 xa(n){if(!n)return fn;let e=mn(n),t=ka[e];if(t)return Ft[t]??xt[t]??fn;if(Ft[e])return Ft[e];if(xt[e])return xt[e];let r={...xt,...Ft};for(let o of Object.keys(r))if(e.includes(o))return r[o];return console.warn(`[pricing] Unknown model: ${n}, cost_usd=0`),fn}function Aa(n,e,t,r=0,o){let s=xa(t),i=Math.min(r,n),d=(n-i)*s.input/1e6,l=i*s.cachedInput/1e6,c=e*s.output/1e6;return d+l+c}function Bo(n,e,t,r,o,s){return n&&n>0?n:!e&&!t?0:Aa(e??0,t??0,o,r??0)}u();function xr(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 Ar(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 Er(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=xr(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}}function Rr(n,e){if(!n||typeof n!="object"||Array.isArray(n))return {};let r=n[e];if(!r||typeof r!="object"||Array.isArray(r))return {};let o=r,s={};return o.provider!==void 0&&(typeof o.provider=="string"?o.provider.trim()&&(s.provider=o.provider.trim()):console.warn(`[crewx] options.${e}.provider must be a single string; ignoring non-string value (${JSON.stringify(o.provider)})`)),typeof o.model=="string"&&o.model.trim()&&(s.model=o.model.trim()),s}u();u();var Ra=[/^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],Pa=/[;|&`$(){}!><\n\r]/,Ca=2,ba=["*","**","*:*","* *","**/*"];function Ta(){let n={};for(let[e,t]of Object.entries(process.env))t!==void 0&&(Ra.some(r=>r.test(e))||(n[e]=t));return n}function Sa(n){if(Pa.test(n))throw new Error(`exec blocked: shell metacharacter detected in "${n}"`)}function Ia(n){return /^npx\s+@crewx\/[\w-]+/.test(n)}function Oa(n){if(ba.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 Ma(n,e){let t=e.allow??[],r=e.deny??[];for(let o of [...t,...r])Oa(o);return r.some(o=>we(n,o))?false:Ia(n)?true:t.some(o=>we(n,o))}var qo=false;function Na(n){qo=n;}function Ht(n){if(!qo)return;let e=JSON.stringify({span:"template_exec",...n,timestamp:new Date().toISOString()});console.error(e);}function Da(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 zo(n,e){let t=Date.now(),r=parseInt(process.env.CREWX_EXEC_DEPTH??"0",10);if(isNaN(r)||r>=Ca)return Ht({command:n,status:"denied",reason:"invalid or max recursion depth"}),"(exec blocked: max recursion depth reached)";try{Sa(n);}catch{return Ht({command:n,status:"denied",reason:"shell metacharacter detected"}),`(exec blocked: shell metacharacter detected in "${n}")`}if(!Ma(n,e))return Ht({command:n,status:"denied",reason:"not in allow list"}),`(exec blocked: ${n})`;try{let o=Da(n),[s,...i]=o;if(!s)return `(exec failed: ${n})`;let a=Ta(),d=child_process.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 Ht({command:n,status:"allowed",allowed_by:"policy",duration_ms:l}),`<exec-output cmd="${n}">
47
47
  ${d.trim()}
48
- </exec-output>`}catch{return Ft({command:n,status:"error",reason:"execution failed"}),`(exec failed: ${n})`}}u();function jo(n){return n==null?"":String(n)}u();function Wo(n,e){return `\`\`\`${e?.hash?.lang??""}
48
+ </exec-output>`}catch{return Ht({command:n,status:"error",reason:"execution failed"}),`(exec failed: ${n})`}}u();function Ko(n){return n==null?"":String(n)}u();function Go(n,e){return `\`\`\`${e?.hash?.lang??""}
49
49
  ${n??""}
50
- \`\`\``}u();function gn(n,e){if(!n)return "";if(n.length<=e)return n;let t=n.length-e;return `${n.substring(0,e)} (...+${t} chars)`}function fn(n){return Array.isArray(n)||typeof n=="string"?n.length:0}function mn(n){return typeof n!="string"?"":n.replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;")}var Fo=["B","KB","MB","GB"];function hn(n){if(n===0)return "0 B";let e=Math.min(Math.floor(Math.log(n)/Math.log(1024)),Fo.length-1);return `${Math.round(n/Math.pow(1024,e)*100)/100} ${Fo[e]}`}function yn(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 Ht=class{hbs;execPolicy;execEnabled;constructor(e={}){this.hbs=xe__namespace.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(Uo(o,t)):"(exec disabled)"}),e.registerHelper("include",function(o){return new e.SafeString(jo(o))}),e.registerHelper("fenced_code",function(o,s){return new e.SafeString(Wo(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 gn(o,s)}),e.registerHelper("length",function(o){return fn(o)}),e.registerHelper("escapeHandlebars",function(o){return new e.SafeString(mn(o))}),e.registerHelper("formatFileSize",function(o){return hn(o)}),e.registerHelper("formatTimestamp",function(o){return yn(o)});}async render(e,t={}){return this.hbs.compile(e,{noEscape:true})(t)}};u();u();var Rr=class{async readFile(e){return promises.readFile(e,"utf-8")}async exists(e){try{return await promises.access(e),!0}catch{return false}}resolvePath(...e){return e.length===1?K.resolve(e[0]):K.resolve(K.join(...e))}isAbsolute(e){return K.isAbsolute(e)}async readdir(e){try{return await promises.readdir(e)}catch{return []}}},nt=new Rr;var ot=class{docs=new Map;fs;constructor(e){this.fs=e??nt;}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(`
50
+ \`\`\``}u();function hn(n,e){if(!n)return "";if(n.length<=e)return n;let t=n.length-e;return `${n.substring(0,e)} (...+${t} chars)`}function yn(n){return Array.isArray(n)||typeof n=="string"?n.length:0}function wn(n){return typeof n!="string"?"":n.replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;")}var Vo=["B","KB","MB","GB"];function _n(n){if(n===0)return "0 B";let e=Math.min(Math.floor(Math.log(n)/Math.log(1024)),Vo.length-1);return `${Math.round(n/Math.pow(1024,e)*100)/100} ${Vo[e]}`}function vn(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 Bt=class{hbs;execPolicy;execEnabled;constructor(e={}){this.hbs=xe__namespace.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(zo(o,t)):"(exec disabled)"}),e.registerHelper("include",function(o){return new e.SafeString(Ko(o))}),e.registerHelper("fenced_code",function(o,s){return new e.SafeString(Go(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 hn(o,s)}),e.registerHelper("length",function(o){return yn(o)}),e.registerHelper("escapeHandlebars",function(o){return new e.SafeString(wn(o))}),e.registerHelper("formatFileSize",function(o){return _n(o)}),e.registerHelper("formatTimestamp",function(o){return vn(o)});}async render(e,t={}){return this.hbs.compile(e,{noEscape:true})(t)}};u();u();var Pr=class{async readFile(e){return promises.readFile(e,"utf-8")}async exists(e){try{return await promises.access(e),!0}catch{return false}}resolvePath(...e){return e.length===1?K.resolve(e[0]):K.resolve(K.join(...e))}isAbsolute(e){return K.isAbsolute(e)}async readdir(e){try{return await promises.readdir(e)}catch{return []}}},nt=new Pr;var ot=class{docs=new Map;fs;constructor(e){this.fs=e??nt;}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(`
51
51
  `)){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(`
52
- `)}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)}};u();u();var ie=class extends Error{constructor(t,r,o){super(t);this.layoutId=r;this.cause=o;this.name="LayoutLoadError";}layoutId;cause},Ie=class extends Error{constructor(t,r=[],o){super(t);this.errors=r;this.cause=o;this.name="PropsValidationError";}errors;cause};var La={validationMode:"lenient",fallbackLayoutId:"crewx/default"},Bt=class{layouts=new Map;options;constructor(e){this.options={...La,...e,templatesPath:e?.templatesPath??mt()},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 ie(`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 ie("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 ie(`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),c=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?c||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(!ls.existsSync(e))throw new ie(`Templates directory not found: ${e}`,void 0,new Error(`Directory does not exist: ${e}`));try{let t=ls.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=K__namespace.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 ie(`Failed to read layouts directory: ${e}`,void 0,t instanceof Error?t:new Error(String(t)))}}loadLayoutFile(e,t){try{let r=ls.readFileSync(e,"utf-8");if(!r||r.trim().length===0)throw console.warn(`Empty YAML file: ${e}, will use fallback`),new ie(`Empty YAML file: ${e}`,t,new Error("File content is empty"));let o=jsYaml.load(r);if(!o||typeof o!="object")throw console.warn(`Invalid YAML content in ${e} (parsed as ${typeof o}), will use fallback`),new ie(`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 ie(`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 ie(`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 ie(`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}}}};u();u();u();function st(n){return String(Math.floor(Math.abs(n))).padStart(2,"0")}function qt(n){if(!(n instanceof Date)||Number.isNaN(n.getTime()))return "";let e=-n.getTimezoneOffset(),t=e>=0?"+":"-";return `${n.getFullYear()}-${st(n.getMonth()+1)}-${st(n.getDate())}T${st(n.getHours())}:${st(n.getMinutes())}:${st(n.getSeconds())}${t}${st(e/60)}:${st(e%60)}`}function $a(n){return n.map(e=>{let t=typeof e?.timestamp=="number"?e.timestamp:null;return t===null?e:{...e,created_at:qt(new Date(t))}})}function Ua(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 zo(...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=Ua(t),d=a.length>0?a[0]:"",l=Date.now(),c={messages:$a(t),platform:typeof r=="string"?r:"",messagesCount:t.length,agentIds:a,primaryAgentId:d,currentAgentId:o,threadId:s,now:qt(new Date(l))};return e.fn(c)}u();var zt=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 Ie("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],c=e[a],f=this.resolveProp(c,d,l,r,s);f.shouldAssign&&(i[a]=f.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,c=s.length;return i.value.forEach((f,g)=>{let m=[...r,String(g)];if(d){let w=this.validateType(f,{type:d},m,o,s);w.valid?a.push(w.value):s.push({path:this.buildPath(m),message:w.error??"Invalid array item",value:f});}else a.push(f);l&&!l.includes(f)&&s.push({path:this.buildPath(m),message:`Array item must be one of: ${l.join(", ")}`,value:f});}),{valid:s.length===c,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 Kt=class{handlebars;propsValidator;constructor(e){this.handlebars=xe__namespace.default.create(),this.propsValidator=e??new zt,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",zo),xe__namespace.default.helpers.each&&this.handlebars.registerHelper("each",xe__namespace.default.helpers.each),xe__namespace.default.helpers.if&&this.handlebars.registerHelper("if",xe__namespace.default.helpers.if),xe__namespace.default.helpers.unless&&this.handlebars.registerHelper("unless",xe__namespace.default.helpers.unless),xe__namespace.default.helpers.with&&this.handlebars.registerHelper("with",xe__namespace.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__namespace.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 Ie&&o.errors&&o.errors.length>0){let s=o.errors[0];if(s)throw new Ie(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}};u();var wn="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function ja(n){let e=crypto$1.randomBytes(n*2),t="";for(let r=0;r<e.length&&t.length<n;r++){let o=e[r];o<248&&(t+=wn[o%62]);}for(;t.length<n;)t+=wn[crypto$1.randomBytes(1)[0]%62];return t}function it(n){return `${n}_${ja(8)}`}function Wa(n,e){let{createHash:t}=oe("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+=wn[i%62];return `${n}_${s}`}u();function _n(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())}`}u();function Go(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 Gt=class{_emitter=new events.EventEmitter;on(e,t){let r=Go(e,t);return this._emitter.on(e,r),()=>this._emitter.off(e,r)}once(e,t){let r=Go(e,t);return this._emitter.once(e,r),()=>this._emitter.off(e,r)}emit(e,t){this._emitter.emit(e,t);}};u();function vn(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}}}u();var kn=new async_hooks.AsyncLocalStorage;function Ba(){return kn}function qa(n,e){return kn.run(n,e)}function xn(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 g=>({userId:g,displayName:g})),c=async g=>{let m=kn.getStore();if(!m){e.warn("respondSync called outside sync window \u2014 graceful degradation (no-op)",{textPreview:typeof g=="object"&&"text"in g?g.text.slice(0,80):void 0});return}let w="text"in g?g.text:"";m.res.status(200).json({text:w});},f=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:f,inbound:i,emitEvent:a,updateMessage:d,resolveUser:l,respondSync:c}}$e();u();var za=/^-\s*Status:\s*active/m,Ka=/^---\n([\s\S]*?)\n---/,Ga=/^type:\s*goal\s*$/m;async function Vo(n,e=nt,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(`
52
+ `)}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)}};u();u();var ie=class extends Error{constructor(t,r,o){super(t);this.layoutId=r;this.cause=o;this.name="LayoutLoadError";}layoutId;cause},Ie=class extends Error{constructor(t,r=[],o){super(t);this.errors=r;this.cause=o;this.name="PropsValidationError";}errors;cause};var za={validationMode:"lenient",fallbackLayoutId:"crewx/default"},qt=class{layouts=new Map;options;constructor(e){this.options={...za,...e,templatesPath:e?.templatesPath??mt()},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 ie(`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 ie("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 ie(`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),c=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?c||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(!hs.existsSync(e))throw new ie(`Templates directory not found: ${e}`,void 0,new Error(`Directory does not exist: ${e}`));try{let t=hs.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=K__namespace.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 ie(`Failed to read layouts directory: ${e}`,void 0,t instanceof Error?t:new Error(String(t)))}}loadLayoutFile(e,t){try{let r=hs.readFileSync(e,"utf-8");if(!r||r.trim().length===0)throw console.warn(`Empty YAML file: ${e}, will use fallback`),new ie(`Empty YAML file: ${e}`,t,new Error("File content is empty"));let o=jsYaml.load(r);if(!o||typeof o!="object")throw console.warn(`Invalid YAML content in ${e} (parsed as ${typeof o}), will use fallback`),new ie(`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 ie(`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 ie(`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 ie(`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}}}};u();u();u();function st(n){return String(Math.floor(Math.abs(n))).padStart(2,"0")}function zt(n){if(!(n instanceof Date)||Number.isNaN(n.getTime()))return "";let e=-n.getTimezoneOffset(),t=e>=0?"+":"-";return `${n.getFullYear()}-${st(n.getMonth()+1)}-${st(n.getDate())}T${st(n.getHours())}:${st(n.getMinutes())}:${st(n.getSeconds())}${t}${st(e/60)}:${st(e%60)}`}function Ka(n){return n.map(e=>{let t=typeof e?.timestamp=="number"?e.timestamp:null;return t===null?e:{...e,created_at:zt(new Date(t))}})}function Ga(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 Qo(...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=Ga(t),d=a.length>0?a[0]:"",l=Date.now(),c={messages:Ka(t),platform:typeof r=="string"?r:"",messagesCount:t.length,agentIds:a,primaryAgentId:d,currentAgentId:o,threadId:s,now:zt(new Date(l))};return e.fn(c)}u();var Kt=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 Ie("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],c=e[a],f=this.resolveProp(c,d,l,r,s);f.shouldAssign&&(i[a]=f.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,c=s.length;return i.value.forEach((f,g)=>{let m=[...r,String(g)];if(d){let w=this.validateType(f,{type:d},m,o,s);w.valid?a.push(w.value):s.push({path:this.buildPath(m),message:w.error??"Invalid array item",value:f});}else a.push(f);l&&!l.includes(f)&&s.push({path:this.buildPath(m),message:`Array item must be one of: ${l.join(", ")}`,value:f});}),{valid:s.length===c,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 Gt=class{handlebars;propsValidator;constructor(e){this.handlebars=xe__namespace.default.create(),this.propsValidator=e??new Kt,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",Qo),xe__namespace.default.helpers.each&&this.handlebars.registerHelper("each",xe__namespace.default.helpers.each),xe__namespace.default.helpers.if&&this.handlebars.registerHelper("if",xe__namespace.default.helpers.if),xe__namespace.default.helpers.unless&&this.handlebars.registerHelper("unless",xe__namespace.default.helpers.unless),xe__namespace.default.helpers.with&&this.handlebars.registerHelper("with",xe__namespace.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__namespace.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 Ie&&o.errors&&o.errors.length>0){let s=o.errors[0];if(s)throw new Ie(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}};u();var kn="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function Va(n){let e=crypto$1.randomBytes(n*2),t="";for(let r=0;r<e.length&&t.length<n;r++){let o=e[r];o<248&&(t+=kn[o%62]);}for(;t.length<n;)t+=kn[crypto$1.randomBytes(1)[0]%62];return t}function it(n){return `${n}_${Va(8)}`}function Ja(n,e){let{createHash:t}=oe("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+=kn[i%62];return `${n}_${s}`}u();function xn(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())}`}u();function es(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 Vt=class{_emitter=new events.EventEmitter;on(e,t){let r=es(e,t);return this._emitter.on(e,r),()=>this._emitter.off(e,r)}once(e,t){let r=es(e,t);return this._emitter.once(e,r),()=>this._emitter.off(e,r)}emit(e,t){this._emitter.emit(e,t);}};u();function An(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}}}u();var En=new async_hooks.AsyncLocalStorage;function Qa(){return En}function Za(n,e){return En.run(n,e)}function Rn(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 g=>({userId:g,displayName:g})),c=async g=>{let m=En.getStore();if(!m){e.warn("respondSync called outside sync window \u2014 graceful degradation (no-op)",{textPreview:typeof g=="object"&&"text"in g?g.text.slice(0,80):void 0});return}let w="text"in g?g.text:"";m.res.status(200).json({text:w});},f=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:f,inbound:i,emitEvent:a,updateMessage:d,resolveUser:l,respondSync:c}}$e();u();var ed=/^-\s*Status:\s*active/m,td=/^---\n([\s\S]*?)\n---/,rd=/^type:\s*goal\s*$/m;async function ts(n,e=nt,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(`
53
53
  ---
54
- `)}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),c=Ka.exec(l);!c||!Ga.test(c[1])||za.test(l)&&i.push(l);}return i.join(`
54
+ `)}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),c=td.exec(l);!c||!rd.test(c[1])||ed.test(l)&&i.push(l);}return i.join(`
55
55
  ---
56
- `)}u();function Va(){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 Jo(n,e=nt){let t=e.resolvePath(n,`${Va()}.md`);return await e.exists(t)?e.readFile(t):""}u();yt();$e();function An(n){if(n.startsWith("cli/"))return exports.BUILTIN_ADAPTERS[n.slice(4)]}function Xa(n,e={}){if(!n.startsWith("cli/"))return true;let r=(e.lookupAdapter??An)(n);if(!r?.command)return false;let o=It(r.command,{env:e.env});return K__namespace.default.isAbsolute(o)}function En(n,e={}){if(!Array.isArray(n))return n;if(n.length===0)return "cli/claude";for(let t of n)if(Xa(t,e))return t;return n[0]}u();var Vt=new async_hooks.AsyncLocalStorage;function Rn(n){if(n)return {parentTaskId:n.parentTaskId??null,rootTraceId:n.rootTraceId,callerAgentId:n.callerAgentId??null}}u();function Qa(n){return typeof n!="string"?"":n.replace(/</g,"&lt;").replace(/>/g,"&gt;")}function Cn(n){return n.messages.map(e=>({text:Qa(e.text),isAssistant:e.isAssistant,timestamp:e.timestamp,metadata:e.metadata,files:void 0}))}u();$e();Ue();u();u();var At=class{resolveDbPath(){return process.env.CREWX_DB?process.env.CREWX_DB:process.env.CREWX_TRACES_DB?process.env.CREWX_TRACES_DB:K.join(rd__default.default.homedir(),".crewx","crewx.db")}resolveDbPaths(){return [this.resolveDbPath()]}isMissingTableError(e){return e instanceof Error&&/no such table:/i.test(e.message)}dbExists(e){return ls.existsSync(e??this.resolveDbPath())}};u();function Ae(n){let e=oe("better-sqlite3"),{drizzle:t}=oe("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()}}u();var Xo=new Set,nd={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 Tn(n,e){return (n.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function od(n,e){if(e>0||!Tn(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(nd))r.has(o)||n.run(`ALTER TABLE tasks ADD COLUMN ${o} ${s}`);}var sd={"0002_normalize_task_names":{workspace_name:"TEXT",project_name:"TEXT"}};function id(n,e,t){if(!Tn(n,"__drizzle_migrations")||!Tn(n,"tasks"))return;let r=n.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(ls.readFileSync(K__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=sd[i.tag];if(!a)continue;let d=K__namespace.default.join(e,`${i.tag}.sql`);if(!ls.existsSync(d))continue;let l=ls.readFileSync(d,"utf-8"),c=crypto$1.createHash("sha256").update(l).digest("hex");if(o.has(c))continue;let f=n.all("PRAGMA table_info(tasks)"),g=new Set(f.map(m=>m.name));for(let[m,w]of Object.entries(a))g.has(m)||(n.run(`ALTER TABLE tasks ADD COLUMN ${m} ${w}`),g.add(m));}}function ad(n,e,t){let r=n.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(ls.readFileSync(K__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=K__namespace.default.join(e,`${i.tag}.sql`);if(!ls.existsSync(a))continue;let d=ls.readFileSync(a,"utf-8"),l=crypto$1.createHash("sha256").update(d).digest("hex");if(o.has(l))continue;let c=/ALTER\s+TABLE\s+[`"]?(\w+)[`"]?\s+ADD\s+[`"]?(\w+)[`"]?/gi,f=[],g;for(;(g=c.exec(d))!==null;)f.push({table:g[1],column:g[2]});if(f.length===0||!d.split(/-->\s*statement-breakpoint/).map(_=>_.trim()).filter(Boolean).every(_=>/^ALTER\s+TABLE\s+.+\s+ADD\s+/i.test(_)))continue;f.every(({table:_,column:k})=>n.all(`PRAGMA table_info("${_}")`).some(v=>v.name===k))&&n.run(t`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${l}, ${i.when})`);}}function dd(n){let{migrate:e}=oe("drizzle-orm/better-sqlite3/migrator"),{sql:t}=oe("drizzle-orm"),r=[K__namespace.default.join(__dirname,"../migrations"),K__namespace.default.join(__dirname,"migrations"),K__namespace.default.join(__dirname,"../../../../drizzle/migrations"),K__namespace.default.join(process.cwd(),"drizzle/migrations")],o=r.find(l=>ls.existsSync(K__namespace.default.join(l,"meta/_journal.json")));if(!o)throw new Error(`migrations folder not found. Searched:
56
+ `)}u();function nd(){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 rs(n,e=nt){let t=e.resolvePath(n,`${nd()}.md`);return await e.exists(t)?e.readFile(t):""}u();yt();$e();function Pn(n){if(n.startsWith("cli/"))return exports.BUILTIN_ADAPTERS[n.slice(4)]}function sd(n,e={}){if(!n.startsWith("cli/"))return true;let r=(e.lookupAdapter??Pn)(n);if(!r?.command)return false;let o=It(r.command,{env:e.env});return K__namespace.default.isAbsolute(o)}function Cn(n,e={}){if(!Array.isArray(n))return n;if(n.length===0)return "cli/claude";for(let t of n)if(sd(t,e))return t;return n[0]}u();var Jt=new async_hooks.AsyncLocalStorage;function bn(n){if(n)return {parentTaskId:n.parentTaskId??null,rootTraceId:n.rootTraceId,callerAgentId:n.callerAgentId??null}}u();function ad(n){return typeof n!="string"?"":n.replace(/</g,"&lt;").replace(/>/g,"&gt;")}function Tn(n){return n.messages.map(e=>({text:ad(e.text),isAssistant:e.isAssistant,timestamp:e.timestamp,metadata:e.metadata,files:void 0}))}u();$e();Ue();u();u();var At=class{resolveDbPath(){return process.env.CREWX_DB?process.env.CREWX_DB:process.env.CREWX_TRACES_DB?process.env.CREWX_TRACES_DB:K.join(lo__namespace.default.homedir(),".crewx","crewx.db")}resolveDbPaths(){return [this.resolveDbPath()]}isMissingTableError(e){return e instanceof Error&&/no such table:/i.test(e.message)}dbExists(e){return hs.existsSync(e??this.resolveDbPath())}};u();function Ae(n){let e=oe("better-sqlite3"),{drizzle:t}=oe("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()}}u();var ns=new Set,pd={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 In(n,e){return (n.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function gd(n,e){if(e>0||!In(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(pd))r.has(o)||n.run(`ALTER TABLE tasks ADD COLUMN ${o} ${s}`);}var fd={"0002_normalize_task_names":{workspace_name:"TEXT",project_name:"TEXT"}};function md(n,e,t){if(!In(n,"__drizzle_migrations")||!In(n,"tasks"))return;let r=n.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(hs.readFileSync(K__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=fd[i.tag];if(!a)continue;let d=K__namespace.default.join(e,`${i.tag}.sql`);if(!hs.existsSync(d))continue;let l=hs.readFileSync(d,"utf-8"),c=crypto$1.createHash("sha256").update(l).digest("hex");if(o.has(c))continue;let f=n.all("PRAGMA table_info(tasks)"),g=new Set(f.map(m=>m.name));for(let[m,w]of Object.entries(a))g.has(m)||(n.run(`ALTER TABLE tasks ADD COLUMN ${m} ${w}`),g.add(m));}}function hd(n,e,t){let r=n.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(hs.readFileSync(K__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=K__namespace.default.join(e,`${i.tag}.sql`);if(!hs.existsSync(a))continue;let d=hs.readFileSync(a,"utf-8"),l=crypto$1.createHash("sha256").update(d).digest("hex");if(o.has(l))continue;let c=/ALTER\s+TABLE\s+[`"]?(\w+)[`"]?\s+ADD\s+[`"]?(\w+)[`"]?/gi,f=[],g;for(;(g=c.exec(d))!==null;)f.push({table:g[1],column:g[2]});if(f.length===0||!d.split(/-->\s*statement-breakpoint/).map(_=>_.trim()).filter(Boolean).every(_=>/^ALTER\s+TABLE\s+.+\s+ADD\s+/i.test(_)))continue;f.every(({table:_,column:k})=>n.all(`PRAGMA table_info("${_}")`).some(v=>v.name===k))&&n.run(t`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${l}, ${i.when})`);}}function yd(n){let{migrate:e}=oe("drizzle-orm/better-sqlite3/migrator"),{sql:t}=oe("drizzle-orm"),r=[K__namespace.default.join(__dirname,"../migrations"),K__namespace.default.join(__dirname,"migrations"),K__namespace.default.join(__dirname,"../../../../drizzle/migrations"),K__namespace.default.join(process.cwd(),"drizzle/migrations")],o=r.find(l=>hs.existsSync(K__namespace.default.join(l,"meta/_journal.json")));if(!o)throw new Error(`migrations folder not found. Searched:
57
57
  ${r.join(`
58
- `)}`);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),od(n,i),s?.cnt&&(ad(n,o,t),id(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 br(n,e){Xo.has(e)||(dd(n),Xo.add(e));}u();var P=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);}};u();u();var Qo=sqliteCore.sqliteTable("workspaces",{id:sqliteCore.text("id").primaryKey(),slug:sqliteCore.text("slug").notNull().unique(),name:sqliteCore.text("name").notNull(),workspace_path:sqliteCore.text("workspace_path"),description:sqliteCore.text("description"),is_active:sqliteCore.integer("is_active").notNull().default(1),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()});u();var p=sqliteCore.sqliteTable("tasks",{id:sqliteCore.text("id").primaryKey(),agent_id:sqliteCore.text("agent_id").notNull(),user_id:sqliteCore.text("user_id"),prompt:sqliteCore.text("prompt").notNull(),mode:sqliteCore.text("mode").notNull().default("execute"),status:sqliteCore.text("status").notNull().default("running"),result:sqliteCore.text("result"),error:sqliteCore.text("error"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),metadata:sqliteCore.text("metadata"),workspace_id:sqliteCore.text("workspace_id"),trace_id:sqliteCore.text("trace_id"),parent_task_id:sqliteCore.text("parent_task_id"),caller_agent_id:sqliteCore.text("caller_agent_id"),model:sqliteCore.text("model"),platform:sqliteCore.text("platform").default("cli"),crewx_version:sqliteCore.text("crewx_version"),input_tokens:sqliteCore.integer("input_tokens").default(0),output_tokens:sqliteCore.integer("output_tokens").default(0),cost_usd:sqliteCore.real("cost_usd").default(0),pid:sqliteCore.integer("pid"),rendered_prompt:sqliteCore.text("rendered_prompt"),command:sqliteCore.text("command"),coding_agent_command:sqliteCore.text("coding_agent_command"),exit_code:sqliteCore.integer("exit_code"),logs:sqliteCore.text("logs"),thread_id:sqliteCore.text("thread_id"),workspace_ref:sqliteCore.text("workspace_ref"),project_id:sqliteCore.text("project_id"),project_ref:sqliteCore.text("project_ref"),cached_input_tokens:sqliteCore.integer("cached_input_tokens").default(0),run_epoch:sqliteCore.integer("run_epoch").default(0)},n=>({idx_tasks_agent_id:sqliteCore.index("idx_tasks_agent_id").on(n.agent_id),idx_tasks_status:sqliteCore.index("idx_tasks_status").on(n.status),idx_tasks_started_at:sqliteCore.index("idx_tasks_started_at").on(n.started_at),idx_tasks_trace_id:sqliteCore.index("idx_tasks_trace_id").on(n.trace_id),idx_tasks_parent_task_id:sqliteCore.index("idx_tasks_parent_task_id").on(n.parent_task_id),idx_tasks_crewx_version:sqliteCore.index("idx_tasks_crewx_version").on(n.crewx_version),idx_tasks_pid:sqliteCore.index("idx_tasks_pid").on(n.pid),idx_tasks_thread_id:sqliteCore.index("idx_tasks_thread_id").on(n.thread_id),idx_tasks_workspace_id:sqliteCore.index("idx_tasks_workspace_id").on(n.workspace_id),idx_tasks_workspace_ref:sqliteCore.index("idx_tasks_workspace_ref").on(n.workspace_ref),idx_tasks_project_id:sqliteCore.index("idx_tasks_project_id").on(n.project_id),idx_tasks_ws_started:sqliteCore.index("idx_tasks_ws_started").on(n.workspace_id,n.started_at)}));u();var Zo=sqliteCore.sqliteTable("threads",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").references(()=>Qo.id,{onDelete:"set null"}),platform:sqliteCore.text("platform").notNull().default("cli"),title:sqliteCore.text("title"),first_message:sqliteCore.text("first_message"),last_message:sqliteCore.text("last_message"),message_count:sqliteCore.integer("message_count").notNull().default(0),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull(),metadata:sqliteCore.text("metadata"),title_locked:sqliteCore.integer("title_locked").notNull().default(0),pinned:sqliteCore.integer("pinned").notNull().default(0),starred:sqliteCore.integer("starred").notNull().default(0)},n=>({idx_threads_updated_at:sqliteCore.index("idx_threads_updated_at").on(n.updated_at),idx_threads_workspace_id:sqliteCore.index("idx_threads_workspace_id").on(n.workspace_id),idx_threads_ws_updated:sqliteCore.index("idx_threads_ws_updated").on(n.workspace_id,n.updated_at),idx_threads_title:sqliteCore.index("idx_threads_title").on(n.title)}));u();var lt=sqliteCore.sqliteTable("spans",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>p.id,{onDelete:"set null"}),parent_span_id:sqliteCore.text("parent_span_id").references(()=>lt.id,{onDelete:"set null"}),name:sqliteCore.text("name").notNull(),kind:sqliteCore.text("kind").notNull().default("internal"),status:sqliteCore.text("status").notNull().default("ok"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),error:sqliteCore.text("error"),attributes:sqliteCore.text("attributes")},n=>({idx_spans_task_id:sqliteCore.index("idx_spans_task_id").on(n.task_id),idx_spans_parent_span_id:sqliteCore.index("idx_spans_parent_span_id").on(n.parent_span_id)}));u();sqliteCore.sqliteTable("tool_calls",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>p.id,{onDelete:"cascade"}),session_id:sqliteCore.text("session_id"),tool_name:sqliteCore.text("tool_name").notNull(),files:sqliteCore.text("files"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),duration_ms:sqliteCore.integer("duration_ms"),timestamp:sqliteCore.text("timestamp").notNull()},n=>({idx_tool_calls_task_id:sqliteCore.index("idx_tool_calls_task_id").on(n.task_id),idx_tool_calls_tool_name:sqliteCore.index("idx_tool_calls_tool_name").on(n.tool_name),idx_tool_calls_timestamp:sqliteCore.index("idx_tool_calls_timestamp").on(n.timestamp)}));u();sqliteCore.sqliteTable("thread_boxes",{id:sqliteCore.text("id").primaryKey(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>Zo.id,{onDelete:"cascade"}),seq:sqliteCore.integer("seq").notNull(),first_task_id:sqliteCore.text("first_task_id").notNull(),mid_task_id:sqliteCore.text("mid_task_id").notNull(),last_task_id:sqliteCore.text("last_task_id").notNull(),task_count:sqliteCore.integer("task_count").notNull(),summary:sqliteCore.text("summary"),source_tokens:sqliteCore.integer("source_tokens").notNull(),summary_tokens:sqliteCore.integer("summary_tokens"),created_at:sqliteCore.text("created_at").notNull()},n=>({idx_thread_boxes_thread_id:sqliteCore.index("idx_thread_boxes_thread_id").on(n.thread_id),idx_thread_boxes_seq:sqliteCore.index("idx_thread_boxes_seq").on(n.thread_id,n.seq),uniq_thread_boxes_thread_seq:sqliteCore.unique().on(n.thread_id,n.seq)}));u();sqliteCore.sqliteTable("request_logs",{id:sqliteCore.text("id").primaryKey(),path:sqliteCore.text("path").notNull(),method:sqliteCore.text("method").notNull(),status_code:sqliteCore.integer("status_code").notNull(),duration_ms:sqliteCore.integer("duration_ms").notNull(),ip:sqliteCore.text("ip"),request_headers:sqliteCore.text("request_headers"),response_headers:sqliteCore.text("response_headers"),request_body:sqliteCore.text("request_body"),response_body:sqliteCore.text("response_body"),query:sqliteCore.text("query"),user_id:sqliteCore.text("user_id"),project_id:sqliteCore.text("project_id"),partition_key:sqliteCore.text("partition_key").notNull(),timestamp:sqliteCore.text("timestamp").notNull().default(drizzleOrm.sql`(datetime('now'))`),metadata:sqliteCore.text("metadata")},n=>({idx_request_logs_timestamp:sqliteCore.index("idx_request_logs_timestamp").on(n.timestamp),idx_request_logs_path:sqliteCore.index("idx_request_logs_path").on(n.path),idx_request_logs_status_code:sqliteCore.index("idx_request_logs_status_code").on(n.status_code),idx_request_logs_partition_key:sqliteCore.index("idx_request_logs_partition_key").on(n.partition_key)}));u();sqliteCore.sqliteTable("usage_limit_snapshots",{id:sqliteCore.text("id").primaryKey(),provider:sqliteCore.text("provider").notNull(),account_ref:sqliteCore.text("account_ref").notNull().default("default"),limit_window:sqliteCore.text("limit_window").notNull(),bucket_start:sqliteCore.text("bucket_start").notNull(),captured_at:sqliteCore.text("captured_at").notNull(),used_percent:sqliteCore.integer("used_percent").notNull(),remaining_percent:sqliteCore.integer("remaining_percent").notNull(),resets_at:sqliteCore.text("resets_at"),source:sqliteCore.text("source").notNull(),metadata:sqliteCore.text("metadata")},n=>({uniq_usage_limit_snapshots_bucket:sqliteCore.uniqueIndex("uniq_usage_limit_snapshots_bucket").on(n.provider,n.account_ref,n.limit_window,n.bucket_start),idx_usage_limit_snapshots_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_window_bucket").on(n.limit_window,n.bucket_start),idx_usage_limit_snapshots_provider_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_provider_window_bucket").on(n.provider,n.limit_window,n.bucket_start)}));u();sqliteCore.sqliteTable("usage_reports",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),month:sqliteCore.text("month").notNull(),generated_at:sqliteCore.text("generated_at").notNull(),source_range:sqliteCore.text("source_range").notNull(),tier:sqliteCore.text("tier").notNull(),total_tokens:sqliteCore.integer("total_tokens").notNull(),total_cost_usd:sqliteCore.real("total_cost_usd").notNull(),payload:sqliteCore.text("payload").notNull(),payload_hash:sqliteCore.text("payload_hash"),signature:sqliteCore.text("signature"),signed_at:sqliteCore.text("signed_at"),issuer:sqliteCore.text("issuer")},n=>({uniq_usage_reports_ws_month:sqliteCore.uniqueIndex("uniq_usage_reports_ws_month").on(n.workspace_id,n.month)}));u();sqliteCore.sqliteTable("notifications",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id"),task_id:sqliteCore.text("task_id"),thread_id:sqliteCore.text("thread_id"),source:sqliteCore.text("source").notNull().default("agent"),level:sqliteCore.text("level").notNull().default("info"),title:sqliteCore.text("title").notNull(),body:sqliteCore.text("body"),target_user_id:sqliteCore.text("target_user_id"),created_at:sqliteCore.text("created_at").notNull(),metadata:sqliteCore.text("metadata")},n=>({idx_notifications_ws_created:sqliteCore.index("idx_notifications_ws_created").on(n.workspace_id,drizzleOrm.sql`${n.created_at} DESC`)}));sqliteCore.sqliteTable("notification_reads",{notification_id:sqliteCore.text("notification_id").notNull(),user_id:sqliteCore.text("user_id").notNull(),read_at:sqliteCore.text("read_at").notNull()},n=>({pk:sqliteCore.primaryKey({columns:[n.notification_id,n.user_id]})}));u();sqliteCore.sqliteTable("agent_suggestions",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id").notNull(),task_id:sqliteCore.text("task_id"),type:sqliteCore.text("type").notNull(),status:sqliteCore.text("status").notNull().default("pending"),payload:sqliteCore.text("payload").notNull(),applied_commit_sha:sqliteCore.text("applied_commit_sha"),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()},n=>({idx_agent_suggestions_ws_agent:sqliteCore.index("idx_agent_suggestions_ws_agent").on(n.workspace_id,n.agent_id),idx_agent_suggestions_ws_created:sqliteCore.index("idx_agent_suggestions_ws_created").on(n.workspace_id,n.created_at)}));var He="2026-05-09",$d="0.8.9-rc.13",Be=10,qe=parseInt($d.split("rc.")[1]),Ud=new Set(["workflow","mcp"]),ds=600*1e3,Xt=class extends At{dbPath;pidNullObservedSince=new Map;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=K.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=K.dirname(t);ls.existsSync(o)||ls.mkdirSync(o,{recursive:true});}else if(!ls.existsSync(t))throw new P("NOT_FOUND","Database not found");let r=Ae(t);if(e)try{br(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:drizzleOrm.sql`COALESCE(excluded.pid, ${p.pid})`},setWhere:drizzleOrm.eq(p.status,"running")}).run();}catch(r){throw r instanceof P?r:new P("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=?,
58
+ `)}`);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),gd(n,i),s?.cnt&&(hd(n,o,t),md(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 br(n,e){ns.has(e)||(yd(n),ns.add(e));}u();var T=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);}};u();u();var ss=sqliteCore.sqliteTable("workspaces",{id:sqliteCore.text("id").primaryKey(),slug:sqliteCore.text("slug").notNull().unique(),name:sqliteCore.text("name").notNull(),workspace_path:sqliteCore.text("workspace_path"),description:sqliteCore.text("description"),is_active:sqliteCore.integer("is_active").notNull().default(1),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()});u();var p=sqliteCore.sqliteTable("tasks",{id:sqliteCore.text("id").primaryKey(),agent_id:sqliteCore.text("agent_id").notNull(),user_id:sqliteCore.text("user_id"),prompt:sqliteCore.text("prompt").notNull(),mode:sqliteCore.text("mode").notNull().default("execute"),status:sqliteCore.text("status").notNull().default("running"),result:sqliteCore.text("result"),error:sqliteCore.text("error"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),metadata:sqliteCore.text("metadata"),workspace_id:sqliteCore.text("workspace_id"),trace_id:sqliteCore.text("trace_id"),parent_task_id:sqliteCore.text("parent_task_id"),caller_agent_id:sqliteCore.text("caller_agent_id"),model:sqliteCore.text("model"),platform:sqliteCore.text("platform").default("cli"),crewx_version:sqliteCore.text("crewx_version"),input_tokens:sqliteCore.integer("input_tokens").default(0),output_tokens:sqliteCore.integer("output_tokens").default(0),cost_usd:sqliteCore.real("cost_usd").default(0),pid:sqliteCore.integer("pid"),rendered_prompt:sqliteCore.text("rendered_prompt"),command:sqliteCore.text("command"),coding_agent_command:sqliteCore.text("coding_agent_command"),exit_code:sqliteCore.integer("exit_code"),logs:sqliteCore.text("logs"),thread_id:sqliteCore.text("thread_id"),workspace_ref:sqliteCore.text("workspace_ref"),project_id:sqliteCore.text("project_id"),project_ref:sqliteCore.text("project_ref"),cached_input_tokens:sqliteCore.integer("cached_input_tokens").default(0),run_epoch:sqliteCore.integer("run_epoch").default(0)},n=>({idx_tasks_agent_id:sqliteCore.index("idx_tasks_agent_id").on(n.agent_id),idx_tasks_status:sqliteCore.index("idx_tasks_status").on(n.status),idx_tasks_started_at:sqliteCore.index("idx_tasks_started_at").on(n.started_at),idx_tasks_trace_id:sqliteCore.index("idx_tasks_trace_id").on(n.trace_id),idx_tasks_parent_task_id:sqliteCore.index("idx_tasks_parent_task_id").on(n.parent_task_id),idx_tasks_crewx_version:sqliteCore.index("idx_tasks_crewx_version").on(n.crewx_version),idx_tasks_pid:sqliteCore.index("idx_tasks_pid").on(n.pid),idx_tasks_thread_id:sqliteCore.index("idx_tasks_thread_id").on(n.thread_id),idx_tasks_workspace_id:sqliteCore.index("idx_tasks_workspace_id").on(n.workspace_id),idx_tasks_workspace_ref:sqliteCore.index("idx_tasks_workspace_ref").on(n.workspace_ref),idx_tasks_project_id:sqliteCore.index("idx_tasks_project_id").on(n.project_id),idx_tasks_ws_started:sqliteCore.index("idx_tasks_ws_started").on(n.workspace_id,n.started_at)}));u();var is=sqliteCore.sqliteTable("threads",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").references(()=>ss.id,{onDelete:"set null"}),platform:sqliteCore.text("platform").notNull().default("cli"),title:sqliteCore.text("title"),first_message:sqliteCore.text("first_message"),last_message:sqliteCore.text("last_message"),message_count:sqliteCore.integer("message_count").notNull().default(0),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull(),metadata:sqliteCore.text("metadata"),title_locked:sqliteCore.integer("title_locked").notNull().default(0),pinned:sqliteCore.integer("pinned").notNull().default(0),starred:sqliteCore.integer("starred").notNull().default(0)},n=>({idx_threads_updated_at:sqliteCore.index("idx_threads_updated_at").on(n.updated_at),idx_threads_workspace_id:sqliteCore.index("idx_threads_workspace_id").on(n.workspace_id),idx_threads_ws_updated:sqliteCore.index("idx_threads_ws_updated").on(n.workspace_id,n.updated_at),idx_threads_title:sqliteCore.index("idx_threads_title").on(n.title)}));u();var lt=sqliteCore.sqliteTable("spans",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>p.id,{onDelete:"set null"}),parent_span_id:sqliteCore.text("parent_span_id").references(()=>lt.id,{onDelete:"set null"}),name:sqliteCore.text("name").notNull(),kind:sqliteCore.text("kind").notNull().default("internal"),status:sqliteCore.text("status").notNull().default("ok"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),error:sqliteCore.text("error"),attributes:sqliteCore.text("attributes")},n=>({idx_spans_task_id:sqliteCore.index("idx_spans_task_id").on(n.task_id),idx_spans_parent_span_id:sqliteCore.index("idx_spans_parent_span_id").on(n.parent_span_id)}));u();sqliteCore.sqliteTable("tool_calls",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>p.id,{onDelete:"cascade"}),session_id:sqliteCore.text("session_id"),tool_name:sqliteCore.text("tool_name").notNull(),files:sqliteCore.text("files"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),duration_ms:sqliteCore.integer("duration_ms"),timestamp:sqliteCore.text("timestamp").notNull()},n=>({idx_tool_calls_task_id:sqliteCore.index("idx_tool_calls_task_id").on(n.task_id),idx_tool_calls_tool_name:sqliteCore.index("idx_tool_calls_tool_name").on(n.tool_name),idx_tool_calls_timestamp:sqliteCore.index("idx_tool_calls_timestamp").on(n.timestamp)}));u();sqliteCore.sqliteTable("thread_boxes",{id:sqliteCore.text("id").primaryKey(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>is.id,{onDelete:"cascade"}),seq:sqliteCore.integer("seq").notNull(),first_task_id:sqliteCore.text("first_task_id").notNull(),mid_task_id:sqliteCore.text("mid_task_id").notNull(),last_task_id:sqliteCore.text("last_task_id").notNull(),task_count:sqliteCore.integer("task_count").notNull(),summary:sqliteCore.text("summary"),source_tokens:sqliteCore.integer("source_tokens").notNull(),summary_tokens:sqliteCore.integer("summary_tokens"),created_at:sqliteCore.text("created_at").notNull()},n=>({idx_thread_boxes_thread_id:sqliteCore.index("idx_thread_boxes_thread_id").on(n.thread_id),idx_thread_boxes_seq:sqliteCore.index("idx_thread_boxes_seq").on(n.thread_id,n.seq),uniq_thread_boxes_thread_seq:sqliteCore.unique().on(n.thread_id,n.seq)}));u();sqliteCore.sqliteTable("request_logs",{id:sqliteCore.text("id").primaryKey(),path:sqliteCore.text("path").notNull(),method:sqliteCore.text("method").notNull(),status_code:sqliteCore.integer("status_code").notNull(),duration_ms:sqliteCore.integer("duration_ms").notNull(),ip:sqliteCore.text("ip"),request_headers:sqliteCore.text("request_headers"),response_headers:sqliteCore.text("response_headers"),request_body:sqliteCore.text("request_body"),response_body:sqliteCore.text("response_body"),query:sqliteCore.text("query"),user_id:sqliteCore.text("user_id"),project_id:sqliteCore.text("project_id"),partition_key:sqliteCore.text("partition_key").notNull(),timestamp:sqliteCore.text("timestamp").notNull().default(drizzleOrm.sql`(datetime('now'))`),metadata:sqliteCore.text("metadata")},n=>({idx_request_logs_timestamp:sqliteCore.index("idx_request_logs_timestamp").on(n.timestamp),idx_request_logs_path:sqliteCore.index("idx_request_logs_path").on(n.path),idx_request_logs_status_code:sqliteCore.index("idx_request_logs_status_code").on(n.status_code),idx_request_logs_partition_key:sqliteCore.index("idx_request_logs_partition_key").on(n.partition_key)}));u();sqliteCore.sqliteTable("usage_limit_snapshots",{id:sqliteCore.text("id").primaryKey(),provider:sqliteCore.text("provider").notNull(),account_ref:sqliteCore.text("account_ref").notNull().default("default"),limit_window:sqliteCore.text("limit_window").notNull(),bucket_start:sqliteCore.text("bucket_start").notNull(),captured_at:sqliteCore.text("captured_at").notNull(),used_percent:sqliteCore.integer("used_percent").notNull(),remaining_percent:sqliteCore.integer("remaining_percent").notNull(),resets_at:sqliteCore.text("resets_at"),source:sqliteCore.text("source").notNull(),metadata:sqliteCore.text("metadata")},n=>({uniq_usage_limit_snapshots_bucket:sqliteCore.uniqueIndex("uniq_usage_limit_snapshots_bucket").on(n.provider,n.account_ref,n.limit_window,n.bucket_start),idx_usage_limit_snapshots_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_window_bucket").on(n.limit_window,n.bucket_start),idx_usage_limit_snapshots_provider_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_provider_window_bucket").on(n.provider,n.limit_window,n.bucket_start)}));u();sqliteCore.sqliteTable("usage_reports",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),month:sqliteCore.text("month").notNull(),generated_at:sqliteCore.text("generated_at").notNull(),source_range:sqliteCore.text("source_range").notNull(),tier:sqliteCore.text("tier").notNull(),total_tokens:sqliteCore.integer("total_tokens").notNull(),total_cost_usd:sqliteCore.real("total_cost_usd").notNull(),payload:sqliteCore.text("payload").notNull(),payload_hash:sqliteCore.text("payload_hash"),signature:sqliteCore.text("signature"),signed_at:sqliteCore.text("signed_at"),issuer:sqliteCore.text("issuer")},n=>({uniq_usage_reports_ws_month:sqliteCore.uniqueIndex("uniq_usage_reports_ws_month").on(n.workspace_id,n.month)}));u();sqliteCore.sqliteTable("notifications",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id"),task_id:sqliteCore.text("task_id"),thread_id:sqliteCore.text("thread_id"),source:sqliteCore.text("source").notNull().default("agent"),level:sqliteCore.text("level").notNull().default("info"),title:sqliteCore.text("title").notNull(),body:sqliteCore.text("body"),target_user_id:sqliteCore.text("target_user_id"),created_at:sqliteCore.text("created_at").notNull(),metadata:sqliteCore.text("metadata")},n=>({idx_notifications_ws_created:sqliteCore.index("idx_notifications_ws_created").on(n.workspace_id,drizzleOrm.sql`${n.created_at} DESC`)}));sqliteCore.sqliteTable("notification_reads",{notification_id:sqliteCore.text("notification_id").notNull(),user_id:sqliteCore.text("user_id").notNull(),read_at:sqliteCore.text("read_at").notNull()},n=>({pk:sqliteCore.primaryKey({columns:[n.notification_id,n.user_id]})}));u();sqliteCore.sqliteTable("agent_suggestions",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id").notNull(),task_id:sqliteCore.text("task_id"),type:sqliteCore.text("type").notNull(),status:sqliteCore.text("status").notNull().default("pending"),payload:sqliteCore.text("payload").notNull(),applied_commit_sha:sqliteCore.text("applied_commit_sha"),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()},n=>({idx_agent_suggestions_ws_agent:sqliteCore.index("idx_agent_suggestions_ws_agent").on(n.workspace_id,n.agent_id),idx_agent_suggestions_ws_created:sqliteCore.index("idx_agent_suggestions_ws_created").on(n.workspace_id,n.created_at)}));var He="2026-05-09",Kd="0.8.9-rc.13",Be=10,qe=parseInt(Kd.split("rc.")[1]),Gd=new Set(["workflow","mcp"]),ms=600*1e3,Yt=class extends At{dbPath;pidNullObservedSince=new Map;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=K.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=K.dirname(t);hs.existsSync(o)||hs.mkdirSync(o,{recursive:true});}else if(!hs.existsSync(t))throw new T("NOT_FOUND","Database not found");let r=Ae(t);if(e)try{br(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:drizzleOrm.sql`COALESCE(excluded.pid, ${p.pid})`},setWhere:drizzleOrm.eq(p.status,"running")}).run();}catch(r){throw r instanceof T?r:new T("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=?,
59
59
  exit_code=?, input_tokens=?, output_tokens=?, cached_input_tokens=?, cost_usd=?,
60
60
  model=COALESCE(?, model)
61
- 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 P?r:new P("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(drizzleOrm.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(drizzleOrm.eq(p.id,e)).run();},{behavior:"immediate"});}catch(o){throw o instanceof P?o:new P("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(drizzleOrm.eq(p.status,"running")).orderBy(drizzleOrm.desc(p.started_at)).all()}catch(t){throw new P("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(drizzleOrm.desc(p.started_at)).limit(100).all()}catch(t){throw new P("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(drizzleOrm.eq(p.id,e)).limit(1).get()??void 0}catch(r){throw new P("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(drizzleOrm.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(drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.status,"running"))).run(),{killed:!0,pid:r.pid??void 0}}catch(r){throw r instanceof P?r:new P("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(drizzleOrm.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(drizzleOrm.and(drizzleOrm.eq(p.id,i.id),drizzleOrm.eq(p.status,"running"))).run(),s++);continue}if(Ud.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>=ds&&(e.db.update(p).set({status:"failed",error:"Reaped: pid never recorded after resume (stale running_instruction)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(p.id,i.id),drizzleOrm.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=ds){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(drizzleOrm.and(drizzleOrm.eq(p.status,"running"),drizzleOrm.eq(p.platform,"workflow"),drizzleOrm.isNull(p.pid),drizzleOrm.lt(p.started_at,r))).run().changes??0}finally{t.close();}}findTaskStatus(e,t){let r=this.resolveDbPaths();for(let o of r){if(!ls.existsSync(o))continue;let s=Ae(o);try{let i=t?drizzleOrm.eq(p.workspace_id,t):void 0,a=i?drizzleOrm.and(drizzleOrm.eq(p.id,e),i):drizzleOrm.eq(p.id,e),d=s.db.select().from(p).where(a).limit(1).get()??void 0;if(!d){let l=drizzleOrm.or(drizzleOrm.eq(p.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.like(p.command,`%--thread=${e}%`))),c=i?drizzleOrm.and(l,i):l;d=s.db.select().from(p).where(c).orderBy(drizzleOrm.desc(p.started_at)).limit(1).get()??void 0;}if(d)return d}catch(i){throw new P("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(!ls.existsSync(i))continue;let a=Ae(i);try{let d=t?drizzleOrm.and(drizzleOrm.eq(p.parent_task_id,e),drizzleOrm.eq(p.workspace_id,t)):drizzleOrm.eq(p.parent_task_id,e),l=a.db.select().from(p).where(d).orderBy(drizzleOrm.asc(p.started_at)).all();for(let c of l)o.has(c.id)||(o.add(c.id),s.push(c));}catch(d){throw new P("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?drizzleOrm.sql`
61
+ 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 T?r:new T("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(drizzleOrm.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(drizzleOrm.eq(p.id,e)).run();},{behavior:"immediate"});}catch(o){throw o instanceof T?o:new T("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(drizzleOrm.eq(p.status,"running")).orderBy(drizzleOrm.desc(p.started_at)).all()}catch(t){throw new T("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(drizzleOrm.desc(p.started_at)).limit(100).all()}catch(t){throw new T("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(drizzleOrm.eq(p.id,e)).limit(1).get()??void 0}catch(r){throw new T("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(drizzleOrm.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(drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.status,"running"))).run(),{killed:!0,pid:r.pid??void 0}}catch(r){throw r instanceof T?r:new T("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(drizzleOrm.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(drizzleOrm.and(drizzleOrm.eq(p.id,i.id),drizzleOrm.eq(p.status,"running"))).run(),s++);continue}if(Gd.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>=ms&&(e.db.update(p).set({status:"failed",error:"Reaped: pid never recorded after resume (stale running_instruction)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(p.id,i.id),drizzleOrm.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=ms){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(drizzleOrm.and(drizzleOrm.eq(p.status,"running"),drizzleOrm.eq(p.platform,"workflow"),drizzleOrm.isNull(p.pid),drizzleOrm.lt(p.started_at,r))).run().changes??0}finally{t.close();}}findTaskStatus(e,t){let r=this.resolveDbPaths();for(let o of r){if(!hs.existsSync(o))continue;let s=Ae(o);try{let i=t?drizzleOrm.eq(p.workspace_id,t):void 0,a=i?drizzleOrm.and(drizzleOrm.eq(p.id,e),i):drizzleOrm.eq(p.id,e),d=s.db.select().from(p).where(a).limit(1).get()??void 0;if(!d){let l=drizzleOrm.or(drizzleOrm.eq(p.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.like(p.command,`%--thread=${e}%`))),c=i?drizzleOrm.and(l,i):l;d=s.db.select().from(p).where(c).orderBy(drizzleOrm.desc(p.started_at)).limit(1).get()??void 0;}if(d)return d}catch(i){throw new T("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(!hs.existsSync(i))continue;let a=Ae(i);try{let d=t?drizzleOrm.and(drizzleOrm.eq(p.parent_task_id,e),drizzleOrm.eq(p.workspace_id,t)):drizzleOrm.eq(p.parent_task_id,e),l=a.db.select().from(p).where(d).orderBy(drizzleOrm.asc(p.started_at)).all();for(let c of l)o.has(c.id)||(o.add(c.id),s.push(c));}catch(d){throw new T("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?drizzleOrm.sql`
62
62
  SELECT
63
63
  COALESCE(workspace_id, 'unknown') AS workspace_id,
64
64
  COALESCE(SUM(input_tokens), 0) AS input_tokens,
@@ -79,7 +79,7 @@ ${r.join(`
79
79
  FROM tasks
80
80
  GROUP BY workspace_id
81
81
  ORDER BY (COALESCE(SUM(input_tokens), 0) + COALESCE(SUM(output_tokens), 0)) DESC
82
- `)}catch(r){throw new P("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(!ls.existsSync(d))continue;let l=Ae(d);try{let c=drizzleOrm.or(drizzleOrm.eq(p.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.like(p.command,`%--thread=${e}%`))),f=t?drizzleOrm.and(c,drizzleOrm.eq(p.workspace_id,t)):c,g=l.db.select({id:p.id,input_tokens:p.input_tokens,output_tokens:p.output_tokens,cost_usd:p.cost_usd}).from(p).where(f).all();for(let m of g)o.has(m.id)||(o.add(m.id),s+=m.input_tokens??0,i+=m.output_tokens??0,a+=m.cost_usd??0);}catch(c){throw new P("DB_ERROR","Failed to get thread token usage",c)}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(!ls.existsSync(i))continue;let a=Ae(i);try{let d=drizzleOrm.or(drizzleOrm.eq(p.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.like(p.command,`%--thread=${e}%`))),l=t?drizzleOrm.and(d,drizzleOrm.eq(p.workspace_id,t)):d,c=a.db.select().from(p).where(l).orderBy(drizzleOrm.asc(p.started_at)).all();for(let f of c)o.has(f.id)||(o.add(f.id),s.push(f));}catch(d){throw new P("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?drizzleOrm.eq(p.workspace_id,t):void 0,a=(d,l)=>{if(!d)return;let c=s.get(d);if(c&&l.started_at<=c)return;let f=this.parseWorkflowCardMetadata(l.metadata);f.kind==="workflow_card"&&(s.set(d,l.started_at),r.set(d,{taskId:l.id,workflowRunId:f.workflowRunId,raw:l.result??void 0}));};for(let d of this.resolveDbPaths()){if(!ls.existsSync(d))continue;let l=Ae(d);try{let c=drizzleOrm.and(drizzleOrm.inArray(p.thread_id,e),drizzleOrm.like(p.metadata,'%"kind":"workflow_card"%')),f=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?drizzleOrm.and(c,i):c).all();for(let w of f)a(w.thread_id,w);let g=drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.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?drizzleOrm.and(g,i):g).all();for(let w of m){let _=this.extractThreadIdFromCommand(w.command);!_||!o.has(_)||a(_,w);}}catch(c){throw new P("DB_ERROR","Failed to batch fetch workflow cards",c)}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(drizzleOrm.eq(p.workspace_id,e.workspaceId));let o=e.agents&&e.agents.length>0?e.agents:e.agentId?[e.agentId]:null;o&&r.push(drizzleOrm.inArray(p.agent_id,o));let s=e.statuses&&e.statuses.length>0?e.statuses:e.status?[e.status]:null;s&&r.push(drizzleOrm.inArray(p.status,s));let i=e.q??e.search;i&&r.push(drizzleOrm.like(p.prompt,`%${i}%`)),e.from&&r.push(drizzleOrm.gte(p.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(p.started_at,e.to));let a=r.length>0?drizzleOrm.and(...r):void 0,d=t.db.select({count:drizzleOrm.sql`count(*)`}).from(p).where(a).get(),l=(e.sortDir??"DESC")==="ASC"?drizzleOrm.asc(p.started_at):drizzleOrm.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 P("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?drizzleOrm.sql`
82
+ `)}catch(r){throw new T("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(!hs.existsSync(d))continue;let l=Ae(d);try{let c=drizzleOrm.or(drizzleOrm.eq(p.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.like(p.command,`%--thread=${e}%`))),f=t?drizzleOrm.and(c,drizzleOrm.eq(p.workspace_id,t)):c,g=l.db.select({id:p.id,input_tokens:p.input_tokens,output_tokens:p.output_tokens,cost_usd:p.cost_usd}).from(p).where(f).all();for(let m of g)o.has(m.id)||(o.add(m.id),s+=m.input_tokens??0,i+=m.output_tokens??0,a+=m.cost_usd??0);}catch(c){throw new T("DB_ERROR","Failed to get thread token usage",c)}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(!hs.existsSync(i))continue;let a=Ae(i);try{let d=drizzleOrm.or(drizzleOrm.eq(p.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.like(p.command,`%--thread=${e}%`))),l=t?drizzleOrm.and(d,drizzleOrm.eq(p.workspace_id,t)):d,c=a.db.select().from(p).where(l).orderBy(drizzleOrm.asc(p.started_at)).all();for(let f of c)o.has(f.id)||(o.add(f.id),s.push(f));}catch(d){throw new T("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?drizzleOrm.eq(p.workspace_id,t):void 0,a=(d,l)=>{if(!d)return;let c=s.get(d);if(c&&l.started_at<=c)return;let f=this.parseWorkflowCardMetadata(l.metadata);f.kind==="workflow_card"&&(s.set(d,l.started_at),r.set(d,{taskId:l.id,workflowRunId:f.workflowRunId,raw:l.result??void 0}));};for(let d of this.resolveDbPaths()){if(!hs.existsSync(d))continue;let l=Ae(d);try{let c=drizzleOrm.and(drizzleOrm.inArray(p.thread_id,e),drizzleOrm.like(p.metadata,'%"kind":"workflow_card"%')),f=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?drizzleOrm.and(c,i):c).all();for(let w of f)a(w.thread_id,w);let g=drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.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?drizzleOrm.and(g,i):g).all();for(let w of m){let _=this.extractThreadIdFromCommand(w.command);!_||!o.has(_)||a(_,w);}}catch(c){throw new T("DB_ERROR","Failed to batch fetch workflow cards",c)}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(drizzleOrm.eq(p.workspace_id,e.workspaceId));let o=e.agents&&e.agents.length>0?e.agents:e.agentId?[e.agentId]:null;o&&r.push(drizzleOrm.inArray(p.agent_id,o));let s=e.statuses&&e.statuses.length>0?e.statuses:e.status?[e.status]:null;s&&r.push(drizzleOrm.inArray(p.status,s));let i=e.q??e.search;i&&r.push(drizzleOrm.like(p.prompt,`%${i}%`)),e.from&&r.push(drizzleOrm.gte(p.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(p.started_at,e.to));let a=r.length>0?drizzleOrm.and(...r):void 0,d=t.db.select({count:drizzleOrm.sql`count(*)`}).from(p).where(a).get(),l=(e.sortDir??"DESC")==="ASC"?drizzleOrm.asc(p.started_at):drizzleOrm.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 T("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?drizzleOrm.sql`
83
83
  SELECT
84
84
  t.agent_id,
85
85
  t.workspace_id,
@@ -164,7 +164,7 @@ ${r.join(`
164
164
  ), 0)
165
165
  + COALESCE(SUM(t.output_tokens), 0)
166
166
  ) DESC
167
- `).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 P("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?drizzleOrm.sql`
167
+ `).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 T("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?drizzleOrm.sql`
168
168
  SELECT
169
169
  date(t.started_at) AS date,
170
170
  t.agent_id,
@@ -217,7 +217,7 @@ ${r.join(`
217
217
  AND t.started_at < ${t}
218
218
  GROUP BY date(t.started_at), t.agent_id
219
219
  ORDER BY date(t.started_at) ASC
220
- `).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 P("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(drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.workspace_id,t))).limit(1).get()??void 0}catch(o){throw new P("DB_ERROR","Failed to find task for stop",o)}finally{r.close();}}findLatestTaskByMetadata(e){if(!this.dbExists())return null;let t=this.openHandle(false);try{return t.db.select({id:p.id,thread_id:p.thread_id,status:p.status,result:p.result,error:p.error,started_at:p.started_at,completed_at:p.completed_at}).from(p).where(drizzleOrm.and(drizzleOrm.eq(p.agent_id,e.agentId),drizzleOrm.eq(p.workspace_id,e.workspaceId),drizzleOrm.sql`${p.metadata} IS NOT NULL AND json_valid(${p.metadata}) AND json_extract(${p.metadata}, '$.' || ${e.metaKey}) = ${e.metaValue}`)).orderBy(drizzleOrm.desc(p.started_at)).limit(1).get()??null}catch(r){throw new P("DB_ERROR","Failed to find latest task by metadata",r)}finally{t.close();}}markTaskFailed(e,t,r){if(!this.dbExists())return;let o=this.openHandle(true);try{let s=new Date().toISOString(),i=r?drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.status,"running"),drizzleOrm.eq(p.workspace_id,r)):drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.status,"running"));o.db.update(p).set({status:"failed",error:t,completed_at:s}).where(i).run();}catch(s){throw s instanceof P?s:new P("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(!ls.existsSync(i))continue;let a=Ae(i);try{let d=t?drizzleOrm.and(drizzleOrm.like(p.prompt,`%${e}%`),drizzleOrm.eq(p.workspace_id,t)):drizzleOrm.like(p.prompt,`%${e}%`),l=a.db.select().from(p).where(d).orderBy(drizzleOrm.asc(p.started_at)).all();for(let c of l)o.has(c.id)||(o.add(c.id),s.push(c));}catch(d){throw new P("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=drizzleOrm.sql`
220
+ `).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 T("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(drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.workspace_id,t))).limit(1).get()??void 0}catch(o){throw new T("DB_ERROR","Failed to find task for stop",o)}finally{r.close();}}findLatestTaskByMetadata(e){if(!this.dbExists())return null;let t=this.openHandle(false);try{return t.db.select({id:p.id,thread_id:p.thread_id,status:p.status,result:p.result,error:p.error,started_at:p.started_at,completed_at:p.completed_at}).from(p).where(drizzleOrm.and(drizzleOrm.eq(p.agent_id,e.agentId),drizzleOrm.eq(p.workspace_id,e.workspaceId),drizzleOrm.sql`${p.metadata} IS NOT NULL AND json_valid(${p.metadata}) AND json_extract(${p.metadata}, '$.' || ${e.metaKey}) = ${e.metaValue}`)).orderBy(drizzleOrm.desc(p.started_at)).limit(1).get()??null}catch(r){throw new T("DB_ERROR","Failed to find latest task by metadata",r)}finally{t.close();}}markTaskFailed(e,t,r){if(!this.dbExists())return;let o=this.openHandle(true);try{let s=new Date().toISOString(),i=r?drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.status,"running"),drizzleOrm.eq(p.workspace_id,r)):drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.status,"running"));o.db.update(p).set({status:"failed",error:t,completed_at:s}).where(i).run();}catch(s){throw s instanceof T?s:new T("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(!hs.existsSync(i))continue;let a=Ae(i);try{let d=t?drizzleOrm.and(drizzleOrm.like(p.prompt,`%${e}%`),drizzleOrm.eq(p.workspace_id,t)):drizzleOrm.like(p.prompt,`%${e}%`),l=a.db.select().from(p).where(d).orderBy(drizzleOrm.asc(p.started_at)).all();for(let c of l)o.has(c.id)||(o.add(c.id),s.push(c));}catch(d){throw new T("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=drizzleOrm.sql`
221
221
  CASE
222
222
  WHEN ${p.model} LIKE 'claude-%' OR ${p.model} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
223
223
  WHEN ${p.model} LIKE 'gpt-%' OR ${p.model} LIKE 'codex-%' THEN 'codex'
@@ -253,7 +253,7 @@ ${r.join(`
253
253
  ${a}
254
254
  GROUP BY provider
255
255
  ORDER BY (COALESCE(SUM(${i}), 0) + COALESCE(SUM(${p.output_tokens}), 0)) DESC
256
- `).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 P("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=drizzleOrm.sql`
256
+ `).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 T("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=drizzleOrm.sql`
257
257
  CASE
258
258
  WHEN ${p.model} LIKE 'claude-%' OR ${p.model} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
259
259
  WHEN ${p.model} LIKE 'gpt-%' OR ${p.model} LIKE 'codex-%' THEN 'codex'
@@ -289,7 +289,7 @@ ${r.join(`
289
289
  FROM ${p}
290
290
  ${a}
291
291
  GROUP BY ${p.model}
292
- `),l=new Map;for(let c of d){let f=pn(c.model??""),g=l.get(f);g?(g.totalTasks+=c.total_tasks,g.inputTokens+=c.input_tokens,g.outputTokens+=c.output_tokens,g.cachedInputTokens+=c.cached_input_tokens,g.costUsd+=c.cost_usd,g.totalTokens+=c.input_tokens+c.output_tokens,g.activeDurationMs+=c.active_duration_ms??0,c.last_active_at&&(!g.lastActiveAt||c.last_active_at>g.lastActiveAt)&&(g.lastActiveAt=c.last_active_at)):l.set(f,{model:f,provider:c.provider,totalTasks:c.total_tasks,inputTokens:c.input_tokens,outputTokens:c.output_tokens,cachedInputTokens:c.cached_input_tokens,costUsd:c.cost_usd,totalTokens:c.input_tokens+c.output_tokens,activeDurationMs:c.active_duration_ms??0,lastActiveAt:c.last_active_at??null});}return Array.from(l.values()).sort((c,f)=>f.costUsd-c.costUsd)}catch(s){throw new P("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?drizzleOrm.sql`WHERE ${p.started_at} >= ${e} AND ${p.started_at} < ${t} AND ${p.workspace_id} = ${r}`:drizzleOrm.sql`WHERE ${p.started_at} >= ${e} AND ${p.started_at} < ${t}`;return o.db.all(drizzleOrm.sql`
292
+ `),l=new Map;for(let c of d){let f=mn(c.model??""),g=l.get(f);g?(g.totalTasks+=c.total_tasks,g.inputTokens+=c.input_tokens,g.outputTokens+=c.output_tokens,g.cachedInputTokens+=c.cached_input_tokens,g.costUsd+=c.cost_usd,g.totalTokens+=c.input_tokens+c.output_tokens,g.activeDurationMs+=c.active_duration_ms??0,c.last_active_at&&(!g.lastActiveAt||c.last_active_at>g.lastActiveAt)&&(g.lastActiveAt=c.last_active_at)):l.set(f,{model:f,provider:c.provider,totalTasks:c.total_tasks,inputTokens:c.input_tokens,outputTokens:c.output_tokens,cachedInputTokens:c.cached_input_tokens,costUsd:c.cost_usd,totalTokens:c.input_tokens+c.output_tokens,activeDurationMs:c.active_duration_ms??0,lastActiveAt:c.last_active_at??null});}return Array.from(l.values()).sort((c,f)=>f.costUsd-c.costUsd)}catch(s){throw new T("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?drizzleOrm.sql`WHERE ${p.started_at} >= ${e} AND ${p.started_at} < ${t} AND ${p.workspace_id} = ${r}`:drizzleOrm.sql`WHERE ${p.started_at} >= ${e} AND ${p.started_at} < ${t}`;return o.db.all(drizzleOrm.sql`
293
293
  SELECT
294
294
  ${p.thread_id} AS thread_id,
295
295
  ${p.agent_id} AS agent_id,
@@ -300,25 +300,25 @@ ${r.join(`
300
300
  FROM ${p}
301
301
  ${s}
302
302
  ORDER BY ${p.started_at} ASC
303
- `).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 P("DB_ERROR","Failed to get tasks for report",s)}finally{o.close();}}findTaskEvidence(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(drizzleOrm.eq(p.workspace_id,e.workspaceId)),e.agents&&e.agents.length>0&&r.push(drizzleOrm.inArray(p.agent_id,e.agents)),e.statuses&&e.statuses.length>0&&r.push(drizzleOrm.inArray(p.status,e.statuses)),e.from&&r.push(drizzleOrm.gte(p.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(p.started_at,e.to));let o=r.length>0?drizzleOrm.and(...r):void 0,s=(e.order??"DESC")==="ASC"?drizzleOrm.asc(p.started_at):drizzleOrm.desc(p.started_at),i={id:p.id,agent_id:p.agent_id,status:p.status,prompt:p.prompt,started_at:p.started_at,completed_at:p.completed_at,thread_id:p.thread_id};return e.limit?t.db.select(i).from(p).where(o).orderBy(s).limit(e.limit).all():t.db.select(i).from(p).where(o).orderBy(s).all()}catch(r){throw new P("DB_ERROR","Failed to find task evidence",r)}finally{t.close();}}findThreadChains(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{let r=e.maxThreads??8,o=e.maxTurnsPerThread??4,s=[drizzleOrm.isNotNull(p.thread_id),drizzleOrm.isNull(p.parent_task_id),drizzleOrm.isNull(p.caller_agent_id),drizzleOrm.or(drizzleOrm.isNull(p.platform),drizzleOrm.ne(p.platform,"workflow")),drizzleOrm.or(drizzleOrm.isNull(p.metadata),drizzleOrm.notLike(p.metadata,'%"kind":"workflow_card"%')),drizzleOrm.or(drizzleOrm.isNull(p.metadata),drizzleOrm.notLike(p.metadata,'%"retriedFromTaskId"%'))];e.workspaceId&&s.push(drizzleOrm.eq(p.workspace_id,e.workspaceId)),e.from&&s.push(drizzleOrm.gte(p.started_at,e.from)),e.to&&s.push(drizzleOrm.lt(p.started_at,e.to));let i=t.db.select({id:p.id,agent_id:p.agent_id,status:p.status,prompt:p.prompt,started_at:p.started_at,completed_at:p.completed_at,thread_id:p.thread_id}).from(p).where(drizzleOrm.and(...s)).orderBy(drizzleOrm.asc(p.started_at),drizzleOrm.asc(p.id)).all(),a=new Map;for(let l of i){if(!l.thread_id)continue;let c={id:l.id,agentId:l.agent_id,status:l.status,prompt:l.prompt,startedAt:l.started_at,completedAt:l.completed_at},f=a.get(l.thread_id);f?f.push(c):a.set(l.thread_id,[c]);}let d=[];for(let[l,c]of a){let f=c.filter(g=>g.agentId===e.targetAgentId).length;f<2||d.push({threadId:l,targetAgentTurnCount:f,turns:c});}return d.sort((l,c)=>{let f=l.turns[l.turns.length-1].startedAt,g=c.turns[c.turns.length-1].startedAt;return f<g?1:f>g?-1:0}),d.slice(0,r).map(l=>({threadId:l.threadId,targetAgentTurnCount:l.targetAgentTurnCount,turns:l.turns.slice(-o)}))}catch(r){throw new P("DB_ERROR","Failed to find thread chains",r)}finally{t.close();}}};var jd=new Set(["Read","Grep","Find","Glob"]),Wd=["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"],Fd=[/\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 Hd(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 Bd(n,e){if(jd.has(n))return true;if(n!=="Bash"||!e)return false;let t=e.split(`
304
- `)[0].trimStart();return Fd.some(r=>r.test(t))?false:Wd.some(r=>t.startsWith(r))}function Mr(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function qd(n,e,t){if(n!=="Read"||!e)return "ok";let o=e.split(`
305
- `).find(s=>s.trim()&&!s.startsWith("Read "))?.trim()??e.trim();if(!o)return "unknown";try{let s=ls__namespace.statSync(o);if(t){let i=Date.parse(t);if(!Number.isNaN(i)&&s.mtimeMs>i)return "stale"}return "ok"}catch{return "unknown"}}function zd(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 Kd(n){if(!Array.isArray(n))return [];let e=n,t=e.filter(a=>a.level==="stdout"&&a.message).map(a=>a.message),r=zd(t),o=[];for(let a of e)a.level==="info"&&a.message?o.push(...he(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:Hd(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 Gd(n,e){let t=Kd(n),r=[];for(let o of t){let s=o.tool==="Bash"?o.input?.split(`
306
- `)[0]?.slice(0,150)??null:o.input?.slice(0,150)??null,i=Bd(o.tool,o.input)&&!o.isError;r.push({tool:o.tool,cmd:s,result:o.result,status:qd(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="${Mr(o.tool)}"`,i=o.cmd?` cmd="${Mr(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(Mr(l.slice(0,d))+` \u2026 [truncated, ${d}/${l.length} chars shown]`):r.push(Mr(l)),r.push(" </entry>");}else r.push(` <entry ${s}${i}${a} />`);}}return r.push("</activity_log>"),r}function cs(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 Xt().findTasksByThread(e).filter(g=>!g.parent_task_id&&g.agent_id===t).sort((g,m)=>m.started_at>g.started_at?1:-1).slice(0,Math.min(r,5));}catch{return new Map}if(!i.length)return new Map;let a=[];for(let f of i){let g=[];try{let m=JSON.parse(f.logs??"[]");Array.isArray(m)&&(g=m);}catch{}a.push({taskId:f.id,entries:Gd(g,f.completed_at)});}let d=new Map,l=typeof s=="number"&&s>0&&s<=1?s:1,c=1e3;for(let f=0;f<a.length;f++){let{taskId:g,entries:m}=a[f];if(m.length===0)continue;let w=Math.max(Math.floor((o??8e3)*Math.pow(l,f)),c),_=Math.max(0,m.length-200),k=_>0?m.slice(_):m,y=Vd(k,_,w);d.set(g,y.join(`
307
- `));}return d}u();u();var Jd={agentId:zod.z.string().describe("The agent ID to query"),query:zod.z.string().describe("The query message to send"),context:zod.z.string().optional().describe("Additional context"),thread:zod.z.string().optional().describe("Thread ID for conversation continuity")},Xd={agentId:zod.z.string().describe("The agent ID to execute"),task:zod.z.string().describe("The task description to execute"),context:zod.z.string().optional().describe("Additional context"),thread:zod.z.string().optional().describe("Thread ID for conversation continuity")};function us(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",Jd,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}});}u();function ps(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 gs(n,e){return e?await e(n)?null:new Response(JSON.stringify({error:"Unauthorized"}),{status:401,headers:{"Content-Type":"application/json"}}):null}function Zd(n,e){let t=new mcp_js.McpServer({name:"crewx-mcp-server",version:"1.0.0"},{capabilities:{tools:{}}});return us(t,n,e),t}function On(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=ps(o);if(s)return s;let i=await gs(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=Zd(n,t),l=new webStandardStreamableHttp_js.WebStandardStreamableHTTPServerTransport({sessionIdGenerator:()=>crypto.randomUUID(),onsessioninitialized:c=>{r.set(c,{transport:l,server:d});},onsessionclosed:c=>{r.delete(c);},enableJsonResponse:true});return await d.connect(l),l.handleRequest(o)}}u();function ms(n){let e=K__namespace.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 Mn(n){let e=ms(n);return crypto$1.createHash("sha256").update(e).digest("hex")}function Cl(n){return n?n.settings?.template?.exec:void 0}function bl(){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}=oe("crypto");return n(8).toString("hex")}}var Jn=class n extends Gt{_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;_callerIdentityOverrides=new Map;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=Mn(i),this._workspaceName=K.basename(i);let a=Cl(r);this._templateEngine=new Ht({execPolicy:t.execPolicy??a}),this._documentLoader=o??new ot,this._layoutLoader=new Bt({templatesPath:mt()}),this._layoutRenderer=new Kt,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=K.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,c=l.getAgent("@"+a),f=Array.isArray(c?.provider)?c?.provider[0]:c?.provider;if(f?.startsWith("remote/"))throw new Error(`Chained remotes not allowed: "${o}" \u2192 "${f}"`);return {target:l,agentRef:"@"+a}}static async loadBuiltInConfig(e){let{yamlPath:t,dir:r}=Kr(),o;try{o=ls.readFileSync(t,"utf-8");}catch(i){throw new Error(`[@crewx/sdk] Cannot read built-in config: ${t}
308
- ${i.message}`)}let s=cr(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"&&!K.isAbsolute(l.path)?i[a]={...l,path:K.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 v of e.agents??[])r.set(v.id,v);for(let v of t.agents??[])r.has(v.id)&&console.warn(`[agent-loader] User agent "${v.id}" overrides built-in`),r.set(v.id,v);let o=Array.from(r.values()),s={...e.layouts??{},...t.layouts??{}},i={...e.documents??{},...t.documents??{}},a=e,d=t,l=Os(a.vars,d.vars),c=Os(a.settings,d.settings),f;e.skills&&t.skills&&typeof e.skills=="object"&&typeof t.skills=="object"&&!Array.isArray(e.skills)&&!Array.isArray(t.skills)?f={...e.skills,...t.skills}:f=t.skills??e.skills;let g=[...e.hooks??[],...t.hooks??[]],m=Tl(a.providers,d.providers),w={...e},_={...t};for(let v of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete w[v],delete _[v];let y={...{...w,..._},agents:o,layouts:s,documents:i,skills:f};return g.length>0&&(y.hooks=g),l!==void 0&&(y.vars=l),c!==void 0&&(y.settings=c),m!==void 0&&(y.providers=m),y}static async loadYaml(e,t,r){let o=t?.includeBuiltIns!==false,s,i;if(o){let c=await n.loadBuiltInConfig(r);if(e!==void 0){let f=ur(e);s=n.mergeCrewxConfig(c,f),i=K.dirname(e);}else s=c,i=process.cwd();}else {if(e===void 0)throw new Error("[@crewx/sdk] loadYaml: path is required when includeBuiltIns is false");s=ur(e),i=K.dirname(e);}let a=new ot(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 c=await n.loadBuiltInConfig(o);i=n.mergeCrewxConfig(c,e);}let a=new ot(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=_n(t);return K.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 On(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??vn(r),a=e.defaultMode??"query",d=t.manifest.platform,l=e.agentRunner??{run:async(m,w,_)=>{let y=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${m}`,w,{threadId:_?.threadId,platform:d});return {output:y.ok?y.data:y.error?.message??""}}},c=e.onInbound??(async m=>{let w=m.routingHints?.agentId??e.defaultAgent;if(!w)return {accepted:false,reason:"no_agent"};let{output:_}=await l.run(w,m.text,{threadId:m.threadId});return {accepted:true,output:_}}),f=xn({instanceId:r,config:o,capabilities:s,db:i,agentRunner:l,onInbound:c}),g={adapter:t,ctx:f,state:"starting"};this._activeAdapters.set(r,g),this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"starting",timestamp:new Date});try{await t.start(f),g.state="started",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"started",timestamp:new Date});}catch(m){throw g.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(Ut+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=>we(a.role.toLowerCase(),d)))),o&&(i=i.filter(a=>a.team&&o.some(d=>we(a.team.toLowerCase(),d)))),s&&(i=i.filter(a=>(Array.isArray(a.provider)?a.provider:[a.provider]).some(l=>s.some(c=>we(l.toLowerCase(),c))))),i}renderAgentPrompt(e){let t=e.startsWith("@")?e.slice(1):e,r=this._agents.get(t);if(!r)throw new be(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 be(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}.`,c=await this._documentLoader.buildContext(),f=t?.env??(typeof process<"u"?process.env:{}),g=t?.vars?.security_key??bl(),m={...t?.vars??{},documents:c,env:f,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),_={mode:t?.session?.mode??"query",platform:t?.session?.platform??"cli",options:t?.session?.options??[]},k=o.provider,y=Array.isArray(k)?k:typeof k=="string"&&k.length>0?[k]:[],v=y.join(", ")||(typeof k=="string"?k:""),A=o.options,T=["goals","daily"],b={goals:false,daily:false},V;if(!Array.isArray(A)&&typeof A=="object"&&A!==null){let W=A;if("goals"in W){let O=W.goals;typeof O=="string"||Array.isArray(O)?b.goals=O:b.goals=!!O;}"daily"in W&&(b.daily=!!W.daily);let x={};for(let[O,j]of Object.entries(W))T.includes(O)||(x[O]=j);if(Object.keys(x).length>0){let O=y.some(C=>C.startsWith("cli/")),j={};for(let[C,z]of Object.entries(x)){let le={};if(Array.isArray(z))O&&(le.rawArgs=z);else if(typeof z=="object"&&z!==null){let ft=z;Object.keys(ft).length>0&&(le.named=ft);}(le.named||le.rawArgs&&le.rawArgs.length>0)&&(j[C]=le);}V=Object.keys(j).length>0?j:void 0;}}let $=Array.isArray(A)?A:void 0,I={};for(let[W,x]of Object.entries(c))I[W]={content:x.content??"",toc:x.toc,summary:x.summary,path:x.path};if(b.goals){let W=K.join(this._projectRoot,"docs","goal"),x=await Vo(W,void 0,b.goals);x&&(I.active_goals={content:x});}if(b.daily){let W=K.join(this._projectRoot,"docs","daily"),x=await Jo(W);x&&(I.today_daily={content:x});}let N=t?.vars?.user_input??void 0,D=this._config?.settings?.dreaming?.continuity,Z=D?.reuseReadOnly!==false,U=typeof D?.lookback=="number"?D.lookback:5,ne=typeof D?.maxEntryChars=="number"?D.maxEntryChars:8e3,B=typeof D?.decayRate=="number"?D.decayRate:.5,F=t?.threadId??"",Q=o.id,J=Z&&U>0&&F&&t?.messages&&t.messages.length>0?cs({threadId:F,agentId:Q,lookback:U,maxEntryChars:ne,decayRate:B}):new Map,q=(t?.messages??[]).map(W=>{if(!W.isAssistant)return W;let x=W.metadata?.task_id;return !x||!J.has(x)?W:{...W,activity_log:J.get(x)}}),Ke={user_input:N,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??"",provider:v,providerList:y,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:V,optionsArray:$},agentMetadata:{specialties:o.specialties??[],capabilities:o.capabilities??[],description:o.description??""},contextOptions:b,documents:I,skills:t?.skills??[],session:_,env:f,vars:{security_key:g,...t?.vars??{}},props:{...a??{},...t?.messages&&t.messages.length>0?{showConversationHistory:true}:{}},platform:_.platform,mode:_.mode,thread_id:F,now:qt(new Date),has_activity_log:J.size>0,messages:q,tools:this._tools.size>0?{list:Array.from(this._tools.values()).map(W=>({name:W.name,description:W.description,parameters:W.parameters})),json:JSON.stringify(Array.from(this._tools.values()).map(W=>({name:W.name,description:W.description,parameters:W.parameters})),null,2),count:this._tools.size}:null,metadata:{}};return this._layoutRenderer.render(d,Ke)}_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:Cn(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=So();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=ln();return t!==void 0?t:e?.meta?.defaultIdleMs!==void 0?e.meta.defaultIdleMs:6e5}_lookupCliAdapter(e){return An(e)}_resolveEffectiveCost(e,t,r){return Lo(e?.costUsd,e?.inputTokens,e?.outputTokens,e?.cachedInputTokens,t)}_resolveEffectiveCwd(e,t){return t?.cwd??(e.working_directory?K.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,callerIdentity:r,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}}}_registerCallerIdentityOverride(e,t,r){let o=Symbol("callerIdentityOverride");return this._callerIdentityOverrides.set(e,{token:o,callerIdentity:t,targetIdentity:r}),o}_clearCallerIdentityOverride(e,t){if(!t)return;let r=this._callerIdentityOverrides.get(e);r&&r.token===t&&this._callerIdentityOverrides.delete(e);}_rewriteCallerFacingPayload(e,t,r){let{callerIdentity:o,targetIdentity:s}=r,i={...t,agentRef:o.agentRef};if(e==="task:output")return i;let a=i,d=a.metadata??{},l=d.crewx??{};return {...a,workspaceId:o.id,workspaceName:o.name,metadata:{...d,crewx:{...l,remoteExecution:s}}}}emit(e,t){if(e==="task:start"||e==="task:end"||e==="task:output"){let r=t.traceId,o=this._callerIdentityOverrides.get(r);if(o){let s=this._rewriteCallerFacingPayload(e,t,o);super.emit(e,s);return}}super.emit(e,t);}emitToolEvents(e,t,r,o,s,i,a){try{let l=this._lookupCliAdapter(r)?.parseEvent?.(o)??$t(new Date().toISOString(),o);for(let c of l)c.type==="tool_use"&&c.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:c.toolName,rawName:c.toolName,input:c.toolInput?this.tryParseJson(c.toolInput):void 0,toolUseId:c.toolUseId}}),c.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:c.toolName??"unknown",rawName:c.toolName??"unknown",toolUseId:c.toolUseId,result:c.resultPreview,isError:c.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){let c=await o.target.query(o.agentRef,t,this._buildFileRemoteOptions(e,r));return {...c,meta:{...c.meta,agentId:e.replace(/^@/,"")}}}let s=Vt.getStore()??Rn(r?.trace),i=r?.taskId??it("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null},l=r?.callerIdentity?this._registerCallerIdentityOverride(i,r.callerIdentity,{agentId:e.replace(/^@/,""),workspaceId:this._workspaceId,workspaceName:this._workspaceName}):void 0;try{return await Vt.run(d,async()=>{let c=Date.now(),f=new Date,g;try{g=pr(e,Array.from(this._agents.values()));}catch(x){if(x instanceof be){this.emit("task:start",{traceId:i,timestamp:f,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 O=Date.now()-c,j={code:"AGENT_NOT_FOUND",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:O,error:j,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:j,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:O,taskId:i}}}throw x}d.callerAgentId=g.id;let m=En(g.provider),w=Ar(g.options,"query",m,xr(r?.overdrive)),_=Er(g.options,"query"),k=w.active&&w.provider?w.provider:r?.provider??_.provider??m,y=w.active&&w.model?w.model:r?.model??_.model??g.inline?.model;y&&y.includes("{{")&&(y=await this._templateEngine.render(y,{...r?.vars??{}}));let v=k!==m?void 0:r?.resumeSessionId,A;try{A=Se(k,this._additionalArgsProvider);}catch(x){this.emit("task:start",{traceId:i,timestamp:f,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 O=Date.now()-c,j={code:"PROVIDER_ERROR",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:O,error:j,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:j,meta:{agentId:g.id,provider:k,model:y,durationMs:O,taskId:i}}}let T=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),b;try{b=await this.renderAgentPromptFull(e,{session:{mode:"query",platform:r?.platform},vars:{user_input:t,...r?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(g,r)},messages:T,threadId:r?.threadId});}catch(x){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${x instanceof Error?x.message:String(x)}`);}let V,$,I,N=y,de=!1,Y=x=>{de||(de=!0,this.emit("task:start",{traceId:i,timestamp:f,agentRef:e,message:t,mode:"query",pid:x,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:N,provider:k,codingAgentCommand:V,renderedPrompt:b,metadata:{...r?.metadata??{},provider:k,...w.active?{overdrive:!0}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},D=g.options,Z=w.active?w.mode:D?.query?.mode,U=w.effort??r?.effort??D?.query?.effort,ne=Array.isArray(D?.query?.tools)?D.query.tools:void 0,B=this._tools.size>0?this._filterToolsByMode(ne):[],F=(()=>{let x=D?.query;if(!x||Array.isArray(x))return;let{tools:O,effort:j,mode:C,provider:z,model:le,profiles:ft,...Br}=x,St=Object.entries(Br).filter(([,Ce])=>Ce!=null);if(St.length!==0)return Object.fromEntries(St.map(([Ce,qr])=>[Ce,String(qr)]))})(),Q=g.inline?.max_steps;k.startsWith("api/")&&Y();let J=!1,q=0,Ke=()=>{},W=new Promise(x=>{Ke=x;});this._activeTasks.set(i,{pid:void 0,done:W});try{let x=await A.query(t,{model:y,effort:U,mode:Z,context:r?.context,systemPrompt:b??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(D?.query)?D.query:void 0,resumeSessionId:v,tools:B.length>0?B:void 0,maxSteps:Q,configOptions:F,timeoutMs:this._resolveTimeout("query",this._lookupCliAdapter(k)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(k)),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:k,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,f)},onPid:C=>{let z=this._activeTasks.get(i);z&&(z.pid=C),Y(C);},onOutput:(C,z)=>{let le=this._lookupCliAdapter(k);z==="stdout"&&le?.suppressOutputLine?.(C)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:C,level:z}),z==="stdout"&&this.emitToolEvents(i,e,k,C,g.id,r?.threadId??"","");},onTaskLog:C=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",k,C);for(let z of C)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(z),level:"info"});},onCommand:C=>{V=C;},onUsage:C=>{$=C;},onExitCode:C=>{I=C;},onModel:C=>{N||(N=C);}});q=this._resolveEffectiveCost($,N,c),Y();let O=Date.now()-c,j={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",result:x,durationMs:O,exitCode:I,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:N,metadata:Object.keys(j).length>0?j:void 0}),J=!0,{ok:!0,data:x,meta:{agentId:g.id,provider:k,model:y,durationMs:O,taskId:i}}}catch(x){if(x instanceof exports.ClientToolCallRequiredError){let C=it("thd");return this._pendingThreads.set(C,{agentRef:g.id,providerStr:k,continuationState:x.continuationState,toolCall:x.toolCall,traceId:i,startMs:c,model:y}),J=!0,{ok:!0,status:"requires_action",data:"",toolCall:x.toolCall,threadId:C,meta:{agentId:g.id,provider:k,model:y,durationMs:Date.now()-c,taskId:i}}}q=this._resolveEffectiveCost($,N,c),Y();let O=Date.now()-c,j={code:"QUERY_FAILED",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:O,error:j,exitCode:I,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:N,metadata:r?.metadata?{...r.metadata}:void 0}),J=!0,{ok:!1,data:"",error:j,meta:{agentId:g.id,provider:k,model:y,durationMs:O,taskId:i}}}finally{J||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:Date.now()-c,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:I??-1,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:N}),this._activeTasks.delete(i),this._clearCallerIdentityOverride(i,l),Ke();}})}finally{this._clearCallerIdentityOverride(i,l);}}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=Se(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 exports.ClientToolCallRequiredError)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){let c=await o.target.execute(o.agentRef,t,this._buildFileRemoteOptions(e,r));return {...c,meta:{...c.meta,agentId:e.replace(/^@/,"")}}}let s=Vt.getStore()??Rn(r?.trace),i=r?.taskId??it("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null},l=r?.callerIdentity?this._registerCallerIdentityOverride(i,r.callerIdentity,{agentId:e.replace(/^@/,""),workspaceId:this._workspaceId,workspaceName:this._workspaceName}):void 0;try{return await Vt.run(d,async()=>{let c=Date.now(),f=new Date,g;try{g=pr(e,Array.from(this._agents.values()));}catch(x){if(x instanceof be){this.emit("task:start",{traceId:i,timestamp:f,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 O=Date.now()-c,j={code:"AGENT_NOT_FOUND",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:O,error:j,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:j,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:O,taskId:i}}}throw x}d.callerAgentId=g.id;let m=En(g.provider),w=Ar(g.options,"execute",m,xr(r?.overdrive)),_=Er(g.options,"execute"),k=w.active&&w.provider?w.provider:r?.provider??_.provider??m,y=w.active&&w.model?w.model:r?.model??_.model??g.inline?.model;y&&y.includes("{{")&&(y=await this._templateEngine.render(y,{...r?.vars??{}}));let v=k!==m?void 0:r?.resumeSessionId,A;try{A=Se(k,this._additionalArgsProvider);}catch(x){this.emit("task:start",{traceId:i,timestamp:f,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 O=Date.now()-c,j={code:"PROVIDER_ERROR",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:O,error:j,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:j,meta:{agentId:g.id,provider:k,model:y,durationMs:O,taskId:i}}}let T=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),b;try{b=await this.renderAgentPromptFull(e,{session:{mode:"execute",platform:r?.platform},vars:{user_input:t,...r?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(g,r)},messages:T,threadId:r?.threadId});}catch(x){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${x instanceof Error?x.message:String(x)}`);}let V,$,I,N=y,de=!1,Y=x=>{de||(de=!0,this.emit("task:start",{traceId:i,timestamp:f,agentRef:e,message:t,mode:"execute",pid:x,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:N,provider:k,codingAgentCommand:V,renderedPrompt:b,metadata:{...r?.metadata??{},provider:k,...w.active?{overdrive:!0}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},D=g.options,Z=w.active?w.mode:D?.execute?.mode,U=w.effort??r?.effort??D?.execute?.effort,ne=Array.isArray(D?.execute?.tools)?D.execute.tools:void 0,B=this._tools.size>0?this._filterToolsByMode(ne):[],F=(()=>{let x=D?.execute;if(!x||Array.isArray(x))return;let{tools:O,effort:j,mode:C,provider:z,model:le,profiles:ft,...Br}=x,St=Object.entries(Br).filter(([,Ce])=>Ce!=null);if(St.length!==0)return Object.fromEntries(St.map(([Ce,qr])=>[Ce,String(qr)]))})(),Q=g.inline?.max_steps;k.startsWith("api/")&&Y();let J=!1,q=0,Ke=()=>{},W=new Promise(x=>{Ke=x;});this._activeTasks.set(i,{pid:void 0,done:W});try{let x=await A.execute(t,{model:y,effort:U,mode:Z,context:r?.context,systemPrompt:b??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(D?.execute)?D.execute:void 0,resumeSessionId:v,tools:B.length>0?B:void 0,maxSteps:Q,configOptions:F,timeoutMs:this._resolveTimeout("execute",this._lookupCliAdapter(k)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(k)),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:k,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,f)},onPid:C=>{let z=this._activeTasks.get(i);z&&(z.pid=C),Y(C);},onOutput:(C,z)=>{let le=this._lookupCliAdapter(k);z==="stdout"&&le?.suppressOutputLine?.(C)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:C,level:z}),z==="stdout"&&this.emitToolEvents(i,e,k,C,g.id,r?.threadId??"","");},onTaskLog:C=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",k,C);for(let z of C)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(z),level:"info"});},onCommand:C=>{V=C;},onUsage:C=>{$=C;},onExitCode:C=>{I=C;},onModel:C=>{N||(N=C);}});q=this._resolveEffectiveCost($,N,c),Y();let O=Date.now()-c,j={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",result:x,durationMs:O,exitCode:I,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:N,metadata:Object.keys(j).length>0?j:void 0}),J=!0,{ok:!0,data:x,meta:{agentId:g.id,provider:k,model:y,durationMs:O,taskId:i}}}catch(x){q=this._resolveEffectiveCost($,N,c),Y();let O=Date.now()-c,j={code:"EXECUTE_FAILED",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:O,error:j,exitCode:I,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:N,metadata:r?.metadata?{...r.metadata}:void 0}),J=!0,{ok:!1,data:"",error:j,meta:{agentId:g.id,provider:k,model:y,durationMs:O,taskId:i}}}finally{J||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:Date.now()-c,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:I??-1,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:N}),this._activeTasks.delete(i),this._clearCallerIdentityOverride(i,l),Ke();}})}finally{this._clearCallerIdentityOverride(i,l);}}};function Os(n,e){let t=Xn(n)?n:void 0,r=Xn(e)?e:void 0;if(!(!t&&!r))return {...t??{},...r??{}}}function Xn(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Tl(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(!Xn(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}function Pl(n){let e=Array.isArray(n.provider)?n.provider:[n.provider],t=n.options,r=[...e];for(let o of ["query","execute"]){let s=Er(t,o);s.provider&&r.push(s.provider);let i=t&&typeof t=="object"&&!Array.isArray(t)?t[o]:void 0,a=i&&typeof i=="object"&&!Array.isArray(i)?kr(i.overdrive):void 0;a?.provider&&r.push(a.provider);}return r}async function Ms(n,e,t){let r=n.flatMap(Pl);if(r.some(s=>s.startsWith("api/"))){let{registerApiProviders:s}=await Promise.resolve().then(()=>(Dn(),_s));s(t?.api);}await Il(r,e),Ol(r,e),Sl(r);}function Sl(n){if(!n.some(r=>r.startsWith("acp/")))return;let{registerAcpProviders:t}=(Hn(),go(Es));t();}async function Il(n,e){if(!n.some(i=>i.startsWith("remote/")))return;let r=e.providers;if(!Array.isArray(r))return;let{createRemoteProviderFactory:o}=await Promise.resolve().then(()=>(zn(),Cs)),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,Se));}function Ol(n,e){if(!n.some(i=>i.startsWith("plugin/")))return;let r=e.providers;if(!Array.isArray(r))return;let{createPluginProviderFactory:o}=(Kn(),go(Ss)),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));}u();var Yn=class{detach(e){}};u();var Ml="crewx:fs:",Qn=class{prefix;store;constructor(e){this.prefix=e?.prefix??Ml,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,"/")}`}};u();var bt="default",Tt="archive",Ns="wi-default-flow",Nl="wi-plan-flow",Dl="wi-default-flow.yaml",Ll="wi-plan-flow.yaml",Wr=/^[a-zA-Z0-9_-]{1,64}$/;function Ds(n){return n===bt||n===Tt}function $l(n){let e={id:bt,name:"Default",workflowId:Ns,system:true,readOnly:false},t={id:Tt,name:"Archive",workflowId:"",system:true,readOnly:true},r=n?.settings?.wi?.boards;if(!Array.isArray(r)||r.length===0)return [e,t];let o=new Set,s=[];for(let i of r){if(!i||typeof i!="object")continue;let a=i,d=a.id,l=a.name,c=a.workflow_id;if(typeof d!="string"||d.length===0||typeof l!="string"||l.length===0||typeof c!="string"||c.length===0||Ds(d)||!Wr.test(d)||o.has(d))continue;o.add(d);let f=typeof a.description=="string"?a.description:void 0,g=typeof a.goal_id=="string"?a.goal_id:void 0;s.push({id:d,name:l,workflowId:c,...f!==void 0?{description:f}:{},...g!==void 0?{goalId:g}:{},system:false,readOnly:false});}return [e,...s,t]}u();var ee=class extends Error{constructor(e){super(e),this.name="WiCreateError";}},jl=300*1e3,Wl=300*1e3,Fl=1e4,Hl=50;function Bl(n){return new Promise(e=>setTimeout(e,n))}function ql(n){let e=n.getFullYear(),t=String(n.getMonth()+1).padStart(2,"0"),r=String(n.getDate()).padStart(2,"0");return {compact:`${e}${t}${r}`,iso:`${e}-${t}-${r}`}}function zl(n){return n.normalize("NFKD").replace(/[^\x00-\x7F]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toUpperCase().slice(0,60)}function Kl(n,e){let t=n.replace(/\\/g,"/").toLowerCase(),r=e.replace(/\\/g,"/").toLowerCase();if(r!==t&&!r.startsWith(t+"/"))throw new ee("Path is outside wi directory")}function Ls(n){let e=typeof n=="string"?n.trim():"";if(!e)throw new ee("title is required");if(e.length>200)throw new ee("title must be 200 characters or fewer");return e}function $s(n){let e=typeof n=="string"?n.trim():"";if(!e)return "manual";if(e.length>128)throw new ee("source must be 128 characters or fewer");if(/[\r\n]/.test(e))throw new ee("source must be a single line");return e}function Us(n){return (typeof n=="string"?n.trim().replace(/^@+/,""):"")||void 0}function js(n){if(n==null)return [];if(!Array.isArray(n))throw new ee("depends_on must be an array");return n.map(e=>String(e).trim()).filter(Boolean)}function Ws(n,e){let t=typeof n=="string"?n.trim():"";if(!t){if(e?.required)throw new ee("board is required");return}if(!Wr.test(t))throw new ee("board must match ^[a-zA-Z0-9_-]{1,64}$");if(t===Tt)throw new ee(`board cannot be '${Tt}'`);return t}function Pt(n){return JSON.stringify(n)}function Gl(n,e){return e.length===0?[`${n}: []`]:[`${n}:`,...e.map(t=>` - ${Pt(t)}`)]}async function Vl(n){let e=await ls.promises.stat(n).catch(()=>null);e&&Date.now()-e.mtimeMs>Wl&&await ls.promises.rm(n,{recursive:true,force:true}).catch(()=>{});}async function Jl(n,e){let t=K.join(n,".wi-create.lock"),r=Date.now()+Fl;for(;Date.now()<r;)try{await ls.promises.mkdir(t);try{return await e()}finally{await ls.promises.rm(t,{recursive:!0,force:!0}).catch(()=>{});}}catch(o){if(o.code!=="EEXIST")throw o;await Vl(t),await Bl(Hl);}throw new ee("WI create lock timeout: docs/wi/.wi-create.lock")}async function Fs(n){let e=[],t=await ls.promises.readdir(n,{withFileTypes:true}).catch(r=>{if(r.code==="ENOENT")return [];throw r});for(let r of t){let o=K.join(n,r.name);r.isDirectory()?e.push(...await Fs(o)):r.isFile()&&r.name.endsWith(".md")&&e.push(r.name);}return e}async function Xl(n){let e=await ls.promises.readdir(n).catch(r=>{if(r.code==="ENOENT")return [];throw r}),t=await Fs(K.join(n,"archive"));return [...e,...t]}function Yl(n,e){return n.reduce((t,r)=>{if(!r.startsWith(e))return t;let o=r.slice(e.length).match(/^(\d+)/);return o?Math.max(t,parseInt(o[1],10)):t},0)+1}function Ql(n,e){return n.some(t=>t===`${e}.md`||t.startsWith(`${e}-`))}async function Zl(n,e){let t=K.join(n,`.wi-${e}.lock`);try{return await ls.promises.writeFile(t,"",{flag:"wx"}),{claimed:!0,lockPath:t}}catch(r){if(r.code!=="EEXIST")throw r;return await ls.promises.stat(t).then(s=>Date.now()-s.mtimeMs>jl).catch(()=>false)&&await ls.promises.unlink(t).then(()=>true).catch(()=>false)?(await ls.promises.writeFile(t,"",{flag:"wx"}),{claimed:true,lockPath:t}):{claimed:false,lockPath:t}}}function ec(n){return {title:Ls(n.title),assignee:Us(n.assignee),body:(n.body??"").trim(),board:Ws(n.board),source:$s(n.source),depends_on:js(n.depends_on)}}function tc(n,e,t){if(n==null)return;let r=typeof n=="string"?n.trim():"";if(!r)throw new ee(`items[${e}].key must be a non-empty string when provided`);if(t.has(r))throw new ee(`items[${e}].key "${r}" is duplicated`);return t.add(r),r}function rc(n){let e=Ws(n.board,{required:true}),t=$s(n.source);if(!Array.isArray(n.items)||n.items.length===0)throw new ee("items must contain at least one WI");let r=new Set;return n.items.map((o,s)=>{if(!o||typeof o!="object")throw new ee(`items[${s}] must be an object`);if(typeof o.body!="string")throw new ee(`items[${s}].body is required`);return {key:tc(o.key,s,r),title:Ls(o.title),assignee:Us(o.assignee),body:o.body.trim(),board:e,source:t,depends_on:js(o.depends_on)}})}function nc(n,e){return n.map(t=>e.get(t)??t)}function oc(n,e,t){let r=!!n.board&&n.board!==bt,o={wi_id:e,title:n.title,date:t,status:"draft",priority:"normal",source:n.source};return n.assignee&&(o.assignee=n.assignee),r&&(o.board=n.board),o.depends_on=n.depends_on,{raw:`---
309
- ${[`wi_id: ${e}`,`title: ${Pt(n.title)}`,`date: ${Pt(t)}`,"status: draft",...n.assignee?[`assignee: ${Pt(n.assignee)}`]:[],"priority: normal",`source: ${Pt(n.source)}`,...r?[`board: ${Pt(n.board)}`]:[],...Gl("depends_on",n.depends_on)].join(`
303
+ `).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 T("DB_ERROR","Failed to get tasks for report",s)}finally{o.close();}}findTaskEvidence(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(drizzleOrm.eq(p.workspace_id,e.workspaceId)),e.agents&&e.agents.length>0&&r.push(drizzleOrm.inArray(p.agent_id,e.agents)),e.statuses&&e.statuses.length>0&&r.push(drizzleOrm.inArray(p.status,e.statuses)),e.from&&r.push(drizzleOrm.gte(p.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(p.started_at,e.to));let o=r.length>0?drizzleOrm.and(...r):void 0,s=(e.order??"DESC")==="ASC"?drizzleOrm.asc(p.started_at):drizzleOrm.desc(p.started_at),i={id:p.id,agent_id:p.agent_id,status:p.status,prompt:p.prompt,started_at:p.started_at,completed_at:p.completed_at,thread_id:p.thread_id};return e.limit?t.db.select(i).from(p).where(o).orderBy(s).limit(e.limit).all():t.db.select(i).from(p).where(o).orderBy(s).all()}catch(r){throw new T("DB_ERROR","Failed to find task evidence",r)}finally{t.close();}}findThreadChains(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{let r=e.maxThreads??8,o=e.maxTurnsPerThread??4,s=[drizzleOrm.isNotNull(p.thread_id),drizzleOrm.isNull(p.parent_task_id),drizzleOrm.isNull(p.caller_agent_id),drizzleOrm.or(drizzleOrm.isNull(p.platform),drizzleOrm.ne(p.platform,"workflow")),drizzleOrm.or(drizzleOrm.isNull(p.metadata),drizzleOrm.notLike(p.metadata,'%"kind":"workflow_card"%')),drizzleOrm.or(drizzleOrm.isNull(p.metadata),drizzleOrm.notLike(p.metadata,'%"retriedFromTaskId"%'))];e.workspaceId&&s.push(drizzleOrm.eq(p.workspace_id,e.workspaceId)),e.from&&s.push(drizzleOrm.gte(p.started_at,e.from)),e.to&&s.push(drizzleOrm.lt(p.started_at,e.to));let i=t.db.select({id:p.id,agent_id:p.agent_id,status:p.status,prompt:p.prompt,started_at:p.started_at,completed_at:p.completed_at,thread_id:p.thread_id}).from(p).where(drizzleOrm.and(...s)).orderBy(drizzleOrm.asc(p.started_at),drizzleOrm.asc(p.id)).all(),a=new Map;for(let l of i){if(!l.thread_id)continue;let c={id:l.id,agentId:l.agent_id,status:l.status,prompt:l.prompt,startedAt:l.started_at,completedAt:l.completed_at},f=a.get(l.thread_id);f?f.push(c):a.set(l.thread_id,[c]);}let d=[];for(let[l,c]of a){let f=c.filter(g=>g.agentId===e.targetAgentId).length;f<2||d.push({threadId:l,targetAgentTurnCount:f,turns:c});}return d.sort((l,c)=>{let f=l.turns[l.turns.length-1].startedAt,g=c.turns[c.turns.length-1].startedAt;return f<g?1:f>g?-1:0}),d.slice(0,r).map(l=>({threadId:l.threadId,targetAgentTurnCount:l.targetAgentTurnCount,turns:l.turns.slice(-o)}))}catch(r){throw new T("DB_ERROR","Failed to find thread chains",r)}finally{t.close();}}};var Vd=new Set(["Read","Grep","Find","Glob"]),Jd=["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"],Xd=[/\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 Yd(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 Qd(n,e){if(Vd.has(n))return true;if(n!=="Bash"||!e)return false;let t=e.split(`
304
+ `)[0].trimStart();return Xd.some(r=>r.test(t))?false:Jd.some(r=>t.startsWith(r))}function Nr(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function Zd(n,e,t){if(n!=="Read"||!e)return "ok";let o=e.split(`
305
+ `).find(s=>s.trim()&&!s.startsWith("Read "))?.trim()??e.trim();if(!o)return "unknown";try{let s=hs__namespace.statSync(o);if(t){let i=Date.parse(t);if(!Number.isNaN(i)&&s.mtimeMs>i)return "stale"}return "ok"}catch{return "unknown"}}function el(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 tl(n){if(!Array.isArray(n))return [];let e=n,t=e.filter(a=>a.level==="stdout"&&a.message).map(a=>a.message),r=el(t),o=[];for(let a of e)a.level==="info"&&a.message?o.push(...he(a.message,a.timestamp)):a.level==="stdout"&&a.message&&r&&o.push(...Ut("",a.message,r));let s=new Map,i=[];for(let a of o)if(a.type==="tool_use"){let d={tool:Yd(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 rl(n,e){let t=tl(n),r=[];for(let o of t){let s=o.tool==="Bash"?o.input?.split(`
306
+ `)[0]?.slice(0,150)??null:o.input?.slice(0,150)??null,i=Qd(o.tool,o.input)&&!o.isError;r.push({tool:o.tool,cmd:s,result:o.result,status:Zd(o.tool,o.input,e),reusable:i});}return r}function nl(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="${Nr(o.tool)}"`,i=o.cmd?` cmd="${Nr(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(Nr(l.slice(0,d))+` \u2026 [truncated, ${d}/${l.length} chars shown]`):r.push(Nr(l)),r.push(" </entry>");}else r.push(` <entry ${s}${i}${a} />`);}}return r.push("</activity_log>"),r}function ys(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 Yt().findTasksByThread(e).filter(g=>!g.parent_task_id&&g.agent_id===t).sort((g,m)=>m.started_at>g.started_at?1:-1).slice(0,Math.min(r,5));}catch{return new Map}if(!i.length)return new Map;let a=[];for(let f of i){let g=[];try{let m=JSON.parse(f.logs??"[]");Array.isArray(m)&&(g=m);}catch{}a.push({taskId:f.id,entries:rl(g,f.completed_at)});}let d=new Map,l=typeof s=="number"&&s>0&&s<=1?s:1,c=1e3;for(let f=0;f<a.length;f++){let{taskId:g,entries:m}=a[f];if(m.length===0)continue;let w=Math.max(Math.floor((o??8e3)*Math.pow(l,f)),c),_=Math.max(0,m.length-200),k=_>0?m.slice(_):m,y=nl(k,_,w);d.set(g,y.join(`
307
+ `));}return d}u();u();var ol={agentId:zod.z.string().describe("The agent ID to query"),query:zod.z.string().describe("The query message to send"),context:zod.z.string().optional().describe("Additional context"),thread:zod.z.string().optional().describe("Thread ID for conversation continuity")},sl={agentId:zod.z.string().describe("The agent ID to execute"),task:zod.z.string().describe("The task description to execute"),context:zod.z.string().optional().describe("Additional context"),thread:zod.z.string().optional().describe("Thread ID for conversation continuity")};function ws(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",ol,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)",sl,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}});}u();function _s(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 vs(n,e){return e?await e(n)?null:new Response(JSON.stringify({error:"Unauthorized"}),{status:401,headers:{"Content-Type":"application/json"}}):null}function dl(n,e){let t=new mcp_js.McpServer({name:"crewx-mcp-server",version:"1.0.0"},{capabilities:{tools:{}}});return ws(t,n,e),t}function Dn(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=_s(o);if(s)return s;let i=await vs(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=dl(n,t),l=new webStandardStreamableHttp_js.WebStandardStreamableHTTPServerTransport({sessionIdGenerator:()=>crypto.randomUUID(),onsessioninitialized:c=>{r.set(c,{transport:l,server:d});},onsessionclosed:c=>{r.delete(c);},enableJsonResponse:true});return await d.connect(l),l.handleRequest(o)}}u();function xs(n){let e=K__namespace.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 Ln(n){let e=xs(n);return crypto$1.createHash("sha256").update(e).digest("hex")}function Dl(n){return n?n.settings?.template?.exec:void 0}function Ll(){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}=oe("crypto");return n(8).toString("hex")}}var Qn=class n extends Vt{_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;_callerIdentityOverrides=new Map;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=Ln(i),this._workspaceName=K.basename(i);let a=Dl(r);this._templateEngine=new Bt({execPolicy:t.execPolicy??a}),this._documentLoader=o??new ot,this._layoutLoader=new qt({templatesPath:mt()}),this._layoutRenderer=new Gt,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=K.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,c=l.getAgent("@"+a),f=Array.isArray(c?.provider)?c?.provider[0]:c?.provider;if(f?.startsWith("remote/"))throw new Error(`Chained remotes not allowed: "${o}" \u2192 "${f}"`);return {target:l,agentRef:"@"+a}}static async loadBuiltInConfig(e){let{yamlPath:t,dir:r}=Jr(),o;try{o=hs.readFileSync(t,"utf-8");}catch(i){throw new Error(`[@crewx/sdk] Cannot read built-in config: ${t}
308
+ ${i.message}`)}let s=ur(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"&&!K.isAbsolute(l.path)?i[a]={...l,path:K.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 v of e.agents??[])r.set(v.id,v);for(let v of t.agents??[])r.has(v.id)&&console.warn(`[agent-loader] User agent "${v.id}" overrides built-in`),r.set(v.id,v);let o=Array.from(r.values()),s={...e.layouts??{},...t.layouts??{}},i={...e.documents??{},...t.documents??{}},a=e,d=t,l=js(a.vars,d.vars),c=js(a.settings,d.settings),f;e.skills&&t.skills&&typeof e.skills=="object"&&typeof t.skills=="object"&&!Array.isArray(e.skills)&&!Array.isArray(t.skills)?f={...e.skills,...t.skills}:f=t.skills??e.skills;let g=[...e.hooks??[],...t.hooks??[]],m=$l(a.providers,d.providers),w={...e},_={...t};for(let v of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete w[v],delete _[v];let y={...{...w,..._},agents:o,layouts:s,documents:i,skills:f};return g.length>0&&(y.hooks=g),l!==void 0&&(y.vars=l),c!==void 0&&(y.settings=c),m!==void 0&&(y.providers=m),y}static async loadYaml(e,t,r){let o=t?.includeBuiltIns!==false,s,i;if(o){let c=await n.loadBuiltInConfig(r);if(e!==void 0){let f=pr(e);s=n.mergeCrewxConfig(c,f),i=K.dirname(e);}else s=c,i=process.cwd();}else {if(e===void 0)throw new Error("[@crewx/sdk] loadYaml: path is required when includeBuiltIns is false");s=pr(e),i=K.dirname(e);}let a=new ot(r);await a.load(s.documents,i);let d=s.agents??[];return await Ws(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 c=await n.loadBuiltInConfig(o);i=n.mergeCrewxConfig(c,e);}let a=new ot(o);await a.load(i.documents,r??(typeof process<"u"?process.cwd():"/"));let d=i.agents??[];return await Ws(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=xn(t);return K.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 Dn(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??An(r),a=e.defaultMode??"query",d=t.manifest.platform,l=e.agentRunner??{run:async(m,w,_)=>{let y=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${m}`,w,{threadId:_?.threadId,platform:d});return {output:y.ok?y.data:y.error?.message??""}}},c=e.onInbound??(async m=>{let w=m.routingHints?.agentId??e.defaultAgent;if(!w)return {accepted:false,reason:"no_agent"};let{output:_}=await l.run(w,m.text,{threadId:m.threadId});return {accepted:true,output:_}}),f=Rn({instanceId:r,config:o,capabilities:s,db:i,agentRunner:l,onInbound:c}),g={adapter:t,ctx:f,state:"starting"};this._activeAdapters.set(r,g),this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"starting",timestamp:new Date});try{await t.start(f),g.state="started",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"started",timestamp:new Date});}catch(m){throw g.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(jt+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=>we(a.role.toLowerCase(),d)))),o&&(i=i.filter(a=>a.team&&o.some(d=>we(a.team.toLowerCase(),d)))),s&&(i=i.filter(a=>(Array.isArray(a.provider)?a.provider:[a.provider]).some(l=>s.some(c=>we(l.toLowerCase(),c))))),i}renderAgentPrompt(e){let t=e.startsWith("@")?e.slice(1):e,r=this._agents.get(t);if(!r)throw new Ce(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 Ce(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}.`,c=await this._documentLoader.buildContext(),f=t?.env??(typeof process<"u"?process.env:{}),g=t?.vars?.security_key??Ll(),m={...t?.vars??{},documents:c,env:f,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),_={mode:t?.session?.mode??"query",platform:t?.session?.platform??"cli",options:t?.session?.options??[]},k=o.provider,y=Array.isArray(k)?k:typeof k=="string"&&k.length>0?[k]:[],v=y.join(", ")||(typeof k=="string"?k:""),A=o.options,b=["goals","daily"],C={goals:false,daily:false},V;if(!Array.isArray(A)&&typeof A=="object"&&A!==null){let W=A;if("goals"in W){let O=W.goals;typeof O=="string"||Array.isArray(O)?C.goals=O:C.goals=!!O;}"daily"in W&&(C.daily=!!W.daily);let x={};for(let[O,j]of Object.entries(W))b.includes(O)||(x[O]=j);if(Object.keys(x).length>0){let O=y.some(P=>P.startsWith("cli/")),j={};for(let[P,z]of Object.entries(x)){let le={};if(Array.isArray(z))O&&(le.rawArgs=z);else if(typeof z=="object"&&z!==null){let ft=z;Object.keys(ft).length>0&&(le.named=ft);}(le.named||le.rawArgs&&le.rawArgs.length>0)&&(j[P]=le);}V=Object.keys(j).length>0?j:void 0;}}let $=Array.isArray(A)?A:void 0,I={};for(let[W,x]of Object.entries(c))I[W]={content:x.content??"",toc:x.toc,summary:x.summary,path:x.path};if(C.goals){let W=K.join(this._projectRoot,"docs","goal"),x=await ts(W,void 0,C.goals);x&&(I.active_goals={content:x});}if(C.daily){let W=K.join(this._projectRoot,"docs","daily"),x=await rs(W);x&&(I.today_daily={content:x});}let N=t?.vars?.user_input??void 0,D=this._config?.settings?.dreaming?.continuity,Z=D?.reuseReadOnly!==false,U=typeof D?.lookback=="number"?D.lookback:5,ne=typeof D?.maxEntryChars=="number"?D.maxEntryChars:8e3,B=typeof D?.decayRate=="number"?D.decayRate:.5,F=t?.threadId??"",Q=o.id,J=Z&&U>0&&F&&t?.messages&&t.messages.length>0?ys({threadId:F,agentId:Q,lookback:U,maxEntryChars:ne,decayRate:B}):new Map,q=(t?.messages??[]).map(W=>{if(!W.isAssistant)return W;let x=W.metadata?.task_id;return !x||!J.has(x)?W:{...W,activity_log:J.get(x)}}),Ke={user_input:N,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??"",provider:v,providerList:y,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:V,optionsArray:$},agentMetadata:{specialties:o.specialties??[],capabilities:o.capabilities??[],description:o.description??""},contextOptions:C,documents:I,skills:t?.skills??[],session:_,env:f,vars:{security_key:g,...t?.vars??{}},props:{...a??{},...t?.messages&&t.messages.length>0?{showConversationHistory:true}:{}},platform:_.platform,mode:_.mode,thread_id:F,now:zt(new Date),has_activity_log:J.size>0,messages:q,tools:this._tools.size>0?{list:Array.from(this._tools.values()).map(W=>({name:W.name,description:W.description,parameters:W.parameters})),json:JSON.stringify(Array.from(this._tools.values()).map(W=>({name:W.name,description:W.description,parameters:W.parameters})),null,2),count:this._tools.size}:null,metadata:{}};return this._layoutRenderer.render(d,Ke)}_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:Tn(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=$o();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=pn();return t!==void 0?t:e?.meta?.defaultIdleMs!==void 0?e.meta.defaultIdleMs:6e5}_lookupCliAdapter(e){return Pn(e)}_resolveEffectiveCost(e,t,r){return Bo(e?.costUsd,e?.inputTokens,e?.outputTokens,e?.cachedInputTokens,t)}_resolveEffectiveCwd(e,t){return t?.cwd??(e.working_directory?K.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,callerIdentity:r,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}}}_registerCallerIdentityOverride(e,t,r){let o=Symbol("callerIdentityOverride");return this._callerIdentityOverrides.set(e,{token:o,callerIdentity:t,targetIdentity:r}),o}_clearCallerIdentityOverride(e,t){if(!t)return;let r=this._callerIdentityOverrides.get(e);r&&r.token===t&&this._callerIdentityOverrides.delete(e);}_rewriteCallerFacingPayload(e,t,r){let{callerIdentity:o,targetIdentity:s}=r,i={...t,agentRef:o.agentRef};if(e==="task:output")return i;let a=i,d=a.metadata??{},l=d.crewx??{};return {...a,workspaceId:o.id,workspaceName:o.name,metadata:{...d,crewx:{...l,remoteExecution:s}}}}emit(e,t){if(e==="task:start"||e==="task:end"||e==="task:output"){let r=t.traceId,o=this._callerIdentityOverrides.get(r);if(o){let s=this._rewriteCallerFacingPayload(e,t,o);super.emit(e,s);return}}super.emit(e,t);}emitToolEvents(e,t,r,o,s,i,a){try{let l=this._lookupCliAdapter(r)?.parseEvent?.(o)??Ut(new Date().toISOString(),o);for(let c of l)c.type==="tool_use"&&c.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:c.toolName,rawName:c.toolName,input:c.toolInput?this.tryParseJson(c.toolInput):void 0,toolUseId:c.toolUseId}}),c.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:c.toolName??"unknown",rawName:c.toolName??"unknown",toolUseId:c.toolUseId,result:c.resultPreview,isError:c.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){let c=await o.target.query(o.agentRef,t,this._buildFileRemoteOptions(e,r));return {...c,meta:{...c.meta,agentId:e.replace(/^@/,"")}}}let s=Jt.getStore()??bn(r?.trace),i=r?.taskId??it("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null},l=r?.callerIdentity?this._registerCallerIdentityOverride(i,r.callerIdentity,{agentId:e.replace(/^@/,""),workspaceId:this._workspaceId,workspaceName:this._workspaceName}):void 0;try{return await Jt.run(d,async()=>{let c=Date.now(),f=new Date,g;try{g=gr(e,Array.from(this._agents.values()));}catch(x){if(x instanceof Ce){this.emit("task:start",{traceId:i,timestamp:f,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 O=Date.now()-c,j={code:"AGENT_NOT_FOUND",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:O,error:j,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:j,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:O,taskId:i}}}throw x}d.callerAgentId=g.id;let m=Cn(g.provider),w=Er(g.options,"query",m,Ar(r?.overdrive)),_=Rr(g.options,"query"),k=w.active&&w.provider?w.provider:r?.provider??_.provider??m,y=w.active&&w.model?w.model:r?.model??_.model??g.inline?.model;y&&y.includes("{{")&&(y=await this._templateEngine.render(y,{...r?.vars??{}}));let v=k!==m?void 0:r?.resumeSessionId,A;try{A=Se(k,this._additionalArgsProvider);}catch(x){this.emit("task:start",{traceId:i,timestamp:f,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 O=Date.now()-c,j={code:"PROVIDER_ERROR",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:O,error:j,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:j,meta:{agentId:g.id,provider:k,model:y,durationMs:O,taskId:i}}}let b=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),C;try{C=await this.renderAgentPromptFull(e,{session:{mode:"query",platform:r?.platform},vars:{user_input:t,...r?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(g,r)},messages:b,threadId:r?.threadId});}catch(x){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${x instanceof Error?x.message:String(x)}`);}let V,$,I,N=y,de=!1,Y=x=>{de||(de=!0,this.emit("task:start",{traceId:i,timestamp:f,agentRef:e,message:t,mode:"query",pid:x,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:N,provider:k,codingAgentCommand:V,renderedPrompt:C,metadata:{...r?.metadata??{},provider:k,...w.active?{overdrive:!0}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},D=g.options,Z=w.active?w.mode:D?.query?.mode,U=w.effort??r?.effort??D?.query?.effort,ne=Array.isArray(D?.query?.tools)?D.query.tools:void 0,B=this._tools.size>0?this._filterToolsByMode(ne):[],F=(()=>{let x=D?.query;if(!x||Array.isArray(x))return;let{tools:O,effort:j,mode:P,provider:z,model:le,profiles:ft,...Kr}=x,St=Object.entries(Kr).filter(([,Pe])=>Pe!=null);if(St.length!==0)return Object.fromEntries(St.map(([Pe,Gr])=>[Pe,String(Gr)]))})(),Q=g.inline?.max_steps;k.startsWith("api/")&&Y();let J=!1,q=0,Ke=()=>{},W=new Promise(x=>{Ke=x;});this._activeTasks.set(i,{pid:void 0,done:W});try{let x=await A.query(t,{model:y,effort:U,mode:Z,context:r?.context,systemPrompt:C??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(D?.query)?D.query:void 0,resumeSessionId:v,tools:B.length>0?B:void 0,maxSteps:Q,configOptions:F,timeoutMs:this._resolveTimeout("query",this._lookupCliAdapter(k)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(k)),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:k,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,f)},onPid:P=>{let z=this._activeTasks.get(i);z&&(z.pid=P),Y(P);},onOutput:(P,z)=>{let le=this._lookupCliAdapter(k);z==="stdout"&&le?.suppressOutputLine?.(P)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:P,level:z}),z==="stdout"&&this.emitToolEvents(i,e,k,P,g.id,r?.threadId??"","");},onTaskLog:P=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",k,P);for(let z of P)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(z),level:"info"});},onCommand:P=>{V=P;},onUsage:P=>{$=P;},onExitCode:P=>{I=P;},onModel:P=>{N||(N=P);}});q=this._resolveEffectiveCost($,N,c),Y();let O=Date.now()-c,j={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",result:x,durationMs:O,exitCode:I,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:N,metadata:Object.keys(j).length>0?j:void 0}),J=!0,{ok:!0,data:x,meta:{agentId:g.id,provider:k,model:y,durationMs:O,taskId:i}}}catch(x){if(x instanceof exports.ClientToolCallRequiredError){let P=it("thd");return this._pendingThreads.set(P,{agentRef:g.id,providerStr:k,continuationState:x.continuationState,toolCall:x.toolCall,traceId:i,startMs:c,model:y}),J=!0,{ok:!0,status:"requires_action",data:"",toolCall:x.toolCall,threadId:P,meta:{agentId:g.id,provider:k,model:y,durationMs:Date.now()-c,taskId:i}}}q=this._resolveEffectiveCost($,N,c),Y();let O=Date.now()-c,j={code:"QUERY_FAILED",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:O,error:j,exitCode:I,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:N,metadata:r?.metadata?{...r.metadata}:void 0}),J=!0,{ok:!1,data:"",error:j,meta:{agentId:g.id,provider:k,model:y,durationMs:O,taskId:i}}}finally{J||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:Date.now()-c,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:I??-1,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:N}),this._activeTasks.delete(i),this._clearCallerIdentityOverride(i,l),Ke();}})}finally{this._clearCallerIdentityOverride(i,l);}}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=Se(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 exports.ClientToolCallRequiredError)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){let c=await o.target.execute(o.agentRef,t,this._buildFileRemoteOptions(e,r));return {...c,meta:{...c.meta,agentId:e.replace(/^@/,"")}}}let s=Jt.getStore()??bn(r?.trace),i=r?.taskId??it("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null},l=r?.callerIdentity?this._registerCallerIdentityOverride(i,r.callerIdentity,{agentId:e.replace(/^@/,""),workspaceId:this._workspaceId,workspaceName:this._workspaceName}):void 0;try{return await Jt.run(d,async()=>{let c=Date.now(),f=new Date,g;try{g=gr(e,Array.from(this._agents.values()));}catch(x){if(x instanceof Ce){this.emit("task:start",{traceId:i,timestamp:f,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 O=Date.now()-c,j={code:"AGENT_NOT_FOUND",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:O,error:j,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:j,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:O,taskId:i}}}throw x}d.callerAgentId=g.id;let m=Cn(g.provider),w=Er(g.options,"execute",m,Ar(r?.overdrive)),_=Rr(g.options,"execute"),k=w.active&&w.provider?w.provider:r?.provider??_.provider??m,y=w.active&&w.model?w.model:r?.model??_.model??g.inline?.model;y&&y.includes("{{")&&(y=await this._templateEngine.render(y,{...r?.vars??{}}));let v=k!==m?void 0:r?.resumeSessionId,A;try{A=Se(k,this._additionalArgsProvider);}catch(x){this.emit("task:start",{traceId:i,timestamp:f,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 O=Date.now()-c,j={code:"PROVIDER_ERROR",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:O,error:j,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:j,meta:{agentId:g.id,provider:k,model:y,durationMs:O,taskId:i}}}let b=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),C;try{C=await this.renderAgentPromptFull(e,{session:{mode:"execute",platform:r?.platform},vars:{user_input:t,...r?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(g,r)},messages:b,threadId:r?.threadId});}catch(x){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${x instanceof Error?x.message:String(x)}`);}let V,$,I,N=y,de=!1,Y=x=>{de||(de=!0,this.emit("task:start",{traceId:i,timestamp:f,agentRef:e,message:t,mode:"execute",pid:x,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:N,provider:k,codingAgentCommand:V,renderedPrompt:C,metadata:{...r?.metadata??{},provider:k,...w.active?{overdrive:!0}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},D=g.options,Z=w.active?w.mode:D?.execute?.mode,U=w.effort??r?.effort??D?.execute?.effort,ne=Array.isArray(D?.execute?.tools)?D.execute.tools:void 0,B=this._tools.size>0?this._filterToolsByMode(ne):[],F=(()=>{let x=D?.execute;if(!x||Array.isArray(x))return;let{tools:O,effort:j,mode:P,provider:z,model:le,profiles:ft,...Kr}=x,St=Object.entries(Kr).filter(([,Pe])=>Pe!=null);if(St.length!==0)return Object.fromEntries(St.map(([Pe,Gr])=>[Pe,String(Gr)]))})(),Q=g.inline?.max_steps;k.startsWith("api/")&&Y();let J=!1,q=0,Ke=()=>{},W=new Promise(x=>{Ke=x;});this._activeTasks.set(i,{pid:void 0,done:W});try{let x=await A.execute(t,{model:y,effort:U,mode:Z,context:r?.context,systemPrompt:C??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(D?.execute)?D.execute:void 0,resumeSessionId:v,tools:B.length>0?B:void 0,maxSteps:Q,configOptions:F,timeoutMs:this._resolveTimeout("execute",this._lookupCliAdapter(k)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(k)),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:k,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,f)},onPid:P=>{let z=this._activeTasks.get(i);z&&(z.pid=P),Y(P);},onOutput:(P,z)=>{let le=this._lookupCliAdapter(k);z==="stdout"&&le?.suppressOutputLine?.(P)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:P,level:z}),z==="stdout"&&this.emitToolEvents(i,e,k,P,g.id,r?.threadId??"","");},onTaskLog:P=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",k,P);for(let z of P)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(z),level:"info"});},onCommand:P=>{V=P;},onUsage:P=>{$=P;},onExitCode:P=>{I=P;},onModel:P=>{N||(N=P);}});q=this._resolveEffectiveCost($,N,c),Y();let O=Date.now()-c,j={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",result:x,durationMs:O,exitCode:I,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:N,metadata:Object.keys(j).length>0?j:void 0}),J=!0,{ok:!0,data:x,meta:{agentId:g.id,provider:k,model:y,durationMs:O,taskId:i}}}catch(x){q=this._resolveEffectiveCost($,N,c),Y();let O=Date.now()-c,j={code:"EXECUTE_FAILED",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:O,error:j,exitCode:I,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:N,metadata:r?.metadata?{...r.metadata}:void 0}),J=!0,{ok:!1,data:"",error:j,meta:{agentId:g.id,provider:k,model:y,durationMs:O,taskId:i}}}finally{J||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:Date.now()-c,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:I??-1,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:N}),this._activeTasks.delete(i),this._clearCallerIdentityOverride(i,l),Ke();}})}finally{this._clearCallerIdentityOverride(i,l);}}};function js(n,e){let t=Zn(n)?n:void 0,r=Zn(e)?e:void 0;if(!(!t&&!r))return {...t??{},...r??{}}}function Zn(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function $l(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(!Zn(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}function Ul(n){let e=Array.isArray(n.provider)?n.provider:[n.provider],t=n.options,r=[...e];for(let o of ["query","execute"]){let s=Rr(t,o);s.provider&&r.push(s.provider);let i=t&&typeof t=="object"&&!Array.isArray(t)?t[o]:void 0,a=i&&typeof i=="object"&&!Array.isArray(i)?xr(i.overdrive):void 0;a?.provider&&r.push(a.provider);}return r}async function Ws(n,e,t){let r=n.flatMap(Ul);if(r.some(s=>s.startsWith("api/"))){let{registerApiProviders:s}=await Promise.resolve().then(()=>(Un(),Ps));s(t?.api);}await Wl(r,e),Fl(r,e),jl(r);}function jl(n){if(!n.some(r=>r.startsWith("acp/")))return;let{registerAcpProviders:t}=(zn(),yo(Is));t();}async function Wl(n,e){if(!n.some(i=>i.startsWith("remote/")))return;let r=e.providers;if(!Array.isArray(r))return;let{createRemoteProviderFactory:o}=await Promise.resolve().then(()=>(Vn(),Ms)),s=new Map;for(let i of r)i.type==="remote"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&Te("remote",o(s,Se));}function Fl(n,e){if(!n.some(i=>i.startsWith("plugin/")))return;let r=e.providers;if(!Array.isArray(r))return;let{createPluginProviderFactory:o}=(Jn(),yo($s)),s=new Map;for(let i of r)i.type==="plugin"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&Te("plugin",o(s));}u();var eo=class{detach(e){}};u();var Hl="crewx:fs:",to=class{prefix;store;constructor(e){this.prefix=e?.prefix??Hl,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,"/")}`}};u();var Ct="default",bt="archive",Fs="wi-default-flow",Bl="wi-plan-flow",ql="wi-default-flow.yaml",zl="wi-plan-flow.yaml",Fr=/^[a-zA-Z0-9_-]{1,64}$/;function Hs(n){return n===Ct||n===bt}function Kl(n){let e={id:Ct,name:"Default",workflowId:Fs,system:true,readOnly:false},t={id:bt,name:"Archive",workflowId:"",system:true,readOnly:true},r=n?.settings?.wi?.boards;if(!Array.isArray(r)||r.length===0)return [e,t];let o=new Set,s=[];for(let i of r){if(!i||typeof i!="object")continue;let a=i,d=a.id,l=a.name,c=a.workflow_id;if(typeof d!="string"||d.length===0||typeof l!="string"||l.length===0||typeof c!="string"||c.length===0||Hs(d)||!Fr.test(d)||o.has(d))continue;o.add(d);let f=typeof a.description=="string"?a.description:void 0,g=typeof a.goal_id=="string"?a.goal_id:void 0;s.push({id:d,name:l,workflowId:c,...f!==void 0?{description:f}:{},...g!==void 0?{goalId:g}:{},system:false,readOnly:false});}return [e,...s,t]}u();var ee=class extends Error{constructor(e){super(e),this.name="WiCreateError";}},Vl=300*1e3,Jl=300*1e3,Xl=1e4,Yl=50;function Ql(n){return new Promise(e=>setTimeout(e,n))}function Zl(n){let e=n.getFullYear(),t=String(n.getMonth()+1).padStart(2,"0"),r=String(n.getDate()).padStart(2,"0");return {compact:`${e}${t}${r}`,iso:`${e}-${t}-${r}`}}function ec(n){return n.normalize("NFKD").replace(/[^\x00-\x7F]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toUpperCase().slice(0,60)}function tc(n,e){let t=n.replace(/\\/g,"/").toLowerCase(),r=e.replace(/\\/g,"/").toLowerCase();if(r!==t&&!r.startsWith(t+"/"))throw new ee("Path is outside wi directory")}function Bs(n){let e=typeof n=="string"?n.trim():"";if(!e)throw new ee("title is required");if(e.length>200)throw new ee("title must be 200 characters or fewer");return e}function qs(n){let e=typeof n=="string"?n.trim():"";if(!e)return "manual";if(e.length>128)throw new ee("source must be 128 characters or fewer");if(/[\r\n]/.test(e))throw new ee("source must be a single line");return e}function zs(n){return (typeof n=="string"?n.trim().replace(/^@+/,""):"")||void 0}function Ks(n){if(n==null)return [];if(!Array.isArray(n))throw new ee("depends_on must be an array");return n.map(e=>String(e).trim()).filter(Boolean)}function Gs(n,e){let t=typeof n=="string"?n.trim():"";if(!t){if(e?.required)throw new ee("board is required");return}if(!Fr.test(t))throw new ee("board must match ^[a-zA-Z0-9_-]{1,64}$");if(t===bt)throw new ee(`board cannot be '${bt}'`);return t}function Tt(n){return JSON.stringify(n)}function rc(n,e){return e.length===0?[`${n}: []`]:[`${n}:`,...e.map(t=>` - ${Tt(t)}`)]}async function nc(n){let e=await hs.promises.stat(n).catch(()=>null);e&&Date.now()-e.mtimeMs>Jl&&await hs.promises.rm(n,{recursive:true,force:true}).catch(()=>{});}async function oc(n,e){let t=K.join(n,".wi-create.lock"),r=Date.now()+Xl;for(;Date.now()<r;)try{await hs.promises.mkdir(t);try{return await e()}finally{await hs.promises.rm(t,{recursive:!0,force:!0}).catch(()=>{});}}catch(o){if(o.code!=="EEXIST")throw o;await nc(t),await Ql(Yl);}throw new ee("WI create lock timeout: docs/wi/.wi-create.lock")}async function Vs(n){let e=[],t=await hs.promises.readdir(n,{withFileTypes:true}).catch(r=>{if(r.code==="ENOENT")return [];throw r});for(let r of t){let o=K.join(n,r.name);r.isDirectory()?e.push(...await Vs(o)):r.isFile()&&r.name.endsWith(".md")&&e.push(r.name);}return e}async function sc(n){let e=await hs.promises.readdir(n).catch(r=>{if(r.code==="ENOENT")return [];throw r}),t=await Vs(K.join(n,"archive"));return [...e,...t]}function ic(n,e){return n.reduce((t,r)=>{if(!r.startsWith(e))return t;let o=r.slice(e.length).match(/^(\d+)/);return o?Math.max(t,parseInt(o[1],10)):t},0)+1}function ac(n,e){return n.some(t=>t===`${e}.md`||t.startsWith(`${e}-`))}async function dc(n,e){let t=K.join(n,`.wi-${e}.lock`);try{return await hs.promises.writeFile(t,"",{flag:"wx"}),{claimed:!0,lockPath:t}}catch(r){if(r.code!=="EEXIST")throw r;return await hs.promises.stat(t).then(s=>Date.now()-s.mtimeMs>Vl).catch(()=>false)&&await hs.promises.unlink(t).then(()=>true).catch(()=>false)?(await hs.promises.writeFile(t,"",{flag:"wx"}),{claimed:true,lockPath:t}):{claimed:false,lockPath:t}}}function lc(n){return {title:Bs(n.title),assignee:zs(n.assignee),body:(n.body??"").trim(),board:Gs(n.board),source:qs(n.source),depends_on:Ks(n.depends_on)}}function cc(n,e,t){if(n==null)return;let r=typeof n=="string"?n.trim():"";if(!r)throw new ee(`items[${e}].key must be a non-empty string when provided`);if(t.has(r))throw new ee(`items[${e}].key "${r}" is duplicated`);return t.add(r),r}function uc(n){let e=Gs(n.board,{required:true}),t=qs(n.source);if(!Array.isArray(n.items)||n.items.length===0)throw new ee("items must contain at least one WI");let r=new Set;return n.items.map((o,s)=>{if(!o||typeof o!="object")throw new ee(`items[${s}] must be an object`);if(typeof o.body!="string")throw new ee(`items[${s}].body is required`);return {key:cc(o.key,s,r),title:Bs(o.title),assignee:zs(o.assignee),body:o.body.trim(),board:e,source:t,depends_on:Ks(o.depends_on)}})}function pc(n,e){return n.map(t=>e.get(t)??t)}function gc(n,e,t){let r=!!n.board&&n.board!==Ct,o={wi_id:e,title:n.title,date:t,status:"draft",priority:"normal",source:n.source};return n.assignee&&(o.assignee=n.assignee),r&&(o.board=n.board),o.depends_on=n.depends_on,{raw:`---
309
+ ${[`wi_id: ${e}`,`title: ${Tt(n.title)}`,`date: ${Tt(t)}`,"status: draft",...n.assignee?[`assignee: ${Tt(n.assignee)}`]:[],"priority: normal",`source: ${Tt(n.source)}`,...r?[`board: ${Tt(n.board)}`]:[],...rc("depends_on",n.depends_on)].join(`
310
310
  `)}
311
311
  ---
312
312
 
313
313
  ${n.body}
314
- `,frontmatter:o}}async function Hs(n,e){let t=K.join(n,"docs","wi");return await ls.promises.mkdir(t,{recursive:true}),Jl(t,async()=>{let{compact:r,iso:o}=ql(new Date),s=`WI-${r}-`,i=await Xl(t),a=Yl(i,s),d=[],l=[];try{let c=[];for(let m of e){let _;for(let k=0;k<999;k++,a++){let y=`WI-${r}-${String(a).padStart(3,"0")}`;if(Ql(i,y))continue;let v=await Zl(t,y);if(!v.claimed)continue;let A=zl(m.title),T=A?`${y}-${A}.md`:`${y}.md`,b=K.resolve(t,T);if(Kl(t,b),await ls.promises.access(b).then(()=>!0,()=>!1)){await ls.promises.unlink(v.lockPath).catch(()=>{});continue}l.push(v.lockPath),_={item:m,wiId:y,filename:T,fullPath:b};break}if(!_)throw new ee("Failed to allocate a unique WI id");c.push(_),i.push(_.filename);}let f=new Map;for(let m of c)m.item.key&&f.set(m.item.key,m.wiId);let g=[];for(let m of c){let w=nc(m.item.depends_on,f),_={...m.item,depends_on:w},k=oc(_,m.wiId,o);await ls.promises.writeFile(m.fullPath,k.raw,{encoding:"utf8",flag:"wx"}),d.push(m.fullPath);let y=await ls.promises.stat(m.fullPath);g.push({summary:{wi_id:m.wiId,title:_.title,status:"draft",priority:"normal",assignee:_.assignee,depends_on:w,blocks:[],date:o,board:_.board&&_.board!==bt?_.board:void 0,source:_.source,screens:[],path:`docs/wi/${m.filename}`,mtime:y.mtimeMs},frontmatter:k.frontmatter,body:_.body});}return g}catch(c){throw await Promise.all(d.map(f=>ls.promises.unlink(f).catch(()=>{}))),c}finally{await Promise.all(l.map(c=>ls.promises.unlink(c).catch(()=>{})));}})}async function sc(n,e){let[t]=await Hs(n,[ec(e)]);if(!t)throw new ee("Failed to create WI");return t}async function ic(n,e){return {created:await Hs(n,rc(e))}}u();var ac=new Set(["draft","approved","in-progress"]);function dc(n,e){let t=e.batch.filter(Boolean);if(t.length===0)return {done:true};let r=new Set(e.exclude??[]),o=new Set(t),s=new Map(n.filter(f=>o.has(f.wi_id)).map(f=>[f.wi_id,f])),i=t.filter(f=>{let g=s.get(f);return g&&g.status!=="done"});if(i.length===0)return {done:true};for(let f of i){let g=s.get(f);if(g)for(let m of g.depends_on??[]){if(!o.has(m))continue;if(s.get(m)?.status==="cancelled")return {blocked:true,reason:`${f} depends on cancelled WI ${m}`}}}let a=new Map,d=new Map;for(let f of i)a.set(f,new Set),d.set(f,0);for(let f of i){let g=s.get(f);if(g)for(let m of g.depends_on??[])d.has(m)&&(a.get(m).add(f),d.set(f,(d.get(f)??0)+1));}let l=i.filter(f=>(d.get(f)??0)===0),c=[];for(let f=0;f<l.length;f++){let g=l[f];c.push(g);for(let m of a.get(g)??[]){let w=(d.get(m)??0)-1;d.set(m,w),w===0&&l.push(m);}}if(c.length!==i.length)return {cycle:i.filter(f=>(d.get(f)??0)>0)};for(let f of t){if(!i.includes(f)||r.has(f))continue;let g=s.get(f);if(!g||!ac.has(g.status))continue;if(!(g.depends_on??[]).some(w=>{if(!o.has(w))return false;let _=s.get(w);return _?_.status!=="done":false}))return {pick:f}}return {done:true}}u();function or(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Bs(n,e){let t={...n};for(let[r,o]of Object.entries(e))or(o)&&or(t[r])?t[r]=Bs(t[r],o):t[r]=o;return t}function _c(n){let e=n?.filePath??K.join(rd.homedir(),".crewx","crewx.yaml"),t=null,r=null;function o(){try{return ls.statSync(e).mtimeMs}catch{return null}}function s(){let i=o();if(i===null)return t=null,r=null,{};if(r!==null&&t===i)return r;let a=null;try{a=jsYaml.load(ls.readFileSync(e,"utf-8"));}catch{a=null;}let d=or(a)?a:{};return r=d,t=i,d}return {get path(){return e},read(){let i=s();return or(i.settings)?i.settings:{}},update(i){let a=s(),d=or(a.settings)?a.settings:{},l=Bs(d,i),c={...a,settings:l};ls.mkdirSync(K.dirname(e),{recursive:true});let f=`${e}.tmp`;return ls.writeFileSync(f,jsYaml.dump(c)),ls.renameSync(f,e),t=null,r=null,l}}}u();_e();function Zn(n){if(!n)return "";let e=n.lastIndexOf("/");return e===-1?n.trim():n.slice(e+1).trim()}function qs(n){return n?vt(n).models.length>0:false}function eo(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function vc(n,e,t){let r=n,o=false,s=[],i=()=>(o||(r={...n},o=true),r),a=typeof r.provider=="string"&&r.provider.trim()?Zn(r.provider):e,d=typeof r.model=="string"&&r.model.trim()?r.model.trim():t;qs(a)&&(typeof r.mode=="string"&&(Mt(a).map(f=>f.id).includes(r.mode)||(delete i().mode,s.push("mode"))),typeof r.effort=="string"&&(Nt(a,d).includes(r.effort)||(delete i().effort,s.push("effort"))));let l=r.overdrive;if(eo(l)){let c=Zn(typeof l.provider=="string"?l.provider:void 0),f=typeof l.model=="string"?l.model:void 0;if(qs(c)){let g,m=()=>(g||(g={...l},i().overdrive=g),g);typeof l.mode=="string"&&(Mt(c).map(_=>_.id).includes(l.mode)||(delete m().mode,s.push("overdrive.mode"))),typeof l.effort=="string"&&(Nt(c,f).includes(l.effort)||(delete m().effort,s.push("overdrive.effort")));}}return {block:r,removed:s}}function kc(n){let{options:e}=n;if(!eo(e))return {options:e,changed:false,removed:[]};let t=Zn(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(!eo(d))continue;let{block:l,removed:c}=vc(d,t,n.model);c.length>0&&(i()[a]=l,r.push(...c.map(f=>`${a}.${f}`)));}return {options:o,changed:r.length>0,removed:r}}u();var xc="https://api.crewx.dev/v1/models",Ac=3600*1e3,zs=0;async function Ec(n){let e=n?.ttlMs??Ac,t=Date.now();if(!(t-zs<e)){zs=t;try{let r=await fetch(n?.endpoint??xc);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});Do(s);}catch{}}}u();_e();var Rc="https://api.crewx.dev/v1/models",Cc=900*1e3,Ks=0;async function bc(n){let e=n?.ttlMs??Cc,t=Date.now();if(!(t-Ks<e)){Ks=t;try{let r=await fetch(n?.endpoint??Rc);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??[],c=Array.isArray(a)?[]:a.effort??[],f=Array.isArray(a)?{}:a.modelOverrides??{},g=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:g,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:c.filter(m=>typeof m=="string"),modelOverrides:f};}Yr(s);}catch{}}}u();function Tc(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))}u();var to=["codex","claude","opencode","antigravity","copilot"];function Pc(n){let e=n.indexOf("/");return e===-1?n:n.slice(e+1)}function ro(n){let e=Pc(n),t=to.indexOf(e);return t===-1?to.length:t}function sr(n,e){return ro(n)-ro(e)}var Sc=new Set(["claude","copilot","codex","opencode"]);function Ic(n){if(!n)return "";if(n.startsWith("acp/")){let e=n.slice(4);if(Sc.has(e))return `cli/${e}`}return n}_e();ke();Nn();Dn();u();Ln();Ue();u();Nr();jr();_e();var Oc="model",Mc="mode",Nc="thought_level";function no(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 Dc(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 Lc(n,e,t,r){let o=t.agentInfo?.name,s=e??o??n,i=r.configOptions??[],d=(r.modes?.availableModes??[]).map(y=>({id:y.id,name:y.name,...y.description!=null?{description:y.description}:{}})),l=[];for(let y of i)if(y.category?.trim().toLowerCase()===Mc&&y.options!=null)for(let v of no(y.options))v.value!=null&&l.push({id:v.value,name:v.name??v.value});let c=Dc(d,l),f=[];for(let y of i)if(y.category?.trim().toLowerCase()===Nc&&y.type==="select")for(let v of no(y.options??[]))v.value!=null&&f.push(v.value);if(n==="claude"){let y=Dt().map(A=>({id:A.id,name:A.name})),v=Gs(t);return Vs(n,{models:y,modes:c,availableModelsCount:0,configModelsCount:0,skipModelWarn:true}),{id:`acp/${n}`,name:s,modes:c,effort:f,models:y,capabilities:v}}let m=(r.models?.availableModels??[]).map(y=>({id:y.modelId})),w=[];for(let y of i)if(y.category?.trim().toLowerCase()===Oc&&y.options!=null)for(let v of no(y.options))v.value!=null&&w.push({id:v.value,...v.name!=null?{name:v.name}:{}});let _=Lt(m,w);Vs(n,{models:_,modes:c,availableModelsCount:m.length,configModelsCount:w.length,skipModelWarn:false});let k=Gs(t);return {id:`acp/${n}`,name:s,modes:c,effort:f,models:_,capabilities:k}}function Gs(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 Vs(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 Js(n){let e=exports.ACP_ADAPTERS[n];if(!e)return null;let t=e.meta?.displayName,r=new exports.AcpConnection({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 Lc(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 $c(){let n=Object.keys(exports.ACP_ADAPTERS),e=await Promise.allSettled(n.map(r=>Js(r))),t=[];for(let r of e)r.status==="fulfilled"&&r.value!==null&&t.push(r.value);return t.sort((r,o)=>sr(r.id,o.id))}Nr();$n();jr();Hn();Gr();$e();u();$e();_e();function jc(n){return n.charAt(0).toUpperCase()+n.slice(1)}async function Xs(){return new Promise(n=>{child_process.execFile("opencode",["models"],{timeout:5e3,maxBuffer:1048576},(t,r)=>{if(t){n([]);return}let o=r.split(`
315
- `).map(s=>s.trim()).filter(s=>s.length>0).map(s=>({id:s}));n(o);}).on("error",()=>n([]));})}function Wc(n,e,t){if(!e.meta)return null;let r=e.meta.capabilities??{},o=rt(n),s=o.length>0?o:e.meta.models??[],i=t!==void 0?Lt(t,s):s;return {id:`cli/${n}`,name:e.meta.displayName??jc(n),modes:Mt(n),effort:Nt(n),models:i,modelOverrides:Co(n),capabilities:{loadSession:r.loadSession??false,resume:r.resume??false,image:r.image??false,audio:r.audio??false,mcp:r.mcp??false}}}async function Fc(n={}){let e=n.includeOpencodeRuntimeModels?await Xs():void 0,t=[];for(let[r,o]of Object.entries(exports.BUILTIN_ADAPTERS)){let i=Wc(r,o,r==="opencode"?e:void 0);i&&t.push(i);}return t.sort((r,o)=>sr(r.id,o.id))}u();var oo=0;function Hc(n){let e=n.meta?.taskId,t=e?` taskId=${e}`:"";if(n.ok)return `Task completed:${t}
314
+ `,frontmatter:o}}async function Js(n,e){let t=K.join(n,"docs","wi");return await hs.promises.mkdir(t,{recursive:true}),oc(t,async()=>{let{compact:r,iso:o}=Zl(new Date),s=`WI-${r}-`,i=await sc(t),a=ic(i,s),d=[],l=[];try{let c=[];for(let m of e){let _;for(let k=0;k<999;k++,a++){let y=`WI-${r}-${String(a).padStart(3,"0")}`;if(ac(i,y))continue;let v=await dc(t,y);if(!v.claimed)continue;let A=ec(m.title),b=A?`${y}-${A}.md`:`${y}.md`,C=K.resolve(t,b);if(tc(t,C),await hs.promises.access(C).then(()=>!0,()=>!1)){await hs.promises.unlink(v.lockPath).catch(()=>{});continue}l.push(v.lockPath),_={item:m,wiId:y,filename:b,fullPath:C};break}if(!_)throw new ee("Failed to allocate a unique WI id");c.push(_),i.push(_.filename);}let f=new Map;for(let m of c)m.item.key&&f.set(m.item.key,m.wiId);let g=[];for(let m of c){let w=pc(m.item.depends_on,f),_={...m.item,depends_on:w},k=gc(_,m.wiId,o);await hs.promises.writeFile(m.fullPath,k.raw,{encoding:"utf8",flag:"wx"}),d.push(m.fullPath);let y=await hs.promises.stat(m.fullPath);g.push({summary:{wi_id:m.wiId,title:_.title,status:"draft",priority:"normal",assignee:_.assignee,depends_on:w,blocks:[],date:o,board:_.board&&_.board!==Ct?_.board:void 0,source:_.source,screens:[],path:`docs/wi/${m.filename}`,mtime:y.mtimeMs},frontmatter:k.frontmatter,body:_.body});}return g}catch(c){throw await Promise.all(d.map(f=>hs.promises.unlink(f).catch(()=>{}))),c}finally{await Promise.all(l.map(c=>hs.promises.unlink(c).catch(()=>{})));}})}async function fc(n,e){let[t]=await Js(n,[lc(e)]);if(!t)throw new ee("Failed to create WI");return t}async function mc(n,e){return {created:await Js(n,uc(e))}}u();var hc=new Set(["draft","approved","in-progress"]);function yc(n,e){let t=e.batch.filter(Boolean);if(t.length===0)return {done:true};let r=new Set(e.exclude??[]),o=new Set(t),s=new Map(n.filter(f=>o.has(f.wi_id)).map(f=>[f.wi_id,f])),i=t.filter(f=>{let g=s.get(f);return g&&g.status!=="done"});if(i.length===0)return {done:true};for(let f of i){let g=s.get(f);if(g)for(let m of g.depends_on??[]){if(!o.has(m))continue;if(s.get(m)?.status==="cancelled")return {blocked:true,reason:`${f} depends on cancelled WI ${m}`}}}let a=new Map,d=new Map;for(let f of i)a.set(f,new Set),d.set(f,0);for(let f of i){let g=s.get(f);if(g)for(let m of g.depends_on??[])d.has(m)&&(a.get(m).add(f),d.set(f,(d.get(f)??0)+1));}let l=i.filter(f=>(d.get(f)??0)===0),c=[];for(let f=0;f<l.length;f++){let g=l[f];c.push(g);for(let m of a.get(g)??[]){let w=(d.get(m)??0)-1;d.set(m,w),w===0&&l.push(m);}}if(c.length!==i.length)return {cycle:i.filter(f=>(d.get(f)??0)>0)};for(let f of t){if(!i.includes(f)||r.has(f))continue;let g=s.get(f);if(!g||!hc.has(g.status))continue;if(!(g.depends_on??[]).some(w=>{if(!o.has(w))return false;let _=s.get(w);return _?_.status!=="done":false}))return {pick:f}}return {done:true}}u();function sr(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Xs(n,e){let t={...n};for(let[r,o]of Object.entries(e))sr(o)&&sr(t[r])?t[r]=Xs(t[r],o):t[r]=o;return t}function bc(n){let e=n?.filePath??K.join(lo.homedir(),".crewx","crewx.yaml"),t=null,r=null;function o(){try{return hs.statSync(e).mtimeMs}catch{return null}}function s(){let i=o();if(i===null)return t=null,r=null,{};if(r!==null&&t===i)return r;let a=null;try{a=jsYaml.load(hs.readFileSync(e,"utf-8"));}catch{a=null;}let d=sr(a)?a:{};return r=d,t=i,d}return {get path(){return e},read(){let i=s();return sr(i.settings)?i.settings:{}},update(i){let a=s(),d=sr(a.settings)?a.settings:{},l=Xs(d,i),c={...a,settings:l};hs.mkdirSync(K.dirname(e),{recursive:true});let f=`${e}.tmp`;return hs.writeFileSync(f,jsYaml.dump(c)),hs.renameSync(f,e),t=null,r=null,l}}}u();_e();function ro(n){if(!n)return "";let e=n.lastIndexOf("/");return e===-1?n.trim():n.slice(e+1).trim()}function Ys(n){return n?vt(n).models.length>0:false}function no(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Tc(n,e,t){let r=n,o=false,s=[],i=()=>(o||(r={...n},o=true),r),a=typeof r.provider=="string"&&r.provider.trim()?ro(r.provider):e,d=typeof r.model=="string"&&r.model.trim()?r.model.trim():t;Ys(a)&&(typeof r.mode=="string"&&(Nt(a).map(f=>f.id).includes(r.mode)||(delete i().mode,s.push("mode"))),typeof r.effort=="string"&&(Dt(a,d).includes(r.effort)||(delete i().effort,s.push("effort"))));let l=r.overdrive;if(no(l)){let c=ro(typeof l.provider=="string"?l.provider:void 0),f=typeof l.model=="string"?l.model:void 0;if(Ys(c)){let g,m=()=>(g||(g={...l},i().overdrive=g),g);typeof l.mode=="string"&&(Nt(c).map(_=>_.id).includes(l.mode)||(delete m().mode,s.push("overdrive.mode"))),typeof l.effort=="string"&&(Dt(c,f).includes(l.effort)||(delete m().effort,s.push("overdrive.effort")));}}return {block:r,removed:s}}function Sc(n){let{options:e}=n;if(!no(e))return {options:e,changed:false,removed:[]};let t=ro(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(!no(d))continue;let{block:l,removed:c}=Tc(d,t,n.model);c.length>0&&(i()[a]=l,r.push(...c.map(f=>`${a}.${f}`)));}return {options:o,changed:r.length>0,removed:r}}u();var Ic="https://api.crewx.dev/v1/models",Oc=3600*1e3,Qs=0;async function Mc(n){let e=n?.ttlMs??Oc,t=Date.now();if(!(t-Qs<e)){Qs=t;try{let r=await fetch(n?.endpoint??Ic);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});Ho(s);}catch{}}}u();_e();var Nc="https://api.crewx.dev/v1/models",Dc=900*1e3,Zs=0;function Hr(n){return n!=null&&typeof n=="object"&&!Array.isArray(n)}function ei(n){if(Hr(n)&&!(typeof n.mode!="string"||n.mode.length===0)&&!(typeof n.effort!="string"||n.effort.length===0))return {mode:n.mode,effort:n.effort}}function Lc(n,e){let t=n.modelOverrides[e]?.effort;return Array.isArray(t)&&t.every(r=>typeof r=="string")?t:n.effort}function $c(n,e){if(!Hr(n)||n.version!==1||!Hr(n.providers))return {};let t={};for(let[r,o]of Object.entries(n.providers)){if(!/^cli\/[^/]+$/.test(r)||!Hr(o))continue;let s=e[r.slice(4)];if(!s||typeof o.model!="string"||o.model.length===0||!s.models.some(c=>c.id===o.model))continue;let i=ei(o.query),a=ei(o.execute);if(!i||!a)continue;let d=new Set(s.modes.map(c=>c.id));if(!d.has(i.mode)||!d.has(a.mode))continue;let l=Lc(s,o.model);!l.includes(i.effort)||!l.includes(a.effort)||(t[r]={model:o.model,query:i,execute:a});}return t}async function Uc(n){let e=n?.ttlMs??Dc,t=Date.now();if(!(t-Zs<e)){Zs=t;try{let r=await fetch(n?.endpoint??Nc);if(!r.ok){Mt({});return}let o=await r.json();if(!o?.providers||typeof o.providers!="object"){Mt({});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??[],c=Array.isArray(a)?[]:a.effort??[],f=Array.isArray(a)?{}:a.modelOverrides??{},g=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:g,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:c.filter(m=>typeof m=="string"),modelOverrides:f};}en(s),Mt($c(o.defaults,s));}catch{Mt({});}}}u();function jc(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))}u();var oo=["codex","claude","opencode","antigravity","copilot"];function Wc(n){let e=n.indexOf("/");return e===-1?n:n.slice(e+1)}function so(n){let e=Wc(n),t=oo.indexOf(e);return t===-1?oo.length:t}function ir(n,e){return so(n)-so(e)}var Fc=new Set(["claude","copilot","codex","opencode"]);function Hc(n){if(!n)return "";if(n.startsWith("acp/")){let e=n.slice(4);if(Fc.has(e))return `cli/${e}`}return n}_e();ke();$n();Un();u();jn();Ue();u();Dr();Wr();_e();var Bc="model",qc="mode",zc="thought_level";function io(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 Kc(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 Gc(n,e,t,r){let o=t.agentInfo?.name,s=e??o??n,i=r.configOptions??[],d=(r.modes?.availableModes??[]).map(y=>({id:y.id,name:y.name,...y.description!=null?{description:y.description}:{}})),l=[];for(let y of i)if(y.category?.trim().toLowerCase()===qc&&y.options!=null)for(let v of io(y.options))v.value!=null&&l.push({id:v.value,name:v.name??v.value});let c=Kc(d,l),f=[];for(let y of i)if(y.category?.trim().toLowerCase()===zc&&y.type==="select")for(let v of io(y.options??[]))v.value!=null&&f.push(v.value);if(n==="claude"){let y=Lt().map(A=>({id:A.id,name:A.name})),v=ti(t);return ri(n,{models:y,modes:c,availableModelsCount:0,configModelsCount:0,skipModelWarn:true}),{id:`acp/${n}`,name:s,modes:c,effort:f,models:y,capabilities:v}}let m=(r.models?.availableModels??[]).map(y=>({id:y.modelId})),w=[];for(let y of i)if(y.category?.trim().toLowerCase()===Bc&&y.options!=null)for(let v of io(y.options))v.value!=null&&w.push({id:v.value,...v.name!=null?{name:v.name}:{}});let _=$t(m,w);ri(n,{models:_,modes:c,availableModelsCount:m.length,configModelsCount:w.length,skipModelWarn:false});let k=ti(t);return {id:`acp/${n}`,name:s,modes:c,effort:f,models:_,capabilities:k}}function ti(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 ri(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 ni(n){let e=exports.ACP_ADAPTERS[n];if(!e)return null;let t=e.meta?.displayName,r=new exports.AcpConnection({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 Gc(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 Vc(){let n=Object.keys(exports.ACP_ADAPTERS),e=await Promise.allSettled(n.map(r=>ni(r))),t=[];for(let r of e)r.status==="fulfilled"&&r.value!==null&&t.push(r.value);return t.sort((r,o)=>ir(r.id,o.id))}Dr();Wn();Wr();zn();Xr();$e();u();$e();_e();function Xc(n){return n.charAt(0).toUpperCase()+n.slice(1)}async function oi(){return new Promise(n=>{child_process.execFile("opencode",["models"],{timeout:5e3,maxBuffer:1048576},(t,r)=>{if(t){n([]);return}let o=r.split(`
315
+ `).map(s=>s.trim()).filter(s=>s.length>0).map(s=>({id:s}));n(o);}).on("error",()=>n([]));})}function Yc(n,e,t){if(!e.meta)return null;let r=e.meta.capabilities??{},o=rt(n),s=o.length>0?o:e.meta.models??[],i=t!==void 0?$t(t,s):s,a=Oo(`cli/${n}`);return {id:`cli/${n}`,name:e.meta.displayName??Xc(n),modes:Nt(n),effort:Dt(n),models:i,modelOverrides:Mo(n),...a!==void 0?{defaults:a}:{},capabilities:{loadSession:r.loadSession??false,resume:r.resume??false,image:r.image??false,audio:r.audio??false,mcp:r.mcp??false}}}async function Qc(n={}){let e=n.includeOpencodeRuntimeModels?await oi():void 0,t=[];for(let[r,o]of Object.entries(exports.BUILTIN_ADAPTERS)){let i=Yc(r,o,r==="opencode"?e:void 0);i&&t.push(i);}return t.sort((r,o)=>ir(r.id,o.id))}u();var ao=0;function Zc(n){let e=n.meta?.taskId,t=e?` taskId=${e}`:"";if(n.ok)return `Task completed:${t}
316
316
 
317
317
  ${n.data}`;let r=n.error?.message??"Unknown error";return `Task failed:${t}
318
- Error: ${r}`}function Bc(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(oo>=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(", ")}`;oo++;try{let i=s==="execute"?await n.execute(r,o):await n.query(r,o);return Hc(i)}finally{oo--;}}}}u();var Ys=typeof process<"u"?process.env:{};function qc(){return Ys.CREWX_CLI||"npx crewx"}function zc(){return Ys.CREWX_WORKSPACE||(typeof process<"u"?process.cwd():"/")}u();var Kc=/^[a-zA-Z0-9._-]+$/,so=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(!Kc.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return it("box")}};u();function Gc(n,e,t,r,o){let{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}=r,d=s*i,l=s*a,c=d+l,f=e.getThreadMessages(n),g=[],m=0,w=false,_=[];for(let v=0;v<f.length;v+=2){let A=f[v],T=f[v+1],b=A?.content||"",V=T?.content||"",$=o.countTokens(b+V),I=[];A&&I.push(A),T&&I.push(T),_.push({messages:I,tokens:$});}for(let v=_.length-1;v>=0;v--){let A=_[v];if(m+A.tokens>d){w=true;break}m+=A.tokens,g.unshift(...A.messages);}let k=[],y=0;if(w&&l>0)try{let{boxes:v}=t.listBoxes(n);for(let A=v.length-1;A>=0;A--){let T=v[A],b=T.summaryTokens??T.sourceTokens;if(y+b>l)break;y+=b,k.unshift({boxId:T.id,seq:T.seq,taskCount:T.taskCount,sourceTokens:T.sourceTokens,summary:T.summary,previewFirst:T.previewFirst,previewMid:T.previewMid,previewLast:T.previewLast,createdAt:T.createdAt});}}catch(v){if(v instanceof Error&&!/not found/i.test(v.message))throw v}return {hot:g,warm:k,hotTokens:m,warmTokens:y,hotOverflow:w,totalBudget:c,config:{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}}}$e();Qe();u();var Fr=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},ar=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=[],c=0,f=0,g=0,m=false,w=0,_=perf_hooks.performance.now(),k=async I=>{a?.onTaskStart&&await a.onTaskStart(I),g+=1;let N=new AbortController,de={signal:N.signal},Y,D;typeof s=="number"&&Number.isFinite(s)&&s>0&&(D=new Promise((B,F)=>{Y=setTimeout(()=>{let Q=new Fr(I.id,s);N.abort(Q),F(Q);},s);}));let Z=perf_hooks.performance.now(),U=I.run(de),ne=D?Promise.race([U,D]):U;try{let B=await ne,F=perf_hooks.performance.now(),Q=F-Z,J=d(B,I),q={taskId:I.id,success:J,value:B,durationMs:Q,startedAt:Z,finishedAt:F,metadata:I.metadata,aborted:!1};l.push(q),J?c+=1:f+=1,a?.onTaskComplete&&await a.onTaskComplete(q),i&&!J&&(m=!0);}catch(B){let F=perf_hooks.performance.now(),Q=F-Z,J=B instanceof Error?B:new Error(String(B)),q={taskId:I.id,success:false,error:J,durationMs:Q,startedAt:Z,finishedAt:F,metadata:I.metadata,aborted:N.signal.aborted};l.push(q),f+=1,a?.onError&&await a.onError(I,J,Q),i&&(m=true);}finally{Y&&clearTimeout(Y),D&&U.catch(()=>{});}},y=async()=>{for(;!m;){let I=w;if(I>=e.length)break;w+=1;let N=e[I];if(!N||(await k(N),m))break}},v=Math.min(o,e.length),A=[];for(let I=0;I<v;I++)A.push(y());await Promise.all(A);let b=perf_hooks.performance.now()-_,V=l.length?l.reduce((I,N)=>I+N.durationMs,0)/l.length:0,$=b>0?l.length/(b/1e3):l.length;return this.metrics={totalTasks:e.length,startedTasks:g,completedTasks:l.length,successCount:c,failureCount:f,totalDurationMs:b,averageDurationMs:V,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);}}}};u();u();var dr=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 Qs=3,Zs=3e4,ei=500,Vc=n=>{if(typeof n!="number"||Number.isNaN(n)||!Number.isFinite(n))return Qs;let e=Math.floor(n);return e>0?e:Qs},Jc=n=>n===void 0||typeof n!="number"||Number.isNaN(n)||n<=0?Zs:n,Xc=n=>{if(!n)return {maxRetries:0,retryDelay:ei};let e=Number.isInteger(n.maxRetries)&&n.maxRetries>=0?n.maxRetries:0,t=typeof n.retryDelay=="number"&&n.retryDelay>=0?n.retryDelay:ei;return {maxRetries:e,retryDelay:t}},io=n=>{let e=n.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},Yc=(n,e)=>n<=0?Promise.resolve():new Promise((t,r)=>{let o=setTimeout(()=>{e.removeEventListener("abort",s),t();},n),s=()=>{clearTimeout(o),r(io(e));};if(e.aborted){s();return}e.addEventListener("abort",s,{once:true});}),Qc=async(n,e,t)=>{let r,o;for(let s=0;s<=e.maxRetries;s++){if(t.aborted)throw io(t);try{let i=await n();if(r=i,i.success||s===e.maxRetries)return i}catch(i){if(o=i,t.aborted)throw io(t);if(s===e.maxRetries)throw i instanceof Error?i:new Error(String(i))}s<e.maxRetries&&await Yc(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")},ti=(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);}},Zc=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}}}),eu=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")}}),tu=(n,e)=>({onTaskComplete:async t=>{ti(e,n,t.success);},onError:async()=>{ti(e,n,false);}}),ri=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=Vc(t.concurrency),o=Jc(t.timeout),s=Xc(t.retryPolicy),i=new ar,a=new dr,d=n.map((_,k)=>({id:`${e}:${_.agentId??"anonymous"}:${k}`,metadata:{index:k,mode:e,request:_},run:y=>Qc(()=>e==="query"?a.query(_):a.execute(_),s,y.signal)})),l={completed:0,success:0,failure:0,total:n.length},c=await i.run(d,{maxConcurrency:r,timeoutMs:o,evaluateTaskSuccess:_=>_.success,callbacks:tu(l,t)}),f=Zc(c),g=eu(c),m=i.getMetrics(),w={total:n.length,completed:n.length,successCount:f.filter(_=>_.success).length,failureCount:f.filter(_=>!_.success).length,results:f,errors:g,metrics:m};return t.onComplete?.(w),f},ru=(n,e)=>ri(n,"query",e),nu=(n,e)=>ri(n,"execute",e);Kn();u();var ao=class extends At{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=K.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=K.dirname(t);ls.existsSync(o)||ls.mkdirSync(o,{recursive:true});}else if(!ls.existsSync(t))throw new P("NOT_FOUND","Database not found");let r=Ae(t);if(e)try{br(r.db,t);}catch(o){throw r.close(),o}return r}insertSpan(e){let t=this.openHandle(true);try{t.db.insert(lt).values(e).run();}catch(r){throw r instanceof P?r:new P("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(lt).where(drizzleOrm.eq(lt.task_id,e)).all()}catch(r){throw new P("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(lt).where(drizzleOrm.eq(lt.id,e)).limit(1).get()??void 0}catch(r){throw new P("DB_ERROR","Failed to find span by id",r)}finally{t.close();}}};zn();qn();Bn();u();u();var Hr=class{capabilities={required:[]}};u();u();u();var si=2e3;function ii(n){let e=n.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=si?e:e.slice(0,si-11)+" [redacted]"}var fu=10*1024*1024,mu={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function lo(n,e){return n===void 0?true:Array.isArray(n)?n.includes(e):n===e}function hu(n,e){return n===void 0?true:Array.isArray(n)?n.some(t=>e.includes(t)):e.includes(n)}function di(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*(mu[r]??1))}function li(n){return typeof n=="string"}function ci(n){try{let e=ls.statSync(n);return e.size>fu?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${n} (${e.size} bytes)
319
- `),null):ls.readFileSync(n,"utf8").split(`
320
- `).length}catch{return null}}function ui(n){try{return ls.statSync(n).size}catch{return null}}function yu(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(we(o,n))return true;if(t&&o.startsWith("/")){let{relative:s,isAbsolute:i}=oe("path");if(i(o)){let a=s(t,o);if(a&&!a.startsWith("..")&&we(a,n))return true}}return false}function wu(n,e){return n?JSON.stringify(e).includes(n):true}function _u(n,e){if(!n)return true;try{let t=new RegExp(n),r=JSON.stringify(e);return t.test(r)}catch{return false}}function vu(n,e){if(!n)return true;try{let t=new RegExp(n),r=JSON.stringify(e);return t.test(r)}catch{return false}}function ku(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(li(n.pathSizeMin)){let o=ui(r);if(o===null||o<di(n.pathSizeMin))return false}else {let o=ci(r);if(o===null||o<n.pathSizeMin)return false}if(n.pathSizeMax!==void 0)if(li(n.pathSizeMax)){let o=ui(r);if(o===null||o>di(n.pathSizeMax))return false}else {let o=ci(r);if(o===null||o>n.pathSizeMax)return false}return true}function xu(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 uo=class extends Hr{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(`
318
+ Error: ${r}`}function eu(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(ao>=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(", ")}`;ao++;try{let i=s==="execute"?await n.execute(r,o):await n.query(r,o);return Zc(i)}finally{ao--;}}}}u();var si=typeof process<"u"?process.env:{};function tu(){return si.CREWX_CLI||"npx crewx"}function ru(){return si.CREWX_WORKSPACE||(typeof process<"u"?process.cwd():"/")}u();function nu(){if(process.env.CREWX_HOME)try{return hs__namespace.realpathSync(process.env.CREWX_HOME)}catch{return K__namespace.join(lo__namespace.homedir(),".crewx")}return process.platform!=="win32"&&process.env.XDG_CONFIG_HOME?K__namespace.join(process.env.XDG_CONFIG_HOME,"crewx"):K__namespace.join(lo__namespace.homedir(),".crewx")}u();var ou=/^[a-zA-Z0-9._-]+$/,co=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(!ou.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return it("box")}};u();function su(n,e,t,r,o){let{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}=r,d=s*i,l=s*a,c=d+l,f=e.getThreadMessages(n),g=[],m=0,w=false,_=[];for(let v=0;v<f.length;v+=2){let A=f[v],b=f[v+1],C=A?.content||"",V=b?.content||"",$=o.countTokens(C+V),I=[];A&&I.push(A),b&&I.push(b),_.push({messages:I,tokens:$});}for(let v=_.length-1;v>=0;v--){let A=_[v];if(m+A.tokens>d){w=true;break}m+=A.tokens,g.unshift(...A.messages);}let k=[],y=0;if(w&&l>0)try{let{boxes:v}=t.listBoxes(n);for(let A=v.length-1;A>=0;A--){let b=v[A],C=b.summaryTokens??b.sourceTokens;if(y+C>l)break;y+=C,k.unshift({boxId:b.id,seq:b.seq,taskCount:b.taskCount,sourceTokens:b.sourceTokens,summary:b.summary,previewFirst:b.previewFirst,previewMid:b.previewMid,previewLast:b.previewLast,createdAt:b.createdAt});}}catch(v){if(v instanceof Error&&!/not found/i.test(v.message))throw v}return {hot:g,warm:k,hotTokens:m,warmTokens:y,hotOverflow:w,totalBudget:c,config:{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}}}$e();Qe();u();var qr=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},dr=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=[],c=0,f=0,g=0,m=false,w=0,_=perf_hooks.performance.now(),k=async I=>{a?.onTaskStart&&await a.onTaskStart(I),g+=1;let N=new AbortController,de={signal:N.signal},Y,D;typeof s=="number"&&Number.isFinite(s)&&s>0&&(D=new Promise((B,F)=>{Y=setTimeout(()=>{let Q=new qr(I.id,s);N.abort(Q),F(Q);},s);}));let Z=perf_hooks.performance.now(),U=I.run(de),ne=D?Promise.race([U,D]):U;try{let B=await ne,F=perf_hooks.performance.now(),Q=F-Z,J=d(B,I),q={taskId:I.id,success:J,value:B,durationMs:Q,startedAt:Z,finishedAt:F,metadata:I.metadata,aborted:!1};l.push(q),J?c+=1:f+=1,a?.onTaskComplete&&await a.onTaskComplete(q),i&&!J&&(m=!0);}catch(B){let F=perf_hooks.performance.now(),Q=F-Z,J=B instanceof Error?B:new Error(String(B)),q={taskId:I.id,success:false,error:J,durationMs:Q,startedAt:Z,finishedAt:F,metadata:I.metadata,aborted:N.signal.aborted};l.push(q),f+=1,a?.onError&&await a.onError(I,J,Q),i&&(m=true);}finally{Y&&clearTimeout(Y),D&&U.catch(()=>{});}},y=async()=>{for(;!m;){let I=w;if(I>=e.length)break;w+=1;let N=e[I];if(!N||(await k(N),m))break}},v=Math.min(o,e.length),A=[];for(let I=0;I<v;I++)A.push(y());await Promise.all(A);let C=perf_hooks.performance.now()-_,V=l.length?l.reduce((I,N)=>I+N.durationMs,0)/l.length:0,$=C>0?l.length/(C/1e3):l.length;return this.metrics={totalTasks:e.length,startedTasks:g,completedTasks:l.length,successCount:c,failureCount:f,totalDurationMs:C,averageDurationMs:V,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);}}}};u();u();var lr=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 ai=3,di=3e4,li=500,iu=n=>{if(typeof n!="number"||Number.isNaN(n)||!Number.isFinite(n))return ai;let e=Math.floor(n);return e>0?e:ai},au=n=>n===void 0||typeof n!="number"||Number.isNaN(n)||n<=0?di:n,du=n=>{if(!n)return {maxRetries:0,retryDelay:li};let e=Number.isInteger(n.maxRetries)&&n.maxRetries>=0?n.maxRetries:0,t=typeof n.retryDelay=="number"&&n.retryDelay>=0?n.retryDelay:li;return {maxRetries:e,retryDelay:t}},uo=n=>{let e=n.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},lu=(n,e)=>n<=0?Promise.resolve():new Promise((t,r)=>{let o=setTimeout(()=>{e.removeEventListener("abort",s),t();},n),s=()=>{clearTimeout(o),r(uo(e));};if(e.aborted){s();return}e.addEventListener("abort",s,{once:true});}),cu=async(n,e,t)=>{let r,o;for(let s=0;s<=e.maxRetries;s++){if(t.aborted)throw uo(t);try{let i=await n();if(r=i,i.success||s===e.maxRetries)return i}catch(i){if(o=i,t.aborted)throw uo(t);if(s===e.maxRetries)throw i instanceof Error?i:new Error(String(i))}s<e.maxRetries&&await lu(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")},ci=(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);}},uu=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}}}),pu=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")}}),gu=(n,e)=>({onTaskComplete:async t=>{ci(e,n,t.success);},onError:async()=>{ci(e,n,false);}}),ui=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=iu(t.concurrency),o=au(t.timeout),s=du(t.retryPolicy),i=new dr,a=new lr,d=n.map((_,k)=>({id:`${e}:${_.agentId??"anonymous"}:${k}`,metadata:{index:k,mode:e,request:_},run:y=>cu(()=>e==="query"?a.query(_):a.execute(_),s,y.signal)})),l={completed:0,success:0,failure:0,total:n.length},c=await i.run(d,{maxConcurrency:r,timeoutMs:o,evaluateTaskSuccess:_=>_.success,callbacks:gu(l,t)}),f=uu(c),g=pu(c),m=i.getMetrics(),w={total:n.length,completed:n.length,successCount:f.filter(_=>_.success).length,failureCount:f.filter(_=>!_.success).length,results:f,errors:g,metrics:m};return t.onComplete?.(w),f},fu=(n,e)=>ui(n,"query",e),mu=(n,e)=>ui(n,"execute",e);Jn();u();var po=class extends At{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=K.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=K.dirname(t);hs.existsSync(o)||hs.mkdirSync(o,{recursive:true});}else if(!hs.existsSync(t))throw new T("NOT_FOUND","Database not found");let r=Ae(t);if(e)try{br(r.db,t);}catch(o){throw r.close(),o}return r}insertSpan(e){let t=this.openHandle(true);try{t.db.insert(lt).values(e).run();}catch(r){throw r instanceof T?r:new T("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(lt).where(drizzleOrm.eq(lt.task_id,e)).all()}catch(r){throw new T("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(lt).where(drizzleOrm.eq(lt.id,e)).limit(1).get()??void 0}catch(r){throw new T("DB_ERROR","Failed to find span by id",r)}finally{t.close();}}};Vn();Gn();Kn();u();u();var zr=class{capabilities={required:[]}};u();u();u();var fi=2e3;function mi(n){let e=n.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=fi?e:e.slice(0,fi-11)+" [redacted]"}var Pu=10*1024*1024,Cu={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function go(n,e){return n===void 0?true:Array.isArray(n)?n.includes(e):n===e}function bu(n,e){return n===void 0?true:Array.isArray(n)?n.some(t=>e.includes(t)):e.includes(n)}function yi(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*(Cu[r]??1))}function wi(n){return typeof n=="string"}function _i(n){try{let e=hs.statSync(n);return e.size>Pu?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${n} (${e.size} bytes)
319
+ `),null):hs.readFileSync(n,"utf8").split(`
320
+ `).length}catch{return null}}function vi(n){try{return hs.statSync(n).size}catch{return null}}function Tu(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(we(o,n))return true;if(t&&o.startsWith("/")){let{relative:s,isAbsolute:i}=oe("path");if(i(o)){let a=s(t,o);if(a&&!a.startsWith("..")&&we(a,n))return true}}return false}function Su(n,e){return n?JSON.stringify(e).includes(n):true}function Iu(n,e){if(!n)return true;try{let t=new RegExp(n),r=JSON.stringify(e);return t.test(r)}catch{return false}}function Ou(n,e){if(!n)return true;try{let t=new RegExp(n),r=JSON.stringify(e);return t.test(r)}catch{return false}}function Mu(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(wi(n.pathSizeMin)){let o=vi(r);if(o===null||o<yi(n.pathSizeMin))return false}else {let o=_i(r);if(o===null||o<n.pathSizeMin)return false}if(n.pathSizeMax!==void 0)if(wi(n.pathSizeMax)){let o=vi(r);if(o===null||o>yi(n.pathSizeMax))return false}else {let o=_i(r);if(o===null||o>n.pathSizeMax)return false}return true}function Nu(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 mo=class extends zr{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(`
321
321
 
322
- `)):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=ii(t.message).slice(0,500)));let o=`[${new Date().toISOString()}] HOOK: ${JSON.stringify(r)}
323
- `;ls.appendFileSync(e,o,{encoding:"utf8",mode:384});}catch{}}matchEntryLevel(e,t){if(e.provider!==void 0){let r=t.provider.replace(/^cli\//,"");if(!lo(e.provider,r))return false}if(e.team!==void 0){let o=this.agentMap.get(t.agent.id)?.team??t.agent.team;if(!lo(e.team,o))return false}if(e.role!==void 0){let o=this.agentMap.get(t.agent.id)?.role??t.agent.role;if(!lo(e.role,o))return false}if(e.tag!==void 0){let o=this.agentMap.get(t.agent.id)?.tags??[];if(!hu(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)||!wu(e.pattern,t.tool.input)||!_u(e.regex,t.tool.input)||!yu(e.pathPattern,t.tool.input,t.cwd)||!ku(e,t.tool.input)||!vu(e.whenInputRegex,t.tool.input))}hasFired(e,t){try{let r=this.firedFilePath(e);if(!ls.existsSync(r))return !1;let o=JSON.parse(ls.readFileSync(r,"utf8"));return Array.isArray(o.fired)&&o.fired.includes(t)}catch{return false}}markFired(e,t){try{let r=this.firedFilePath(e);ls.mkdirSync(K.dirname(r),{recursive:!0,mode:448});let o=ls.existsSync(r)?JSON.parse(ls.readFileSync(r,"utf8")):{fired:[]};Array.isArray(o.fired)||(o.fired=[]),o.fired.includes(t)||(o.fired.push(t),ls.writeFileSync(r,JSON.stringify(o),{mode:384}));}catch(r){process.stderr.write(`[YamlHookPlugin] once state write failed: ${r}
324
- `);}}firedFilePath(e){let t=crypto$1.createHash("sha1").update(e).digest("hex");return K.join(rd.homedir(),".crewx","sessions",t,"fired-rules.json")}};u();u();u();function Au(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}}}u();var po=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;}};u();function Eu(n){return n}function Ru(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();exports.ARCHIVE_WI_BOARD_ID=Tt;exports.AdapterError=po;exports.AgentNotFoundError=be;exports.AgentRuntime=dr;exports.AgentSkillsSchema=fo;exports.BrowserFsAdapter=Qn;exports.ConfigLoadError=Ge;exports.Crewx=Jn;exports.CrewxPlugin=Yn;exports.DEFAULT_WI_BOARD_ID=bt;exports.DEFAULT_WI_WORKFLOW_ID=Ns;exports.DocumentLoader=ot;exports.LayoutLoadError=ie;exports.LayoutLoader=Bt;exports.LayoutRenderer=Kt;exports.NodeFsAdapter=Rr;exports.PROVIDER_ORDER=to;exports.ParallelRunner=ar;exports.ParallelRunnerTimeoutError=Fr;exports.PropsValidationError=Ie;exports.PropsValidator=zt;exports.SdkBoxService=so;exports.SpanRepository=ao;exports.TaskRepository=Xt;exports.TemplateEngine=Ht;exports.TypedEventEmitter=Gt;exports.WI_BOARD_ID_PATTERN=Wr;exports.WI_DEFAULT_FLOW_FILENAME=Dl;exports.WI_PLAN_FLOW_FILENAME=Ll;exports.WI_PLAN_WORKFLOW_ID=Nl;exports.WiBoardSchema=vi;exports.WiCreateError=ee;exports.YamlHookPlugin=uo;exports.buildContext=Gc;exports.canonicalizeAgentOptions=kc;exports.clearModelsOverride=Bi;exports.compareProviders=sr;exports.createAdapterContext=xn;exports.createDelegateTool=Bc;exports.createGlobalSettingsStore=_c;exports.createHandler=On;exports.createPluginProviderFactory=Ps;exports.createProvider=Se;exports.createRemoteProviderFactory=Rs;exports.createScopedAdapterStore=vn;exports.createWorkInstruction=sc;exports.createWorkInstructionBatch=ic;exports.defaultExtractText=bn;exports.defaultFsAdapter=nt;exports.defaultParseEvent=he;exports.defineChannelAdapter=Eu;exports.defineChannelAdapterPlugin=Ru;exports.escapeHandlebarsHelper=mn;exports.formatFileSizeHelper=hn;exports.formatTimestamp=_n;exports.formatTimestampHelper=yn;exports.generateFingerprint=Wa;exports.generateId=it;exports.getAntigravityModels=en;exports.getClaudeModels=Dt;exports.getCodexModels=Qr;exports.getCopilotModels=Zr;exports.getProviderModels=rt;exports.getSyncWindowStore=Ba;exports.hashWorkspaceId=Mn;exports.initModelsRemote=bc;exports.initPricingRemote=Ec;exports.isReservedWiBoardId=Ds;exports.lengthHelper=fn;exports.loadYamlFile=ur;exports.materializeWindowsSpawnProgram=Ye;exports.mergeAdditionalArgs=No;exports.mergeModels=Lt;exports.normalizeProviderId=Ic;exports.normalizeWorkspacePath=ms;exports.parseOverdriveProfile=kr;exports.parseOverdriveSignal=xr;exports.parseStdoutEvent=$t;exports.parseUsage=Te;exports.parseYamlContent=cr;exports.providerRank=ro;exports.queryAcpProviderMeta=Js;exports.queryAllAcpProviderMetas=$c;exports.queryAllCliProviderMetas=Fc;exports.queryOpencodeModels=Xs;exports.registerAcpProviders=As;exports.registerApiProviders=ws;exports.registerProviderFactory=Pe;exports.resolveAgent=pr;exports.resolveAgentSkills=Tc;exports.resolveCrewxCli=qc;exports.resolveCrewxWorkspace=zc;exports.resolveDefaultAgentsYaml=Kr;exports.resolveOverdrive=Ar;exports.resolveTemplatesPath=mt;exports.resolveWiBoards=$l;exports.resolveWindowsExecutablePath=Oi;exports.resolveWindowsSpawnProgram=Xe;exports.resolveWorkflowTemplatesPath=bi;exports.runExecutesParallel=nu;exports.runInSyncWindow=qa;exports.runQueriesParallel=ru;exports.selectNextWi=dc;exports.setAuditVerbose=Ra;exports.setModelsOverride=Yr;exports.toTaskReader=Au;exports.toTemplateMessages=Cn;exports.truncateHelper=gn;exports.validateHooksSchema=xu;
322
+ `)):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=mi(t.message).slice(0,500)));let o=`[${new Date().toISOString()}] HOOK: ${JSON.stringify(r)}
323
+ `;hs.appendFileSync(e,o,{encoding:"utf8",mode:384});}catch{}}matchEntryLevel(e,t){if(e.provider!==void 0){let r=t.provider.replace(/^cli\//,"");if(!go(e.provider,r))return false}if(e.team!==void 0){let o=this.agentMap.get(t.agent.id)?.team??t.agent.team;if(!go(e.team,o))return false}if(e.role!==void 0){let o=this.agentMap.get(t.agent.id)?.role??t.agent.role;if(!go(e.role,o))return false}if(e.tag!==void 0){let o=this.agentMap.get(t.agent.id)?.tags??[];if(!bu(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)||!Su(e.pattern,t.tool.input)||!Iu(e.regex,t.tool.input)||!Tu(e.pathPattern,t.tool.input,t.cwd)||!Mu(e,t.tool.input)||!Ou(e.whenInputRegex,t.tool.input))}hasFired(e,t){try{let r=this.firedFilePath(e);if(!hs.existsSync(r))return !1;let o=JSON.parse(hs.readFileSync(r,"utf8"));return Array.isArray(o.fired)&&o.fired.includes(t)}catch{return false}}markFired(e,t){try{let r=this.firedFilePath(e);hs.mkdirSync(K.dirname(r),{recursive:!0,mode:448});let o=hs.existsSync(r)?JSON.parse(hs.readFileSync(r,"utf8")):{fired:[]};Array.isArray(o.fired)||(o.fired=[]),o.fired.includes(t)||(o.fired.push(t),hs.writeFileSync(r,JSON.stringify(o),{mode:384}));}catch(r){process.stderr.write(`[YamlHookPlugin] once state write failed: ${r}
324
+ `);}}firedFilePath(e){let t=crypto$1.createHash("sha1").update(e).digest("hex");return K.join(lo.homedir(),".crewx","sessions",t,"fired-rules.json")}};u();u();u();function Du(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}}}u();var ho=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;}};u();function Lu(n){return n}function $u(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();exports.ARCHIVE_WI_BOARD_ID=bt;exports.AdapterError=ho;exports.AgentNotFoundError=Ce;exports.AgentRuntime=lr;exports.AgentSkillsSchema=wo;exports.BrowserFsAdapter=to;exports.ConfigLoadError=Ge;exports.Crewx=Qn;exports.CrewxPlugin=eo;exports.DEFAULT_WI_BOARD_ID=Ct;exports.DEFAULT_WI_WORKFLOW_ID=Fs;exports.DocumentLoader=ot;exports.LayoutLoadError=ie;exports.LayoutLoader=qt;exports.LayoutRenderer=Gt;exports.NodeFsAdapter=Pr;exports.PROVIDER_ORDER=oo;exports.ParallelRunner=dr;exports.ParallelRunnerTimeoutError=qr;exports.PropsValidationError=Ie;exports.PropsValidator=Kt;exports.SdkBoxService=co;exports.SpanRepository=po;exports.TaskRepository=Yt;exports.TemplateEngine=Bt;exports.TypedEventEmitter=Vt;exports.WI_BOARD_ID_PATTERN=Fr;exports.WI_DEFAULT_FLOW_FILENAME=ql;exports.WI_PLAN_FLOW_FILENAME=zl;exports.WI_PLAN_WORKFLOW_ID=Bl;exports.WiBoardSchema=Ti;exports.WiCreateError=ee;exports.YamlHookPlugin=mo;exports.buildContext=su;exports.canonicalizeAgentOptions=Sc;exports.clearModelsOverride=Qi;exports.compareProviders=ir;exports.createAdapterContext=Rn;exports.createDelegateTool=eu;exports.createGlobalSettingsStore=bc;exports.createHandler=Dn;exports.createPluginProviderFactory=Ls;exports.createProvider=Se;exports.createRemoteProviderFactory=Os;exports.createScopedAdapterStore=An;exports.createWorkInstruction=fc;exports.createWorkInstructionBatch=mc;exports.defaultExtractText=Sn;exports.defaultFsAdapter=nt;exports.defaultParseEvent=he;exports.defineChannelAdapter=Lu;exports.defineChannelAdapterPlugin=$u;exports.escapeHandlebarsHelper=wn;exports.formatFileSizeHelper=_n;exports.formatTimestamp=xn;exports.formatTimestampHelper=vn;exports.generateFingerprint=Ja;exports.generateId=it;exports.getAntigravityModels=nn;exports.getClaudeModels=Lt;exports.getCodexModels=tn;exports.getCopilotModels=rn;exports.getCrewxHome=nu;exports.getProviderModels=rt;exports.getSyncWindowStore=Qa;exports.hashWorkspaceId=Ln;exports.initModelsRemote=Uc;exports.initPricingRemote=Mc;exports.isReservedWiBoardId=Hs;exports.lengthHelper=yn;exports.loadYamlFile=pr;exports.materializeWindowsSpawnProgram=Ye;exports.mergeAdditionalArgs=Fo;exports.mergeModels=$t;exports.normalizeProviderId=Hc;exports.normalizeWorkspacePath=xs;exports.parseOverdriveProfile=xr;exports.parseOverdriveSignal=Ar;exports.parseStdoutEvent=Ut;exports.parseUsage=be;exports.parseYamlContent=ur;exports.providerRank=so;exports.queryAcpProviderMeta=ni;exports.queryAllAcpProviderMetas=Vc;exports.queryAllCliProviderMetas=Qc;exports.queryOpencodeModels=oi;exports.registerAcpProviders=Ss;exports.registerApiProviders=Rs;exports.registerProviderFactory=Te;exports.resolveAgent=gr;exports.resolveAgentSkills=jc;exports.resolveCrewxCli=tu;exports.resolveCrewxWorkspace=ru;exports.resolveDefaultAgentsYaml=Jr;exports.resolveOverdrive=Er;exports.resolveTemplatesPath=mt;exports.resolveWiBoards=Kl;exports.resolveWindowsExecutablePath=Fi;exports.resolveWindowsSpawnProgram=Xe;exports.resolveWorkflowTemplatesPath=Li;exports.runExecutesParallel=mu;exports.runInSyncWindow=Za;exports.runQueriesParallel=fu;exports.selectNextWi=yc;exports.setAuditVerbose=Na;exports.setModelsOverride=en;exports.toTaskReader=Du;exports.toTemplateMessages=Tn;exports.truncateHelper=hn;exports.validateHooksSchema=Nu;