@crewx/sdk 0.9.0-rc.56 → 0.9.0-rc.58

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,72 +1,72 @@
1
- 'use strict';var Oi=require('fs'),z=require('path'),crypto$1=require('crypto'),child_process=require('child_process'),string_decoder=require('string_decoder'),sdk=require('@agentclientprotocol/sdk'),jsYaml=require('js-yaml'),jsTiktoken=require('js-tiktoken'),lite=require('js-tiktoken/lite'),Wr=require('js-tiktoken/ranks/o200k_base'),zod=require('zod'),module$1=require('module'),Se=require('handlebars'),promises=require('fs/promises'),events=require('events'),async_hooks=require('async_hooks'),drizzleOrm=require('drizzle-orm'),ss=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 Oi__namespace=/*#__PURE__*/_interopNamespace(Oi);var z__namespace=/*#__PURE__*/_interopNamespace(z);var Wr__default=/*#__PURE__*/_interopDefault(Wr);var Se__namespace=/*#__PURE__*/_interopNamespace(Se);var ss__namespace=/*#__PURE__*/_interopNamespace(ss);var Ir=Object.defineProperty;var qa=Object.getOwnPropertyDescriptor;var za=Object.getOwnPropertyNames;var Ga=Object.prototype.hasOwnProperty;var ae=(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 O=(n,e)=>()=>(n&&(e=n(n=0)),e);var Un=(n,e)=>{for(var t in e)Ir(n,t,{get:e[t],enumerable:true});},Ka=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of za(e))!Ga.call(n,o)&&o!==t&&Ir(n,o,{get:()=>e[o],enumerable:!(r=qa(e,o))||r.enumerable});return n};var ws=n=>Ka(Ir({},"__esModule",{value:true}),n);var p=O(()=>{});var ks,Sr,_s,Or=O(()=>{p();ks=["flagship","balanced","speed"],Sr={claude:{models:[{id:"claude-fable-5",name:"Claude Fable 5",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-opus-5",name:"Claude Opus 5",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced",recommended:true},{id:"claude-opus-4-8[1m]",name:"Claude Opus 4.8",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-7[1m]",name:"Claude Opus 4.7",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-6[1m]",name:"Claude Opus 4.6",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-sonnet-4-6[1m]",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5",contextWindowTokens:2e5,tier:"speed"}],modes:[{id:"default",name:"Default",description:"Uses Claude's default permission handling with normal approval prompts."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without approval; other permission checks remain in place."},{id:"plan",name:"Plan",description:"Keeps Claude in plan mode so it can inspect and propose changes without applying them."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permissions; only pre-approved tool actions can proceed."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Claude permission checks so tools can run without approval prompts."}],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-7[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-haiku-4-5":{effort:[]}}},codex:{models:[{id:"gpt-5.6-sol",name:"GPT-5.6 Sol",contextWindowTokens:105e4,tier:"flagship",recommended:true},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra",contextWindowTokens:105e4,tier:"balanced",recommended:true},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna",contextWindowTokens:105e4,tier:"speed",recommended:true},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini",contextWindowTokens:4e5,tier:"speed"},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex",contextWindowTokens:4e5,tier:"flagship"},{id:"gpt-5.3-codex-spark",name:"GPT-5.3 Codex Spark",contextWindowTokens:128e3,tier:"speed"}],modes:[{id:"agent",name:"Agent",description:"Uses the workspace-write sandbox; can read and modify workspace files without full machine access."},{id:"read-only",name:"Read Only",description:"Uses the read-only sandbox; can inspect files but cannot write to the workspace."},{id:"plan",name:"Plan",description:"Uses the read-only sandbox for planning and inspection; cannot write to the workspace."},{id:"agent-full-access",name:"Agent Full Access",description:"Bypasses approvals and the sandbox; can access and modify files beyond the workspace."},{id:"yolo",name:"YOLO",description:"Bypasses approvals and the sandbox for unrestricted execution and full filesystem access."}],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"}}},opencode:{models:[],modes:[{id:"plan",name:"Plan",description:"Uses the plan agent without --auto; planning follows standard approval behavior."},{id:"plan-auto",name:"Plan \xB7 Auto",description:"Uses the plan agent with --auto; planning uses automatic approvals."},{id:"build",name:"Build",description:"Uses the build agent without --auto; work follows standard approval behavior."},{id:"build-auto",name:"Build \xB7 Auto",description:"Uses the build agent with --auto; work uses automatic approvals."}],effort:[],modelOverrides:{}},copilot:{models:[{id:"auto",name:"Auto"},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro",contextWindowTokens:1048576,tier:"flagship"}],modes:[{id:"interactive",name:"Interactive",description:"Passes --mode interactive; tool access follows Copilot's interactive mode behavior."},{id:"plan",name:"Plan",description:"Passes --mode plan; planning and permission behavior follow Copilot's plan mode."},{id:"autopilot",name:"Autopilot",description:"Passes --mode autopilot; execution behavior follows Copilot's autonomous mode."}],effort:["none","low","medium","high","xhigh","max"],modelOverrides:{}},antigravity:{models:[{id:"gemini-3.6-flash-high",name:"Gemini 3.6 Flash (High)",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.6-flash-medium",name:"Gemini 3.6 Flash (Medium)",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.6-flash-low",name:"Gemini 3.6 Flash (Low)",contextWindowTokens:1048576,tier:"balanced"},{id:"Gemini 3.5 Flash (Medium)",name:"Gemini 3.5 Flash (Medium)",contextWindowTokens:1048576,tier:"balanced"},{id:"Gemini 3.5 Flash (High)",name:"Gemini 3.5 Flash (High)",contextWindowTokens:1048576,tier:"balanced"},{id:"Gemini 3.5 Flash (Low)",name:"Gemini 3.5 Flash (Low)",contextWindowTokens:1048576,tier:"balanced"},{id:"Gemini 3.1 Pro (Low)",name:"Gemini 3.1 Pro (Low)",contextWindowTokens:1048576,tier:"flagship"},{id:"Gemini 3.1 Pro (High)",name:"Gemini 3.1 Pro (High)",contextWindowTokens:1048576,tier:"flagship"},{id:"Claude Sonnet 4.6 (Thinking)",name:"Claude Sonnet 4.6 (Thinking)",contextWindowTokens:1e6,tier:"balanced"},{id:"Claude Opus 4.6 (Thinking)",name:"Claude Opus 4.6 (Thinking)",contextWindowTokens:1e6,tier:"flagship"},{id:"GPT-OSS 120B (Medium)",name:"GPT-OSS 120B (Medium)",contextWindowTokens:128e3,tier:"balanced"}],modes:[],effort:[],modelOverrides:{}},grok:{models:[{id:"grok-4.6",name:"Grok 4.6",contextWindowTokens:5e5,tier:"flagship",recommended:true},{id:"grok-4.5",name:"Grok 4.5",contextWindowTokens:5e5,tier:"flagship"}],modes:[{id:"agent",name:"Agent",description:"Automatically approves tool calls inside the workspace sandbox; it cannot access the rest of the machine."},{id:"read-only",name:"Read Only",description:"Uses a read-only sandbox and plan permission mode; it can inspect files but cannot modify the workspace."},{id:"plan",name:"Plan",description:"Uses plan permission mode with a read-only sandbox; it can inspect and propose work but cannot modify files."},{id:"agent-full-access",name:"Agent Full Access",description:"Automatically approves tool calls with the sandbox disabled; it can access and modify files across the machine."},{id:"yolo",name:"YOLO",description:"Automatically approves tool calls with the sandbox disabled; it can access and modify files across the machine."}],effort:["low","medium","high"],modelOverrides:{"grok-4.6":{effort:["low","medium","high","xhigh"],defaultEffort:"high"},"grok-4.5":{effort:["low","medium","high"],defaultEffort:"high"}}}},_s={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:"default",effort:"high"},execute:{mode:"bypassPermissions",effort:"xhigh"}},"cli/grok":{model:"grok-4.6",query:{mode:"agent",effort:"high"},execute:{mode:"agent-full-access",effort:"xhigh"}}}},Object.fromEntries(Object.entries(Sr).map(([n,e])=>[n,e.models]));});var at,Mr,vs,Nr=O(()=>{p();at={"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,cachedInput:.2,output:12},"gpt-5.6-luna":{input:.2,cachedInput:.02,output:1.2},"gpt-5.5":{input:5,cachedInput:.5,output:30},"gpt-5.4":{input:2.5,cachedInput:.25,output:15},"gpt-5.4-mini":{input:.75,cachedInput:.075,output:4.5},"gpt-5.3-codex":{input:1.75,cachedInput:.175,output:14},"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},"gemini-3.6-flash":{input:1.5,cachedInput:.15,output:7.5},"grok-4.6":{input:2,cachedInput:.5,output:6},"grok-4.5":{input:2,cachedInput:.3,output:6}},Mr=new Set(["gpt-5.3-codex-spark"]),vs=new Set(["Claude Opus 4.6 (Thinking)","Claude Sonnet 4.6 (Thinking)","GPT-OSS 120B (Medium)","Gemini 3.1 Pro (High)","Gemini 3.1 Pro (Low)","Gemini 3.5 Flash (High)","Gemini 3.5 Flash (Low)","Gemini 3.5 Flash (Medium)","auto","claude-fable-5","claude-haiku-4-5","claude-opus-4-6[1m]","claude-opus-4-7[1m]","claude-opus-4-8[1m]","claude-opus-5","claude-sonnet-4-6","claude-sonnet-4-6[1m]","claude-sonnet-5","gemini-3.1-pro","gemini-3.6-flash-high","gemini-3.6-flash-low","gemini-3.6-flash-medium","gpt-5.3-codex","gpt-5.3-codex-spark","gpt-5.4","gpt-5.4-mini","gpt-5.5","gpt-5.6-luna","gpt-5.6-sol","gpt-5.6-terra","grok-4.5","grok-4.6"]);});function Es(n){Qt=n;}function Ts(n){xs=Object.fromEntries(Object.entries(n).map(([e,t])=>[e,{...t}]));}function Dr(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;let e="inputPerMillionTokensUsd"in n?n.inputPerMillionTokensUsd:n.input,t="outputPerMillionTokensUsd"in n?n.outputPerMillionTokensUsd:n.output;if(!(!Number.isFinite(e)||e<=0||!Number.isFinite(t)||t<=0))return {inputPerMillionTokensUsd:e,outputPerMillionTokensUsd:t}}function As(n){if(!n)return;let e=n.replace(/\[[^\]]*\]$/g,"");return Xa(xs[e]??at[e])}function Ya(n){if(!n)return Yt;let e=Dr(n),t=Ja[e];if(t)return Qt[t]??at[t]??Yt;if(Qt[e])return Qt[e];if(at[e])return at[e];if(Mr.has(e))return console.warn(`[pricing] unpublished model pricing: ${n}, cost_usd=0`),Yt;if(vs.has(e))return console.warn(`[pricing] missing catalog pricing: ${n}, cost_usd=0`),Yt;let r={...at,...Qt};for(let o of Object.keys(r))if(e.includes(o))return r[o];return console.warn(`[pricing] Unknown model: ${n}, cost_usd=0`),Yt}function Qa(n,e,t,r=0,o){let s=Ya(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 Rs(n,e,t,r,o,s){return n&&n>0?n:!e&&!t?0:Qa(e??0,t??0,o,r??0)}var Ja,Yt,Qt,xs,Ot=O(()=>{p();Nr();Nr();Ja={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"},Yt={input:0,cachedInput:0,output:0},Qt={},xs={};});function Zt(n){return td.get(n)??n}exports.CLAUDE_OPUS_4_8_BASE_MODEL_ID=void 0;exports.CLAUDE_OPUS_4_8_LEGACY_MODEL_ID=void 0;exports.CLAUDE_MODEL_COMPATIBILITY_PAIRS=void 0;var td,Bn=O(()=>{p();exports.CLAUDE_OPUS_4_8_BASE_MODEL_ID="claude-opus-4-8",exports.CLAUDE_OPUS_4_8_LEGACY_MODEL_ID="claude-opus-4-8[1m]",exports.CLAUDE_MODEL_COMPATIBILITY_PAIRS=[{baseModelId:"claude-opus-4-8",catalogModelId:"claude-opus-4-8[1m]"},{baseModelId:"claude-opus-4-7",catalogModelId:"claude-opus-4-7[1m]"},{baseModelId:"claude-opus-4-6",catalogModelId:"claude-opus-4-6[1m]"},{baseModelId:"claude-sonnet-4-6",catalogModelId:"claude-sonnet-4-6[1m]"}],td=new Map(exports.CLAUDE_MODEL_COMPATIBILITY_PAIRS.map(({baseModelId:n,catalogModelId:e})=>[n,e]));});function Cs(){return {models:[],modes:[],effort:[],modelOverrides:{}}}function nd(n){return Array.isArray(n)?{models:n,modes:[],effort:[],modelOverrides:{}}:n?{models:n.models??[],modes:n.modes??[],effort:n.effort??[],modelOverrides:n.modelOverrides??{}}:Cs()}function $r(n){Lr=Object.fromEntries(Object.entries(n).map(([e,t])=>[e,nd(t)]));}function rd(){Lr={};}function en(n){Ps={...n};}function Ne(n){return De(n).models}function De(n){return Lr[n]??Sr[n]??Cs()}function Fn(n){return Ps[n]??_s.providers[n]}function tn(n){return De(n).modes}function dt(n,e){let t=De(n);return e?t.modelOverrides[Zt(e)]?.effort??t.effort:t.effort}function Is(n){return De(n).modelOverrides}function nn(){return Ne("claude")}function Ur(){return Ne("codex")}function Br(){return Ne("copilot")}function Fr(){return Ne("antigravity")}function rn(n,e){let t=new Map;for(let r of [...n,...e]){let o=t.get(r.id);if(!o){let{apiPricing:s,recommended:i,...a}=r;t.set(r.id,{...a,...i===true?{recommended:true}:{},...s!=null?{apiPricing:{...s}}:{}});continue}!o.name&&r.name&&(o.name=r.name),o.description==null&&r.description!=null&&(o.description=r.description),o.contextWindowTokens==null&&r.contextWindowTokens!=null&&(o.contextWindowTokens=r.contextWindowTokens),o.tier==null&&r.tier!=null&&(o.tier=r.tier),o.recommended!==true&&r.recommended===true&&(o.recommended=true),o.apiPricing==null&&r.apiPricing!=null&&(o.apiPricing={...r.apiPricing});}return Array.from(t.values())}function on(n){return n.map(e=>{let{apiPricing:t,...r}=e,o=As(e.id);return o?{...r,apiPricing:o}:r})}var Lr,Ps,pe=O(()=>{p();Or();Ot();Bn();Lr={},Ps={};});function Xn(n){return typeof n!="string"?void 0:n.trim()||void 0}function Yn(n){return Xn(n)?.toLowerCase()??""}function Nt(n){try{return Oi.statSync(n).isFile()}catch{return false}}function Nd(n,e){if(n===e)return true;let t=z__namespace.default.relative(n,e);return t!==""&&!t.startsWith("..")&&!z__namespace.default.isAbsolute(t)}function Dd(n,e){if(z__namespace.default.basename(n)!==".bin")return false;let t=z__namespace.default.dirname(n);if(z__namespace.default.basename(t)!=="node_modules")return false;let r=z__namespace.default.dirname(t);return Nd(r,e)}function sn(n,e={}){if(n.includes("/")||n.includes("\\")||z__namespace.default.isAbsolute(n))return n;let t=e.platform??process.platform,r=e.env??process.env,o=z__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=z__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=z__namespace.default.resolve(o,g);if(!(s&&Dd(m,o)))for(let _ of f){let y=Yn(_),v=_.toUpperCase();for(let w of [_,y,v]){let k=z__namespace.default.join(m,`${n}${w}`);if(Nt(k))return k}}}return n}function Ld(n,e){return sn(n,{env:e,platform:"win32",resolution:"local_first"})}function $d(n){if(!Nt(n))return null;try{let e=Oi.readFileSync(n,"utf8"),t=z__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,z__namespace.default.sep).replace(/^[\\/]+/,""),g=z__namespace.default.resolve(t,f);Nt(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,z__namespace.default.sep).replace(/^[\\/]+/,"");s.set(d,z__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&&Nt(l)&&o.push(l);}let i=a=>a.find(d=>{let l=Yn(z__namespace.default.basename(d));return l!=="node.exe"&&l!=="node"})??null;return i(o)??i(r)}catch{return null}}function Ud(n,e){if(typeof e=="string")return Xn(e)||null;if(!e||typeof e!="object")return null;if(n){let t=e[n],r=typeof t=="string"?Xn(t):void 0;if(r)return r}for(let t of Object.values(e)){let r=typeof t=="string"?Xn(t):void 0;if(r)return r}return null}function Bd(n,e){if(!e)return null;let t=z__namespace.default.dirname(n),r=[z__namespace.default.resolve(t,"..",e),z__namespace.default.resolve(t,"node_modules",e)];for(let o of r){let s=z__namespace.default.join(o,"package.json");if(Nt(s))try{let i=JSON.parse(Oi.readFileSync(s,"utf8")),a=Ud(e,i.bin);if(!a)continue;let d=z__namespace.default.resolve(o,a);if(Nt(d))return d}catch{}}return null}function Fd(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:sn(n.command,{cwd:o,env:t,platform:e,resolution:s}),leadingArgv:[],resolution:"direct"};let i=sn(n.command,{cwd:o,env:t,platform:e,resolution:s}),a=Yn(z__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=$d(i)??Bd(i,n.packageName);return d?Yn(z__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 Wd(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(`${z__namespace.default.basename(n.candidate.command)} wrapper resolved, but no executable/Node entrypoint could be resolved without shell execution.`)}function pt(n){let e=Fd(n);return Wd({candidate:e,allowShellFallback:n.allowShellFallback})}function gt(n,e){return {command:n.command,argv:[...n.leadingArgv,...e],resolution:n.resolution,shell:n.shell,windowsHide:n.windowsHide}}var Dt=O(()=>{p();});function jd(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 Hd(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 qd(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 Bs(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 $e(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=qd(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=jd(o)??Hd(o);i&&(e=i);}catch{}return t||(e??void 0)}var ft=O(()=>{p();});exports.ProviderError=void 0;var mt,yt,Lt=O(()=>{p();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},mt=class extends exports.ProviderError{constructor(e,t){super(e,t,{code:"TIMEOUT_IDLE",kind:"permanent"}),this.name="IdleTimeoutError";}},yt=class extends exports.ProviderError{constructor(e,t){super(e,t,{code:"TIMEOUT_TOTAL",kind:"permanent"}),this.name="TotalTimeoutError";}};});exports.RateLimitError=void 0;var Qn=O(()=>{p();Lt();exports.RateLimitError=class extends exports.ProviderError{name="RateLimitError";constructor(e,t="cli/claude"){super(e,t,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function he(n){return /crewx\s+(x|execute)\s/.test(n)}function we(n,e){let t=e.match(/@(\S+)/);return {timestamp:n,type:"agent_call",targetAgent:t?.[1]?.replace(/["']/g,""),toolInput:e}}var $t=O(()=>{p();});function ke(n){if(typeof n=="string")return n;if(!n||typeof n!="object")return JSON.stringify(n??{});let e=n;return typeof e.command=="string"?e.command:typeof e.file_path=="string"?e.file_path:typeof e.filePath=="string"?e.filePath:typeof e.path=="string"?e.path:typeof e.query=="string"?e.query:typeof e.pattern=="string"?e.pattern:typeof e.url=="string"?e.url:typeof e.prompt=="string"?e.prompt.length>200?e.prompt.slice(0,200)+"\u2026":e.prompt:typeof e.description=="string"?e.description:JSON.stringify(e)}var Ut=O(()=>{p();});function ht(n){return zd[n]??n}function Vr(n){if(!n)return "";let e=n.lastIndexOf("/");return e===-1?n.trim():n.slice(e+1).trim()}function Fs(n){if(!n)return false;let e=De(n);return e.models.length>0||e.modes.length>0||e.effort.length>0||Object.keys(e.modelOverrides).length>0}function Ws(n,e){if(!n)return false;let t=De(n),r=typeof e=="string"?Zt(e):void 0;return t.models.length>0||t.effort.length>0||r!=null&&Array.isArray(t.modelOverrides[r]?.effort)}function Jr(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Gd(n,e,t){let r=n,o=false,s=false,i=[],a=()=>(o||(r={...n},o=true),r),d=typeof r.provider=="string"&&r.provider.trim()?Vr(r.provider):e,l=typeof r.model=="string"&&r.model.trim()?r.model.trim():t;if(Fs(d)){if(typeof r.mode=="string"){let f=d==="claude"?ht(r.mode):r.mode,g=tn(d).map(m=>d==="claude"?ht(m.id):m.id);f!==r.mode&&(a().mode=f,s=true),g.includes(f)||(delete a().mode,i.push("mode"));}typeof r.effort=="string"&&Ws(d,l)&&(dt(d,l).includes(r.effort)||(delete a().effort,i.push("effort")));}let c=r.overdrive;if(Jr(c)){let f=Vr(typeof c.provider=="string"?c.provider:void 0),g=typeof c.model=="string"?c.model:void 0;if(Fs(f)){let m,_=()=>(m||(m={...c},a().overdrive=m),m);if(typeof c.mode=="string"){let y=f==="claude"?ht(c.mode):c.mode,v=tn(f).map(w=>f==="claude"?ht(w.id):w.id);y!==c.mode&&(_().mode=y,s=true),v.includes(y)||(delete _().mode,i.push("overdrive.mode"));}typeof c.effort=="string"&&Ws(f,g)&&(dt(f,g).includes(c.effort)||(delete _().effort,i.push("overdrive.effort")));}}return {block:r,removed:i,changed:s}}function Kd(n){let{options:e}=n;if(!Jr(e))return {options:e,changed:false,removed:[]};let t=Vr(n.provider),r=[],o=false,s=e,i=false,a=()=>(i||(s={...e},i=true),s);for(let d of ["query","execute"]){let l=e[d];if(!Jr(l))continue;let{block:c,removed:f,changed:g}=Gd(l,t,n.model);(g||f.length>0)&&(a()[d]=c,r.push(...f.map(m=>`${d}.${m}`)),o=true);}return {options:s,changed:o,removed:r}}var zd,Xr=O(()=>{p();pe();Bn();zd={auto:"default"};});function Bt(n){if(!n)return {};let e=n.match(/^(.+?)\[([^\]]+)\]$/);if(e){let t=e[2].toLowerCase();return Vd.has(t)?{model:e[1],effort:e[2]}:{model:n}}return {model:n}}function js(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 Hs(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 qs(n){return n?["-c",`model_reasoning_effort=${n}`]:[]}function zs(n){if(!n)return [];let e=new Set(["acceptEdits","bypassPermissions","default","delegate","dontAsk","plan"]),t=ht(n);return e.has(t)?["--permission-mode",t]:[]}function Gs(n){return n?new Set(["low","medium","high","xhigh","max"]).has(n)?["--effort",n]:[]:[]}function Ks(n){switch(n){case "plan":case "read-only":return ["--permission-mode","plan","--sandbox","read-only"];case "agent":return ["--always-approve","--sandbox","workspace"];case "agent-full-access":case "yolo":return ["--always-approve","--sandbox","off"];case "default":case "acceptEdits":case "auto":case "dontAsk":case "bypassPermissions":return ["--permission-mode",n];default:return []}}function Vs(n){return n?new Set(["low","medium","high","xhigh"]).has(n)?["--effort",n]:[]:[]}var Vd,Zn=O(()=>{p();Xr();Vd=new Set(["minimal","low","medium","high","xhigh","max"]);});function Xd(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 Ds=require('fs'),z=require('path'),crypto$1=require('crypto'),child_process=require('child_process'),string_decoder=require('string_decoder'),sdk=require('@agentclientprotocol/sdk'),jsYaml=require('js-yaml'),jsTiktoken=require('js-tiktoken'),lite=require('js-tiktoken/lite'),Fr=require('js-tiktoken/ranks/o200k_base'),zod=require('zod'),module$1=require('module'),Ie=require('handlebars'),promises=require('fs/promises'),events=require('events'),async_hooks=require('async_hooks'),drizzleOrm=require('drizzle-orm'),ii=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 Ds__namespace=/*#__PURE__*/_interopNamespace(Ds);var z__namespace=/*#__PURE__*/_interopNamespace(z);var Fr__default=/*#__PURE__*/_interopDefault(Fr);var Ie__namespace=/*#__PURE__*/_interopNamespace(Ie);var ii__namespace=/*#__PURE__*/_interopNamespace(ii);var Cr=Object.defineProperty;var Xa=Object.getOwnPropertyDescriptor;var Ya=Object.getOwnPropertyNames;var Qa=Object.prototype.hasOwnProperty;var de=(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 I=(n,e)=>()=>(n&&(e=n(n=0)),e);var $n=(n,e)=>{for(var t in e)Cr(n,t,{get:e[t],enumerable:true});},Za=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Ya(e))!Qa.call(n,o)&&o!==t&&Cr(n,o,{get:()=>e[o],enumerable:!(r=Xa(e,o))||r.enumerable});return n};var wi=n=>Za(Cr({},"__esModule",{value:true}),n);var p=I(()=>{});var ki,Sr,vi,Ir=I(()=>{p();ki=["flagship","balanced","speed"],Sr={claude:{models:[{id:"claude-fable-5",name:"Claude Fable 5",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-opus-5",name:"Claude Opus 5",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced",recommended:true},{id:"claude-opus-4-8[1m]",name:"Claude Opus 4.8",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-7[1m]",name:"Claude Opus 4.7",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-6[1m]",name:"Claude Opus 4.6",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-sonnet-4-6[1m]",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5",contextWindowTokens:2e5,tier:"speed"}],modes:[{id:"default",name:"Default",description:"Uses Claude's default permission handling with normal approval prompts."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without approval; other permission checks remain in place."},{id:"plan",name:"Plan",description:"Keeps Claude in plan mode so it can inspect and propose changes without applying them."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permissions; only pre-approved tool actions can proceed."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Claude permission checks so tools can run without approval prompts."}],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-7[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-haiku-4-5":{effort:[]}},providerOptions:[]},codex:{models:[{id:"gpt-5.6-sol",name:"GPT-5.6 Sol",contextWindowTokens:105e4,tier:"flagship",recommended:true},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra",contextWindowTokens:105e4,tier:"balanced",recommended:true},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna",contextWindowTokens:105e4,tier:"speed",recommended:true},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini",contextWindowTokens:4e5,tier:"speed"},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex",contextWindowTokens:4e5,tier:"flagship"},{id:"gpt-5.3-codex-spark",name:"GPT-5.3 Codex Spark",contextWindowTokens:128e3,tier:"speed"}],modes:[{id:"agent",name:"Agent",description:"Uses the workspace-write sandbox; can read and modify workspace files without full machine access."},{id:"read-only",name:"Read Only",description:"Uses the read-only sandbox; can inspect files but cannot write to the workspace."},{id:"plan",name:"Plan",description:"Uses the read-only sandbox for planning and inspection; cannot write to the workspace."},{id:"agent-full-access",name:"Agent Full Access",description:"Bypasses approvals and the sandbox; can access and modify files beyond the workspace."},{id:"yolo",name:"YOLO",description:"Bypasses approvals and the sandbox for unrestricted execution and full filesystem access."}],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"}},providerOptions:[]},opencode:{models:[],modes:[{id:"plan",name:"Plan",description:"Uses the plan agent without --auto; planning follows standard approval behavior."},{id:"plan-auto",name:"Plan \xB7 Auto",description:"Uses the plan agent with --auto; planning uses automatic approvals."},{id:"build",name:"Build",description:"Uses the build agent without --auto; work follows standard approval behavior."},{id:"build-auto",name:"Build \xB7 Auto",description:"Uses the build agent with --auto; work uses automatic approvals."}],effort:[],modelOverrides:{},providerOptions:[]},copilot:{models:[{id:"auto",name:"Auto"},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro",contextWindowTokens:1048576,tier:"flagship"}],modes:[{id:"interactive",name:"Interactive",description:"Passes --mode interactive; tool access follows Copilot's interactive mode behavior."},{id:"plan",name:"Plan",description:"Passes --mode plan; planning and permission behavior follow Copilot's plan mode."},{id:"autopilot",name:"Autopilot",description:"Passes --mode autopilot; execution behavior follows Copilot's autonomous mode."}],effort:["none","low","medium","high","xhigh","max"],modelOverrides:{},providerOptions:[]},antigravity:{models:[{id:"gemini-3.6-flash-high",name:"Gemini 3.6 Flash (High)",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.6-flash-medium",name:"Gemini 3.6 Flash (Medium)",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.6-flash-low",name:"Gemini 3.6 Flash (Low)",contextWindowTokens:1048576,tier:"balanced"},{id:"Gemini 3.5 Flash (Medium)",name:"Gemini 3.5 Flash (Medium)",contextWindowTokens:1048576,tier:"balanced"},{id:"Gemini 3.5 Flash (High)",name:"Gemini 3.5 Flash (High)",contextWindowTokens:1048576,tier:"balanced"},{id:"Gemini 3.5 Flash (Low)",name:"Gemini 3.5 Flash (Low)",contextWindowTokens:1048576,tier:"balanced"},{id:"Gemini 3.1 Pro (Low)",name:"Gemini 3.1 Pro (Low)",contextWindowTokens:1048576,tier:"flagship"},{id:"Gemini 3.1 Pro (High)",name:"Gemini 3.1 Pro (High)",contextWindowTokens:1048576,tier:"flagship"},{id:"Claude Sonnet 4.6 (Thinking)",name:"Claude Sonnet 4.6 (Thinking)",contextWindowTokens:1e6,tier:"balanced"},{id:"Claude Opus 4.6 (Thinking)",name:"Claude Opus 4.6 (Thinking)",contextWindowTokens:1e6,tier:"flagship"},{id:"GPT-OSS 120B (Medium)",name:"GPT-OSS 120B (Medium)",contextWindowTokens:128e3,tier:"balanced"}],modes:[],effort:[],modelOverrides:{},providerOptions:[]},grok:{models:[{id:"grok-4.6",name:"Grok 4.6",contextWindowTokens:5e5,tier:"flagship",recommended:true},{id:"grok-4.5",name:"Grok 4.5",contextWindowTokens:5e5,tier:"flagship"}],modes:[{id:"default",name:"Default",description:"Uses Grok's default permission handling."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without changing the selected sandbox profile."},{id:"auto",name:"Auto",description:"Uses Grok automatic permission handling."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permission before tool execution."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Grok permission checks for tool execution."},{id:"plan",name:"Plan",description:"Keeps Grok in planning mode without applying changes."}],effort:["low","medium","high"],modelOverrides:{"grok-4.6":{effort:["low","medium","high","xhigh"],defaultEffort:"high"},"grok-4.5":{effort:["low","medium","high"],defaultEffort:"high"}},providerOptions:[{key:"alwaysApprove",type:"boolean"},{key:"sandbox",type:"enum",values:["workspace","read-only","off"]}]}},vi={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:"default",effort:"high"},execute:{mode:"bypassPermissions",effort:"xhigh"}},"cli/grok":{model:"grok-4.6",query:{mode:"default",effort:"high",providerOptions:{alwaysApprove:true,sandbox:"workspace"}},execute:{mode:"default",effort:"xhigh",providerOptions:{alwaysApprove:true,sandbox:"off"}}}}},Object.fromEntries(Object.entries(Sr).map(([n,e])=>[n,e.models]));});var it,Or,_i,Mr=I(()=>{p();it={"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,cachedInput:.2,output:12},"gpt-5.6-luna":{input:.2,cachedInput:.02,output:1.2},"gpt-5.5":{input:5,cachedInput:.5,output:30},"gpt-5.4":{input:2.5,cachedInput:.25,output:15},"gpt-5.4-mini":{input:.75,cachedInput:.075,output:4.5},"gpt-5.3-codex":{input:1.75,cachedInput:.175,output:14},"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},"gemini-3.6-flash":{input:1.5,cachedInput:.15,output:7.5},"grok-4.6":{input:2,cachedInput:.5,output:6},"grok-4.5":{input:2,cachedInput:.3,output:6}},Or=new Set(["gpt-5.3-codex-spark"]),_i=new Set(["Claude Opus 4.6 (Thinking)","Claude Sonnet 4.6 (Thinking)","GPT-OSS 120B (Medium)","Gemini 3.1 Pro (High)","Gemini 3.1 Pro (Low)","Gemini 3.5 Flash (High)","Gemini 3.5 Flash (Low)","Gemini 3.5 Flash (Medium)","auto","claude-fable-5","claude-haiku-4-5","claude-opus-4-6[1m]","claude-opus-4-7[1m]","claude-opus-4-8[1m]","claude-opus-5","claude-sonnet-4-6","claude-sonnet-4-6[1m]","claude-sonnet-5","gemini-3.1-pro","gemini-3.6-flash-high","gemini-3.6-flash-low","gemini-3.6-flash-medium","gpt-5.3-codex","gpt-5.3-codex-spark","gpt-5.4","gpt-5.4-mini","gpt-5.5","gpt-5.6-luna","gpt-5.6-sol","gpt-5.6-terra","grok-4.5","grok-4.6"]);});function Ei(n){Xt=n;}function Ti(n){xi=Object.fromEntries(Object.entries(n).map(([e,t])=>[e,{...t}]));}function Nr(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 nd(n){if(!n)return;let e="inputPerMillionTokensUsd"in n?n.inputPerMillionTokensUsd:n.input,t="outputPerMillionTokensUsd"in n?n.outputPerMillionTokensUsd:n.output;if(!(!Number.isFinite(e)||e<=0||!Number.isFinite(t)||t<=0))return {inputPerMillionTokensUsd:e,outputPerMillionTokensUsd:t}}function Ai(n){if(!n)return;let e=n.replace(/\[[^\]]*\]$/g,"");return nd(xi[e]??it[e])}function rd(n){if(!n)return console.warn("[pricing] missing model id; cost is being recorded as 0"),Jt;let e=Nr(n),t=td[e];if(t)return Xt[t]??it[t]??Jt;if(Xt[e])return Xt[e];if(it[e])return it[e];if(Or.has(e))return console.warn(`[pricing] unpublished model pricing: ${n}, cost_usd=0`),Jt;if(_i.has(e))return console.warn(`[pricing] missing catalog pricing: ${n}, cost_usd=0`),Jt;let r={...it,...Xt};for(let o of Object.keys(r))if(e.includes(o))return r[o];return console.warn(`[pricing] Unknown model: ${n}, cost_usd=0`),Jt}function od(n,e,t,r=0,o){let i=rd(t),s=Math.min(r,n),d=(n-s)*i.input/1e6,c=s*i.cachedInput/1e6,l=e*i.output/1e6;return d+c+l}function Ri(n,e,t,r,o,i){return n&&n>0?n:!e&&!t?0:od(e??0,t??0,o,r??0)}var td,Jt,Xt,xi,St=I(()=>{p();Mr();Mr();td={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"},Jt={input:0,cachedInput:0,output:0},Xt={},xi={};});function Yt(n){return ad.get(n)??n}exports.CLAUDE_OPUS_4_8_BASE_MODEL_ID=void 0;exports.CLAUDE_OPUS_4_8_LEGACY_MODEL_ID=void 0;exports.CLAUDE_MODEL_COMPATIBILITY_PAIRS=void 0;var ad,Un=I(()=>{p();exports.CLAUDE_OPUS_4_8_BASE_MODEL_ID="claude-opus-4-8",exports.CLAUDE_OPUS_4_8_LEGACY_MODEL_ID="claude-opus-4-8[1m]",exports.CLAUDE_MODEL_COMPATIBILITY_PAIRS=[{baseModelId:"claude-opus-4-8",catalogModelId:"claude-opus-4-8[1m]"},{baseModelId:"claude-opus-4-7",catalogModelId:"claude-opus-4-7[1m]"},{baseModelId:"claude-opus-4-6",catalogModelId:"claude-opus-4-6[1m]"},{baseModelId:"claude-sonnet-4-6",catalogModelId:"claude-sonnet-4-6[1m]"}],ad=new Map(exports.CLAUDE_MODEL_COMPATIBILITY_PAIRS.map(({baseModelId:n,catalogModelId:e})=>[n,e]));});function Ci(){return {models:[],modes:[],effort:[],modelOverrides:{},providerOptions:[]}}function dd(n){return Array.isArray(n)?{models:n,modes:[],effort:[],modelOverrides:{},providerOptions:[]}:n?{models:n.models??[],modes:n.modes??[],effort:n.effort??[],modelOverrides:n.modelOverrides??{},providerOptions:n.providerOptions??[]}:Ci()}function Lr(n){Dr=Object.fromEntries(Object.entries(n).map(([e,t])=>[e,dd(t)]));}function cd(){Dr={};}function Qt(n){Pi={...n};}function Le(n){return he(n).models}function he(n){return Dr[n]??Sr[n]??Ci()}function Bn(n){return Pi[n]??vi.providers[n]}function Zt(n){return he(n).modes}function st(n,e){let t=he(n);return e?t.modelOverrides[Yt(e)]?.effort??t.effort:t.effort}function Si(n){return he(n).modelOverrides}function en(){return Le("claude")}function $r(){return Le("codex")}function Ur(){return Le("copilot")}function Br(){return Le("antigravity")}function tn(n,e){let t=new Map;for(let r of [...n,...e]){let o=t.get(r.id);if(!o){let{apiPricing:i,recommended:s,...a}=r;t.set(r.id,{...a,...s===true?{recommended:true}:{},...i!=null?{apiPricing:{...i}}:{}});continue}!o.name&&r.name&&(o.name=r.name),o.description==null&&r.description!=null&&(o.description=r.description),o.contextWindowTokens==null&&r.contextWindowTokens!=null&&(o.contextWindowTokens=r.contextWindowTokens),o.tier==null&&r.tier!=null&&(o.tier=r.tier),o.recommended!==true&&r.recommended===true&&(o.recommended=true),o.apiPricing==null&&r.apiPricing!=null&&(o.apiPricing={...r.apiPricing});}return Array.from(t.values())}function nn(n){return n.map(e=>{let{apiPricing:t,...r}=e,o=Ai(e.id);return o?{...r,apiPricing:o}:r})}var Dr,Pi,ge=I(()=>{p();Ir();St();Un();Dr={},Pi={};});function Jn(n){return typeof n!="string"?void 0:n.trim()||void 0}function Xn(n){return Jn(n)?.toLowerCase()??""}function Ot(n){try{return Ds.statSync(n).isFile()}catch{return false}}function Fd(n,e){if(n===e)return true;let t=z__namespace.default.relative(n,e);return t!==""&&!t.startsWith("..")&&!z__namespace.default.isAbsolute(t)}function Wd(n,e){if(z__namespace.default.basename(n)!==".bin")return false;let t=z__namespace.default.dirname(n);if(z__namespace.default.basename(t)!=="node_modules")return false;let r=z__namespace.default.dirname(t);return Fd(r,e)}function rn(n,e={}){if(n.includes("/")||n.includes("\\")||z__namespace.default.isAbsolute(n))return n;let t=e.platform??process.platform,r=e.env??process.env,o=z__namespace.default.resolve(e.cwd??process.cwd()),i=(e.resolution??"global_first")==="global_first",s=r.PATH??r.Path??process.env.PATH??process.env.Path??"",a=t==="win32"?";":":",d=s.split(a).map(g=>g.trim()).filter(Boolean),c=z__namespace.default.extname(n).length>0,l=r.PATHEXT??r.Pathext??process.env.PATHEXT??process.env.Pathext??".EXE;.CMD;.BAT;.COM",f=t==="win32"?c?[""]:l.split(";").map(g=>g.trim()).filter(Boolean).map(g=>g.startsWith(".")?g:`.${g}`):[""];for(let g of d){let m=z__namespace.default.resolve(o,g);if(!(i&&Wd(m,o)))for(let v of f){let y=Xn(v),_=v.toUpperCase();for(let w of [v,y,_]){let k=z__namespace.default.join(m,`${n}${w}`);if(Ot(k))return k}}}return n}function jd(n,e){return rn(n,{env:e,platform:"win32",resolution:"local_first"})}function Hd(n){if(!Ot(n))return null;try{let e=Ds.readFileSync(n,"utf8"),t=z__namespace.default.dirname(n),r=[];for(let a of e.matchAll(/"([^"\r\n]*)"/g)){let l=(a[1]??"").match(/%~?dp0%?\s*[\\/]*(.*)$/i)?.[1]?.trim();if(!l)continue;let f=l.replace(/[\\/]+/g,z__namespace.default.sep).replace(/^[\\/]+/,""),g=z__namespace.default.resolve(t,f);Ot(g)&&r.push(g);}let o=[],i=new Map;for(let a of e.matchAll(/SET\s+"(\w+)=%~?dp0%?[\\/]?([^"]+)"/gi)){let d=a[1].toUpperCase(),c=a[2].trim().replace(/[\\/]+/g,z__namespace.default.sep).replace(/^[\\/]+/,"");i.set(d,z__namespace.default.resolve(t,c));}for(let a of e.split(/\r?\n/))if(a.includes("%*"))for(let d of a.matchAll(/"%(\w+)%"/g)){let c=i.get(d[1].toUpperCase());c&&Ot(c)&&o.push(c);}let s=a=>a.find(d=>{let c=Xn(z__namespace.default.basename(d));return c!=="node.exe"&&c!=="node"})??null;return s(o)??s(r)}catch{return null}}function qd(n,e){if(typeof e=="string")return Jn(e)||null;if(!e||typeof e!="object")return null;if(n){let t=e[n],r=typeof t=="string"?Jn(t):void 0;if(r)return r}for(let t of Object.values(e)){let r=typeof t=="string"?Jn(t):void 0;if(r)return r}return null}function zd(n,e){if(!e)return null;let t=z__namespace.default.dirname(n),r=[z__namespace.default.resolve(t,"..",e),z__namespace.default.resolve(t,"node_modules",e)];for(let o of r){let i=z__namespace.default.join(o,"package.json");if(Ot(i))try{let s=JSON.parse(Ds.readFileSync(i,"utf8")),a=qd(e,s.bin);if(!a)continue;let d=z__namespace.default.resolve(o,a);if(Ot(d))return d}catch{}}return null}function Gd(n){let e=n.platform??process.platform,t=n.env??process.env,r=n.execPath??process.execPath,o=n.cwd,i=n.resolution;if(e!=="win32")return {command:rn(n.command,{cwd:o,env:t,platform:e,resolution:i}),leadingArgv:[],resolution:"direct"};let s=rn(n.command,{cwd:o,env:t,platform:e,resolution:i}),a=Xn(z__namespace.default.extname(s));if(a===".js"||a===".cjs"||a===".mjs")return {command:r,leadingArgv:[s],resolution:"node-entrypoint",windowsHide:true};if(a===".cmd"||a===".bat"){let d=Hd(s)??zd(s,n.packageName);return d?Xn(z__namespace.default.extname(d))===".exe"?{command:d,leadingArgv:[],resolution:"exe-entrypoint",windowsHide:true}:{command:r,leadingArgv:[d],resolution:"node-entrypoint",windowsHide:true}:{command:s,leadingArgv:[],resolution:"unresolved-wrapper"}}return {command:s,leadingArgv:[],resolution:"direct"}}function Kd(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(`${z__namespace.default.basename(n.candidate.command)} wrapper resolved, but no executable/Node entrypoint could be resolved without shell execution.`)}function lt(n){let e=Gd(n);return Kd({candidate:e,allowShellFallback:n.allowShellFallback})}function ut(n,e){return {command:n.command,argv:[...n.leadingArgv,...e],resolution:n.resolution,shell:n.shell,windowsHide:n.windowsHide}}var Mt=I(()=>{p();});function Vd(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,i="cached_input_tokens"in n?Number(n.cached_input_tokens):void 0,s=o!==void 0?o:i??0;return {inputTokens:o!==void 0?e+o:e,outputTokens:t,cachedInputTokens:s}}function Jd(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),s="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=s!==void 0?s:a??0;return {inputTokens:s!==void 0?r+s:r,outputTokens:o,cachedInputTokens:d}}function Xd(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),i=t.cache,s=i?Number(i.read??0):0;return {inputTokens:r+s,outputTokens:o,cachedInputTokens:s}}function Bi(n){let e=new Map,t;for(let i of n.split(`
2
+ `))if(i.trim())try{let s=JSON.parse(i);if(s.type!=="assistant")continue;let a=s.message,d=a?.id,c=a?.usage;if(typeof d!="string"||!c)continue;let l=Number(c.input_tokens??0),f=Number(c.cache_read_input_tokens??0);e.set(d,{inputTokens:l+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 i of e.values())r+=i.inputTokens,o+=i.cachedInputTokens;return {inputTokens:r,cachedInputTokens:o,model:t}}function Ue(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),i=Xd(o);if(i){t||(t={inputTokens:0,outputTokens:0,cachedInputTokens:0}),t.inputTokens+=i.inputTokens,t.outputTokens+=i.outputTokens,t.cachedInputTokens+=i.cachedInputTokens;continue}let s=Vd(o)??Jd(o);s&&(e=s);}catch{}return t||(e??void 0)}var pt=I(()=>{p();});exports.ProviderError=void 0;var gt,ft,Nt=I(()=>{p();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},gt=class extends exports.ProviderError{constructor(e,t){super(e,t,{code:"TIMEOUT_IDLE",kind:"permanent"}),this.name="IdleTimeoutError";}},ft=class extends exports.ProviderError{constructor(e,t){super(e,t,{code:"TIMEOUT_TOTAL",kind:"permanent"}),this.name="TotalTimeoutError";}};});exports.RateLimitError=void 0;var Yn=I(()=>{p();Nt();exports.RateLimitError=class extends exports.ProviderError{name="RateLimitError";constructor(e,t="cli/claude"){super(e,t,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function we(n){return /crewx\s+(x|execute)\s/.test(n)}function ke(n,e){let t=e.match(/@(\S+)/);return {timestamp:n,type:"agent_call",targetAgent:t?.[1]?.replace(/["']/g,""),toolInput:e}}var Dt=I(()=>{p();});function ve(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 Lt=I(()=>{p();});function mt(n){return Yd[n]??n}function Kr(n){if(!n)return "";let e=n.lastIndexOf("/");return e===-1?n.trim():n.slice(e+1).trim()}function Fi(n){if(!n)return false;let e=he(n);return e.models.length>0||e.modes.length>0||e.effort.length>0||Object.keys(e.modelOverrides).length>0}function Wi(n,e){if(!n)return false;let t=he(n),r=typeof e=="string"?Yt(e):void 0;return t.models.length>0||t.effort.length>0||r!=null&&Array.isArray(t.modelOverrides[r]?.effort)}function Vr(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Qd(n,e,t){let r=n,o=false,i=false,s=[],a=()=>(o||(r={...n},o=true),r),d=typeof r.provider=="string"&&r.provider.trim()?Kr(r.provider):e,c=typeof r.model=="string"&&r.model.trim()?r.model.trim():t;if(Fi(d)){if(typeof r.mode=="string"){let f=d==="claude"?mt(r.mode):r.mode,g=Zt(d).map(m=>d==="claude"?mt(m.id):m.id);f!==r.mode&&(a().mode=f,i=true),g.includes(f)||(delete a().mode,s.push("mode"));}typeof r.effort=="string"&&Wi(d,c)&&(st(d,c).includes(r.effort)||(delete a().effort,s.push("effort")));}let l=r.overdrive;if(Vr(l)){let f=Kr(typeof l.provider=="string"?l.provider:void 0),g=typeof l.model=="string"?l.model:void 0;if(Fi(f)){let m,v=()=>(m||(m={...l},a().overdrive=m),m);if(typeof l.mode=="string"){let y=f==="claude"?mt(l.mode):l.mode,_=Zt(f).map(w=>f==="claude"?mt(w.id):w.id);y!==l.mode&&(v().mode=y,i=true),_.includes(y)||(delete v().mode,s.push("overdrive.mode"));}typeof l.effort=="string"&&Wi(f,g)&&(st(f,g).includes(l.effort)||(delete v().effort,s.push("overdrive.effort")));}}return {block:r,removed:s,changed:i}}function Zd(n){let{options:e}=n;if(!Vr(e))return {options:e,changed:false,removed:[]};let t=Kr(n.provider),r=[],o=false,i=e,s=false,a=()=>(s||(i={...e},s=true),i);for(let d of ["query","execute"]){let c=e[d];if(!Vr(c))continue;let{block:l,removed:f,changed:g}=Qd(c,t,n.model);(g||f.length>0)&&(a()[d]=l,r.push(...f.map(m=>`${d}.${m}`)),o=true);}return {options:i,changed:o,removed:r}}var Yd,Jr=I(()=>{p();ge();Un();Yd={auto:"default"};});function $t(n){if(!n)return {};let e=n.match(/^(.+?)\[([^\]]+)\]$/);if(e){let t=e[2].toLowerCase();return ec.has(t)?{model:e[1],effort:e[2]}:{model:n}}return {model:n}}function ji(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 Hi(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 qi(n){return n?["-c",`model_reasoning_effort=${n}`]:[]}function zi(n){if(!n)return [];let e=new Set(["acceptEdits","bypassPermissions","default","delegate","dontAsk","plan"]),t=mt(n);return e.has(t)?["--permission-mode",t]:[]}function Gi(n){return n?new Set(["low","medium","high","xhigh","max"]).has(n)?["--effort",n]:[]:[]}function Ki(n){return n==="default"?[]:n&&tc.has(n)?["--permission-mode",n]:[]}function Vi(n){return n===true?["--always-approve"]:[]}function Ji(n,e=t=>console.warn(t)){return n===void 0?[]:n==="workspace"||n==="read-only"||n==="off"?["--sandbox",n]:(e(`[grok] Invalid sandbox value ${JSON.stringify(n)}; using workspace.`),["--sandbox","workspace"])}function Xi(n){return n?new Set(["low","medium","high","xhigh"]).has(n)?["--effort",n]:[]:[]}var ec,tc,Qn=I(()=>{p();Jr();ec=new Set(["minimal","low","medium","high","xhigh","max"]);tc=new Set(["default","acceptEdits","auto","dontAsk","bypassPermissions","plan"]);});function rc(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 Yd(n){let e=n.toLowerCase();return e.includes("out of extra usage")||e.includes("rate limit")||e.includes("quota")}function Qd(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=ke(s);return r==="Bash"&&he(i)?we(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 Jd;exports.claudeAdapter=void 0;var Yr=O(()=>{p();Qn();$t();Ut();Zn();pe();ft();Jd=new Set(["tool_progress"]),exports.claudeAdapter={command:"claude",meta:{displayName:"Claude",models:nn(),capabilities:{resume:true}},buildArgs(n,e,t){let{model:r,effort:o}=Bt(e.model),s=e.effort??o,i=zs(e.mode),a=Gs(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=Xd(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(Yd(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=Bs(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=Qd(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?Jd.has(r):!1}catch{return false}}};});var Zd,el;exports.copilotAdapter=void 0;var Qr=O(()=>{p();ft();$t();Ut();pe();Zd=new Set(["interactive","plan","autopilot"]),el=new Set(["none","low","medium","high","xhigh","max"]),exports.copilotAdapter={command:"copilot",meta:{displayName:"Copilot",models:Br()},buildArgs(n,e,t){let r=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&r.push("--model",e.model),e.mode&&Zd.has(e.mode)&&r.push("--mode",e.mode),e.effort&&el.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=$e(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=ke(d);return (a==="bash"||a==="Bash")&&he(l)?[we(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 nl(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 rl(n){return n[0]==="exec"?n.slice(1):n}function ol(n,e){let t=e.type;if(t==="command_execution"){let r=String(e.command||"");return he(r)?[we(n,r)]:[{timestamp:n,type:"tool_use",toolName:"Bash",toolInput:r}]}return t==="web_search"?[]:t==="file_change"?[]:[]}function sl(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=il(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=ke(o);return r==="Bash"&&he(s)?we(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 il(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=ke(o);return r==="Bash"&&he(s)?we(n,s):{timestamp:n,type:"tool_use",toolName:r,toolInput:s}}return null}var tl;exports.codexAdapter=void 0;var Zr=O(()=>{p();ft();$t();Ut();Zn();pe();tl=new Set(["turn.started","turn.completed","item.updated"]);exports.codexAdapter={command:"codex",meta:{displayName:"Codex",models:Ur(),capabilities:{resume:true}},buildArgs(n,e,t){let{model:r,effort:o}=Bt(e.model),s=e.effort??o,i=e.resumeSessionId?Hs(e.mode):js(e.mode),a=qs(s),d=r?["-m",r]:[],l=rl(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=$e(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=nl(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(...ol(t,d));continue}if(a==="item.completed"){let l=sl(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?tl.has(r):!1}catch{return false}}};});function ll(n){return n?dl[n]??{agent:"build",autoApprove:false}:{agent:void 0,autoApprove:false}}function rr(n,e){return n.some(t=>t===e||t.startsWith(`${e}=`))}function cl(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 al,dl;exports.opencodeAdapter=void 0;var eo=O(()=>{p();ft();Ut();al=new Set(["step_start","step_finish"]),dl={build:{agent:"build",autoApprove:false},"build-auto":{agent:"build",autoApprove:true},plan:{agent:"plan",autoApprove:false},"plan-auto":{agent:"plan",autoApprove:true}};exports.opencodeAdapter={command:"opencode",meta:{displayName:"OpenCode",capabilities:{resume:true}},buildArgs(n,e,t){let r=e.additionalArgs,o=r!==void 0?[...r]:["run"];rr(o,"--format")||o.push("--format","json"),e.resumeSessionId&&!o.includes("-s")&&!o.includes("--session")&&o.push("-s",e.resumeSessionId);let{agent:s,autoApprove:i}=ll(e.mode);rr(o,"--agent")||s!==void 0&&o.push("--agent",s),i&&!rr(o,"--auto")&&o.push("--auto"),e.effort!==void 0&&!rr(o,"--variant")&&o.push("--variant",e.effort),e.model&&o.push("--model",e.model);let a;return !t&&!i&&!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=$e(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=cl(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,_=ke(m);if(r.push({timestamp:t,type:"tool_use",toolName:l,toolUseId:c,toolInput:_}),g==="completed"&&f?.output!==void 0){let y=f.output,v=typeof y=="string"?y:JSON.stringify(y);r.push({timestamp:t,type:"tool_result",toolUseId:c,resultPreview:v,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?al.has(r):!1}catch{return false}}};});var to,no=O(()=>{p();Lt();pe();to={command:"agy",meta:{displayName:"Antigravity",models:Fr(),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 Js,Xs=O(()=>{p();$t();Ut();Js={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=ke(a);return /^bash$/i.test(s)&&he(d)?[we(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 cn(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function ir(n){return cn(n)?n:void 0}function _e(n){return typeof n=="string"?n:void 0}function wt(n){let e=typeof n=="number"?n:Number(n??0);return Number.isFinite(e)?e:0}function ml(n){let e=[],t=-1,r=0,o=false,s=false;for(let i=0;i<n.length;i+=1){let a=n[i];if(t===-1){(a==="{"||a==="[")&&(t=i,r=1);continue}if(s){s=false;continue}if(a==="\\"&&o){s=true;continue}if(a==='"'){o=!o;continue}o||(a==="{"||a==="["?r+=1:(a==="}"||a==="]")&&(r-=1,r===0&&(e.push(n.slice(t,i+1)),t=-1)));}return t!==-1&&e.push(n.slice(t)),e}function an(n){let e=n.trim();if(!e)return [];try{let t=JSON.parse(e);return cn(t)?[t]:[]}catch{return ml(e).flatMap(t=>{try{let r=JSON.parse(t);return cn(r)?[r]:[]}catch{return []}})}}function dn(n){let e=JSON.stringify(n);return e===void 0?String(n):e}function ln(n){if(typeof n=="string")return n;if(Array.isArray(n)){let e=n.map(ln).filter(t=>t!==void 0);return e.length>0?e.join(`
12
- `):void 0}if(cn(n)){if(typeof n.text=="string")return n.text;if(typeof n.message=="string")return n.message;if(typeof n.error=="string")return n.error;if(n.type==="text"&&typeof n.data=="string")return n.data;for(let e of ["content","FileContent","rawOutput"]){let t=ln(n[e]);if(t!==void 0)return t}}}function yl(n){if(n.rawOutput!==null&&n.rawOutput!==void 0)return ln(n.rawOutput)??dn(n.rawOutput);if(n.content!==null&&n.content!==void 0)return ln(n.content)??dn(n.content);if(n.result!==null&&n.result!==void 0)return ln(n.result)??dn(n.result)}function Qs(n){let e=ir(n.error),t=[n.message,n.errorMessage,e?.message,e?.detail,typeof n.error=="string"?n.error:void 0].find(r=>typeof r=="string"&&r.trim().length>0);return t?Zs(t):"Grok CLI reported an error."}function Zs(n){return (n.replace(fl,"").split(/\r?\n/).map(t=>t.trim()).filter(Boolean)[0]??n.trim()).slice(0,500)}function Ys(n){return gl.test(n)}function hl(n){let e=ir(n.modelUsage);return e?Object.keys(e)[0]??null:null}function wl(n){let e=ir(n.usage);if(!e)return null;let t=wt(e.cache_read_input_tokens);return {inputTokens:wt(e.input_tokens)+t,cachedInputTokens:t,outputTokens:wt(e.output_tokens),costUsd:wt(n.total_cost_usd)}}function kl(n){let e=0,t=0,r=0,o=false,s=new Set;for(let i of n.split(`
13
- `).flatMap(an)){if(i.type!=="usage")continue;let a=ir(i.usage);if(!a)continue;let d=_e(i.signature);if(d&&d.length>0){let c=`signature:${d}`;if(s.has(c))continue;s.add(c);}let l=wt(a.cache_read_input_tokens);e+=wt(a.input_tokens)+l,t+=l,r+=wt(a.output_tokens),o=true;}return o?{inputTokens:e,cachedInputTokens:t,outputTokens:r,costUsd:0}:null}function _l(n,e){let t=_e(e.type);if(t==="thought"){let r=_e(e.data);return r===void 0?[]:[{timestamp:n,type:"thinking",content:r}]}if(t==="text"){let r=_e(e.data);return r===void 0?[]:[{timestamp:n,type:"text",content:r}]}if(t==="tool_call"){let r=_e(e.toolCallId),o=_e(e.toolName)??_e(e.title),s=e.rawInput===void 0?void 0:dn(e.rawInput);return [{timestamp:n,type:"tool_use",toolUseId:r,toolName:o,toolInput:s}]}if(t==="tool_call_update"){let r=_e(e.status);return r!=="completed"&&r!=="failed"&&r!=="error"?[]:[{timestamp:n,type:"tool_result",toolUseId:_e(e.toolCallId),toolName:_e(e.toolName)??_e(e.title),resultPreview:yl(e),isError:r!=="completed"||e.isError===true}]}if(t==="error"){let r=Qs(e);return [{timestamp:n,type:"error",content:r,errorMessage:r}]}return []}var sr,pl,gl,fl;exports.grokAdapter=void 0;var ro=O(()=>{p();Lt();Qn();pe();Zn();sr="cli/grok",pl=new Set(["available_commands","usage","end"]),gl=/(?:rate[\s_-]*limit|quota|usage[\s_-]*limit|too many requests|limit(?:ed|ing)?\s+(?:exceeded|reached))/i,fl=/\u001b\[[0-?]*[ -/]*[@-~]/g;exports.grokAdapter={command:"grok",createSessionId:()=>crypto$1.randomUUID(),meta:{displayName:"Grok",capabilities:{resume:true}},buildArgs(n,e){let{model:t,effort:r}=Bt(e.model),o=e.effort??r,s=e.resumeSessionId?["--resume",e.resumeSessionId]:e.providerSessionId?["--session-id",e.providerSessionId]:[],i=t?["--model",t]:[],a=t?Ne("grok").some(g=>g.id===t):false,d=t&&a?dt("grok",t):[],l=!o||d.length===0||d.includes(o)?o:void 0,c=Vs(l),f=Ks(e.mode);return {args:["--no-auto-update",...s,"--single",n,"--output-format","streaming-json","--no-alt-screen",...i,...c,...f,...e.additionalArgs??[]]}},extractText(n){let e=[],t=false;for(let r of n.split(`
14
- `).flatMap(an))typeof r.type=="string"&&(t=true),r.type==="text"&&typeof r.data=="string"&&e.push(r.data);return e.length>0?e.join(""):t?"":n.trim()},extractFailure(n){for(let e of an(n))if(e.type==="error"){let t=Qs(e);return Ys(dn(e))?new exports.RateLimitError(t,sr):new exports.ProviderError(t,sr)}return null},interpretExit(n,e){if(n===0)return null;let t=Zs(e)||`Grok CLI exited with code ${n}.`;return Ys(e)?new exports.RateLimitError(t,sr):new exports.ProviderError(t,sr)},parseResultMeta(n){let t=n.split(`
15
- `).flatMap(an).find(r=>r.type==="end");return t?{usage:wl(t),model:hl(t)}:{usage:kl(n),model:null}},parseEvent(n,e){let t=e??new Date().toISOString();return an(n).flatMap(r=>_l(t,r))},suppressOutputLine(n){let e=n.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let t=JSON.parse(e);return cn(t)&&typeof t.type=="string"?pl.has(t.type):!1}catch{return false}}};});function un(n,e,t){if(t){let r=exports.BUILTIN_ADAPTERS[t];if(r?.parseEvent)return r.parseEvent(e,n);let o=vl[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 vl,Ve=O(()=>{p();Yr();Qr();Zr();eo();no();Xs();ro();Yr();Qr();Zr();eo();no();ro();$t();exports.BUILTIN_ADAPTERS={codex:exports.codexAdapter,claude:exports.claudeAdapter,opencode:exports.opencodeAdapter,antigravity:to,copilot:exports.copilotAdapter,grok:exports.grokAdapter},vl={gemini:Js};});var Ft,oo=O(()=>{p();Ft=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 ei(n,e){if(n===void 0||n==="")return e;let t=parseInt(n,10);return Number.isNaN(t)?e:t}function so(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 ti(n=process.env){return {queryMs:ei(n.CREWX_TIMEOUT_QUERY,288e5),executeMs:ei(n.CREWX_TIMEOUT_EXECUTE,288e5),idleMs:so(n)??6e5}}var dr=O(()=>{p();});function El(n){let e=n.split(`
16
- `).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(`
5
+ `):""}function oc(n){let e=n.toLowerCase();return e.includes("out of extra usage")||e.includes("rate limit")||e.includes("quota")}function ic(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,i=e.input,s=ve(i);return r==="Bash"&&we(s)?ke(n,s):{timestamp:n,type:"tool_use",toolUseId:o,toolName:r,toolInput:s}}if(t==="tool_result"){let r=!!e.is_error,o=e.tool_use_id,i=e.output??e.content??"",s;return typeof i=="string"?s=i:Array.isArray(i)?s=i.filter(a=>a.type==="text"&&typeof a.text=="string").map(a=>a.text).join(`
6
+ `):s=JSON.stringify(i),{timestamp:n,type:"tool_result",toolUseId:o,resultPreview:s,isError:r}}return null}var nc;exports.claudeAdapter=void 0;var Xr=I(()=>{p();Yn();Dt();Lt();Qn();ge();pt();nc=new Set(["tool_progress"]),exports.claudeAdapter={command:"claude",meta:{displayName:"Claude",models:en(),capabilities:{resume:true}},buildArgs(n,e,t){let{model:r,effort:o}=$t(e.model),i=e.effort??o,s=zi(e.mode),a=Gi(i),d=r?["--model",r]:[],c=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",...c,...s,...a,...d,...f],stdinMessage:n}:{args:["--output-format","stream-json","--verbose",...c,...s,...a,...d,...f],stdinMessage:n}}return {args:["-p","--output-format","stream-json","--verbose",...c,...s,...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 i=JSON.parse(o);if(i.type==="assistant"&&Array.isArray(i.message?.content))for(let s of i.message.content)s.type==="text"&&typeof s.text=="string"&&s.text.trim()&&t.push(s.text.trim());i.type==="result"&&typeof i.result=="string"&&(r=i.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=rc(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(oc(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 i=o.usage,s=i?{inputTokens:Number(i.input_tokens??0)+Number(i.cache_read_input_tokens??0),outputTokens:Number(i.output_tokens??0),cachedInputTokens:Number(i.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:s,model:d}}}catch{}let t=Bi(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 i=t.message?.content;if(!Array.isArray(i))return [];let s=e??new Date().toISOString(),a=[];for(let d of i){let c=ic(s,d);c&&a.push(c);}return a},suppressOutputLine(n){let e=n.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?nc.has(r):!1}catch{return false}}};});var sc,ac;exports.copilotAdapter=void 0;var Yr=I(()=>{p();pt();Dt();Lt();ge();sc=new Set(["interactive","plan","autopilot"]),ac=new Set(["none","low","medium","high","xhigh","max"]),exports.copilotAdapter={command:"copilot",meta:{displayName:"Copilot",models:Ur()},buildArgs(n,e,t){let r=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&r.push("--model",e.model),e.mode&&sc.has(e.mode)&&r.push("--mode",e.mode),e.effort&&ac.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 i=JSON.parse(o);if(i.type==="assistant.message"&&typeof i.data?.content=="string"){let s=i.data.content;s.trim()&&t.push(s.trim());}i.type==="result"&&typeof i.result=="string"&&(r=i.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=Ue(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 i=e??new Date().toISOString(),s=o.toolCallId;if(r==="tool.execution_start"){let a=String(o.toolName||""),d=o.arguments,c=ve(d);return (a==="bash"||a==="Bash")&&we(c)?[ke(i,c)]:[{timestamp:i,type:"tool_use",toolName:a,toolInput:c,...s&&{toolUseId:s}}]}if(r==="tool.execution_complete"){let a=o.error;if(a)return [{timestamp:i,type:"tool_result",isError:true,resultPreview:String(a.message||""),...s&&{toolUseId:s}}];let d=o.result,c=String(d?.content||"");return [{timestamp:i,type:"tool_result",resultPreview:c,isError:false,...s&&{toolUseId:s}}]}if(r==="assistant.message"){let a=String(o.content||"");return a?[{timestamp:i,type:"text",content:a}]:[]}return []}};});function cc(n){let e=[],t=0,r=false,o=false,i=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 c=n.slice(i,a+1).trim();c&&e.push(c),i=a+1;}}}let s=n.slice(i).trim();return s&&e.push(s),e}function lc(n){return n[0]==="exec"?n.slice(1):n}function uc(n,e){let t=e.type;if(t==="command_execution"){let r=String(e.command||"");return we(r)?[ke(n,r)]:[{timestamp:n,type:"tool_use",toolName:"Bash",toolInput:r}]}return t==="web_search"?[]:t==="file_change"?[]:[]}function pc(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 i=gc(n,o);if(i)return i}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,i=ve(o);return r==="Bash"&&we(i)?ke(n,i):{timestamp:n,type:"tool_use",toolName:r,toolInput:i}}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 i=r.queries;o=String(r.query||"")||(i?.length?i.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(s=>String(s.path||"")).filter(Boolean);if(o.length===0)return null;let i=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:i}}return null}function gc(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,i=ve(o);return r==="Bash"&&we(i)?ke(n,i):{timestamp:n,type:"tool_use",toolName:r,toolInput:i}}return null}var dc;exports.codexAdapter=void 0;var Qr=I(()=>{p();pt();Dt();Lt();Qn();ge();dc=new Set(["turn.started","turn.completed","item.updated"]);exports.codexAdapter={command:"codex",meta:{displayName:"Codex",models:$r(),capabilities:{resume:true}},buildArgs(n,e,t){let{model:r,effort:o}=$t(e.model),i=e.effort??o,s=e.resumeSessionId?Hi(e.mode):ji(e.mode),a=qi(i),d=r?["-m",r]:[],c=lc(e.additionalArgs??[]),f=c.includes("--json")||c.includes("--experimental-json")?[]:["--json"];return e.resumeSessionId?{args:["exec","resume",...f,...s,...a,...d,...c,e.resumeSessionId,"-"],stdinMessage:n}:{args:["exec",...f,...s,...a,...d,...c],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 i=JSON.parse(o);if(i.type==="item.completed"&&(i.item?.type==="message"||i.item?.type==="agent_message")&&typeof i.item?.text=="string"){let s=i.item.text;s.trim()&&t.push(s.trim());}i.type==="result"&&typeof i.result=="string"&&(r=i.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=Ue(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=cc(n),o.length>1&&console.warn("[codex] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let i of o){let s;try{s=JSON.parse(i);}catch{continue}let a=s.type;if(!a||!a.startsWith("item.")&&!a.startsWith("turn.")&&!a.startsWith("thread."))continue;let d=s.item;if(d){if(a==="item.started"){r.push(...uc(t,d));continue}if(a==="item.completed"){let c=pc(t,d);c&&r.push(c);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?dc.has(r):!1}catch{return false}}};});function yc(n){return n?mc[n]??{agent:"build",autoApprove:false}:{agent:void 0,autoApprove:false}}function nr(n,e){return n.some(t=>t===e||t.startsWith(`${e}=`))}function hc(n){let e=[],t=0,r=false,o=false,i=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 c=n.slice(i,a+1).trim();c&&e.push(c),i=a+1;}}}let s=n.slice(i).trim();return s&&e.push(s),e}var fc,mc;exports.opencodeAdapter=void 0;var Zr=I(()=>{p();pt();Lt();fc=new Set(["step_start","step_finish"]),mc={build:{agent:"build",autoApprove:false},"build-auto":{agent:"build",autoApprove:true},plan:{agent:"plan",autoApprove:false},"plan-auto":{agent:"plan",autoApprove:true}};exports.opencodeAdapter={command:"opencode",meta:{displayName:"OpenCode",capabilities:{resume:true}},buildArgs(n,e,t){let r=e.additionalArgs,o=r!==void 0?[...r]:["run"];nr(o,"--format")||o.push("--format","json"),e.resumeSessionId&&!o.includes("-s")&&!o.includes("--session")&&o.push("-s",e.resumeSessionId);let{agent:i,autoApprove:s}=yc(e.mode);nr(o,"--agent")||i!==void 0&&o.push("--agent",i),s&&!nr(o,"--auto")&&o.push("--auto"),e.effort!==void 0&&!nr(o,"--variant")&&o.push("--variant",e.effort),e.model&&o.push("--model",e.model);let a;return !t&&!s&&!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 i=JSON.parse(o);if(i.type==="text"&&typeof i.part?.text=="string"){let s=i.part.text;s.trim()&&t.push(s.trim());}i.type==="result"&&typeof i.result=="string"&&(r=i.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=Ue(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=hc(n),o.length>1&&console.warn("[opencode] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let i of o){let s;try{s=JSON.parse(i);}catch{continue}let a=s.type;if(a){if(a==="text"){let c=s.part?.text;c&&r.push({timestamp:t,type:"text",content:c});continue}if(a==="tool_use"){let d=s.part;if(!d)continue;let c=String(d.tool||""),l=String(d.callID||""),f=d.state,g=String(f?.status||""),m=f?.input,v=ve(m);if(r.push({timestamp:t,type:"tool_use",toolName:c,toolUseId:l,toolInput:v}),g==="completed"&&f?.output!==void 0){let y=f.output,_=typeof y=="string"?y:JSON.stringify(y);r.push({timestamp:t,type:"tool_result",toolUseId:l,resultPreview:_,isError:false});}else g==="error"&&r.push({timestamp:t,type:"tool_result",toolUseId:l,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?fc.has(r):!1}catch{return false}}};});var eo,to=I(()=>{p();Nt();ge();eo={command:"agy",meta:{displayName:"Antigravity",models:Br(),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 Yi,Qi=I(()=>{p();Dt();Lt();Yi={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 s=t.content;return s?[{timestamp:o,type:"text",content:s}]:[]}if(r==="tool_use"){let i=String(t.tool_name||""),s=t.tool_id,a=t.parameters,d=ve(a);return /^bash$/i.test(i)&&we(d)?[ke(o,d)]:[{timestamp:o,type:"tool_use",toolName:i,toolUseId:s,toolInput:d}]}if(r==="tool_result"){let i=t.tool_id,s=String(t.output||""),a=t.status!=="success";return [{timestamp:o,type:"tool_result",toolUseId:i,resultPreview:s,isError:a}]}return []}};});function dn(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function ir(n){return dn(n)?n:void 0}function _e(n){return typeof n=="string"?n:void 0}function yt(n){let e=typeof n=="number"?n:Number(n??0);return Number.isFinite(e)?e:0}function xc(n){let e=[],t=-1,r=0,o=false,i=false;for(let s=0;s<n.length;s+=1){let a=n[s];if(t===-1){(a==="{"||a==="[")&&(t=s,r=1);continue}if(i){i=false;continue}if(a==="\\"&&o){i=true;continue}if(a==='"'){o=!o;continue}o||(a==="{"||a==="["?r+=1:(a==="}"||a==="]")&&(r-=1,r===0&&(e.push(n.slice(t,s+1)),t=-1)));}return t!==-1&&e.push(n.slice(t)),e}function on(n){let e=n.trim();if(!e)return [];try{let t=JSON.parse(e);return dn(t)?[t]:[]}catch{return xc(e).flatMap(t=>{try{let r=JSON.parse(t);return dn(r)?[r]:[]}catch{return []}})}}function sn(n){let e=JSON.stringify(n);return e===void 0?String(n):e}function an(n){if(typeof n=="string")return n;if(Array.isArray(n)){let e=n.map(an).filter(t=>t!==void 0);return e.length>0?e.join(`
12
+ `):void 0}if(dn(n)){if(typeof n.text=="string")return n.text;if(typeof n.message=="string")return n.message;if(typeof n.error=="string")return n.error;if(n.type==="text"&&typeof n.data=="string")return n.data;for(let e of ["content","FileContent","rawOutput"]){let t=an(n[e]);if(t!==void 0)return t}}}function Ec(n){if(n.rawOutput!==null&&n.rawOutput!==void 0)return an(n.rawOutput)??sn(n.rawOutput);if(n.content!==null&&n.content!==void 0)return an(n.content)??sn(n.content);if(n.result!==null&&n.result!==void 0)return an(n.result)??sn(n.result)}function es(n){let e=ir(n.error),t=[n.message,n.errorMessage,e?.message,e?.detail,typeof n.error=="string"?n.error:void 0].find(r=>typeof r=="string"&&r.trim().length>0);return t?ts(t):"Grok CLI reported an error."}function ts(n){return (n.replace(_c,"").split(/\r?\n/).map(t=>t.trim()).filter(Boolean)[0]??n.trim()).slice(0,500)}function Zi(n){return vc.test(n)}function Tc(n){let e=ir(n.modelUsage);return e?Object.keys(e)[0]??null:null}function Ac(n){let e=ir(n.usage);if(!e)return null;let t=yt(e.cache_read_input_tokens);return {inputTokens:yt(e.input_tokens)+t,cachedInputTokens:t,outputTokens:yt(e.output_tokens),costUsd:yt(n.total_cost_usd)}}function Rc(n){let e=0,t=0,r=0,o=false,i=new Set;for(let s of n.split(`
13
+ `).flatMap(on)){if(s.type!=="usage")continue;let a=ir(s.usage);if(!a)continue;let d=_e(s.signature);if(d&&d.length>0){let l=`signature:${d}`;if(i.has(l))continue;i.add(l);}let c=yt(a.cache_read_input_tokens);e+=yt(a.input_tokens)+c,t+=c,r+=yt(a.output_tokens),o=true;}return o?{inputTokens:e,cachedInputTokens:t,outputTokens:r,costUsd:0}:null}function bc(n,e){let t=_e(e.type);if(t==="thought"){let r=_e(e.data);return r===void 0?[]:[{timestamp:n,type:"thinking",content:r}]}if(t==="text"){let r=_e(e.data);return r===void 0?[]:[{timestamp:n,type:"text",content:r}]}if(t==="tool_call"){let r=_e(e.toolCallId),o=_e(e.toolName)??_e(e.title),i=e.rawInput===void 0?void 0:sn(e.rawInput);return [{timestamp:n,type:"tool_use",toolUseId:r,toolName:o,toolInput:i}]}if(t==="tool_call_update"){let r=_e(e.status);return r!=="completed"&&r!=="failed"&&r!=="error"?[]:[{timestamp:n,type:"tool_result",toolUseId:_e(e.toolCallId),toolName:_e(e.toolName)??_e(e.title),resultPreview:Ec(e),isError:r!=="completed"||e.isError===true}]}if(t==="error"){let r=es(e);return [{timestamp:n,type:"error",content:r,errorMessage:r}]}return []}var or,kc,vc,_c;exports.grokAdapter=void 0;var no=I(()=>{p();Nt();Yn();ge();Qn();or="cli/grok",kc=new Set(["available_commands","usage","end"]),vc=/(?:rate[\s_-]*limit|quota|usage[\s_-]*limit|too many requests|limit(?:ed|ing)?\s+(?:exceeded|reached))/i,_c=/\u001b\[[0-?]*[ -/]*[@-~]/g;exports.grokAdapter={command:"grok",createSessionId:()=>crypto$1.randomUUID(),meta:{displayName:"Grok",capabilities:{resume:true}},buildArgs(n,e){let{model:t,effort:r}=$t(e.model),o=e.effort??r,i=e.resumeSessionId?["--resume",e.resumeSessionId]:e.providerSessionId?["--session-id",e.providerSessionId]:[],s=t?["--model",t]:[],a=t?Le("grok").some(E=>E.id===t):false,d=t&&a?st("grok",t):[],c=!o||d.length===0||d.includes(o)?o:void 0,l=Xi(c),f=e.additionalArgs??[],g=E=>f.some(T=>T===E||T.startsWith(`${E}=`)),m=e.providerOptions,v=m?.alwaysApprove,y=m?.sandbox,_=g("--permission-mode")?[]:Ki(e.mode),w=g("--always-approve")?[]:Vi(v),k=g("--sandbox")?[]:Ji(y);return {args:["--no-auto-update",...i,"--single",n,"--output-format","streaming-json","--no-alt-screen",...s,...l,..._,...w,...k,...f]}},extractText(n){let e=[],t=false;for(let r of n.split(`
14
+ `).flatMap(on))typeof r.type=="string"&&(t=true),r.type==="text"&&typeof r.data=="string"&&e.push(r.data);return e.length>0?e.join(""):t?"":n.trim()},extractFailure(n){for(let e of on(n))if(e.type==="error"){let t=es(e);return Zi(sn(e))?new exports.RateLimitError(t,or):new exports.ProviderError(t,or)}return null},interpretExit(n,e){if(n===0)return null;let t=ts(e)||`Grok CLI exited with code ${n}.`;return Zi(e)?new exports.RateLimitError(t,or):new exports.ProviderError(t,or)},parseResultMeta(n){let t=n.split(`
15
+ `).flatMap(on).find(r=>r.type==="end");return t?{usage:Ac(t),model:Tc(t)}:{usage:Rc(n),model:null}},parseEvent(n,e){let t=e??new Date().toISOString();return on(n).flatMap(r=>bc(t,r))},suppressOutputLine(n){let e=n.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let t=JSON.parse(e);return dn(t)&&typeof t.type=="string"?kc.has(t.type):!1}catch{return false}}};});function cn(n,e,t){if(t){let r=exports.BUILTIN_ADAPTERS[t];if(r?.parseEvent)return r.parseEvent(e,n);let o=Pc[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 Pc,Xe=I(()=>{p();Xr();Yr();Qr();Zr();to();Qi();no();Xr();Yr();Qr();Zr();to();no();Dt();exports.BUILTIN_ADAPTERS={codex:exports.codexAdapter,claude:exports.claudeAdapter,opencode:exports.opencodeAdapter,antigravity:eo,copilot:exports.copilotAdapter,grok:exports.grokAdapter},Pc={gemini:Yi};});var Ut,ro=I(()=>{p();Ut=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 ns(n,e){if(n===void 0||n==="")return e;let t=parseInt(n,10);return Number.isNaN(t)?e:t}function oo(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 rs(n=process.env){return {queryMs:ns(n.CREWX_TIMEOUT_QUERY,288e5),executeMs:ns(n.CREWX_TIMEOUT_EXECUTE,288e5),idleMs:oo(n)??6e5}}var ar=I(()=>{p();});function Sc(n){let e=n.split(`
16
+ `).filter(d=>d.trim()),t=[],r=[],o=[],i=[],s=[],a=null;for(let d of e)try{let c=JSON.parse(d);if(c.type==="assistant"&&Array.isArray(c.message?.content))for(let l of c.message.content)l.type==="text"&&typeof l.text=="string"&&l.text.trim()&&t.push(l.text.trim());if(c.type==="message"&&c.role==="assistant"&&c.delta===!0&&typeof c.content=="string"&&r.push(c.content),c.type==="assistant.message"&&typeof c.data?.content=="string"){let l=c.data.content;l.trim()&&o.push(l.trim());}if(c.type==="item.completed"&&(c.item?.type==="message"||c.item?.type==="agent_message")&&typeof c.item?.text=="string"){let l=c.item.text;l.trim()&&i.push(l.trim());}if(c.type==="text"&&typeof c.part?.text=="string"){let l=c.part.text;l.trim()&&s.push(l.trim());}c.type==="result"&&typeof c.result=="string"&&(a=c.result);}catch{}return t.length>0?t.join(`
17
17
 
18
18
  `):r.length>0?r.join(""):o.length>0?o.join(`
19
19
 
20
- `):s.length>0?s.join(`
20
+ `):i.length>0?i.join(`
21
21
 
22
- `):i.length>0?i.join(""):a||n.trim()}function Tl(n){let e=$e(n);return e?{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0}:null}function Al(n,e,t=process.platform){return n==="copilot"&&t==="win32"&&e instanceof exports.ProviderError&&e.message.includes('CLI command "copilot" not found')}function ri(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=pt({command:n,env:f,cwd:g,allowShellFallback:true}),_=gt(m,e),y=child_process.spawn(_.command,_.argv,{env:f,cwd:o?.cwd,stdio:["pipe","pipe","pipe"],shell:_.shell??false,windowsHide:_.windowsHide,detached:process.platform!=="win32"});y.stdin.on("error",S=>{S.code!=="EPIPE"&&o?.onOutput?.(`stdin error: ${S.message}`,"stderr");}),s!==void 0&&y.stdin.write(s),y.stdin.end(),y.pid!==void 0&&o?.onPid?.(y.pid);let v=false,w=false,k=S=>{if(y.pid!==void 0)try{process.platform==="win32"?y.kill(S):process.kill(-y.pid,S);}catch{}},A=()=>{k("SIGKILL");},$=setTimeout(()=>{v||(w=true,R?.stop(),k("SIGTERM"),setTimeout(A,pn).unref());},l);$.unref();let R=c>0?new Ft({timeoutMs:c,onIdle:()=>{if(v)return;v=true,clearTimeout($),k("SIGTERM"),setTimeout(A,pn).unref();let S=Math.round(c/6e4);j(new mt(`${t} produced no output for ${S}m (idle timeout). Process killed. The CLI may be waiting on interactive input or stuck \u2014 check the prompt or retry.`,t));}}):null;R?.start();let V=new string_decoder.StringDecoder("utf8"),P=new string_decoder.StringDecoder("utf8"),F="",se="",K="",ne="",j=S=>{S instanceof Error&&(S.stdout=F),d(S);};y.stdout.on("data",S=>{R?.refresh();let Z=V.write(S);F+=Z,K+=Z;let H=K.split(`
23
- `);K=H.pop()??"";for(let L of H)if(L.trim()&&(o?.onOutput?.(L,"stdout"),i?.extractFailure)){let J=i.extractFailure(L);if(J){v=true,clearTimeout($),R?.stop(),k("SIGTERM"),setTimeout(A,pn).unref(),j(J);return}}}),y.stderr.on("data",S=>{R?.refresh();let Z=P.write(S);se+=Z,ne+=Z;let H=ne.split(`
24
- `);ne=H.pop()??"";for(let L of H)L.trim()&&o?.onOutput?.(L,"stderr");}),y.on("error",S=>{v=true,clearTimeout($),R?.stop(),S.code==="ENOENT"?j(new exports.ProviderError(`CLI command "${n}" not found. Is ${t} installed?`,t)):j(new exports.ProviderError(`Spawn error: ${S.message}`,t));}),y.on("close",(S,Z)=>{if(v)return;v=true,clearTimeout($),R?.stop();let H=V.end(),L=P.end();H&&(F+=H,K+=H),L&&(se+=L,ne+=L),K.trim()&&o?.onOutput?.(K,"stdout"),ne.trim()&&o?.onOutput?.(ne,"stderr");let J=S??0;if(o?.onExitCode?.(J),w)return j(new yt(`Total runtime exceeded ${l}ms; process killed.`,t));if(Z)return j(new exports.ProviderError(`Process terminated by signal ${Z}`,t,{code:"PROVIDER_CRASHED",kind:"permanent"}));if(J!==0){if(i?.interpretExit){let Q=i.interpretExit(J,se);if(Q){j(Q);return}}j(new exports.ProviderError(`Process exited with code ${J}: ${se.slice(0,500)}`,t));return}let ie;try{ie=i?i.extractText(F):El(F);}catch(Q){j(Q instanceof Error?Q:new exports.ProviderError(String(Q),t));return}a({stdout:F,parsed:ie});});})}function Ue(n,e){oi.set(n,e);}function Be(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=oi.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 io(o,i,n,e)}throw new exports.ProviderError(`Unsupported provider namespace: "${r}". Register a factory with registerProviderFactory('${r}', factory).`,n)}function si(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 pn;exports.ClientToolCallRequiredError=void 0;var oi,io,Ie=O(()=>{p();Dt();ft();Ve();Lt();oo();dr();Lt();pn=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"},oi=new Map;io=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.prepareProviderSession(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.prepareProviderSession(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 si(e,this.additionalArgsProvider,{providerStr:this.providerStr,providerId:this.providerId})}prepareProviderSession(e){if(!this.adapter.createSessionId)return e;if(e.resumeSessionId)return e.onProviderSessionId?.(e.resumeSessionId),{...e,providerSessionId:void 0};let t=this.adapter.createSessionId();return e.onProviderSessionId?.(t),{...e,providerSessionId:t}}composeMessage(e,t){return t?.systemPrompt?`${t.systemPrompt}
22
+ `):s.length>0?s.join(""):a||n.trim()}function Ic(n){let e=Ue(n);return e?{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0}:null}function Oc(n,e,t=process.platform){return n==="copilot"&&t==="win32"&&e instanceof exports.ProviderError&&e.message.includes('CLI command "copilot" not found')}function is(n,e,t,r,o,i,s){return new Promise((a,d)=>{let c=o?.timeoutMs??288e5,l=o?.idleMs??6e5,f={...process.env,...o?.env??{}},g=o?.cwd??process.cwd(),m=lt({command:n,env:f,cwd:g,allowShellFallback:true}),v=ut(m,e),y=child_process.spawn(v.command,v.argv,{env:f,cwd:o?.cwd,stdio:["pipe","pipe","pipe"],shell:v.shell??false,windowsHide:v.windowsHide,detached:process.platform!=="win32"});y.stdin.on("error",S=>{S.code!=="EPIPE"&&o?.onOutput?.(`stdin error: ${S.message}`,"stderr");}),i!==void 0&&y.stdin.write(i),y.stdin.end(),y.pid!==void 0&&o?.onPid?.(y.pid);let _=false,w=false,k=S=>{if(y.pid!==void 0)try{process.platform==="win32"?y.kill(S):process.kill(-y.pid,S);}catch{}},E=()=>{k("SIGKILL");},D=setTimeout(()=>{_||(w=true,R?.stop(),k("SIGTERM"),setTimeout(E,ln).unref());},c);D.unref();let R=l>0?new Ut({timeoutMs:l,onIdle:()=>{if(_)return;_=true,clearTimeout(D),k("SIGTERM"),setTimeout(E,ln).unref();let S=Math.round(l/6e4);W(new gt(`${t} produced no output for ${S}m (idle timeout). Process killed. The CLI may be waiting on interactive input or stuck \u2014 check the prompt or retry.`,t));}}):null;R?.start();let V=new string_decoder.StringDecoder("utf8"),P=new string_decoder.StringDecoder("utf8"),F="",se="",K="",te="",W=S=>{S instanceof Error&&(S.stdout=F),d(S);};y.stdout.on("data",S=>{R?.refresh();let Z=V.write(S);F+=Z,K+=Z;let H=K.split(`
23
+ `);K=H.pop()??"";for(let L of H)if(L.trim()&&(o?.onOutput?.(L,"stdout"),s?.extractFailure)){let j=s.extractFailure(L);if(j){_=true,clearTimeout(D),R?.stop(),k("SIGTERM"),setTimeout(E,ln).unref(),W(j);return}}}),y.stderr.on("data",S=>{R?.refresh();let Z=P.write(S);se+=Z,te+=Z;let H=te.split(`
24
+ `);te=H.pop()??"";for(let L of H)L.trim()&&o?.onOutput?.(L,"stderr");}),y.on("error",S=>{_=true,clearTimeout(D),R?.stop(),S.code==="ENOENT"?W(new exports.ProviderError(`CLI command "${n}" not found. Is ${t} installed?`,t)):W(new exports.ProviderError(`Spawn error: ${S.message}`,t));}),y.on("close",(S,Z)=>{if(_)return;_=true,clearTimeout(D),R?.stop();let H=V.end(),L=P.end();H&&(F+=H,K+=H),L&&(se+=L,te+=L),K.trim()&&o?.onOutput?.(K,"stdout"),te.trim()&&o?.onOutput?.(te,"stderr");let j=S??0;if(o?.onExitCode?.(j),w)return W(new ft(`Total runtime exceeded ${c}ms; process killed.`,t));if(Z)return W(new exports.ProviderError(`Process terminated by signal ${Z}`,t,{code:"PROVIDER_CRASHED",kind:"permanent"}));if(j!==0){if(s?.interpretExit){let Y=s.interpretExit(j,se);if(Y){W(Y);return}}W(new exports.ProviderError(`Process exited with code ${j}: ${se.slice(0,500)}`,t));return}let ae;try{ae=s?s.extractText(F):Sc(F);}catch(Y){W(Y instanceof Error?Y:new exports.ProviderError(String(Y),t));return}a({stdout:F,parsed:ae});});})}function Be(n,e){ss.set(n,e);}function Fe(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,i=ss.get(r);if(i)return i(o,n);if(r==="cli"){let s=exports.BUILTIN_ADAPTERS[o];if(!s)throw new exports.ProviderError(`Unknown CLI provider id: "${o}". Supported: ${Object.keys(exports.BUILTIN_ADAPTERS).join(", ")}`,n);return new io(o,s,n,e)}throw new exports.ProviderError(`Unsupported provider namespace: "${r}". Register a factory with registerProviderFactory('${r}', factory).`,n)}function as(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 ln;exports.ClientToolCallRequiredError=void 0;var ss,io,Se=I(()=>{p();Mt();pt();Xe();Nt();ro();ar();Nt();ln=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"},ss=new Map;io=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.prepareProviderSession(this.applyAdditionalArgs(t)),{args:i,stdinMessage:s,env:a}=this.adapter.buildArgs(r,o,true);o.onCommand?.(`${this.adapter.command} ${i.join(" ")}`);let d=a?{...o,env:{...o.env??{},...a}}:o,{stdout:c,parsed:l}=await this.runProcess(i,d,s);return this.handleResultMeta(c,o),l}async query(e,t){let r=this.composeMessage(e,t),o=this.prepareProviderSession(this.applyAdditionalArgs(t)),{args:i,stdinMessage:s,env:a}=this.adapter.buildArgs(r,o,false);o.onCommand?.(`${this.adapter.command} ${i.join(" ")}`);let d=a?{...o,env:{...o.env??{},...a}}:o,{stdout:c,parsed:l}=await this.runProcess(i,d,s);return this.handleResultMeta(c,o),l}applyAdditionalArgs(e){return as(e,this.additionalArgsProvider,{providerStr:this.providerStr,providerId:this.providerId})}prepareProviderSession(e){if(!this.adapter.createSessionId)return e;if(e.resumeSessionId)return e.onProviderSessionId?.(e.resumeSessionId),{...e,providerSessionId:void 0};let t=this.adapter.createSessionId();return e.onProviderSessionId?.(t),{...e,providerSessionId:t}}composeMessage(e,t){return t?.systemPrompt?`${t.systemPrompt}
25
25
 
26
26
  ---
27
27
 
28
- ${e}`:e}async runProcess(e,t,r){try{return await ri(this.adapter.command,e,this.providerStr,this.providerId,t,r,this.adapter)}catch(o){if(Al(this.providerId,o)){let s=e[0]==="copilot"?e:["copilot",...e];try{return await ri("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=Tl(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 Ao(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 xe(n,e){try{let t=JSON.parse(n);if(t!=null&&typeof t=="object"&&typeof t.type=="string"&&cc.has(t.type)){let r=e??new Date().toISOString();return [{...t,timestamp:t.timestamp||r}]}}catch{}return []}var cc,Je=O(()=>{p();cc=new Set(["text","tool_use","tool_result","error","running_instruction","agent_call"]);});var Hi,qi;exports.VercelProviderRuntime=void 0;var Lo=O(()=>{p();Ie();Hi=10,qi=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??Hi,qi);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 _=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:_,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??Hi,qi),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(_=>({type:"tool-result",toolCallId:_.toolCallId,toolName:_.toolName,result:typeof _.result=="string"?_.result:JSON.stringify(_.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}=ae("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}=ae("@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}=ae("@ai-sdk/openai");return i({apiKey:r||process.env.OPENAI_API_KEY,...o&&{baseURL:o}})(s)}case "api/anthropic":{let{createAnthropic:i}=ae("@ai-sdk/anthropic");return i({apiKey:r||process.env.ANTHROPIC_API_KEY,...o&&{baseURL:o}})(s)}case "api/google":{let{createGoogleGenerativeAI:i}=ae("@ai-sdk/google");return i({apiKey:r||process.env.GOOGLE_API_KEY})(s)}default:throw new exports.ProviderError(`Unsupported API provider: ${t}`,t)}}};});var Gi={};Un(Gi,{registerApiProviders:()=>zi});function zi(n){Ue("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 $o=O(()=>{p();Ie();Lo();});exports.AcpProtocolError=void 0;var Uo=O(()=>{p();exports.AcpProtocolError=class extends Error{constructor(t,r,o){super(t);this.code=r;this.data=o;}code;data;name="AcpProtocolError"};});var Ru,bu,Ki,Vi,Pu;exports.AcpConnection=void 0;var wr=O(()=>{p();Dt();Uo();Ie();oo();dr();Ru=-32e3,bu=2e3,Ki=3e4,Vi=1e4,Pu=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 w=pt({command:t.command,env:o,cwd:s,allowShellFallback:r});i=gt(w,t.args);}catch(w){throw new exports.ProviderError(w instanceof Error?w.message:String(w),"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",w=>{let k=w.toString();this.collectedStderr+=k,this.stderrBuffer+=k;let A=this.stderrBuffer.split(`
29
- `);this.stderrBuffer=A.pop()??"";for(let E of A)E.trim()&&this.options.onStderr?.(E);}),this.proc=a;let d=this.options.idleMs??6e5;d>0&&(this.idlePromise=new Promise((w,k)=>{this.idleReject=k;}),this.idlePromise.catch(()=>{}),this.idleWatchdog=new Ft({timeoutMs:d,onIdle:()=>{let w=Math.round(d/6e4),k=new mt(`acp produced no output for ${w}m (idle timeout). Process killed. The CLI may be waiting on interactive input or stuck \u2014 check the prompt or retry.`,"acp");this.idleReject?.(k),this.dispose();}}),this.idleWatchdog.start()),a.stdin.on("error",w=>{w.code!=="EPIPE"&&this.options.onStderr?.(`ACP stdin error: ${w.message}`);});let l=new WritableStream({write:w=>new Promise((k,A)=>{a.stdin.write(w,E=>{E?A(E):k();});}),close:()=>{a.stdin.end();}}),c=new ReadableStream({start:w=>{a.stdout.on("data",k=>{this.idleWatchdog?.refresh(),w.enqueue(new Uint8Array(k));}),a.stdout.on("end",()=>{w.close();}),a.stdout.on("error",k=>{w.error(k);});}}),f=sdk.ndJsonStream(l,c),g=this,m=new sdk.ClientSideConnection(w=>({requestPermission:async k=>{if(g.options.configOptions?.allow_all!==void 0){let A=k.options;if(Array.isArray(A)&&A.length>0)return {outcome:{outcome:"selected",optionId:(A.find($=>$.kind==="allow_once")??A.find($=>$.kind?.startsWith("allow_"))??A[0]).optionId}}}return {outcome:{outcome:"cancelled"}}},sessionUpdate:async k=>{g.pendingUpdateCallback?.(k);}}),f);this.sdkConnection=m;let _=new Promise((w,k)=>{a.on("error",A=>{if(A.code==="ENOENT"){let $=t.command==="npx"&&t.args.length>0?`@agentclientprotocol/${t.args[0]}`:t.command;k(new exports.ProviderError(`ACP command "${t.command}" not found. Is the ACP adapter installed? Try: npm install -g ${$}`,"acp"));}else k(new exports.ProviderError(`ACP spawn error: ${A.message}`,"acp"));});}),y=this.doInitialize(m,e),v=new Promise((w,k)=>{setTimeout(()=>{k(new exports.AcpProtocolError(`ACP connect timeout after ${Ki}ms. The ACP adapter may not be installed or may require interactive setup.`));},Ki).unref();});await Promise.race([y,v,_]);}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 ${Vi}ms`));},Vi).unref();});return Promise.race([t,r])}isAuthError(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code===Ru}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??Pu,d=false,l=s.prompt({sessionId:e,prompt:t}).finally(()=>{d=true;}),c=new Promise((m,_)=>{setTimeout(()=>{s.cancel({sessionId:e}).catch(()=>{}),_(new yt(`ACP prompt timeout after ${a}ms`,"acp"));},a).unref();}),f=new Promise((m,_)=>{let y=(A,E,$)=>{if(d)return;let R=E!=null?`signal=${E}`:`code=${String(A)}`;_(new exports.ProviderError(`ACP process terminated unexpectedly (${R}) [${$}]: ${this.collectedStderr.slice(-500)}`,"acp"));},v=(A,E)=>y(A,E,"exit"),w=(A,E)=>y(A,E,"close");i.once("exit",v),i.once("close",w);let k=()=>{i.off("exit",v),i.off("close",w);};l.then(k,k);}),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");},bu);});}get isConnected(){return !this.disposed&&this.sdkConnection!==null&&this.proc!==null}};});function Ji(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 Cu;exports.AcpProviderRuntime=void 0;var Bo=O(()=>{p();Je();wr();Cu={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(`
28
+ ${e}`:e}async runProcess(e,t,r){try{return await is(this.adapter.command,e,this.providerStr,this.providerId,t,r,this.adapter)}catch(o){if(Oc(this.providerId,o)){let i=e[0]==="copilot"?e:["copilot",...e];try{return await is("gh",i,this.providerStr,this.providerId,t,r,this.adapter)}catch(s){throw this.recoverPartialUsage(s,t),s}}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 s=Ic(e);s&&t?.onUsage&&t.onUsage(s);return}let{usage:r,model:o}=this.adapter.parseResultMeta(e);r&&t?.onUsage&&t.onUsage(r);let i=o??(this.providerId==="opencode"?t?.model??null:null);i&&t?.onModel&&t.onModel(i);}};});function Ao(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 Ee(n,e){try{let t=JSON.parse(n);if(t!=null&&typeof t=="object"&&typeof t.type=="string"&&vl.has(t.type)){let r=e??new Date().toISOString();return [{...t,timestamp:t.timestamp||r}]}}catch{}return []}var vl,Ye=I(()=>{p();vl=new Set(["text","tool_use","tool_result","error","running_instruction","agent_call"]);});var Gs,Ks;exports.VercelProviderRuntime=void 0;var Lo=I(()=>{p();Se();Gs=10,Ks=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:i}=await import('ai'),s=this.convertTools(r?.tools??[],i),a=this.createModel(r?.model),d=Math.min(r?.maxSteps??this.config.maxSteps??Gs,Ks);try{let c=0,l=await o({model:a,system:r?.systemPrompt??void 0,prompt:e,tools:s,maxSteps:d,...this.config.temperature!==void 0&&{temperature:this.config.temperature},...this.config.maxTokens!==void 0&&{maxTokens:this.config.maxTokens},onStepFinish:g=>{if(c++,!!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 v=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:v,is_error:!1}]}}),"stdout");}}}}),f=new Set((r?.tools??[]).filter(g=>!g.execute).map(g=>g.name));if(l.finishReason==="tool-calls"&&Array.isArray(l.toolCalls)&&l.toolCalls.length>0){let g=l.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:l.response?.messages??[],toolDefinitions:r?.tools??[],maxSteps:d,systemPrompt:r?.systemPrompt,modelOverride:r?.model})}}if(r?.onUsage&&l.usage){let g={inputTokens:l.usage.promptTokens??0,outputTokens:l.usage.completionTokens??0,cachedInputTokens:0,costUsd:0};r.onUsage(g);}return r?.onModel&&r.onModel(r.model??this.config.model),l.text??""}catch(c){throw c instanceof exports.ClientToolCallRequiredError?c:c.status===401?new exports.ProviderError(`Authentication failed for ${this.config.provider}. Check your API key.`,this.config.provider):c.status===429?new exports.ProviderError(`Rate limit exceeded for ${this.config.provider}.`,this.config.provider):new exports.ProviderError(`Provider error: ${c.message}`,this.config.provider)}}async continueWithToolResults(e,t,r){let{generateText:o,tool:i}=await import('ai'),s=this.convertTools(e.toolDefinitions,i),a=this.createModel(e.modelOverride),d=Math.min(e.maxSteps??this.config.maxSteps??Gs,Ks),c=[{role:"user",content:e.userMessage},...e.responseMessages,{role:"tool",content:t.map(l=>({type:"tool-result",toolCallId:l.toolCallId,toolName:l.toolName,result:typeof l.result=="string"?l.result:JSON.stringify(l.result)}))}];try{let l=await o({model:a,system:e.systemPrompt??void 0,messages:c,tools:s,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(l.finishReason==="tool-calls"&&Array.isArray(l.toolCalls)&&l.toolCalls.length>0){let g=l.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(v=>({type:"tool-result",toolCallId:v.toolCallId,toolName:v.toolName,result:typeof v.result=="string"?v.result:JSON.stringify(v.result)}))},...l.response?.messages??[]],toolDefinitions:e.toolDefinitions,maxSteps:e.maxSteps,systemPrompt:e.systemPrompt,modelOverride:e.modelOverride})}}return r?.onUsage&&l.usage&&r.onUsage({inputTokens:l.usage.promptTokens??0,outputTokens:l.usage.completionTokens??0,cachedInputTokens:0,costUsd:0}),r?.onModel&&r.onModel(e.modelOverride??this.config.model),l.text??""}catch(l){throw l instanceof exports.ClientToolCallRequiredError?l:new exports.ProviderError(`Provider error: ${l.message}`,this.config.provider)}}convertTools(e,t){let{z:r}=de("zod"),o={};for(let i of e){let s=this.jsonSchemaToZod(i.parameters??{},r);i.execute?o[i.name]=t({description:i.description,parameters:s,execute:async a=>i.execute(a)}):o[i.name]=t({description:i.description,parameters:s});}return o}jsonSchemaToZod(e,t){if(!e||!e.properties)return t.object({});let r={},o=e.properties,i=e.required??[];for(let[s,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)),i.includes(s)||(d=d.optional()),r[s]=d;}return t.object(r)}createModel(e){let{provider:t,apiKey:r,baseURL:o}=this.config,i=e||this.config.model;switch(t){case "api/openrouter":{let{createOpenAI:s}=de("@ai-sdk/openai");return s({apiKey:r||process.env.OPENROUTER_API_KEY,baseURL:o||"https://openrouter.ai/api/v1"})(i)}case "api/openai":{let{createOpenAI:s}=de("@ai-sdk/openai");return s({apiKey:r||process.env.OPENAI_API_KEY,...o&&{baseURL:o}})(i)}case "api/anthropic":{let{createAnthropic:s}=de("@ai-sdk/anthropic");return s({apiKey:r||process.env.ANTHROPIC_API_KEY,...o&&{baseURL:o}})(i)}case "api/google":{let{createGoogleGenerativeAI:s}=de("@ai-sdk/google");return s({apiKey:r||process.env.GOOGLE_API_KEY})(i)}default:throw new exports.ProviderError(`Unsupported API provider: ${t}`,t)}}};});var Js={};$n(Js,{registerApiProviders:()=>Vs});function Vs(n){Be("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 $o=I(()=>{p();Se();Lo();});exports.AcpProtocolError=void 0;var Uo=I(()=>{p();exports.AcpProtocolError=class extends Error{constructor(t,r,o){super(t);this.code=r;this.data=o;}code;data;name="AcpProtocolError"};});var Lu,$u,Xs,Ys,Uu;exports.AcpConnection=void 0;var hr=I(()=>{p();Mt();Uo();Se();ro();ar();Lu=-32e3,$u=2e3,Xs=3e4,Ys=1e4,Uu=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??{}},i=this.options.cwd??process.cwd(),s;try{let w=lt({command:t.command,env:o,cwd:i,allowShellFallback:r});s=ut(w,t.args);}catch(w){throw new exports.ProviderError(w instanceof Error?w.message:String(w),"acp")}let a=child_process.spawn(s.command,s.argv,{stdio:["pipe","pipe","pipe"],env:o,cwd:this.options.cwd,shell:s.shell??false,windowsHide:true,detached:process.platform!=="win32"});a.pid!==void 0&&this.options.onPid?.(a.pid),a.stderr.on("data",w=>{let k=w.toString();this.collectedStderr+=k,this.stderrBuffer+=k;let E=this.stderrBuffer.split(`
29
+ `);this.stderrBuffer=E.pop()??"";for(let T of E)T.trim()&&this.options.onStderr?.(T);}),this.proc=a;let d=this.options.idleMs??6e5;d>0&&(this.idlePromise=new Promise((w,k)=>{this.idleReject=k;}),this.idlePromise.catch(()=>{}),this.idleWatchdog=new Ut({timeoutMs:d,onIdle:()=>{let w=Math.round(d/6e4),k=new gt(`acp produced no output for ${w}m (idle timeout). Process killed. The CLI may be waiting on interactive input or stuck \u2014 check the prompt or retry.`,"acp");this.idleReject?.(k),this.dispose();}}),this.idleWatchdog.start()),a.stdin.on("error",w=>{w.code!=="EPIPE"&&this.options.onStderr?.(`ACP stdin error: ${w.message}`);});let c=new WritableStream({write:w=>new Promise((k,E)=>{a.stdin.write(w,T=>{T?E(T):k();});}),close:()=>{a.stdin.end();}}),l=new ReadableStream({start:w=>{a.stdout.on("data",k=>{this.idleWatchdog?.refresh(),w.enqueue(new Uint8Array(k));}),a.stdout.on("end",()=>{w.close();}),a.stdout.on("error",k=>{w.error(k);});}}),f=sdk.ndJsonStream(c,l),g=this,m=new sdk.ClientSideConnection(w=>({requestPermission:async k=>{if(g.options.configOptions?.allow_all!==void 0){let E=k.options;if(Array.isArray(E)&&E.length>0)return {outcome:{outcome:"selected",optionId:(E.find(D=>D.kind==="allow_once")??E.find(D=>D.kind?.startsWith("allow_"))??E[0]).optionId}}}return {outcome:{outcome:"cancelled"}}},sessionUpdate:async k=>{g.pendingUpdateCallback?.(k);}}),f);this.sdkConnection=m;let v=new Promise((w,k)=>{a.on("error",E=>{if(E.code==="ENOENT"){let D=t.command==="npx"&&t.args.length>0?`@agentclientprotocol/${t.args[0]}`:t.command;k(new exports.ProviderError(`ACP command "${t.command}" not found. Is the ACP adapter installed? Try: npm install -g ${D}`,"acp"));}else k(new exports.ProviderError(`ACP spawn error: ${E.message}`,"acp"));});}),y=this.doInitialize(m,e),_=new Promise((w,k)=>{setTimeout(()=>{k(new exports.AcpProtocolError(`ACP connect timeout after ${Xs}ms. The ACP adapter may not be installed or may require interactive setup.`));},Xs).unref();});await Promise.race([y,_,v]);}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,i)=>{setTimeout(()=>{i(new exports.AcpProtocolError(`ACP session/new timeout after ${Ys}ms`));},Ys).unref();});return Promise.race([t,r])}isAuthError(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code===Lu}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(i=>(i.vars??[]).filter(s=>!s.optional&&!process.env[s.name]).map(s=>s.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 i=this.sdkConnection,s=this.proc,a=o??Uu,d=false,c=i.prompt({sessionId:e,prompt:t}).finally(()=>{d=true;}),l=new Promise((m,v)=>{setTimeout(()=>{i.cancel({sessionId:e}).catch(()=>{}),v(new ft(`ACP prompt timeout after ${a}ms`,"acp"));},a).unref();}),f=new Promise((m,v)=>{let y=(E,T,D)=>{if(d)return;let R=T!=null?`signal=${T}`:`code=${String(E)}`;v(new exports.ProviderError(`ACP process terminated unexpectedly (${R}) [${D}]: ${this.collectedStderr.slice(-500)}`,"acp"));},_=(E,T)=>y(E,T,"exit"),w=(E,T)=>y(E,T,"close");s.once("exit",_),s.once("close",w);let k=()=>{s.off("exit",_),s.off("close",w);};c.then(k,k);}),g=[c,l,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 i=()=>{clearTimeout(s),o();};e.once("close",i),e.once("error",i);try{r("SIGTERM");}catch{i();return}let s=setTimeout(()=>{r("SIGKILL");},$u);});}get isConnected(){return !this.disposed&&this.sdkConnection!==null&&this.proc!==null}};});function Qs(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 Bu;exports.AcpProviderRuntime=void 0;var Bo=I(()=>{p();Ye();hr();Bu={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 i=this.adapter.buildSpawnEnv?.(t?.model??""),s=i?{...t?.env,...i}:t?.env,a=new exports.AcpConnection({spawn:this.adapter.spawn,env:s,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}),c=await a.newSession(d);await this.applySessionOptions(a,c,t);let l=this.composePrompt(e,t),f=[],g=await a.prompt(c,l,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(i){console.warn(`[acp] setModel(${r.model}) failed: ${i instanceof Error?i.message:String(i)}`);}}if(r?.mode){let o=this.adapter.resolveMode?.(r.mode)??r.mode;if(o)try{await e.setMode(t,o);}catch(i){console.warn(`[acp] setMode(${o}) failed: ${i instanceof Error?i.message:String(i)}`);}}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(i){console.warn(`[acp] setConfigOption(${o.configId}) effort failed: ${i instanceof Error?i.message:String(i)}`);}}if(r?.configOptions)for(let[o,i]of Object.entries(r.configOptions))try{await e.setConfigOption(t,o,i);}catch(s){console.warn(`[acp] setConfigOption(${o}) failed, retrying: ${s instanceof Error?s.message:String(s)}`);try{await new Promise(a=>setTimeout(a,500)),await e.setConfigOption(t,o,i);}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(`
30
30
 
31
- `)}]}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=Ao(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(`
31
+ `)}]}handleUpdate(e,t,r){let o=e.update;if(o.sessionUpdate==="agent_message_chunk"){let i=null;this.adapter.extractTextFromUpdate?i=this.adapter.extractTextFromUpdate(e):i=Ao(e),i!==null&&(r.push(i),t?.onOutput?.(i,"stdout"));}else if(o.sessionUpdate==="tool_call"){this.pushBlockBoundary(r);let i=new Date().toISOString(),s=o,a={title:s.title??"",kind:s.kind,rawInput:s.rawInput,rawOutput:s.rawOutput,locations:s.locations,_meta:s._meta},d=this.resolveToolCall(a),c={timestamp:i,type:"tool_use",toolUseId:s.toolCallId,toolName:d.toolName,toolInput:d.toolInput};t?.onTaskLog?.([c]);}else if(o.sessionUpdate==="tool_call_update"){let i=new Date().toISOString(),s=o;if(s.status==="completed"||s.status==="failed"){let d=this.extractResultPreview(s.rawOutput),c={timestamp:i,type:"tool_result",toolUseId:s.toolCallId,resultPreview:d,isError:s.status==="failed"};t?.onTaskLog?.([c]);}else if(s.rawInput!=null&&typeof s.rawInput=="object"&&Object.keys(s.rawInput).length>0){this.pushBlockBoundary(r);let d={title:s.title??"",kind:s.kind,rawInput:s.rawInput,rawOutput:s.rawOutput,locations:s.locations,_meta:s._meta},c=this.resolveToolCall(d),l={timestamp:i,type:"tool_use",toolUseId:s.toolCallId,toolName:c.toolName,toolInput:c.toolInput};t?.onTaskLog?.([l]);}}else o.sessionUpdate;}pushBlockBoundary(e){e.length===0||e[e.length-1].endsWith(`
32
32
 
33
33
  `)||e.push(`
34
34
 
35
- `);}resolveToolCall(e){let t=e._meta;if(t?.claudeCode?.toolName)return {toolName:t.claudeCode.toolName,toolInput:Ji(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=Cu[e.kind??""]??e.title??"unknown",o=Ji(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(`
36
- `)}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 Fo=O(()=>{p();Je();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:xe};});exports.codexAcpAdapter=void 0;var Wo=O(()=>{p();Je();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:xe};});var Ht;exports.copilotAcpAdapter=void 0;var jo=O(()=>{p();Je();Ht="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?z.resolve(n.cwd):process.cwd(),mcpServers:[]}},yoloModeId:`${Ht}#autopilot`,buildEffortAction(n){return n?{type:"set_config_option",configId:"reasoning_effort",value:n}:null},resolveMode(n){return n.startsWith("https://")?n:{yolo:`${Ht}#autopilot`,default:`${Ht}#agent`,agent:`${Ht}#agent`,plan:`${Ht}#plan`,autopilot:`${Ht}#autopilot`}[n]??null},parseEvent:xe};});exports.opencodeAcpAdapter=void 0;var Ho=O(()=>{p();Je();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:[]}},buildEffortAction(n){return null},resolveMode(n){return n},parseEvent:xe};});exports.ACP_ADAPTERS=void 0;var Er=O(()=>{p();Fo();Wo();jo();Ho();Fo();Wo();jo();Ho();exports.ACP_ADAPTERS={codex:exports.codexAcpAdapter,claude:exports.claudeAcpAdapter,opencode:exports.opencodeAcpAdapter,copilot:exports.copilotAcpAdapter};});var Yi={};Un(Yi,{registerAcpProviders:()=>Xi});function Xi(n){if(n){Ue("acp",n);return}Ue("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 qo=O(()=>{p();Ie();Bo();Er();Ie();});function Su(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 zo=O(()=>{p();exports.McpHttpTransport=class{endpoint;headers;timeoutMs;constructor(e){let t=Su(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 Go=O(()=>{p();zo();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 Zi={};Un(Zi,{RemoteProviderRuntime:()=>exports.RemoteProviderRuntime,createRemoteProviderFactory:()=>Qi,resolveFileRemoteAgent:()=>Bu});function $u(n){let e=Oi.readFileSync(n,"utf-8"),t=jsYaml.load(e);return {agents:Array.isArray(t?.agents)?t.agents:void 0}}function Uu(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 Bu(n,e=$u,t=Oi.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=Uu(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=z.resolve(z.dirname(r),s.working_directory??".");return {agent:{...s,working_directory:a},provider:i}}function Qi(n,e=Be){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 Fu(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 Ko=O(()=>{p();Ie();Go();exports.RemoteProviderRuntime=class{manager;agentId;constructor(e,t,r=Be){this.agentId=t.external_agent_id??e,this.manager=new exports.RemoteAgentManager;let o=Fu(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(`
35
+ `);}resolveToolCall(e){let t=e._meta;if(t?.claudeCode?.toolName)return {toolName:t.claudeCode.toolName,toolInput:Qs(e.rawInput,e.locations)??(e.title||void 0)};if(this.adapter.parseToolCall){let i=this.adapter.parseToolCall(e);if(i)return {toolName:i.toolName??e.title??"unknown",toolInput:i.toolInput}}let r=Bu[e.kind??""]??e.title??"unknown",o=Qs(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(`
36
+ `)}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 Fo=I(()=>{p();Ye();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:Ee};});exports.codexAcpAdapter=void 0;var Wo=I(()=>{p();Ye();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:Ee};});var Wt;exports.copilotAcpAdapter=void 0;var jo=I(()=>{p();Ye();Wt="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?z.resolve(n.cwd):process.cwd(),mcpServers:[]}},yoloModeId:`${Wt}#autopilot`,buildEffortAction(n){return n?{type:"set_config_option",configId:"reasoning_effort",value:n}:null},resolveMode(n){return n.startsWith("https://")?n:{yolo:`${Wt}#autopilot`,default:`${Wt}#agent`,agent:`${Wt}#agent`,plan:`${Wt}#plan`,autopilot:`${Wt}#autopilot`}[n]??null},parseEvent:Ee};});exports.opencodeAcpAdapter=void 0;var Ho=I(()=>{p();Ye();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:[]}},buildEffortAction(n){return null},resolveMode(n){return n},parseEvent:Ee};});exports.ACP_ADAPTERS=void 0;var xr=I(()=>{p();Fo();Wo();jo();Ho();Fo();Wo();jo();Ho();exports.ACP_ADAPTERS={codex:exports.codexAcpAdapter,claude:exports.claudeAcpAdapter,opencode:exports.opencodeAcpAdapter,copilot:exports.copilotAcpAdapter};});var ea={};$n(ea,{registerAcpProviders:()=>Zs});function Zs(n){if(n){Be("acp",n);return}Be("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 qo=I(()=>{p();Se();Bo();xr();Se();});function Wu(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 zo=I(()=>{p();exports.McpHttpTransport=class{endpoint;headers;timeoutMs;constructor(e){let t=Wu(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 i=o.headers.get("content-type");if(i?.includes("application/json"))return await o.json();let s=await o.text();return {jsonrpc:"2.0",id:e.id,error:{code:-32600,message:`Unexpected response content-type: ${i}`,data:s}}}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 Go=I(()=>{p();zo();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",s={agentId:r.agentId??e,query:t.query};t.context&&(s.context=t.context),t.model&&(s.model=t.model),t.platform&&(s.platform=t.platform),t.messages?.length&&(s.messages=t.messages);try{let a=await this.callRemoteTool(e,o,s);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",s={agentId:r.agentId??e,task:t.task};t.context&&(s.context=t.context),t.model&&(s.model=t.model),t.platform&&(s.platform=t.platform),t.messages?.length&&(s.messages=t.messages);try{let a=await this.callRemoteTool(e,o,s);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 i={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 s=await o.send(i);if(s.error)throw new Error(s.error.message||"MCP server returned an error");return s.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 na={};$n(na,{RemoteProviderRuntime:()=>exports.RemoteProviderRuntime,createRemoteProviderFactory:()=>ta,resolveFileRemoteAgent:()=>Ju});function Ku(n){let e=Ds.readFileSync(n,"utf-8"),t=jsYaml.load(e);return {agents:Array.isArray(t?.agents)?t.agents:void 0}}function Vu(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 Ju(n,e=Ku,t=Ds.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 i=e(r).agents?.find(d=>d.id===n.external_agent_id);if(!i)throw new Error(`Agent "${n.external_agent_id}" not found in ${r}`);let s=Vu(i);if(!s)throw new Error(`Agent "${n.external_agent_id}" in ${r} has no provider configured`);if(s.startsWith("remote/"))throw new Error(`Chained remotes not allowed: ${n.id} \u2192 ${s}`);let a=z.resolve(z.dirname(r),i.working_directory??".");return {agent:{...i,working_directory:a},provider:s}}function ta(n,e=Fe){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 Xu(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 Ko=I(()=>{p();Se();Go();exports.RemoteProviderRuntime=class{manager;agentId;constructor(e,t,r=Fe){this.agentId=t.external_agent_id??e,this.manager=new exports.RemoteAgentManager;let o=Xu(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(`
37
37
  `)}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(`
38
- `)}};});var ra={};Un(ra,{PluginProviderRuntime:()=>exports.PluginProviderRuntime,createPluginProviderFactory:()=>na});function na(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 ea(n,e,t,r){let o=n.map(s=>s.replace(/\{model\}/g,e));return r&&o.push(t),o}function ju(n){if(!n||typeof n!="string")throw new Error("Plugin provider requires a cli_command")}function ta(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 Hu(n){for(let{pattern:e}of n)if(typeof e!="string")throw new Error("Error pattern must be a string")}function qu(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 Vo=O(()=>{p();Ie();Dt();exports.PluginProviderRuntime=class{constructor(e,t){this.config=t;this.providerStr=`plugin/${e}`,ju(t.cli_command),ta(t.query_args),ta(t.execute_args),t.error_patterns&&Hu(t.error_patterns),t.env&&qu(t.env);}config;providerStr;async query(e,t){let r=t?.model??this.config.default_model??"default",o=ea(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=ea(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=pt({command:this.config.cli_command,env:a,cwd:process.cwd(),resolution:this.config.prefer_local_bin?"local_first":"global_first",allowShellFallback:true}),l=gt(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="",_="";c.stdout.on("data",v=>{let w=v.toString();f+=w,m+=w;let k=m.split(`
39
- `);m=k.pop()??"";for(let A of k)A.trim()&&t?.onOutput?.(A,"stdout");}),c.stderr.on("data",v=>{let w=v.toString();g+=w,_+=w;let k=_.split(`
40
- `);_=k.pop()??"";for(let A of k)A.trim()&&t?.onOutput?.(A,"stderr");});let y=setTimeout(()=>{c.kill("SIGTERM"),i(new exports.ProviderError(`Plugin provider "${this.providerStr}" timed out after ${o}ms`,this.providerStr));},o);c.on("error",v=>{if(clearTimeout(y),v.code==="ENOENT"){let w=this.config.not_installed_message??`CLI command "${this.config.cli_command}" not found. Is ${this.config.id} installed?`;i(new exports.ProviderError(w,this.providerStr));}else i(new exports.ProviderError(`Spawn error: ${v.message}`,this.providerStr));}),c.on("close",v=>{clearTimeout(y),m.trim()&&t?.onOutput?.(m,"stdout"),_.trim()&&t?.onOutput?.(_,"stderr");let w=v??0;if(t?.onExitCode?.(w),this.config.error_patterns){let k=g||f;for(let A of this.config.error_patterns)if(k.includes(A.pattern)){i(new exports.ProviderError(A.message,this.providerStr));return}}if(v!==0){i(new exports.ProviderError(`Process exited with code ${v}: ${g.slice(0,500)}`,this.providerStr));return}s(f.trim());});})}};});p();p();p();function Va(n){let e=o=>o.replace(/[.+^${}()|[\]\\]/g,"\\$&"),r=n.split("/").map(o=>o==="**"?".*":o.split("*").map(e).join("[^/]*"));return new RegExp(`^${r.join("\\/")}$`)}function be(n,e){try{return Va(e).test(n)}catch{return false}}p();p();p();pe();var Ms=60,Wn=30,jn=80,jr="o200k_base",id=`
38
+ `)}};});var sa={};$n(sa,{PluginProviderRuntime:()=>exports.PluginProviderRuntime,createPluginProviderFactory:()=>ia});function ia(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 ra(n,e,t,r){let o=n.map(i=>i.replace(/\{model\}/g,e));return r&&o.push(t),o}function Qu(n){if(!n||typeof n!="string")throw new Error("Plugin provider requires a cli_command")}function oa(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 Zu(n){for(let{pattern:e}of n)if(typeof e!="string")throw new Error("Error pattern must be a string")}function ep(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 Vo=I(()=>{p();Se();Mt();exports.PluginProviderRuntime=class{constructor(e,t){this.config=t;this.providerStr=`plugin/${e}`,Qu(t.cli_command),oa(t.query_args),oa(t.execute_args),t.error_patterns&&Zu(t.error_patterns),t.env&&ep(t.env);}config;providerStr;async query(e,t){let r=t?.model??this.config.default_model??"default",o=ra(this.config.query_args,r,e,this.config.prompt_in_args),i=this.config.prompt_in_args?void 0:e;t?.onCommand?.(`${this.config.cli_command} ${o.join(" ")}`);let s=this.config.timeout?.query??6e5;return this.runProcess(o,t,i,s)}async execute(e,t){let r=t?.model??this.config.default_model??"default",o=ra(this.config.execute_args,r,e,this.config.prompt_in_args),i=this.config.prompt_in_args?void 0:e;t?.onCommand?.(`${this.config.cli_command} ${o.join(" ")}`);let s=this.config.timeout?.execute??6e5;return this.runProcess(o,t,i,s)}runProcess(e,t,r,o){return new Promise((i,s)=>{let a={...process.env,...this.config.env??{}},d=lt({command:this.config.cli_command,env:a,cwd:process.cwd(),resolution:this.config.prefer_local_bin?"local_first":"global_first",allowShellFallback:true}),c=ut(d,e),l=child_process.spawn(c.command,c.argv,{env:a,shell:c.shell??false,stdio:["pipe","pipe","pipe"],windowsHide:c.windowsHide});r!==void 0&&l.stdin.write(r),l.stdin.end(),l.pid!==void 0&&t?.onPid?.(l.pid);let f="",g="",m="",v="";l.stdout.on("data",_=>{let w=_.toString();f+=w,m+=w;let k=m.split(`
39
+ `);m=k.pop()??"";for(let E of k)E.trim()&&t?.onOutput?.(E,"stdout");}),l.stderr.on("data",_=>{let w=_.toString();g+=w,v+=w;let k=v.split(`
40
+ `);v=k.pop()??"";for(let E of k)E.trim()&&t?.onOutput?.(E,"stderr");});let y=setTimeout(()=>{l.kill("SIGTERM"),s(new exports.ProviderError(`Plugin provider "${this.providerStr}" timed out after ${o}ms`,this.providerStr));},o);l.on("error",_=>{if(clearTimeout(y),_.code==="ENOENT"){let w=this.config.not_installed_message??`CLI command "${this.config.cli_command}" not found. Is ${this.config.id} installed?`;s(new exports.ProviderError(w,this.providerStr));}else s(new exports.ProviderError(`Spawn error: ${_.message}`,this.providerStr));}),l.on("close",_=>{clearTimeout(y),m.trim()&&t?.onOutput?.(m,"stdout"),v.trim()&&t?.onOutput?.(v,"stderr");let w=_??0;if(t?.onExitCode?.(w),this.config.error_patterns){let k=g||f;for(let E of this.config.error_patterns)if(k.includes(E.pattern)){s(new exports.ProviderError(E.message,this.providerStr));return}}if(_!==0){s(new exports.ProviderError(`Process exited with code ${_}: ${g.slice(0,500)}`,this.providerStr));return}i(f.trim());});})}};});p();p();p();function ed(n){let e=o=>o.replace(/[.+^${}()|[\]\\]/g,"\\$&"),r=n.split("/").map(o=>o==="**"?".*":o.split("*").map(e).join("[^/]*"));return new RegExp(`^${r.join("\\/")}$`)}function be(n,e){try{return ed(e).test(n)}catch{return false}}p();p();p();ge();var Mi=60,Fn=30,Wn=80,Wr="o200k_base",pd=`
41
41
 
42
42
  ---
43
43
 
44
- `,Hn="system_prompt\\n\\n---\\n\\nmessage",Hr="message",ad=16384,dd=Object.keys(Wr__default.default.special_tokens),Ss,Os;function Ns(){return Ss??=jsTiktoken.getEncoding(jr),Ss}function ld(){return Os??=new lite.Tiktoken(Wr__default.default),Os}function cd(n){return dd.some(e=>n.includes(e))}function ud(n){return n===void 0?ad:!Number.isFinite(n)||n<=0?0:Math.floor(n)}function pd(n={}){let e=ud(n.pieceCacheMaxEntries),t=new Map,r=n.observePieceCache;return o=>{if(cd(o))return r?.({type:"full_encode",reason:"special_token"}),Ns().encode(o).length;let s=0,i=new RegExp(Wr__default.default.pat_str,"ug");for(let a of o.matchAll(i)){let d=a[0],l=t.get(d);if(l!==void 0){t.delete(d),t.set(d,l),r?.({type:"hit",piece:d,tokenCount:l}),s+=l;continue}let c=ld().encode(d).length;if(r?.({type:"miss",piece:d,tokenCount:c}),e>0){if(t.size>=e){let f=t.keys().next().value;if(f!==void 0){let g=t.get(f);t.delete(f),r?.({type:"evict",piece:f,tokenCount:g});}}t.set(d,c);}s+=c;}return s}}function qr(n){let e=n.trim(),t=e.indexOf("/");return t===-1?e:e.slice(t+1)}function gd(n){if(n===void 0)return Ms;if(!(!Number.isFinite(n)||!Number.isInteger(n))&&!(n<Wn||n>jn))return n}function fd(n){return typeof n=="number"&&Number.isInteger(n)&&n>0}function md(n){return /^gpt-5(?:$|[.-])/.test(n)}function qn(n={}){let e=n.provider?qr(n.provider):"",t=n.model??"",r={provider:e,model:t,encoding:jr,exact:md(t)};return r.exact||(r.fallbackReason="vendor_tokenizer_unavailable"),r}function zn(n,e={}){return {tokenCount:Ns().encode(n).length,tokenizer:qn(e)}}function yd(n){let e=n.systemPrompt??"";return e?`${e}${id}${n.message}`:n.message}function zr(n,e){return e(yd(n))}function hd(n={},e={}){let t=qn(n),r=pd(e);return {metadata:t,countTokens:r}}function Gr(n={}){return hd(n)}function Gn(n){let e=n.provider,t=qr(e),r=qn({provider:t,model:n.model}),o=gd(n.inputBudgetPercent);if(o===void 0)return {resolved:false,requestedProvider:e,provider:t,model:n.model,reason:"invalid_input_budget_percent",tokenizer:r};let s=De(t);if(s.models.length===0)return {resolved:false,requestedProvider:e,provider:t,model:n.model,inputBudgetPercent:o,reason:"provider_catalog_unavailable",tokenizer:r};let i=s.models.find(a=>a.id===n.model);return i?fd(i.contextWindowTokens)?{resolved:true,requestedProvider:e,provider:t,model:n.model,contextWindowTokens:i.contextWindowTokens,inputBudgetPercent:o,inputBudgetTokens:Math.floor(i.contextWindowTokens*o/100),tokenizer:r}:{resolved:false,requestedProvider:e,provider:t,model:n.model,inputBudgetPercent:o,reason:"context_window_tokens_unavailable",tokenizer:r}:{resolved:false,requestedProvider:e,provider:t,model:n.model,inputBudgetPercent:o,reason:"model_not_found",tokenizer:r}}var kd=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()),Ds=zod.z.object({include:zod.z.array(zod.z.string()).optional()}).optional(),_d=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:kd.optional(),skills:Ds}).catchall(zod.z.unknown()),vd=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()}),xd=zod.z.number().finite().int().min(Wn).max(jn),Ed=zod.z.object({inputBudgetPercent:xd.optional()}).catchall(zod.z.unknown()),Td=zod.z.object({continuity:Ed.optional()}).catchall(zod.z.unknown()),Ad=zod.z.object({bin_resolution:zod.z.enum(["global_first","local_first"]).optional(),dreaming:Td.optional(),wi:zod.z.object({boards:zod.z.array(zod.z.unknown()).optional().catch(()=>{})}).catchall(zod.z.unknown()).optional().catch(()=>{})}).catchall(zod.z.unknown()),Ls=zod.z.object({agents:zod.z.array(_d).optional(),hooks:zod.z.array(zod.z.unknown()).optional(),settings:Ad.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 lt=class extends Error{constructor(t,r){super(t);this.cause=r;this.name="ConfigLoadError";}cause};function Kn(n){if(!n||typeof n!="string"||!n.trim())throw new lt("YAML content must be a non-empty string");let e;try{e=jsYaml.load(n);}catch(o){throw new lt(`YAML parse error: ${o.message}`,o)}let t=Pd(e),r=Ls.safeParse(t);if(!r.success)throw new lt(`Config validation error: ${r.error.message}`);return r.data}function Vn(n){let e;try{e=Oi.readFileSync(n,"utf-8");}catch(t){throw new lt(`Cannot read file: ${n}`,t)}return Kn(e)}function Pd(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}}p();var ct=z.join("templates","agents"),ut=z.join("templates","workflows");function $s(){try{let e=(typeof ae=="function"?ae:module$1.createRequire(typeof __filename<"u"?__filename:process.cwd()+"/")).resolve("@crewx/sdk/package.json");return z.dirname(e)}catch{return null}}function Mt(n){if(n&&Oi.existsSync(n))return n;let e=process.env.CREWX_SDK_TEMPLATES_PATH;if(e&&Oi.existsSync(e))return e;let t=$s();if(t){let o=z.join(t,ct);if(Oi.existsSync(o))return o}let r=[z.join(__dirname,"..",ct),z.join(__dirname,"..","..",ct),z.join(__dirname,"..","..","..",ct),z.join(process.cwd(),"packages","sdk",ct),z.join(process.cwd(),ct)];for(let o of r)if(Oi.existsSync(o))return o;throw new Error(`[@crewx/sdk] Templates directory not found.
45
- `+(t?` package anchor: ${z.join(t,ct)}
44
+ `,jn="system_prompt\\n\\n---\\n\\nmessage",jr="message",gd=16384,fd=Object.keys(Fr__default.default.special_tokens),Ii,Oi;function Ni(){return Ii??=jsTiktoken.getEncoding(Wr),Ii}function md(){return Oi??=new lite.Tiktoken(Fr__default.default),Oi}function yd(n){return fd.some(e=>n.includes(e))}function hd(n){return n===void 0?gd:!Number.isFinite(n)||n<=0?0:Math.floor(n)}function wd(n={}){let e=hd(n.pieceCacheMaxEntries),t=new Map,r=n.observePieceCache;return o=>{if(yd(o))return r?.({type:"full_encode",reason:"special_token"}),Ni().encode(o).length;let i=0,s=new RegExp(Fr__default.default.pat_str,"ug");for(let a of o.matchAll(s)){let d=a[0],c=t.get(d);if(c!==void 0){t.delete(d),t.set(d,c),r?.({type:"hit",piece:d,tokenCount:c}),i+=c;continue}let l=md().encode(d).length;if(r?.({type:"miss",piece:d,tokenCount:l}),e>0){if(t.size>=e){let f=t.keys().next().value;if(f!==void 0){let g=t.get(f);t.delete(f),r?.({type:"evict",piece:f,tokenCount:g});}}t.set(d,l);}i+=l;}return i}}function Hr(n){let e=n.trim(),t=e.indexOf("/");return t===-1?e:e.slice(t+1)}function kd(n){if(n===void 0)return Mi;if(!(!Number.isFinite(n)||!Number.isInteger(n))&&!(n<Fn||n>Wn))return n}function vd(n){return typeof n=="number"&&Number.isInteger(n)&&n>0}function _d(n){return /^gpt-5(?:$|[.-])/.test(n)}function Hn(n={}){let e=n.provider?Hr(n.provider):"",t=n.model??"",r={provider:e,model:t,encoding:Wr,exact:_d(t)};return r.exact||(r.fallbackReason="vendor_tokenizer_unavailable"),r}function qn(n,e={}){return {tokenCount:Ni().encode(n).length,tokenizer:Hn(e)}}function xd(n){let e=n.systemPrompt??"";return e?`${e}${pd}${n.message}`:n.message}function qr(n,e){return e(xd(n))}function Ed(n={},e={}){let t=Hn(n),r=wd(e);return {metadata:t,countTokens:r}}function zr(n={}){return Ed(n)}function zn(n){let e=n.provider,t=Hr(e),r=Hn({provider:t,model:n.model}),o=kd(n.inputBudgetPercent);if(o===void 0)return {resolved:false,requestedProvider:e,provider:t,model:n.model,reason:"invalid_input_budget_percent",tokenizer:r};let i=he(t);if(i.models.length===0)return {resolved:false,requestedProvider:e,provider:t,model:n.model,inputBudgetPercent:o,reason:"provider_catalog_unavailable",tokenizer:r};let s=i.models.find(a=>a.id===n.model);return s?vd(s.contextWindowTokens)?{resolved:true,requestedProvider:e,provider:t,model:n.model,contextWindowTokens:s.contextWindowTokens,inputBudgetPercent:o,inputBudgetTokens:Math.floor(s.contextWindowTokens*o/100),tokenizer:r}:{resolved:false,requestedProvider:e,provider:t,model:n.model,inputBudgetPercent:o,reason:"context_window_tokens_unavailable",tokenizer:r}:{resolved:false,requestedProvider:e,provider:t,model:n.model,inputBudgetPercent:o,reason:"model_not_found",tokenizer:r}}var Ad=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()),Di=zod.z.object({include:zod.z.array(zod.z.string()).optional()}).optional(),Rd=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:Ad.optional(),skills:Di}).catchall(zod.z.unknown()),bd=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()}),Pd=zod.z.number().finite().int().min(Fn).max(Wn),Cd=zod.z.object({inputBudgetPercent:Pd.optional()}).catchall(zod.z.unknown()),Sd=zod.z.object({continuity:Cd.optional()}).catchall(zod.z.unknown()),Id=zod.z.object({bin_resolution:zod.z.enum(["global_first","local_first"]).optional(),dreaming:Sd.optional(),wi:zod.z.object({boards:zod.z.array(zod.z.unknown()).optional().catch(()=>{})}).catchall(zod.z.unknown()).optional().catch(()=>{})}).catchall(zod.z.unknown()),Li=zod.z.object({agents:zod.z.array(Rd).optional(),hooks:zod.z.array(zod.z.unknown()).optional(),settings:Id.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 at=class extends Error{constructor(t,r){super(t);this.cause=r;this.name="ConfigLoadError";}cause};function Gn(n){if(!n||typeof n!="string"||!n.trim())throw new at("YAML content must be a non-empty string");let e;try{e=jsYaml.load(n);}catch(o){throw new at(`YAML parse error: ${o.message}`,o)}let t=Nd(e),r=Li.safeParse(t);if(!r.success)throw new at(`Config validation error: ${r.error.message}`);return r.data}function Kn(n){let e;try{e=Ds.readFileSync(n,"utf-8");}catch(t){throw new at(`Cannot read file: ${n}`,t)}return Gn(e)}function Nd(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(([i,s])=>({id:i,...s&&typeof s=="object"?s:{}}));}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 i=o.inline;if(i.provider!==void 0)return {...o,provider:i.provider}}return o});return {...e,agents:r}}p();var dt=z.join("templates","agents"),ct=z.join("templates","workflows");function $i(){try{let e=(typeof de=="function"?de:module$1.createRequire(typeof __filename<"u"?__filename:process.cwd()+"/")).resolve("@crewx/sdk/package.json");return z.dirname(e)}catch{return null}}function It(n){if(n&&Ds.existsSync(n))return n;let e=process.env.CREWX_SDK_TEMPLATES_PATH;if(e&&Ds.existsSync(e))return e;let t=$i();if(t){let o=z.join(t,dt);if(Ds.existsSync(o))return o}let r=[z.join(__dirname,"..",dt),z.join(__dirname,"..","..",dt),z.join(__dirname,"..","..","..",dt),z.join(process.cwd(),"packages","sdk",dt),z.join(process.cwd(),dt)];for(let o of r)if(Ds.existsSync(o))return o;throw new Error(`[@crewx/sdk] Templates directory not found.
45
+ `+(t?` package anchor: ${z.join(t,dt)}
46
46
  `:` package anchor: (unresolved)
47
47
  `)+r.map(o=>` candidate: ${o}`).join(`
48
48
  `)+`
49
- Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function Kr(){let n=Mt();return {yamlPath:z.join(n,"default.yaml"),dir:n}}function Sd(n){if(n&&Oi.existsSync(n))return n;let e=process.env.CREWX_SDK_WORKFLOW_TEMPLATES_PATH;if(e&&Oi.existsSync(e))return e;let t=$s();if(t){let o=z.join(t,ut);if(Oi.existsSync(o))return o}let r=[z.join(__dirname,"..",ut),z.join(__dirname,"..","..",ut),z.join(__dirname,"..","..","..",ut),z.join(process.cwd(),"packages","sdk",ut),z.join(process.cwd(),ut)];for(let o of r)if(Oi.existsSync(o))return o;throw new Error(`[@crewx/sdk] Workflow templates directory not found.
50
- `+(t?` package anchor: ${z.join(t,ut)}
49
+ Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function Gr(){let n=It();return {yamlPath:z.join(n,"default.yaml"),dir:n}}function $d(n){if(n&&Ds.existsSync(n))return n;let e=process.env.CREWX_SDK_WORKFLOW_TEMPLATES_PATH;if(e&&Ds.existsSync(e))return e;let t=$i();if(t){let o=z.join(t,ct);if(Ds.existsSync(o))return o}let r=[z.join(__dirname,"..",ct),z.join(__dirname,"..","..",ct),z.join(__dirname,"..","..","..",ct),z.join(process.cwd(),"packages","sdk",ct),z.join(process.cwd(),ct)];for(let o of r)if(Ds.existsSync(o))return o;throw new Error(`[@crewx/sdk] Workflow templates directory not found.
50
+ `+(t?` package anchor: ${z.join(t,ct)}
51
51
  `:` package anchor: (unresolved)
52
52
  `)+r.map(o=>` candidate: ${o}`).join(`
53
53
  `)+`
54
- Set CREWX_SDK_WORKFLOW_TEMPLATES_PATH or pass options.templatesPath.`)}p();var Le=class extends Error{constructor(e,t){let r=t.length>0?` Available: ${t.join(", ")}`:"";super(`Agent not found: "${e}".${r}`),this.name="AgentNotFoundError";}},Od={claude:{id:"claude",provider:"cli/claude"},copilot:{id:"copilot",provider:"cli/copilot"},codex:{id:"codex",provider:"cli/codex"}};function Jn(n,e){let t=n.startsWith("@")?n.slice(1):n,r=e.find(s=>s.id===t);if(r)return r;let o=Od[t];if(o)return o;throw new Le(n,e.map(s=>s.id))}Ie();dr();Ot();p();function lr(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 ao(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 lo(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=lr(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 co(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}p();p();var bl=[/^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],Pl=/[;|&`$(){}!><\n\r]/,Cl=2,Il=["*","**","*:*","* *","**/*"];function Sl(){let n={};for(let[e,t]of Object.entries(process.env))t!==void 0&&(bl.some(r=>r.test(e))||(n[e]=t));return n}function Ol(n){if(Pl.test(n))throw new Error(`exec blocked: shell metacharacter detected in "${n}"`)}function Ml(n){return /^npx\s+@crewx\/[\w-]+/.test(n)}function Nl(n){if(Il.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 Dl(n,e){let t=e.allow??[],r=e.deny??[];for(let o of [...t,...r])Nl(o);return r.some(o=>be(n,o))?false:Ml(n)?true:t.some(o=>be(n,o))}var ii=false;function Ll(n){ii=n;}function fn(n){if(!ii)return;let e=JSON.stringify({span:"template_exec",...n,timestamp:new Date().toISOString()});console.error(e);}function $l(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 ai(n,e){let t=Date.now(),r=parseInt(process.env.CREWX_EXEC_DEPTH??"0",10);if(isNaN(r)||r>=Cl)return fn({command:n,status:"denied",reason:"invalid or max recursion depth"}),"(exec blocked: max recursion depth reached)";try{Ol(n);}catch{return fn({command:n,status:"denied",reason:"shell metacharacter detected"}),`(exec blocked: shell metacharacter detected in "${n}")`}if(!Dl(n,e))return fn({command:n,status:"denied",reason:"not in allow list"}),`(exec blocked: ${n})`;try{let o=$l(n),[s,...i]=o;if(!s)return `(exec failed: ${n})`;let a=Sl(),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 fn({command:n,status:"allowed",allowed_by:"policy",duration_ms:l}),`<exec-output cmd="${n}">
54
+ Set CREWX_SDK_WORKFLOW_TEMPLATES_PATH or pass options.templatesPath.`)}p();var $e=class extends Error{constructor(e,t){let r=t.length>0?` Available: ${t.join(", ")}`:"";super(`Agent not found: "${e}".${r}`),this.name="AgentNotFoundError";}},Ud={claude:{id:"claude",provider:"cli/claude"},copilot:{id:"copilot",provider:"cli/copilot"},codex:{id:"codex",provider:"cli/codex"}};function Vn(n,e){let t=n.startsWith("@")?n.slice(1):n,r=e.find(i=>i.id===t);if(r)return r;let o=Ud[t];if(o)return o;throw new $e(n,e.map(i=>i.id))}Se();ar();St();p();p();function Mc(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Nc(n,e){return Object.prototype.hasOwnProperty.call(n,e)}function pn(n){if(!Mc(n)||Nc(n,"grok"))return n;let e=n.mode,t;switch(e){case "agent":t={...n,grok:{alwaysApprove:true,sandbox:"workspace"}},delete t.mode;break;case "agent-full-access":case "yolo":t={...n,grok:{alwaysApprove:true,sandbox:"off"}},delete t.mode;break;case "read-only":case "plan":t={...n,mode:"plan",grok:{alwaysApprove:false,sandbox:"read-only"}};break;default:return n}return t}function so(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function ds(n){if(n)return n.slice(n.lastIndexOf("/")+1)}function Dc(n,e){let t=n.providerOptions;if(so(t)){let i=ds(e),s=i?t[i]:void 0;return so(s)?{...s}:{...t}}let r=ds(e),o=r?n[r]:void 0;return so(o)?{...o}:void 0}function dr(n){if(!n||typeof n!="object"||Array.isArray(n))return;let e=n,t=typeof e.provider=="string"?e.provider.trim():void 0,r=t?.slice(t.lastIndexOf("/")+1)==="grok",o=Object.prototype.hasOwnProperty.call(e,"grok")||Object.prototype.hasOwnProperty.call(e,"providerOptions"),i=r&&!o?pn(e):e,s={};typeof i.provider=="string"&&i.provider.trim()&&(s.provider=i.provider.trim()),typeof i.model=="string"&&i.model.trim()&&(s.model=i.model.trim()),typeof i.mode=="string"&&i.mode.trim()&&(s.mode=i.mode.trim()),typeof i.effort=="string"&&i.effort.trim()&&(s.effort=i.effort.trim());let a=Dc(i,s.provider);return a&&(s.providerOptions=a),s}function ao(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 co(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 i=n[e];if(!i||typeof i!="object"||Array.isArray(i))return {active:false,crossProvider:false};let s=dr(i.overdrive);if(!s||!s.provider||!s.model)return {active:false,crossProvider:false};let a=s.provider!==t;return {active:true,provider:s.provider,model:s.model,mode:s.mode,effort:s.effort,crossProvider:a,providerOptions:s.providerOptions}}function lo(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,i={};return o.provider!==void 0&&(typeof o.provider=="string"?o.provider.trim()&&(i.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()&&(i.model=o.model.trim()),i}p();p();var $c=[/^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],Uc=/[;|&`$(){}!><\n\r]/,Bc=2,Fc=["*","**","*:*","* *","**/*"];function Wc(){let n={};for(let[e,t]of Object.entries(process.env))t!==void 0&&($c.some(r=>r.test(e))||(n[e]=t));return n}function jc(n){if(Uc.test(n))throw new Error(`exec blocked: shell metacharacter detected in "${n}"`)}function Hc(n){return /^npx\s+@crewx\/[\w-]+/.test(n)}function qc(n){if(Fc.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 zc(n,e){let t=e.allow??[],r=e.deny??[];for(let o of [...t,...r])qc(o);return r.some(o=>be(n,o))?false:Hc(n)?true:t.some(o=>be(n,o))}var cs=false;function Gc(n){cs=n;}function gn(n){if(!cs)return;let e=JSON.stringify({span:"template_exec",...n,timestamp:new Date().toISOString()});console.error(e);}function Kc(n){let e=[],t="",r=false,o=false;for(let i=0;i<n.length;i++){let s=n[i];s==="'"&&!o?r=!r:s==='"'&&!r?o=!o:s===" "&&!r&&!o?t.length>0&&(e.push(t),t=""):t+=s;}return t.length>0&&e.push(t),e}function ls(n,e){let t=Date.now(),r=parseInt(process.env.CREWX_EXEC_DEPTH??"0",10);if(isNaN(r)||r>=Bc)return gn({command:n,status:"denied",reason:"invalid or max recursion depth"}),"(exec blocked: max recursion depth reached)";try{jc(n);}catch{return gn({command:n,status:"denied",reason:"shell metacharacter detected"}),`(exec blocked: shell metacharacter detected in "${n}")`}if(!zc(n,e))return gn({command:n,status:"denied",reason:"not in allow list"}),`(exec blocked: ${n})`;try{let o=Kc(n),[i,...s]=o;if(!i)return `(exec failed: ${n})`;let a=Wc(),d=child_process.execFileSync(i,s,{timeout:e.timeout??5e3,maxBuffer:64*1024,encoding:"utf-8",env:{...a,CREWX_EXEC_DEPTH:String(r+1)},stdio:["pipe","pipe","pipe"]}),c=Date.now()-t;return gn({command:n,status:"allowed",allowed_by:"policy",duration_ms:c}),`<exec-output cmd="${n}">
55
55
  ${d.trim()}
56
- </exec-output>`}catch{return fn({command:n,status:"error",reason:"execution failed"}),`(exec failed: ${n})`}}p();function di(n){return n==null?"":String(n)}p();function li(n,e){return `\`\`\`${e?.hash?.lang??""}
56
+ </exec-output>`}catch{return gn({command:n,status:"error",reason:"execution failed"}),`(exec failed: ${n})`}}p();function us(n){return n==null?"":String(n)}p();function ps(n,e){return `\`\`\`${e?.hash?.lang??""}
57
57
  ${n??""}
58
- \`\`\``}p();p();function uo(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())}`}function po(n){let e=n.toISOString();return `${e.slice(0,10)} ${e.slice(11,19)} UTC`}function go(n,e){if(!n)return "";if(n.length<=e)return n;let t=n.length-e;return `${n.substring(0,e)} (...+${t} chars)`}function fo(n){return Array.isArray(n)||typeof n=="string"?n.length:0}function mo(n){return typeof n!="string"?"":n.replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;")}var ci=["B","KB","MB","GB"];function yo(n){if(n===0)return "0 B";let e=Math.min(Math.floor(Math.log(n)/Math.log(1024)),ci.length-1);return `${Math.round(n/Math.pow(1024,e)*100)/100} ${ci[e]}`}function ho(n){if(!n)return "";try{let e=n instanceof Date?n:new Date(n);return isNaN(e.getTime())?"":po(e)}catch{return ""}}var mn=class{hbs;execPolicy;execEnabled;constructor(e={}){this.hbs=Se__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(ai(o,t)):"(exec disabled)"}),e.registerHelper("include",function(o){return new e.SafeString(di(o))}),e.registerHelper("fenced_code",function(o,s){return new e.SafeString(li(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 go(o,s)}),e.registerHelper("length",function(o){return fo(o)}),e.registerHelper("escapeHandlebars",function(o){return new e.SafeString(mo(o))}),e.registerHelper("formatFileSize",function(o){return yo(o)}),e.registerHelper("formatTimestamp",function(o){return ho(o)});}async render(e,t={}){return this.hbs.compile(e,{noEscape:true})(t)}};p();p();var cr=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?z.resolve(e[0]):z.resolve(z.join(...e))}isAbsolute(e){return z.isAbsolute(e)}async readdir(e){try{return await promises.readdir(e)}catch{return []}}},kt=new cr;var _t=class{docs=new Map;fs;constructor(e){this.fs=e??kt;}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(`
59
- `)){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(`
60
- `)}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)}};p();p();var ce=class extends Error{constructor(t,r,o){super(t);this.layoutId=r;this.cause=o;this.name="LayoutLoadError";}layoutId;cause},Fe=class extends Error{constructor(t,r=[],o){super(t);this.errors=r;this.cause=o;this.name="PropsValidationError";}errors;cause};var Kl={validationMode:"lenient",fallbackLayoutId:"crewx/default"},yn=class{layouts=new Map;options;constructor(e){this.options={...Kl,...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 ce(`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 ce("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 ce(`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(!Oi.existsSync(e))throw new ce(`Templates directory not found: ${e}`,void 0,new Error(`Directory does not exist: ${e}`));try{let t=Oi.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=z__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 ce(`Failed to read layouts directory: ${e}`,void 0,t instanceof Error?t:new Error(String(t)))}}loadLayoutFile(e,t){try{let r=Oi.readFileSync(e,"utf-8");if(!r||r.trim().length===0)throw console.warn(`Empty YAML file: ${e}, will use fallback`),new ce(`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 ce(`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 ce(`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 ce(`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 ce(`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}}}};p();p();p();function vt(n){return String(Math.floor(Math.abs(n))).padStart(2,"0")}function hn(n){if(!(n instanceof Date)||Number.isNaN(n.getTime()))return "";let e=-n.getTimezoneOffset(),t=e>=0?"+":"-";return `${n.getFullYear()}-${vt(n.getMonth()+1)}-${vt(n.getDate())}T${vt(n.getHours())}:${vt(n.getMinutes())}:${vt(n.getSeconds())}${t}${vt(e/60)}:${vt(e%60)}`}function Vl(n){return n.map(e=>{let t=typeof e?.timestamp=="number"?e.timestamp:null;return t===null?e:{...e,created_at:hn(new Date(t))}})}function Jl(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 fi(...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=Jl(t),d=a.length>0?a[0]:"",l=Date.now(),c={messages:Vl(t),platform:typeof r=="string"?r:"",messagesCount:t.length,agentIds:a,primaryAgentId:d,currentAgentId:o,threadId:s,now:hn(new Date(l))};return e.fn(c)}p();var wn=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 Fe("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 _=this.validateType(f,{type:d},m,o,s);_.valid?a.push(_.value):s.push({path:this.buildPath(m),message:_.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 kn=class{handlebars;propsValidator;constructor(e){this.handlebars=Se__namespace.default.create(),this.propsValidator=e??new wn,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",fi),Se__namespace.default.helpers.each&&this.handlebars.registerHelper("each",Se__namespace.default.helpers.each),Se__namespace.default.helpers.if&&this.handlebars.registerHelper("if",Se__namespace.default.helpers.if),Se__namespace.default.helpers.unless&&this.handlebars.registerHelper("unless",Se__namespace.default.helpers.unless),Se__namespace.default.helpers.with&&this.handlebars.registerHelper("with",Se__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 Se__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 Fe&&o.errors&&o.errors.length>0){let s=o.errors[0];if(s)throw new Fe(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}};p();var wo="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function Xl(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+=wo[o%62]);}for(;t.length<n;)t+=wo[crypto$1.randomBytes(1)[0]%62];return t}function xt(n){return `${n}_${Xl(8)}`}function Yl(n,e){let{createHash:t}=ae("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+=wo[i%62];return `${n}_${s}`}p();function yi(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 _n=class{_emitter=new events.EventEmitter;on(e,t){let r=yi(e,t);return this._emitter.on(e,r),()=>this._emitter.off(e,r)}once(e,t){let r=yi(e,t);return this._emitter.once(e,r),()=>this._emitter.off(e,r)}emit(e,t){this._emitter.emit(e,t);}};p();function ko(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}}}p();var _o=new async_hooks.AsyncLocalStorage;function ec(){return _o}function tc(n,e){return _o.run(n,e)}function vo(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=_o.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 _="text"in g?g.text:"";m.res.status(200).json({text:_});},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}}Ve();p();var nc=/^-\s*Status:\s*active/m,rc=/^---\n([\s\S]*?)\n---/,oc=/^type:\s*goal\s*$/m;async function hi(n,e=kt,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(`
58
+ \`\`\``}p();p();function uo(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())}`}function po(n){let e=n.toISOString();return `${e.slice(0,10)} ${e.slice(11,19)} UTC`}function go(n,e){if(!n)return "";if(n.length<=e)return n;let t=n.length-e;return `${n.substring(0,e)} (...+${t} chars)`}function fo(n){return Array.isArray(n)||typeof n=="string"?n.length:0}function mo(n){return typeof n!="string"?"":n.replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;")}var gs=["B","KB","MB","GB"];function yo(n){if(n===0)return "0 B";let e=Math.min(Math.floor(Math.log(n)/Math.log(1024)),gs.length-1);return `${Math.round(n/Math.pow(1024,e)*100)/100} ${gs[e]}`}function ho(n){if(!n)return "";try{let e=n instanceof Date?n:new Date(n);return isNaN(e.getTime())?"":po(e)}catch{return ""}}var fn=class{hbs;execPolicy;execEnabled;constructor(e={}){this.hbs=Ie__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(ls(o,t)):"(exec disabled)"}),e.registerHelper("include",function(o){return new e.SafeString(us(o))}),e.registerHelper("fenced_code",function(o,i){return new e.SafeString(ps(o,i))}),e.registerHelper("eq",function(o,i){return o===i}),e.registerHelper("ne",function(o,i){return o!==i}),e.registerHelper("and",function(o,i){return o&&i}),e.registerHelper("or",function(o,i){return o||i}),e.registerHelper("not",function(o){return !o}),e.registerHelper("contains",function(o,i){return Array.isArray(o)&&o.includes(i)}),e.registerHelper("json",function(o){return JSON.stringify(o,null,2)}),e.registerHelper("truncate",function(o,i){return go(o,i)}),e.registerHelper("length",function(o){return fo(o)}),e.registerHelper("escapeHandlebars",function(o){return new e.SafeString(mo(o))}),e.registerHelper("formatFileSize",function(o){return yo(o)}),e.registerHelper("formatTimestamp",function(o){return ho(o)});}async render(e,t={}){return this.hbs.compile(e,{noEscape:true})(t)}};p();p();var cr=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?z.resolve(e[0]):z.resolve(z.join(...e))}isAbsolute(e){return z.isAbsolute(e)}async readdir(e){try{return await promises.readdir(e)}catch{return []}}},ht=new cr;var wt=class{docs=new Map;fs;constructor(e){this.fs=e??ht;}async load(e,t){if(e)for(let[r,o]of Object.entries(e)){let i=o;if(typeof i=="string")this.docs.set(r,{content:i});else if(i&&typeof i=="object"){let s=i;"content"in s&&typeof s.content=="string"?this.docs.set(r,{content:s.content}):"path"in s&&typeof s.path=="string"?await this.loadFromFile(r,s.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(`
59
+ `)){let i=/^(#{1,6})\s+(.+)$/.exec(o.trim());i&&r.push({depth:i[1].length,text:i[2].trim()});}if(r.length!==0)return r.map(({depth:o,text:i})=>`${" ".repeat(o-1)}- ${i}`).join(`
60
+ `)}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),i=this.getPath(t);e[t]={content:r,toc:o,...i?{path:i}:{}};}return e}async loadFromFile(e,t,r){try{let o=this.resolve(t,r),i=await this.fs.readFile(o);this.docs.set(e,{content:i,path:o});}catch(o){let i=o instanceof Error?o.message:String(o);console.warn(`[DocumentLoader] Failed to load '${e}' from '${t}': ${i}`);}}resolve(e,t){return this.fs.isAbsolute(e)?e:t?this.fs.resolvePath(t,e):this.fs.resolvePath(e)}};p();p();var ue=class extends Error{constructor(t,r,o){super(t);this.layoutId=r;this.cause=o;this.name="LayoutLoadError";}layoutId;cause},We=class extends Error{constructor(t,r=[],o){super(t);this.errors=r;this.cause=o;this.name="PropsValidationError";}errors;cause};var rl={validationMode:"lenient",fallbackLayoutId:"crewx/default"},mn=class{layouts=new Map;options;constructor(e){this.options={...rl,...e,templatesPath:e?.templatesPath??It()},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 ue(`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 ue("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 ue(`Custom layout template is empty for ${e}`,e);let i=r.propsSchema||{},s=this.extractDefaultProps(i),a=r.defaultProps||{},d={id:e,version:r.version||"1.0.0",description:r.description||`Custom layout ${e}`,template:o,propsSchema:this.parsePropsSchema(i),defaultProps:{...s,...a}},c=this.layouts.get(e),l=c?.template===o&&JSON.stringify(c?.defaultProps??{})===JSON.stringify(d.defaultProps??{})&&JSON.stringify(c?.propsSchema??{})===JSON.stringify(d.propsSchema??{});this.layouts.set(e,d),process.env.CREWX_VERBOSE==="1"&&(c?l||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(!Ds.existsSync(e))throw new ue(`Templates directory not found: ${e}`,void 0,new Error(`Directory does not exist: ${e}`));try{let t=Ds.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)$/,""),i=z__namespace.join(e,r);try{let s=this.loadLayoutFile(i,o),a=`crewx/${o}`;this.layouts.set(a,s),a!=="crewx/minimal"&&process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded layout: ${a} from ${r}`);}catch(s){console.error(`Failed to load layout file ${r}:`,s);}}process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded ${this.layouts.size} layouts from ${e}`);}catch(t){throw new ue(`Failed to read layouts directory: ${e}`,void 0,t instanceof Error?t:new Error(String(t)))}}loadLayoutFile(e,t){try{let r=Ds.readFileSync(e,"utf-8");if(!r||r.trim().length===0)throw console.warn(`Empty YAML file: ${e}, will use fallback`),new ue(`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 ue(`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 i=this.resolveLayoutEntry(o.layouts,t);if(!i||i.template.trim().length===0)throw console.warn(`Empty or missing layout template in ${e} for ${t}`),new ue(`Layout template not found or empty in layouts map: ${t}`,t);let s=i.propsSchema||o.propsSchema||{};return {id:`crewx/${t}`,version:o.version||"1.0.0",description:o.description||`CrewX ${t} layout`,template:i.template,propsSchema:this.parsePropsSchema(s),defaultProps:this.extractDefaultProps(s)}}else {if(!o.template||typeof o.template=="string"&&o.template.trim().length===0)throw console.warn(`Empty or missing template field in ${e}`),new ue(`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 ue(`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("/"),i=o[o.length-1];i&&r.add(i);}else r.add(`crewx/${t}`);r.add("default");for(let o of r){let i=e[o];if(typeof i=="string"&&i.trim().length>0)return {template:i};if(i&&typeof i=="object"&&typeof i.template=="string"&&i.template.trim().length>0)return {template:i.template,propsSchema:i.propsSchema}}for(let o of Object.values(e)){if(typeof o=="string"&&o.trim().length>0)return {template:o};let i=o;if(i&&typeof i=="object"&&typeof i.template=="string"&&i.template.trim().length>0)return {template:i.template,propsSchema:i.propsSchema}}}};p();p();p();function kt(n){return String(Math.floor(Math.abs(n))).padStart(2,"0")}function yn(n){if(!(n instanceof Date)||Number.isNaN(n.getTime()))return "";let e=-n.getTimezoneOffset(),t=e>=0?"+":"-";return `${n.getFullYear()}-${kt(n.getMonth()+1)}-${kt(n.getDate())}T${kt(n.getHours())}:${kt(n.getMinutes())}:${kt(n.getSeconds())}${t}${kt(e/60)}:${kt(e%60)}`}function ol(n){return n.map(e=>{let t=typeof e?.timestamp=="number"?e.timestamp:null;return t===null?e:{...e,created_at:yn(new Date(t))}})}function il(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 hs(...n){let e=n[n.length-1],t=n[0],r=n[1],o=typeof n[2]=="string"?n[2]:"",i=typeof n[3]=="string"?n[3]:"";if(!Array.isArray(t)||t.length===0||!(e&&typeof e.fn=="function"))return "";let a=il(t),d=a.length>0?a[0]:"",c=Date.now(),l={messages:ol(t),platform:typeof r=="string"?r:"",messagesCount:t.length,agentIds:a,primaryAgentId:d,currentAgentId:o,threadId:i,now:yn(new Date(c))};return e.fn(l)}p();var hn=class{defaultMode;constructor(e={}){this.defaultMode=e.defaultMode??"lenient";}validate(e,t,r=this.defaultMode){let o=[],i=this.validateObject(e??{},t,r,["props"],o);if(o.length>0&&r==="strict")throw new We("Props validation failed in strict mode",o);return {valid:o.length===0,props:i,errors:o}}validateObject(e,t,r,o,i){let s={};if(r==="strict")for(let a of Object.keys(e))t[a]||i.push({path:this.buildPath([...o,a]),message:`Unknown prop '${a}'`,value:e[a]});for(let[a,d]of Object.entries(t)){let c=[...o,a],l=e[a],f=this.resolveProp(l,d,c,r,i);f.shouldAssign&&(s[a]=f.value);}return s}resolveProp(e,t,r,o,i){let s=this.buildPath(r);if(this.isNil(e)){if(t.isRequired&&i.push({path:s,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,i);if(!a.valid){if(t.type==="shape"&&a.value&&this.isPlainObject(a.value))return {shouldAssign:true,value:a.value};if(i.push({path:s,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,i){let{type:s}=t;switch(s){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,i);case "object":return this.validatePlainObject(e);case "shape":return this.validateShape(e,t,r,o,i);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,i){let s=this.validateArray(e,t);if(!s.valid)return s;let a=[],d=t.itemType,c=t.itemOneOf,l=i.length;return s.value.forEach((f,g)=>{let m=[...r,String(g)];if(d){let v=this.validateType(f,{type:d},m,o,i);v.valid?a.push(v.value):i.push({path:this.buildPath(m),message:v.error??"Invalid array item",value:f});}else a.push(f);c&&!c.includes(f)&&i.push({path:this.buildPath(m),message:`Array item must be one of: ${c.join(", ")}`,value:f});}),{valid:i.length===l,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,i){if(!this.isPlainObject(e))return {valid:false,error:`Expected object, got ${this.describeType(e)}`};let s=i.length,a=this.validateObject(e,t.shape??{},o,r,i);return {valid:i.length===s,value:a}}validateOneOfType(e,t){let r=t.types??[];return r.some(i=>this.matchesType(e,i))?{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 i=this.applyDefaults(o.shape);Object.keys(i).length>0&&(t[r]=i);}}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 wn=class{handlebars;propsValidator;constructor(e){this.handlebars=Ie__namespace.default.create(),this.propsValidator=e??new hn,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:i=false}=r,s=i?this.mergeProps(e.defaultProps,t.props):this.resolveProps(e,t.props,o).props;return {...t,vars:this.sanitizeVars(t.vars),props:s}}registerHelpers(){this.handlebars.registerHelper("formatConversation",hs),Ie__namespace.default.helpers.each&&this.handlebars.registerHelper("each",Ie__namespace.default.helpers.each),Ie__namespace.default.helpers.if&&this.handlebars.registerHelper("if",Ie__namespace.default.helpers.if),Ie__namespace.default.helpers.unless&&this.handlebars.registerHelper("unless",Ie__namespace.default.helpers.unless),Ie__namespace.default.helpers.with&&this.handlebars.registerHelper("with",Ie__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 Ie__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 We&&o.errors&&o.errors.length>0){let i=o.errors[0];if(i)throw new We(i.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 i=e[r];e[r]=this.deepMerge(this.isPlainObject(i)?i:{},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}};p();var wo="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function sl(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+=wo[o%62]);}for(;t.length<n;)t+=wo[crypto$1.randomBytes(1)[0]%62];return t}function vt(n){return `${n}_${sl(8)}`}function al(n,e){let{createHash:t}=de("crypto"),r=t("sha256").update(e).digest(),o=Buffer.alloc(8);for(let s=0;s<32;s++)o[s%8]^=r[s];let i="";for(let s of o)i+=wo[s%62];return `${n}_${i}`}p();function ks(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 kn=class{_emitter=new events.EventEmitter;on(e,t){let r=ks(e,t);return this._emitter.on(e,r),()=>this._emitter.off(e,r)}once(e,t){let r=ks(e,t);return this._emitter.once(e,r),()=>this._emitter.off(e,r)}emit(e,t){this._emitter.emit(e,t);}};p();function ko(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}::`,i=[];for(let s of e.keys())s.startsWith(o)&&i.push(s.slice(n.length+2));return i}}}p();var vo=new async_hooks.AsyncLocalStorage;function ll(){return vo}function ul(n,e){return vo.run(n,e)}function _o(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},i=n.audit??{log:async()=>{}},s=n.onInbound??(async()=>({accepted:true})),a=n.onEmitEvent??(async()=>({accepted:true})),d=n.onUpdateMessage??(async()=>{}),c=n.onResolveUser??(async g=>({userId:g,displayName:g})),l=async g=>{let m=vo.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 v="text"in g?g.text:"";m.res.status(200).json({text:v});},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:i,abortSignal:n.abortSignal??new AbortController().signal,httpRouter:f,inbound:s,emitEvent:a,updateMessage:d,resolveUser:c,respondSync:l}}Xe();p();var pl=/^-\s*Status:\s*active/m,gl=/^---\n([\s\S]*?)\n---/,fl=/^type:\s*goal\s*$/m;async function vs(n,e=ht,t){let r=typeof t=="string"?[t]:Array.isArray(t)?t:void 0;if(r){let a=[];for(let d of r){let c=e.resolvePath(n,d);await e.exists(c)&&a.push(await e.readFile(c));}return a.join(`
61
61
  ---
62
- `)}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=rc.exec(l);!c||!oc.test(c[1])||nc.test(l)&&i.push(l);}return i.join(`
62
+ `)}let i=(await e.readdir(n)).filter(a=>a.endsWith(".md"));if(i.length===0)return "";let s=[];for(let a of i){let d=e.resolvePath(n,a),c=await e.readFile(d),l=gl.exec(c);!l||!fl.test(l[1])||pl.test(c)&&s.push(c);}return s.join(`
63
63
  ---
64
- `)}p();function sc(){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 wi(n,e=kt){let t=e.resolvePath(n,`${sc()}.md`);return await e.exists(t)?e.readFile(t):""}p();Dt();Ve();function xo(n){if(n.startsWith("cli/"))return exports.BUILTIN_ADAPTERS[n.slice(4)]}function ac(n,e={}){if(!n.startsWith("cli/"))return true;let r=(e.lookupAdapter??xo)(n);if(!r?.command)return false;let o=sn(r.command,{env:e.env});return z__namespace.default.isAbsolute(o)}function ki(n,e={}){if(!Array.isArray(n))return n;if(n.length===0)return "cli/claude";for(let t of n)if(ac(t,e))return t;return n[0]}p();var vn=new async_hooks.AsyncLocalStorage;function Eo(n){if(n)return {parentTaskId:n.parentTaskId??null,rootTraceId:n.rootTraceId,callerAgentId:n.callerAgentId??null}}p();function lc(n){return typeof n!="string"?"":n.replace(/</g,"&lt;").replace(/>/g,"&gt;")}function To(n){return n.messages.map(e=>({text:lc(e.text),isAssistant:e.isAssistant,timestamp:e.timestamp,metadata:e.metadata,files:void 0}))}p();Ve();Je();p();p();var Wt=class{resolveDbPath(){return process.env.CREWX_DB?process.env.CREWX_DB:process.env.CREWX_TRACES_DB?process.env.CREWX_TRACES_DB:z.join(ss__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 Oi.existsSync(e??this.resolveDbPath())}};p();function Ee(n){let e=ae("better-sqlite3"),{drizzle:t}=ae("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()}}p();var _i=new Set,fc={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 Ro(n,e){return (n.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function mc(n,e){if(e>0||!Ro(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(fc))r.has(o)||n.run(`ALTER TABLE tasks ADD COLUMN ${o} ${s}`);}var yc={"0002_normalize_task_names":{workspace_name:"TEXT",project_name:"TEXT"}};function hc(n,e,t){if(!Ro(n,"__drizzle_migrations")||!Ro(n,"tasks"))return;let r=n.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(Oi.readFileSync(z__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=yc[i.tag];if(!a)continue;let d=z__namespace.default.join(e,`${i.tag}.sql`);if(!Oi.existsSync(d))continue;let l=Oi.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,_]of Object.entries(a))g.has(m)||(n.run(`ALTER TABLE tasks ADD COLUMN ${m} ${_}`),g.add(m));}}function wc(n,e,t){let r=n.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(Oi.readFileSync(z__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=z__namespace.default.join(e,`${i.tag}.sql`);if(!Oi.existsSync(a))continue;let d=Oi.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(y=>y.trim()).filter(Boolean).every(y=>/^ALTER\s+TABLE\s+.+\s+ADD\s+/i.test(y)))continue;f.every(({table:y,column:v})=>n.all(`PRAGMA table_info("${y}")`).some(k=>k.name===v))&&n.run(t`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${l}, ${i.when})`);}}function kc(n){let{migrate:e}=ae("drizzle-orm/better-sqlite3/migrator"),{sql:t}=ae("drizzle-orm"),r=[z__namespace.default.join(__dirname,"../migrations"),z__namespace.default.join(__dirname,"migrations"),z__namespace.default.join(__dirname,"../../../../drizzle/migrations"),z__namespace.default.join(process.cwd(),"drizzle/migrations")],o=r.find(l=>Oi.existsSync(z__namespace.default.join(l,"meta/_journal.json")));if(!o)throw new Error(`migrations folder not found. Searched:
64
+ `)}p();function ml(){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 _s(n,e=ht){let t=e.resolvePath(n,`${ml()}.md`);return await e.exists(t)?e.readFile(t):""}p();Mt();Xe();function xo(n){if(n.startsWith("cli/"))return exports.BUILTIN_ADAPTERS[n.slice(4)]}function hl(n,e={}){if(!n.startsWith("cli/"))return true;let r=(e.lookupAdapter??xo)(n);if(!r?.command)return false;let o=rn(r.command,{env:e.env});return z__namespace.default.isAbsolute(o)}function xs(n,e={}){if(!Array.isArray(n))return n;if(n.length===0)return "cli/claude";for(let t of n)if(hl(t,e))return t;return n[0]}p();var vn=new async_hooks.AsyncLocalStorage;function Eo(n){if(n)return {parentTaskId:n.parentTaskId??null,rootTraceId:n.rootTraceId,callerAgentId:n.callerAgentId??null}}p();function kl(n){return typeof n!="string"?"":n.replace(/</g,"&lt;").replace(/>/g,"&gt;")}function To(n){return n.messages.map(e=>({text:kl(e.text),isAssistant:e.isAssistant,timestamp:e.timestamp,metadata:e.metadata,files:void 0}))}p();Xe();Ye();p();p();var Bt=class{resolveDbPath(){return process.env.CREWX_DB?process.env.CREWX_DB:process.env.CREWX_TRACES_DB?process.env.CREWX_TRACES_DB:z.join(ii__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 Ds.existsSync(e??this.resolveDbPath())}};p();function Te(n){let e=de("better-sqlite3"),{drizzle:t}=de("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,i=[])=>r.prepare(o).run(...i),close:()=>r.close()}}p();var Es=new Set,Tl={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 Ro(n,e){return (n.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function Al(n,e){if(e>0||!Ro(n,"tasks"))return;let t=n.all("PRAGMA table_info(tasks)"),r=new Set(t.map(o=>o.name));for(let[o,i]of Object.entries(Tl))r.has(o)||n.run(`ALTER TABLE tasks ADD COLUMN ${o} ${i}`);}var Rl={"0002_normalize_task_names":{workspace_name:"TEXT",project_name:"TEXT"}};function bl(n,e,t){if(!Ro(n,"__drizzle_migrations")||!Ro(n,"tasks"))return;let r=n.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(s=>s.hash)),i=JSON.parse(Ds.readFileSync(z__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let s of i.entries){let a=Rl[s.tag];if(!a)continue;let d=z__namespace.default.join(e,`${s.tag}.sql`);if(!Ds.existsSync(d))continue;let c=Ds.readFileSync(d,"utf-8"),l=crypto$1.createHash("sha256").update(c).digest("hex");if(o.has(l))continue;let f=n.all("PRAGMA table_info(tasks)"),g=new Set(f.map(m=>m.name));for(let[m,v]of Object.entries(a))g.has(m)||(n.run(`ALTER TABLE tasks ADD COLUMN ${m} ${v}`),g.add(m));}}function Pl(n,e,t){let r=n.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(s=>s.hash)),i=JSON.parse(Ds.readFileSync(z__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let s of i.entries){let a=z__namespace.default.join(e,`${s.tag}.sql`);if(!Ds.existsSync(a))continue;let d=Ds.readFileSync(a,"utf-8"),c=crypto$1.createHash("sha256").update(d).digest("hex");if(o.has(c))continue;let l=/ALTER\s+TABLE\s+[`"]?(\w+)[`"]?\s+ADD\s+[`"]?(\w+)[`"]?/gi,f=[],g;for(;(g=l.exec(d))!==null;)f.push({table:g[1],column:g[2]});if(f.length===0||!d.split(/-->\s*statement-breakpoint/).map(y=>y.trim()).filter(Boolean).every(y=>/^ALTER\s+TABLE\s+.+\s+ADD\s+/i.test(y)))continue;f.every(({table:y,column:_})=>n.all(`PRAGMA table_info("${y}")`).some(k=>k.name===_))&&n.run(t`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${c}, ${s.when})`);}}function Cl(n){let{migrate:e}=de("drizzle-orm/better-sqlite3/migrator"),{sql:t}=de("drizzle-orm"),r=[z__namespace.default.join(__dirname,"../migrations"),z__namespace.default.join(__dirname,"migrations"),z__namespace.default.join(__dirname,"../../../../drizzle/migrations"),z__namespace.default.join(process.cwd(),"drizzle/migrations")],o=r.find(c=>Ds.existsSync(z__namespace.default.join(c,"meta/_journal.json")));if(!o)throw new Error(`migrations folder not found. Searched:
65
65
  ${r.join(`
66
- `)}`);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),mc(n,i),s?.cnt&&(wc(n,o,t),hc(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 pr(n,e){_i.has(e)||(kc(n),_i.add(e));}p();var M=class extends Error{code;cause;constructor(e,t,r){super(t),this.name="RepositoryError",this.code=e,this.cause=r,Object.setPrototypeOf(this,new.target.prototype);}};p();p();var xi=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()});p();var u=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)}));p();var Ei=sqliteCore.sqliteTable("threads",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").references(()=>xi.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)}));p();var At=sqliteCore.sqliteTable("spans",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>u.id,{onDelete:"set null"}),parent_span_id:sqliteCore.text("parent_span_id").references(()=>At.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)}));p();sqliteCore.sqliteTable("tool_calls",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>u.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)}));p();sqliteCore.sqliteTable("thread_boxes",{id:sqliteCore.text("id").primaryKey(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>Ei.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)}));p();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)}));p();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)}));p();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)}));p();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]})}));p();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)}));Ot();var Ye="2026-05-09",Vc="0.8.9-rc.13",Qe=10,Ze=parseInt(Vc.split("rc.")[1]),Jc=new Set(["workflow","mcp"]),Si=600*1e3,En=class extends Wt{dbPath;pidNullObservedSince=new Map;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=z.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=z.dirname(t);Oi.existsSync(o)||Oi.mkdirSync(o,{recursive:true});}else if(!Oi.existsSync(t))throw new M("NOT_FOUND","Database not found");let r=Ee(t);if(e)try{pr(r.db,t);}catch(o){throw r.close(),o}return r}startTask(e){let t=this.openHandle(true);try{t.db.insert(u).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:u.id,set:{pid:drizzleOrm.sql`COALESCE(excluded.pid, ${u.pid})`},setWhere:drizzleOrm.eq(u.status,"running")}).run();}catch(r){throw r instanceof M?r:new M("DB_ERROR","Failed to start task",r)}finally{t.close();}}finishTask(e){let t=this.openHandle(true);try{let r=e.runEpoch??null;t.runRaw(`UPDATE tasks SET status=?, result=?, error=?, completed_at=?, duration_ms=?,
66
+ `)}`);let i=n.get(t`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'`),s=0;i?.cnt&&(s=n.get(t`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0),Al(n,s),i?.cnt&&(Pl(n,o,t),bl(n,o,t)),e(n,{migrationsFolder:o});let d=(n.get(t`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0)-s;if(d>0){let c=i?.cnt?"Database migrated":"Database initialized";console.error(`[crewx] ${c} (${d} migration${d>1?"s":""} applied).`);}}function ur(n,e){Es.has(e)||(Cl(n),Es.add(e));}p();var O=class extends Error{code;cause;constructor(e,t,r){super(t),this.name="RepositoryError",this.code=e,this.cause=r,Object.setPrototypeOf(this,new.target.prototype);}};p();p();var As=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()});p();var u=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)}));p();var Rs=sqliteCore.sqliteTable("threads",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").references(()=>As.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)}));p();var Et=sqliteCore.sqliteTable("spans",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>u.id,{onDelete:"set null"}),parent_span_id:sqliteCore.text("parent_span_id").references(()=>Et.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)}));p();sqliteCore.sqliteTable("tool_calls",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>u.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)}));p();sqliteCore.sqliteTable("thread_boxes",{id:sqliteCore.text("id").primaryKey(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>Rs.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)}));p();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)}));p();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)}));p();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)}));p();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]})}));p();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)}));St();var Ze="2026-05-09",ou="0.8.9-rc.13",et=10,tt=parseInt(ou.split("rc.")[1]),iu=new Set(["workflow","mcp"]),Ns=600*1e3,xn=class extends Bt{dbPath;pidNullObservedSince=new Map;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=z.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=z.dirname(t);Ds.existsSync(o)||Ds.mkdirSync(o,{recursive:true});}else if(!Ds.existsSync(t))throw new O("NOT_FOUND","Database not found");let r=Te(t);if(e)try{ur(r.db,t);}catch(o){throw r.close(),o}return r}startTask(e){let t=this.openHandle(true);try{t.db.insert(u).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:u.id,set:{pid:drizzleOrm.sql`COALESCE(excluded.pid, ${u.pid})`},setWhere:drizzleOrm.eq(u.status,"running")}).run();}catch(r){throw r instanceof O?r:new O("DB_ERROR","Failed to start task",r)}finally{t.close();}}finishTask(e){let t=this.openHandle(true);try{let r=e.runEpoch??null;t.runRaw(`UPDATE tasks SET status=?, result=?, error=?, completed_at=?, duration_ms=?,
67
67
  exit_code=?, input_tokens=?, output_tokens=?, cached_input_tokens=?, cost_usd=?,
68
68
  model=COALESCE(?, model)
69
- WHERE id=? AND status='running' AND COALESCE(run_epoch, 0) = COALESCE(?, 0)`,[e.status,e.result??null,e.error??null,e.completedAt,e.durationMs??null,e.exitCode??null,e.inputTokens??0,e.outputTokens??0,e.cachedInputTokens??0,e.costUsd??0,e.model??null,e.id,r]);}catch(r){throw r instanceof M?r:new M("DB_ERROR","Failed to finish task",r)}finally{t.close();}}appendLog(e,t){let r=this.openHandle(true);try{r.db.transaction(o=>{let s=o.select({logs:u.logs}).from(u).where(drizzleOrm.eq(u.id,e)).limit(1).get(),i=s?.logs?JSON.parse(s.logs):[];i.push(t),o.update(u).set({logs:JSON.stringify(i)}).where(drizzleOrm.eq(u.id,e)).run();},{behavior:"immediate"});}catch(o){throw o instanceof M?o:new M("DB_ERROR","Failed to append log",o)}finally{r.close();}}getRunningTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(u).where(drizzleOrm.eq(u.status,"running")).orderBy(drizzleOrm.desc(u.started_at)).all()}catch(t){throw new M("DB_ERROR","Failed to get running tasks",t)}finally{e.close();}}getAllTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(u).orderBy(drizzleOrm.desc(u.started_at)).limit(100).all()}catch(t){throw new M("DB_ERROR","Failed to get all tasks",t)}finally{e.close();}}getTask(e){if(!this.dbExists())return;let t=this.openHandle(false);try{return t.db.select().from(u).where(drizzleOrm.eq(u.id,e)).limit(1).get()??void 0}catch(r){throw new M("DB_ERROR","Failed to get task",r)}finally{t.close();}}killTask(e){if(!this.dbExists())return {killed:false};let t=this.openHandle(true);try{let r=t.db.select({id:u.id,status:u.status,pid:u.pid}).from(u).where(drizzleOrm.eq(u.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(u).set({status:"failed",error:"Killed by user",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(u.id,e),drizzleOrm.eq(u.status,"running"))).run(),{killed:!0,pid:r.pid??void 0}}catch(r){throw r instanceof M?r:new M("DB_ERROR","Failed to kill task",r)}finally{t.close();}}reapOrphanedTasks(){if(!this.dbExists())return 0;let e=this.openHandle(true);try{let t=e.db.select({id:u.id,pid:u.pid,platform:u.platform,run_epoch:u.run_epoch}).from(u).where(drizzleOrm.eq(u.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(u).set({status:"failed",error:"Reaped: process not found (orphaned task)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(u.id,i.id),drizzleOrm.eq(u.status,"running"))).run(),s++);continue}if(Jc.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>=Si&&(e.db.update(u).set({status:"failed",error:"Reaped: pid never recorded after resume (stale running_instruction)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(u.id,i.id),drizzleOrm.eq(u.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=Si){if(!this.dbExists())return 0;let t=this.openHandle(true);try{let r=new Date(Date.now()-e).toISOString();return t.db.update(u).set({status:"failed",error:"Reaped: stale workflow run (finally not executed)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(u.status,"running"),drizzleOrm.eq(u.platform,"workflow"),drizzleOrm.isNull(u.pid),drizzleOrm.lt(u.started_at,r),drizzleOrm.or(drizzleOrm.isNull(u.metadata),drizzleOrm.notLike(u.metadata,'%"kind":"workflow_card"%')))).run().changes??0}finally{t.close();}}findTaskStatus(e,t){let r=this.resolveDbPaths();for(let o of r){if(!Oi.existsSync(o))continue;let s=Ee(o);try{let i=t?drizzleOrm.eq(u.workspace_id,t):void 0,a=i?drizzleOrm.and(drizzleOrm.eq(u.id,e),i):drizzleOrm.eq(u.id,e),d=s.db.select().from(u).where(a).limit(1).get()??void 0;if(!d){let l=drizzleOrm.or(drizzleOrm.eq(u.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(u.thread_id),drizzleOrm.like(u.command,`%--thread=${e}%`))),c=i?drizzleOrm.and(l,i):l;d=s.db.select().from(u).where(c).orderBy(drizzleOrm.desc(u.started_at)).limit(1).get()??void 0;}if(d)return d}catch(i){throw new M("DB_ERROR","Failed to find task status",i)}finally{s.close();}}}findChildTasks(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!Oi.existsSync(i))continue;let a=Ee(i);try{let d=t?drizzleOrm.and(drizzleOrm.eq(u.parent_task_id,e),drizzleOrm.eq(u.workspace_id,t)):drizzleOrm.eq(u.parent_task_id,e),l=a.db.select().from(u).where(d).orderBy(drizzleOrm.asc(u.started_at)).all();for(let c of l)o.has(c.id)||(o.add(c.id),s.push(c));}catch(d){throw new M("DB_ERROR","Failed to find child tasks",d)}finally{a.close();}}return s}getWorkspaceUsageSummary(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.all(e?drizzleOrm.sql`
69
+ WHERE id=? AND status='running' AND COALESCE(run_epoch, 0) = COALESCE(?, 0)`,[e.status,e.result??null,e.error??null,e.completedAt,e.durationMs??null,e.exitCode??null,e.inputTokens??0,e.outputTokens??0,e.cachedInputTokens??0,e.costUsd??0,e.model??null,e.id,r]);}catch(r){throw r instanceof O?r:new O("DB_ERROR","Failed to finish task",r)}finally{t.close();}}appendLog(e,t){let r=this.openHandle(true);try{r.db.transaction(o=>{let i=o.select({logs:u.logs}).from(u).where(drizzleOrm.eq(u.id,e)).limit(1).get(),s=i?.logs?JSON.parse(i.logs):[];s.push(t),o.update(u).set({logs:JSON.stringify(s)}).where(drizzleOrm.eq(u.id,e)).run();},{behavior:"immediate"});}catch(o){throw o instanceof O?o:new O("DB_ERROR","Failed to append log",o)}finally{r.close();}}getRunningTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(u).where(drizzleOrm.eq(u.status,"running")).orderBy(drizzleOrm.desc(u.started_at)).all()}catch(t){throw new O("DB_ERROR","Failed to get running tasks",t)}finally{e.close();}}getAllTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(u).orderBy(drizzleOrm.desc(u.started_at)).limit(100).all()}catch(t){throw new O("DB_ERROR","Failed to get all tasks",t)}finally{e.close();}}getTask(e){if(!this.dbExists())return;let t=this.openHandle(false);try{return t.db.select().from(u).where(drizzleOrm.eq(u.id,e)).limit(1).get()??void 0}catch(r){throw new O("DB_ERROR","Failed to get task",r)}finally{t.close();}}killTask(e){if(!this.dbExists())return {killed:false};let t=this.openHandle(true);try{let r=t.db.select({id:u.id,status:u.status,pid:u.pid}).from(u).where(drizzleOrm.eq(u.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(u).set({status:"failed",error:"Killed by user",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(u.id,e),drizzleOrm.eq(u.status,"running"))).run(),{killed:!0,pid:r.pid??void 0}}catch(r){throw r instanceof O?r:new O("DB_ERROR","Failed to kill task",r)}finally{t.close();}}reapOrphanedTasks(){if(!this.dbExists())return 0;let e=this.openHandle(true);try{let t=e.db.select({id:u.id,pid:u.pid,platform:u.platform,run_epoch:u.run_epoch}).from(u).where(drizzleOrm.eq(u.status,"running")).all(),r=Date.now(),o=new Set,i=0;for(let s of t){if(s.pid){let c=!1;try{process.kill(s.pid,0),c=!0;}catch{}c||(e.db.update(u).set({status:"failed",error:"Reaped: process not found (orphaned task)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(u.id,s.id),drizzleOrm.eq(u.status,"running"))).run(),i++);continue}if(iu.has(s.platform??"cli"))continue;let a=`${s.id}:${s.run_epoch??0}`;o.add(a);let d=this.pidNullObservedSince.get(a);if(d===void 0){this.pidNullObservedSince.set(a,r);continue}r-d>=Ns&&(e.db.update(u).set({status:"failed",error:"Reaped: pid never recorded after resume (stale running_instruction)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(u.id,s.id),drizzleOrm.eq(u.status,"running"))).run(),i++,this.pidNullObservedSince.delete(a));}for(let s of Array.from(this.pidNullObservedSince.keys()))o.has(s)||this.pidNullObservedSince.delete(s);return i}finally{e.close();}}reapRunningWorkflowTasks(e=Ns){if(!this.dbExists())return 0;let t=this.openHandle(true);try{let r=new Date(Date.now()-e).toISOString();return t.db.update(u).set({status:"failed",error:"Reaped: stale workflow run (finally not executed)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(u.status,"running"),drizzleOrm.eq(u.platform,"workflow"),drizzleOrm.isNull(u.pid),drizzleOrm.lt(u.started_at,r),drizzleOrm.or(drizzleOrm.isNull(u.metadata),drizzleOrm.notLike(u.metadata,'%"kind":"workflow_card"%')))).run().changes??0}finally{t.close();}}findTaskStatus(e,t){let r=this.resolveDbPaths();for(let o of r){if(!Ds.existsSync(o))continue;let i=Te(o);try{let s=t?drizzleOrm.eq(u.workspace_id,t):void 0,a=s?drizzleOrm.and(drizzleOrm.eq(u.id,e),s):drizzleOrm.eq(u.id,e),d=i.db.select().from(u).where(a).limit(1).get()??void 0;if(!d){let c=drizzleOrm.or(drizzleOrm.eq(u.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(u.thread_id),drizzleOrm.like(u.command,`%--thread=${e}%`))),l=s?drizzleOrm.and(c,s):c;d=i.db.select().from(u).where(l).orderBy(drizzleOrm.desc(u.started_at)).limit(1).get()??void 0;}if(d)return d}catch(s){throw new O("DB_ERROR","Failed to find task status",s)}finally{i.close();}}}findChildTasks(e,t){let r=this.resolveDbPaths(),o=new Set,i=[];for(let s of r){if(!Ds.existsSync(s))continue;let a=Te(s);try{let d=t?drizzleOrm.and(drizzleOrm.eq(u.parent_task_id,e),drizzleOrm.eq(u.workspace_id,t)):drizzleOrm.eq(u.parent_task_id,e),c=a.db.select().from(u).where(d).orderBy(drizzleOrm.asc(u.started_at)).all();for(let l of c)o.has(l.id)||(o.add(l.id),i.push(l));}catch(d){throw new O("DB_ERROR","Failed to find child tasks",d)}finally{a.close();}}return i}getWorkspaceUsageSummary(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.all(e?drizzleOrm.sql`
70
70
  SELECT
71
71
  COALESCE(workspace_id, 'unknown') AS workspace_id,
72
72
  COALESCE(SUM(input_tokens), 0) AS input_tokens,
@@ -87,7 +87,7 @@ ${r.join(`
87
87
  FROM tasks
88
88
  GROUP BY workspace_id
89
89
  ORDER BY (COALESCE(SUM(input_tokens), 0) + COALESCE(SUM(output_tokens), 0)) DESC
90
- `)}catch(r){throw new M("DB_ERROR","Failed to get workspace usage summary",r)}finally{t.close();}}getThreadTokenUsage(e,t){let r=this.resolveDbPaths(),o=new Set,s=0,i=0,a=0;for(let d of r){if(!Oi.existsSync(d))continue;let l=Ee(d);try{let c=drizzleOrm.or(drizzleOrm.eq(u.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(u.thread_id),drizzleOrm.like(u.command,`%--thread=${e}%`))),f=t?drizzleOrm.and(c,drizzleOrm.eq(u.workspace_id,t)):c,g=l.db.select({id:u.id,input_tokens:u.input_tokens,output_tokens:u.output_tokens,cost_usd:u.cost_usd}).from(u).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 M("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(!Oi.existsSync(i))continue;let a=Ee(i);try{let d=drizzleOrm.or(drizzleOrm.eq(u.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(u.thread_id),drizzleOrm.like(u.command,`%--thread=${e}%`))),l=t?drizzleOrm.and(d,drizzleOrm.eq(u.workspace_id,t)):d,c=a.db.select().from(u).where(l).orderBy(drizzleOrm.asc(u.started_at)).all();for(let f of c)o.has(f.id)||(o.add(f.id),s.push(f));}catch(d){throw new M("DB_ERROR","Failed to find tasks by thread",d)}finally{a.close();}}return s}parseWorkflowCardMetadata(e){if(!e)return {};try{let t=JSON.parse(e);return {kind:typeof t.kind=="string"?t.kind:void 0,workflowRunId:typeof t.workflowRunId=="string"?t.workflowRunId:void 0}}catch{return {}}}extractThreadIdFromCommand(e){return e?/--thread=(\S+)/.exec(e)?.[1]??null:null}findRunningWorkflowParentTasks(){if(!this.dbExists())return [];let e=[];for(let t of this.resolveDbPaths()){if(!Oi.existsSync(t))continue;let r=Ee(t);try{e.push(...r.db.select({id:u.id,agent_id:u.agent_id,thread_id:u.thread_id,workspace_id:u.workspace_id,platform:u.platform,status:u.status,error:u.error,completed_at:u.completed_at,duration_ms:u.duration_ms,started_at:u.started_at,metadata:u.metadata}).from(u).where(drizzleOrm.and(drizzleOrm.eq(u.platform,"workflow"),drizzleOrm.like(u.metadata,'%"kind":"workflow_card"%'))).orderBy(drizzleOrm.desc(u.started_at)).all());}catch(o){throw new M("DB_ERROR","Failed to find workflow parent tasks",o)}finally{r.close();}}return e}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(u.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(!Oi.existsSync(d))continue;let l=Ee(d);try{let c=drizzleOrm.and(drizzleOrm.inArray(u.thread_id,e),drizzleOrm.like(u.metadata,'%"kind":"workflow_card"%')),f=l.db.select({id:u.id,thread_id:u.thread_id,metadata:u.metadata,result:u.result,started_at:u.started_at}).from(u).where(i?drizzleOrm.and(c,i):c).all();for(let _ of f)a(_.thread_id,_);let g=drizzleOrm.and(drizzleOrm.isNull(u.thread_id),drizzleOrm.like(u.metadata,'%"kind":"workflow_card"%')),m=l.db.select({id:u.id,command:u.command,metadata:u.metadata,result:u.result,started_at:u.started_at}).from(u).where(i?drizzleOrm.and(g,i):g).all();for(let _ of m){let y=this.extractThreadIdFromCommand(_.command);!y||!o.has(y)||a(y,_);}}catch(c){throw new M("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(u.workspace_id,e.workspaceId));let o=e.agents&&e.agents.length>0?e.agents:e.agentId?[e.agentId]:null;o&&r.push(drizzleOrm.inArray(u.agent_id,o));let s=e.statuses&&e.statuses.length>0?e.statuses:e.status?[e.status]:null;s&&r.push(drizzleOrm.inArray(u.status,s));let i=e.q??e.search;i&&r.push(drizzleOrm.like(u.prompt,`%${i}%`)),e.from&&r.push(drizzleOrm.gte(u.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(u.started_at,e.to));let a=r.length>0?drizzleOrm.and(...r):void 0,d=t.db.select({count:drizzleOrm.sql`count(*)`}).from(u).where(a).get(),l=(e.sortDir??"DESC")==="ASC"?drizzleOrm.asc(u.started_at):drizzleOrm.desc(u.started_at);return {rows:t.db.select().from(u).where(a).orderBy(l).limit(e.limit).offset(e.offset).all(),total:d?.count??0}}catch(r){throw new M("DB_ERROR","Failed to find all tasks",r)}finally{t.close();}}getAgentUsage(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.all(r?drizzleOrm.sql`
90
+ `)}catch(r){throw new O("DB_ERROR","Failed to get workspace usage summary",r)}finally{t.close();}}getThreadTokenUsage(e,t){let r=this.resolveDbPaths(),o=new Set,i=0,s=0,a=0;for(let d of r){if(!Ds.existsSync(d))continue;let c=Te(d);try{let l=drizzleOrm.or(drizzleOrm.eq(u.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(u.thread_id),drizzleOrm.like(u.command,`%--thread=${e}%`))),f=t?drizzleOrm.and(l,drizzleOrm.eq(u.workspace_id,t)):l,g=c.db.select({id:u.id,input_tokens:u.input_tokens,output_tokens:u.output_tokens,cost_usd:u.cost_usd}).from(u).where(f).all();for(let m of g)o.has(m.id)||(o.add(m.id),i+=m.input_tokens??0,s+=m.output_tokens??0,a+=m.cost_usd??0);}catch(l){throw new O("DB_ERROR","Failed to get thread token usage",l)}finally{c.close();}}return {inputTokens:i,outputTokens:s,costUsd:a}}findTasksByThread(e,t){let r=this.resolveDbPaths(),o=new Set,i=[];for(let s of r){if(!Ds.existsSync(s))continue;let a=Te(s);try{let d=drizzleOrm.or(drizzleOrm.eq(u.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(u.thread_id),drizzleOrm.like(u.command,`%--thread=${e}%`))),c=t?drizzleOrm.and(d,drizzleOrm.eq(u.workspace_id,t)):d,l=a.db.select().from(u).where(c).orderBy(drizzleOrm.asc(u.started_at)).all();for(let f of l)o.has(f.id)||(o.add(f.id),i.push(f));}catch(d){throw new O("DB_ERROR","Failed to find tasks by thread",d)}finally{a.close();}}return i}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}findRunningWorkflowParentTasks(){if(!this.dbExists())return [];let e=[];for(let t of this.resolveDbPaths()){if(!Ds.existsSync(t))continue;let r=Te(t);try{e.push(...r.db.select({id:u.id,agent_id:u.agent_id,thread_id:u.thread_id,workspace_id:u.workspace_id,platform:u.platform,status:u.status,error:u.error,completed_at:u.completed_at,duration_ms:u.duration_ms,started_at:u.started_at,metadata:u.metadata}).from(u).where(drizzleOrm.and(drizzleOrm.eq(u.platform,"workflow"),drizzleOrm.like(u.metadata,'%"kind":"workflow_card"%'))).orderBy(drizzleOrm.desc(u.started_at)).all());}catch(o){throw new O("DB_ERROR","Failed to find workflow parent tasks",o)}finally{r.close();}}return e}batchFetchWorkflowCards(e,t){let r=new Map;if(e.length===0)return r;let o=new Set(e),i=new Map,s=t?drizzleOrm.eq(u.workspace_id,t):void 0,a=(d,c)=>{if(!d)return;let l=i.get(d);if(l&&c.started_at<=l)return;let f=this.parseWorkflowCardMetadata(c.metadata);f.kind==="workflow_card"&&(i.set(d,c.started_at),r.set(d,{taskId:c.id,workflowRunId:f.workflowRunId,raw:c.result??void 0}));};for(let d of this.resolveDbPaths()){if(!Ds.existsSync(d))continue;let c=Te(d);try{let l=drizzleOrm.and(drizzleOrm.inArray(u.thread_id,e),drizzleOrm.like(u.metadata,'%"kind":"workflow_card"%')),f=c.db.select({id:u.id,thread_id:u.thread_id,metadata:u.metadata,result:u.result,started_at:u.started_at}).from(u).where(s?drizzleOrm.and(l,s):l).all();for(let v of f)a(v.thread_id,v);let g=drizzleOrm.and(drizzleOrm.isNull(u.thread_id),drizzleOrm.like(u.metadata,'%"kind":"workflow_card"%')),m=c.db.select({id:u.id,command:u.command,metadata:u.metadata,result:u.result,started_at:u.started_at}).from(u).where(s?drizzleOrm.and(g,s):g).all();for(let v of m){let y=this.extractThreadIdFromCommand(v.command);!y||!o.has(y)||a(y,v);}}catch(l){throw new O("DB_ERROR","Failed to batch fetch workflow cards",l)}finally{c.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(u.workspace_id,e.workspaceId));let o=e.agents&&e.agents.length>0?e.agents:e.agentId?[e.agentId]:null;o&&r.push(drizzleOrm.inArray(u.agent_id,o));let i=e.statuses&&e.statuses.length>0?e.statuses:e.status?[e.status]:null;i&&r.push(drizzleOrm.inArray(u.status,i));let s=e.q??e.search;s&&r.push(drizzleOrm.like(u.prompt,`%${s}%`)),e.from&&r.push(drizzleOrm.gte(u.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(u.started_at,e.to));let a=r.length>0?drizzleOrm.and(...r):void 0,d=t.db.select({count:drizzleOrm.sql`count(*)`}).from(u).where(a).get(),c=(e.sortDir??"DESC")==="ASC"?drizzleOrm.asc(u.started_at):drizzleOrm.desc(u.started_at);return {rows:t.db.select().from(u).where(a).orderBy(c).limit(e.limit).offset(e.offset).all(),total:d?.count??0}}catch(r){throw new O("DB_ERROR","Failed to find all tasks",r)}finally{t.close();}}getAgentUsage(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.all(r?drizzleOrm.sql`
91
91
  SELECT
92
92
  t.agent_id,
93
93
  t.workspace_id,
@@ -95,11 +95,11 @@ ${r.join(`
95
95
  COALESCE(SUM(
96
96
  COALESCE(t.input_tokens, 0)
97
97
  + CASE
98
- WHEN t.started_at >= ${Ye}
98
+ WHEN t.started_at >= ${Ze}
99
99
  AND (
100
100
  t.crewx_version IS NULL
101
101
  OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
102
- OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${Qe}) AS INTEGER) < ${Ze})
102
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${et}) AS INTEGER) < ${tt})
103
103
  )
104
104
  THEN COALESCE(t.cached_input_tokens, 0)
105
105
  ELSE 0
@@ -118,11 +118,11 @@ ${r.join(`
118
118
  COALESCE(SUM(
119
119
  COALESCE(t.input_tokens, 0)
120
120
  + CASE
121
- WHEN t.started_at >= ${Ye}
121
+ WHEN t.started_at >= ${Ze}
122
122
  AND (
123
123
  t.crewx_version IS NULL
124
124
  OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
125
- OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${Qe}) AS INTEGER) < ${Ze})
125
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${et}) AS INTEGER) < ${tt})
126
126
  )
127
127
  THEN COALESCE(t.cached_input_tokens, 0)
128
128
  ELSE 0
@@ -138,11 +138,11 @@ ${r.join(`
138
138
  COALESCE(SUM(
139
139
  COALESCE(t.input_tokens, 0)
140
140
  + CASE
141
- WHEN t.started_at >= ${Ye}
141
+ WHEN t.started_at >= ${Ze}
142
142
  AND (
143
143
  t.crewx_version IS NULL
144
144
  OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
145
- OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${Qe}) AS INTEGER) < ${Ze})
145
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${et}) AS INTEGER) < ${tt})
146
146
  )
147
147
  THEN COALESCE(t.cached_input_tokens, 0)
148
148
  ELSE 0
@@ -160,11 +160,11 @@ ${r.join(`
160
160
  COALESCE(SUM(
161
161
  COALESCE(t.input_tokens, 0)
162
162
  + CASE
163
- WHEN t.started_at >= ${Ye}
163
+ WHEN t.started_at >= ${Ze}
164
164
  AND (
165
165
  t.crewx_version IS NULL
166
166
  OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
167
- OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${Qe}) AS INTEGER) < ${Ze})
167
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${et}) AS INTEGER) < ${tt})
168
168
  )
169
169
  THEN COALESCE(t.cached_input_tokens, 0)
170
170
  ELSE 0
@@ -172,18 +172,18 @@ ${r.join(`
172
172
  ), 0)
173
173
  + COALESCE(SUM(t.output_tokens), 0)
174
174
  ) DESC
175
- `).map(i=>({agentId:i.agent_id,workspaceId:i.workspace_id??null,totalTasks:i.total_tasks,inputTokens:i.input_tokens,outputTokens:i.output_tokens,cachedInputTokens:i.cached_input_tokens,costUsd:i.cost_usd,totalTokens:i.input_tokens+i.output_tokens}))}catch(s){throw new M("DB_ERROR","Failed to get agent usage",s)}finally{o.close();}}getAgentUsageTrendRaw(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.all(r?drizzleOrm.sql`
175
+ `).map(s=>({agentId:s.agent_id,workspaceId:s.workspace_id??null,totalTasks:s.total_tasks,inputTokens:s.input_tokens,outputTokens:s.output_tokens,cachedInputTokens:s.cached_input_tokens,costUsd:s.cost_usd,totalTokens:s.input_tokens+s.output_tokens}))}catch(i){throw new O("DB_ERROR","Failed to get agent usage",i)}finally{o.close();}}getAgentUsageTrendRaw(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.all(r?drizzleOrm.sql`
176
176
  SELECT
177
177
  date(t.started_at) AS date,
178
178
  t.agent_id,
179
179
  COALESCE(SUM(
180
180
  COALESCE(t.input_tokens, 0)
181
181
  + CASE
182
- WHEN t.started_at >= ${Ye}
182
+ WHEN t.started_at >= ${Ze}
183
183
  AND (
184
184
  t.crewx_version IS NULL
185
185
  OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
186
- OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${Qe}) AS INTEGER) < ${Ze})
186
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${et}) AS INTEGER) < ${tt})
187
187
  )
188
188
  THEN COALESCE(t.cached_input_tokens, 0)
189
189
  ELSE 0
@@ -206,11 +206,11 @@ ${r.join(`
206
206
  COALESCE(SUM(
207
207
  COALESCE(t.input_tokens, 0)
208
208
  + CASE
209
- WHEN t.started_at >= ${Ye}
209
+ WHEN t.started_at >= ${Ze}
210
210
  AND (
211
211
  t.crewx_version IS NULL
212
212
  OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
213
- OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${Qe}) AS INTEGER) < ${Ze})
213
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${et}) AS INTEGER) < ${tt})
214
214
  )
215
215
  THEN COALESCE(t.cached_input_tokens, 0)
216
216
  ELSE 0
@@ -225,7 +225,7 @@ ${r.join(`
225
225
  AND t.started_at < ${t}
226
226
  GROUP BY date(t.started_at), t.agent_id
227
227
  ORDER BY date(t.started_at) ASC
228
- `).map(i=>({date:i.date,agentId:i.agent_id,inputTokens:i.input_tokens,outputTokens:i.output_tokens,cachedInputTokens:i.cached_input_tokens,costUsd:i.cost_usd,totalTokens:i.input_tokens+i.output_tokens}))}catch(s){throw new M("DB_ERROR","Failed to get agent usage trend",s)}finally{o.close();}}findTaskForStop(e,t){if(!this.dbExists())return;let r=this.openHandle(false);try{return r.db.select().from(u).where(drizzleOrm.and(drizzleOrm.eq(u.id,e),drizzleOrm.eq(u.workspace_id,t))).limit(1).get()??void 0}catch(o){throw new M("DB_ERROR","Failed to find task for stop",o)}finally{r.close();}}findLatestTaskByMetadata(e){if(!this.dbExists())return null;let t=this.openHandle(false);try{return t.db.select({id:u.id,thread_id:u.thread_id,status:u.status,result:u.result,error:u.error,started_at:u.started_at,completed_at:u.completed_at}).from(u).where(drizzleOrm.and(drizzleOrm.eq(u.agent_id,e.agentId),drizzleOrm.eq(u.workspace_id,e.workspaceId),drizzleOrm.sql`${u.metadata} IS NOT NULL AND json_valid(${u.metadata}) AND json_extract(${u.metadata}, '$.' || ${e.metaKey}) = ${e.metaValue}`)).orderBy(drizzleOrm.desc(u.started_at)).limit(1).get()??null}catch(r){throw new M("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(u.id,e),drizzleOrm.eq(u.status,"running"),drizzleOrm.eq(u.workspace_id,r)):drizzleOrm.and(drizzleOrm.eq(u.id,e),drizzleOrm.eq(u.status,"running"));o.db.update(u).set({status:"failed",error:t,completed_at:s}).where(i).run();}catch(s){throw s instanceof M?s:new M("DB_ERROR","Failed to mark task failed",s)}finally{o.close();}}findTasksByPromptHint(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!Oi.existsSync(i))continue;let a=Ee(i);try{let d=t?drizzleOrm.and(drizzleOrm.like(u.prompt,`%${e}%`),drizzleOrm.eq(u.workspace_id,t)):drizzleOrm.like(u.prompt,`%${e}%`),l=a.db.select().from(u).where(d).orderBy(drizzleOrm.asc(u.started_at)).all();for(let c of l)o.has(c.id)||(o.add(c.id),s.push(c));}catch(d){throw new M("DB_ERROR","Failed to find tasks by prompt hint",d)}finally{a.close();}}return s}getProviderUsage(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=drizzleOrm.sql`
228
+ `).map(s=>({date:s.date,agentId:s.agent_id,inputTokens:s.input_tokens,outputTokens:s.output_tokens,cachedInputTokens:s.cached_input_tokens,costUsd:s.cost_usd,totalTokens:s.input_tokens+s.output_tokens}))}catch(i){throw new O("DB_ERROR","Failed to get agent usage trend",i)}finally{o.close();}}findTaskForStop(e,t){if(!this.dbExists())return;let r=this.openHandle(false);try{return r.db.select().from(u).where(drizzleOrm.and(drizzleOrm.eq(u.id,e),drizzleOrm.eq(u.workspace_id,t))).limit(1).get()??void 0}catch(o){throw new O("DB_ERROR","Failed to find task for stop",o)}finally{r.close();}}findLatestTaskByMetadata(e){if(!this.dbExists())return null;let t=this.openHandle(false);try{return t.db.select({id:u.id,thread_id:u.thread_id,status:u.status,result:u.result,error:u.error,started_at:u.started_at,completed_at:u.completed_at}).from(u).where(drizzleOrm.and(drizzleOrm.eq(u.agent_id,e.agentId),drizzleOrm.eq(u.workspace_id,e.workspaceId),drizzleOrm.sql`${u.metadata} IS NOT NULL AND json_valid(${u.metadata}) AND json_extract(${u.metadata}, '$.' || ${e.metaKey}) = ${e.metaValue}`)).orderBy(drizzleOrm.desc(u.started_at)).limit(1).get()??null}catch(r){throw new O("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 i=new Date().toISOString(),s=r?drizzleOrm.and(drizzleOrm.eq(u.id,e),drizzleOrm.eq(u.status,"running"),drizzleOrm.eq(u.workspace_id,r)):drizzleOrm.and(drizzleOrm.eq(u.id,e),drizzleOrm.eq(u.status,"running"));o.db.update(u).set({status:"failed",error:t,completed_at:i}).where(s).run();}catch(i){throw i instanceof O?i:new O("DB_ERROR","Failed to mark task failed",i)}finally{o.close();}}findTasksByPromptHint(e,t){let r=this.resolveDbPaths(),o=new Set,i=[];for(let s of r){if(!Ds.existsSync(s))continue;let a=Te(s);try{let d=t?drizzleOrm.and(drizzleOrm.like(u.prompt,`%${e}%`),drizzleOrm.eq(u.workspace_id,t)):drizzleOrm.like(u.prompt,`%${e}%`),c=a.db.select().from(u).where(d).orderBy(drizzleOrm.asc(u.started_at)).all();for(let l of c)o.has(l.id)||(o.add(l.id),i.push(l));}catch(d){throw new O("DB_ERROR","Failed to find tasks by prompt hint",d)}finally{a.close();}}return i}getProviderUsage(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let i=drizzleOrm.sql`
229
229
  CASE
230
230
  WHEN ${u.model} LIKE 'claude-%' OR ${u.model} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
231
231
  WHEN ${u.model} LIKE 'gpt-%' OR ${u.model} LIKE 'codex-%' THEN 'codex'
@@ -235,23 +235,23 @@ ${r.join(`
235
235
  WHEN ${u.model} LIKE 'qwen%' THEN 'qwen'
236
236
  ELSE 'unknown'
237
237
  END
238
- `,i=drizzleOrm.sql`
238
+ `,s=drizzleOrm.sql`
239
239
  COALESCE(${u.input_tokens}, 0)
240
240
  + CASE
241
- WHEN ${u.started_at} >= ${Ye}
241
+ WHEN ${u.started_at} >= ${Ze}
242
242
  AND (
243
243
  ${u.crewx_version} IS NULL
244
244
  OR (${u.crewx_version} LIKE '0.8.%' AND ${u.crewx_version} NOT LIKE '0.8.9%')
245
- OR (${u.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${u.crewx_version}, ${Qe}) AS INTEGER) < ${Ze})
245
+ OR (${u.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${u.crewx_version}, ${et}) AS INTEGER) < ${tt})
246
246
  )
247
247
  THEN COALESCE(${u.cached_input_tokens}, 0)
248
248
  ELSE 0
249
249
  END
250
250
  `,a=r?drizzleOrm.sql`WHERE ${u.status} IN ('completed', 'success') AND ${u.started_at} >= ${e} AND ${u.started_at} < ${t} AND ${u.workspace_id} = ${r}`:drizzleOrm.sql`WHERE ${u.status} IN ('completed', 'success') AND ${u.started_at} >= ${e} AND ${u.started_at} < ${t}`;return o.db.all(drizzleOrm.sql`
251
251
  SELECT
252
- ${s} AS provider,
252
+ ${i} AS provider,
253
253
  COUNT(*) AS total_tasks,
254
- COALESCE(SUM(${i}), 0) AS input_tokens,
254
+ COALESCE(SUM(${s}), 0) AS input_tokens,
255
255
  COALESCE(SUM(${u.output_tokens}), 0) AS output_tokens,
256
256
  COALESCE(SUM(${u.cached_input_tokens}), 0) AS cached_input_tokens,
257
257
  COALESCE(SUM(${u.cost_usd}), 0) AS cost_usd,
@@ -260,8 +260,8 @@ ${r.join(`
260
260
  FROM ${u}
261
261
  ${a}
262
262
  GROUP BY provider
263
- ORDER BY (COALESCE(SUM(${i}), 0) + COALESCE(SUM(${u.output_tokens}), 0)) DESC
264
- `).map(l=>({provider:l.provider,totalTasks:l.total_tasks,inputTokens:l.input_tokens,outputTokens:l.output_tokens,cachedInputTokens:l.cached_input_tokens,costUsd:l.cost_usd,totalTokens:l.input_tokens+l.output_tokens,activeDurationMs:l.active_duration_ms??0,lastActiveAt:l.last_active_at??null}))}catch(s){throw new M("DB_ERROR","Failed to get provider usage",s)}finally{o.close();}}getModelUsage(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=drizzleOrm.sql`
263
+ ORDER BY (COALESCE(SUM(${s}), 0) + COALESCE(SUM(${u.output_tokens}), 0)) DESC
264
+ `).map(c=>({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}))}catch(i){throw new O("DB_ERROR","Failed to get provider usage",i)}finally{o.close();}}getModelUsage(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let i=drizzleOrm.sql`
265
265
  CASE
266
266
  WHEN ${u.model} LIKE 'claude-%' OR ${u.model} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
267
267
  WHEN ${u.model} LIKE 'gpt-%' OR ${u.model} LIKE 'codex-%' THEN 'codex'
@@ -271,14 +271,14 @@ ${r.join(`
271
271
  WHEN ${u.model} LIKE 'qwen%' THEN 'qwen'
272
272
  ELSE 'unknown'
273
273
  END
274
- `,i=drizzleOrm.sql`
274
+ `,s=drizzleOrm.sql`
275
275
  COALESCE(${u.input_tokens}, 0)
276
276
  + CASE
277
- WHEN ${u.started_at} >= ${Ye}
277
+ WHEN ${u.started_at} >= ${Ze}
278
278
  AND (
279
279
  ${u.crewx_version} IS NULL
280
280
  OR (${u.crewx_version} LIKE '0.8.%' AND ${u.crewx_version} NOT LIKE '0.8.9%')
281
- OR (${u.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${u.crewx_version}, ${Qe}) AS INTEGER) < ${Ze})
281
+ OR (${u.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${u.crewx_version}, ${et}) AS INTEGER) < ${tt})
282
282
  )
283
283
  THEN COALESCE(${u.cached_input_tokens}, 0)
284
284
  ELSE 0
@@ -286,9 +286,9 @@ ${r.join(`
286
286
  `,a=r?drizzleOrm.sql`WHERE ${u.status} IN ('completed', 'success') AND ${u.started_at} >= ${e} AND ${u.started_at} < ${t} AND ${u.workspace_id} = ${r}`:drizzleOrm.sql`WHERE ${u.status} IN ('completed', 'success') AND ${u.started_at} >= ${e} AND ${u.started_at} < ${t}`,d=o.db.all(drizzleOrm.sql`
287
287
  SELECT
288
288
  ${u.model} AS model,
289
- ${s} AS provider,
289
+ ${i} AS provider,
290
290
  COUNT(*) AS total_tasks,
291
- COALESCE(SUM(${i}), 0) AS input_tokens,
291
+ COALESCE(SUM(${s}), 0) AS input_tokens,
292
292
  COALESCE(SUM(${u.output_tokens}), 0) AS output_tokens,
293
293
  COALESCE(SUM(${u.cached_input_tokens}), 0) AS cached_input_tokens,
294
294
  COALESCE(SUM(${u.cost_usd}), 0) AS cost_usd,
@@ -297,7 +297,7 @@ ${r.join(`
297
297
  FROM ${u}
298
298
  ${a}
299
299
  GROUP BY ${u.model}
300
- `),l=new Map;for(let c of d){let f=Dr(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 M("DB_ERROR","Failed to get model usage",s)}finally{o.close();}}getTasksForReport(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=r?drizzleOrm.sql`WHERE ${u.started_at} >= ${e} AND ${u.started_at} < ${t} AND ${u.workspace_id} = ${r}`:drizzleOrm.sql`WHERE ${u.started_at} >= ${e} AND ${u.started_at} < ${t}`;return o.db.all(drizzleOrm.sql`
300
+ `),c=new Map;for(let l of d){let f=Nr(l.model??""),g=c.get(f);g?(g.totalTasks+=l.total_tasks,g.inputTokens+=l.input_tokens,g.outputTokens+=l.output_tokens,g.cachedInputTokens+=l.cached_input_tokens,g.costUsd+=l.cost_usd,g.totalTokens+=l.input_tokens+l.output_tokens,g.activeDurationMs+=l.active_duration_ms??0,l.last_active_at&&(!g.lastActiveAt||l.last_active_at>g.lastActiveAt)&&(g.lastActiveAt=l.last_active_at)):c.set(f,{model:f,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});}return Array.from(c.values()).sort((l,f)=>f.costUsd-l.costUsd)}catch(i){throw new O("DB_ERROR","Failed to get model usage",i)}finally{o.close();}}getTasksForReport(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let i=r?drizzleOrm.sql`WHERE ${u.started_at} >= ${e} AND ${u.started_at} < ${t} AND ${u.workspace_id} = ${r}`:drizzleOrm.sql`WHERE ${u.started_at} >= ${e} AND ${u.started_at} < ${t}`;return o.db.all(drizzleOrm.sql`
301
301
  SELECT
302
302
  ${u.thread_id} AS thread_id,
303
303
  ${u.agent_id} AS agent_id,
@@ -306,32 +306,32 @@ ${r.join(`
306
306
  ${u.error} AS error,
307
307
  ${u.exit_code} AS exit_code
308
308
  FROM ${u}
309
- ${s}
309
+ ${i}
310
310
  ORDER BY ${u.started_at} ASC
311
- `).map(a=>({threadId:a.thread_id,agentId:a.agent_id,startedAt:a.started_at,status:a.status,error:a.error,exitCode:a.exit_code}))}catch(s){throw new M("DB_ERROR","Failed to get tasks for report",s)}finally{o.close();}}findTaskEvidence(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(drizzleOrm.eq(u.workspace_id,e.workspaceId)),e.agents&&e.agents.length>0&&r.push(drizzleOrm.inArray(u.agent_id,e.agents)),e.statuses&&e.statuses.length>0&&r.push(drizzleOrm.inArray(u.status,e.statuses)),e.from&&r.push(drizzleOrm.gte(u.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(u.started_at,e.to));let o=r.length>0?drizzleOrm.and(...r):void 0,s=(e.order??"DESC")==="ASC"?drizzleOrm.asc(u.started_at):drizzleOrm.desc(u.started_at),i={id:u.id,agent_id:u.agent_id,status:u.status,prompt:u.prompt,started_at:u.started_at,completed_at:u.completed_at,thread_id:u.thread_id};return e.limit?t.db.select(i).from(u).where(o).orderBy(s).limit(e.limit).all():t.db.select(i).from(u).where(o).orderBy(s).all()}catch(r){throw new M("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(u.thread_id),drizzleOrm.isNull(u.parent_task_id),drizzleOrm.isNull(u.caller_agent_id),drizzleOrm.or(drizzleOrm.isNull(u.platform),drizzleOrm.ne(u.platform,"workflow")),drizzleOrm.or(drizzleOrm.isNull(u.metadata),drizzleOrm.notLike(u.metadata,'%"kind":"workflow_card"%')),drizzleOrm.or(drizzleOrm.isNull(u.metadata),drizzleOrm.notLike(u.metadata,'%"retriedFromTaskId"%'))];e.workspaceId&&s.push(drizzleOrm.eq(u.workspace_id,e.workspaceId)),e.from&&s.push(drizzleOrm.gte(u.started_at,e.from)),e.to&&s.push(drizzleOrm.lt(u.started_at,e.to));let i=t.db.select({id:u.id,agent_id:u.agent_id,status:u.status,prompt:u.prompt,started_at:u.started_at,completed_at:u.completed_at,thread_id:u.thread_id}).from(u).where(drizzleOrm.and(...s)).orderBy(drizzleOrm.asc(u.started_at),drizzleOrm.asc(u.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 M("DB_ERROR","Failed to find thread chains",r)}finally{t.close();}}};var Xc=new Set(["Read","Grep","Find","Glob"]),Yc=["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"],Qc=[/\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/],Zc=8e3,eu=100,tu=3,nu=Number.MAX_SAFE_INTEGER;function ru(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 ou(n,e){if(Xc.has(n))return true;if(n!=="Bash"||!e)return false;let t=e.split(`
312
- `)[0].trimStart();return Qc.some(r=>r.test(t))?false:Yc.some(r=>t.startsWith(r))}function jt(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function su(n,e,t){if(n!=="Read"||!e)return "ok";let o=e.split(`
313
- `).find(s=>s.trim()&&!s.startsWith("Read "))?.trim()??e.trim();if(!o)return "unknown";try{let s=Oi__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 iu(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 au(n){if(!Array.isArray(n))return [];let e=n,t=e.filter(a=>a.level==="stdout"&&a.message).map(a=>a.message),r=iu(t),o=[];for(let a of e)a.level==="info"&&a.message?o.push(...xe(a.message,a.timestamp)):a.level==="stdout"&&a.message&&r&&o.push(...un("",a.message,r));let s=new Map,i=[];for(let a of o)if(a.type==="tool_use"){let d={tool:ru(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 du(n,e){let t=au(n),r=[];for(let o of t){let s=o.tool==="Bash"?o.input?.split(`
314
- `)[0]?.slice(0,150)??null:o.input?.slice(0,150)??null,i=ou(o.tool,o.input)&&!o.isError;r.push({tool:o.tool,cmd:s,result:o.result,status:su(o.tool,o.input,e),reusable:i});}return r}function Mi(n){let e=["<activity_log>"],{entries:t,omissions:r,tokenCap:o,totalEntries:s}=n,i=r.reduce((a,d)=>a+d.count,0);if(t.length===0&&i===0)e.push(" <!-- no activity found in previous tasks -->");else {if(e.push(" <!-- tool activity from previous tasks -->"),r.length>0){e.push(` <!-- activity_log_budget token_cap="${o}" included_entries="${t.length}" omitted_entries="${i}" total_entries="${s}" -->`);for(let a of r)e.push(` <!-- omitted_entries reason="${jt(a.reason)}" count="${a.count}": ${jt(a.message)} -->`);}for(let a of t){let d=a.entry,l=`tool="${jt(d.tool)}"`,c=d.cmd?` cmd="${jt(d.cmd)}"`:"",f="";if(d.reusable&&(f=d.status==="stale"?' reused="stale"':' reused="ok"'),d.reusable&&d.status==="stale")e.push(` <entry ${l}${c}${f}>\u26A0\uFE0F changed since \u2014 re-read</entry>`);else if(d.result){e.push(` <entry ${l}${c}${f}>`);let g=d.result,m=a.bodyCharsShown??g.length;g.length>m?e.push(jt(g.slice(0,m))+` \u2026 [truncated, ${m}/${g.length} chars shown]`):e.push(jt(g)),e.push(" </entry>");}else e.push(` <entry ${l}${c}${f} />`);}}return e.push("</activity_log>"),e}function lu(n){return typeof n!="number"||!Number.isFinite(n)||n<0?Zc:Math.floor(n)}function cu(n,e,t){let r=Math.floor(e/eu),o=Math.pow(2,n+r);return !Number.isFinite(o)||o<=0?0:Math.floor(t/o)}function uu(n,e){let t=Math.pow(2,e+tu);return !Number.isFinite(t)||t<=0?0:Math.floor(n/t)}function Ni(n,e,t,r){let o=n.result?.length??null,s=o===null?null:Math.min(o,Math.max(0,t));return {entry:n,newestIndex:e,bodyLimitChars:t,bodyCharsShown:o===null?null:Math.max(0,Math.min(r??s??0,s??0)),originalBodyChars:o}}function Di(n,e){let t=[];return n>0&&t.push({reason:"token_cap",count:n,message:"older entries omitted after the per-task token cap was reached"}),e>0&&t.push({reason:"repository_limit",count:e,message:"older entries omitted by the explicit repository safety limit before budgeting"}),t}function Li(n){let e=Di(n.omittedByTokenCap,n.repositoryLimitOmitted);return Mi({entries:n.entries,omissions:e,tokenCap:n.tokenCap,totalEntries:n.totalEntries}).join(`
315
- `)}function Oo(n,e){let t=n(e);return !Number.isFinite(t)||t<0?0:Math.floor(t)}function pu(n){let{entry:e,bodyLimitChars:t}=n;if(!e.result)return null;let r=Math.min(e.result.length,Math.max(0,t));for(let o=r;o>=0;o--){let s=Ni(e,n.newestIndex,t,o),i=[...n.selectedEntries,s],a=n.totalEntries-i.length-n.repositoryLimitOmitted,d=Li({entries:i,tokenCap:n.tokenCap,totalEntries:n.totalEntries,omittedByTokenCap:a,repositoryLimitOmitted:n.repositoryLimitOmitted});if(Oo(n.countTokens,d)<=n.tokenCap)return s}return null}function gu(n){let e=n.repositoryEntryLimit,t=typeof e=="number"&&Number.isFinite(e)&&e>=0&&n.entries.length>e,r=t?n.entries.length-Math.floor(e):0,s=[...t?n.entries.slice(r):n.entries].reverse(),i=[],a=n.entries.length;for(let g=0;g<s.length;g++){let m=s[g],_=cu(n.taskDistance,g,n.baseEntryChars),y=Ni(m,g,_),v=[...i,y],w=a-v.length-r,k=Li({entries:v,tokenCap:n.tokenCap,totalEntries:a,omittedByTokenCap:w,repositoryLimitOmitted:r});if(Oo(n.countTokens,k)<=n.tokenCap){i.push(y);continue}let E=pu({selectedEntries:i,entry:m,newestIndex:g,bodyLimitChars:_,tokenCap:n.tokenCap,totalEntries:a,repositoryLimitOmitted:r,countTokens:n.countTokens});E&&i.push(E);break}let d=a-i.length-r,l=Di(d,r),c=Mi({entries:i,omissions:l,tokenCap:n.tokenCap,totalEntries:a}).join(`
316
- `),f=Oo(n.countTokens,c);return {taskId:n.taskId,taskDistance:n.taskDistance,tokenCap:n.tokenCap,tokenCount:f,includedEntries:i.length,omittedEntries:l.reduce((g,m)=>g+m.count,0),totalEntries:a,omissions:l,entries:i,activityLog:c}}function So(n){return {threadId:n.threadId,agentId:n.agentId,lookback:n.lookback,activityLogTokenBudget:n.activityLogTokenBudget,baseEntryChars:n.baseEntryChars,tasks:[],activityLogByTask:new Map}}function fu(n){return !Number.isFinite(n)||n<0?0:Math.floor(n)}function mu(n){return n.length}function Mo(n){let e=lu(n.maxEntryChars),t=fu(n.activityLogTokenBudget),r=Math.max(0,Math.floor(n.lookback));if(!r||!n.threadId||!n.agentId)return So({threadId:n.threadId,agentId:n.agentId,lookback:r,activityLogTokenBudget:t,baseEntryChars:e});let o;try{o=new En().findTasksByThread(n.threadId).filter(l=>!l.parent_task_id&&l.agent_id===n.agentId).sort((l,c)=>c.started_at>l.started_at?1:-1).slice(0,r);}catch{return So({threadId:n.threadId,agentId:n.agentId,lookback:r,activityLogTokenBudget:t,baseEntryChars:e})}if(!o.length)return So({threadId:n.threadId,agentId:n.agentId,lookback:r,activityLogTokenBudget:t,baseEntryChars:e});let s=[];for(let d of o){let l=[];try{let c=JSON.parse(d.logs??"[]");Array.isArray(c)&&(l=c);}catch{}s.push({taskId:d.id,entries:du(l,d.completed_at)});}let i=[],a=new Map;for(let d=0;d<s.length;d++){let{taskId:l,entries:c}=s[d];if(c.length===0)continue;let f=gu({taskId:l,entries:c,taskDistance:d,baseEntryChars:e,tokenCap:uu(t,d),countTokens:n.countTokens,repositoryEntryLimit:n.repositoryEntryLimit});i.push(f),a.set(l,f.activityLog);}return {threadId:n.threadId,agentId:n.agentId,lookback:r,activityLogTokenBudget:t,baseEntryChars:e,tasks:i,activityLogByTask:a}}function $i(n){if(n.activityLogTokenBudget!==void 0&&!n.countTokens)throw new Error("countTokens is required when activityLogTokenBudget is supplied");return Mo({threadId:n.threadId,agentId:n.agentId,lookback:n.lookback,maxEntryChars:n.maxEntryChars,activityLogTokenBudget:n.activityLogTokenBudget??nu,countTokens:n.countTokens??mu,repositoryEntryLimit:n.repositoryEntryLimit}).activityLogByTask}p();p();var hu={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")},wu={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 Ui(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",hu,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)",wu,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}});}p();function Bi(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 Fi(n,e){return e?await e(n)?null:new Response(JSON.stringify({error:"Unauthorized"}),{status:401,headers:{"Content-Type":"application/json"}}):null}function vu(n,e){let t=new mcp_js.McpServer({name:"crewx-mcp-server",version:"1.0.0"},{capabilities:{tools:{}}});return Ui(t,n,e),t}function No(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=Bi(o);if(s)return s;let i=await Fi(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=vu(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)}}p();function ji(n){let e=z__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 Do(n){let e=ji(n);return crypto$1.createHash("sha256").update(e).digest("hex")}pe();function Vu(n){return n?n.settings?.template?.exec:void 0}function Ju(){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}=ae("crypto");return n(8).toString("hex")}}var Yo=class n extends _n{_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=Do(i),this._workspaceName=z.basename(i);let a=Vu(r);this._templateEngine=new mn({execPolicy:t.execPolicy??a}),this._documentLoader=o??new _t,this._layoutLoader=new yn({templatesPath:Mt()}),this._layoutRenderer=new kn,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=z.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=Oi.readFileSync(t,"utf-8");}catch(i){throw new Error(`[@crewx/sdk] Cannot read built-in config: ${t}
317
- ${i.message}`)}let s=Kn(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"&&!z.isAbsolute(l.path)?i[a]={...l,path:z.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 k of e.agents??[])r.set(k.id,k);for(let k of t.agents??[])r.has(k.id)&&console.warn(`[agent-loader] User agent "${k.id}" overrides built-in`),r.set(k.id,k);let o=Array.from(r.values()),s={...e.layouts??{},...t.layouts??{}},i={...e.documents??{},...t.documents??{}},a=e,d=t,l=sa(a.vars,d.vars),c=sa(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=Xu(a.providers,d.providers),_={...e},y={...t};for(let k of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete _[k],delete y[k];let w={...{..._,...y},agents:o,layouts:s,documents:i,skills:f};return g.length>0&&(w.hooks=g),l!==void 0&&(w.vars=l),c!==void 0&&(w.settings=c),m!==void 0&&(w.providers=m),w}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=Vn(e);s=n.mergeCrewxConfig(c,f),i=z.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=Vn(e),i=z.dirname(e);}let a=new _t(r);await a.load(s.documents,i);let d=s.agents??[];return await ia(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 _t(o);await a.load(i.documents,r??(typeof process<"u"?process.cwd():"/"));let d=i.agents??[];return await ia(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=uo(t);return z.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 No(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??ko(r),a=e.defaultMode??"query",d=t.manifest.platform,l=e.agentRunner??{run:async(m,_,y)=>{let w=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${m}`,_,{threadId:y?.threadId,platform:d});return {output:w.ok?w.data:w.error?.message??""}}},c=e.onInbound??(async m=>{let _=m.routingHints?.agentId??e.defaultAgent;if(!_)return {accepted:false,reason:"no_agent"};let{output:y}=await l.run(_,m.text,{threadId:m.threadId});return {accepted:true,output:y}}),f=vo({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(pn+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=>be(a.role.toLowerCase(),d)))),o&&(i=i.filter(a=>a.team&&o.some(d=>be(a.team.toLowerCase(),d)))),s&&(i=i.filter(a=>(Array.isArray(a.provider)?a.provider:[a.provider]).some(l=>s.some(c=>be(l.toLowerCase(),c))))),i}renderAgentPrompt(e){let t=e.startsWith("@")?e.slice(1):e,r=this._agents.get(t);if(!r)throw new Le(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=t?.__contextBudget,o=e.startsWith("@")?e.slice(1):e,s=this._agents.get(o);if(!s)throw new Le(o,Array.from(this._agents.keys()));let i=this._resolveLayoutSpec(s,t?.layout),a=this._extractLayoutId(i),d=this._extractLayoutProps(s,i,t?.layout),l=this._layoutLoader.load(a,d),c=s.inline?.prompt??s.inline?.system_prompt??s.description??`You are an expert ${o}.`,f=await this._documentLoader.buildContext(),g=t?.env??(typeof process<"u"?process.env:{}),m=t?.vars?.security_key??Ju(),_={...t?.vars??{},documents:f,env:g,agent:{id:s.id,name:s.name??s.id,role:s.role??"",team:s.team??"",description:s.description??""}},y=await this._templateEngine.render(c,_),v={mode:t?.session?.mode??"query",platform:t?.session?.platform??"cli",options:t?.session?.options??[]},w=s.provider,k=Array.isArray(w)?w:typeof w=="string"&&w.length>0?[w]:[],A=k.join(", ")||(typeof w=="string"?w:""),E=s.options,$=["goals","daily"],R={goals:false,daily:false},V;if(!Array.isArray(E)&&typeof E=="object"&&E!==null){let B=E;if("goals"in B){let X=B.goals;typeof X=="string"||Array.isArray(X)?R.goals=X:R.goals=!!X;}"daily"in B&&(R.daily=!!B.daily);let W={};for(let[X,ye]of Object.entries(B))$.includes(X)||(W[X]=ye);if(Object.keys(W).length>0){let X=k.some(rt=>rt.startsWith("cli/")),ye={};for(let[rt,x]of Object.entries(W)){let I={};if(Array.isArray(x))X&&(I.rawArgs=x);else if(typeof x=="object"&&x!==null){let D=x;Object.keys(D).length>0&&(I.named=D);}(I.named||I.rawArgs&&I.rawArgs.length>0)&&(ye[rt]=I);}V=Object.keys(ye).length>0?ye:void 0;}}let P=Array.isArray(E)?E:void 0,F={};for(let[B,W]of Object.entries(f))F[B]={content:W.content??"",toc:W.toc,summary:W.summary,path:W.path};if(R.goals){let B=z.join(this._projectRoot,"docs","goal"),W=await hi(B,void 0,R.goals);W&&(F.active_goals={content:W});}if(R.daily){let B=z.join(this._projectRoot,"docs","daily"),W=await wi(B);W&&(F.today_daily={content:W});}let se=t?.vars?.user_input??void 0,j=this._config?.settings?.dreaming?.continuity,S=j?.reuseReadOnly!==false,Z=typeof j?.lookback=="number"?j.lookback:5,H=typeof j?.maxEntryChars=="number"?j.maxEntryChars:8e3,L=t?.threadId??"",J=s.id,ie=!r?.activityLogDisabled&&S&&Z>0&&!!L&&!!t?.messages?.length,Q=new Map;if(ie)if(r?.activityLogTokenBudget!==void 0&&r.countTokens){let B=Mo({threadId:L,agentId:J,lookback:Z,maxEntryChars:H,activityLogTokenBudget:r.activityLogTokenBudget,countTokens:r.countTokens});Q=B.activityLogByTask,r.onActivityLogResult?.(B);}else {typeof j?.decayRate=="number"?j.decayRate:.5;Q=$i({threadId:L,agentId:J,lookback:Z,maxEntryChars:H});}let nt=(t?.messages??[]).map(B=>{if(!B.isAssistant)return B;let W=B.metadata?.task_id;return !W||!Q.has(W)?B:{...B,activity_log:Q.get(W)}}),Xt={user_input:se,agent:{id:s.id,name:s.name??s.id,role:s.role??"",team:s.team??"",description:s.description??"",provider:A,providerList:k,model:s.inline?.model,workingDirectory:s.working_directory??s.workingDirectory??".",inline:{...s.inline??{},prompt:y},specialties:s.specialties??[],capabilities:s.capabilities??[],remote:s.remote??null,optionsByMode:V,optionsArray:P},agentMetadata:{specialties:s.specialties??[],capabilities:s.capabilities??[],description:s.description??""},contextOptions:R,documents:F,skills:t?.skills??[],session:v,env:g,vars:{security_key:m,...t?.vars??{}},props:{...d??{},...t?.messages&&t.messages.length>0?{showConversationHistory:true}:{}},platform:v.platform,mode:v.mode,thread_id:L,now:hn(new Date),has_activity_log:Q.size>0,messages:nt,tools:this._tools.size>0?{list:Array.from(this._tools.values()).map(B=>({name:B.name,description:B.description,parameters:B.parameters})),json:JSON.stringify(Array.from(this._tools.values()).map(B=>({name:B.name,description:B.description,parameters:B.parameters})),null,2),count:this._tools.size}:null,metadata:{}};return this._layoutRenderer.render(l,Xt)}_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:To(s)}catch{return}}async _resolveFreshProvider(e,t,r){let o=ki(e.provider),s=lo(e.options,t,o,ao(r?.overdrive)),i=co(e.options,t),a=s.active&&s.provider?s.provider:r?.provider??i.provider??o,d=s.active&&s.model?s.model:r?.model??i.model??e.inline?.model;return d&&d.includes("{{")&&(d=await this._templateEngine.render(d,{...r?.vars??{}})),{baseProviderStr:o,baseModel:e.inline?.model,effectiveProviderStr:a,effectiveModel:d,overdrive:s}}_readInputBudgetPercent(){let r=this._config?.settings?.dreaming?.continuity;if(!(!r||!Object.prototype.hasOwnProperty.call(r,"inputBudgetPercent")))return r.inputBudgetPercent}_resolveBudgetModel(e,t){if(t&&t.trim())return t;let r=Fn(e)?.model;return typeof r=="string"&&r.trim()?r:""}_resolveContextMode(e){return e?.contextMode==="instruction-only"?"instruction-only":"full"}_hasUsableResumeSessionId(e){return typeof e=="string"&&e.trim().length>0}_buildInstructionOnlyResumeManifest(e){return {phase:"resume",initialInputFraming:Hr,resolved:e.budget.resolved,reason:e.budget.resolved?void 0:e.budget.reason,requestedProvider:e.requestedProvider,requestedModel:e.requestedModel,effectiveProvider:e.effectiveProvider,effectiveModel:e.effectiveModel,contextWindowTokens:e.budget.resolved?e.budget.contextWindowTokens:null,inputBudgetPercent:e.budget.resolved?e.budget.inputBudgetPercent:e.budget.inputBudgetPercent??(typeof e.rawInputBudgetPercent=="number"?e.rawInputBudgetPercent:null),inputBudgetTokens:e.budget.resolved?e.budget.inputBudgetTokens:null,tokenizer:e.budget.tokenizer,initialTokenCount:e.messageTokenCount,finalTokenCount:e.messageTokenCount,activityLogTokenCount:0,activityIncludedEntries:0,activityOmittedEntries:0,activityRemovedForBudget:false,activityNewestTaskTokenCap:null,historyOriginalMessages:0,historyIncludedMessages:0,historyOmittedMessages:0,overBudget:e.budget.resolved?e.messageTokenCount>e.budget.inputBudgetTokens:false}}_prepareInstructionOnlyResumeWithBudget(e){let t=e.providerResolution.effectiveProviderStr,r=this._resolveBudgetModel(t,e.providerResolution.effectiveModel),o=this._readInputBudgetPercent(),s=Gn({provider:t,model:r,inputBudgetPercent:o}),i=e.providerResolution.baseProviderStr,a=e.providerResolution.baseModel??null,d=r||null,l=zn(e.message,{provider:t,model:r}).tokenCount,c=this._buildInstructionOnlyResumeManifest({budget:s,requestedProvider:i,requestedModel:a,effectiveProvider:t,effectiveModel:d,rawInputBudgetPercent:o,messageTokenCount:l});return this._hasUsableResumeSessionId(e.resumeSessionId)?s.resolved&&l>s.inputBudgetTokens?{contextBudget:c,error:{code:"INPUT_BUDGET_EXCEEDED",message:`Input budget exceeded: instruction-only resume message is ${l} tokens; budget is ${s.inputBudgetTokens} tokens.`}}:{contextBudget:c}:{contextBudget:c,error:{code:"RESUME_SESSION_REQUIRED",message:'contextMode "instruction-only" requires a same-provider native resumeSessionId.'}}}_activityLogEntryCounts(e){return e?e.tasks.reduce((t,r)=>({tokenCount:t.tokenCount+r.tokenCount,includedEntries:t.includedEntries+r.includedEntries,omittedEntries:t.omittedEntries+r.omittedEntries}),{tokenCount:0,includedEntries:0,omittedEntries:0}):{tokenCount:0,includedEntries:0,omittedEntries:0}}_buildUnresolvedContextBudgetManifest(e){return {phase:"fresh",initialInputFraming:Hn,resolved:false,reason:e.budget.resolved?void 0:e.budget.reason,requestedProvider:e.requestedProvider,requestedModel:e.requestedModel,effectiveProvider:e.effectiveProvider,effectiveModel:e.effectiveModel,contextWindowTokens:null,inputBudgetPercent:e.budget.resolved?e.budget.inputBudgetPercent:e.budget.inputBudgetPercent??(typeof e.rawInputBudgetPercent=="number"?e.rawInputBudgetPercent:null),inputBudgetTokens:null,tokenizer:e.budget.tokenizer,initialTokenCount:null,finalTokenCount:null,activityLogTokenCount:null,activityIncludedEntries:null,activityOmittedEntries:null,activityRemovedForBudget:false,activityNewestTaskTokenCap:null,historyOriginalMessages:e.historyOriginalMessages,historyIncludedMessages:e.historyOriginalMessages,historyOmittedMessages:0,overBudget:false}}_buildResolvedContextBudgetManifest(e){let t=this._activityLogEntryCounts(e.activityLogResult);return {phase:"fresh",initialInputFraming:Hn,resolved:true,requestedProvider:e.requestedProvider,requestedModel:e.requestedModel,effectiveProvider:e.effectiveProvider,effectiveModel:e.effectiveModel,contextWindowTokens:e.budget.contextWindowTokens,inputBudgetPercent:e.budget.inputBudgetPercent,inputBudgetTokens:e.budget.inputBudgetTokens,tokenizer:e.budget.tokenizer,initialTokenCount:e.initialTokenCount,finalTokenCount:e.finalTokenCount,activityLogTokenCount:t.tokenCount,activityIncludedEntries:t.includedEntries,activityOmittedEntries:t.omittedEntries,activityRemovedForBudget:e.activityRemovedForBudget,activityNewestTaskTokenCap:Math.floor(e.budget.inputBudgetTokens/8),historyOriginalMessages:e.historyOriginalMessages,historyIncludedMessages:e.historyIncludedMessages,historyOmittedMessages:e.historyOriginalMessages-e.historyIncludedMessages,overBudget:e.initialTokenCount>e.budget.inputBudgetTokens}}async _renderFreshPromptVariant(e){return this.renderAgentPromptFull(e.agentRef,{session:{mode:e.mode,platform:e.options?.platform},vars:{user_input:e.message,...e.options?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(e.agent,e.options)},messages:e.messages,threadId:e.options?.threadId,__contextBudget:{activityLogDisabled:e.activityLogDisabled,activityLogTokenBudget:e.activityLogTokenBudget,countTokens:e.countTokens,onActivityLogResult:e.onActivityLogResult}})}async _prepareFreshPromptWithBudget(e){let t=e.historyMessages,r=t??[],o=r.length,s=e.providerResolution.effectiveProviderStr,i=this._resolveBudgetModel(s,e.providerResolution.effectiveModel),a=this._readInputBudgetPercent(),d=Gn({provider:s,model:i,inputBudgetPercent:a}),l=e.providerResolution.baseProviderStr,c=e.providerResolution.baseModel??null,f=i||null;if(!d.resolved)return {renderedPrompt:await this._renderFreshPromptVariant({...e,messages:t}),contextBudget:this._buildUnresolvedContextBudgetManifest({budget:d,requestedProvider:l,requestedModel:c,effectiveProvider:s,effectiveModel:f,rawInputBudgetPercent:a,historyOriginalMessages:o})};let g=Gr({provider:s,model:d.model}),m=R=>g.countTokens(R),_=R=>zr({systemPrompt:R,message:e.message},m),y,v=await this._renderFreshPromptVariant({...e,messages:t,activityLogTokenBudget:d.inputBudgetTokens,countTokens:m,onActivityLogResult:R=>{y=R;}}),w=_(v),k=w,A=false,E=r;if(k>d.inputBudgetTokens&&y&&y.activityLogByTask.size>0&&(v=await this._renderFreshPromptVariant({...e,messages:E,activityLogDisabled:true,activityLogTokenBudget:d.inputBudgetTokens,countTokens:m}),k=_(v),A=true),k>d.inputBudgetTokens&&E.length>0)for(let R=1;R<=r.length;R++){let V=r.slice(R),P=await this._renderFreshPromptVariant({...e,messages:V,activityLogDisabled:A,activityLogTokenBudget:d.inputBudgetTokens,countTokens:m}),F=_(P);if(v=P,k=F,E=V,F<=d.inputBudgetTokens)break}let $=this._buildResolvedContextBudgetManifest({budget:d,requestedProvider:l,requestedModel:c,effectiveProvider:s,effectiveModel:f,initialTokenCount:w,finalTokenCount:k,activityLogResult:y,activityRemovedForBudget:A,historyOriginalMessages:o,historyIncludedMessages:E.length});return k>d.inputBudgetTokens?{renderedPrompt:v,contextBudget:$,countTokens:m,error:{code:"INPUT_BUDGET_EXCEEDED",message:`Input budget exceeded: final provider initial input is ${k} tokens; budget is ${d.inputBudgetTokens} tokens.`}}:{renderedPrompt:v,contextBudget:$,countTokens:m}}_recountFreshProviderInitialInput(e){let t=e.contextBudgetManifest;if(!t?.resolved||!t.effectiveModel)return null;let r=e.countTokens??(o=>zn(o,{provider:t.effectiveProvider,model:t.effectiveModel}).tokenCount);return zr({systemPrompt:e.providerOptions.systemPrompt,message:e.message},r)}_validateFreshProviderInitialInputBudget(e){let t=e.contextBudgetManifest;if(!t?.resolved||t.finalTokenCount===null||t.inputBudgetTokens===null)return;let r=this._recountFreshProviderInitialInput(e);if(r!==null){if(r!==t.finalTokenCount)throw new Error(`Context budget recount mismatch: provider initial input is ${r} tokens but manifest.finalTokenCount is ${t.finalTokenCount}.`);if(r>t.inputBudgetTokens)return {code:"INPUT_BUDGET_EXCEEDED",message:`Input budget exceeded: final provider initial input is ${r} tokens; budget is ${t.inputBudgetTokens} tokens.`}}}_resolveTimeout(e,t){let r=e==="query"?"CREWX_TIMEOUT_QUERY":"CREWX_TIMEOUT_EXECUTE";if(process.env[r]!=null&&process.env[r]!==""){let o=ti();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=so();return t!==void 0?t:e?.meta?.defaultIdleMs!==void 0?e.meta.defaultIdleMs:6e5}_lookupCliAdapter(e){return xo(e)}_resolveEffectiveCost(e,t,r){return Rs(e?.costUsd,e?.inputTokens,e?.outputTokens,e?.cachedInputTokens,t)}_resolveEffectiveCwd(e,t){return t?.cwd??(e.working_directory?z.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)??un(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=vn.getStore()??Eo(r?.trace),i=r?.taskId??xt("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 vn.run(d,async()=>{let c=Date.now(),f=new Date,g;try{g=Jn(e,Array.from(this._agents.values()));}catch(x){if(x instanceof Le){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 I=Date.now()-c,D={code:"AGENT_NOT_FOUND",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:I,error:D,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:D,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:I,taskId:i}}}throw x}d.callerAgentId=g.id;let m=await this._resolveFreshProvider(g,"query",r),_=m.baseProviderStr,y=m.effectiveProviderStr,v=m.effectiveModel,w=m.overdrive,k=y!==_?void 0:r?.resumeSessionId,E=this._resolveContextMode(r)==="instruction-only",$,R,V,P=v,F,se,K,ne,j=!1,S=x=>{j||(j=!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:P,provider:y,codingAgentCommand:$,renderedPrompt:se,metadata:{...r?.metadata??{},provider:y,...w.active?{overdrive:!0}:{},...F?{provider_session_id:F}:{},...K?{context_budget:K}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));};if(E){let x=this._prepareInstructionOnlyResumeWithBudget({message:t,providerResolution:m,resumeSessionId:k});if(K=x.contextBudget,x.error){S();let I=Date.now()-c,D=x.error;return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:I,error:D,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:y,model:v,durationMs:I,taskId:i}}}}let Z;try{Z=Be(y,this._additionalArgsProvider);}catch(x){S();let I=Date.now()-c,D={code:"PROVIDER_ERROR",message:x.message,...x instanceof exports.ProviderError?{providerCode:x.code}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:I,error:D,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:y,model:v,durationMs:I,taskId:i}}}let H;if(E||(H=await this._fetchHistoryMessages(r?.threadId,i,r?.messages)),!E)try{let x=await this._prepareFreshPromptWithBudget({agentRef:e,agent:g,mode:"query",message:t,options:r,providerResolution:m,historyMessages:H});if(se=x.renderedPrompt,K=x.contextBudget,ne=x.countTokens,x.error){S();let I=Date.now()-c,D=x.error;return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:I,error:D,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:y,model:v,durationMs:I,taskId:i}}}}catch(x){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${x instanceof Error?x.message:String(x)}`);}let L=g.options,J=w.active?w.mode:L?.query?.mode,ie=w.effort??r?.effort??L?.query?.effort,Q=Array.isArray(L?.query?.tools)?L.query.tools:void 0,nt=this._tools.size>0?this._filterToolsByMode(Q):[],Xt=(()=>{let x=L?.query;if(!x||Array.isArray(x))return;let{tools:I,effort:D,mode:Re,provider:ot,model:C,profiles:te,...st}=x,it=Object.entries(st).filter(([,Me])=>Me!=null);if(it.length!==0)return Object.fromEntries(it.map(([Me,Cr])=>[Me,String(Cr)]))})(),B=g.inline?.max_steps;y.startsWith("api/")&&S();let W=!1,X=0,ye=()=>{},rt=new Promise(x=>{ye=x;});this._activeTasks.set(i,{pid:void 0,done:rt});try{let x={model:v,effort:ie,mode:J,context:r?.context,...E?{}:{systemPrompt:se??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`},additionalArgs:Array.isArray(L?.query)?L.query:void 0,resumeSessionId:k,tools:nt.length>0?nt:void 0,maxSteps:B,configOptions:Xt,timeoutMs:this._resolveTimeout("query",this._lookupCliAdapter(y)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(y)),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:y,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,f)},onPid:C=>{let te=this._activeTasks.get(i);te&&(te.pid=C),S(C);},onProviderSessionId:C=>{F=C;},onOutput:(C,te)=>{let st=this._lookupCliAdapter(y);te==="stdout"&&st?.suppressOutputLine?.(C)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:C,level:te}),te==="stdout"&&this.emitToolEvents(i,e,y,C,g.id,r?.threadId??"","");},onTaskLog:C=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",y,C);for(let te of C)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(te),level:"info"});},onCommand:C=>{$=C;},onUsage:C=>{R=C;},onExitCode:C=>{V=C;},onModel:C=>{P||(P=C);}},I=E?void 0:this._validateFreshProviderInitialInputBudget({message:t,providerOptions:x,contextBudgetManifest:K,countTokens:ne});if(I){S();let C=Date.now()-c;return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:C,error:I,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),W=!0,{ok:!1,data:"",error:I,meta:{agentId:g.id,provider:y,model:v,durationMs:C,taskId:i}}}let D=await Z.query(t,x);X=this._resolveEffectiveCost(R,P,c),S();let Re=Date.now()-c,ot={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",result:D,durationMs:Re,exitCode:V,inputTokens:R?.inputTokens,outputTokens:R?.outputTokens,cachedInputTokens:R?.cachedInputTokens,costUsd:X,model:P,metadata:Object.keys(ot).length>0?ot:void 0}),W=!0,{ok:!0,data:D,meta:{agentId:g.id,provider:y,model:v,durationMs:Re,taskId:i}}}catch(x){if(x instanceof exports.ClientToolCallRequiredError){let Re=xt("thd");return this._pendingThreads.set(Re,{agentRef:g.id,providerStr:y,continuationState:x.continuationState,toolCall:x.toolCall,traceId:i,startMs:c,model:v}),W=!0,{ok:!0,status:"requires_action",data:"",toolCall:x.toolCall,threadId:Re,meta:{agentId:g.id,provider:y,model:v,durationMs:Date.now()-c,taskId:i}}}X=this._resolveEffectiveCost(R,P,c),S();let I=Date.now()-c,D={code:"QUERY_FAILED",message:x.message,...x instanceof exports.ProviderError?{providerCode:x.code}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:I,error:D,exitCode:V,inputTokens:R?.inputTokens,outputTokens:R?.outputTokens,cachedInputTokens:R?.cachedInputTokens,costUsd:X,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),W=!0,{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:y,model:v,durationMs:I,taskId:i}}}finally{W||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:V??-1,inputTokens:R?.inputTokens,outputTokens:R?.outputTokens,cachedInputTokens:R?.cachedInputTokens,costUsd:X,model:P}),this._activeTasks.delete(i),this._clearCallerIdentityOverride(i,l),ye();}})}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=Be(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=vn.getStore()??Eo(r?.trace),i=r?.taskId??xt("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 vn.run(d,async()=>{let c=Date.now(),f=new Date,g;try{g=Jn(e,Array.from(this._agents.values()));}catch(x){if(x instanceof Le){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 I=Date.now()-c,D={code:"AGENT_NOT_FOUND",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:I,error:D,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:D,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:I,taskId:i}}}throw x}d.callerAgentId=g.id;let m=await this._resolveFreshProvider(g,"execute",r),_=m.baseProviderStr,y=m.effectiveProviderStr,v=m.effectiveModel,w=m.overdrive,k=y!==_?void 0:r?.resumeSessionId,E=this._resolveContextMode(r)==="instruction-only",$,R,V,P=v,F,se,K,ne,j=!1,S=x=>{j||(j=!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:P,provider:y,codingAgentCommand:$,renderedPrompt:se,metadata:{...r?.metadata??{},provider:y,...w.active?{overdrive:!0}:{},...F?{provider_session_id:F}:{},...K?{context_budget:K}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));};if(E){let x=this._prepareInstructionOnlyResumeWithBudget({message:t,providerResolution:m,resumeSessionId:k});if(K=x.contextBudget,x.error){S();let I=Date.now()-c,D=x.error;return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:I,error:D,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:y,model:v,durationMs:I,taskId:i}}}}let Z;try{Z=Be(y,this._additionalArgsProvider);}catch(x){S();let I=Date.now()-c,D={code:"PROVIDER_ERROR",message:x.message,...x instanceof exports.ProviderError?{providerCode:x.code}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:I,error:D,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:y,model:v,durationMs:I,taskId:i}}}let H;if(E||(H=await this._fetchHistoryMessages(r?.threadId,i,r?.messages)),!E)try{let x=await this._prepareFreshPromptWithBudget({agentRef:e,agent:g,mode:"execute",message:t,options:r,providerResolution:m,historyMessages:H});if(se=x.renderedPrompt,K=x.contextBudget,ne=x.countTokens,x.error){S();let I=Date.now()-c,D=x.error;return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:I,error:D,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:y,model:v,durationMs:I,taskId:i}}}}catch(x){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${x instanceof Error?x.message:String(x)}`);}let L=g.options,J=w.active?w.mode:L?.execute?.mode,ie=w.effort??r?.effort??L?.execute?.effort,Q=Array.isArray(L?.execute?.tools)?L.execute.tools:void 0,nt=this._tools.size>0?this._filterToolsByMode(Q):[],Xt=(()=>{let x=L?.execute;if(!x||Array.isArray(x))return;let{tools:I,effort:D,mode:Re,provider:ot,model:C,profiles:te,...st}=x,it=Object.entries(st).filter(([,Me])=>Me!=null);if(it.length!==0)return Object.fromEntries(it.map(([Me,Cr])=>[Me,String(Cr)]))})(),B=g.inline?.max_steps;y.startsWith("api/")&&S();let W=!1,X=0,ye=()=>{},rt=new Promise(x=>{ye=x;});this._activeTasks.set(i,{pid:void 0,done:rt});try{let x={model:v,effort:ie,mode:J,context:r?.context,...E?{}:{systemPrompt:se??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`},additionalArgs:Array.isArray(L?.execute)?L.execute:void 0,resumeSessionId:k,tools:nt.length>0?nt:void 0,maxSteps:B,configOptions:Xt,timeoutMs:this._resolveTimeout("execute",this._lookupCliAdapter(y)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(y)),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:y,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,f)},onPid:C=>{let te=this._activeTasks.get(i);te&&(te.pid=C),S(C);},onProviderSessionId:C=>{F=C;},onOutput:(C,te)=>{let st=this._lookupCliAdapter(y);te==="stdout"&&st?.suppressOutputLine?.(C)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:C,level:te}),te==="stdout"&&this.emitToolEvents(i,e,y,C,g.id,r?.threadId??"","");},onTaskLog:C=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",y,C);for(let te of C)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(te),level:"info"});},onCommand:C=>{$=C;},onUsage:C=>{R=C;},onExitCode:C=>{V=C;},onModel:C=>{P||(P=C);}},I=E?void 0:this._validateFreshProviderInitialInputBudget({message:t,providerOptions:x,contextBudgetManifest:K,countTokens:ne});if(I){S();let C=Date.now()-c;return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:C,error:I,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),W=!0,{ok:!1,data:"",error:I,meta:{agentId:g.id,provider:y,model:v,durationMs:C,taskId:i}}}let D=await Z.execute(t,x);X=this._resolveEffectiveCost(R,P,c),S();let Re=Date.now()-c,ot={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",result:D,durationMs:Re,exitCode:V,inputTokens:R?.inputTokens,outputTokens:R?.outputTokens,cachedInputTokens:R?.cachedInputTokens,costUsd:X,model:P,metadata:Object.keys(ot).length>0?ot:void 0}),W=!0,{ok:!0,data:D,meta:{agentId:g.id,provider:y,model:v,durationMs:Re,taskId:i}}}catch(x){X=this._resolveEffectiveCost(R,P,c),S();let I=Date.now()-c,D={code:"EXECUTE_FAILED",message:x.message,...x instanceof exports.ProviderError?{providerCode:x.code}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:I,error:D,exitCode:V,inputTokens:R?.inputTokens,outputTokens:R?.outputTokens,cachedInputTokens:R?.cachedInputTokens,costUsd:X,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),W=!0,{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:y,model:v,durationMs:I,taskId:i}}}finally{W||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:V??-1,inputTokens:R?.inputTokens,outputTokens:R?.outputTokens,cachedInputTokens:R?.cachedInputTokens,costUsd:X,model:P}),this._activeTasks.delete(i),this._clearCallerIdentityOverride(i,l),ye();}})}finally{this._clearCallerIdentityOverride(i,l);}}};function sa(n,e){let t=Qo(n)?n:void 0,r=Qo(e)?e:void 0;if(!(!t&&!r))return {...t??{},...r??{}}}function Qo(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Xu(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(!Qo(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 Yu(n){let e=Array.isArray(n.provider)?n.provider:[n.provider],t=n.options,r=[...e];for(let o of ["query","execute"]){let s=co(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)?lr(i.overdrive):void 0;a?.provider&&r.push(a.provider);}return r}async function ia(n,e,t){let r=n.flatMap(Yu);if(r.some(s=>s.startsWith("api/"))){let{registerApiProviders:s}=await Promise.resolve().then(()=>($o(),Gi));s(t?.api);}await Zu(r,e),ep(r,e),Qu(r);}function Qu(n){if(!n.some(r=>r.startsWith("acp/")))return;let{registerAcpProviders:t}=(qo(),ws(Yi));t();}async function Zu(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(()=>(Ko(),Zi)),s=new Map;for(let i of r)i.type==="remote"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&Ue("remote",o(s,Be));}function ep(n,e){if(!n.some(i=>i.startsWith("plugin/")))return;let r=e.providers;if(!Array.isArray(r))return;let{createPluginProviderFactory:o}=(Vo(),ws(ra)),s=new Map;for(let i of r)i.type==="plugin"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&Ue("plugin",o(s));}p();var Zo=class{detach(e){}};p();var tp="crewx:fs:",es=class{prefix;store;constructor(e){this.prefix=e?.prefix??tp,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,"/")}`}};p();var qt="default",zt="archive",aa="wi-default-flow",np="wi-plan-flow",rp="wi-default-flow.yaml",op="wi-plan-flow.yaml",Tr=/^[a-zA-Z0-9_-]{1,64}$/;function da(n){return n===qt||n===zt}function sp(n){let e={id:qt,name:"Default",workflowId:aa,system:true,readOnly:false},t={id:zt,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||da(d)||!Tr.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]}p();var ee=class extends Error{constructor(e){super(e),this.name="WiCreateError";}},ap=300*1e3,dp=300*1e3,lp=1e4,cp=50;function up(n){return new Promise(e=>setTimeout(e,n))}function pp(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 gp(n){return n.normalize("NFKD").replace(/[^\x00-\x7F]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toUpperCase().slice(0,60)}function fp(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 la(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 ca(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 ua(n){return (typeof n=="string"?n.trim().replace(/^@+/,""):"")||void 0}function pa(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 ga(n,e){let t=typeof n=="string"?n.trim():"";if(!t){if(e?.required)throw new ee("board is required");return}if(!Tr.test(t))throw new ee("board must match ^[a-zA-Z0-9_-]{1,64}$");if(t===zt)throw new ee(`board cannot be '${zt}'`);return t}function Gt(n){return JSON.stringify(n)}function mp(n,e){return e.length===0?[`${n}: []`]:[`${n}:`,...e.map(t=>` - ${Gt(t)}`)]}async function yp(n){let e=await Oi.promises.stat(n).catch(()=>null);e&&Date.now()-e.mtimeMs>dp&&await Oi.promises.rm(n,{recursive:true,force:true}).catch(()=>{});}async function hp(n,e){let t=z.join(n,".wi-create.lock"),r=Date.now()+lp;for(;Date.now()<r;)try{await Oi.promises.mkdir(t);try{return await e()}finally{await Oi.promises.rm(t,{recursive:!0,force:!0}).catch(()=>{});}}catch(o){if(o.code!=="EEXIST")throw o;await yp(t),await up(cp);}throw new ee("WI create lock timeout: docs/wi/.wi-create.lock")}async function fa(n){let e=[],t=await Oi.promises.readdir(n,{withFileTypes:true}).catch(r=>{if(r.code==="ENOENT")return [];throw r});for(let r of t){let o=z.join(n,r.name);r.isDirectory()?e.push(...await fa(o)):r.isFile()&&r.name.endsWith(".md")&&e.push(r.name);}return e}async function wp(n){let e=await Oi.promises.readdir(n).catch(r=>{if(r.code==="ENOENT")return [];throw r}),t=await fa(z.join(n,"archive"));return [...e,...t]}function kp(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 _p(n,e){return n.some(t=>t===`${e}.md`||t.startsWith(`${e}-`))}async function vp(n,e){let t=z.join(n,`.wi-${e}.lock`);try{return await Oi.promises.writeFile(t,"",{flag:"wx"}),{claimed:!0,lockPath:t}}catch(r){if(r.code!=="EEXIST")throw r;return await Oi.promises.stat(t).then(s=>Date.now()-s.mtimeMs>ap).catch(()=>false)&&await Oi.promises.unlink(t).then(()=>true).catch(()=>false)?(await Oi.promises.writeFile(t,"",{flag:"wx"}),{claimed:true,lockPath:t}):{claimed:false,lockPath:t}}}function xp(n){return {title:la(n.title),assignee:ua(n.assignee),body:(n.body??"").trim(),board:ga(n.board),source:ca(n.source),depends_on:pa(n.depends_on)}}function Ep(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 Tp(n){let e=ga(n.board,{required:true}),t=ca(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:Ep(o.key,s,r),title:la(o.title),assignee:ua(o.assignee),body:o.body.trim(),board:e,source:t,depends_on:pa(o.depends_on)}})}function Ap(n,e){return n.map(t=>e.get(t)??t)}function Rp(n,e,t){let r=!!n.board&&n.board!==qt,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:`---
318
- ${[`wi_id: ${e}`,`title: ${Gt(n.title)}`,`date: ${Gt(t)}`,"status: draft",...n.assignee?[`assignee: ${Gt(n.assignee)}`]:[],"priority: normal",`source: ${Gt(n.source)}`,...r?[`board: ${Gt(n.board)}`]:[],...mp("depends_on",n.depends_on)].join(`
311
+ `).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(i){throw new O("DB_ERROR","Failed to get tasks for report",i)}finally{o.close();}}findTaskEvidence(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(drizzleOrm.eq(u.workspace_id,e.workspaceId)),e.agents&&e.agents.length>0&&r.push(drizzleOrm.inArray(u.agent_id,e.agents)),e.statuses&&e.statuses.length>0&&r.push(drizzleOrm.inArray(u.status,e.statuses)),e.from&&r.push(drizzleOrm.gte(u.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(u.started_at,e.to));let o=r.length>0?drizzleOrm.and(...r):void 0,i=(e.order??"DESC")==="ASC"?drizzleOrm.asc(u.started_at):drizzleOrm.desc(u.started_at),s={id:u.id,agent_id:u.agent_id,status:u.status,prompt:u.prompt,started_at:u.started_at,completed_at:u.completed_at,thread_id:u.thread_id};return e.limit?t.db.select(s).from(u).where(o).orderBy(i).limit(e.limit).all():t.db.select(s).from(u).where(o).orderBy(i).all()}catch(r){throw new O("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,i=[drizzleOrm.isNotNull(u.thread_id),drizzleOrm.isNull(u.parent_task_id),drizzleOrm.isNull(u.caller_agent_id),drizzleOrm.or(drizzleOrm.isNull(u.platform),drizzleOrm.ne(u.platform,"workflow")),drizzleOrm.or(drizzleOrm.isNull(u.metadata),drizzleOrm.notLike(u.metadata,'%"kind":"workflow_card"%')),drizzleOrm.or(drizzleOrm.isNull(u.metadata),drizzleOrm.notLike(u.metadata,'%"retriedFromTaskId"%'))];e.workspaceId&&i.push(drizzleOrm.eq(u.workspace_id,e.workspaceId)),e.from&&i.push(drizzleOrm.gte(u.started_at,e.from)),e.to&&i.push(drizzleOrm.lt(u.started_at,e.to));let s=t.db.select({id:u.id,agent_id:u.agent_id,status:u.status,prompt:u.prompt,started_at:u.started_at,completed_at:u.completed_at,thread_id:u.thread_id}).from(u).where(drizzleOrm.and(...i)).orderBy(drizzleOrm.asc(u.started_at),drizzleOrm.asc(u.id)).all(),a=new Map;for(let c of s){if(!c.thread_id)continue;let l={id:c.id,agentId:c.agent_id,status:c.status,prompt:c.prompt,startedAt:c.started_at,completedAt:c.completed_at},f=a.get(c.thread_id);f?f.push(l):a.set(c.thread_id,[l]);}let d=[];for(let[c,l]of a){let f=l.filter(g=>g.agentId===e.targetAgentId).length;f<2||d.push({threadId:c,targetAgentTurnCount:f,turns:l});}return d.sort((c,l)=>{let f=c.turns[c.turns.length-1].startedAt,g=l.turns[l.turns.length-1].startedAt;return f<g?1:f>g?-1:0}),d.slice(0,r).map(c=>({threadId:c.threadId,targetAgentTurnCount:c.targetAgentTurnCount,turns:c.turns.slice(-o)}))}catch(r){throw new O("DB_ERROR","Failed to find thread chains",r)}finally{t.close();}}};var su=new Set(["Read","Grep","Find","Glob"]),au=["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"],du=[/\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/],cu=8e3,lu=100,uu=3,pu=Number.MAX_SAFE_INTEGER;function gu(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 fu(n,e){if(su.has(n))return true;if(n!=="Bash"||!e)return false;let t=e.split(`
312
+ `)[0].trimStart();return du.some(r=>r.test(t))?false:au.some(r=>t.startsWith(r))}function Ft(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function mu(n,e,t){if(n!=="Read"||!e)return "ok";let o=e.split(`
313
+ `).find(i=>i.trim()&&!i.startsWith("Read "))?.trim()??e.trim();if(!o)return "unknown";try{let i=Ds__namespace.statSync(o);if(t){let s=Date.parse(t);if(!Number.isNaN(s)&&i.mtimeMs>s)return "stale"}return "ok"}catch{return "unknown"}}function yu(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 hu(n){if(!Array.isArray(n))return [];let e=n,t=e.filter(a=>a.level==="stdout"&&a.message).map(a=>a.message),r=yu(t),o=[];for(let a of e)a.level==="info"&&a.message?o.push(...Ee(a.message,a.timestamp)):a.level==="stdout"&&a.message&&r&&o.push(...cn("",a.message,r));let i=new Map,s=[];for(let a of o)if(a.type==="tool_use"){let d={tool:gu(a.toolName??""),input:a.toolInput??null,result:null,isError:false},c=a.toolUseId;if(c){if(i.has(c)){i.get(c).input=d.input;continue}i.set(c,d);}s.push(d);}else if(a.type==="tool_result"){if(a.toolUseId&&i.has(a.toolUseId)){let d=i.get(a.toolUseId);d.isError=a.isError===true,d.result=a.resultPreview??null;}else for(let d=s.length-1;d>=0;d--)if(s[d].result===null){s[d].isError=a.isError===true,s[d].result=a.resultPreview??null;break}}return s}function wu(n,e){let t=hu(n),r=[];for(let o of t){let i=o.tool==="Bash"?o.input?.split(`
314
+ `)[0]?.slice(0,150)??null:o.input?.slice(0,150)??null,s=fu(o.tool,o.input)&&!o.isError;r.push({tool:o.tool,cmd:i,result:o.result,status:mu(o.tool,o.input,e),reusable:s});}return r}function Ls(n){let e=["<activity_log>"],{entries:t,omissions:r,tokenCap:o,totalEntries:i}=n,s=r.reduce((a,d)=>a+d.count,0);if(t.length===0&&s===0)e.push(" <!-- no activity found in previous tasks -->");else {if(e.push(" <!-- tool activity from previous tasks -->"),r.length>0){e.push(` <!-- activity_log_budget token_cap="${o}" included_entries="${t.length}" omitted_entries="${s}" total_entries="${i}" -->`);for(let a of r)e.push(` <!-- omitted_entries reason="${Ft(a.reason)}" count="${a.count}": ${Ft(a.message)} -->`);}for(let a of t){let d=a.entry,c=`tool="${Ft(d.tool)}"`,l=d.cmd?` cmd="${Ft(d.cmd)}"`:"",f="";if(d.reusable&&(f=d.status==="stale"?' reused="stale"':' reused="ok"'),d.reusable&&d.status==="stale")e.push(` <entry ${c}${l}${f}>\u26A0\uFE0F changed since \u2014 re-read</entry>`);else if(d.result){e.push(` <entry ${c}${l}${f}>`);let g=d.result,m=a.bodyCharsShown??g.length;g.length>m?e.push(Ft(g.slice(0,m))+` \u2026 [truncated, ${m}/${g.length} chars shown]`):e.push(Ft(g)),e.push(" </entry>");}else e.push(` <entry ${c}${l}${f} />`);}}return e.push("</activity_log>"),e}function ku(n){return typeof n!="number"||!Number.isFinite(n)||n<0?cu:Math.floor(n)}function vu(n,e,t){let r=Math.floor(e/lu),o=Math.pow(2,n+r);return !Number.isFinite(o)||o<=0?0:Math.floor(t/o)}function _u(n,e){let t=Math.pow(2,e+uu);return !Number.isFinite(t)||t<=0?0:Math.floor(n/t)}function $s(n,e,t,r){let o=n.result?.length??null,i=o===null?null:Math.min(o,Math.max(0,t));return {entry:n,newestIndex:e,bodyLimitChars:t,bodyCharsShown:o===null?null:Math.max(0,Math.min(r??i??0,i??0)),originalBodyChars:o}}function Us(n,e){let t=[];return n>0&&t.push({reason:"token_cap",count:n,message:"older entries omitted after the per-task token cap was reached"}),e>0&&t.push({reason:"repository_limit",count:e,message:"older entries omitted by the explicit repository safety limit before budgeting"}),t}function Bs(n){let e=Us(n.omittedByTokenCap,n.repositoryLimitOmitted);return Ls({entries:n.entries,omissions:e,tokenCap:n.tokenCap,totalEntries:n.totalEntries}).join(`
315
+ `)}function Oo(n,e){let t=n(e);return !Number.isFinite(t)||t<0?0:Math.floor(t)}function xu(n){let{entry:e,bodyLimitChars:t}=n;if(!e.result)return null;let r=Math.min(e.result.length,Math.max(0,t));for(let o=r;o>=0;o--){let i=$s(e,n.newestIndex,t,o),s=[...n.selectedEntries,i],a=n.totalEntries-s.length-n.repositoryLimitOmitted,d=Bs({entries:s,tokenCap:n.tokenCap,totalEntries:n.totalEntries,omittedByTokenCap:a,repositoryLimitOmitted:n.repositoryLimitOmitted});if(Oo(n.countTokens,d)<=n.tokenCap)return i}return null}function Eu(n){let e=n.repositoryEntryLimit,t=typeof e=="number"&&Number.isFinite(e)&&e>=0&&n.entries.length>e,r=t?n.entries.length-Math.floor(e):0,i=[...t?n.entries.slice(r):n.entries].reverse(),s=[],a=n.entries.length;for(let g=0;g<i.length;g++){let m=i[g],v=vu(n.taskDistance,g,n.baseEntryChars),y=$s(m,g,v),_=[...s,y],w=a-_.length-r,k=Bs({entries:_,tokenCap:n.tokenCap,totalEntries:a,omittedByTokenCap:w,repositoryLimitOmitted:r});if(Oo(n.countTokens,k)<=n.tokenCap){s.push(y);continue}let T=xu({selectedEntries:s,entry:m,newestIndex:g,bodyLimitChars:v,tokenCap:n.tokenCap,totalEntries:a,repositoryLimitOmitted:r,countTokens:n.countTokens});T&&s.push(T);break}let d=a-s.length-r,c=Us(d,r),l=Ls({entries:s,omissions:c,tokenCap:n.tokenCap,totalEntries:a}).join(`
316
+ `),f=Oo(n.countTokens,l);return {taskId:n.taskId,taskDistance:n.taskDistance,tokenCap:n.tokenCap,tokenCount:f,includedEntries:s.length,omittedEntries:c.reduce((g,m)=>g+m.count,0),totalEntries:a,omissions:c,entries:s,activityLog:l}}function Io(n){return {threadId:n.threadId,agentId:n.agentId,lookback:n.lookback,activityLogTokenBudget:n.activityLogTokenBudget,baseEntryChars:n.baseEntryChars,tasks:[],activityLogByTask:new Map}}function Tu(n){return !Number.isFinite(n)||n<0?0:Math.floor(n)}function Au(n){return n.length}function Mo(n){let e=ku(n.maxEntryChars),t=Tu(n.activityLogTokenBudget),r=Math.max(0,Math.floor(n.lookback));if(!r||!n.threadId||!n.agentId)return Io({threadId:n.threadId,agentId:n.agentId,lookback:r,activityLogTokenBudget:t,baseEntryChars:e});let o;try{o=new xn().findTasksByThread(n.threadId).filter(c=>!c.parent_task_id&&c.agent_id===n.agentId).sort((c,l)=>l.started_at>c.started_at?1:-1).slice(0,r);}catch{return Io({threadId:n.threadId,agentId:n.agentId,lookback:r,activityLogTokenBudget:t,baseEntryChars:e})}if(!o.length)return Io({threadId:n.threadId,agentId:n.agentId,lookback:r,activityLogTokenBudget:t,baseEntryChars:e});let i=[];for(let d of o){let c=[];try{let l=JSON.parse(d.logs??"[]");Array.isArray(l)&&(c=l);}catch{}i.push({taskId:d.id,entries:wu(c,d.completed_at)});}let s=[],a=new Map;for(let d=0;d<i.length;d++){let{taskId:c,entries:l}=i[d];if(l.length===0)continue;let f=Eu({taskId:c,entries:l,taskDistance:d,baseEntryChars:e,tokenCap:_u(t,d),countTokens:n.countTokens,repositoryEntryLimit:n.repositoryEntryLimit});s.push(f),a.set(c,f.activityLog);}return {threadId:n.threadId,agentId:n.agentId,lookback:r,activityLogTokenBudget:t,baseEntryChars:e,tasks:s,activityLogByTask:a}}function Fs(n){if(n.activityLogTokenBudget!==void 0&&!n.countTokens)throw new Error("countTokens is required when activityLogTokenBudget is supplied");return Mo({threadId:n.threadId,agentId:n.agentId,lookback:n.lookback,maxEntryChars:n.maxEntryChars,activityLogTokenBudget:n.activityLogTokenBudget??pu,countTokens:n.countTokens??Au,repositoryEntryLimit:n.repositoryEntryLimit}).activityLogByTask}p();p();var bu={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")},Pu={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 i=e.agents.get(o);i&&r.push({id:i.id,name:i.name??i.id,description:i.description??""});}return {content:[{type:"text",text:JSON.stringify(r,null,2)}]}}),n.tool("crewx_queryAgent","Query a CrewX agent with a read-only question",bu,async({agentId:r,query:o,context:i,thread:s})=>{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:i,threadId:s});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)",Pu,async({agentId:r,task:o,context:i,thread:s})=>{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:i,threadId:s});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Execute failed"}],isError:true}});}p();function js(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 Hs(n,e){return e?await e(n)?null:new Response(JSON.stringify({error:"Unauthorized"}),{status:401,headers:{"Content-Type":"application/json"}}):null}function Iu(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 No(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 i=js(o);if(i)return i;let s=await Hs(o,e.auth);if(s)return s;let a=o.headers.get("mcp-session-id");if(a&&r.has(a))return r.get(a).transport.handleRequest(o);let d=Iu(n,t),c=new webStandardStreamableHttp_js.WebStandardStreamableHTTPServerTransport({sessionIdGenerator:()=>crypto.randomUUID(),onsessioninitialized:l=>{r.set(l,{transport:c,server:d});},onsessionclosed:l=>{r.delete(l);},enableJsonResponse:true});return await d.connect(c),c.handleRequest(o)}}p();function zs(n){let e=z__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 Do(n){let e=zs(n);return crypto$1.createHash("sha256").update(e).digest("hex")}ge();function da(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)?n:void 0}function op(n){return n.slice(n.lastIndexOf("/")+1)}var ip=new Set(["tools","effort","mode","provider","model","profiles","overdrive"]);function sp(n){if(!n)return;let t=Object.entries(n).filter(([,r])=>r!=null&&typeof r!="object"&&typeof r!="function").filter(([r])=>!ip.has(r));if(t.length!==0)return Object.fromEntries(t.map(([r,o])=>[r,String(o)]))}function ca(n,e,t){let r=da(n);if(!r)return {};let o=op(e),i=!t.active&&o==="grok"?pn(r):r,s=t.active?t.providerOptions:da(i[o]);return {modeOptions:i,providerOptions:s,configOptions:sp(i)}}function ap(n){return n?n.settings?.template?.exec:void 0}function dp(){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}=de("crypto");return n(8).toString("hex")}}var Yo=class n extends kn{_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,i){super(),this._agents=new Map(e.map(d=>[d.id,d])),this._config=r,this._projectRoot=i??(typeof process<"u"?process.cwd():"/");let s=i??(typeof process<"u"?process.env.CREWX_WORKSPACE??process.cwd():"/");this._workspaceId=Do(s),this._workspaceName=z.basename(s);let a=ap(r);this._templateEngine=new fn({execPolicy:t.execPolicy??a}),this._documentLoader=o??new wt,this._layoutLoader=new mn({templatesPath:It()}),this._layoutRenderer=new wn,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),i=this.getRemoteProviderConfig(o);if(!i?.location?.startsWith("file://"))return null;let s=z.resolve(i.location.replace("file://","")),a=i.external_agent_id??e.replace(/^@/,""),d=this._remoteTargets.get(s);d||(d=(this._remoteFactory??(m=>n.loadYaml(m)))(s),this._remoteTargets.set(s,d),d.catch(()=>this._remoteTargets.delete(s)));let c=await d,l=c.getAgent("@"+a),f=Array.isArray(l?.provider)?l?.provider[0]:l?.provider;if(f?.startsWith("remote/"))throw new Error(`Chained remotes not allowed: "${o}" \u2192 "${f}"`);return {target:c,agentRef:"@"+a}}static async loadBuiltInConfig(e){let{yamlPath:t,dir:r}=Gr(),o;try{o=Ds.readFileSync(t,"utf-8");}catch(s){throw new Error(`[@crewx/sdk] Cannot read built-in config: ${t}
317
+ ${s.message}`)}let i=Gn(o);if(i.documents&&typeof i.documents=="object"){let s={};for(let[a,d]of Object.entries(i.documents))if(d&&typeof d=="object"){let c=d;typeof c.path=="string"&&!z.isAbsolute(c.path)?s[a]={...c,path:z.resolve(r,c.path)}:s[a]=c;}else s[a]=d;return {...i,documents:s}}return i}static mergeCrewxConfig(e,t){let r=new Map;for(let k of e.agents??[])r.set(k.id,k);for(let k of t.agents??[])r.has(k.id)&&console.warn(`[agent-loader] User agent "${k.id}" overrides built-in`),r.set(k.id,k);let o=Array.from(r.values()),i={...e.layouts??{},...t.layouts??{}},s={...e.documents??{},...t.documents??{}},a=e,d=t,c=la(a.vars,d.vars),l=la(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=cp(a.providers,d.providers),v={...e},y={...t};for(let k of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete v[k],delete y[k];let w={...{...v,...y},agents:o,layouts:i,documents:s,skills:f};return g.length>0&&(w.hooks=g),c!==void 0&&(w.vars=c),l!==void 0&&(w.settings=l),m!==void 0&&(w.providers=m),w}static async loadYaml(e,t,r){let o=t?.includeBuiltIns!==false,i,s;if(o){let l=await n.loadBuiltInConfig(r);if(e!==void 0){let f=Kn(e);i=n.mergeCrewxConfig(l,f),s=z.dirname(e);}else i=l,s=process.cwd();}else {if(e===void 0)throw new Error("[@crewx/sdk] loadYaml: path is required when includeBuiltIns is false");i=Kn(e),s=z.dirname(e);}let a=new wt(r);await a.load(i.documents,s);let d=i.agents??[];return await ua(d,i,t),new n(d,t??{},i,a,s)}static async fromConfig(e,t,r,o){let i=t?.includeBuiltIns===true,s=e;if(i){let l=await n.loadBuiltInConfig(o);s=n.mergeCrewxConfig(l,e);}let a=new wt(o);await a.load(s.documents,r??(typeof process<"u"?process.cwd():"/"));let d=s.agents??[];return await ua(d,s,t),new n(d,t??{},s,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=uo(t);return z.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 No(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 i=new Set(t.manifest.capabilities),s=e.store??ko(r),a=e.defaultMode??"query",d=t.manifest.platform,c=e.agentRunner??{run:async(m,v,y)=>{let w=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${m}`,v,{threadId:y?.threadId,platform:d});return {output:w.ok?w.data:w.error?.message??""}}},l=e.onInbound??(async m=>{let v=m.routingHints?.agentId??e.defaultAgent;if(!v)return {accepted:false,reason:"no_agent"};let{output:y}=await c.run(v,m.text,{threadId:m.threadId});return {accepted:true,output:y}}),f=_o({instanceId:r,config:o,capabilities:i,db:s,agentRunner:c,onInbound:l}),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(i=>Promise.race([this.unregisterChannelAdapter(i),new Promise((s,a)=>setTimeout(()=>a(new Error(`Adapter stop timeout: ${i}`)),t))])));for(let i=0;i<o.length;i++)o[i].status==="rejected"&&console.error(`[crewx] adapter stop error (${r[i]}): ${o[i].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(ln+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),i=t(e.provider),s=Array.from(this._agents.values());return r&&(s=s.filter(a=>a.role&&r.some(d=>be(a.role.toLowerCase(),d)))),o&&(s=s.filter(a=>a.team&&o.some(d=>be(a.team.toLowerCase(),d)))),i&&(s=s.filter(a=>(Array.isArray(a.provider)?a.provider:[a.provider]).some(c=>i.some(l=>be(c.toLowerCase(),l))))),s}renderAgentPrompt(e){let t=e.startsWith("@")?e.slice(1):e,r=this._agents.get(t);if(!r)throw new $e(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??{}},i={...t,documents:o};return this._templateEngine.render(e,i)}registerLayout(e,t){this._layoutLoader.registerLayout(e,t);}async renderAgentPromptFull(e,t){let r=t?.__contextBudget,o=e.startsWith("@")?e.slice(1):e,i=this._agents.get(o);if(!i)throw new $e(o,Array.from(this._agents.keys()));let s=this._resolveLayoutSpec(i,t?.layout),a=this._extractLayoutId(s),d=this._extractLayoutProps(i,s,t?.layout),c=this._layoutLoader.load(a,d),l=i.inline?.prompt??i.inline?.system_prompt??i.description??`You are an expert ${o}.`,f=await this._documentLoader.buildContext(),g=t?.env??(typeof process<"u"?process.env:{}),m=t?.vars?.security_key??dp(),v={...t?.vars??{},documents:f,env:g,agent:{id:i.id,name:i.name??i.id,role:i.role??"",team:i.team??"",description:i.description??""}},y=await this._templateEngine.render(l,v),_={mode:t?.session?.mode??"query",platform:t?.session?.platform??"cli",options:t?.session?.options??[]},w=i.provider,k=Array.isArray(w)?w:typeof w=="string"&&w.length>0?[w]:[],E=k.join(", ")||(typeof w=="string"?w:""),T=i.options,D=["goals","daily"],R={goals:false,daily:false},V;if(!Array.isArray(T)&&typeof T=="object"&&T!==null){let B=T;if("goals"in B){let Q=B.goals;typeof Q=="string"||Array.isArray(Q)?R.goals=Q:R.goals=!!Q;}"daily"in B&&(R.daily=!!B.daily);let J={};for(let[Q,ne]of Object.entries(B))D.includes(Q)||(J[Q]=ne);if(Object.keys(J).length>0){let Q=k.some(Ne=>Ne.startsWith("cli/")),ne={};for(let[Ne,De]of Object.entries(J)){let x={};if(Array.isArray(De))Q&&(x.rawArgs=De);else if(typeof De=="object"&&De!==null){let N=De;Object.keys(N).length>0&&(x.named=N);}(x.named||x.rawArgs&&x.rawArgs.length>0)&&(ne[Ne]=x);}V=Object.keys(ne).length>0?ne:void 0;}}let P=Array.isArray(T)?T:void 0,F={};for(let[B,J]of Object.entries(f))F[B]={content:J.content??"",toc:J.toc,summary:J.summary,path:J.path};if(R.goals){let B=z.join(this._projectRoot,"docs","goal"),J=await vs(B,void 0,R.goals);J&&(F.active_goals={content:J});}if(R.daily){let B=z.join(this._projectRoot,"docs","daily"),J=await _s(B);J&&(F.today_daily={content:J});}let se=t?.vars?.user_input??void 0,W=this._config?.settings?.dreaming?.continuity,S=W?.reuseReadOnly!==false,Z=typeof W?.lookback=="number"?W.lookback:5,H=typeof W?.maxEntryChars=="number"?W.maxEntryChars:8e3,L=t?.threadId??"",j=i.id,ae=!r?.activityLogDisabled&&S&&Z>0&&!!L&&!!t?.messages?.length,Y=new Map;if(ae)if(r?.activityLogTokenBudget!==void 0&&r.countTokens){let B=Mo({threadId:L,agentId:j,lookback:Z,maxEntryChars:H,activityLogTokenBudget:r.activityLogTokenBudget,countTokens:r.countTokens});Y=B.activityLogByTask,r.onActivityLogResult?.(B);}else {typeof W?.decayRate=="number"?W.decayRate:.5;Y=Fs({threadId:L,agentId:j,lookback:Z,maxEntryChars:H});}let Kt=(t?.messages??[]).map(B=>{if(!B.isAssistant)return B;let J=B.metadata?.task_id;return !J||!Y.has(J)?B:{...B,activity_log:Y.get(J)}}),ot={user_input:se,agent:{id:i.id,name:i.name??i.id,role:i.role??"",team:i.team??"",description:i.description??"",provider:E,providerList:k,model:i.inline?.model,workingDirectory:i.working_directory??i.workingDirectory??".",inline:{...i.inline??{},prompt:y},specialties:i.specialties??[],capabilities:i.capabilities??[],remote:i.remote??null,optionsByMode:V,optionsArray:P},agentMetadata:{specialties:i.specialties??[],capabilities:i.capabilities??[],description:i.description??""},contextOptions:R,documents:F,skills:t?.skills??[],session:_,env:g,vars:{security_key:m,...t?.vars??{}},props:{...d??{},...t?.messages&&t.messages.length>0?{showConversationHistory:true}:{}},platform:_.platform,mode:_.mode,thread_id:L,now:yn(new Date),has_activity_log:Y.size>0,messages:Kt,tools:this._tools.size>0?{list:Array.from(this._tools.values()).map(B=>({name:B.name,description:B.description,parameters:B.parameters})),json:JSON.stringify(Array.from(this._tools.values()).map(B=>({name:B.name,description:B.description,parameters:B.parameters})),null,2),count:this._tools.size}:null,metadata:{}};return this._layoutRenderer.render(c,ot)}_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,i=o&&typeof o=="object"&&"props"in o?o.props:void 0,s=r&&typeof r=="object"&&"id"in r?r.props:void 0;if(i||s)return {...i??{},...s??{}}}_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 i=await o.fetchHistory(e,{currentTraceId:t});return i.messages.length===0?void 0:To(i)}catch{return}}async _resolveFreshProvider(e,t,r){let o=xs(e.provider),i=co(e.options,t,o,ao(r?.overdrive)),s=lo(e.options,t),a=i.active&&i.provider?i.provider:r?.provider??s.provider??o,d=i.active&&i.model?i.model:r?.model??s.model??e.inline?.model;return d&&d.includes("{{")&&(d=await this._templateEngine.render(d,{...r?.vars??{}})),{baseProviderStr:o,baseModel:e.inline?.model,effectiveProviderStr:a,effectiveModel:d,overdrive:i}}_readInputBudgetPercent(){let r=this._config?.settings?.dreaming?.continuity;if(!(!r||!Object.prototype.hasOwnProperty.call(r,"inputBudgetPercent")))return r.inputBudgetPercent}_resolveBudgetModel(e,t){if(t&&t.trim())return t;let r=Bn(e)?.model;return typeof r=="string"&&r.trim()?r:""}_resolveContextMode(e){return e?.contextMode==="instruction-only"?"instruction-only":"full"}_hasUsableResumeSessionId(e){return typeof e=="string"&&e.trim().length>0}_buildInstructionOnlyResumeManifest(e){return {phase:"resume",initialInputFraming:jr,resolved:e.budget.resolved,reason:e.budget.resolved?void 0:e.budget.reason,requestedProvider:e.requestedProvider,requestedModel:e.requestedModel,effectiveProvider:e.effectiveProvider,effectiveModel:e.effectiveModel,contextWindowTokens:e.budget.resolved?e.budget.contextWindowTokens:null,inputBudgetPercent:e.budget.resolved?e.budget.inputBudgetPercent:e.budget.inputBudgetPercent??(typeof e.rawInputBudgetPercent=="number"?e.rawInputBudgetPercent:null),inputBudgetTokens:e.budget.resolved?e.budget.inputBudgetTokens:null,tokenizer:e.budget.tokenizer,initialTokenCount:e.messageTokenCount,finalTokenCount:e.messageTokenCount,activityLogTokenCount:0,activityIncludedEntries:0,activityOmittedEntries:0,activityRemovedForBudget:false,activityNewestTaskTokenCap:null,historyOriginalMessages:0,historyIncludedMessages:0,historyOmittedMessages:0,overBudget:e.budget.resolved?e.messageTokenCount>e.budget.inputBudgetTokens:false}}_prepareInstructionOnlyResumeWithBudget(e){let t=e.providerResolution.effectiveProviderStr,r=this._resolveBudgetModel(t,e.providerResolution.effectiveModel),o=this._readInputBudgetPercent(),i=zn({provider:t,model:r,inputBudgetPercent:o}),s=e.providerResolution.baseProviderStr,a=e.providerResolution.baseModel??null,d=r||null,c=qn(e.message,{provider:t,model:r}).tokenCount,l=this._buildInstructionOnlyResumeManifest({budget:i,requestedProvider:s,requestedModel:a,effectiveProvider:t,effectiveModel:d,rawInputBudgetPercent:o,messageTokenCount:c});return this._hasUsableResumeSessionId(e.resumeSessionId)?i.resolved&&c>i.inputBudgetTokens?{contextBudget:l,error:{code:"INPUT_BUDGET_EXCEEDED",message:`Input budget exceeded: instruction-only resume message is ${c} tokens; budget is ${i.inputBudgetTokens} tokens.`}}:{contextBudget:l}:{contextBudget:l,error:{code:"RESUME_SESSION_REQUIRED",message:'contextMode "instruction-only" requires a same-provider native resumeSessionId.'}}}_activityLogEntryCounts(e){return e?e.tasks.reduce((t,r)=>({tokenCount:t.tokenCount+r.tokenCount,includedEntries:t.includedEntries+r.includedEntries,omittedEntries:t.omittedEntries+r.omittedEntries}),{tokenCount:0,includedEntries:0,omittedEntries:0}):{tokenCount:0,includedEntries:0,omittedEntries:0}}_buildUnresolvedContextBudgetManifest(e){return {phase:"fresh",initialInputFraming:jn,resolved:false,reason:e.budget.resolved?void 0:e.budget.reason,requestedProvider:e.requestedProvider,requestedModel:e.requestedModel,effectiveProvider:e.effectiveProvider,effectiveModel:e.effectiveModel,contextWindowTokens:null,inputBudgetPercent:e.budget.resolved?e.budget.inputBudgetPercent:e.budget.inputBudgetPercent??(typeof e.rawInputBudgetPercent=="number"?e.rawInputBudgetPercent:null),inputBudgetTokens:null,tokenizer:e.budget.tokenizer,initialTokenCount:null,finalTokenCount:null,activityLogTokenCount:null,activityIncludedEntries:null,activityOmittedEntries:null,activityRemovedForBudget:false,activityNewestTaskTokenCap:null,historyOriginalMessages:e.historyOriginalMessages,historyIncludedMessages:e.historyOriginalMessages,historyOmittedMessages:0,overBudget:false}}_buildResolvedContextBudgetManifest(e){let t=this._activityLogEntryCounts(e.activityLogResult);return {phase:"fresh",initialInputFraming:jn,resolved:true,requestedProvider:e.requestedProvider,requestedModel:e.requestedModel,effectiveProvider:e.effectiveProvider,effectiveModel:e.effectiveModel,contextWindowTokens:e.budget.contextWindowTokens,inputBudgetPercent:e.budget.inputBudgetPercent,inputBudgetTokens:e.budget.inputBudgetTokens,tokenizer:e.budget.tokenizer,initialTokenCount:e.initialTokenCount,finalTokenCount:e.finalTokenCount,activityLogTokenCount:t.tokenCount,activityIncludedEntries:t.includedEntries,activityOmittedEntries:t.omittedEntries,activityRemovedForBudget:e.activityRemovedForBudget,activityNewestTaskTokenCap:Math.floor(e.budget.inputBudgetTokens/8),historyOriginalMessages:e.historyOriginalMessages,historyIncludedMessages:e.historyIncludedMessages,historyOmittedMessages:e.historyOriginalMessages-e.historyIncludedMessages,overBudget:e.initialTokenCount>e.budget.inputBudgetTokens}}async _renderFreshPromptVariant(e){return this.renderAgentPromptFull(e.agentRef,{session:{mode:e.mode,platform:e.options?.platform},vars:{user_input:e.message,...e.options?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(e.agent,e.options)},messages:e.messages,threadId:e.options?.threadId,__contextBudget:{activityLogDisabled:e.activityLogDisabled,activityLogTokenBudget:e.activityLogTokenBudget,countTokens:e.countTokens,onActivityLogResult:e.onActivityLogResult}})}async _prepareFreshPromptWithBudget(e){let t=e.historyMessages,r=t??[],o=r.length,i=e.providerResolution.effectiveProviderStr,s=this._resolveBudgetModel(i,e.providerResolution.effectiveModel),a=this._readInputBudgetPercent(),d=zn({provider:i,model:s,inputBudgetPercent:a}),c=e.providerResolution.baseProviderStr,l=e.providerResolution.baseModel??null,f=s||null;if(!d.resolved)return {renderedPrompt:await this._renderFreshPromptVariant({...e,messages:t}),contextBudget:this._buildUnresolvedContextBudgetManifest({budget:d,requestedProvider:c,requestedModel:l,effectiveProvider:i,effectiveModel:f,rawInputBudgetPercent:a,historyOriginalMessages:o})};let g=zr({provider:i,model:d.model}),m=R=>g.countTokens(R),v=R=>qr({systemPrompt:R,message:e.message},m),y,_=await this._renderFreshPromptVariant({...e,messages:t,activityLogTokenBudget:d.inputBudgetTokens,countTokens:m,onActivityLogResult:R=>{y=R;}}),w=v(_),k=w,E=false,T=r;if(k>d.inputBudgetTokens&&y&&y.activityLogByTask.size>0&&(_=await this._renderFreshPromptVariant({...e,messages:T,activityLogDisabled:true,activityLogTokenBudget:d.inputBudgetTokens,countTokens:m}),k=v(_),E=true),k>d.inputBudgetTokens&&T.length>0)for(let R=1;R<=r.length;R++){let V=r.slice(R),P=await this._renderFreshPromptVariant({...e,messages:V,activityLogDisabled:E,activityLogTokenBudget:d.inputBudgetTokens,countTokens:m}),F=v(P);if(_=P,k=F,T=V,F<=d.inputBudgetTokens)break}let D=this._buildResolvedContextBudgetManifest({budget:d,requestedProvider:c,requestedModel:l,effectiveProvider:i,effectiveModel:f,initialTokenCount:w,finalTokenCount:k,activityLogResult:y,activityRemovedForBudget:E,historyOriginalMessages:o,historyIncludedMessages:T.length});return k>d.inputBudgetTokens?{renderedPrompt:_,contextBudget:D,countTokens:m,error:{code:"INPUT_BUDGET_EXCEEDED",message:`Input budget exceeded: final provider initial input is ${k} tokens; budget is ${d.inputBudgetTokens} tokens.`}}:{renderedPrompt:_,contextBudget:D,countTokens:m}}_recountFreshProviderInitialInput(e){let t=e.contextBudgetManifest;if(!t?.resolved||!t.effectiveModel)return null;let r=e.countTokens??(o=>qn(o,{provider:t.effectiveProvider,model:t.effectiveModel}).tokenCount);return qr({systemPrompt:e.providerOptions.systemPrompt,message:e.message},r)}_validateFreshProviderInitialInputBudget(e){let t=e.contextBudgetManifest;if(!t?.resolved||t.finalTokenCount===null||t.inputBudgetTokens===null)return;let r=this._recountFreshProviderInitialInput(e);if(r!==null){if(r!==t.finalTokenCount)throw new Error(`Context budget recount mismatch: provider initial input is ${r} tokens but manifest.finalTokenCount is ${t.finalTokenCount}.`);if(r>t.inputBudgetTokens)return {code:"INPUT_BUDGET_EXCEEDED",message:`Input budget exceeded: final provider initial input is ${r} tokens; budget is ${t.inputBudgetTokens} tokens.`}}}_resolveTimeout(e,t){let r=e==="query"?"CREWX_TIMEOUT_QUERY":"CREWX_TIMEOUT_EXECUTE";if(process.env[r]!=null&&process.env[r]!==""){let o=rs();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=oo();return t!==void 0?t:e?.meta?.defaultIdleMs!==void 0?e.meta.defaultIdleMs:6e5}_lookupCliAdapter(e){return xo(e)}_resolveEffectiveCost(e,t,r){return Ri(e?.costUsd,e?.inputTokens,e?.outputTokens,e?.cachedInputTokens,t)}_resolveEffectiveCwd(e,t){return t?.cwd??(e.working_directory?z.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:i}=r,s={...t,agentRef:o.agentRef};if(e==="task:output")return s;let a=s,d=a.metadata??{},c=d.crewx??{};return {...a,workspaceId:o.id,workspaceName:o.name,metadata:{...d,crewx:{...c,remoteExecution:i}}}}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 i=this._rewriteCallerFacingPayload(e,t,o);super.emit(e,i);return}}super.emit(e,t);}emitToolEvents(e,t,r,o,i,s,a){try{let c=this._lookupCliAdapter(r)?.parseEvent?.(o)??cn(new Date().toISOString(),o);for(let l of c)l.type==="tool_use"&&l.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:i,threadId:s,sessionId:a,provider:r,tool:{name:l.toolName,rawName:l.toolName,input:l.toolInput?this.tryParseJson(l.toolInput):void 0,toolUseId:l.toolUseId}}),l.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:t,agentId:i,threadId:s,sessionId:a,provider:r,tool:{name:l.toolName??"unknown",rawName:l.toolName??"unknown",toolUseId:l.toolUseId,result:l.resultPreview,isError:l.isError}});}catch{}}emitTaskLogEntries(e,t,r,o,i,s,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:i,provider:s,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:i,provider:s,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 l=await o.target.query(o.agentRef,t,this._buildFileRemoteOptions(e,r));return {...l,meta:{...l.meta,agentId:e.replace(/^@/,"")}}}let i=vn.getStore()??Eo(r?.trace),s=r?.taskId??vt("tsk"),a={parentTaskId:i?.parentTaskId??null,rootTraceId:i?.rootTraceId??s,callerAgentId:i?.callerAgentId??null},d={parentTaskId:s,rootTraceId:i?.rootTraceId??s,callerAgentId:null},c=r?.callerIdentity?this._registerCallerIdentityOverride(s,r.callerIdentity,{agentId:e.replace(/^@/,""),workspaceId:this._workspaceId,workspaceName:this._workspaceName}):void 0;try{return await vn.run(d,async()=>{let l=Date.now(),f=new Date,g;try{g=Vn(e,Array.from(this._agents.values()));}catch(x){if(x instanceof $e){this.emit("task:start",{traceId:s,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 N=Date.now()-l,$={code:"AGENT_NOT_FOUND",message:x.message};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:$,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:$,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:N,taskId:s}}}throw x}d.callerAgentId=g.id;let m=await this._resolveFreshProvider(g,"query",r),v=m.baseProviderStr,y=m.effectiveProviderStr,_=m.effectiveModel,w=m.overdrive,k=y!==v?void 0:r?.resumeSessionId,T=this._resolveContextMode(r)==="instruction-only",D,R,V,P=_,F,se,K,te,W=!1,S=x=>{W||(W=!0,this.emit("task:start",{traceId:s,timestamp:f,agentRef:e,message:t,mode:"query",pid:x,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:P,provider:y,codingAgentCommand:D,renderedPrompt:se,metadata:{...r?.metadata??{},provider:y,...w.active?{overdrive:!0}:{},...F?{provider_session_id:F}:{},...K?{context_budget:K}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));};if(T){let x=this._prepareInstructionOnlyResumeWithBudget({message:t,providerResolution:m,resumeSessionId:k});if(K=x.contextBudget,x.error){S();let N=Date.now()-l,$=x.error;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:$,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:$,meta:{agentId:g.id,provider:y,model:_,durationMs:N,taskId:s}}}}let Z;try{Z=Fe(y,this._additionalArgsProvider);}catch(x){S();let N=Date.now()-l,$={code:"PROVIDER_ERROR",message:x.message,...x instanceof exports.ProviderError?{providerCode:x.code}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:$,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:$,meta:{agentId:g.id,provider:y,model:_,durationMs:N,taskId:s}}}let H;if(T||(H=await this._fetchHistoryMessages(r?.threadId,s,r?.messages)),!T)try{let x=await this._prepareFreshPromptWithBudget({agentRef:e,agent:g,mode:"query",message:t,options:r,providerResolution:m,historyMessages:H});if(se=x.renderedPrompt,K=x.contextBudget,te=x.countTokens,x.error){S();let N=Date.now()-l,$=x.error;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:$,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:$,meta:{agentId:g.id,provider:y,model:_,durationMs:N,taskId:s}}}}catch(x){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${x instanceof Error?x.message:String(x)}`);}let L=g.options,j=ca(L?.query,y,w),ae=w.active?w.mode:j.modeOptions?.mode,Y=w.effort??r?.effort??j.modeOptions?.effort,Kt=Array.isArray(L?.query?.tools)?L.query.tools:void 0,ot=this._tools.size>0?this._filterToolsByMode(Kt):[],B=j.configOptions,J=g.inline?.max_steps;y.startsWith("api/")&&S();let Q=!1,ne=0,Ne=()=>{},De=new Promise(x=>{Ne=x;});this._activeTasks.set(s,{pid:void 0,done:De});try{let x={model:_,effort:Y,mode:ae,context:r?.context,...T?{}:{systemPrompt:se??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`},additionalArgs:Array.isArray(L?.query)?L.query:void 0,resumeSessionId:k,tools:ot.length>0?ot:void 0,maxSteps:J,providerOptions:j.providerOptions,configOptions:B,timeoutMs:this._resolveTimeout("query",this._lookupCliAdapter(y)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(y)),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:s,CREWX_PARENT_TASK_ID:s,CREWX_TASK_ID:s,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:y,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(s,f)},onPid:C=>{let re=this._activeTasks.get(s);re&&(re.pid=C),S(C);},onProviderSessionId:C=>{F=C;},onOutput:(C,re)=>{let Pr=this._lookupCliAdapter(y);re==="stdout"&&Pr?.suppressOutputLine?.(C)===!0||this.emit("task:output",{traceId:s,timestamp:new Date,agentRef:e,output:C,level:re}),re==="stdout"&&this.emitToolEvents(s,e,y,C,g.id,r?.threadId??"","");},onTaskLog:C=>{this.emitTaskLogEntries(s,e,g.id,r?.threadId??"","",y,C);for(let re of C)this.emit("task:output",{traceId:s,timestamp:new Date,agentRef:e,output:JSON.stringify(re),level:"info"});},onCommand:C=>{D=C;},onUsage:C=>{R=C;},onExitCode:C=>{V=C;},onModel:C=>{P||(P=C);}},N=T?void 0:this._validateFreshProviderInitialInputBudget({message:t,providerOptions:x,contextBudgetManifest:K,countTokens:te});if(N){S();let C=Date.now()-l;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:C,error:N,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),Q=!0,{ok:!1,data:"",error:N,meta:{agentId:g.id,provider:y,model:_,durationMs:C,taskId:s}}}let $=await Z.query(t,x);ne=this._resolveEffectiveCost(R,P,l),S();let Ve=Date.now()-l,Vt={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",result:$,durationMs:Ve,exitCode:V,inputTokens:R?.inputTokens,outputTokens:R?.outputTokens,cachedInputTokens:R?.cachedInputTokens,costUsd:ne,model:P,metadata:Object.keys(Vt).length>0?Vt:void 0}),Q=!0,{ok:!0,data:$,meta:{agentId:g.id,provider:y,model:_,durationMs:Ve,taskId:s}}}catch(x){if(x instanceof exports.ClientToolCallRequiredError){let Ve=vt("thd");return this._pendingThreads.set(Ve,{agentRef:g.id,providerStr:y,continuationState:x.continuationState,toolCall:x.toolCall,traceId:s,startMs:l,model:_}),Q=!0,{ok:!0,status:"requires_action",data:"",toolCall:x.toolCall,threadId:Ve,meta:{agentId:g.id,provider:y,model:_,durationMs:Date.now()-l,taskId:s}}}ne=this._resolveEffectiveCost(R,P,l),S();let N=Date.now()-l,$={code:"QUERY_FAILED",message:x.message,...x instanceof exports.ProviderError?{providerCode:x.code}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:$,exitCode:V,inputTokens:R?.inputTokens,outputTokens:R?.outputTokens,cachedInputTokens:R?.cachedInputTokens,costUsd:ne,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),Q=!0,{ok:!1,data:"",error:$,meta:{agentId:g.id,provider:y,model:_,durationMs:N,taskId:s}}}finally{Q||this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:Date.now()-l,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:V??-1,inputTokens:R?.inputTokens,outputTokens:R?.outputTokens,cachedInputTokens:R?.cachedInputTokens,costUsd:ne,model:P}),this._activeTasks.delete(s),this._clearCallerIdentityOverride(s,c),Ne();}})}finally{this._clearCallerIdentityOverride(s,c);}}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=Fe(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 i=t.map(s=>({...s,toolName:r.toolCall.toolCallId===s.toolCallId?r.toolCall.toolName:s.toolCallId}));try{let s=await o.continueWithToolResults(r.continuationState,i),a=Date.now()-r.startMs;return this.emit("task:end",{traceId:r.traceId,timestamp:new Date,agentRef:r.agentRef,mode:"query",result:s,durationMs:a}),{ok:!0,status:"complete",data:s,meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:a}}}catch(s){if(s instanceof exports.ClientToolCallRequiredError)return this._pendingThreads.set(e,{...r,continuationState:s.continuationState,toolCall:s.toolCall}),{ok:true,status:"requires_action",data:"",toolCall:s.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:s.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 l=await o.target.execute(o.agentRef,t,this._buildFileRemoteOptions(e,r));return {...l,meta:{...l.meta,agentId:e.replace(/^@/,"")}}}let i=vn.getStore()??Eo(r?.trace),s=r?.taskId??vt("tsk"),a={parentTaskId:i?.parentTaskId??null,rootTraceId:i?.rootTraceId??s,callerAgentId:i?.callerAgentId??null},d={parentTaskId:s,rootTraceId:i?.rootTraceId??s,callerAgentId:null},c=r?.callerIdentity?this._registerCallerIdentityOverride(s,r.callerIdentity,{agentId:e.replace(/^@/,""),workspaceId:this._workspaceId,workspaceName:this._workspaceName}):void 0;try{return await vn.run(d,async()=>{let l=Date.now(),f=new Date,g;try{g=Vn(e,Array.from(this._agents.values()));}catch(x){if(x instanceof $e){this.emit("task:start",{traceId:s,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 N=Date.now()-l,$={code:"AGENT_NOT_FOUND",message:x.message};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:$,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:$,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:N,taskId:s}}}throw x}d.callerAgentId=g.id;let m=await this._resolveFreshProvider(g,"execute",r),v=m.baseProviderStr,y=m.effectiveProviderStr,_=m.effectiveModel,w=m.overdrive,k=y!==v?void 0:r?.resumeSessionId,T=this._resolveContextMode(r)==="instruction-only",D,R,V,P=_,F,se,K,te,W=!1,S=x=>{W||(W=!0,this.emit("task:start",{traceId:s,timestamp:f,agentRef:e,message:t,mode:"execute",pid:x,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:P,provider:y,codingAgentCommand:D,renderedPrompt:se,metadata:{...r?.metadata??{},provider:y,...w.active?{overdrive:!0}:{},...F?{provider_session_id:F}:{},...K?{context_budget:K}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));};if(T){let x=this._prepareInstructionOnlyResumeWithBudget({message:t,providerResolution:m,resumeSessionId:k});if(K=x.contextBudget,x.error){S();let N=Date.now()-l,$=x.error;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:$,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:$,meta:{agentId:g.id,provider:y,model:_,durationMs:N,taskId:s}}}}let Z;try{Z=Fe(y,this._additionalArgsProvider);}catch(x){S();let N=Date.now()-l,$={code:"PROVIDER_ERROR",message:x.message,...x instanceof exports.ProviderError?{providerCode:x.code}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:$,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:$,meta:{agentId:g.id,provider:y,model:_,durationMs:N,taskId:s}}}let H;if(T||(H=await this._fetchHistoryMessages(r?.threadId,s,r?.messages)),!T)try{let x=await this._prepareFreshPromptWithBudget({agentRef:e,agent:g,mode:"execute",message:t,options:r,providerResolution:m,historyMessages:H});if(se=x.renderedPrompt,K=x.contextBudget,te=x.countTokens,x.error){S();let N=Date.now()-l,$=x.error;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:$,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:$,meta:{agentId:g.id,provider:y,model:_,durationMs:N,taskId:s}}}}catch(x){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${x instanceof Error?x.message:String(x)}`);}let L=g.options,j=ca(L?.execute,y,w),ae=w.active?w.mode:j.modeOptions?.mode,Y=w.effort??r?.effort??j.modeOptions?.effort,Kt=Array.isArray(L?.execute?.tools)?L.execute.tools:void 0,ot=this._tools.size>0?this._filterToolsByMode(Kt):[],B=j.configOptions,J=g.inline?.max_steps;y.startsWith("api/")&&S();let Q=!1,ne=0,Ne=()=>{},De=new Promise(x=>{Ne=x;});this._activeTasks.set(s,{pid:void 0,done:De});try{let x={model:_,effort:Y,mode:ae,context:r?.context,...T?{}:{systemPrompt:se??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`},additionalArgs:Array.isArray(L?.execute)?L.execute:void 0,resumeSessionId:k,tools:ot.length>0?ot:void 0,maxSteps:J,providerOptions:j.providerOptions,configOptions:B,timeoutMs:this._resolveTimeout("execute",this._lookupCliAdapter(y)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(y)),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:s,CREWX_PARENT_TASK_ID:s,CREWX_TASK_ID:s,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:y,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(s,f)},onPid:C=>{let re=this._activeTasks.get(s);re&&(re.pid=C),S(C);},onProviderSessionId:C=>{F=C;},onOutput:(C,re)=>{let Pr=this._lookupCliAdapter(y);re==="stdout"&&Pr?.suppressOutputLine?.(C)===!0||this.emit("task:output",{traceId:s,timestamp:new Date,agentRef:e,output:C,level:re}),re==="stdout"&&this.emitToolEvents(s,e,y,C,g.id,r?.threadId??"","");},onTaskLog:C=>{this.emitTaskLogEntries(s,e,g.id,r?.threadId??"","",y,C);for(let re of C)this.emit("task:output",{traceId:s,timestamp:new Date,agentRef:e,output:JSON.stringify(re),level:"info"});},onCommand:C=>{D=C;},onUsage:C=>{R=C;},onExitCode:C=>{V=C;},onModel:C=>{P||(P=C);}},N=T?void 0:this._validateFreshProviderInitialInputBudget({message:t,providerOptions:x,contextBudgetManifest:K,countTokens:te});if(N){S();let C=Date.now()-l;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:C,error:N,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),Q=!0,{ok:!1,data:"",error:N,meta:{agentId:g.id,provider:y,model:_,durationMs:C,taskId:s}}}let $=await Z.execute(t,x);ne=this._resolveEffectiveCost(R,P,l),S();let Ve=Date.now()-l,Vt={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",result:$,durationMs:Ve,exitCode:V,inputTokens:R?.inputTokens,outputTokens:R?.outputTokens,cachedInputTokens:R?.cachedInputTokens,costUsd:ne,model:P,metadata:Object.keys(Vt).length>0?Vt:void 0}),Q=!0,{ok:!0,data:$,meta:{agentId:g.id,provider:y,model:_,durationMs:Ve,taskId:s}}}catch(x){ne=this._resolveEffectiveCost(R,P,l),S();let N=Date.now()-l,$={code:"EXECUTE_FAILED",message:x.message,...x instanceof exports.ProviderError?{providerCode:x.code}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:$,exitCode:V,inputTokens:R?.inputTokens,outputTokens:R?.outputTokens,cachedInputTokens:R?.cachedInputTokens,costUsd:ne,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),Q=!0,{ok:!1,data:"",error:$,meta:{agentId:g.id,provider:y,model:_,durationMs:N,taskId:s}}}finally{Q||this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:Date.now()-l,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:V??-1,inputTokens:R?.inputTokens,outputTokens:R?.outputTokens,cachedInputTokens:R?.cachedInputTokens,costUsd:ne,model:P}),this._activeTasks.delete(s),this._clearCallerIdentityOverride(s,c),Ne();}})}finally{this._clearCallerIdentityOverride(s,c);}}};function la(n,e){let t=Qo(n)?n:void 0,r=Qo(e)?e:void 0;if(!(!t&&!r))return {...t??{},...r??{}}}function Qo(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function cp(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(!Qo(a))return;let d=a.id;if(typeof d=="string")return `id:${d}`;let c=a.name;if(typeof c=="string")return `name:${c}`},i=new Set;for(let a of r??[]){let d=o(a);d&&i.add(d);}let s=[];for(let a of t??[]){let d=o(a);d&&i.has(d)||s.push(a);}for(let a of r??[])s.push(a);return s}function lp(n){let e=Array.isArray(n.provider)?n.provider:[n.provider],t=n.options,r=[...e];for(let o of ["query","execute"]){let i=lo(t,o);i.provider&&r.push(i.provider);let s=t&&typeof t=="object"&&!Array.isArray(t)?t[o]:void 0,a=s&&typeof s=="object"&&!Array.isArray(s)?dr(s.overdrive):void 0;a?.provider&&r.push(a.provider);}return r}async function ua(n,e,t){let r=n.flatMap(lp);if(r.some(i=>i.startsWith("api/"))){let{registerApiProviders:i}=await Promise.resolve().then(()=>($o(),Js));i(t?.api);}await pp(r,e),gp(r,e),up(r);}function up(n){if(!n.some(r=>r.startsWith("acp/")))return;let{registerAcpProviders:t}=(qo(),wi(ea));t();}async function pp(n,e){if(!n.some(s=>s.startsWith("remote/")))return;let r=e.providers;if(!Array.isArray(r))return;let{createRemoteProviderFactory:o}=await Promise.resolve().then(()=>(Ko(),na)),i=new Map;for(let s of r)s.type==="remote"&&typeof s.id=="string"&&i.set(s.id,s);i.size>0&&Be("remote",o(i,Fe));}function gp(n,e){if(!n.some(s=>s.startsWith("plugin/")))return;let r=e.providers;if(!Array.isArray(r))return;let{createPluginProviderFactory:o}=(Vo(),wi(sa)),i=new Map;for(let s of r)s.type==="plugin"&&typeof s.id=="string"&&i.set(s.id,s);i.size>0&&Be("plugin",o(i));}p();var Zo=class{detach(e){}};p();var fp="crewx:fs:",ei=class{prefix;store;constructor(e){this.prefix=e?.prefix??fp,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(s=>s.replace(/\\/g,"/")).join("/").replace(/\/+/g,"/"),r=t.split("/"),o=[];for(let s of r)s==="."||s===""||(s===".."?o.pop():o.push(s));let i=o.join("/");return t.startsWith("/")?`/${i}`:i}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 i of this.store.keys())if(i.startsWith(r)){let a=i.slice(r.length).split("/")[0];a&&!o.includes(a)&&o.push(a);}return o}toKey(e){return `${this.prefix}${e.replace(/\\/g,"/")}`}};p();var jt="default",Ht="archive",pa="wi-default-flow",mp="wi-plan-flow",yp="wi-default-flow.yaml",hp="wi-plan-flow.yaml",Er=/^[a-zA-Z0-9_-]{1,64}$/;function ga(n){return n===jt||n===Ht}function wp(n){let e={id:jt,name:"Default",workflowId:pa,system:true,readOnly:false},t={id:Ht,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,i=[];for(let s of r){if(!s||typeof s!="object")continue;let a=s,d=a.id,c=a.name,l=a.workflow_id;if(typeof d!="string"||d.length===0||typeof c!="string"||c.length===0||typeof l!="string"||l.length===0||ga(d)||!Er.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;i.push({id:d,name:c,workflowId:l,...f!==void 0?{description:f}:{},...g!==void 0?{goalId:g}:{},system:false,readOnly:false});}return [e,...i,t]}p();var ee=class extends Error{constructor(e){super(e),this.name="WiCreateError";}},vp=300*1e3,_p=300*1e3,xp=1e4,Ep=50;function Tp(n){return new Promise(e=>setTimeout(e,n))}function Ap(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 Rp(n){return n.normalize("NFKD").replace(/[^\x00-\x7F]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toUpperCase().slice(0,60)}function bp(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 fa(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 ma(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 ya(n){return (typeof n=="string"?n.trim().replace(/^@+/,""):"")||void 0}function ha(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 wa(n,e){let t=typeof n=="string"?n.trim():"";if(!t){if(e?.required)throw new ee("board is required");return}if(!Er.test(t))throw new ee("board must match ^[a-zA-Z0-9_-]{1,64}$");if(t===Ht)throw new ee(`board cannot be '${Ht}'`);return t}function qt(n){return JSON.stringify(n)}function Pp(n,e){return e.length===0?[`${n}: []`]:[`${n}:`,...e.map(t=>` - ${qt(t)}`)]}async function Cp(n){let e=await Ds.promises.stat(n).catch(()=>null);e&&Date.now()-e.mtimeMs>_p&&await Ds.promises.rm(n,{recursive:true,force:true}).catch(()=>{});}async function Sp(n,e){let t=z.join(n,".wi-create.lock"),r=Date.now()+xp;for(;Date.now()<r;)try{await Ds.promises.mkdir(t);try{return await e()}finally{await Ds.promises.rm(t,{recursive:!0,force:!0}).catch(()=>{});}}catch(o){if(o.code!=="EEXIST")throw o;await Cp(t),await Tp(Ep);}throw new ee("WI create lock timeout: docs/wi/.wi-create.lock")}async function ka(n){let e=[],t=await Ds.promises.readdir(n,{withFileTypes:true}).catch(r=>{if(r.code==="ENOENT")return [];throw r});for(let r of t){let o=z.join(n,r.name);r.isDirectory()?e.push(...await ka(o)):r.isFile()&&r.name.endsWith(".md")&&e.push(r.name);}return e}async function Ip(n){let e=await Ds.promises.readdir(n).catch(r=>{if(r.code==="ENOENT")return [];throw r}),t=await ka(z.join(n,"archive"));return [...e,...t]}function Op(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 Mp(n,e){return n.some(t=>t===`${e}.md`||t.startsWith(`${e}-`))}async function Np(n,e){let t=z.join(n,`.wi-${e}.lock`);try{return await Ds.promises.writeFile(t,"",{flag:"wx"}),{claimed:!0,lockPath:t}}catch(r){if(r.code!=="EEXIST")throw r;return await Ds.promises.stat(t).then(i=>Date.now()-i.mtimeMs>vp).catch(()=>false)&&await Ds.promises.unlink(t).then(()=>true).catch(()=>false)?(await Ds.promises.writeFile(t,"",{flag:"wx"}),{claimed:true,lockPath:t}):{claimed:false,lockPath:t}}}function Dp(n){return {title:fa(n.title),assignee:ya(n.assignee),body:(n.body??"").trim(),board:wa(n.board),source:ma(n.source),depends_on:ha(n.depends_on)}}function Lp(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 $p(n){let e=wa(n.board,{required:true}),t=ma(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,i)=>{if(!o||typeof o!="object")throw new ee(`items[${i}] must be an object`);if(typeof o.body!="string")throw new ee(`items[${i}].body is required`);return {key:Lp(o.key,i,r),title:fa(o.title),assignee:ya(o.assignee),body:o.body.trim(),board:e,source:t,depends_on:ha(o.depends_on)}})}function Up(n,e){return n.map(t=>e.get(t)??t)}function Bp(n,e,t){let r=!!n.board&&n.board!==jt,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:`---
318
+ ${[`wi_id: ${e}`,`title: ${qt(n.title)}`,`date: ${qt(t)}`,"status: draft",...n.assignee?[`assignee: ${qt(n.assignee)}`]:[],"priority: normal",`source: ${qt(n.source)}`,...r?[`board: ${qt(n.board)}`]:[],...Pp("depends_on",n.depends_on)].join(`
319
319
  `)}
320
320
  ---
321
321
 
322
322
  ${n.body}
323
- `,frontmatter:o}}async function ma(n,e){let t=z.join(n,"docs","wi");return await Oi.promises.mkdir(t,{recursive:true}),hp(t,async()=>{let{compact:r,iso:o}=pp(new Date),s=`WI-${r}-`,i=await wp(t),a=kp(i,s),d=[],l=[];try{let c=[];for(let m of e){let y;for(let v=0;v<999;v++,a++){let w=`WI-${r}-${String(a).padStart(3,"0")}`;if(_p(i,w))continue;let k=await vp(t,w);if(!k.claimed)continue;let A=gp(m.title),E=A?`${w}-${A}.md`:`${w}.md`,$=z.resolve(t,E);if(fp(t,$),await Oi.promises.access($).then(()=>!0,()=>!1)){await Oi.promises.unlink(k.lockPath).catch(()=>{});continue}l.push(k.lockPath),y={item:m,wiId:w,filename:E,fullPath:$};break}if(!y)throw new ee("Failed to allocate a unique WI id");c.push(y),i.push(y.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 _=Ap(m.item.depends_on,f),y={...m.item,depends_on:_},v=Rp(y,m.wiId,o);await Oi.promises.writeFile(m.fullPath,v.raw,{encoding:"utf8",flag:"wx"}),d.push(m.fullPath);let w=await Oi.promises.stat(m.fullPath);g.push({summary:{wi_id:m.wiId,title:y.title,status:"draft",priority:"normal",assignee:y.assignee,depends_on:_,blocks:[],date:o,board:y.board&&y.board!==qt?y.board:void 0,source:y.source,screens:[],path:`docs/wi/${m.filename}`,mtime:w.mtimeMs},frontmatter:v.frontmatter,body:y.body});}return g}catch(c){throw await Promise.all(d.map(f=>Oi.promises.unlink(f).catch(()=>{}))),c}finally{await Promise.all(l.map(c=>Oi.promises.unlink(c).catch(()=>{})));}})}async function bp(n,e){let[t]=await ma(n,[xp(e)]);if(!t)throw new ee("Failed to create WI");return t}async function Pp(n,e){return {created:await ma(n,Tp(e))}}p();var Cp=new Set(["draft","approved","in-progress"]);function Ip(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 _=(d.get(m)??0)-1;d.set(m,_),_===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||!Cp.has(g.status))continue;if(!(g.depends_on??[]).some(_=>{if(!o.has(_))return false;let y=s.get(_);return y?y.status!=="done":false}))return {pick:f}}return {done:true}}p();function Sn(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function ya(n,e){let t={...n};for(let[r,o]of Object.entries(e))Sn(o)&&Sn(t[r])?t[r]=ya(t[r],o):t[r]=o;return t}function Wp(n){let e=n?.filePath??z.join(ss.homedir(),".crewx","crewx.yaml"),t=null,r=null;function o(){try{return Oi.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(Oi.readFileSync(e,"utf-8"));}catch{a=null;}let d=Sn(a)?a:{};return r=d,t=i,d}return {get path(){return e},read(){let i=s();return Sn(i.settings)?i.settings:{}},update(i){let a=s(),d=Sn(a.settings)?a.settings:{},l=ya(d,i),c={...a,settings:l};Oi.mkdirSync(z.dirname(e),{recursive:true});let f=`${e}.tmp`;return Oi.writeFileSync(f,jsYaml.dump(c)),Oi.renameSync(f,e),t=null,r=null,l}}}Xr();Bn();p();Ot();var jp="https://api.crewx.dev/v1/models",Hp=3600*1e3,ha=0;async function qp(n){let e=n?.ttlMs??Hp,t=Date.now();if(!(t-ha<e)){ha=t;try{let r=await fetch(n?.endpoint??jp);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});Es(s);}catch{}}}p();pe();Ot();Or();var zp="https://api.crewx.dev/v1/models",Gp=900*1e3,wa=0;function Kt(n){return n!=null&&typeof n=="object"&&!Array.isArray(n)}function Kp(n){return typeof n=="number"&&Number.isInteger(n)&&n>0}function Vp(n){return typeof n=="string"&&ks.includes(n)}function Jp(n){if(!Kt(n))return {};let e={};for(let[t,r]of Object.entries(n)){if(!Kt(r))continue;let o=r.input,s=r.output;typeof o!="number"||!Number.isFinite(o)||o<=0||typeof s!="number"||!Number.isFinite(s)||s<=0||(e[t]={inputPerMillionTokensUsd:o,outputPerMillionTokensUsd:s});}return e}function ka(n){if(Kt(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 Xp(n,e){let t=n.modelOverrides[e]?.effort;return Array.isArray(t)&&t.every(r=>typeof r=="string")?t:n.effort}function Yp(n,e){if(!Kt(n)||n.version!==1||!Kt(n.providers))return {};let t={};for(let[r,o]of Object.entries(n.providers)){if(!/^cli\/[^/]+$/.test(r)||!Kt(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=ka(o.query),a=ka(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=Xp(s,o.model);!l.includes(i.effort)||!l.includes(a.effort)||(t[r]={model:o.model,query:i,execute:a});}return t}async function Qp(n){let e=n?.ttlMs??Gp,t=Date.now();if(!(t-wa<e)){wa=t;try{let r=await fetch(n?.endpoint??zp);if(!r.ok){en({});return}let o=await r.json();if(!o?.providers||typeof o.providers!="object"){en({});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}:{},...Kp(m.contextWindowTokens)?{contextWindowTokens:m.contextWindowTokens}:{},...Vp(m.tier)?{tier:m.tier}:{},...m.recommended===!0?{recommended:!0}:{}}));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};}$r(s),Ts(Jp(o.models)),en(Yp(o.defaults,s));}catch{en({});}}}p();function Zp(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))}p();var ts=["codex","claude","grok","opencode","antigravity","copilot"];function eg(n){let e=n.indexOf("/");return e===-1?n:n.slice(e+1)}function ns(n){let e=eg(n),t=ts.indexOf(e);return t===-1?ts.length:t}function On(n,e){return ns(n)-ns(e)}var tg=new Set(["claude","copilot","codex","grok","opencode"]);function ng(n){if(!n)return "";if(n.startsWith("acp/")){let e=n.slice(4);if(tg.has(e))return `cli/${e}`}return n}pe();Ie();Lo();$o();p();Uo();Je();p();wr();Er();pe();var rg="model",og="mode",sg="thought_level";function rs(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 ig(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 ag(n,e,t,r){let o=t.agentInfo?.name,s=e??o??n,i=r.configOptions??[],d=(r.modes?.availableModes??[]).map(w=>({id:w.id,name:w.name,...w.description!=null?{description:w.description}:{}})),l=[];for(let w of i)if(w.category?.trim().toLowerCase()===og&&w.options!=null)for(let k of rs(w.options))k.value!=null&&l.push({id:k.value,name:k.name??k.value});let c=ig(d,l),f=[];for(let w of i)if(w.category?.trim().toLowerCase()===sg&&w.type==="select")for(let k of rs(w.options??[]))k.value!=null&&f.push(k.value);if(n==="claude"){let w=on(nn()),k=_a(t);return va(n,{models:w,modes:c,availableModelsCount:0,configModelsCount:0,skipModelWarn:true}),{id:`acp/${n}`,name:s,modes:c,effort:f,models:w,capabilities:k}}let m=(r.models?.availableModels??[]).map(w=>({id:w.modelId})),_=[];for(let w of i)if(w.category?.trim().toLowerCase()===rg&&w.options!=null)for(let k of rs(w.options))k.value!=null&&_.push({id:k.value,...k.name!=null?{name:k.name}:{}});let y=on(rn(m,_));va(n,{models:y,modes:c,availableModelsCount:m.length,configModelsCount:_.length,skipModelWarn:false});let v=_a(t);return {id:`acp/${n}`,name:s,modes:c,effort:f,models:y,capabilities:v}}function _a(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 va(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 xa(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 ag(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 dg(){let n=Object.keys(exports.ACP_ADAPTERS),e=await Promise.allSettled(n.map(r=>xa(r))),t=[];for(let r of e)r.status==="fulfilled"&&r.value!==null&&t.push(r.value);return t.sort((r,o)=>On(r.id,o.id))}wr();Bo();Er();qo();Qn();Ve();p();Ve();pe();function cg(n){return n.charAt(0).toUpperCase()+n.slice(1)}async function Ea(){return new Promise(n=>{child_process.execFile("opencode",["models"],{timeout:5e3,maxBuffer:1048576},(t,r)=>{if(t){n([]);return}let o=r.split(`
324
- `).map(s=>s.trim()).filter(s=>s.length>0).map(s=>({id:s}));n(o);}).on("error",()=>n([]));})}function ug(n,e,t){if(!e.meta)return null;let r=e.meta.capabilities??{},o=Ne(n),s=o.length>0?o:e.meta.models??[],i=t!==void 0?rn(t,s):s,a=Fn(`cli/${n}`);return {id:`cli/${n}`,name:e.meta.displayName??cg(n),modes:tn(n),effort:dt(n),models:on(i),modelOverrides:Is(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 pg(n={}){let e=n.includeOpencodeRuntimeModels?await Ea():void 0,t=[];for(let[r,o]of Object.entries(exports.BUILTIN_ADAPTERS)){let i=ug(r,o,r==="opencode"?e:void 0);i&&t.push(i);}return t.sort((r,o)=>On(r.id,o.id))}p();var os=0;function gg(n){let e=n.meta?.taskId,t=e?` taskId=${e}`:"";if(n.ok)return `Task completed:${t}
323
+ `,frontmatter:o}}async function va(n,e){let t=z.join(n,"docs","wi");return await Ds.promises.mkdir(t,{recursive:true}),Sp(t,async()=>{let{compact:r,iso:o}=Ap(new Date),i=`WI-${r}-`,s=await Ip(t),a=Op(s,i),d=[],c=[];try{let l=[];for(let m of e){let y;for(let _=0;_<999;_++,a++){let w=`WI-${r}-${String(a).padStart(3,"0")}`;if(Mp(s,w))continue;let k=await Np(t,w);if(!k.claimed)continue;let E=Rp(m.title),T=E?`${w}-${E}.md`:`${w}.md`,D=z.resolve(t,T);if(bp(t,D),await Ds.promises.access(D).then(()=>!0,()=>!1)){await Ds.promises.unlink(k.lockPath).catch(()=>{});continue}c.push(k.lockPath),y={item:m,wiId:w,filename:T,fullPath:D};break}if(!y)throw new ee("Failed to allocate a unique WI id");l.push(y),s.push(y.filename);}let f=new Map;for(let m of l)m.item.key&&f.set(m.item.key,m.wiId);let g=[];for(let m of l){let v=Up(m.item.depends_on,f),y={...m.item,depends_on:v},_=Bp(y,m.wiId,o);await Ds.promises.writeFile(m.fullPath,_.raw,{encoding:"utf8",flag:"wx"}),d.push(m.fullPath);let w=await Ds.promises.stat(m.fullPath);g.push({summary:{wi_id:m.wiId,title:y.title,status:"draft",priority:"normal",assignee:y.assignee,depends_on:v,blocks:[],date:o,board:y.board&&y.board!==jt?y.board:void 0,source:y.source,screens:[],path:`docs/wi/${m.filename}`,mtime:w.mtimeMs},frontmatter:_.frontmatter,body:y.body});}return g}catch(l){throw await Promise.all(d.map(f=>Ds.promises.unlink(f).catch(()=>{}))),l}finally{await Promise.all(c.map(l=>Ds.promises.unlink(l).catch(()=>{})));}})}async function Fp(n,e){let[t]=await va(n,[Dp(e)]);if(!t)throw new ee("Failed to create WI");return t}async function Wp(n,e){return {created:await va(n,$p(e))}}p();var jp=new Set(["draft","approved","in-progress"]);function Hp(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),i=new Map(n.filter(f=>o.has(f.wi_id)).map(f=>[f.wi_id,f])),s=t.filter(f=>{let g=i.get(f);return g&&g.status!=="done"});if(s.length===0)return {done:true};for(let f of s){let g=i.get(f);if(g)for(let m of g.depends_on??[]){if(!o.has(m))continue;if(i.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 s)a.set(f,new Set),d.set(f,0);for(let f of s){let g=i.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 c=s.filter(f=>(d.get(f)??0)===0),l=[];for(let f=0;f<c.length;f++){let g=c[f];l.push(g);for(let m of a.get(g)??[]){let v=(d.get(m)??0)-1;d.set(m,v),v===0&&c.push(m);}}if(l.length!==s.length)return {cycle:s.filter(f=>(d.get(f)??0)>0)};for(let f of t){if(!s.includes(f)||r.has(f))continue;let g=i.get(f);if(!g||!jp.has(g.status))continue;if(!(g.depends_on??[]).some(v=>{if(!o.has(v))return false;let y=i.get(v);return y?y.status!=="done":false}))return {pick:f}}return {done:true}}p();function Sn(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function _a(n,e){let t={...n};for(let[r,o]of Object.entries(e))Sn(o)&&Sn(t[r])?t[r]=_a(t[r],o):t[r]=o;return t}function eg(n){let e=n?.filePath??z.join(ii.homedir(),".crewx","crewx.yaml"),t=null,r=null;function o(){try{return Ds.statSync(e).mtimeMs}catch{return null}}function i(){let s=o();if(s===null)return t=null,r=null,{};if(r!==null&&t===s)return r;let a=null;try{a=jsYaml.load(Ds.readFileSync(e,"utf-8"));}catch{a=null;}let d=Sn(a)?a:{};return r=d,t=s,d}return {get path(){return e},read(){let s=i();return Sn(s.settings)?s.settings:{}},update(s){let a=i(),d=Sn(a.settings)?a.settings:{},c=_a(d,s),l={...a,settings:c};Ds.mkdirSync(z.dirname(e),{recursive:true});let f=`${e}.tmp`;return Ds.writeFileSync(f,jsYaml.dump(l)),Ds.renameSync(f,e),t=null,r=null,c}}}Jr();Un();p();St();var tg="https://api.crewx.dev/v1/models",ng=3600*1e3,xa=0;async function rg(n){let e=n?.ttlMs??ng,t=Date.now();if(!(t-xa<e)){xa=t;try{let r=await fetch(n?.endpoint??tg);if(!r.ok)return;let o=await r.json();if(!o?.models||typeof o.models!="object")return;let i={};for(let[s,a]of Object.entries(o.models))a!=null&&(i[s]={input:a.input,cachedInput:a.cachedInput,output:a.output});Ei(i);}catch{}}}p();ge();St();Ir();var og="https://api.crewx.dev/v1/models",ig=900*1e3,Ea=0;function Me(n){return n!=null&&typeof n=="object"&&!Array.isArray(n)}function sg(n){return typeof n=="number"&&Number.isInteger(n)&&n>0}function ag(n){return typeof n=="string"&&ki.includes(n)}function dg(n){if(n===void 0)return [];if(!Array.isArray(n))return;let e=new Set,t=[];for(let r of n){if(!Me(r)||typeof r.key!="string"||r.key.trim().length===0)return;let o=r.key.trim();if(e.has(o))return;if(e.add(o),r.type==="boolean"){t.push({key:o,type:"boolean"});continue}if(r.type!=="enum"||!Array.isArray(r.values)||r.values.length===0||r.values.some(i=>typeof i!="string"||i.length===0)||new Set(r.values).size!==r.values.length)return;t.push({key:o,type:"enum",values:[...r.values]});}return t}function cg(n,e){if(n===void 0)return;if(!Me(n))return null;let t=new Map(e.map(o=>[o.key,o])),r={};for(let[o,i]of Object.entries(n)){let s=t.get(o);if(s){if(s.type==="boolean"&&typeof i!="boolean"||s.type==="enum"&&(typeof i!="string"||!s.values.includes(i)))return null;r[o]=i;}}return r}function lg(n){if(!Me(n))return {};let e={};for(let[t,r]of Object.entries(n)){if(!Me(r))continue;let o=r.input,i=r.output;typeof o!="number"||!Number.isFinite(o)||o<=0||typeof i!="number"||!Number.isFinite(i)||i<=0||(e[t]={inputPerMillionTokensUsd:o,outputPerMillionTokensUsd:i});}return e}function Ta(n,e){if(!Me(n)||typeof n.mode!="string"||n.mode.length===0||typeof n.effort!="string"||n.effort.length===0)return;let t=cg(n.providerOptions,e);if(t!==null)return {mode:n.mode,effort:n.effort,...t!==void 0?{providerOptions:t}:{}}}function ug(n,e){let t=n.modelOverrides[e]?.effort;return Array.isArray(t)&&t.every(r=>typeof r=="string")?t:n.effort}function pg(n,e){if(!Me(n)||n.version!==1||!Me(n.providers))return {};let t={};for(let[r,o]of Object.entries(n.providers)){if(!/^cli\/[^/]+$/.test(r)||!Me(o))continue;let i=e[r.slice(4)];if(!i||typeof o.model!="string"||o.model.length===0||!i.models.some(f=>f.id===o.model))continue;let s=i.providerOptions??[],a=Ta(o.query,s),d=Ta(o.execute,s);if(!a||!d)continue;let c=new Set(i.modes.map(f=>f.id));if(!c.has(a.mode)||!c.has(d.mode))continue;let l=ug(i,o.model);!l.includes(a.effort)||!l.includes(d.effort)||(t[r]={model:o.model,query:a,execute:d});}return t}async function gg(n){let e=n?.ttlMs??ig,t=Date.now();if(!(t-Ea<e)){Ea=t;try{let r=await fetch(n?.endpoint??og);if(!r.ok){Qt({});return}let o=await r.json();if(!o?.providers||typeof o.providers!="object"){Qt({});return}let i={};for(let[s,a]of Object.entries(o.providers)){let d=Array.isArray(a);if(!d&&!Me(a))continue;let c=d?[]:dg(a.providerOptions);if(c===void 0)continue;let l=d?a:Array.isArray(a.models)?a.models:[],f=d?[]:Array.isArray(a.modes)?a.modes:[],g=d?[]:Array.isArray(a.effort)?a.effort:[],m=d||!Me(a.modelOverrides)?{}:a.modelOverrides,v=l.filter(y=>y!=null&&typeof y.id=="string").map(y=>({id:y.id,name:y.name??y.id,...y.description!=null?{description:y.description}:{},...sg(y.contextWindowTokens)?{contextWindowTokens:y.contextWindowTokens}:{},...ag(y.tier)?{tier:y.tier}:{},...y.recommended===!0?{recommended:!0}:{}}));i[s]={models:v,modes:f.filter(y=>y!=null&&typeof y.id=="string").map(y=>({id:y.id,name:y.name??y.id,...y.description!=null?{description:y.description}:{}})),effort:g.filter(y=>typeof y=="string"),modelOverrides:m,providerOptions:c};}Lr(i),Ti(lg(o.models)),Qt(pg(o.defaults,i));}catch{Qt({});}}}p();function fg(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))}p();var ti=["codex","claude","grok","opencode","antigravity","copilot"];function mg(n){let e=n.indexOf("/");return e===-1?n:n.slice(e+1)}function ni(n){let e=mg(n),t=ti.indexOf(e);return t===-1?ti.length:t}function In(n,e){return ni(n)-ni(e)}var yg=new Set(["claude","copilot","codex","grok","opencode"]);function hg(n){if(!n)return "";if(n.startsWith("acp/")){let e=n.slice(4);if(yg.has(e))return `cli/${e}`}return n}ge();Se();Lo();$o();p();Uo();Ye();p();hr();xr();ge();var wg="model",kg="mode",vg="thought_level";function ri(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 _g(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 xg(n,e,t,r){let o=t.agentInfo?.name,i=e??o??n,s=r.configOptions??[],d=(r.modes?.availableModes??[]).map(w=>({id:w.id,name:w.name,...w.description!=null?{description:w.description}:{}})),c=[];for(let w of s)if(w.category?.trim().toLowerCase()===kg&&w.options!=null)for(let k of ri(w.options))k.value!=null&&c.push({id:k.value,name:k.name??k.value});let l=_g(d,c),f=[];for(let w of s)if(w.category?.trim().toLowerCase()===vg&&w.type==="select")for(let k of ri(w.options??[]))k.value!=null&&f.push(k.value);if(n==="claude"){let w=nn(en()),k=Aa(t);return Ra(n,{models:w,modes:l,availableModelsCount:0,configModelsCount:0,skipModelWarn:true}),{id:`acp/${n}`,name:i,modes:l,effort:f,models:w,capabilities:k}}let m=(r.models?.availableModels??[]).map(w=>({id:w.modelId})),v=[];for(let w of s)if(w.category?.trim().toLowerCase()===wg&&w.options!=null)for(let k of ri(w.options))k.value!=null&&v.push({id:k.value,...k.name!=null?{name:k.name}:{}});let y=nn(tn(m,v));Ra(n,{models:y,modes:l,availableModelsCount:m.length,configModelsCount:v.length,skipModelWarn:false});let _=Aa(t);return {id:`acp/${n}`,name:i,modes:l,effort:f,models:y,capabilities:_}}function Aa(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 Ra(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 ba(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 i=e.buildSessionParams({cwd:process.cwd()}),s=await r.newSessionRaw(i);return xg(n,t,o,s)}catch(o){return console.warn(`[acp] ${n} meta query failed: ${o instanceof Error?o.message:String(o)}`),null}finally{await r.dispose();}}async function Eg(){let n=Object.keys(exports.ACP_ADAPTERS),e=await Promise.allSettled(n.map(r=>ba(r))),t=[];for(let r of e)r.status==="fulfilled"&&r.value!==null&&t.push(r.value);return t.sort((r,o)=>In(r.id,o.id))}hr();Bo();xr();qo();Yn();Xe();p();Xe();ge();function Ag(n){return n.charAt(0).toUpperCase()+n.slice(1)}async function Pa(){return new Promise(n=>{child_process.execFile("opencode",["models"],{timeout:5e3,maxBuffer:1048576},(t,r)=>{if(t){n([]);return}let o=r.split(`
324
+ `).map(i=>i.trim()).filter(i=>i.length>0).map(i=>({id:i}));n(o);}).on("error",()=>n([]));})}function Rg(n,e,t){if(!e.meta)return null;let r=e.meta.capabilities??{},o=Le(n),i=o.length>0?o:e.meta.models??[],s=t!==void 0?tn(t,i):i,a=Bn(`cli/${n}`),d=he(n).providerOptions??[];return {id:`cli/${n}`,name:e.meta.displayName??Ag(n),modes:Zt(n),effort:st(n),models:nn(s),modelOverrides:Si(n),...d.length>0?{providerOptions:d}:{},...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 bg(n={}){let e=n.includeOpencodeRuntimeModels?await Pa():void 0,t=[];for(let[r,o]of Object.entries(exports.BUILTIN_ADAPTERS)){let s=Rg(r,o,r==="opencode"?e:void 0);s&&t.push(s);}return t.sort((r,o)=>In(r.id,o.id))}p();var oi=0;function Pg(n){let e=n.meta?.taskId,t=e?` taskId=${e}`:"";if(n.ok)return `Task completed:${t}
325
325
 
326
326
  ${n.data}`;let r=n.error?.message??"Unknown error";return `Task failed:${t}
327
- Error: ${r}`}function fg(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(os>=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(", ")}`;os++;try{let i=s==="execute"?await n.execute(r,o):await n.query(r,o);return gg(i)}finally{os--;}}}}p();var Ta=typeof process<"u"?process.env:{};function mg(){return Ta.CREWX_CLI||"npx crewx"}function yg(){return Ta.CREWX_WORKSPACE||(typeof process<"u"?process.cwd():"/")}p();function hg(){if(process.env.CREWX_HOME)try{return Oi__namespace.realpathSync(process.env.CREWX_HOME)}catch{return z__namespace.join(ss__namespace.homedir(),".crewx")}return process.platform!=="win32"&&process.env.XDG_CONFIG_HOME?z__namespace.join(process.env.XDG_CONFIG_HOME,"crewx"):z__namespace.join(ss__namespace.homedir(),".crewx")}p();p();var le="[REDACTED]",Ra="[PATH]";function is(n){if(typeof n!="string")return;let e=n.trim();if(e)return e=e.replace(/^\s*at\s+[^\r\n]+(?:\r?\n|$)/gim,""),e=e.replace(/(^|[\r\n])\s*(?:authorization|proxy-authorization|x-api-key|x-goog-api-key|x-auth-token|cookie|set-cookie)\s*:\s*[^\r\n]*/gim,`$1[HTTP HEADER ${le}]`),e=kg(e),e=e.replace(/\b(?:Bearer|Basic)\s+[A-Za-z0-9._~+\-/]+=*/gi,`${le}`),e=e.replace(/\bsk-[A-Za-z0-9][A-Za-z0-9_-]*/g,le),e=e.replace(/\bghp_[A-Za-z0-9][A-Za-z0-9_-]*/g,le),e=e.replace(/\bxoxb-[A-Za-z0-9-]+/g,le),e=e.replace(/\bxoxp-[A-Za-z0-9-]+/g,le),e=e.replace(/\bAKIA[0-9A-Z]{12,}\b/g,le),e=e.replace(/\bgithub_pat_[A-Za-z0-9_]+/g,le),e=e.replace(/\bgho_[A-Za-z0-9_]+/g,le),e=e.replace(/\bAIza[A-Za-z0-9_-]{20,}\b/g,le),e=e.replace(/\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g,le),e=e.replace(/\b(?:authorization|api[_ -]?key|access[_ -]?token|auth[_ -]?token|refresh[_ -]?token|token|secret|password)\s*([:=])\s*["']?[^\s,;&"']+/gi,(t,r)=>`${le}${r}${le}`),e=e.replace(/([?&](?:api[_-]?key|access[_-]?token|token)=)[^&\s]+/gi,`$1${le}`),e=e.replace(/(?:\/(?:Users|home|private|var\/folders|tmp|workspace|workspaces|Volumes|opt|etc|srv|Applications)\/[^\s"'`),;]+)/g,Ra),e=e.replace(/\b[A-Z]:\\(?:Users|home|Windows|Program Files|workspace|workspaces)\\[^\s"'`),;]*/gi,Ra),e=e.replace(/[\r\n]{3,}/g,`
327
+ Error: ${r}`}function Cg(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(oi>=3)return "Error: Maximum delegation depth (3) reached. Cannot delegate further.";let r=t.agent,o=t.message,i=t.mode??"query";if(!e.includes(r))return `Error: Unknown agent "${r}". Available: ${e.join(", ")}`;oi++;try{let s=i==="execute"?await n.execute(r,o):await n.query(r,o);return Pg(s)}finally{oi--;}}}}p();var Ca=typeof process<"u"?process.env:{};function Sg(){return Ca.CREWX_CLI||"npx crewx"}function Ig(){return Ca.CREWX_WORKSPACE||(typeof process<"u"?process.cwd():"/")}p();function Og(){if(process.env.CREWX_HOME)try{return Ds__namespace.realpathSync(process.env.CREWX_HOME)}catch{return z__namespace.join(ii__namespace.homedir(),".crewx")}return process.platform!=="win32"&&process.env.XDG_CONFIG_HOME?z__namespace.join(process.env.XDG_CONFIG_HOME,"crewx"):z__namespace.join(ii__namespace.homedir(),".crewx")}p();p();var le="[REDACTED]",Ia="[PATH]";function si(n){if(typeof n!="string")return;let e=n.trim();if(e)return e=e.replace(/^\s*at\s+[^\r\n]+(?:\r?\n|$)/gim,""),e=e.replace(/(^|[\r\n])\s*(?:authorization|proxy-authorization|x-api-key|x-goog-api-key|x-auth-token|cookie|set-cookie)\s*:\s*[^\r\n]*/gim,`$1[HTTP HEADER ${le}]`),e=Ng(e),e=e.replace(/\b(?:Bearer|Basic)\s+[A-Za-z0-9._~+\-/]+=*/gi,`${le}`),e=e.replace(/\bsk-[A-Za-z0-9][A-Za-z0-9_-]*/g,le),e=e.replace(/\bghp_[A-Za-z0-9][A-Za-z0-9_-]*/g,le),e=e.replace(/\bxoxb-[A-Za-z0-9-]+/g,le),e=e.replace(/\bxoxp-[A-Za-z0-9-]+/g,le),e=e.replace(/\bAKIA[0-9A-Z]{12,}\b/g,le),e=e.replace(/\bgithub_pat_[A-Za-z0-9_]+/g,le),e=e.replace(/\bgho_[A-Za-z0-9_]+/g,le),e=e.replace(/\bAIza[A-Za-z0-9_-]{20,}\b/g,le),e=e.replace(/\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g,le),e=e.replace(/\b(?:authorization|api[_ -]?key|access[_ -]?token|auth[_ -]?token|refresh[_ -]?token|token|secret|password)\s*([:=])\s*["']?[^\s,;&"']+/gi,(t,r)=>`${le}${r}${le}`),e=e.replace(/([?&](?:api[_-]?key|access[_-]?token|token)=)[^&\s]+/gi,`$1${le}`),e=e.replace(/(?:\/(?:Users|home|private|var\/folders|tmp|workspace|workspaces|Volumes|opt|etc|srv|Applications)\/[^\s"'`),;]+)/g,Ia),e=e.replace(/\b[A-Z]:\\(?:Users|home|Windows|Program Files|workspace|workspaces)\\[^\s"'`),;]*/gi,Ia),e=e.replace(/[\r\n]{3,}/g,`
328
328
 
329
- `).trim(),wg(e,1024)||void 0}function wg(n,e){let t=new TextEncoder;if(t.encode(n).byteLength<=e)return n;let r="",o=0;for(let s of n){let i=t.encode(s).byteLength;if(o+i>e)break;r+=s,o+=i;}return r}function kg(n){let e=/\b(?:request|response|http)?\s*body\s*[:=]\s*/gim,t="",r=0,o;for(;(o=e.exec(n))!==null;){if(o.index<r)continue;let s=o.index+o[0].length,i=_g(n,s),a=i>=0?i:n.indexOf(`
330
- `,s)>=0?n.indexOf(`
331
- `,s):n.length;t+=n.slice(r,o.index),t+=`[HTTP BODY ${le}]`,r=a;}return t+n.slice(r)}function _g(n,e){let t=n[e];if(t==='"'||t==="'")return vg(n,e,t);if(t!=="{"&&t!=="[")return -1;let r=[],o,s=false;for(let i=e;i<n.length;i+=1){let a=n[i];if(o){s?s=false:a==="\\"?s=true:a===o&&(o=void 0);continue}if(a==='"'||a==="'"){o=a;continue}if(a==="{"||a==="["){r.push(a);continue}if(a!=="}"&&a!=="]")continue;let d=r.pop();if(a==="}"&&d!=="{"||a==="]"&&d!=="[")return -1;if(r.length===0)return i+1}return -1}function vg(n,e,t){let r=false;for(let o=e+1;o<n.length;o+=1){let s=n[o];if(r)r=false;else if(s==="\\")r=true;else if(s===t)return o+1}return -1}var xg=new Set(["USAGE_LIMITED","CONTEXT_WINDOW_EXCEEDED","INPUT_TOO_LARGE","MODEL_NOT_SUPPORTED","MODEL_AT_CAPACITY","AUTH_REQUIRED","CLI_NOT_AVAILABLE","CLI_UPDATE_REQUIRED","AGENT_NOT_FOUND","PERMISSION_OR_TRUST","TIMEOUT_OR_STUCK","NETWORK_OR_PROVIDER_TRANSIENT","PROVIDER_CONFIGURATION","PROCESS_FAILED"]),Eg={QUOTA_EXHAUSTED:"USAGE_LIMITED",RATE_LIMITED:"USAGE_LIMITED",AUTH_REQUIRED:"AUTH_REQUIRED",TIMEOUT_IDLE:"TIMEOUT_OR_STUCK",TIMEOUT_TOTAL:"TIMEOUT_OR_STUCK",PROVIDER_NOT_FOUND:"PROVIDER_CONFIGURATION",INVALID_PROVIDER_FORMAT:"PROVIDER_CONFIGURATION",PROVIDER_CRASHED:"PROCESS_FAILED",EMPTY_OUTPUT:"PROCESS_FAILED"},Tg=[{code:"USAGE_LIMITED",pattern:/(?:rate[ _-]?limit|quota|usage[ /_-]?limit|usage exhausted|too many requests|429\b)/i},{code:"CONTEXT_WINDOW_EXCEEDED",pattern:/context (?:window|length)|maximum context|context[_ -]?window[_ -]?exceeded|too many tokens/i},{code:"INPUT_TOO_LARGE",pattern:/input[_ -]?(?:is[_ -]?)?too[_ -]?large|prompt (?:is )?too (?:large|long)|request[_ -]?(?:is[_ -]?)?too[_ -]?large|payload[_ -]?(?:is[_ -]?)?too[_ -]?large|maximum input/i},{code:"MODEL_AT_CAPACITY",pattern:/(?:model|service|provider).*(?:at capacity|overloaded|temporarily busy)|at capacity|overloaded/i},{code:"MODEL_NOT_SUPPORTED",pattern:/(?:model|invalid_request_error).*(?:not[ _-]?supported|unsupported|does[ _-]?not[ _-]?exist|not[ _-]?found|invalid)|model[_-]?not[_-]?(?:found|supported)/i},{code:"AUTH_REQUIRED",pattern:/(?:401\b|unauthori[sz]ed|not logged in|login required|sign[ -]?in required|api key (?:is )?(?:missing|invalid|required)|authentication required)/i},{code:"CLI_UPDATE_REQUIRED",pattern:/(?:requires? a newer version|update (?:your )?cli|cli version.*(?:old|outdated|unsupported)|version mismatch)/i},{code:"CLI_NOT_AVAILABLE",pattern:/(?:ENOENT|command not found|executable.*not found|cli.*(?:not installed|unavailable)|is .* installed\?)/i},{code:"AGENT_NOT_FOUND",pattern:/agent[_ -]?not[_ -]?found|unknown agent/i},{code:"PERMISSION_OR_TRUST",pattern:/(?:permission denied|operation not permitted|workspace trust|not trusted|access denied|EACCES|EPERM)/i},{code:"TIMEOUT_OR_STUCK",pattern:/(?:timeout|timed out|took too long|stuck|idle timeout|ETIMEDOUT)/i},{code:"NETWORK_OR_PROVIDER_TRANSIENT",pattern:/(?:network (?:unreachable|error)|connection (?:reset|refused|closed)|ECONN(?:RESET|REFUSED|ABORTED)|service unavailable|upstream.*(?:5\d\d|error)|provider.*(?:5\d\d|unavailable|down)|\b5\d\d\b)/i},{code:"PROVIDER_CONFIGURATION",pattern:/(?:invalid provider|unsupported provider|provider namespace|provider configuration|provider config|missing provider)/i}];function Ag(n){try{if(!tt(n)||n.status!=="failed")return as();let e=Rg(n.error);if(cs(e.message))return as();let t=me(n.providerId)??e.provider??null,r=Pg(n.logs),o=Pa(e.code);if(o)return Mn(o,t,e.message,e);let s=Rr(e.providerCode)??Rr(e.code),i=s?ls(s,e.message):void 0;if(i)return Mn(i,t,e.message,e,s);let a=Cg(r);if(!bg(e)&&a&&(a.type==="user_stop"||cs(a.message)))return as();if(a){let l=Ig(a.code,a.providerCode,a.message);if(l)return Mn(l,t,a.message??e.message,e,a.providerCode??a.code,a,a.structuredFailure?"terminal":"envelope")}let d=Sg(e.message,r);return d?Mn(d.code,t,d.message,e,d.terminal?.providerCode??d.terminal?.code,d.terminal,d.terminal?.structuredFailure?"terminal":"envelope"):Mn("PROCESS_FAILED",t,e.message,e)}catch{return {errorCode:"PROCESS_FAILED",errorProvider:null}}}function as(){return {errorCode:null,errorProvider:null}}function Mn(n,e,t,r,o,s,i="envelope"){let a={};if(s?.resetAt!==void 0&&(a.resetAt=s.resetAt),r?.model&&(a.model=r.model),s?.type&&(a.upstreamType=s.type),o&&(a.upstreamCode=o),n==="CLI_NOT_AVAILABLE"||n==="CLI_UPDATE_REQUIRED"){let f=e?.startsWith("cli/")?e.slice(4):void 0;f&&(a.cliName=f);}let d=i==="terminal"?t:r?.message,l=i==="terminal"?s?.structuredFailure?d:void 0:r?.isEnvelope?d:void 0,c=is(l);return c&&(a.technicalMessage=c),Object.keys(a).length>0?{errorCode:n,errorProvider:e,errorMeta:a}:{errorCode:n,errorProvider:e}}function Rg(n){let e=typeof n=="string"?Jt(n):n;return tt(e)?{isEnvelope:true,code:me(e.code),providerCode:me(e.providerCode),message:me(e.message)??me(e.error),provider:me(e.provider)??me(e.errorProvider),model:me(e.model)}:{isEnvelope:false,...typeof n=="string"&&n.trim()?{message:n.trim()}:{}}}function Jt(n){try{return JSON.parse(n)}catch{return}}function bg(n){return !!(n.code||n.providerCode||n.message)}function Pg(n){let e=[];if(typeof n=="string"){let t=Jt(n);if(Array.isArray(t))e.push(...t);else for(let r of n.split(/\r?\n/)){let o=Jt(r.trim());o!==void 0&&e.push(o);}}else Array.isArray(n)?e.push(...n):tt(n)&&e.push(n);return e.flatMap(Vt)}function Vt(n){if(!tt(n))return [];let e=me(n.type),t=me(n.message);if(t&&!e){let o=Jt(t);if(Array.isArray(o))return o.flatMap(Vt);if(tt(o))return Vt(o);let s=t.split(/\r?\n/).map(i=>Jt(i.trim())).filter(i=>tt(i));return s.length>0?s.flatMap(Vt):n.level==="stderr"?[{type:"stderr",message:t,rank:1,structuredFailure:false}]:Vt({type:"info",content:t})}if(e==="rate_limit_event"){let o=ba(n.rate_limit_info);return me(o?.status)!=="rejected"?[]:[{type:e,code:"RATE_LIMITED",message:Nn(o?.message,n.message),resetAt:Og(o?.resetsAt),rank:4,structuredFailure:true}]}if(e==="turn.failed"||e==="error"){let o=ba(n.error),s=Nn(o?.message,o?.detail,n.message,n.errorMessage,n.content),i=Nn(o?.code,n.code,n.errorCode);return [{type:e,code:i,providerCode:Nn(o?.providerCode,n.providerCode),message:s,rank:e==="turn.failed"?3:2,structuredFailure:true}]}if(e==="text"&&typeof n.content=="string"){let o=Jt(n.content);if(tt(o))return Vt(o)}let r=Nn(n.errorMessage,n.content);return r&&cs(r)?[{type:"user_stop",message:r,rank:1,structuredFailure:false}]:r&&/(?:turn\.failed|type:error)/i.test(r)?[{type:r.match(/turn\.failed/i)?"turn.failed":"error",message:r,rank:3,structuredFailure:false}]:[]}function Cg(n){return [...n].sort((e,t)=>t.rank-e.rank)[0]}function Ig(n,e,t){let r=Pa(n);if(r)return r;if(n){let o=ls(n,t);if(o)return o}if(e){let o=ls(e,t);if(o)return o}return ds(t)}function Sg(n,e){let t=ds(n);if(t)return {code:t,message:n};for(let r of [...e].sort((o,s)=>s.rank-o.rank)){let o=ds(r.message);if(o)return {code:o,message:r.message,terminal:r}}}function ds(n){if(!(typeof n!="string"||!n.trim()))return Tg.find(e=>e.pattern.test(n))?.code}function ls(n,e){let t=Rr(n)??n;if(t==="MODEL_UNAVAILABLE")return /(?:capacity|overloaded|busy)/i.test(e??"")?"MODEL_AT_CAPACITY":"MODEL_NOT_SUPPORTED";if(t!=="UNKNOWN")return Eg[t]}function Pa(n){let e=Rr(n);return e&&xg.has(e)?e:void 0}function Rr(n){return typeof n=="string"&&n.trim()?n.trim().toUpperCase():void 0}function cs(n){return n?/\b(?:stopped|killed|aborted|cancelled|canceled)\s+by\s+user\b/i.test(n)||/사용자에 의해 중지됨/.test(n)||/\b(?:SIGTERM\s+143|143\s+SIGTERM)\b/i.test(n):false}function tt(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function ba(n){return tt(n)?n:void 0}function me(n){return typeof n=="string"&&n.trim()?n.trim():void 0}function Og(n){return typeof n=="string"||typeof n=="number"&&Number.isFinite(n)?n:void 0}function Nn(...n){return n.map(me).find(e=>!!e)}p();var Mg=/^[a-zA-Z0-9._-]+$/,us=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(!Mg.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return xt("box")}};p();function Ng(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,_=false,y=[];for(let k=0;k<f.length;k+=2){let A=f[k],E=f[k+1],$=A?.content||"",R=E?.content||"",V=o.countTokens($+R),P=[];A&&P.push(A),E&&P.push(E),y.push({messages:P,tokens:V});}for(let k=y.length-1;k>=0;k--){let A=y[k];if(m+A.tokens>d){_=true;break}m+=A.tokens,g.unshift(...A.messages);}let v=[],w=0;if(_&&l>0)try{let{boxes:k}=t.listBoxes(n);for(let A=k.length-1;A>=0;A--){let E=k[A],$=E.summaryTokens??E.sourceTokens;if(w+$>l)break;w+=$,v.unshift({boxId:E.id,seq:E.seq,taskCount:E.taskCount,sourceTokens:E.sourceTokens,summary:E.summary,previewFirst:E.previewFirst,previewMid:E.previewMid,previewLast:E.previewLast,createdAt:E.createdAt});}}catch(k){if(k instanceof Error&&!/not found/i.test(k.message))throw k}return {hot:g,warm:v,hotTokens:m,warmTokens:w,hotOverflow:_,totalBudget:c,config:{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}}}Ve();ft();p();var br=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},Ln=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,_=0,y=perf_hooks.performance.now(),v=async P=>{a?.onTaskStart&&await a.onTaskStart(P),g+=1;let F=new AbortController,se={signal:F.signal},K,ne;typeof s=="number"&&Number.isFinite(s)&&s>0&&(ne=new Promise((H,L)=>{K=setTimeout(()=>{let J=new br(P.id,s);F.abort(J),L(J);},s);}));let j=perf_hooks.performance.now(),S=P.run(se),Z=ne?Promise.race([S,ne]):S;try{let H=await Z,L=perf_hooks.performance.now(),J=L-j,ie=d(H,P),Q={taskId:P.id,success:ie,value:H,durationMs:J,startedAt:j,finishedAt:L,metadata:P.metadata,aborted:!1};l.push(Q),ie?c+=1:f+=1,a?.onTaskComplete&&await a.onTaskComplete(Q),i&&!ie&&(m=!0);}catch(H){let L=perf_hooks.performance.now(),J=L-j,ie=H instanceof Error?H:new Error(String(H)),Q={taskId:P.id,success:false,error:ie,durationMs:J,startedAt:j,finishedAt:L,metadata:P.metadata,aborted:F.signal.aborted};l.push(Q),f+=1,a?.onError&&await a.onError(P,ie,J),i&&(m=true);}finally{K&&clearTimeout(K),ne&&S.catch(()=>{});}},w=async()=>{for(;!m;){let P=_;if(P>=e.length)break;_+=1;let F=e[P];if(!F||(await v(F),m))break}},k=Math.min(o,e.length),A=[];for(let P=0;P<k;P++)A.push(w());await Promise.all(A);let $=perf_hooks.performance.now()-y,R=l.length?l.reduce((P,F)=>P+F.durationMs,0)/l.length:0,V=$>0?l.length/($/1e3):l.length;return this.metrics={totalTasks:e.length,startedTasks:g,completedTasks:l.length,successCount:c,failureCount:f,totalDurationMs:$,averageDurationMs:R,throughput:V},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);}}}};p();p();var $n=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 Ca=3,Ia=3e4,Sa=500,Dg=n=>{if(typeof n!="number"||Number.isNaN(n)||!Number.isFinite(n))return Ca;let e=Math.floor(n);return e>0?e:Ca},Lg=n=>n===void 0||typeof n!="number"||Number.isNaN(n)||n<=0?Ia:n,$g=n=>{if(!n)return {maxRetries:0,retryDelay:Sa};let e=Number.isInteger(n.maxRetries)&&n.maxRetries>=0?n.maxRetries:0,t=typeof n.retryDelay=="number"&&n.retryDelay>=0?n.retryDelay:Sa;return {maxRetries:e,retryDelay:t}},ps=n=>{let e=n.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},Ug=(n,e)=>n<=0?Promise.resolve():new Promise((t,r)=>{let o=setTimeout(()=>{e.removeEventListener("abort",s),t();},n),s=()=>{clearTimeout(o),r(ps(e));};if(e.aborted){s();return}e.addEventListener("abort",s,{once:true});}),Bg=async(n,e,t)=>{let r,o;for(let s=0;s<=e.maxRetries;s++){if(t.aborted)throw ps(t);try{let i=await n();if(r=i,i.success||s===e.maxRetries)return i}catch(i){if(o=i,t.aborted)throw ps(t);if(s===e.maxRetries)throw i instanceof Error?i:new Error(String(i))}s<e.maxRetries&&await Ug(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")},Oa=(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);}},Fg=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}}}),Wg=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")}}),jg=(n,e)=>({onTaskComplete:async t=>{Oa(e,n,t.success);},onError:async()=>{Oa(e,n,false);}}),Ma=async(n,e,t={})=>{if(!Array.isArray(n))throw new TypeError("Parallel helpers expect an array of requests");if(n.length===0){let v={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?.(v),[]}let r=Dg(t.concurrency),o=Lg(t.timeout),s=$g(t.retryPolicy),i=new Ln,a=new $n,d=n.map((y,v)=>({id:`${e}:${y.agentId??"anonymous"}:${v}`,metadata:{index:v,mode:e,request:y},run:w=>Bg(()=>e==="query"?a.query(y):a.execute(y),s,w.signal)})),l={completed:0,success:0,failure:0,total:n.length},c=await i.run(d,{maxConcurrency:r,timeoutMs:o,evaluateTaskSuccess:y=>y.success,callbacks:jg(l,t)}),f=Fg(c),g=Wg(c),m=i.getMetrics(),_={total:n.length,completed:n.length,successCount:f.filter(y=>y.success).length,failureCount:f.filter(y=>!y.success).length,results:f,errors:g,metrics:m};return t.onComplete?.(_),f},Hg=(n,e)=>Ma(n,"query",e),qg=(n,e)=>Ma(n,"execute",e);Vo();p();var gs=class extends Wt{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=z.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=z.dirname(t);Oi.existsSync(o)||Oi.mkdirSync(o,{recursive:true});}else if(!Oi.existsSync(t))throw new M("NOT_FOUND","Database not found");let r=Ee(t);if(e)try{pr(r.db,t);}catch(o){throw r.close(),o}return r}insertSpan(e){let t=this.openHandle(true);try{t.db.insert(At).values(e).run();}catch(r){throw r instanceof M?r:new M("DB_ERROR","Failed to insert span",r)}finally{t.close();}}findByTaskId(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.select().from(At).where(drizzleOrm.eq(At.task_id,e)).all()}catch(r){throw new M("DB_ERROR","Failed to find spans by task id",r)}finally{t.close();}}findById(e){if(!this.dbExists())return;let t=this.openHandle(false);try{return t.db.select().from(At).where(drizzleOrm.eq(At.id,e)).limit(1).get()??void 0}catch(r){throw new M("DB_ERROR","Failed to find span by id",r)}finally{t.close();}}};Ko();Go();zo();p();p();var Pr=class{capabilities={required:[]}};p();p();p();var La=2e3;function $a(n){let e=n.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=La?e:e.slice(0,La-11)+" [redacted]"}var tf=10*1024*1024,nf={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function fs(n,e){return n===void 0?true:Array.isArray(n)?n.includes(e):n===e}function rf(n,e){return n===void 0?true:Array.isArray(n)?n.some(t=>e.includes(t)):e.includes(n)}function Ba(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*(nf[r]??1))}function Fa(n){return typeof n=="string"}function Wa(n){try{let e=Oi.statSync(n);return e.size>tf?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${n} (${e.size} bytes)
332
- `),null):Oi.readFileSync(n,"utf8").split(`
333
- `).length}catch{return null}}function ja(n){try{return Oi.statSync(n).size}catch{return null}}function of(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(be(o,n))return true;if(t&&o.startsWith("/")){let{relative:s,isAbsolute:i}=ae("path");if(i(o)){let a=s(t,o);if(a&&!a.startsWith("..")&&be(a,n))return true}}return false}function sf(n,e){return n?JSON.stringify(e).includes(n):true}function af(n,e){if(!n)return true;try{let t=new RegExp(n),r=JSON.stringify(e);return t.test(r)}catch{return false}}function df(n,e){if(!n)return true;try{let t=new RegExp(n),r=JSON.stringify(e);return t.test(r)}catch{return false}}function lf(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(Fa(n.pathSizeMin)){let o=ja(r);if(o===null||o<Ba(n.pathSizeMin))return false}else {let o=Wa(r);if(o===null||o<n.pathSizeMin)return false}if(n.pathSizeMax!==void 0)if(Fa(n.pathSizeMax)){let o=ja(r);if(o===null||o>Ba(n.pathSizeMax))return false}else {let o=Wa(r);if(o===null||o>n.pathSizeMax)return false}return true}function cf(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 ys=class extends Pr{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(`
329
+ `).trim(),Mg(e,1024)||void 0}function Mg(n,e){let t=new TextEncoder;if(t.encode(n).byteLength<=e)return n;let r="",o=0;for(let i of n){let s=t.encode(i).byteLength;if(o+s>e)break;r+=i,o+=s;}return r}function Ng(n){let e=/\b(?:request|response|http)?\s*body\s*[:=]\s*/gim,t="",r=0,o;for(;(o=e.exec(n))!==null;){if(o.index<r)continue;let i=o.index+o[0].length,s=Dg(n,i),a=s>=0?s:n.indexOf(`
330
+ `,i)>=0?n.indexOf(`
331
+ `,i):n.length;t+=n.slice(r,o.index),t+=`[HTTP BODY ${le}]`,r=a;}return t+n.slice(r)}function Dg(n,e){let t=n[e];if(t==='"'||t==="'")return Lg(n,e,t);if(t!=="{"&&t!=="[")return -1;let r=[],o,i=false;for(let s=e;s<n.length;s+=1){let a=n[s];if(o){i?i=false:a==="\\"?i=true:a===o&&(o=void 0);continue}if(a==='"'||a==="'"){o=a;continue}if(a==="{"||a==="["){r.push(a);continue}if(a!=="}"&&a!=="]")continue;let d=r.pop();if(a==="}"&&d!=="{"||a==="]"&&d!=="[")return -1;if(r.length===0)return s+1}return -1}function Lg(n,e,t){let r=false;for(let o=e+1;o<n.length;o+=1){let i=n[o];if(r)r=false;else if(i==="\\")r=true;else if(i===t)return o+1}return -1}var $g=new Set(["USAGE_LIMITED","CONTEXT_WINDOW_EXCEEDED","INPUT_TOO_LARGE","MODEL_NOT_SUPPORTED","MODEL_AT_CAPACITY","AUTH_REQUIRED","CLI_NOT_AVAILABLE","CLI_UPDATE_REQUIRED","AGENT_NOT_FOUND","PERMISSION_OR_TRUST","TIMEOUT_OR_STUCK","NETWORK_OR_PROVIDER_TRANSIENT","PROVIDER_CONFIGURATION","PROCESS_FAILED"]),Ug={QUOTA_EXHAUSTED:"USAGE_LIMITED",RATE_LIMITED:"USAGE_LIMITED",AUTH_REQUIRED:"AUTH_REQUIRED",TIMEOUT_IDLE:"TIMEOUT_OR_STUCK",TIMEOUT_TOTAL:"TIMEOUT_OR_STUCK",PROVIDER_NOT_FOUND:"PROVIDER_CONFIGURATION",INVALID_PROVIDER_FORMAT:"PROVIDER_CONFIGURATION",PROVIDER_CRASHED:"PROCESS_FAILED",EMPTY_OUTPUT:"PROCESS_FAILED"},Bg=[{code:"USAGE_LIMITED",pattern:/(?:rate[ _-]?limit|quota|usage[ /_-]?limit|usage exhausted|too many requests|429\b)/i},{code:"CONTEXT_WINDOW_EXCEEDED",pattern:/context (?:window|length)|maximum context|context[_ -]?window[_ -]?exceeded|too many tokens/i},{code:"INPUT_TOO_LARGE",pattern:/input[_ -]?(?:is[_ -]?)?too[_ -]?large|prompt (?:is )?too (?:large|long)|request[_ -]?(?:is[_ -]?)?too[_ -]?large|payload[_ -]?(?:is[_ -]?)?too[_ -]?large|maximum input/i},{code:"MODEL_AT_CAPACITY",pattern:/(?:model|service|provider).*(?:at capacity|overloaded|temporarily busy)|at capacity|overloaded/i},{code:"MODEL_NOT_SUPPORTED",pattern:/(?:model|invalid_request_error).*(?:not[ _-]?supported|unsupported|does[ _-]?not[ _-]?exist|not[ _-]?found|invalid)|model[_-]?not[_-]?(?:found|supported)/i},{code:"AUTH_REQUIRED",pattern:/(?:401\b|unauthori[sz]ed|not logged in|login required|sign[ -]?in required|api key (?:is )?(?:missing|invalid|required)|authentication required)/i},{code:"CLI_UPDATE_REQUIRED",pattern:/(?:requires? a newer version|update (?:your )?cli|cli version.*(?:old|outdated|unsupported)|version mismatch)/i},{code:"CLI_NOT_AVAILABLE",pattern:/(?:ENOENT|command not found|executable.*not found|cli.*(?:not installed|unavailable)|is .* installed\?)/i},{code:"AGENT_NOT_FOUND",pattern:/agent[_ -]?not[_ -]?found|unknown agent/i},{code:"PERMISSION_OR_TRUST",pattern:/(?:permission denied|operation not permitted|workspace trust|not trusted|access denied|EACCES|EPERM)/i},{code:"TIMEOUT_OR_STUCK",pattern:/(?:timeout|timed out|took too long|stuck|idle timeout|ETIMEDOUT)/i},{code:"NETWORK_OR_PROVIDER_TRANSIENT",pattern:/(?:network (?:unreachable|error)|connection (?:reset|refused|closed)|ECONN(?:RESET|REFUSED|ABORTED)|service unavailable|upstream.*(?:5\d\d|error)|provider.*(?:5\d\d|unavailable|down)|\b5\d\d\b)/i},{code:"PROVIDER_CONFIGURATION",pattern:/(?:invalid provider|unsupported provider|provider namespace|provider configuration|provider config|missing provider)/i}];function Fg(n){try{if(!rt(n)||n.status!=="failed")return ai();let e=Wg(n.error);if(li(e.message))return ai();let t=ye(n.providerId)??e.provider??null,r=Hg(n.logs),o=Ma(e.code);if(o)return On(o,t,e.message,e);let i=Ar(e.providerCode)??Ar(e.code),s=i?ci(i,e.message):void 0;if(s)return On(s,t,e.message,e,i);let a=qg(r);if(!jg(e)&&a&&(a.type==="user_stop"||li(a.message)))return ai();if(a){let c=zg(a.code,a.providerCode,a.message);if(c)return On(c,t,a.message??e.message,e,a.providerCode??a.code,a,a.structuredFailure?"terminal":"envelope")}let d=Gg(e.message,r);return d?On(d.code,t,d.message,e,d.terminal?.providerCode??d.terminal?.code,d.terminal,d.terminal?.structuredFailure?"terminal":"envelope"):On("PROCESS_FAILED",t,e.message,e)}catch{return {errorCode:"PROCESS_FAILED",errorProvider:null}}}function ai(){return {errorCode:null,errorProvider:null}}function On(n,e,t,r,o,i,s="envelope"){let a={};if(i?.resetAt!==void 0&&(a.resetAt=i.resetAt),r?.model&&(a.model=r.model),i?.type&&(a.upstreamType=i.type),o&&(a.upstreamCode=o),n==="CLI_NOT_AVAILABLE"||n==="CLI_UPDATE_REQUIRED"){let f=e?.startsWith("cli/")?e.slice(4):void 0;f&&(a.cliName=f);}let d=s==="terminal"?t:r?.message,c=s==="terminal"?i?.structuredFailure?d:void 0:r?.isEnvelope?d:void 0,l=si(c);return l&&(a.technicalMessage=l),Object.keys(a).length>0?{errorCode:n,errorProvider:e,errorMeta:a}:{errorCode:n,errorProvider:e}}function Wg(n){let e=typeof n=="string"?Gt(n):n;return rt(e)?{isEnvelope:true,code:ye(e.code),providerCode:ye(e.providerCode),message:ye(e.message)??ye(e.error),provider:ye(e.provider)??ye(e.errorProvider),model:ye(e.model)}:{isEnvelope:false,...typeof n=="string"&&n.trim()?{message:n.trim()}:{}}}function Gt(n){try{return JSON.parse(n)}catch{return}}function jg(n){return !!(n.code||n.providerCode||n.message)}function Hg(n){let e=[];if(typeof n=="string"){let t=Gt(n);if(Array.isArray(t))e.push(...t);else for(let r of n.split(/\r?\n/)){let o=Gt(r.trim());o!==void 0&&e.push(o);}}else Array.isArray(n)?e.push(...n):rt(n)&&e.push(n);return e.flatMap(zt)}function zt(n){if(!rt(n))return [];let e=ye(n.type),t=ye(n.message);if(t&&!e){let o=Gt(t);if(Array.isArray(o))return o.flatMap(zt);if(rt(o))return zt(o);let i=t.split(/\r?\n/).map(s=>Gt(s.trim())).filter(s=>rt(s));return i.length>0?i.flatMap(zt):n.level==="stderr"?[{type:"stderr",message:t,rank:1,structuredFailure:false}]:zt({type:"info",content:t})}if(e==="rate_limit_event"){let o=Oa(n.rate_limit_info);return ye(o?.status)!=="rejected"?[]:[{type:e,code:"RATE_LIMITED",message:Mn(o?.message,n.message),resetAt:Kg(o?.resetsAt),rank:4,structuredFailure:true}]}if(e==="turn.failed"||e==="error"){let o=Oa(n.error),i=Mn(o?.message,o?.detail,n.message,n.errorMessage,n.content),s=Mn(o?.code,n.code,n.errorCode);return [{type:e,code:s,providerCode:Mn(o?.providerCode,n.providerCode),message:i,rank:e==="turn.failed"?3:2,structuredFailure:true}]}if(e==="text"&&typeof n.content=="string"){let o=Gt(n.content);if(rt(o))return zt(o)}let r=Mn(n.errorMessage,n.content);return r&&li(r)?[{type:"user_stop",message:r,rank:1,structuredFailure:false}]:r&&/(?:turn\.failed|type:error)/i.test(r)?[{type:r.match(/turn\.failed/i)?"turn.failed":"error",message:r,rank:3,structuredFailure:false}]:[]}function qg(n){return [...n].sort((e,t)=>t.rank-e.rank)[0]}function zg(n,e,t){let r=Ma(n);if(r)return r;if(n){let o=ci(n,t);if(o)return o}if(e){let o=ci(e,t);if(o)return o}return di(t)}function Gg(n,e){let t=di(n);if(t)return {code:t,message:n};for(let r of [...e].sort((o,i)=>i.rank-o.rank)){let o=di(r.message);if(o)return {code:o,message:r.message,terminal:r}}}function di(n){if(!(typeof n!="string"||!n.trim()))return Bg.find(e=>e.pattern.test(n))?.code}function ci(n,e){let t=Ar(n)??n;if(t==="MODEL_UNAVAILABLE")return /(?:capacity|overloaded|busy)/i.test(e??"")?"MODEL_AT_CAPACITY":"MODEL_NOT_SUPPORTED";if(t!=="UNKNOWN")return Ug[t]}function Ma(n){let e=Ar(n);return e&&$g.has(e)?e:void 0}function Ar(n){return typeof n=="string"&&n.trim()?n.trim().toUpperCase():void 0}function li(n){return n?/\b(?:stopped|killed|aborted|cancelled|canceled)\s+by\s+user\b/i.test(n)||/사용자에 의해 중지됨/.test(n)||/\b(?:SIGTERM\s+143|143\s+SIGTERM)\b/i.test(n):false}function rt(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Oa(n){return rt(n)?n:void 0}function ye(n){return typeof n=="string"&&n.trim()?n.trim():void 0}function Kg(n){return typeof n=="string"||typeof n=="number"&&Number.isFinite(n)?n:void 0}function Mn(...n){return n.map(ye).find(e=>!!e)}p();var Vg=/^[a-zA-Z0-9._-]+$/,ui=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(),i=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(i)}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(!Vg.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return vt("box")}};p();function Jg(n,e,t,r,o){let{maxTokens:i,hotzoneRatio:s,warmzoneRatio:a}=r,d=i*s,c=i*a,l=d+c,f=e.getThreadMessages(n),g=[],m=0,v=false,y=[];for(let k=0;k<f.length;k+=2){let E=f[k],T=f[k+1],D=E?.content||"",R=T?.content||"",V=o.countTokens(D+R),P=[];E&&P.push(E),T&&P.push(T),y.push({messages:P,tokens:V});}for(let k=y.length-1;k>=0;k--){let E=y[k];if(m+E.tokens>d){v=true;break}m+=E.tokens,g.unshift(...E.messages);}let _=[],w=0;if(v&&c>0)try{let{boxes:k}=t.listBoxes(n);for(let E=k.length-1;E>=0;E--){let T=k[E],D=T.summaryTokens??T.sourceTokens;if(w+D>c)break;w+=D,_.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(k){if(k instanceof Error&&!/not found/i.test(k.message))throw k}return {hot:g,warm:_,hotTokens:m,warmTokens:w,hotOverflow:v,totalBudget:l,config:{maxTokens:i,hotzoneRatio:s,warmzoneRatio:a}}}Xe();pt();p();var Rr=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},Dn=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),i=r.timeoutMs,s=r.failFast??false,a=r.callbacks,d=r.evaluateTaskSuccess??(()=>true),c=[],l=0,f=0,g=0,m=false,v=0,y=perf_hooks.performance.now(),_=async P=>{a?.onTaskStart&&await a.onTaskStart(P),g+=1;let F=new AbortController,se={signal:F.signal},K,te;typeof i=="number"&&Number.isFinite(i)&&i>0&&(te=new Promise((H,L)=>{K=setTimeout(()=>{let j=new Rr(P.id,i);F.abort(j),L(j);},i);}));let W=perf_hooks.performance.now(),S=P.run(se),Z=te?Promise.race([S,te]):S;try{let H=await Z,L=perf_hooks.performance.now(),j=L-W,ae=d(H,P),Y={taskId:P.id,success:ae,value:H,durationMs:j,startedAt:W,finishedAt:L,metadata:P.metadata,aborted:!1};c.push(Y),ae?l+=1:f+=1,a?.onTaskComplete&&await a.onTaskComplete(Y),s&&!ae&&(m=!0);}catch(H){let L=perf_hooks.performance.now(),j=L-W,ae=H instanceof Error?H:new Error(String(H)),Y={taskId:P.id,success:false,error:ae,durationMs:j,startedAt:W,finishedAt:L,metadata:P.metadata,aborted:F.signal.aborted};c.push(Y),f+=1,a?.onError&&await a.onError(P,ae,j),s&&(m=true);}finally{K&&clearTimeout(K),te&&S.catch(()=>{});}},w=async()=>{for(;!m;){let P=v;if(P>=e.length)break;v+=1;let F=e[P];if(!F||(await _(F),m))break}},k=Math.min(o,e.length),E=[];for(let P=0;P<k;P++)E.push(w());await Promise.all(E);let D=perf_hooks.performance.now()-y,R=c.length?c.reduce((P,F)=>P+F.durationMs,0)/c.length:0,V=D>0?c.length/(D/1e3):c.length;return this.metrics={totalTasks:e.length,startedTasks:g,completedTasks:c.length,successCount:l,failureCount:f,totalDurationMs:D,averageDurationMs:R,throughput:V},c}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,i)=>{e?.onError&&await e.onError(r,o,i),t?.onError&&await t.onError(r,o,i);}}}};p();p();var Ln=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 Na=3,Da=3e4,La=500,Xg=n=>{if(typeof n!="number"||Number.isNaN(n)||!Number.isFinite(n))return Na;let e=Math.floor(n);return e>0?e:Na},Yg=n=>n===void 0||typeof n!="number"||Number.isNaN(n)||n<=0?Da:n,Qg=n=>{if(!n)return {maxRetries:0,retryDelay:La};let e=Number.isInteger(n.maxRetries)&&n.maxRetries>=0?n.maxRetries:0,t=typeof n.retryDelay=="number"&&n.retryDelay>=0?n.retryDelay:La;return {maxRetries:e,retryDelay:t}},pi=n=>{let e=n.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},Zg=(n,e)=>n<=0?Promise.resolve():new Promise((t,r)=>{let o=setTimeout(()=>{e.removeEventListener("abort",i),t();},n),i=()=>{clearTimeout(o),r(pi(e));};if(e.aborted){i();return}e.addEventListener("abort",i,{once:true});}),ef=async(n,e,t)=>{let r,o;for(let i=0;i<=e.maxRetries;i++){if(t.aborted)throw pi(t);try{let s=await n();if(r=s,s.success||i===e.maxRetries)return s}catch(s){if(o=s,t.aborted)throw pi(t);if(i===e.maxRetries)throw s instanceof Error?s:new Error(String(s))}i<e.maxRetries&&await Zg(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")},$a=(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);}},tf=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 i=r.value;return {...i,agentId:i.agentId??t.request.agentId,metadata:{...i.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}}}),nf=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")}}),rf=(n,e)=>({onTaskComplete:async t=>{$a(e,n,t.success);},onError:async()=>{$a(e,n,false);}}),Ua=async(n,e,t={})=>{if(!Array.isArray(n))throw new TypeError("Parallel helpers expect an array of requests");if(n.length===0){let _={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?.(_),[]}let r=Xg(t.concurrency),o=Yg(t.timeout),i=Qg(t.retryPolicy),s=new Dn,a=new Ln,d=n.map((y,_)=>({id:`${e}:${y.agentId??"anonymous"}:${_}`,metadata:{index:_,mode:e,request:y},run:w=>ef(()=>e==="query"?a.query(y):a.execute(y),i,w.signal)})),c={completed:0,success:0,failure:0,total:n.length},l=await s.run(d,{maxConcurrency:r,timeoutMs:o,evaluateTaskSuccess:y=>y.success,callbacks:rf(c,t)}),f=tf(l),g=nf(l),m=s.getMetrics(),v={total:n.length,completed:n.length,successCount:f.filter(y=>y.success).length,failureCount:f.filter(y=>!y.success).length,results:f,errors:g,metrics:m};return t.onComplete?.(v),f},of=(n,e)=>Ua(n,"query",e),sf=(n,e)=>Ua(n,"execute",e);Vo();p();var gi=class extends Bt{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=z.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=z.dirname(t);Ds.existsSync(o)||Ds.mkdirSync(o,{recursive:true});}else if(!Ds.existsSync(t))throw new O("NOT_FOUND","Database not found");let r=Te(t);if(e)try{ur(r.db,t);}catch(o){throw r.close(),o}return r}insertSpan(e){let t=this.openHandle(true);try{t.db.insert(Et).values(e).run();}catch(r){throw r instanceof O?r:new O("DB_ERROR","Failed to insert span",r)}finally{t.close();}}findByTaskId(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.select().from(Et).where(drizzleOrm.eq(Et.task_id,e)).all()}catch(r){throw new O("DB_ERROR","Failed to find spans by task id",r)}finally{t.close();}}findById(e){if(!this.dbExists())return;let t=this.openHandle(false);try{return t.db.select().from(Et).where(drizzleOrm.eq(Et.id,e)).limit(1).get()??void 0}catch(r){throw new O("DB_ERROR","Failed to find span by id",r)}finally{t.close();}}};Ko();Go();zo();p();p();var br=class{capabilities={required:[]}};p();p();p();var Wa=2e3;function ja(n){let e=n.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=Wa?e:e.slice(0,Wa-11)+" [redacted]"}var hf=10*1024*1024,wf={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function fi(n,e){return n===void 0?true:Array.isArray(n)?n.includes(e):n===e}function kf(n,e){return n===void 0?true:Array.isArray(n)?n.some(t=>e.includes(t)):e.includes(n)}function qa(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*(wf[r]??1))}function za(n){return typeof n=="string"}function Ga(n){try{let e=Ds.statSync(n);return e.size>hf?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${n} (${e.size} bytes)
332
+ `),null):Ds.readFileSync(n,"utf8").split(`
333
+ `).length}catch{return null}}function Ka(n){try{return Ds.statSync(n).size}catch{return null}}function vf(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(be(o,n))return true;if(t&&o.startsWith("/")){let{relative:i,isAbsolute:s}=de("path");if(s(o)){let a=i(t,o);if(a&&!a.startsWith("..")&&be(a,n))return true}}return false}function _f(n,e){return n?JSON.stringify(e).includes(n):true}function xf(n,e){if(!n)return true;try{let t=new RegExp(n),r=JSON.stringify(e);return t.test(r)}catch{return false}}function Ef(n,e){if(!n)return true;try{let t=new RegExp(n),r=JSON.stringify(e);return t.test(r)}catch{return false}}function Tf(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(za(n.pathSizeMin)){let o=Ka(r);if(o===null||o<qa(n.pathSizeMin))return false}else {let o=Ga(r);if(o===null||o<n.pathSizeMin)return false}if(n.pathSizeMax!==void 0)if(za(n.pathSizeMax)){let o=Ka(r);if(o===null||o>qa(n.pathSizeMax))return false}else {let o=Ga(r);if(o===null||o>n.pathSizeMax)return false}return true}function Af(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 i=o;if(typeof i.name!="string"||!i.name){t.push(`Hook at index ${r}: missing or invalid "name", skipping`);continue}let s=i.guide&&typeof i.guide=="object",a=i.deny&&typeof i.deny=="object",d=typeof i.plugin=="string";if(!s&&!a&&!d){t.push(`Hook "${i.name}": missing guide/deny/plugin, skipping`);continue}if(s&&typeof i.guide.say!="string"){t.push(`Hook "${i.name}": guide.say is required and must be string, skipping`);continue}if(a&&typeof i.deny.reason!="string"){t.push(`Hook "${i.name}": deny.reason is required and must be string, skipping`);continue}e.push(i);}return {valid:e,warnings:t}}var yi=class extends br{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 i of this.hooks)if(this.matchEntryLevel(i,e)&&i.guide){if(!this.matchRuleLevel(i.guide,e)){o&&r&&this.appendHookLog(r,{rule:i.name,action:"pass",once:i.guide.once??false,ctx:e,matched:false});continue}i.guide.once&&this.hasFired(e.sessionId,i.name)||(i.guide.once&&this.markFired(e.sessionId,i.name),t.push(i.guide.say),r&&this.appendHookLog(r,{rule:i.name,action:"inject",once:i.guide.once??false,ctx:e,matched:true,message:i.guide.say}));}return t.length?e.inject(t.join(`
334
334
 
335
- `)):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=$a(t.message).slice(0,500)));let o=`[${new Date().toISOString()}] HOOK: ${JSON.stringify(r)}
336
- `;Oi.appendFileSync(e,o,{encoding:"utf8",mode:384});}catch{}}matchEntryLevel(e,t){if(e.provider!==void 0){let r=t.provider.replace(/^cli\//,"");if(!fs(e.provider,r))return false}if(e.team!==void 0){let o=this.agentMap.get(t.agent.id)?.team??t.agent.team;if(!fs(e.team,o))return false}if(e.role!==void 0){let o=this.agentMap.get(t.agent.id)?.role??t.agent.role;if(!fs(e.role,o))return false}if(e.tag!==void 0){let o=this.agentMap.get(t.agent.id)?.tags??[];if(!rf(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)||!sf(e.pattern,t.tool.input)||!af(e.regex,t.tool.input)||!of(e.pathPattern,t.tool.input,t.cwd)||!lf(e,t.tool.input)||!df(e.whenInputRegex,t.tool.input))}hasFired(e,t){try{let r=this.firedFilePath(e);if(!Oi.existsSync(r))return !1;let o=JSON.parse(Oi.readFileSync(r,"utf8"));return Array.isArray(o.fired)&&o.fired.includes(t)}catch{return false}}markFired(e,t){try{let r=this.firedFilePath(e);Oi.mkdirSync(z.dirname(r),{recursive:!0,mode:448});let o=Oi.existsSync(r)?JSON.parse(Oi.readFileSync(r,"utf8")):{fired:[]};Array.isArray(o.fired)||(o.fired=[]),o.fired.includes(t)||(o.fired.push(t),Oi.writeFileSync(r,JSON.stringify(o),{mode:384}));}catch(r){process.stderr.write(`[YamlHookPlugin] once state write failed: ${r}
337
- `);}}firedFilePath(e){let t=crypto$1.createHash("sha1").update(e).digest("hex");return z.join(ss.homedir(),".crewx","sessions",t,"fired-rules.json")}};p();p();p();function uf(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}}}p();var hs=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;}};p();function pf(n){return n}function gf(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);}}}Dt();exports.ARCHIVE_WI_BOARD_ID=zt;exports.AdapterError=hs;exports.AgentNotFoundError=Le;exports.AgentRuntime=$n;exports.AgentSkillsSchema=Ds;exports.BrowserFsAdapter=es;exports.ConfigLoadError=lt;exports.Crewx=Yo;exports.CrewxPlugin=Zo;exports.DEFAULT_INPUT_BUDGET_PERCENT=Ms;exports.DEFAULT_WI_BOARD_ID=qt;exports.DEFAULT_WI_WORKFLOW_ID=aa;exports.DocumentLoader=_t;exports.FRESH_PROVIDER_INITIAL_INPUT_FRAMING=Hn;exports.INPUT_BUDGET_TOKENIZER_ENCODING=jr;exports.LayoutLoadError=ce;exports.LayoutLoader=yn;exports.LayoutRenderer=kn;exports.MAX_INPUT_BUDGET_PERCENT=jn;exports.MIN_INPUT_BUDGET_PERCENT=Wn;exports.NodeFsAdapter=cr;exports.PROVIDER_ORDER=ts;exports.ParallelRunner=Ln;exports.ParallelRunnerTimeoutError=br;exports.PropsValidationError=Fe;exports.PropsValidator=wn;exports.RESUME_PROVIDER_INITIAL_INPUT_FRAMING=Hr;exports.SdkBoxService=us;exports.SpanRepository=gs;exports.TaskRepository=En;exports.TemplateEngine=mn;exports.TypedEventEmitter=_n;exports.WI_BOARD_ID_PATTERN=Tr;exports.WI_DEFAULT_FLOW_FILENAME=rp;exports.WI_PLAN_FLOW_FILENAME=op;exports.WI_PLAN_WORKFLOW_ID=np;exports.WiBoardSchema=vd;exports.WiCreateError=ee;exports.YamlHookPlugin=ys;exports.buildContext=Ng;exports.canonicalizeAgentOptions=Kd;exports.classifyTaskError=Ag;exports.clearModelsOverride=rd;exports.compareProviders=On;exports.countTokens=zn;exports.createAdapterContext=vo;exports.createDelegateTool=fg;exports.createGlobalSettingsStore=Wp;exports.createHandler=No;exports.createPluginProviderFactory=na;exports.createProvider=Be;exports.createRemoteProviderFactory=Qi;exports.createScopedAdapterStore=ko;exports.createTokenCounter=Gr;exports.createWorkInstruction=bp;exports.createWorkInstructionBatch=Pp;exports.defaultExtractText=Ao;exports.defaultFsAdapter=kt;exports.defaultParseEvent=xe;exports.defineChannelAdapter=pf;exports.defineChannelAdapterPlugin=gf;exports.escapeHandlebarsHelper=mo;exports.formatDisplayTimestamp=po;exports.formatFileSizeHelper=yo;exports.formatTimestamp=uo;exports.formatTimestampHelper=ho;exports.generateFingerprint=Yl;exports.generateId=xt;exports.getAntigravityModels=Fr;exports.getClaudeModels=nn;exports.getCodexModels=Ur;exports.getCopilotModels=Br;exports.getCrewxHome=hg;exports.getProviderModels=Ne;exports.getSyncWindowStore=ec;exports.hashWorkspaceId=Do;exports.initModelsRemote=Qp;exports.initPricingRemote=qp;exports.isReservedWiBoardId=da;exports.lengthHelper=fo;exports.loadYamlFile=Vn;exports.materializeWindowsSpawnProgram=gt;exports.mergeAdditionalArgs=si;exports.mergeModels=rn;exports.normalizeClaudeMode=ht;exports.normalizeInputBudgetProvider=qr;exports.normalizeProviderId=ng;exports.normalizeWorkspacePath=ji;exports.parseOverdriveProfile=lr;exports.parseOverdriveSignal=ao;exports.parseStdoutEvent=un;exports.parseUsage=$e;exports.parseYamlContent=Kn;exports.providerRank=ns;exports.queryAcpProviderMeta=xa;exports.queryAllAcpProviderMetas=dg;exports.queryAllCliProviderMetas=pg;exports.queryOpencodeModels=Ea;exports.redactTechnicalMessage=is;exports.registerAcpProviders=Xi;exports.registerApiProviders=zi;exports.registerProviderFactory=Ue;exports.resolveAgent=Jn;exports.resolveAgentSkills=Zp;exports.resolveCatalogModelId=Zt;exports.resolveCrewxCli=mg;exports.resolveCrewxWorkspace=yg;exports.resolveDefaultAgentsYaml=Kr;exports.resolveInputBudget=Gn;exports.resolveOverdrive=lo;exports.resolveTemplatesPath=Mt;exports.resolveTokenizerMetadata=qn;exports.resolveWiBoards=sp;exports.resolveWindowsExecutablePath=Ld;exports.resolveWindowsSpawnProgram=pt;exports.resolveWorkflowTemplatesPath=Sd;exports.runExecutesParallel=qg;exports.runInSyncWindow=tc;exports.runQueriesParallel=Hg;exports.selectNextWi=Ip;exports.setAuditVerbose=Ll;exports.setModelsOverride=$r;exports.toTaskReader=uf;exports.toTemplateMessages=To;exports.truncateHelper=go;exports.validateHooksSchema=cf;
335
+ `)):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=ja(t.message).slice(0,500)));let o=`[${new Date().toISOString()}] HOOK: ${JSON.stringify(r)}
336
+ `;Ds.appendFileSync(e,o,{encoding:"utf8",mode:384});}catch{}}matchEntryLevel(e,t){if(e.provider!==void 0){let r=t.provider.replace(/^cli\//,"");if(!fi(e.provider,r))return false}if(e.team!==void 0){let o=this.agentMap.get(t.agent.id)?.team??t.agent.team;if(!fi(e.team,o))return false}if(e.role!==void 0){let o=this.agentMap.get(t.agent.id)?.role??t.agent.role;if(!fi(e.role,o))return false}if(e.tag!==void 0){let o=this.agentMap.get(t.agent.id)?.tags??[];if(!kf(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)||!_f(e.pattern,t.tool.input)||!xf(e.regex,t.tool.input)||!vf(e.pathPattern,t.tool.input,t.cwd)||!Tf(e,t.tool.input)||!Ef(e.whenInputRegex,t.tool.input))}hasFired(e,t){try{let r=this.firedFilePath(e);if(!Ds.existsSync(r))return !1;let o=JSON.parse(Ds.readFileSync(r,"utf8"));return Array.isArray(o.fired)&&o.fired.includes(t)}catch{return false}}markFired(e,t){try{let r=this.firedFilePath(e);Ds.mkdirSync(z.dirname(r),{recursive:!0,mode:448});let o=Ds.existsSync(r)?JSON.parse(Ds.readFileSync(r,"utf8")):{fired:[]};Array.isArray(o.fired)||(o.fired=[]),o.fired.includes(t)||(o.fired.push(t),Ds.writeFileSync(r,JSON.stringify(o),{mode:384}));}catch(r){process.stderr.write(`[YamlHookPlugin] once state write failed: ${r}
337
+ `);}}firedFilePath(e){let t=crypto$1.createHash("sha1").update(e).digest("hex");return z.join(ii.homedir(),".crewx","sessions",t,"fired-rules.json")}};p();p();p();function Rf(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}}}p();var hi=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;}};p();function bf(n){return n}function Pf(n){return {name:n.name,async attach(e){let t=await n.configFactory(e),o=e.registerChannelAdapter,i=n.instanceId??n.name;o&&await o({adapter:n.adapter,instanceId:i,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);}}}Mt();exports.ARCHIVE_WI_BOARD_ID=Ht;exports.AdapterError=hi;exports.AgentNotFoundError=$e;exports.AgentRuntime=Ln;exports.AgentSkillsSchema=Di;exports.BrowserFsAdapter=ei;exports.ConfigLoadError=at;exports.Crewx=Yo;exports.CrewxPlugin=Zo;exports.DEFAULT_INPUT_BUDGET_PERCENT=Mi;exports.DEFAULT_WI_BOARD_ID=jt;exports.DEFAULT_WI_WORKFLOW_ID=pa;exports.DocumentLoader=wt;exports.FRESH_PROVIDER_INITIAL_INPUT_FRAMING=jn;exports.INPUT_BUDGET_TOKENIZER_ENCODING=Wr;exports.LayoutLoadError=ue;exports.LayoutLoader=mn;exports.LayoutRenderer=wn;exports.MAX_INPUT_BUDGET_PERCENT=Wn;exports.MIN_INPUT_BUDGET_PERCENT=Fn;exports.NodeFsAdapter=cr;exports.PROVIDER_ORDER=ti;exports.ParallelRunner=Dn;exports.ParallelRunnerTimeoutError=Rr;exports.PropsValidationError=We;exports.PropsValidator=hn;exports.RESUME_PROVIDER_INITIAL_INPUT_FRAMING=jr;exports.SdkBoxService=ui;exports.SpanRepository=gi;exports.TaskRepository=xn;exports.TemplateEngine=fn;exports.TypedEventEmitter=kn;exports.WI_BOARD_ID_PATTERN=Er;exports.WI_DEFAULT_FLOW_FILENAME=yp;exports.WI_PLAN_FLOW_FILENAME=hp;exports.WI_PLAN_WORKFLOW_ID=mp;exports.WiBoardSchema=bd;exports.WiCreateError=ee;exports.YamlHookPlugin=yi;exports.buildContext=Jg;exports.canonicalizeAgentOptions=Zd;exports.classifyTaskError=Fg;exports.clearModelsOverride=cd;exports.compareProviders=In;exports.countTokens=qn;exports.createAdapterContext=_o;exports.createDelegateTool=Cg;exports.createGlobalSettingsStore=eg;exports.createHandler=No;exports.createPluginProviderFactory=ia;exports.createProvider=Fe;exports.createRemoteProviderFactory=ta;exports.createScopedAdapterStore=ko;exports.createTokenCounter=zr;exports.createWorkInstruction=Fp;exports.createWorkInstructionBatch=Wp;exports.defaultExtractText=Ao;exports.defaultFsAdapter=ht;exports.defaultParseEvent=Ee;exports.defineChannelAdapter=bf;exports.defineChannelAdapterPlugin=Pf;exports.escapeHandlebarsHelper=mo;exports.formatDisplayTimestamp=po;exports.formatFileSizeHelper=yo;exports.formatTimestamp=uo;exports.formatTimestampHelper=ho;exports.generateFingerprint=al;exports.generateId=vt;exports.getAntigravityModels=Br;exports.getClaudeModels=en;exports.getCodexModels=$r;exports.getCopilotModels=Ur;exports.getCrewxHome=Og;exports.getProviderModels=Le;exports.getSyncWindowStore=ll;exports.hashWorkspaceId=Do;exports.initModelsRemote=gg;exports.initPricingRemote=rg;exports.isReservedWiBoardId=ga;exports.lengthHelper=fo;exports.loadYamlFile=Kn;exports.materializeWindowsSpawnProgram=ut;exports.mergeAdditionalArgs=as;exports.mergeModels=tn;exports.migrateGrokLegacyMode=pn;exports.normalizeClaudeMode=mt;exports.normalizeInputBudgetProvider=Hr;exports.normalizeProviderId=hg;exports.normalizeWorkspacePath=zs;exports.parseOverdriveProfile=dr;exports.parseOverdriveSignal=ao;exports.parseStdoutEvent=cn;exports.parseUsage=Ue;exports.parseYamlContent=Gn;exports.providerRank=ni;exports.queryAcpProviderMeta=ba;exports.queryAllAcpProviderMetas=Eg;exports.queryAllCliProviderMetas=bg;exports.queryOpencodeModels=Pa;exports.redactTechnicalMessage=si;exports.registerAcpProviders=Zs;exports.registerApiProviders=Vs;exports.registerProviderFactory=Be;exports.resolveAgent=Vn;exports.resolveAgentSkills=fg;exports.resolveCatalogModelId=Yt;exports.resolveCrewxCli=Sg;exports.resolveCrewxWorkspace=Ig;exports.resolveDefaultAgentsYaml=Gr;exports.resolveInputBudget=zn;exports.resolveOverdrive=co;exports.resolveTemplatesPath=It;exports.resolveTokenizerMetadata=Hn;exports.resolveWiBoards=wp;exports.resolveWindowsExecutablePath=jd;exports.resolveWindowsSpawnProgram=lt;exports.resolveWorkflowTemplatesPath=$d;exports.runExecutesParallel=sf;exports.runInSyncWindow=ul;exports.runQueriesParallel=of;exports.selectNextWi=Hp;exports.setAuditVerbose=Gc;exports.setModelsOverride=Lr;exports.toTaskReader=Rf;exports.toTemplateMessages=To;exports.truncateHelper=go;exports.validateHooksSchema=Af;