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

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,108 @@
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(`
1
+ 'use strict';var Ua=require('fs'),K=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'),bo=require('js-tiktoken/ranks/o200k_base'),zod=require('zod'),module$1=require('module'),ze=require('handlebars'),promises=require('fs/promises'),events=require('events'),async_hooks=require('async_hooks'),drizzleOrm=require('drizzle-orm'),Ri=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 Ua__namespace=/*#__PURE__*/_interopNamespace(Ua);var K__namespace=/*#__PURE__*/_interopNamespace(K);var bo__default=/*#__PURE__*/_interopDefault(bo);var ze__namespace=/*#__PURE__*/_interopNamespace(ze);var Ri__namespace=/*#__PURE__*/_interopNamespace(Ri);var go=Object.defineProperty;var oc=Object.getOwnPropertyDescriptor;var ic=Object.getOwnPropertyNames;var sc=Object.prototype.hasOwnProperty;var ge=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var D=(t,e)=>()=>(t&&(e=t(t=0)),e);var lr=(t,e)=>{for(var n in e)go(t,n,{get:e[n],enumerable:true});},ac=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of ic(e))!sc.call(t,o)&&o!==n&&go(t,o,{get:()=>e[o],enumerable:!(r=oc(e,o))||r.enumerable});return t};var cs=t=>ac(go({},"__esModule",{value:true}),t);var u=D(()=>{});var ls,mo,us,ho=D(()=>{u();ls=["flagship","balanced","speed"],mo={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"]}]}},us={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(mo).map(([t,e])=>[t,e.models]));});var xt,yo,ps,wo=D(()=>{u();xt={"claude-fable-5":{input:10,cachedInput:1,output:50},"claude-opus-5":{input:5,cachedInput:.5,output:25},"claude-opus-4-8":{input:5,cachedInput:.5,output:25},"claude-opus-4-7":{input:5,cachedInput:.5,output:25},"claude-opus-4-6":{input:5,cachedInput:.5,output:25},"claude-sonnet-5":{input:2,cachedInput:.2,output:10},"claude-sonnet-4-6":{input:3,cachedInput:.3,output:15},"claude-haiku-4-5":{input:1,cachedInput:.1,output:5},"gpt-5.6-sol":{input:5,cachedInput:.5,output:30},"gpt-5.6-terra":{input:2,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}},yo=new Set(["gpt-5.3-codex-spark"]),ps=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 gs(t){gn=t;}function ms(t){fs=Object.fromEntries(Object.entries(t).map(([e,n])=>[e,{...n}]));}function _o(t){let e=t.toLowerCase().trim();e=e.replace(/\[[^\]]*\]$/g,"");let n=e.lastIndexOf("/");return n>=0&&(e=e.slice(n+1)),e=e.replace(/-\d{8}$/,""),e}function lc(t){if(!t)return;let e="inputPerMillionTokensUsd"in t?t.inputPerMillionTokensUsd:t.input,n="outputPerMillionTokensUsd"in t?t.outputPerMillionTokensUsd:t.output;if(!(!Number.isFinite(e)||e<=0||!Number.isFinite(n)||n<=0))return {inputPerMillionTokensUsd:e,outputPerMillionTokensUsd:n}}function hs(t){if(!t)return;let e=t.replace(/\[[^\]]*\]$/g,"");return lc(fs[e]??xt[e])}function uc(t){if(!t)return console.warn("[pricing] missing model id; cost is being recorded as 0"),fn;let e=_o(t),n=cc[e];if(n)return gn[n]??xt[n]??fn;if(gn[e])return gn[e];if(xt[e])return xt[e];if(yo.has(e))return console.warn(`[pricing] unpublished model pricing: ${t}, cost_usd=0`),fn;if(ps.has(e))return console.warn(`[pricing] missing catalog pricing: ${t}, cost_usd=0`),fn;let r={...xt,...gn};for(let o of Object.keys(r))if(e.includes(o))return r[o];return console.warn(`[pricing] Unknown model: ${t}, cost_usd=0`),fn}function pc(t,e,n,r=0,o){let i=uc(n),s=Math.min(r,t),d=(t-s)*i.input/1e6,c=s*i.cachedInput/1e6,l=e*i.output/1e6;return d+c+l}function ys(t,e,n,r,o,i){return t&&t>0?t:!e&&!n?0:pc(e??0,n??0,o,r??0)}var cc,fn,gn,fs,zt=D(()=>{u();wo();wo();cc={opus:"claude-opus-4-8",sonnet:"claude-sonnet-4-6",haiku:"claude-haiku-4-5","codex-mini":"gpt-5.3-codex",codex:"gpt-5.3-codex"},fn={input:0,cachedInput:0,output:0},gn={},fs={};});function mn(t){return mc.get(t)??t}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 mc,ur=D(()=>{u();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]"}],mc=new Map(exports.CLAUDE_MODEL_COMPATIBILITY_PAIRS.map(({baseModelId:t,catalogModelId:e})=>[t,e]));});function ks(){return {models:[],modes:[],effort:[],modelOverrides:{},providerOptions:[]}}function hc(t){return Array.isArray(t)?{models:t,modes:[],effort:[],modelOverrides:{},providerOptions:[]}:t?{models:t.models??[],modes:t.modes??[],effort:t.effort??[],modelOverrides:t.modelOverrides??{},providerOptions:t.providerOptions??[]}:ks()}function vo(t){ko=Object.fromEntries(Object.entries(t).map(([e,n])=>[e,hc(n)]));}function yc(){ko={};}function hn(t){_s={...t};}function Ze(t){return Oe(t).models}function Oe(t){return ko[t]??mo[t]??ks()}function pr(t){return _s[t]??us.providers[t]}function yn(t){return Oe(t).modes}function Rt(t,e){let n=Oe(t);return e?n.modelOverrides[mn(e)]?.effort??n.effort:n.effort}function vs(t){return Oe(t).modelOverrides}function wn(){return Ze("claude")}function Eo(){return Ze("codex")}function xo(){return Ze("copilot")}function Ro(){return Ze("antigravity")}function _n(t,e){let n=new Map;for(let r of [...t,...e]){let o=n.get(r.id);if(!o){let{apiPricing:i,recommended:s,...a}=r;n.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(n.values())}function kn(t){return t.map(e=>{let{apiPricing:n,...r}=e,o=hs(e.id);return o?{...r,apiPricing:o}:r})}var ko,_s,Re=D(()=>{u();ho();zt();ur();ko={},_s={};});function Er(t){return typeof t!="string"?void 0:t.trim()||void 0}function xr(t){return Er(t)?.toLowerCase()??""}function Vt(t){try{return Ua.statSync(t).isFile()}catch{return false}}function Jc(t,e){if(t===e)return true;let n=K__namespace.default.relative(t,e);return n!==""&&!n.startsWith("..")&&!K__namespace.default.isAbsolute(n)}function Kc(t,e){if(K__namespace.default.basename(t)!==".bin")return false;let n=K__namespace.default.dirname(t);if(K__namespace.default.basename(n)!=="node_modules")return false;let r=K__namespace.default.dirname(n);return Jc(r,e)}function vn(t,e={}){if(t.includes("/")||t.includes("\\")||K__namespace.default.isAbsolute(t))return t;let n=e.platform??process.platform,r=e.env??process.env,o=K__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=n==="win32"?";":":",d=s.split(a).map(g=>g.trim()).filter(Boolean),c=K__namespace.default.extname(t).length>0,l=r.PATHEXT??r.Pathext??process.env.PATHEXT??process.env.Pathext??".EXE;.CMD;.BAT;.COM",f=n==="win32"?c?[""]:l.split(";").map(g=>g.trim()).filter(Boolean).map(g=>g.startsWith(".")?g:`.${g}`):[""];for(let g of d){let m=K__namespace.default.resolve(o,g);if(!(i&&Kc(m,o)))for(let k of f){let h=xr(k),v=k.toUpperCase();for(let w of [k,h,v]){let _=K__namespace.default.join(m,`${t}${w}`);if(Vt(_))return _}}}return t}function Xc(t,e){return vn(t,{env:e,platform:"win32",resolution:"local_first"})}function Yc(t){if(!Vt(t))return null;try{let e=Ua.readFileSync(t,"utf8"),n=K__namespace.default.dirname(t),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,K__namespace.default.sep).replace(/^[\\/]+/,""),g=K__namespace.default.resolve(n,f);Vt(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,K__namespace.default.sep).replace(/^[\\/]+/,"");i.set(d,K__namespace.default.resolve(n,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&&Vt(c)&&o.push(c);}let s=a=>a.find(d=>{let c=xr(K__namespace.default.basename(d));return c!=="node.exe"&&c!=="node"})??null;return s(o)??s(r)}catch{return null}}function Qc(t,e){if(typeof e=="string")return Er(e)||null;if(!e||typeof e!="object")return null;if(t){let n=e[t],r=typeof n=="string"?Er(n):void 0;if(r)return r}for(let n of Object.values(e)){let r=typeof n=="string"?Er(n):void 0;if(r)return r}return null}function Zc(t,e){if(!e)return null;let n=K__namespace.default.dirname(t),r=[K__namespace.default.resolve(n,"..",e),K__namespace.default.resolve(n,"node_modules",e)];for(let o of r){let i=K__namespace.default.join(o,"package.json");if(Vt(i))try{let s=JSON.parse(Ua.readFileSync(i,"utf8")),a=Qc(e,s.bin);if(!a)continue;let d=K__namespace.default.resolve(o,a);if(Vt(d))return d}catch{}}return null}function el(t){let e=t.platform??process.platform,n=t.env??process.env,r=t.execPath??process.execPath,o=t.cwd,i=t.resolution;if(e!=="win32")return {command:vn(t.command,{cwd:o,env:n,platform:e,resolution:i}),leadingArgv:[],resolution:"direct"};let s=vn(t.command,{cwd:o,env:n,platform:e,resolution:i}),a=xr(K__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=Yc(s)??Zc(s,t.packageName);return d?xr(K__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 tl(t){if(t.candidate.resolution!=="unresolved-wrapper")return {command:t.candidate.command,leadingArgv:t.candidate.leadingArgv,resolution:t.candidate.resolution,windowsHide:t.candidate.windowsHide};if(t.allowShellFallback===true)return {command:t.candidate.command,leadingArgv:[],resolution:"shell-fallback",shell:true};throw new Error(`${K__namespace.default.basename(t.candidate.command)} wrapper resolved, but no executable/Node entrypoint could be resolved without shell execution.`)}function It(t){let e=el(t);return tl({candidate:e,allowShellFallback:t.allowShellFallback})}function Pt(t,e){return {command:t.command,argv:[...t.leadingArgv,...e],resolution:t.resolution,shell:t.shell,windowsHide:t.windowsHide}}var Jt=D(()=>{u();});function nl(t){if(t.type!=="usage"||!("input_tokens"in t))return null;let e=Number(t.input_tokens??0),n=Number(t.output_tokens??0),o="cache_read_input_tokens"in t?Number(t.cache_read_input_tokens):void 0,i="cached_input_tokens"in t?Number(t.cached_input_tokens):void 0,s=o!==void 0?o:i??0;return {inputTokens:o!==void 0?e+o:e,outputTokens:n,cachedInputTokens:s}}function rl(t){let e=t.usage;if(!e||typeof e!="object"||Array.isArray(e))return null;let n=e;if(!("input_tokens"in n))return null;let r=Number(n.input_tokens??0),o=Number(n.output_tokens??0),s="cache_read_input_tokens"in n?Number(n.cache_read_input_tokens):void 0,a="cached_input_tokens"in n?Number(n.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 ol(t){if(t.type!=="step_finish")return null;let n=t.part?.tokens;if(!n)return null;let r=Number(n.input??0),o=Number(n.output??0),i=n.cache,s=i?Number(i.read??0):0;return {inputTokens:r+s,outputTokens:o,cachedInputTokens:s}}function Cs(t){let e=new Map,n;for(let i of t.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&&(n=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:n}}function tt(t){if(!t||!t.trim())return;let e=null,n=null;for(let r of t.split(`
3
+ `))if(r.trim())try{let o=JSON.parse(r),i=ol(o);if(i){n||(n={inputTokens:0,outputTokens:0,cachedInputTokens:0}),n.inputTokens+=i.inputTokens,n.outputTokens+=i.outputTokens,n.cachedInputTokens+=i.cachedInputTokens;continue}let s=nl(o)??rl(o);s&&(e=s);}catch{}return n||(e??void 0)}var Ct=D(()=>{u();});exports.ProviderError=void 0;var St,Ot,Kt=D(()=>{u();exports.ProviderError=class extends Error{constructor(n,r,o){super(n);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},St=class extends exports.ProviderError{constructor(e,n){super(e,n,{code:"TIMEOUT_IDLE",kind:"permanent"}),this.name="IdleTimeoutError";}},Ot=class extends exports.ProviderError{constructor(e,n){super(e,n,{code:"TIMEOUT_TOTAL",kind:"permanent"}),this.name="TotalTimeoutError";}};});exports.RateLimitError=void 0;var Rr=D(()=>{u();Kt();exports.RateLimitError=class extends exports.ProviderError{name="RateLimitError";constructor(e,n="cli/claude"){super(e,n,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function Ne(t){return /crewx\s+(x|execute)\s/.test(t)}function De(t,e){let n=e.match(/@(\S+)/);return {timestamp:t,type:"agent_call",targetAgent:n?.[1]?.replace(/["']/g,""),toolInput:e}}var Xt=D(()=>{u();});function Me(t){if(typeof t=="string")return t;if(!t||typeof t!="object")return JSON.stringify(t??{});let e=t;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 Yt=D(()=>{u();});function Nt(t){return il[t]??t}function Oo(t){if(!t)return "";let e=t.lastIndexOf("/");return e===-1?t.trim():t.slice(e+1).trim()}function Ss(t){if(!t)return false;let e=Oe(t);return e.models.length>0||e.modes.length>0||e.effort.length>0||Object.keys(e.modelOverrides).length>0}function Os(t,e){if(!t)return false;let n=Oe(t),r=typeof e=="string"?mn(e):void 0;return n.models.length>0||n.effort.length>0||r!=null&&Array.isArray(n.modelOverrides[r]?.effort)}function No(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function sl(t,e,n){let r=t,o=false,i=false,s=[],a=()=>(o||(r={...t},o=true),r),d=typeof r.provider=="string"&&r.provider.trim()?Oo(r.provider):e,c=typeof r.model=="string"&&r.model.trim()?r.model.trim():n;if(Ss(d)){if(typeof r.mode=="string"){let f=d==="claude"?Nt(r.mode):r.mode,g=yn(d).map(m=>d==="claude"?Nt(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"&&Os(d,c)&&(Rt(d,c).includes(r.effort)||(delete a().effort,s.push("effort")));}let l=r.overdrive;if(No(l)){let f=Oo(typeof l.provider=="string"?l.provider:void 0),g=typeof l.model=="string"?l.model:void 0;if(Ss(f)){let m,k=()=>(m||(m={...l},a().overdrive=m),m);if(typeof l.mode=="string"){let h=f==="claude"?Nt(l.mode):l.mode,v=yn(f).map(w=>f==="claude"?Nt(w.id):w.id);h!==l.mode&&(k().mode=h,i=true),v.includes(h)||(delete k().mode,s.push("overdrive.mode"));}typeof l.effort=="string"&&Os(f,g)&&(Rt(f,g).includes(l.effort)||(delete k().effort,s.push("overdrive.effort")));}}return {block:r,removed:s,changed:i}}function al(t){let{options:e}=t;if(!No(e))return {options:e,changed:false,removed:[]};let n=Oo(t.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(!No(c))continue;let{block:l,removed:f,changed:g}=sl(c,n,t.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 il,Do=D(()=>{u();Re();ur();il={auto:"default"};});function Qt(t){if(!t)return {};let e=t.match(/^(.+?)\[([^\]]+)\]$/);if(e){let n=e[2].toLowerCase();return dl.has(n)?{model:e[1],effort:e[2]}:{model:t}}return {model:t}}function Ns(t){switch(t){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 Ds(t){switch(t){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 Ms(t){return t?["-c",`model_reasoning_effort=${t}`]:[]}function Us(t){if(!t)return [];let e=new Set(["acceptEdits","bypassPermissions","default","delegate","dontAsk","plan"]),n=Nt(t);return e.has(n)?["--permission-mode",n]:[]}function Ls(t){return t?new Set(["low","medium","high","xhigh","max"]).has(t)?["--effort",t]:[]:[]}function $s(t){return t==="default"?[]:t&&cl.has(t)?["--permission-mode",t]:[]}function Bs(t){return t===true?["--always-approve"]:[]}function js(t,e=n=>console.warn(n)){return t===void 0?[]:t==="workspace"||t==="read-only"||t==="off"?["--sandbox",t]:(e(`[grok] Invalid sandbox value ${JSON.stringify(t)}; using workspace.`),["--sandbox","workspace"])}function Fs(t){return t?new Set(["low","medium","high","xhigh"]).has(t)?["--effort",t]:[]:[]}var dl,cl,br=D(()=>{u();Do();dl=new Set(["minimal","low","medium","high","xhigh","max"]);cl=new Set(["default","acceptEdits","auto","dontAsk","bypassPermissions","plan"]);});function ul(t){let n=t.message?.content;return Array.isArray(n)?n.map(r=>typeof r.text=="string"?r.text.trim():"").filter(Boolean).join(`
4
4
 
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(`
5
+ `):""}function pl(t){let e=t.toLowerCase();return e.includes("out of extra usage")||e.includes("rate limit")||e.includes("quota")}function fl(t,e){let n=e.type;if(n==="text"){let r=String(e.text||"");return r?{timestamp:t,type:"text",content:r}:null}if(n==="thinking"){let r=typeof e.thinking=="string"?e.thinking.trim():"";return r?{timestamp:t,type:"thinking",content:r}:null}if(n==="tool_use"){let r=String(e.name||""),o=e.id,i=e.input,s=Me(i);return r==="Bash"&&Ne(s)?De(t,s):{timestamp:t,type:"tool_use",toolUseId:o,toolName:r,toolInput:s}}if(n==="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:t,type:"tool_result",toolUseId:o,resultPreview:s,isError:r}}return null}var ll;exports.claudeAdapter=void 0;var Mo=D(()=>{u();Rr();Xt();Yt();br();Re();Ct();ll=new Set(["tool_progress"]),exports.claudeAdapter={command:"claude",meta:{displayName:"Claude",models:wn(),capabilities:{resume:true}},buildArgs(t,e,n){let{model:r,effort:o}=Qt(e.model),i=e.effort??o,s=Us(e.mode),a=Ls(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:t}:{args:["--output-format","stream-json","--verbose",...c,...s,...a,...d,...f],stdinMessage:t}}return {args:["-p","--output-format","stream-json","--verbose",...c,...s,...a,...d],stdinMessage:t}},extractText(t){let e=t.split(`
7
+ `).filter(o=>o.trim()),n=[],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()&&n.push(s.text.trim());i.type==="result"&&typeof i.result=="string"&&(r=i.result);}catch{}return n.length>0?n[n.length-1]:r||t.trim()},extractFailure(t){try{let e=JSON.parse(t);if(e.type==="rate_limit_event"){let n=e.rate_limit_info??{};if(n.status==="rejected")return new exports.RateLimitError(`Claude rate limit: ${n.rateLimitType??"unknown"} (status: ${n.status})`)}if(e.error==="rate_limit"){let n=ul(e);return new exports.RateLimitError(n?`Claude rate limit: ${n}`:"Claude rate limit")}if(e.type==="result"&&e.is_error===!0){let n=typeof e.result=="string"?e.result:"";if(pl(n))return new exports.RateLimitError(`Claude rate limit: ${n}`)}}catch{}return null},parseResultMeta(t){let e=t.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 n=Cs(t);return n?{usage:{inputTokens:n.inputTokens,outputTokens:0,cachedInputTokens:n.cachedInputTokens,costUsd:0},model:n.model??null}:{usage:null,model:null}},parseEvent(t,e){let n;try{n=JSON.parse(t);}catch{return []}let r=n.type;if(!r)return [];if(r!=="assistant"&&r!=="user")return [];let i=n.message?.content;if(!Array.isArray(i))return [];let s=e??new Date().toISOString(),a=[];for(let d of i){let c=fl(s,d);c&&a.push(c);}return a},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?ll.has(r):!1}catch{return false}}};});var gl,ml;exports.copilotAdapter=void 0;var Uo=D(()=>{u();Ct();Xt();Yt();Re();gl=new Set(["interactive","plan","autopilot"]),ml=new Set(["none","low","medium","high","xhigh","max"]),exports.copilotAdapter={command:"copilot",meta:{displayName:"Copilot",models:xo()},buildArgs(t,e,n){let r=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&r.push("--model",e.model),e.mode&&gl.has(e.mode)&&r.push("--mode",e.mode),e.effort&&ml.has(e.effort)&&r.push("--effort",e.effort),{args:r,stdinMessage:t}},extractText(t){let e=t.split(`
9
+ `).filter(o=>o.trim()),n=[],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()&&n.push(s.trim());}i.type==="result"&&typeof i.result=="string"&&(r=i.result);}catch{}return n.length>0?n[n.length-1]:r||t.trim()},parseResultMeta(t){let e=tt(t);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(t,e){let n;try{n=JSON.parse(t);}catch{return []}let r=n.type;if(!r)return [];if(!r.startsWith("tool.execution")&&!r.startsWith("assistant.")&&r!=="user.message")return [];let o=n.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=Me(d);return (a==="bash"||a==="Bash")&&Ne(c)?[De(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 yl(t){let e=[],n=0,r=false,o=false,i=0;for(let a=0;a<t.length;a++){let d=t[a];if(o){o=false;continue}if(d==="\\"&&r){o=true;continue}if(d==='"'){r=!r;continue}if(!r){if(d==="{")n++;else if(d==="}"&&(n--,n===0)){let c=t.slice(i,a+1).trim();c&&e.push(c),i=a+1;}}}let s=t.slice(i).trim();return s&&e.push(s),e}function wl(t){return t[0]==="exec"?t.slice(1):t}function _l(t,e){let n=e.type;if(n==="command_execution"){let r=String(e.command||"");return Ne(r)?[De(t,r)]:[{timestamp:t,type:"tool_use",toolName:"Bash",toolInput:r}]}return n==="web_search"?[]:n==="file_change"?[]:[]}function kl(t,e){let n=e.type;if(n==="message"||n==="text"){let r=e.content;if(Array.isArray(r))for(let o of r){let i=vl(t,o);if(i)return i}if(typeof e.text=="string")return {timestamp:t,type:"text",content:e.text}}if(n==="agent_message"&&typeof e.text=="string")return {timestamp:t,type:"text",content:e.text};if(n==="reasoning"){let r=typeof e.text=="string"?e.text.trim():"";return r?{timestamp:t,type:"thinking",content:r}:null}if(n==="command_execution"){let r=String(e.aggregated_output||e.output||""),o=!!e.is_error;return {timestamp:t,type:"tool_result",resultPreview:r,isError:o}}if(n==="tool_use"){let r=String(e.name||e.tool_name||""),o=e.input,i=Me(o);return r==="Bash"&&Ne(i)?De(t,i):{timestamp:t,type:"tool_use",toolName:r,toolInput:i}}if(n==="tool_result"){let r=!!e.is_error,o=String(e.output||e.content||"");return {timestamp:t,type:"tool_result",resultPreview:o,isError:r}}if(n==="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:t,type:"tool_use",toolName:"WebSearch",toolInput:o}:null}if(n==="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:t,type:"tool_use",toolName:"Edit",toolInput:i}}return null}function vl(t,e){let n=e.type;if(n==="text")return {timestamp:t,type:"text",content:String(e.text||"")};if(n==="tool_use"){let r=String(e.name||""),o=e.input,i=Me(o);return r==="Bash"&&Ne(i)?De(t,i):{timestamp:t,type:"tool_use",toolName:r,toolInput:i}}return null}var hl;exports.codexAdapter=void 0;var Lo=D(()=>{u();Ct();Xt();Yt();br();Re();hl=new Set(["turn.started","turn.completed","item.updated"]);exports.codexAdapter={command:"codex",meta:{displayName:"Codex",models:Eo(),capabilities:{resume:true}},buildArgs(t,e,n){let{model:r,effort:o}=Qt(e.model),i=e.effort??o,s=e.resumeSessionId?Ds(e.mode):Ns(e.mode),a=Ms(i),d=r?["-m",r]:[],c=wl(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:t}:{args:["exec",...f,...s,...a,...d,...c],stdinMessage:t}},extractText(t){let e=t.split(`
10
+ `).map(o=>o.trim()).filter(Boolean),n=[],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()&&n.push(s.trim());}i.type==="result"&&typeof i.result=="string"&&(r=i.result);}catch{}return n.length>0?n[n.length-1]:r||t.trim()},parseResultMeta(t){let e=tt(t);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(t,e){let n=e??new Date().toISOString(),r=[],o;try{JSON.parse(t),o=[t];}catch{o=yl(t),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(..._l(n,d));continue}if(a==="item.completed"){let c=kl(n,d);c&&r.push(c);continue}}}return r},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?hl.has(r):!1}catch{return false}}};});function Rl(t){return t?xl[t]??{agent:"build",autoApprove:false}:{agent:void 0,autoApprove:false}}function Pr(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function bl(t){let e=[],n=0,r=false,o=false,i=0;for(let a=0;a<t.length;a++){let d=t[a];if(o){o=false;continue}if(d==="\\"&&r){o=true;continue}if(d==='"'){r=!r;continue}if(!r){if(d==="{")n++;else if(d==="}"&&(n--,n===0)){let c=t.slice(i,a+1).trim();c&&e.push(c),i=a+1;}}}let s=t.slice(i).trim();return s&&e.push(s),e}var El,xl;exports.opencodeAdapter=void 0;var $o=D(()=>{u();Ct();Yt();El=new Set(["step_start","step_finish"]),xl={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(t,e,n){let r=e.additionalArgs,o=r!==void 0?[...r]:["run"];Pr(o,"--format")||o.push("--format","json"),e.resumeSessionId&&!o.includes("-s")&&!o.includes("--session")&&o.push("-s",e.resumeSessionId);let{agent:i,autoApprove:s}=Rl(e.mode);Pr(o,"--agent")||i!==void 0&&o.push("--agent",i),s&&!Pr(o,"--auto")&&o.push("--auto"),e.effort!==void 0&&!Pr(o,"--variant")&&o.push("--variant",e.effort),e.model&&o.push("--model",e.model);let a;return !n&&!s&&!e.env?.OPENCODE_PERMISSION&&(a={OPENCODE_PERMISSION:JSON.stringify({external_directory:"allow"})}),{args:o,stdinMessage:t,env:a}},extractText(t){let e=t.split(`
11
+ `).map(o=>o.trim()).filter(Boolean),n=[],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()&&n.push(s.trim());}i.type==="result"&&typeof i.result=="string"&&(r=i.result);}catch{}return n.length>0?n[n.length-1]:r||t.trim()},parseResultMeta(t){let e=tt(t);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(t,e){let n=e??new Date().toISOString(),r=[],o;try{JSON.parse(t),o=[t];}catch{o=bl(t),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:n,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,k=Me(m);if(r.push({timestamp:n,type:"tool_use",toolName:c,toolUseId:l,toolInput:k}),g==="completed"&&f?.output!==void 0){let h=f.output,v=typeof h=="string"?h:JSON.stringify(h);r.push({timestamp:n,type:"tool_result",toolUseId:l,resultPreview:v,isError:false});}else g==="error"&&r.push({timestamp:n,type:"tool_result",toolUseId:l,resultPreview:String(f?.error||"tool error"),isError:true});continue}}}return r},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?El.has(r):!1}catch{return false}}};});var Bo,jo=D(()=>{u();Kt();Re();Bo={command:"agy",meta:{displayName:"Antigravity",models:Ro(),defaultTimeoutMs:{query:12e4,execute:3e5},defaultIdleMs:0},buildArgs(t,e,n){if(e.additionalArgs!==void 0){let o=[...e.additionalArgs];return o.includes("--print")||o.unshift("--print",t),e.model&&o.push("--model",e.model),o.push("--dangerously-skip-permissions"),{args:o}}let r=["--print",t,"--dangerously-skip-permissions"];return e.model&&r.push("--model",e.model),{args:r}},extractText(t){let e=t.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(t){return {usage:null,model:null}},parseEvent(t,e){return []}};});var Hs,Ws=D(()=>{u();Xt();Yt();Hs={parseEvent(t,e){let n;try{n=JSON.parse(t);}catch{return []}let r=n.type;if(!r)return [];if(r!=="message"&&r!=="tool_use"&&r!=="tool_result")return [];let o=e??new Date().toISOString();if(r==="message"){if(n.role!=="assistant")return [];let s=n.content;return s?[{timestamp:o,type:"text",content:s}]:[]}if(r==="tool_use"){let i=String(n.tool_name||""),s=n.tool_id,a=n.parameters,d=Me(a);return /^bash$/i.test(i)&&Ne(d)?[De(o,d)]:[{timestamp:o,type:"tool_use",toolName:i,toolUseId:s,toolInput:d}]}if(r==="tool_result"){let i=n.tool_id,s=String(n.output||""),a=n.status!=="success";return [{timestamp:o,type:"tool_result",toolUseId:i,resultPreview:s,isError:a}]}return []}};});function Zt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Or(t){return Zt(t)?t:void 0}function _e(t){return typeof t=="string"?t:void 0}function Dt(t){let e=typeof t=="number"?t:Number(t??0);return Number.isFinite(e)?e:0}function Cl(t){let e=[],n=-1,r=0,o=false,i=false;for(let s=0;s<t.length;s+=1){let a=t[s];if(n===-1){(a==="{"||a==="[")&&(n=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(t.slice(n,s+1)),n=-1)));}return n!==-1&&e.push(t.slice(n)),e}function En(t){let e=t.trim();if(!e)return [];try{let n=JSON.parse(e);return Zt(n)?[n]:[]}catch{return Cl(e).flatMap(n=>{try{let r=JSON.parse(n);return Zt(r)?[r]:[]}catch{return []}})}}function xn(t){let e=JSON.stringify(t);return e===void 0?String(t):e}function Rn(t){if(typeof t=="string")return t;if(Array.isArray(t)){let e=t.map(Rn).filter(n=>n!==void 0);return e.length>0?e.join(`
12
+ `):void 0}if(Zt(t)){if(typeof t.text=="string")return t.text;if(typeof t.message=="string")return t.message;if(typeof t.error=="string")return t.error;if(t.type==="text"&&typeof t.data=="string")return t.data;for(let e of ["content","FileContent","rawOutput"]){let n=Rn(t[e]);if(n!==void 0)return n}}}function Sl(t){if(t.rawOutput!==null&&t.rawOutput!==void 0)return Rn(t.rawOutput)??xn(t.rawOutput);if(t.content!==null&&t.content!==void 0)return Rn(t.content)??xn(t.content);if(t.result!==null&&t.result!==void 0)return Rn(t.result)??xn(t.result)}function Js(t){let e=Or(t.error),n=[t.message,t.errorMessage,e?.message,e?.detail,typeof t.error=="string"?t.error:void 0].find(r=>typeof r=="string"&&r.trim().length>0);return n?Ks(n):"Grok CLI reported an error."}function Ks(t){return (t.replace(Pl,"").split(/\r?\n/).map(n=>n.trim()).filter(Boolean)[0]??t.trim()).slice(0,500)}function Vs(t){return Il.test(t)}function Ol(t){let e=Or(t.modelUsage);return e?Object.keys(e)[0]??null:null}function Nl(t){let e=Or(t.usage);if(!e)return null;let n=Dt(e.cache_read_input_tokens);return {inputTokens:Dt(e.input_tokens)+n,cachedInputTokens:n,outputTokens:Dt(e.output_tokens),costUsd:Dt(t.total_cost_usd)}}function Dl(t){let e=0,n=0,r=0,o=false,i=new Set;for(let s of t.split(`
13
+ `).flatMap(En)){if(s.type!=="usage")continue;let a=Or(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=Dt(a.cache_read_input_tokens);e+=Dt(a.input_tokens)+c,n+=c,r+=Dt(a.output_tokens),o=true;}return o?{inputTokens:e,cachedInputTokens:n,outputTokens:r,costUsd:0}:null}function Ml(t,e){if(!Array.isArray(e.entries)||e.entries.length===0)return [];let n=[];for(let i of e.entries.slice(0,qs)){if(!Zt(i))continue;let s=_e(i.content)?.trim();if(!s)continue;let a=_e(i.status)?.trim(),d=_e(i.priority)?.trim(),c=[a?`status=${a}`:void 0,d?`priority=${d}`:void 0].filter(f=>!!f),l=c.length>0?` (${c.join(", ")})`:"";n.push(`- ${s}${l}`);}if(n.length===0)return [];e.entries.length>qs&&n.push(Gs);let r=n.join(`
14
+ `),o=r.length>zs?`${r.slice(0,zs-1)}${Gs}`:r;return [{timestamp:t,type:"info",content:o}]}function Ul(t,e){let n=_e(e.type);if(n==="thought"){let r=_e(e.data);return r===void 0?[]:[{timestamp:t,type:"thinking",content:r}]}if(n==="text"){let r=_e(e.data);return r===void 0?[]:[{timestamp:t,type:"text",content:r}]}if(n==="plan")return Ml(t,e);if(n==="tool_call"){let r=_e(e.toolCallId),o=_e(e.toolName)??_e(e.title),i=e.rawInput===void 0?void 0:xn(e.rawInput);return [{timestamp:t,type:"tool_use",toolUseId:r,toolName:o,toolInput:i}]}if(n==="tool_call_update"){let r=_e(e.status);return r!=="completed"&&r!=="failed"&&r!=="error"?[]:[{timestamp:t,type:"tool_result",toolUseId:_e(e.toolCallId),toolName:_e(e.toolName)??_e(e.title),resultPreview:Sl(e),isError:r!=="completed"||e.isError===true}]}if(n==="error"){let r=Js(e);return [{timestamp:t,type:"error",content:r,errorMessage:r}]}return []}var Sr,Al,Il,Pl,qs,zs,Gs;exports.grokAdapter=void 0;var Fo=D(()=>{u();Kt();Rr();Re();br();Sr="cli/grok",Al=new Set(["available_commands","usage","end"]),Il=/(?:rate[\s_-]*limit|quota|usage[\s_-]*limit|too many requests|limit(?:ed|ing)?\s+(?:exceeded|reached))/i,Pl=/\u001b\[[0-?]*[ -/]*[@-~]/g,qs=20,zs=4e3,Gs="\u2026";exports.grokAdapter={command:"grok",createSessionId:()=>crypto$1.randomUUID(),meta:{displayName:"Grok",capabilities:{resume:true}},buildArgs(t,e){let{model:n,effort:r}=Qt(e.model),o=e.effort??r,i=e.resumeSessionId?["--resume",e.resumeSessionId]:e.providerSessionId?["--session-id",e.providerSessionId]:[],s=n?["--model",n]:[],a=n?Ze("grok").some(R=>R.id===n):false,d=n&&a?Rt("grok",n):[],c=!o||d.length===0||d.includes(o)?o:void 0,l=Fs(c),f=e.additionalArgs??[],g=R=>f.some(b=>b===R||b.startsWith(`${R}=`)),m=e.providerOptions,k=m?.alwaysApprove,h=m?.sandbox,v=g("--permission-mode")?[]:$s(e.mode),w=g("--always-approve")?[]:Bs(k),_=g("--sandbox")?[]:js(h);return {args:["--no-auto-update",...i,"--single",t,"--output-format","streaming-json","--no-alt-screen",...s,...l,...v,...w,..._,...f]}},extractText(t){let e=[],n=false;for(let r of t.split(`
15
+ `).flatMap(En))typeof r.type=="string"&&(n=true),r.type==="text"&&typeof r.data=="string"&&e.push(r.data);return e.length>0?e.join(""):n?"":t.trim()},extractFailure(t){for(let e of En(t))if(e.type==="error"){let n=Js(e);return Vs(xn(e))?new exports.RateLimitError(n,Sr):new exports.ProviderError(n,Sr)}return null},interpretExit(t,e){if(t===0)return null;let n=Ks(e)||`Grok CLI exited with code ${t}.`;return Vs(e)?new exports.RateLimitError(n,Sr):new exports.ProviderError(n,Sr)},parseResultMeta(t){let n=t.split(`
16
+ `).flatMap(En).find(r=>r.type==="end");return n?{usage:Nl(n),model:Ol(n)}:{usage:Dl(t),model:null}},parseEvent(t,e){let n=e??new Date().toISOString();return En(t).flatMap(r=>Ul(n,r))},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let n=JSON.parse(e);return Zt(n)&&typeof n.type=="string"?Al.has(n.type):!1}catch{return false}}};});function bn(t,e,n){if(n){let r=exports.BUILTIN_ADAPTERS[n];if(r?.parseEvent)return r.parseEvent(e,t);let o=Ll[n];if(o?.parseEvent)return o.parseEvent(e,t)}for(let r of Object.values(exports.BUILTIN_ADAPTERS)){let o=r.parseEvent?.(e,t)??[];if(o.length>0)return o}return []}exports.BUILTIN_ADAPTERS=void 0;var Ll,ft=D(()=>{u();Mo();Uo();Lo();$o();jo();Ws();Fo();Mo();Uo();Lo();$o();jo();Fo();Xt();exports.BUILTIN_ADAPTERS={codex:exports.codexAdapter,claude:exports.claudeAdapter,opencode:exports.opencodeAdapter,antigravity:Bo,copilot:exports.copilotAdapter,grok:exports.grokAdapter},Ll={gemini:Hs};});var en,Ho=D(()=>{u();en=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 Xs(t,e){if(t===void 0||t==="")return e;let n=parseInt(t,10);return Number.isNaN(n)?e:n}function Wo(t=process.env){let e=t.CREWX_TIMEOUT_IDLE;if(e===void 0||e==="")return;let n=parseInt(e,10);if(!(!Number.isFinite(n)||n<=0))return n}function Ys(t=process.env){return {queryMs:Xs(t.CREWX_TIMEOUT_QUERY,288e5),executeMs:Xs(t.CREWX_TIMEOUT_EXECUTE,288e5),idleMs:Wo(t)??6e5}}var Dr=D(()=>{u();});function Bl(t){let e=t.split(`
17
+ `).filter(d=>d.trim()),n=[],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()&&n.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 n.length>0?n.join(`
17
18
 
18
19
  `):r.length>0?r.join(""):o.length>0?o.join(`
19
20
 
20
21
  `):i.length>0?i.join(`
21
22
 
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}
23
+ `):s.length>0?s.join(""):a||t.trim()}function jl(t){let e=tt(t);return e?{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0}:null}function Fl(t,e,n=process.platform){return t==="copilot"&&n==="win32"&&e instanceof exports.ProviderError&&e.message.includes('CLI command "copilot" not found')}function Zs(t,e,n,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=It({command:t,env:f,cwd:g,allowShellFallback:true}),k=Pt(m,e),h=child_process.spawn(k.command,k.argv,{env:f,cwd:o?.cwd,stdio:["pipe","pipe","pipe"],shell:k.shell??false,windowsHide:k.windowsHide,detached:process.platform!=="win32"});h.stdin.on("error",O=>{O.code!=="EPIPE"&&o?.onOutput?.(`stdin error: ${O.message}`,"stderr");}),i!==void 0&&h.stdin.write(i),h.stdin.end(),h.pid!==void 0&&o?.onPid?.(h.pid);let v=false,w=false,_=O=>{if(h.pid!==void 0)try{process.platform==="win32"?h.kill(O):process.kill(-h.pid,O);}catch{}},R=()=>{_("SIGKILL");},L=setTimeout(()=>{v||(w=true,A?.stop(),_("SIGTERM"),setTimeout(R,Tn).unref());},c);L.unref();let A=l>0?new en({timeoutMs:l,onIdle:()=>{if(v)return;v=true,clearTimeout(L),_("SIGTERM"),setTimeout(R,Tn).unref();let O=Math.round(l/6e4);H(new St(`${n} produced no output for ${O}m (idle timeout). Process killed. The CLI may be waiting on interactive input or stuck \u2014 check the prompt or retry.`,n));}}):null;A?.start();let Z=new string_decoder.StringDecoder("utf8"),P=new string_decoder.StringDecoder("utf8"),F="",ce="",X="",re="",H=O=>{O instanceof Error&&(O.stdout=F),d(O);};h.stdout.on("data",O=>{A?.refresh();let te=Z.write(O);F+=te,X+=te;let z=X.split(`
24
+ `);X=z.pop()??"";for(let $ of z)if($.trim()&&(o?.onOutput?.($,"stdout"),s?.extractFailure)){let W=s.extractFailure($);if(W){v=true,clearTimeout(L),A?.stop(),_("SIGTERM"),setTimeout(R,Tn).unref(),H(W);return}}}),h.stderr.on("data",O=>{A?.refresh();let te=P.write(O);ce+=te,re+=te;let z=re.split(`
25
+ `);re=z.pop()??"";for(let $ of z)$.trim()&&o?.onOutput?.($,"stderr");}),h.on("error",O=>{v=true,clearTimeout(L),A?.stop(),O.code==="ENOENT"?H(new exports.ProviderError(`CLI command "${t}" not found. Is ${n} installed?`,n)):H(new exports.ProviderError(`Spawn error: ${O.message}`,n));}),h.on("close",(O,te)=>{if(v)return;v=true,clearTimeout(L),A?.stop();let z=Z.end(),$=P.end();z&&(F+=z,X+=z),$&&(ce+=$,re+=$),X.trim()&&o?.onOutput?.(X,"stdout"),re.trim()&&o?.onOutput?.(re,"stderr");let W=O??0;if(o?.onExitCode?.(W),w)return H(new Ot(`Total runtime exceeded ${c}ms; process killed.`,n));if(te)return H(new exports.ProviderError(`Process terminated by signal ${te}`,n,{code:"PROVIDER_CRASHED",kind:"permanent"}));if(W!==0){if(s?.interpretExit){let ee=s.interpretExit(W,ce);if(ee){H(ee);return}}H(new exports.ProviderError(`Process exited with code ${W}: ${ce.slice(0,500)}`,n));return}let fe;try{fe=s?s.extractText(F):Bl(F);}catch(ee){H(ee instanceof Error?ee:new exports.ProviderError(String(ee),n));return}a({stdout:F,parsed:fe});});})}function nt(t,e){ea.set(t,e);}function rt(t,e){let n=t.split("/");if(n.length!==2)throw new exports.ProviderError(`Invalid provider format: "${t}". Expected namespace/id (e.g., cli/claude)`,t);let[r,o]=n,i=ea.get(r);if(i)return i(o,t);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(", ")}`,t);return new qo(o,s,t,e)}throw new exports.ProviderError(`Unsupported provider namespace: "${r}". Register a factory with registerProviderFactory('${r}', factory).`,t)}function ta(t,e,n){if(!t||!e)return t??{};let r=e({providerStr:n.providerStr,providerId:n.providerId,mode:t.mode});return r.length===0?t:{...t,additionalArgs:[...t.additionalArgs??[],...r]}}var Tn;exports.ClientToolCallRequiredError=void 0;var ea,qo,qe=D(()=>{u();Jt();Ct();ft();Kt();Ho();Dr();Kt();Tn=2e3;exports.ClientToolCallRequiredError=class extends Error{constructor(n,r){super(`Client tool call required: ${n.toolName}`);this.toolCall=n;this.continuationState=r;}toolCall;continuationState;name="ClientToolCallRequiredError"},ea=new Map;qo=class{constructor(e,n,r,o){this.providerId=e;this.adapter=n;this.providerStr=r;this.additionalArgsProvider=o;}providerId;adapter;providerStr;additionalArgsProvider;async execute(e,n){let r=this.composeMessage(e,n),o=this.prepareProviderSession(this.applyAdditionalArgs(n)),{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,n){let r=this.composeMessage(e,n),o=this.prepareProviderSession(this.applyAdditionalArgs(n)),{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 ta(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 n=this.adapter.createSessionId();return e.onProviderSessionId?.(n),{...e,providerSessionId:n}}composeMessage(e,n){return n?.systemPrompt?`${n.systemPrompt}
25
26
 
26
27
  ---
27
28
 
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(`
29
+ ${e}`:e}async runProcess(e,n,r){try{return await Zs(this.adapter.command,e,this.providerStr,this.providerId,n,r,this.adapter)}catch(o){if(Fl(this.providerId,o)){let i=e[0]==="copilot"?e:["copilot",...e];try{return await Zs("gh",i,this.providerStr,this.providerId,n,r,this.adapter)}catch(s){throw this.recoverPartialUsage(s,n),s}}throw this.recoverPartialUsage(o,n),o}}recoverPartialUsage(e,n){let r=e instanceof Error?e.stdout:void 0;typeof r=="string"&&r.length>0&&this.handleResultMeta(r,n);}handleResultMeta(e,n){if(!this.adapter.parseResultMeta){let s=jl(e);s&&n?.onUsage&&n.onUsage(s);return}let{usage:r,model:o}=this.adapter.parseResultMeta(e);r&&n?.onUsage&&n.onUsage(r);let i=o??(this.providerId==="opencode"?n?.model??null:null);i&&n?.onModel&&n.onModel(i);}};});function fi(t){let e=t.update;if(e.sessionUpdate==="agent_message_chunk"){let n=e.content;if(n.type==="text"&&typeof n.text=="string")return n.text}return null}function Le(t,e){try{let n=JSON.parse(t);if(n!=null&&typeof n=="object"&&typeof n.type=="string"&&Hu.has(n.type)){let r=e??new Date().toISOString();return [{...n,timestamp:n.timestamp||r}]}}catch{}return []}var Hu,gt=D(()=>{u();Hu=new Set(["text","tool_use","tool_result","error","running_instruction","agent_call"]);});var rd,od;exports.VercelProviderRuntime=void 0;var Pi=D(()=>{u();qe();rd=10,od=50,exports.VercelProviderRuntime=class{config;constructor(e){this.config=e;}async query(e,n){return this._run(e,"query",n)}async execute(e,n){return this._run(e,"execute",n)}async _run(e,n,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??rd,od);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 k=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:k,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,n,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??rd,od),c=[{role:"user",content:e.userMessage},...e.responseMessages,{role:"tool",content:n.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:n.map(k=>({type:"tool-result",toolCallId:k.toolCallId,toolName:k.toolName,result:typeof k.result=="string"?k.result:JSON.stringify(k.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,n){let{z:r}=ge("zod"),o={};for(let i of e){let s=this.jsonSchemaToZod(i.parameters??{},r);i.execute?o[i.name]=n({description:i.description,parameters:s,execute:async a=>i.execute(a)}):o[i.name]=n({description:i.description,parameters:s});}return o}jsonSchemaToZod(e,n){if(!e||!e.properties)return n.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=n.string();break;case "number":d=n.number();break;case "integer":d=n.number().int();break;case "boolean":d=n.boolean();break;case "array":d=n.array(n.any());break;default:d=n.any();}a.description&&(d=d.describe(a.description)),i.includes(s)||(d=d.optional()),r[s]=d;}return n.object(r)}createModel(e){let{provider:n,apiKey:r,baseURL:o}=this.config,i=e||this.config.model;switch(n){case "api/openrouter":{let{createOpenAI:s}=ge("@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}=ge("@ai-sdk/openai");return s({apiKey:r||process.env.OPENAI_API_KEY,...o&&{baseURL:o}})(i)}case "api/anthropic":{let{createAnthropic:s}=ge("@ai-sdk/anthropic");return s({apiKey:r||process.env.ANTHROPIC_API_KEY,...o&&{baseURL:o}})(i)}case "api/google":{let{createGoogleGenerativeAI:s}=ge("@ai-sdk/google");return s({apiKey:r||process.env.GOOGLE_API_KEY})(i)}default:throw new exports.ProviderError(`Unsupported API provider: ${n}`,n)}}};});var sd={};lr(sd,{registerApiProviders:()=>id});function id(t){nt("api",(e,n)=>{let r=t?.apiKeys?.[e];return new exports.VercelProviderRuntime({provider:n,model:"",apiKey:r,maxSteps:t?.defaults?.maxSteps,temperature:t?.defaults?.temperature})});}var Ci=D(()=>{u();qe();Pi();});exports.AcpProtocolError=void 0;var Si=D(()=>{u();exports.AcpProtocolError=class extends Error{constructor(n,r,o){super(n);this.code=r;this.data=o;}code;data;name="AcpProtocolError"};});var Df,Mf,ad,dd,Uf;exports.AcpConnection=void 0;var no=D(()=>{u();Jt();Si();qe();Ho();Dr();Df=-32e3,Mf=2e3,ad=3e4,dd=1e4,Uf=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 n=this.options.spawn,r=process.platform==="win32"&&(n.shellOnWindows??true),o={...process.env,...this.options.env??{}},i=this.options.cwd??process.cwd(),s;try{let w=It({command:n.command,env:o,cwd:i,allowShellFallback:r});s=Pt(w,n.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 _=w.toString();this.collectedStderr+=_,this.stderrBuffer+=_;let R=this.stderrBuffer.split(`
30
+ `);this.stderrBuffer=R.pop()??"";for(let b of R)b.trim()&&this.options.onStderr?.(b);}),this.proc=a;let d=this.options.idleMs??6e5;d>0&&(this.idlePromise=new Promise((w,_)=>{this.idleReject=_;}),this.idlePromise.catch(()=>{}),this.idleWatchdog=new en({timeoutMs:d,onIdle:()=>{let w=Math.round(d/6e4),_=new St(`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?.(_),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((_,R)=>{a.stdin.write(w,b=>{b?R(b):_();});}),close:()=>{a.stdin.end();}}),l=new ReadableStream({start:w=>{a.stdout.on("data",_=>{this.idleWatchdog?.refresh(),w.enqueue(new Uint8Array(_));}),a.stdout.on("end",()=>{w.close();}),a.stdout.on("error",_=>{w.error(_);});}}),f=sdk.ndJsonStream(c,l),g=this,m=new sdk.ClientSideConnection(w=>({requestPermission:async _=>{if(g.options.configOptions?.allow_all!==void 0){let R=_.options;if(Array.isArray(R)&&R.length>0)return {outcome:{outcome:"selected",optionId:(R.find(L=>L.kind==="allow_once")??R.find(L=>L.kind?.startsWith("allow_"))??R[0]).optionId}}}return {outcome:{outcome:"cancelled"}}},sessionUpdate:async _=>{g.pendingUpdateCallback?.(_);}}),f);this.sdkConnection=m;let k=new Promise((w,_)=>{a.on("error",R=>{if(R.code==="ENOENT"){let L=n.command==="npx"&&n.args.length>0?`@agentclientprotocol/${n.args[0]}`:n.command;_(new exports.ProviderError(`ACP command "${n.command}" not found. Is the ACP adapter installed? Try: npm install -g ${L}`,"acp"));}else _(new exports.ProviderError(`ACP spawn error: ${R.message}`,"acp"));});}),h=this.doInitialize(m,e),v=new Promise((w,_)=>{setTimeout(()=>{_(new exports.AcpProtocolError(`ACP connect timeout after ${ad}ms. The ACP adapter may not be installed or may require interactive setup.`));},ad).unref();});await Promise.race([h,v,k]);}async doInitialize(e,n){let r=await e.initialize({protocolVersion:1,clientCapabilities:{auth:{}},clientInfo:{name:n?.name??"crewx-sdk",version:n?.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(n){if(!this.isAuthError(n))throw n;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(n){if(!this.isAuthError(n))throw n;return await this.tryAuthenticate(),this.newSessionRawTimeout(e)}}async newSessionRawTimeout(e){let n=this.sdkConnection.newSession(e),r=new Promise((o,i)=>{setTimeout(()=>{i(new exports.AcpProtocolError(`ACP session/new timeout after ${dd}ms`));},dd).unref();});return Promise.race([n,r])}isAuthError(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code===Df}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 n=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: ${n}. 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(n=>!n.optional).every(n=>!!process.env[n.name])}async setModel(e,n){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.unstable_setSessionModel({sessionId:e,modelId:n});}async setMode(e,n){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.setSessionMode({sessionId:e,modeId:n});}async setConfigOption(e,n,r){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.setSessionConfigOption({sessionId:e,configId:n,value:r});}async prompt(e,n,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??Uf,d=false,c=i.prompt({sessionId:e,prompt:n}).finally(()=>{d=true;}),l=new Promise((m,k)=>{setTimeout(()=>{i.cancel({sessionId:e}).catch(()=>{}),k(new Ot(`ACP prompt timeout after ${a}ms`,"acp"));},a).unref();}),f=new Promise((m,k)=>{let h=(R,b,L)=>{if(d)return;let A=b!=null?`signal=${b}`:`code=${String(R)}`;k(new exports.ProviderError(`ACP process terminated unexpectedly (${A}) [${L}]: ${this.collectedStderr.slice(-500)}`,"acp"));},v=(R,b)=>h(R,b,"exit"),w=(R,b)=>h(R,b,"close");s.once("exit",v),s.once("close",w);let _=()=>{s.off("exit",v),s.off("close",w);};c.then(_,_);}),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 n=e.pid,r=o=>{if(n!==void 0&&process.platform!=="win32")try{process.kill(-n,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");},Mf);});}get isConnected(){return !this.disposed&&this.sdkConnection!==null&&this.proc!==null}};});function cd(t,e){if(t!=null&&typeof t=="object"){let n=t;if(typeof n.command=="string")return n.command;if(typeof n.file_path=="string")return n.file_path;if(typeof n.filePath=="string")return n.filePath;if(typeof n.path=="string")return n.path;if(typeof n.query=="string")return n.query;if(typeof n.pattern=="string")return n.pattern;if(typeof n.url=="string")return n.url;if(Object.keys(n).length>0)return JSON.stringify(n)}if(e&&e.length>0)return e.map(n=>n.path).join(", ")}var Lf;exports.AcpProviderRuntime=void 0;var Oi=D(()=>{u();gt();no();Lf={read:"Read",edit:"Edit",delete:"Delete",move:"Move",search:"Search",execute:"Bash",think:"Think",fetch:"WebFetch",switch_mode:"SwitchMode"};exports.AcpProviderRuntime=class{constructor(e,n,r){this.adapter=n;}adapter;async query(e,n){return this.runPrompt(e,n)}async execute(e,n){return this.runPrompt(e,n)}async dispose(){}async runPrompt(e,n){let{command:r,args:o}=this.adapter.spawn;n?.onCommand?.(`${r} ${o.join(" ")}`);let i=this.adapter.buildSpawnEnv?.(n?.model??""),s=i?{...n?.env,...i}:n?.env,a=new exports.AcpConnection({spawn:this.adapter.spawn,env:s,cwd:n?.cwd,timeoutMs:n?.timeoutMs,idleMs:n?.idleMs,onPid:n?.onPid,onStderr:d=>n?.onOutput?.(d,"stderr"),configOptions:n?.configOptions});try{await a.connect(this.adapter.clientInfo);let d=this.adapter.buildSessionParams({cwd:n?.cwd,env:n?.env,model:n?.model,systemPrompt:n?.systemPrompt}),c=await a.newSession(d);await this.applySessionOptions(a,c,n);let l=this.composePrompt(e,n),f=[],g=await a.prompt(c,l,m=>this.handleUpdate(m,n,f),n?.timeoutMs);return this.handleUsage(g,n),f.join("")}finally{await a.dispose().catch(()=>{});}}async applySessionOptions(e,n,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(n,o.modelId):await e.setModel(n,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(n,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(n,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(n,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(n,o,i);}catch(a){console.warn(`[acp] setConfigOption(${o}) retry failed: ${a instanceof Error?a.message:String(a)}`);}}}composePrompt(e,n){let r=[];return n?.systemPrompt?.trim()&&(r.push(n.systemPrompt),r.push("---")),n?.context&&(r.push(n.context),r.push("---")),r.push(e),[{type:"text",text:r.join(`
30
31
 
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
+ `)}]}handleUpdate(e,n,r){let o=e.update;if(o.sessionUpdate==="agent_message_chunk"){let i=null;this.adapter.extractTextFromUpdate?i=this.adapter.extractTextFromUpdate(e):i=fi(e),i!==null&&(r.push(i),n?.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};n?.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"};n?.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};n?.onTaskLog?.([l]);}}else o.sessionUpdate;}pushBlockBoundary(e){e.length===0||e[e.length-1].endsWith(`
32
33
 
33
34
  `)||e.push(`
34
35
 
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
- `)}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 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=`
36
+ `);}resolveToolCall(e){let n=e._meta;if(n?.claudeCode?.toolName)return {toolName:n.claudeCode.toolName,toolInput:cd(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=Lf[e.kind??""]??e.title??"unknown",o=cd(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 n=e.filter(r=>r!=null&&typeof r=="object"&&r.type==="text"&&typeof r.text=="string").map(r=>r.text);if(n.length>0)return n.join(`
37
+ `)}if(typeof e=="object"){let n=e;if(typeof n.formatted_output=="string")return n.formatted_output;if(typeof n.content=="string")return n.content;if(Array.isArray(n.content)){let r=this.extractResultPreview(n.content);if(r)return r}if(typeof n.output=="string")return n.output;if(typeof n.text=="string")return n.text;if(typeof n.message=="string")return n.message;if(n.result!=null){let r=this.extractResultPreview(n.result);if(r)return r}if(n.error!=null){let r=this.extractResultPreview(n.error);if(r)return r}}return JSON.stringify(e)}}handleUsage(e,n){if(!n?.onUsage)return;if(this.adapter.extractUsage){let o=this.adapter.extractUsage(e);if(o){n.onUsage(o);return}}let r=e.usage;r&&n.onUsage({inputTokens:r.inputTokens??0,outputTokens:r.outputTokens??0,cachedInputTokens:r.cachedReadTokens??0,costUsd:0});}};});exports.claudeAcpAdapter=void 0;var Ni=D(()=>{u();gt();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(t){return {cwd:t.cwd??process.cwd(),mcpServers:[]}},extractUsage(t){let e=t.usage;return e?{inputTokens:(e.inputTokens??0)+(e.cachedReadTokens??0),outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"bypassPermissions",buildEffortAction(t){return t?{type:"set_config_option",configId:"effort",value:t}:null},buildSpawnEnv(t){if(!(!t||t==="default"))return {ANTHROPIC_MODEL:t}},resolveMode(t){return {yolo:"bypassPermissions"}[t]??t},parseEvent:Le};});exports.codexAcpAdapter=void 0;var Di=D(()=>{u();gt();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(t){return {cwd:t.cwd??process.cwd(),mcpServers:[]}},extractUsage(t){let e=t.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(t,e){if(!e)return null;let n=e.match(/^(.+?)\[([^\]]+)\]$/),r=n?n[1]:e,o=n?n[2]:void 0;return {type:"set_model",modelId:`${r}[${t||o||"medium"}]`}},resolveMode(t){return {yolo:"agent-full-access",default:"agent",plan:"read-only"}[t]??t},parseEvent:Le};});var on;exports.copilotAcpAdapter=void 0;var Mi=D(()=>{u();gt();on="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(t){return {cwd:t.cwd?K.resolve(t.cwd):process.cwd(),mcpServers:[]}},yoloModeId:`${on}#autopilot`,buildEffortAction(t){return t?{type:"set_config_option",configId:"reasoning_effort",value:t}:null},resolveMode(t){return t.startsWith("https://")?t:{yolo:`${on}#autopilot`,default:`${on}#agent`,agent:`${on}#agent`,plan:`${on}#plan`,autopilot:`${on}#autopilot`}[t]??null},parseEvent:Le};});exports.opencodeAcpAdapter=void 0;var Ui=D(()=>{u();gt();exports.opencodeAcpAdapter={spawn:{command:"opencode",args:["acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"OpenCode"},buildSessionParams(t){return {cwd:t.cwd??process.cwd(),mcpServers:[]}},buildEffortAction(t){return null},resolveMode(t){return t},parseEvent:Le};});exports.ACP_ADAPTERS=void 0;var ao=D(()=>{u();Ni();Di();Mi();Ui();Ni();Di();Mi();Ui();exports.ACP_ADAPTERS={codex:exports.codexAcpAdapter,claude:exports.claudeAcpAdapter,opencode:exports.opencodeAcpAdapter,copilot:exports.copilotAcpAdapter};});var ud={};lr(ud,{registerAcpProviders:()=>ld});function ld(t){if(t){nt("acp",t);return}nt("acp",(e,n)=>{let r=exports.ACP_ADAPTERS[e];if(!r)throw new exports.ProviderError(`Unknown ACP provider id: "${e}". Supported: ${Object.keys(exports.ACP_ADAPTERS).join(", ")}`,n);return new exports.AcpProviderRuntime(e,r,n)});}var Li=D(()=>{u();qe();Oi();ao();qe();});function Bf(t){if(!t)return t;let e=t.trim().replace(/\/+$/,"");return e.toLowerCase().endsWith("/mcp")?e.slice(0,-4):e}exports.McpHttpTransport=void 0;var $i=D(()=>{u();exports.McpHttpTransport=class{endpoint;headers;timeoutMs;constructor(e){let n=Bf(e.url);this.endpoint=`${n}/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 n=new AbortController,r=setTimeout(()=>n.abort(),this.timeoutMs);try{let o=await fetch(this.endpoint,{method:"POST",headers:this.headers,body:JSON.stringify(e),signal:n.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 Bi=D(()=>{u();$i();exports.RemoteAgentManager=class{logger;configs=new Map;transports=new Map;constructor(e={}){this.logger=e.logger??(()=>{});}loadConfig(e,n){this.validateConfig(n),this.configs.set(e,n),this.transports.set(e,new exports.McpHttpTransport({url:n.url,apiKey:n.apiKey,headers:n.headers,timeoutMs:n.timeoutMs})),this.logger(`Loaded remote agent config for: ${e}`,"debug");}loadConfigWithTransport(e,n,r){this.validateConfig(n),this.configs.set(e,n),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,n){let r=this.requireConfig(e),o=r.tools?.query??"crewx_queryAgent",s={agentId:r.agentId??e,query:n.query};n.context&&(s.context=n.context),n.model&&(s.model=n.model),n.platform&&(s.platform=n.platform),n.messages?.length&&(s.messages=n.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,n){let r=this.requireConfig(e),o=r.tools?.execute??"crewx_executeAgent",s={agentId:r.agentId??e,task:n.task};n.context&&(s.context=n.context),n.model&&(s.model=n.model),n.platform&&(s.platform=n.platform),n.messages?.length&&(s.messages=n.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,n){let r=this.requireConfig(e);r.tools={query:n.query??r.tools?.query??"crewx_queryAgent",execute:n.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 n=this.configs.get(e);if(!n)throw new Error(`Agent ${e} is not configured as a remote agent`);return n}async callRemoteTool(e,n,r){let o=this.transports.get(e);if(!o)throw new Error(`No transport available for agent ${e}`);let i={jsonrpc:"2.0",id:`${n}-${Date.now()}`,method:"tools/call",params:{name:n,arguments:r}};this.logger(`Calling remote MCP tool ${n} 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 n=e;if(Array.isArray(n.content)&&n.content.length>0)return n;let r=n.response??n.implementation??n.message??n.output,o=typeof r=="string"?r:JSON.stringify(r??e,null,2);return {...n,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 fd={};lr(fd,{RemoteProviderRuntime:()=>exports.RemoteProviderRuntime,createRemoteProviderFactory:()=>pd,resolveFileRemoteAgent:()=>Vf});function zf(t){let e=Ua.readFileSync(t,"utf-8"),n=jsYaml.load(e);return {agents:Array.isArray(n?.agents)?n.agents:void 0}}function Gf(t){let e=Array.isArray(t.provider)?t.provider[0]:t.provider;return e||(Array.isArray(t.inline?.provider)?t.inline.provider[0]:t.inline?.provider)}function Vf(t,e=zf,n=Ua.existsSync){let r=t.location.replace("file://","");if(!n(r))throw new Error(`Remote config file not found: ${r}`);if(!t.external_agent_id)throw new Error(`external_agent_id is required for file:// remote provider "${t.id}"`);let i=e(r).agents?.find(d=>d.id===t.external_agent_id);if(!i)throw new Error(`Agent "${t.external_agent_id}" not found in ${r}`);let s=Gf(i);if(!s)throw new Error(`Agent "${t.external_agent_id}" in ${r} has no provider configured`);if(s.startsWith("remote/"))throw new Error(`Chained remotes not allowed: ${t.id} \u2192 ${s}`);let a=K.resolve(K.dirname(r),i.working_directory??".");return {agent:{...i,working_directory:a},provider:s}}function pd(t,e=rt){return (n,r)=>{let o=t.get(n);if(!o)throw new Error(`Remote provider "${n}" not found. Available: ${Array.from(t.keys()).join(", ")||"(none)"}`);if(o.location.startsWith("file://"))throw new Error(`Remote provider "${n}" 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(n,o,e)}}function Jf(t,e){let n=e.location;if(!n)throw new Error("Remote provider config requires a location");if(!n.startsWith("http://")&&!n.startsWith("https://"))throw new Error(`Unsupported remote location protocol for MCP-HTTP: ${n}`);return {type:"mcp-http",url:n,apiKey:e.apiKey,headers:e.headers,timeoutMs:e.timeout?.query??3e4,agentId:e.external_agent_id??t}}exports.RemoteProviderRuntime=void 0;var ji=D(()=>{u();qe();Bi();exports.RemoteProviderRuntime=class{manager;agentId;constructor(e,n,r=rt){this.agentId=n.external_agent_id??e,this.manager=new exports.RemoteAgentManager;let o=Jf(e,n);this.manager.loadConfig(this.agentId,o);}async query(e,n){return (await this.manager.query(this.agentId,{agentId:this.agentId,query:e,model:n?.model,context:n?.context??n?.systemPrompt})).content.map(o=>o.text).join(`
38
+ `)}async execute(e,n){return (await this.manager.execute(this.agentId,{agentId:this.agentId,task:e,model:n?.model,context:n?.context??n?.systemPrompt})).content.map(o=>o.text).join(`
39
+ `)}};});var yd={};lr(yd,{PluginProviderRuntime:()=>exports.PluginProviderRuntime,createPluginProviderFactory:()=>hd});function hd(t){return (e,n)=>{let r=t.get(e);if(!r)throw new exports.ProviderError(`Plugin provider "${e}" not found. Available: ${Array.from(t.keys()).join(", ")||"(none)"}`,`plugin/${e}`);return new exports.PluginProviderRuntime(e,r)}}function gd(t,e,n,r){let o=t.map(i=>i.replace(/\{model\}/g,e));return r&&o.push(n),o}function Xf(t){if(!t||typeof t!="string")throw new Error("Plugin provider requires a cli_command")}function md(t){if(!Array.isArray(t))throw new Error("CLI arguments must be an array");for(let e of t)if(typeof e!="string")throw new Error("Each CLI argument must be a string")}function Yf(t){for(let{pattern:e}of t)if(typeof e!="string")throw new Error("Error pattern must be a string")}function Qf(t){for(let[e,n]of Object.entries(t))if(typeof e!="string"||typeof n!="string")throw new Error("env entries must be string key/value pairs")}exports.PluginProviderRuntime=void 0;var Fi=D(()=>{u();qe();Jt();exports.PluginProviderRuntime=class{constructor(e,n){this.config=n;this.providerStr=`plugin/${e}`,Xf(n.cli_command),md(n.query_args),md(n.execute_args),n.error_patterns&&Yf(n.error_patterns),n.env&&Qf(n.env);}config;providerStr;async query(e,n){let r=n?.model??this.config.default_model??"default",o=gd(this.config.query_args,r,e,this.config.prompt_in_args),i=this.config.prompt_in_args?void 0:e;n?.onCommand?.(`${this.config.cli_command} ${o.join(" ")}`);let s=this.config.timeout?.query??6e5;return this.runProcess(o,n,i,s)}async execute(e,n){let r=n?.model??this.config.default_model??"default",o=gd(this.config.execute_args,r,e,this.config.prompt_in_args),i=this.config.prompt_in_args?void 0:e;n?.onCommand?.(`${this.config.cli_command} ${o.join(" ")}`);let s=this.config.timeout?.execute??6e5;return this.runProcess(o,n,i,s)}runProcess(e,n,r,o){return new Promise((i,s)=>{let a={...process.env,...this.config.env??{}},d=It({command:this.config.cli_command,env:a,cwd:process.cwd(),resolution:this.config.prefer_local_bin?"local_first":"global_first",allowShellFallback:true}),c=Pt(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&&n?.onPid?.(l.pid);let f="",g="",m="",k="";l.stdout.on("data",v=>{let w=v.toString();f+=w,m+=w;let _=m.split(`
40
+ `);m=_.pop()??"";for(let R of _)R.trim()&&n?.onOutput?.(R,"stdout");}),l.stderr.on("data",v=>{let w=v.toString();g+=w,k+=w;let _=k.split(`
41
+ `);k=_.pop()??"";for(let R of _)R.trim()&&n?.onOutput?.(R,"stderr");});let h=setTimeout(()=>{l.kill("SIGTERM"),s(new exports.ProviderError(`Plugin provider "${this.providerStr}" timed out after ${o}ms`,this.providerStr));},o);l.on("error",v=>{if(clearTimeout(h),v.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: ${v.message}`,this.providerStr));}),l.on("close",v=>{clearTimeout(h),m.trim()&&n?.onOutput?.(m,"stdout"),k.trim()&&n?.onOutput?.(k,"stderr");let w=v??0;if(n?.onExitCode?.(w),this.config.error_patterns){let _=g||f;for(let R of this.config.error_patterns)if(_.includes(R.pattern)){s(new exports.ProviderError(R.message,this.providerStr));return}}if(v!==0){s(new exports.ProviderError(`Process exited with code ${v}: ${g.slice(0,500)}`,this.providerStr));return}i(f.trim());});})}};});u();u();u();function dc(t){let e=o=>o.replace(/[.+^${}()|[\]\\]/g,"\\$&"),r=t.split("/").map(o=>o==="**"?".*":o.split("*").map(e).join("[^/]*"));return new RegExp(`^${r.join("\\/")}$`)}function Fe(t,e){try{return dc(e).test(t)}catch{return false}}u();u();u();Re();var Rs=60,fr=30,gr=80,To="o200k_base",kc=`
41
42
 
42
43
  ---
43
44
 
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)}
45
+ `,mr="system_prompt\\n\\n---\\n\\nmessage",Ao="message",vc=16384,Ec=Object.keys(bo__default.default.special_tokens),Es,xs;function bs(){return Es??=jsTiktoken.getEncoding(To),Es}function xc(){return xs??=new lite.Tiktoken(bo__default.default),xs}function Rc(t){return Ec.some(e=>t.includes(e))}function bc(t){return t===void 0?vc:!Number.isFinite(t)||t<=0?0:Math.floor(t)}function Tc(t={}){let e=bc(t.pieceCacheMaxEntries),n=new Map,r=t.observePieceCache;return o=>{if(Rc(o))return r?.({type:"full_encode",reason:"special_token"}),bs().encode(o).length;let i=0,s=new RegExp(bo__default.default.pat_str,"ug");for(let a of o.matchAll(s)){let d=a[0],c=n.get(d);if(c!==void 0){n.delete(d),n.set(d,c),r?.({type:"hit",piece:d,tokenCount:c}),i+=c;continue}let l=xc().encode(d).length;if(r?.({type:"miss",piece:d,tokenCount:l}),e>0){if(n.size>=e){let f=n.keys().next().value;if(f!==void 0){let g=n.get(f);n.delete(f),r?.({type:"evict",piece:f,tokenCount:g});}}n.set(d,l);}i+=l;}return i}}function Io(t){let e=t.trim(),n=e.indexOf("/");return n===-1?e:e.slice(n+1)}function Ac(t){if(t===void 0)return Rs;if(!(!Number.isFinite(t)||!Number.isInteger(t))&&!(t<fr||t>gr))return t}function Ic(t){return typeof t=="number"&&Number.isInteger(t)&&t>0}function Pc(t){return /^gpt-5(?:$|[.-])/.test(t)}function hr(t={}){let e=t.provider?Io(t.provider):"",n=t.model??"",r={provider:e,model:n,encoding:To,exact:Pc(n)};return r.exact||(r.fallbackReason="vendor_tokenizer_unavailable"),r}function yr(t,e={}){return {tokenCount:bs().encode(t).length,tokenizer:hr(e)}}function Cc(t){let e=t.systemPrompt??"";return e?`${e}${kc}${t.message}`:t.message}function Po(t,e){return e(Cc(t))}function Sc(t={},e={}){let n=hr(t),r=Tc(e);return {metadata:n,countTokens:r}}function Co(t={}){return Sc(t)}function wr(t){let e=t.provider,n=Io(e),r=hr({provider:n,model:t.model}),o=Ac(t.inputBudgetPercent);if(o===void 0)return {resolved:false,requestedProvider:e,provider:n,model:t.model,reason:"invalid_input_budget_percent",tokenizer:r};let i=Oe(n);if(i.models.length===0)return {resolved:false,requestedProvider:e,provider:n,model:t.model,inputBudgetPercent:o,reason:"provider_catalog_unavailable",tokenizer:r};let s=i.models.find(a=>a.id===t.model);return s?Ic(s.contextWindowTokens)?{resolved:true,requestedProvider:e,provider:n,model:t.model,contextWindowTokens:s.contextWindowTokens,inputBudgetPercent:o,inputBudgetTokens:Math.floor(s.contextWindowTokens*o/100),tokenizer:r}:{resolved:false,requestedProvider:e,provider:n,model:t.model,inputBudgetPercent:o,reason:"context_window_tokens_unavailable",tokenizer:r}:{resolved:false,requestedProvider:e,provider:n,model:t.model,inputBudgetPercent:o,reason:"model_not_found",tokenizer:r}}var Nc=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()),Ts=zod.z.object({include:zod.z.array(zod.z.string()).optional()}).optional(),Dc=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:Nc.optional(),skills:Ts}).catchall(zod.z.unknown()),Mc=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()}),Uc=zod.z.number().finite().int().min(fr).max(gr),Lc=zod.z.object({inputBudgetPercent:Uc.optional()}).catchall(zod.z.unknown()),$c=zod.z.object({continuity:Lc.optional()}).catchall(zod.z.unknown()),Bc=zod.z.object({bin_resolution:zod.z.enum(["global_first","local_first"]).optional(),dreaming:$c.optional(),wi:zod.z.object({boards:zod.z.array(zod.z.unknown()).optional().catch(()=>{})}).catchall(zod.z.unknown()).optional().catch(()=>{})}).catchall(zod.z.unknown()),As=zod.z.object({agents:zod.z.array(Dc).optional(),hooks:zod.z.array(zod.z.unknown()).optional(),settings:Bc.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 bt=class extends Error{constructor(n,r){super(n);this.cause=r;this.name="ConfigLoadError";}cause};function _r(t){if(!t||typeof t!="string"||!t.trim())throw new bt("YAML content must be a non-empty string");let e;try{e=jsYaml.load(t);}catch(o){throw new bt(`YAML parse error: ${o.message}`,o)}let n=Hc(e),r=As.safeParse(n);if(!r.success)throw new bt(`Config validation error: ${r.error.message}`);return r.data}function kr(t){let e;try{e=Ua.readFileSync(t,"utf-8");}catch(n){throw new bt(`Cannot read file: ${t}`,n)}return _r(e)}function Hc(t){if(!t||typeof t!="object")return {agents:[]};let e=t,n;if(e.agents&&typeof e.agents=="object"&&!Array.isArray(e.agents)){let o=e.agents;n=Object.entries(o).map(([i,s])=>({id:i,...s&&typeof s=="object"?s:{}}));}else if(Array.isArray(e.agents))n=e.agents;else return {...e,agents:[]};let r=n.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}}u();var Tt=K.join("templates","agents"),At=K.join("templates","workflows");function Is(){try{let e=(typeof ge=="function"?ge:module$1.createRequire(typeof __filename<"u"?__filename:process.cwd()+"/")).resolve("@crewx/sdk/package.json");return K.dirname(e)}catch{return null}}function Gt(t){if(t&&Ua.existsSync(t))return t;let e=process.env.CREWX_SDK_TEMPLATES_PATH;if(e&&Ua.existsSync(e))return e;let n=Is();if(n){let o=K.join(n,Tt);if(Ua.existsSync(o))return o}let r=[K.join(__dirname,"..",Tt),K.join(__dirname,"..","..",Tt),K.join(__dirname,"..","..","..",Tt),K.join(process.cwd(),"packages","sdk",Tt),K.join(process.cwd(),Tt)];for(let o of r)if(Ua.existsSync(o))return o;throw new Error(`[@crewx/sdk] Templates directory not found.
46
+ `+(n?` package anchor: ${K.join(n,Tt)}
46
47
  `:` package anchor: (unresolved)
47
48
  `)+r.map(o=>` candidate: ${o}`).join(`
48
49
  `)+`
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)}
50
+ Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function So(){let t=Gt();return {yamlPath:K.join(t,"default.yaml"),dir:t}}function zc(t){if(t&&Ua.existsSync(t))return t;let e=process.env.CREWX_SDK_WORKFLOW_TEMPLATES_PATH;if(e&&Ua.existsSync(e))return e;let n=Is();if(n){let o=K.join(n,At);if(Ua.existsSync(o))return o}let r=[K.join(__dirname,"..",At),K.join(__dirname,"..","..",At),K.join(__dirname,"..","..","..",At),K.join(process.cwd(),"packages","sdk",At),K.join(process.cwd(),At)];for(let o of r)if(Ua.existsSync(o))return o;throw new Error(`[@crewx/sdk] Workflow templates directory not found.
51
+ `+(n?` package anchor: ${K.join(n,At)}
51
52
  `:` package anchor: (unresolved)
52
53
  `)+r.map(o=>` candidate: ${o}`).join(`
53
54
  `)+`
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
+ Set CREWX_SDK_WORKFLOW_TEMPLATES_PATH or pass options.templatesPath.`)}u();var et=class extends Error{constructor(e,n){let r=n.length>0?` Available: ${n.join(", ")}`:"";super(`Agent not found: "${e}".${r}`),this.name="AgentNotFoundError";}},Gc={claude:{id:"claude",provider:"cli/claude"},copilot:{id:"copilot",provider:"cli/copilot"},codex:{id:"codex",provider:"cli/codex"}};function vr(t,e){let n=t.startsWith("@")?t.slice(1):t,r=e.find(i=>i.id===n);if(r)return r;let o=Gc[n];if(o)return o;throw new et(t,e.map(i=>i.id))}qe();Dr();zt();u();u();function Hl(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Wl(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function In(t){if(!Hl(t)||Wl(t,"grok"))return t;let e=t.mode,n;switch(e){case "agent":n={...t,grok:{alwaysApprove:true,sandbox:"workspace"}},delete n.mode;break;case "agent-full-access":case "yolo":n={...t,grok:{alwaysApprove:true,sandbox:"off"}},delete n.mode;break;case "read-only":case "plan":n={...t,mode:"plan",grok:{alwaysApprove:false,sandbox:"read-only"}};break;default:return t}return n}function zo(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function na(t){if(t)return t.slice(t.lastIndexOf("/")+1)}function ql(t,e){let n=t.providerOptions;if(zo(n)){let i=na(e),s=i?n[i]:void 0;return zo(s)?{...s}:{...n}}let r=na(e),o=r?t[r]:void 0;return zo(o)?{...o}:void 0}function Mr(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t,n=typeof e.provider=="string"?e.provider.trim():void 0,r=n?.slice(n.lastIndexOf("/")+1)==="grok",o=Object.prototype.hasOwnProperty.call(e,"grok")||Object.prototype.hasOwnProperty.call(e,"providerOptions"),i=r&&!o?In(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=ql(i,s.provider);return a&&(s.providerOptions=a),s}function Go(t){if(t==null||t===false)return {active:false};if(t===true)return {active:true};if(typeof t=="object"){let e=t.mode;return {active:true,mode:e==="count"||e==="latch"?e:void 0}}return {active:false}}function Vo(t,e,n,r){if(!r.active)return {active:false,crossProvider:false};if(!t||typeof t!="object"||Array.isArray(t))return {active:false,crossProvider:false};let i=t[e];if(!i||typeof i!="object"||Array.isArray(i))return {active:false,crossProvider:false};let s=Mr(i.overdrive);if(!s||!s.provider||!s.model)return {active:false,crossProvider:false};let a=s.provider!==n;return {active:true,provider:s.provider,model:s.model,mode:s.mode,effort:s.effort,crossProvider:a,providerOptions:s.providerOptions}}function Jo(t,e){if(!t||typeof t!="object"||Array.isArray(t))return {};let r=t[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}u();u();var Gl=[/^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],Vl=/[;|&`$(){}!><\n\r]/,Jl=2,Kl=["*","**","*:*","* *","**/*"];function Xl(){let t={};for(let[e,n]of Object.entries(process.env))n!==void 0&&(Gl.some(r=>r.test(e))||(t[e]=n));return t}function Yl(t){if(Vl.test(t))throw new Error(`exec blocked: shell metacharacter detected in "${t}"`)}function Ql(t){return /^npx\s+@crewx\/[\w-]+/.test(t)}function Zl(t){if(Kl.includes(t.trim()))throw new Error(`exec config error: overly broad pattern "${t}" is not allowed`);if(!/^[\w./@-]/.test(t))throw new Error("exec config error: pattern must start with a command name")}function eu(t,e){let n=e.allow??[],r=e.deny??[];for(let o of [...n,...r])Zl(o);return r.some(o=>Fe(t,o))?false:Ql(t)?true:n.some(o=>Fe(t,o))}var ra=false;function tu(t){ra=t;}function Pn(t){if(!ra)return;let e=JSON.stringify({span:"template_exec",...t,timestamp:new Date().toISOString()});console.error(e);}function nu(t){let e=[],n="",r=false,o=false;for(let i=0;i<t.length;i++){let s=t[i];s==="'"&&!o?r=!r:s==='"'&&!r?o=!o:s===" "&&!r&&!o?n.length>0&&(e.push(n),n=""):n+=s;}return n.length>0&&e.push(n),e}function oa(t,e){let n=Date.now(),r=parseInt(process.env.CREWX_EXEC_DEPTH??"0",10);if(isNaN(r)||r>=Jl)return Pn({command:t,status:"denied",reason:"invalid or max recursion depth"}),"(exec blocked: max recursion depth reached)";try{Yl(t);}catch{return Pn({command:t,status:"denied",reason:"shell metacharacter detected"}),`(exec blocked: shell metacharacter detected in "${t}")`}if(!eu(t,e))return Pn({command:t,status:"denied",reason:"not in allow list"}),`(exec blocked: ${t})`;try{let o=nu(t),[i,...s]=o;if(!i)return `(exec failed: ${t})`;let a=Xl(),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()-n;return Pn({command:t,status:"allowed",allowed_by:"policy",duration_ms:c}),`<exec-output cmd="${t}">
55
56
  ${d.trim()}
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
- ${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 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(`
57
+ </exec-output>`}catch{return Pn({command:t,status:"error",reason:"execution failed"}),`(exec failed: ${t})`}}u();function ia(t){return t==null?"":String(t)}u();function sa(t,e){return `\`\`\`${e?.hash?.lang??""}
58
+ ${t??""}
59
+ \`\`\``}u();u();function Ko(t){let e=n=>String(n).padStart(2,"0");return `${t.getFullYear()}${e(t.getMonth()+1)}${e(t.getDate())}T${e(t.getHours())}${e(t.getMinutes())}${e(t.getSeconds())}`}function Xo(t){let e=t.toISOString();return `${e.slice(0,10)} ${e.slice(11,19)} UTC`}function Yo(t,e){if(!t)return "";if(t.length<=e)return t;let n=t.length-e;return `${t.substring(0,e)} (...+${n} chars)`}function Qo(t){return Array.isArray(t)||typeof t=="string"?t.length:0}function Zo(t){return typeof t!="string"?"":t.replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;")}var aa=["B","KB","MB","GB"];function ei(t){if(t===0)return "0 B";let e=Math.min(Math.floor(Math.log(t)/Math.log(1024)),aa.length-1);return `${Math.round(t/Math.pow(1024,e)*100)/100} ${aa[e]}`}function ti(t){if(!t)return "";try{let e=t instanceof Date?t:new Date(t);return isNaN(e.getTime())?"":Xo(e)}catch{return ""}}var Cn=class{hbs;execPolicy;execEnabled;constructor(e={}){this.hbs=ze__namespace.create(),this.execPolicy=e.execPolicy??{allow:[],deny:[]},this.execEnabled=e.execEnabled??true,this.registerHelpers();}registerHelpers(){let e=this.hbs,n=this.execPolicy,r=this.execEnabled;e.registerHelper("exec",function(o){return typeof o!="string"?"":r?new e.SafeString(oa(o,n)):"(exec disabled)"}),e.registerHelper("include",function(o){return new e.SafeString(ia(o))}),e.registerHelper("fenced_code",function(o,i){return new e.SafeString(sa(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 Yo(o,i)}),e.registerHelper("length",function(o){return Qo(o)}),e.registerHelper("escapeHandlebars",function(o){return new e.SafeString(Zo(o))}),e.registerHelper("formatFileSize",function(o){return ei(o)}),e.registerHelper("formatTimestamp",function(o){return ti(o)});}async render(e,n={}){return this.hbs.compile(e,{noEscape:true})(n)}};u();u();var Ur=class{async readFile(e){return promises.readFile(e,"utf-8")}async exists(e){try{return await promises.access(e),!0}catch{return false}}resolvePath(...e){return e.length===1?K.resolve(e[0]):K.resolve(K.join(...e))}isAbsolute(e){return K.isAbsolute(e)}async readdir(e){try{return await promises.readdir(e)}catch{return []}}},Mt=new Ur;var Ut=class{docs=new Map;fs;constructor(e){this.fs=e??Mt;}async load(e,n){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,n):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 n=this.docs.get(e);if(!n)return;let r=[];for(let o of n.content.split(`
59
60
  `)){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
+ `)}getPath(e){return this.docs.get(e)?.path}getNames(){return Array.from(this.docs.keys())}async buildContext(){let e={};for(let n of this.docs.keys()){let r=await this.getContent(n)??"",o=await this.getToc(n),i=this.getPath(n);e[n]={content:r,toc:o,...i?{path:i}:{}};}return e}async loadFromFile(e,n,r){try{let o=this.resolve(n,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 '${n}': ${i}`);}}resolve(e,n){return this.fs.isAbsolute(e)?e:n?this.fs.resolvePath(n,e):this.fs.resolvePath(e)}};u();u();var ke=class extends Error{constructor(n,r,o){super(n);this.layoutId=r;this.cause=o;this.name="LayoutLoadError";}layoutId;cause},ot=class extends Error{constructor(n,r=[],o){super(n);this.errors=r;this.cause=o;this.name="PropsValidationError";}errors;cause};var pu={validationMode:"lenient",fallbackLayoutId:"crewx/default"},Sn=class{layouts=new Map;options;constructor(e){this.options={...pu,...e,templatesPath:e?.templatesPath??Gt()},this.loadAllLayouts();}load(e,n){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 ke(`Fallback layout not found: ${this.options.fallbackLayoutId}`,this.options.fallbackLayoutId);return n&&Object.keys(n).length>0?{...r,defaultProps:{...r.defaultProps,...n}}:r}getLayoutIds(){return Array.from(this.layouts.keys())}hasLayout(e){if(this.layouts.has(e))return true;let n=this.normalizeLayoutId(e);return this.layouts.has(n)}reload(){this.layouts.clear(),this.loadAllLayouts();}registerLayout(e,n){if(!e||typeof e!="string")throw new ke("Layout ID must be a non-empty string",e);let r=typeof n=="string"?{template:n}:n,o=typeof r.template=="string"?r.template:"";if(!o||o.trim().length===0)throw new ke(`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[n,r]of Object.entries(e))try{this.registerLayout(n,r);}catch(o){console.warn(`Failed to register custom layout ${n}:`,o instanceof Error?o.message:o);}}loadAllLayouts(){let e=this.options.templatesPath;if(!Ua.existsSync(e))throw new ke(`Templates directory not found: ${e}`,void 0,new Error(`Directory does not exist: ${e}`));try{let n=Ua.readdirSync(e).filter(r=>r.endsWith(".yaml")||r.endsWith(".yml"));n.length===0&&console.warn(`No layout files found in ${e}`);for(let r of n){let o=r.replace(/\.(yaml|yml)$/,""),i=K__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(n){throw new ke(`Failed to read layouts directory: ${e}`,void 0,n instanceof Error?n:new Error(String(n)))}}loadLayoutFile(e,n){try{let r=Ua.readFileSync(e,"utf-8");if(!r||r.trim().length===0)throw console.warn(`Empty YAML file: ${e}, will use fallback`),new ke(`Empty YAML file: ${e}`,n,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 ke(`Invalid or empty YAML in ${e}`,n,new Error("YAML parsing returned null/undefined or non-object"));if(o.layouts&&typeof o.layouts=="object"){let i=this.resolveLayoutEntry(o.layouts,n);if(!i||i.template.trim().length===0)throw console.warn(`Empty or missing layout template in ${e} for ${n}`),new ke(`Layout template not found or empty in layouts map: ${n}`,n);let s=i.propsSchema||o.propsSchema||{};return {id:`crewx/${n}`,version:o.version||"1.0.0",description:o.description||`CrewX ${n} 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 ke(`Layout template is missing or empty in ${e}`,n);return {id:o.id||`crewx/${n}`,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 ke(`Failed to load layout file: ${e}`,n,r instanceof Error?r:new Error(String(r)))}}parsePropsSchema(e){let n={};for(let[r,o]of Object.entries(e))typeof o=="object"&&o!==null&&(n[r]=o);return n}extractDefaultProps(e){let n={};for(let[r,o]of Object.entries(e))o&&typeof o=="object"&&("defaultValue"in o?n[r]=o.defaultValue:"default"in o&&(n[r]=o.default));return n}normalizeLayoutId(e){return e?e.includes("/")?e:`crewx/${e}`:this.options.fallbackLayoutId}resolveLayoutEntry(e,n){let r=new Set;if(n)if(r.add(n),n.includes("/")){let o=n.split("/"),i=o[o.length-1];i&&r.add(i);}else r.add(`crewx/${n}`);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}}}};u();u();u();function Lt(t){return String(Math.floor(Math.abs(t))).padStart(2,"0")}function On(t){if(!(t instanceof Date)||Number.isNaN(t.getTime()))return "";let e=-t.getTimezoneOffset(),n=e>=0?"+":"-";return `${t.getFullYear()}-${Lt(t.getMonth()+1)}-${Lt(t.getDate())}T${Lt(t.getHours())}:${Lt(t.getMinutes())}:${Lt(t.getSeconds())}${n}${Lt(e/60)}:${Lt(e%60)}`}function fu(t){return t.map(e=>{let n=typeof e?.timestamp=="number"?e.timestamp:null;return n===null?e:{...e,created_at:On(new Date(n))}})}function gu(t){let e=[];for(let n of t)n?.isAssistant&&n?.metadata?.agent_id?e.push(String(n.metadata.agent_id)):!n?.isAssistant&&n?.metadata?.caller_agent_id&&e.push(String(n.metadata.caller_agent_id));return Array.from(new Set(e))}function ua(...t){let e=t[t.length-1],n=t[0],r=t[1],o=typeof t[2]=="string"?t[2]:"",i=typeof t[3]=="string"?t[3]:"";if(!Array.isArray(n)||n.length===0||!(e&&typeof e.fn=="function"))return "";let a=gu(n),d=a.length>0?a[0]:"",c=Date.now(),l={messages:fu(n),platform:typeof r=="string"?r:"",messagesCount:n.length,agentIds:a,primaryAgentId:d,currentAgentId:o,threadId:i,now:On(new Date(c))};return e.fn(l)}u();var Nn=class{defaultMode;constructor(e={}){this.defaultMode=e.defaultMode??"lenient";}validate(e,n,r=this.defaultMode){let o=[],i=this.validateObject(e??{},n,r,["props"],o);if(o.length>0&&r==="strict")throw new ot("Props validation failed in strict mode",o);return {valid:o.length===0,props:i,errors:o}}validateObject(e,n,r,o,i){let s={};if(r==="strict")for(let a of Object.keys(e))n[a]||i.push({path:this.buildPath([...o,a]),message:`Unknown prop '${a}'`,value:e[a]});for(let[a,d]of Object.entries(n)){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,n,r,o,i){let s=this.buildPath(r);if(this.isNil(e)){if(n.isRequired&&i.push({path:s,message:`Required prop '${r[r.length-1]}' is missing`}),n.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(n.defaultValue)};if(n.type==="shape"&&n.shape){let d=this.applyDefaults(n.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}let a=this.validateType(e,n,r,o,i);if(!a.valid){if(n.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}),n.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(n.defaultValue)};if(n.type==="shape"&&n.shape){let d=this.applyDefaults(n.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}return {shouldAssign:true,value:a.value}}validateType(e,n,r,o,i){let{type:s}=n;switch(s){case "string":return this.validateString(e,n);case "number":return this.validateNumber(e,n);case "bool":return this.validateBoolean(e);case "array":return this.validateArray(e,n);case "arrayOf":return this.validateArrayOf(e,n,r,o,i);case "object":return this.validatePlainObject(e);case "shape":return this.validateShape(e,n,r,o,i);case "oneOfType":return this.validateOneOfType(e,n);case "func":return this.validateFunction(e);case "node":return {valid:true,value:e};default:return {valid:true,value:e}}}validateString(e,n){return typeof e!="string"?{valid:false,error:`Expected string, got ${this.describeType(e)}`}:n.oneOf&&!n.oneOf.includes(e)?{valid:false,error:`Expected one of: ${n.oneOf.join(", ")}`}:n.minLength!==void 0&&e.length<n.minLength?{valid:false,error:`String length must be >= ${n.minLength}`}:n.maxLength!==void 0&&e.length>n.maxLength?{valid:false,error:`String length must be <= ${n.maxLength}`}:n.pattern&&!new RegExp(n.pattern).test(e)?{valid:false,error:`String does not match pattern ${n.pattern}`}:{valid:true,value:e}}validateNumber(e,n){return typeof e!="number"||Number.isNaN(e)?{valid:false,error:`Expected number, got ${this.describeType(e)}`}:n.min!==void 0&&e<n.min?{valid:false,error:`Number must be >= ${n.min}`}:n.max!==void 0&&e>n.max?{valid:false,error:`Number must be <= ${n.max}`}:n.oneOf&&!n.oneOf.includes(e)?{valid:false,error:`Expected one of: ${n.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,n){return Array.isArray(e)?n.minLength!==void 0&&e.length<n.minLength?{valid:false,error:`Array length must be >= ${n.minLength}`}:n.maxLength!==void 0&&e.length>n.maxLength?{valid:false,error:`Array length must be <= ${n.maxLength}`}:{valid:true,value:[...e]}:{valid:false,error:`Expected array, got ${this.describeType(e)}`}}validateArrayOf(e,n,r,o,i){let s=this.validateArray(e,n);if(!s.valid)return s;let a=[],d=n.itemType,c=n.itemOneOf,l=i.length;return s.value.forEach((f,g)=>{let m=[...r,String(g)];if(d){let k=this.validateType(f,{type:d},m,o,i);k.valid?a.push(k.value):i.push({path:this.buildPath(m),message:k.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,n,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,n.shape??{},o,r,i);return {valid:i.length===s,value:a}}validateOneOfType(e,n){let r=n.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,n){switch(n){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 n={};for(let[r,o]of Object.entries(e)){if(o.defaultValue!==void 0){n[r]=this.cloneValue(o.defaultValue);continue}if(o.type==="shape"&&o.shape){let i=this.applyDefaults(o.shape);Object.keys(i).length>0&&(n[r]=i);}}return n}cloneValue(e){if(Array.isArray(e))return e.map(n=>this.cloneValue(n));if(this.isPlainObject(e)){let n={};for(let[r,o]of Object.entries(e))n[r]=this.cloneValue(o);return n}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 Dn=class{handlebars;propsValidator;constructor(e){this.handlebars=ze__namespace.default.create(),this.propsValidator=e??new Nn,this.registerHelpers();}render(e,n,r={}){try{let o=this.prepareRenderContext(e,n,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,n,r="lenient"){return this.executeValidation(e,n,r)}resolveProps(e,n,r="lenient"){let o=this.mergeProps(e.defaultProps,n);return !e.propsSchema||Object.keys(e.propsSchema).length===0?{valid:true,props:o,errors:[]}:this.executeValidation(o,e.propsSchema,r)}prepareRenderContext(e,n,r){let{validationMode:o="lenient",skipValidation:i=false}=r,s=i?this.mergeProps(e.defaultProps,n.props):this.resolveProps(e,n.props,o).props;return {...n,vars:this.sanitizeVars(n.vars),props:s}}registerHelpers(){this.handlebars.registerHelper("formatConversation",ua),ze__namespace.default.helpers.each&&this.handlebars.registerHelper("each",ze__namespace.default.helpers.each),ze__namespace.default.helpers.if&&this.handlebars.registerHelper("if",ze__namespace.default.helpers.if),ze__namespace.default.helpers.unless&&this.handlebars.registerHelper("unless",ze__namespace.default.helpers.unless),ze__namespace.default.helpers.with&&this.handlebars.registerHelper("with",ze__namespace.default.helpers.with),this.handlebars.registerHelper("eq",function(e,n){return e===n}),this.handlebars.registerHelper("ne",function(e,n){return e!==n}),this.handlebars.registerHelper("gt",function(e,n){return e>n}),this.handlebars.registerHelper("lt",function(e,n){return e<n}),this.handlebars.registerHelper("json",function(e){return new ze__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 n=["B","KB","MB","GB"],r=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/Math.pow(1024,r)*100)/100+" "+n[r]});}executeValidation(e,n,r){try{return this.propsValidator.validate(e,n,r)}catch(o){if(o instanceof ot&&o.errors&&o.errors.length>0){let i=o.errors[0];if(i)throw new ot(i.message,o.errors)}throw o}}mergeProps(e,n){let r=this.cloneDeep(e??{});return n?this.deepMerge(r,n):r}deepMerge(e,n){for(let[r,o]of Object.entries(n)){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(n=>this.cloneDeep(n));if(this.isPlainObject(e)){let n={};for(let[r,o]of Object.entries(e))n[r]=this.cloneDeep(o);return n}return e}isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}sanitizeVars(e){if(!e)return {};let n={...e};if(typeof e.user_input=="string"){n.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;");n.user_input=this.handlebars.escapeExpression(r);}return n}};u();var ni="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function mu(t){let e=crypto$1.randomBytes(t*2),n="";for(let r=0;r<e.length&&n.length<t;r++){let o=e[r];o<248&&(n+=ni[o%62]);}for(;n.length<t;)n+=ni[crypto$1.randomBytes(1)[0]%62];return n}function it(t){return `${t}_${mu(8)}`}function hu(t,e){let{createHash:n}=ge("crypto"),r=n("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+=ni[s%62];return `${t}_${i}`}u();function fa(t,e){return n=>{try{let r=e(n);r instanceof Promise&&r.catch(o=>{console.error(`[crewx] event listener error (${t}): ${o instanceof Error?o.message:String(o)}`);});}catch(r){console.error(`[crewx] event listener error (${t}): ${r instanceof Error?r.message:String(r)}`);}}}var Mn=class{_emitter=new events.EventEmitter;on(e,n){let r=fa(e,n);return this._emitter.on(e,r),()=>this._emitter.off(e,r)}once(e,n){let r=fa(e,n);return this._emitter.once(e,r),()=>this._emitter.off(e,r)}emit(e,n){this._emitter.emit(e,n);}};u();function ri(t){let e=new Map,n=r=>r.startsWith(`${t}::`)?r:`${t}::${r}`;return {async get(r){let o=e.get(n(r));return o?o.value:void 0},async set(r,o){e.set(n(r),{value:o});},async delete(r){return e.delete(n(r))},async list(r){let o=r?n(r):`${t}::`,i=[];for(let s of e.keys())s.startsWith(o)&&i.push(s.slice(t.length+2));return i}}}u();var oi=new async_hooks.AsyncLocalStorage;function _u(){return oi}function ku(t,e){return oi.run(t,e)}function ii(t){let e=t.log??t.logger??{debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},n=t.agentRunner??{run:async()=>({output:""})},r=t.db??{get:async()=>{},set:async()=>{},delete:async()=>false,list:async()=>[]},o=t.storage??{put:async()=>"",get:async()=>{},delete:async()=>false},i=t.audit??{log:async()=>{}},s=t.onInbound??(async()=>({accepted:true})),a=t.onEmitEvent??(async()=>({accepted:true})),d=t.onUpdateMessage??(async()=>{}),c=t.onResolveUser??(async g=>({userId:g,displayName:g})),l=async g=>{let m=oi.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 k="text"in g?g.text:"";m.res.status(200).json({text:k});},f=t.httpRouter??{registerRoute:()=>{e.warn("httpRouter not configured \u2014 registerRoute is a no-op");}};return {instanceId:t.instanceId,config:t.config,capabilities:t.capabilities,log:e,agentRunner:n,db:r,storage:o,audit:i,abortSignal:t.abortSignal??new AbortController().signal,httpRouter:f,inbound:s,emitEvent:a,updateMessage:d,resolveUser:c,respondSync:l}}ft();u();var vu=/^-\s*Status:\s*active/m,Eu=/^---\n([\s\S]*?)\n---/,xu=/^type:\s*goal\s*$/m;async function ga(t,e=Mt,n){let r=typeof n=="string"?[n]:Array.isArray(n)?n:void 0;if(r){let a=[];for(let d of r){let c=e.resolvePath(t,d);await e.exists(c)&&a.push(await e.readFile(c));}return a.join(`
61
62
  ---
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
+ `)}let i=(await e.readdir(t)).filter(a=>a.endsWith(".md"));if(i.length===0)return "";let s=[];for(let a of i){let d=e.resolvePath(t,a),c=await e.readFile(d),l=Eu.exec(c);!l||!xu.test(l[1])||vu.test(c)&&s.push(c);}return s.join(`
63
64
  ---
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
+ `)}u();function Ru(){let t=new Date,e=t.getFullYear(),n=String(t.getMonth()+1).padStart(2,"0"),r=String(t.getDate()).padStart(2,"0");return `${e}-${n}-${r}`}async function ma(t,e=Mt){let n=e.resolvePath(t,`${Ru()}.md`);return await e.exists(n)?e.readFile(n):""}u();Jt();ft();function si(t){if(t.startsWith("cli/"))return exports.BUILTIN_ADAPTERS[t.slice(4)]}function Tu(t,e={}){if(!t.startsWith("cli/"))return true;let r=(e.lookupAdapter??si)(t);if(!r?.command)return false;let o=vn(r.command,{env:e.env});return K__namespace.default.isAbsolute(o)}function ha(t,e={}){if(!Array.isArray(t))return t;if(t.length===0)return "cli/claude";for(let n of t)if(Tu(n,e))return n;return t[0]}u();var Un=new async_hooks.AsyncLocalStorage;function ai(t){if(t)return {parentTaskId:t.parentTaskId??null,rootTraceId:t.rootTraceId,callerAgentId:t.callerAgentId??null}}u();u();var Lr="<crewx_card";function Ln(t){return t===" "||t===" "||t===`
66
+ `||t==="\r"||t==="\f"}function Iu(t){if(!t)return false;let e=t.charCodeAt(0);return e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||t==="_"||t===":"||t==="-"}function Pu(t){return t===void 0||Ln(t)||t==="/"||t===">"}function ya(t,e){let n=t[e],r=e+1;for(;r<t.length;){if(t[r]===n)return {end:r+1,value:t.slice(e+1,r)};r++;}return {end:t.length,value:t.slice(e+1)}}function Cu(t,e){if(t[e]==='"'||t[e]==="'")return ya(t,e);let n=e;for(;n<t.length&&!Ln(t[n])&&t[n]!==">";)n++;return {end:n,value:t.slice(e,n)}}function Su(t,e){let n=Object.create(null),r=e+Lr.length,o=false;for(;r<t.length;){let i=t[r];if(i===">")return {end:r+1,closed:true,attrs:n,privileged:o};if(Ln(i)||i==="/"){r++;continue}if(i==='"'||i==="'"){r=ya(t,r).end;continue}let s=r;for(;r<t.length&&Iu(t[r]);)r++;if(r===s){r++;continue}let a=t.slice(s,r);for(a==="proof"&&(o=true);r<t.length&&Ln(t[r]);)r++;if(t[r]!=="="){n[a]="";continue}for(r++;r<t.length&&Ln(t[r]);)r++;let d=Cu(t,r);n[a]=d.value,r=d.end;}return {end:t.length,closed:false,attrs:n,privileged:o}}function di(t,e){let n=Su(t,e);return {start:e,end:n.end,raw:t.slice(e,n.end),closed:n.closed,attrs:n.attrs,privileged:n.privileged}}function $n(t){let e=[],n=0;for(;n<t.length;){let r=t.indexOf(Lr,n);if(r<0)break;if(!Pu(t[r+Lr.length])){n=r+Lr.length;continue}let o=di(t,r);if(e.push(o),!o.closed)break;n=o.end;}return e}function wa(t){return t&&$n(t).find(r=>!!r.attrs.run_id?.trim())?.attrs.run_id?.trim()||void 0}u();u();var x=class extends Error{constructor(n,r=n,o){super(r);this.code=n;this.currentRevision=o;}code;currentRevision;name="UiRuntimeError"},ve=class extends Error{constructor(n){super("UI instance database operation will be retried");this.cause=n;}cause;name="UiRetryableDatabaseError"},Ae=class extends Error{constructor(n){super("UI instance revision reservation conflict");this.currentRevision=n;}currentRevision;name="UiReservationConflictError"};var Ou=/(?:proof|token|secret|password|cookie|authorization|private[_-]?key|stack|exception|plugin[_-]?text)/i,Nu=/(?:url|uri|endpoint|path|file(?:name|path)?|cwd|directory|dir|folder)$/i,Du=/<\/?[A-Za-z][^>]*>/,Mu=/^(?:[A-Za-z]:[\\/]|\\\\|~[\\/]|\/)/,Uu=/^(?:https?|file|ftp|ws|wss):\/\//i;function Ge(){throw new x("INPUT_INVALID","JSON value is not projection-safe")}function Lu(t){let e=Object.getPrototypeOf(t);return e===Object.prototype||e===null}function ci(t,e,n,r){if(e>8&&Ge(),t===null||typeof t=="string"||typeof t=="boolean")return typeof t=="string"&&(Du.test(t)||Uu.test(t)||Mu.test(t))&&Ge(),t;if(typeof t=="number")return Number.isFinite(t)||Ge(),t;(typeof t!="object"||t===void 0||typeof t=="function"||typeof t=="bigint")&&Ge();let o=t;n.has(o)&&Ge(),n.add(o);try{if(Array.isArray(t))return t.map(s=>ci(s,e+1,n));Lu(o)||Ge();let i={};for(let[s,a]of Object.entries(t))(Ou.test(s)||Nu.test(s))&&Ge(),i[s]=ci(a,e+1,n,s);return i}finally{n.delete(o);}}function oe(t){let e=ci(t,0,new Set);return (e===null||Array.isArray(e)||typeof e!="object")&&Ge(),e}function me(t){try{let e=JSON.stringify(t);return e===void 0&&Ge(),e}catch{Ge();}}function li(t){return Array.isArray(t)?t.map(li):t!==null&&typeof t=="object"?Object.fromEntries(Object.keys(t).sort().map(e=>[e,li(t[e])])):t}function _a(t){return me(li(t))}function Bn(t){return Buffer.byteLength(t,"utf8")}var ka="[workflow card omitted from AI context]",$u="[workflow UI instance omitted from AI context]",Bu=/\{\s*"instanceId"\s*:\s*"uic_[A-Za-z0-9_-]+"\s*\}/g;function $r(t){return typeof t=="string"?t.replace(Bu,$u):""}function Br(t){if(typeof t!="string"||t.length===0)return "";let e="",n=0;for(let r of $n(t))if(e+=t.slice(n,r.start),e+=r.privileged?ka:r.raw,n=r.end,!r.closed)break;return e+=t.slice(n),e}function ju(t){return t.replace(/</g,"&lt;").replace(/>/g,"&gt;")}function Fu(t,e){if(typeof t!="string")return "";let n=e?Br(t):t,r=e?$r(n):n;return ju(r)}function ui(t){return t.map(e=>({...e,text:Fu(e.text,e.isAssistant)}))}function tn(t,e){let n=ui(t);if(!e||e.length===0)return n;let r=[];for(let o of e)try{if(Object.keys(o).sort().join(",")!=="availableActions,definition,facts,instanceId,pendingDecision,recentChanges,revision"||!/^uic_[A-Za-z0-9_-]+$/.test(o.instanceId))continue;let s=oe(o),a=JSON.stringify(s);if(typeof a!="string"||Bn(a)>64*1024)continue;r.push(s);}catch{}return r.length===0?n:[...n,{text:`CrewX workflow context:
67
+ ${JSON.stringify(r)}`,isAssistant:true}]}function pi(t){return ui(t.messages.map(e=>({text:e.text,isAssistant:e.isAssistant,timestamp:e.timestamp,metadata:e.metadata,files:void 0})))}u();ft();gt();u();u();var le=class{resolveDbPath(){return process.env.CREWX_DB?process.env.CREWX_DB:process.env.CREWX_TRACES_DB?process.env.CREWX_TRACES_DB:K.join(Ri__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 Ua.existsSync(e??this.resolveDbPath())}};u();function Q(t){let e=ge("better-sqlite3"),{drizzle:n}=ge("drizzle-orm/better-sqlite3"),r=new e(t);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:n(r),runRaw:(o,i=[])=>r.prepare(o).run(...i),close:()=>r.close()}}u();var va=new Set,Gu={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 gi(t,e){return (t.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function Vu(t,e){if(e>0||!gi(t,"tasks"))return;let n=t.all("PRAGMA table_info(tasks)"),r=new Set(n.map(o=>o.name));for(let[o,i]of Object.entries(Gu))r.has(o)||t.run(`ALTER TABLE tasks ADD COLUMN ${o} ${i}`);}var Ju={"0002_normalize_task_names":{workspace_name:"TEXT",project_name:"TEXT"}};function Ku(t,e,n){if(!gi(t,"__drizzle_migrations")||!gi(t,"tasks"))return;let r=t.all(n`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(s=>s.hash)),i=JSON.parse(Ua.readFileSync(K__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let s of i.entries){let a=Ju[s.tag];if(!a)continue;let d=K__namespace.default.join(e,`${s.tag}.sql`);if(!Ua.existsSync(d))continue;let c=Ua.readFileSync(d,"utf-8"),l=crypto$1.createHash("sha256").update(c).digest("hex");if(o.has(l))continue;let f=t.all("PRAGMA table_info(tasks)"),g=new Set(f.map(m=>m.name));for(let[m,k]of Object.entries(a))g.has(m)||(t.run(`ALTER TABLE tasks ADD COLUMN ${m} ${k}`),g.add(m));}}function Xu(t,e,n){let r=t.all(n`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(s=>s.hash)),i=JSON.parse(Ua.readFileSync(K__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let s of i.entries){let a=K__namespace.default.join(e,`${s.tag}.sql`);if(!Ua.existsSync(a))continue;let d=Ua.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(h=>h.trim()).filter(Boolean).every(h=>/^ALTER\s+TABLE\s+.+\s+ADD\s+/i.test(h)))continue;f.every(({table:h,column:v})=>t.all(`PRAGMA table_info("${h}")`).some(_=>_.name===v))&&t.run(n`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${c}, ${s.when})`);}}function Fr(t){let{migrate:e}=ge("drizzle-orm/better-sqlite3/migrator"),{sql:n}=ge("drizzle-orm"),r=[K__namespace.default.join(__dirname,"../migrations"),K__namespace.default.join(__dirname,"migrations"),K__namespace.default.join(__dirname,"../../../../drizzle/migrations"),K__namespace.default.join(process.cwd(),"drizzle/migrations")],o=r.find(c=>Ua.existsSync(K__namespace.default.join(c,"meta/_journal.json")));if(!o)throw new Error(`migrations folder not found. Searched:
65
68
  ${r.join(`
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=?,
69
+ `)}`);let i=t.get(n`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'`),s=0;i?.cnt&&(s=t.get(n`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0),Vu(t,s),i?.cnt&&(Xu(t,o,n),Ku(t,o,n)),e(t,{migrationsFolder:o});let d=(t.get(n`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 he(t,e){va.has(e)||(Fr(t),va.add(e));}u();var C=class extends Error{code;cause;constructor(e,n,r){super(n),this.name="RepositoryError",this.code=e,this.cause=r,Object.setPrototypeOf(this,new.target.prototype);}};u();u();var jn=sqliteCore.sqliteTable("workspaces",{id:sqliteCore.text("id").primaryKey(),slug:sqliteCore.text("slug").notNull().unique(),name:sqliteCore.text("name").notNull(),workspace_path:sqliteCore.text("workspace_path"),description:sqliteCore.text("description"),is_active:sqliteCore.integer("is_active").notNull().default(1),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()});u();var p=sqliteCore.sqliteTable("tasks",{id:sqliteCore.text("id").primaryKey(),agent_id:sqliteCore.text("agent_id").notNull(),user_id:sqliteCore.text("user_id"),prompt:sqliteCore.text("prompt").notNull(),mode:sqliteCore.text("mode").notNull().default("execute"),status:sqliteCore.text("status").notNull().default("running"),result:sqliteCore.text("result"),error:sqliteCore.text("error"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),metadata:sqliteCore.text("metadata"),workspace_id:sqliteCore.text("workspace_id"),trace_id:sqliteCore.text("trace_id"),parent_task_id:sqliteCore.text("parent_task_id"),caller_agent_id:sqliteCore.text("caller_agent_id"),model:sqliteCore.text("model"),platform:sqliteCore.text("platform").default("cli"),crewx_version:sqliteCore.text("crewx_version"),input_tokens:sqliteCore.integer("input_tokens").default(0),output_tokens:sqliteCore.integer("output_tokens").default(0),cost_usd:sqliteCore.real("cost_usd").default(0),pid:sqliteCore.integer("pid"),rendered_prompt:sqliteCore.text("rendered_prompt"),command:sqliteCore.text("command"),coding_agent_command:sqliteCore.text("coding_agent_command"),exit_code:sqliteCore.integer("exit_code"),logs:sqliteCore.text("logs"),thread_id:sqliteCore.text("thread_id"),workspace_ref:sqliteCore.text("workspace_ref"),project_id:sqliteCore.text("project_id"),project_ref:sqliteCore.text("project_ref"),cached_input_tokens:sqliteCore.integer("cached_input_tokens").default(0),run_epoch:sqliteCore.integer("run_epoch").default(0)},t=>({idx_tasks_agent_id:sqliteCore.index("idx_tasks_agent_id").on(t.agent_id),idx_tasks_status:sqliteCore.index("idx_tasks_status").on(t.status),idx_tasks_started_at:sqliteCore.index("idx_tasks_started_at").on(t.started_at),idx_tasks_trace_id:sqliteCore.index("idx_tasks_trace_id").on(t.trace_id),idx_tasks_parent_task_id:sqliteCore.index("idx_tasks_parent_task_id").on(t.parent_task_id),idx_tasks_crewx_version:sqliteCore.index("idx_tasks_crewx_version").on(t.crewx_version),idx_tasks_pid:sqliteCore.index("idx_tasks_pid").on(t.pid),idx_tasks_thread_id:sqliteCore.index("idx_tasks_thread_id").on(t.thread_id),idx_tasks_workspace_id:sqliteCore.index("idx_tasks_workspace_id").on(t.workspace_id),idx_tasks_workspace_ref:sqliteCore.index("idx_tasks_workspace_ref").on(t.workspace_ref),idx_tasks_project_id:sqliteCore.index("idx_tasks_project_id").on(t.project_id),idx_tasks_ws_started:sqliteCore.index("idx_tasks_ws_started").on(t.workspace_id,t.started_at)}));u();var Fn=sqliteCore.sqliteTable("threads",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").references(()=>jn.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)},t=>({idx_threads_updated_at:sqliteCore.index("idx_threads_updated_at").on(t.updated_at),idx_threads_workspace_id:sqliteCore.index("idx_threads_workspace_id").on(t.workspace_id),idx_threads_ws_updated:sqliteCore.index("idx_threads_ws_updated").on(t.workspace_id,t.updated_at),idx_threads_title:sqliteCore.index("idx_threads_title").on(t.title)}));u();var mt=sqliteCore.sqliteTable("spans",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>p.id,{onDelete:"set null"}),parent_span_id:sqliteCore.text("parent_span_id").references(()=>mt.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")},t=>({idx_spans_task_id:sqliteCore.index("idx_spans_task_id").on(t.task_id),idx_spans_parent_span_id:sqliteCore.index("idx_spans_parent_span_id").on(t.parent_span_id)}));u();sqliteCore.sqliteTable("tool_calls",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>p.id,{onDelete:"cascade"}),session_id:sqliteCore.text("session_id"),tool_name:sqliteCore.text("tool_name").notNull(),files:sqliteCore.text("files"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),duration_ms:sqliteCore.integer("duration_ms"),timestamp:sqliteCore.text("timestamp").notNull()},t=>({idx_tool_calls_task_id:sqliteCore.index("idx_tool_calls_task_id").on(t.task_id),idx_tool_calls_tool_name:sqliteCore.index("idx_tool_calls_tool_name").on(t.tool_name),idx_tool_calls_timestamp:sqliteCore.index("idx_tool_calls_timestamp").on(t.timestamp)}));u();sqliteCore.sqliteTable("thread_boxes",{id:sqliteCore.text("id").primaryKey(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>Fn.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()},t=>({idx_thread_boxes_thread_id:sqliteCore.index("idx_thread_boxes_thread_id").on(t.thread_id),idx_thread_boxes_seq:sqliteCore.index("idx_thread_boxes_seq").on(t.thread_id,t.seq),uniq_thread_boxes_thread_seq:sqliteCore.unique().on(t.thread_id,t.seq)}));u();sqliteCore.sqliteTable("request_logs",{id:sqliteCore.text("id").primaryKey(),path:sqliteCore.text("path").notNull(),method:sqliteCore.text("method").notNull(),status_code:sqliteCore.integer("status_code").notNull(),duration_ms:sqliteCore.integer("duration_ms").notNull(),ip:sqliteCore.text("ip"),request_headers:sqliteCore.text("request_headers"),response_headers:sqliteCore.text("response_headers"),request_body:sqliteCore.text("request_body"),response_body:sqliteCore.text("response_body"),query:sqliteCore.text("query"),user_id:sqliteCore.text("user_id"),project_id:sqliteCore.text("project_id"),partition_key:sqliteCore.text("partition_key").notNull(),timestamp:sqliteCore.text("timestamp").notNull().default(drizzleOrm.sql`(datetime('now'))`),metadata:sqliteCore.text("metadata")},t=>({idx_request_logs_timestamp:sqliteCore.index("idx_request_logs_timestamp").on(t.timestamp),idx_request_logs_path:sqliteCore.index("idx_request_logs_path").on(t.path),idx_request_logs_status_code:sqliteCore.index("idx_request_logs_status_code").on(t.status_code),idx_request_logs_partition_key:sqliteCore.index("idx_request_logs_partition_key").on(t.partition_key)}));u();sqliteCore.sqliteTable("usage_limit_snapshots",{id:sqliteCore.text("id").primaryKey(),provider:sqliteCore.text("provider").notNull(),account_ref:sqliteCore.text("account_ref").notNull().default("default"),limit_window:sqliteCore.text("limit_window").notNull(),bucket_start:sqliteCore.text("bucket_start").notNull(),captured_at:sqliteCore.text("captured_at").notNull(),used_percent:sqliteCore.integer("used_percent").notNull(),remaining_percent:sqliteCore.integer("remaining_percent").notNull(),resets_at:sqliteCore.text("resets_at"),source:sqliteCore.text("source").notNull(),metadata:sqliteCore.text("metadata")},t=>({uniq_usage_limit_snapshots_bucket:sqliteCore.uniqueIndex("uniq_usage_limit_snapshots_bucket").on(t.provider,t.account_ref,t.limit_window,t.bucket_start),idx_usage_limit_snapshots_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_window_bucket").on(t.limit_window,t.bucket_start),idx_usage_limit_snapshots_provider_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_provider_window_bucket").on(t.provider,t.limit_window,t.bucket_start)}));u();sqliteCore.sqliteTable("usage_reports",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),month:sqliteCore.text("month").notNull(),generated_at:sqliteCore.text("generated_at").notNull(),source_range:sqliteCore.text("source_range").notNull(),tier:sqliteCore.text("tier").notNull(),total_tokens:sqliteCore.integer("total_tokens").notNull(),total_cost_usd:sqliteCore.real("total_cost_usd").notNull(),payload:sqliteCore.text("payload").notNull(),payload_hash:sqliteCore.text("payload_hash"),signature:sqliteCore.text("signature"),signed_at:sqliteCore.text("signed_at"),issuer:sqliteCore.text("issuer")},t=>({uniq_usage_reports_ws_month:sqliteCore.uniqueIndex("uniq_usage_reports_ws_month").on(t.workspace_id,t.month)}));u();sqliteCore.sqliteTable("notifications",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id"),task_id:sqliteCore.text("task_id"),thread_id:sqliteCore.text("thread_id"),source:sqliteCore.text("source").notNull().default("agent"),level:sqliteCore.text("level").notNull().default("info"),title:sqliteCore.text("title").notNull(),body:sqliteCore.text("body"),target_user_id:sqliteCore.text("target_user_id"),created_at:sqliteCore.text("created_at").notNull(),metadata:sqliteCore.text("metadata")},t=>({idx_notifications_ws_created:sqliteCore.index("idx_notifications_ws_created").on(t.workspace_id,drizzleOrm.sql`${t.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()},t=>({pk:sqliteCore.primaryKey({columns:[t.notification_id,t.user_id]})}));u();sqliteCore.sqliteTable("agent_suggestions",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id").notNull(),task_id:sqliteCore.text("task_id"),type:sqliteCore.text("type").notNull(),status:sqliteCore.text("status").notNull().default("pending"),payload:sqliteCore.text("payload").notNull(),applied_commit_sha:sqliteCore.text("applied_commit_sha"),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()},t=>({idx_agent_suggestions_ws_agent:sqliteCore.index("idx_agent_suggestions_ws_agent").on(t.workspace_id,t.agent_id),idx_agent_suggestions_ws_created:sqliteCore.index("idx_agent_suggestions_ws_created").on(t.workspace_id,t.created_at)}));u();sqliteCore.sqliteTable("ui_instances",{id:sqliteCore.text("id").primaryKey().notNull(),definition_id:sqliteCore.text("definition_id").notNull(),definition_version:sqliteCore.integer("definition_version").notNull(),definition_hash:sqliteCore.text("definition_hash").notNull(),workspace_id:sqliteCore.text("workspace_id").notNull(),thread_id:sqliteCore.text("thread_id").notNull(),anchor_task_id:sqliteCore.text("anchor_task_id"),domain_ref_json:sqliteCore.text("domain_ref_json").notNull(),state_json:sqliteCore.text("state_json").notNull(),revision:sqliteCore.integer("revision").notNull().default(0),status:sqliteCore.text("status").notNull().default("active"),granted_capabilities_json:sqliteCore.text("granted_capabilities_json").notNull().default("[]"),created_at:sqliteCore.integer("created_at").notNull(),updated_at:sqliteCore.integer("updated_at").notNull()},t=>({idCheck:sqliteCore.check("ui_instances_id_ck",drizzleOrm.sql`length(${t.id}) BETWEEN 5 AND 128 AND ${t.id} GLOB 'uic_*'`),definitionIdCheck:sqliteCore.check("ui_instances_definition_id_ck",drizzleOrm.sql`length(${t.definition_id}) BETWEEN 1 AND 128`),definitionVersionCheck:sqliteCore.check("ui_instances_definition_version_ck",drizzleOrm.sql`${t.definition_version} >= 1`),definitionHashCheck:sqliteCore.check("ui_instances_definition_hash_ck",drizzleOrm.sql`length(${t.definition_hash}) = 64 AND ${t.definition_hash} NOT GLOB '*[^0-9a-f]*'`),workspaceIdCheck:sqliteCore.check("ui_instances_workspace_id_ck",drizzleOrm.sql`length(${t.workspace_id}) BETWEEN 1 AND 256`),threadIdCheck:sqliteCore.check("ui_instances_thread_id_ck",drizzleOrm.sql`length(${t.thread_id}) BETWEEN 1 AND 256`),domainRefJsonCheck:sqliteCore.check("ui_instances_domain_ref_json_ck",drizzleOrm.sql`json_valid(${t.domain_ref_json}) AND json_type(${t.domain_ref_json}) = 'object'`),stateJsonCheck:sqliteCore.check("ui_instances_state_json_ck",drizzleOrm.sql`json_valid(${t.state_json}) AND json_type(${t.state_json}) = 'object'`),revisionCheck:sqliteCore.check("ui_instances_revision_ck",drizzleOrm.sql`${t.revision} >= 0`),statusCheck:sqliteCore.check("ui_instances_status_ck",drizzleOrm.sql`${t.status} IN ('active', 'completed', 'expired', 'revoked', 'unsupported')`),grantedCapabilitiesJsonCheck:sqliteCore.check("ui_instances_granted_capabilities_json_ck",drizzleOrm.sql`json_valid(${t.granted_capabilities_json}) AND json_type(${t.granted_capabilities_json}) = 'array'`),createdAtCheck:sqliteCore.check("ui_instances_created_at_ck",drizzleOrm.sql`${t.created_at} >= 0`),updatedAtCheck:sqliteCore.check("ui_instances_updated_at_ck",drizzleOrm.sql`${t.updated_at} >= ${t.created_at}`),workspaceThreadIdx:sqliteCore.index("ui_instances_workspace_thread_idx").on(t.workspace_id,t.thread_id)}));u();sqliteCore.sqliteTable("ui_action_receipts",{id:sqliteCore.text("id").primaryKey().notNull(),instance_id:sqliteCore.text("instance_id").notNull(),request_id:sqliteCore.text("request_id").notNull(),action_id:sqliteCore.text("action_id").notNull(),actor_json:sqliteCore.text("actor_json").notNull(),source:sqliteCore.text("source").notNull(),expected_revision:sqliteCore.integer("expected_revision").notNull(),before_revision:sqliteCore.integer("before_revision").notNull(),after_revision:sqliteCore.integer("after_revision"),status:sqliteCore.text("status").notNull(),outcome:sqliteCore.text("outcome"),input_json:sqliteCore.text("input_json").notNull(),result_json:sqliteCore.text("result_json"),error_code:sqliteCore.text("error_code"),requested_at:sqliteCore.integer("requested_at").notNull(),settled_at:sqliteCore.integer("settled_at")},t=>({idCheck:sqliteCore.check("ui_action_receipts_id_ck",drizzleOrm.sql`length(${t.id}) BETWEEN 5 AND 128`),instanceIdCheck:sqliteCore.check("ui_action_receipts_instance_id_ck",drizzleOrm.sql`length(${t.instance_id}) BETWEEN 1 AND 128`),requestIdCheck:sqliteCore.check("ui_action_receipts_request_id_ck",drizzleOrm.sql`length(${t.request_id}) BETWEEN 1 AND 128`),actionIdCheck:sqliteCore.check("ui_action_receipts_action_id_ck",drizzleOrm.sql`length(${t.action_id}) BETWEEN 1 AND 128`),actorJsonCheck:sqliteCore.check("ui_action_receipts_actor_json_ck",drizzleOrm.sql`json_valid(${t.actor_json}) AND json_type(${t.actor_json}) = 'object'`),sourceCheck:sqliteCore.check("ui_action_receipts_source_ck",drizzleOrm.sql`${t.source} IN ('ui_host', 'cli', 'system')`),expectedRevisionCheck:sqliteCore.check("ui_action_receipts_expected_revision_ck",drizzleOrm.sql`${t.expected_revision} >= 0`),beforeRevisionCheck:sqliteCore.check("ui_action_receipts_before_revision_ck",drizzleOrm.sql`${t.before_revision} >= 0`),afterRevisionCheck:sqliteCore.check("ui_action_receipts_after_revision_ck",drizzleOrm.sql`${t.after_revision} IS NULL OR ${t.after_revision} >= 0`),statusCheck:sqliteCore.check("ui_action_receipts_status_ck",drizzleOrm.sql`${t.status} IN ('requested', 'settled')`),outcomeCheck:sqliteCore.check("ui_action_receipts_outcome_ck",drizzleOrm.sql`${t.outcome} IS NULL OR ${t.outcome} IN ('succeeded', 'rejected', 'failed', 'conflicted', 'expired')`),inputJsonCheck:sqliteCore.check("ui_action_receipts_input_json_ck",drizzleOrm.sql`json_valid(${t.input_json}) AND json_type(${t.input_json}) = 'object'`),resultJsonCheck:sqliteCore.check("ui_action_receipts_result_json_ck",drizzleOrm.sql`${t.result_json} IS NULL OR (json_valid(${t.result_json}) AND json_type(${t.result_json}) = 'object')`),requestedAtCheck:sqliteCore.check("ui_action_receipts_requested_at_ck",drizzleOrm.sql`${t.requested_at} >= 0`),settledAtCheck:sqliteCore.check("ui_action_receipts_settled_at_ck",drizzleOrm.sql`${t.settled_at} IS NULL OR ${t.settled_at} >= ${t.requested_at}`),statusTransitionCheck:sqliteCore.check("ui_action_receipts_status_transition_ck",drizzleOrm.sql`(
70
+ (${t.status} = 'requested' AND ${t.after_revision} IS NULL AND ${t.outcome} IS NULL AND ${t.settled_at} IS NULL)
71
+ OR
72
+ (${t.status} = 'settled' AND ${t.after_revision} IS NOT NULL AND ${t.outcome} IS NOT NULL AND ${t.settled_at} IS NOT NULL)
73
+ )`),instanceRequestUnique:sqliteCore.uniqueIndex("ui_action_receipts_instance_request_uq").on(t.instance_id,t.request_id),instanceIdIdx:sqliteCore.index("ui_action_receipts_instance_id_idx").on(t.instance_id),requestedAtIdx:sqliteCore.index("ui_action_receipts_requested_at_idx").on(t.requested_at)}));zt();var yt="2026-05-09",Mp="0.8.9-rc.13",wt=10,_t=parseInt(Mp.split("rc.")[1]);function Da(){let t=drizzleOrm.sql`
74
+ CASE
75
+ WHEN ${p.model} LIKE 'claude-%' OR ${p.model} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
76
+ WHEN ${p.model} LIKE 'gpt-%' OR ${p.model} LIKE 'codex-%' THEN 'codex'
77
+ WHEN ${p.model} LIKE 'gemini-%' THEN 'gemini'
78
+ WHEN ${p.model} LIKE 'grok-%' THEN 'grok'
79
+ WHEN ${p.model} LIKE 'zai-%' OR ${p.model} LIKE 'openrouter/z-ai/%' THEN 'opencode'
80
+ WHEN ${p.model} LIKE 'minimax/%' THEN 'minimax'
81
+ WHEN ${p.model} LIKE 'qwen%' THEN 'qwen'
82
+ ELSE 'unknown'
83
+ END
84
+ `,e=drizzleOrm.sql`json_extract(${p.metadata}, '$.provider')`,n=drizzleOrm.sql`trim(${e})`,r=drizzleOrm.sql`substr(${n}, 1, instr(${n}, '/') - 1)`,o=drizzleOrm.sql`
85
+ CASE
86
+ WHEN instr(${n}, '/') > 0
87
+ AND ${r} IN ('cli', 'acp', 'api', 'plugin', 'remote')
88
+ THEN substr(${n}, instr(${n}, '/') + 1)
89
+ ELSE ${n}
90
+ END
91
+ `;return drizzleOrm.sql`
92
+ CASE
93
+ WHEN ${p.metadata} IS NULL THEN ${t}
94
+ WHEN json_valid(${p.metadata}) = 0 THEN 'unknown'
95
+ WHEN json_type(${p.metadata}, '$') IS NOT 'object' THEN 'unknown'
96
+ WHEN json_type(${p.metadata}, '$.provider') IS NULL THEN ${t}
97
+ WHEN json_type(${p.metadata}, '$.provider') IS NOT 'text' THEN 'unknown'
98
+ WHEN ${n} = '' THEN 'unknown'
99
+ WHEN trim(${o}) = '' THEN 'unknown'
100
+ ELSE ${o}
101
+ END
102
+ `}var Up=new Set(["workflow","mcp"]),Ma=600*1e3,nn=class extends le{dbPath;pidNullObservedSince=new Map;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=K.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=K.dirname(n);Ua.existsSync(o)||Ua.mkdirSync(o,{recursive:true});}else if(!Ua.existsSync(n))throw new C("NOT_FOUND","Database not found");let r=Q(n);if(e)try{he(r.db,n);}catch(o){throw r.close(),o}return r}startTask(e){let n=this.openHandle(true);try{n.db.insert(p).values({id:e.id,agent_id:e.agentId,prompt:e.prompt,mode:e.mode,status:e.status,started_at:e.startedAt,pid:e.pid??null,parent_task_id:e.parentTaskId??null,caller_agent_id:e.callerAgentId??null,trace_id:e.traceId??null,command:e.command??null,metadata:e.metadata??null,workspace_id:e.workspaceId??null,platform:e.platform??"cli",crewx_version:e.crewxVersion??null,thread_id:e.threadId??null,model:e.model??null,rendered_prompt:e.renderedPrompt??null,coding_agent_command:e.codingAgentCommand??null}).onConflictDoUpdate({target:p.id,set:{pid:drizzleOrm.sql`COALESCE(excluded.pid, ${p.pid})`},setWhere:drizzleOrm.eq(p.status,"running")}).run();}catch(r){throw r instanceof C?r:new C("DB_ERROR","Failed to start task",r)}finally{n.close();}}finishTask(e){let n=this.openHandle(true);try{let r=e.runEpoch??null;n.runRaw(`UPDATE tasks SET status=?, result=?, error=?, completed_at=?, duration_ms=?,
67
103
  exit_code=?, input_tokens=?, output_tokens=?, cached_input_tokens=?, cost_usd=?,
68
104
  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 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`
105
+ 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 C?r:new C("DB_ERROR","Failed to finish task",r)}finally{n.close();}}appendLog(e,n){let r=this.openHandle(true);try{r.db.transaction(o=>{let i=o.select({logs:p.logs}).from(p).where(drizzleOrm.eq(p.id,e)).limit(1).get(),s=i?.logs?JSON.parse(i.logs):[];s.push(n),o.update(p).set({logs:JSON.stringify(s)}).where(drizzleOrm.eq(p.id,e)).run();},{behavior:"immediate"});}catch(o){throw o instanceof C?o:new C("DB_ERROR","Failed to append log",o)}finally{r.close();}}getRunningTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(p).where(drizzleOrm.eq(p.status,"running")).orderBy(drizzleOrm.desc(p.started_at)).all()}catch(n){throw new C("DB_ERROR","Failed to get running tasks",n)}finally{e.close();}}getAllTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(p).orderBy(drizzleOrm.desc(p.started_at)).limit(100).all()}catch(n){throw new C("DB_ERROR","Failed to get all tasks",n)}finally{e.close();}}getTask(e){if(!this.dbExists())return;let n=this.openHandle(false);try{return n.db.select().from(p).where(drizzleOrm.eq(p.id,e)).limit(1).get()??void 0}catch(r){throw new C("DB_ERROR","Failed to get task",r)}finally{n.close();}}killTask(e){if(!this.dbExists())return {killed:false};let n=this.openHandle(true);try{let r=n.db.select({id:p.id,status:p.status,pid:p.pid}).from(p).where(drizzleOrm.eq(p.id,e)).limit(1).get();if(!r||r.status!=="running")return {killed:!1};if(r.pid)try{process.kill(r.pid,"SIGTERM");}catch{}return n.db.update(p).set({status:"failed",error:"Killed by user",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.status,"running"))).run(),{killed:!0,pid:r.pid??void 0}}catch(r){throw r instanceof C?r:new C("DB_ERROR","Failed to kill task",r)}finally{n.close();}}reapOrphanedTasks(){if(!this.dbExists())return 0;let e=this.openHandle(true);try{let n=e.db.select({id:p.id,pid:p.pid,platform:p.platform,run_epoch:p.run_epoch}).from(p).where(drizzleOrm.eq(p.status,"running")).all(),r=Date.now(),o=new Set,i=0;for(let s of n){if(s.pid){let c=!1;try{process.kill(s.pid,0),c=!0;}catch{}c||(e.db.update(p).set({status:"failed",error:"Reaped: process not found (orphaned task)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(p.id,s.id),drizzleOrm.eq(p.status,"running"))).run(),i++);continue}if(Up.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>=Ma&&(e.db.update(p).set({status:"failed",error:"Reaped: pid never recorded after resume (stale running_instruction)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(p.id,s.id),drizzleOrm.eq(p.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=Ma){if(!this.dbExists())return 0;let n=this.openHandle(true);try{let r=new Date(Date.now()-e).toISOString();return n.db.update(p).set({status:"failed",error:"Reaped: stale workflow run (finally not executed)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(p.status,"running"),drizzleOrm.eq(p.platform,"workflow"),drizzleOrm.isNull(p.pid),drizzleOrm.lt(p.started_at,r),drizzleOrm.or(drizzleOrm.isNull(p.metadata),drizzleOrm.and(drizzleOrm.notLike(p.metadata,'%"kind":"workflow_card"%'),drizzleOrm.notLike(p.metadata,'%"kind":"workflow_ui_instance"%'))))).run().changes??0}finally{n.close();}}findTaskStatus(e,n){let r=this.resolveDbPaths();for(let o of r){if(!Ua.existsSync(o))continue;let i=Q(o);try{let s=n?drizzleOrm.eq(p.workspace_id,n):void 0,a=s?drizzleOrm.and(drizzleOrm.eq(p.id,e),s):drizzleOrm.eq(p.id,e),d=i.db.select().from(p).where(a).limit(1).get()??void 0;if(!d){let c=drizzleOrm.or(drizzleOrm.eq(p.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.like(p.command,`%--thread=${e}%`))),l=s?drizzleOrm.and(c,s):c;d=i.db.select().from(p).where(l).orderBy(drizzleOrm.desc(p.started_at)).limit(1).get()??void 0;}if(d)return d}catch(s){throw new C("DB_ERROR","Failed to find task status",s)}finally{i.close();}}}findChildTasks(e,n){let r=this.resolveDbPaths(),o=new Set,i=[];for(let s of r){if(!Ua.existsSync(s))continue;let a=Q(s);try{let d=n?drizzleOrm.and(drizzleOrm.eq(p.parent_task_id,e),drizzleOrm.eq(p.workspace_id,n)):drizzleOrm.eq(p.parent_task_id,e),c=a.db.select().from(p).where(d).orderBy(drizzleOrm.asc(p.started_at)).all();for(let l of c)o.has(l.id)||(o.add(l.id),i.push(l));}catch(d){throw new C("DB_ERROR","Failed to find child tasks",d)}finally{a.close();}}return i}getWorkspaceUsageSummary(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.all(e?drizzleOrm.sql`
70
106
  SELECT
71
107
  COALESCE(workspace_id, 'unknown') AS workspace_id,
72
108
  COALESCE(SUM(input_tokens), 0) AS input_tokens,
@@ -87,7 +123,7 @@ ${r.join(`
87
123
  FROM tasks
88
124
  GROUP BY workspace_id
89
125
  ORDER BY (COALESCE(SUM(input_tokens), 0) + COALESCE(SUM(output_tokens), 0)) DESC
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`
126
+ `)}catch(r){throw new C("DB_ERROR","Failed to get workspace usage summary",r)}finally{n.close();}}getThreadTokenUsage(e,n){let r=this.resolveDbPaths(),o=new Set,i=0,s=0,a=0;for(let d of r){if(!Ua.existsSync(d))continue;let c=Q(d);try{let l=drizzleOrm.or(drizzleOrm.eq(p.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.like(p.command,`%--thread=${e}%`))),f=n?drizzleOrm.and(l,drizzleOrm.eq(p.workspace_id,n)):l,g=c.db.select({id:p.id,input_tokens:p.input_tokens,output_tokens:p.output_tokens,cost_usd:p.cost_usd}).from(p).where(f).all();for(let m of g)o.has(m.id)||(o.add(m.id),i+=m.input_tokens??0,s+=m.output_tokens??0,a+=m.cost_usd??0);}catch(l){throw new C("DB_ERROR","Failed to get thread token usage",l)}finally{c.close();}}return {inputTokens:i,outputTokens:s,costUsd:a}}findTasksByThread(e,n){let r=this.resolveDbPaths(),o=new Set,i=[];for(let s of r){if(!Ua.existsSync(s))continue;let a=Q(s);try{let d=drizzleOrm.or(drizzleOrm.eq(p.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.like(p.command,`%--thread=${e}%`))),c=n?drizzleOrm.and(d,drizzleOrm.eq(p.workspace_id,n)):d,l=a.db.select().from(p).where(c).orderBy(drizzleOrm.asc(p.started_at)).all();for(let f of l)o.has(f.id)||(o.add(f.id),i.push(f));}catch(d){throw new C("DB_ERROR","Failed to find tasks by thread",d)}finally{a.close();}}return i}parseWorkflowCardMetadata(e){if(!e)return {};try{let n=JSON.parse(e);return {kind:typeof n.kind=="string"?n.kind:void 0,workflowRunId:typeof n.workflowRunId=="string"?n.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 n of this.resolveDbPaths()){if(!Ua.existsSync(n))continue;let r=Q(n);try{e.push(...r.db.select({id:p.id,agent_id:p.agent_id,thread_id:p.thread_id,workspace_id:p.workspace_id,platform:p.platform,status:p.status,error:p.error,completed_at:p.completed_at,duration_ms:p.duration_ms,started_at:p.started_at,metadata:p.metadata}).from(p).where(drizzleOrm.and(drizzleOrm.eq(p.platform,"workflow"),drizzleOrm.or(drizzleOrm.like(p.metadata,'%"kind":"workflow_card"%'),drizzleOrm.like(p.metadata,'%"kind":"workflow_ui_instance"%')))).orderBy(drizzleOrm.desc(p.started_at)).all());}catch(o){throw new C("DB_ERROR","Failed to find workflow parent tasks",o)}finally{r.close();}}return e}batchFetchWorkflowCards(e,n){let r=new Map;if(e.length===0)return r;let o=new Set(e),i=new Map,s=n?drizzleOrm.eq(p.workspace_id,n):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"&&f.kind!=="workflow_ui_instance"||(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(!Ua.existsSync(d))continue;let c=Q(d);try{let l=drizzleOrm.and(drizzleOrm.inArray(p.thread_id,e),drizzleOrm.or(drizzleOrm.like(p.metadata,'%"kind":"workflow_card"%'),drizzleOrm.like(p.metadata,'%"kind":"workflow_ui_instance"%'))),f=c.db.select({id:p.id,thread_id:p.thread_id,metadata:p.metadata,result:p.result,started_at:p.started_at}).from(p).where(s?drizzleOrm.and(l,s):l).all();for(let k of f)a(k.thread_id,k);let g=drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.or(drizzleOrm.like(p.metadata,'%"kind":"workflow_card"%'),drizzleOrm.like(p.metadata,'%"kind":"workflow_ui_instance"%'))),m=c.db.select({id:p.id,command:p.command,metadata:p.metadata,result:p.result,started_at:p.started_at}).from(p).where(s?drizzleOrm.and(g,s):g).all();for(let k of m){let h=this.extractThreadIdFromCommand(k.command);!h||!o.has(h)||a(h,k);}}catch(l){throw new C("DB_ERROR","Failed to batch fetch workflow cards",l)}finally{c.close();}}return r}findAllTasks(e){if(!this.dbExists())return {rows:[],total:0};let n=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(drizzleOrm.eq(p.workspace_id,e.workspaceId));let o=e.agents&&e.agents.length>0?e.agents:e.agentId?[e.agentId]:null;o&&r.push(drizzleOrm.inArray(p.agent_id,o));let i=e.statuses&&e.statuses.length>0?e.statuses:e.status?[e.status]:null;i&&r.push(drizzleOrm.inArray(p.status,i));let s=e.q??e.search;s&&r.push(drizzleOrm.like(p.prompt,`%${s}%`)),e.from&&r.push(drizzleOrm.gte(p.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(p.started_at,e.to));let a=r.length>0?drizzleOrm.and(...r):void 0,d=n.db.select({count:drizzleOrm.sql`count(*)`}).from(p).where(a).get(),c=(e.sortDir??"DESC")==="ASC"?drizzleOrm.asc(p.started_at):drizzleOrm.desc(p.started_at);return {rows:n.db.select().from(p).where(a).orderBy(c).limit(e.limit).offset(e.offset).all(),total:d?.count??0}}catch(r){throw new C("DB_ERROR","Failed to find all tasks",r)}finally{n.close();}}getAgentUsage(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.all(r?drizzleOrm.sql`
91
127
  SELECT
92
128
  t.agent_id,
93
129
  t.workspace_id,
@@ -95,11 +131,11 @@ ${r.join(`
95
131
  COALESCE(SUM(
96
132
  COALESCE(t.input_tokens, 0)
97
133
  + CASE
98
- WHEN t.started_at >= ${Ze}
134
+ WHEN t.started_at >= ${yt}
99
135
  AND (
100
136
  t.crewx_version IS NULL
101
137
  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, ${et}) AS INTEGER) < ${tt})
138
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${wt}) AS INTEGER) < ${_t})
103
139
  )
104
140
  THEN COALESCE(t.cached_input_tokens, 0)
105
141
  ELSE 0
@@ -111,18 +147,18 @@ ${r.join(`
111
147
  FROM tasks t
112
148
  WHERE t.status IN ('completed', 'success')
113
149
  AND t.started_at >= ${e}
114
- AND t.started_at < ${t}
150
+ AND t.started_at < ${n}
115
151
  AND t.workspace_id = ${r}
116
152
  GROUP BY t.agent_id, t.workspace_id
117
153
  ORDER BY (
118
154
  COALESCE(SUM(
119
155
  COALESCE(t.input_tokens, 0)
120
156
  + CASE
121
- WHEN t.started_at >= ${Ze}
157
+ WHEN t.started_at >= ${yt}
122
158
  AND (
123
159
  t.crewx_version IS NULL
124
160
  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, ${et}) AS INTEGER) < ${tt})
161
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${wt}) AS INTEGER) < ${_t})
126
162
  )
127
163
  THEN COALESCE(t.cached_input_tokens, 0)
128
164
  ELSE 0
@@ -138,11 +174,11 @@ ${r.join(`
138
174
  COALESCE(SUM(
139
175
  COALESCE(t.input_tokens, 0)
140
176
  + CASE
141
- WHEN t.started_at >= ${Ze}
177
+ WHEN t.started_at >= ${yt}
142
178
  AND (
143
179
  t.crewx_version IS NULL
144
180
  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, ${et}) AS INTEGER) < ${tt})
181
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${wt}) AS INTEGER) < ${_t})
146
182
  )
147
183
  THEN COALESCE(t.cached_input_tokens, 0)
148
184
  ELSE 0
@@ -154,17 +190,17 @@ ${r.join(`
154
190
  FROM tasks t
155
191
  WHERE t.status IN ('completed', 'success')
156
192
  AND t.started_at >= ${e}
157
- AND t.started_at < ${t}
193
+ AND t.started_at < ${n}
158
194
  GROUP BY t.agent_id, t.workspace_id
159
195
  ORDER BY (
160
196
  COALESCE(SUM(
161
197
  COALESCE(t.input_tokens, 0)
162
198
  + CASE
163
- WHEN t.started_at >= ${Ze}
199
+ WHEN t.started_at >= ${yt}
164
200
  AND (
165
201
  t.crewx_version IS NULL
166
202
  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, ${et}) AS INTEGER) < ${tt})
203
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${wt}) AS INTEGER) < ${_t})
168
204
  )
169
205
  THEN COALESCE(t.cached_input_tokens, 0)
170
206
  ELSE 0
@@ -172,18 +208,18 @@ ${r.join(`
172
208
  ), 0)
173
209
  + COALESCE(SUM(t.output_tokens), 0)
174
210
  ) DESC
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`
211
+ `).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 C("DB_ERROR","Failed to get agent usage",i)}finally{o.close();}}getAgentUsageTrendRaw(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.all(r?drizzleOrm.sql`
176
212
  SELECT
177
213
  date(t.started_at) AS date,
178
214
  t.agent_id,
179
215
  COALESCE(SUM(
180
216
  COALESCE(t.input_tokens, 0)
181
217
  + CASE
182
- WHEN t.started_at >= ${Ze}
218
+ WHEN t.started_at >= ${yt}
183
219
  AND (
184
220
  t.crewx_version IS NULL
185
221
  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, ${et}) AS INTEGER) < ${tt})
222
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${wt}) AS INTEGER) < ${_t})
187
223
  )
188
224
  THEN COALESCE(t.cached_input_tokens, 0)
189
225
  ELSE 0
@@ -195,7 +231,7 @@ ${r.join(`
195
231
  FROM tasks t
196
232
  WHERE t.status IN ('completed', 'success')
197
233
  AND t.started_at >= ${e}
198
- AND t.started_at < ${t}
234
+ AND t.started_at < ${n}
199
235
  AND t.workspace_id = ${r}
200
236
  GROUP BY date(t.started_at), t.agent_id
201
237
  ORDER BY date(t.started_at) ASC
@@ -206,11 +242,11 @@ ${r.join(`
206
242
  COALESCE(SUM(
207
243
  COALESCE(t.input_tokens, 0)
208
244
  + CASE
209
- WHEN t.started_at >= ${Ze}
245
+ WHEN t.started_at >= ${yt}
210
246
  AND (
211
247
  t.crewx_version IS NULL
212
248
  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, ${et}) AS INTEGER) < ${tt})
249
+ OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${wt}) AS INTEGER) < ${_t})
214
250
  )
215
251
  THEN COALESCE(t.cached_input_tokens, 0)
216
252
  ELSE 0
@@ -222,116 +258,154 @@ ${r.join(`
222
258
  FROM tasks t
223
259
  WHERE t.status IN ('completed', 'success')
224
260
  AND t.started_at >= ${e}
225
- AND t.started_at < ${t}
261
+ AND t.started_at < ${n}
226
262
  GROUP BY date(t.started_at), t.agent_id
227
263
  ORDER BY date(t.started_at) ASC
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
- CASE
230
- WHEN ${u.model} LIKE 'claude-%' OR ${u.model} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
231
- WHEN ${u.model} LIKE 'gpt-%' OR ${u.model} LIKE 'codex-%' THEN 'codex'
232
- WHEN ${u.model} LIKE 'gemini-%' THEN 'gemini'
233
- WHEN ${u.model} LIKE 'zai-%' OR ${u.model} LIKE 'openrouter/z-ai/%' THEN 'opencode'
234
- WHEN ${u.model} LIKE 'minimax/%' THEN 'minimax'
235
- WHEN ${u.model} LIKE 'qwen%' THEN 'qwen'
236
- ELSE 'unknown'
237
- END
238
- `,s=drizzleOrm.sql`
239
- COALESCE(${u.input_tokens}, 0)
264
+ `).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 C("DB_ERROR","Failed to get agent usage trend",i)}finally{o.close();}}findTaskForStop(e,n){if(!this.dbExists())return;let r=this.openHandle(false);try{return r.db.select().from(p).where(drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.workspace_id,n))).limit(1).get()??void 0}catch(o){throw new C("DB_ERROR","Failed to find task for stop",o)}finally{r.close();}}findLatestTaskByMetadata(e){if(!this.dbExists())return null;let n=this.openHandle(false);try{return n.db.select({id:p.id,thread_id:p.thread_id,status:p.status,result:p.result,error:p.error,started_at:p.started_at,completed_at:p.completed_at,metadata:p.metadata}).from(p).where(drizzleOrm.and(drizzleOrm.eq(p.agent_id,e.agentId),drizzleOrm.eq(p.workspace_id,e.workspaceId),drizzleOrm.sql`${p.metadata} IS NOT NULL AND json_valid(${p.metadata}) AND json_extract(${p.metadata}, '$.' || ${e.metaKey}) = ${e.metaValue}`)).orderBy(drizzleOrm.desc(p.started_at)).limit(1).get()??null}catch(r){throw new C("DB_ERROR","Failed to find latest task by metadata",r)}finally{n.close();}}markTaskFailed(e,n,r){if(!this.dbExists())return;let o=this.openHandle(true);try{let i=new Date().toISOString(),s=r?drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.status,"running"),drizzleOrm.eq(p.workspace_id,r)):drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.status,"running"));o.db.update(p).set({status:"failed",error:n,completed_at:i}).where(s).run();}catch(i){throw i instanceof C?i:new C("DB_ERROR","Failed to mark task failed",i)}finally{o.close();}}findTasksByPromptHint(e,n){let r=this.resolveDbPaths(),o=new Set,i=[];for(let s of r){if(!Ua.existsSync(s))continue;let a=Q(s);try{let d=n?drizzleOrm.and(drizzleOrm.like(p.prompt,`%${e}%`),drizzleOrm.eq(p.workspace_id,n)):drizzleOrm.like(p.prompt,`%${e}%`),c=a.db.select().from(p).where(d).orderBy(drizzleOrm.asc(p.started_at)).all();for(let l of c)o.has(l.id)||(o.add(l.id),i.push(l));}catch(d){throw new C("DB_ERROR","Failed to find tasks by prompt hint",d)}finally{a.close();}}return i}getProviderUsage(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let i=Da(),s=drizzleOrm.sql`
265
+ COALESCE(${p.input_tokens}, 0)
240
266
  + CASE
241
- WHEN ${u.started_at} >= ${Ze}
267
+ WHEN ${p.started_at} >= ${yt}
242
268
  AND (
243
- ${u.crewx_version} IS NULL
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}, ${et}) AS INTEGER) < ${tt})
269
+ ${p.crewx_version} IS NULL
270
+ OR (${p.crewx_version} LIKE '0.8.%' AND ${p.crewx_version} NOT LIKE '0.8.9%')
271
+ OR (${p.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${p.crewx_version}, ${wt}) AS INTEGER) < ${_t})
246
272
  )
247
- THEN COALESCE(${u.cached_input_tokens}, 0)
273
+ THEN COALESCE(${p.cached_input_tokens}, 0)
248
274
  ELSE 0
249
275
  END
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`
276
+ `,a=r?drizzleOrm.sql`WHERE ${p.status} IN ('completed', 'success') AND ${p.started_at} >= ${e} AND ${p.started_at} < ${n} AND ${p.workspace_id} = ${r}`:drizzleOrm.sql`WHERE ${p.status} IN ('completed', 'success') AND ${p.started_at} >= ${e} AND ${p.started_at} < ${n}`;return o.db.all(drizzleOrm.sql`
251
277
  SELECT
252
278
  ${i} AS provider,
253
279
  COUNT(*) AS total_tasks,
254
280
  COALESCE(SUM(${s}), 0) AS input_tokens,
255
- COALESCE(SUM(${u.output_tokens}), 0) AS output_tokens,
256
- COALESCE(SUM(${u.cached_input_tokens}), 0) AS cached_input_tokens,
257
- COALESCE(SUM(${u.cost_usd}), 0) AS cost_usd,
258
- COALESCE(SUM(${u.duration_ms}), 0) AS active_duration_ms,
259
- MAX(${u.completed_at}) AS last_active_at
260
- FROM ${u}
281
+ COALESCE(SUM(${p.output_tokens}), 0) AS output_tokens,
282
+ COALESCE(SUM(${p.cached_input_tokens}), 0) AS cached_input_tokens,
283
+ COALESCE(SUM(${p.cost_usd}), 0) AS cost_usd,
284
+ COALESCE(SUM(${p.duration_ms}), 0) AS active_duration_ms,
285
+ MAX(${p.completed_at}) AS last_active_at
286
+ FROM ${p}
261
287
  ${a}
262
- GROUP BY provider
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
- CASE
266
- WHEN ${u.model} LIKE 'claude-%' OR ${u.model} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
267
- WHEN ${u.model} LIKE 'gpt-%' OR ${u.model} LIKE 'codex-%' THEN 'codex'
268
- WHEN ${u.model} LIKE 'gemini-%' THEN 'gemini'
269
- WHEN ${u.model} LIKE 'zai-%' OR ${u.model} LIKE 'openrouter/z-ai/%' THEN 'opencode'
270
- WHEN ${u.model} LIKE 'minimax/%' THEN 'minimax'
271
- WHEN ${u.model} LIKE 'qwen%' THEN 'qwen'
272
- ELSE 'unknown'
273
- END
274
- `,s=drizzleOrm.sql`
275
- COALESCE(${u.input_tokens}, 0)
288
+ GROUP BY ${i}
289
+ ORDER BY (COALESCE(SUM(${s}), 0) + COALESCE(SUM(${p.output_tokens}), 0)) DESC
290
+ `).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 C("DB_ERROR","Failed to get provider usage",i)}finally{o.close();}}getModelUsage(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let i=Da(),s=drizzleOrm.sql`
291
+ COALESCE(${p.input_tokens}, 0)
276
292
  + CASE
277
- WHEN ${u.started_at} >= ${Ze}
293
+ WHEN ${p.started_at} >= ${yt}
278
294
  AND (
279
- ${u.crewx_version} IS NULL
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}, ${et}) AS INTEGER) < ${tt})
295
+ ${p.crewx_version} IS NULL
296
+ OR (${p.crewx_version} LIKE '0.8.%' AND ${p.crewx_version} NOT LIKE '0.8.9%')
297
+ OR (${p.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${p.crewx_version}, ${wt}) AS INTEGER) < ${_t})
282
298
  )
283
- THEN COALESCE(${u.cached_input_tokens}, 0)
299
+ THEN COALESCE(${p.cached_input_tokens}, 0)
284
300
  ELSE 0
285
301
  END
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`
302
+ `,a=r?drizzleOrm.sql`WHERE ${p.status} IN ('completed', 'success') AND ${p.started_at} >= ${e} AND ${p.started_at} < ${n} AND ${p.workspace_id} = ${r}`:drizzleOrm.sql`WHERE ${p.status} IN ('completed', 'success') AND ${p.started_at} >= ${e} AND ${p.started_at} < ${n}`,d=o.db.all(drizzleOrm.sql`
287
303
  SELECT
288
- ${u.model} AS model,
304
+ ${p.model} AS model,
289
305
  ${i} AS provider,
290
306
  COUNT(*) AS total_tasks,
291
307
  COALESCE(SUM(${s}), 0) AS input_tokens,
292
- COALESCE(SUM(${u.output_tokens}), 0) AS output_tokens,
293
- COALESCE(SUM(${u.cached_input_tokens}), 0) AS cached_input_tokens,
294
- COALESCE(SUM(${u.cost_usd}), 0) AS cost_usd,
295
- COALESCE(SUM(${u.duration_ms}), 0) AS active_duration_ms,
296
- MAX(${u.completed_at}) AS last_active_at
297
- FROM ${u}
308
+ COALESCE(SUM(${p.output_tokens}), 0) AS output_tokens,
309
+ COALESCE(SUM(${p.cached_input_tokens}), 0) AS cached_input_tokens,
310
+ COALESCE(SUM(${p.cost_usd}), 0) AS cost_usd,
311
+ COALESCE(SUM(${p.duration_ms}), 0) AS active_duration_ms,
312
+ MAX(${p.completed_at}) AS last_active_at
313
+ FROM ${p}
298
314
  ${a}
299
- GROUP BY ${u.model}
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`
315
+ GROUP BY ${p.model}, ${i}
316
+ `),c=new Map;for(let l of d){let f=_o(l.model??""),g=JSON.stringify([l.provider,f]),m=c.get(g);m?(m.totalTasks+=l.total_tasks,m.inputTokens+=l.input_tokens,m.outputTokens+=l.output_tokens,m.cachedInputTokens+=l.cached_input_tokens,m.costUsd+=l.cost_usd,m.totalTokens+=l.input_tokens+l.output_tokens,m.activeDurationMs+=l.active_duration_ms??0,l.last_active_at&&(!m.lastActiveAt||l.last_active_at>m.lastActiveAt)&&(m.lastActiveAt=l.last_active_at)):c.set(g,{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 C("DB_ERROR","Failed to get model usage",i)}finally{o.close();}}getTasksForReport(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let i=r?drizzleOrm.sql`WHERE ${p.started_at} >= ${e} AND ${p.started_at} < ${n} AND ${p.workspace_id} = ${r}`:drizzleOrm.sql`WHERE ${p.started_at} >= ${e} AND ${p.started_at} < ${n}`;return o.db.all(drizzleOrm.sql`
301
317
  SELECT
302
- ${u.thread_id} AS thread_id,
303
- ${u.agent_id} AS agent_id,
304
- ${u.started_at} AS started_at,
305
- ${u.status} AS status,
306
- ${u.error} AS error,
307
- ${u.exit_code} AS exit_code
308
- FROM ${u}
318
+ ${p.thread_id} AS thread_id,
319
+ ${p.agent_id} AS agent_id,
320
+ ${p.started_at} AS started_at,
321
+ ${p.status} AS status,
322
+ ${p.error} AS error,
323
+ ${p.exit_code} AS exit_code
324
+ FROM ${p}
309
325
  ${i}
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(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(`
326
+ ORDER BY ${p.started_at} ASC
327
+ `).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 C("DB_ERROR","Failed to get tasks for report",i)}finally{o.close();}}findTaskEvidence(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(drizzleOrm.eq(p.workspace_id,e.workspaceId)),e.agents&&e.agents.length>0&&r.push(drizzleOrm.inArray(p.agent_id,e.agents)),e.statuses&&e.statuses.length>0&&r.push(drizzleOrm.inArray(p.status,e.statuses)),e.from&&r.push(drizzleOrm.gte(p.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(p.started_at,e.to));let o=r.length>0?drizzleOrm.and(...r):void 0,i=(e.order??"DESC")==="ASC"?drizzleOrm.asc(p.started_at):drizzleOrm.desc(p.started_at),s={id:p.id,agent_id:p.agent_id,status:p.status,prompt:p.prompt,started_at:p.started_at,completed_at:p.completed_at,thread_id:p.thread_id};return e.limit?n.db.select(s).from(p).where(o).orderBy(i).limit(e.limit).all():n.db.select(s).from(p).where(o).orderBy(i).all()}catch(r){throw new C("DB_ERROR","Failed to find task evidence",r)}finally{n.close();}}findThreadChains(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{let r=e.maxThreads??8,o=e.maxTurnsPerThread??4,i=[drizzleOrm.isNotNull(p.thread_id),drizzleOrm.isNull(p.parent_task_id),drizzleOrm.isNull(p.caller_agent_id),drizzleOrm.or(drizzleOrm.isNull(p.platform),drizzleOrm.ne(p.platform,"workflow")),drizzleOrm.or(drizzleOrm.isNull(p.metadata),drizzleOrm.and(drizzleOrm.notLike(p.metadata,'%"kind":"workflow_card"%'),drizzleOrm.notLike(p.metadata,'%"kind":"workflow_ui_instance"%'))),drizzleOrm.or(drizzleOrm.isNull(p.metadata),drizzleOrm.notLike(p.metadata,'%"retriedFromTaskId"%'))];e.workspaceId&&i.push(drizzleOrm.eq(p.workspace_id,e.workspaceId)),e.from&&i.push(drizzleOrm.gte(p.started_at,e.from)),e.to&&i.push(drizzleOrm.lt(p.started_at,e.to));let s=n.db.select({id:p.id,agent_id:p.agent_id,status:p.status,prompt:p.prompt,started_at:p.started_at,completed_at:p.completed_at,thread_id:p.thread_id}).from(p).where(drizzleOrm.and(...i)).orderBy(drizzleOrm.asc(p.started_at),drizzleOrm.asc(p.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 C("DB_ERROR","Failed to find thread chains",r)}finally{n.close();}}};var Lp=new Set(["Read","Grep","Find","Glob"]),$p=["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"],Bp=[/\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/],jp=8e3,Fp=100,Hp=3,Wp=Number.MAX_SAFE_INTEGER;function qp(t){let e=t.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":t}function zp(t,e){if(Lp.has(t))return true;if(t!=="Bash"||!e)return false;let n=e.split(`
328
+ `)[0].trimStart();return Bp.some(r=>r.test(n))?false:$p.some(r=>n.startsWith(r))}function rn(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function Gp(t,e,n){if(t!=="Read"||!e)return "ok";let o=e.split(`
329
+ `).find(i=>i.trim()&&!i.startsWith("Read "))?.trim()??e.trim();if(!o)return "unknown";try{let i=Ua__namespace.statSync(o);if(n){let s=Date.parse(n);if(!Number.isNaN(s)&&i.mtimeMs>s)return "stale"}return "ok"}catch{return "unknown"}}function Vp(t){let e=new Set;for(let n of t)try{let r=JSON.parse(n);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 Jp(t){if(!Array.isArray(t))return [];let e=t,n=e.filter(a=>a.level==="stdout"&&a.message).map(a=>a.message),r=Vp(n),o=[];for(let a of e)a.level==="info"&&a.message?o.push(...Le(a.message,a.timestamp)):a.level==="stdout"&&a.message&&r&&o.push(...bn("",a.message,r));let i=new Map,s=[];for(let a of o)if(a.type==="tool_use"){let d={tool:qp(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 Kp(t,e){let n=Jp(t),r=[];for(let o of n){let i=o.tool==="Bash"?o.input?.split(`
330
+ `)[0]?.slice(0,150)??null:o.input?.slice(0,150)??null,s=zp(o.tool,o.input)&&!o.isError;r.push({tool:o.tool,cmd:i,result:o.result,status:Gp(o.tool,o.input,e),reusable:s});}return r}function La(t){let e=["<activity_log>"],{entries:n,omissions:r,tokenCap:o,totalEntries:i}=t,s=r.reduce((a,d)=>a+d.count,0);if(n.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="${n.length}" omitted_entries="${s}" total_entries="${i}" -->`);for(let a of r)e.push(` <!-- omitted_entries reason="${rn(a.reason)}" count="${a.count}": ${rn(a.message)} -->`);}for(let a of n){let d=a.entry,c=`tool="${rn(d.tool)}"`,l=d.cmd?` cmd="${rn(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=Br(d.result),m=Math.min(a.bodyCharsShown??g.length,g.length);g.length>m?e.push(rn(g.slice(0,m))+` \u2026 [truncated, ${m}/${g.length} chars shown]`):e.push(rn(g)),e.push(" </entry>");}else e.push(` <entry ${c}${l}${f} />`);}}return e.push("</activity_log>"),e}function Xp(t){return typeof t!="number"||!Number.isFinite(t)||t<0?jp:Math.floor(t)}function Yp(t,e,n){let r=Math.floor(e/Fp),o=Math.pow(2,t+r);return !Number.isFinite(o)||o<=0?0:Math.floor(n/o)}function Qp(t,e){let n=Math.pow(2,e+Hp);return !Number.isFinite(n)||n<=0?0:Math.floor(t/n)}function $a(t,e,n,r){let o=t.result?.length??null,i=o===null?null:Math.min(o,Math.max(0,n));return {entry:t,newestIndex:e,bodyLimitChars:n,bodyCharsShown:o===null?null:Math.max(0,Math.min(r??i??0,i??0)),originalBodyChars:o}}function Ba(t,e){let n=[];return t>0&&n.push({reason:"token_cap",count:t,message:"older entries omitted after the per-task token cap was reached"}),e>0&&n.push({reason:"repository_limit",count:e,message:"older entries omitted by the explicit repository safety limit before budgeting"}),n}function ja(t){let e=Ba(t.omittedByTokenCap,t.repositoryLimitOmitted);return La({entries:t.entries,omissions:e,tokenCap:t.tokenCap,totalEntries:t.totalEntries}).join(`
331
+ `)}function _i(t,e){let n=t(e);return !Number.isFinite(n)||n<0?0:Math.floor(n)}function Zp(t){let{entry:e,bodyLimitChars:n}=t;if(!e.result)return null;let r=Math.min(e.result.length,Math.max(0,n));for(let o=r;o>=0;o--){let i=$a(e,t.newestIndex,n,o),s=[...t.selectedEntries,i],a=t.totalEntries-s.length-t.repositoryLimitOmitted,d=ja({entries:s,tokenCap:t.tokenCap,totalEntries:t.totalEntries,omittedByTokenCap:a,repositoryLimitOmitted:t.repositoryLimitOmitted});if(_i(t.countTokens,d)<=t.tokenCap)return i}return null}function ef(t){let e=t.repositoryEntryLimit,n=typeof e=="number"&&Number.isFinite(e)&&e>=0&&t.entries.length>e,r=n?t.entries.length-Math.floor(e):0,i=[...n?t.entries.slice(r):t.entries].reverse(),s=[],a=t.entries.length;for(let g=0;g<i.length;g++){let m=i[g],k=Yp(t.taskDistance,g,t.baseEntryChars),h=$a(m,g,k),v=[...s,h],w=a-v.length-r,_=ja({entries:v,tokenCap:t.tokenCap,totalEntries:a,omittedByTokenCap:w,repositoryLimitOmitted:r});if(_i(t.countTokens,_)<=t.tokenCap){s.push(h);continue}let b=Zp({selectedEntries:s,entry:m,newestIndex:g,bodyLimitChars:k,tokenCap:t.tokenCap,totalEntries:a,repositoryLimitOmitted:r,countTokens:t.countTokens});b&&s.push(b);break}let d=a-s.length-r,c=Ba(d,r),l=La({entries:s,omissions:c,tokenCap:t.tokenCap,totalEntries:a}).join(`
332
+ `),f=_i(t.countTokens,l);return {taskId:t.taskId,taskDistance:t.taskDistance,tokenCap:t.tokenCap,tokenCount:f,includedEntries:s.length,omittedEntries:c.reduce((g,m)=>g+m.count,0),totalEntries:a,omissions:c,entries:s,activityLog:l}}function wi(t){return {threadId:t.threadId,agentId:t.agentId,lookback:t.lookback,activityLogTokenBudget:t.activityLogTokenBudget,baseEntryChars:t.baseEntryChars,tasks:[],activityLogByTask:new Map}}function tf(t){return !Number.isFinite(t)||t<0?0:Math.floor(t)}function nf(t){return t.length}function ki(t){let e=Xp(t.maxEntryChars),n=tf(t.activityLogTokenBudget),r=Math.max(0,Math.floor(t.lookback));if(!r||!t.threadId||!t.agentId)return wi({threadId:t.threadId,agentId:t.agentId,lookback:r,activityLogTokenBudget:n,baseEntryChars:e});let o;try{o=new nn().findTasksByThread(t.threadId).filter(c=>!c.parent_task_id&&c.agent_id===t.agentId).sort((c,l)=>l.started_at>c.started_at?1:-1).slice(0,r);}catch{return wi({threadId:t.threadId,agentId:t.agentId,lookback:r,activityLogTokenBudget:n,baseEntryChars:e})}if(!o.length)return wi({threadId:t.threadId,agentId:t.agentId,lookback:r,activityLogTokenBudget:n,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:Kp(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=ef({taskId:c,entries:l,taskDistance:d,baseEntryChars:e,tokenCap:Qp(n,d),countTokens:t.countTokens,repositoryEntryLimit:t.repositoryEntryLimit});s.push(f),a.set(c,f.activityLog);}return {threadId:t.threadId,agentId:t.agentId,lookback:r,activityLogTokenBudget:n,baseEntryChars:e,tasks:s,activityLogByTask:a}}function Fa(t){if(t.activityLogTokenBudget!==void 0&&!t.countTokens)throw new Error("countTokens is required when activityLogTokenBudget is supplied");return ki({threadId:t.threadId,agentId:t.agentId,lookback:t.lookback,maxEntryChars:t.maxEntryChars,activityLogTokenBudget:t.activityLogTokenBudget??Wp,countTokens:t.countTokens??nf,repositoryEntryLimit:t.repositoryEntryLimit}).activityLogByTask}u();u();var of={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")},sf={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 Ha(t,e,n){t.tool("crewx_listAgents","List available CrewX agents exposed by this server",async()=>{let r=[];for(let o of n){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)}]}}),t.tool("crewx_queryAgent","Query a CrewX agent with a read-only question",of,async({agentId:r,query:o,context:i,thread:s})=>{if(!n.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}}),t.tool("crewx_executeAgent","Execute a task on a CrewX agent (may modify state)",sf,async({agentId:r,task:o,context:i,thread:s})=>{if(!n.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}});}u();function Wa(t){return t.headers.get("Origin")?null:new Response(JSON.stringify({error:"Forbidden: Origin header required"}),{status:403,headers:{"Content-Type":"application/json"}})}async function qa(t,e){return e?await e(t)?null:new Response(JSON.stringify({error:"Unauthorized"}),{status:401,headers:{"Content-Type":"application/json"}}):null}function cf(t,e){let n=new mcp_js.McpServer({name:"crewx-mcp-server",version:"1.0.0"},{capabilities:{tools:{}}});return Ha(n,t,e),n}function vi(t,e){if(!e.agents||e.agents.length===0)throw new Error("crewx.handler() requires at least one agent in the agents option");let n=new Set(e.agents),r=new Map;return async o=>{let i=Wa(o);if(i)return i;let s=await qa(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=cf(t,n),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)}}u();function Ei(t){let e=K__namespace.resolve(t);return process.platform==="win32"&&(e=e.replace(/\\/g,"/"),e=e.replace(/^([A-Z]):/,(n,r)=>`${r.toLowerCase()}:`)),e.length>1&&!/^[a-zA-Z]:\/$/.test(e)&&(e=e.replace(/\/+$/,"")),e}function Jr(t){let e=Ei(t);return crypto$1.createHash("sha256").update(e).digest("hex")}u();u();function zn(t){let n=t.renderer!==void 0||t.surfaces!==void 0||t.stateProjection!==void 0||Object.values(t.actions).some(o=>o.resultProjection!==void 0)?{id:t.id,version:t.version,renderer:t.renderer,surfaces:t.surfaces,stateProjection:t.stateProjection,actions:t.actions}:{id:t.id,version:t.version,actions:t.actions},r=oe(n);return crypto$1.createHash("sha256").update(_a(r)).digest("hex")}function xi(t){return `${t.id}\0${t.version}`}function Va(t){if(!/^\d+$/.test(String(t.version))||t.version<1||t.id.length<1||t.id.length>128)throw new x("DEFINITION_UNSUPPORTED","UI definition is invalid");if(!/^[0-9a-f]{64}$/.test(t.hash)||zn(t)!==t.hash)throw new x("DEFINITION_UNSUPPORTED","UI definition hash is invalid");for(let[e,n]of Object.entries(t.actions)){if(!e||!Array.isArray(n.capabilities)||n.capabilities.some(r=>!pf(r)))throw new x("DEFINITION_UNSUPPORTED","UI action declaration is invalid");if(n.inputKeys&&(!Array.isArray(n.inputKeys)||n.inputKeys.some(r=>typeof r!="string"||!r)))throw new x("DEFINITION_UNSUPPORTED","UI action input declaration is invalid");n.resultProjection&&Ga(n.resultProjection);}if(t.renderer!==void 0&&(!t.renderer||t.renderer.length>128))throw new x("DEFINITION_UNSUPPORTED","UI definition renderer is invalid");if(t.surfaces&&(!Array.isArray(t.surfaces)||t.surfaces.some(e=>!e||e.length>64)))throw new x("DEFINITION_UNSUPPORTED","UI definition surfaces are invalid");t.stateProjection&&Ga(t.stateProjection);}function Ga(t){if(!Array.isArray(t.allow)||t.allow.some(e=>!/^[A-Za-z0-9_]+(?:\.[A-Za-z0-9_]+)*$/.test(e)))throw new x("DEFINITION_UNSUPPORTED","UI projection policy is invalid")}function pf(t){return t.length>0&&t.length<=128&&t!=="*"&&t!=="all"&&!/[/*]/.test(t)}u();function Kr(t,e,n){let r=new Set(e),o=n===void 0?void 0:new Set(n);return t.filter(i=>r.has(i)&&(o===void 0||o.has(i)))}u();u();function bi(){if(process.env.CREWX_HOME)try{return Ua__namespace.realpathSync(process.env.CREWX_HOME)}catch{return K__namespace.join(Ri__namespace.homedir(),".crewx")}return process.platform!=="win32"&&process.env.XDG_CONFIG_HOME?K__namespace.join(process.env.XDG_CONFIG_HOME,"crewx"):K__namespace.join(Ri__namespace.homedir(),".crewx")}u();u();u();u();u();var Yr=class extends le{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=K.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=K.dirname(n);Ua.existsSync(o)||Ua.mkdirSync(o,{recursive:true});}else if(!Ua.existsSync(n))throw new C("NOT_FOUND","Database not found");let r=Q(n);if(e)try{he(r.db,n);}catch(o){throw r.close(),o}return r}insertSpan(e){let n=this.openHandle(true);try{n.db.insert(mt).values(e).run();}catch(r){throw r instanceof C?r:new C("DB_ERROR","Failed to insert span",r)}finally{n.close();}}findByTaskId(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.select().from(mt).where(drizzleOrm.eq(mt.task_id,e)).all()}catch(r){throw new C("DB_ERROR","Failed to find spans by task id",r)}finally{n.close();}}findById(e){if(!this.dbExists())return;let n=this.openHandle(false);try{return n.db.select().from(mt).where(drizzleOrm.eq(mt.id,e)).limit(1).get()??void 0}catch(r){throw new C("DB_ERROR","Failed to find span by id",r)}finally{n.close();}}};u();u();u();u();u();u();u();function _f(){return process.env.CREWX_DB??K.join(bi(),"crewx.db")}function Zr(t){let e=JSON.parse(t);return oe(e)}function kf(t){let e=JSON.parse(t);if(e.kind!=="local"&&e.kind!=="authenticated"||typeof e.id!="string")throw new x("EXECUTION_FAILED","Stored actor is invalid");return {kind:e.kind,id:e.id}}function Gn(t){let e=t.status;if(!["active","completed","expired","revoked","unsupported"].includes(e))throw new x("EXECUTION_FAILED","Stored UI instance status is invalid");let n=JSON.parse(t.granted_capabilities_json);if(!Array.isArray(n)||n.some(r=>typeof r!="string"))throw new x("EXECUTION_FAILED","Stored UI capability grant is invalid");return {id:t.id,definition:{id:t.definition_id,version:t.definition_version,hash:t.definition_hash},workspaceId:t.workspace_id,threadId:t.thread_id,anchorTaskId:t.anchor_task_id,domainRef:Zr(t.domain_ref_json),state:Zr(t.state_json),revision:t.revision,status:e,grantedCapabilities:n,createdAt:t.created_at,updatedAt:t.updated_at}}function Vn(t){return {id:t.id,instanceId:t.instance_id,requestId:t.request_id,actionId:t.action_id,actor:kf(t.actor_json),source:t.source,expectedRevision:t.expected_revision,beforeRevision:t.before_revision,afterRevision:t.after_revision,status:t.status,outcome:t.outcome,input:Zr(t.input_json),result:t.result_json===null?null:Zr(t.result_json),errorCode:t.error_code,requestedAt:t.requested_at,settledAt:t.settled_at}}function Jn(t,e){return t.get(drizzleOrm.sql`SELECT * FROM ui_instances WHERE id = ${e}`)}function Kn(t,e,n){return t.get(drizzleOrm.sql`SELECT * FROM ui_action_receipts WHERE instance_id = ${e} AND request_id = ${n}`)}function Qr(t){let e=t,n;for(let r=0;e&&r<4;r+=1){if(typeof e.code=="string"){n=e.code;break}e=e.cause;}return n==="SQLITE_BUSY"||n==="SQLITE_BUSY_SNAPSHOT"||n==="SQLITE_CONSTRAINT_UNIQUE"||n==="SQLITE_CONSTRAINT_PRIMARYKEY"}function vf(t){throw Qr(t)?new ve(t):new x("EXECUTION_FAILED","UI instance database operation failed")}var eo=class{handle;db;testHooks;constructor(e=_f(),n){Ua.mkdirSync(K.dirname(e),{recursive:true}),this.handle=Q(e),this.db=this.handle.db,this.testHooks=n,he(this.db,e);}close(){this.handle.close();}create(e){let n=me(e.domainRef),r=me(e.state),o=me([...e.grants]);try{this.db.run(drizzleOrm.sql`
333
+ INSERT INTO ui_instances (
334
+ id, definition_id, definition_version, definition_hash, workspace_id, thread_id,
335
+ anchor_task_id, domain_ref_json, state_json, revision, status,
336
+ granted_capabilities_json, created_at, updated_at
337
+ ) VALUES (
338
+ ${e.id}, ${e.definitionId}, ${e.definitionVersion}, ${e.definitionHash},
339
+ ${e.workspaceId}, ${e.threadId}, ${e.anchorTaskId}, ${n},
340
+ ${r}, 0, 'active', ${o}, ${e.now}, ${e.now}
341
+ )
342
+ `);}catch(s){vf(s);}let i=Jn(this.db,e.id);if(!i)throw new x("EXECUTION_FAILED","Created UI instance could not be read");return Gn(i)}get(e){let n=Jn(this.db,e);return n?Gn(n):null}getReceipt(e,n){let r=Kn(this.db,e,n);return r?Vn(r):null}runStateOnly(e,n){try{return this.db.transaction(r=>{let o=this.testHooks?.injectDatabaseError?.();if(o!==void 0)throw o;let i=Jn(r,e.instanceId);if(!i)throw new x("INSTANCE_NOT_FOUND","UI instance was not found");let s=e.expectedRevision+1,a=Ya();if(r.run(drizzleOrm.sql`
343
+ INSERT INTO ui_action_receipts (
344
+ id, instance_id, request_id, action_id, actor_json, source,
345
+ expected_revision, before_revision, after_revision, status, outcome,
346
+ input_json, result_json, error_code, requested_at, settled_at
347
+ ) VALUES (
348
+ ${a}, ${e.instanceId}, ${e.requestId}, ${e.actionId},
349
+ ${me(oe(e.actor))}, ${e.source},
350
+ ${e.expectedRevision}, ${i.revision}, NULL, 'requested', NULL,
351
+ ${me(e.input)}, NULL, NULL, ${e.now}, NULL
352
+ )
353
+ `),i.revision!==e.expectedRevision)throw new Ae(i.revision);if(this.testHooks?.bumpRevisionBeforeCas&&r.run(drizzleOrm.sql`UPDATE ui_instances SET revision = revision + 1 WHERE id = ${e.instanceId}`),r.run(drizzleOrm.sql`
354
+ UPDATE ui_instances
355
+ SET revision = revision + 1, updated_at = ${Math.max(e.now,i.updated_at)}
356
+ WHERE id = ${e.instanceId} AND revision = ${e.expectedRevision} AND status = 'active'
357
+ `).changes!==1)throw new Ae(i.revision);let c={instance:{...Gn(i),revision:s},actor:e.actor,source:e.source,input:e.input,requestId:e.requestId},l=n(c);if(l&&typeof l.then=="function")throw new x("EXECUTION_FAILED","State-only handler must be synchronous");let f=l??{},g="outcome"in f?f.outcome:"succeeded",m="errorCode"in f?Ef(f.errorCode):null,k=f.state?oe(f.state):Gn(i).state,h=f.result?me(oe(f.result)):null,v=Math.max(e.now,i.updated_at);r.run(drizzleOrm.sql`UPDATE ui_instances SET state_json = ${me(k)}, updated_at = ${v} WHERE id = ${e.instanceId} AND revision = ${s}`),r.run(drizzleOrm.sql`
358
+ UPDATE ui_action_receipts
359
+ SET status = 'settled', outcome = ${g}, after_revision = ${s},
360
+ result_json = ${h}, error_code = ${m}, settled_at = ${Math.max(e.now,i.updated_at)}
361
+ WHERE id = ${a} AND status = 'requested'
362
+ `);let w=Kn(r,e.instanceId,e.requestId);if(!w)throw new x("EXECUTION_FAILED","Action receipt settlement failed");return Vn(w)})}catch(r){throw r instanceof Ae||r instanceof ve||r instanceof x?r:Qr(r)?new ve(r):new x("EXECUTION_FAILED","UI state action failed")}}reserveExternal(e){try{return this.db.transaction(n=>{let r=this.testHooks?.injectDatabaseError?.();if(r!==void 0)throw r;let o=Jn(n,e.instanceId);if(!o)throw new x("INSTANCE_NOT_FOUND","UI instance was not found");let i=e.expectedRevision+1,s=Ya();if(n.run(drizzleOrm.sql`
363
+ INSERT INTO ui_action_receipts (
364
+ id, instance_id, request_id, action_id, actor_json, source,
365
+ expected_revision, before_revision, after_revision, status, outcome,
366
+ input_json, result_json, error_code, requested_at, settled_at
367
+ ) VALUES (
368
+ ${s}, ${e.instanceId}, ${e.requestId}, ${e.actionId},
369
+ ${me(oe(e.actor))}, ${e.source},
370
+ ${e.expectedRevision}, ${o.revision}, NULL, 'requested', NULL,
371
+ ${me(e.input)}, NULL, NULL, ${e.now}, NULL
372
+ )
373
+ `),o.revision!==e.expectedRevision)throw new Ae(o.revision);if(this.testHooks?.bumpRevisionBeforeCas&&n.run(drizzleOrm.sql`UPDATE ui_instances SET revision = revision + 1 WHERE id = ${e.instanceId}`),n.run(drizzleOrm.sql`
374
+ UPDATE ui_instances
375
+ SET revision = revision + 1, updated_at = ${Math.max(e.now,o.updated_at)}
376
+ WHERE id = ${e.instanceId} AND revision = ${e.expectedRevision} AND status = 'active'
377
+ `).changes!==1)throw new Ae(o.revision);let d=Kn(n,e.instanceId,e.requestId);if(!d)throw new x("EXECUTION_FAILED","Requested receipt could not be read");return {instance:{...Gn(o),revision:i},receipt:Vn(d),reservedRevision:i}})}catch(n){throw n instanceof Ae||n instanceof ve||n instanceof x?n:Qr(n)?new ve(n):new x("EXECUTION_FAILED","UI external action reservation failed")}}settleExternal(e){try{return this.db.transaction(n=>{let r=Jn(n,e.reservation.instanceId),o=Kn(n,e.reservation.instanceId,e.reservation.requestId);if(!r||!o)throw new x("EXECUTION_FAILED","Requested action receipt is missing");if(o.status==="settled")return Vn(o);let i=oe(e.state),s=e.result===null?null:me(oe(e.result)),a=Math.max(e.now,o.requested_at,r.updated_at);n.run(drizzleOrm.sql`
378
+ UPDATE ui_instances SET state_json = ${me(i)}, updated_at = ${a}
379
+ WHERE id = ${e.reservation.instanceId} AND revision = ${e.reservedRevision}
380
+ `).changes!==1?n.run(drizzleOrm.sql`
381
+ UPDATE ui_action_receipts
382
+ SET status = 'settled', outcome = 'conflicted', after_revision = ${e.reservedRevision},
383
+ result_json = NULL, error_code = 'REVISION_CONFLICT', settled_at = ${a}
384
+ WHERE id = ${o.id} AND status = 'requested'
385
+ `):n.run(drizzleOrm.sql`
386
+ UPDATE ui_action_receipts
387
+ SET status = 'settled', outcome = ${e.outcome}, after_revision = ${e.reservedRevision},
388
+ result_json = ${s}, error_code = ${e.errorCode}, settled_at = ${a}
389
+ WHERE id = ${o.id} AND status = 'requested'
390
+ `);let c=Kn(n,e.reservation.instanceId,e.reservation.requestId);if(!c)throw new x("EXECUTION_FAILED","External action settlement failed");return Vn(c)})}catch(n){throw n instanceof ve||n instanceof x?n:Qr(n)?new ve(n):new x("EXECUTION_FAILED","UI external action settlement failed")}}};function Ya(){return `uicr_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,12)}`}function Ef(t){return typeof t=="string"&&/^[A-Z][A-Z0-9_]{0,63}$/.test(t)?t:"EXECUTION_FAILED"}var xf=new Set(["definition","workspaceId","threadId","anchorTaskId","domainRef","state"]),Rf=new Set(["definition","workspaceId","threadId","domainRef","state"]),bf=new Set(["instanceId","actionId","expectedRevision","requestId","input"]),ed=new Set(["source","workspaceId","actor"]),Qa=new Set(["source","workspaceId","threadId","actor"]),Tf=ed,Ti=4;function td(t,e){return new to(t,e)}function nd(t){return new to(t.workspaceId,t,void 0,true)}var to=class{store;workspaceId;localActor;policy;serverPolicy;serverMode;definitions=new Map;handlers=new Map;clock;testHooks;constructor(e,n,r,o=false){if(this.serverMode=o,!e)throw new x("INPUT_INVALID","UI runtime workspace is invalid");if(o){let i=n;if(!i.dbPath||!i.grantPolicy)throw new x("INPUT_INVALID","Authenticated UI runtime options are invalid");this.serverPolicy=i.grantPolicy;}else {let i=n;if(i.localActor.kind!=="local"||!i.localActor.id)throw new x("INPUT_INVALID","Local UI runtime identity is invalid");this.localActor=i.localActor,this.policy=i.localGrantPolicy;}this.workspaceId=e,this.clock=n.clock??(()=>Date.now()),this.testHooks=r;for(let i of n.definitions??[]){Va(i);let s=xi(i);if(this.definitions.has(s))throw new x("DEFINITION_UNSUPPORTED","Duplicate UI definition");this.definitions.set(s,i);}for(let i of n.handlers??[]){if(!i.definitionId||!i.actionId||i.version<1)throw new x("INPUT_INVALID","UI handler registration is invalid");let s=Za(i.definitionId,i.version,i.actionId);if(this.handlers.has(s))throw new x("INPUT_INVALID","Duplicate UI handler registration");this.handlers.set(s,i);}this.store=Af(n.dbPath,r);}close(){this.store.close();}async createInstance(e,n){if(Ai(e,xf,Rf),this.serverMode){if(!n)throw new x("UNAUTHENTICATED","Authenticated UI context is required");if(this.validateServerContext(n),e.workspaceId!==n.workspaceId||e.threadId!==n.threadId)throw new x("WORKSPACE_MISMATCH","UI instance scope does not match authenticated context")}else if(e.workspaceId!==this.workspaceId)throw new x("WORKSPACE_MISMATCH","Workspace does not match this runtime");if(!e.threadId||e.threadId.length>256||e.anchorTaskId!==void 0&&e.anchorTaskId.length>256)throw new x("INPUT_INVALID","UI instance scope is invalid");let r=this.requireDefinition(e.definition),o=oe(e.domainRef),i=oe(e.state),s=this.resolveInstanceGrants(r,n),a=this.now();return this.store.create({id:If(),definitionId:r.id,definitionVersion:r.version,definitionHash:r.hash,workspaceId:e.workspaceId,threadId:e.threadId,anchorTaskId:e.anchorTaskId??null,domainRef:o,state:i,grants:s,now:a})}async dispatchAction(e,n){Ai(e,bf),Ai(n,this.serverMode?Qa:ed,this.serverMode?Qa:Tf),this.validateContext(n);let r={...e,input:this.validateEnvelope(e)},o=this.store.get(r.instanceId);if(!o)throw new x("INSTANCE_NOT_FOUND","UI instance was not found");if(o.workspaceId!==this.workspaceId||n.workspaceId!==o.workspaceId||this.serverMode&&o.threadId!==n.threadId)throw new x("WORKSPACE_MISMATCH","Workspace does not match the UI instance");if(o.status!=="active")throw new x("INSTANCE_NOT_ACTIONABLE","UI instance is not actionable");let i=this.requireDefinition(o.definition),s=i.actions[r.actionId];if(!s)throw new x("ACTION_UNAVAILABLE","UI action is not declared");if(this.validateActionDeclaration(i,r.actionId,s.inputKeys,r.input),this.resolveEffectiveCapabilities(i,r.actionId,s.capabilities,o.grantedCapabilities,n).length===0)throw new x("CAPABILITY_DENIED","UI action capability is not granted");let d=this.handlers.get(Za(i.id,i.version,r.actionId));if(!d)throw new x("HANDLER_NOT_FOUND","UI action handler is not registered");let c=this.store.getReceipt(r.instanceId,r.requestId);if(c)return c;if(o.revision!==r.expectedRevision)throw new x("REVISION_CONFLICT","UI instance revision is stale",o.revision);await this.testHooks?.beforeReservation?.();let l={instanceId:r.instanceId,requestId:r.requestId,actionId:r.actionId,actor:n.actor,source:n.source,expectedRevision:r.expectedRevision,input:r.input,now:this.now()};return d.kind==="state"?this.dispatchStateWithRetry(l,d):this.dispatchExternalWithRetry(l,d)}async getInstance(e,n){if(!this.serverMode)throw new x("UNAUTHENTICATED","Authenticated UI context is not available in local runtime");if(this.validateServerContext(n),!e)throw new x("INPUT_INVALID","UI instance lookup identity is invalid");let r=this.store.get(e);return !r||r.workspaceId!==n.workspaceId||r.threadId!==n.threadId?null:r}async getReceipt(e,n,r){if(!e||!n)throw new x("INPUT_INVALID","Receipt lookup identity is invalid");let o=this.store.get(e);if(this.serverMode){if(!r)throw new x("UNAUTHENTICATED","Authenticated UI context is required");if(this.validateServerContext(r),!o||o.workspaceId!==r.workspaceId||o.threadId!==r.threadId)return null}else if(!o||o.workspaceId!==this.workspaceId)return null;return this.store.getReceipt(e,n)}async dispatchStateWithRetry(e,n){for(let o=0;o<Ti;o+=1)try{return this.store.runStateOnly(e,n.handle)}catch(i){if(i instanceof Ae){let a=this.store.getReceipt(e.instanceId,e.requestId);if(a)return a;throw new x("REVISION_CONFLICT","UI instance revision is stale",i.currentRevision)}if(!(i instanceof ve))throw i;let s=this.store.getReceipt(e.instanceId,e.requestId);if(s)return s;await Ii(o);}let r=this.store.getReceipt(e.instanceId,e.requestId);if(r)return r;throw new x("ACTION_IN_FLIGHT","UI action is still being committed")}async dispatchExternalWithRetry(e,n){let r;for(let l=0;l<Ti;l+=1)try{r=this.store.reserveExternal(e);break}catch(f){if(f instanceof Ae){let m=this.store.getReceipt(e.instanceId,e.requestId);if(m)return m;throw new x("REVISION_CONFLICT","UI instance revision is stale",f.currentRevision)}if(!(f instanceof ve))throw f;let g=this.store.getReceipt(e.instanceId,e.requestId);if(g)return g;await Ii(l);}if(!r){let l=this.store.getReceipt(e.instanceId,e.requestId);if(l)return l;throw new x("ACTION_IN_FLIGHT","UI action is still being committed")}let o;try{o=await n.handle({instance:r.instance,actor:e.actor,source:e.source,input:e.input,requestId:e.requestId});}catch{o={outcome:"failed",errorCode:"EXECUTION_FAILED"};}let i="outcome"in o?o.outcome:"succeeded",s="errorCode"in o?Pf(o.errorCode):null,a=r.instance.state,d=null;try{o.state&&(a=oe(o.state)),o.result&&(d=oe(o.result));}catch{a=r.instance.state,d=null;}for(let l=0;l<Ti;l+=1)try{return this.store.settleExternal({reservation:e,reservedRevision:r.reservedRevision,outcome:i,state:a,result:d,errorCode:s,now:this.now()})}catch(f){if(!(f instanceof ve))throw f;await Ii(l);}let c=this.store.getReceipt(e.instanceId,e.requestId);if(c)return c;throw new x("ACTION_IN_FLIGHT","UI action settlement is still being committed")}resolveDefinition(e){let n=this.definitions.get(xi(e));return !n||n.hash!==e.hash||zn(n)!==n.hash?null:n}requireDefinition(e){let n=this.resolveDefinition(e);if(!n)throw new x("DEFINITION_UNSUPPORTED","Pinned UI definition is unavailable");return n}resolveInstanceGrants(e,n){if(this.serverMode){if(!n||!this.serverPolicy)throw new x("UNAUTHENTICATED","Authenticated grant policy is unavailable");try{let r=this.serverPolicy.resolveInstanceGrants({definition:e,workspaceId:n.workspaceId,actor:n.actor});if(!Array.isArray(r)||r.some(o=>typeof o!="string"||!o||o==="*"||o==="all"||/[/*]/.test(o)))throw new Error("invalid grant");return [...new Set(r)]}catch{throw new x("CAPABILITY_DENIED","Authenticated capability grant was denied")}}if(!this.policy||!this.localActor)return [];try{let r=this.policy.resolveInstanceGrants({definition:e,workspaceId:this.workspaceId,actor:this.localActor});if(!Array.isArray(r)||r.some(o=>typeof o!="string"||!o||o==="*"||o==="all"||/[/*]/.test(o)))throw new Error("invalid grant");return [...new Set(r)]}catch{throw new x("INPUT_INVALID","Local capability policy returned an invalid grant")}}resolveEffectiveCapabilities(e,n,r,o,i){if(this.policy)try{let a=this.policy.resolveActionCapabilities({definition:e,actionId:n});if(!Cf(a,r))throw new Error("definition capability mismatch")}catch{throw new x("DEFINITION_UNSUPPORTED","UI action capability declaration is unavailable")}let s;if(this.serverMode&&this.serverPolicy?.resolveDispatchCapabilities)try{if(s=this.serverPolicy.resolveDispatchCapabilities({definition:e,actionId:n,actor:i.actor,source:i.source}),!Array.isArray(s)||s.some(a=>typeof a!="string"||!a||a==="*"||a==="all"||/[/*]/.test(a)))throw new Error("invalid dispatch grant")}catch{throw new x("CAPABILITY_DENIED","Authenticated dispatch capability was denied")}return [...Kr(r,o,s)]}validateContext(e){if(this.serverMode){this.validateServerContext(e);return}if(!this.localActor||e.source!=="cli"||e.workspaceId!==this.workspaceId||e.actor.kind!=="local"||e.actor.id!==this.localActor.id)throw new x("UNAUTHENTICATED","CLI local execution context is invalid")}validateServerContext(e){if(e.source!=="system"&&e.source!=="ui_host")throw new x("UNAUTHENTICATED","Authenticated UI source is invalid");if(e.workspaceId!==this.workspaceId||!e.threadId||e.actor.kind!=="authenticated"||!e.actor.id)throw new x("UNAUTHENTICATED","Authenticated UI context is invalid")}validateEnvelope(e){if(!e.instanceId||e.instanceId.length>128||!e.actionId||e.actionId.length>128||!e.requestId||Bn(e.requestId)>128||!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)throw new x("INPUT_INVALID","UI action envelope is invalid");let n=oe(e.input),r=me(n);if(Bn(r)>64*1024)throw new x("INPUT_INVALID","UI action input is too large");return n}validateActionDeclaration(e,n,r,o){if(r&&Object.keys(o).some(i=>!r.includes(i)))throw new x("INPUT_INVALID","UI action input is invalid")}now(){let e=this.clock();if(!Number.isFinite(e))throw new x("EXECUTION_FAILED","UI runtime clock is invalid");return Math.max(0,Math.floor(e))}};function Af(t,e){return new eo(t,{injectDatabaseError:e?.injectDatabaseError,bumpRevisionBeforeCas:e?.bumpRevisionBeforeCas})}function Ai(t,e,n=e){if(t===null||typeof t!="object")throw new x("INPUT_INVALID","UI contract input is invalid");for(let r of Object.keys(t))if(!e.has(r))throw new x("INPUT_INVALID","Unknown UI contract field");for(let r of n)if(!Object.prototype.hasOwnProperty.call(t,r))throw new x("INPUT_INVALID","Missing UI contract field")}function Za(t,e,n){return `${t}\0${e}\0${n}`}function If(){return `uic_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,12)}`}function Pf(t){return typeof t=="string"&&/^[A-Z][A-Z0-9_]{0,63}$/.test(t)?t:"EXECUTION_FAILED"}function Cf(t,e){return t.length===e.length&&t.every(n=>e.includes(n))}async function Ii(t){await new Promise(e=>setTimeout(e,Math.min(8,1<<t)));}Re();function _d(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)?t:void 0}function ng(t){return t.slice(t.lastIndexOf("/")+1)}var rg=new Set(["tools","effort","mode","provider","model","profiles","overdrive"]);function og(t){if(!t)return;let n=Object.entries(t).filter(([,r])=>r!=null&&typeof r!="object"&&typeof r!="function").filter(([r])=>!rg.has(r));if(n.length!==0)return Object.fromEntries(n.map(([r,o])=>[r,String(o)]))}function kd(t,e,n){let r=_d(t);if(!r)return {};let o=ng(e),i=!n.active&&o==="grok"?In(r):r,s=n.active?n.providerOptions:_d(i[o]);return {modeOptions:i,providerOptions:s,configOptions:og(i)}}function ig(t){return t?t.settings?.template?.exec:void 0}function sg(){try{let t=new Uint8Array(8);return globalThis.crypto.getRandomValues(t),Array.from(t,e=>e.toString(16).padStart(2,"0")).join("")}catch{let{randomBytes:t}=ge("crypto");return t(8).toString("hex")}}var qi=class t extends Mn{_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,n={},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=Jr(s),this._workspaceName=K.basename(s);let a=ig(r);this._templateEngine=new Cn({execPolicy:n.execPolicy??a}),this._documentLoader=o??new Ut,this._layoutLoader=new Sn({templatesPath:Gt()}),this._layoutRenderer=new Dn,this._remoteFactory=n.remoteFactory,this._additionalArgsProvider=n.additionalArgsProvider;}async resolveFileRemoteTarget(e){let n=this.getAgent(e),r=Array.isArray(n?.provider)?n?.provider[0]:n?.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=K.resolve(i.location.replace("file://","")),a=i.external_agent_id??e.replace(/^@/,""),d=this._remoteTargets.get(s);d||(d=(this._remoteFactory??(m=>t.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:n,dir:r}=So(),o;try{o=Ua.readFileSync(n,"utf-8");}catch(s){throw new Error(`[@crewx/sdk] Cannot read built-in config: ${n}
391
+ ${s.message}`)}let i=_r(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"&&!K.isAbsolute(c.path)?s[a]={...c,path:K.resolve(r,c.path)}:s[a]=c;}else s[a]=d;return {...i,documents:s}}return i}static mergeCrewxConfig(e,n){let r=new Map;for(let _ of e.agents??[])r.set(_.id,_);for(let _ of n.agents??[])r.has(_.id)&&console.warn(`[agent-loader] User agent "${_.id}" overrides built-in`),r.set(_.id,_);let o=Array.from(r.values()),i={...e.layouts??{},...n.layouts??{}},s={...e.documents??{},...n.documents??{}},a=e,d=n,c=vd(a.vars,d.vars),l=vd(a.settings,d.settings),f;e.skills&&n.skills&&typeof e.skills=="object"&&typeof n.skills=="object"&&!Array.isArray(e.skills)&&!Array.isArray(n.skills)?f={...e.skills,...n.skills}:f=n.skills??e.skills;let g=[...e.hooks??[],...n.hooks??[]],m=ag(a.providers,d.providers),k={...e},h={...n};for(let _ of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete k[_],delete h[_];let w={...{...k,...h},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,n,r){let o=n?.includeBuiltIns!==false,i,s;if(o){let l=await t.loadBuiltInConfig(r);if(e!==void 0){let f=kr(e);i=t.mergeCrewxConfig(l,f),s=K.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=kr(e),s=K.dirname(e);}let a=new Ut(r);await a.load(i.documents,s);let d=i.agents??[];return await Ed(d,i,n),new t(d,n??{},i,a,s)}static async fromConfig(e,n,r,o){let i=n?.includeBuiltIns===true,s=e;if(i){let l=await t.loadBuiltInConfig(o);s=t.mergeCrewxConfig(l,e);}let a=new Ut(o);await a.load(s.documents,r??(typeof process<"u"?process.cwd():"/"));let d=s.agents??[];return await Ed(d,s,n),new t(d,n??{},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}createUiRuntime(e){return td(this._workspaceId,e)}get workspaceName(){return this._workspaceName}getAgent(e){let n=e.startsWith("@")?e.slice(1):e;return this._agents.get(n)}getRemoteProviderConfig(e){let n=this._config?.providers;return Array.isArray(n)?n.find(o=>o.type==="remote"&&o.id===e):void 0}computeTaskLogPath(e,n){let r=Ko(n);return K.join(this._projectRoot,".crewx","logs",`${r}_${e}.log`)}registerTool(e,n){this._tools.set(e,{name:e,...n});}async use(e){this._plugins.includes(e)||(await e.attach(this),this._plugins.push(e));}handler(e){return vi(this,e)}async registerChannelAdapter(e){let{adapter:n,instanceId:r,config:o}=e;if(this._activeAdapters.has(r))throw new Error(`Adapter instance already registered: ${r}`);let i=new Set(n.manifest.capabilities),s=e.store??ri(r),a=e.defaultMode??"query",d=n.manifest.platform,c=e.agentRunner??{run:async(m,k,h)=>{let w=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${m}`,k,{threadId:h?.threadId,platform:d});return {output:w.ok?w.data:w.error?.message??""}}},l=e.onInbound??(async m=>{let k=m.routingHints?.agentId??e.defaultAgent;if(!k)return {accepted:false,reason:"no_agent"};let{output:h}=await c.run(k,m.text,{threadId:m.threadId});return {accepted:true,output:h}}),f=ii({instanceId:r,config:o,capabilities:i,db:s,agentRunner:c,onInbound:l}),g={adapter:n,ctx:f,state:"starting"};this._activeAdapters.set(r,g),this.emit("adapter:lifecycle",{adapterId:n.manifest.id,instanceId:r,state:"starting",timestamp:new Date});try{await n.start(f),g.state="started",this.emit("adapter:lifecycle",{adapterId:n.manifest.id,instanceId:r,state:"started",timestamp:new Date});}catch(m){throw g.state="failed",this.emit("adapter:lifecycle",{adapterId:n.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 n=this._activeAdapters.get(e);if(n){n.state="stopping",this.emit("adapter:lifecycle",{adapterId:n.adapter.manifest.id,instanceId:e,state:"stopping",timestamp:new Date});try{await n.adapter.stop(n.ctx),n.state="stopped",this.emit("adapter:lifecycle",{adapterId:n.adapter.manifest.id,instanceId:e,state:"stopped",timestamp:new Date});}catch(r){n.state="failed",this.emit("adapter:lifecycle",{adapterId:n.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 n=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}`)),n))])));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,n]of this._activeTasks)if(n.pid!==void 0)try{process.platform==="win32"?process.kill(n.pid,"SIGTERM"):process.kill(-n.pid,"SIGTERM");}catch(r){console.error(`[crewx] abort task ${e} (pid=${n.pid}) error: ${r instanceof Error?r.message:String(r)}`);}}async _drainActiveTasks(e){let n=Array.from(this._activeTasks.values()).map(r=>r.done);n.length!==0&&await Promise.race([Promise.allSettled(n),new Promise(r=>setTimeout(r,e).unref())]);}async close(){this.abortAll(),await this._drainActiveTasks(Tn+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 n=[...this._plugins].reverse();for(let r of n)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 n=a=>a?a.split(",").map(d=>d.trim().toLowerCase()).filter(Boolean):void 0,r=n(e.role),o=n(e.team),i=n(e.provider),s=Array.from(this._agents.values());return r&&(s=s.filter(a=>a.role&&r.some(d=>Fe(a.role.toLowerCase(),d)))),o&&(s=s.filter(a=>a.team&&o.some(d=>Fe(a.team.toLowerCase(),d)))),i&&(s=s.filter(a=>(Array.isArray(a.provider)?a.provider:[a.provider]).some(c=>i.some(l=>Fe(c.toLowerCase(),l))))),s}renderAgentPrompt(e){let n=e.startsWith("@")?e.slice(1):e,r=this._agents.get(n);if(!r)throw new et(n,Array.from(this._agents.keys()));return r.inline?.prompt??r.inline?.system_prompt??r.description??`You are an expert ${n}.`}async renderPrompt(e,n){let o={...await this._documentLoader.buildContext(),...n?.documents??{}},i={...n,documents:o};return this._templateEngine.render(e,i)}registerLayout(e,n){this._layoutLoader.registerLayout(e,n);}async renderAgentPromptFull(e,n){let r=n?.__contextBudget,o=e.startsWith("@")?e.slice(1):e,i=this._agents.get(o);if(!i)throw new et(o,Array.from(this._agents.keys()));let s=this._resolveLayoutSpec(i,n?.layout),a=this._extractLayoutId(s),d=this._extractLayoutProps(i,s,n?.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=n?.env??(typeof process<"u"?process.env:{}),m=n?.vars?.security_key??sg(),k={...n?.vars??{},documents:f,env:g,agent:{id:i.id,name:i.name??i.id,role:i.role??"",team:i.team??"",description:i.description??""}},h=await this._templateEngine.render(l,k),v={mode:n?.session?.mode??"query",platform:n?.session?.platform??"cli",options:n?.session?.options??[]},w=i.provider,_=Array.isArray(w)?w:typeof w=="string"&&w.length>0?[w]:[],R=_.join(", ")||(typeof w=="string"?w:""),b=i.options,L=["goals","daily"],A={goals:false,daily:false},Z;if(!Array.isArray(b)&&typeof b=="object"&&b!==null){let N=b;if("goals"in N){let J=N.goals;typeof J=="string"||Array.isArray(J)?A.goals=J:A.goals=!!J;}"daily"in N&&(A.daily=!!N.daily);let Y={};for(let[J,ie]of Object.entries(N))L.includes(J)||(Y[J]=ie);if(Object.keys(Y).length>0){let J=_.some(Ye=>Ye.startsWith("cli/")),ie={};for(let[Ye,Qe]of Object.entries(Y)){let E={};if(Array.isArray(Qe))J&&(E.rawArgs=Qe);else if(typeof Qe=="object"&&Qe!==null){let U=Qe;Object.keys(U).length>0&&(E.named=U);}(E.named||E.rawArgs&&E.rawArgs.length>0)&&(ie[Ye]=E);}Z=Object.keys(ie).length>0?ie:void 0;}}let P=Array.isArray(b)?b:void 0,F={};for(let[N,Y]of Object.entries(f))F[N]={content:Y.content??"",toc:Y.toc,summary:Y.summary,path:Y.path};if(A.goals){let N=K.join(this._projectRoot,"docs","goal"),Y=await ga(N,void 0,A.goals);Y&&(F.active_goals={content:Y});}if(A.daily){let N=K.join(this._projectRoot,"docs","daily"),Y=await ma(N);Y&&(F.today_daily={content:Y});}let ce=n?.vars?.user_input??void 0,H=this._config?.settings?.dreaming?.continuity,O=H?.reuseReadOnly!==false,te=typeof H?.lookback=="number"?H.lookback:5,z=typeof H?.maxEntryChars=="number"?H.maxEntryChars:8e3,$=n?.threadId??"",W=i.id,fe=!r?.activityLogDisabled&&O&&te>0&&!!$&&!!n?.messages?.length,ee=new Map;if(fe)if(r?.activityLogTokenBudget!==void 0&&r.countTokens){let N=ki({threadId:$,agentId:W,lookback:te,maxEntryChars:z,activityLogTokenBudget:r.activityLogTokenBudget,countTokens:r.countTokens});ee=N.activityLogByTask,r.onActivityLogResult?.(N);}else {typeof H?.decayRate=="number"?H.decayRate:.5;ee=Fa({threadId:$,agentId:W,lookback:te,maxEntryChars:z});}let un=(n?.messages??[]).map(N=>{let Y=typeof N.activity_log=="string"?$r(N.activity_log):N.activity_log;if(!N.isAssistant)return Y===N.activity_log?N:{...N,activity_log:Y};let J=N.metadata?.task_id;return !J||!ee.has(J)?Y===N.activity_log?N:{...N,activity_log:Y}:{...N,activity_log:$r(ee.get(J))}}),Et={user_input:ce,agent:{id:i.id,name:i.name??i.id,role:i.role??"",team:i.team??"",description:i.description??"",provider:R,providerList:_,model:i.inline?.model,workingDirectory:i.working_directory??i.workingDirectory??".",inline:{...i.inline??{},prompt:h},specialties:i.specialties??[],capabilities:i.capabilities??[],remote:i.remote??null,optionsByMode:Z,optionsArray:P},agentMetadata:{specialties:i.specialties??[],capabilities:i.capabilities??[],description:i.description??""},contextOptions:A,documents:F,skills:n?.skills??[],session:v,env:g,vars:{security_key:m,...n?.vars??{}},props:{...d??{},...n?.messages&&n.messages.length>0?{showConversationHistory:true}:{}},platform:v.platform,mode:v.mode,thread_id:$,now:On(new Date),has_activity_log:ee.size>0,messages:un,tools:this._tools.size>0?{list:Array.from(this._tools.values()).map(N=>({name:N.name,description:N.description,parameters:N.parameters})),json:JSON.stringify(Array.from(this._tools.values()).map(N=>({name:N.name,description:N.description,parameters:N.parameters})),null,2),count:this._tools.size}:null,metadata:{}};return this._layoutRenderer.render(c,Et)}_filterToolsByMode(e){return e?e.map(n=>this._tools.get(n)).filter(n=>n!==void 0):Array.from(this._tools.values())}_resolveLayoutSpec(e,n){if(n!==void 0)return n;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 n=`crewx/__inline_${Date.now()}`;return this._layoutLoader.registerLayout(n,e.template),n}return "crewx/default"}_extractLayoutProps(e,n,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(n=>n.name==="conversation")?.conversationProvider}async _fetchHistoryMessages(e,n,r,o){if(r&&r.length>0)return tn(r,o);if(!e){let s=tn([],o);return s.length>0?s:void 0}let i=this._getConversationProvider();if(!i){let s=tn([],o);return s.length>0?s:void 0}try{let s=await i.fetchHistory(e,{currentTraceId:n});if(s.messages.length===0){let a=tn([],o);return a.length>0?a:void 0}return tn(pi(s),o)}catch{return}}async _resolveFreshProvider(e,n,r){let o=ha(e.provider),i=Vo(e.options,n,o,Go(r?.overdrive)),s=Jo(e.options,n),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,n){if(n&&n.trim())return n;let r=pr(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:Ao,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 n=e.providerResolution.effectiveProviderStr,r=this._resolveBudgetModel(n,e.providerResolution.effectiveModel),o=this._readInputBudgetPercent(),i=wr({provider:n,model:r,inputBudgetPercent:o}),s=e.providerResolution.baseProviderStr,a=e.providerResolution.baseModel??null,d=r||null,c=yr(e.message,{provider:n,model:r}).tokenCount,l=this._buildInstructionOnlyResumeManifest({budget:i,requestedProvider:s,requestedModel:a,effectiveProvider:n,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((n,r)=>({tokenCount:n.tokenCount+r.tokenCount,includedEntries:n.includedEntries+r.includedEntries,omittedEntries:n.omittedEntries+r.omittedEntries}),{tokenCount:0,includedEntries:0,omittedEntries:0}):{tokenCount:0,includedEntries:0,omittedEntries:0}}_buildUnresolvedContextBudgetManifest(e){return {phase:"fresh",initialInputFraming:mr,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 n=this._activityLogEntryCounts(e.activityLogResult);return {phase:"fresh",initialInputFraming:mr,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:n.tokenCount,activityIncludedEntries:n.includedEntries,activityOmittedEntries:n.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 n=e.historyMessages,r=n??[],o=r.length,i=e.providerResolution.effectiveProviderStr,s=this._resolveBudgetModel(i,e.providerResolution.effectiveModel),a=this._readInputBudgetPercent(),d=wr({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:n}),contextBudget:this._buildUnresolvedContextBudgetManifest({budget:d,requestedProvider:c,requestedModel:l,effectiveProvider:i,effectiveModel:f,rawInputBudgetPercent:a,historyOriginalMessages:o})};let g=Co({provider:i,model:d.model}),m=A=>g.countTokens(A),k=A=>Po({systemPrompt:A,message:e.message},m),h,v=await this._renderFreshPromptVariant({...e,messages:n,activityLogTokenBudget:d.inputBudgetTokens,countTokens:m,onActivityLogResult:A=>{h=A;}}),w=k(v),_=w,R=false,b=r;if(_>d.inputBudgetTokens&&h&&h.activityLogByTask.size>0&&(v=await this._renderFreshPromptVariant({...e,messages:b,activityLogDisabled:true,activityLogTokenBudget:d.inputBudgetTokens,countTokens:m}),_=k(v),R=true),_>d.inputBudgetTokens&&b.length>0)for(let A=1;A<=r.length;A++){let Z=r.slice(A),P=await this._renderFreshPromptVariant({...e,messages:Z,activityLogDisabled:R,activityLogTokenBudget:d.inputBudgetTokens,countTokens:m}),F=k(P);if(v=P,_=F,b=Z,F<=d.inputBudgetTokens)break}let L=this._buildResolvedContextBudgetManifest({budget:d,requestedProvider:c,requestedModel:l,effectiveProvider:i,effectiveModel:f,initialTokenCount:w,finalTokenCount:_,activityLogResult:h,activityRemovedForBudget:R,historyOriginalMessages:o,historyIncludedMessages:b.length});return _>d.inputBudgetTokens?{renderedPrompt:v,contextBudget:L,countTokens:m,error:{code:"INPUT_BUDGET_EXCEEDED",message:`Input budget exceeded: final provider initial input is ${_} tokens; budget is ${d.inputBudgetTokens} tokens.`}}:{renderedPrompt:v,contextBudget:L,countTokens:m}}_recountFreshProviderInitialInput(e){let n=e.contextBudgetManifest;if(!n?.resolved||!n.effectiveModel)return null;let r=e.countTokens??(o=>yr(o,{provider:n.effectiveProvider,model:n.effectiveModel}).tokenCount);return Po({systemPrompt:e.providerOptions.systemPrompt,message:e.message},r)}_validateFreshProviderInitialInputBudget(e){let n=e.contextBudgetManifest;if(!n?.resolved||n.finalTokenCount===null||n.inputBudgetTokens===null)return;let r=this._recountFreshProviderInitialInput(e);if(r!==null){if(r!==n.finalTokenCount)throw new Error(`Context budget recount mismatch: provider initial input is ${r} tokens but manifest.finalTokenCount is ${n.finalTokenCount}.`);if(r>n.inputBudgetTokens)return {code:"INPUT_BUDGET_EXCEEDED",message:`Input budget exceeded: final provider initial input is ${r} tokens; budget is ${n.inputBudgetTokens} tokens.`}}}_resolveTimeout(e,n){let r=e==="query"?"CREWX_TIMEOUT_QUERY":"CREWX_TIMEOUT_EXECUTE";if(process.env[r]!=null&&process.env[r]!==""){let o=Ys();return e==="query"?o.queryMs:o.executeMs}if(n?.meta?.defaultTimeoutMs){let o=e==="query"?n.meta.defaultTimeoutMs.query:n.meta.defaultTimeoutMs.execute;if(o!==void 0)return o}return 8*36e5}_resolveIdleTimeout(e){let n=Wo();return n!==void 0?n:e?.meta?.defaultIdleMs!==void 0?e.meta.defaultIdleMs:6e5}_lookupCliAdapter(e){return si(e)}_resolveEffectiveCost(e,n,r){return ys(e?.costUsd,e?.inputTokens,e?.outputTokens,e?.cachedInputTokens,n)}_resolveEffectiveCwd(e,n){return n?.cwd??(e.working_directory?K.resolve(this._projectRoot,e.working_directory):this._projectRoot)}_buildFileRemoteOptions(e,n){let r={path:this._projectRoot,id:this._workspaceId,name:this._workspaceName,agentRef:e};return {...n,cwd:void 0,callerIdentity:r,metadata:{...n?.metadata??{},crewx:{...n?.metadata?.crewx??{},callerWorkspace:r}},vars:{...n?.vars??{},crewx_caller_workspace_path:r.path,crewx_caller_workspace_id:r.id,crewx_caller_workspace_name:r.name}}}_registerCallerIdentityOverride(e,n,r){let o=Symbol("callerIdentityOverride");return this._callerIdentityOverrides.set(e,{token:o,callerIdentity:n,targetIdentity:r}),o}_clearCallerIdentityOverride(e,n){if(!n)return;let r=this._callerIdentityOverrides.get(e);r&&r.token===n&&this._callerIdentityOverrides.delete(e);}_rewriteCallerFacingPayload(e,n,r){let{callerIdentity:o,targetIdentity:i}=r,s={...n,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,n){if(e==="task:start"||e==="task:end"||e==="task:output"){let r=n.traceId,o=this._callerIdentityOverrides.get(r);if(o){let i=this._rewriteCallerFacingPayload(e,n,o);super.emit(e,i);return}}super.emit(e,n);}emitToolEvents(e,n,r,o,i,s,a){try{let c=this._lookupCliAdapter(r)?.parseEvent?.(o)??bn(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:n,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:n,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,n,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:n,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:n,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,n,r){let o=await this.resolveFileRemoteTarget(e);if(o){let l=await o.target.query(o.agentRef,n,this._buildFileRemoteOptions(e,r));return {...l,meta:{...l.meta,agentId:e.replace(/^@/,"")}}}let i=Un.getStore()??ai(r?.trace),s=r?.taskId??it("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 Un.run(d,async()=>{let l=Date.now(),f=new Date,g;try{g=vr(e,Array.from(this._agents.values()));}catch(E){if(E instanceof et){this.emit("task:start",{traceId:s,timestamp:f,agentRef:e,message:n,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 U=Date.now()-l,B={code:"AGENT_NOT_FOUND",message:E.message};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:U,error:B,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:B,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:U,taskId:s}}}throw E}d.callerAgentId=g.id;let m=await this._resolveFreshProvider(g,"query",r),k=m.baseProviderStr,h=m.effectiveProviderStr,v=m.effectiveModel,w=m.overdrive,_=h!==k?void 0:r?.resumeSessionId,b=this._resolveContextMode(r)==="instruction-only",L,A,Z,P=v,F,ce,X,re,H=!1,O=E=>{H||(H=!0,this.emit("task:start",{traceId:s,timestamp:f,agentRef:e,message:n,mode:"query",pid:E,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:P,provider:h,codingAgentCommand:L,renderedPrompt:ce,metadata:{...r?.metadata??{},provider:h,...w.active?{overdrive:!0}:{},...F?{provider_session_id:F}:{},...X?{context_budget:X}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));};if(b){let E=this._prepareInstructionOnlyResumeWithBudget({message:n,providerResolution:m,resumeSessionId:_});if(X=E.contextBudget,E.error){O();let U=Date.now()-l,B=E.error;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:U,error:B,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:B,meta:{agentId:g.id,provider:h,model:v,durationMs:U,taskId:s}}}}let te;try{te=rt(h,this._additionalArgsProvider);}catch(E){O();let U=Date.now()-l,B={code:"PROVIDER_ERROR",message:E.message,...E instanceof exports.ProviderError?{providerCode:E.code}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:U,error:B,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:B,meta:{agentId:g.id,provider:h,model:v,durationMs:U,taskId:s}}}let z;if(b||(z=await this._fetchHistoryMessages(r?.threadId,s,r?.messages,r?.uiProjections)),!b)try{let E=await this._prepareFreshPromptWithBudget({agentRef:e,agent:g,mode:"query",message:n,options:r,providerResolution:m,historyMessages:z});if(ce=E.renderedPrompt,X=E.contextBudget,re=E.countTokens,E.error){O();let U=Date.now()-l,B=E.error;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:U,error:B,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:B,meta:{agentId:g.id,provider:h,model:v,durationMs:U,taskId:s}}}}catch(E){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${E instanceof Error?E.message:String(E)}`);}let $=g.options,W=kd($?.query,h,w),fe=w.active?w.mode:W.modeOptions?.mode,ee=w.effort??r?.effort??W.modeOptions?.effort,un=Array.isArray($?.query?.tools)?$.query.tools:void 0,Et=this._tools.size>0?this._filterToolsByMode(un):[],N=W.configOptions,Y=g.inline?.max_steps;h.startsWith("api/")&&O();let J=!1,ie=0,Ye=()=>{},Qe=new Promise(E=>{Ye=E;});this._activeTasks.set(s,{pid:void 0,done:Qe});try{let E={model:v,effort:ee,mode:fe,context:r?.context,...b?{}:{systemPrompt:ce??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`},additionalArgs:Array.isArray($?.query)?$.query:void 0,resumeSessionId:_,tools:Et.length>0?Et:void 0,maxSteps:Y,providerOptions:W.providerOptions,configOptions:N,timeoutMs:this._resolveTimeout("query",this._lookupCliAdapter(h)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(h)),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:h,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(s,f)},onPid:S=>{let se=this._activeTasks.get(s);se&&(se.pid=S),O(S);},onProviderSessionId:S=>{F=S;},onOutput:(S,se)=>{let fo=this._lookupCliAdapter(h);se==="stdout"&&fo?.suppressOutputLine?.(S)===!0||this.emit("task:output",{traceId:s,timestamp:new Date,agentRef:e,output:S,level:se}),se==="stdout"&&this.emitToolEvents(s,e,h,S,g.id,r?.threadId??"","");},onTaskLog:S=>{this.emitTaskLogEntries(s,e,g.id,r?.threadId??"","",h,S);for(let se of S)this.emit("task:output",{traceId:s,timestamp:new Date,agentRef:e,output:JSON.stringify(se),level:"info"});},onCommand:S=>{L=S;},onUsage:S=>{A=S;},onExitCode:S=>{Z=S;},onModel:S=>{P||(P=S);}},U=b?void 0:this._validateFreshProviderInitialInputBudget({message:n,providerOptions:E,contextBudgetManifest:X,countTokens:re});if(U){O();let S=Date.now()-l;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:S,error:U,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),J=!0,{ok:!1,data:"",error:U,meta:{agentId:g.id,provider:h,model:v,durationMs:S,taskId:s}}}let B=await te.query(n,E);ie=this._resolveEffectiveCost(A,P,l),O();let ut=Date.now()-l,pn={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",result:B,durationMs:ut,exitCode:Z,inputTokens:A?.inputTokens,outputTokens:A?.outputTokens,cachedInputTokens:A?.cachedInputTokens,costUsd:ie,model:P,metadata:Object.keys(pn).length>0?pn:void 0}),J=!0,{ok:!0,data:B,meta:{agentId:g.id,provider:h,model:v,durationMs:ut,taskId:s}}}catch(E){if(E instanceof exports.ClientToolCallRequiredError){let ut=it("thd");return this._pendingThreads.set(ut,{agentRef:g.id,providerStr:h,continuationState:E.continuationState,toolCall:E.toolCall,traceId:s,startMs:l,model:v}),J=!0,{ok:!0,status:"requires_action",data:"",toolCall:E.toolCall,threadId:ut,meta:{agentId:g.id,provider:h,model:v,durationMs:Date.now()-l,taskId:s}}}ie=this._resolveEffectiveCost(A,P,l),O();let U=Date.now()-l,B={code:"QUERY_FAILED",message:E.message,...E instanceof exports.ProviderError?{providerCode:E.code}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:U,error:B,exitCode:Z,inputTokens:A?.inputTokens,outputTokens:A?.outputTokens,cachedInputTokens:A?.cachedInputTokens,costUsd:ie,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),J=!0,{ok:!1,data:"",error:B,meta:{agentId:g.id,provider:h,model:v,durationMs:U,taskId:s}}}finally{J||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:Z??-1,inputTokens:A?.inputTokens,outputTokens:A?.outputTokens,cachedInputTokens:A?.cachedInputTokens,costUsd:ie,model:P}),this._activeTasks.delete(s),this._clearCallerIdentityOverride(s,c),Ye();}})}finally{this._clearCallerIdentityOverride(s,c);}}async continueQuery(e,n){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=rt(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=n.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,n,r){let o=await this.resolveFileRemoteTarget(e);if(o){let l=await o.target.execute(o.agentRef,n,this._buildFileRemoteOptions(e,r));return {...l,meta:{...l.meta,agentId:e.replace(/^@/,"")}}}let i=Un.getStore()??ai(r?.trace),s=r?.taskId??it("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 Un.run(d,async()=>{let l=Date.now(),f=new Date,g;try{g=vr(e,Array.from(this._agents.values()));}catch(E){if(E instanceof et){this.emit("task:start",{traceId:s,timestamp:f,agentRef:e,message:n,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 U=Date.now()-l,B={code:"AGENT_NOT_FOUND",message:E.message};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:U,error:B,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:B,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:U,taskId:s}}}throw E}d.callerAgentId=g.id;let m=await this._resolveFreshProvider(g,"execute",r),k=m.baseProviderStr,h=m.effectiveProviderStr,v=m.effectiveModel,w=m.overdrive,_=h!==k?void 0:r?.resumeSessionId,b=this._resolveContextMode(r)==="instruction-only",L,A,Z,P=v,F,ce,X,re,H=!1,O=E=>{H||(H=!0,this.emit("task:start",{traceId:s,timestamp:f,agentRef:e,message:n,mode:"execute",pid:E,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:P,provider:h,codingAgentCommand:L,renderedPrompt:ce,metadata:{...r?.metadata??{},provider:h,...w.active?{overdrive:!0}:{},...F?{provider_session_id:F}:{},...X?{context_budget:X}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));};if(b){let E=this._prepareInstructionOnlyResumeWithBudget({message:n,providerResolution:m,resumeSessionId:_});if(X=E.contextBudget,E.error){O();let U=Date.now()-l,B=E.error;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:U,error:B,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:B,meta:{agentId:g.id,provider:h,model:v,durationMs:U,taskId:s}}}}let te;try{te=rt(h,this._additionalArgsProvider);}catch(E){O();let U=Date.now()-l,B={code:"PROVIDER_ERROR",message:E.message,...E instanceof exports.ProviderError?{providerCode:E.code}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:U,error:B,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:B,meta:{agentId:g.id,provider:h,model:v,durationMs:U,taskId:s}}}let z;if(b||(z=await this._fetchHistoryMessages(r?.threadId,s,r?.messages,r?.uiProjections)),!b)try{let E=await this._prepareFreshPromptWithBudget({agentRef:e,agent:g,mode:"execute",message:n,options:r,providerResolution:m,historyMessages:z});if(ce=E.renderedPrompt,X=E.contextBudget,re=E.countTokens,E.error){O();let U=Date.now()-l,B=E.error;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:U,error:B,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:B,meta:{agentId:g.id,provider:h,model:v,durationMs:U,taskId:s}}}}catch(E){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${E instanceof Error?E.message:String(E)}`);}let $=g.options,W=kd($?.execute,h,w),fe=w.active?w.mode:W.modeOptions?.mode,ee=w.effort??r?.effort??W.modeOptions?.effort,un=Array.isArray($?.execute?.tools)?$.execute.tools:void 0,Et=this._tools.size>0?this._filterToolsByMode(un):[],N=W.configOptions,Y=g.inline?.max_steps;h.startsWith("api/")&&O();let J=!1,ie=0,Ye=()=>{},Qe=new Promise(E=>{Ye=E;});this._activeTasks.set(s,{pid:void 0,done:Qe});try{let E={model:v,effort:ee,mode:fe,context:r?.context,...b?{}:{systemPrompt:ce??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`},additionalArgs:Array.isArray($?.execute)?$.execute:void 0,resumeSessionId:_,tools:Et.length>0?Et:void 0,maxSteps:Y,providerOptions:W.providerOptions,configOptions:N,timeoutMs:this._resolveTimeout("execute",this._lookupCliAdapter(h)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(h)),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:h,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(s,f)},onPid:S=>{let se=this._activeTasks.get(s);se&&(se.pid=S),O(S);},onProviderSessionId:S=>{F=S;},onOutput:(S,se)=>{let fo=this._lookupCliAdapter(h);se==="stdout"&&fo?.suppressOutputLine?.(S)===!0||this.emit("task:output",{traceId:s,timestamp:new Date,agentRef:e,output:S,level:se}),se==="stdout"&&this.emitToolEvents(s,e,h,S,g.id,r?.threadId??"","");},onTaskLog:S=>{this.emitTaskLogEntries(s,e,g.id,r?.threadId??"","",h,S);for(let se of S)this.emit("task:output",{traceId:s,timestamp:new Date,agentRef:e,output:JSON.stringify(se),level:"info"});},onCommand:S=>{L=S;},onUsage:S=>{A=S;},onExitCode:S=>{Z=S;},onModel:S=>{P||(P=S);}},U=b?void 0:this._validateFreshProviderInitialInputBudget({message:n,providerOptions:E,contextBudgetManifest:X,countTokens:re});if(U){O();let S=Date.now()-l;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:S,error:U,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),J=!0,{ok:!1,data:"",error:U,meta:{agentId:g.id,provider:h,model:v,durationMs:S,taskId:s}}}let B=await te.execute(n,E);ie=this._resolveEffectiveCost(A,P,l),O();let ut=Date.now()-l,pn={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",result:B,durationMs:ut,exitCode:Z,inputTokens:A?.inputTokens,outputTokens:A?.outputTokens,cachedInputTokens:A?.cachedInputTokens,costUsd:ie,model:P,metadata:Object.keys(pn).length>0?pn:void 0}),J=!0,{ok:!0,data:B,meta:{agentId:g.id,provider:h,model:v,durationMs:ut,taskId:s}}}catch(E){ie=this._resolveEffectiveCost(A,P,l),O();let U=Date.now()-l,B={code:"EXECUTE_FAILED",message:E.message,...E instanceof exports.ProviderError?{providerCode:E.code}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:U,error:B,exitCode:Z,inputTokens:A?.inputTokens,outputTokens:A?.outputTokens,cachedInputTokens:A?.cachedInputTokens,costUsd:ie,model:P,metadata:r?.metadata?{...r.metadata}:void 0}),J=!0,{ok:!1,data:"",error:B,meta:{agentId:g.id,provider:h,model:v,durationMs:U,taskId:s}}}finally{J||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:Z??-1,inputTokens:A?.inputTokens,outputTokens:A?.outputTokens,cachedInputTokens:A?.cachedInputTokens,costUsd:ie,model:P}),this._activeTasks.delete(s),this._clearCallerIdentityOverride(s,c),Ye();}})}finally{this._clearCallerIdentityOverride(s,c);}}};function vd(t,e){let n=zi(t)?t:void 0,r=zi(e)?e:void 0;if(!(!n&&!r))return {...n??{},...r??{}}}function zi(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function ag(t,e){let n=Array.isArray(t)?t:void 0,r=Array.isArray(e)?e:void 0;if(!n&&!r)return;let o=a=>{if(!zi(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 n??[]){let d=o(a);d&&i.has(d)||s.push(a);}for(let a of r??[])s.push(a);return s}function dg(t){let e=Array.isArray(t.provider)?t.provider:[t.provider],n=t.options,r=[...e];for(let o of ["query","execute"]){let i=Jo(n,o);i.provider&&r.push(i.provider);let s=n&&typeof n=="object"&&!Array.isArray(n)?n[o]:void 0,a=s&&typeof s=="object"&&!Array.isArray(s)?Mr(s.overdrive):void 0;a?.provider&&r.push(a.provider);}return r}async function Ed(t,e,n){let r=t.flatMap(dg);if(r.some(i=>i.startsWith("api/"))){let{registerApiProviders:i}=await Promise.resolve().then(()=>(Ci(),sd));i(n?.api);}await lg(r,e),ug(r,e),cg(r);}function cg(t){if(!t.some(r=>r.startsWith("acp/")))return;let{registerAcpProviders:n}=(Li(),cs(ud));n();}async function lg(t,e){if(!t.some(s=>s.startsWith("remote/")))return;let r=e.providers;if(!Array.isArray(r))return;let{createRemoteProviderFactory:o}=await Promise.resolve().then(()=>(ji(),fd)),i=new Map;for(let s of r)s.type==="remote"&&typeof s.id=="string"&&i.set(s.id,s);i.size>0&&nt("remote",o(i,rt));}function ug(t,e){if(!t.some(s=>s.startsWith("plugin/")))return;let r=e.providers;if(!Array.isArray(r))return;let{createPluginProviderFactory:o}=(Fi(),cs(yd)),i=new Map;for(let s of r)s.type==="plugin"&&typeof s.id=="string"&&i.set(s.id,s);i.size>0&&nt("plugin",o(i));}u();u();var Gi=class{detach(e){}};u();var pg="crewx:fs:",Vi=class{prefix;store;constructor(e){this.prefix=e?.prefix??pg,this.store=e?.storage??new Map;}async readFile(e){let n=this.toKey(e),r=this.store.get(n);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 n=e.map(s=>s.replace(/\\/g,"/")).join("/").replace(/\/+/g,"/"),r=n.split("/"),o=[];for(let s of r)s==="."||s===""||(s===".."?o.pop():o.push(s));let i=o.join("/");return n.startsWith("/")?`/${i}`:i}isAbsolute(e){return e.startsWith("/")}setItem(e,n){this.store.set(this.toKey(e),n);}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 n=e.replace(/\\/g,"/").replace(/\/$/,""),r=this.toKey(n+"/"),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,"/")}`}};u();var sn="default",an="archive",xd="wi-default-flow",fg="wi-plan-flow",gg="wi-default-flow.yaml",mg="wi-plan-flow.yaml",co=/^[a-zA-Z0-9_-]{1,64}$/;function Rd(t){return t===sn||t===an}function hg(t){let e={id:sn,name:"Default",workflowId:xd,system:true,readOnly:false},n={id:an,name:"Archive",workflowId:"",system:true,readOnly:true},r=t?.settings?.wi?.boards;if(!Array.isArray(r)||r.length===0)return [e,n];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||Rd(d)||!co.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,n]}u();var ne=class extends Error{constructor(e){super(e),this.name="WiCreateError";}},wg=300*1e3,_g=300*1e3,kg=1e4,vg=50;function Eg(t){return new Promise(e=>setTimeout(e,t))}function xg(t){let e=t.getFullYear(),n=String(t.getMonth()+1).padStart(2,"0"),r=String(t.getDate()).padStart(2,"0");return {compact:`${e}${n}${r}`,iso:`${e}-${n}-${r}`}}function Rg(t){return t.normalize("NFKD").replace(/[^\x00-\x7F]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toUpperCase().slice(0,60)}function bg(t,e){let n=t.replace(/\\/g,"/").toLowerCase(),r=e.replace(/\\/g,"/").toLowerCase();if(r!==n&&!r.startsWith(n+"/"))throw new ne("Path is outside wi directory")}function bd(t){let e=typeof t=="string"?t.trim():"";if(!e)throw new ne("title is required");if(e.length>200)throw new ne("title must be 200 characters or fewer");return e}function Td(t){let e=typeof t=="string"?t.trim():"";if(!e)return "manual";if(e.length>128)throw new ne("source must be 128 characters or fewer");if(/[\r\n]/.test(e))throw new ne("source must be a single line");return e}function Ad(t){return (typeof t=="string"?t.trim().replace(/^@+/,""):"")||void 0}function Id(t){if(t==null)return [];if(!Array.isArray(t))throw new ne("depends_on must be an array");return t.map(e=>String(e).trim()).filter(Boolean)}function Pd(t,e){let n=typeof t=="string"?t.trim():"";if(!n){if(e?.required)throw new ne("board is required");return}if(!co.test(n))throw new ne("board must match ^[a-zA-Z0-9_-]{1,64}$");if(n===an)throw new ne(`board cannot be '${an}'`);return n}function dn(t){return JSON.stringify(t)}function Tg(t,e){return e.length===0?[`${t}: []`]:[`${t}:`,...e.map(n=>` - ${dn(n)}`)]}async function Ag(t){let e=await Ua.promises.stat(t).catch(()=>null);e&&Date.now()-e.mtimeMs>_g&&await Ua.promises.rm(t,{recursive:true,force:true}).catch(()=>{});}async function Ig(t,e){let n=K.join(t,".wi-create.lock"),r=Date.now()+kg;for(;Date.now()<r;)try{await Ua.promises.mkdir(n);try{return await e()}finally{await Ua.promises.rm(n,{recursive:!0,force:!0}).catch(()=>{});}}catch(o){if(o.code!=="EEXIST")throw o;await Ag(n),await Eg(vg);}throw new ne("WI create lock timeout: docs/wi/.wi-create.lock")}async function Cd(t){let e=[],n=await Ua.promises.readdir(t,{withFileTypes:true}).catch(r=>{if(r.code==="ENOENT")return [];throw r});for(let r of n){let o=K.join(t,r.name);r.isDirectory()?e.push(...await Cd(o)):r.isFile()&&r.name.endsWith(".md")&&e.push(r.name);}return e}async function Pg(t){let e=await Ua.promises.readdir(t).catch(r=>{if(r.code==="ENOENT")return [];throw r}),n=await Cd(K.join(t,"archive"));return [...e,...n]}function Cg(t,e){return t.reduce((n,r)=>{if(!r.startsWith(e))return n;let o=r.slice(e.length).match(/^(\d+)/);return o?Math.max(n,parseInt(o[1],10)):n},0)+1}function Sg(t,e){return t.some(n=>n===`${e}.md`||n.startsWith(`${e}-`))}async function Og(t,e){let n=K.join(t,`.wi-${e}.lock`);try{return await Ua.promises.writeFile(n,"",{flag:"wx"}),{claimed:!0,lockPath:n}}catch(r){if(r.code!=="EEXIST")throw r;return await Ua.promises.stat(n).then(i=>Date.now()-i.mtimeMs>wg).catch(()=>false)&&await Ua.promises.unlink(n).then(()=>true).catch(()=>false)?(await Ua.promises.writeFile(n,"",{flag:"wx"}),{claimed:true,lockPath:n}):{claimed:false,lockPath:n}}}function Ng(t){return {title:bd(t.title),assignee:Ad(t.assignee),body:(t.body??"").trim(),board:Pd(t.board),source:Td(t.source),depends_on:Id(t.depends_on)}}function Dg(t,e,n){if(t==null)return;let r=typeof t=="string"?t.trim():"";if(!r)throw new ne(`items[${e}].key must be a non-empty string when provided`);if(n.has(r))throw new ne(`items[${e}].key "${r}" is duplicated`);return n.add(r),r}function Mg(t){let e=Pd(t.board,{required:true}),n=Td(t.source);if(!Array.isArray(t.items)||t.items.length===0)throw new ne("items must contain at least one WI");let r=new Set;return t.items.map((o,i)=>{if(!o||typeof o!="object")throw new ne(`items[${i}] must be an object`);if(typeof o.body!="string")throw new ne(`items[${i}].body is required`);return {key:Dg(o.key,i,r),title:bd(o.title),assignee:Ad(o.assignee),body:o.body.trim(),board:e,source:n,depends_on:Id(o.depends_on)}})}function Ug(t,e){return t.map(n=>e.get(n)??n)}function Lg(t,e,n){let r=!!t.board&&t.board!==sn,o={wi_id:e,title:t.title,date:n,status:"draft",priority:"normal",source:t.source};return t.assignee&&(o.assignee=t.assignee),r&&(o.board=t.board),o.depends_on=t.depends_on,{raw:`---
392
+ ${[`wi_id: ${e}`,`title: ${dn(t.title)}`,`date: ${dn(n)}`,"status: draft",...t.assignee?[`assignee: ${dn(t.assignee)}`]:[],"priority: normal",`source: ${dn(t.source)}`,...r?[`board: ${dn(t.board)}`]:[],...Tg("depends_on",t.depends_on)].join(`
319
393
  `)}
320
394
  ---
321
395
 
322
- ${n.body}
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}
396
+ ${t.body}
397
+ `,frontmatter:o}}async function Sd(t,e){let n=K.join(t,"docs","wi");return await Ua.promises.mkdir(n,{recursive:true}),Ig(n,async()=>{let{compact:r,iso:o}=xg(new Date),i=`WI-${r}-`,s=await Pg(n),a=Cg(s,i),d=[],c=[];try{let l=[];for(let m of e){let h;for(let v=0;v<999;v++,a++){let w=`WI-${r}-${String(a).padStart(3,"0")}`;if(Sg(s,w))continue;let _=await Og(n,w);if(!_.claimed)continue;let R=Rg(m.title),b=R?`${w}-${R}.md`:`${w}.md`,L=K.resolve(n,b);if(bg(n,L),await Ua.promises.access(L).then(()=>!0,()=>!1)){await Ua.promises.unlink(_.lockPath).catch(()=>{});continue}c.push(_.lockPath),h={item:m,wiId:w,filename:b,fullPath:L};break}if(!h)throw new ne("Failed to allocate a unique WI id");l.push(h),s.push(h.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 k=Ug(m.item.depends_on,f),h={...m.item,depends_on:k},v=Lg(h,m.wiId,o);await Ua.promises.writeFile(m.fullPath,v.raw,{encoding:"utf8",flag:"wx"}),d.push(m.fullPath);let w=await Ua.promises.stat(m.fullPath);g.push({summary:{wi_id:m.wiId,title:h.title,status:"draft",priority:"normal",assignee:h.assignee,depends_on:k,blocks:[],date:o,board:h.board&&h.board!==sn?h.board:void 0,source:h.source,screens:[],path:`docs/wi/${m.filename}`,mtime:w.mtimeMs},frontmatter:v.frontmatter,body:h.body});}return g}catch(l){throw await Promise.all(d.map(f=>Ua.promises.unlink(f).catch(()=>{}))),l}finally{await Promise.all(c.map(l=>Ua.promises.unlink(l).catch(()=>{})));}})}async function $g(t,e){let[n]=await Sd(t,[Ng(e)]);if(!n)throw new ne("Failed to create WI");return n}async function Bg(t,e){return {created:await Sd(t,Mg(e))}}u();var jg=new Set(["draft","approved","in-progress"]);function Fg(t,e){let n=e.batch.filter(Boolean);if(n.length===0)return {done:true};let r=new Set(e.exclude??[]),o=new Set(n),i=new Map(t.filter(f=>o.has(f.wi_id)).map(f=>[f.wi_id,f])),s=n.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 k=(d.get(m)??0)-1;d.set(m,k),k===0&&c.push(m);}}if(l.length!==s.length)return {cycle:s.filter(f=>(d.get(f)??0)>0)};for(let f of n){if(!s.includes(f)||r.has(f))continue;let g=i.get(f);if(!g||!jg.has(g.status))continue;if(!(g.depends_on??[]).some(k=>{if(!o.has(k))return false;let h=i.get(k);return h?h.status!=="done":false}))return {pick:f}}return {done:true}}u();function rr(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Od(t,e){let n={...t};for(let[r,o]of Object.entries(e))rr(o)&&rr(n[r])?n[r]=Od(n[r],o):n[r]=o;return n}function Qg(t){let e=t?.filePath??K.join(Ri.homedir(),".crewx","crewx.yaml"),n=null,r=null;function o(){try{return Ua.statSync(e).mtimeMs}catch{return null}}function i(){let s=o();if(s===null)return n=null,r=null,{};if(r!==null&&n===s)return r;let a=null;try{a=jsYaml.load(Ua.readFileSync(e,"utf-8"));}catch{a=null;}let d=rr(a)?a:{};return r=d,n=s,d}return {get path(){return e},read(){let s=i();return rr(s.settings)?s.settings:{}},update(s){let a=i(),d=rr(a.settings)?a.settings:{},c=Od(d,s),l={...a,settings:c};Ua.mkdirSync(K.dirname(e),{recursive:true});let f=`${e}.tmp`;return Ua.writeFileSync(f,jsYaml.dump(l)),Ua.renameSync(f,e),n=null,r=null,c}}}Do();ur();u();zt();var Zg="https://api.crewx.dev/v1/models",em=3600*1e3,Nd=0;async function tm(t){let e=t?.ttlMs??em,n=Date.now();if(!(n-Nd<e)){Nd=n;try{let r=await fetch(t?.endpoint??Zg);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});gs(i);}catch{}}}u();Re();zt();ho();var nm="https://api.crewx.dev/v1/models",rm=900*1e3,Dd=0;function Xe(t){return t!=null&&typeof t=="object"&&!Array.isArray(t)}function om(t){return typeof t=="number"&&Number.isInteger(t)&&t>0}function im(t){return typeof t=="string"&&ls.includes(t)}function sm(t){if(t===void 0)return [];if(!Array.isArray(t))return;let e=new Set,n=[];for(let r of t){if(!Xe(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"){n.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;n.push({key:o,type:"enum",values:[...r.values]});}return n}function am(t,e){if(t===void 0)return;if(!Xe(t))return null;let n=new Map(e.map(o=>[o.key,o])),r={};for(let[o,i]of Object.entries(t)){let s=n.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 dm(t){if(!Xe(t))return {};let e={};for(let[n,r]of Object.entries(t)){if(!Xe(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[n]={inputPerMillionTokensUsd:o,outputPerMillionTokensUsd:i});}return e}function Md(t,e){if(!Xe(t)||typeof t.mode!="string"||t.mode.length===0||typeof t.effort!="string"||t.effort.length===0)return;let n=am(t.providerOptions,e);if(n!==null)return {mode:t.mode,effort:t.effort,...n!==void 0?{providerOptions:n}:{}}}function cm(t,e){let n=t.modelOverrides[e]?.effort;return Array.isArray(n)&&n.every(r=>typeof r=="string")?n:t.effort}function lm(t,e){if(!Xe(t)||t.version!==1||!Xe(t.providers))return {};let n={};for(let[r,o]of Object.entries(t.providers)){if(!/^cli\/[^/]+$/.test(r)||!Xe(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=Md(o.query,s),d=Md(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=cm(i,o.model);!l.includes(a.effort)||!l.includes(d.effort)||(n[r]={model:o.model,query:a,execute:d});}return n}async function um(t){let e=t?.ttlMs??rm,n=Date.now();if(!(n-Dd<e)){Dd=n;try{let r=await fetch(t?.endpoint??nm);if(!r.ok){hn({});return}let o=await r.json();if(!o?.providers||typeof o.providers!="object"){hn({});return}let i={};for(let[s,a]of Object.entries(o.providers)){let d=Array.isArray(a);if(!d&&!Xe(a))continue;let c=d?[]:sm(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||!Xe(a.modelOverrides)?{}:a.modelOverrides,k=l.filter(h=>h!=null&&typeof h.id=="string").map(h=>({id:h.id,name:h.name??h.id,...h.description!=null?{description:h.description}:{},...om(h.contextWindowTokens)?{contextWindowTokens:h.contextWindowTokens}:{},...im(h.tier)?{tier:h.tier}:{},...h.recommended===!0?{recommended:!0}:{}}));i[s]={models:k,modes:f.filter(h=>h!=null&&typeof h.id=="string").map(h=>({id:h.id,name:h.name??h.id,...h.description!=null?{description:h.description}:{}})),effort:g.filter(h=>typeof h=="string"),modelOverrides:m,providerOptions:c};}vo(i),ms(dm(o.models)),hn(lm(o.defaults,i));}catch{hn({});}}}u();function pm(t,e){let n=t.skills?.include;if(n===void 0)return [...e];if(n.length===0)return [];let r=new Set(n);return e.filter(o=>r.has(o))}u();var Ji=["codex","claude","grok","opencode","antigravity","copilot"];function fm(t){let e=t.indexOf("/");return e===-1?t:t.slice(e+1)}function Ki(t){let e=fm(t),n=Ji.indexOf(e);return n===-1?Ji.length:n}function or(t,e){return Ki(t)-Ki(e)}var gm=new Set(["claude","copilot","codex","grok","opencode"]);function mm(t){if(!t)return "";if(t.startsWith("acp/")){let e=t.slice(4);if(gm.has(e))return `cli/${e}`}return t}Re();qe();Pi();Ci();u();Si();gt();u();no();ao();Re();var hm="model",ym="mode",wm="thought_level";function Xi(t){if(t.length===0)return [];if(t[0]?.group!=null){let e=[];for(let n of t)for(let r of n.options??[])e.push(r);return e}return t}function _m(t,e){let n=new Map;for(let r of [...t,...e])n.has(r.id)||n.set(r.id,r);return Array.from(n.values())}function km(t,e,n,r){let o=n.agentInfo?.name,i=e??o??t,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()===ym&&w.options!=null)for(let _ of Xi(w.options))_.value!=null&&c.push({id:_.value,name:_.name??_.value});let l=_m(d,c),f=[];for(let w of s)if(w.category?.trim().toLowerCase()===wm&&w.type==="select")for(let _ of Xi(w.options??[]))_.value!=null&&f.push(_.value);if(t==="claude"){let w=kn(wn()),_=Ud(n);return Ld(t,{models:w,modes:l,availableModelsCount:0,configModelsCount:0,skipModelWarn:true}),{id:`acp/${t}`,name:i,modes:l,effort:f,models:w,capabilities:_}}let m=(r.models?.availableModels??[]).map(w=>({id:w.modelId})),k=[];for(let w of s)if(w.category?.trim().toLowerCase()===hm&&w.options!=null)for(let _ of Xi(w.options))_.value!=null&&k.push({id:_.value,..._.name!=null?{name:_.name}:{}});let h=kn(_n(m,k));Ld(t,{models:h,modes:l,availableModelsCount:m.length,configModelsCount:k.length,skipModelWarn:false});let v=Ud(n);return {id:`acp/${t}`,name:i,modes:l,effort:f,models:h,capabilities:v}}function Ud(t){let e=t.agentCapabilities??{};return {loadSession:e.loadSession??false,image:e.promptCapabilities?.image??false,audio:e.promptCapabilities?.audio??false,mcp:e.mcpCapabilities!=null}}function Ld(t,e){!e.skipModelWarn&&e.models.length===0&&console.warn(`[acp] ${t} meta: models empty (availableModels=${e.availableModelsCount}, configOptions[model]=${e.configModelsCount})`),e.modes.length===0&&console.warn(`[acp] ${t} meta: modes empty`);}async function $d(t){let e=exports.ACP_ADAPTERS[t];if(!e)return null;let n=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 km(t,n,o,s)}catch(o){return console.warn(`[acp] ${t} meta query failed: ${o instanceof Error?o.message:String(o)}`),null}finally{await r.dispose();}}async function vm(){let t=Object.keys(exports.ACP_ADAPTERS),e=await Promise.allSettled(t.map(r=>$d(r))),n=[];for(let r of e)r.status==="fulfilled"&&r.value!==null&&n.push(r.value);return n.sort((r,o)=>or(r.id,o.id))}no();Oi();ao();Li();Rr();ft();u();ft();Re();function xm(t){return t.charAt(0).toUpperCase()+t.slice(1)}async function Bd(){return new Promise(t=>{child_process.execFile("opencode",["models"],{timeout:5e3,maxBuffer:1048576},(n,r)=>{if(n){t([]);return}let o=r.split(`
398
+ `).map(i=>i.trim()).filter(i=>i.length>0).map(i=>({id:i}));t(o);}).on("error",()=>t([]));})}function Rm(t,e,n){if(!e.meta)return null;let r=e.meta.capabilities??{},o=Ze(t),i=o.length>0?o:e.meta.models??[],s=n!==void 0?_n(n,i):i,a=pr(`cli/${t}`),d=Oe(t).providerOptions??[];return {id:`cli/${t}`,name:e.meta.displayName??xm(t),modes:yn(t),effort:Rt(t),models:kn(s),modelOverrides:vs(t),...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 bm(t={}){let e=t.includeOpencodeRuntimeModels?await Bd():void 0,n=[];for(let[r,o]of Object.entries(exports.BUILTIN_ADAPTERS)){let s=Rm(r,o,r==="opencode"?e:void 0);s&&n.push(s);}return n.sort((r,o)=>or(r.id,o.id))}u();var Yi=0;function Tm(t){let e=t.meta?.taskId,n=e?` taskId=${e}`:"";if(t.ok)return `Task completed:${n}
325
399
 
326
- ${n.data}`;let r=n.error?.message??"Unknown error";return `Task failed:${t}
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,`
400
+ ${t.data}`;let r=t.error?.message??"Unknown error";return `Task failed:${n}
401
+ Error: ${r}`}function Am(t){let e=Array.from(t.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 n=>{if(Yi>=3)return "Error: Maximum delegation depth (3) reached. Cannot delegate further.";let r=n.agent,o=n.message,i=n.mode??"query";if(!e.includes(r))return `Error: Unknown agent "${r}". Available: ${e.join(", ")}`;Yi++;try{let s=i==="execute"?await t.execute(r,o):await t.query(r,o);return Tm(s)}finally{Yi--;}}}}u();var jd=typeof process<"u"?process.env:{};function Im(){return jd.CREWX_CLI||"npx crewx"}function Pm(){return jd.CREWX_WORKSPACE||(typeof process<"u"?process.cwd():"/")}u();u();u();var we="[REDACTED]",Fd="[PATH]";function Qi(t){if(typeof t!="string")return;let e=t.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 ${we}]`),e=Sm(e),e=e.replace(/\b(?:Bearer|Basic)\s+[A-Za-z0-9._~+\-/]+=*/gi,`${we}`),e=e.replace(/\bsk-[A-Za-z0-9][A-Za-z0-9_-]*/g,we),e=e.replace(/\bghp_[A-Za-z0-9][A-Za-z0-9_-]*/g,we),e=e.replace(/\bxoxb-[A-Za-z0-9-]+/g,we),e=e.replace(/\bxoxp-[A-Za-z0-9-]+/g,we),e=e.replace(/\bAKIA[0-9A-Z]{12,}\b/g,we),e=e.replace(/\bgithub_pat_[A-Za-z0-9_]+/g,we),e=e.replace(/\bgho_[A-Za-z0-9_]+/g,we),e=e.replace(/\bAIza[A-Za-z0-9_-]{20,}\b/g,we),e=e.replace(/\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g,we),e=e.replace(/\b(?:authorization|api[_ -]?key|access[_ -]?token|auth[_ -]?token|refresh[_ -]?token|token|secret|password)\s*([:=])\s*["']?[^\s,;&"']+/gi,(n,r)=>`${we}${r}${we}`),e=e.replace(/([?&](?:api[_-]?key|access[_-]?token|token)=)[^&\s]+/gi,`$1${we}`),e=e.replace(/(?:\/(?:Users|home|private|var\/folders|tmp|workspace|workspaces|Volumes|opt|etc|srv|Applications)\/[^\s"'`),;]+)/g,Fd),e=e.replace(/\b[A-Z]:\\(?:Users|home|Windows|Program Files|workspace|workspaces)\\[^\s"'`),;]*/gi,Fd),e=e.replace(/[\r\n]{3,}/g,`
328
402
 
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(`
403
+ `).trim(),Cm(e,1024)||void 0}function Cm(t,e){let n=new TextEncoder;if(n.encode(t).byteLength<=e)return t;let r="",o=0;for(let i of t){let s=n.encode(i).byteLength;if(o+s>e)break;r+=i,o+=s;}return r}function Sm(t){let e=/\b(?:request|response|http)?\s*body\s*[:=]\s*/gim,n="",r=0,o;for(;(o=e.exec(t))!==null;){if(o.index<r)continue;let i=o.index+o[0].length,s=Om(t,i),a=s>=0?s:t.indexOf(`
404
+ `,i)>=0?t.indexOf(`
405
+ `,i):t.length;n+=t.slice(r,o.index),n+=`[HTTP BODY ${we}]`,r=a;}return n+t.slice(r)}function Om(t,e){let n=t[e];if(n==='"'||n==="'")return Nm(t,e,n);if(n!=="{"&&n!=="[")return -1;let r=[],o,i=false;for(let s=e;s<t.length;s+=1){let a=t[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 Nm(t,e,n){let r=false;for(let o=e+1;o<t.length;o+=1){let i=t[o];if(r)r=false;else if(i==="\\")r=true;else if(i===n)return o+1}return -1}var Dm=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"]),Mm={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"},Um=[{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 Lm(t){try{if(!vt(t)||t.status!=="failed")return Zi();let e=$m(t.error);if(ns(e.message))return Zi();let n=Se(t.providerId)??e.provider??null,r=jm(t.logs),o=Wd(e.code);if(o)return ir(o,n,e.message,e);let i=lo(e.providerCode)??lo(e.code),s=i?ts(i,e.message):void 0;if(s)return ir(s,n,e.message,e,i);let a=Fm(r);if(!Bm(e)&&a&&(a.type==="user_stop"||ns(a.message)))return Zi();if(a){let c=Hm(a.code,a.providerCode,a.message);if(c)return ir(c,n,a.message??e.message,e,a.providerCode??a.code,a,a.structuredFailure?"terminal":"envelope")}let d=Wm(e.message,r);return d?ir(d.code,n,d.message,e,d.terminal?.providerCode??d.terminal?.code,d.terminal,d.terminal?.structuredFailure?"terminal":"envelope"):ir("PROCESS_FAILED",n,e.message,e)}catch{return {errorCode:"PROCESS_FAILED",errorProvider:null}}}function Zi(){return {errorCode:null,errorProvider:null}}function ir(t,e,n,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),t==="CLI_NOT_AVAILABLE"||t==="CLI_UPDATE_REQUIRED"){let f=e?.startsWith("cli/")?e.slice(4):void 0;f&&(a.cliName=f);}let d=s==="terminal"?n:r?.message,c=s==="terminal"?i?.structuredFailure?d:void 0:r?.isEnvelope?d:void 0,l=Qi(c);return l&&(a.technicalMessage=l),Object.keys(a).length>0?{errorCode:t,errorProvider:e,errorMeta:a}:{errorCode:t,errorProvider:e}}function $m(t){let e=typeof t=="string"?ln(t):t;return vt(e)?{isEnvelope:true,code:Se(e.code),providerCode:Se(e.providerCode),message:Se(e.message)??Se(e.error),provider:Se(e.provider)??Se(e.errorProvider),model:Se(e.model)}:{isEnvelope:false,...typeof t=="string"&&t.trim()?{message:t.trim()}:{}}}function ln(t){try{return JSON.parse(t)}catch{return}}function Bm(t){return !!(t.code||t.providerCode||t.message)}function jm(t){let e=[];if(typeof t=="string"){let n=ln(t);if(Array.isArray(n))e.push(...n);else for(let r of t.split(/\r?\n/)){let o=ln(r.trim());o!==void 0&&e.push(o);}}else Array.isArray(t)?e.push(...t):vt(t)&&e.push(t);return e.flatMap(cn)}function cn(t){if(!vt(t))return [];let e=Se(t.type),n=Se(t.message);if(n&&!e){let o=ln(n);if(Array.isArray(o))return o.flatMap(cn);if(vt(o))return cn(o);let i=n.split(/\r?\n/).map(s=>ln(s.trim())).filter(s=>vt(s));return i.length>0?i.flatMap(cn):t.level==="stderr"?[{type:"stderr",message:n,rank:1,structuredFailure:false}]:cn({type:"info",content:n})}if(e==="rate_limit_event"){let o=Hd(t.rate_limit_info);return Se(o?.status)!=="rejected"?[]:[{type:e,code:"RATE_LIMITED",message:sr(o?.message,t.message),resetAt:qm(o?.resetsAt),rank:4,structuredFailure:true}]}if(e==="turn.failed"||e==="error"){let o=Hd(t.error),i=sr(o?.message,o?.detail,t.message,t.errorMessage,t.content),s=sr(o?.code,t.code,t.errorCode);return [{type:e,code:s,providerCode:sr(o?.providerCode,t.providerCode),message:i,rank:e==="turn.failed"?3:2,structuredFailure:true}]}if(e==="text"&&typeof t.content=="string"){let o=ln(t.content);if(vt(o))return cn(o)}let r=sr(t.errorMessage,t.content);return r&&ns(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 Fm(t){return [...t].sort((e,n)=>n.rank-e.rank)[0]}function Hm(t,e,n){let r=Wd(t);if(r)return r;if(t){let o=ts(t,n);if(o)return o}if(e){let o=ts(e,n);if(o)return o}return es(n)}function Wm(t,e){let n=es(t);if(n)return {code:n,message:t};for(let r of [...e].sort((o,i)=>i.rank-o.rank)){let o=es(r.message);if(o)return {code:o,message:r.message,terminal:r}}}function es(t){if(!(typeof t!="string"||!t.trim()))return Um.find(e=>e.pattern.test(t))?.code}function ts(t,e){let n=lo(t)??t;if(n==="MODEL_UNAVAILABLE")return /(?:capacity|overloaded|busy)/i.test(e??"")?"MODEL_AT_CAPACITY":"MODEL_NOT_SUPPORTED";if(n!=="UNKNOWN")return Mm[n]}function Wd(t){let e=lo(t);return e&&Dm.has(e)?e:void 0}function lo(t){return typeof t=="string"&&t.trim()?t.trim().toUpperCase():void 0}function ns(t){return t?/\b(?:stopped|killed|aborted|cancelled|canceled)\s+by\s+user\b/i.test(t)||/사용자에 의해 중지됨/.test(t)||/\b(?:SIGTERM\s+143|143\s+SIGTERM)\b/i.test(t):false}function vt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Hd(t){return vt(t)?t:void 0}function Se(t){return typeof t=="string"&&t.trim()?t.trim():void 0}function qm(t){return typeof t=="string"||typeof t=="number"&&Number.isFinite(t)?t:void 0}function sr(...t){return t.map(Se).find(e=>!!e)}u();var zm=/^[a-zA-Z0-9._-]+$/,rs=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,n){this.validateId(e),this.validateId(n);let r=this.storage.findBox(e,n);return r?this.toBoxResponse(r):null}createBox(e,n){this.validateId(e);let r=this.generateBoxId(),o=new Date().toISOString(),i=this.storage.insertBox(e,{id:r,seq:n.seq,firstTaskId:n.firstTaskId,midTaskId:n.midTaskId,lastTaskId:n.lastTaskId,taskCount:n.taskCount,summary:n.summary??null,sourceTokens:n.sourceTokens,summaryTokens:n.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(!zm.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return it("box")}};u();function Gm(t,e,n,r,o){let{maxTokens:i,hotzoneRatio:s,warmzoneRatio:a}=r,d=i*s,c=i*a,l=d+c,f=e.getThreadMessages(t),g=[],m=0,k=false,h=[];for(let _=0;_<f.length;_+=2){let R=f[_],b=f[_+1],L=R?.content||"",A=b?.content||"",Z=o.countTokens(L+A),P=[];R&&P.push(R),b&&P.push(b),h.push({messages:P,tokens:Z});}for(let _=h.length-1;_>=0;_--){let R=h[_];if(m+R.tokens>d){k=true;break}m+=R.tokens,g.unshift(...R.messages);}let v=[],w=0;if(k&&c>0)try{let{boxes:_}=n.listBoxes(t);for(let R=_.length-1;R>=0;R--){let b=_[R],L=b.summaryTokens??b.sourceTokens;if(w+L>c)break;w+=L,v.unshift({boxId:b.id,seq:b.seq,taskCount:b.taskCount,sourceTokens:b.sourceTokens,summary:b.summary,previewFirst:b.previewFirst,previewMid:b.previewMid,previewLast:b.previewLast,createdAt:b.createdAt});}}catch(_){if(_ instanceof Error&&!/not found/i.test(_.message))throw _}return {hot:g,warm:v,hotTokens:m,warmTokens:w,hotOverflow:k,totalBudget:l,config:{maxTokens:i,hotzoneRatio:s,warmzoneRatio:a}}}ft();Ct();u();var uo=class extends Error{constructor(n,r){super(`Task ${n} timed out after ${r}ms`);this.taskId=n;this.timeoutMs=r;this.name="ParallelRunnerTimeoutError";}taskId;timeoutMs},dr=class{constructor(e={}){this.defaults=e;}defaults;metrics={totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0};async run(e,n={}){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(n),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,k=0,h=perf_hooks.performance.now(),v=async P=>{a?.onTaskStart&&await a.onTaskStart(P),g+=1;let F=new AbortController,ce={signal:F.signal},X,re;typeof i=="number"&&Number.isFinite(i)&&i>0&&(re=new Promise((z,$)=>{X=setTimeout(()=>{let W=new uo(P.id,i);F.abort(W),$(W);},i);}));let H=perf_hooks.performance.now(),O=P.run(ce),te=re?Promise.race([O,re]):O;try{let z=await te,$=perf_hooks.performance.now(),W=$-H,fe=d(z,P),ee={taskId:P.id,success:fe,value:z,durationMs:W,startedAt:H,finishedAt:$,metadata:P.metadata,aborted:!1};c.push(ee),fe?l+=1:f+=1,a?.onTaskComplete&&await a.onTaskComplete(ee),s&&!fe&&(m=!0);}catch(z){let $=perf_hooks.performance.now(),W=$-H,fe=z instanceof Error?z:new Error(String(z)),ee={taskId:P.id,success:false,error:fe,durationMs:W,startedAt:H,finishedAt:$,metadata:P.metadata,aborted:F.signal.aborted};c.push(ee),f+=1,a?.onError&&await a.onError(P,fe,W),s&&(m=true);}finally{X&&clearTimeout(X),re&&O.catch(()=>{});}},w=async()=>{for(;!m;){let P=k;if(P>=e.length)break;k+=1;let F=e[P];if(!F||(await v(F),m))break}},_=Math.min(o,e.length),R=[];for(let P=0;P<_;P++)R.push(w());await Promise.all(R);let L=perf_hooks.performance.now()-h,A=c.length?c.reduce((P,F)=>P+F.durationMs,0)/c.length:0,Z=L>0?c.length/(L/1e3):c.length;return this.metrics={totalTasks:e.length,startedTasks:g,completedTasks:c.length,successCount:l,failureCount:f,totalDurationMs:L,averageDurationMs:A,throughput:Z},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,n){if(!(!e&&!n))return {onTaskStart:async r=>{e?.onTaskStart&&await e.onTaskStart(r),n?.onTaskStart&&await n.onTaskStart(r);},onTaskComplete:async r=>{e?.onTaskComplete&&await e.onTaskComplete(r),n?.onTaskComplete&&await n.onTaskComplete(r);},onError:async(r,o,i)=>{e?.onError&&await e.onError(r,o,i),n?.onError&&await n.onError(r,o,i);}}}};u();u();var cr=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 qd=3,zd=3e4,Gd=500,Vm=t=>{if(typeof t!="number"||Number.isNaN(t)||!Number.isFinite(t))return qd;let e=Math.floor(t);return e>0?e:qd},Jm=t=>t===void 0||typeof t!="number"||Number.isNaN(t)||t<=0?zd:t,Km=t=>{if(!t)return {maxRetries:0,retryDelay:Gd};let e=Number.isInteger(t.maxRetries)&&t.maxRetries>=0?t.maxRetries:0,n=typeof t.retryDelay=="number"&&t.retryDelay>=0?t.retryDelay:Gd;return {maxRetries:e,retryDelay:n}},os=t=>{let e=t.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},Xm=(t,e)=>t<=0?Promise.resolve():new Promise((n,r)=>{let o=setTimeout(()=>{e.removeEventListener("abort",i),n();},t),i=()=>{clearTimeout(o),r(os(e));};if(e.aborted){i();return}e.addEventListener("abort",i,{once:true});}),Ym=async(t,e,n)=>{let r,o;for(let i=0;i<=e.maxRetries;i++){if(n.aborted)throw os(n);try{let s=await t();if(r=s,s.success||i===e.maxRetries)return s}catch(s){if(o=s,n.aborted)throw os(n);if(i===e.maxRetries)throw s instanceof Error?s:new Error(String(s))}i<e.maxRetries&&await Xm(e.retryDelay,n);}if(r)return r;throw o?o instanceof Error?o:new Error(String(o)):new Error("Parallel helper encountered an unexpected state")},Vd=(t,e,n)=>{e.completed+=1,n?e.success+=1:e.failure+=1;try{t.onProgress?.(e.completed,e.total);}catch(r){process.env.NODE_ENV!=="production"&&console.warn("Parallel helper onProgress callback threw an error:",r);}},Qm=t=>t.map(n=>({metadata:n.metadata,taskResult:n})).slice().sort((n,r)=>n.metadata.index-r.metadata.index).map(({metadata:n,taskResult:r})=>{if(r.value){let i=r.value;return {...i,agentId:i.agentId??n.request.agentId,metadata:{...i.metadata,requestIndex:n.index,mode:n.mode}}}let o=r.error??new Error("Unknown error");return {agentId:n.request.agentId,content:o.message,success:false,metadata:{error:o.message,aborted:r.aborted??false,requestIndex:n.index,mode:n.mode}}}),Zm=t=>t.filter(e=>!e.success).map(e=>{let n=e.metadata;if(e.error instanceof Error)return {index:n.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:n.index,error:new Error(r)}}return {index:n.index,error:new Error("Unknown failure")}}),eh=(t,e)=>({onTaskComplete:async n=>{Vd(e,t,n.success);},onError:async()=>{Vd(e,t,false);}}),Jd=async(t,e,n={})=>{if(!Array.isArray(t))throw new TypeError("Parallel helpers expect an array of requests");if(t.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 n.onComplete?.(v),[]}let r=Vm(n.concurrency),o=Jm(n.timeout),i=Km(n.retryPolicy),s=new dr,a=new cr,d=t.map((h,v)=>({id:`${e}:${h.agentId??"anonymous"}:${v}`,metadata:{index:v,mode:e,request:h},run:w=>Ym(()=>e==="query"?a.query(h):a.execute(h),i,w.signal)})),c={completed:0,success:0,failure:0,total:t.length},l=await s.run(d,{maxConcurrency:r,timeoutMs:o,evaluateTaskSuccess:h=>h.success,callbacks:eh(c,n)}),f=Qm(l),g=Zm(l),m=s.getMetrics(),k={total:t.length,completed:t.length,successCount:f.filter(h=>h.success).length,failureCount:f.filter(h=>!h.success).length,results:f,errors:g,metrics:m};return n.onComplete?.(k),f},th=(t,e)=>Jd(t,"query",e),nh=(t,e)=>Jd(t,"execute",e);Fi();ji();Bi();$i();u();u();var po=class{capabilities={required:[]}};u();u();u();var Kd=2e3;function Xd(t){let e=t.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=Kd?e:e.slice(0,Kd-11)+" [redacted]"}var lh=10*1024*1024,uh={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function is(t,e){return t===void 0?true:Array.isArray(t)?t.includes(e):t===e}function ph(t,e){return t===void 0?true:Array.isArray(t)?t.some(n=>e.includes(n)):e.includes(t)}function Qd(t){if(typeof t=="number")return t;let e=t.match(/^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/i);if(!e)return 0;let n=parseFloat(e[1]),r=(e[2]??"b").toLowerCase();return Math.floor(n*(uh[r]??1))}function Zd(t){return typeof t=="string"}function ec(t){try{let e=Ua.statSync(t);return e.size>lh?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${t} (${e.size} bytes)
406
+ `),null):Ua.readFileSync(t,"utf8").split(`
407
+ `).length}catch{return null}}function tc(t){try{return Ua.statSync(t).size}catch{return null}}function fh(t,e,n){if(!t)return true;let r=e,o=r?.path??r?.file_path??r?.filePath??r?.filename;if(typeof o!="string")return false;if(Fe(o,t))return true;if(n&&o.startsWith("/")){let{relative:i,isAbsolute:s}=ge("path");if(s(o)){let a=i(n,o);if(a&&!a.startsWith("..")&&Fe(a,t))return true}}return false}function gh(t,e){return t?JSON.stringify(e).includes(t):true}function mh(t,e){if(!t)return true;try{let n=new RegExp(t),r=JSON.stringify(e);return n.test(r)}catch{return false}}function hh(t,e){if(!t)return true;try{let n=new RegExp(t),r=JSON.stringify(e);return n.test(r)}catch{return false}}function yh(t,e){if(t.pathSizeMin===void 0&&t.pathSizeMax===void 0)return true;let n=e,r=n?.path??n?.file_path??n?.filePath??n?.filename;if(typeof r!="string")return false;if(t.pathSizeMin!==void 0)if(Zd(t.pathSizeMin)){let o=tc(r);if(o===null||o<Qd(t.pathSizeMin))return false}else {let o=ec(r);if(o===null||o<t.pathSizeMin)return false}if(t.pathSizeMax!==void 0)if(Zd(t.pathSizeMax)){let o=tc(r);if(o===null||o>Qd(t.pathSizeMax))return false}else {let o=ec(r);if(o===null||o>t.pathSizeMax)return false}return true}function wh(t){let e=[],n=[];for(let r=0;r<t.length;r++){let o=t[r];if(!o||typeof o!="object"){n.push(`Hook at index ${r}: not an object, skipping`);continue}let i=o;if(typeof i.name!="string"||!i.name){n.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){n.push(`Hook "${i.name}": missing guide/deny/plugin, skipping`);continue}if(s&&typeof i.guide.say!="string"){n.push(`Hook "${i.name}": guide.say is required and must be string, skipping`);continue}if(a&&typeof i.deny.reason!="string"){n.push(`Hook "${i.name}": deny.reason is required and must be string, skipping`);continue}e.push(i);}return {valid:e,warnings:n}}var as=class extends po{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(n=>[n.id,n]));}async run(e){let n=[],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),n.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 n.length?e.inject(n.join(`
334
408
 
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;
409
+ `)):e.pass()}appendHookLog(e,n){try{let r={rule:n.rule,action:n.action,once:n.once,sessionId:n.ctx.sessionId,provider:n.ctx.provider,agent:n.ctx.agent.id,toolName:n.ctx.tool.name,rawToolName:n.ctx.tool.rawName};n.message&&(r.chars=n.message.length,process.env.CREWX_HOOK_LOG_VERBOSE==="1"&&(r.message=Xd(n.message).slice(0,500)));let o=`[${new Date().toISOString()}] HOOK: ${JSON.stringify(r)}
410
+ `;Ua.appendFileSync(e,o,{encoding:"utf8",mode:384});}catch{}}matchEntryLevel(e,n){if(e.provider!==void 0){let r=n.provider.replace(/^cli\//,"");if(!is(e.provider,r))return false}if(e.team!==void 0){let o=this.agentMap.get(n.agent.id)?.team??n.agent.team;if(!is(e.team,o))return false}if(e.role!==void 0){let o=this.agentMap.get(n.agent.id)?.role??n.agent.role;if(!is(e.role,o))return false}if(e.tag!==void 0){let o=this.agentMap.get(n.agent.id)?.tags??[];if(!ph(e.tag,o))return false}return !(e.agents!==void 0&&!e.agents.includes(n.agent.id))}matchRuleLevel(e,n){return !(e.when!==void 0&&e.when.length>0&&!e.when.includes(n.tool.name)&&!e.when.includes(n.tool.rawName)||!gh(e.pattern,n.tool.input)||!mh(e.regex,n.tool.input)||!fh(e.pathPattern,n.tool.input,n.cwd)||!yh(e,n.tool.input)||!hh(e.whenInputRegex,n.tool.input))}hasFired(e,n){try{let r=this.firedFilePath(e);if(!Ua.existsSync(r))return !1;let o=JSON.parse(Ua.readFileSync(r,"utf8"));return Array.isArray(o.fired)&&o.fired.includes(n)}catch{return false}}markFired(e,n){try{let r=this.firedFilePath(e);Ua.mkdirSync(K.dirname(r),{recursive:!0,mode:448});let o=Ua.existsSync(r)?JSON.parse(Ua.readFileSync(r,"utf8")):{fired:[]};Array.isArray(o.fired)||(o.fired=[]),o.fired.includes(n)||(o.fired.push(n),Ua.writeFileSync(r,JSON.stringify(o),{mode:384}));}catch(r){process.stderr.write(`[YamlHookPlugin] once state write failed: ${r}
411
+ `);}}firedFilePath(e){let n=crypto$1.createHash("sha1").update(e).digest("hex");return K.join(Ri.homedir(),".crewx","sessions",n,"fired-rules.json")}};u();u();u();function _h(t){let e=t.messages.map(n=>({id:n.id,role:n.isAssistant?"assistant":"user",content:n.text,timestamp:new Date(n.timestamp).toISOString(),metadata:n.metadata??null}));return {getThreadMessages(n){return e}}}u();var ds=class extends Error{code;kind;retryAfterMs;constructor(e,n,r){super(`AdapterError: ${e}`),this.name="AdapterError",this.code=e,this.kind=n,this.retryAfterMs=r;}};u();function kh(t){return t}function vh(t){return {name:t.name,async attach(e){let n=await t.configFactory(e),o=e.registerChannelAdapter,i=t.instanceId??t.name;o&&await o({adapter:t.adapter,instanceId:i,config:n}),t.onAttach&&await t.onAttach(e);},async detach(e){let r=e.unregisterChannelAdapter;r&&await r(t.instanceId??t.name),t.onDetach&&await t.onDetach(e);}}}Jt();exports.ARCHIVE_WI_BOARD_ID=an;exports.AdapterError=ds;exports.AgentNotFoundError=et;exports.AgentRuntime=cr;exports.AgentSkillsSchema=Ts;exports.BrowserFsAdapter=Vi;exports.ConfigLoadError=bt;exports.Crewx=qi;exports.CrewxPlugin=Gi;exports.DEFAULT_INPUT_BUDGET_PERCENT=Rs;exports.DEFAULT_WI_BOARD_ID=sn;exports.DEFAULT_WI_WORKFLOW_ID=xd;exports.DocumentLoader=Ut;exports.FRESH_PROVIDER_INITIAL_INPUT_FRAMING=mr;exports.INPUT_BUDGET_TOKENIZER_ENCODING=To;exports.LEGACY_UI_CARD_SAFE_SUMMARY=ka;exports.LayoutLoadError=ke;exports.LayoutLoader=Sn;exports.LayoutRenderer=Dn;exports.MAX_INPUT_BUDGET_PERCENT=gr;exports.MIN_INPUT_BUDGET_PERCENT=fr;exports.NodeFsAdapter=Ur;exports.PROVIDER_ORDER=Ji;exports.ParallelRunner=dr;exports.ParallelRunnerTimeoutError=uo;exports.PropsValidationError=ot;exports.PropsValidator=Nn;exports.RESUME_PROVIDER_INITIAL_INPUT_FRAMING=Ao;exports.SdkBoxService=rs;exports.SpanRepository=Yr;exports.TaskRepository=nn;exports.TemplateEngine=Cn;exports.TypedEventEmitter=Mn;exports.UiRuntimeError=x;exports.WI_BOARD_ID_PATTERN=co;exports.WI_DEFAULT_FLOW_FILENAME=gg;exports.WI_PLAN_FLOW_FILENAME=mg;exports.WI_PLAN_WORKFLOW_ID=fg;exports.WiBoardSchema=Mc;exports.WiCreateError=ne;exports.YamlHookPlugin=as;exports.buildContext=Gm;exports.canonicalizeAgentOptions=al;exports.classifyTaskError=Lm;exports.clearModelsOverride=yc;exports.compareProviders=or;exports.countTokens=yr;exports.createAdapterContext=ii;exports.createDelegateTool=Am;exports.createGlobalSettingsStore=Qg;exports.createHandler=vi;exports.createPluginProviderFactory=hd;exports.createProvider=rt;exports.createRemoteProviderFactory=pd;exports.createScopedAdapterStore=ri;exports.createTokenCounter=Co;exports.createUiServerRuntime=nd;exports.createWorkInstruction=$g;exports.createWorkInstructionBatch=Bg;exports.defaultExtractText=fi;exports.defaultFsAdapter=Mt;exports.defaultParseEvent=Le;exports.defineChannelAdapter=kh;exports.defineChannelAdapterPlugin=vh;exports.escapeHandlebarsHelper=Zo;exports.extractLegacyWorkflowRunId=wa;exports.formatDisplayTimestamp=Xo;exports.formatFileSizeHelper=ei;exports.formatTimestamp=Ko;exports.formatTimestampHelper=ti;exports.generateFingerprint=hu;exports.generateId=it;exports.getAntigravityModels=Ro;exports.getClaudeModels=wn;exports.getCodexModels=Eo;exports.getCopilotModels=xo;exports.getCrewxHome=bi;exports.getProviderModels=Ze;exports.getSyncWindowStore=_u;exports.hashUiDefinition=zn;exports.hashWorkspaceId=Jr;exports.initModelsRemote=um;exports.initPricingRemote=tm;exports.isReservedWiBoardId=Rd;exports.lengthHelper=Qo;exports.loadYamlFile=kr;exports.materializeWindowsSpawnProgram=Pt;exports.mergeAdditionalArgs=ta;exports.mergeModels=_n;exports.migrateGrokLegacyMode=In;exports.normalizeClaudeMode=Nt;exports.normalizeInputBudgetProvider=Io;exports.normalizeProviderId=mm;exports.normalizeWorkspacePath=Ei;exports.parseOverdriveProfile=Mr;exports.parseOverdriveSignal=Go;exports.parseStdoutEvent=bn;exports.parseUsage=tt;exports.parseYamlContent=_r;exports.providerRank=Ki;exports.queryAcpProviderMeta=$d;exports.queryAllAcpProviderMetas=vm;exports.queryAllCliProviderMetas=bm;exports.queryOpencodeModels=Bd;exports.redactTechnicalMessage=Qi;exports.registerAcpProviders=ld;exports.registerApiProviders=id;exports.registerProviderFactory=nt;exports.resolveAgent=vr;exports.resolveAgentSkills=pm;exports.resolveCatalogModelId=mn;exports.resolveCrewxCli=Im;exports.resolveCrewxWorkspace=Pm;exports.resolveDefaultAgentsYaml=So;exports.resolveInputBudget=wr;exports.resolveOverdrive=Vo;exports.resolveTemplatesPath=Gt;exports.resolveTokenizerMetadata=hr;exports.resolveUiEffectiveCapabilities=Kr;exports.resolveWiBoards=hg;exports.resolveWindowsExecutablePath=Xc;exports.resolveWindowsSpawnProgram=It;exports.resolveWorkflowTemplatesPath=zc;exports.runExecutesParallel=nh;exports.runInSyncWindow=ku;exports.runQueriesParallel=th;exports.sanitizeLegacyUiCardText=Br;exports.sanitizeTemplateMessages=ui;exports.scanLegacyUiCardAt=di;exports.scanLegacyUiCardTags=$n;exports.selectNextWi=Fg;exports.setAuditVerbose=tu;exports.setModelsOverride=vo;exports.toTaskReader=_h;exports.toTemplateMessages=pi;exports.truncateHelper=Yo;exports.validateHooksSchema=wh;