@crewx/sdk 0.9.0-rc.50 → 0.9.0-rc.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,64 +1,64 @@
1
- 'use strict';var bs=require('fs'),K=require('path'),child_process=require('child_process'),string_decoder=require('string_decoder'),sdk=require('@agentclientprotocol/sdk'),jsYaml=require('js-yaml'),zod=require('zod'),module$1=require('module'),Ae=require('handlebars'),promises=require('fs/promises'),crypto$1=require('crypto'),events=require('events'),async_hooks=require('async_hooks'),drizzleOrm=require('drizzle-orm'),yo=require('os'),sqliteCore=require('drizzle-orm/sqlite-core'),mcp_js=require('@modelcontextprotocol/sdk/server/mcp.js'),webStandardStreamableHttp_js=require('@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js'),perf_hooks=require('perf_hooks');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var bs__namespace=/*#__PURE__*/_interopNamespace(bs);var K__namespace=/*#__PURE__*/_interopNamespace(K);var Ae__namespace=/*#__PURE__*/_interopNamespace(Ae);var yo__namespace=/*#__PURE__*/_interopNamespace(yo);var rn=Object.defineProperty;var Ui=Object.getOwnPropertyDescriptor;var ji=Object.getOwnPropertyNames;var Fi=Object.prototype.hasOwnProperty;var oe=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});var M=(r,e)=>()=>(r&&(e=r(r=0)),e);var yr=(r,e)=>{for(var t in e)rn(r,t,{get:e[t],enumerable:true});},Wi=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of ji(e))!Fi.call(r,o)&&o!==t&&rn(r,o,{get:()=>e[o],enumerable:!(n=Ui(e,o))||n.enumerable});return r};var So=r=>Wi(rn({},"__esModule",{value:true}),r);var u=M(()=>{});function kr(r){return typeof r!="string"?void 0:r.trim()||void 0}function xr(r){return kr(r)?.toLowerCase()??""}function _t(r){try{return bs.statSync(r).isFile()}catch{return false}}function ta(r,e){if(r===e)return true;let t=K__namespace.default.relative(r,e);return t!==""&&!t.startsWith("..")&&!K__namespace.default.isAbsolute(t)}function ra(r,e){if(K__namespace.default.basename(r)!==".bin")return false;let t=K__namespace.default.dirname(r);if(K__namespace.default.basename(t)!=="node_modules")return false;let n=K__namespace.default.dirname(t);return ta(n,e)}function Lt(r,e={}){if(r.includes("/")||r.includes("\\")||K__namespace.default.isAbsolute(r))return r;let t=e.platform??process.platform,n=e.env??process.env,o=K__namespace.default.resolve(e.cwd??process.cwd()),s=(e.resolution??"global_first")==="global_first",i=n.PATH??n.Path??process.env.PATH??process.env.Path??"",a=t==="win32"?";":":",d=i.split(a).map(f=>f.trim()).filter(Boolean),l=K__namespace.default.extname(r).length>0,c=n.PATHEXT??n.Pathext??process.env.PATHEXT??process.env.Pathext??".EXE;.CMD;.BAT;.COM",g=t==="win32"?l?[""]:c.split(";").map(f=>f.trim()).filter(Boolean).map(f=>f.startsWith(".")?f:`.${f}`):[""];for(let f of d){let m=K__namespace.default.resolve(o,f);if(!(s&&ra(m,o)))for(let w of g){let _=xr(w),k=w.toUpperCase();for(let y of [w,_,k]){let v=K__namespace.default.join(m,`${r}${y}`);if(_t(v))return v}}}return r}function na(r,e){return Lt(r,{env:e,platform:"win32",resolution:"local_first"})}function oa(r){if(!_t(r))return null;try{let e=bs.readFileSync(r,"utf8"),t=K__namespace.default.dirname(r),n=[];for(let a of e.matchAll(/"([^"\r\n]*)"/g)){let c=(a[1]??"").match(/%~?dp0%?\s*[\\/]*(.*)$/i)?.[1]?.trim();if(!c)continue;let g=c.replace(/[\\/]+/g,K__namespace.default.sep).replace(/^[\\/]+/,""),f=K__namespace.default.resolve(t,g);_t(f)&&n.push(f);}let o=[],s=new Map;for(let a of e.matchAll(/SET\s+"(\w+)=%~?dp0%?[\\/]?([^"]+)"/gi)){let d=a[1].toUpperCase(),l=a[2].trim().replace(/[\\/]+/g,K__namespace.default.sep).replace(/^[\\/]+/,"");s.set(d,K__namespace.default.resolve(t,l));}for(let a of e.split(/\r?\n/))if(a.includes("%*"))for(let d of a.matchAll(/"%(\w+)%"/g)){let l=s.get(d[1].toUpperCase());l&&_t(l)&&o.push(l);}let i=a=>a.find(d=>{let l=xr(K__namespace.default.basename(d));return l!=="node.exe"&&l!=="node"})??null;return i(o)??i(n)}catch{return null}}function sa(r,e){if(typeof e=="string")return kr(e)||null;if(!e||typeof e!="object")return null;if(r){let t=e[r],n=typeof t=="string"?kr(t):void 0;if(n)return n}for(let t of Object.values(e)){let n=typeof t=="string"?kr(t):void 0;if(n)return n}return null}function ia(r,e){if(!e)return null;let t=K__namespace.default.dirname(r),n=[K__namespace.default.resolve(t,"..",e),K__namespace.default.resolve(t,"node_modules",e)];for(let o of n){let s=K__namespace.default.join(o,"package.json");if(_t(s))try{let i=JSON.parse(bs.readFileSync(s,"utf8")),a=sa(e,i.bin);if(!a)continue;let d=K__namespace.default.resolve(o,a);if(_t(d))return d}catch{}}return null}function aa(r){let e=r.platform??process.platform,t=r.env??process.env,n=r.execPath??process.execPath,o=r.cwd,s=r.resolution;if(e!=="win32")return {command:Lt(r.command,{cwd:o,env:t,platform:e,resolution:s}),leadingArgv:[],resolution:"direct"};let i=Lt(r.command,{cwd:o,env:t,platform:e,resolution:s}),a=xr(K__namespace.default.extname(i));if(a===".js"||a===".cjs"||a===".mjs")return {command:n,leadingArgv:[i],resolution:"node-entrypoint",windowsHide:true};if(a===".cmd"||a===".bat"){let d=oa(i)??ia(i,r.packageName);return d?xr(K__namespace.default.extname(d))===".exe"?{command:d,leadingArgv:[],resolution:"exe-entrypoint",windowsHide:true}:{command:n,leadingArgv:[d],resolution:"node-entrypoint",windowsHide:true}:{command:i,leadingArgv:[],resolution:"unresolved-wrapper"}}return {command:i,leadingArgv:[],resolution:"direct"}}function da(r){if(r.candidate.resolution!=="unresolved-wrapper")return {command:r.candidate.command,leadingArgv:r.candidate.leadingArgv,resolution:r.candidate.resolution,windowsHide:r.candidate.windowsHide};if(r.allowShellFallback===true)return {command:r.candidate.command,leadingArgv:[],resolution:"shell-fallback",shell:true};throw new Error(`${K__namespace.default.basename(r.candidate.command)} wrapper resolved, but no executable/Node entrypoint could be resolved without shell execution.`)}function Ze(r){let e=aa(r);return da({candidate:e,allowShellFallback:r.allowShellFallback})}function et(r,e){return {command:r.command,argv:[...r.leadingArgv,...e],resolution:r.resolution,shell:r.shell,windowsHide:r.windowsHide}}var vt=M(()=>{u();});function la(r){if(r.type!=="usage"||!("input_tokens"in r))return null;let e=Number(r.input_tokens??0),t=Number(r.output_tokens??0),o="cache_read_input_tokens"in r?Number(r.cache_read_input_tokens):void 0,s="cached_input_tokens"in r?Number(r.cached_input_tokens):void 0,i=o!==void 0?o:s??0;return {inputTokens:o!==void 0?e+o:e,outputTokens:t,cachedInputTokens:i}}function ca(r){let e=r.usage;if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(!("input_tokens"in t))return null;let n=Number(t.input_tokens??0),o=Number(t.output_tokens??0),i="cache_read_input_tokens"in t?Number(t.cache_read_input_tokens):void 0,a="cached_input_tokens"in t?Number(t.cached_input_tokens):void 0,d=i!==void 0?i:a??0;return {inputTokens:i!==void 0?n+i:n,outputTokens:o,cachedInputTokens:d}}function ua(r){if(r.type!=="step_finish")return null;let t=r.part?.tokens;if(!t)return null;let n=Number(t.input??0),o=Number(t.output??0),s=t.cache,i=s?Number(s.read??0):0;return {inputTokens:n+i,outputTokens:o,cachedInputTokens:i}}function Do(r){let e=new Map,t;for(let s of r.split(`
1
+ 'use strict';var bs=require('fs'),K=require('path'),child_process=require('child_process'),string_decoder=require('string_decoder'),sdk=require('@agentclientprotocol/sdk'),jsYaml=require('js-yaml'),zod=require('zod'),module$1=require('module'),Te=require('handlebars'),promises=require('fs/promises'),crypto$1=require('crypto'),events=require('events'),async_hooks=require('async_hooks'),drizzleOrm=require('drizzle-orm'),wo=require('os'),sqliteCore=require('drizzle-orm/sqlite-core'),mcp_js=require('@modelcontextprotocol/sdk/server/mcp.js'),webStandardStreamableHttp_js=require('@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js'),perf_hooks=require('perf_hooks');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var bs__namespace=/*#__PURE__*/_interopNamespace(bs);var K__namespace=/*#__PURE__*/_interopNamespace(K);var Te__namespace=/*#__PURE__*/_interopNamespace(Te);var wo__namespace=/*#__PURE__*/_interopNamespace(wo);var rn=Object.defineProperty;var Ui=Object.getOwnPropertyDescriptor;var ji=Object.getOwnPropertyNames;var Wi=Object.prototype.hasOwnProperty;var oe=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});var M=(r,e)=>()=>(r&&(e=r(r=0)),e);var yr=(r,e)=>{for(var t in e)rn(r,t,{get:e[t],enumerable:true});},Fi=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of ji(e))!Wi.call(r,o)&&o!==t&&rn(r,o,{get:()=>e[o],enumerable:!(n=Ui(e,o))||n.enumerable});return r};var Io=r=>Fi(rn({},"__esModule",{value:true}),r);var p=M(()=>{});function kr(r){return typeof r!="string"?void 0:r.trim()||void 0}function xr(r){return kr(r)?.toLowerCase()??""}function kt(r){try{return bs.statSync(r).isFile()}catch{return false}}function ta(r,e){if(r===e)return true;let t=K__namespace.default.relative(r,e);return t!==""&&!t.startsWith("..")&&!K__namespace.default.isAbsolute(t)}function ra(r,e){if(K__namespace.default.basename(r)!==".bin")return false;let t=K__namespace.default.dirname(r);if(K__namespace.default.basename(t)!=="node_modules")return false;let n=K__namespace.default.dirname(t);return ta(n,e)}function Lt(r,e={}){if(r.includes("/")||r.includes("\\")||K__namespace.default.isAbsolute(r))return r;let t=e.platform??process.platform,n=e.env??process.env,o=K__namespace.default.resolve(e.cwd??process.cwd()),s=(e.resolution??"global_first")==="global_first",i=n.PATH??n.Path??process.env.PATH??process.env.Path??"",a=t==="win32"?";":":",d=i.split(a).map(f=>f.trim()).filter(Boolean),l=K__namespace.default.extname(r).length>0,c=n.PATHEXT??n.Pathext??process.env.PATHEXT??process.env.Pathext??".EXE;.CMD;.BAT;.COM",g=t==="win32"?l?[""]:c.split(";").map(f=>f.trim()).filter(Boolean).map(f=>f.startsWith(".")?f:`.${f}`):[""];for(let f of d){let m=K__namespace.default.resolve(o,f);if(!(s&&ra(m,o)))for(let w of g){let _=xr(w),k=w.toUpperCase();for(let y of [w,_,k]){let v=K__namespace.default.join(m,`${r}${y}`);if(kt(v))return v}}}return r}function na(r,e){return Lt(r,{env:e,platform:"win32",resolution:"local_first"})}function oa(r){if(!kt(r))return null;try{let e=bs.readFileSync(r,"utf8"),t=K__namespace.default.dirname(r),n=[];for(let a of e.matchAll(/"([^"\r\n]*)"/g)){let c=(a[1]??"").match(/%~?dp0%?\s*[\\/]*(.*)$/i)?.[1]?.trim();if(!c)continue;let g=c.replace(/[\\/]+/g,K__namespace.default.sep).replace(/^[\\/]+/,""),f=K__namespace.default.resolve(t,g);kt(f)&&n.push(f);}let o=[],s=new Map;for(let a of e.matchAll(/SET\s+"(\w+)=%~?dp0%?[\\/]?([^"]+)"/gi)){let d=a[1].toUpperCase(),l=a[2].trim().replace(/[\\/]+/g,K__namespace.default.sep).replace(/^[\\/]+/,"");s.set(d,K__namespace.default.resolve(t,l));}for(let a of e.split(/\r?\n/))if(a.includes("%*"))for(let d of a.matchAll(/"%(\w+)%"/g)){let l=s.get(d[1].toUpperCase());l&&kt(l)&&o.push(l);}let i=a=>a.find(d=>{let l=xr(K__namespace.default.basename(d));return l!=="node.exe"&&l!=="node"})??null;return i(o)??i(n)}catch{return null}}function sa(r,e){if(typeof e=="string")return kr(e)||null;if(!e||typeof e!="object")return null;if(r){let t=e[r],n=typeof t=="string"?kr(t):void 0;if(n)return n}for(let t of Object.values(e)){let n=typeof t=="string"?kr(t):void 0;if(n)return n}return null}function ia(r,e){if(!e)return null;let t=K__namespace.default.dirname(r),n=[K__namespace.default.resolve(t,"..",e),K__namespace.default.resolve(t,"node_modules",e)];for(let o of n){let s=K__namespace.default.join(o,"package.json");if(kt(s))try{let i=JSON.parse(bs.readFileSync(s,"utf8")),a=sa(e,i.bin);if(!a)continue;let d=K__namespace.default.resolve(o,a);if(kt(d))return d}catch{}}return null}function aa(r){let e=r.platform??process.platform,t=r.env??process.env,n=r.execPath??process.execPath,o=r.cwd,s=r.resolution;if(e!=="win32")return {command:Lt(r.command,{cwd:o,env:t,platform:e,resolution:s}),leadingArgv:[],resolution:"direct"};let i=Lt(r.command,{cwd:o,env:t,platform:e,resolution:s}),a=xr(K__namespace.default.extname(i));if(a===".js"||a===".cjs"||a===".mjs")return {command:n,leadingArgv:[i],resolution:"node-entrypoint",windowsHide:true};if(a===".cmd"||a===".bat"){let d=oa(i)??ia(i,r.packageName);return d?xr(K__namespace.default.extname(d))===".exe"?{command:d,leadingArgv:[],resolution:"exe-entrypoint",windowsHide:true}:{command:n,leadingArgv:[d],resolution:"node-entrypoint",windowsHide:true}:{command:i,leadingArgv:[],resolution:"unresolved-wrapper"}}return {command:i,leadingArgv:[],resolution:"direct"}}function da(r){if(r.candidate.resolution!=="unresolved-wrapper")return {command:r.candidate.command,leadingArgv:r.candidate.leadingArgv,resolution:r.candidate.resolution,windowsHide:r.candidate.windowsHide};if(r.allowShellFallback===true)return {command:r.candidate.command,leadingArgv:[],resolution:"shell-fallback",shell:true};throw new Error(`${K__namespace.default.basename(r.candidate.command)} wrapper resolved, but no executable/Node entrypoint could be resolved without shell execution.`)}function Ze(r){let e=aa(r);return da({candidate:e,allowShellFallback:r.allowShellFallback})}function et(r,e){return {command:r.command,argv:[...r.leadingArgv,...e],resolution:r.resolution,shell:r.shell,windowsHide:r.windowsHide}}var xt=M(()=>{p();});function la(r){if(r.type!=="usage"||!("input_tokens"in r))return null;let e=Number(r.input_tokens??0),t=Number(r.output_tokens??0),o="cache_read_input_tokens"in r?Number(r.cache_read_input_tokens):void 0,s="cached_input_tokens"in r?Number(r.cached_input_tokens):void 0,i=o!==void 0?o:s??0;return {inputTokens:o!==void 0?e+o:e,outputTokens:t,cachedInputTokens:i}}function ca(r){let e=r.usage;if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(!("input_tokens"in t))return null;let n=Number(t.input_tokens??0),o=Number(t.output_tokens??0),i="cache_read_input_tokens"in t?Number(t.cache_read_input_tokens):void 0,a="cached_input_tokens"in t?Number(t.cached_input_tokens):void 0,d=i!==void 0?i:a??0;return {inputTokens:i!==void 0?n+i:n,outputTokens:o,cachedInputTokens:d}}function ua(r){if(r.type!=="step_finish")return null;let t=r.part?.tokens;if(!t)return null;let n=Number(t.input??0),o=Number(t.output??0),s=t.cache,i=s?Number(s.read??0):0;return {inputTokens:n+i,outputTokens:o,cachedInputTokens:i}}function Lo(r){let e=new Map,t;for(let s of r.split(`
2
2
  `))if(s.trim())try{let i=JSON.parse(s);if(i.type!=="assistant")continue;let a=i.message,d=a?.id,l=a?.usage;if(typeof d!="string"||!l)continue;let c=Number(l.input_tokens??0),g=Number(l.cache_read_input_tokens??0);e.set(d,{inputTokens:c+g,cachedInputTokens:g});let f=a?.model;typeof f=="string"&&f&&(t=f);}catch{}if(e.size===0)return;let n=0,o=0;for(let s of e.values())n+=s.inputTokens,o+=s.cachedInputTokens;return {inputTokens:n,cachedInputTokens:o,model:t}}function Se(r){if(!r||!r.trim())return;let e=null,t=null;for(let n of r.split(`
3
- `))if(n.trim())try{let o=JSON.parse(n),s=ua(o);if(s){t||(t={inputTokens:0,outputTokens:0,cachedInputTokens:0}),t.inputTokens+=s.inputTokens,t.outputTokens+=s.outputTokens,t.cachedInputTokens+=s.cachedInputTokens;continue}let i=la(o)??ca(o);i&&(e=i);}catch{}return t||(e??void 0)}var tt=M(()=>{u();});exports.ProviderError=void 0;var rt,nt,$t=M(()=>{u();exports.ProviderError=class extends Error{constructor(t,n,o){super(t);this.providerStr=n;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},rt=class extends exports.ProviderError{constructor(e,t){super(e,t,{code:"TIMEOUT_IDLE",kind:"permanent"}),this.name="IdleTimeoutError";}},nt=class extends exports.ProviderError{constructor(e,t){super(e,t,{code:"TIMEOUT_TOTAL",kind:"permanent"}),this.name="TotalTimeoutError";}};});exports.RateLimitError=void 0;var on=M(()=>{u();$t();exports.RateLimitError=class extends exports.ProviderError{name="RateLimitError";constructor(e,t="cli/claude"){super(e,t,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function ge(r){return /crewx\s+(x|execute)\s/.test(r)}function me(r,e){let t=e.match(/@(\S+)/);return {timestamp:r,type:"agent_call",targetAgent:t?.[1]?.replace(/["']/g,""),toolInput:e}}var kt=M(()=>{u();});function he(r){if(typeof r=="string")return r;if(!r||typeof r!="object")return JSON.stringify(r??{});let e=r;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 xt=M(()=>{u();});function Er(r){if(!r)return {};let e=r.match(/^(.+?)\[([^\]]+)\]$/);if(e){let t=e[2].toLowerCase();return pa.has(t)?{model:e[1],effort:e[2]}:{model:r}}return {model:r}}function Lo(r){switch(r){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 $o(r){switch(r){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 Uo(r){return r?["-c",`model_reasoning_effort=${r}`]:[]}function jo(r){if(!r)return [];let e=new Set(["acceptEdits","bypassPermissions","default","delegate","dontAsk","plan"]),t=r==="auto"?"default":r;return e.has(t)?["--permission-mode",t]:[]}function Fo(r){return r?new Set(["low","medium","high","xhigh","max"]).has(r)?["--effort",r]:[]:[]}var pa,sn=M(()=>{u();pa=new Set(["minimal","low","medium","high","xhigh","max"]);});var an,Wo,Ho=M(()=>{u();an={claude:{models:[{id:"claude-fable-5",name:"Claude Fable 5"},{id:"claude-opus-5",name:"Claude Opus 5"},{id:"claude-sonnet-5",name:"Claude Sonnet 5"},{id:"claude-opus-4-8[1m]",name:"Claude Opus 4.8 (Extended)"},{id:"claude-opus-4-8",name:"Claude Opus 4.8"},{id:"claude-opus-4-7[1m]",name:"Claude Opus 4.7 (Extended)"},{id:"claude-opus-4-7",name:"Claude Opus 4.7"},{id:"claude-opus-4-6[1m]",name:"Claude Opus 4.6 (Extended)"},{id:"claude-opus-4-6",name:"Claude Opus 4.6"},{id:"claude-sonnet-4-6[1m]",name:"Claude Sonnet 4.6 (Extended)"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5"}],modes:[{id:"default",name:"Default"},{id:"acceptEdits",name:"Accept Edits"},{id:"plan",name:"Plan"},{id:"auto",name:"Auto"},{id:"dontAsk",name:"Don't Ask"},{id:"bypassPermissions",name:"Bypass Permissions"}],effort:["low","medium","high"],modelOverrides:{"claude-fable-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-sonnet-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-8[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-8":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-7[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-7":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-opus-4-6":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-haiku-4-5":{effort:[]}}},codex:{models:[{id:"gpt-5.6-sol",name:"GPT-5.6 Sol"},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra"},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna"},{id:"gpt-5.5",name:"GPT-5.5"},{id:"gpt-5.4",name:"GPT-5.4"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini"},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex"},{id:"gpt-5.3-codex-spark",name:"GPT-5.3 Codex Spark"}],modes:[{id:"agent",name:"Agent"},{id:"read-only",name:"Read Only"},{id:"plan",name:"Plan"},{id:"agent-full-access",name:"Agent Full Access"},{id:"yolo",name:"YOLO"}],effort:["minimal","low","medium","high"],modelOverrides:{"gpt-5.6-sol":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"xhigh"},"gpt-5.6-terra":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.6-luna":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.5":{effort:["minimal","low","medium","high","xhigh"],defaultEffort:"high"}}},copilot:{models:[{id:"auto",name:"Auto"},{id:"claude-sonnet-5",name:"Claude Sonnet 5"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"gpt-5.5",name:"GPT-5.5"},{id:"gpt-5.4",name:"GPT-5.4"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro"}],modes:[{id:"interactive",name:"Interactive"},{id:"plan",name:"Plan"},{id:"autopilot",name:"Autopilot"}],effort:["none","low","medium","high","xhigh","max"],modelOverrides:{}},antigravity:{models:[{id:"Gemini 3.5 Flash (Medium)",name:"Gemini 3.5 Flash (Medium)"},{id:"Gemini 3.5 Flash (High)",name:"Gemini 3.5 Flash (High)"},{id:"Gemini 3.5 Flash (Low)",name:"Gemini 3.5 Flash (Low)"},{id:"Gemini 3.1 Pro (Low)",name:"Gemini 3.1 Pro (Low)"},{id:"Gemini 3.1 Pro (High)",name:"Gemini 3.1 Pro (High)"},{id:"Claude Sonnet 4.6 (Thinking)",name:"Claude Sonnet 4.6 (Thinking)"},{id:"Claude Opus 4.6 (Thinking)",name:"Claude Opus 4.6 (Thinking)"},{id:"GPT-OSS 120B (Medium)",name:"GPT-OSS 120B (Medium)"}],modes:[],effort:[],modelOverrides:{}}},Wo={version:1,providers:{"cli/codex":{model:"gpt-5.6-sol",query:{mode:"agent",effort:"high"},execute:{mode:"agent-full-access",effort:"xhigh"}},"cli/claude":{model:"claude-opus-5",query:{mode:"auto",effort:"high"},execute:{mode:"bypassPermissions",effort:"xhigh"}}}},Object.fromEntries(Object.entries(an).map(([r,e])=>[r,e.models]));});function qo(){return {models:[],modes:[],effort:[],modelOverrides:{}}}function fa(r){return Array.isArray(r)?{models:r,modes:[],effort:[],modelOverrides:{}}:r?{models:r.models??[],modes:r.modes??[],effort:r.effort??[],modelOverrides:r.modelOverrides??{}}:qo()}function ln(r){dn=Object.fromEntries(Object.entries(r).map(([e,t])=>[e,fa(t)]));}function ga(){dn={};}function Ut(r){Bo={...r};}function st(r){return Et(r).models}function Et(r){return dn[r]??an[r]??qo()}function zo(r){return Bo[r]??Wo.providers[r]}function jt(r){return Et(r).modes}function Ft(r,e){let t=Et(r);return e?t.modelOverrides[e]?.effort??t.effort:t.effort}function Ko(r){return Et(r).modelOverrides}function Wt(){return st("claude")}function cn(){return st("codex")}function un(){return st("copilot")}function pn(){return st("antigravity")}function Ht(r,e){let t=new Map;for(let n of [...r,...e]){let o=t.get(n.id);(!o||!o.name&&n.name)&&t.set(n.id,n);}return Array.from(t.values())}var dn,Bo,ke=M(()=>{u();Ho();dn={},Bo={};});function ha(r){let t=r.message?.content;return Array.isArray(t)?t.map(n=>typeof n.text=="string"?n.text.trim():"").filter(Boolean).join(`
3
+ `))if(n.trim())try{let o=JSON.parse(n),s=ua(o);if(s){t||(t={inputTokens:0,outputTokens:0,cachedInputTokens:0}),t.inputTokens+=s.inputTokens,t.outputTokens+=s.outputTokens,t.cachedInputTokens+=s.cachedInputTokens;continue}let i=la(o)??ca(o);i&&(e=i);}catch{}return t||(e??void 0)}var tt=M(()=>{p();});exports.ProviderError=void 0;var rt,nt,$t=M(()=>{p();exports.ProviderError=class extends Error{constructor(t,n,o){super(t);this.providerStr=n;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},rt=class extends exports.ProviderError{constructor(e,t){super(e,t,{code:"TIMEOUT_IDLE",kind:"permanent"}),this.name="IdleTimeoutError";}},nt=class extends exports.ProviderError{constructor(e,t){super(e,t,{code:"TIMEOUT_TOTAL",kind:"permanent"}),this.name="TotalTimeoutError";}};});exports.RateLimitError=void 0;var on=M(()=>{p();$t();exports.RateLimitError=class extends exports.ProviderError{name="RateLimitError";constructor(e,t="cli/claude"){super(e,t,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function ge(r){return /crewx\s+(x|execute)\s/.test(r)}function me(r,e){let t=e.match(/@(\S+)/);return {timestamp:r,type:"agent_call",targetAgent:t?.[1]?.replace(/["']/g,""),toolInput:e}}var Et=M(()=>{p();});function he(r){if(typeof r=="string")return r;if(!r||typeof r!="object")return JSON.stringify(r??{});let e=r;return typeof e.command=="string"?e.command:typeof e.file_path=="string"?e.file_path:typeof e.filePath=="string"?e.filePath:typeof e.path=="string"?e.path:typeof e.query=="string"?e.query:typeof e.pattern=="string"?e.pattern:typeof e.url=="string"?e.url:typeof e.prompt=="string"?e.prompt.length>200?e.prompt.slice(0,200)+"\u2026":e.prompt:typeof e.description=="string"?e.description:JSON.stringify(e)}var At=M(()=>{p();});function Er(r){if(!r)return {};let e=r.match(/^(.+?)\[([^\]]+)\]$/);if(e){let t=e[2].toLowerCase();return pa.has(t)?{model:e[1],effort:e[2]}:{model:r}}return {model:r}}function $o(r){switch(r){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 Uo(r){switch(r){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 jo(r){return r?["-c",`model_reasoning_effort=${r}`]:[]}function Wo(r){if(!r)return [];let e=new Set(["acceptEdits","bypassPermissions","default","delegate","dontAsk","plan"]),t=r==="auto"?"default":r;return e.has(t)?["--permission-mode",t]:[]}function Fo(r){return r?new Set(["low","medium","high","xhigh","max"]).has(r)?["--effort",r]:[]:[]}var pa,sn=M(()=>{p();pa=new Set(["minimal","low","medium","high","xhigh","max"]);});var an,Ho,Bo=M(()=>{p();an={claude:{models:[{id:"claude-fable-5",name:"Claude Fable 5"},{id:"claude-opus-5",name:"Claude Opus 5"},{id:"claude-sonnet-5",name:"Claude Sonnet 5"},{id:"claude-opus-4-8[1m]",name:"Claude Opus 4.8 (Extended)"},{id:"claude-opus-4-8",name:"Claude Opus 4.8"},{id:"claude-opus-4-7[1m]",name:"Claude Opus 4.7 (Extended)"},{id:"claude-opus-4-7",name:"Claude Opus 4.7"},{id:"claude-opus-4-6[1m]",name:"Claude Opus 4.6 (Extended)"},{id:"claude-opus-4-6",name:"Claude Opus 4.6"},{id:"claude-sonnet-4-6[1m]",name:"Claude Sonnet 4.6 (Extended)"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5"}],modes:[{id:"default",name:"Default"},{id:"acceptEdits",name:"Accept Edits"},{id:"plan",name:"Plan"},{id:"auto",name:"Auto"},{id:"dontAsk",name:"Don't Ask"},{id:"bypassPermissions",name:"Bypass Permissions"}],effort:["low","medium","high"],modelOverrides:{"claude-fable-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-sonnet-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-8[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-8":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-7[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-7":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-opus-4-6":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-haiku-4-5":{effort:[]}}},codex:{models:[{id:"gpt-5.6-sol",name:"GPT-5.6 Sol"},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra"},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna"},{id:"gpt-5.5",name:"GPT-5.5"},{id:"gpt-5.4",name:"GPT-5.4"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini"},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex"},{id:"gpt-5.3-codex-spark",name:"GPT-5.3 Codex Spark"}],modes:[{id:"agent",name:"Agent"},{id:"read-only",name:"Read Only"},{id:"plan",name:"Plan"},{id:"agent-full-access",name:"Agent Full Access"},{id:"yolo",name:"YOLO"}],effort:["minimal","low","medium","high"],modelOverrides:{"gpt-5.6-sol":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"xhigh"},"gpt-5.6-terra":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.6-luna":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.5":{effort:["minimal","low","medium","high","xhigh"],defaultEffort:"high"}}},copilot:{models:[{id:"auto",name:"Auto"},{id:"claude-sonnet-5",name:"Claude Sonnet 5"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"gpt-5.5",name:"GPT-5.5"},{id:"gpt-5.4",name:"GPT-5.4"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro"}],modes:[{id:"interactive",name:"Interactive"},{id:"plan",name:"Plan"},{id:"autopilot",name:"Autopilot"}],effort:["none","low","medium","high","xhigh","max"],modelOverrides:{}},antigravity:{models:[{id:"Gemini 3.5 Flash (Medium)",name:"Gemini 3.5 Flash (Medium)"},{id:"Gemini 3.5 Flash (High)",name:"Gemini 3.5 Flash (High)"},{id:"Gemini 3.5 Flash (Low)",name:"Gemini 3.5 Flash (Low)"},{id:"Gemini 3.1 Pro (Low)",name:"Gemini 3.1 Pro (Low)"},{id:"Gemini 3.1 Pro (High)",name:"Gemini 3.1 Pro (High)"},{id:"Claude Sonnet 4.6 (Thinking)",name:"Claude Sonnet 4.6 (Thinking)"},{id:"Claude Opus 4.6 (Thinking)",name:"Claude Opus 4.6 (Thinking)"},{id:"GPT-OSS 120B (Medium)",name:"GPT-OSS 120B (Medium)"}],modes:[],effort:[],modelOverrides:{}}},Ho={version:1,providers:{"cli/codex":{model:"gpt-5.6-sol",query:{mode:"agent",effort:"high"},execute:{mode:"agent-full-access",effort:"xhigh"}},"cli/claude":{model:"claude-opus-5",query:{mode:"auto",effort:"high"},execute:{mode:"bypassPermissions",effort:"xhigh"}}}},Object.fromEntries(Object.entries(an).map(([r,e])=>[r,e.models]));});function zo(){return {models:[],modes:[],effort:[],modelOverrides:{}}}function fa(r){return Array.isArray(r)?{models:r,modes:[],effort:[],modelOverrides:{}}:r?{models:r.models??[],modes:r.modes??[],effort:r.effort??[],modelOverrides:r.modelOverrides??{}}:zo()}function ln(r){dn=Object.fromEntries(Object.entries(r).map(([e,t])=>[e,fa(t)]));}function ga(){dn={};}function Ut(r){qo={...r};}function st(r){return Rt(r).models}function Rt(r){return dn[r]??an[r]??zo()}function Ko(r){return qo[r]??Ho.providers[r]}function jt(r){return Rt(r).modes}function Wt(r,e){let t=Rt(r);return e?t.modelOverrides[e]?.effort??t.effort:t.effort}function Go(r){return Rt(r).modelOverrides}function Ft(){return st("claude")}function cn(){return st("codex")}function un(){return st("copilot")}function pn(){return st("antigravity")}function Ht(r,e){let t=new Map;for(let n of [...r,...e]){let o=t.get(n.id);(!o||!o.name&&n.name)&&t.set(n.id,n);}return Array.from(t.values())}var dn,qo,Ee=M(()=>{p();Bo();dn={},qo={};});function ha(r){let t=r.message?.content;return Array.isArray(t)?t.map(n=>typeof n.text=="string"?n.text.trim():"").filter(Boolean).join(`
4
4
 
5
5
  `):""}function ya(r){let e=r.toLowerCase();return e.includes("out of extra usage")||e.includes("rate limit")||e.includes("quota")}function wa(r,e){let t=e.type;if(t==="text"){let n=String(e.text||"");return n?{timestamp:r,type:"text",content:n}:null}if(t==="thinking"){let n=String(e.thinking||"");return {timestamp:r,type:"thinking",content:n||"(thinking)"}}if(t==="tool_use"){let n=String(e.name||""),o=e.id,s=e.input,i=he(s);return n==="Bash"&&ge(i)?me(r,i):{timestamp:r,type:"tool_use",toolUseId:o,toolName:n,toolInput:i}}if(t==="tool_result"){let n=!!e.is_error,o=e.tool_use_id,s=e.output??e.content??"",i;return typeof s=="string"?i=s:Array.isArray(s)?i=s.filter(a=>a.type==="text"&&typeof a.text=="string").map(a=>a.text).join(`
6
- `):i=JSON.stringify(s),{timestamp:r,type:"tool_result",toolUseId:o,resultPreview:i,isError:n}}return null}var ma;exports.claudeAdapter=void 0;var fn=M(()=>{u();on();kt();xt();sn();ke();tt();ma=new Set(["tool_progress"]),exports.claudeAdapter={command:"claude",meta:{displayName:"Claude",models:Wt(),capabilities:{resume:true}},buildArgs(r,e,t){let{model:n,effort:o}=Er(e.model),s=e.effort??o,i=jo(e.mode),a=Fo(s),d=n?["--model",n]:[],l=e.resumeSessionId?["--resume",e.resumeSessionId]:[];if(e.additionalArgs!==void 0){let g=[...e.additionalArgs];return g.indexOf("-p")!==-1?{args:["--output-format","stream-json","--verbose",...l,...i,...a,...d,...g],stdinMessage:r}:{args:["--output-format","stream-json","--verbose",...l,...i,...a,...d,...g],stdinMessage:r}}return {args:["-p","--output-format","stream-json","--verbose",...l,...i,...a,...d],stdinMessage:r}},extractText(r){let e=r.split(`
6
+ `):i=JSON.stringify(s),{timestamp:r,type:"tool_result",toolUseId:o,resultPreview:i,isError:n}}return null}var ma;exports.claudeAdapter=void 0;var fn=M(()=>{p();on();Et();At();sn();Ee();tt();ma=new Set(["tool_progress"]),exports.claudeAdapter={command:"claude",meta:{displayName:"Claude",models:Ft(),capabilities:{resume:true}},buildArgs(r,e,t){let{model:n,effort:o}=Er(e.model),s=e.effort??o,i=Wo(e.mode),a=Fo(s),d=n?["--model",n]:[],l=e.resumeSessionId?["--resume",e.resumeSessionId]:[];if(e.additionalArgs!==void 0){let g=[...e.additionalArgs];return g.indexOf("-p")!==-1?{args:["--output-format","stream-json","--verbose",...l,...i,...a,...d,...g],stdinMessage:r}:{args:["--output-format","stream-json","--verbose",...l,...i,...a,...d,...g],stdinMessage:r}}return {args:["-p","--output-format","stream-json","--verbose",...l,...i,...a,...d],stdinMessage:r}},extractText(r){let e=r.split(`
7
7
  `).filter(o=>o.trim()),t=[],n=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant"&&Array.isArray(s.message?.content))for(let i of s.message.content)i.type==="text"&&typeof i.text=="string"&&i.text.trim()&&t.push(i.text.trim());s.type==="result"&&typeof s.result=="string"&&(n=s.result);}catch{}return t.length>0?t[t.length-1]:n||r.trim()},extractFailure(r){try{let e=JSON.parse(r);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=ha(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(ya(t))return new exports.RateLimitError(`Claude rate limit: ${t}`)}}catch{}return null},parseResultMeta(r){let e=r.split(`
8
- `);for(let n of e)if(n.trim())try{let o=JSON.parse(n);if(o.type==="result"){let s=o.usage,i=s?{inputTokens:Number(s.input_tokens??0)+Number(s.cache_read_input_tokens??0),outputTokens:Number(s.output_tokens??0),cachedInputTokens:Number(s.cache_read_input_tokens??0),costUsd:Number(o.total_cost_usd??0)}:null,a=o.modelUsage,d=a?Object.keys(a)[0]??null:null;return {usage:i,model:d}}}catch{}let t=Do(r);return t?{usage:{inputTokens:t.inputTokens,outputTokens:0,cachedInputTokens:t.cachedInputTokens,costUsd:0},model:t.model??null}:{usage:null,model:null}},parseEvent(r,e){let t;try{t=JSON.parse(r);}catch{return []}let n=t.type;if(!n)return [];if(n!=="assistant"&&n!=="user")return [];let s=t.message?.content;if(!Array.isArray(s))return [];let i=e??new Date().toISOString(),a=[];for(let d of s){let l=wa(i,d);l&&a.push(l);}return a},suppressOutputLine(r){let e=r.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let n=JSON.parse(e).type;return n?ma.has(n):!1}catch{return false}}};});var _a,va;exports.copilotAdapter=void 0;var gn=M(()=>{u();tt();kt();xt();ke();_a=new Set(["interactive","plan","autopilot"]),va=new Set(["none","low","medium","high","xhigh","max"]),exports.copilotAdapter={command:"copilot",meta:{displayName:"Copilot",models:un()},buildArgs(r,e,t){let n=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&n.push("--model",e.model),e.mode&&_a.has(e.mode)&&n.push("--mode",e.mode),e.effort&&va.has(e.effort)&&n.push("--effort",e.effort),{args:n,stdinMessage:r}},extractText(r){let e=r.split(`
9
- `).filter(o=>o.trim()),t=[],n=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant.message"&&typeof s.data?.content=="string"){let i=s.data.content;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(n=s.result);}catch{}return t.length>0?t[t.length-1]:n||r.trim()},parseResultMeta(r){let e=Se(r);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(r,e){let t;try{t=JSON.parse(r);}catch{return []}let n=t.type;if(!n)return [];if(!n.startsWith("tool.execution")&&!n.startsWith("assistant.")&&n!=="user.message")return [];let o=t.data;if(!o)return [];let s=e??new Date().toISOString(),i=o.toolCallId;if(n==="tool.execution_start"){let a=String(o.toolName||""),d=o.arguments,l=he(d);return (a==="bash"||a==="Bash")&&ge(l)?[me(s,l)]:[{timestamp:s,type:"tool_use",toolName:a,toolInput:l,...i&&{toolUseId:i}}]}if(n==="tool.execution_complete"){let a=o.error;if(a)return [{timestamp:s,type:"tool_result",isError:true,resultPreview:String(a.message||""),...i&&{toolUseId:i}}];let d=o.result,l=String(d?.content||"");return [{timestamp:s,type:"tool_result",resultPreview:l,isError:false,...i&&{toolUseId:i}}]}if(n==="assistant.message"){let a=String(o.content||"");return a?[{timestamp:s,type:"text",content:a}]:[]}return []}};});function xa(r){let e=[],t=0,n=false,o=false,s=0;for(let a=0;a<r.length;a++){let d=r[a];if(o){o=false;continue}if(d==="\\"&&n){o=true;continue}if(d==='"'){n=!n;continue}if(!n){if(d==="{")t++;else if(d==="}"&&(t--,t===0)){let l=r.slice(s,a+1).trim();l&&e.push(l),s=a+1;}}}let i=r.slice(s).trim();return i&&e.push(i),e}function Ea(r){return r[0]==="exec"?r.slice(1):r}function Aa(r,e){let t=e.type;if(t==="command_execution"){let n=String(e.command||"");return ge(n)?[me(r,n)]:[{timestamp:r,type:"tool_use",toolName:"Bash",toolInput:n}]}return t==="web_search"?[]:t==="file_change"?[]:[]}function Ra(r,e){let t=e.type;if(t==="message"||t==="text"){let n=e.content;if(Array.isArray(n))for(let o of n){let s=Ta(r,o);if(s)return s}if(typeof e.text=="string")return {timestamp:r,type:"text",content:e.text}}if(t==="agent_message"&&typeof e.text=="string")return {timestamp:r,type:"text",content:e.text};if(t==="reasoning")return {timestamp:r,type:"text",content:String(e.text||"")};if(t==="command_execution"){let n=String(e.aggregated_output||e.output||""),o=!!e.is_error;return {timestamp:r,type:"tool_result",resultPreview:n,isError:o}}if(t==="tool_use"){let n=String(e.name||e.tool_name||""),o=e.input,s=he(o);return n==="Bash"&&ge(s)?me(r,s):{timestamp:r,type:"tool_use",toolName:n,toolInput:s}}if(t==="tool_result"){let n=!!e.is_error,o=String(e.output||e.content||"");return {timestamp:r,type:"tool_result",resultPreview:o,isError:n}}if(t==="web_search"){let n=e.action,o;if(n?.type==="search"){let s=n.queries;o=String(n.query||"")||(s?.length?s.join(", "):"")||String(e.query||"");}else o=e.query?"open: "+String(e.query):"";return o?{timestamp:r,type:"tool_use",toolName:"WebSearch",toolInput:o}:null}if(t==="file_change"){let n=e.changes;if(!Array.isArray(n)||n.length===0)return null;let o=n.map(i=>String(i.path||"")).filter(Boolean);if(o.length===0)return null;let s=o.length===1?o[0]:`${o.slice(0,2).join(", ")}${o.length>2?` (+${o.length-2})`:""}`;return {timestamp:r,type:"tool_use",toolName:"Edit",toolInput:s}}return null}function Ta(r,e){let t=e.type;if(t==="text")return {timestamp:r,type:"text",content:String(e.text||"")};if(t==="tool_use"){let n=String(e.name||""),o=e.input,s=he(o);return n==="Bash"&&ge(s)?me(r,s):{timestamp:r,type:"tool_use",toolName:n,toolInput:s}}return null}var ka;exports.codexAdapter=void 0;var mn=M(()=>{u();tt();kt();xt();sn();ke();ka=new Set(["turn.started","turn.completed","item.updated"]);exports.codexAdapter={command:"codex",meta:{displayName:"Codex",models:cn(),capabilities:{resume:true}},buildArgs(r,e,t){let{model:n,effort:o}=Er(e.model),s=e.effort??o,i=e.resumeSessionId?$o(e.mode):Lo(e.mode),a=Uo(s),d=n?["-m",n]:[],l=Ea(e.additionalArgs??[]),g=l.includes("--json")||l.includes("--experimental-json")?[]:["--json"];return e.resumeSessionId?{args:["exec","resume",...g,...i,...a,...d,...l,e.resumeSessionId,"-"],stdinMessage:r}:{args:["exec",...g,...i,...a,...d,...l],stdinMessage:r}},extractText(r){let e=r.split(`
10
- `).map(o=>o.trim()).filter(Boolean),t=[],n=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="item.completed"&&(s.item?.type==="message"||s.item?.type==="agent_message")&&typeof s.item?.text=="string"){let i=s.item.text;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(n=s.result);}catch{}return t.length>0?t[t.length-1]:n||r.trim()},parseResultMeta(r){let e=Se(r);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(r,e){let t=e??new Date().toISOString(),n=[],o;try{JSON.parse(r),o=[r];}catch{o=xa(r),o.length>1&&console.warn("[codex] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let s of o){let i;try{i=JSON.parse(s);}catch{continue}let a=i.type;if(!a||!a.startsWith("item.")&&!a.startsWith("turn.")&&!a.startsWith("thread."))continue;let d=i.item;if(d){if(a==="item.started"){n.push(...Aa(t,d));continue}if(a==="item.completed"){let l=Ra(t,d);l&&n.push(l);continue}}}return n},suppressOutputLine(r){let e=r.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let n=JSON.parse(e).type;return n?ka.has(n):!1}catch{return false}}};});function Sa(r){return r?r==="default"||r==="build"?{agent:"build",skipPermissions:false}:r==="plan"?{agent:"plan",skipPermissions:false}:Pa.has(r)?{agent:"build",skipPermissions:true}:{agent:ba.has(r)?r:"build",skipPermissions:false}:{agent:void 0,skipPermissions:false}}function Ia(r){let e=[],t=0,n=false,o=false,s=0;for(let a=0;a<r.length;a++){let d=r[a];if(o){o=false;continue}if(d==="\\"&&n){o=true;continue}if(d==='"'){n=!n;continue}if(!n){if(d==="{")t++;else if(d==="}"&&(t--,t===0)){let l=r.slice(s,a+1).trim();l&&e.push(l),s=a+1;}}}let i=r.slice(s).trim();return i&&e.push(i),e}var Ca,Pa,ba;exports.opencodeAdapter=void 0;var hn=M(()=>{u();tt();xt();Ca=new Set(["step_start","step_finish"]),Pa=new Set(["bypassPermissions","yolo","agent-full-access"]),ba=new Set(["build","plan"]);exports.opencodeAdapter={command:"opencode",meta:{displayName:"OpenCode",capabilities:{resume:true}},buildArgs(r,e,t){let n=e.additionalArgs,o=n!==void 0?[...n]:["run"];o.includes("--format")||o.push("--format","json"),e.resumeSessionId&&!o.includes("-s")&&!o.includes("--session")&&o.push("-s",e.resumeSessionId);let{agent:s,skipPermissions:i}=Sa(e.mode);o.includes("--agent")||s!==void 0&&o.push("--agent",s),t&&i&&!o.includes("--dangerously-skip-permissions")&&o.push("--dangerously-skip-permissions"),e.effort!==void 0&&!o.includes("--variant")&&o.push("--variant",e.effort),e.model&&o.push("--model",e.model);let a;return !t&&!e.env?.OPENCODE_PERMISSION&&(a={OPENCODE_PERMISSION:JSON.stringify({external_directory:"allow"})}),{args:o,stdinMessage:r,env:a}},extractText(r){let e=r.split(`
11
- `).map(o=>o.trim()).filter(Boolean),t=[],n=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="text"&&typeof s.part?.text=="string"){let i=s.part.text;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(n=s.result);}catch{}return t.length>0?t[t.length-1]:n||r.trim()},parseResultMeta(r){let e=Se(r);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(r,e){let t=e??new Date().toISOString(),n=[],o;try{JSON.parse(r),o=[r];}catch{o=Ia(r),o.length>1&&console.warn("[opencode] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let s of o){let i;try{i=JSON.parse(s);}catch{continue}let a=i.type;if(a){if(a==="text"){let l=i.part?.text;l&&n.push({timestamp:t,type:"text",content:l});continue}if(a==="tool_use"){let d=i.part;if(!d)continue;let l=String(d.tool||""),c=String(d.callID||""),g=d.state,f=String(g?.status||""),m=g?.input,w=he(m);if(n.push({timestamp:t,type:"tool_use",toolName:l,toolUseId:c,toolInput:w}),f==="completed"&&g?.output!==void 0){let _=g.output,k=typeof _=="string"?_:JSON.stringify(_);n.push({timestamp:t,type:"tool_result",toolUseId:c,resultPreview:k,isError:false});}else f==="error"&&n.push({timestamp:t,type:"tool_result",toolUseId:c,resultPreview:String(g?.error||"tool error"),isError:true});continue}}}return n},suppressOutputLine(r){let e=r.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let n=JSON.parse(e).type;return n?Ca.has(n):!1}catch{return false}}};});var yn,wn=M(()=>{u();$t();ke();yn={command:"agy",meta:{displayName:"Antigravity",models:pn(),defaultTimeoutMs:{query:12e4,execute:3e5},defaultIdleMs:0},buildArgs(r,e,t){if(e.additionalArgs!==void 0){let o=[...e.additionalArgs];return o.includes("--print")||o.unshift("--print",r),e.model&&o.push("--model",e.model),o.push("--dangerously-skip-permissions"),{args:o}}let n=["--print",r,"--dangerously-skip-permissions"];return e.model&&n.push("--model",e.model),{args:n}},extractText(r){let e=r.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(r){return {usage:null,model:null}},parseEvent(r,e){return []}};});var Go,Vo=M(()=>{u();kt();xt();Go={parseEvent(r,e){let t;try{t=JSON.parse(r);}catch{return []}let n=t.type;if(!n)return [];if(n!=="message"&&n!=="tool_use"&&n!=="tool_result")return [];let o=e??new Date().toISOString();if(n==="message"){if(t.role!=="assistant")return [];let i=t.content;return i?[{timestamp:o,type:"text",content:i}]:[]}if(n==="tool_use"){let s=String(t.tool_name||""),i=t.tool_id,a=t.parameters,d=he(a);return /^bash$/i.test(s)&&ge(d)?[me(o,d)]:[{timestamp:o,type:"tool_use",toolName:s,toolUseId:i,toolInput:d}]}if(n==="tool_result"){let s=t.tool_id,i=String(t.output||""),a=t.status!=="success";return [{timestamp:o,type:"tool_result",toolUseId:s,resultPreview:i,isError:a}]}return []}};});function Bt(r,e,t){if(t){let n=exports.BUILTIN_ADAPTERS[t];if(n?.parseEvent)return n.parseEvent(e,r);let o=Oa[t];if(o?.parseEvent)return o.parseEvent(e,r)}for(let n of Object.values(exports.BUILTIN_ADAPTERS)){let o=n.parseEvent?.(e,r)??[];if(o.length>0)return o}return []}exports.BUILTIN_ADAPTERS=void 0;var Oa,je=M(()=>{u();fn();gn();mn();hn();wn();Vo();fn();gn();mn();hn();wn();kt();exports.BUILTIN_ADAPTERS={codex:exports.codexAdapter,claude:exports.claudeAdapter,opencode:exports.opencodeAdapter,antigravity:yn,copilot:exports.copilotAdapter},Oa={gemini:Go};});var At,_n=M(()=>{u();At=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 Jo(r,e){if(r===void 0||r==="")return e;let t=parseInt(r,10);return Number.isNaN(t)?e:t}function vn(r=process.env){let e=r.CREWX_TIMEOUT_IDLE;if(e===void 0||e==="")return;let t=parseInt(e,10);if(!(!Number.isFinite(t)||t<=0))return t}function Xo(r=process.env){return {queryMs:Jo(r.CREWX_TIMEOUT_QUERY,288e5),executeMs:Jo(r.CREWX_TIMEOUT_EXECUTE,288e5),idleMs:vn(r)??6e5}}var Pr=M(()=>{u();});function Na(r){let e=r.split(`
8
+ `);for(let n of e)if(n.trim())try{let o=JSON.parse(n);if(o.type==="result"){let s=o.usage,i=s?{inputTokens:Number(s.input_tokens??0)+Number(s.cache_read_input_tokens??0),outputTokens:Number(s.output_tokens??0),cachedInputTokens:Number(s.cache_read_input_tokens??0),costUsd:Number(o.total_cost_usd??0)}:null,a=o.modelUsage,d=a?Object.keys(a)[0]??null:null;return {usage:i,model:d}}}catch{}let t=Lo(r);return t?{usage:{inputTokens:t.inputTokens,outputTokens:0,cachedInputTokens:t.cachedInputTokens,costUsd:0},model:t.model??null}:{usage:null,model:null}},parseEvent(r,e){let t;try{t=JSON.parse(r);}catch{return []}let n=t.type;if(!n)return [];if(n!=="assistant"&&n!=="user")return [];let s=t.message?.content;if(!Array.isArray(s))return [];let i=e??new Date().toISOString(),a=[];for(let d of s){let l=wa(i,d);l&&a.push(l);}return a},suppressOutputLine(r){let e=r.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let n=JSON.parse(e).type;return n?ma.has(n):!1}catch{return false}}};});var _a,va;exports.copilotAdapter=void 0;var gn=M(()=>{p();tt();Et();At();Ee();_a=new Set(["interactive","plan","autopilot"]),va=new Set(["none","low","medium","high","xhigh","max"]),exports.copilotAdapter={command:"copilot",meta:{displayName:"Copilot",models:un()},buildArgs(r,e,t){let n=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&n.push("--model",e.model),e.mode&&_a.has(e.mode)&&n.push("--mode",e.mode),e.effort&&va.has(e.effort)&&n.push("--effort",e.effort),{args:n,stdinMessage:r}},extractText(r){let e=r.split(`
9
+ `).filter(o=>o.trim()),t=[],n=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant.message"&&typeof s.data?.content=="string"){let i=s.data.content;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(n=s.result);}catch{}return t.length>0?t[t.length-1]:n||r.trim()},parseResultMeta(r){let e=Se(r);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(r,e){let t;try{t=JSON.parse(r);}catch{return []}let n=t.type;if(!n)return [];if(!n.startsWith("tool.execution")&&!n.startsWith("assistant.")&&n!=="user.message")return [];let o=t.data;if(!o)return [];let s=e??new Date().toISOString(),i=o.toolCallId;if(n==="tool.execution_start"){let a=String(o.toolName||""),d=o.arguments,l=he(d);return (a==="bash"||a==="Bash")&&ge(l)?[me(s,l)]:[{timestamp:s,type:"tool_use",toolName:a,toolInput:l,...i&&{toolUseId:i}}]}if(n==="tool.execution_complete"){let a=o.error;if(a)return [{timestamp:s,type:"tool_result",isError:true,resultPreview:String(a.message||""),...i&&{toolUseId:i}}];let d=o.result,l=String(d?.content||"");return [{timestamp:s,type:"tool_result",resultPreview:l,isError:false,...i&&{toolUseId:i}}]}if(n==="assistant.message"){let a=String(o.content||"");return a?[{timestamp:s,type:"text",content:a}]:[]}return []}};});function xa(r){let e=[],t=0,n=false,o=false,s=0;for(let a=0;a<r.length;a++){let d=r[a];if(o){o=false;continue}if(d==="\\"&&n){o=true;continue}if(d==='"'){n=!n;continue}if(!n){if(d==="{")t++;else if(d==="}"&&(t--,t===0)){let l=r.slice(s,a+1).trim();l&&e.push(l),s=a+1;}}}let i=r.slice(s).trim();return i&&e.push(i),e}function Ea(r){return r[0]==="exec"?r.slice(1):r}function Aa(r,e){let t=e.type;if(t==="command_execution"){let n=String(e.command||"");return ge(n)?[me(r,n)]:[{timestamp:r,type:"tool_use",toolName:"Bash",toolInput:n}]}return t==="web_search"?[]:t==="file_change"?[]:[]}function Ra(r,e){let t=e.type;if(t==="message"||t==="text"){let n=e.content;if(Array.isArray(n))for(let o of n){let s=Ta(r,o);if(s)return s}if(typeof e.text=="string")return {timestamp:r,type:"text",content:e.text}}if(t==="agent_message"&&typeof e.text=="string")return {timestamp:r,type:"text",content:e.text};if(t==="reasoning")return {timestamp:r,type:"text",content:String(e.text||"")};if(t==="command_execution"){let n=String(e.aggregated_output||e.output||""),o=!!e.is_error;return {timestamp:r,type:"tool_result",resultPreview:n,isError:o}}if(t==="tool_use"){let n=String(e.name||e.tool_name||""),o=e.input,s=he(o);return n==="Bash"&&ge(s)?me(r,s):{timestamp:r,type:"tool_use",toolName:n,toolInput:s}}if(t==="tool_result"){let n=!!e.is_error,o=String(e.output||e.content||"");return {timestamp:r,type:"tool_result",resultPreview:o,isError:n}}if(t==="web_search"){let n=e.action,o;if(n?.type==="search"){let s=n.queries;o=String(n.query||"")||(s?.length?s.join(", "):"")||String(e.query||"");}else o=e.query?"open: "+String(e.query):"";return o?{timestamp:r,type:"tool_use",toolName:"WebSearch",toolInput:o}:null}if(t==="file_change"){let n=e.changes;if(!Array.isArray(n)||n.length===0)return null;let o=n.map(i=>String(i.path||"")).filter(Boolean);if(o.length===0)return null;let s=o.length===1?o[0]:`${o.slice(0,2).join(", ")}${o.length>2?` (+${o.length-2})`:""}`;return {timestamp:r,type:"tool_use",toolName:"Edit",toolInput:s}}return null}function Ta(r,e){let t=e.type;if(t==="text")return {timestamp:r,type:"text",content:String(e.text||"")};if(t==="tool_use"){let n=String(e.name||""),o=e.input,s=he(o);return n==="Bash"&&ge(s)?me(r,s):{timestamp:r,type:"tool_use",toolName:n,toolInput:s}}return null}var ka;exports.codexAdapter=void 0;var mn=M(()=>{p();tt();Et();At();sn();Ee();ka=new Set(["turn.started","turn.completed","item.updated"]);exports.codexAdapter={command:"codex",meta:{displayName:"Codex",models:cn(),capabilities:{resume:true}},buildArgs(r,e,t){let{model:n,effort:o}=Er(e.model),s=e.effort??o,i=e.resumeSessionId?Uo(e.mode):$o(e.mode),a=jo(s),d=n?["-m",n]:[],l=Ea(e.additionalArgs??[]),g=l.includes("--json")||l.includes("--experimental-json")?[]:["--json"];return e.resumeSessionId?{args:["exec","resume",...g,...i,...a,...d,...l,e.resumeSessionId,"-"],stdinMessage:r}:{args:["exec",...g,...i,...a,...d,...l],stdinMessage:r}},extractText(r){let e=r.split(`
10
+ `).map(o=>o.trim()).filter(Boolean),t=[],n=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="item.completed"&&(s.item?.type==="message"||s.item?.type==="agent_message")&&typeof s.item?.text=="string"){let i=s.item.text;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(n=s.result);}catch{}return t.length>0?t[t.length-1]:n||r.trim()},parseResultMeta(r){let e=Se(r);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(r,e){let t=e??new Date().toISOString(),n=[],o;try{JSON.parse(r),o=[r];}catch{o=xa(r),o.length>1&&console.warn("[codex] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let s of o){let i;try{i=JSON.parse(s);}catch{continue}let a=i.type;if(!a||!a.startsWith("item.")&&!a.startsWith("turn.")&&!a.startsWith("thread."))continue;let d=i.item;if(d){if(a==="item.started"){n.push(...Aa(t,d));continue}if(a==="item.completed"){let l=Ra(t,d);l&&n.push(l);continue}}}return n},suppressOutputLine(r){let e=r.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let n=JSON.parse(e).type;return n?ka.has(n):!1}catch{return false}}};});function Sa(r){return r?r==="default"||r==="build"?{agent:"build",skipPermissions:false}:r==="plan"?{agent:"plan",skipPermissions:false}:Pa.has(r)?{agent:"build",skipPermissions:true}:{agent:ba.has(r)?r:"build",skipPermissions:false}:{agent:void 0,skipPermissions:false}}function Ia(r){let e=[],t=0,n=false,o=false,s=0;for(let a=0;a<r.length;a++){let d=r[a];if(o){o=false;continue}if(d==="\\"&&n){o=true;continue}if(d==='"'){n=!n;continue}if(!n){if(d==="{")t++;else if(d==="}"&&(t--,t===0)){let l=r.slice(s,a+1).trim();l&&e.push(l),s=a+1;}}}let i=r.slice(s).trim();return i&&e.push(i),e}var Ca,Pa,ba;exports.opencodeAdapter=void 0;var hn=M(()=>{p();tt();At();Ca=new Set(["step_start","step_finish"]),Pa=new Set(["bypassPermissions","yolo","agent-full-access"]),ba=new Set(["build","plan"]);exports.opencodeAdapter={command:"opencode",meta:{displayName:"OpenCode",capabilities:{resume:true}},buildArgs(r,e,t){let n=e.additionalArgs,o=n!==void 0?[...n]:["run"];o.includes("--format")||o.push("--format","json"),e.resumeSessionId&&!o.includes("-s")&&!o.includes("--session")&&o.push("-s",e.resumeSessionId);let{agent:s,skipPermissions:i}=Sa(e.mode);o.includes("--agent")||s!==void 0&&o.push("--agent",s),t&&i&&!o.includes("--dangerously-skip-permissions")&&o.push("--dangerously-skip-permissions"),e.effort!==void 0&&!o.includes("--variant")&&o.push("--variant",e.effort),e.model&&o.push("--model",e.model);let a;return !t&&!e.env?.OPENCODE_PERMISSION&&(a={OPENCODE_PERMISSION:JSON.stringify({external_directory:"allow"})}),{args:o,stdinMessage:r,env:a}},extractText(r){let e=r.split(`
11
+ `).map(o=>o.trim()).filter(Boolean),t=[],n=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="text"&&typeof s.part?.text=="string"){let i=s.part.text;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(n=s.result);}catch{}return t.length>0?t[t.length-1]:n||r.trim()},parseResultMeta(r){let e=Se(r);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(r,e){let t=e??new Date().toISOString(),n=[],o;try{JSON.parse(r),o=[r];}catch{o=Ia(r),o.length>1&&console.warn("[opencode] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let s of o){let i;try{i=JSON.parse(s);}catch{continue}let a=i.type;if(a){if(a==="text"){let l=i.part?.text;l&&n.push({timestamp:t,type:"text",content:l});continue}if(a==="tool_use"){let d=i.part;if(!d)continue;let l=String(d.tool||""),c=String(d.callID||""),g=d.state,f=String(g?.status||""),m=g?.input,w=he(m);if(n.push({timestamp:t,type:"tool_use",toolName:l,toolUseId:c,toolInput:w}),f==="completed"&&g?.output!==void 0){let _=g.output,k=typeof _=="string"?_:JSON.stringify(_);n.push({timestamp:t,type:"tool_result",toolUseId:c,resultPreview:k,isError:false});}else f==="error"&&n.push({timestamp:t,type:"tool_result",toolUseId:c,resultPreview:String(g?.error||"tool error"),isError:true});continue}}}return n},suppressOutputLine(r){let e=r.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let n=JSON.parse(e).type;return n?Ca.has(n):!1}catch{return false}}};});var yn,wn=M(()=>{p();$t();Ee();yn={command:"agy",meta:{displayName:"Antigravity",models:pn(),defaultTimeoutMs:{query:12e4,execute:3e5},defaultIdleMs:0},buildArgs(r,e,t){if(e.additionalArgs!==void 0){let o=[...e.additionalArgs];return o.includes("--print")||o.unshift("--print",r),e.model&&o.push("--model",e.model),o.push("--dangerously-skip-permissions"),{args:o}}let n=["--print",r,"--dangerously-skip-permissions"];return e.model&&n.push("--model",e.model),{args:n}},extractText(r){let e=r.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(r){return {usage:null,model:null}},parseEvent(r,e){return []}};});var Vo,Jo=M(()=>{p();Et();At();Vo={parseEvent(r,e){let t;try{t=JSON.parse(r);}catch{return []}let n=t.type;if(!n)return [];if(n!=="message"&&n!=="tool_use"&&n!=="tool_result")return [];let o=e??new Date().toISOString();if(n==="message"){if(t.role!=="assistant")return [];let i=t.content;return i?[{timestamp:o,type:"text",content:i}]:[]}if(n==="tool_use"){let s=String(t.tool_name||""),i=t.tool_id,a=t.parameters,d=he(a);return /^bash$/i.test(s)&&ge(d)?[me(o,d)]:[{timestamp:o,type:"tool_use",toolName:s,toolUseId:i,toolInput:d}]}if(n==="tool_result"){let s=t.tool_id,i=String(t.output||""),a=t.status!=="success";return [{timestamp:o,type:"tool_result",toolUseId:s,resultPreview:i,isError:a}]}return []}};});function Bt(r,e,t){if(t){let n=exports.BUILTIN_ADAPTERS[t];if(n?.parseEvent)return n.parseEvent(e,r);let o=Oa[t];if(o?.parseEvent)return o.parseEvent(e,r)}for(let n of Object.values(exports.BUILTIN_ADAPTERS)){let o=n.parseEvent?.(e,r)??[];if(o.length>0)return o}return []}exports.BUILTIN_ADAPTERS=void 0;var Oa,Fe=M(()=>{p();fn();gn();mn();hn();wn();Jo();fn();gn();mn();hn();wn();Et();exports.BUILTIN_ADAPTERS={codex:exports.codexAdapter,claude:exports.claudeAdapter,opencode:exports.opencodeAdapter,antigravity:yn,copilot:exports.copilotAdapter},Oa={gemini:Vo};});var Tt,_n=M(()=>{p();Tt=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 Xo(r,e){if(r===void 0||r==="")return e;let t=parseInt(r,10);return Number.isNaN(t)?e:t}function vn(r=process.env){let e=r.CREWX_TIMEOUT_IDLE;if(e===void 0||e==="")return;let t=parseInt(e,10);if(!(!Number.isFinite(t)||t<=0))return t}function Yo(r=process.env){return {queryMs:Xo(r.CREWX_TIMEOUT_QUERY,288e5),executeMs:Xo(r.CREWX_TIMEOUT_EXECUTE,288e5),idleMs:vn(r)??6e5}}var Pr=M(()=>{p();});function Na(r){let e=r.split(`
12
12
  `).filter(d=>d.trim()),t=[],n=[],o=[],s=[],i=[],a=null;for(let d of e)try{let l=JSON.parse(d);if(l.type==="assistant"&&Array.isArray(l.message?.content))for(let c of l.message.content)c.type==="text"&&typeof c.text=="string"&&c.text.trim()&&t.push(c.text.trim());if(l.type==="message"&&l.role==="assistant"&&l.delta===!0&&typeof l.content=="string"&&n.push(l.content),l.type==="assistant.message"&&typeof l.data?.content=="string"){let c=l.data.content;c.trim()&&o.push(c.trim());}if(l.type==="item.completed"&&(l.item?.type==="message"||l.item?.type==="agent_message")&&typeof l.item?.text=="string"){let c=l.item.text;c.trim()&&s.push(c.trim());}if(l.type==="text"&&typeof l.part?.text=="string"){let c=l.part.text;c.trim()&&i.push(c.trim());}l.type==="result"&&typeof l.result=="string"&&(a=l.result);}catch{}return t.length>0?t.join(`
13
13
 
14
14
  `):n.length>0?n.join(""):o.length>0?o.join(`
15
15
 
16
16
  `):s.length>0?s.join(`
17
17
 
18
- `):i.length>0?i.join(""):a||r.trim()}function Da(r){let e=Se(r);return e?{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0}:null}function La(r,e,t=process.platform){return r==="copilot"&&t==="win32"&&e instanceof exports.ProviderError&&e.message.includes('CLI command "copilot" not found')}function Qo(r,e,t,n,o,s,i){return new Promise((a,d)=>{let l=o?.timeoutMs??288e5,c=o?.idleMs??6e5,g={...process.env,...o?.env??{}},f=o?.cwd??process.cwd(),m=Ze({command:r,env:g,cwd:f,allowShellFallback:true}),w=et(m,e),_=child_process.spawn(w.command,w.argv,{env:g,cwd:o?.cwd,stdio:["pipe","pipe","pipe"],shell:w.shell??false,windowsHide:w.windowsHide,detached:process.platform!=="win32"});_.stdin.on("error",U=>{U.code!=="EPIPE"&&o?.onOutput?.(`stdin error: ${U.message}`,"stderr");}),s!==void 0&&_.stdin.write(s),_.stdin.end(),_.pid!==void 0&&o?.onPid?.(_.pid);let k=false,y=false,v=U=>{if(_.pid!==void 0)try{process.platform==="win32"?_.kill(U):process.kill(-_.pid,U);}catch{}},E=()=>{v("SIGKILL");},C=setTimeout(()=>{k||(y=true,V?.stop(),v("SIGTERM"),setTimeout(E,qt).unref());},l);C.unref();let V=c>0?new At({timeoutMs:c,onIdle:()=>{if(k)return;k=true,clearTimeout(C),v("SIGTERM"),setTimeout(E,qt).unref();let U=Math.round(c/6e4);Z(new rt(`${t} produced no output for ${U}m (idle timeout). Process killed. The CLI may be waiting on interactive input or stuck \u2014 check the prompt or retry.`,t));}}):null;V?.start();let $=new string_decoder.StringDecoder("utf8"),I=new string_decoder.StringDecoder("utf8"),N="",le="",Y="",D="",Z=U=>{U instanceof Error&&(U.stdout=N),d(U);};_.stdout.on("data",U=>{V?.refresh();let ne=$.write(U);N+=ne,Y+=ne;let B=Y.split(`
19
- `);Y=B.pop()??"";for(let W of B)if(W.trim()&&(o?.onOutput?.(W,"stdout"),i?.extractFailure)){let Q=i.extractFailure(W);if(Q){k=true,clearTimeout(C),V?.stop(),v("SIGTERM"),setTimeout(E,qt).unref(),Z(Q);return}}}),_.stderr.on("data",U=>{V?.refresh();let ne=I.write(U);le+=ne,D+=ne;let B=D.split(`
20
- `);D=B.pop()??"";for(let W of B)W.trim()&&o?.onOutput?.(W,"stderr");}),_.on("error",U=>{k=true,clearTimeout(C),V?.stop(),U.code==="ENOENT"?Z(new exports.ProviderError(`CLI command "${r}" not found. Is ${t} installed?`,t)):Z(new exports.ProviderError(`Spawn error: ${U.message}`,t));}),_.on("close",(U,ne)=>{if(k)return;k=true,clearTimeout(C),V?.stop();let B=$.end(),W=I.end();B&&(N+=B,Y+=B),W&&(le+=W,D+=W),Y.trim()&&o?.onOutput?.(Y,"stdout"),D.trim()&&o?.onOutput?.(D,"stderr");let Q=U??0;if(o?.onExitCode?.(Q),y)return Z(new nt(`Total runtime exceeded ${l}ms; process killed.`,t));if(ne)return Z(new exports.ProviderError(`Process terminated by signal ${ne}`,t,{code:"PROVIDER_CRASHED",kind:"permanent"}));if(Q!==0){if(i?.interpretExit){let q=i.interpretExit(Q,le);if(q){Z(q);return}}Z(new exports.ProviderError(`Process exited with code ${Q}: ${le.slice(0,500)}`,t));return}let J;try{J=i?i.extractText(N):Na(N);}catch(q){Z(q instanceof Error?q:new exports.ProviderError(String(q),t));return}a({stdout:N,parsed:J});});})}function Ie(r,e){Zo.set(r,e);}function Oe(r,e){let t=r.split("/");if(t.length!==2)throw new exports.ProviderError(`Invalid provider format: "${r}". Expected namespace/id (e.g., cli/claude)`,r);let[n,o]=t,s=Zo.get(n);if(s)return s(o,r);if(n==="cli"){let i=exports.BUILTIN_ADAPTERS[o];if(!i)throw new exports.ProviderError(`Unknown CLI provider id: "${o}". Supported: ${Object.keys(exports.BUILTIN_ADAPTERS).join(", ")}`,r);return new kn(o,i,r,e)}throw new exports.ProviderError(`Unsupported provider namespace: "${n}". Register a factory with registerProviderFactory('${n}', factory).`,r)}function es(r,e,t){if(!r||!e)return r??{};let n=e({providerStr:t.providerStr,providerId:t.providerId,mode:r.mode});return n.length===0?r:{...r,additionalArgs:[...r.additionalArgs??[],...n]}}var qt;exports.ClientToolCallRequiredError=void 0;var Zo,kn,Ee=M(()=>{u();vt();tt();je();$t();_n();Pr();$t();qt=2e3;exports.ClientToolCallRequiredError=class extends Error{constructor(t,n){super(`Client tool call required: ${t.toolName}`);this.toolCall=t;this.continuationState=n;}toolCall;continuationState;name="ClientToolCallRequiredError"},Zo=new Map;kn=class{constructor(e,t,n,o){this.providerId=e;this.adapter=t;this.providerStr=n;this.additionalArgsProvider=o;}providerId;adapter;providerStr;additionalArgsProvider;async execute(e,t){let n=this.composeMessage(e,t),o=this.applyAdditionalArgs(t),{args:s,stdinMessage:i,env:a}=this.adapter.buildArgs(n,o,true);o.onCommand?.(`${this.adapter.command} ${s.join(" ")}`);let d=a?{...o,env:{...o.env??{},...a}}:o,{stdout:l,parsed:c}=await this.runProcess(s,d,i);return this.handleResultMeta(l,o),c}async query(e,t){let n=this.composeMessage(e,t),o=this.applyAdditionalArgs(t),{args:s,stdinMessage:i,env:a}=this.adapter.buildArgs(n,o,false);o.onCommand?.(`${this.adapter.command} ${s.join(" ")}`);let d=a?{...o,env:{...o.env??{},...a}}:o,{stdout:l,parsed:c}=await this.runProcess(s,d,i);return this.handleResultMeta(l,o),c}applyAdditionalArgs(e){return es(e,this.additionalArgsProvider,{providerStr:this.providerStr,providerId:this.providerId})}composeMessage(e,t){return t?.systemPrompt?`${t.systemPrompt}
18
+ `):i.length>0?i.join(""):a||r.trim()}function Da(r){let e=Se(r);return e?{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0}:null}function La(r,e,t=process.platform){return r==="copilot"&&t==="win32"&&e instanceof exports.ProviderError&&e.message.includes('CLI command "copilot" not found')}function Zo(r,e,t,n,o,s,i){return new Promise((a,d)=>{let l=o?.timeoutMs??288e5,c=o?.idleMs??6e5,g={...process.env,...o?.env??{}},f=o?.cwd??process.cwd(),m=Ze({command:r,env:g,cwd:f,allowShellFallback:true}),w=et(m,e),_=child_process.spawn(w.command,w.argv,{env:g,cwd:o?.cwd,stdio:["pipe","pipe","pipe"],shell:w.shell??false,windowsHide:w.windowsHide,detached:process.platform!=="win32"});_.stdin.on("error",U=>{U.code!=="EPIPE"&&o?.onOutput?.(`stdin error: ${U.message}`,"stderr");}),s!==void 0&&_.stdin.write(s),_.stdin.end(),_.pid!==void 0&&o?.onPid?.(_.pid);let k=false,y=false,v=U=>{if(_.pid!==void 0)try{process.platform==="win32"?_.kill(U):process.kill(-_.pid,U);}catch{}},E=()=>{v("SIGKILL");},C=setTimeout(()=>{k||(y=true,V?.stop(),v("SIGTERM"),setTimeout(E,qt).unref());},l);C.unref();let V=c>0?new Tt({timeoutMs:c,onIdle:()=>{if(k)return;k=true,clearTimeout(C),v("SIGTERM"),setTimeout(E,qt).unref();let U=Math.round(c/6e4);Z(new rt(`${t} produced no output for ${U}m (idle timeout). Process killed. The CLI may be waiting on interactive input or stuck \u2014 check the prompt or retry.`,t));}}):null;V?.start();let $=new string_decoder.StringDecoder("utf8"),I=new string_decoder.StringDecoder("utf8"),N="",le="",Y="",D="",Z=U=>{U instanceof Error&&(U.stdout=N),d(U);};_.stdout.on("data",U=>{V?.refresh();let ne=$.write(U);N+=ne,Y+=ne;let B=Y.split(`
19
+ `);Y=B.pop()??"";for(let F of B)if(F.trim()&&(o?.onOutput?.(F,"stdout"),i?.extractFailure)){let Q=i.extractFailure(F);if(Q){k=true,clearTimeout(C),V?.stop(),v("SIGTERM"),setTimeout(E,qt).unref(),Z(Q);return}}}),_.stderr.on("data",U=>{V?.refresh();let ne=I.write(U);le+=ne,D+=ne;let B=D.split(`
20
+ `);D=B.pop()??"";for(let F of B)F.trim()&&o?.onOutput?.(F,"stderr");}),_.on("error",U=>{k=true,clearTimeout(C),V?.stop(),U.code==="ENOENT"?Z(new exports.ProviderError(`CLI command "${r}" not found. Is ${t} installed?`,t)):Z(new exports.ProviderError(`Spawn error: ${U.message}`,t));}),_.on("close",(U,ne)=>{if(k)return;k=true,clearTimeout(C),V?.stop();let B=$.end(),F=I.end();B&&(N+=B,Y+=B),F&&(le+=F,D+=F),Y.trim()&&o?.onOutput?.(Y,"stdout"),D.trim()&&o?.onOutput?.(D,"stderr");let Q=U??0;if(o?.onExitCode?.(Q),y)return Z(new nt(`Total runtime exceeded ${l}ms; process killed.`,t));if(ne)return Z(new exports.ProviderError(`Process terminated by signal ${ne}`,t,{code:"PROVIDER_CRASHED",kind:"permanent"}));if(Q!==0){if(i?.interpretExit){let q=i.interpretExit(Q,le);if(q){Z(q);return}}Z(new exports.ProviderError(`Process exited with code ${Q}: ${le.slice(0,500)}`,t));return}let J;try{J=i?i.extractText(N):Na(N);}catch(q){Z(q instanceof Error?q:new exports.ProviderError(String(q),t));return}a({stdout:N,parsed:J});});})}function Ie(r,e){es.set(r,e);}function Oe(r,e){let t=r.split("/");if(t.length!==2)throw new exports.ProviderError(`Invalid provider format: "${r}". Expected namespace/id (e.g., cli/claude)`,r);let[n,o]=t,s=es.get(n);if(s)return s(o,r);if(n==="cli"){let i=exports.BUILTIN_ADAPTERS[o];if(!i)throw new exports.ProviderError(`Unknown CLI provider id: "${o}". Supported: ${Object.keys(exports.BUILTIN_ADAPTERS).join(", ")}`,r);return new kn(o,i,r,e)}throw new exports.ProviderError(`Unsupported provider namespace: "${n}". Register a factory with registerProviderFactory('${n}', factory).`,r)}function ts(r,e,t){if(!r||!e)return r??{};let n=e({providerStr:t.providerStr,providerId:t.providerId,mode:r.mode});return n.length===0?r:{...r,additionalArgs:[...r.additionalArgs??[],...n]}}var qt;exports.ClientToolCallRequiredError=void 0;var es,kn,Re=M(()=>{p();xt();tt();Fe();$t();_n();Pr();$t();qt=2e3;exports.ClientToolCallRequiredError=class extends Error{constructor(t,n){super(`Client tool call required: ${t.toolName}`);this.toolCall=t;this.continuationState=n;}toolCall;continuationState;name="ClientToolCallRequiredError"},es=new Map;kn=class{constructor(e,t,n,o){this.providerId=e;this.adapter=t;this.providerStr=n;this.additionalArgsProvider=o;}providerId;adapter;providerStr;additionalArgsProvider;async execute(e,t){let n=this.composeMessage(e,t),o=this.applyAdditionalArgs(t),{args:s,stdinMessage:i,env:a}=this.adapter.buildArgs(n,o,true);o.onCommand?.(`${this.adapter.command} ${s.join(" ")}`);let d=a?{...o,env:{...o.env??{},...a}}:o,{stdout:l,parsed:c}=await this.runProcess(s,d,i);return this.handleResultMeta(l,o),c}async query(e,t){let n=this.composeMessage(e,t),o=this.applyAdditionalArgs(t),{args:s,stdinMessage:i,env:a}=this.adapter.buildArgs(n,o,false);o.onCommand?.(`${this.adapter.command} ${s.join(" ")}`);let d=a?{...o,env:{...o.env??{},...a}}:o,{stdout:l,parsed:c}=await this.runProcess(s,d,i);return this.handleResultMeta(l,o),c}applyAdditionalArgs(e){return ts(e,this.additionalArgsProvider,{providerStr:this.providerStr,providerId:this.providerId})}composeMessage(e,t){return t?.systemPrompt?`${t.systemPrompt}
21
21
 
22
22
  ---
23
23
 
24
- ${e}`:e}async runProcess(e,t,n){try{return await Qo(this.adapter.command,e,this.providerStr,this.providerId,t,n,this.adapter)}catch(o){if(La(this.providerId,o)){let s=e[0]==="copilot"?e:["copilot",...e];try{return await Qo("gh",s,this.providerStr,this.providerId,t,n,this.adapter)}catch(i){throw this.recoverPartialUsage(i,t),i}}throw this.recoverPartialUsage(o,t),o}}recoverPartialUsage(e,t){let n=e instanceof Error?e.stdout:void 0;typeof n=="string"&&n.length>0&&this.handleResultMeta(n,t);}handleResultMeta(e,t){if(!this.adapter.parseResultMeta){let i=Da(e);i&&t?.onUsage&&t.onUsage(i);return}let{usage:n,model:o}=this.adapter.parseResultMeta(e);n&&t?.onUsage&&t.onUsage(n);let s=o??(this.providerId==="opencode"?t?.model??null:null);s&&t?.onModel&&t.onModel(s);}};});function Un(r){let e=r.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 we(r,e){try{let t=JSON.parse(r);if(t!=null&&typeof t=="object"&&typeof t.type=="string"&&Ad.has(t.type)){let n=e??new Date().toISOString();return [{...t,timestamp:t.timestamp||n}]}}catch{}return []}var Ad,Fe=M(()=>{u();Ad=new Set(["text","tool_use","tool_result","error","running_instruction","agent_call"]);});var Ls,$s;exports.VercelProviderRuntime=void 0;var zn=M(()=>{u();Ee();Ls=10,$s=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,n){let{generateText:o,tool:s}=await import('ai'),i=this.convertTools(n?.tools??[],s),a=this.createModel(n?.model),d=Math.min(n?.maxSteps??this.config.maxSteps??Ls,$s);try{let l=0,c=await o({model:a,system:n?.systemPrompt??void 0,prompt:e,tools:i,maxSteps:d,...this.config.temperature!==void 0&&{temperature:this.config.temperature},...this.config.maxTokens!==void 0&&{maxTokens:this.config.maxTokens},onStepFinish:f=>{if(l++,!!n?.onOutput){if(f.toolCalls&&f.toolCalls.length>0)for(let m of f.toolCalls)n.onOutput(JSON.stringify({type:"assistant",message:{content:[{type:"tool_use",id:m.toolCallId,name:m.toolName,input:m.args}]}}),"stdout");if(f.toolResults&&f.toolResults.length>0)for(let m of f.toolResults){let w=typeof m.result=="string"?m.result:JSON.stringify(m.result);n.onOutput(JSON.stringify({type:"user",message:{content:[{type:"tool_result",tool_use_id:m.toolCallId,output:w,is_error:!1}]}}),"stdout");}}}}),g=new Set((n?.tools??[]).filter(f=>!f.execute).map(f=>f.name));if(c.finishReason==="tool-calls"&&Array.isArray(c.toolCalls)&&c.toolCalls.length>0){let f=c.toolCalls.filter(m=>g.has(m.toolName));if(f.length>0){let m=f[0];throw new exports.ClientToolCallRequiredError({toolCallId:m.toolCallId,toolName:m.toolName,args:m.args},{userMessage:e,responseMessages:c.response?.messages??[],toolDefinitions:n?.tools??[],maxSteps:d,systemPrompt:n?.systemPrompt,modelOverride:n?.model})}}if(n?.onUsage&&c.usage){let f={inputTokens:c.usage.promptTokens??0,outputTokens:c.usage.completionTokens??0,cachedInputTokens:0,costUsd:0};n.onUsage(f);}return n?.onModel&&n.onModel(n.model??this.config.model),c.text??""}catch(l){throw l instanceof exports.ClientToolCallRequiredError?l:l.status===401?new exports.ProviderError(`Authentication failed for ${this.config.provider}. Check your API key.`,this.config.provider):l.status===429?new exports.ProviderError(`Rate limit exceeded for ${this.config.provider}.`,this.config.provider):new exports.ProviderError(`Provider error: ${l.message}`,this.config.provider)}}async continueWithToolResults(e,t,n){let{generateText:o,tool:s}=await import('ai'),i=this.convertTools(e.toolDefinitions,s),a=this.createModel(e.modelOverride),d=Math.min(e.maxSteps??this.config.maxSteps??Ls,$s),l=[{role:"user",content:e.userMessage},...e.responseMessages,{role:"tool",content:t.map(c=>({type:"tool-result",toolCallId:c.toolCallId,toolName:c.toolName,result:typeof c.result=="string"?c.result:JSON.stringify(c.result)}))}];try{let c=await o({model:a,system:e.systemPrompt??void 0,messages:l,tools:i,maxSteps:d,...this.config.temperature!==void 0&&{temperature:this.config.temperature},...this.config.maxTokens!==void 0&&{maxTokens:this.config.maxTokens}}),g=new Set(e.toolDefinitions.filter(f=>!f.execute).map(f=>f.name));if(c.finishReason==="tool-calls"&&Array.isArray(c.toolCalls)&&c.toolCalls.length>0){let f=c.toolCalls.filter(m=>g.has(m.toolName));if(f.length>0){let m=f[0];throw new exports.ClientToolCallRequiredError({toolCallId:m.toolCallId,toolName:m.toolName,args:m.args},{userMessage:e.userMessage,responseMessages:[...e.responseMessages,{role:"tool",content:t.map(w=>({type:"tool-result",toolCallId:w.toolCallId,toolName:w.toolName,result:typeof w.result=="string"?w.result:JSON.stringify(w.result)}))},...c.response?.messages??[]],toolDefinitions:e.toolDefinitions,maxSteps:e.maxSteps,systemPrompt:e.systemPrompt,modelOverride:e.modelOverride})}}return n?.onUsage&&c.usage&&n.onUsage({inputTokens:c.usage.promptTokens??0,outputTokens:c.usage.completionTokens??0,cachedInputTokens:0,costUsd:0}),n?.onModel&&n.onModel(e.modelOverride??this.config.model),c.text??""}catch(c){throw c instanceof exports.ClientToolCallRequiredError?c:new exports.ProviderError(`Provider error: ${c.message}`,this.config.provider)}}convertTools(e,t){let{z:n}=oe("zod"),o={};for(let s of e){let i=this.jsonSchemaToZod(s.parameters??{},n);s.execute?o[s.name]=t({description:s.description,parameters:i,execute:async a=>s.execute(a)}):o[s.name]=t({description:s.description,parameters:i});}return o}jsonSchemaToZod(e,t){if(!e||!e.properties)return t.object({});let n={},o=e.properties,s=e.required??[];for(let[i,a]of Object.entries(o)){let d;switch(a.type){case "string":d=t.string();break;case "number":d=t.number();break;case "integer":d=t.number().int();break;case "boolean":d=t.boolean();break;case "array":d=t.array(t.any());break;default:d=t.any();}a.description&&(d=d.describe(a.description)),s.includes(i)||(d=d.optional()),n[i]=d;}return t.object(n)}createModel(e){let{provider:t,apiKey:n,baseURL:o}=this.config,s=e||this.config.model;switch(t){case "api/openrouter":{let{createOpenAI:i}=oe("@ai-sdk/openai");return i({apiKey:n||process.env.OPENROUTER_API_KEY,baseURL:o||"https://openrouter.ai/api/v1"})(s)}case "api/openai":{let{createOpenAI:i}=oe("@ai-sdk/openai");return i({apiKey:n||process.env.OPENAI_API_KEY,...o&&{baseURL:o}})(s)}case "api/anthropic":{let{createAnthropic:i}=oe("@ai-sdk/anthropic");return i({apiKey:n||process.env.ANTHROPIC_API_KEY,...o&&{baseURL:o}})(s)}case "api/google":{let{createGoogleGenerativeAI:i}=oe("@ai-sdk/google");return i({apiKey:n||process.env.GOOGLE_API_KEY})(s)}default:throw new exports.ProviderError(`Unsupported API provider: ${t}`,t)}}};});var js={};yr(js,{registerApiProviders:()=>Us});function Us(r){Ie("api",(e,t)=>{let n=r?.apiKeys?.[e];return new exports.VercelProviderRuntime({provider:t,model:"",apiKey:n,maxSteps:r?.defaults?.maxSteps,temperature:r?.defaults?.temperature})});}var Kn=M(()=>{u();Ee();zn();});exports.AcpProtocolError=void 0;var Gn=M(()=>{u();exports.AcpProtocolError=class extends Error{constructor(t,n,o){super(t);this.code=n;this.data=o;}code;data;name="AcpProtocolError"};});var bl,Sl,Fs,Ws,Il;exports.AcpConnection=void 0;var Hr=M(()=>{u();vt();Gn();Ee();_n();Pr();bl=-32e3,Sl=2e3,Fs=3e4,Ws=1e4,Il=8*36e5,exports.AcpConnection=class{constructor(e){this.options=e;}options;proc=null;sdkConnection=null;disposed=false;stderrBuffer="";collectedStderr="";pendingUpdateCallback=null;idleWatchdog=null;idleReject=null;idlePromise=null;authMethods=[];_initResponse=null;get initResponse(){return this._initResponse}async connect(e){if(this.disposed)throw new exports.ProviderError("AcpConnection has been disposed","acp");let t=this.options.spawn,n=process.platform==="win32"&&(t.shellOnWindows??true),o={...process.env,...this.options.env??{}},s=this.options.cwd??process.cwd(),i;try{let y=Ze({command:t.command,env:o,cwd:s,allowShellFallback:n});i=et(y,t.args);}catch(y){throw new exports.ProviderError(y instanceof Error?y.message:String(y),"acp")}let a=child_process.spawn(i.command,i.argv,{stdio:["pipe","pipe","pipe"],env:o,cwd:this.options.cwd,shell:i.shell??false,windowsHide:true,detached:process.platform!=="win32"});a.pid!==void 0&&this.options.onPid?.(a.pid),a.stderr.on("data",y=>{let v=y.toString();this.collectedStderr+=v,this.stderrBuffer+=v;let E=this.stderrBuffer.split(`
25
- `);this.stderrBuffer=E.pop()??"";for(let P of E)P.trim()&&this.options.onStderr?.(P);}),this.proc=a;let d=this.options.idleMs??6e5;d>0&&(this.idlePromise=new Promise((y,v)=>{this.idleReject=v;}),this.idlePromise.catch(()=>{}),this.idleWatchdog=new At({timeoutMs:d,onIdle:()=>{let y=Math.round(d/6e4),v=new rt(`acp produced no output for ${y}m (idle timeout). Process killed. The CLI may be waiting on interactive input or stuck \u2014 check the prompt or retry.`,"acp");this.idleReject?.(v),this.dispose();}}),this.idleWatchdog.start()),a.stdin.on("error",y=>{y.code!=="EPIPE"&&this.options.onStderr?.(`ACP stdin error: ${y.message}`);});let l=new WritableStream({write:y=>new Promise((v,E)=>{a.stdin.write(y,P=>{P?E(P):v();});}),close:()=>{a.stdin.end();}}),c=new ReadableStream({start:y=>{a.stdout.on("data",v=>{this.idleWatchdog?.refresh(),y.enqueue(new Uint8Array(v));}),a.stdout.on("end",()=>{y.close();}),a.stdout.on("error",v=>{y.error(v);});}}),g=sdk.ndJsonStream(l,c),f=this,m=new sdk.ClientSideConnection(y=>({requestPermission:async v=>{if(f.options.configOptions?.allow_all!==void 0){let E=v.options;if(Array.isArray(E)&&E.length>0)return {outcome:{outcome:"selected",optionId:(E.find(C=>C.kind==="allow_once")??E.find(C=>C.kind?.startsWith("allow_"))??E[0]).optionId}}}return {outcome:{outcome:"cancelled"}}},sessionUpdate:async v=>{f.pendingUpdateCallback?.(v);}}),g);this.sdkConnection=m;let w=new Promise((y,v)=>{a.on("error",E=>{if(E.code==="ENOENT"){let C=t.command==="npx"&&t.args.length>0?`@agentclientprotocol/${t.args[0]}`:t.command;v(new exports.ProviderError(`ACP command "${t.command}" not found. Is the ACP adapter installed? Try: npm install -g ${C}`,"acp"));}else v(new exports.ProviderError(`ACP spawn error: ${E.message}`,"acp"));});}),_=this.doInitialize(m,e),k=new Promise((y,v)=>{setTimeout(()=>{v(new exports.AcpProtocolError(`ACP connect timeout after ${Fs}ms. The ACP adapter may not be installed or may require interactive setup.`));},Fs).unref();});await Promise.race([_,k,w]);}async doInitialize(e,t){let n=await e.initialize({protocolVersion:1,clientCapabilities:{auth:{}},clientInfo:{name:t?.name??"crewx-sdk",version:t?.version??"0.8.4"}});this._initResponse=n,this.authMethods=n.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),n=new Promise((o,s)=>{setTimeout(()=>{s(new exports.AcpProtocolError(`ACP session/new timeout after ${Ws}ms`));},Ws).unref();});return Promise.race([t,n])}isAuthError(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code===bl}async tryAuthenticate(){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected.","acp");let e=this.authMethods.find(n=>n.type==="env_var"&&this.hasEnvVarsFor(n));if(e){await this.sdkConnection.authenticate({methodId:e.id});return}let t=this.authMethods.map(n=>`${n.id} (${n.type??"agent"})`).join(", ");if(this.authMethods.length>0){let n=this.authMethods.filter(o=>o.type==="env_var");if(n.length>0){let o=n.flatMap(s=>(s.vars??[]).filter(i=>!i.optional&&!process.env[i.name]).map(i=>i.name));throw new exports.AcpProtocolError(`ACP authentication required. Missing environment variables: ${o.join(", ")}. Set them in your shell or crewx.yaml env block.`)}throw new exports.AcpProtocolError(`ACP authentication required but no supported method found. Available methods: ${t}. CrewX currently supports env_var authentication only.`)}throw new exports.AcpProtocolError("ACP agent requires authentication but advertised no auth methods.")}hasEnvVarsFor(e){return !e.vars||e.vars.length===0?true:e.vars.filter(t=>!t.optional).every(t=>!!process.env[t.name])}async setModel(e,t){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.unstable_setSessionModel({sessionId:e,modelId:t});}async setMode(e,t){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.setSessionMode({sessionId:e,modeId:t});}async setConfigOption(e,t,n){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.setSessionConfigOption({sessionId:e,configId:t,value:n});}async prompt(e,t,n,o){if(!this.sdkConnection||!this.proc)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");this.pendingUpdateCallback=n??null;let s=this.sdkConnection,i=this.proc,a=o??Il,d=false,l=s.prompt({sessionId:e,prompt:t}).finally(()=>{d=true;}),c=new Promise((m,w)=>{setTimeout(()=>{s.cancel({sessionId:e}).catch(()=>{}),w(new nt(`ACP prompt timeout after ${a}ms`,"acp"));},a).unref();}),g=new Promise((m,w)=>{let _=(E,P,C)=>{if(d)return;let V=P!=null?`signal=${P}`:`code=${String(E)}`;w(new exports.ProviderError(`ACP process terminated unexpectedly (${V}) [${C}]: ${this.collectedStderr.slice(-500)}`,"acp"));},k=(E,P)=>_(E,P,"exit"),y=(E,P)=>_(E,P,"close");i.once("exit",k),i.once("close",y);let v=()=>{i.off("exit",k),i.off("close",y);};l.then(v,v);}),f=[l,c,g];this.idlePromise&&f.push(this.idlePromise);try{return await Promise.race(f)}finally{this.pendingUpdateCallback=null;}}async dispose(){if(this.disposed)return;this.disposed=true,this.idleWatchdog?.stop(),this.pendingUpdateCallback=null,this.sdkConnection=null;let e=this.proc;if(!e)return;this.proc=null,this.stderrBuffer.trim()&&(this.options.onStderr?.(this.stderrBuffer),this.stderrBuffer="");let t=e.pid,n=o=>{if(t!==void 0&&process.platform!=="win32")try{process.kill(-t,o);}catch{}else try{e.kill(o);}catch{}};await new Promise(o=>{let s=()=>{clearTimeout(i),o();};e.once("close",s),e.once("error",s);try{n("SIGTERM");}catch{s();return}let i=setTimeout(()=>{n("SIGKILL");},Sl);});}get isConnected(){return !this.disposed&&this.sdkConnection!==null&&this.proc!==null}};});function Hs(r,e){if(r!=null&&typeof r=="object"){let t=r;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 Ol;exports.AcpProviderRuntime=void 0;var Vn=M(()=>{u();Fe();Hr();Ol={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,n){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:n,args:o}=this.adapter.spawn;t?.onCommand?.(`${n} ${o.join(" ")}`);let s=this.adapter.buildSpawnEnv?.(t?.model??""),i=s?{...t?.env,...s}:t?.env,a=new exports.AcpConnection({spawn:this.adapter.spawn,env:i,cwd:t?.cwd,timeoutMs:t?.timeoutMs,idleMs:t?.idleMs,onPid:t?.onPid,onStderr:d=>t?.onOutput?.(d,"stderr"),configOptions:t?.configOptions});try{await a.connect(this.adapter.clientInfo);let d=this.adapter.buildSessionParams({cwd:t?.cwd,env:t?.env,model:t?.model,systemPrompt:t?.systemPrompt}),l=await a.newSession(d);await this.applySessionOptions(a,l,t);let c=this.composePrompt(e,t),g=[],f=await a.prompt(l,c,m=>this.handleUpdate(m,t,g),t?.timeoutMs);return this.handleUsage(f,t),g.join("")}finally{await a.dispose().catch(()=>{});}}async applySessionOptions(e,t,n){if(n?.model&&n.model!=="default"&&!this.adapter.buildSpawnEnv){let o=this.adapter.buildEffortAction?.(n.effort??"",n.model);try{o?.type==="set_model"?await e.setModel(t,o.modelId):await e.setModel(t,n.model);}catch(s){console.warn(`[acp] setModel(${n.model}) failed: ${s instanceof Error?s.message:String(s)}`);}}if(n?.mode){let o=this.adapter.resolveMode?.(n.mode)??n.mode;if(o)try{await e.setMode(t,o);}catch(s){console.warn(`[acp] setMode(${o}) failed: ${s instanceof Error?s.message:String(s)}`);}}if(n?.effort){let o=this.adapter.buildEffortAction?.(n.effort,n.model);if(o&&o.type==="set_config_option")try{await e.setConfigOption(t,o.configId,o.value);}catch(s){console.warn(`[acp] setConfigOption(${o.configId}) effort failed: ${s instanceof Error?s.message:String(s)}`);}}if(n?.configOptions)for(let[o,s]of Object.entries(n.configOptions))try{await e.setConfigOption(t,o,s);}catch(i){console.warn(`[acp] setConfigOption(${o}) failed, retrying: ${i instanceof Error?i.message:String(i)}`);try{await new Promise(a=>setTimeout(a,500)),await e.setConfigOption(t,o,s);}catch(a){console.warn(`[acp] setConfigOption(${o}) retry failed: ${a instanceof Error?a.message:String(a)}`);}}}composePrompt(e,t){let n=[];return t?.systemPrompt?.trim()&&(n.push(t.systemPrompt),n.push("---")),t?.context&&(n.push(t.context),n.push("---")),n.push(e),[{type:"text",text:n.join(`
24
+ ${e}`:e}async runProcess(e,t,n){try{return await Zo(this.adapter.command,e,this.providerStr,this.providerId,t,n,this.adapter)}catch(o){if(La(this.providerId,o)){let s=e[0]==="copilot"?e:["copilot",...e];try{return await Zo("gh",s,this.providerStr,this.providerId,t,n,this.adapter)}catch(i){throw this.recoverPartialUsage(i,t),i}}throw this.recoverPartialUsage(o,t),o}}recoverPartialUsage(e,t){let n=e instanceof Error?e.stdout:void 0;typeof n=="string"&&n.length>0&&this.handleResultMeta(n,t);}handleResultMeta(e,t){if(!this.adapter.parseResultMeta){let i=Da(e);i&&t?.onUsage&&t.onUsage(i);return}let{usage:n,model:o}=this.adapter.parseResultMeta(e);n&&t?.onUsage&&t.onUsage(n);let s=o??(this.providerId==="opencode"?t?.model??null:null);s&&t?.onModel&&t.onModel(s);}};});function Un(r){let e=r.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 we(r,e){try{let t=JSON.parse(r);if(t!=null&&typeof t=="object"&&typeof t.type=="string"&&Ad.has(t.type)){let n=e??new Date().toISOString();return [{...t,timestamp:t.timestamp||n}]}}catch{}return []}var Ad,He=M(()=>{p();Ad=new Set(["text","tool_use","tool_result","error","running_instruction","agent_call"]);});var Ls,$s;exports.VercelProviderRuntime=void 0;var Kn=M(()=>{p();Re();Ls=10,$s=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,n){let{generateText:o,tool:s}=await import('ai'),i=this.convertTools(n?.tools??[],s),a=this.createModel(n?.model),d=Math.min(n?.maxSteps??this.config.maxSteps??Ls,$s);try{let l=0,c=await o({model:a,system:n?.systemPrompt??void 0,prompt:e,tools:i,maxSteps:d,...this.config.temperature!==void 0&&{temperature:this.config.temperature},...this.config.maxTokens!==void 0&&{maxTokens:this.config.maxTokens},onStepFinish:f=>{if(l++,!!n?.onOutput){if(f.toolCalls&&f.toolCalls.length>0)for(let m of f.toolCalls)n.onOutput(JSON.stringify({type:"assistant",message:{content:[{type:"tool_use",id:m.toolCallId,name:m.toolName,input:m.args}]}}),"stdout");if(f.toolResults&&f.toolResults.length>0)for(let m of f.toolResults){let w=typeof m.result=="string"?m.result:JSON.stringify(m.result);n.onOutput(JSON.stringify({type:"user",message:{content:[{type:"tool_result",tool_use_id:m.toolCallId,output:w,is_error:!1}]}}),"stdout");}}}}),g=new Set((n?.tools??[]).filter(f=>!f.execute).map(f=>f.name));if(c.finishReason==="tool-calls"&&Array.isArray(c.toolCalls)&&c.toolCalls.length>0){let f=c.toolCalls.filter(m=>g.has(m.toolName));if(f.length>0){let m=f[0];throw new exports.ClientToolCallRequiredError({toolCallId:m.toolCallId,toolName:m.toolName,args:m.args},{userMessage:e,responseMessages:c.response?.messages??[],toolDefinitions:n?.tools??[],maxSteps:d,systemPrompt:n?.systemPrompt,modelOverride:n?.model})}}if(n?.onUsage&&c.usage){let f={inputTokens:c.usage.promptTokens??0,outputTokens:c.usage.completionTokens??0,cachedInputTokens:0,costUsd:0};n.onUsage(f);}return n?.onModel&&n.onModel(n.model??this.config.model),c.text??""}catch(l){throw l instanceof exports.ClientToolCallRequiredError?l:l.status===401?new exports.ProviderError(`Authentication failed for ${this.config.provider}. Check your API key.`,this.config.provider):l.status===429?new exports.ProviderError(`Rate limit exceeded for ${this.config.provider}.`,this.config.provider):new exports.ProviderError(`Provider error: ${l.message}`,this.config.provider)}}async continueWithToolResults(e,t,n){let{generateText:o,tool:s}=await import('ai'),i=this.convertTools(e.toolDefinitions,s),a=this.createModel(e.modelOverride),d=Math.min(e.maxSteps??this.config.maxSteps??Ls,$s),l=[{role:"user",content:e.userMessage},...e.responseMessages,{role:"tool",content:t.map(c=>({type:"tool-result",toolCallId:c.toolCallId,toolName:c.toolName,result:typeof c.result=="string"?c.result:JSON.stringify(c.result)}))}];try{let c=await o({model:a,system:e.systemPrompt??void 0,messages:l,tools:i,maxSteps:d,...this.config.temperature!==void 0&&{temperature:this.config.temperature},...this.config.maxTokens!==void 0&&{maxTokens:this.config.maxTokens}}),g=new Set(e.toolDefinitions.filter(f=>!f.execute).map(f=>f.name));if(c.finishReason==="tool-calls"&&Array.isArray(c.toolCalls)&&c.toolCalls.length>0){let f=c.toolCalls.filter(m=>g.has(m.toolName));if(f.length>0){let m=f[0];throw new exports.ClientToolCallRequiredError({toolCallId:m.toolCallId,toolName:m.toolName,args:m.args},{userMessage:e.userMessage,responseMessages:[...e.responseMessages,{role:"tool",content:t.map(w=>({type:"tool-result",toolCallId:w.toolCallId,toolName:w.toolName,result:typeof w.result=="string"?w.result:JSON.stringify(w.result)}))},...c.response?.messages??[]],toolDefinitions:e.toolDefinitions,maxSteps:e.maxSteps,systemPrompt:e.systemPrompt,modelOverride:e.modelOverride})}}return n?.onUsage&&c.usage&&n.onUsage({inputTokens:c.usage.promptTokens??0,outputTokens:c.usage.completionTokens??0,cachedInputTokens:0,costUsd:0}),n?.onModel&&n.onModel(e.modelOverride??this.config.model),c.text??""}catch(c){throw c instanceof exports.ClientToolCallRequiredError?c:new exports.ProviderError(`Provider error: ${c.message}`,this.config.provider)}}convertTools(e,t){let{z:n}=oe("zod"),o={};for(let s of e){let i=this.jsonSchemaToZod(s.parameters??{},n);s.execute?o[s.name]=t({description:s.description,parameters:i,execute:async a=>s.execute(a)}):o[s.name]=t({description:s.description,parameters:i});}return o}jsonSchemaToZod(e,t){if(!e||!e.properties)return t.object({});let n={},o=e.properties,s=e.required??[];for(let[i,a]of Object.entries(o)){let d;switch(a.type){case "string":d=t.string();break;case "number":d=t.number();break;case "integer":d=t.number().int();break;case "boolean":d=t.boolean();break;case "array":d=t.array(t.any());break;default:d=t.any();}a.description&&(d=d.describe(a.description)),s.includes(i)||(d=d.optional()),n[i]=d;}return t.object(n)}createModel(e){let{provider:t,apiKey:n,baseURL:o}=this.config,s=e||this.config.model;switch(t){case "api/openrouter":{let{createOpenAI:i}=oe("@ai-sdk/openai");return i({apiKey:n||process.env.OPENROUTER_API_KEY,baseURL:o||"https://openrouter.ai/api/v1"})(s)}case "api/openai":{let{createOpenAI:i}=oe("@ai-sdk/openai");return i({apiKey:n||process.env.OPENAI_API_KEY,...o&&{baseURL:o}})(s)}case "api/anthropic":{let{createAnthropic:i}=oe("@ai-sdk/anthropic");return i({apiKey:n||process.env.ANTHROPIC_API_KEY,...o&&{baseURL:o}})(s)}case "api/google":{let{createGoogleGenerativeAI:i}=oe("@ai-sdk/google");return i({apiKey:n||process.env.GOOGLE_API_KEY})(s)}default:throw new exports.ProviderError(`Unsupported API provider: ${t}`,t)}}};});var js={};yr(js,{registerApiProviders:()=>Us});function Us(r){Ie("api",(e,t)=>{let n=r?.apiKeys?.[e];return new exports.VercelProviderRuntime({provider:t,model:"",apiKey:n,maxSteps:r?.defaults?.maxSteps,temperature:r?.defaults?.temperature})});}var Gn=M(()=>{p();Re();Kn();});exports.AcpProtocolError=void 0;var Vn=M(()=>{p();exports.AcpProtocolError=class extends Error{constructor(t,n,o){super(t);this.code=n;this.data=o;}code;data;name="AcpProtocolError"};});var bl,Sl,Ws,Fs,Il;exports.AcpConnection=void 0;var Hr=M(()=>{p();xt();Vn();Re();_n();Pr();bl=-32e3,Sl=2e3,Ws=3e4,Fs=1e4,Il=8*36e5,exports.AcpConnection=class{constructor(e){this.options=e;}options;proc=null;sdkConnection=null;disposed=false;stderrBuffer="";collectedStderr="";pendingUpdateCallback=null;idleWatchdog=null;idleReject=null;idlePromise=null;authMethods=[];_initResponse=null;get initResponse(){return this._initResponse}async connect(e){if(this.disposed)throw new exports.ProviderError("AcpConnection has been disposed","acp");let t=this.options.spawn,n=process.platform==="win32"&&(t.shellOnWindows??true),o={...process.env,...this.options.env??{}},s=this.options.cwd??process.cwd(),i;try{let y=Ze({command:t.command,env:o,cwd:s,allowShellFallback:n});i=et(y,t.args);}catch(y){throw new exports.ProviderError(y instanceof Error?y.message:String(y),"acp")}let a=child_process.spawn(i.command,i.argv,{stdio:["pipe","pipe","pipe"],env:o,cwd:this.options.cwd,shell:i.shell??false,windowsHide:true,detached:process.platform!=="win32"});a.pid!==void 0&&this.options.onPid?.(a.pid),a.stderr.on("data",y=>{let v=y.toString();this.collectedStderr+=v,this.stderrBuffer+=v;let E=this.stderrBuffer.split(`
25
+ `);this.stderrBuffer=E.pop()??"";for(let P of E)P.trim()&&this.options.onStderr?.(P);}),this.proc=a;let d=this.options.idleMs??6e5;d>0&&(this.idlePromise=new Promise((y,v)=>{this.idleReject=v;}),this.idlePromise.catch(()=>{}),this.idleWatchdog=new Tt({timeoutMs:d,onIdle:()=>{let y=Math.round(d/6e4),v=new rt(`acp produced no output for ${y}m (idle timeout). Process killed. The CLI may be waiting on interactive input or stuck \u2014 check the prompt or retry.`,"acp");this.idleReject?.(v),this.dispose();}}),this.idleWatchdog.start()),a.stdin.on("error",y=>{y.code!=="EPIPE"&&this.options.onStderr?.(`ACP stdin error: ${y.message}`);});let l=new WritableStream({write:y=>new Promise((v,E)=>{a.stdin.write(y,P=>{P?E(P):v();});}),close:()=>{a.stdin.end();}}),c=new ReadableStream({start:y=>{a.stdout.on("data",v=>{this.idleWatchdog?.refresh(),y.enqueue(new Uint8Array(v));}),a.stdout.on("end",()=>{y.close();}),a.stdout.on("error",v=>{y.error(v);});}}),g=sdk.ndJsonStream(l,c),f=this,m=new sdk.ClientSideConnection(y=>({requestPermission:async v=>{if(f.options.configOptions?.allow_all!==void 0){let E=v.options;if(Array.isArray(E)&&E.length>0)return {outcome:{outcome:"selected",optionId:(E.find(C=>C.kind==="allow_once")??E.find(C=>C.kind?.startsWith("allow_"))??E[0]).optionId}}}return {outcome:{outcome:"cancelled"}}},sessionUpdate:async v=>{f.pendingUpdateCallback?.(v);}}),g);this.sdkConnection=m;let w=new Promise((y,v)=>{a.on("error",E=>{if(E.code==="ENOENT"){let C=t.command==="npx"&&t.args.length>0?`@agentclientprotocol/${t.args[0]}`:t.command;v(new exports.ProviderError(`ACP command "${t.command}" not found. Is the ACP adapter installed? Try: npm install -g ${C}`,"acp"));}else v(new exports.ProviderError(`ACP spawn error: ${E.message}`,"acp"));});}),_=this.doInitialize(m,e),k=new Promise((y,v)=>{setTimeout(()=>{v(new exports.AcpProtocolError(`ACP connect timeout after ${Ws}ms. The ACP adapter may not be installed or may require interactive setup.`));},Ws).unref();});await Promise.race([_,k,w]);}async doInitialize(e,t){let n=await e.initialize({protocolVersion:1,clientCapabilities:{auth:{}},clientInfo:{name:t?.name??"crewx-sdk",version:t?.version??"0.8.4"}});this._initResponse=n,this.authMethods=n.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),n=new Promise((o,s)=>{setTimeout(()=>{s(new exports.AcpProtocolError(`ACP session/new timeout after ${Fs}ms`));},Fs).unref();});return Promise.race([t,n])}isAuthError(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code===bl}async tryAuthenticate(){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected.","acp");let e=this.authMethods.find(n=>n.type==="env_var"&&this.hasEnvVarsFor(n));if(e){await this.sdkConnection.authenticate({methodId:e.id});return}let t=this.authMethods.map(n=>`${n.id} (${n.type??"agent"})`).join(", ");if(this.authMethods.length>0){let n=this.authMethods.filter(o=>o.type==="env_var");if(n.length>0){let o=n.flatMap(s=>(s.vars??[]).filter(i=>!i.optional&&!process.env[i.name]).map(i=>i.name));throw new exports.AcpProtocolError(`ACP authentication required. Missing environment variables: ${o.join(", ")}. Set them in your shell or crewx.yaml env block.`)}throw new exports.AcpProtocolError(`ACP authentication required but no supported method found. Available methods: ${t}. CrewX currently supports env_var authentication only.`)}throw new exports.AcpProtocolError("ACP agent requires authentication but advertised no auth methods.")}hasEnvVarsFor(e){return !e.vars||e.vars.length===0?true:e.vars.filter(t=>!t.optional).every(t=>!!process.env[t.name])}async setModel(e,t){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.unstable_setSessionModel({sessionId:e,modelId:t});}async setMode(e,t){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.setSessionMode({sessionId:e,modeId:t});}async setConfigOption(e,t,n){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.setSessionConfigOption({sessionId:e,configId:t,value:n});}async prompt(e,t,n,o){if(!this.sdkConnection||!this.proc)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");this.pendingUpdateCallback=n??null;let s=this.sdkConnection,i=this.proc,a=o??Il,d=false,l=s.prompt({sessionId:e,prompt:t}).finally(()=>{d=true;}),c=new Promise((m,w)=>{setTimeout(()=>{s.cancel({sessionId:e}).catch(()=>{}),w(new nt(`ACP prompt timeout after ${a}ms`,"acp"));},a).unref();}),g=new Promise((m,w)=>{let _=(E,P,C)=>{if(d)return;let V=P!=null?`signal=${P}`:`code=${String(E)}`;w(new exports.ProviderError(`ACP process terminated unexpectedly (${V}) [${C}]: ${this.collectedStderr.slice(-500)}`,"acp"));},k=(E,P)=>_(E,P,"exit"),y=(E,P)=>_(E,P,"close");i.once("exit",k),i.once("close",y);let v=()=>{i.off("exit",k),i.off("close",y);};l.then(v,v);}),f=[l,c,g];this.idlePromise&&f.push(this.idlePromise);try{return await Promise.race(f)}finally{this.pendingUpdateCallback=null;}}async dispose(){if(this.disposed)return;this.disposed=true,this.idleWatchdog?.stop(),this.pendingUpdateCallback=null,this.sdkConnection=null;let e=this.proc;if(!e)return;this.proc=null,this.stderrBuffer.trim()&&(this.options.onStderr?.(this.stderrBuffer),this.stderrBuffer="");let t=e.pid,n=o=>{if(t!==void 0&&process.platform!=="win32")try{process.kill(-t,o);}catch{}else try{e.kill(o);}catch{}};await new Promise(o=>{let s=()=>{clearTimeout(i),o();};e.once("close",s),e.once("error",s);try{n("SIGTERM");}catch{s();return}let i=setTimeout(()=>{n("SIGKILL");},Sl);});}get isConnected(){return !this.disposed&&this.sdkConnection!==null&&this.proc!==null}};});function Hs(r,e){if(r!=null&&typeof r=="object"){let t=r;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 Ol;exports.AcpProviderRuntime=void 0;var Jn=M(()=>{p();He();Hr();Ol={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,n){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:n,args:o}=this.adapter.spawn;t?.onCommand?.(`${n} ${o.join(" ")}`);let s=this.adapter.buildSpawnEnv?.(t?.model??""),i=s?{...t?.env,...s}:t?.env,a=new exports.AcpConnection({spawn:this.adapter.spawn,env:i,cwd:t?.cwd,timeoutMs:t?.timeoutMs,idleMs:t?.idleMs,onPid:t?.onPid,onStderr:d=>t?.onOutput?.(d,"stderr"),configOptions:t?.configOptions});try{await a.connect(this.adapter.clientInfo);let d=this.adapter.buildSessionParams({cwd:t?.cwd,env:t?.env,model:t?.model,systemPrompt:t?.systemPrompt}),l=await a.newSession(d);await this.applySessionOptions(a,l,t);let c=this.composePrompt(e,t),g=[],f=await a.prompt(l,c,m=>this.handleUpdate(m,t,g),t?.timeoutMs);return this.handleUsage(f,t),g.join("")}finally{await a.dispose().catch(()=>{});}}async applySessionOptions(e,t,n){if(n?.model&&n.model!=="default"&&!this.adapter.buildSpawnEnv){let o=this.adapter.buildEffortAction?.(n.effort??"",n.model);try{o?.type==="set_model"?await e.setModel(t,o.modelId):await e.setModel(t,n.model);}catch(s){console.warn(`[acp] setModel(${n.model}) failed: ${s instanceof Error?s.message:String(s)}`);}}if(n?.mode){let o=this.adapter.resolveMode?.(n.mode)??n.mode;if(o)try{await e.setMode(t,o);}catch(s){console.warn(`[acp] setMode(${o}) failed: ${s instanceof Error?s.message:String(s)}`);}}if(n?.effort){let o=this.adapter.buildEffortAction?.(n.effort,n.model);if(o&&o.type==="set_config_option")try{await e.setConfigOption(t,o.configId,o.value);}catch(s){console.warn(`[acp] setConfigOption(${o.configId}) effort failed: ${s instanceof Error?s.message:String(s)}`);}}if(n?.configOptions)for(let[o,s]of Object.entries(n.configOptions))try{await e.setConfigOption(t,o,s);}catch(i){console.warn(`[acp] setConfigOption(${o}) failed, retrying: ${i instanceof Error?i.message:String(i)}`);try{await new Promise(a=>setTimeout(a,500)),await e.setConfigOption(t,o,s);}catch(a){console.warn(`[acp] setConfigOption(${o}) retry failed: ${a instanceof Error?a.message:String(a)}`);}}}composePrompt(e,t){let n=[];return t?.systemPrompt?.trim()&&(n.push(t.systemPrompt),n.push("---")),t?.context&&(n.push(t.context),n.push("---")),n.push(e),[{type:"text",text:n.join(`
26
26
 
27
27
  `)}]}handleUpdate(e,t,n){let o=e.update;if(o.sessionUpdate==="agent_message_chunk"){let s=null;this.adapter.extractTextFromUpdate?s=this.adapter.extractTextFromUpdate(e):s=Un(e),s!==null&&(n.push(s),t?.onOutput?.(s,"stdout"));}else if(o.sessionUpdate==="tool_call"){this.pushBlockBoundary(n);let s=new Date().toISOString(),i=o,a={title:i.title??"",kind:i.kind,rawInput:i.rawInput,rawOutput:i.rawOutput,locations:i.locations,_meta:i._meta},d=this.resolveToolCall(a),l={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:d.toolName,toolInput:d.toolInput};t?.onTaskLog?.([l]);}else if(o.sessionUpdate==="tool_call_update"){let s=new Date().toISOString(),i=o;if(i.status==="completed"||i.status==="failed"){let d=this.extractResultPreview(i.rawOutput),l={timestamp:s,type:"tool_result",toolUseId:i.toolCallId,resultPreview:d,isError:i.status==="failed"};t?.onTaskLog?.([l]);}else if(i.rawInput!=null&&typeof i.rawInput=="object"&&Object.keys(i.rawInput).length>0){this.pushBlockBoundary(n);let d={title:i.title??"",kind:i.kind,rawInput:i.rawInput,rawOutput:i.rawOutput,locations:i.locations,_meta:i._meta},l=this.resolveToolCall(d),c={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:l.toolName,toolInput:l.toolInput};t?.onTaskLog?.([c]);}}else o.sessionUpdate;}pushBlockBoundary(e){e.length===0||e[e.length-1].endsWith(`
28
28
 
29
29
  `)||e.push(`
30
30
 
31
31
  `);}resolveToolCall(e){let t=e._meta;if(t?.claudeCode?.toolName)return {toolName:t.claudeCode.toolName,toolInput:Hs(e.rawInput,e.locations)??(e.title||void 0)};if(this.adapter.parseToolCall){let s=this.adapter.parseToolCall(e);if(s)return {toolName:s.toolName??e.title??"unknown",toolInput:s.toolInput}}let n=Ol[e.kind??""]??e.title??"unknown",o=Hs(e.rawInput,e.locations)??(e.title||void 0);return {toolName:n,toolInput:o}}extractResultPreview(e){if(e!=null){if(typeof e=="string")return e;if(Array.isArray(e)){let t=e.filter(n=>n!=null&&typeof n=="object"&&n.type==="text"&&typeof n.text=="string").map(n=>n.text);if(t.length>0)return t.join(`
32
- `)}if(typeof e=="object"){let t=e;if(typeof t.formatted_output=="string")return t.formatted_output;if(typeof t.content=="string")return t.content;if(Array.isArray(t.content)){let n=this.extractResultPreview(t.content);if(n)return n}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 n=this.extractResultPreview(t.result);if(n)return n}if(t.error!=null){let n=this.extractResultPreview(t.error);if(n)return n}}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 n=e.usage;n&&t.onUsage({inputTokens:n.inputTokens??0,outputTokens:n.outputTokens??0,cachedInputTokens:n.cachedReadTokens??0,costUsd:0});}};});exports.claudeAcpAdapter=void 0;var Jn=M(()=>{u();Fe();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(r){return {cwd:r.cwd??process.cwd(),mcpServers:[]}},extractUsage(r){let e=r.usage;return e?{inputTokens:(e.inputTokens??0)+(e.cachedReadTokens??0),outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"bypassPermissions",buildEffortAction(r){return r?{type:"set_config_option",configId:"effort",value:r}:null},buildSpawnEnv(r){if(!(!r||r==="default"))return {ANTHROPIC_MODEL:r}},resolveMode(r){return {yolo:"bypassPermissions"}[r]??r},parseEvent:we};});exports.codexAcpAdapter=void 0;var Xn=M(()=>{u();Fe();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(r){return {cwd:r.cwd??process.cwd(),mcpServers:[]}},extractUsage(r){let e=r.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(r,e){if(!e)return null;let t=e.match(/^(.+?)\[([^\]]+)\]$/),n=t?t[1]:e,o=t?t[2]:void 0;return {type:"set_model",modelId:`${n}[${r||o||"medium"}]`}},resolveMode(r){return {yolo:"agent-full-access",default:"agent",plan:"read-only"}[r]??r},parseEvent:we};});var bt;exports.copilotAcpAdapter=void 0;var Yn=M(()=>{u();Fe();bt="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(r){return {cwd:r.cwd?K.resolve(r.cwd):process.cwd(),mcpServers:[]}},yoloModeId:`${bt}#autopilot`,buildEffortAction(r){return r?{type:"set_config_option",configId:"reasoning_effort",value:r}:null},resolveMode(r){return r.startsWith("https://")?r:{yolo:`${bt}#autopilot`,default:`${bt}#agent`,agent:`${bt}#agent`,plan:`${bt}#plan`,autopilot:`${bt}#autopilot`}[r]??null},parseEvent:we};});exports.opencodeAcpAdapter=void 0;var Qn=M(()=>{u();Fe();exports.opencodeAcpAdapter={spawn:{command:"opencode",args:["acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"OpenCode"},buildSessionParams(r){return {cwd:r.cwd??process.cwd(),mcpServers:[]}},yoloModeId:void 0,buildEffortAction(r){return null},resolveMode(r){let e={default:"build"};return r==="yolo"?null:e[r]??r},parseEvent:we};});exports.ACP_ADAPTERS=void 0;var Gr=M(()=>{u();Jn();Xn();Yn();Qn();Jn();Xn();Yn();Qn();exports.ACP_ADAPTERS={codex:exports.codexAcpAdapter,claude:exports.claudeAcpAdapter,opencode:exports.opencodeAcpAdapter,copilot:exports.copilotAcpAdapter};});var qs={};yr(qs,{registerAcpProviders:()=>Bs});function Bs(r){if(r){Ie("acp",r);return}Ie("acp",(e,t)=>{let n=exports.ACP_ADAPTERS[e];if(!n)throw new exports.ProviderError(`Unknown ACP provider id: "${e}". Supported: ${Object.keys(exports.ACP_ADAPTERS).join(", ")}`,t);return new exports.AcpProviderRuntime(e,n,t)});}var Zn=M(()=>{u();Ee();Vn();Gr();Ee();});function Nl(r){if(!r)return r;let e=r.trim().replace(/\/+$/,"");return e.toLowerCase().endsWith("/mcp")?e.slice(0,-4):e}exports.McpHttpTransport=void 0;var eo=M(()=>{u();exports.McpHttpTransport=class{endpoint;headers;timeoutMs;constructor(e){let t=Nl(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,n=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(n),!o.ok){let a=await o.text();throw new Error(`HTTP ${o.status}: ${o.statusText}${a?` - ${a}`:""}`)}let s=o.headers.get("content-type");if(s?.includes("application/json"))return await o.json();let i=await o.text();return {jsonrpc:"2.0",id:e.id,error:{code:-32600,message:`Unexpected response content-type: ${s}`,data:i}}}catch(o){throw clearTimeout(n),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 to=M(()=>{u();eo();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,n){this.validateConfig(t),this.configs.set(e,t),this.transports.set(e,n),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 n=this.requireConfig(e),o=n.tools?.query??"crewx_queryAgent",i={agentId:n.agentId??e,query:t.query};t.context&&(i.context=t.context),t.model&&(i.model=t.model),t.platform&&(i.platform=t.platform),t.messages?.length&&(i.messages=t.messages);try{let a=await this.callRemoteTool(e,o,i);return this.normalizeResponse(a)}catch(a){let d=a instanceof Error?a.message:String(a);throw this.logger(`Remote query failed for agent ${e}: ${d}`,"error"),a}}async execute(e,t){let n=this.requireConfig(e),o=n.tools?.execute??"crewx_executeAgent",i={agentId:n.agentId??e,task:t.task};t.context&&(i.context=t.context),t.model&&(i.model=t.model),t.platform&&(i.platform=t.platform),t.messages?.length&&(i.messages=t.messages);try{let a=await this.callRemoteTool(e,o,i);return this.normalizeResponse(a)}catch(a){let d=a instanceof Error?a.message:String(a);throw this.logger(`Remote execute failed for agent ${e}: ${d}`,"error"),a}}mapToolNames(e,t){let n=this.requireConfig(e);n.tools={query:t.query??n.tools?.query??"crewx_queryAgent",execute:t.execute??n.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,n){let o=this.transports.get(e);if(!o)throw new Error(`No transport available for agent ${e}`);let s={jsonrpc:"2.0",id:`${t}-${Date.now()}`,method:"tools/call",params:{name:t,arguments:n}};this.logger(`Calling remote MCP tool ${t} for agent ${e}`,"debug");let i=await o.send(s);if(i.error)throw new Error(i.error.message||"MCP server returned an error");return i.result}normalizeResponse(e){if(!e)return {success:false,content:[{type:"text",text:"Remote agent returned no response."}]};let t=e;if(Array.isArray(t.content)&&t.content.length>0)return t;let n=t.response??t.implementation??t.message??t.output,o=typeof n=="string"?n:JSON.stringify(n??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 Ks={};yr(Ks,{RemoteProviderRuntime:()=>exports.RemoteProviderRuntime,createRemoteProviderFactory:()=>zs,resolveFileRemoteAgent:()=>Hl});function Fl(r){let e=bs.readFileSync(r,"utf-8"),t=jsYaml.load(e);return {agents:Array.isArray(t?.agents)?t.agents:void 0}}function Wl(r){let e=Array.isArray(r.provider)?r.provider[0]:r.provider;return e||(Array.isArray(r.inline?.provider)?r.inline.provider[0]:r.inline?.provider)}function Hl(r,e=Fl,t=bs.existsSync){let n=r.location.replace("file://","");if(!t(n))throw new Error(`Remote config file not found: ${n}`);if(!r.external_agent_id)throw new Error(`external_agent_id is required for file:// remote provider "${r.id}"`);let s=e(n).agents?.find(d=>d.id===r.external_agent_id);if(!s)throw new Error(`Agent "${r.external_agent_id}" not found in ${n}`);let i=Wl(s);if(!i)throw new Error(`Agent "${r.external_agent_id}" in ${n} has no provider configured`);if(i.startsWith("remote/"))throw new Error(`Chained remotes not allowed: ${r.id} \u2192 ${i}`);let a=K.resolve(K.dirname(n),s.working_directory??".");return {agent:{...s,working_directory:a},provider:i}}function zs(r,e=Oe){return (t,n)=>{let o=r.get(t);if(!o)throw new Error(`Remote provider "${t}" not found. Available: ${Array.from(r.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 Bl(r,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??r}}exports.RemoteProviderRuntime=void 0;var ro=M(()=>{u();Ee();to();exports.RemoteProviderRuntime=class{manager;agentId;constructor(e,t,n=Oe){this.agentId=t.external_agent_id??e,this.manager=new exports.RemoteAgentManager;let o=Bl(e,t);this.manager.loadConfig(this.agentId,o);}async query(e,t){return (await this.manager.query(this.agentId,{agentId:this.agentId,query:e,model:t?.model,context:t?.context??t?.systemPrompt})).content.map(o=>o.text).join(`
32
+ `)}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 n=this.extractResultPreview(t.content);if(n)return n}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 n=this.extractResultPreview(t.result);if(n)return n}if(t.error!=null){let n=this.extractResultPreview(t.error);if(n)return n}}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 n=e.usage;n&&t.onUsage({inputTokens:n.inputTokens??0,outputTokens:n.outputTokens??0,cachedInputTokens:n.cachedReadTokens??0,costUsd:0});}};});exports.claudeAcpAdapter=void 0;var Xn=M(()=>{p();He();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(r){return {cwd:r.cwd??process.cwd(),mcpServers:[]}},extractUsage(r){let e=r.usage;return e?{inputTokens:(e.inputTokens??0)+(e.cachedReadTokens??0),outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"bypassPermissions",buildEffortAction(r){return r?{type:"set_config_option",configId:"effort",value:r}:null},buildSpawnEnv(r){if(!(!r||r==="default"))return {ANTHROPIC_MODEL:r}},resolveMode(r){return {yolo:"bypassPermissions"}[r]??r},parseEvent:we};});exports.codexAcpAdapter=void 0;var Yn=M(()=>{p();He();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(r){return {cwd:r.cwd??process.cwd(),mcpServers:[]}},extractUsage(r){let e=r.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(r,e){if(!e)return null;let t=e.match(/^(.+?)\[([^\]]+)\]$/),n=t?t[1]:e,o=t?t[2]:void 0;return {type:"set_model",modelId:`${n}[${r||o||"medium"}]`}},resolveMode(r){return {yolo:"agent-full-access",default:"agent",plan:"read-only"}[r]??r},parseEvent:we};});var bt;exports.copilotAcpAdapter=void 0;var Qn=M(()=>{p();He();bt="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(r){return {cwd:r.cwd?K.resolve(r.cwd):process.cwd(),mcpServers:[]}},yoloModeId:`${bt}#autopilot`,buildEffortAction(r){return r?{type:"set_config_option",configId:"reasoning_effort",value:r}:null},resolveMode(r){return r.startsWith("https://")?r:{yolo:`${bt}#autopilot`,default:`${bt}#agent`,agent:`${bt}#agent`,plan:`${bt}#plan`,autopilot:`${bt}#autopilot`}[r]??null},parseEvent:we};});exports.opencodeAcpAdapter=void 0;var Zn=M(()=>{p();He();exports.opencodeAcpAdapter={spawn:{command:"opencode",args:["acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"OpenCode"},buildSessionParams(r){return {cwd:r.cwd??process.cwd(),mcpServers:[]}},yoloModeId:void 0,buildEffortAction(r){return null},resolveMode(r){let e={default:"build"};return r==="yolo"?null:e[r]??r},parseEvent:we};});exports.ACP_ADAPTERS=void 0;var Gr=M(()=>{p();Xn();Yn();Qn();Zn();Xn();Yn();Qn();Zn();exports.ACP_ADAPTERS={codex:exports.codexAcpAdapter,claude:exports.claudeAcpAdapter,opencode:exports.opencodeAcpAdapter,copilot:exports.copilotAcpAdapter};});var qs={};yr(qs,{registerAcpProviders:()=>Bs});function Bs(r){if(r){Ie("acp",r);return}Ie("acp",(e,t)=>{let n=exports.ACP_ADAPTERS[e];if(!n)throw new exports.ProviderError(`Unknown ACP provider id: "${e}". Supported: ${Object.keys(exports.ACP_ADAPTERS).join(", ")}`,t);return new exports.AcpProviderRuntime(e,n,t)});}var eo=M(()=>{p();Re();Jn();Gr();Re();});function Nl(r){if(!r)return r;let e=r.trim().replace(/\/+$/,"");return e.toLowerCase().endsWith("/mcp")?e.slice(0,-4):e}exports.McpHttpTransport=void 0;var to=M(()=>{p();exports.McpHttpTransport=class{endpoint;headers;timeoutMs;constructor(e){let t=Nl(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,n=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(n),!o.ok){let a=await o.text();throw new Error(`HTTP ${o.status}: ${o.statusText}${a?` - ${a}`:""}`)}let s=o.headers.get("content-type");if(s?.includes("application/json"))return await o.json();let i=await o.text();return {jsonrpc:"2.0",id:e.id,error:{code:-32600,message:`Unexpected response content-type: ${s}`,data:i}}}catch(o){throw clearTimeout(n),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 ro=M(()=>{p();to();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,n){this.validateConfig(t),this.configs.set(e,t),this.transports.set(e,n),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 n=this.requireConfig(e),o=n.tools?.query??"crewx_queryAgent",i={agentId:n.agentId??e,query:t.query};t.context&&(i.context=t.context),t.model&&(i.model=t.model),t.platform&&(i.platform=t.platform),t.messages?.length&&(i.messages=t.messages);try{let a=await this.callRemoteTool(e,o,i);return this.normalizeResponse(a)}catch(a){let d=a instanceof Error?a.message:String(a);throw this.logger(`Remote query failed for agent ${e}: ${d}`,"error"),a}}async execute(e,t){let n=this.requireConfig(e),o=n.tools?.execute??"crewx_executeAgent",i={agentId:n.agentId??e,task:t.task};t.context&&(i.context=t.context),t.model&&(i.model=t.model),t.platform&&(i.platform=t.platform),t.messages?.length&&(i.messages=t.messages);try{let a=await this.callRemoteTool(e,o,i);return this.normalizeResponse(a)}catch(a){let d=a instanceof Error?a.message:String(a);throw this.logger(`Remote execute failed for agent ${e}: ${d}`,"error"),a}}mapToolNames(e,t){let n=this.requireConfig(e);n.tools={query:t.query??n.tools?.query??"crewx_queryAgent",execute:t.execute??n.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,n){let o=this.transports.get(e);if(!o)throw new Error(`No transport available for agent ${e}`);let s={jsonrpc:"2.0",id:`${t}-${Date.now()}`,method:"tools/call",params:{name:t,arguments:n}};this.logger(`Calling remote MCP tool ${t} for agent ${e}`,"debug");let i=await o.send(s);if(i.error)throw new Error(i.error.message||"MCP server returned an error");return i.result}normalizeResponse(e){if(!e)return {success:false,content:[{type:"text",text:"Remote agent returned no response."}]};let t=e;if(Array.isArray(t.content)&&t.content.length>0)return t;let n=t.response??t.implementation??t.message??t.output,o=typeof n=="string"?n:JSON.stringify(n??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 Ks={};yr(Ks,{RemoteProviderRuntime:()=>exports.RemoteProviderRuntime,createRemoteProviderFactory:()=>zs,resolveFileRemoteAgent:()=>Hl});function Wl(r){let e=bs.readFileSync(r,"utf-8"),t=jsYaml.load(e);return {agents:Array.isArray(t?.agents)?t.agents:void 0}}function Fl(r){let e=Array.isArray(r.provider)?r.provider[0]:r.provider;return e||(Array.isArray(r.inline?.provider)?r.inline.provider[0]:r.inline?.provider)}function Hl(r,e=Wl,t=bs.existsSync){let n=r.location.replace("file://","");if(!t(n))throw new Error(`Remote config file not found: ${n}`);if(!r.external_agent_id)throw new Error(`external_agent_id is required for file:// remote provider "${r.id}"`);let s=e(n).agents?.find(d=>d.id===r.external_agent_id);if(!s)throw new Error(`Agent "${r.external_agent_id}" not found in ${n}`);let i=Fl(s);if(!i)throw new Error(`Agent "${r.external_agent_id}" in ${n} has no provider configured`);if(i.startsWith("remote/"))throw new Error(`Chained remotes not allowed: ${r.id} \u2192 ${i}`);let a=K.resolve(K.dirname(n),s.working_directory??".");return {agent:{...s,working_directory:a},provider:i}}function zs(r,e=Oe){return (t,n)=>{let o=r.get(t);if(!o)throw new Error(`Remote provider "${t}" not found. Available: ${Array.from(r.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 Bl(r,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??r}}exports.RemoteProviderRuntime=void 0;var no=M(()=>{p();Re();ro();exports.RemoteProviderRuntime=class{manager;agentId;constructor(e,t,n=Oe){this.agentId=t.external_agent_id??e,this.manager=new exports.RemoteAgentManager;let o=Bl(e,t);this.manager.loadConfig(this.agentId,o);}async query(e,t){return (await this.manager.query(this.agentId,{agentId:this.agentId,query:e,model:t?.model,context:t?.context??t?.systemPrompt})).content.map(o=>o.text).join(`
33
33
  `)}async execute(e,t){return (await this.manager.execute(this.agentId,{agentId:this.agentId,task:e,model:t?.model,context:t?.context??t?.systemPrompt})).content.map(o=>o.text).join(`
34
- `)}};});var Xs={};yr(Xs,{PluginProviderRuntime:()=>exports.PluginProviderRuntime,createPluginProviderFactory:()=>Js});function Js(r){return (e,t)=>{let n=r.get(e);if(!n)throw new exports.ProviderError(`Plugin provider "${e}" not found. Available: ${Array.from(r.keys()).join(", ")||"(none)"}`,`plugin/${e}`);return new exports.PluginProviderRuntime(e,n)}}function Gs(r,e,t,n){let o=r.map(s=>s.replace(/\{model\}/g,e));return n&&o.push(t),o}function zl(r){if(!r||typeof r!="string")throw new Error("Plugin provider requires a cli_command")}function Vs(r){if(!Array.isArray(r))throw new Error("CLI arguments must be an array");for(let e of r)if(typeof e!="string")throw new Error("Each CLI argument must be a string")}function Kl(r){for(let{pattern:e}of r)if(typeof e!="string")throw new Error("Error pattern must be a string")}function Gl(r){for(let[e,t]of Object.entries(r))if(typeof e!="string"||typeof t!="string")throw new Error("env entries must be string key/value pairs")}exports.PluginProviderRuntime=void 0;var no=M(()=>{u();Ee();vt();exports.PluginProviderRuntime=class{constructor(e,t){this.config=t;this.providerStr=`plugin/${e}`,zl(t.cli_command),Vs(t.query_args),Vs(t.execute_args),t.error_patterns&&Kl(t.error_patterns),t.env&&Gl(t.env);}config;providerStr;async query(e,t){let n=t?.model??this.config.default_model??"default",o=Gs(this.config.query_args,n,e,this.config.prompt_in_args),s=this.config.prompt_in_args?void 0:e;t?.onCommand?.(`${this.config.cli_command} ${o.join(" ")}`);let i=this.config.timeout?.query??6e5;return this.runProcess(o,t,s,i)}async execute(e,t){let n=t?.model??this.config.default_model??"default",o=Gs(this.config.execute_args,n,e,this.config.prompt_in_args),s=this.config.prompt_in_args?void 0:e;t?.onCommand?.(`${this.config.cli_command} ${o.join(" ")}`);let i=this.config.timeout?.execute??6e5;return this.runProcess(o,t,s,i)}runProcess(e,t,n,o){return new Promise((s,i)=>{let a={...process.env,...this.config.env??{}},d=Ze({command:this.config.cli_command,env:a,cwd:process.cwd(),resolution:this.config.prefer_local_bin?"local_first":"global_first",allowShellFallback:true}),l=et(d,e),c=child_process.spawn(l.command,l.argv,{env:a,shell:l.shell??false,stdio:["pipe","pipe","pipe"],windowsHide:l.windowsHide});n!==void 0&&c.stdin.write(n),c.stdin.end(),c.pid!==void 0&&t?.onPid?.(c.pid);let g="",f="",m="",w="";c.stdout.on("data",k=>{let y=k.toString();g+=y,m+=y;let v=m.split(`
34
+ `)}};});var Xs={};yr(Xs,{PluginProviderRuntime:()=>exports.PluginProviderRuntime,createPluginProviderFactory:()=>Js});function Js(r){return (e,t)=>{let n=r.get(e);if(!n)throw new exports.ProviderError(`Plugin provider "${e}" not found. Available: ${Array.from(r.keys()).join(", ")||"(none)"}`,`plugin/${e}`);return new exports.PluginProviderRuntime(e,n)}}function Gs(r,e,t,n){let o=r.map(s=>s.replace(/\{model\}/g,e));return n&&o.push(t),o}function zl(r){if(!r||typeof r!="string")throw new Error("Plugin provider requires a cli_command")}function Vs(r){if(!Array.isArray(r))throw new Error("CLI arguments must be an array");for(let e of r)if(typeof e!="string")throw new Error("Each CLI argument must be a string")}function Kl(r){for(let{pattern:e}of r)if(typeof e!="string")throw new Error("Error pattern must be a string")}function Gl(r){for(let[e,t]of Object.entries(r))if(typeof e!="string"||typeof t!="string")throw new Error("env entries must be string key/value pairs")}exports.PluginProviderRuntime=void 0;var oo=M(()=>{p();Re();xt();exports.PluginProviderRuntime=class{constructor(e,t){this.config=t;this.providerStr=`plugin/${e}`,zl(t.cli_command),Vs(t.query_args),Vs(t.execute_args),t.error_patterns&&Kl(t.error_patterns),t.env&&Gl(t.env);}config;providerStr;async query(e,t){let n=t?.model??this.config.default_model??"default",o=Gs(this.config.query_args,n,e,this.config.prompt_in_args),s=this.config.prompt_in_args?void 0:e;t?.onCommand?.(`${this.config.cli_command} ${o.join(" ")}`);let i=this.config.timeout?.query??6e5;return this.runProcess(o,t,s,i)}async execute(e,t){let n=t?.model??this.config.default_model??"default",o=Gs(this.config.execute_args,n,e,this.config.prompt_in_args),s=this.config.prompt_in_args?void 0:e;t?.onCommand?.(`${this.config.cli_command} ${o.join(" ")}`);let i=this.config.timeout?.execute??6e5;return this.runProcess(o,t,s,i)}runProcess(e,t,n,o){return new Promise((s,i)=>{let a={...process.env,...this.config.env??{}},d=Ze({command:this.config.cli_command,env:a,cwd:process.cwd(),resolution:this.config.prefer_local_bin?"local_first":"global_first",allowShellFallback:true}),l=et(d,e),c=child_process.spawn(l.command,l.argv,{env:a,shell:l.shell??false,stdio:["pipe","pipe","pipe"],windowsHide:l.windowsHide});n!==void 0&&c.stdin.write(n),c.stdin.end(),c.pid!==void 0&&t?.onPid?.(c.pid);let g="",f="",m="",w="";c.stdout.on("data",k=>{let y=k.toString();g+=y,m+=y;let v=m.split(`
35
35
  `);m=v.pop()??"";for(let E of v)E.trim()&&t?.onOutput?.(E,"stdout");}),c.stderr.on("data",k=>{let y=k.toString();f+=y,w+=y;let v=w.split(`
36
- `);w=v.pop()??"";for(let E of v)E.trim()&&t?.onOutput?.(E,"stderr");});let _=setTimeout(()=>{c.kill("SIGTERM"),i(new exports.ProviderError(`Plugin provider "${this.providerStr}" timed out after ${o}ms`,this.providerStr));},o);c.on("error",k=>{if(clearTimeout(_),k.code==="ENOENT"){let y=this.config.not_installed_message??`CLI command "${this.config.cli_command}" not found. Is ${this.config.id} installed?`;i(new exports.ProviderError(y,this.providerStr));}else i(new exports.ProviderError(`Spawn error: ${k.message}`,this.providerStr));}),c.on("close",k=>{clearTimeout(_),m.trim()&&t?.onOutput?.(m,"stdout"),w.trim()&&t?.onOutput?.(w,"stderr");let y=k??0;if(t?.onExitCode?.(y),this.config.error_patterns){let v=f||g;for(let E of this.config.error_patterns)if(v.includes(E.pattern)){i(new exports.ProviderError(E.message,this.providerStr));return}}if(k!==0){i(new exports.ProviderError(`Process exited with code ${k}: ${f.slice(0,500)}`,this.providerStr));return}s(g.trim());});})}};});u();u();u();function Hi(r){let e=o=>o.replace(/[.+^${}()|[\]\\]/g,"\\$&"),n=r.split("/").map(o=>o==="**"?".*":o.split("*").map(e).join("[^/]*"));return new RegExp(`^${n.join("\\/")}$`)}function ve(r,e){try{return Hi(e).test(r)}catch{return false}}u();u();var Bi=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()),Io=zod.z.object({include:zod.z.array(zod.z.string()).optional()}).optional(),qi=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:Bi.optional(),skills:Io}).catchall(zod.z.unknown()),zi=zod.z.object({id:zod.z.string(),name:zod.z.string(),workflow_id:zod.z.string(),description:zod.z.string().optional(),goal_id:zod.z.string().optional()}),Ki=zod.z.object({bin_resolution:zod.z.enum(["global_first","local_first"]).optional(),wi:zod.z.object({boards:zod.z.array(zod.z.unknown()).optional().catch(()=>{})}).catchall(zod.z.unknown()).optional().catch(()=>{})}).catchall(zod.z.unknown()),Oo=zod.z.object({agents:zod.z.array(qi).optional(),hooks:zod.z.array(zod.z.unknown()).optional(),settings:Ki.optional(),skills:zod.z.unknown().optional(),layouts:zod.z.record(zod.z.unknown()).optional(),documents:zod.z.record(zod.z.unknown()).optional()}).catchall(zod.z.unknown());var Xe=class extends Error{constructor(t,n){super(t);this.cause=n;this.name="ConfigLoadError";}cause};function wr(r){if(!r||typeof r!="string"||!r.trim())throw new Xe("YAML content must be a non-empty string");let e;try{e=jsYaml.load(r);}catch(o){throw new Xe(`YAML parse error: ${o.message}`,o)}let t=Ji(e),n=Oo.safeParse(t);if(!n.success)throw new Xe(`Config validation error: ${n.error.message}`);return n.data}function _r(r){let e;try{e=bs.readFileSync(r,"utf-8");}catch(t){throw new Xe(`Cannot read file: ${r}`,t)}return wr(e)}function Ji(r){if(!r||typeof r!="object")return {agents:[]};let e=r,t;if(e.agents&&typeof e.agents=="object"&&!Array.isArray(e.agents)){let o=e.agents;t=Object.entries(o).map(([s,i])=>({id:s,...i&&typeof i=="object"?i:{}}));}else if(Array.isArray(e.agents))t=e.agents;else return {...e,agents:[]};let n=t.map(o=>{if(o.provider===void 0&&o.inline&&typeof o.inline=="object"){let s=o.inline;if(s.provider!==void 0)return {...o,provider:s.provider}}return o});return {...e,agents:n}}u();var Ye=K.join("templates","agents"),Qe=K.join("templates","workflows");function Mo(){try{let e=(typeof oe=="function"?oe:module$1.createRequire(typeof __filename<"u"?__filename:process.cwd()+"/")).resolve("@crewx/sdk/package.json");return K.dirname(e)}catch{return null}}function wt(r){if(r&&bs.existsSync(r))return r;let e=process.env.CREWX_SDK_TEMPLATES_PATH;if(e&&bs.existsSync(e))return e;let t=Mo();if(t){let o=K.join(t,Ye);if(bs.existsSync(o))return o}let n=[K.join(__dirname,"..",Ye),K.join(__dirname,"..","..",Ye),K.join(__dirname,"..","..","..",Ye),K.join(process.cwd(),"packages","sdk",Ye),K.join(process.cwd(),Ye)];for(let o of n)if(bs.existsSync(o))return o;throw new Error(`[@crewx/sdk] Templates directory not found.
36
+ `);w=v.pop()??"";for(let E of v)E.trim()&&t?.onOutput?.(E,"stderr");});let _=setTimeout(()=>{c.kill("SIGTERM"),i(new exports.ProviderError(`Plugin provider "${this.providerStr}" timed out after ${o}ms`,this.providerStr));},o);c.on("error",k=>{if(clearTimeout(_),k.code==="ENOENT"){let y=this.config.not_installed_message??`CLI command "${this.config.cli_command}" not found. Is ${this.config.id} installed?`;i(new exports.ProviderError(y,this.providerStr));}else i(new exports.ProviderError(`Spawn error: ${k.message}`,this.providerStr));}),c.on("close",k=>{clearTimeout(_),m.trim()&&t?.onOutput?.(m,"stdout"),w.trim()&&t?.onOutput?.(w,"stderr");let y=k??0;if(t?.onExitCode?.(y),this.config.error_patterns){let v=f||g;for(let E of this.config.error_patterns)if(v.includes(E.pattern)){i(new exports.ProviderError(E.message,this.providerStr));return}}if(k!==0){i(new exports.ProviderError(`Process exited with code ${k}: ${f.slice(0,500)}`,this.providerStr));return}s(g.trim());});})}};});p();p();p();function Hi(r){let e=o=>o.replace(/[.+^${}()|[\]\\]/g,"\\$&"),n=r.split("/").map(o=>o==="**"?".*":o.split("*").map(e).join("[^/]*"));return new RegExp(`^${n.join("\\/")}$`)}function xe(r,e){try{return Hi(e).test(r)}catch{return false}}p();p();var Bi=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()),Oo=zod.z.object({include:zod.z.array(zod.z.string()).optional()}).optional(),qi=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:Bi.optional(),skills:Oo}).catchall(zod.z.unknown()),zi=zod.z.object({id:zod.z.string(),name:zod.z.string(),workflow_id:zod.z.string(),description:zod.z.string().optional(),goal_id:zod.z.string().optional()}),Ki=zod.z.object({bin_resolution:zod.z.enum(["global_first","local_first"]).optional(),wi:zod.z.object({boards:zod.z.array(zod.z.unknown()).optional().catch(()=>{})}).catchall(zod.z.unknown()).optional().catch(()=>{})}).catchall(zod.z.unknown()),Mo=zod.z.object({agents:zod.z.array(qi).optional(),hooks:zod.z.array(zod.z.unknown()).optional(),settings:Ki.optional(),skills:zod.z.unknown().optional(),layouts:zod.z.record(zod.z.unknown()).optional(),documents:zod.z.record(zod.z.unknown()).optional()}).catchall(zod.z.unknown());var Xe=class extends Error{constructor(t,n){super(t);this.cause=n;this.name="ConfigLoadError";}cause};function wr(r){if(!r||typeof r!="string"||!r.trim())throw new Xe("YAML content must be a non-empty string");let e;try{e=jsYaml.load(r);}catch(o){throw new Xe(`YAML parse error: ${o.message}`,o)}let t=Ji(e),n=Mo.safeParse(t);if(!n.success)throw new Xe(`Config validation error: ${n.error.message}`);return n.data}function _r(r){let e;try{e=bs.readFileSync(r,"utf-8");}catch(t){throw new Xe(`Cannot read file: ${r}`,t)}return wr(e)}function Ji(r){if(!r||typeof r!="object")return {agents:[]};let e=r,t;if(e.agents&&typeof e.agents=="object"&&!Array.isArray(e.agents)){let o=e.agents;t=Object.entries(o).map(([s,i])=>({id:s,...i&&typeof i=="object"?i:{}}));}else if(Array.isArray(e.agents))t=e.agents;else return {...e,agents:[]};let n=t.map(o=>{if(o.provider===void 0&&o.inline&&typeof o.inline=="object"){let s=o.inline;if(s.provider!==void 0)return {...o,provider:s.provider}}return o});return {...e,agents:n}}p();var Ye=K.join("templates","agents"),Qe=K.join("templates","workflows");function No(){try{let e=(typeof oe=="function"?oe:module$1.createRequire(typeof __filename<"u"?__filename:process.cwd()+"/")).resolve("@crewx/sdk/package.json");return K.dirname(e)}catch{return null}}function vt(r){if(r&&bs.existsSync(r))return r;let e=process.env.CREWX_SDK_TEMPLATES_PATH;if(e&&bs.existsSync(e))return e;let t=No();if(t){let o=K.join(t,Ye);if(bs.existsSync(o))return o}let n=[K.join(__dirname,"..",Ye),K.join(__dirname,"..","..",Ye),K.join(__dirname,"..","..","..",Ye),K.join(process.cwd(),"packages","sdk",Ye),K.join(process.cwd(),Ye)];for(let o of n)if(bs.existsSync(o))return o;throw new Error(`[@crewx/sdk] Templates directory not found.
37
37
  `+(t?` package anchor: ${K.join(t,Ye)}
38
38
  `:` package anchor: (unresolved)
39
39
  `)+n.map(o=>` candidate: ${o}`).join(`
40
40
  `)+`
41
- Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function nn(){let r=wt();return {yamlPath:K.join(r,"default.yaml"),dir:r}}function Qi(r){if(r&&bs.existsSync(r))return r;let e=process.env.CREWX_SDK_WORKFLOW_TEMPLATES_PATH;if(e&&bs.existsSync(e))return e;let t=Mo();if(t){let o=K.join(t,Qe);if(bs.existsSync(o))return o}let n=[K.join(__dirname,"..",Qe),K.join(__dirname,"..","..",Qe),K.join(__dirname,"..","..","..",Qe),K.join(process.cwd(),"packages","sdk",Qe),K.join(process.cwd(),Qe)];for(let o of n)if(bs.existsSync(o))return o;throw new Error(`[@crewx/sdk] Workflow templates directory not found.
41
+ Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function nn(){let r=vt();return {yamlPath:K.join(r,"default.yaml"),dir:r}}function Qi(r){if(r&&bs.existsSync(r))return r;let e=process.env.CREWX_SDK_WORKFLOW_TEMPLATES_PATH;if(e&&bs.existsSync(e))return e;let t=No();if(t){let o=K.join(t,Qe);if(bs.existsSync(o))return o}let n=[K.join(__dirname,"..",Qe),K.join(__dirname,"..","..",Qe),K.join(__dirname,"..","..","..",Qe),K.join(process.cwd(),"packages","sdk",Qe),K.join(process.cwd(),Qe)];for(let o of n)if(bs.existsSync(o))return o;throw new Error(`[@crewx/sdk] Workflow templates directory not found.
42
42
  `+(t?` package anchor: ${K.join(t,Qe)}
43
43
  `:` package anchor: (unresolved)
44
44
  `)+n.map(o=>` candidate: ${o}`).join(`
45
45
  `)+`
46
- Set CREWX_SDK_WORKFLOW_TEMPLATES_PATH or pass options.templatesPath.`)}u();var be=class extends Error{constructor(e,t){let n=t.length>0?` Available: ${t.join(", ")}`:"";super(`Agent not found: "${e}".${n}`),this.name="AgentNotFoundError";}},Zi={claude:{id:"claude",provider:"cli/claude"},copilot:{id:"copilot",provider:"cli/copilot"},codex:{id:"codex",provider:"cli/codex"}};function vr(r,e){let t=r.startsWith("@")?r.slice(1):r,n=e.find(s=>s.id===t);if(n)return n;let o=Zi[t];if(o)return o;throw new be(r,e.map(s=>s.id))}Ee();Pr();u();u();var Rt={"claude-fable-5":{input:10,cachedInput:1,output:50},"claude-opus-5":{input:5,cachedInput:.5,output:25},"claude-opus-4-8":{input:5,cachedInput:.5,output:25},"claude-opus-4-7":{input:5,cachedInput:.5,output:25},"claude-opus-4-6":{input:5,cachedInput:.5,output:25},"claude-sonnet-5":{input:2,cachedInput:.2,output:10},"claude-sonnet-4-6":{input:3,cachedInput:.3,output:15},"claude-haiku-4-5":{input:1,cachedInput:.1,output:5},"gpt-5.6-sol":{input:5,cachedInput:.5,output:30},"gpt-5.6-terra":{input:2.5,cachedInput:.25,output:15},"gpt-5.6-luna":{input:1,cachedInput:.1,output:6},"gpt-5.5":{input:5,cachedInput:1.25,output:15},"gpt-5.4":{input:2.5,cachedInput:.625,output:10},"gpt-5.3-codex":{input:1.5,cachedInput:.375,output:6},"gpt-5-mini":{input:.4,cachedInput:.1,output:1.6},"gpt-4.1":{input:2,cachedInput:.5,output:8},"gpt-4o":{input:2.5,cachedInput:1.25,output:10},"glm-5.2":{input:1.4,cachedInput:.26,output:4.4},"glm-5.1":{input:1.4,cachedInput:.26,output:4.4}};var $a={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"},xn={input:0,cachedInput:0,output:0},Kt={};function ts(r){Kt=r;}function En(r){let e=r.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 Ua(r){if(!r)return xn;let e=En(r),t=$a[e];if(t)return Kt[t]??Rt[t]??xn;if(Kt[e])return Kt[e];if(Rt[e])return Rt[e];let n={...Rt,...Kt};for(let o of Object.keys(n))if(e.includes(o))return n[o];return console.warn(`[pricing] Unknown model: ${r}, cost_usd=0`),xn}function ja(r,e,t,n=0,o){let s=Ua(t),i=Math.min(n,r),d=(r-i)*s.input/1e6,l=i*s.cachedInput/1e6,c=e*s.output/1e6;return d+l+c}function rs(r,e,t,n,o,s){return r&&r>0?r:!e&&!t?0:ja(e??0,t??0,o,n??0)}u();function br(r){if(!r||typeof r!="object"||Array.isArray(r))return;let e=r,t={};return typeof e.provider=="string"&&e.provider.trim()&&(t.provider=e.provider.trim()),typeof e.model=="string"&&e.model.trim()&&(t.model=e.model.trim()),typeof e.mode=="string"&&e.mode.trim()&&(t.mode=e.mode.trim()),typeof e.effort=="string"&&e.effort.trim()&&(t.effort=e.effort.trim()),t}function Sr(r){if(r==null||r===false)return {active:false};if(r===true)return {active:true};if(typeof r=="object"){let e=r.mode;return {active:true,mode:e==="count"||e==="latch"?e:void 0}}return {active:false}}function Ir(r,e,t,n){if(!n.active)return {active:false,crossProvider:false};if(!r||typeof r!="object"||Array.isArray(r))return {active:false,crossProvider:false};let s=r[e];if(!s||typeof s!="object"||Array.isArray(s))return {active:false,crossProvider:false};let i=br(s.overdrive);if(!i||!i.provider||!i.model)return {active:false,crossProvider:false};let a=i.provider!==t;return {active:true,provider:i.provider,model:i.model,mode:i.mode,effort:i.effort,crossProvider:a}}function Or(r,e){if(!r||typeof r!="object"||Array.isArray(r))return {};let n=r[e];if(!n||typeof n!="object"||Array.isArray(n))return {};let o=n,s={};return o.provider!==void 0&&(typeof o.provider=="string"?o.provider.trim()&&(s.provider=o.provider.trim()):console.warn(`[crewx] options.${e}.provider must be a single string; ignoring non-string value (${JSON.stringify(o.provider)})`)),typeof o.model=="string"&&o.model.trim()&&(s.model=o.model.trim()),s}u();u();var Wa=[/^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],Ha=/[;|&`$(){}!><\n\r]/,Ba=2,qa=["*","**","*:*","* *","**/*"];function za(){let r={};for(let[e,t]of Object.entries(process.env))t!==void 0&&(Wa.some(n=>n.test(e))||(r[e]=t));return r}function Ka(r){if(Ha.test(r))throw new Error(`exec blocked: shell metacharacter detected in "${r}"`)}function Ga(r){return /^npx\s+@crewx\/[\w-]+/.test(r)}function Va(r){if(qa.includes(r.trim()))throw new Error(`exec config error: overly broad pattern "${r}" is not allowed`);if(!/^[\w./@-]/.test(r))throw new Error("exec config error: pattern must start with a command name")}function Ja(r,e){let t=e.allow??[],n=e.deny??[];for(let o of [...t,...n])Va(o);return n.some(o=>ve(r,o))?false:Ga(r)?true:t.some(o=>ve(r,o))}var ns=false;function Xa(r){ns=r;}function Gt(r){if(!ns)return;let e=JSON.stringify({span:"template_exec",...r,timestamp:new Date().toISOString()});console.error(e);}function Ya(r){let e=[],t="",n=false,o=false;for(let s=0;s<r.length;s++){let i=r[s];i==="'"&&!o?n=!n:i==='"'&&!n?o=!o:i===" "&&!n&&!o?t.length>0&&(e.push(t),t=""):t+=i;}return t.length>0&&e.push(t),e}function os(r,e){let t=Date.now(),n=parseInt(process.env.CREWX_EXEC_DEPTH??"0",10);if(isNaN(n)||n>=Ba)return Gt({command:r,status:"denied",reason:"invalid or max recursion depth"}),"(exec blocked: max recursion depth reached)";try{Ka(r);}catch{return Gt({command:r,status:"denied",reason:"shell metacharacter detected"}),`(exec blocked: shell metacharacter detected in "${r}")`}if(!Ja(r,e))return Gt({command:r,status:"denied",reason:"not in allow list"}),`(exec blocked: ${r})`;try{let o=Ya(r),[s,...i]=o;if(!s)return `(exec failed: ${r})`;let a=za(),d=child_process.execFileSync(s,i,{timeout:e.timeout??5e3,maxBuffer:64*1024,encoding:"utf-8",env:{...a,CREWX_EXEC_DEPTH:String(n+1)},stdio:["pipe","pipe","pipe"]}),l=Date.now()-t;return Gt({command:r,status:"allowed",allowed_by:"policy",duration_ms:l}),`<exec-output cmd="${r}">
46
+ Set CREWX_SDK_WORKFLOW_TEMPLATES_PATH or pass options.templatesPath.`)}p();var be=class extends Error{constructor(e,t){let n=t.length>0?` Available: ${t.join(", ")}`:"";super(`Agent not found: "${e}".${n}`),this.name="AgentNotFoundError";}},Zi={claude:{id:"claude",provider:"cli/claude"},copilot:{id:"copilot",provider:"cli/copilot"},codex:{id:"codex",provider:"cli/codex"}};function vr(r,e){let t=r.startsWith("@")?r.slice(1):r,n=e.find(s=>s.id===t);if(n)return n;let o=Zi[t];if(o)return o;throw new be(r,e.map(s=>s.id))}Re();Pr();p();p();var Ct={"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:1.25,output:15},"gpt-5.4":{input:2.5,cachedInput:.625,output:10},"gpt-5.3-codex":{input:1.5,cachedInput:.375,output:6},"gpt-5-mini":{input:.4,cachedInput:.1,output:1.6},"gpt-4.1":{input:2,cachedInput:.5,output:8},"gpt-4o":{input:2.5,cachedInput:1.25,output:10},"glm-5.2":{input:1.4,cachedInput:.26,output:4.4},"glm-5.1":{input:1.4,cachedInput:.26,output:4.4}};var $a={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"},xn={input:0,cachedInput:0,output:0},Kt={};function rs(r){Kt=r;}function En(r){let e=r.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 Ua(r){if(!r)return xn;let e=En(r),t=$a[e];if(t)return Kt[t]??Ct[t]??xn;if(Kt[e])return Kt[e];if(Ct[e])return Ct[e];let n={...Ct,...Kt};for(let o of Object.keys(n))if(e.includes(o))return n[o];return console.warn(`[pricing] Unknown model: ${r}, cost_usd=0`),xn}function ja(r,e,t,n=0,o){let s=Ua(t),i=Math.min(n,r),d=(r-i)*s.input/1e6,l=i*s.cachedInput/1e6,c=e*s.output/1e6;return d+l+c}function ns(r,e,t,n,o,s){return r&&r>0?r:!e&&!t?0:ja(e??0,t??0,o,n??0)}p();function br(r){if(!r||typeof r!="object"||Array.isArray(r))return;let e=r,t={};return typeof e.provider=="string"&&e.provider.trim()&&(t.provider=e.provider.trim()),typeof e.model=="string"&&e.model.trim()&&(t.model=e.model.trim()),typeof e.mode=="string"&&e.mode.trim()&&(t.mode=e.mode.trim()),typeof e.effort=="string"&&e.effort.trim()&&(t.effort=e.effort.trim()),t}function Sr(r){if(r==null||r===false)return {active:false};if(r===true)return {active:true};if(typeof r=="object"){let e=r.mode;return {active:true,mode:e==="count"||e==="latch"?e:void 0}}return {active:false}}function Ir(r,e,t,n){if(!n.active)return {active:false,crossProvider:false};if(!r||typeof r!="object"||Array.isArray(r))return {active:false,crossProvider:false};let s=r[e];if(!s||typeof s!="object"||Array.isArray(s))return {active:false,crossProvider:false};let i=br(s.overdrive);if(!i||!i.provider||!i.model)return {active:false,crossProvider:false};let a=i.provider!==t;return {active:true,provider:i.provider,model:i.model,mode:i.mode,effort:i.effort,crossProvider:a}}function Or(r,e){if(!r||typeof r!="object"||Array.isArray(r))return {};let n=r[e];if(!n||typeof n!="object"||Array.isArray(n))return {};let o=n,s={};return o.provider!==void 0&&(typeof o.provider=="string"?o.provider.trim()&&(s.provider=o.provider.trim()):console.warn(`[crewx] options.${e}.provider must be a single string; ignoring non-string value (${JSON.stringify(o.provider)})`)),typeof o.model=="string"&&o.model.trim()&&(s.model=o.model.trim()),s}p();p();var Fa=[/^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],Ha=/[;|&`$(){}!><\n\r]/,Ba=2,qa=["*","**","*:*","* *","**/*"];function za(){let r={};for(let[e,t]of Object.entries(process.env))t!==void 0&&(Fa.some(n=>n.test(e))||(r[e]=t));return r}function Ka(r){if(Ha.test(r))throw new Error(`exec blocked: shell metacharacter detected in "${r}"`)}function Ga(r){return /^npx\s+@crewx\/[\w-]+/.test(r)}function Va(r){if(qa.includes(r.trim()))throw new Error(`exec config error: overly broad pattern "${r}" is not allowed`);if(!/^[\w./@-]/.test(r))throw new Error("exec config error: pattern must start with a command name")}function Ja(r,e){let t=e.allow??[],n=e.deny??[];for(let o of [...t,...n])Va(o);return n.some(o=>xe(r,o))?false:Ga(r)?true:t.some(o=>xe(r,o))}var os=false;function Xa(r){os=r;}function Gt(r){if(!os)return;let e=JSON.stringify({span:"template_exec",...r,timestamp:new Date().toISOString()});console.error(e);}function Ya(r){let e=[],t="",n=false,o=false;for(let s=0;s<r.length;s++){let i=r[s];i==="'"&&!o?n=!n:i==='"'&&!n?o=!o:i===" "&&!n&&!o?t.length>0&&(e.push(t),t=""):t+=i;}return t.length>0&&e.push(t),e}function ss(r,e){let t=Date.now(),n=parseInt(process.env.CREWX_EXEC_DEPTH??"0",10);if(isNaN(n)||n>=Ba)return Gt({command:r,status:"denied",reason:"invalid or max recursion depth"}),"(exec blocked: max recursion depth reached)";try{Ka(r);}catch{return Gt({command:r,status:"denied",reason:"shell metacharacter detected"}),`(exec blocked: shell metacharacter detected in "${r}")`}if(!Ja(r,e))return Gt({command:r,status:"denied",reason:"not in allow list"}),`(exec blocked: ${r})`;try{let o=Ya(r),[s,...i]=o;if(!s)return `(exec failed: ${r})`;let a=za(),d=child_process.execFileSync(s,i,{timeout:e.timeout??5e3,maxBuffer:64*1024,encoding:"utf-8",env:{...a,CREWX_EXEC_DEPTH:String(n+1)},stdio:["pipe","pipe","pipe"]}),l=Date.now()-t;return Gt({command:r,status:"allowed",allowed_by:"policy",duration_ms:l}),`<exec-output cmd="${r}">
47
47
  ${d.trim()}
48
- </exec-output>`}catch{return Gt({command:r,status:"error",reason:"execution failed"}),`(exec failed: ${r})`}}u();function ss(r){return r==null?"":String(r)}u();function is(r,e){return `\`\`\`${e?.hash?.lang??""}
48
+ </exec-output>`}catch{return Gt({command:r,status:"error",reason:"execution failed"}),`(exec failed: ${r})`}}p();function is(r){return r==null?"":String(r)}p();function as(r,e){return `\`\`\`${e?.hash?.lang??""}
49
49
  ${r??""}
50
- \`\`\``}u();function An(r,e){if(!r)return "";if(r.length<=e)return r;let t=r.length-e;return `${r.substring(0,e)} (...+${t} chars)`}function Rn(r){return Array.isArray(r)||typeof r=="string"?r.length:0}function Tn(r){return typeof r!="string"?"":r.replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;")}var as=["B","KB","MB","GB"];function Cn(r){if(r===0)return "0 B";let e=Math.min(Math.floor(Math.log(r)/Math.log(1024)),as.length-1);return `${Math.round(r/Math.pow(1024,e)*100)/100} ${as[e]}`}function Pn(r){if(!r)return "";try{let e=r instanceof Date?r:new Date(r);return isNaN(e.getTime())?"":e.toLocaleString("ko-KR",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}catch{return ""}}var Vt=class{hbs;execPolicy;execEnabled;constructor(e={}){this.hbs=Ae__namespace.create(),this.execPolicy=e.execPolicy??{allow:[],deny:[]},this.execEnabled=e.execEnabled??true,this.registerHelpers();}registerHelpers(){let e=this.hbs,t=this.execPolicy,n=this.execEnabled;e.registerHelper("exec",function(o){return typeof o!="string"?"":n?new e.SafeString(os(o,t)):"(exec disabled)"}),e.registerHelper("include",function(o){return new e.SafeString(ss(o))}),e.registerHelper("fenced_code",function(o,s){return new e.SafeString(is(o,s))}),e.registerHelper("eq",function(o,s){return o===s}),e.registerHelper("ne",function(o,s){return o!==s}),e.registerHelper("and",function(o,s){return o&&s}),e.registerHelper("or",function(o,s){return o||s}),e.registerHelper("not",function(o){return !o}),e.registerHelper("contains",function(o,s){return Array.isArray(o)&&o.includes(s)}),e.registerHelper("json",function(o){return JSON.stringify(o,null,2)}),e.registerHelper("truncate",function(o,s){return An(o,s)}),e.registerHelper("length",function(o){return Rn(o)}),e.registerHelper("escapeHandlebars",function(o){return new e.SafeString(Tn(o))}),e.registerHelper("formatFileSize",function(o){return Cn(o)}),e.registerHelper("formatTimestamp",function(o){return Pn(o)});}async render(e,t={}){return this.hbs.compile(e,{noEscape:true})(t)}};u();u();var Mr=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 []}}},it=new Mr;var at=class{docs=new Map;fs;constructor(e){this.fs=e??it;}async load(e,t){if(e)for(let[n,o]of Object.entries(e)){let s=o;if(typeof s=="string")this.docs.set(n,{content:s});else if(s&&typeof s=="object"){let i=s;"content"in i&&typeof i.content=="string"?this.docs.set(n,{content:i.content}):"path"in i&&typeof i.path=="string"?await this.loadFromFile(n,i.path,t):console.warn(`[DocumentLoader] Skipping '${n}': unsupported format`);}else console.warn(`[DocumentLoader] Skipping '${n}': unsupported format`);}}async getContent(e){return this.docs.get(e)?.content}async getToc(e){let t=this.docs.get(e);if(!t)return;let n=[];for(let o of t.content.split(`
50
+ \`\`\``}p();function An(r,e){if(!r)return "";if(r.length<=e)return r;let t=r.length-e;return `${r.substring(0,e)} (...+${t} chars)`}function Rn(r){return Array.isArray(r)||typeof r=="string"?r.length:0}function Tn(r){return typeof r!="string"?"":r.replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;")}var ds=["B","KB","MB","GB"];function Cn(r){if(r===0)return "0 B";let e=Math.min(Math.floor(Math.log(r)/Math.log(1024)),ds.length-1);return `${Math.round(r/Math.pow(1024,e)*100)/100} ${ds[e]}`}function Pn(r){if(!r)return "";try{let e=r instanceof Date?r:new Date(r);return isNaN(e.getTime())?"":e.toLocaleString("ko-KR",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}catch{return ""}}var Vt=class{hbs;execPolicy;execEnabled;constructor(e={}){this.hbs=Te__namespace.create(),this.execPolicy=e.execPolicy??{allow:[],deny:[]},this.execEnabled=e.execEnabled??true,this.registerHelpers();}registerHelpers(){let e=this.hbs,t=this.execPolicy,n=this.execEnabled;e.registerHelper("exec",function(o){return typeof o!="string"?"":n?new e.SafeString(ss(o,t)):"(exec disabled)"}),e.registerHelper("include",function(o){return new e.SafeString(is(o))}),e.registerHelper("fenced_code",function(o,s){return new e.SafeString(as(o,s))}),e.registerHelper("eq",function(o,s){return o===s}),e.registerHelper("ne",function(o,s){return o!==s}),e.registerHelper("and",function(o,s){return o&&s}),e.registerHelper("or",function(o,s){return o||s}),e.registerHelper("not",function(o){return !o}),e.registerHelper("contains",function(o,s){return Array.isArray(o)&&o.includes(s)}),e.registerHelper("json",function(o){return JSON.stringify(o,null,2)}),e.registerHelper("truncate",function(o,s){return An(o,s)}),e.registerHelper("length",function(o){return Rn(o)}),e.registerHelper("escapeHandlebars",function(o){return new e.SafeString(Tn(o))}),e.registerHelper("formatFileSize",function(o){return Cn(o)}),e.registerHelper("formatTimestamp",function(o){return Pn(o)});}async render(e,t={}){return this.hbs.compile(e,{noEscape:true})(t)}};p();p();var Mr=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 []}}},it=new Mr;var at=class{docs=new Map;fs;constructor(e){this.fs=e??it;}async load(e,t){if(e)for(let[n,o]of Object.entries(e)){let s=o;if(typeof s=="string")this.docs.set(n,{content:s});else if(s&&typeof s=="object"){let i=s;"content"in i&&typeof i.content=="string"?this.docs.set(n,{content:i.content}):"path"in i&&typeof i.path=="string"?await this.loadFromFile(n,i.path,t):console.warn(`[DocumentLoader] Skipping '${n}': unsupported format`);}else console.warn(`[DocumentLoader] Skipping '${n}': unsupported format`);}}async getContent(e){return this.docs.get(e)?.content}async getToc(e){let t=this.docs.get(e);if(!t)return;let n=[];for(let o of t.content.split(`
51
51
  `)){let s=/^(#{1,6})\s+(.+)$/.exec(o.trim());s&&n.push({depth:s[1].length,text:s[2].trim()});}if(n.length!==0)return n.map(({depth:o,text:s})=>`${" ".repeat(o-1)}- ${s}`).join(`
52
- `)}getPath(e){return this.docs.get(e)?.path}getNames(){return Array.from(this.docs.keys())}async buildContext(){let e={};for(let t of this.docs.keys()){let n=await this.getContent(t)??"",o=await this.getToc(t),s=this.getPath(t);e[t]={content:n,toc:o,...s?{path:s}:{}};}return e}async loadFromFile(e,t,n){try{let o=this.resolve(t,n),s=await this.fs.readFile(o);this.docs.set(e,{content:s,path:o});}catch(o){let s=o instanceof Error?o.message:String(o);console.warn(`[DocumentLoader] Failed to load '${e}' from '${t}': ${s}`);}}resolve(e,t){return this.fs.isAbsolute(e)?e:t?this.fs.resolvePath(t,e):this.fs.resolvePath(e)}};u();u();var ae=class extends Error{constructor(t,n,o){super(t);this.layoutId=n;this.cause=o;this.name="LayoutLoadError";}layoutId;cause},Me=class extends Error{constructor(t,n=[],o){super(t);this.errors=n;this.cause=o;this.name="PropsValidationError";}errors;cause};var ad={validationMode:"lenient",fallbackLayoutId:"crewx/default"},Jt=class{layouts=new Map;options;constructor(e){this.options={...ad,...e,templatesPath:e?.templatesPath??wt()},this.loadAllLayouts();}load(e,t){let n=this.layouts.get(e);if(!n){let o=this.normalizeLayoutId(e);n=this.layouts.get(o);}if(!n&&(console.warn(`Layout not found: ${e}, falling back to ${this.options.fallbackLayoutId}`),n=this.layouts.get(this.options.fallbackLayoutId),!n))throw new ae(`Fallback layout not found: ${this.options.fallbackLayoutId}`,this.options.fallbackLayoutId);return t&&Object.keys(t).length>0?{...n,defaultProps:{...n.defaultProps,...t}}:n}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 ae("Layout ID must be a non-empty string",e);let n=typeof t=="string"?{template:t}:t,o=typeof n.template=="string"?n.template:"";if(!o||o.trim().length===0)throw new ae(`Custom layout template is empty for ${e}`,e);let s=n.propsSchema||{},i=this.extractDefaultProps(s),a=n.defaultProps||{},d={id:e,version:n.version||"1.0.0",description:n.description||`Custom layout ${e}`,template:o,propsSchema:this.parsePropsSchema(s),defaultProps:{...i,...a}},l=this.layouts.get(e),c=l?.template===o&&JSON.stringify(l?.defaultProps??{})===JSON.stringify(d.defaultProps??{})&&JSON.stringify(l?.propsSchema??{})===JSON.stringify(d.propsSchema??{});this.layouts.set(e,d),process.env.CREWX_VERBOSE==="1"&&(l?c||console.error(`Updated custom layout: ${e}`):console.error(`Registered custom layout: ${e}`));}registerLayouts(e){for(let[t,n]of Object.entries(e))try{this.registerLayout(t,n);}catch(o){console.warn(`Failed to register custom layout ${t}:`,o instanceof Error?o.message:o);}}loadAllLayouts(){let e=this.options.templatesPath;if(!bs.existsSync(e))throw new ae(`Templates directory not found: ${e}`,void 0,new Error(`Directory does not exist: ${e}`));try{let t=bs.readdirSync(e).filter(n=>n.endsWith(".yaml")||n.endsWith(".yml"));t.length===0&&console.warn(`No layout files found in ${e}`);for(let n of t){let o=n.replace(/\.(yaml|yml)$/,""),s=K__namespace.join(e,n);try{let i=this.loadLayoutFile(s,o),a=`crewx/${o}`;this.layouts.set(a,i),a!=="crewx/minimal"&&process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded layout: ${a} from ${n}`);}catch(i){console.error(`Failed to load layout file ${n}:`,i);}}process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded ${this.layouts.size} layouts from ${e}`);}catch(t){throw new ae(`Failed to read layouts directory: ${e}`,void 0,t instanceof Error?t:new Error(String(t)))}}loadLayoutFile(e,t){try{let n=bs.readFileSync(e,"utf-8");if(!n||n.trim().length===0)throw console.warn(`Empty YAML file: ${e}, will use fallback`),new ae(`Empty YAML file: ${e}`,t,new Error("File content is empty"));let o=jsYaml.load(n);if(!o||typeof o!="object")throw console.warn(`Invalid YAML content in ${e} (parsed as ${typeof o}), will use fallback`),new ae(`Invalid or empty YAML in ${e}`,t,new Error("YAML parsing returned null/undefined or non-object"));if(o.layouts&&typeof o.layouts=="object"){let s=this.resolveLayoutEntry(o.layouts,t);if(!s||s.template.trim().length===0)throw console.warn(`Empty or missing layout template in ${e} for ${t}`),new ae(`Layout template not found or empty in layouts map: ${t}`,t);let i=s.propsSchema||o.propsSchema||{};return {id:`crewx/${t}`,version:o.version||"1.0.0",description:o.description||`CrewX ${t} layout`,template:s.template,propsSchema:this.parsePropsSchema(i),defaultProps:this.extractDefaultProps(i)}}else {if(!o.template||typeof o.template=="string"&&o.template.trim().length===0)throw console.warn(`Empty or missing template field in ${e}`),new ae(`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(n){throw new ae(`Failed to load layout file: ${e}`,t,n instanceof Error?n:new Error(String(n)))}}parsePropsSchema(e){let t={};for(let[n,o]of Object.entries(e))typeof o=="object"&&o!==null&&(t[n]=o);return t}extractDefaultProps(e){let t={};for(let[n,o]of Object.entries(e))o&&typeof o=="object"&&("defaultValue"in o?t[n]=o.defaultValue:"default"in o&&(t[n]=o.default));return t}normalizeLayoutId(e){return e?e.includes("/")?e:`crewx/${e}`:this.options.fallbackLayoutId}resolveLayoutEntry(e,t){let n=new Set;if(t)if(n.add(t),t.includes("/")){let o=t.split("/"),s=o[o.length-1];s&&n.add(s);}else n.add(`crewx/${t}`);n.add("default");for(let o of n){let s=e[o];if(typeof s=="string"&&s.trim().length>0)return {template:s};if(s&&typeof s=="object"&&typeof s.template=="string"&&s.template.trim().length>0)return {template:s.template,propsSchema:s.propsSchema}}for(let o of Object.values(e)){if(typeof o=="string"&&o.trim().length>0)return {template:o};let s=o;if(s&&typeof s=="object"&&typeof s.template=="string"&&s.template.trim().length>0)return {template:s.template,propsSchema:s.propsSchema}}}};u();u();u();function dt(r){return String(Math.floor(Math.abs(r))).padStart(2,"0")}function Xt(r){if(!(r instanceof Date)||Number.isNaN(r.getTime()))return "";let e=-r.getTimezoneOffset(),t=e>=0?"+":"-";return `${r.getFullYear()}-${dt(r.getMonth()+1)}-${dt(r.getDate())}T${dt(r.getHours())}:${dt(r.getMinutes())}:${dt(r.getSeconds())}${t}${dt(e/60)}:${dt(e%60)}`}function dd(r){return r.map(e=>{let t=typeof e?.timestamp=="number"?e.timestamp:null;return t===null?e:{...e,created_at:Xt(new Date(t))}})}function ld(r){let e=[];for(let t of r)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 us(...r){let e=r[r.length-1],t=r[0],n=r[1],o=typeof r[2]=="string"?r[2]:"",s=typeof r[3]=="string"?r[3]:"";if(!Array.isArray(t)||t.length===0||!(e&&typeof e.fn=="function"))return "";let a=ld(t),d=a.length>0?a[0]:"",l=Date.now(),c={messages:dd(t),platform:typeof n=="string"?n:"",messagesCount:t.length,agentIds:a,primaryAgentId:d,currentAgentId:o,threadId:s,now:Xt(new Date(l))};return e.fn(c)}u();var Yt=class{defaultMode;constructor(e={}){this.defaultMode=e.defaultMode??"lenient";}validate(e,t,n=this.defaultMode){let o=[],s=this.validateObject(e??{},t,n,["props"],o);if(o.length>0&&n==="strict")throw new Me("Props validation failed in strict mode",o);return {valid:o.length===0,props:s,errors:o}}validateObject(e,t,n,o,s){let i={};if(n==="strict")for(let a of Object.keys(e))t[a]||s.push({path:this.buildPath([...o,a]),message:`Unknown prop '${a}'`,value:e[a]});for(let[a,d]of Object.entries(t)){let l=[...o,a],c=e[a],g=this.resolveProp(c,d,l,n,s);g.shouldAssign&&(i[a]=g.value);}return i}resolveProp(e,t,n,o,s){let i=this.buildPath(n);if(this.isNil(e)){if(t.isRequired&&s.push({path:i,message:`Required prop '${n[n.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,n,o,s);if(!a.valid){if(t.type==="shape"&&a.value&&this.isPlainObject(a.value))return {shouldAssign:true,value:a.value};if(s.push({path:i,message:a.error??"Invalid value",value:e}),t.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(t.defaultValue)};if(t.type==="shape"&&t.shape){let d=this.applyDefaults(t.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}return {shouldAssign:true,value:a.value}}validateType(e,t,n,o,s){let{type:i}=t;switch(i){case "string":return this.validateString(e,t);case "number":return this.validateNumber(e,t);case "bool":return this.validateBoolean(e);case "array":return this.validateArray(e,t);case "arrayOf":return this.validateArrayOf(e,t,n,o,s);case "object":return this.validatePlainObject(e);case "shape":return this.validateShape(e,t,n,o,s);case "oneOfType":return this.validateOneOfType(e,t);case "func":return this.validateFunction(e);case "node":return {valid:true,value:e};default:return {valid:true,value:e}}}validateString(e,t){return typeof e!="string"?{valid:false,error:`Expected string, got ${this.describeType(e)}`}:t.oneOf&&!t.oneOf.includes(e)?{valid:false,error:`Expected one of: ${t.oneOf.join(", ")}`}:t.minLength!==void 0&&e.length<t.minLength?{valid:false,error:`String length must be >= ${t.minLength}`}:t.maxLength!==void 0&&e.length>t.maxLength?{valid:false,error:`String length must be <= ${t.maxLength}`}:t.pattern&&!new RegExp(t.pattern).test(e)?{valid:false,error:`String does not match pattern ${t.pattern}`}:{valid:true,value:e}}validateNumber(e,t){return typeof e!="number"||Number.isNaN(e)?{valid:false,error:`Expected number, got ${this.describeType(e)}`}:t.min!==void 0&&e<t.min?{valid:false,error:`Number must be >= ${t.min}`}:t.max!==void 0&&e>t.max?{valid:false,error:`Number must be <= ${t.max}`}:t.oneOf&&!t.oneOf.includes(e)?{valid:false,error:`Expected one of: ${t.oneOf.join(", ")}`}:{valid:true,value:e}}validateBoolean(e){return typeof e!="boolean"?{valid:false,error:`Expected boolean, got ${this.describeType(e)}`}:{valid:true,value:e}}validateArray(e,t){return Array.isArray(e)?t.minLength!==void 0&&e.length<t.minLength?{valid:false,error:`Array length must be >= ${t.minLength}`}:t.maxLength!==void 0&&e.length>t.maxLength?{valid:false,error:`Array length must be <= ${t.maxLength}`}:{valid:true,value:[...e]}:{valid:false,error:`Expected array, got ${this.describeType(e)}`}}validateArrayOf(e,t,n,o,s){let i=this.validateArray(e,t);if(!i.valid)return i;let a=[],d=t.itemType,l=t.itemOneOf,c=s.length;return i.value.forEach((g,f)=>{let m=[...n,String(f)];if(d){let w=this.validateType(g,{type:d},m,o,s);w.valid?a.push(w.value):s.push({path:this.buildPath(m),message:w.error??"Invalid array item",value:g});}else a.push(g);l&&!l.includes(g)&&s.push({path:this.buildPath(m),message:`Array item must be one of: ${l.join(", ")}`,value:g});}),{valid:s.length===c,value:a}}validatePlainObject(e){return this.isPlainObject(e)?{valid:true,value:{...e}}:{valid:false,error:`Expected object, got ${this.describeType(e)}`}}validateFunction(e){return typeof e!="function"?{valid:false,error:`Expected function, got ${this.describeType(e)}`}:{valid:true,value:e}}validateShape(e,t,n,o,s){if(!this.isPlainObject(e))return {valid:false,error:`Expected object, got ${this.describeType(e)}`};let i=s.length,a=this.validateObject(e,t.shape??{},o,n,s);return {valid:s.length===i,value:a}}validateOneOfType(e,t){let n=t.types??[];return n.some(s=>this.matchesType(e,s))?{valid:true,value:e}:{valid:false,error:`Value does not match any allowed type: ${n.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[n,o]of Object.entries(e)){if(o.defaultValue!==void 0){t[n]=this.cloneValue(o.defaultValue);continue}if(o.type==="shape"&&o.shape){let s=this.applyDefaults(o.shape);Object.keys(s).length>0&&(t[n]=s);}}return t}cloneValue(e){if(Array.isArray(e))return e.map(t=>this.cloneValue(t));if(this.isPlainObject(e)){let t={};for(let[n,o]of Object.entries(e))t[n]=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 Qt=class{handlebars;propsValidator;constructor(e){this.handlebars=Ae__namespace.default.create(),this.propsValidator=e??new Yt,this.registerHelpers();}render(e,t,n={}){try{let o=this.prepareRenderContext(e,t,n);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,n="lenient"){return this.executeValidation(e,t,n)}resolveProps(e,t,n="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,n)}prepareRenderContext(e,t,n){let{validationMode:o="lenient",skipValidation:s=false}=n,i=s?this.mergeProps(e.defaultProps,t.props):this.resolveProps(e,t.props,o).props;return {...t,vars:this.sanitizeVars(t.vars),props:i}}registerHelpers(){this.handlebars.registerHelper("formatConversation",us),Ae__namespace.default.helpers.each&&this.handlebars.registerHelper("each",Ae__namespace.default.helpers.each),Ae__namespace.default.helpers.if&&this.handlebars.registerHelper("if",Ae__namespace.default.helpers.if),Ae__namespace.default.helpers.unless&&this.handlebars.registerHelper("unless",Ae__namespace.default.helpers.unless),Ae__namespace.default.helpers.with&&this.handlebars.registerHelper("with",Ae__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 Ae__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"],n=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/Math.pow(1024,n)*100)/100+" "+t[n]});}executeValidation(e,t,n){try{return this.propsValidator.validate(e,t,n)}catch(o){if(o instanceof Me&&o.errors&&o.errors.length>0){let s=o.errors[0];if(s)throw new Me(s.message,o.errors)}throw o}}mergeProps(e,t){let n=this.cloneDeep(e??{});return t?this.deepMerge(n,t):n}deepMerge(e,t){for(let[n,o]of Object.entries(t)){if(this.isPlainObject(o)){let s=e[n];e[n]=this.deepMerge(this.isPlainObject(s)?s:{},o);continue}if(Array.isArray(o)){e[n]=this.cloneDeep(o);continue}e[n]=o;}return e}cloneDeep(e){if(Array.isArray(e))return e.map(t=>this.cloneDeep(t));if(this.isPlainObject(e)){let t={};for(let[n,o]of Object.entries(e))t[n]=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 n=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(n);}return t}};u();var bn="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function cd(r){let e=crypto$1.randomBytes(r*2),t="";for(let n=0;n<e.length&&t.length<r;n++){let o=e[n];o<248&&(t+=bn[o%62]);}for(;t.length<r;)t+=bn[crypto$1.randomBytes(1)[0]%62];return t}function lt(r){return `${r}_${cd(8)}`}function ud(r,e){let{createHash:t}=oe("crypto"),n=t("sha256").update(e).digest(),o=Buffer.alloc(8);for(let i=0;i<32;i++)o[i%8]^=n[i];let s="";for(let i of o)s+=bn[i%62];return `${r}_${s}`}u();function Sn(r){let e=t=>String(t).padStart(2,"0");return `${r.getFullYear()}${e(r.getMonth()+1)}${e(r.getDate())}T${e(r.getHours())}${e(r.getMinutes())}${e(r.getSeconds())}`}u();function fs(r,e){return t=>{try{let n=e(t);n instanceof Promise&&n.catch(o=>{console.error(`[crewx] event listener error (${r}): ${o instanceof Error?o.message:String(o)}`);});}catch(n){console.error(`[crewx] event listener error (${r}): ${n instanceof Error?n.message:String(n)}`);}}}var Zt=class{_emitter=new events.EventEmitter;on(e,t){let n=fs(e,t);return this._emitter.on(e,n),()=>this._emitter.off(e,n)}once(e,t){let n=fs(e,t);return this._emitter.once(e,n),()=>this._emitter.off(e,n)}emit(e,t){this._emitter.emit(e,t);}};u();function In(r){let e=new Map,t=n=>n.startsWith(`${r}::`)?n:`${r}::${n}`;return {async get(n){let o=e.get(t(n));return o?o.value:void 0},async set(n,o){e.set(t(n),{value:o});},async delete(n){return e.delete(t(n))},async list(n){let o=n?t(n):`${r}::`,s=[];for(let i of e.keys())i.startsWith(o)&&s.push(i.slice(r.length+2));return s}}}u();var On=new async_hooks.AsyncLocalStorage;function gd(){return On}function md(r,e){return On.run(r,e)}function Mn(r){let e=r.log??r.logger??{debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},t=r.agentRunner??{run:async()=>({output:""})},n=r.db??{get:async()=>{},set:async()=>{},delete:async()=>false,list:async()=>[]},o=r.storage??{put:async()=>"",get:async()=>{},delete:async()=>false},s=r.audit??{log:async()=>{}},i=r.onInbound??(async()=>({accepted:true})),a=r.onEmitEvent??(async()=>({accepted:true})),d=r.onUpdateMessage??(async()=>{}),l=r.onResolveUser??(async f=>({userId:f,displayName:f})),c=async f=>{let m=On.getStore();if(!m){e.warn("respondSync called outside sync window \u2014 graceful degradation (no-op)",{textPreview:typeof f=="object"&&"text"in f?f.text.slice(0,80):void 0});return}let w="text"in f?f.text:"";m.res.status(200).json({text:w});},g=r.httpRouter??{registerRoute:()=>{e.warn("httpRouter not configured \u2014 registerRoute is a no-op");}};return {instanceId:r.instanceId,config:r.config,capabilities:r.capabilities,log:e,agentRunner:t,db:n,storage:o,audit:s,abortSignal:r.abortSignal??new AbortController().signal,httpRouter:g,inbound:i,emitEvent:a,updateMessage:d,resolveUser:l,respondSync:c}}je();u();var hd=/^-\s*Status:\s*active/m,yd=/^---\n([\s\S]*?)\n---/,wd=/^type:\s*goal\s*$/m;async function gs(r,e=it,t){let n=typeof t=="string"?[t]:Array.isArray(t)?t:void 0;if(n){let a=[];for(let d of n){let l=e.resolvePath(r,d);await e.exists(l)&&a.push(await e.readFile(l));}return a.join(`
52
+ `)}getPath(e){return this.docs.get(e)?.path}getNames(){return Array.from(this.docs.keys())}async buildContext(){let e={};for(let t of this.docs.keys()){let n=await this.getContent(t)??"",o=await this.getToc(t),s=this.getPath(t);e[t]={content:n,toc:o,...s?{path:s}:{}};}return e}async loadFromFile(e,t,n){try{let o=this.resolve(t,n),s=await this.fs.readFile(o);this.docs.set(e,{content:s,path:o});}catch(o){let s=o instanceof Error?o.message:String(o);console.warn(`[DocumentLoader] Failed to load '${e}' from '${t}': ${s}`);}}resolve(e,t){return this.fs.isAbsolute(e)?e:t?this.fs.resolvePath(t,e):this.fs.resolvePath(e)}};p();p();var ae=class extends Error{constructor(t,n,o){super(t);this.layoutId=n;this.cause=o;this.name="LayoutLoadError";}layoutId;cause},Me=class extends Error{constructor(t,n=[],o){super(t);this.errors=n;this.cause=o;this.name="PropsValidationError";}errors;cause};var ad={validationMode:"lenient",fallbackLayoutId:"crewx/default"},Jt=class{layouts=new Map;options;constructor(e){this.options={...ad,...e,templatesPath:e?.templatesPath??vt()},this.loadAllLayouts();}load(e,t){let n=this.layouts.get(e);if(!n){let o=this.normalizeLayoutId(e);n=this.layouts.get(o);}if(!n&&(console.warn(`Layout not found: ${e}, falling back to ${this.options.fallbackLayoutId}`),n=this.layouts.get(this.options.fallbackLayoutId),!n))throw new ae(`Fallback layout not found: ${this.options.fallbackLayoutId}`,this.options.fallbackLayoutId);return t&&Object.keys(t).length>0?{...n,defaultProps:{...n.defaultProps,...t}}:n}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 ae("Layout ID must be a non-empty string",e);let n=typeof t=="string"?{template:t}:t,o=typeof n.template=="string"?n.template:"";if(!o||o.trim().length===0)throw new ae(`Custom layout template is empty for ${e}`,e);let s=n.propsSchema||{},i=this.extractDefaultProps(s),a=n.defaultProps||{},d={id:e,version:n.version||"1.0.0",description:n.description||`Custom layout ${e}`,template:o,propsSchema:this.parsePropsSchema(s),defaultProps:{...i,...a}},l=this.layouts.get(e),c=l?.template===o&&JSON.stringify(l?.defaultProps??{})===JSON.stringify(d.defaultProps??{})&&JSON.stringify(l?.propsSchema??{})===JSON.stringify(d.propsSchema??{});this.layouts.set(e,d),process.env.CREWX_VERBOSE==="1"&&(l?c||console.error(`Updated custom layout: ${e}`):console.error(`Registered custom layout: ${e}`));}registerLayouts(e){for(let[t,n]of Object.entries(e))try{this.registerLayout(t,n);}catch(o){console.warn(`Failed to register custom layout ${t}:`,o instanceof Error?o.message:o);}}loadAllLayouts(){let e=this.options.templatesPath;if(!bs.existsSync(e))throw new ae(`Templates directory not found: ${e}`,void 0,new Error(`Directory does not exist: ${e}`));try{let t=bs.readdirSync(e).filter(n=>n.endsWith(".yaml")||n.endsWith(".yml"));t.length===0&&console.warn(`No layout files found in ${e}`);for(let n of t){let o=n.replace(/\.(yaml|yml)$/,""),s=K__namespace.join(e,n);try{let i=this.loadLayoutFile(s,o),a=`crewx/${o}`;this.layouts.set(a,i),a!=="crewx/minimal"&&process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded layout: ${a} from ${n}`);}catch(i){console.error(`Failed to load layout file ${n}:`,i);}}process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded ${this.layouts.size} layouts from ${e}`);}catch(t){throw new ae(`Failed to read layouts directory: ${e}`,void 0,t instanceof Error?t:new Error(String(t)))}}loadLayoutFile(e,t){try{let n=bs.readFileSync(e,"utf-8");if(!n||n.trim().length===0)throw console.warn(`Empty YAML file: ${e}, will use fallback`),new ae(`Empty YAML file: ${e}`,t,new Error("File content is empty"));let o=jsYaml.load(n);if(!o||typeof o!="object")throw console.warn(`Invalid YAML content in ${e} (parsed as ${typeof o}), will use fallback`),new ae(`Invalid or empty YAML in ${e}`,t,new Error("YAML parsing returned null/undefined or non-object"));if(o.layouts&&typeof o.layouts=="object"){let s=this.resolveLayoutEntry(o.layouts,t);if(!s||s.template.trim().length===0)throw console.warn(`Empty or missing layout template in ${e} for ${t}`),new ae(`Layout template not found or empty in layouts map: ${t}`,t);let i=s.propsSchema||o.propsSchema||{};return {id:`crewx/${t}`,version:o.version||"1.0.0",description:o.description||`CrewX ${t} layout`,template:s.template,propsSchema:this.parsePropsSchema(i),defaultProps:this.extractDefaultProps(i)}}else {if(!o.template||typeof o.template=="string"&&o.template.trim().length===0)throw console.warn(`Empty or missing template field in ${e}`),new ae(`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(n){throw new ae(`Failed to load layout file: ${e}`,t,n instanceof Error?n:new Error(String(n)))}}parsePropsSchema(e){let t={};for(let[n,o]of Object.entries(e))typeof o=="object"&&o!==null&&(t[n]=o);return t}extractDefaultProps(e){let t={};for(let[n,o]of Object.entries(e))o&&typeof o=="object"&&("defaultValue"in o?t[n]=o.defaultValue:"default"in o&&(t[n]=o.default));return t}normalizeLayoutId(e){return e?e.includes("/")?e:`crewx/${e}`:this.options.fallbackLayoutId}resolveLayoutEntry(e,t){let n=new Set;if(t)if(n.add(t),t.includes("/")){let o=t.split("/"),s=o[o.length-1];s&&n.add(s);}else n.add(`crewx/${t}`);n.add("default");for(let o of n){let s=e[o];if(typeof s=="string"&&s.trim().length>0)return {template:s};if(s&&typeof s=="object"&&typeof s.template=="string"&&s.template.trim().length>0)return {template:s.template,propsSchema:s.propsSchema}}for(let o of Object.values(e)){if(typeof o=="string"&&o.trim().length>0)return {template:o};let s=o;if(s&&typeof s=="object"&&typeof s.template=="string"&&s.template.trim().length>0)return {template:s.template,propsSchema:s.propsSchema}}}};p();p();p();function dt(r){return String(Math.floor(Math.abs(r))).padStart(2,"0")}function Xt(r){if(!(r instanceof Date)||Number.isNaN(r.getTime()))return "";let e=-r.getTimezoneOffset(),t=e>=0?"+":"-";return `${r.getFullYear()}-${dt(r.getMonth()+1)}-${dt(r.getDate())}T${dt(r.getHours())}:${dt(r.getMinutes())}:${dt(r.getSeconds())}${t}${dt(e/60)}:${dt(e%60)}`}function dd(r){return r.map(e=>{let t=typeof e?.timestamp=="number"?e.timestamp:null;return t===null?e:{...e,created_at:Xt(new Date(t))}})}function ld(r){let e=[];for(let t of r)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 ps(...r){let e=r[r.length-1],t=r[0],n=r[1],o=typeof r[2]=="string"?r[2]:"",s=typeof r[3]=="string"?r[3]:"";if(!Array.isArray(t)||t.length===0||!(e&&typeof e.fn=="function"))return "";let a=ld(t),d=a.length>0?a[0]:"",l=Date.now(),c={messages:dd(t),platform:typeof n=="string"?n:"",messagesCount:t.length,agentIds:a,primaryAgentId:d,currentAgentId:o,threadId:s,now:Xt(new Date(l))};return e.fn(c)}p();var Yt=class{defaultMode;constructor(e={}){this.defaultMode=e.defaultMode??"lenient";}validate(e,t,n=this.defaultMode){let o=[],s=this.validateObject(e??{},t,n,["props"],o);if(o.length>0&&n==="strict")throw new Me("Props validation failed in strict mode",o);return {valid:o.length===0,props:s,errors:o}}validateObject(e,t,n,o,s){let i={};if(n==="strict")for(let a of Object.keys(e))t[a]||s.push({path:this.buildPath([...o,a]),message:`Unknown prop '${a}'`,value:e[a]});for(let[a,d]of Object.entries(t)){let l=[...o,a],c=e[a],g=this.resolveProp(c,d,l,n,s);g.shouldAssign&&(i[a]=g.value);}return i}resolveProp(e,t,n,o,s){let i=this.buildPath(n);if(this.isNil(e)){if(t.isRequired&&s.push({path:i,message:`Required prop '${n[n.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,n,o,s);if(!a.valid){if(t.type==="shape"&&a.value&&this.isPlainObject(a.value))return {shouldAssign:true,value:a.value};if(s.push({path:i,message:a.error??"Invalid value",value:e}),t.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(t.defaultValue)};if(t.type==="shape"&&t.shape){let d=this.applyDefaults(t.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}return {shouldAssign:true,value:a.value}}validateType(e,t,n,o,s){let{type:i}=t;switch(i){case "string":return this.validateString(e,t);case "number":return this.validateNumber(e,t);case "bool":return this.validateBoolean(e);case "array":return this.validateArray(e,t);case "arrayOf":return this.validateArrayOf(e,t,n,o,s);case "object":return this.validatePlainObject(e);case "shape":return this.validateShape(e,t,n,o,s);case "oneOfType":return this.validateOneOfType(e,t);case "func":return this.validateFunction(e);case "node":return {valid:true,value:e};default:return {valid:true,value:e}}}validateString(e,t){return typeof e!="string"?{valid:false,error:`Expected string, got ${this.describeType(e)}`}:t.oneOf&&!t.oneOf.includes(e)?{valid:false,error:`Expected one of: ${t.oneOf.join(", ")}`}:t.minLength!==void 0&&e.length<t.minLength?{valid:false,error:`String length must be >= ${t.minLength}`}:t.maxLength!==void 0&&e.length>t.maxLength?{valid:false,error:`String length must be <= ${t.maxLength}`}:t.pattern&&!new RegExp(t.pattern).test(e)?{valid:false,error:`String does not match pattern ${t.pattern}`}:{valid:true,value:e}}validateNumber(e,t){return typeof e!="number"||Number.isNaN(e)?{valid:false,error:`Expected number, got ${this.describeType(e)}`}:t.min!==void 0&&e<t.min?{valid:false,error:`Number must be >= ${t.min}`}:t.max!==void 0&&e>t.max?{valid:false,error:`Number must be <= ${t.max}`}:t.oneOf&&!t.oneOf.includes(e)?{valid:false,error:`Expected one of: ${t.oneOf.join(", ")}`}:{valid:true,value:e}}validateBoolean(e){return typeof e!="boolean"?{valid:false,error:`Expected boolean, got ${this.describeType(e)}`}:{valid:true,value:e}}validateArray(e,t){return Array.isArray(e)?t.minLength!==void 0&&e.length<t.minLength?{valid:false,error:`Array length must be >= ${t.minLength}`}:t.maxLength!==void 0&&e.length>t.maxLength?{valid:false,error:`Array length must be <= ${t.maxLength}`}:{valid:true,value:[...e]}:{valid:false,error:`Expected array, got ${this.describeType(e)}`}}validateArrayOf(e,t,n,o,s){let i=this.validateArray(e,t);if(!i.valid)return i;let a=[],d=t.itemType,l=t.itemOneOf,c=s.length;return i.value.forEach((g,f)=>{let m=[...n,String(f)];if(d){let w=this.validateType(g,{type:d},m,o,s);w.valid?a.push(w.value):s.push({path:this.buildPath(m),message:w.error??"Invalid array item",value:g});}else a.push(g);l&&!l.includes(g)&&s.push({path:this.buildPath(m),message:`Array item must be one of: ${l.join(", ")}`,value:g});}),{valid:s.length===c,value:a}}validatePlainObject(e){return this.isPlainObject(e)?{valid:true,value:{...e}}:{valid:false,error:`Expected object, got ${this.describeType(e)}`}}validateFunction(e){return typeof e!="function"?{valid:false,error:`Expected function, got ${this.describeType(e)}`}:{valid:true,value:e}}validateShape(e,t,n,o,s){if(!this.isPlainObject(e))return {valid:false,error:`Expected object, got ${this.describeType(e)}`};let i=s.length,a=this.validateObject(e,t.shape??{},o,n,s);return {valid:s.length===i,value:a}}validateOneOfType(e,t){let n=t.types??[];return n.some(s=>this.matchesType(e,s))?{valid:true,value:e}:{valid:false,error:`Value does not match any allowed type: ${n.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[n,o]of Object.entries(e)){if(o.defaultValue!==void 0){t[n]=this.cloneValue(o.defaultValue);continue}if(o.type==="shape"&&o.shape){let s=this.applyDefaults(o.shape);Object.keys(s).length>0&&(t[n]=s);}}return t}cloneValue(e){if(Array.isArray(e))return e.map(t=>this.cloneValue(t));if(this.isPlainObject(e)){let t={};for(let[n,o]of Object.entries(e))t[n]=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 Qt=class{handlebars;propsValidator;constructor(e){this.handlebars=Te__namespace.default.create(),this.propsValidator=e??new Yt,this.registerHelpers();}render(e,t,n={}){try{let o=this.prepareRenderContext(e,t,n);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,n="lenient"){return this.executeValidation(e,t,n)}resolveProps(e,t,n="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,n)}prepareRenderContext(e,t,n){let{validationMode:o="lenient",skipValidation:s=false}=n,i=s?this.mergeProps(e.defaultProps,t.props):this.resolveProps(e,t.props,o).props;return {...t,vars:this.sanitizeVars(t.vars),props:i}}registerHelpers(){this.handlebars.registerHelper("formatConversation",ps),Te__namespace.default.helpers.each&&this.handlebars.registerHelper("each",Te__namespace.default.helpers.each),Te__namespace.default.helpers.if&&this.handlebars.registerHelper("if",Te__namespace.default.helpers.if),Te__namespace.default.helpers.unless&&this.handlebars.registerHelper("unless",Te__namespace.default.helpers.unless),Te__namespace.default.helpers.with&&this.handlebars.registerHelper("with",Te__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 Te__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"],n=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/Math.pow(1024,n)*100)/100+" "+t[n]});}executeValidation(e,t,n){try{return this.propsValidator.validate(e,t,n)}catch(o){if(o instanceof Me&&o.errors&&o.errors.length>0){let s=o.errors[0];if(s)throw new Me(s.message,o.errors)}throw o}}mergeProps(e,t){let n=this.cloneDeep(e??{});return t?this.deepMerge(n,t):n}deepMerge(e,t){for(let[n,o]of Object.entries(t)){if(this.isPlainObject(o)){let s=e[n];e[n]=this.deepMerge(this.isPlainObject(s)?s:{},o);continue}if(Array.isArray(o)){e[n]=this.cloneDeep(o);continue}e[n]=o;}return e}cloneDeep(e){if(Array.isArray(e))return e.map(t=>this.cloneDeep(t));if(this.isPlainObject(e)){let t={};for(let[n,o]of Object.entries(e))t[n]=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 n=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(n);}return t}};p();var bn="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function cd(r){let e=crypto$1.randomBytes(r*2),t="";for(let n=0;n<e.length&&t.length<r;n++){let o=e[n];o<248&&(t+=bn[o%62]);}for(;t.length<r;)t+=bn[crypto$1.randomBytes(1)[0]%62];return t}function lt(r){return `${r}_${cd(8)}`}function ud(r,e){let{createHash:t}=oe("crypto"),n=t("sha256").update(e).digest(),o=Buffer.alloc(8);for(let i=0;i<32;i++)o[i%8]^=n[i];let s="";for(let i of o)s+=bn[i%62];return `${r}_${s}`}p();function Sn(r){let e=t=>String(t).padStart(2,"0");return `${r.getFullYear()}${e(r.getMonth()+1)}${e(r.getDate())}T${e(r.getHours())}${e(r.getMinutes())}${e(r.getSeconds())}`}p();function gs(r,e){return t=>{try{let n=e(t);n instanceof Promise&&n.catch(o=>{console.error(`[crewx] event listener error (${r}): ${o instanceof Error?o.message:String(o)}`);});}catch(n){console.error(`[crewx] event listener error (${r}): ${n instanceof Error?n.message:String(n)}`);}}}var Zt=class{_emitter=new events.EventEmitter;on(e,t){let n=gs(e,t);return this._emitter.on(e,n),()=>this._emitter.off(e,n)}once(e,t){let n=gs(e,t);return this._emitter.once(e,n),()=>this._emitter.off(e,n)}emit(e,t){this._emitter.emit(e,t);}};p();function In(r){let e=new Map,t=n=>n.startsWith(`${r}::`)?n:`${r}::${n}`;return {async get(n){let o=e.get(t(n));return o?o.value:void 0},async set(n,o){e.set(t(n),{value:o});},async delete(n){return e.delete(t(n))},async list(n){let o=n?t(n):`${r}::`,s=[];for(let i of e.keys())i.startsWith(o)&&s.push(i.slice(r.length+2));return s}}}p();var On=new async_hooks.AsyncLocalStorage;function gd(){return On}function md(r,e){return On.run(r,e)}function Mn(r){let e=r.log??r.logger??{debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},t=r.agentRunner??{run:async()=>({output:""})},n=r.db??{get:async()=>{},set:async()=>{},delete:async()=>false,list:async()=>[]},o=r.storage??{put:async()=>"",get:async()=>{},delete:async()=>false},s=r.audit??{log:async()=>{}},i=r.onInbound??(async()=>({accepted:true})),a=r.onEmitEvent??(async()=>({accepted:true})),d=r.onUpdateMessage??(async()=>{}),l=r.onResolveUser??(async f=>({userId:f,displayName:f})),c=async f=>{let m=On.getStore();if(!m){e.warn("respondSync called outside sync window \u2014 graceful degradation (no-op)",{textPreview:typeof f=="object"&&"text"in f?f.text.slice(0,80):void 0});return}let w="text"in f?f.text:"";m.res.status(200).json({text:w});},g=r.httpRouter??{registerRoute:()=>{e.warn("httpRouter not configured \u2014 registerRoute is a no-op");}};return {instanceId:r.instanceId,config:r.config,capabilities:r.capabilities,log:e,agentRunner:t,db:n,storage:o,audit:s,abortSignal:r.abortSignal??new AbortController().signal,httpRouter:g,inbound:i,emitEvent:a,updateMessage:d,resolveUser:l,respondSync:c}}Fe();p();var hd=/^-\s*Status:\s*active/m,yd=/^---\n([\s\S]*?)\n---/,wd=/^type:\s*goal\s*$/m;async function ms(r,e=it,t){let n=typeof t=="string"?[t]:Array.isArray(t)?t:void 0;if(n){let a=[];for(let d of n){let l=e.resolvePath(r,d);await e.exists(l)&&a.push(await e.readFile(l));}return a.join(`
53
53
  ---
54
54
  `)}let s=(await e.readdir(r)).filter(a=>a.endsWith(".md"));if(s.length===0)return "";let i=[];for(let a of s){let d=e.resolvePath(r,a),l=await e.readFile(d),c=yd.exec(l);!c||!wd.test(c[1])||hd.test(l)&&i.push(l);}return i.join(`
55
55
  ---
56
- `)}u();function _d(){let r=new Date,e=r.getFullYear(),t=String(r.getMonth()+1).padStart(2,"0"),n=String(r.getDate()).padStart(2,"0");return `${e}-${t}-${n}`}async function ms(r,e=it){let t=e.resolvePath(r,`${_d()}.md`);return await e.exists(t)?e.readFile(t):""}u();vt();je();function Nn(r){if(r.startsWith("cli/"))return exports.BUILTIN_ADAPTERS[r.slice(4)]}function kd(r,e={}){if(!r.startsWith("cli/"))return true;let n=(e.lookupAdapter??Nn)(r);if(!n?.command)return false;let o=Lt(n.command,{env:e.env});return K__namespace.default.isAbsolute(o)}function Dn(r,e={}){if(!Array.isArray(r))return r;if(r.length===0)return "cli/claude";for(let t of r)if(kd(t,e))return t;return r[0]}u();var er=new async_hooks.AsyncLocalStorage;function Ln(r){if(r)return {parentTaskId:r.parentTaskId??null,rootTraceId:r.rootTraceId,callerAgentId:r.callerAgentId??null}}u();function Ed(r){return typeof r!="string"?"":r.replace(/</g,"&lt;").replace(/>/g,"&gt;")}function $n(r){return r.messages.map(e=>({text:Ed(e.text),isAssistant:e.isAssistant,timestamp:e.timestamp,metadata:e.metadata,files:void 0}))}u();je();Fe();u();u();var Tt=class{resolveDbPath(){return process.env.CREWX_DB?process.env.CREWX_DB:process.env.CREWX_TRACES_DB?process.env.CREWX_TRACES_DB:K.join(yo__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 bs.existsSync(e??this.resolveDbPath())}};u();function Re(r){let e=oe("better-sqlite3"),{drizzle:t}=oe("drizzle-orm/better-sqlite3"),n=new e(r);return n.exec("PRAGMA journal_mode = WAL"),n.exec("PRAGMA busy_timeout = 5000"),n.exec("PRAGMA foreign_keys = ON"),n.exec("PRAGMA analysis_limit = 400"),n.exec("PRAGMA optimize"),{db:t(n),runRaw:(o,s=[])=>n.prepare(o).run(...s),close:()=>n.close()}}u();var hs=new Set,Pd={agent_id:"TEXT",status:"TEXT DEFAULT 'running'",started_at:"TEXT",trace_id:"TEXT",parent_task_id:"TEXT",crewx_version:"TEXT",pid:"INTEGER",thread_id:"TEXT",workspace_id:"TEXT",workspace_ref:"TEXT",workspace_name:"TEXT",project_id:"TEXT",project_name:"TEXT"};function jn(r,e){return (r.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function bd(r,e){if(e>0||!jn(r,"tasks"))return;let t=r.all("PRAGMA table_info(tasks)"),n=new Set(t.map(o=>o.name));for(let[o,s]of Object.entries(Pd))n.has(o)||r.run(`ALTER TABLE tasks ADD COLUMN ${o} ${s}`);}var Sd={"0002_normalize_task_names":{workspace_name:"TEXT",project_name:"TEXT"}};function Id(r,e,t){if(!jn(r,"__drizzle_migrations")||!jn(r,"tasks"))return;let n=r.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(n.map(i=>i.hash)),s=JSON.parse(bs.readFileSync(K__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=Sd[i.tag];if(!a)continue;let d=K__namespace.default.join(e,`${i.tag}.sql`);if(!bs.existsSync(d))continue;let l=bs.readFileSync(d,"utf-8"),c=crypto$1.createHash("sha256").update(l).digest("hex");if(o.has(c))continue;let g=r.all("PRAGMA table_info(tasks)"),f=new Set(g.map(m=>m.name));for(let[m,w]of Object.entries(a))f.has(m)||(r.run(`ALTER TABLE tasks ADD COLUMN ${m} ${w}`),f.add(m));}}function Od(r,e,t){let n=r.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(n.map(i=>i.hash)),s=JSON.parse(bs.readFileSync(K__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=K__namespace.default.join(e,`${i.tag}.sql`);if(!bs.existsSync(a))continue;let d=bs.readFileSync(a,"utf-8"),l=crypto$1.createHash("sha256").update(d).digest("hex");if(o.has(l))continue;let c=/ALTER\s+TABLE\s+[`"]?(\w+)[`"]?\s+ADD\s+[`"]?(\w+)[`"]?/gi,g=[],f;for(;(f=c.exec(d))!==null;)g.push({table:f[1],column:f[2]});if(g.length===0||!d.split(/-->\s*statement-breakpoint/).map(_=>_.trim()).filter(Boolean).every(_=>/^ALTER\s+TABLE\s+.+\s+ADD\s+/i.test(_)))continue;g.every(({table:_,column:k})=>r.all(`PRAGMA table_info("${_}")`).some(v=>v.name===k))&&r.run(t`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${l}, ${i.when})`);}}function Md(r){let{migrate:e}=oe("drizzle-orm/better-sqlite3/migrator"),{sql:t}=oe("drizzle-orm"),n=[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=n.find(l=>bs.existsSync(K__namespace.default.join(l,"meta/_journal.json")));if(!o)throw new Error(`migrations folder not found. Searched:
56
+ `)}p();function _d(){let r=new Date,e=r.getFullYear(),t=String(r.getMonth()+1).padStart(2,"0"),n=String(r.getDate()).padStart(2,"0");return `${e}-${t}-${n}`}async function hs(r,e=it){let t=e.resolvePath(r,`${_d()}.md`);return await e.exists(t)?e.readFile(t):""}p();xt();Fe();function Nn(r){if(r.startsWith("cli/"))return exports.BUILTIN_ADAPTERS[r.slice(4)]}function kd(r,e={}){if(!r.startsWith("cli/"))return true;let n=(e.lookupAdapter??Nn)(r);if(!n?.command)return false;let o=Lt(n.command,{env:e.env});return K__namespace.default.isAbsolute(o)}function Dn(r,e={}){if(!Array.isArray(r))return r;if(r.length===0)return "cli/claude";for(let t of r)if(kd(t,e))return t;return r[0]}p();var er=new async_hooks.AsyncLocalStorage;function Ln(r){if(r)return {parentTaskId:r.parentTaskId??null,rootTraceId:r.rootTraceId,callerAgentId:r.callerAgentId??null}}p();function Ed(r){return typeof r!="string"?"":r.replace(/</g,"&lt;").replace(/>/g,"&gt;")}function $n(r){return r.messages.map(e=>({text:Ed(e.text),isAssistant:e.isAssistant,timestamp:e.timestamp,metadata:e.metadata,files:void 0}))}p();Fe();He();p();p();var Pt=class{resolveDbPath(){return process.env.CREWX_DB?process.env.CREWX_DB:process.env.CREWX_TRACES_DB?process.env.CREWX_TRACES_DB:K.join(wo__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 bs.existsSync(e??this.resolveDbPath())}};p();function _e(r){let e=oe("better-sqlite3"),{drizzle:t}=oe("drizzle-orm/better-sqlite3"),n=new e(r);return n.exec("PRAGMA journal_mode = WAL"),n.exec("PRAGMA busy_timeout = 5000"),n.exec("PRAGMA foreign_keys = ON"),n.exec("PRAGMA analysis_limit = 400"),n.exec("PRAGMA optimize"),{db:t(n),runRaw:(o,s=[])=>n.prepare(o).run(...s),close:()=>n.close()}}p();var ys=new Set,Pd={agent_id:"TEXT",status:"TEXT DEFAULT 'running'",started_at:"TEXT",trace_id:"TEXT",parent_task_id:"TEXT",crewx_version:"TEXT",pid:"INTEGER",thread_id:"TEXT",workspace_id:"TEXT",workspace_ref:"TEXT",workspace_name:"TEXT",project_id:"TEXT",project_name:"TEXT"};function jn(r,e){return (r.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function bd(r,e){if(e>0||!jn(r,"tasks"))return;let t=r.all("PRAGMA table_info(tasks)"),n=new Set(t.map(o=>o.name));for(let[o,s]of Object.entries(Pd))n.has(o)||r.run(`ALTER TABLE tasks ADD COLUMN ${o} ${s}`);}var Sd={"0002_normalize_task_names":{workspace_name:"TEXT",project_name:"TEXT"}};function Id(r,e,t){if(!jn(r,"__drizzle_migrations")||!jn(r,"tasks"))return;let n=r.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(n.map(i=>i.hash)),s=JSON.parse(bs.readFileSync(K__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=Sd[i.tag];if(!a)continue;let d=K__namespace.default.join(e,`${i.tag}.sql`);if(!bs.existsSync(d))continue;let l=bs.readFileSync(d,"utf-8"),c=crypto$1.createHash("sha256").update(l).digest("hex");if(o.has(c))continue;let g=r.all("PRAGMA table_info(tasks)"),f=new Set(g.map(m=>m.name));for(let[m,w]of Object.entries(a))f.has(m)||(r.run(`ALTER TABLE tasks ADD COLUMN ${m} ${w}`),f.add(m));}}function Od(r,e,t){let n=r.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(n.map(i=>i.hash)),s=JSON.parse(bs.readFileSync(K__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=K__namespace.default.join(e,`${i.tag}.sql`);if(!bs.existsSync(a))continue;let d=bs.readFileSync(a,"utf-8"),l=crypto$1.createHash("sha256").update(d).digest("hex");if(o.has(l))continue;let c=/ALTER\s+TABLE\s+[`"]?(\w+)[`"]?\s+ADD\s+[`"]?(\w+)[`"]?/gi,g=[],f;for(;(f=c.exec(d))!==null;)g.push({table:f[1],column:f[2]});if(g.length===0||!d.split(/-->\s*statement-breakpoint/).map(_=>_.trim()).filter(Boolean).every(_=>/^ALTER\s+TABLE\s+.+\s+ADD\s+/i.test(_)))continue;g.every(({table:_,column:k})=>r.all(`PRAGMA table_info("${_}")`).some(v=>v.name===k))&&r.run(t`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${l}, ${i.when})`);}}function Md(r){let{migrate:e}=oe("drizzle-orm/better-sqlite3/migrator"),{sql:t}=oe("drizzle-orm"),n=[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=n.find(l=>bs.existsSync(K__namespace.default.join(l,"meta/_journal.json")));if(!o)throw new Error(`migrations folder not found. Searched:
57
57
  ${n.join(`
58
- `)}`);let s=r.get(t`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'`),i=0;s?.cnt&&(i=r.get(t`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0),bd(r,i),s?.cnt&&(Od(r,o,t),Id(r,o,t)),e(r,{migrationsFolder:o});let d=(r.get(t`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0)-i;if(d>0){let l=s?.cnt?"Database migrated":"Database initialized";console.error(`[crewx] ${l} (${d} migration${d>1?"s":""} applied).`);}}function Dr(r,e){hs.has(e)||(Md(r),hs.add(e));}u();var b=class extends Error{code;cause;constructor(e,t,n){super(t),this.name="RepositoryError",this.code=e,this.cause=n,Object.setPrototypeOf(this,new.target.prototype);}};u();u();var ws=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)},r=>({idx_tasks_agent_id:sqliteCore.index("idx_tasks_agent_id").on(r.agent_id),idx_tasks_status:sqliteCore.index("idx_tasks_status").on(r.status),idx_tasks_started_at:sqliteCore.index("idx_tasks_started_at").on(r.started_at),idx_tasks_trace_id:sqliteCore.index("idx_tasks_trace_id").on(r.trace_id),idx_tasks_parent_task_id:sqliteCore.index("idx_tasks_parent_task_id").on(r.parent_task_id),idx_tasks_crewx_version:sqliteCore.index("idx_tasks_crewx_version").on(r.crewx_version),idx_tasks_pid:sqliteCore.index("idx_tasks_pid").on(r.pid),idx_tasks_thread_id:sqliteCore.index("idx_tasks_thread_id").on(r.thread_id),idx_tasks_workspace_id:sqliteCore.index("idx_tasks_workspace_id").on(r.workspace_id),idx_tasks_workspace_ref:sqliteCore.index("idx_tasks_workspace_ref").on(r.workspace_ref),idx_tasks_project_id:sqliteCore.index("idx_tasks_project_id").on(r.project_id),idx_tasks_ws_started:sqliteCore.index("idx_tasks_ws_started").on(r.workspace_id,r.started_at)}));u();var _s=sqliteCore.sqliteTable("threads",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").references(()=>ws.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)},r=>({idx_threads_updated_at:sqliteCore.index("idx_threads_updated_at").on(r.updated_at),idx_threads_workspace_id:sqliteCore.index("idx_threads_workspace_id").on(r.workspace_id),idx_threads_ws_updated:sqliteCore.index("idx_threads_ws_updated").on(r.workspace_id,r.updated_at),idx_threads_title:sqliteCore.index("idx_threads_title").on(r.title)}));u();var pt=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(()=>pt.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")},r=>({idx_spans_task_id:sqliteCore.index("idx_spans_task_id").on(r.task_id),idx_spans_parent_span_id:sqliteCore.index("idx_spans_parent_span_id").on(r.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()},r=>({idx_tool_calls_task_id:sqliteCore.index("idx_tool_calls_task_id").on(r.task_id),idx_tool_calls_tool_name:sqliteCore.index("idx_tool_calls_tool_name").on(r.tool_name),idx_tool_calls_timestamp:sqliteCore.index("idx_tool_calls_timestamp").on(r.timestamp)}));u();sqliteCore.sqliteTable("thread_boxes",{id:sqliteCore.text("id").primaryKey(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>_s.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()},r=>({idx_thread_boxes_thread_id:sqliteCore.index("idx_thread_boxes_thread_id").on(r.thread_id),idx_thread_boxes_seq:sqliteCore.index("idx_thread_boxes_seq").on(r.thread_id,r.seq),uniq_thread_boxes_thread_seq:sqliteCore.unique().on(r.thread_id,r.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")},r=>({idx_request_logs_timestamp:sqliteCore.index("idx_request_logs_timestamp").on(r.timestamp),idx_request_logs_path:sqliteCore.index("idx_request_logs_path").on(r.path),idx_request_logs_status_code:sqliteCore.index("idx_request_logs_status_code").on(r.status_code),idx_request_logs_partition_key:sqliteCore.index("idx_request_logs_partition_key").on(r.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")},r=>({uniq_usage_limit_snapshots_bucket:sqliteCore.uniqueIndex("uniq_usage_limit_snapshots_bucket").on(r.provider,r.account_ref,r.limit_window,r.bucket_start),idx_usage_limit_snapshots_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_window_bucket").on(r.limit_window,r.bucket_start),idx_usage_limit_snapshots_provider_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_provider_window_bucket").on(r.provider,r.limit_window,r.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")},r=>({uniq_usage_reports_ws_month:sqliteCore.uniqueIndex("uniq_usage_reports_ws_month").on(r.workspace_id,r.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")},r=>({idx_notifications_ws_created:sqliteCore.index("idx_notifications_ws_created").on(r.workspace_id,drizzleOrm.sql`${r.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()},r=>({pk:sqliteCore.primaryKey({columns:[r.notification_id,r.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()},r=>({idx_agent_suggestions_ws_agent:sqliteCore.index("idx_agent_suggestions_ws_agent").on(r.workspace_id,r.agent_id),idx_agent_suggestions_ws_created:sqliteCore.index("idx_agent_suggestions_ws_created").on(r.workspace_id,r.created_at)}));var qe="2026-05-09",dl="0.8.9-rc.13",ze=10,Ke=parseInt(dl.split("rc.")[1]),ll=new Set(["workflow","mcp"]),Ps=600*1e3,rr=class extends Tt{dbPath;pidNullObservedSince=new Map;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=K.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=K.dirname(t);bs.existsSync(o)||bs.mkdirSync(o,{recursive:true});}else if(!bs.existsSync(t))throw new b("NOT_FOUND","Database not found");let n=Re(t);if(e)try{Dr(n.db,t);}catch(o){throw n.close(),o}return n}startTask(e){let t=this.openHandle(true);try{t.db.insert(p).values({id:e.id,agent_id:e.agentId,prompt:e.prompt,mode:e.mode,status:e.status,started_at:e.startedAt,pid:e.pid??null,parent_task_id:e.parentTaskId??null,caller_agent_id:e.callerAgentId??null,trace_id:e.traceId??null,command:e.command??null,metadata:e.metadata??null,workspace_id:e.workspaceId??null,platform:e.platform??"cli",crewx_version:e.crewxVersion??null,thread_id:e.threadId??null,model:e.model??null,rendered_prompt:e.renderedPrompt??null,coding_agent_command:e.codingAgentCommand??null}).onConflictDoUpdate({target:p.id,set:{pid:drizzleOrm.sql`COALESCE(excluded.pid, ${p.pid})`},setWhere:drizzleOrm.eq(p.status,"running")}).run();}catch(n){throw n instanceof b?n:new b("DB_ERROR","Failed to start task",n)}finally{t.close();}}finishTask(e){let t=this.openHandle(true);try{let n=e.runEpoch??null;t.runRaw(`UPDATE tasks SET status=?, result=?, error=?, completed_at=?, duration_ms=?,
58
+ `)}`);let s=r.get(t`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'`),i=0;s?.cnt&&(i=r.get(t`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0),bd(r,i),s?.cnt&&(Od(r,o,t),Id(r,o,t)),e(r,{migrationsFolder:o});let d=(r.get(t`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0)-i;if(d>0){let l=s?.cnt?"Database migrated":"Database initialized";console.error(`[crewx] ${l} (${d} migration${d>1?"s":""} applied).`);}}function Dr(r,e){ys.has(e)||(Md(r),ys.add(e));}p();var b=class extends Error{code;cause;constructor(e,t,n){super(t),this.name="RepositoryError",this.code=e,this.cause=n,Object.setPrototypeOf(this,new.target.prototype);}};p();p();var _s=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)},r=>({idx_tasks_agent_id:sqliteCore.index("idx_tasks_agent_id").on(r.agent_id),idx_tasks_status:sqliteCore.index("idx_tasks_status").on(r.status),idx_tasks_started_at:sqliteCore.index("idx_tasks_started_at").on(r.started_at),idx_tasks_trace_id:sqliteCore.index("idx_tasks_trace_id").on(r.trace_id),idx_tasks_parent_task_id:sqliteCore.index("idx_tasks_parent_task_id").on(r.parent_task_id),idx_tasks_crewx_version:sqliteCore.index("idx_tasks_crewx_version").on(r.crewx_version),idx_tasks_pid:sqliteCore.index("idx_tasks_pid").on(r.pid),idx_tasks_thread_id:sqliteCore.index("idx_tasks_thread_id").on(r.thread_id),idx_tasks_workspace_id:sqliteCore.index("idx_tasks_workspace_id").on(r.workspace_id),idx_tasks_workspace_ref:sqliteCore.index("idx_tasks_workspace_ref").on(r.workspace_ref),idx_tasks_project_id:sqliteCore.index("idx_tasks_project_id").on(r.project_id),idx_tasks_ws_started:sqliteCore.index("idx_tasks_ws_started").on(r.workspace_id,r.started_at)}));p();var vs=sqliteCore.sqliteTable("threads",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").references(()=>_s.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)},r=>({idx_threads_updated_at:sqliteCore.index("idx_threads_updated_at").on(r.updated_at),idx_threads_workspace_id:sqliteCore.index("idx_threads_workspace_id").on(r.workspace_id),idx_threads_ws_updated:sqliteCore.index("idx_threads_ws_updated").on(r.workspace_id,r.updated_at),idx_threads_title:sqliteCore.index("idx_threads_title").on(r.title)}));p();var pt=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(()=>pt.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")},r=>({idx_spans_task_id:sqliteCore.index("idx_spans_task_id").on(r.task_id),idx_spans_parent_span_id:sqliteCore.index("idx_spans_parent_span_id").on(r.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()},r=>({idx_tool_calls_task_id:sqliteCore.index("idx_tool_calls_task_id").on(r.task_id),idx_tool_calls_tool_name:sqliteCore.index("idx_tool_calls_tool_name").on(r.tool_name),idx_tool_calls_timestamp:sqliteCore.index("idx_tool_calls_timestamp").on(r.timestamp)}));p();sqliteCore.sqliteTable("thread_boxes",{id:sqliteCore.text("id").primaryKey(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>vs.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()},r=>({idx_thread_boxes_thread_id:sqliteCore.index("idx_thread_boxes_thread_id").on(r.thread_id),idx_thread_boxes_seq:sqliteCore.index("idx_thread_boxes_seq").on(r.thread_id,r.seq),uniq_thread_boxes_thread_seq:sqliteCore.unique().on(r.thread_id,r.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")},r=>({idx_request_logs_timestamp:sqliteCore.index("idx_request_logs_timestamp").on(r.timestamp),idx_request_logs_path:sqliteCore.index("idx_request_logs_path").on(r.path),idx_request_logs_status_code:sqliteCore.index("idx_request_logs_status_code").on(r.status_code),idx_request_logs_partition_key:sqliteCore.index("idx_request_logs_partition_key").on(r.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")},r=>({uniq_usage_limit_snapshots_bucket:sqliteCore.uniqueIndex("uniq_usage_limit_snapshots_bucket").on(r.provider,r.account_ref,r.limit_window,r.bucket_start),idx_usage_limit_snapshots_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_window_bucket").on(r.limit_window,r.bucket_start),idx_usage_limit_snapshots_provider_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_provider_window_bucket").on(r.provider,r.limit_window,r.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")},r=>({uniq_usage_reports_ws_month:sqliteCore.uniqueIndex("uniq_usage_reports_ws_month").on(r.workspace_id,r.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")},r=>({idx_notifications_ws_created:sqliteCore.index("idx_notifications_ws_created").on(r.workspace_id,drizzleOrm.sql`${r.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()},r=>({pk:sqliteCore.primaryKey({columns:[r.notification_id,r.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()},r=>({idx_agent_suggestions_ws_agent:sqliteCore.index("idx_agent_suggestions_ws_agent").on(r.workspace_id,r.agent_id),idx_agent_suggestions_ws_created:sqliteCore.index("idx_agent_suggestions_ws_created").on(r.workspace_id,r.created_at)}));var qe="2026-05-09",dl="0.8.9-rc.13",ze=10,Ke=parseInt(dl.split("rc.")[1]),ll=new Set(["workflow","mcp"]),Ps=600*1e3,rr=class extends Pt{dbPath;pidNullObservedSince=new Map;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=K.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=K.dirname(t);bs.existsSync(o)||bs.mkdirSync(o,{recursive:true});}else if(!bs.existsSync(t))throw new b("NOT_FOUND","Database not found");let n=_e(t);if(e)try{Dr(n.db,t);}catch(o){throw n.close(),o}return n}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(n){throw n instanceof b?n:new b("DB_ERROR","Failed to start task",n)}finally{t.close();}}finishTask(e){let t=this.openHandle(true);try{let n=e.runEpoch??null;t.runRaw(`UPDATE tasks SET status=?, result=?, error=?, completed_at=?, duration_ms=?,
59
59
  exit_code=?, input_tokens=?, output_tokens=?, cached_input_tokens=?, cost_usd=?,
60
60
  model=COALESCE(?, model)
61
- WHERE id=? AND status='running' AND COALESCE(run_epoch, 0) = COALESCE(?, 0)`,[e.status,e.result??null,e.error??null,e.completedAt,e.durationMs??null,e.exitCode??null,e.inputTokens??0,e.outputTokens??0,e.cachedInputTokens??0,e.costUsd??0,e.model??null,e.id,n]);}catch(n){throw n instanceof b?n:new b("DB_ERROR","Failed to finish task",n)}finally{t.close();}}appendLog(e,t){let n=this.openHandle(true);try{n.db.transaction(o=>{let s=o.select({logs:p.logs}).from(p).where(drizzleOrm.eq(p.id,e)).limit(1).get(),i=s?.logs?JSON.parse(s.logs):[];i.push(t),o.update(p).set({logs:JSON.stringify(i)}).where(drizzleOrm.eq(p.id,e)).run();},{behavior:"immediate"});}catch(o){throw o instanceof b?o:new b("DB_ERROR","Failed to append log",o)}finally{n.close();}}getRunningTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(p).where(drizzleOrm.eq(p.status,"running")).orderBy(drizzleOrm.desc(p.started_at)).all()}catch(t){throw new b("DB_ERROR","Failed to get running tasks",t)}finally{e.close();}}getAllTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(p).orderBy(drizzleOrm.desc(p.started_at)).limit(100).all()}catch(t){throw new b("DB_ERROR","Failed to get all tasks",t)}finally{e.close();}}getTask(e){if(!this.dbExists())return;let t=this.openHandle(false);try{return t.db.select().from(p).where(drizzleOrm.eq(p.id,e)).limit(1).get()??void 0}catch(n){throw new b("DB_ERROR","Failed to get task",n)}finally{t.close();}}killTask(e){if(!this.dbExists())return {killed:false};let t=this.openHandle(true);try{let n=t.db.select({id:p.id,status:p.status,pid:p.pid}).from(p).where(drizzleOrm.eq(p.id,e)).limit(1).get();if(!n||n.status!=="running")return {killed:!1};if(n.pid)try{process.kill(n.pid,"SIGTERM");}catch{}return t.db.update(p).set({status:"failed",error:"Killed by user",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.status,"running"))).run(),{killed:!0,pid:n.pid??void 0}}catch(n){throw n instanceof b?n:new b("DB_ERROR","Failed to kill task",n)}finally{t.close();}}reapOrphanedTasks(){if(!this.dbExists())return 0;let e=this.openHandle(true);try{let t=e.db.select({id:p.id,pid:p.pid,platform:p.platform,run_epoch:p.run_epoch}).from(p).where(drizzleOrm.eq(p.status,"running")).all(),n=Date.now(),o=new Set,s=0;for(let i of t){if(i.pid){let l=!1;try{process.kill(i.pid,0),l=!0;}catch{}l||(e.db.update(p).set({status:"failed",error:"Reaped: process not found (orphaned task)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(p.id,i.id),drizzleOrm.eq(p.status,"running"))).run(),s++);continue}if(ll.has(i.platform??"cli"))continue;let a=`${i.id}:${i.run_epoch??0}`;o.add(a);let d=this.pidNullObservedSince.get(a);if(d===void 0){this.pidNullObservedSince.set(a,n);continue}n-d>=Ps&&(e.db.update(p).set({status:"failed",error:"Reaped: pid never recorded after resume (stale running_instruction)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(p.id,i.id),drizzleOrm.eq(p.status,"running"))).run(),s++,this.pidNullObservedSince.delete(a));}for(let i of Array.from(this.pidNullObservedSince.keys()))o.has(i)||this.pidNullObservedSince.delete(i);return s}finally{e.close();}}reapRunningWorkflowTasks(e=Ps){if(!this.dbExists())return 0;let t=this.openHandle(true);try{let n=new Date(Date.now()-e).toISOString();return t.db.update(p).set({status:"failed",error:"Reaped: stale workflow run (finally not executed)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(p.status,"running"),drizzleOrm.eq(p.platform,"workflow"),drizzleOrm.isNull(p.pid),drizzleOrm.lt(p.started_at,n))).run().changes??0}finally{t.close();}}findTaskStatus(e,t){let n=this.resolveDbPaths();for(let o of n){if(!bs.existsSync(o))continue;let s=Re(o);try{let i=t?drizzleOrm.eq(p.workspace_id,t):void 0,a=i?drizzleOrm.and(drizzleOrm.eq(p.id,e),i):drizzleOrm.eq(p.id,e),d=s.db.select().from(p).where(a).limit(1).get()??void 0;if(!d){let l=drizzleOrm.or(drizzleOrm.eq(p.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.like(p.command,`%--thread=${e}%`))),c=i?drizzleOrm.and(l,i):l;d=s.db.select().from(p).where(c).orderBy(drizzleOrm.desc(p.started_at)).limit(1).get()??void 0;}if(d)return d}catch(i){throw new b("DB_ERROR","Failed to find task status",i)}finally{s.close();}}}findChildTasks(e,t){let n=this.resolveDbPaths(),o=new Set,s=[];for(let i of n){if(!bs.existsSync(i))continue;let a=Re(i);try{let d=t?drizzleOrm.and(drizzleOrm.eq(p.parent_task_id,e),drizzleOrm.eq(p.workspace_id,t)):drizzleOrm.eq(p.parent_task_id,e),l=a.db.select().from(p).where(d).orderBy(drizzleOrm.asc(p.started_at)).all();for(let c of l)o.has(c.id)||(o.add(c.id),s.push(c));}catch(d){throw new b("DB_ERROR","Failed to find child tasks",d)}finally{a.close();}}return s}getWorkspaceUsageSummary(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.all(e?drizzleOrm.sql`
61
+ WHERE id=? AND status='running' AND COALESCE(run_epoch, 0) = COALESCE(?, 0)`,[e.status,e.result??null,e.error??null,e.completedAt,e.durationMs??null,e.exitCode??null,e.inputTokens??0,e.outputTokens??0,e.cachedInputTokens??0,e.costUsd??0,e.model??null,e.id,n]);}catch(n){throw n instanceof b?n:new b("DB_ERROR","Failed to finish task",n)}finally{t.close();}}appendLog(e,t){let n=this.openHandle(true);try{n.db.transaction(o=>{let s=o.select({logs:u.logs}).from(u).where(drizzleOrm.eq(u.id,e)).limit(1).get(),i=s?.logs?JSON.parse(s.logs):[];i.push(t),o.update(u).set({logs:JSON.stringify(i)}).where(drizzleOrm.eq(u.id,e)).run();},{behavior:"immediate"});}catch(o){throw o instanceof b?o:new b("DB_ERROR","Failed to append log",o)}finally{n.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 b("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 b("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(n){throw new b("DB_ERROR","Failed to get task",n)}finally{t.close();}}killTask(e){if(!this.dbExists())return {killed:false};let t=this.openHandle(true);try{let n=t.db.select({id:u.id,status:u.status,pid:u.pid}).from(u).where(drizzleOrm.eq(u.id,e)).limit(1).get();if(!n||n.status!=="running")return {killed:!1};if(n.pid)try{process.kill(n.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:n.pid??void 0}}catch(n){throw n instanceof b?n:new b("DB_ERROR","Failed to kill task",n)}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(),n=Date.now(),o=new Set,s=0;for(let i of t){if(i.pid){let l=!1;try{process.kill(i.pid,0),l=!0;}catch{}l||(e.db.update(u).set({status:"failed",error:"Reaped: process not found (orphaned task)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(u.id,i.id),drizzleOrm.eq(u.status,"running"))).run(),s++);continue}if(ll.has(i.platform??"cli"))continue;let a=`${i.id}:${i.run_epoch??0}`;o.add(a);let d=this.pidNullObservedSince.get(a);if(d===void 0){this.pidNullObservedSince.set(a,n);continue}n-d>=Ps&&(e.db.update(u).set({status:"failed",error:"Reaped: pid never recorded after resume (stale running_instruction)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(u.id,i.id),drizzleOrm.eq(u.status,"running"))).run(),s++,this.pidNullObservedSince.delete(a));}for(let i of Array.from(this.pidNullObservedSince.keys()))o.has(i)||this.pidNullObservedSince.delete(i);return s}finally{e.close();}}reapRunningWorkflowTasks(e=Ps){if(!this.dbExists())return 0;let t=this.openHandle(true);try{let n=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,n),drizzleOrm.or(drizzleOrm.isNull(u.metadata),drizzleOrm.notLike(u.metadata,'%"kind":"workflow_card"%')))).run().changes??0}finally{t.close();}}findTaskStatus(e,t){let n=this.resolveDbPaths();for(let o of n){if(!bs.existsSync(o))continue;let s=_e(o);try{let i=t?drizzleOrm.eq(u.workspace_id,t):void 0,a=i?drizzleOrm.and(drizzleOrm.eq(u.id,e),i):drizzleOrm.eq(u.id,e),d=s.db.select().from(u).where(a).limit(1).get()??void 0;if(!d){let l=drizzleOrm.or(drizzleOrm.eq(u.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(u.thread_id),drizzleOrm.like(u.command,`%--thread=${e}%`))),c=i?drizzleOrm.and(l,i):l;d=s.db.select().from(u).where(c).orderBy(drizzleOrm.desc(u.started_at)).limit(1).get()??void 0;}if(d)return d}catch(i){throw new b("DB_ERROR","Failed to find task status",i)}finally{s.close();}}}findChildTasks(e,t){let n=this.resolveDbPaths(),o=new Set,s=[];for(let i of n){if(!bs.existsSync(i))continue;let a=_e(i);try{let d=t?drizzleOrm.and(drizzleOrm.eq(u.parent_task_id,e),drizzleOrm.eq(u.workspace_id,t)):drizzleOrm.eq(u.parent_task_id,e),l=a.db.select().from(u).where(d).orderBy(drizzleOrm.asc(u.started_at)).all();for(let c of l)o.has(c.id)||(o.add(c.id),s.push(c));}catch(d){throw new b("DB_ERROR","Failed to find child tasks",d)}finally{a.close();}}return s}getWorkspaceUsageSummary(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.all(e?drizzleOrm.sql`
62
62
  SELECT
63
63
  COALESCE(workspace_id, 'unknown') AS workspace_id,
64
64
  COALESCE(SUM(input_tokens), 0) AS input_tokens,
@@ -79,7 +79,7 @@ ${n.join(`
79
79
  FROM tasks
80
80
  GROUP BY workspace_id
81
81
  ORDER BY (COALESCE(SUM(input_tokens), 0) + COALESCE(SUM(output_tokens), 0)) DESC
82
- `)}catch(n){throw new b("DB_ERROR","Failed to get workspace usage summary",n)}finally{t.close();}}getThreadTokenUsage(e,t){let n=this.resolveDbPaths(),o=new Set,s=0,i=0,a=0;for(let d of n){if(!bs.existsSync(d))continue;let l=Re(d);try{let c=drizzleOrm.or(drizzleOrm.eq(p.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.like(p.command,`%--thread=${e}%`))),g=t?drizzleOrm.and(c,drizzleOrm.eq(p.workspace_id,t)):c,f=l.db.select({id:p.id,input_tokens:p.input_tokens,output_tokens:p.output_tokens,cost_usd:p.cost_usd}).from(p).where(g).all();for(let m of f)o.has(m.id)||(o.add(m.id),s+=m.input_tokens??0,i+=m.output_tokens??0,a+=m.cost_usd??0);}catch(c){throw new b("DB_ERROR","Failed to get thread token usage",c)}finally{l.close();}}return {inputTokens:s,outputTokens:i,costUsd:a}}findTasksByThread(e,t){let n=this.resolveDbPaths(),o=new Set,s=[];for(let i of n){if(!bs.existsSync(i))continue;let a=Re(i);try{let d=drizzleOrm.or(drizzleOrm.eq(p.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.like(p.command,`%--thread=${e}%`))),l=t?drizzleOrm.and(d,drizzleOrm.eq(p.workspace_id,t)):d,c=a.db.select().from(p).where(l).orderBy(drizzleOrm.asc(p.started_at)).all();for(let g of c)o.has(g.id)||(o.add(g.id),s.push(g));}catch(d){throw new b("DB_ERROR","Failed to find tasks by thread",d)}finally{a.close();}}return s}parseWorkflowCardMetadata(e){if(!e)return {};try{let t=JSON.parse(e);return {kind:typeof t.kind=="string"?t.kind:void 0,workflowRunId:typeof t.workflowRunId=="string"?t.workflowRunId:void 0}}catch{return {}}}extractThreadIdFromCommand(e){return e?/--thread=(\S+)/.exec(e)?.[1]??null:null}batchFetchWorkflowCards(e,t){let n=new Map;if(e.length===0)return n;let o=new Set(e),s=new Map,i=t?drizzleOrm.eq(p.workspace_id,t):void 0,a=(d,l)=>{if(!d)return;let c=s.get(d);if(c&&l.started_at<=c)return;let g=this.parseWorkflowCardMetadata(l.metadata);g.kind==="workflow_card"&&(s.set(d,l.started_at),n.set(d,{taskId:l.id,workflowRunId:g.workflowRunId,raw:l.result??void 0}));};for(let d of this.resolveDbPaths()){if(!bs.existsSync(d))continue;let l=Re(d);try{let c=drizzleOrm.and(drizzleOrm.inArray(p.thread_id,e),drizzleOrm.like(p.metadata,'%"kind":"workflow_card"%')),g=l.db.select({id:p.id,thread_id:p.thread_id,metadata:p.metadata,result:p.result,started_at:p.started_at}).from(p).where(i?drizzleOrm.and(c,i):c).all();for(let w of g)a(w.thread_id,w);let f=drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.like(p.metadata,'%"kind":"workflow_card"%')),m=l.db.select({id:p.id,command:p.command,metadata:p.metadata,result:p.result,started_at:p.started_at}).from(p).where(i?drizzleOrm.and(f,i):f).all();for(let w of m){let _=this.extractThreadIdFromCommand(w.command);!_||!o.has(_)||a(_,w);}}catch(c){throw new b("DB_ERROR","Failed to batch fetch workflow cards",c)}finally{l.close();}}return n}findAllTasks(e){if(!this.dbExists())return {rows:[],total:0};let t=this.openHandle(false);try{let n=[];e.workspaceId&&n.push(drizzleOrm.eq(p.workspace_id,e.workspaceId));let o=e.agents&&e.agents.length>0?e.agents:e.agentId?[e.agentId]:null;o&&n.push(drizzleOrm.inArray(p.agent_id,o));let s=e.statuses&&e.statuses.length>0?e.statuses:e.status?[e.status]:null;s&&n.push(drizzleOrm.inArray(p.status,s));let i=e.q??e.search;i&&n.push(drizzleOrm.like(p.prompt,`%${i}%`)),e.from&&n.push(drizzleOrm.gte(p.started_at,e.from)),e.to&&n.push(drizzleOrm.lt(p.started_at,e.to));let a=n.length>0?drizzleOrm.and(...n):void 0,d=t.db.select({count:drizzleOrm.sql`count(*)`}).from(p).where(a).get(),l=(e.sortDir??"DESC")==="ASC"?drizzleOrm.asc(p.started_at):drizzleOrm.desc(p.started_at);return {rows:t.db.select().from(p).where(a).orderBy(l).limit(e.limit).offset(e.offset).all(),total:d?.count??0}}catch(n){throw new b("DB_ERROR","Failed to find all tasks",n)}finally{t.close();}}getAgentUsage(e,t,n){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.all(n?drizzleOrm.sql`
82
+ `)}catch(n){throw new b("DB_ERROR","Failed to get workspace usage summary",n)}finally{t.close();}}getThreadTokenUsage(e,t){let n=this.resolveDbPaths(),o=new Set,s=0,i=0,a=0;for(let d of n){if(!bs.existsSync(d))continue;let l=_e(d);try{let c=drizzleOrm.or(drizzleOrm.eq(u.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(u.thread_id),drizzleOrm.like(u.command,`%--thread=${e}%`))),g=t?drizzleOrm.and(c,drizzleOrm.eq(u.workspace_id,t)):c,f=l.db.select({id:u.id,input_tokens:u.input_tokens,output_tokens:u.output_tokens,cost_usd:u.cost_usd}).from(u).where(g).all();for(let m of f)o.has(m.id)||(o.add(m.id),s+=m.input_tokens??0,i+=m.output_tokens??0,a+=m.cost_usd??0);}catch(c){throw new b("DB_ERROR","Failed to get thread token usage",c)}finally{l.close();}}return {inputTokens:s,outputTokens:i,costUsd:a}}findTasksByThread(e,t){let n=this.resolveDbPaths(),o=new Set,s=[];for(let i of n){if(!bs.existsSync(i))continue;let a=_e(i);try{let d=drizzleOrm.or(drizzleOrm.eq(u.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(u.thread_id),drizzleOrm.like(u.command,`%--thread=${e}%`))),l=t?drizzleOrm.and(d,drizzleOrm.eq(u.workspace_id,t)):d,c=a.db.select().from(u).where(l).orderBy(drizzleOrm.asc(u.started_at)).all();for(let g of c)o.has(g.id)||(o.add(g.id),s.push(g));}catch(d){throw new b("DB_ERROR","Failed to find tasks by thread",d)}finally{a.close();}}return s}parseWorkflowCardMetadata(e){if(!e)return {};try{let t=JSON.parse(e);return {kind:typeof t.kind=="string"?t.kind:void 0,workflowRunId:typeof t.workflowRunId=="string"?t.workflowRunId:void 0}}catch{return {}}}extractThreadIdFromCommand(e){return e?/--thread=(\S+)/.exec(e)?.[1]??null:null}findRunningWorkflowParentTasks(){if(!this.dbExists())return [];let e=[];for(let t of this.resolveDbPaths()){if(!bs.existsSync(t))continue;let n=_e(t);try{e.push(...n.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 b("DB_ERROR","Failed to find workflow parent tasks",o)}finally{n.close();}}return e}batchFetchWorkflowCards(e,t){let n=new Map;if(e.length===0)return n;let o=new Set(e),s=new Map,i=t?drizzleOrm.eq(u.workspace_id,t):void 0,a=(d,l)=>{if(!d)return;let c=s.get(d);if(c&&l.started_at<=c)return;let g=this.parseWorkflowCardMetadata(l.metadata);g.kind==="workflow_card"&&(s.set(d,l.started_at),n.set(d,{taskId:l.id,workflowRunId:g.workflowRunId,raw:l.result??void 0}));};for(let d of this.resolveDbPaths()){if(!bs.existsSync(d))continue;let l=_e(d);try{let c=drizzleOrm.and(drizzleOrm.inArray(u.thread_id,e),drizzleOrm.like(u.metadata,'%"kind":"workflow_card"%')),g=l.db.select({id:u.id,thread_id:u.thread_id,metadata:u.metadata,result:u.result,started_at:u.started_at}).from(u).where(i?drizzleOrm.and(c,i):c).all();for(let w of g)a(w.thread_id,w);let f=drizzleOrm.and(drizzleOrm.isNull(u.thread_id),drizzleOrm.like(u.metadata,'%"kind":"workflow_card"%')),m=l.db.select({id:u.id,command:u.command,metadata:u.metadata,result:u.result,started_at:u.started_at}).from(u).where(i?drizzleOrm.and(f,i):f).all();for(let w of m){let _=this.extractThreadIdFromCommand(w.command);!_||!o.has(_)||a(_,w);}}catch(c){throw new b("DB_ERROR","Failed to batch fetch workflow cards",c)}finally{l.close();}}return n}findAllTasks(e){if(!this.dbExists())return {rows:[],total:0};let t=this.openHandle(false);try{let n=[];e.workspaceId&&n.push(drizzleOrm.eq(u.workspace_id,e.workspaceId));let o=e.agents&&e.agents.length>0?e.agents:e.agentId?[e.agentId]:null;o&&n.push(drizzleOrm.inArray(u.agent_id,o));let s=e.statuses&&e.statuses.length>0?e.statuses:e.status?[e.status]:null;s&&n.push(drizzleOrm.inArray(u.status,s));let i=e.q??e.search;i&&n.push(drizzleOrm.like(u.prompt,`%${i}%`)),e.from&&n.push(drizzleOrm.gte(u.started_at,e.from)),e.to&&n.push(drizzleOrm.lt(u.started_at,e.to));let a=n.length>0?drizzleOrm.and(...n):void 0,d=t.db.select({count:drizzleOrm.sql`count(*)`}).from(u).where(a).get(),l=(e.sortDir??"DESC")==="ASC"?drizzleOrm.asc(u.started_at):drizzleOrm.desc(u.started_at);return {rows:t.db.select().from(u).where(a).orderBy(l).limit(e.limit).offset(e.offset).all(),total:d?.count??0}}catch(n){throw new b("DB_ERROR","Failed to find all tasks",n)}finally{t.close();}}getAgentUsage(e,t,n){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.all(n?drizzleOrm.sql`
83
83
  SELECT
84
84
  t.agent_id,
85
85
  t.workspace_id,
@@ -217,112 +217,112 @@ ${n.join(`
217
217
  AND t.started_at < ${t}
218
218
  GROUP BY date(t.started_at), t.agent_id
219
219
  ORDER BY date(t.started_at) ASC
220
- `).map(i=>({date:i.date,agentId:i.agent_id,inputTokens:i.input_tokens,outputTokens:i.output_tokens,cachedInputTokens:i.cached_input_tokens,costUsd:i.cost_usd,totalTokens:i.input_tokens+i.output_tokens}))}catch(s){throw new b("DB_ERROR","Failed to get agent usage trend",s)}finally{o.close();}}findTaskForStop(e,t){if(!this.dbExists())return;let n=this.openHandle(false);try{return n.db.select().from(p).where(drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.workspace_id,t))).limit(1).get()??void 0}catch(o){throw new b("DB_ERROR","Failed to find task for stop",o)}finally{n.close();}}findLatestTaskByMetadata(e){if(!this.dbExists())return null;let t=this.openHandle(false);try{return t.db.select({id:p.id,thread_id:p.thread_id,status:p.status,result:p.result,error:p.error,started_at:p.started_at,completed_at:p.completed_at}).from(p).where(drizzleOrm.and(drizzleOrm.eq(p.agent_id,e.agentId),drizzleOrm.eq(p.workspace_id,e.workspaceId),drizzleOrm.sql`${p.metadata} IS NOT NULL AND json_valid(${p.metadata}) AND json_extract(${p.metadata}, '$.' || ${e.metaKey}) = ${e.metaValue}`)).orderBy(drizzleOrm.desc(p.started_at)).limit(1).get()??null}catch(n){throw new b("DB_ERROR","Failed to find latest task by metadata",n)}finally{t.close();}}markTaskFailed(e,t,n){if(!this.dbExists())return;let o=this.openHandle(true);try{let s=new Date().toISOString(),i=n?drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.status,"running"),drizzleOrm.eq(p.workspace_id,n)):drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.status,"running"));o.db.update(p).set({status:"failed",error:t,completed_at:s}).where(i).run();}catch(s){throw s instanceof b?s:new b("DB_ERROR","Failed to mark task failed",s)}finally{o.close();}}findTasksByPromptHint(e,t){let n=this.resolveDbPaths(),o=new Set,s=[];for(let i of n){if(!bs.existsSync(i))continue;let a=Re(i);try{let d=t?drizzleOrm.and(drizzleOrm.like(p.prompt,`%${e}%`),drizzleOrm.eq(p.workspace_id,t)):drizzleOrm.like(p.prompt,`%${e}%`),l=a.db.select().from(p).where(d).orderBy(drizzleOrm.asc(p.started_at)).all();for(let c of l)o.has(c.id)||(o.add(c.id),s.push(c));}catch(d){throw new b("DB_ERROR","Failed to find tasks by prompt hint",d)}finally{a.close();}}return s}getProviderUsage(e,t,n){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=drizzleOrm.sql`
220
+ `).map(i=>({date:i.date,agentId:i.agent_id,inputTokens:i.input_tokens,outputTokens:i.output_tokens,cachedInputTokens:i.cached_input_tokens,costUsd:i.cost_usd,totalTokens:i.input_tokens+i.output_tokens}))}catch(s){throw new b("DB_ERROR","Failed to get agent usage trend",s)}finally{o.close();}}findTaskForStop(e,t){if(!this.dbExists())return;let n=this.openHandle(false);try{return n.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 b("DB_ERROR","Failed to find task for stop",o)}finally{n.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(n){throw new b("DB_ERROR","Failed to find latest task by metadata",n)}finally{t.close();}}markTaskFailed(e,t,n){if(!this.dbExists())return;let o=this.openHandle(true);try{let s=new Date().toISOString(),i=n?drizzleOrm.and(drizzleOrm.eq(u.id,e),drizzleOrm.eq(u.status,"running"),drizzleOrm.eq(u.workspace_id,n)):drizzleOrm.and(drizzleOrm.eq(u.id,e),drizzleOrm.eq(u.status,"running"));o.db.update(u).set({status:"failed",error:t,completed_at:s}).where(i).run();}catch(s){throw s instanceof b?s:new b("DB_ERROR","Failed to mark task failed",s)}finally{o.close();}}findTasksByPromptHint(e,t){let n=this.resolveDbPaths(),o=new Set,s=[];for(let i of n){if(!bs.existsSync(i))continue;let a=_e(i);try{let d=t?drizzleOrm.and(drizzleOrm.like(u.prompt,`%${e}%`),drizzleOrm.eq(u.workspace_id,t)):drizzleOrm.like(u.prompt,`%${e}%`),l=a.db.select().from(u).where(d).orderBy(drizzleOrm.asc(u.started_at)).all();for(let c of l)o.has(c.id)||(o.add(c.id),s.push(c));}catch(d){throw new b("DB_ERROR","Failed to find tasks by prompt hint",d)}finally{a.close();}}return s}getProviderUsage(e,t,n){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=drizzleOrm.sql`
221
221
  CASE
222
- WHEN ${p.model} LIKE 'claude-%' OR ${p.model} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
223
- WHEN ${p.model} LIKE 'gpt-%' OR ${p.model} LIKE 'codex-%' THEN 'codex'
224
- WHEN ${p.model} LIKE 'gemini-%' THEN 'gemini'
225
- WHEN ${p.model} LIKE 'zai-%' OR ${p.model} LIKE 'openrouter/z-ai/%' THEN 'opencode'
226
- WHEN ${p.model} LIKE 'minimax/%' THEN 'minimax'
227
- WHEN ${p.model} LIKE 'qwen%' THEN 'qwen'
222
+ WHEN ${u.model} LIKE 'claude-%' OR ${u.model} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
223
+ WHEN ${u.model} LIKE 'gpt-%' OR ${u.model} LIKE 'codex-%' THEN 'codex'
224
+ WHEN ${u.model} LIKE 'gemini-%' THEN 'gemini'
225
+ WHEN ${u.model} LIKE 'zai-%' OR ${u.model} LIKE 'openrouter/z-ai/%' THEN 'opencode'
226
+ WHEN ${u.model} LIKE 'minimax/%' THEN 'minimax'
227
+ WHEN ${u.model} LIKE 'qwen%' THEN 'qwen'
228
228
  ELSE 'unknown'
229
229
  END
230
230
  `,i=drizzleOrm.sql`
231
- COALESCE(${p.input_tokens}, 0)
231
+ COALESCE(${u.input_tokens}, 0)
232
232
  + CASE
233
- WHEN ${p.started_at} >= ${qe}
233
+ WHEN ${u.started_at} >= ${qe}
234
234
  AND (
235
- ${p.crewx_version} IS NULL
236
- OR (${p.crewx_version} LIKE '0.8.%' AND ${p.crewx_version} NOT LIKE '0.8.9%')
237
- OR (${p.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${p.crewx_version}, ${ze}) AS INTEGER) < ${Ke})
235
+ ${u.crewx_version} IS NULL
236
+ OR (${u.crewx_version} LIKE '0.8.%' AND ${u.crewx_version} NOT LIKE '0.8.9%')
237
+ OR (${u.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${u.crewx_version}, ${ze}) AS INTEGER) < ${Ke})
238
238
  )
239
- THEN COALESCE(${p.cached_input_tokens}, 0)
239
+ THEN COALESCE(${u.cached_input_tokens}, 0)
240
240
  ELSE 0
241
241
  END
242
- `,a=n?drizzleOrm.sql`WHERE ${p.status} IN ('completed', 'success') AND ${p.started_at} >= ${e} AND ${p.started_at} < ${t} AND ${p.workspace_id} = ${n}`:drizzleOrm.sql`WHERE ${p.status} IN ('completed', 'success') AND ${p.started_at} >= ${e} AND ${p.started_at} < ${t}`;return o.db.all(drizzleOrm.sql`
242
+ `,a=n?drizzleOrm.sql`WHERE ${u.status} IN ('completed', 'success') AND ${u.started_at} >= ${e} AND ${u.started_at} < ${t} AND ${u.workspace_id} = ${n}`:drizzleOrm.sql`WHERE ${u.status} IN ('completed', 'success') AND ${u.started_at} >= ${e} AND ${u.started_at} < ${t}`;return o.db.all(drizzleOrm.sql`
243
243
  SELECT
244
244
  ${s} AS provider,
245
245
  COUNT(*) AS total_tasks,
246
246
  COALESCE(SUM(${i}), 0) AS input_tokens,
247
- COALESCE(SUM(${p.output_tokens}), 0) AS output_tokens,
248
- COALESCE(SUM(${p.cached_input_tokens}), 0) AS cached_input_tokens,
249
- COALESCE(SUM(${p.cost_usd}), 0) AS cost_usd,
250
- COALESCE(SUM(${p.duration_ms}), 0) AS active_duration_ms,
251
- MAX(${p.completed_at}) AS last_active_at
252
- FROM ${p}
247
+ COALESCE(SUM(${u.output_tokens}), 0) AS output_tokens,
248
+ COALESCE(SUM(${u.cached_input_tokens}), 0) AS cached_input_tokens,
249
+ COALESCE(SUM(${u.cost_usd}), 0) AS cost_usd,
250
+ COALESCE(SUM(${u.duration_ms}), 0) AS active_duration_ms,
251
+ MAX(${u.completed_at}) AS last_active_at
252
+ FROM ${u}
253
253
  ${a}
254
254
  GROUP BY provider
255
- ORDER BY (COALESCE(SUM(${i}), 0) + COALESCE(SUM(${p.output_tokens}), 0)) DESC
255
+ ORDER BY (COALESCE(SUM(${i}), 0) + COALESCE(SUM(${u.output_tokens}), 0)) DESC
256
256
  `).map(l=>({provider:l.provider,totalTasks:l.total_tasks,inputTokens:l.input_tokens,outputTokens:l.output_tokens,cachedInputTokens:l.cached_input_tokens,costUsd:l.cost_usd,totalTokens:l.input_tokens+l.output_tokens,activeDurationMs:l.active_duration_ms??0,lastActiveAt:l.last_active_at??null}))}catch(s){throw new b("DB_ERROR","Failed to get provider usage",s)}finally{o.close();}}getModelUsage(e,t,n){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=drizzleOrm.sql`
257
257
  CASE
258
- WHEN ${p.model} LIKE 'claude-%' OR ${p.model} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
259
- WHEN ${p.model} LIKE 'gpt-%' OR ${p.model} LIKE 'codex-%' THEN 'codex'
260
- WHEN ${p.model} LIKE 'gemini-%' THEN 'gemini'
261
- WHEN ${p.model} LIKE 'zai-%' OR ${p.model} LIKE 'openrouter/z-ai/%' THEN 'opencode'
262
- WHEN ${p.model} LIKE 'minimax/%' THEN 'minimax'
263
- WHEN ${p.model} LIKE 'qwen%' THEN 'qwen'
258
+ WHEN ${u.model} LIKE 'claude-%' OR ${u.model} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
259
+ WHEN ${u.model} LIKE 'gpt-%' OR ${u.model} LIKE 'codex-%' THEN 'codex'
260
+ WHEN ${u.model} LIKE 'gemini-%' THEN 'gemini'
261
+ WHEN ${u.model} LIKE 'zai-%' OR ${u.model} LIKE 'openrouter/z-ai/%' THEN 'opencode'
262
+ WHEN ${u.model} LIKE 'minimax/%' THEN 'minimax'
263
+ WHEN ${u.model} LIKE 'qwen%' THEN 'qwen'
264
264
  ELSE 'unknown'
265
265
  END
266
266
  `,i=drizzleOrm.sql`
267
- COALESCE(${p.input_tokens}, 0)
267
+ COALESCE(${u.input_tokens}, 0)
268
268
  + CASE
269
- WHEN ${p.started_at} >= ${qe}
269
+ WHEN ${u.started_at} >= ${qe}
270
270
  AND (
271
- ${p.crewx_version} IS NULL
272
- OR (${p.crewx_version} LIKE '0.8.%' AND ${p.crewx_version} NOT LIKE '0.8.9%')
273
- OR (${p.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${p.crewx_version}, ${ze}) AS INTEGER) < ${Ke})
271
+ ${u.crewx_version} IS NULL
272
+ OR (${u.crewx_version} LIKE '0.8.%' AND ${u.crewx_version} NOT LIKE '0.8.9%')
273
+ OR (${u.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${u.crewx_version}, ${ze}) AS INTEGER) < ${Ke})
274
274
  )
275
- THEN COALESCE(${p.cached_input_tokens}, 0)
275
+ THEN COALESCE(${u.cached_input_tokens}, 0)
276
276
  ELSE 0
277
277
  END
278
- `,a=n?drizzleOrm.sql`WHERE ${p.status} IN ('completed', 'success') AND ${p.started_at} >= ${e} AND ${p.started_at} < ${t} AND ${p.workspace_id} = ${n}`:drizzleOrm.sql`WHERE ${p.status} IN ('completed', 'success') AND ${p.started_at} >= ${e} AND ${p.started_at} < ${t}`,d=o.db.all(drizzleOrm.sql`
278
+ `,a=n?drizzleOrm.sql`WHERE ${u.status} IN ('completed', 'success') AND ${u.started_at} >= ${e} AND ${u.started_at} < ${t} AND ${u.workspace_id} = ${n}`:drizzleOrm.sql`WHERE ${u.status} IN ('completed', 'success') AND ${u.started_at} >= ${e} AND ${u.started_at} < ${t}`,d=o.db.all(drizzleOrm.sql`
279
279
  SELECT
280
- ${p.model} AS model,
280
+ ${u.model} AS model,
281
281
  ${s} AS provider,
282
282
  COUNT(*) AS total_tasks,
283
283
  COALESCE(SUM(${i}), 0) AS input_tokens,
284
- COALESCE(SUM(${p.output_tokens}), 0) AS output_tokens,
285
- COALESCE(SUM(${p.cached_input_tokens}), 0) AS cached_input_tokens,
286
- COALESCE(SUM(${p.cost_usd}), 0) AS cost_usd,
287
- COALESCE(SUM(${p.duration_ms}), 0) AS active_duration_ms,
288
- MAX(${p.completed_at}) AS last_active_at
289
- FROM ${p}
284
+ COALESCE(SUM(${u.output_tokens}), 0) AS output_tokens,
285
+ COALESCE(SUM(${u.cached_input_tokens}), 0) AS cached_input_tokens,
286
+ COALESCE(SUM(${u.cost_usd}), 0) AS cost_usd,
287
+ COALESCE(SUM(${u.duration_ms}), 0) AS active_duration_ms,
288
+ MAX(${u.completed_at}) AS last_active_at
289
+ FROM ${u}
290
290
  ${a}
291
- GROUP BY ${p.model}
292
- `),l=new Map;for(let c of d){let g=En(c.model??""),f=l.get(g);f?(f.totalTasks+=c.total_tasks,f.inputTokens+=c.input_tokens,f.outputTokens+=c.output_tokens,f.cachedInputTokens+=c.cached_input_tokens,f.costUsd+=c.cost_usd,f.totalTokens+=c.input_tokens+c.output_tokens,f.activeDurationMs+=c.active_duration_ms??0,c.last_active_at&&(!f.lastActiveAt||c.last_active_at>f.lastActiveAt)&&(f.lastActiveAt=c.last_active_at)):l.set(g,{model:g,provider:c.provider,totalTasks:c.total_tasks,inputTokens:c.input_tokens,outputTokens:c.output_tokens,cachedInputTokens:c.cached_input_tokens,costUsd:c.cost_usd,totalTokens:c.input_tokens+c.output_tokens,activeDurationMs:c.active_duration_ms??0,lastActiveAt:c.last_active_at??null});}return Array.from(l.values()).sort((c,g)=>g.costUsd-c.costUsd)}catch(s){throw new b("DB_ERROR","Failed to get model usage",s)}finally{o.close();}}getTasksForReport(e,t,n){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=n?drizzleOrm.sql`WHERE ${p.started_at} >= ${e} AND ${p.started_at} < ${t} AND ${p.workspace_id} = ${n}`:drizzleOrm.sql`WHERE ${p.started_at} >= ${e} AND ${p.started_at} < ${t}`;return o.db.all(drizzleOrm.sql`
291
+ GROUP BY ${u.model}
292
+ `),l=new Map;for(let c of d){let g=En(c.model??""),f=l.get(g);f?(f.totalTasks+=c.total_tasks,f.inputTokens+=c.input_tokens,f.outputTokens+=c.output_tokens,f.cachedInputTokens+=c.cached_input_tokens,f.costUsd+=c.cost_usd,f.totalTokens+=c.input_tokens+c.output_tokens,f.activeDurationMs+=c.active_duration_ms??0,c.last_active_at&&(!f.lastActiveAt||c.last_active_at>f.lastActiveAt)&&(f.lastActiveAt=c.last_active_at)):l.set(g,{model:g,provider:c.provider,totalTasks:c.total_tasks,inputTokens:c.input_tokens,outputTokens:c.output_tokens,cachedInputTokens:c.cached_input_tokens,costUsd:c.cost_usd,totalTokens:c.input_tokens+c.output_tokens,activeDurationMs:c.active_duration_ms??0,lastActiveAt:c.last_active_at??null});}return Array.from(l.values()).sort((c,g)=>g.costUsd-c.costUsd)}catch(s){throw new b("DB_ERROR","Failed to get model usage",s)}finally{o.close();}}getTasksForReport(e,t,n){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=n?drizzleOrm.sql`WHERE ${u.started_at} >= ${e} AND ${u.started_at} < ${t} AND ${u.workspace_id} = ${n}`:drizzleOrm.sql`WHERE ${u.started_at} >= ${e} AND ${u.started_at} < ${t}`;return o.db.all(drizzleOrm.sql`
293
293
  SELECT
294
- ${p.thread_id} AS thread_id,
295
- ${p.agent_id} AS agent_id,
296
- ${p.started_at} AS started_at,
297
- ${p.status} AS status,
298
- ${p.error} AS error,
299
- ${p.exit_code} AS exit_code
300
- FROM ${p}
294
+ ${u.thread_id} AS thread_id,
295
+ ${u.agent_id} AS agent_id,
296
+ ${u.started_at} AS started_at,
297
+ ${u.status} AS status,
298
+ ${u.error} AS error,
299
+ ${u.exit_code} AS exit_code
300
+ FROM ${u}
301
301
  ${s}
302
- ORDER BY ${p.started_at} ASC
303
- `).map(a=>({threadId:a.thread_id,agentId:a.agent_id,startedAt:a.started_at,status:a.status,error:a.error,exitCode:a.exit_code}))}catch(s){throw new b("DB_ERROR","Failed to get tasks for report",s)}finally{o.close();}}findTaskEvidence(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{let n=[];e.workspaceId&&n.push(drizzleOrm.eq(p.workspace_id,e.workspaceId)),e.agents&&e.agents.length>0&&n.push(drizzleOrm.inArray(p.agent_id,e.agents)),e.statuses&&e.statuses.length>0&&n.push(drizzleOrm.inArray(p.status,e.statuses)),e.from&&n.push(drizzleOrm.gte(p.started_at,e.from)),e.to&&n.push(drizzleOrm.lt(p.started_at,e.to));let o=n.length>0?drizzleOrm.and(...n):void 0,s=(e.order??"DESC")==="ASC"?drizzleOrm.asc(p.started_at):drizzleOrm.desc(p.started_at),i={id:p.id,agent_id:p.agent_id,status:p.status,prompt:p.prompt,started_at:p.started_at,completed_at:p.completed_at,thread_id:p.thread_id};return e.limit?t.db.select(i).from(p).where(o).orderBy(s).limit(e.limit).all():t.db.select(i).from(p).where(o).orderBy(s).all()}catch(n){throw new b("DB_ERROR","Failed to find task evidence",n)}finally{t.close();}}findThreadChains(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{let n=e.maxThreads??8,o=e.maxTurnsPerThread??4,s=[drizzleOrm.isNotNull(p.thread_id),drizzleOrm.isNull(p.parent_task_id),drizzleOrm.isNull(p.caller_agent_id),drizzleOrm.or(drizzleOrm.isNull(p.platform),drizzleOrm.ne(p.platform,"workflow")),drizzleOrm.or(drizzleOrm.isNull(p.metadata),drizzleOrm.notLike(p.metadata,'%"kind":"workflow_card"%')),drizzleOrm.or(drizzleOrm.isNull(p.metadata),drizzleOrm.notLike(p.metadata,'%"retriedFromTaskId"%'))];e.workspaceId&&s.push(drizzleOrm.eq(p.workspace_id,e.workspaceId)),e.from&&s.push(drizzleOrm.gte(p.started_at,e.from)),e.to&&s.push(drizzleOrm.lt(p.started_at,e.to));let i=t.db.select({id:p.id,agent_id:p.agent_id,status:p.status,prompt:p.prompt,started_at:p.started_at,completed_at:p.completed_at,thread_id:p.thread_id}).from(p).where(drizzleOrm.and(...s)).orderBy(drizzleOrm.asc(p.started_at),drizzleOrm.asc(p.id)).all(),a=new Map;for(let l of i){if(!l.thread_id)continue;let c={id:l.id,agentId:l.agent_id,status:l.status,prompt:l.prompt,startedAt:l.started_at,completedAt:l.completed_at},g=a.get(l.thread_id);g?g.push(c):a.set(l.thread_id,[c]);}let d=[];for(let[l,c]of a){let g=c.filter(f=>f.agentId===e.targetAgentId).length;g<2||d.push({threadId:l,targetAgentTurnCount:g,turns:c});}return d.sort((l,c)=>{let g=l.turns[l.turns.length-1].startedAt,f=c.turns[c.turns.length-1].startedAt;return g<f?1:g>f?-1:0}),d.slice(0,n).map(l=>({threadId:l.threadId,targetAgentTurnCount:l.targetAgentTurnCount,turns:l.turns.slice(-o)}))}catch(n){throw new b("DB_ERROR","Failed to find thread chains",n)}finally{t.close();}}};var cl=new Set(["Read","Grep","Find","Glob"]),ul=["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"],pl=[/\bgit\s+(commit|push|pull|merge|rebase|reset|checkout|switch|add|rm)\b/,/\bnpm\s+(install|ci|publish|run\s+(test|lint|build))\b/,/\bnpx\s+tsc\b/,/\bpnpm\s+(install|run)\b/,/\bvitest\b/,/\bjest\b/];function fl(r){let e=r.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":r}function gl(r,e){if(cl.has(r))return true;if(r!=="Bash"||!e)return false;let t=e.split(`
304
- `)[0].trimStart();return pl.some(n=>n.test(t))?false:ul.some(n=>t.startsWith(n))}function Wr(r){return r.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function ml(r,e,t){if(r!=="Read"||!e)return "ok";let o=e.split(`
302
+ ORDER BY ${u.started_at} ASC
303
+ `).map(a=>({threadId:a.thread_id,agentId:a.agent_id,startedAt:a.started_at,status:a.status,error:a.error,exitCode:a.exit_code}))}catch(s){throw new b("DB_ERROR","Failed to get tasks for report",s)}finally{o.close();}}findTaskEvidence(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{let n=[];e.workspaceId&&n.push(drizzleOrm.eq(u.workspace_id,e.workspaceId)),e.agents&&e.agents.length>0&&n.push(drizzleOrm.inArray(u.agent_id,e.agents)),e.statuses&&e.statuses.length>0&&n.push(drizzleOrm.inArray(u.status,e.statuses)),e.from&&n.push(drizzleOrm.gte(u.started_at,e.from)),e.to&&n.push(drizzleOrm.lt(u.started_at,e.to));let o=n.length>0?drizzleOrm.and(...n):void 0,s=(e.order??"DESC")==="ASC"?drizzleOrm.asc(u.started_at):drizzleOrm.desc(u.started_at),i={id:u.id,agent_id:u.agent_id,status:u.status,prompt:u.prompt,started_at:u.started_at,completed_at:u.completed_at,thread_id:u.thread_id};return e.limit?t.db.select(i).from(u).where(o).orderBy(s).limit(e.limit).all():t.db.select(i).from(u).where(o).orderBy(s).all()}catch(n){throw new b("DB_ERROR","Failed to find task evidence",n)}finally{t.close();}}findThreadChains(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{let n=e.maxThreads??8,o=e.maxTurnsPerThread??4,s=[drizzleOrm.isNotNull(u.thread_id),drizzleOrm.isNull(u.parent_task_id),drizzleOrm.isNull(u.caller_agent_id),drizzleOrm.or(drizzleOrm.isNull(u.platform),drizzleOrm.ne(u.platform,"workflow")),drizzleOrm.or(drizzleOrm.isNull(u.metadata),drizzleOrm.notLike(u.metadata,'%"kind":"workflow_card"%')),drizzleOrm.or(drizzleOrm.isNull(u.metadata),drizzleOrm.notLike(u.metadata,'%"retriedFromTaskId"%'))];e.workspaceId&&s.push(drizzleOrm.eq(u.workspace_id,e.workspaceId)),e.from&&s.push(drizzleOrm.gte(u.started_at,e.from)),e.to&&s.push(drizzleOrm.lt(u.started_at,e.to));let i=t.db.select({id:u.id,agent_id:u.agent_id,status:u.status,prompt:u.prompt,started_at:u.started_at,completed_at:u.completed_at,thread_id:u.thread_id}).from(u).where(drizzleOrm.and(...s)).orderBy(drizzleOrm.asc(u.started_at),drizzleOrm.asc(u.id)).all(),a=new Map;for(let l of i){if(!l.thread_id)continue;let c={id:l.id,agentId:l.agent_id,status:l.status,prompt:l.prompt,startedAt:l.started_at,completedAt:l.completed_at},g=a.get(l.thread_id);g?g.push(c):a.set(l.thread_id,[c]);}let d=[];for(let[l,c]of a){let g=c.filter(f=>f.agentId===e.targetAgentId).length;g<2||d.push({threadId:l,targetAgentTurnCount:g,turns:c});}return d.sort((l,c)=>{let g=l.turns[l.turns.length-1].startedAt,f=c.turns[c.turns.length-1].startedAt;return g<f?1:g>f?-1:0}),d.slice(0,n).map(l=>({threadId:l.threadId,targetAgentTurnCount:l.targetAgentTurnCount,turns:l.turns.slice(-o)}))}catch(n){throw new b("DB_ERROR","Failed to find thread chains",n)}finally{t.close();}}};var cl=new Set(["Read","Grep","Find","Glob"]),ul=["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"],pl=[/\bgit\s+(commit|push|pull|merge|rebase|reset|checkout|switch|add|rm)\b/,/\bnpm\s+(install|ci|publish|run\s+(test|lint|build))\b/,/\bnpx\s+tsc\b/,/\bpnpm\s+(install|run)\b/,/\bvitest\b/,/\bjest\b/];function fl(r){let e=r.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":r}function gl(r,e){if(cl.has(r))return true;if(r!=="Bash"||!e)return false;let t=e.split(`
304
+ `)[0].trimStart();return pl.some(n=>n.test(t))?false:ul.some(n=>t.startsWith(n))}function Fr(r){return r.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function ml(r,e,t){if(r!=="Read"||!e)return "ok";let o=e.split(`
305
305
  `).find(s=>s.trim()&&!s.startsWith("Read "))?.trim()??e.trim();if(!o)return "unknown";try{let s=bs__namespace.statSync(o);if(t){let i=Date.parse(t);if(!Number.isNaN(i)&&s.mtimeMs>i)return "stale"}return "ok"}catch{return "unknown"}}function hl(r){let e=new Set;for(let t of r)try{let n=JSON.parse(t);n.type&&e.add(n.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 yl(r){if(!Array.isArray(r))return [];let e=r,t=e.filter(a=>a.level==="stdout"&&a.message).map(a=>a.message),n=hl(t),o=[];for(let a of e)a.level==="info"&&a.message?o.push(...we(a.message,a.timestamp)):a.level==="stdout"&&a.message&&n&&o.push(...Bt("",a.message,n));let s=new Map,i=[];for(let a of o)if(a.type==="tool_use"){let d={tool:fl(a.toolName??""),input:a.toolInput??null,result:null,isError:false},l=a.toolUseId;if(l){if(s.has(l)){s.get(l).input=d.input;continue}s.set(l,d);}i.push(d);}else if(a.type==="tool_result"){if(a.toolUseId&&s.has(a.toolUseId)){let d=s.get(a.toolUseId);d.isError=a.isError===true,d.result=a.resultPreview??null;}else for(let d=i.length-1;d>=0;d--)if(i[d].result===null){i[d].isError=a.isError===true,i[d].result=a.resultPreview??null;break}}return i}function wl(r,e){let t=yl(r),n=[];for(let o of t){let s=o.tool==="Bash"?o.input?.split(`
306
- `)[0]?.slice(0,150)??null:o.input?.slice(0,150)??null,i=gl(o.tool,o.input)&&!o.isError;n.push({tool:o.tool,cmd:s,result:o.result,status:ml(o.tool,o.input,e),reusable:i});}return n}function _l(r,e,t){let n=["<activity_log>"];if(r.length===0&&e===0)n.push(" <!-- no activity found in previous tasks -->");else {n.push(" <!-- tool activity from previous tasks -->"),e>0&&n.push(` <!-- ${e} entries omitted (cap) -->`);for(let o of r){let s=`tool="${Wr(o.tool)}"`,i=o.cmd?` cmd="${Wr(o.cmd)}"`:"",a="";if(o.reusable&&(a=o.status==="stale"?' reused="stale"':' reused="ok"'),o.reusable&&o.status==="stale")n.push(` <entry ${s}${i}${a}>\u26A0\uFE0F changed since \u2014 re-read</entry>`);else if(o.result){n.push(` <entry ${s}${i}${a}>`);let d=t&&t>0?t:8e3,l=o.result;l.length>d?n.push(Wr(l.slice(0,d))+` \u2026 [truncated, ${d}/${l.length} chars shown]`):n.push(Wr(l)),n.push(" </entry>");}else n.push(` <entry ${s}${i}${a} />`);}}return n.push("</activity_log>"),n}function Ss(r){let{threadId:e,agentId:t,lookback:n,maxEntryChars:o,decayRate:s}=r;if(!n||!e||!t)return new Map;let i;try{i=new rr().findTasksByThread(e).filter(f=>!f.parent_task_id&&f.agent_id===t).sort((f,m)=>m.started_at>f.started_at?1:-1).slice(0,Math.min(n,5));}catch{return new Map}if(!i.length)return new Map;let a=[];for(let g of i){let f=[];try{let m=JSON.parse(g.logs??"[]");Array.isArray(m)&&(f=m);}catch{}a.push({taskId:g.id,entries:wl(f,g.completed_at)});}let d=new Map,l=typeof s=="number"&&s>0&&s<=1?s:1,c=1e3;for(let g=0;g<a.length;g++){let{taskId:f,entries:m}=a[g];if(m.length===0)continue;let w=Math.max(Math.floor((o??8e3)*Math.pow(l,g)),c),_=Math.max(0,m.length-200),k=_>0?m.slice(_):m,y=_l(k,_,w);d.set(f,y.join(`
307
- `));}return d}u();u();var vl={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")},kl={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 Is(r,e,t){r.tool("crewx_listAgents","List available CrewX agents exposed by this server",async()=>{let n=[];for(let o of t){let s=e.agents.get(o);s&&n.push({id:s.id,name:s.name??s.id,description:s.description??""});}return {content:[{type:"text",text:JSON.stringify(n,null,2)}]}}),r.tool("crewx_queryAgent","Query a CrewX agent with a read-only question",vl,async({agentId:n,query:o,context:s,thread:i})=>{if(!t.has(n))return {content:[{type:"text",text:`Agent '${n}' is not exposed by this server`}],isError:true};let a=await e.query(n,o,{context:s,threadId:i});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Query failed"}],isError:true}}),r.tool("crewx_executeAgent","Execute a task on a CrewX agent (may modify state)",kl,async({agentId:n,task:o,context:s,thread:i})=>{if(!t.has(n))return {content:[{type:"text",text:`Agent '${n}' is not exposed by this server`}],isError:true};let a=await e.execute(n,o,{context:s,threadId:i});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Execute failed"}],isError:true}});}u();function Os(r){return r.headers.get("Origin")?null:new Response(JSON.stringify({error:"Forbidden: Origin header required"}),{status:403,headers:{"Content-Type":"application/json"}})}async function Ms(r,e){return e?await e(r)?null:new Response(JSON.stringify({error:"Unauthorized"}),{status:401,headers:{"Content-Type":"application/json"}}):null}function Al(r,e){let t=new mcp_js.McpServer({name:"crewx-mcp-server",version:"1.0.0"},{capabilities:{tools:{}}});return Is(t,r,e),t}function Bn(r,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),n=new Map;return async o=>{let s=Os(o);if(s)return s;let i=await Ms(o,e.auth);if(i)return i;let a=o.headers.get("mcp-session-id");if(a&&n.has(a))return n.get(a).transport.handleRequest(o);let d=Al(r,t),l=new webStandardStreamableHttp_js.WebStandardStreamableHTTPServerTransport({sessionIdGenerator:()=>crypto.randomUUID(),onsessioninitialized:c=>{n.set(c,{transport:l,server:d});},onsessionclosed:c=>{n.delete(c);},enableJsonResponse:true});return await d.connect(l),l.handleRequest(o)}}u();function Ds(r){let e=K__namespace.resolve(r);return process.platform==="win32"&&(e=e.replace(/\\/g,"/"),e=e.replace(/^([A-Z]):/,(t,n)=>`${n.toLowerCase()}:`)),e.length>1&&!/^[a-zA-Z]:\/$/.test(e)&&(e=e.replace(/\/+$/,"")),e}function qn(r){let e=Ds(r);return crypto$1.createHash("sha256").update(e).digest("hex")}function Yl(r){return r?r.settings?.template?.exec:void 0}function Ql(){try{let r=new Uint8Array(8);return globalThis.crypto.getRandomValues(r),Array.from(r,e=>e.toString(16).padStart(2,"0")).join("")}catch{let{randomBytes:r}=oe("crypto");return r(8).toString("hex")}}var io=class r extends Zt{_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={},n,o,s){super(),this._agents=new Map(e.map(d=>[d.id,d])),this._config=n,this._projectRoot=s??(typeof process<"u"?process.cwd():"/");let i=s??(typeof process<"u"?process.env.CREWX_WORKSPACE??process.cwd():"/");this._workspaceId=qn(i),this._workspaceName=K.basename(i);let a=Yl(n);this._templateEngine=new Vt({execPolicy:t.execPolicy??a}),this._documentLoader=o??new at,this._layoutLoader=new Jt({templatesPath:wt()}),this._layoutRenderer=new Qt,this._remoteFactory=t.remoteFactory,this._additionalArgsProvider=t.additionalArgsProvider;}async resolveFileRemoteTarget(e){let t=this.getAgent(e),n=Array.isArray(t?.provider)?t?.provider[0]:t?.provider;if(!n?.startsWith("remote/"))return null;let o=n.slice(7),s=this.getRemoteProviderConfig(o);if(!s?.location?.startsWith("file://"))return null;let i=K.resolve(s.location.replace("file://","")),a=s.external_agent_id??e.replace(/^@/,""),d=this._remoteTargets.get(i);d||(d=(this._remoteFactory??(m=>r.loadYaml(m)))(i),this._remoteTargets.set(i,d),d.catch(()=>this._remoteTargets.delete(i)));let l=await d,c=l.getAgent("@"+a),g=Array.isArray(c?.provider)?c?.provider[0]:c?.provider;if(g?.startsWith("remote/"))throw new Error(`Chained remotes not allowed: "${o}" \u2192 "${g}"`);return {target:l,agentRef:"@"+a}}static async loadBuiltInConfig(e){let{yamlPath:t,dir:n}=nn(),o;try{o=bs.readFileSync(t,"utf-8");}catch(i){throw new Error(`[@crewx/sdk] Cannot read built-in config: ${t}
308
- ${i.message}`)}let s=wr(o);if(s.documents&&typeof s.documents=="object"){let i={};for(let[a,d]of Object.entries(s.documents))if(d&&typeof d=="object"){let l=d;typeof l.path=="string"&&!K.isAbsolute(l.path)?i[a]={...l,path:K.resolve(n,l.path)}:i[a]=l;}else i[a]=d;return {...s,documents:i}}return s}static mergeCrewxConfig(e,t){let n=new Map;for(let v of e.agents??[])n.set(v.id,v);for(let v of t.agents??[])n.has(v.id)&&console.warn(`[agent-loader] User agent "${v.id}" overrides built-in`),n.set(v.id,v);let o=Array.from(n.values()),s={...e.layouts??{},...t.layouts??{}},i={...e.documents??{},...t.documents??{}},a=e,d=t,l=Qs(a.vars,d.vars),c=Qs(a.settings,d.settings),g;e.skills&&t.skills&&typeof e.skills=="object"&&typeof t.skills=="object"&&!Array.isArray(e.skills)&&!Array.isArray(t.skills)?g={...e.skills,...t.skills}:g=t.skills??e.skills;let f=[...e.hooks??[],...t.hooks??[]],m=Zl(a.providers,d.providers),w={...e},_={...t};for(let v of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete w[v],delete _[v];let y={...{...w,..._},agents:o,layouts:s,documents:i,skills:g};return f.length>0&&(y.hooks=f),l!==void 0&&(y.vars=l),c!==void 0&&(y.settings=c),m!==void 0&&(y.providers=m),y}static async loadYaml(e,t,n){let o=t?.includeBuiltIns!==false,s,i;if(o){let c=await r.loadBuiltInConfig(n);if(e!==void 0){let g=_r(e);s=r.mergeCrewxConfig(c,g),i=K.dirname(e);}else s=c,i=process.cwd();}else {if(e===void 0)throw new Error("[@crewx/sdk] loadYaml: path is required when includeBuiltIns is false");s=_r(e),i=K.dirname(e);}let a=new at(n);await a.load(s.documents,i);let d=s.agents??[];return await Zs(d,s,t),new r(d,t??{},s,a,i)}static async fromConfig(e,t,n,o){let s=t?.includeBuiltIns===true,i=e;if(s){let c=await r.loadBuiltInConfig(o);i=r.mergeCrewxConfig(c,e);}let a=new at(o);await a.load(i.documents,n??(typeof process<"u"?process.cwd():"/"));let d=i.agents??[];return await Zs(d,i,t),new r(d,t??{},i,a,n)}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 n=Sn(t);return K.join(this._projectRoot,".crewx","logs",`${n}_${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 Bn(this,e)}async registerChannelAdapter(e){let{adapter:t,instanceId:n,config:o}=e;if(this._activeAdapters.has(n))throw new Error(`Adapter instance already registered: ${n}`);let s=new Set(t.manifest.capabilities),i=e.store??In(n),a=e.defaultMode??"query",d=t.manifest.platform,l=e.agentRunner??{run:async(m,w,_)=>{let y=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${m}`,w,{threadId:_?.threadId,platform:d});return {output:y.ok?y.data:y.error?.message??""}}},c=e.onInbound??(async m=>{let w=m.routingHints?.agentId??e.defaultAgent;if(!w)return {accepted:false,reason:"no_agent"};let{output:_}=await l.run(w,m.text,{threadId:m.threadId});return {accepted:true,output:_}}),g=Mn({instanceId:n,config:o,capabilities:s,db:i,agentRunner:l,onInbound:c}),f={adapter:t,ctx:g,state:"starting"};this._activeAdapters.set(n,f),this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:n,state:"starting",timestamp:new Date});try{await t.start(g),f.state="started",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:n,state:"started",timestamp:new Date});}catch(m){throw f.state="failed",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:n,state:"failed",error:m instanceof Error?m:new Error(String(m)),timestamp:new Date}),this._activeAdapters.delete(n),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(n){t.state="failed",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"failed",error:n instanceof Error?n:new Error(String(n)),timestamp:new Date});}finally{this._activeAdapters.delete(e);}}}async stopAllAdapters(e={}){let t=e.timeoutMs??1e4,n=Array.from(this._activeAdapters.keys()),o=await Promise.allSettled(n.map(s=>Promise.race([this.unregisterChannelAdapter(s),new Promise((i,a)=>setTimeout(()=>a(new Error(`Adapter stop timeout: ${s}`)),t))])));for(let s=0;s<o.length;s++)o[s].status==="rejected"&&console.error(`[crewx] adapter stop error (${n[s]}): ${o[s].reason}`);}abortAll(){for(let[e,t]of this._activeTasks)if(t.pid!==void 0)try{process.platform==="win32"?process.kill(t.pid,"SIGTERM"):process.kill(-t.pid,"SIGTERM");}catch(n){console.error(`[crewx] abort task ${e} (pid=${t.pid}) error: ${n instanceof Error?n.message:String(n)}`);}}async _drainActiveTasks(e){let t=Array.from(this._activeTasks.values()).map(n=>n.done);t.length!==0&&await Promise.race([Promise.allSettled(t),new Promise(n=>setTimeout(n,e).unref())]);}async close(){this.abortAll(),await this._drainActiveTasks(qt+1e3),await this.stopAllAdapters({timeoutMs:1e4});let e=[...this._remoteTargets.values()];this._remoteTargets.clear(),await Promise.allSettled(e.map(async n=>{try{await(await n).close();}catch(o){console.error(`[crewx] remote target close error: ${o instanceof Error?o.message:String(o)}`);}}));let t=[...this._plugins].reverse();for(let n of t)try{await n.detach(this);}catch(o){console.error(`[crewx] plugin ${n.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,n=t(e.role),o=t(e.team),s=t(e.provider),i=Array.from(this._agents.values());return n&&(i=i.filter(a=>a.role&&n.some(d=>ve(a.role.toLowerCase(),d)))),o&&(i=i.filter(a=>a.team&&o.some(d=>ve(a.team.toLowerCase(),d)))),s&&(i=i.filter(a=>(Array.isArray(a.provider)?a.provider:[a.provider]).some(l=>s.some(c=>ve(l.toLowerCase(),c))))),i}renderAgentPrompt(e){let t=e.startsWith("@")?e.slice(1):e,n=this._agents.get(t);if(!n)throw new be(t,Array.from(this._agents.keys()));return n.inline?.prompt??n.inline?.system_prompt??n.description??`You are an expert ${t}.`}async renderPrompt(e,t){let o={...await this._documentLoader.buildContext(),...t?.documents??{}},s={...t,documents:o};return this._templateEngine.render(e,s)}registerLayout(e,t){this._layoutLoader.registerLayout(e,t);}async renderAgentPromptFull(e,t){let n=e.startsWith("@")?e.slice(1):e,o=this._agents.get(n);if(!o)throw new be(n,Array.from(this._agents.keys()));let s=this._resolveLayoutSpec(o,t?.layout),i=this._extractLayoutId(s),a=this._extractLayoutProps(o,s,t?.layout),d=this._layoutLoader.load(i,a),l=o.inline?.prompt??o.inline?.system_prompt??o.description??`You are an expert ${n}.`,c=await this._documentLoader.buildContext(),g=t?.env??(typeof process<"u"?process.env:{}),f=t?.vars?.security_key??Ql(),m={...t?.vars??{},documents:c,env:g,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??""}},w=await this._templateEngine.render(l,m),_={mode:t?.session?.mode??"query",platform:t?.session?.platform??"cli",options:t?.session?.options??[]},k=o.provider,y=Array.isArray(k)?k:typeof k=="string"&&k.length>0?[k]:[],v=y.join(", ")||(typeof k=="string"?k:""),E=o.options,P=["goals","daily"],C={goals:false,daily:false},V;if(!Array.isArray(E)&&typeof E=="object"&&E!==null){let F=E;if("goals"in F){let O=F.goals;typeof O=="string"||Array.isArray(O)?C.goals=O:C.goals=!!O;}"daily"in F&&(C.daily=!!F.daily);let x={};for(let[O,j]of Object.entries(F))P.includes(O)||(x[O]=j);if(Object.keys(x).length>0){let O=y.some(T=>T.startsWith("cli/")),j={};for(let[T,z]of Object.entries(x)){let ce={};if(Array.isArray(z))O&&(ce.rawArgs=z);else if(typeof z=="object"&&z!==null){let yt=z;Object.keys(yt).length>0&&(ce.named=yt);}(ce.named||ce.rawArgs&&ce.rawArgs.length>0)&&(j[T]=ce);}V=Object.keys(j).length>0?j:void 0;}}let $=Array.isArray(E)?E:void 0,I={};for(let[F,x]of Object.entries(c))I[F]={content:x.content??"",toc:x.toc,summary:x.summary,path:x.path};if(C.goals){let F=K.join(this._projectRoot,"docs","goal"),x=await gs(F,void 0,C.goals);x&&(I.active_goals={content:x});}if(C.daily){let F=K.join(this._projectRoot,"docs","daily"),x=await ms(F);x&&(I.today_daily={content:x});}let N=t?.vars?.user_input??void 0,D=this._config?.settings?.dreaming?.continuity,Z=D?.reuseReadOnly!==false,U=typeof D?.lookback=="number"?D.lookback:5,ne=typeof D?.maxEntryChars=="number"?D.maxEntryChars:8e3,B=typeof D?.decayRate=="number"?D.decayRate:.5,W=t?.threadId??"",Q=o.id,J=Z&&U>0&&W&&t?.messages&&t.messages.length>0?Ss({threadId:W,agentId:Q,lookback:U,maxEntryChars:ne,decayRate:B}):new Map,q=(t?.messages??[]).map(F=>{if(!F.isAssistant)return F;let x=F.metadata?.task_id;return !x||!J.has(x)?F:{...F,activity_log:J.get(x)}}),Je={user_input:N,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??"",provider:v,providerList:y,model:o.inline?.model,workingDirectory:o.working_directory??o.workingDirectory??".",inline:{...o.inline??{},prompt:w},specialties:o.specialties??[],capabilities:o.capabilities??[],remote:o.remote??null,optionsByMode:V,optionsArray:$},agentMetadata:{specialties:o.specialties??[],capabilities:o.capabilities??[],description:o.description??""},contextOptions:C,documents:I,skills:t?.skills??[],session:_,env:g,vars:{security_key:f,...t?.vars??{}},props:{...a??{},...t?.messages&&t.messages.length>0?{showConversationHistory:true}:{}},platform:_.platform,mode:_.mode,thread_id:W,now:Xt(new Date),has_activity_log:J.size>0,messages:q,tools:this._tools.size>0?{list:Array.from(this._tools.values()).map(F=>({name:F.name,description:F.description,parameters:F.parameters})),json:JSON.stringify(Array.from(this._tools.values()).map(F=>({name:F.name,description:F.description,parameters:F.parameters})),null,2),count:this._tools.size}:null,metadata:{}};return this._layoutRenderer.render(d,Je)}_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 n=e.inline?.layout;if(n!==void 0)return n;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,n){let o=e.inline?.layout,s=o&&typeof o=="object"&&"props"in o?o.props:void 0,i=n&&typeof n=="object"&&"id"in n?n.props:void 0;if(s||i)return {...s??{},...i??{}}}_getConversationProvider(){return this._plugins.find(t=>t.name==="conversation")?.conversationProvider}async _fetchHistoryMessages(e,t,n){if(n&&n.length>0)return n;if(!e)return;let o=this._getConversationProvider();if(o)try{let s=await o.fetchHistory(e,{currentTraceId:t});return s.messages.length===0?void 0:$n(s)}catch{return}}_resolveTimeout(e,t){let n=e==="query"?"CREWX_TIMEOUT_QUERY":"CREWX_TIMEOUT_EXECUTE";if(process.env[n]!=null&&process.env[n]!==""){let o=Xo();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=vn();return t!==void 0?t:e?.meta?.defaultIdleMs!==void 0?e.meta.defaultIdleMs:6e5}_lookupCliAdapter(e){return Nn(e)}_resolveEffectiveCost(e,t,n){return rs(e?.costUsd,e?.inputTokens,e?.outputTokens,e?.cachedInputTokens,t)}_resolveEffectiveCwd(e,t){return t?.cwd??(e.working_directory?K.resolve(this._projectRoot,e.working_directory):this._projectRoot)}_buildFileRemoteOptions(e,t){let n={path:this._projectRoot,id:this._workspaceId,name:this._workspaceName,agentRef:e};return {...t,cwd:void 0,callerIdentity:n,metadata:{...t?.metadata??{},crewx:{...t?.metadata?.crewx??{},callerWorkspace:n}},vars:{...t?.vars??{},crewx_caller_workspace_path:n.path,crewx_caller_workspace_id:n.id,crewx_caller_workspace_name:n.name}}}_registerCallerIdentityOverride(e,t,n){let o=Symbol("callerIdentityOverride");return this._callerIdentityOverrides.set(e,{token:o,callerIdentity:t,targetIdentity:n}),o}_clearCallerIdentityOverride(e,t){if(!t)return;let n=this._callerIdentityOverrides.get(e);n&&n.token===t&&this._callerIdentityOverrides.delete(e);}_rewriteCallerFacingPayload(e,t,n){let{callerIdentity:o,targetIdentity:s}=n,i={...t,agentRef:o.agentRef};if(e==="task:output")return i;let a=i,d=a.metadata??{},l=d.crewx??{};return {...a,workspaceId:o.id,workspaceName:o.name,metadata:{...d,crewx:{...l,remoteExecution:s}}}}emit(e,t){if(e==="task:start"||e==="task:end"||e==="task:output"){let n=t.traceId,o=this._callerIdentityOverrides.get(n);if(o){let s=this._rewriteCallerFacingPayload(e,t,o);super.emit(e,s);return}}super.emit(e,t);}emitToolEvents(e,t,n,o,s,i,a){try{let l=this._lookupCliAdapter(n)?.parseEvent?.(o)??Bt(new Date().toISOString(),o);for(let c of l)c.type==="tool_use"&&c.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:n,tool:{name:c.toolName,rawName:c.toolName,input:c.toolInput?this.tryParseJson(c.toolInput):void 0,toolUseId:c.toolUseId}}),c.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:n,tool:{name:c.toolName??"unknown",rawName:c.toolName??"unknown",toolUseId:c.toolUseId,result:c.resultPreview,isError:c.isError}});}catch{}}emitTaskLogEntries(e,t,n,o,s,i,a){try{for(let d of a)d.type==="tool_use"&&d.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:n,threadId:o,sessionId:s,provider:i,tool:{name:d.toolName,rawName:d.toolName,input:d.toolInput?this.tryParseJson(d.toolInput):void 0,toolUseId:d.toolUseId}}),d.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:t,agentId:n,threadId:o,sessionId:s,provider:i,tool:{name:d.toolName??"unknown",rawName:d.toolName??"unknown",toolUseId:d.toolUseId,result:d.resultPreview,isError:d.isError}});}catch{}}tryParseJson(e){try{return JSON.parse(e)}catch{return e}}async query(e,t,n){let o=await this.resolveFileRemoteTarget(e);if(o){let c=await o.target.query(o.agentRef,t,this._buildFileRemoteOptions(e,n));return {...c,meta:{...c.meta,agentId:e.replace(/^@/,"")}}}let s=er.getStore()??Ln(n?.trace),i=n?.taskId??lt("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null},l=n?.callerIdentity?this._registerCallerIdentityOverride(i,n.callerIdentity,{agentId:e.replace(/^@/,""),workspaceId:this._workspaceId,workspaceName:this._workspaceName}):void 0;try{return await er.run(d,async()=>{let c=Date.now(),g=new Date,f;try{f=vr(e,Array.from(this._agents.values()));}catch(x){if(x instanceof be){this.emit("task:start",{traceId:i,timestamp:g,agentRef:e,message:t,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...n?.metadata??{}},threadId:n?.threadId,platform:n?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let O=Date.now()-c,j={code:"AGENT_NOT_FOUND",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:O,error:j,metadata:n?.metadata?{...n.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:j,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:O,taskId:i}}}throw x}d.callerAgentId=f.id;let m=Dn(f.provider),w=Ir(f.options,"query",m,Sr(n?.overdrive)),_=Or(f.options,"query"),k=w.active&&w.provider?w.provider:n?.provider??_.provider??m,y=w.active&&w.model?w.model:n?.model??_.model??f.inline?.model;y&&y.includes("{{")&&(y=await this._templateEngine.render(y,{...n?.vars??{}}));let v=k!==m?void 0:n?.resumeSessionId,E;try{E=Oe(k,this._additionalArgsProvider);}catch(x){this.emit("task:start",{traceId:i,timestamp:g,agentRef:e,message:t,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...n?.metadata??{}},threadId:n?.threadId,platform:n?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let O=Date.now()-c,j={code:"PROVIDER_ERROR",message:x.message,...x instanceof exports.ProviderError?{providerCode:x.code}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:O,error:j,metadata:n?.metadata?{...n.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:j,meta:{agentId:f.id,provider:k,model:y,durationMs:O,taskId:i}}}let P=await this._fetchHistoryMessages(n?.threadId,i,n?.messages),C;try{C=await this.renderAgentPromptFull(e,{session:{mode:"query",platform:n?.platform},vars:{user_input:t,...n?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(f,n)},messages:P,threadId:n?.threadId});}catch(x){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${x instanceof Error?x.message:String(x)}`);}let V,$,I,N=y,le=!1,Y=x=>{le||(le=!0,this.emit("task:start",{traceId:i,timestamp:g,agentRef:e,message:t,mode:"query",pid:x,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:N,provider:k,codingAgentCommand:V,renderedPrompt:C,metadata:{...n?.metadata??{},provider:k,...w.active?{overdrive:!0}:{}},threadId:n?.threadId,platform:n?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},D=f.options,Z=w.active?w.mode:D?.query?.mode,U=w.effort??n?.effort??D?.query?.effort,ne=Array.isArray(D?.query?.tools)?D.query.tools:void 0,B=this._tools.size>0?this._filterToolsByMode(ne):[],W=(()=>{let x=D?.query;if(!x||Array.isArray(x))return;let{tools:O,effort:j,mode:T,provider:z,model:ce,profiles:yt,...en}=x,Dt=Object.entries(en).filter(([,Pe])=>Pe!=null);if(Dt.length!==0)return Object.fromEntries(Dt.map(([Pe,tn])=>[Pe,String(tn)]))})(),Q=f.inline?.max_steps;k.startsWith("api/")&&Y();let J=!1,q=0,Je=()=>{},F=new Promise(x=>{Je=x;});this._activeTasks.set(i,{pid:void 0,done:F});try{let x=await E.query(t,{model:y,effort:U,mode:Z,context:n?.context,systemPrompt:C??f.inline?.system_prompt??f.inline?.prompt??f.description??`You are ${f.id}.`,additionalArgs:Array.isArray(D?.query)?D.query:void 0,resumeSessionId:v,tools:B.length>0?B:void 0,maxSteps:Q,configOptions:W,timeoutMs:this._resolveTimeout("query",this._lookupCliAdapter(k)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(k)),cwd:this._resolveEffectiveCwd(f,n),env:{CREWX_AGENT_ID:f.id,CREWX_AGENT_ROLE:f.role??"",CREWX_AGENT_TEAM:f.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:n?.threadId??"",CREWX_PROVIDER:k,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,g)},onPid:T=>{let z=this._activeTasks.get(i);z&&(z.pid=T),Y(T);},onOutput:(T,z)=>{let ce=this._lookupCliAdapter(k);z==="stdout"&&ce?.suppressOutputLine?.(T)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:T,level:z}),z==="stdout"&&this.emitToolEvents(i,e,k,T,f.id,n?.threadId??"","");},onTaskLog:T=>{this.emitTaskLogEntries(i,e,f.id,n?.threadId??"","",k,T);for(let z of T)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(z),level:"info"});},onCommand:T=>{V=T;},onUsage:T=>{$=T;},onExitCode:T=>{I=T;},onModel:T=>{N||(N=T);}});q=this._resolveEffectiveCost($,N,c),Y();let O=Date.now()-c,j={...n?.metadata??{},...n?.threadId?{threadId:n.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",result:x,durationMs:O,exitCode:I,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:N,metadata:Object.keys(j).length>0?j:void 0}),J=!0,{ok:!0,data:x,meta:{agentId:f.id,provider:k,model:y,durationMs:O,taskId:i}}}catch(x){if(x instanceof exports.ClientToolCallRequiredError){let T=lt("thd");return this._pendingThreads.set(T,{agentRef:f.id,providerStr:k,continuationState:x.continuationState,toolCall:x.toolCall,traceId:i,startMs:c,model:y}),J=!0,{ok:!0,status:"requires_action",data:"",toolCall:x.toolCall,threadId:T,meta:{agentId:f.id,provider:k,model:y,durationMs:Date.now()-c,taskId:i}}}q=this._resolveEffectiveCost($,N,c),Y();let O=Date.now()-c,j={code:"QUERY_FAILED",message:x.message,...x instanceof exports.ProviderError?{providerCode:x.code}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:O,error:j,exitCode:I,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:N,metadata:n?.metadata?{...n.metadata}:void 0}),J=!0,{ok:!1,data:"",error:j,meta:{agentId:f.id,provider:k,model:y,durationMs:O,taskId:i}}}finally{J||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:Date.now()-c,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:I??-1,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:N}),this._activeTasks.delete(i),this._clearCallerIdentityOverride(i,l),Je();}})}finally{this._clearCallerIdentityOverride(i,l);}}async continueQuery(e,t){let n=this._pendingThreads.get(e);if(!n)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=Oe(n.providerStr,this._additionalArgsProvider);if(!o.continueWithToolResults)return {ok:false,data:"",error:{code:"UNSUPPORTED",message:"Provider does not support client tool continuation"},meta:{agentId:n.agentRef,provider:n.providerStr,durationMs:0}};let s=t.map(i=>({...i,toolName:n.toolCall.toolCallId===i.toolCallId?n.toolCall.toolName:i.toolCallId}));try{let i=await o.continueWithToolResults(n.continuationState,s),a=Date.now()-n.startMs;return this.emit("task:end",{traceId:n.traceId,timestamp:new Date,agentRef:n.agentRef,mode:"query",result:i,durationMs:a}),{ok:!0,status:"complete",data:i,meta:{agentId:n.agentRef,provider:n.providerStr,model:n.model,durationMs:a}}}catch(i){if(i instanceof exports.ClientToolCallRequiredError)return this._pendingThreads.set(e,{...n,continuationState:i.continuationState,toolCall:i.toolCall}),{ok:true,status:"requires_action",data:"",toolCall:i.toolCall,threadId:e,meta:{agentId:n.agentRef,provider:n.providerStr,model:n.model,durationMs:Date.now()-n.startMs}};let a=Date.now()-n.startMs;return {ok:false,data:"",error:{code:"CONTINUE_FAILED",message:i.message},meta:{agentId:n.agentRef,provider:n.providerStr,model:n.model,durationMs:a}}}}async execute(e,t,n){let o=await this.resolveFileRemoteTarget(e);if(o){let c=await o.target.execute(o.agentRef,t,this._buildFileRemoteOptions(e,n));return {...c,meta:{...c.meta,agentId:e.replace(/^@/,"")}}}let s=er.getStore()??Ln(n?.trace),i=n?.taskId??lt("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null},l=n?.callerIdentity?this._registerCallerIdentityOverride(i,n.callerIdentity,{agentId:e.replace(/^@/,""),workspaceId:this._workspaceId,workspaceName:this._workspaceName}):void 0;try{return await er.run(d,async()=>{let c=Date.now(),g=new Date,f;try{f=vr(e,Array.from(this._agents.values()));}catch(x){if(x instanceof be){this.emit("task:start",{traceId:i,timestamp:g,agentRef:e,message:t,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...n?.metadata??{}},threadId:n?.threadId,platform:n?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let O=Date.now()-c,j={code:"AGENT_NOT_FOUND",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:O,error:j,metadata:n?.metadata?{...n.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:j,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:O,taskId:i}}}throw x}d.callerAgentId=f.id;let m=Dn(f.provider),w=Ir(f.options,"execute",m,Sr(n?.overdrive)),_=Or(f.options,"execute"),k=w.active&&w.provider?w.provider:n?.provider??_.provider??m,y=w.active&&w.model?w.model:n?.model??_.model??f.inline?.model;y&&y.includes("{{")&&(y=await this._templateEngine.render(y,{...n?.vars??{}}));let v=k!==m?void 0:n?.resumeSessionId,E;try{E=Oe(k,this._additionalArgsProvider);}catch(x){this.emit("task:start",{traceId:i,timestamp:g,agentRef:e,message:t,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...n?.metadata??{}},threadId:n?.threadId,platform:n?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let O=Date.now()-c,j={code:"PROVIDER_ERROR",message:x.message,...x instanceof exports.ProviderError?{providerCode:x.code}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:O,error:j,metadata:n?.metadata?{...n.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:j,meta:{agentId:f.id,provider:k,model:y,durationMs:O,taskId:i}}}let P=await this._fetchHistoryMessages(n?.threadId,i,n?.messages),C;try{C=await this.renderAgentPromptFull(e,{session:{mode:"execute",platform:n?.platform},vars:{user_input:t,...n?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(f,n)},messages:P,threadId:n?.threadId});}catch(x){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${x instanceof Error?x.message:String(x)}`);}let V,$,I,N=y,le=!1,Y=x=>{le||(le=!0,this.emit("task:start",{traceId:i,timestamp:g,agentRef:e,message:t,mode:"execute",pid:x,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:N,provider:k,codingAgentCommand:V,renderedPrompt:C,metadata:{...n?.metadata??{},provider:k,...w.active?{overdrive:!0}:{}},threadId:n?.threadId,platform:n?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},D=f.options,Z=w.active?w.mode:D?.execute?.mode,U=w.effort??n?.effort??D?.execute?.effort,ne=Array.isArray(D?.execute?.tools)?D.execute.tools:void 0,B=this._tools.size>0?this._filterToolsByMode(ne):[],W=(()=>{let x=D?.execute;if(!x||Array.isArray(x))return;let{tools:O,effort:j,mode:T,provider:z,model:ce,profiles:yt,...en}=x,Dt=Object.entries(en).filter(([,Pe])=>Pe!=null);if(Dt.length!==0)return Object.fromEntries(Dt.map(([Pe,tn])=>[Pe,String(tn)]))})(),Q=f.inline?.max_steps;k.startsWith("api/")&&Y();let J=!1,q=0,Je=()=>{},F=new Promise(x=>{Je=x;});this._activeTasks.set(i,{pid:void 0,done:F});try{let x=await E.execute(t,{model:y,effort:U,mode:Z,context:n?.context,systemPrompt:C??f.inline?.system_prompt??f.inline?.prompt??f.description??`You are ${f.id}.`,additionalArgs:Array.isArray(D?.execute)?D.execute:void 0,resumeSessionId:v,tools:B.length>0?B:void 0,maxSteps:Q,configOptions:W,timeoutMs:this._resolveTimeout("execute",this._lookupCliAdapter(k)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(k)),cwd:this._resolveEffectiveCwd(f,n),env:{CREWX_AGENT_ID:f.id,CREWX_AGENT_ROLE:f.role??"",CREWX_AGENT_TEAM:f.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:n?.threadId??"",CREWX_PROVIDER:k,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,g)},onPid:T=>{let z=this._activeTasks.get(i);z&&(z.pid=T),Y(T);},onOutput:(T,z)=>{let ce=this._lookupCliAdapter(k);z==="stdout"&&ce?.suppressOutputLine?.(T)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:T,level:z}),z==="stdout"&&this.emitToolEvents(i,e,k,T,f.id,n?.threadId??"","");},onTaskLog:T=>{this.emitTaskLogEntries(i,e,f.id,n?.threadId??"","",k,T);for(let z of T)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(z),level:"info"});},onCommand:T=>{V=T;},onUsage:T=>{$=T;},onExitCode:T=>{I=T;},onModel:T=>{N||(N=T);}});q=this._resolveEffectiveCost($,N,c),Y();let O=Date.now()-c,j={...n?.metadata??{},...n?.threadId?{threadId:n.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",result:x,durationMs:O,exitCode:I,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:N,metadata:Object.keys(j).length>0?j:void 0}),J=!0,{ok:!0,data:x,meta:{agentId:f.id,provider:k,model:y,durationMs:O,taskId:i}}}catch(x){q=this._resolveEffectiveCost($,N,c),Y();let O=Date.now()-c,j={code:"EXECUTE_FAILED",message:x.message,...x instanceof exports.ProviderError?{providerCode:x.code}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:O,error:j,exitCode:I,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:N,metadata:n?.metadata?{...n.metadata}:void 0}),J=!0,{ok:!1,data:"",error:j,meta:{agentId:f.id,provider:k,model:y,durationMs:O,taskId:i}}}finally{J||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:Date.now()-c,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:I??-1,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:N}),this._activeTasks.delete(i),this._clearCallerIdentityOverride(i,l),Je();}})}finally{this._clearCallerIdentityOverride(i,l);}}};function Qs(r,e){let t=ao(r)?r:void 0,n=ao(e)?e:void 0;if(!(!t&&!n))return {...t??{},...n??{}}}function ao(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function Zl(r,e){let t=Array.isArray(r)?r:void 0,n=Array.isArray(e)?e:void 0;if(!t&&!n)return;let o=a=>{if(!ao(a))return;let d=a.id;if(typeof d=="string")return `id:${d}`;let l=a.name;if(typeof l=="string")return `name:${l}`},s=new Set;for(let a of n??[]){let d=o(a);d&&s.add(d);}let i=[];for(let a of t??[]){let d=o(a);d&&s.has(d)||i.push(a);}for(let a of n??[])i.push(a);return i}function ec(r){let e=Array.isArray(r.provider)?r.provider:[r.provider],t=r.options,n=[...e];for(let o of ["query","execute"]){let s=Or(t,o);s.provider&&n.push(s.provider);let i=t&&typeof t=="object"&&!Array.isArray(t)?t[o]:void 0,a=i&&typeof i=="object"&&!Array.isArray(i)?br(i.overdrive):void 0;a?.provider&&n.push(a.provider);}return n}async function Zs(r,e,t){let n=r.flatMap(ec);if(n.some(s=>s.startsWith("api/"))){let{registerApiProviders:s}=await Promise.resolve().then(()=>(Kn(),js));s(t?.api);}await rc(n,e),nc(n,e),tc(n);}function tc(r){if(!r.some(n=>n.startsWith("acp/")))return;let{registerAcpProviders:t}=(Zn(),So(qs));t();}async function rc(r,e){if(!r.some(i=>i.startsWith("remote/")))return;let n=e.providers;if(!Array.isArray(n))return;let{createRemoteProviderFactory:o}=await Promise.resolve().then(()=>(ro(),Ks)),s=new Map;for(let i of n)i.type==="remote"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&Ie("remote",o(s,Oe));}function nc(r,e){if(!r.some(i=>i.startsWith("plugin/")))return;let n=e.providers;if(!Array.isArray(n))return;let{createPluginProviderFactory:o}=(no(),So(Xs)),s=new Map;for(let i of n)i.type==="plugin"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&Ie("plugin",o(s));}u();var lo=class{detach(e){}};u();var oc="crewx:fs:",co=class{prefix;store;constructor(e){this.prefix=e?.prefix??oc,this.store=e?.storage??new Map;}async readFile(e){let t=this.toKey(e),n=this.store.get(t);if(n===void 0)throw new Error(`BrowserFsAdapter: file not found: ${e}`);return n}async exists(e){return this.store.has(this.toKey(e))}resolvePath(...e){let t=e.map(i=>i.replace(/\\/g,"/")).join("/").replace(/\/+/g,"/"),n=t.split("/"),o=[];for(let i of n)i==="."||i===""||(i===".."?o.pop():o.push(i));let s=o.join("/");return t.startsWith("/")?`/${s}`:s}isAbsolute(e){return e.startsWith("/")}setItem(e,t){this.store.set(this.toKey(e),t);}removeItem(e){this.store.delete(this.toKey(e));}keys(){return Array.from(this.store.keys()).filter(e=>e.startsWith(this.prefix)).map(e=>e.slice(this.prefix.length))}async readdir(e){let t=e.replace(/\\/g,"/").replace(/\/$/,""),n=this.toKey(t+"/"),o=[];for(let s of this.store.keys())if(s.startsWith(n)){let a=s.slice(n.length).split("/")[0];a&&!o.includes(a)&&o.push(a);}return o}toKey(e){return `${this.prefix}${e.replace(/\\/g,"/")}`}};u();var St="default",It="archive",ei="wi-default-flow",sc="wi-plan-flow",ic="wi-default-flow.yaml",ac="wi-plan-flow.yaml",Vr=/^[a-zA-Z0-9_-]{1,64}$/;function ti(r){return r===St||r===It}function dc(r){let e={id:St,name:"Default",workflowId:ei,system:true,readOnly:false},t={id:It,name:"Archive",workflowId:"",system:true,readOnly:true},n=r?.settings?.wi?.boards;if(!Array.isArray(n)||n.length===0)return [e,t];let o=new Set,s=[];for(let i of n){if(!i||typeof i!="object")continue;let a=i,d=a.id,l=a.name,c=a.workflow_id;if(typeof d!="string"||d.length===0||typeof l!="string"||l.length===0||typeof c!="string"||c.length===0||ti(d)||!Vr.test(d)||o.has(d))continue;o.add(d);let g=typeof a.description=="string"?a.description:void 0,f=typeof a.goal_id=="string"?a.goal_id:void 0;s.push({id:d,name:l,workflowId:c,...g!==void 0?{description:g}:{},...f!==void 0?{goalId:f}:{},system:false,readOnly:false});}return [e,...s,t]}u();var ee=class extends Error{constructor(e){super(e),this.name="WiCreateError";}},cc=300*1e3,uc=300*1e3,pc=1e4,fc=50;function gc(r){return new Promise(e=>setTimeout(e,r))}function mc(r){let e=r.getFullYear(),t=String(r.getMonth()+1).padStart(2,"0"),n=String(r.getDate()).padStart(2,"0");return {compact:`${e}${t}${n}`,iso:`${e}-${t}-${n}`}}function hc(r){return r.normalize("NFKD").replace(/[^\x00-\x7F]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toUpperCase().slice(0,60)}function yc(r,e){let t=r.replace(/\\/g,"/").toLowerCase(),n=e.replace(/\\/g,"/").toLowerCase();if(n!==t&&!n.startsWith(t+"/"))throw new ee("Path is outside wi directory")}function ri(r){let e=typeof r=="string"?r.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 ni(r){let e=typeof r=="string"?r.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 oi(r){return (typeof r=="string"?r.trim().replace(/^@+/,""):"")||void 0}function si(r){if(r==null)return [];if(!Array.isArray(r))throw new ee("depends_on must be an array");return r.map(e=>String(e).trim()).filter(Boolean)}function ii(r,e){let t=typeof r=="string"?r.trim():"";if(!t){if(e?.required)throw new ee("board is required");return}if(!Vr.test(t))throw new ee("board must match ^[a-zA-Z0-9_-]{1,64}$");if(t===It)throw new ee(`board cannot be '${It}'`);return t}function Ot(r){return JSON.stringify(r)}function wc(r,e){return e.length===0?[`${r}: []`]:[`${r}:`,...e.map(t=>` - ${Ot(t)}`)]}async function _c(r){let e=await bs.promises.stat(r).catch(()=>null);e&&Date.now()-e.mtimeMs>uc&&await bs.promises.rm(r,{recursive:true,force:true}).catch(()=>{});}async function vc(r,e){let t=K.join(r,".wi-create.lock"),n=Date.now()+pc;for(;Date.now()<n;)try{await bs.promises.mkdir(t);try{return await e()}finally{await bs.promises.rm(t,{recursive:!0,force:!0}).catch(()=>{});}}catch(o){if(o.code!=="EEXIST")throw o;await _c(t),await gc(fc);}throw new ee("WI create lock timeout: docs/wi/.wi-create.lock")}async function ai(r){let e=[],t=await bs.promises.readdir(r,{withFileTypes:true}).catch(n=>{if(n.code==="ENOENT")return [];throw n});for(let n of t){let o=K.join(r,n.name);n.isDirectory()?e.push(...await ai(o)):n.isFile()&&n.name.endsWith(".md")&&e.push(n.name);}return e}async function kc(r){let e=await bs.promises.readdir(r).catch(n=>{if(n.code==="ENOENT")return [];throw n}),t=await ai(K.join(r,"archive"));return [...e,...t]}function xc(r,e){return r.reduce((t,n)=>{if(!n.startsWith(e))return t;let o=n.slice(e.length).match(/^(\d+)/);return o?Math.max(t,parseInt(o[1],10)):t},0)+1}function Ec(r,e){return r.some(t=>t===`${e}.md`||t.startsWith(`${e}-`))}async function Ac(r,e){let t=K.join(r,`.wi-${e}.lock`);try{return await bs.promises.writeFile(t,"",{flag:"wx"}),{claimed:!0,lockPath:t}}catch(n){if(n.code!=="EEXIST")throw n;return await bs.promises.stat(t).then(s=>Date.now()-s.mtimeMs>cc).catch(()=>false)&&await bs.promises.unlink(t).then(()=>true).catch(()=>false)?(await bs.promises.writeFile(t,"",{flag:"wx"}),{claimed:true,lockPath:t}):{claimed:false,lockPath:t}}}function Rc(r){return {title:ri(r.title),assignee:oi(r.assignee),body:(r.body??"").trim(),board:ii(r.board),source:ni(r.source),depends_on:si(r.depends_on)}}function Tc(r,e,t){if(r==null)return;let n=typeof r=="string"?r.trim():"";if(!n)throw new ee(`items[${e}].key must be a non-empty string when provided`);if(t.has(n))throw new ee(`items[${e}].key "${n}" is duplicated`);return t.add(n),n}function Cc(r){let e=ii(r.board,{required:true}),t=ni(r.source);if(!Array.isArray(r.items)||r.items.length===0)throw new ee("items must contain at least one WI");let n=new Set;return r.items.map((o,s)=>{if(!o||typeof o!="object")throw new ee(`items[${s}] must be an object`);if(typeof o.body!="string")throw new ee(`items[${s}].body is required`);return {key:Tc(o.key,s,n),title:ri(o.title),assignee:oi(o.assignee),body:o.body.trim(),board:e,source:t,depends_on:si(o.depends_on)}})}function Pc(r,e){return r.map(t=>e.get(t)??t)}function bc(r,e,t){let n=!!r.board&&r.board!==St,o={wi_id:e,title:r.title,date:t,status:"draft",priority:"normal",source:r.source};return r.assignee&&(o.assignee=r.assignee),n&&(o.board=r.board),o.depends_on=r.depends_on,{raw:`---
306
+ `)[0]?.slice(0,150)??null:o.input?.slice(0,150)??null,i=gl(o.tool,o.input)&&!o.isError;n.push({tool:o.tool,cmd:s,result:o.result,status:ml(o.tool,o.input,e),reusable:i});}return n}function _l(r,e,t){let n=["<activity_log>"];if(r.length===0&&e===0)n.push(" <!-- no activity found in previous tasks -->");else {n.push(" <!-- tool activity from previous tasks -->"),e>0&&n.push(` <!-- ${e} entries omitted (cap) -->`);for(let o of r){let s=`tool="${Fr(o.tool)}"`,i=o.cmd?` cmd="${Fr(o.cmd)}"`:"",a="";if(o.reusable&&(a=o.status==="stale"?' reused="stale"':' reused="ok"'),o.reusable&&o.status==="stale")n.push(` <entry ${s}${i}${a}>\u26A0\uFE0F changed since \u2014 re-read</entry>`);else if(o.result){n.push(` <entry ${s}${i}${a}>`);let d=t&&t>0?t:8e3,l=o.result;l.length>d?n.push(Fr(l.slice(0,d))+` \u2026 [truncated, ${d}/${l.length} chars shown]`):n.push(Fr(l)),n.push(" </entry>");}else n.push(` <entry ${s}${i}${a} />`);}}return n.push("</activity_log>"),n}function Ss(r){let{threadId:e,agentId:t,lookback:n,maxEntryChars:o,decayRate:s}=r;if(!n||!e||!t)return new Map;let i;try{i=new rr().findTasksByThread(e).filter(f=>!f.parent_task_id&&f.agent_id===t).sort((f,m)=>m.started_at>f.started_at?1:-1).slice(0,Math.min(n,5));}catch{return new Map}if(!i.length)return new Map;let a=[];for(let g of i){let f=[];try{let m=JSON.parse(g.logs??"[]");Array.isArray(m)&&(f=m);}catch{}a.push({taskId:g.id,entries:wl(f,g.completed_at)});}let d=new Map,l=typeof s=="number"&&s>0&&s<=1?s:1,c=1e3;for(let g=0;g<a.length;g++){let{taskId:f,entries:m}=a[g];if(m.length===0)continue;let w=Math.max(Math.floor((o??8e3)*Math.pow(l,g)),c),_=Math.max(0,m.length-200),k=_>0?m.slice(_):m,y=_l(k,_,w);d.set(f,y.join(`
307
+ `));}return d}p();p();var vl={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")},kl={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 Is(r,e,t){r.tool("crewx_listAgents","List available CrewX agents exposed by this server",async()=>{let n=[];for(let o of t){let s=e.agents.get(o);s&&n.push({id:s.id,name:s.name??s.id,description:s.description??""});}return {content:[{type:"text",text:JSON.stringify(n,null,2)}]}}),r.tool("crewx_queryAgent","Query a CrewX agent with a read-only question",vl,async({agentId:n,query:o,context:s,thread:i})=>{if(!t.has(n))return {content:[{type:"text",text:`Agent '${n}' is not exposed by this server`}],isError:true};let a=await e.query(n,o,{context:s,threadId:i});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Query failed"}],isError:true}}),r.tool("crewx_executeAgent","Execute a task on a CrewX agent (may modify state)",kl,async({agentId:n,task:o,context:s,thread:i})=>{if(!t.has(n))return {content:[{type:"text",text:`Agent '${n}' is not exposed by this server`}],isError:true};let a=await e.execute(n,o,{context:s,threadId:i});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Execute failed"}],isError:true}});}p();function Os(r){return r.headers.get("Origin")?null:new Response(JSON.stringify({error:"Forbidden: Origin header required"}),{status:403,headers:{"Content-Type":"application/json"}})}async function Ms(r,e){return e?await e(r)?null:new Response(JSON.stringify({error:"Unauthorized"}),{status:401,headers:{"Content-Type":"application/json"}}):null}function Al(r,e){let t=new mcp_js.McpServer({name:"crewx-mcp-server",version:"1.0.0"},{capabilities:{tools:{}}});return Is(t,r,e),t}function qn(r,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),n=new Map;return async o=>{let s=Os(o);if(s)return s;let i=await Ms(o,e.auth);if(i)return i;let a=o.headers.get("mcp-session-id");if(a&&n.has(a))return n.get(a).transport.handleRequest(o);let d=Al(r,t),l=new webStandardStreamableHttp_js.WebStandardStreamableHTTPServerTransport({sessionIdGenerator:()=>crypto.randomUUID(),onsessioninitialized:c=>{n.set(c,{transport:l,server:d});},onsessionclosed:c=>{n.delete(c);},enableJsonResponse:true});return await d.connect(l),l.handleRequest(o)}}p();function Ds(r){let e=K__namespace.resolve(r);return process.platform==="win32"&&(e=e.replace(/\\/g,"/"),e=e.replace(/^([A-Z]):/,(t,n)=>`${n.toLowerCase()}:`)),e.length>1&&!/^[a-zA-Z]:\/$/.test(e)&&(e=e.replace(/\/+$/,"")),e}function zn(r){let e=Ds(r);return crypto$1.createHash("sha256").update(e).digest("hex")}function Yl(r){return r?r.settings?.template?.exec:void 0}function Ql(){try{let r=new Uint8Array(8);return globalThis.crypto.getRandomValues(r),Array.from(r,e=>e.toString(16).padStart(2,"0")).join("")}catch{let{randomBytes:r}=oe("crypto");return r(8).toString("hex")}}var ao=class r extends Zt{_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={},n,o,s){super(),this._agents=new Map(e.map(d=>[d.id,d])),this._config=n,this._projectRoot=s??(typeof process<"u"?process.cwd():"/");let i=s??(typeof process<"u"?process.env.CREWX_WORKSPACE??process.cwd():"/");this._workspaceId=zn(i),this._workspaceName=K.basename(i);let a=Yl(n);this._templateEngine=new Vt({execPolicy:t.execPolicy??a}),this._documentLoader=o??new at,this._layoutLoader=new Jt({templatesPath:vt()}),this._layoutRenderer=new Qt,this._remoteFactory=t.remoteFactory,this._additionalArgsProvider=t.additionalArgsProvider;}async resolveFileRemoteTarget(e){let t=this.getAgent(e),n=Array.isArray(t?.provider)?t?.provider[0]:t?.provider;if(!n?.startsWith("remote/"))return null;let o=n.slice(7),s=this.getRemoteProviderConfig(o);if(!s?.location?.startsWith("file://"))return null;let i=K.resolve(s.location.replace("file://","")),a=s.external_agent_id??e.replace(/^@/,""),d=this._remoteTargets.get(i);d||(d=(this._remoteFactory??(m=>r.loadYaml(m)))(i),this._remoteTargets.set(i,d),d.catch(()=>this._remoteTargets.delete(i)));let l=await d,c=l.getAgent("@"+a),g=Array.isArray(c?.provider)?c?.provider[0]:c?.provider;if(g?.startsWith("remote/"))throw new Error(`Chained remotes not allowed: "${o}" \u2192 "${g}"`);return {target:l,agentRef:"@"+a}}static async loadBuiltInConfig(e){let{yamlPath:t,dir:n}=nn(),o;try{o=bs.readFileSync(t,"utf-8");}catch(i){throw new Error(`[@crewx/sdk] Cannot read built-in config: ${t}
308
+ ${i.message}`)}let s=wr(o);if(s.documents&&typeof s.documents=="object"){let i={};for(let[a,d]of Object.entries(s.documents))if(d&&typeof d=="object"){let l=d;typeof l.path=="string"&&!K.isAbsolute(l.path)?i[a]={...l,path:K.resolve(n,l.path)}:i[a]=l;}else i[a]=d;return {...s,documents:i}}return s}static mergeCrewxConfig(e,t){let n=new Map;for(let v of e.agents??[])n.set(v.id,v);for(let v of t.agents??[])n.has(v.id)&&console.warn(`[agent-loader] User agent "${v.id}" overrides built-in`),n.set(v.id,v);let o=Array.from(n.values()),s={...e.layouts??{},...t.layouts??{}},i={...e.documents??{},...t.documents??{}},a=e,d=t,l=Qs(a.vars,d.vars),c=Qs(a.settings,d.settings),g;e.skills&&t.skills&&typeof e.skills=="object"&&typeof t.skills=="object"&&!Array.isArray(e.skills)&&!Array.isArray(t.skills)?g={...e.skills,...t.skills}:g=t.skills??e.skills;let f=[...e.hooks??[],...t.hooks??[]],m=Zl(a.providers,d.providers),w={...e},_={...t};for(let v of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete w[v],delete _[v];let y={...{...w,..._},agents:o,layouts:s,documents:i,skills:g};return f.length>0&&(y.hooks=f),l!==void 0&&(y.vars=l),c!==void 0&&(y.settings=c),m!==void 0&&(y.providers=m),y}static async loadYaml(e,t,n){let o=t?.includeBuiltIns!==false,s,i;if(o){let c=await r.loadBuiltInConfig(n);if(e!==void 0){let g=_r(e);s=r.mergeCrewxConfig(c,g),i=K.dirname(e);}else s=c,i=process.cwd();}else {if(e===void 0)throw new Error("[@crewx/sdk] loadYaml: path is required when includeBuiltIns is false");s=_r(e),i=K.dirname(e);}let a=new at(n);await a.load(s.documents,i);let d=s.agents??[];return await Zs(d,s,t),new r(d,t??{},s,a,i)}static async fromConfig(e,t,n,o){let s=t?.includeBuiltIns===true,i=e;if(s){let c=await r.loadBuiltInConfig(o);i=r.mergeCrewxConfig(c,e);}let a=new at(o);await a.load(i.documents,n??(typeof process<"u"?process.cwd():"/"));let d=i.agents??[];return await Zs(d,i,t),new r(d,t??{},i,a,n)}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 n=Sn(t);return K.join(this._projectRoot,".crewx","logs",`${n}_${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 qn(this,e)}async registerChannelAdapter(e){let{adapter:t,instanceId:n,config:o}=e;if(this._activeAdapters.has(n))throw new Error(`Adapter instance already registered: ${n}`);let s=new Set(t.manifest.capabilities),i=e.store??In(n),a=e.defaultMode??"query",d=t.manifest.platform,l=e.agentRunner??{run:async(m,w,_)=>{let y=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${m}`,w,{threadId:_?.threadId,platform:d});return {output:y.ok?y.data:y.error?.message??""}}},c=e.onInbound??(async m=>{let w=m.routingHints?.agentId??e.defaultAgent;if(!w)return {accepted:false,reason:"no_agent"};let{output:_}=await l.run(w,m.text,{threadId:m.threadId});return {accepted:true,output:_}}),g=Mn({instanceId:n,config:o,capabilities:s,db:i,agentRunner:l,onInbound:c}),f={adapter:t,ctx:g,state:"starting"};this._activeAdapters.set(n,f),this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:n,state:"starting",timestamp:new Date});try{await t.start(g),f.state="started",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:n,state:"started",timestamp:new Date});}catch(m){throw f.state="failed",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:n,state:"failed",error:m instanceof Error?m:new Error(String(m)),timestamp:new Date}),this._activeAdapters.delete(n),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(n){t.state="failed",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"failed",error:n instanceof Error?n:new Error(String(n)),timestamp:new Date});}finally{this._activeAdapters.delete(e);}}}async stopAllAdapters(e={}){let t=e.timeoutMs??1e4,n=Array.from(this._activeAdapters.keys()),o=await Promise.allSettled(n.map(s=>Promise.race([this.unregisterChannelAdapter(s),new Promise((i,a)=>setTimeout(()=>a(new Error(`Adapter stop timeout: ${s}`)),t))])));for(let s=0;s<o.length;s++)o[s].status==="rejected"&&console.error(`[crewx] adapter stop error (${n[s]}): ${o[s].reason}`);}abortAll(){for(let[e,t]of this._activeTasks)if(t.pid!==void 0)try{process.platform==="win32"?process.kill(t.pid,"SIGTERM"):process.kill(-t.pid,"SIGTERM");}catch(n){console.error(`[crewx] abort task ${e} (pid=${t.pid}) error: ${n instanceof Error?n.message:String(n)}`);}}async _drainActiveTasks(e){let t=Array.from(this._activeTasks.values()).map(n=>n.done);t.length!==0&&await Promise.race([Promise.allSettled(t),new Promise(n=>setTimeout(n,e).unref())]);}async close(){this.abortAll(),await this._drainActiveTasks(qt+1e3),await this.stopAllAdapters({timeoutMs:1e4});let e=[...this._remoteTargets.values()];this._remoteTargets.clear(),await Promise.allSettled(e.map(async n=>{try{await(await n).close();}catch(o){console.error(`[crewx] remote target close error: ${o instanceof Error?o.message:String(o)}`);}}));let t=[...this._plugins].reverse();for(let n of t)try{await n.detach(this);}catch(o){console.error(`[crewx] plugin ${n.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,n=t(e.role),o=t(e.team),s=t(e.provider),i=Array.from(this._agents.values());return n&&(i=i.filter(a=>a.role&&n.some(d=>xe(a.role.toLowerCase(),d)))),o&&(i=i.filter(a=>a.team&&o.some(d=>xe(a.team.toLowerCase(),d)))),s&&(i=i.filter(a=>(Array.isArray(a.provider)?a.provider:[a.provider]).some(l=>s.some(c=>xe(l.toLowerCase(),c))))),i}renderAgentPrompt(e){let t=e.startsWith("@")?e.slice(1):e,n=this._agents.get(t);if(!n)throw new be(t,Array.from(this._agents.keys()));return n.inline?.prompt??n.inline?.system_prompt??n.description??`You are an expert ${t}.`}async renderPrompt(e,t){let o={...await this._documentLoader.buildContext(),...t?.documents??{}},s={...t,documents:o};return this._templateEngine.render(e,s)}registerLayout(e,t){this._layoutLoader.registerLayout(e,t);}async renderAgentPromptFull(e,t){let n=e.startsWith("@")?e.slice(1):e,o=this._agents.get(n);if(!o)throw new be(n,Array.from(this._agents.keys()));let s=this._resolveLayoutSpec(o,t?.layout),i=this._extractLayoutId(s),a=this._extractLayoutProps(o,s,t?.layout),d=this._layoutLoader.load(i,a),l=o.inline?.prompt??o.inline?.system_prompt??o.description??`You are an expert ${n}.`,c=await this._documentLoader.buildContext(),g=t?.env??(typeof process<"u"?process.env:{}),f=t?.vars?.security_key??Ql(),m={...t?.vars??{},documents:c,env:g,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??""}},w=await this._templateEngine.render(l,m),_={mode:t?.session?.mode??"query",platform:t?.session?.platform??"cli",options:t?.session?.options??[]},k=o.provider,y=Array.isArray(k)?k:typeof k=="string"&&k.length>0?[k]:[],v=y.join(", ")||(typeof k=="string"?k:""),E=o.options,P=["goals","daily"],C={goals:false,daily:false},V;if(!Array.isArray(E)&&typeof E=="object"&&E!==null){let W=E;if("goals"in W){let O=W.goals;typeof O=="string"||Array.isArray(O)?C.goals=O:C.goals=!!O;}"daily"in W&&(C.daily=!!W.daily);let x={};for(let[O,j]of Object.entries(W))P.includes(O)||(x[O]=j);if(Object.keys(x).length>0){let O=y.some(T=>T.startsWith("cli/")),j={};for(let[T,z]of Object.entries(x)){let ce={};if(Array.isArray(z))O&&(ce.rawArgs=z);else if(typeof z=="object"&&z!==null){let _t=z;Object.keys(_t).length>0&&(ce.named=_t);}(ce.named||ce.rawArgs&&ce.rawArgs.length>0)&&(j[T]=ce);}V=Object.keys(j).length>0?j:void 0;}}let $=Array.isArray(E)?E:void 0,I={};for(let[W,x]of Object.entries(c))I[W]={content:x.content??"",toc:x.toc,summary:x.summary,path:x.path};if(C.goals){let W=K.join(this._projectRoot,"docs","goal"),x=await ms(W,void 0,C.goals);x&&(I.active_goals={content:x});}if(C.daily){let W=K.join(this._projectRoot,"docs","daily"),x=await hs(W);x&&(I.today_daily={content:x});}let N=t?.vars?.user_input??void 0,D=this._config?.settings?.dreaming?.continuity,Z=D?.reuseReadOnly!==false,U=typeof D?.lookback=="number"?D.lookback:5,ne=typeof D?.maxEntryChars=="number"?D.maxEntryChars:8e3,B=typeof D?.decayRate=="number"?D.decayRate:.5,F=t?.threadId??"",Q=o.id,J=Z&&U>0&&F&&t?.messages&&t.messages.length>0?Ss({threadId:F,agentId:Q,lookback:U,maxEntryChars:ne,decayRate:B}):new Map,q=(t?.messages??[]).map(W=>{if(!W.isAssistant)return W;let x=W.metadata?.task_id;return !x||!J.has(x)?W:{...W,activity_log:J.get(x)}}),Je={user_input:N,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??"",provider:v,providerList:y,model:o.inline?.model,workingDirectory:o.working_directory??o.workingDirectory??".",inline:{...o.inline??{},prompt:w},specialties:o.specialties??[],capabilities:o.capabilities??[],remote:o.remote??null,optionsByMode:V,optionsArray:$},agentMetadata:{specialties:o.specialties??[],capabilities:o.capabilities??[],description:o.description??""},contextOptions:C,documents:I,skills:t?.skills??[],session:_,env:g,vars:{security_key:f,...t?.vars??{}},props:{...a??{},...t?.messages&&t.messages.length>0?{showConversationHistory:true}:{}},platform:_.platform,mode:_.mode,thread_id:F,now:Xt(new Date),has_activity_log:J.size>0,messages:q,tools:this._tools.size>0?{list:Array.from(this._tools.values()).map(W=>({name:W.name,description:W.description,parameters:W.parameters})),json:JSON.stringify(Array.from(this._tools.values()).map(W=>({name:W.name,description:W.description,parameters:W.parameters})),null,2),count:this._tools.size}:null,metadata:{}};return this._layoutRenderer.render(d,Je)}_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 n=e.inline?.layout;if(n!==void 0)return n;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,n){let o=e.inline?.layout,s=o&&typeof o=="object"&&"props"in o?o.props:void 0,i=n&&typeof n=="object"&&"id"in n?n.props:void 0;if(s||i)return {...s??{},...i??{}}}_getConversationProvider(){return this._plugins.find(t=>t.name==="conversation")?.conversationProvider}async _fetchHistoryMessages(e,t,n){if(n&&n.length>0)return n;if(!e)return;let o=this._getConversationProvider();if(o)try{let s=await o.fetchHistory(e,{currentTraceId:t});return s.messages.length===0?void 0:$n(s)}catch{return}}_resolveTimeout(e,t){let n=e==="query"?"CREWX_TIMEOUT_QUERY":"CREWX_TIMEOUT_EXECUTE";if(process.env[n]!=null&&process.env[n]!==""){let o=Yo();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=vn();return t!==void 0?t:e?.meta?.defaultIdleMs!==void 0?e.meta.defaultIdleMs:6e5}_lookupCliAdapter(e){return Nn(e)}_resolveEffectiveCost(e,t,n){return ns(e?.costUsd,e?.inputTokens,e?.outputTokens,e?.cachedInputTokens,t)}_resolveEffectiveCwd(e,t){return t?.cwd??(e.working_directory?K.resolve(this._projectRoot,e.working_directory):this._projectRoot)}_buildFileRemoteOptions(e,t){let n={path:this._projectRoot,id:this._workspaceId,name:this._workspaceName,agentRef:e};return {...t,cwd:void 0,callerIdentity:n,metadata:{...t?.metadata??{},crewx:{...t?.metadata?.crewx??{},callerWorkspace:n}},vars:{...t?.vars??{},crewx_caller_workspace_path:n.path,crewx_caller_workspace_id:n.id,crewx_caller_workspace_name:n.name}}}_registerCallerIdentityOverride(e,t,n){let o=Symbol("callerIdentityOverride");return this._callerIdentityOverrides.set(e,{token:o,callerIdentity:t,targetIdentity:n}),o}_clearCallerIdentityOverride(e,t){if(!t)return;let n=this._callerIdentityOverrides.get(e);n&&n.token===t&&this._callerIdentityOverrides.delete(e);}_rewriteCallerFacingPayload(e,t,n){let{callerIdentity:o,targetIdentity:s}=n,i={...t,agentRef:o.agentRef};if(e==="task:output")return i;let a=i,d=a.metadata??{},l=d.crewx??{};return {...a,workspaceId:o.id,workspaceName:o.name,metadata:{...d,crewx:{...l,remoteExecution:s}}}}emit(e,t){if(e==="task:start"||e==="task:end"||e==="task:output"){let n=t.traceId,o=this._callerIdentityOverrides.get(n);if(o){let s=this._rewriteCallerFacingPayload(e,t,o);super.emit(e,s);return}}super.emit(e,t);}emitToolEvents(e,t,n,o,s,i,a){try{let l=this._lookupCliAdapter(n)?.parseEvent?.(o)??Bt(new Date().toISOString(),o);for(let c of l)c.type==="tool_use"&&c.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:n,tool:{name:c.toolName,rawName:c.toolName,input:c.toolInput?this.tryParseJson(c.toolInput):void 0,toolUseId:c.toolUseId}}),c.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:n,tool:{name:c.toolName??"unknown",rawName:c.toolName??"unknown",toolUseId:c.toolUseId,result:c.resultPreview,isError:c.isError}});}catch{}}emitTaskLogEntries(e,t,n,o,s,i,a){try{for(let d of a)d.type==="tool_use"&&d.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:n,threadId:o,sessionId:s,provider:i,tool:{name:d.toolName,rawName:d.toolName,input:d.toolInput?this.tryParseJson(d.toolInput):void 0,toolUseId:d.toolUseId}}),d.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:t,agentId:n,threadId:o,sessionId:s,provider:i,tool:{name:d.toolName??"unknown",rawName:d.toolName??"unknown",toolUseId:d.toolUseId,result:d.resultPreview,isError:d.isError}});}catch{}}tryParseJson(e){try{return JSON.parse(e)}catch{return e}}async query(e,t,n){let o=await this.resolveFileRemoteTarget(e);if(o){let c=await o.target.query(o.agentRef,t,this._buildFileRemoteOptions(e,n));return {...c,meta:{...c.meta,agentId:e.replace(/^@/,"")}}}let s=er.getStore()??Ln(n?.trace),i=n?.taskId??lt("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null},l=n?.callerIdentity?this._registerCallerIdentityOverride(i,n.callerIdentity,{agentId:e.replace(/^@/,""),workspaceId:this._workspaceId,workspaceName:this._workspaceName}):void 0;try{return await er.run(d,async()=>{let c=Date.now(),g=new Date,f;try{f=vr(e,Array.from(this._agents.values()));}catch(x){if(x instanceof be){this.emit("task:start",{traceId:i,timestamp:g,agentRef:e,message:t,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...n?.metadata??{}},threadId:n?.threadId,platform:n?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let O=Date.now()-c,j={code:"AGENT_NOT_FOUND",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:O,error:j,metadata:n?.metadata?{...n.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:j,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:O,taskId:i}}}throw x}d.callerAgentId=f.id;let m=Dn(f.provider),w=Ir(f.options,"query",m,Sr(n?.overdrive)),_=Or(f.options,"query"),k=w.active&&w.provider?w.provider:n?.provider??_.provider??m,y=w.active&&w.model?w.model:n?.model??_.model??f.inline?.model;y&&y.includes("{{")&&(y=await this._templateEngine.render(y,{...n?.vars??{}}));let v=k!==m?void 0:n?.resumeSessionId,E;try{E=Oe(k,this._additionalArgsProvider);}catch(x){this.emit("task:start",{traceId:i,timestamp:g,agentRef:e,message:t,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...n?.metadata??{}},threadId:n?.threadId,platform:n?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let O=Date.now()-c,j={code:"PROVIDER_ERROR",message:x.message,...x instanceof exports.ProviderError?{providerCode:x.code}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:O,error:j,metadata:n?.metadata?{...n.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:j,meta:{agentId:f.id,provider:k,model:y,durationMs:O,taskId:i}}}let P=await this._fetchHistoryMessages(n?.threadId,i,n?.messages),C;try{C=await this.renderAgentPromptFull(e,{session:{mode:"query",platform:n?.platform},vars:{user_input:t,...n?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(f,n)},messages:P,threadId:n?.threadId});}catch(x){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${x instanceof Error?x.message:String(x)}`);}let V,$,I,N=y,le=!1,Y=x=>{le||(le=!0,this.emit("task:start",{traceId:i,timestamp:g,agentRef:e,message:t,mode:"query",pid:x,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:N,provider:k,codingAgentCommand:V,renderedPrompt:C,metadata:{...n?.metadata??{},provider:k,...w.active?{overdrive:!0}:{}},threadId:n?.threadId,platform:n?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},D=f.options,Z=w.active?w.mode:D?.query?.mode,U=w.effort??n?.effort??D?.query?.effort,ne=Array.isArray(D?.query?.tools)?D.query.tools:void 0,B=this._tools.size>0?this._filterToolsByMode(ne):[],F=(()=>{let x=D?.query;if(!x||Array.isArray(x))return;let{tools:O,effort:j,mode:T,provider:z,model:ce,profiles:_t,...en}=x,Dt=Object.entries(en).filter(([,Pe])=>Pe!=null);if(Dt.length!==0)return Object.fromEntries(Dt.map(([Pe,tn])=>[Pe,String(tn)]))})(),Q=f.inline?.max_steps;k.startsWith("api/")&&Y();let J=!1,q=0,Je=()=>{},W=new Promise(x=>{Je=x;});this._activeTasks.set(i,{pid:void 0,done:W});try{let x=await E.query(t,{model:y,effort:U,mode:Z,context:n?.context,systemPrompt:C??f.inline?.system_prompt??f.inline?.prompt??f.description??`You are ${f.id}.`,additionalArgs:Array.isArray(D?.query)?D.query:void 0,resumeSessionId:v,tools:B.length>0?B:void 0,maxSteps:Q,configOptions:F,timeoutMs:this._resolveTimeout("query",this._lookupCliAdapter(k)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(k)),cwd:this._resolveEffectiveCwd(f,n),env:{CREWX_AGENT_ID:f.id,CREWX_AGENT_ROLE:f.role??"",CREWX_AGENT_TEAM:f.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:n?.threadId??"",CREWX_PROVIDER:k,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,g)},onPid:T=>{let z=this._activeTasks.get(i);z&&(z.pid=T),Y(T);},onOutput:(T,z)=>{let ce=this._lookupCliAdapter(k);z==="stdout"&&ce?.suppressOutputLine?.(T)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:T,level:z}),z==="stdout"&&this.emitToolEvents(i,e,k,T,f.id,n?.threadId??"","");},onTaskLog:T=>{this.emitTaskLogEntries(i,e,f.id,n?.threadId??"","",k,T);for(let z of T)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(z),level:"info"});},onCommand:T=>{V=T;},onUsage:T=>{$=T;},onExitCode:T=>{I=T;},onModel:T=>{N||(N=T);}});q=this._resolveEffectiveCost($,N,c),Y();let O=Date.now()-c,j={...n?.metadata??{},...n?.threadId?{threadId:n.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",result:x,durationMs:O,exitCode:I,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:N,metadata:Object.keys(j).length>0?j:void 0}),J=!0,{ok:!0,data:x,meta:{agentId:f.id,provider:k,model:y,durationMs:O,taskId:i}}}catch(x){if(x instanceof exports.ClientToolCallRequiredError){let T=lt("thd");return this._pendingThreads.set(T,{agentRef:f.id,providerStr:k,continuationState:x.continuationState,toolCall:x.toolCall,traceId:i,startMs:c,model:y}),J=!0,{ok:!0,status:"requires_action",data:"",toolCall:x.toolCall,threadId:T,meta:{agentId:f.id,provider:k,model:y,durationMs:Date.now()-c,taskId:i}}}q=this._resolveEffectiveCost($,N,c),Y();let O=Date.now()-c,j={code:"QUERY_FAILED",message:x.message,...x instanceof exports.ProviderError?{providerCode:x.code}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:O,error:j,exitCode:I,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:N,metadata:n?.metadata?{...n.metadata}:void 0}),J=!0,{ok:!1,data:"",error:j,meta:{agentId:f.id,provider:k,model:y,durationMs:O,taskId:i}}}finally{J||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:Date.now()-c,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:I??-1,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:N}),this._activeTasks.delete(i),this._clearCallerIdentityOverride(i,l),Je();}})}finally{this._clearCallerIdentityOverride(i,l);}}async continueQuery(e,t){let n=this._pendingThreads.get(e);if(!n)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=Oe(n.providerStr,this._additionalArgsProvider);if(!o.continueWithToolResults)return {ok:false,data:"",error:{code:"UNSUPPORTED",message:"Provider does not support client tool continuation"},meta:{agentId:n.agentRef,provider:n.providerStr,durationMs:0}};let s=t.map(i=>({...i,toolName:n.toolCall.toolCallId===i.toolCallId?n.toolCall.toolName:i.toolCallId}));try{let i=await o.continueWithToolResults(n.continuationState,s),a=Date.now()-n.startMs;return this.emit("task:end",{traceId:n.traceId,timestamp:new Date,agentRef:n.agentRef,mode:"query",result:i,durationMs:a}),{ok:!0,status:"complete",data:i,meta:{agentId:n.agentRef,provider:n.providerStr,model:n.model,durationMs:a}}}catch(i){if(i instanceof exports.ClientToolCallRequiredError)return this._pendingThreads.set(e,{...n,continuationState:i.continuationState,toolCall:i.toolCall}),{ok:true,status:"requires_action",data:"",toolCall:i.toolCall,threadId:e,meta:{agentId:n.agentRef,provider:n.providerStr,model:n.model,durationMs:Date.now()-n.startMs}};let a=Date.now()-n.startMs;return {ok:false,data:"",error:{code:"CONTINUE_FAILED",message:i.message},meta:{agentId:n.agentRef,provider:n.providerStr,model:n.model,durationMs:a}}}}async execute(e,t,n){let o=await this.resolveFileRemoteTarget(e);if(o){let c=await o.target.execute(o.agentRef,t,this._buildFileRemoteOptions(e,n));return {...c,meta:{...c.meta,agentId:e.replace(/^@/,"")}}}let s=er.getStore()??Ln(n?.trace),i=n?.taskId??lt("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null},l=n?.callerIdentity?this._registerCallerIdentityOverride(i,n.callerIdentity,{agentId:e.replace(/^@/,""),workspaceId:this._workspaceId,workspaceName:this._workspaceName}):void 0;try{return await er.run(d,async()=>{let c=Date.now(),g=new Date,f;try{f=vr(e,Array.from(this._agents.values()));}catch(x){if(x instanceof be){this.emit("task:start",{traceId:i,timestamp:g,agentRef:e,message:t,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...n?.metadata??{}},threadId:n?.threadId,platform:n?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let O=Date.now()-c,j={code:"AGENT_NOT_FOUND",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:O,error:j,metadata:n?.metadata?{...n.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:j,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:O,taskId:i}}}throw x}d.callerAgentId=f.id;let m=Dn(f.provider),w=Ir(f.options,"execute",m,Sr(n?.overdrive)),_=Or(f.options,"execute"),k=w.active&&w.provider?w.provider:n?.provider??_.provider??m,y=w.active&&w.model?w.model:n?.model??_.model??f.inline?.model;y&&y.includes("{{")&&(y=await this._templateEngine.render(y,{...n?.vars??{}}));let v=k!==m?void 0:n?.resumeSessionId,E;try{E=Oe(k,this._additionalArgsProvider);}catch(x){this.emit("task:start",{traceId:i,timestamp:g,agentRef:e,message:t,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...n?.metadata??{}},threadId:n?.threadId,platform:n?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let O=Date.now()-c,j={code:"PROVIDER_ERROR",message:x.message,...x instanceof exports.ProviderError?{providerCode:x.code}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:O,error:j,metadata:n?.metadata?{...n.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:j,meta:{agentId:f.id,provider:k,model:y,durationMs:O,taskId:i}}}let P=await this._fetchHistoryMessages(n?.threadId,i,n?.messages),C;try{C=await this.renderAgentPromptFull(e,{session:{mode:"execute",platform:n?.platform},vars:{user_input:t,...n?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(f,n)},messages:P,threadId:n?.threadId});}catch(x){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${x instanceof Error?x.message:String(x)}`);}let V,$,I,N=y,le=!1,Y=x=>{le||(le=!0,this.emit("task:start",{traceId:i,timestamp:g,agentRef:e,message:t,mode:"execute",pid:x,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:N,provider:k,codingAgentCommand:V,renderedPrompt:C,metadata:{...n?.metadata??{},provider:k,...w.active?{overdrive:!0}:{}},threadId:n?.threadId,platform:n?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},D=f.options,Z=w.active?w.mode:D?.execute?.mode,U=w.effort??n?.effort??D?.execute?.effort,ne=Array.isArray(D?.execute?.tools)?D.execute.tools:void 0,B=this._tools.size>0?this._filterToolsByMode(ne):[],F=(()=>{let x=D?.execute;if(!x||Array.isArray(x))return;let{tools:O,effort:j,mode:T,provider:z,model:ce,profiles:_t,...en}=x,Dt=Object.entries(en).filter(([,Pe])=>Pe!=null);if(Dt.length!==0)return Object.fromEntries(Dt.map(([Pe,tn])=>[Pe,String(tn)]))})(),Q=f.inline?.max_steps;k.startsWith("api/")&&Y();let J=!1,q=0,Je=()=>{},W=new Promise(x=>{Je=x;});this._activeTasks.set(i,{pid:void 0,done:W});try{let x=await E.execute(t,{model:y,effort:U,mode:Z,context:n?.context,systemPrompt:C??f.inline?.system_prompt??f.inline?.prompt??f.description??`You are ${f.id}.`,additionalArgs:Array.isArray(D?.execute)?D.execute:void 0,resumeSessionId:v,tools:B.length>0?B:void 0,maxSteps:Q,configOptions:F,timeoutMs:this._resolveTimeout("execute",this._lookupCliAdapter(k)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(k)),cwd:this._resolveEffectiveCwd(f,n),env:{CREWX_AGENT_ID:f.id,CREWX_AGENT_ROLE:f.role??"",CREWX_AGENT_TEAM:f.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:n?.threadId??"",CREWX_PROVIDER:k,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,g)},onPid:T=>{let z=this._activeTasks.get(i);z&&(z.pid=T),Y(T);},onOutput:(T,z)=>{let ce=this._lookupCliAdapter(k);z==="stdout"&&ce?.suppressOutputLine?.(T)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:T,level:z}),z==="stdout"&&this.emitToolEvents(i,e,k,T,f.id,n?.threadId??"","");},onTaskLog:T=>{this.emitTaskLogEntries(i,e,f.id,n?.threadId??"","",k,T);for(let z of T)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(z),level:"info"});},onCommand:T=>{V=T;},onUsage:T=>{$=T;},onExitCode:T=>{I=T;},onModel:T=>{N||(N=T);}});q=this._resolveEffectiveCost($,N,c),Y();let O=Date.now()-c,j={...n?.metadata??{},...n?.threadId?{threadId:n.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",result:x,durationMs:O,exitCode:I,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:N,metadata:Object.keys(j).length>0?j:void 0}),J=!0,{ok:!0,data:x,meta:{agentId:f.id,provider:k,model:y,durationMs:O,taskId:i}}}catch(x){q=this._resolveEffectiveCost($,N,c),Y();let O=Date.now()-c,j={code:"EXECUTE_FAILED",message:x.message,...x instanceof exports.ProviderError?{providerCode:x.code}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:O,error:j,exitCode:I,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:N,metadata:n?.metadata?{...n.metadata}:void 0}),J=!0,{ok:!1,data:"",error:j,meta:{agentId:f.id,provider:k,model:y,durationMs:O,taskId:i}}}finally{J||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:Date.now()-c,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:I??-1,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:N}),this._activeTasks.delete(i),this._clearCallerIdentityOverride(i,l),Je();}})}finally{this._clearCallerIdentityOverride(i,l);}}};function Qs(r,e){let t=lo(r)?r:void 0,n=lo(e)?e:void 0;if(!(!t&&!n))return {...t??{},...n??{}}}function lo(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function Zl(r,e){let t=Array.isArray(r)?r:void 0,n=Array.isArray(e)?e:void 0;if(!t&&!n)return;let o=a=>{if(!lo(a))return;let d=a.id;if(typeof d=="string")return `id:${d}`;let l=a.name;if(typeof l=="string")return `name:${l}`},s=new Set;for(let a of n??[]){let d=o(a);d&&s.add(d);}let i=[];for(let a of t??[]){let d=o(a);d&&s.has(d)||i.push(a);}for(let a of n??[])i.push(a);return i}function ec(r){let e=Array.isArray(r.provider)?r.provider:[r.provider],t=r.options,n=[...e];for(let o of ["query","execute"]){let s=Or(t,o);s.provider&&n.push(s.provider);let i=t&&typeof t=="object"&&!Array.isArray(t)?t[o]:void 0,a=i&&typeof i=="object"&&!Array.isArray(i)?br(i.overdrive):void 0;a?.provider&&n.push(a.provider);}return n}async function Zs(r,e,t){let n=r.flatMap(ec);if(n.some(s=>s.startsWith("api/"))){let{registerApiProviders:s}=await Promise.resolve().then(()=>(Gn(),js));s(t?.api);}await rc(n,e),nc(n,e),tc(n);}function tc(r){if(!r.some(n=>n.startsWith("acp/")))return;let{registerAcpProviders:t}=(eo(),Io(qs));t();}async function rc(r,e){if(!r.some(i=>i.startsWith("remote/")))return;let n=e.providers;if(!Array.isArray(n))return;let{createRemoteProviderFactory:o}=await Promise.resolve().then(()=>(no(),Ks)),s=new Map;for(let i of n)i.type==="remote"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&Ie("remote",o(s,Oe));}function nc(r,e){if(!r.some(i=>i.startsWith("plugin/")))return;let n=e.providers;if(!Array.isArray(n))return;let{createPluginProviderFactory:o}=(oo(),Io(Xs)),s=new Map;for(let i of n)i.type==="plugin"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&Ie("plugin",o(s));}p();var co=class{detach(e){}};p();var oc="crewx:fs:",uo=class{prefix;store;constructor(e){this.prefix=e?.prefix??oc,this.store=e?.storage??new Map;}async readFile(e){let t=this.toKey(e),n=this.store.get(t);if(n===void 0)throw new Error(`BrowserFsAdapter: file not found: ${e}`);return n}async exists(e){return this.store.has(this.toKey(e))}resolvePath(...e){let t=e.map(i=>i.replace(/\\/g,"/")).join("/").replace(/\/+/g,"/"),n=t.split("/"),o=[];for(let i of n)i==="."||i===""||(i===".."?o.pop():o.push(i));let s=o.join("/");return t.startsWith("/")?`/${s}`:s}isAbsolute(e){return e.startsWith("/")}setItem(e,t){this.store.set(this.toKey(e),t);}removeItem(e){this.store.delete(this.toKey(e));}keys(){return Array.from(this.store.keys()).filter(e=>e.startsWith(this.prefix)).map(e=>e.slice(this.prefix.length))}async readdir(e){let t=e.replace(/\\/g,"/").replace(/\/$/,""),n=this.toKey(t+"/"),o=[];for(let s of this.store.keys())if(s.startsWith(n)){let a=s.slice(n.length).split("/")[0];a&&!o.includes(a)&&o.push(a);}return o}toKey(e){return `${this.prefix}${e.replace(/\\/g,"/")}`}};p();var St="default",It="archive",ei="wi-default-flow",sc="wi-plan-flow",ic="wi-default-flow.yaml",ac="wi-plan-flow.yaml",Vr=/^[a-zA-Z0-9_-]{1,64}$/;function ti(r){return r===St||r===It}function dc(r){let e={id:St,name:"Default",workflowId:ei,system:true,readOnly:false},t={id:It,name:"Archive",workflowId:"",system:true,readOnly:true},n=r?.settings?.wi?.boards;if(!Array.isArray(n)||n.length===0)return [e,t];let o=new Set,s=[];for(let i of n){if(!i||typeof i!="object")continue;let a=i,d=a.id,l=a.name,c=a.workflow_id;if(typeof d!="string"||d.length===0||typeof l!="string"||l.length===0||typeof c!="string"||c.length===0||ti(d)||!Vr.test(d)||o.has(d))continue;o.add(d);let g=typeof a.description=="string"?a.description:void 0,f=typeof a.goal_id=="string"?a.goal_id:void 0;s.push({id:d,name:l,workflowId:c,...g!==void 0?{description:g}:{},...f!==void 0?{goalId:f}:{},system:false,readOnly:false});}return [e,...s,t]}p();var ee=class extends Error{constructor(e){super(e),this.name="WiCreateError";}},cc=300*1e3,uc=300*1e3,pc=1e4,fc=50;function gc(r){return new Promise(e=>setTimeout(e,r))}function mc(r){let e=r.getFullYear(),t=String(r.getMonth()+1).padStart(2,"0"),n=String(r.getDate()).padStart(2,"0");return {compact:`${e}${t}${n}`,iso:`${e}-${t}-${n}`}}function hc(r){return r.normalize("NFKD").replace(/[^\x00-\x7F]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toUpperCase().slice(0,60)}function yc(r,e){let t=r.replace(/\\/g,"/").toLowerCase(),n=e.replace(/\\/g,"/").toLowerCase();if(n!==t&&!n.startsWith(t+"/"))throw new ee("Path is outside wi directory")}function ri(r){let e=typeof r=="string"?r.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 ni(r){let e=typeof r=="string"?r.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 oi(r){return (typeof r=="string"?r.trim().replace(/^@+/,""):"")||void 0}function si(r){if(r==null)return [];if(!Array.isArray(r))throw new ee("depends_on must be an array");return r.map(e=>String(e).trim()).filter(Boolean)}function ii(r,e){let t=typeof r=="string"?r.trim():"";if(!t){if(e?.required)throw new ee("board is required");return}if(!Vr.test(t))throw new ee("board must match ^[a-zA-Z0-9_-]{1,64}$");if(t===It)throw new ee(`board cannot be '${It}'`);return t}function Ot(r){return JSON.stringify(r)}function wc(r,e){return e.length===0?[`${r}: []`]:[`${r}:`,...e.map(t=>` - ${Ot(t)}`)]}async function _c(r){let e=await bs.promises.stat(r).catch(()=>null);e&&Date.now()-e.mtimeMs>uc&&await bs.promises.rm(r,{recursive:true,force:true}).catch(()=>{});}async function vc(r,e){let t=K.join(r,".wi-create.lock"),n=Date.now()+pc;for(;Date.now()<n;)try{await bs.promises.mkdir(t);try{return await e()}finally{await bs.promises.rm(t,{recursive:!0,force:!0}).catch(()=>{});}}catch(o){if(o.code!=="EEXIST")throw o;await _c(t),await gc(fc);}throw new ee("WI create lock timeout: docs/wi/.wi-create.lock")}async function ai(r){let e=[],t=await bs.promises.readdir(r,{withFileTypes:true}).catch(n=>{if(n.code==="ENOENT")return [];throw n});for(let n of t){let o=K.join(r,n.name);n.isDirectory()?e.push(...await ai(o)):n.isFile()&&n.name.endsWith(".md")&&e.push(n.name);}return e}async function kc(r){let e=await bs.promises.readdir(r).catch(n=>{if(n.code==="ENOENT")return [];throw n}),t=await ai(K.join(r,"archive"));return [...e,...t]}function xc(r,e){return r.reduce((t,n)=>{if(!n.startsWith(e))return t;let o=n.slice(e.length).match(/^(\d+)/);return o?Math.max(t,parseInt(o[1],10)):t},0)+1}function Ec(r,e){return r.some(t=>t===`${e}.md`||t.startsWith(`${e}-`))}async function Ac(r,e){let t=K.join(r,`.wi-${e}.lock`);try{return await bs.promises.writeFile(t,"",{flag:"wx"}),{claimed:!0,lockPath:t}}catch(n){if(n.code!=="EEXIST")throw n;return await bs.promises.stat(t).then(s=>Date.now()-s.mtimeMs>cc).catch(()=>false)&&await bs.promises.unlink(t).then(()=>true).catch(()=>false)?(await bs.promises.writeFile(t,"",{flag:"wx"}),{claimed:true,lockPath:t}):{claimed:false,lockPath:t}}}function Rc(r){return {title:ri(r.title),assignee:oi(r.assignee),body:(r.body??"").trim(),board:ii(r.board),source:ni(r.source),depends_on:si(r.depends_on)}}function Tc(r,e,t){if(r==null)return;let n=typeof r=="string"?r.trim():"";if(!n)throw new ee(`items[${e}].key must be a non-empty string when provided`);if(t.has(n))throw new ee(`items[${e}].key "${n}" is duplicated`);return t.add(n),n}function Cc(r){let e=ii(r.board,{required:true}),t=ni(r.source);if(!Array.isArray(r.items)||r.items.length===0)throw new ee("items must contain at least one WI");let n=new Set;return r.items.map((o,s)=>{if(!o||typeof o!="object")throw new ee(`items[${s}] must be an object`);if(typeof o.body!="string")throw new ee(`items[${s}].body is required`);return {key:Tc(o.key,s,n),title:ri(o.title),assignee:oi(o.assignee),body:o.body.trim(),board:e,source:t,depends_on:si(o.depends_on)}})}function Pc(r,e){return r.map(t=>e.get(t)??t)}function bc(r,e,t){let n=!!r.board&&r.board!==St,o={wi_id:e,title:r.title,date:t,status:"draft",priority:"normal",source:r.source};return r.assignee&&(o.assignee=r.assignee),n&&(o.board=r.board),o.depends_on=r.depends_on,{raw:`---
309
309
  ${[`wi_id: ${e}`,`title: ${Ot(r.title)}`,`date: ${Ot(t)}`,"status: draft",...r.assignee?[`assignee: ${Ot(r.assignee)}`]:[],"priority: normal",`source: ${Ot(r.source)}`,...n?[`board: ${Ot(r.board)}`]:[],...wc("depends_on",r.depends_on)].join(`
310
310
  `)}
311
311
  ---
312
312
 
313
313
  ${r.body}
314
- `,frontmatter:o}}async function di(r,e){let t=K.join(r,"docs","wi");return await bs.promises.mkdir(t,{recursive:true}),vc(t,async()=>{let{compact:n,iso:o}=mc(new Date),s=`WI-${n}-`,i=await kc(t),a=xc(i,s),d=[],l=[];try{let c=[];for(let m of e){let _;for(let k=0;k<999;k++,a++){let y=`WI-${n}-${String(a).padStart(3,"0")}`;if(Ec(i,y))continue;let v=await Ac(t,y);if(!v.claimed)continue;let E=hc(m.title),P=E?`${y}-${E}.md`:`${y}.md`,C=K.resolve(t,P);if(yc(t,C),await bs.promises.access(C).then(()=>!0,()=>!1)){await bs.promises.unlink(v.lockPath).catch(()=>{});continue}l.push(v.lockPath),_={item:m,wiId:y,filename:P,fullPath:C};break}if(!_)throw new ee("Failed to allocate a unique WI id");c.push(_),i.push(_.filename);}let g=new Map;for(let m of c)m.item.key&&g.set(m.item.key,m.wiId);let f=[];for(let m of c){let w=Pc(m.item.depends_on,g),_={...m.item,depends_on:w},k=bc(_,m.wiId,o);await bs.promises.writeFile(m.fullPath,k.raw,{encoding:"utf8",flag:"wx"}),d.push(m.fullPath);let y=await bs.promises.stat(m.fullPath);f.push({summary:{wi_id:m.wiId,title:_.title,status:"draft",priority:"normal",assignee:_.assignee,depends_on:w,blocks:[],date:o,board:_.board&&_.board!==St?_.board:void 0,source:_.source,screens:[],path:`docs/wi/${m.filename}`,mtime:y.mtimeMs},frontmatter:k.frontmatter,body:_.body});}return f}catch(c){throw await Promise.all(d.map(g=>bs.promises.unlink(g).catch(()=>{}))),c}finally{await Promise.all(l.map(c=>bs.promises.unlink(c).catch(()=>{})));}})}async function Sc(r,e){let[t]=await di(r,[Rc(e)]);if(!t)throw new ee("Failed to create WI");return t}async function Ic(r,e){return {created:await di(r,Cc(e))}}u();var Oc=new Set(["draft","approved","in-progress"]);function Mc(r,e){let t=e.batch.filter(Boolean);if(t.length===0)return {done:true};let n=new Set(e.exclude??[]),o=new Set(t),s=new Map(r.filter(g=>o.has(g.wi_id)).map(g=>[g.wi_id,g])),i=t.filter(g=>{let f=s.get(g);return f&&f.status!=="done"});if(i.length===0)return {done:true};for(let g of i){let f=s.get(g);if(f)for(let m of f.depends_on??[]){if(!o.has(m))continue;if(s.get(m)?.status==="cancelled")return {blocked:true,reason:`${g} depends on cancelled WI ${m}`}}}let a=new Map,d=new Map;for(let g of i)a.set(g,new Set),d.set(g,0);for(let g of i){let f=s.get(g);if(f)for(let m of f.depends_on??[])d.has(m)&&(a.get(m).add(g),d.set(g,(d.get(g)??0)+1));}let l=i.filter(g=>(d.get(g)??0)===0),c=[];for(let g=0;g<l.length;g++){let f=l[g];c.push(f);for(let m of a.get(f)??[]){let w=(d.get(m)??0)-1;d.set(m,w),w===0&&l.push(m);}}if(c.length!==i.length)return {cycle:i.filter(g=>(d.get(g)??0)>0)};for(let g of t){if(!i.includes(g)||n.has(g))continue;let f=s.get(g);if(!f||!Oc.has(f.status))continue;if(!(f.depends_on??[]).some(w=>{if(!o.has(w))return false;let _=s.get(w);return _?_.status!=="done":false}))return {pick:g}}return {done:true}}u();function cr(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function li(r,e){let t={...r};for(let[n,o]of Object.entries(e))cr(o)&&cr(t[n])?t[n]=li(t[n],o):t[n]=o;return t}function qc(r){let e=r?.filePath??K.join(yo.homedir(),".crewx","crewx.yaml"),t=null,n=null;function o(){try{return bs.statSync(e).mtimeMs}catch{return null}}function s(){let i=o();if(i===null)return t=null,n=null,{};if(n!==null&&t===i)return n;let a=null;try{a=jsYaml.load(bs.readFileSync(e,"utf-8"));}catch{a=null;}let d=cr(a)?a:{};return n=d,t=i,d}return {get path(){return e},read(){let i=s();return cr(i.settings)?i.settings:{}},update(i){let a=s(),d=cr(a.settings)?a.settings:{},l=li(d,i),c={...a,settings:l};bs.mkdirSync(K.dirname(e),{recursive:true});let g=`${e}.tmp`;return bs.writeFileSync(g,jsYaml.dump(c)),bs.renameSync(g,e),t=null,n=null,l}}}u();ke();function uo(r){if(!r)return "";let e=r.lastIndexOf("/");return e===-1?r.trim():r.slice(e+1).trim()}function ci(r){return r?Et(r).models.length>0:false}function po(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function zc(r,e,t){let n=r,o=false,s=[],i=()=>(o||(n={...r},o=true),n),a=typeof n.provider=="string"&&n.provider.trim()?uo(n.provider):e,d=typeof n.model=="string"&&n.model.trim()?n.model.trim():t;ci(a)&&(typeof n.mode=="string"&&(jt(a).map(g=>g.id).includes(n.mode)||(delete i().mode,s.push("mode"))),typeof n.effort=="string"&&(Ft(a,d).includes(n.effort)||(delete i().effort,s.push("effort"))));let l=n.overdrive;if(po(l)){let c=uo(typeof l.provider=="string"?l.provider:void 0),g=typeof l.model=="string"?l.model:void 0;if(ci(c)){let f,m=()=>(f||(f={...l},i().overdrive=f),f);typeof l.mode=="string"&&(jt(c).map(_=>_.id).includes(l.mode)||(delete m().mode,s.push("overdrive.mode"))),typeof l.effort=="string"&&(Ft(c,g).includes(l.effort)||(delete m().effort,s.push("overdrive.effort")));}}return {block:n,removed:s}}function Kc(r){let{options:e}=r;if(!po(e))return {options:e,changed:false,removed:[]};let t=uo(r.provider),n=[],o=e,s=false,i=()=>(s||(o={...e},s=true),o);for(let a of ["query","execute"]){let d=e[a];if(!po(d))continue;let{block:l,removed:c}=zc(d,t,r.model);c.length>0&&(i()[a]=l,n.push(...c.map(g=>`${a}.${g}`)));}return {options:o,changed:n.length>0,removed:n}}u();var Gc="https://api.crewx.dev/v1/models",Vc=3600*1e3,ui=0;async function Jc(r){let e=r?.ttlMs??Vc,t=Date.now();if(!(t-ui<e)){ui=t;try{let n=await fetch(r?.endpoint??Gc);if(!n.ok)return;let o=await n.json();if(!o?.models||typeof o.models!="object")return;let s={};for(let[i,a]of Object.entries(o.models))a!=null&&(s[i]={input:a.input,cachedInput:a.cachedInput,output:a.output});ts(s);}catch{}}}u();ke();var Xc="https://api.crewx.dev/v1/models",Yc=900*1e3,pi=0;function Jr(r){return r!=null&&typeof r=="object"&&!Array.isArray(r)}function fi(r){if(Jr(r)&&!(typeof r.mode!="string"||r.mode.length===0)&&!(typeof r.effort!="string"||r.effort.length===0))return {mode:r.mode,effort:r.effort}}function Qc(r,e){let t=r.modelOverrides[e]?.effort;return Array.isArray(t)&&t.every(n=>typeof n=="string")?t:r.effort}function Zc(r,e){if(!Jr(r)||r.version!==1||!Jr(r.providers))return {};let t={};for(let[n,o]of Object.entries(r.providers)){if(!/^cli\/[^/]+$/.test(n)||!Jr(o))continue;let s=e[n.slice(4)];if(!s||typeof o.model!="string"||o.model.length===0||!s.models.some(c=>c.id===o.model))continue;let i=fi(o.query),a=fi(o.execute);if(!i||!a)continue;let d=new Set(s.modes.map(c=>c.id));if(!d.has(i.mode)||!d.has(a.mode))continue;let l=Qc(s,o.model);!l.includes(i.effort)||!l.includes(a.effort)||(t[n]={model:o.model,query:i,execute:a});}return t}async function eu(r){let e=r?.ttlMs??Yc,t=Date.now();if(!(t-pi<e)){pi=t;try{let n=await fetch(r?.endpoint??Xc);if(!n.ok){Ut({});return}let o=await n.json();if(!o?.providers||typeof o.providers!="object"){Ut({});return}let s={};for(let[i,a]of Object.entries(o.providers)){let d=Array.isArray(a)?a:a.models??[],l=Array.isArray(a)?[]:a.modes??[],c=Array.isArray(a)?[]:a.effort??[],g=Array.isArray(a)?{}:a.modelOverrides??{},f=d.filter(m=>m!=null&&typeof m.id=="string").map(m=>({id:m.id,name:m.name??m.id,...m.description!=null?{description:m.description}:{}}));s[i]={models:f,modes:l.filter(m=>m!=null&&typeof m.id=="string").map(m=>({id:m.id,name:m.name??m.id,...m.description!=null?{description:m.description}:{}})),effort:c.filter(m=>typeof m=="string"),modelOverrides:g};}ln(s),Ut(Zc(o.defaults,s));}catch{Ut({});}}}u();function tu(r,e){let t=r.skills?.include;if(t===void 0)return [...e];if(t.length===0)return [];let n=new Set(t);return e.filter(o=>n.has(o))}u();var fo=["codex","claude","opencode","antigravity","copilot"];function ru(r){let e=r.indexOf("/");return e===-1?r:r.slice(e+1)}function go(r){let e=ru(r),t=fo.indexOf(e);return t===-1?fo.length:t}function ur(r,e){return go(r)-go(e)}var nu=new Set(["claude","copilot","codex","opencode"]);function ou(r){if(!r)return "";if(r.startsWith("acp/")){let e=r.slice(4);if(nu.has(e))return `cli/${e}`}return r}ke();Ee();zn();Kn();u();Gn();Fe();u();Hr();Gr();ke();var su="model",iu="mode",au="thought_level";function mo(r){if(r.length===0)return [];if(r[0]?.group!=null){let e=[];for(let t of r)for(let n of t.options??[])e.push(n);return e}return r}function du(r,e){let t=new Map;for(let n of [...r,...e])t.has(n.id)||t.set(n.id,n);return Array.from(t.values())}function lu(r,e,t,n){let o=t.agentInfo?.name,s=e??o??r,i=n.configOptions??[],d=(n.modes?.availableModes??[]).map(y=>({id:y.id,name:y.name,...y.description!=null?{description:y.description}:{}})),l=[];for(let y of i)if(y.category?.trim().toLowerCase()===iu&&y.options!=null)for(let v of mo(y.options))v.value!=null&&l.push({id:v.value,name:v.name??v.value});let c=du(d,l),g=[];for(let y of i)if(y.category?.trim().toLowerCase()===au&&y.type==="select")for(let v of mo(y.options??[]))v.value!=null&&g.push(v.value);if(r==="claude"){let y=Wt().map(E=>({id:E.id,name:E.name})),v=gi(t);return mi(r,{models:y,modes:c,availableModelsCount:0,configModelsCount:0,skipModelWarn:true}),{id:`acp/${r}`,name:s,modes:c,effort:g,models:y,capabilities:v}}let m=(n.models?.availableModels??[]).map(y=>({id:y.modelId})),w=[];for(let y of i)if(y.category?.trim().toLowerCase()===su&&y.options!=null)for(let v of mo(y.options))v.value!=null&&w.push({id:v.value,...v.name!=null?{name:v.name}:{}});let _=Ht(m,w);mi(r,{models:_,modes:c,availableModelsCount:m.length,configModelsCount:w.length,skipModelWarn:false});let k=gi(t);return {id:`acp/${r}`,name:s,modes:c,effort:g,models:_,capabilities:k}}function gi(r){let e=r.agentCapabilities??{};return {loadSession:e.loadSession??false,image:e.promptCapabilities?.image??false,audio:e.promptCapabilities?.audio??false,mcp:e.mcpCapabilities!=null}}function mi(r,e){!e.skipModelWarn&&e.models.length===0&&console.warn(`[acp] ${r} meta: models empty (availableModels=${e.availableModelsCount}, configOptions[model]=${e.configModelsCount})`),e.modes.length===0&&console.warn(`[acp] ${r} meta: modes empty`);}async function hi(r){let e=exports.ACP_ADAPTERS[r];if(!e)return null;let t=e.meta?.displayName,n=new exports.AcpConnection({spawn:e.spawn,cwd:process.cwd()});try{await n.connect(e.clientInfo);let o=n.initResponse;if(!o)return null;let s=e.buildSessionParams({cwd:process.cwd()}),i=await n.newSessionRaw(s);return lu(r,t,o,i)}catch(o){return console.warn(`[acp] ${r} meta query failed: ${o instanceof Error?o.message:String(o)}`),null}finally{await n.dispose();}}async function cu(){let r=Object.keys(exports.ACP_ADAPTERS),e=await Promise.allSettled(r.map(n=>hi(n))),t=[];for(let n of e)n.status==="fulfilled"&&n.value!==null&&t.push(n.value);return t.sort((n,o)=>ur(n.id,o.id))}Hr();Vn();Gr();Zn();on();je();u();je();ke();function pu(r){return r.charAt(0).toUpperCase()+r.slice(1)}async function yi(){return new Promise(r=>{child_process.execFile("opencode",["models"],{timeout:5e3,maxBuffer:1048576},(t,n)=>{if(t){r([]);return}let o=n.split(`
315
- `).map(s=>s.trim()).filter(s=>s.length>0).map(s=>({id:s}));r(o);}).on("error",()=>r([]));})}function fu(r,e,t){if(!e.meta)return null;let n=e.meta.capabilities??{},o=st(r),s=o.length>0?o:e.meta.models??[],i=t!==void 0?Ht(t,s):s,a=zo(`cli/${r}`);return {id:`cli/${r}`,name:e.meta.displayName??pu(r),modes:jt(r),effort:Ft(r),models:i,modelOverrides:Ko(r),...a!==void 0?{defaults:a}:{},capabilities:{loadSession:n.loadSession??false,resume:n.resume??false,image:n.image??false,audio:n.audio??false,mcp:n.mcp??false}}}async function gu(r={}){let e=r.includeOpencodeRuntimeModels?await yi():void 0,t=[];for(let[n,o]of Object.entries(exports.BUILTIN_ADAPTERS)){let i=fu(n,o,n==="opencode"?e:void 0);i&&t.push(i);}return t.sort((n,o)=>ur(n.id,o.id))}u();var ho=0;function mu(r){let e=r.meta?.taskId,t=e?` taskId=${e}`:"";if(r.ok)return `Task completed:${t}
314
+ `,frontmatter:o}}async function di(r,e){let t=K.join(r,"docs","wi");return await bs.promises.mkdir(t,{recursive:true}),vc(t,async()=>{let{compact:n,iso:o}=mc(new Date),s=`WI-${n}-`,i=await kc(t),a=xc(i,s),d=[],l=[];try{let c=[];for(let m of e){let _;for(let k=0;k<999;k++,a++){let y=`WI-${n}-${String(a).padStart(3,"0")}`;if(Ec(i,y))continue;let v=await Ac(t,y);if(!v.claimed)continue;let E=hc(m.title),P=E?`${y}-${E}.md`:`${y}.md`,C=K.resolve(t,P);if(yc(t,C),await bs.promises.access(C).then(()=>!0,()=>!1)){await bs.promises.unlink(v.lockPath).catch(()=>{});continue}l.push(v.lockPath),_={item:m,wiId:y,filename:P,fullPath:C};break}if(!_)throw new ee("Failed to allocate a unique WI id");c.push(_),i.push(_.filename);}let g=new Map;for(let m of c)m.item.key&&g.set(m.item.key,m.wiId);let f=[];for(let m of c){let w=Pc(m.item.depends_on,g),_={...m.item,depends_on:w},k=bc(_,m.wiId,o);await bs.promises.writeFile(m.fullPath,k.raw,{encoding:"utf8",flag:"wx"}),d.push(m.fullPath);let y=await bs.promises.stat(m.fullPath);f.push({summary:{wi_id:m.wiId,title:_.title,status:"draft",priority:"normal",assignee:_.assignee,depends_on:w,blocks:[],date:o,board:_.board&&_.board!==St?_.board:void 0,source:_.source,screens:[],path:`docs/wi/${m.filename}`,mtime:y.mtimeMs},frontmatter:k.frontmatter,body:_.body});}return f}catch(c){throw await Promise.all(d.map(g=>bs.promises.unlink(g).catch(()=>{}))),c}finally{await Promise.all(l.map(c=>bs.promises.unlink(c).catch(()=>{})));}})}async function Sc(r,e){let[t]=await di(r,[Rc(e)]);if(!t)throw new ee("Failed to create WI");return t}async function Ic(r,e){return {created:await di(r,Cc(e))}}p();var Oc=new Set(["draft","approved","in-progress"]);function Mc(r,e){let t=e.batch.filter(Boolean);if(t.length===0)return {done:true};let n=new Set(e.exclude??[]),o=new Set(t),s=new Map(r.filter(g=>o.has(g.wi_id)).map(g=>[g.wi_id,g])),i=t.filter(g=>{let f=s.get(g);return f&&f.status!=="done"});if(i.length===0)return {done:true};for(let g of i){let f=s.get(g);if(f)for(let m of f.depends_on??[]){if(!o.has(m))continue;if(s.get(m)?.status==="cancelled")return {blocked:true,reason:`${g} depends on cancelled WI ${m}`}}}let a=new Map,d=new Map;for(let g of i)a.set(g,new Set),d.set(g,0);for(let g of i){let f=s.get(g);if(f)for(let m of f.depends_on??[])d.has(m)&&(a.get(m).add(g),d.set(g,(d.get(g)??0)+1));}let l=i.filter(g=>(d.get(g)??0)===0),c=[];for(let g=0;g<l.length;g++){let f=l[g];c.push(f);for(let m of a.get(f)??[]){let w=(d.get(m)??0)-1;d.set(m,w),w===0&&l.push(m);}}if(c.length!==i.length)return {cycle:i.filter(g=>(d.get(g)??0)>0)};for(let g of t){if(!i.includes(g)||n.has(g))continue;let f=s.get(g);if(!f||!Oc.has(f.status))continue;if(!(f.depends_on??[]).some(w=>{if(!o.has(w))return false;let _=s.get(w);return _?_.status!=="done":false}))return {pick:g}}return {done:true}}p();function cr(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function li(r,e){let t={...r};for(let[n,o]of Object.entries(e))cr(o)&&cr(t[n])?t[n]=li(t[n],o):t[n]=o;return t}function qc(r){let e=r?.filePath??K.join(wo.homedir(),".crewx","crewx.yaml"),t=null,n=null;function o(){try{return bs.statSync(e).mtimeMs}catch{return null}}function s(){let i=o();if(i===null)return t=null,n=null,{};if(n!==null&&t===i)return n;let a=null;try{a=jsYaml.load(bs.readFileSync(e,"utf-8"));}catch{a=null;}let d=cr(a)?a:{};return n=d,t=i,d}return {get path(){return e},read(){let i=s();return cr(i.settings)?i.settings:{}},update(i){let a=s(),d=cr(a.settings)?a.settings:{},l=li(d,i),c={...a,settings:l};bs.mkdirSync(K.dirname(e),{recursive:true});let g=`${e}.tmp`;return bs.writeFileSync(g,jsYaml.dump(c)),bs.renameSync(g,e),t=null,n=null,l}}}p();Ee();function po(r){if(!r)return "";let e=r.lastIndexOf("/");return e===-1?r.trim():r.slice(e+1).trim()}function ci(r){return r?Rt(r).models.length>0:false}function fo(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function zc(r,e,t){let n=r,o=false,s=[],i=()=>(o||(n={...r},o=true),n),a=typeof n.provider=="string"&&n.provider.trim()?po(n.provider):e,d=typeof n.model=="string"&&n.model.trim()?n.model.trim():t;ci(a)&&(typeof n.mode=="string"&&(jt(a).map(g=>g.id).includes(n.mode)||(delete i().mode,s.push("mode"))),typeof n.effort=="string"&&(Wt(a,d).includes(n.effort)||(delete i().effort,s.push("effort"))));let l=n.overdrive;if(fo(l)){let c=po(typeof l.provider=="string"?l.provider:void 0),g=typeof l.model=="string"?l.model:void 0;if(ci(c)){let f,m=()=>(f||(f={...l},i().overdrive=f),f);typeof l.mode=="string"&&(jt(c).map(_=>_.id).includes(l.mode)||(delete m().mode,s.push("overdrive.mode"))),typeof l.effort=="string"&&(Wt(c,g).includes(l.effort)||(delete m().effort,s.push("overdrive.effort")));}}return {block:n,removed:s}}function Kc(r){let{options:e}=r;if(!fo(e))return {options:e,changed:false,removed:[]};let t=po(r.provider),n=[],o=e,s=false,i=()=>(s||(o={...e},s=true),o);for(let a of ["query","execute"]){let d=e[a];if(!fo(d))continue;let{block:l,removed:c}=zc(d,t,r.model);c.length>0&&(i()[a]=l,n.push(...c.map(g=>`${a}.${g}`)));}return {options:o,changed:n.length>0,removed:n}}p();var Gc="https://api.crewx.dev/v1/models",Vc=3600*1e3,ui=0;async function Jc(r){let e=r?.ttlMs??Vc,t=Date.now();if(!(t-ui<e)){ui=t;try{let n=await fetch(r?.endpoint??Gc);if(!n.ok)return;let o=await n.json();if(!o?.models||typeof o.models!="object")return;let s={};for(let[i,a]of Object.entries(o.models))a!=null&&(s[i]={input:a.input,cachedInput:a.cachedInput,output:a.output});rs(s);}catch{}}}p();Ee();var Xc="https://api.crewx.dev/v1/models",Yc=900*1e3,pi=0;function Jr(r){return r!=null&&typeof r=="object"&&!Array.isArray(r)}function fi(r){if(Jr(r)&&!(typeof r.mode!="string"||r.mode.length===0)&&!(typeof r.effort!="string"||r.effort.length===0))return {mode:r.mode,effort:r.effort}}function Qc(r,e){let t=r.modelOverrides[e]?.effort;return Array.isArray(t)&&t.every(n=>typeof n=="string")?t:r.effort}function Zc(r,e){if(!Jr(r)||r.version!==1||!Jr(r.providers))return {};let t={};for(let[n,o]of Object.entries(r.providers)){if(!/^cli\/[^/]+$/.test(n)||!Jr(o))continue;let s=e[n.slice(4)];if(!s||typeof o.model!="string"||o.model.length===0||!s.models.some(c=>c.id===o.model))continue;let i=fi(o.query),a=fi(o.execute);if(!i||!a)continue;let d=new Set(s.modes.map(c=>c.id));if(!d.has(i.mode)||!d.has(a.mode))continue;let l=Qc(s,o.model);!l.includes(i.effort)||!l.includes(a.effort)||(t[n]={model:o.model,query:i,execute:a});}return t}async function eu(r){let e=r?.ttlMs??Yc,t=Date.now();if(!(t-pi<e)){pi=t;try{let n=await fetch(r?.endpoint??Xc);if(!n.ok){Ut({});return}let o=await n.json();if(!o?.providers||typeof o.providers!="object"){Ut({});return}let s={};for(let[i,a]of Object.entries(o.providers)){let d=Array.isArray(a)?a:a.models??[],l=Array.isArray(a)?[]:a.modes??[],c=Array.isArray(a)?[]:a.effort??[],g=Array.isArray(a)?{}:a.modelOverrides??{},f=d.filter(m=>m!=null&&typeof m.id=="string").map(m=>({id:m.id,name:m.name??m.id,...m.description!=null?{description:m.description}:{}}));s[i]={models:f,modes:l.filter(m=>m!=null&&typeof m.id=="string").map(m=>({id:m.id,name:m.name??m.id,...m.description!=null?{description:m.description}:{}})),effort:c.filter(m=>typeof m=="string"),modelOverrides:g};}ln(s),Ut(Zc(o.defaults,s));}catch{Ut({});}}}p();function tu(r,e){let t=r.skills?.include;if(t===void 0)return [...e];if(t.length===0)return [];let n=new Set(t);return e.filter(o=>n.has(o))}p();var go=["codex","claude","opencode","antigravity","copilot"];function ru(r){let e=r.indexOf("/");return e===-1?r:r.slice(e+1)}function mo(r){let e=ru(r),t=go.indexOf(e);return t===-1?go.length:t}function ur(r,e){return mo(r)-mo(e)}var nu=new Set(["claude","copilot","codex","opencode"]);function ou(r){if(!r)return "";if(r.startsWith("acp/")){let e=r.slice(4);if(nu.has(e))return `cli/${e}`}return r}Ee();Re();Kn();Gn();p();Vn();He();p();Hr();Gr();Ee();var su="model",iu="mode",au="thought_level";function ho(r){if(r.length===0)return [];if(r[0]?.group!=null){let e=[];for(let t of r)for(let n of t.options??[])e.push(n);return e}return r}function du(r,e){let t=new Map;for(let n of [...r,...e])t.has(n.id)||t.set(n.id,n);return Array.from(t.values())}function lu(r,e,t,n){let o=t.agentInfo?.name,s=e??o??r,i=n.configOptions??[],d=(n.modes?.availableModes??[]).map(y=>({id:y.id,name:y.name,...y.description!=null?{description:y.description}:{}})),l=[];for(let y of i)if(y.category?.trim().toLowerCase()===iu&&y.options!=null)for(let v of ho(y.options))v.value!=null&&l.push({id:v.value,name:v.name??v.value});let c=du(d,l),g=[];for(let y of i)if(y.category?.trim().toLowerCase()===au&&y.type==="select")for(let v of ho(y.options??[]))v.value!=null&&g.push(v.value);if(r==="claude"){let y=Ft().map(E=>({id:E.id,name:E.name})),v=gi(t);return mi(r,{models:y,modes:c,availableModelsCount:0,configModelsCount:0,skipModelWarn:true}),{id:`acp/${r}`,name:s,modes:c,effort:g,models:y,capabilities:v}}let m=(n.models?.availableModels??[]).map(y=>({id:y.modelId})),w=[];for(let y of i)if(y.category?.trim().toLowerCase()===su&&y.options!=null)for(let v of ho(y.options))v.value!=null&&w.push({id:v.value,...v.name!=null?{name:v.name}:{}});let _=Ht(m,w);mi(r,{models:_,modes:c,availableModelsCount:m.length,configModelsCount:w.length,skipModelWarn:false});let k=gi(t);return {id:`acp/${r}`,name:s,modes:c,effort:g,models:_,capabilities:k}}function gi(r){let e=r.agentCapabilities??{};return {loadSession:e.loadSession??false,image:e.promptCapabilities?.image??false,audio:e.promptCapabilities?.audio??false,mcp:e.mcpCapabilities!=null}}function mi(r,e){!e.skipModelWarn&&e.models.length===0&&console.warn(`[acp] ${r} meta: models empty (availableModels=${e.availableModelsCount}, configOptions[model]=${e.configModelsCount})`),e.modes.length===0&&console.warn(`[acp] ${r} meta: modes empty`);}async function hi(r){let e=exports.ACP_ADAPTERS[r];if(!e)return null;let t=e.meta?.displayName,n=new exports.AcpConnection({spawn:e.spawn,cwd:process.cwd()});try{await n.connect(e.clientInfo);let o=n.initResponse;if(!o)return null;let s=e.buildSessionParams({cwd:process.cwd()}),i=await n.newSessionRaw(s);return lu(r,t,o,i)}catch(o){return console.warn(`[acp] ${r} meta query failed: ${o instanceof Error?o.message:String(o)}`),null}finally{await n.dispose();}}async function cu(){let r=Object.keys(exports.ACP_ADAPTERS),e=await Promise.allSettled(r.map(n=>hi(n))),t=[];for(let n of e)n.status==="fulfilled"&&n.value!==null&&t.push(n.value);return t.sort((n,o)=>ur(n.id,o.id))}Hr();Jn();Gr();eo();on();Fe();p();Fe();Ee();function pu(r){return r.charAt(0).toUpperCase()+r.slice(1)}async function yi(){return new Promise(r=>{child_process.execFile("opencode",["models"],{timeout:5e3,maxBuffer:1048576},(t,n)=>{if(t){r([]);return}let o=n.split(`
315
+ `).map(s=>s.trim()).filter(s=>s.length>0).map(s=>({id:s}));r(o);}).on("error",()=>r([]));})}function fu(r,e,t){if(!e.meta)return null;let n=e.meta.capabilities??{},o=st(r),s=o.length>0?o:e.meta.models??[],i=t!==void 0?Ht(t,s):s,a=Ko(`cli/${r}`);return {id:`cli/${r}`,name:e.meta.displayName??pu(r),modes:jt(r),effort:Wt(r),models:i,modelOverrides:Go(r),...a!==void 0?{defaults:a}:{},capabilities:{loadSession:n.loadSession??false,resume:n.resume??false,image:n.image??false,audio:n.audio??false,mcp:n.mcp??false}}}async function gu(r={}){let e=r.includeOpencodeRuntimeModels?await yi():void 0,t=[];for(let[n,o]of Object.entries(exports.BUILTIN_ADAPTERS)){let i=fu(n,o,n==="opencode"?e:void 0);i&&t.push(i);}return t.sort((n,o)=>ur(n.id,o.id))}p();var yo=0;function mu(r){let e=r.meta?.taskId,t=e?` taskId=${e}`:"";if(r.ok)return `Task completed:${t}
316
316
 
317
317
  ${r.data}`;let n=r.error?.message??"Unknown error";return `Task failed:${t}
318
- Error: ${n}`}function hu(r){let e=Array.from(r.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(ho>=3)return "Error: Maximum delegation depth (3) reached. Cannot delegate further.";let n=t.agent,o=t.message,s=t.mode??"query";if(!e.includes(n))return `Error: Unknown agent "${n}". Available: ${e.join(", ")}`;ho++;try{let i=s==="execute"?await r.execute(n,o):await r.query(n,o);return mu(i)}finally{ho--;}}}}u();var wi=typeof process<"u"?process.env:{};function yu(){return wi.CREWX_CLI||"npx crewx"}function wu(){return wi.CREWX_WORKSPACE||(typeof process<"u"?process.cwd():"/")}u();function _u(){if(process.env.CREWX_HOME)try{return bs__namespace.realpathSync(process.env.CREWX_HOME)}catch{return K__namespace.join(yo__namespace.homedir(),".crewx")}return process.platform!=="win32"&&process.env.XDG_CONFIG_HOME?K__namespace.join(process.env.XDG_CONFIG_HOME,"crewx"):K__namespace.join(yo__namespace.homedir(),".crewx")}u();u();var ie="[REDACTED]",vi="[PATH]";function wo(r){if(typeof r!="string")return;let e=r.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 ${ie}]`),e=ku(e),e=e.replace(/\b(?:Bearer|Basic)\s+[A-Za-z0-9._~+\-/]+=*/gi,`${ie}`),e=e.replace(/\bsk-[A-Za-z0-9][A-Za-z0-9_-]*/g,ie),e=e.replace(/\bghp_[A-Za-z0-9][A-Za-z0-9_-]*/g,ie),e=e.replace(/\bxoxb-[A-Za-z0-9-]+/g,ie),e=e.replace(/\bxoxp-[A-Za-z0-9-]+/g,ie),e=e.replace(/\bAKIA[0-9A-Z]{12,}\b/g,ie),e=e.replace(/\bgithub_pat_[A-Za-z0-9_]+/g,ie),e=e.replace(/\bgho_[A-Za-z0-9_]+/g,ie),e=e.replace(/\bAIza[A-Za-z0-9_-]{20,}\b/g,ie),e=e.replace(/\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g,ie),e=e.replace(/\b(?:authorization|api[_ -]?key|access[_ -]?token|auth[_ -]?token|refresh[_ -]?token|token|secret|password)\s*([:=])\s*["']?[^\s,;&"']+/gi,(t,n)=>`${ie}${n}${ie}`),e=e.replace(/([?&](?:api[_-]?key|access[_-]?token|token)=)[^&\s]+/gi,`$1${ie}`),e=e.replace(/(?:\/(?:Users|home|private|var\/folders|tmp|workspace|workspaces|Volumes|opt|etc|srv|Applications)\/[^\s"'`),;]+)/g,vi),e=e.replace(/\b[A-Z]:\\(?:Users|home|Windows|Program Files|workspace|workspaces)\\[^\s"'`),;]*/gi,vi),e=e.replace(/[\r\n]{3,}/g,`
318
+ Error: ${n}`}function hu(r){let e=Array.from(r.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(yo>=3)return "Error: Maximum delegation depth (3) reached. Cannot delegate further.";let n=t.agent,o=t.message,s=t.mode??"query";if(!e.includes(n))return `Error: Unknown agent "${n}". Available: ${e.join(", ")}`;yo++;try{let i=s==="execute"?await r.execute(n,o):await r.query(n,o);return mu(i)}finally{yo--;}}}}p();var wi=typeof process<"u"?process.env:{};function yu(){return wi.CREWX_CLI||"npx crewx"}function wu(){return wi.CREWX_WORKSPACE||(typeof process<"u"?process.cwd():"/")}p();function _u(){if(process.env.CREWX_HOME)try{return bs__namespace.realpathSync(process.env.CREWX_HOME)}catch{return K__namespace.join(wo__namespace.homedir(),".crewx")}return process.platform!=="win32"&&process.env.XDG_CONFIG_HOME?K__namespace.join(process.env.XDG_CONFIG_HOME,"crewx"):K__namespace.join(wo__namespace.homedir(),".crewx")}p();p();var ie="[REDACTED]",vi="[PATH]";function _o(r){if(typeof r!="string")return;let e=r.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 ${ie}]`),e=ku(e),e=e.replace(/\b(?:Bearer|Basic)\s+[A-Za-z0-9._~+\-/]+=*/gi,`${ie}`),e=e.replace(/\bsk-[A-Za-z0-9][A-Za-z0-9_-]*/g,ie),e=e.replace(/\bghp_[A-Za-z0-9][A-Za-z0-9_-]*/g,ie),e=e.replace(/\bxoxb-[A-Za-z0-9-]+/g,ie),e=e.replace(/\bxoxp-[A-Za-z0-9-]+/g,ie),e=e.replace(/\bAKIA[0-9A-Z]{12,}\b/g,ie),e=e.replace(/\bgithub_pat_[A-Za-z0-9_]+/g,ie),e=e.replace(/\bgho_[A-Za-z0-9_]+/g,ie),e=e.replace(/\bAIza[A-Za-z0-9_-]{20,}\b/g,ie),e=e.replace(/\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g,ie),e=e.replace(/\b(?:authorization|api[_ -]?key|access[_ -]?token|auth[_ -]?token|refresh[_ -]?token|token|secret|password)\s*([:=])\s*["']?[^\s,;&"']+/gi,(t,n)=>`${ie}${n}${ie}`),e=e.replace(/([?&](?:api[_-]?key|access[_-]?token|token)=)[^&\s]+/gi,`$1${ie}`),e=e.replace(/(?:\/(?:Users|home|private|var\/folders|tmp|workspace|workspaces|Volumes|opt|etc|srv|Applications)\/[^\s"'`),;]+)/g,vi),e=e.replace(/\b[A-Z]:\\(?:Users|home|Windows|Program Files|workspace|workspaces)\\[^\s"'`),;]*/gi,vi),e=e.replace(/[\r\n]{3,}/g,`
319
319
 
320
320
  `).trim(),vu(e,1024)||void 0}function vu(r,e){let t=new TextEncoder;if(t.encode(r).byteLength<=e)return r;let n="",o=0;for(let s of r){let i=t.encode(s).byteLength;if(o+i>e)break;n+=s,o+=i;}return n}function ku(r){let e=/\b(?:request|response|http)?\s*body\s*[:=]\s*/gim,t="",n=0,o;for(;(o=e.exec(r))!==null;){if(o.index<n)continue;let s=o.index+o[0].length,i=xu(r,s),a=i>=0?i:r.indexOf(`
321
321
  `,s)>=0?r.indexOf(`
322
- `,s):r.length;t+=r.slice(n,o.index),t+=`[HTTP BODY ${ie}]`,n=a;}return t+r.slice(n)}function xu(r,e){let t=r[e];if(t==='"'||t==="'")return Eu(r,e,t);if(t!=="{"&&t!=="[")return -1;let n=[],o,s=false;for(let i=e;i<r.length;i+=1){let a=r[i];if(o){s?s=false:a==="\\"?s=true:a===o&&(o=void 0);continue}if(a==='"'||a==="'"){o=a;continue}if(a==="{"||a==="["){n.push(a);continue}if(a!=="}"&&a!=="]")continue;let d=n.pop();if(a==="}"&&d!=="{"||a==="]"&&d!=="[")return -1;if(n.length===0)return i+1}return -1}function Eu(r,e,t){let n=false;for(let o=e+1;o<r.length;o+=1){let s=r[o];if(n)n=false;else if(s==="\\")n=true;else if(s===t)return o+1}return -1}var Au=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"]),Ru={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"},Tu=[{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 Cu(r){try{if(!Ve(r)||r.status!=="failed")return _o();let e=Pu(r.error);if(xo(e.message))return _o();let t=fe(r.providerId)??e.provider??null,n=Su(r.logs),o=xi(e.code);if(o)return pr(o,t,e.message,e);let s=Yr(e.providerCode)??Yr(e.code),i=s?ko(s,e.message):void 0;if(i)return pr(i,t,e.message,e,s);let a=Iu(n);if(!bu(e)&&a&&(a.type==="user_stop"||xo(a.message)))return _o();if(a){let l=Ou(a.code,a.providerCode,a.message);if(l)return pr(l,t,a.message??e.message,e,a.providerCode??a.code,a,a.structuredFailure?"terminal":"envelope")}let d=Mu(e.message,n);return d?pr(d.code,t,d.message,e,d.terminal?.providerCode??d.terminal?.code,d.terminal,d.terminal?.structuredFailure?"terminal":"envelope"):pr("PROCESS_FAILED",t,e.message,e)}catch{return {errorCode:"PROCESS_FAILED",errorProvider:null}}}function _o(){return {errorCode:null,errorProvider:null}}function pr(r,e,t,n,o,s,i="envelope"){let a={};if(s?.resetAt!==void 0&&(a.resetAt=s.resetAt),n?.model&&(a.model=n.model),s?.type&&(a.upstreamType=s.type),o&&(a.upstreamCode=o),r==="CLI_NOT_AVAILABLE"||r==="CLI_UPDATE_REQUIRED"){let g=e?.startsWith("cli/")?e.slice(4):void 0;g&&(a.cliName=g);}let d=i==="terminal"?t:n?.message,l=i==="terminal"?s?.structuredFailure?d:void 0:n?.isEnvelope?d:void 0,c=wo(l);return c&&(a.technicalMessage=c),Object.keys(a).length>0?{errorCode:r,errorProvider:e,errorMeta:a}:{errorCode:r,errorProvider:e}}function Pu(r){let e=typeof r=="string"?Nt(r):r;return Ve(e)?{isEnvelope:true,code:fe(e.code),providerCode:fe(e.providerCode),message:fe(e.message)??fe(e.error),provider:fe(e.provider)??fe(e.errorProvider),model:fe(e.model)}:{isEnvelope:false,...typeof r=="string"&&r.trim()?{message:r.trim()}:{}}}function Nt(r){try{return JSON.parse(r)}catch{return}}function bu(r){return !!(r.code||r.providerCode||r.message)}function Su(r){let e=[];if(typeof r=="string"){let t=Nt(r);if(Array.isArray(t))e.push(...t);else for(let n of r.split(/\r?\n/)){let o=Nt(n.trim());o!==void 0&&e.push(o);}}else Array.isArray(r)?e.push(...r):Ve(r)&&e.push(r);return e.flatMap(Mt)}function Mt(r){if(!Ve(r))return [];let e=fe(r.type),t=fe(r.message);if(t&&!e){let o=Nt(t);if(Array.isArray(o))return o.flatMap(Mt);if(Ve(o))return Mt(o);let s=t.split(/\r?\n/).map(i=>Nt(i.trim())).filter(i=>Ve(i));return s.length>0?s.flatMap(Mt):r.level==="stderr"?[{type:"stderr",message:t,rank:1,structuredFailure:false}]:Mt({type:"info",content:t})}if(e==="rate_limit_event"){let o=ki(r.rate_limit_info);return fe(o?.status)!=="rejected"?[]:[{type:e,code:"RATE_LIMITED",message:fr(o?.message,r.message),resetAt:Nu(o?.resetsAt),rank:4,structuredFailure:true}]}if(e==="turn.failed"||e==="error"){let o=ki(r.error),s=fr(o?.message,o?.detail,r.message,r.errorMessage,r.content),i=fr(o?.code,r.code,r.errorCode);return [{type:e,code:i,providerCode:fr(o?.providerCode,r.providerCode),message:s,rank:e==="turn.failed"?3:2,structuredFailure:true}]}if(e==="text"&&typeof r.content=="string"){let o=Nt(r.content);if(Ve(o))return Mt(o)}let n=fr(r.errorMessage,r.content);return n&&xo(n)?[{type:"user_stop",message:n,rank:1,structuredFailure:false}]:n&&/(?:turn\.failed|type:error)/i.test(n)?[{type:n.match(/turn\.failed/i)?"turn.failed":"error",message:n,rank:3,structuredFailure:false}]:[]}function Iu(r){return [...r].sort((e,t)=>t.rank-e.rank)[0]}function Ou(r,e,t){let n=xi(r);if(n)return n;if(r){let o=ko(r,t);if(o)return o}if(e){let o=ko(e,t);if(o)return o}return vo(t)}function Mu(r,e){let t=vo(r);if(t)return {code:t,message:r};for(let n of [...e].sort((o,s)=>s.rank-o.rank)){let o=vo(n.message);if(o)return {code:o,message:n.message,terminal:n}}}function vo(r){if(!(typeof r!="string"||!r.trim()))return Tu.find(e=>e.pattern.test(r))?.code}function ko(r,e){let t=Yr(r)??r;if(t==="MODEL_UNAVAILABLE")return /(?:capacity|overloaded|busy)/i.test(e??"")?"MODEL_AT_CAPACITY":"MODEL_NOT_SUPPORTED";if(t!=="UNKNOWN")return Ru[t]}function xi(r){let e=Yr(r);return e&&Au.has(e)?e:void 0}function Yr(r){return typeof r=="string"&&r.trim()?r.trim().toUpperCase():void 0}function xo(r){return r?/\b(?:stopped|killed|aborted|cancelled|canceled)\s+by\s+user\b/i.test(r)||/사용자에 의해 중지됨/.test(r)||/\b(?:SIGTERM\s+143|143\s+SIGTERM)\b/i.test(r):false}function Ve(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function ki(r){return Ve(r)?r:void 0}function fe(r){return typeof r=="string"&&r.trim()?r.trim():void 0}function Nu(r){return typeof r=="string"||typeof r=="number"&&Number.isFinite(r)?r:void 0}function fr(...r){return r.map(fe).find(e=>!!e)}u();var Du=/^[a-zA-Z0-9._-]+$/,Eo=class{constructor(e){this.storage=e;}storage;listBoxes(e){this.validateId(e);let n=this.storage.listBoxes(e).map(o=>this.toBoxResponse(o));return {boxes:n,total:n.length}}getBox(e,t){this.validateId(e),this.validateId(t);let n=this.storage.findBox(e,t);return n?this.toBoxResponse(n):null}createBox(e,t){this.validateId(e);let n=this.generateBoxId(),o=new Date().toISOString(),s=this.storage.insertBox(e,{id:n,seq:t.seq,firstTaskId:t.firstTaskId,midTaskId:t.midTaskId,lastTaskId:t.lastTaskId,taskCount:t.taskCount,summary:t.summary??null,sourceTokens:t.sourceTokens,summaryTokens:t.summaryTokens??null,createdAt:o});return this.toBoxResponse(s)}toBoxResponse(e){return {id:e.id,threadId:e.thread_id,seq:e.seq,firstTaskId:e.first_task_id,lastTaskId:e.last_task_id,taskCount:e.task_count,sourceTokens:e.source_tokens,summaryTokens:e.summary_tokens,summary:e.summary,previewFirst:this.storage.getTaskPreview(e.first_task_id,200),previewMid:this.storage.getTaskPreview(e.mid_task_id,200),previewLast:this.storage.getTaskPreview(e.last_task_id,200),createdAt:e.created_at}}validateId(e){if(!Du.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return lt("box")}};u();function Lu(r,e,t,n,o){let{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}=n,d=s*i,l=s*a,c=d+l,g=e.getThreadMessages(r),f=[],m=0,w=false,_=[];for(let v=0;v<g.length;v+=2){let E=g[v],P=g[v+1],C=E?.content||"",V=P?.content||"",$=o.countTokens(C+V),I=[];E&&I.push(E),P&&I.push(P),_.push({messages:I,tokens:$});}for(let v=_.length-1;v>=0;v--){let E=_[v];if(m+E.tokens>d){w=true;break}m+=E.tokens,f.unshift(...E.messages);}let k=[],y=0;if(w&&l>0)try{let{boxes:v}=t.listBoxes(r);for(let E=v.length-1;E>=0;E--){let P=v[E],C=P.summaryTokens??P.sourceTokens;if(y+C>l)break;y+=C,k.unshift({boxId:P.id,seq:P.seq,taskCount:P.taskCount,sourceTokens:P.sourceTokens,summary:P.summary,previewFirst:P.previewFirst,previewMid:P.previewMid,previewLast:P.previewLast,createdAt:P.createdAt});}}catch(v){if(v instanceof Error&&!/not found/i.test(v.message))throw v}return {hot:f,warm:k,hotTokens:m,warmTokens:y,hotOverflow:w,totalBudget:c,config:{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}}}je();tt();u();var Qr=class extends Error{constructor(t,n){super(`Task ${t} timed out after ${n}ms`);this.taskId=t;this.timeoutMs=n;this.name="ParallelRunnerTimeoutError";}taskId;timeoutMs},mr=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 n=this.mergeOptions(t),o=Math.max(1,n.maxConcurrency??5),s=n.timeoutMs,i=n.failFast??false,a=n.callbacks,d=n.evaluateTaskSuccess??(()=>true),l=[],c=0,g=0,f=0,m=false,w=0,_=perf_hooks.performance.now(),k=async I=>{a?.onTaskStart&&await a.onTaskStart(I),f+=1;let N=new AbortController,le={signal:N.signal},Y,D;typeof s=="number"&&Number.isFinite(s)&&s>0&&(D=new Promise((B,W)=>{Y=setTimeout(()=>{let Q=new Qr(I.id,s);N.abort(Q),W(Q);},s);}));let Z=perf_hooks.performance.now(),U=I.run(le),ne=D?Promise.race([U,D]):U;try{let B=await ne,W=perf_hooks.performance.now(),Q=W-Z,J=d(B,I),q={taskId:I.id,success:J,value:B,durationMs:Q,startedAt:Z,finishedAt:W,metadata:I.metadata,aborted:!1};l.push(q),J?c+=1:g+=1,a?.onTaskComplete&&await a.onTaskComplete(q),i&&!J&&(m=!0);}catch(B){let W=perf_hooks.performance.now(),Q=W-Z,J=B instanceof Error?B:new Error(String(B)),q={taskId:I.id,success:false,error:J,durationMs:Q,startedAt:Z,finishedAt:W,metadata:I.metadata,aborted:N.signal.aborted};l.push(q),g+=1,a?.onError&&await a.onError(I,J,Q),i&&(m=true);}finally{Y&&clearTimeout(Y),D&&U.catch(()=>{});}},y=async()=>{for(;!m;){let I=w;if(I>=e.length)break;w+=1;let N=e[I];if(!N||(await k(N),m))break}},v=Math.min(o,e.length),E=[];for(let I=0;I<v;I++)E.push(y());await Promise.all(E);let C=perf_hooks.performance.now()-_,V=l.length?l.reduce((I,N)=>I+N.durationMs,0)/l.length:0,$=C>0?l.length/(C/1e3):l.length;return this.metrics={totalTasks:e.length,startedTasks:f,completedTasks:l.length,successCount:c,failureCount:g,totalDurationMs:C,averageDurationMs:V,throughput:$},l}getMetrics(){return this.metrics}mergeOptions(e){return {maxConcurrency:e.maxConcurrency??this.defaults.maxConcurrency,timeoutMs:e.timeoutMs??this.defaults.timeoutMs,failFast:e.failFast??this.defaults.failFast,evaluateTaskSuccess:e.evaluateTaskSuccess??this.defaults.evaluateTaskSuccess,callbacks:this.mergeCallbacks(this.defaults.callbacks,e.callbacks)}}mergeCallbacks(e,t){if(!(!e&&!t))return {onTaskStart:async n=>{e?.onTaskStart&&await e.onTaskStart(n),t?.onTaskStart&&await t.onTaskStart(n);},onTaskComplete:async n=>{e?.onTaskComplete&&await e.onTaskComplete(n),t?.onTaskComplete&&await t.onTaskComplete(n);},onError:async(n,o,s)=>{e?.onError&&await e.onError(n,o,s),t?.onError&&await t.onError(n,o,s);}}}};u();u();var hr=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 Ei=3,Ai=3e4,Ri=500,$u=r=>{if(typeof r!="number"||Number.isNaN(r)||!Number.isFinite(r))return Ei;let e=Math.floor(r);return e>0?e:Ei},Uu=r=>r===void 0||typeof r!="number"||Number.isNaN(r)||r<=0?Ai:r,ju=r=>{if(!r)return {maxRetries:0,retryDelay:Ri};let e=Number.isInteger(r.maxRetries)&&r.maxRetries>=0?r.maxRetries:0,t=typeof r.retryDelay=="number"&&r.retryDelay>=0?r.retryDelay:Ri;return {maxRetries:e,retryDelay:t}},Ao=r=>{let e=r.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},Fu=(r,e)=>r<=0?Promise.resolve():new Promise((t,n)=>{let o=setTimeout(()=>{e.removeEventListener("abort",s),t();},r),s=()=>{clearTimeout(o),n(Ao(e));};if(e.aborted){s();return}e.addEventListener("abort",s,{once:true});}),Wu=async(r,e,t)=>{let n,o;for(let s=0;s<=e.maxRetries;s++){if(t.aborted)throw Ao(t);try{let i=await r();if(n=i,i.success||s===e.maxRetries)return i}catch(i){if(o=i,t.aborted)throw Ao(t);if(s===e.maxRetries)throw i instanceof Error?i:new Error(String(i))}s<e.maxRetries&&await Fu(e.retryDelay,t);}if(n)return n;throw o?o instanceof Error?o:new Error(String(o)):new Error("Parallel helper encountered an unexpected state")},Ti=(r,e,t)=>{e.completed+=1,t?e.success+=1:e.failure+=1;try{r.onProgress?.(e.completed,e.total);}catch(n){process.env.NODE_ENV!=="production"&&console.warn("Parallel helper onProgress callback threw an error:",n);}},Hu=r=>r.map(t=>({metadata:t.metadata,taskResult:t})).slice().sort((t,n)=>t.metadata.index-n.metadata.index).map(({metadata:t,taskResult:n})=>{if(n.value){let s=n.value;return {...s,agentId:s.agentId??t.request.agentId,metadata:{...s.metadata,requestIndex:t.index,mode:t.mode}}}let o=n.error??new Error("Unknown error");return {agentId:t.request.agentId,content:o.message,success:false,metadata:{error:o.message,aborted:n.aborted??false,requestIndex:t.index,mode:t.mode}}}),Bu=r=>r.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 n=String(e.value.metadata?.error??e.value.content??"Agent returned unsuccessful result");return {index:t.index,error:new Error(n)}}return {index:t.index,error:new Error("Unknown failure")}}),qu=(r,e)=>({onTaskComplete:async t=>{Ti(e,r,t.success);},onError:async()=>{Ti(e,r,false);}}),Ci=async(r,e,t={})=>{if(!Array.isArray(r))throw new TypeError("Parallel helpers expect an array of requests");if(r.length===0){let k={total:0,completed:0,successCount:0,failureCount:0,results:[],errors:[],metrics:{totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0}};return t.onComplete?.(k),[]}let n=$u(t.concurrency),o=Uu(t.timeout),s=ju(t.retryPolicy),i=new mr,a=new hr,d=r.map((_,k)=>({id:`${e}:${_.agentId??"anonymous"}:${k}`,metadata:{index:k,mode:e,request:_},run:y=>Wu(()=>e==="query"?a.query(_):a.execute(_),s,y.signal)})),l={completed:0,success:0,failure:0,total:r.length},c=await i.run(d,{maxConcurrency:n,timeoutMs:o,evaluateTaskSuccess:_=>_.success,callbacks:qu(l,t)}),g=Hu(c),f=Bu(c),m=i.getMetrics(),w={total:r.length,completed:r.length,successCount:g.filter(_=>_.success).length,failureCount:g.filter(_=>!_.success).length,results:g,errors:f,metrics:m};return t.onComplete?.(w),g},zu=(r,e)=>Ci(r,"query",e),Ku=(r,e)=>Ci(r,"execute",e);no();u();var Ro=class extends Tt{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=K.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=K.dirname(t);bs.existsSync(o)||bs.mkdirSync(o,{recursive:true});}else if(!bs.existsSync(t))throw new b("NOT_FOUND","Database not found");let n=Re(t);if(e)try{Dr(n.db,t);}catch(o){throw n.close(),o}return n}insertSpan(e){let t=this.openHandle(true);try{t.db.insert(pt).values(e).run();}catch(n){throw n instanceof b?n:new b("DB_ERROR","Failed to insert span",n)}finally{t.close();}}findByTaskId(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.select().from(pt).where(drizzleOrm.eq(pt.task_id,e)).all()}catch(n){throw new b("DB_ERROR","Failed to find spans by task id",n)}finally{t.close();}}findById(e){if(!this.dbExists())return;let t=this.openHandle(false);try{return t.db.select().from(pt).where(drizzleOrm.eq(pt.id,e)).limit(1).get()??void 0}catch(n){throw new b("DB_ERROR","Failed to find span by id",n)}finally{t.close();}}};ro();to();eo();u();u();var Zr=class{capabilities={required:[]}};u();u();u();var Si=2e3;function Ii(r){let e=r.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=Si?e:e.slice(0,Si-11)+" [redacted]"}var np=10*1024*1024,op={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function To(r,e){return r===void 0?true:Array.isArray(r)?r.includes(e):r===e}function sp(r,e){return r===void 0?true:Array.isArray(r)?r.some(t=>e.includes(t)):e.includes(r)}function Mi(r){if(typeof r=="number")return r;let e=r.match(/^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/i);if(!e)return 0;let t=parseFloat(e[1]),n=(e[2]??"b").toLowerCase();return Math.floor(t*(op[n]??1))}function Ni(r){return typeof r=="string"}function Di(r){try{let e=bs.statSync(r);return e.size>np?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${r} (${e.size} bytes)
322
+ `,s):r.length;t+=r.slice(n,o.index),t+=`[HTTP BODY ${ie}]`,n=a;}return t+r.slice(n)}function xu(r,e){let t=r[e];if(t==='"'||t==="'")return Eu(r,e,t);if(t!=="{"&&t!=="[")return -1;let n=[],o,s=false;for(let i=e;i<r.length;i+=1){let a=r[i];if(o){s?s=false:a==="\\"?s=true:a===o&&(o=void 0);continue}if(a==='"'||a==="'"){o=a;continue}if(a==="{"||a==="["){n.push(a);continue}if(a!=="}"&&a!=="]")continue;let d=n.pop();if(a==="}"&&d!=="{"||a==="]"&&d!=="[")return -1;if(n.length===0)return i+1}return -1}function Eu(r,e,t){let n=false;for(let o=e+1;o<r.length;o+=1){let s=r[o];if(n)n=false;else if(s==="\\")n=true;else if(s===t)return o+1}return -1}var Au=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"]),Ru={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"},Tu=[{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 Cu(r){try{if(!Ve(r)||r.status!=="failed")return vo();let e=Pu(r.error);if(Eo(e.message))return vo();let t=fe(r.providerId)??e.provider??null,n=Su(r.logs),o=xi(e.code);if(o)return pr(o,t,e.message,e);let s=Yr(e.providerCode)??Yr(e.code),i=s?xo(s,e.message):void 0;if(i)return pr(i,t,e.message,e,s);let a=Iu(n);if(!bu(e)&&a&&(a.type==="user_stop"||Eo(a.message)))return vo();if(a){let l=Ou(a.code,a.providerCode,a.message);if(l)return pr(l,t,a.message??e.message,e,a.providerCode??a.code,a,a.structuredFailure?"terminal":"envelope")}let d=Mu(e.message,n);return d?pr(d.code,t,d.message,e,d.terminal?.providerCode??d.terminal?.code,d.terminal,d.terminal?.structuredFailure?"terminal":"envelope"):pr("PROCESS_FAILED",t,e.message,e)}catch{return {errorCode:"PROCESS_FAILED",errorProvider:null}}}function vo(){return {errorCode:null,errorProvider:null}}function pr(r,e,t,n,o,s,i="envelope"){let a={};if(s?.resetAt!==void 0&&(a.resetAt=s.resetAt),n?.model&&(a.model=n.model),s?.type&&(a.upstreamType=s.type),o&&(a.upstreamCode=o),r==="CLI_NOT_AVAILABLE"||r==="CLI_UPDATE_REQUIRED"){let g=e?.startsWith("cli/")?e.slice(4):void 0;g&&(a.cliName=g);}let d=i==="terminal"?t:n?.message,l=i==="terminal"?s?.structuredFailure?d:void 0:n?.isEnvelope?d:void 0,c=_o(l);return c&&(a.technicalMessage=c),Object.keys(a).length>0?{errorCode:r,errorProvider:e,errorMeta:a}:{errorCode:r,errorProvider:e}}function Pu(r){let e=typeof r=="string"?Nt(r):r;return Ve(e)?{isEnvelope:true,code:fe(e.code),providerCode:fe(e.providerCode),message:fe(e.message)??fe(e.error),provider:fe(e.provider)??fe(e.errorProvider),model:fe(e.model)}:{isEnvelope:false,...typeof r=="string"&&r.trim()?{message:r.trim()}:{}}}function Nt(r){try{return JSON.parse(r)}catch{return}}function bu(r){return !!(r.code||r.providerCode||r.message)}function Su(r){let e=[];if(typeof r=="string"){let t=Nt(r);if(Array.isArray(t))e.push(...t);else for(let n of r.split(/\r?\n/)){let o=Nt(n.trim());o!==void 0&&e.push(o);}}else Array.isArray(r)?e.push(...r):Ve(r)&&e.push(r);return e.flatMap(Mt)}function Mt(r){if(!Ve(r))return [];let e=fe(r.type),t=fe(r.message);if(t&&!e){let o=Nt(t);if(Array.isArray(o))return o.flatMap(Mt);if(Ve(o))return Mt(o);let s=t.split(/\r?\n/).map(i=>Nt(i.trim())).filter(i=>Ve(i));return s.length>0?s.flatMap(Mt):r.level==="stderr"?[{type:"stderr",message:t,rank:1,structuredFailure:false}]:Mt({type:"info",content:t})}if(e==="rate_limit_event"){let o=ki(r.rate_limit_info);return fe(o?.status)!=="rejected"?[]:[{type:e,code:"RATE_LIMITED",message:fr(o?.message,r.message),resetAt:Nu(o?.resetsAt),rank:4,structuredFailure:true}]}if(e==="turn.failed"||e==="error"){let o=ki(r.error),s=fr(o?.message,o?.detail,r.message,r.errorMessage,r.content),i=fr(o?.code,r.code,r.errorCode);return [{type:e,code:i,providerCode:fr(o?.providerCode,r.providerCode),message:s,rank:e==="turn.failed"?3:2,structuredFailure:true}]}if(e==="text"&&typeof r.content=="string"){let o=Nt(r.content);if(Ve(o))return Mt(o)}let n=fr(r.errorMessage,r.content);return n&&Eo(n)?[{type:"user_stop",message:n,rank:1,structuredFailure:false}]:n&&/(?:turn\.failed|type:error)/i.test(n)?[{type:n.match(/turn\.failed/i)?"turn.failed":"error",message:n,rank:3,structuredFailure:false}]:[]}function Iu(r){return [...r].sort((e,t)=>t.rank-e.rank)[0]}function Ou(r,e,t){let n=xi(r);if(n)return n;if(r){let o=xo(r,t);if(o)return o}if(e){let o=xo(e,t);if(o)return o}return ko(t)}function Mu(r,e){let t=ko(r);if(t)return {code:t,message:r};for(let n of [...e].sort((o,s)=>s.rank-o.rank)){let o=ko(n.message);if(o)return {code:o,message:n.message,terminal:n}}}function ko(r){if(!(typeof r!="string"||!r.trim()))return Tu.find(e=>e.pattern.test(r))?.code}function xo(r,e){let t=Yr(r)??r;if(t==="MODEL_UNAVAILABLE")return /(?:capacity|overloaded|busy)/i.test(e??"")?"MODEL_AT_CAPACITY":"MODEL_NOT_SUPPORTED";if(t!=="UNKNOWN")return Ru[t]}function xi(r){let e=Yr(r);return e&&Au.has(e)?e:void 0}function Yr(r){return typeof r=="string"&&r.trim()?r.trim().toUpperCase():void 0}function Eo(r){return r?/\b(?:stopped|killed|aborted|cancelled|canceled)\s+by\s+user\b/i.test(r)||/사용자에 의해 중지됨/.test(r)||/\b(?:SIGTERM\s+143|143\s+SIGTERM)\b/i.test(r):false}function Ve(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function ki(r){return Ve(r)?r:void 0}function fe(r){return typeof r=="string"&&r.trim()?r.trim():void 0}function Nu(r){return typeof r=="string"||typeof r=="number"&&Number.isFinite(r)?r:void 0}function fr(...r){return r.map(fe).find(e=>!!e)}p();var Du=/^[a-zA-Z0-9._-]+$/,Ao=class{constructor(e){this.storage=e;}storage;listBoxes(e){this.validateId(e);let n=this.storage.listBoxes(e).map(o=>this.toBoxResponse(o));return {boxes:n,total:n.length}}getBox(e,t){this.validateId(e),this.validateId(t);let n=this.storage.findBox(e,t);return n?this.toBoxResponse(n):null}createBox(e,t){this.validateId(e);let n=this.generateBoxId(),o=new Date().toISOString(),s=this.storage.insertBox(e,{id:n,seq:t.seq,firstTaskId:t.firstTaskId,midTaskId:t.midTaskId,lastTaskId:t.lastTaskId,taskCount:t.taskCount,summary:t.summary??null,sourceTokens:t.sourceTokens,summaryTokens:t.summaryTokens??null,createdAt:o});return this.toBoxResponse(s)}toBoxResponse(e){return {id:e.id,threadId:e.thread_id,seq:e.seq,firstTaskId:e.first_task_id,lastTaskId:e.last_task_id,taskCount:e.task_count,sourceTokens:e.source_tokens,summaryTokens:e.summary_tokens,summary:e.summary,previewFirst:this.storage.getTaskPreview(e.first_task_id,200),previewMid:this.storage.getTaskPreview(e.mid_task_id,200),previewLast:this.storage.getTaskPreview(e.last_task_id,200),createdAt:e.created_at}}validateId(e){if(!Du.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return lt("box")}};p();function Lu(r,e,t,n,o){let{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}=n,d=s*i,l=s*a,c=d+l,g=e.getThreadMessages(r),f=[],m=0,w=false,_=[];for(let v=0;v<g.length;v+=2){let E=g[v],P=g[v+1],C=E?.content||"",V=P?.content||"",$=o.countTokens(C+V),I=[];E&&I.push(E),P&&I.push(P),_.push({messages:I,tokens:$});}for(let v=_.length-1;v>=0;v--){let E=_[v];if(m+E.tokens>d){w=true;break}m+=E.tokens,f.unshift(...E.messages);}let k=[],y=0;if(w&&l>0)try{let{boxes:v}=t.listBoxes(r);for(let E=v.length-1;E>=0;E--){let P=v[E],C=P.summaryTokens??P.sourceTokens;if(y+C>l)break;y+=C,k.unshift({boxId:P.id,seq:P.seq,taskCount:P.taskCount,sourceTokens:P.sourceTokens,summary:P.summary,previewFirst:P.previewFirst,previewMid:P.previewMid,previewLast:P.previewLast,createdAt:P.createdAt});}}catch(v){if(v instanceof Error&&!/not found/i.test(v.message))throw v}return {hot:f,warm:k,hotTokens:m,warmTokens:y,hotOverflow:w,totalBudget:c,config:{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}}}Fe();tt();p();var Qr=class extends Error{constructor(t,n){super(`Task ${t} timed out after ${n}ms`);this.taskId=t;this.timeoutMs=n;this.name="ParallelRunnerTimeoutError";}taskId;timeoutMs},mr=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 n=this.mergeOptions(t),o=Math.max(1,n.maxConcurrency??5),s=n.timeoutMs,i=n.failFast??false,a=n.callbacks,d=n.evaluateTaskSuccess??(()=>true),l=[],c=0,g=0,f=0,m=false,w=0,_=perf_hooks.performance.now(),k=async I=>{a?.onTaskStart&&await a.onTaskStart(I),f+=1;let N=new AbortController,le={signal:N.signal},Y,D;typeof s=="number"&&Number.isFinite(s)&&s>0&&(D=new Promise((B,F)=>{Y=setTimeout(()=>{let Q=new Qr(I.id,s);N.abort(Q),F(Q);},s);}));let Z=perf_hooks.performance.now(),U=I.run(le),ne=D?Promise.race([U,D]):U;try{let B=await ne,F=perf_hooks.performance.now(),Q=F-Z,J=d(B,I),q={taskId:I.id,success:J,value:B,durationMs:Q,startedAt:Z,finishedAt:F,metadata:I.metadata,aborted:!1};l.push(q),J?c+=1:g+=1,a?.onTaskComplete&&await a.onTaskComplete(q),i&&!J&&(m=!0);}catch(B){let F=perf_hooks.performance.now(),Q=F-Z,J=B instanceof Error?B:new Error(String(B)),q={taskId:I.id,success:false,error:J,durationMs:Q,startedAt:Z,finishedAt:F,metadata:I.metadata,aborted:N.signal.aborted};l.push(q),g+=1,a?.onError&&await a.onError(I,J,Q),i&&(m=true);}finally{Y&&clearTimeout(Y),D&&U.catch(()=>{});}},y=async()=>{for(;!m;){let I=w;if(I>=e.length)break;w+=1;let N=e[I];if(!N||(await k(N),m))break}},v=Math.min(o,e.length),E=[];for(let I=0;I<v;I++)E.push(y());await Promise.all(E);let C=perf_hooks.performance.now()-_,V=l.length?l.reduce((I,N)=>I+N.durationMs,0)/l.length:0,$=C>0?l.length/(C/1e3):l.length;return this.metrics={totalTasks:e.length,startedTasks:f,completedTasks:l.length,successCount:c,failureCount:g,totalDurationMs:C,averageDurationMs:V,throughput:$},l}getMetrics(){return this.metrics}mergeOptions(e){return {maxConcurrency:e.maxConcurrency??this.defaults.maxConcurrency,timeoutMs:e.timeoutMs??this.defaults.timeoutMs,failFast:e.failFast??this.defaults.failFast,evaluateTaskSuccess:e.evaluateTaskSuccess??this.defaults.evaluateTaskSuccess,callbacks:this.mergeCallbacks(this.defaults.callbacks,e.callbacks)}}mergeCallbacks(e,t){if(!(!e&&!t))return {onTaskStart:async n=>{e?.onTaskStart&&await e.onTaskStart(n),t?.onTaskStart&&await t.onTaskStart(n);},onTaskComplete:async n=>{e?.onTaskComplete&&await e.onTaskComplete(n),t?.onTaskComplete&&await t.onTaskComplete(n);},onError:async(n,o,s)=>{e?.onError&&await e.onError(n,o,s),t?.onError&&await t.onError(n,o,s);}}}};p();p();var hr=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 Ei=3,Ai=3e4,Ri=500,$u=r=>{if(typeof r!="number"||Number.isNaN(r)||!Number.isFinite(r))return Ei;let e=Math.floor(r);return e>0?e:Ei},Uu=r=>r===void 0||typeof r!="number"||Number.isNaN(r)||r<=0?Ai:r,ju=r=>{if(!r)return {maxRetries:0,retryDelay:Ri};let e=Number.isInteger(r.maxRetries)&&r.maxRetries>=0?r.maxRetries:0,t=typeof r.retryDelay=="number"&&r.retryDelay>=0?r.retryDelay:Ri;return {maxRetries:e,retryDelay:t}},Ro=r=>{let e=r.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},Wu=(r,e)=>r<=0?Promise.resolve():new Promise((t,n)=>{let o=setTimeout(()=>{e.removeEventListener("abort",s),t();},r),s=()=>{clearTimeout(o),n(Ro(e));};if(e.aborted){s();return}e.addEventListener("abort",s,{once:true});}),Fu=async(r,e,t)=>{let n,o;for(let s=0;s<=e.maxRetries;s++){if(t.aborted)throw Ro(t);try{let i=await r();if(n=i,i.success||s===e.maxRetries)return i}catch(i){if(o=i,t.aborted)throw Ro(t);if(s===e.maxRetries)throw i instanceof Error?i:new Error(String(i))}s<e.maxRetries&&await Wu(e.retryDelay,t);}if(n)return n;throw o?o instanceof Error?o:new Error(String(o)):new Error("Parallel helper encountered an unexpected state")},Ti=(r,e,t)=>{e.completed+=1,t?e.success+=1:e.failure+=1;try{r.onProgress?.(e.completed,e.total);}catch(n){process.env.NODE_ENV!=="production"&&console.warn("Parallel helper onProgress callback threw an error:",n);}},Hu=r=>r.map(t=>({metadata:t.metadata,taskResult:t})).slice().sort((t,n)=>t.metadata.index-n.metadata.index).map(({metadata:t,taskResult:n})=>{if(n.value){let s=n.value;return {...s,agentId:s.agentId??t.request.agentId,metadata:{...s.metadata,requestIndex:t.index,mode:t.mode}}}let o=n.error??new Error("Unknown error");return {agentId:t.request.agentId,content:o.message,success:false,metadata:{error:o.message,aborted:n.aborted??false,requestIndex:t.index,mode:t.mode}}}),Bu=r=>r.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 n=String(e.value.metadata?.error??e.value.content??"Agent returned unsuccessful result");return {index:t.index,error:new Error(n)}}return {index:t.index,error:new Error("Unknown failure")}}),qu=(r,e)=>({onTaskComplete:async t=>{Ti(e,r,t.success);},onError:async()=>{Ti(e,r,false);}}),Ci=async(r,e,t={})=>{if(!Array.isArray(r))throw new TypeError("Parallel helpers expect an array of requests");if(r.length===0){let k={total:0,completed:0,successCount:0,failureCount:0,results:[],errors:[],metrics:{totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0}};return t.onComplete?.(k),[]}let n=$u(t.concurrency),o=Uu(t.timeout),s=ju(t.retryPolicy),i=new mr,a=new hr,d=r.map((_,k)=>({id:`${e}:${_.agentId??"anonymous"}:${k}`,metadata:{index:k,mode:e,request:_},run:y=>Fu(()=>e==="query"?a.query(_):a.execute(_),s,y.signal)})),l={completed:0,success:0,failure:0,total:r.length},c=await i.run(d,{maxConcurrency:n,timeoutMs:o,evaluateTaskSuccess:_=>_.success,callbacks:qu(l,t)}),g=Hu(c),f=Bu(c),m=i.getMetrics(),w={total:r.length,completed:r.length,successCount:g.filter(_=>_.success).length,failureCount:g.filter(_=>!_.success).length,results:g,errors:f,metrics:m};return t.onComplete?.(w),g},zu=(r,e)=>Ci(r,"query",e),Ku=(r,e)=>Ci(r,"execute",e);oo();p();var To=class extends Pt{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=K.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=K.dirname(t);bs.existsSync(o)||bs.mkdirSync(o,{recursive:true});}else if(!bs.existsSync(t))throw new b("NOT_FOUND","Database not found");let n=_e(t);if(e)try{Dr(n.db,t);}catch(o){throw n.close(),o}return n}insertSpan(e){let t=this.openHandle(true);try{t.db.insert(pt).values(e).run();}catch(n){throw n instanceof b?n:new b("DB_ERROR","Failed to insert span",n)}finally{t.close();}}findByTaskId(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.select().from(pt).where(drizzleOrm.eq(pt.task_id,e)).all()}catch(n){throw new b("DB_ERROR","Failed to find spans by task id",n)}finally{t.close();}}findById(e){if(!this.dbExists())return;let t=this.openHandle(false);try{return t.db.select().from(pt).where(drizzleOrm.eq(pt.id,e)).limit(1).get()??void 0}catch(n){throw new b("DB_ERROR","Failed to find span by id",n)}finally{t.close();}}};no();ro();to();p();p();var Zr=class{capabilities={required:[]}};p();p();p();var Si=2e3;function Ii(r){let e=r.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=Si?e:e.slice(0,Si-11)+" [redacted]"}var np=10*1024*1024,op={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function Co(r,e){return r===void 0?true:Array.isArray(r)?r.includes(e):r===e}function sp(r,e){return r===void 0?true:Array.isArray(r)?r.some(t=>e.includes(t)):e.includes(r)}function Mi(r){if(typeof r=="number")return r;let e=r.match(/^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/i);if(!e)return 0;let t=parseFloat(e[1]),n=(e[2]??"b").toLowerCase();return Math.floor(t*(op[n]??1))}function Ni(r){return typeof r=="string"}function Di(r){try{let e=bs.statSync(r);return e.size>np?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${r} (${e.size} bytes)
323
323
  `),null):bs.readFileSync(r,"utf8").split(`
324
- `).length}catch{return null}}function Li(r){try{return bs.statSync(r).size}catch{return null}}function ip(r,e,t){if(!r)return true;let n=e,o=n?.path??n?.file_path??n?.filePath??n?.filename;if(typeof o!="string")return false;if(ve(o,r))return true;if(t&&o.startsWith("/")){let{relative:s,isAbsolute:i}=oe("path");if(i(o)){let a=s(t,o);if(a&&!a.startsWith("..")&&ve(a,r))return true}}return false}function ap(r,e){return r?JSON.stringify(e).includes(r):true}function dp(r,e){if(!r)return true;try{let t=new RegExp(r),n=JSON.stringify(e);return t.test(n)}catch{return false}}function lp(r,e){if(!r)return true;try{let t=new RegExp(r),n=JSON.stringify(e);return t.test(n)}catch{return false}}function cp(r,e){if(r.pathSizeMin===void 0&&r.pathSizeMax===void 0)return true;let t=e,n=t?.path??t?.file_path??t?.filePath??t?.filename;if(typeof n!="string")return false;if(r.pathSizeMin!==void 0)if(Ni(r.pathSizeMin)){let o=Li(n);if(o===null||o<Mi(r.pathSizeMin))return false}else {let o=Di(n);if(o===null||o<r.pathSizeMin)return false}if(r.pathSizeMax!==void 0)if(Ni(r.pathSizeMax)){let o=Li(n);if(o===null||o>Mi(r.pathSizeMax))return false}else {let o=Di(n);if(o===null||o>r.pathSizeMax)return false}return true}function up(r){let e=[],t=[];for(let n=0;n<r.length;n++){let o=r[n];if(!o||typeof o!="object"){t.push(`Hook at index ${n}: not an object, skipping`);continue}let s=o;if(typeof s.name!="string"||!s.name){t.push(`Hook at index ${n}: missing or invalid "name", skipping`);continue}let i=s.guide&&typeof s.guide=="object",a=s.deny&&typeof s.deny=="object",d=typeof s.plugin=="string";if(!i&&!a&&!d){t.push(`Hook "${s.name}": missing guide/deny/plugin, skipping`);continue}if(i&&typeof s.guide.say!="string"){t.push(`Hook "${s.name}": guide.say is required and must be string, skipping`);continue}if(a&&typeof s.deny.reason!="string"){t.push(`Hook "${s.name}": deny.reason is required and must be string, skipping`);continue}e.push(s);}return {valid:e,warnings:t}}var Po=class extends Zr{name="@crewx/yaml-hook-plugin";version="0.1.0";capabilities={required:["inject"]};hooks;agentMap;constructor(e){super(),this.hooks=e.hooks,this.agentMap=new Map((e.agents??[]).map(t=>[t.id,t]));}async run(e){let t=[],n=process.env.CREWX_TASK_LOG_PATH,o=process.env.CREWX_HOOK_LOG_VERBOSE==="1";for(let s of this.hooks)if(this.matchEntryLevel(s,e)&&s.guide){if(!this.matchRuleLevel(s.guide,e)){o&&n&&this.appendHookLog(n,{rule:s.name,action:"pass",once:s.guide.once??false,ctx:e,matched:false});continue}s.guide.once&&this.hasFired(e.sessionId,s.name)||(s.guide.once&&this.markFired(e.sessionId,s.name),t.push(s.guide.say),n&&this.appendHookLog(n,{rule:s.name,action:"inject",once:s.guide.once??false,ctx:e,matched:true,message:s.guide.say}));}return t.length?e.inject(t.join(`
324
+ `).length}catch{return null}}function Li(r){try{return bs.statSync(r).size}catch{return null}}function ip(r,e,t){if(!r)return true;let n=e,o=n?.path??n?.file_path??n?.filePath??n?.filename;if(typeof o!="string")return false;if(xe(o,r))return true;if(t&&o.startsWith("/")){let{relative:s,isAbsolute:i}=oe("path");if(i(o)){let a=s(t,o);if(a&&!a.startsWith("..")&&xe(a,r))return true}}return false}function ap(r,e){return r?JSON.stringify(e).includes(r):true}function dp(r,e){if(!r)return true;try{let t=new RegExp(r),n=JSON.stringify(e);return t.test(n)}catch{return false}}function lp(r,e){if(!r)return true;try{let t=new RegExp(r),n=JSON.stringify(e);return t.test(n)}catch{return false}}function cp(r,e){if(r.pathSizeMin===void 0&&r.pathSizeMax===void 0)return true;let t=e,n=t?.path??t?.file_path??t?.filePath??t?.filename;if(typeof n!="string")return false;if(r.pathSizeMin!==void 0)if(Ni(r.pathSizeMin)){let o=Li(n);if(o===null||o<Mi(r.pathSizeMin))return false}else {let o=Di(n);if(o===null||o<r.pathSizeMin)return false}if(r.pathSizeMax!==void 0)if(Ni(r.pathSizeMax)){let o=Li(n);if(o===null||o>Mi(r.pathSizeMax))return false}else {let o=Di(n);if(o===null||o>r.pathSizeMax)return false}return true}function up(r){let e=[],t=[];for(let n=0;n<r.length;n++){let o=r[n];if(!o||typeof o!="object"){t.push(`Hook at index ${n}: not an object, skipping`);continue}let s=o;if(typeof s.name!="string"||!s.name){t.push(`Hook at index ${n}: missing or invalid "name", skipping`);continue}let i=s.guide&&typeof s.guide=="object",a=s.deny&&typeof s.deny=="object",d=typeof s.plugin=="string";if(!i&&!a&&!d){t.push(`Hook "${s.name}": missing guide/deny/plugin, skipping`);continue}if(i&&typeof s.guide.say!="string"){t.push(`Hook "${s.name}": guide.say is required and must be string, skipping`);continue}if(a&&typeof s.deny.reason!="string"){t.push(`Hook "${s.name}": deny.reason is required and must be string, skipping`);continue}e.push(s);}return {valid:e,warnings:t}}var bo=class extends Zr{name="@crewx/yaml-hook-plugin";version="0.1.0";capabilities={required:["inject"]};hooks;agentMap;constructor(e){super(),this.hooks=e.hooks,this.agentMap=new Map((e.agents??[]).map(t=>[t.id,t]));}async run(e){let t=[],n=process.env.CREWX_TASK_LOG_PATH,o=process.env.CREWX_HOOK_LOG_VERBOSE==="1";for(let s of this.hooks)if(this.matchEntryLevel(s,e)&&s.guide){if(!this.matchRuleLevel(s.guide,e)){o&&n&&this.appendHookLog(n,{rule:s.name,action:"pass",once:s.guide.once??false,ctx:e,matched:false});continue}s.guide.once&&this.hasFired(e.sessionId,s.name)||(s.guide.once&&this.markFired(e.sessionId,s.name),t.push(s.guide.say),n&&this.appendHookLog(n,{rule:s.name,action:"inject",once:s.guide.once??false,ctx:e,matched:true,message:s.guide.say}));}return t.length?e.inject(t.join(`
325
325
 
326
326
  `)):e.pass()}appendHookLog(e,t){try{let n={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&&(n.chars=t.message.length,process.env.CREWX_HOOK_LOG_VERBOSE==="1"&&(n.message=Ii(t.message).slice(0,500)));let o=`[${new Date().toISOString()}] HOOK: ${JSON.stringify(n)}
327
- `;bs.appendFileSync(e,o,{encoding:"utf8",mode:384});}catch{}}matchEntryLevel(e,t){if(e.provider!==void 0){let n=t.provider.replace(/^cli\//,"");if(!To(e.provider,n))return false}if(e.team!==void 0){let o=this.agentMap.get(t.agent.id)?.team??t.agent.team;if(!To(e.team,o))return false}if(e.role!==void 0){let o=this.agentMap.get(t.agent.id)?.role??t.agent.role;if(!To(e.role,o))return false}if(e.tag!==void 0){let o=this.agentMap.get(t.agent.id)?.tags??[];if(!sp(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)||!ap(e.pattern,t.tool.input)||!dp(e.regex,t.tool.input)||!ip(e.pathPattern,t.tool.input,t.cwd)||!cp(e,t.tool.input)||!lp(e.whenInputRegex,t.tool.input))}hasFired(e,t){try{let n=this.firedFilePath(e);if(!bs.existsSync(n))return !1;let o=JSON.parse(bs.readFileSync(n,"utf8"));return Array.isArray(o.fired)&&o.fired.includes(t)}catch{return false}}markFired(e,t){try{let n=this.firedFilePath(e);bs.mkdirSync(K.dirname(n),{recursive:!0,mode:448});let o=bs.existsSync(n)?JSON.parse(bs.readFileSync(n,"utf8")):{fired:[]};Array.isArray(o.fired)||(o.fired=[]),o.fired.includes(t)||(o.fired.push(t),bs.writeFileSync(n,JSON.stringify(o),{mode:384}));}catch(n){process.stderr.write(`[YamlHookPlugin] once state write failed: ${n}
328
- `);}}firedFilePath(e){let t=crypto$1.createHash("sha1").update(e).digest("hex");return K.join(yo.homedir(),".crewx","sessions",t,"fired-rules.json")}};u();u();u();function pp(r){let e=r.messages.map(t=>({id:t.id,role:t.isAssistant?"assistant":"user",content:t.text,timestamp:new Date(t.timestamp).toISOString(),metadata:t.metadata??null}));return {getThreadMessages(t){return e}}}u();var bo=class extends Error{code;kind;retryAfterMs;constructor(e,t,n){super(`AdapterError: ${e}`),this.name="AdapterError",this.code=e,this.kind=t,this.retryAfterMs=n;}};u();function fp(r){return r}function gp(r){return {name:r.name,async attach(e){let t=await r.configFactory(e),o=e.registerChannelAdapter,s=r.instanceId??r.name;o&&await o({adapter:r.adapter,instanceId:s,config:t}),r.onAttach&&await r.onAttach(e);},async detach(e){let n=e.unregisterChannelAdapter;n&&await n(r.instanceId??r.name),r.onDetach&&await r.onDetach(e);}}}vt();exports.ARCHIVE_WI_BOARD_ID=It;exports.AdapterError=bo;exports.AgentNotFoundError=be;exports.AgentRuntime=hr;exports.AgentSkillsSchema=Io;exports.BrowserFsAdapter=co;exports.ConfigLoadError=Xe;exports.Crewx=io;exports.CrewxPlugin=lo;exports.DEFAULT_WI_BOARD_ID=St;exports.DEFAULT_WI_WORKFLOW_ID=ei;exports.DocumentLoader=at;exports.LayoutLoadError=ae;exports.LayoutLoader=Jt;exports.LayoutRenderer=Qt;exports.NodeFsAdapter=Mr;exports.PROVIDER_ORDER=fo;exports.ParallelRunner=mr;exports.ParallelRunnerTimeoutError=Qr;exports.PropsValidationError=Me;exports.PropsValidator=Yt;exports.SdkBoxService=Eo;exports.SpanRepository=Ro;exports.TaskRepository=rr;exports.TemplateEngine=Vt;exports.TypedEventEmitter=Zt;exports.WI_BOARD_ID_PATTERN=Vr;exports.WI_DEFAULT_FLOW_FILENAME=ic;exports.WI_PLAN_FLOW_FILENAME=ac;exports.WI_PLAN_WORKFLOW_ID=sc;exports.WiBoardSchema=zi;exports.WiCreateError=ee;exports.YamlHookPlugin=Po;exports.buildContext=Lu;exports.canonicalizeAgentOptions=Kc;exports.classifyTaskError=Cu;exports.clearModelsOverride=ga;exports.compareProviders=ur;exports.createAdapterContext=Mn;exports.createDelegateTool=hu;exports.createGlobalSettingsStore=qc;exports.createHandler=Bn;exports.createPluginProviderFactory=Js;exports.createProvider=Oe;exports.createRemoteProviderFactory=zs;exports.createScopedAdapterStore=In;exports.createWorkInstruction=Sc;exports.createWorkInstructionBatch=Ic;exports.defaultExtractText=Un;exports.defaultFsAdapter=it;exports.defaultParseEvent=we;exports.defineChannelAdapter=fp;exports.defineChannelAdapterPlugin=gp;exports.escapeHandlebarsHelper=Tn;exports.formatFileSizeHelper=Cn;exports.formatTimestamp=Sn;exports.formatTimestampHelper=Pn;exports.generateFingerprint=ud;exports.generateId=lt;exports.getAntigravityModels=pn;exports.getClaudeModels=Wt;exports.getCodexModels=cn;exports.getCopilotModels=un;exports.getCrewxHome=_u;exports.getProviderModels=st;exports.getSyncWindowStore=gd;exports.hashWorkspaceId=qn;exports.initModelsRemote=eu;exports.initPricingRemote=Jc;exports.isReservedWiBoardId=ti;exports.lengthHelper=Rn;exports.loadYamlFile=_r;exports.materializeWindowsSpawnProgram=et;exports.mergeAdditionalArgs=es;exports.mergeModels=Ht;exports.normalizeProviderId=ou;exports.normalizeWorkspacePath=Ds;exports.parseOverdriveProfile=br;exports.parseOverdriveSignal=Sr;exports.parseStdoutEvent=Bt;exports.parseUsage=Se;exports.parseYamlContent=wr;exports.providerRank=go;exports.queryAcpProviderMeta=hi;exports.queryAllAcpProviderMetas=cu;exports.queryAllCliProviderMetas=gu;exports.queryOpencodeModels=yi;exports.redactTechnicalMessage=wo;exports.registerAcpProviders=Bs;exports.registerApiProviders=Us;exports.registerProviderFactory=Ie;exports.resolveAgent=vr;exports.resolveAgentSkills=tu;exports.resolveCrewxCli=yu;exports.resolveCrewxWorkspace=wu;exports.resolveDefaultAgentsYaml=nn;exports.resolveOverdrive=Ir;exports.resolveTemplatesPath=wt;exports.resolveWiBoards=dc;exports.resolveWindowsExecutablePath=na;exports.resolveWindowsSpawnProgram=Ze;exports.resolveWorkflowTemplatesPath=Qi;exports.runExecutesParallel=Ku;exports.runInSyncWindow=md;exports.runQueriesParallel=zu;exports.selectNextWi=Mc;exports.setAuditVerbose=Xa;exports.setModelsOverride=ln;exports.toTaskReader=pp;exports.toTemplateMessages=$n;exports.truncateHelper=An;exports.validateHooksSchema=up;
327
+ `;bs.appendFileSync(e,o,{encoding:"utf8",mode:384});}catch{}}matchEntryLevel(e,t){if(e.provider!==void 0){let n=t.provider.replace(/^cli\//,"");if(!Co(e.provider,n))return false}if(e.team!==void 0){let o=this.agentMap.get(t.agent.id)?.team??t.agent.team;if(!Co(e.team,o))return false}if(e.role!==void 0){let o=this.agentMap.get(t.agent.id)?.role??t.agent.role;if(!Co(e.role,o))return false}if(e.tag!==void 0){let o=this.agentMap.get(t.agent.id)?.tags??[];if(!sp(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)||!ap(e.pattern,t.tool.input)||!dp(e.regex,t.tool.input)||!ip(e.pathPattern,t.tool.input,t.cwd)||!cp(e,t.tool.input)||!lp(e.whenInputRegex,t.tool.input))}hasFired(e,t){try{let n=this.firedFilePath(e);if(!bs.existsSync(n))return !1;let o=JSON.parse(bs.readFileSync(n,"utf8"));return Array.isArray(o.fired)&&o.fired.includes(t)}catch{return false}}markFired(e,t){try{let n=this.firedFilePath(e);bs.mkdirSync(K.dirname(n),{recursive:!0,mode:448});let o=bs.existsSync(n)?JSON.parse(bs.readFileSync(n,"utf8")):{fired:[]};Array.isArray(o.fired)||(o.fired=[]),o.fired.includes(t)||(o.fired.push(t),bs.writeFileSync(n,JSON.stringify(o),{mode:384}));}catch(n){process.stderr.write(`[YamlHookPlugin] once state write failed: ${n}
328
+ `);}}firedFilePath(e){let t=crypto$1.createHash("sha1").update(e).digest("hex");return K.join(wo.homedir(),".crewx","sessions",t,"fired-rules.json")}};p();p();p();function pp(r){let e=r.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 So=class extends Error{code;kind;retryAfterMs;constructor(e,t,n){super(`AdapterError: ${e}`),this.name="AdapterError",this.code=e,this.kind=t,this.retryAfterMs=n;}};p();function fp(r){return r}function gp(r){return {name:r.name,async attach(e){let t=await r.configFactory(e),o=e.registerChannelAdapter,s=r.instanceId??r.name;o&&await o({adapter:r.adapter,instanceId:s,config:t}),r.onAttach&&await r.onAttach(e);},async detach(e){let n=e.unregisterChannelAdapter;n&&await n(r.instanceId??r.name),r.onDetach&&await r.onDetach(e);}}}xt();exports.ARCHIVE_WI_BOARD_ID=It;exports.AdapterError=So;exports.AgentNotFoundError=be;exports.AgentRuntime=hr;exports.AgentSkillsSchema=Oo;exports.BrowserFsAdapter=uo;exports.ConfigLoadError=Xe;exports.Crewx=ao;exports.CrewxPlugin=co;exports.DEFAULT_WI_BOARD_ID=St;exports.DEFAULT_WI_WORKFLOW_ID=ei;exports.DocumentLoader=at;exports.LayoutLoadError=ae;exports.LayoutLoader=Jt;exports.LayoutRenderer=Qt;exports.NodeFsAdapter=Mr;exports.PROVIDER_ORDER=go;exports.ParallelRunner=mr;exports.ParallelRunnerTimeoutError=Qr;exports.PropsValidationError=Me;exports.PropsValidator=Yt;exports.SdkBoxService=Ao;exports.SpanRepository=To;exports.TaskRepository=rr;exports.TemplateEngine=Vt;exports.TypedEventEmitter=Zt;exports.WI_BOARD_ID_PATTERN=Vr;exports.WI_DEFAULT_FLOW_FILENAME=ic;exports.WI_PLAN_FLOW_FILENAME=ac;exports.WI_PLAN_WORKFLOW_ID=sc;exports.WiBoardSchema=zi;exports.WiCreateError=ee;exports.YamlHookPlugin=bo;exports.buildContext=Lu;exports.canonicalizeAgentOptions=Kc;exports.classifyTaskError=Cu;exports.clearModelsOverride=ga;exports.compareProviders=ur;exports.createAdapterContext=Mn;exports.createDelegateTool=hu;exports.createGlobalSettingsStore=qc;exports.createHandler=qn;exports.createPluginProviderFactory=Js;exports.createProvider=Oe;exports.createRemoteProviderFactory=zs;exports.createScopedAdapterStore=In;exports.createWorkInstruction=Sc;exports.createWorkInstructionBatch=Ic;exports.defaultExtractText=Un;exports.defaultFsAdapter=it;exports.defaultParseEvent=we;exports.defineChannelAdapter=fp;exports.defineChannelAdapterPlugin=gp;exports.escapeHandlebarsHelper=Tn;exports.formatFileSizeHelper=Cn;exports.formatTimestamp=Sn;exports.formatTimestampHelper=Pn;exports.generateFingerprint=ud;exports.generateId=lt;exports.getAntigravityModels=pn;exports.getClaudeModels=Ft;exports.getCodexModels=cn;exports.getCopilotModels=un;exports.getCrewxHome=_u;exports.getProviderModels=st;exports.getSyncWindowStore=gd;exports.hashWorkspaceId=zn;exports.initModelsRemote=eu;exports.initPricingRemote=Jc;exports.isReservedWiBoardId=ti;exports.lengthHelper=Rn;exports.loadYamlFile=_r;exports.materializeWindowsSpawnProgram=et;exports.mergeAdditionalArgs=ts;exports.mergeModels=Ht;exports.normalizeProviderId=ou;exports.normalizeWorkspacePath=Ds;exports.parseOverdriveProfile=br;exports.parseOverdriveSignal=Sr;exports.parseStdoutEvent=Bt;exports.parseUsage=Se;exports.parseYamlContent=wr;exports.providerRank=mo;exports.queryAcpProviderMeta=hi;exports.queryAllAcpProviderMetas=cu;exports.queryAllCliProviderMetas=gu;exports.queryOpencodeModels=yi;exports.redactTechnicalMessage=_o;exports.registerAcpProviders=Bs;exports.registerApiProviders=Us;exports.registerProviderFactory=Ie;exports.resolveAgent=vr;exports.resolveAgentSkills=tu;exports.resolveCrewxCli=yu;exports.resolveCrewxWorkspace=wu;exports.resolveDefaultAgentsYaml=nn;exports.resolveOverdrive=Ir;exports.resolveTemplatesPath=vt;exports.resolveWiBoards=dc;exports.resolveWindowsExecutablePath=na;exports.resolveWindowsSpawnProgram=Ze;exports.resolveWorkflowTemplatesPath=Qi;exports.runExecutesParallel=Ku;exports.runInSyncWindow=md;exports.runQueriesParallel=zu;exports.selectNextWi=Mc;exports.setAuditVerbose=Xa;exports.setModelsOverride=ln;exports.toTaskReader=pp;exports.toTemplateMessages=$n;exports.truncateHelper=An;exports.validateHooksSchema=up;