@crewx/sdk 0.9.0-rc.53 → 0.9.0-rc.55
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/config/canonicalize-agent-options.d.ts +1 -0
- package/dist/config/model-compat.d.ts +16 -0
- package/dist/config/models.generated.d.ts +8 -0
- package/dist/config/pricing.d.ts +6 -3
- package/dist/config/pricing.generated.d.ts +4 -0
- package/dist/config/pricing.types.d.ts +4 -0
- package/dist/esm/index.js +48 -48
- package/dist/esm/plugins/index.js +30 -30
- package/dist/esm/publish/index.js +1 -1
- package/dist/esm/repository/index.js +5 -5
- package/dist/esm/testing/index.js +1 -1
- package/dist/index.browser.d.ts +2 -0
- package/dist/index.browser.js +4 -4
- package/dist/index.d.ts +5 -3
- package/dist/index.js +50 -50
- package/dist/plugins/index.js +38 -38
- package/dist/provider/acp/meta.d.ts +5 -0
- package/dist/provider/cli/adapter.types.d.ts +2 -0
- package/dist/provider/cli/meta.d.ts +3 -0
- package/dist/provider/models.d.ts +8 -3
- package/dist/publish/index.js +1 -1
- package/dist/repository/index.js +12 -12
- package/dist/testing/index.js +1 -1
- package/dist/utils/timestamp.d.ts +1 -0
- package/package.json +1 -1
- package/templates/agents/default.yaml +2 -2
package/dist/index.js
CHANGED
|
@@ -1,64 +1,64 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var Vs=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'),Re=require('handlebars'),promises=require('fs/promises'),crypto$1=require('crypto'),events=require('events'),async_hooks=require('async_hooks'),drizzleOrm=require('drizzle-orm'),So=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 Vs__namespace=/*#__PURE__*/_interopNamespace(Vs);var K__namespace=/*#__PURE__*/_interopNamespace(K);var Re__namespace=/*#__PURE__*/_interopNamespace(Re);var So__namespace=/*#__PURE__*/_interopNamespace(So);var cn=Object.defineProperty;var ia=Object.getOwnPropertyDescriptor;var aa=Object.getOwnPropertyNames;var da=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 I=(r,e)=>()=>(r&&(e=r(r=0)),e);var Ar=(r,e)=>{for(var t in e)cn(r,t,{get:e[t],enumerable:true});},la=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of aa(e))!da.call(r,o)&&o!==t&&cn(r,o,{get:()=>e[o],enumerable:!(n=ia(e,o))||n.enumerable});return r};var Ho=r=>la(cn({},"__esModule",{value:true}),r);var p=I(()=>{});function Cr(r){return typeof r!="string"?void 0:r.trim()||void 0}function Pr(r){return Cr(r)?.toLowerCase()??""}function At(r){try{return Vs.statSync(r).isFile()}catch{return false}}function Ea(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 Aa(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 Ea(n,e)}function Ft(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(g=>g.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",f=t==="win32"?l?[""]:c.split(";").map(g=>g.trim()).filter(Boolean).map(g=>g.startsWith(".")?g:`.${g}`):[""];for(let g of d){let m=K__namespace.default.resolve(o,g);if(!(s&&Aa(m,o)))for(let w of f){let _=Pr(w),v=w.toUpperCase();for(let h of [w,_,v]){let k=K__namespace.default.join(m,`${r}${h}`);if(At(k))return k}}}return r}function Ta(r,e){return Ft(r,{env:e,platform:"win32",resolution:"local_first"})}function Ra(r){if(!At(r))return null;try{let e=Vs.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 f=c.replace(/[\\/]+/g,K__namespace.default.sep).replace(/^[\\/]+/,""),g=K__namespace.default.resolve(t,f);At(g)&&n.push(g);}let o=[],s=new Map;for(let a of e.matchAll(/SET\s+"(\w+)=%~?dp0%?[\\/]?([^"]+)"/gi)){let d=a[1].toUpperCase(),l=a[2].trim().replace(/[\\/]+/g,K__namespace.default.sep).replace(/^[\\/]+/,"");s.set(d,K__namespace.default.resolve(t,l));}for(let a of e.split(/\r?\n/))if(a.includes("%*"))for(let d of a.matchAll(/"%(\w+)%"/g)){let l=s.get(d[1].toUpperCase());l&&At(l)&&o.push(l);}let i=a=>a.find(d=>{let l=Pr(K__namespace.default.basename(d));return l!=="node.exe"&&l!=="node"})??null;return i(o)??i(n)}catch{return null}}function ba(r,e){if(typeof e=="string")return Cr(e)||null;if(!e||typeof e!="object")return null;if(r){let t=e[r],n=typeof t=="string"?Cr(t):void 0;if(n)return n}for(let t of Object.values(e)){let n=typeof t=="string"?Cr(t):void 0;if(n)return n}return null}function Ca(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(At(s))try{let i=JSON.parse(Vs.readFileSync(s,"utf8")),a=ba(e,i.bin);if(!a)continue;let d=K__namespace.default.resolve(o,a);if(At(d))return d}catch{}}return null}function Pa(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:Ft(r.command,{cwd:o,env:t,platform:e,resolution:s}),leadingArgv:[],resolution:"direct"};let i=Ft(r.command,{cwd:o,env:t,platform:e,resolution:s}),a=Pr(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=Ra(i)??Ca(i,r.packageName);return d?Pr(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 Sa(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=Pa(r);return Sa({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 Tt=I(()=>{p();});function Ia(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 Oa(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 Ma(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 Vo(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),f=Number(l.cache_read_input_tokens??0);e.set(d,{inputTokens:c+f,cachedInputTokens:f});let g=a?.model;typeof g=="string"&&g&&(t=g);}catch{}if(e.size===0)return;let 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=ha(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=ma(o)??ya(o);i&&(e=i);}catch{}return t||(e??void 0)}var tt=M(()=>{p();});exports.ProviderError=void 0;var rt,nt,Ut=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();Ut();exports.RateLimitError=class extends exports.ProviderError{name="RateLimitError";constructor(e,t="cli/claude"){super(e,t,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function fe(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 ye(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 Ar(r){if(!r)return {};let e=r.match(/^(.+?)\[([^\]]+)\]$/);if(e){let t=e[2].toLowerCase();return wa.has(t)?{model:e[1],effort:e[2]}:{model:r}}return {model:r}}function Wo(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 Fo(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 Bo(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 Ho(r){return r?new Set(["low","medium","high","xhigh","max"]).has(r)?["--effort",r]:[]:[]}var wa,sn=M(()=>{p();wa=new Set(["minimal","low","medium","high","xhigh","max"]);});var an,qo,zo=M(()=>{p();an={claude:{models:[{id:"claude-fable-5",name:"Claude Fable 5",contextWindowTokens:1e6},{id:"claude-opus-5",name:"Claude Opus 5",contextWindowTokens:1e6},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6},{id:"claude-opus-4-8[1m]",name:"Claude Opus 4.8 (Extended)",contextWindowTokens:1e6},{id:"claude-opus-4-8",name:"Claude Opus 4.8",contextWindowTokens:1e6},{id:"claude-opus-4-7[1m]",name:"Claude Opus 4.7 (Extended)",contextWindowTokens:1e6},{id:"claude-opus-4-7",name:"Claude Opus 4.7",contextWindowTokens:1e6},{id:"claude-opus-4-6[1m]",name:"Claude Opus 4.6 (Extended)",contextWindowTokens:1e6},{id:"claude-opus-4-6",name:"Claude Opus 4.6",contextWindowTokens:1e6},{id:"claude-sonnet-4-6[1m]",name:"Claude Sonnet 4.6 (Extended)",contextWindowTokens:1e6},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindowTokens:1e6},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5",contextWindowTokens:2e5}],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",contextWindowTokens:105e4},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra",contextWindowTokens:105e4},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna",contextWindowTokens:105e4},{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:{}}},qo={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 Go(){return {models:[],modes:[],effort:[],modelOverrides:{}}}function _a(r){return Array.isArray(r)?{models:r,modes:[],effort:[],modelOverrides:{}}:r?{models:r.models??[],modes:r.modes??[],effort:r.effort??[],modelOverrides:r.modelOverrides??{}}:Go()}function ln(r){dn=Object.fromEntries(Object.entries(r).map(([e,t])=>[e,_a(t)]));}function ka(){dn={};}function Wt(r){Ko={...r};}function st(r){return Rt(r).models}function Rt(r){return dn[r]??an[r]??Go()}function Vo(r){return Ko[r]??qo.providers[r]}function Ft(r){return Rt(r).modes}function jt(r,e){let t=Rt(r);return e?t.modelOverrides[e]?.effort??t.effort:t.effort}function Jo(r){return Rt(r).modelOverrides}function Bt(){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);if(!o){t.set(n.id,{...n});continue}!o.name&&n.name&&(o.name=n.name),o.description==null&&n.description!=null&&(o.description=n.description),o.contextWindowTokens==null&&n.contextWindowTokens!=null&&(o.contextWindowTokens=n.contextWindowTokens);}return Array.from(t.values())}var dn,Ko,Ee=M(()=>{p();zo();dn={},Ko={};});function xa(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=Ma(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=Ia(o)??Oa(o);i&&(e=i);}catch{}return t||(e??void 0)}var tt=I(()=>{p();});exports.ProviderError=void 0;var rt,nt,jt=I(()=>{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 pn=I(()=>{p();jt();exports.RateLimitError=class extends exports.ProviderError{name="RateLimitError";constructor(e,t="cli/claude"){super(e,t,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function fe(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 Rt=I(()=>{p();});function ye(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 bt=I(()=>{p();});var Jo,gn,Xo,fn=I(()=>{p();Jo=["flagship","balanced","speed"],gn={claude:{models:[{id:"claude-fable-5",name:"Claude Fable 5",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-opus-5",name:"Claude Opus 5",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced",recommended:true},{id:"claude-opus-4-8[1m]",name:"Claude Opus 4.8",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-7[1m]",name:"Claude Opus 4.7",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-6[1m]",name:"Claude Opus 4.6",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-sonnet-4-6[1m]",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5",contextWindowTokens:2e5,tier:"speed"}],modes:[{id:"default",name:"Default",description:"Uses Claude's default permission handling with normal approval prompts."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without approval; other permission checks remain in place."},{id:"plan",name:"Plan",description:"Keeps Claude in plan mode so it can inspect and propose changes without applying them."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permissions; only pre-approved tool actions can proceed."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Claude permission checks so tools can run without approval prompts."}],effort:["low","medium","high"],modelOverrides:{"claude-fable-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-sonnet-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-8[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-7[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-haiku-4-5":{effort:[]}}},codex:{models:[{id:"gpt-5.6-sol",name:"GPT-5.6 Sol",contextWindowTokens:105e4,tier:"flagship",recommended:true},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra",contextWindowTokens:105e4,tier:"balanced",recommended:true},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna",contextWindowTokens:105e4,tier:"speed",recommended:true},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini",contextWindowTokens:4e5,tier:"speed"},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex",contextWindowTokens:4e5,tier:"flagship"},{id:"gpt-5.3-codex-spark",name:"GPT-5.3 Codex Spark",contextWindowTokens:128e3,tier:"speed"}],modes:[{id:"agent",name:"Agent",description:"Uses the workspace-write sandbox; can read and modify workspace files without full machine access."},{id:"read-only",name:"Read Only",description:"Uses the read-only sandbox; can inspect files but cannot write to the workspace."},{id:"plan",name:"Plan",description:"Uses the read-only sandbox for planning and inspection; cannot write to the workspace."},{id:"agent-full-access",name:"Agent Full Access",description:"Bypasses approvals and the sandbox; can access and modify files beyond the workspace."},{id:"yolo",name:"YOLO",description:"Bypasses approvals and the sandbox for unrestricted execution and full filesystem access."}],effort:["minimal","low","medium","high"],modelOverrides:{"gpt-5.6-sol":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"xhigh"},"gpt-5.6-terra":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.6-luna":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.5":{effort:["minimal","low","medium","high","xhigh"],defaultEffort:"high"}}},opencode:{models:[],modes:[{id:"plan",name:"Plan",description:"Uses the plan agent without --auto; planning follows standard approval behavior."},{id:"plan-auto",name:"Plan \xB7 Auto",description:"Uses the plan agent with --auto; planning uses automatic approvals."},{id:"build",name:"Build",description:"Uses the build agent without --auto; work follows standard approval behavior."},{id:"build-auto",name:"Build \xB7 Auto",description:"Uses the build agent with --auto; work uses automatic approvals."}],effort:[],modelOverrides:{}},copilot:{models:[{id:"auto",name:"Auto"},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro",contextWindowTokens:1048576,tier:"flagship"}],modes:[{id:"interactive",name:"Interactive",description:"Passes --mode interactive; tool access follows Copilot's interactive mode behavior."},{id:"plan",name:"Plan",description:"Passes --mode plan; planning and permission behavior follow Copilot's plan mode."},{id:"autopilot",name:"Autopilot",description:"Passes --mode autopilot; execution behavior follows Copilot's autonomous mode."}],effort:["none","low","medium","high","xhigh","max"],modelOverrides:{}},antigravity:{models:[{id:"gemini-3.6-flash-high",name:"Gemini 3.6 Flash (High)",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.6-flash-medium",name:"Gemini 3.6 Flash (Medium)",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.6-flash-low",name:"Gemini 3.6 Flash (Low)",contextWindowTokens:1048576,tier:"balanced"},{id:"Gemini 3.5 Flash (Medium)",name:"Gemini 3.5 Flash (Medium)",contextWindowTokens:1048576,tier:"balanced"},{id:"Gemini 3.5 Flash (High)",name:"Gemini 3.5 Flash (High)",contextWindowTokens:1048576,tier:"balanced"},{id:"Gemini 3.5 Flash (Low)",name:"Gemini 3.5 Flash (Low)",contextWindowTokens:1048576,tier:"balanced"},{id:"Gemini 3.1 Pro (Low)",name:"Gemini 3.1 Pro (Low)",contextWindowTokens:1048576,tier:"flagship"},{id:"Gemini 3.1 Pro (High)",name:"Gemini 3.1 Pro (High)",contextWindowTokens:1048576,tier:"flagship"},{id:"Claude Sonnet 4.6 (Thinking)",name:"Claude Sonnet 4.6 (Thinking)",contextWindowTokens:1e6,tier:"balanced"},{id:"Claude Opus 4.6 (Thinking)",name:"Claude Opus 4.6 (Thinking)",contextWindowTokens:1e6,tier:"flagship"},{id:"GPT-OSS 120B (Medium)",name:"GPT-OSS 120B (Medium)",contextWindowTokens:128e3,tier:"balanced"}],modes:[],effort:[],modelOverrides:{}}},Xo={version:1,providers:{"cli/codex":{model:"gpt-5.6-sol",query:{mode:"agent",effort:"high"},execute:{mode:"agent-full-access",effort:"xhigh"}},"cli/claude":{model:"claude-opus-5",query:{mode:"default",effort:"high"},execute:{mode:"bypassPermissions",effort:"xhigh"}}}},Object.fromEntries(Object.entries(gn).map(([r,e])=>[r,e.models]));});var st,mn,Yo,yn=I(()=>{p();st={"claude-fable-5":{input:10,cachedInput:1,output:50},"claude-opus-5":{input:5,cachedInput:.5,output:25},"claude-opus-4-8":{input:5,cachedInput:.5,output:25},"claude-opus-4-7":{input:5,cachedInput:.5,output:25},"claude-opus-4-6":{input:5,cachedInput:.5,output:25},"claude-sonnet-5":{input:2,cachedInput:.2,output:10},"claude-sonnet-4-6":{input:3,cachedInput:.3,output:15},"claude-haiku-4-5":{input:1,cachedInput:.1,output:5},"gpt-5.6-sol":{input:5,cachedInput:.5,output:30},"gpt-5.6-terra":{input:2,cachedInput:.2,output:12},"gpt-5.6-luna":{input:.2,cachedInput:.02,output:1.2},"gpt-5.5":{input:5,cachedInput:.5,output:30},"gpt-5.4":{input:2.5,cachedInput:.25,output:15},"gpt-5.4-mini":{input:.75,cachedInput:.075,output:4.5},"gpt-5.3-codex":{input:1.75,cachedInput:.175,output:14},"gpt-5-mini":{input:.4,cachedInput:.1,output:1.6},"gpt-4.1":{input:2,cachedInput:.5,output:8},"gpt-4o":{input:2.5,cachedInput:1.25,output:10},"glm-5.2":{input:1.4,cachedInput:.26,output:4.4},"glm-5.1":{input:1.4,cachedInput:.26,output:4.4},"gemini-3.6-flash":{input:1.5,cachedInput:.15,output:7.5}},mn=new Set(["gpt-5.3-codex-spark"]),Yo=new Set(["gpt-5.6-sol","gpt-5.6-terra","gpt-5.6-luna","gpt-5.5","gpt-5.4","gpt-5.4-mini","gpt-5.3-codex","gpt-5.3-codex-spark"]);});function Zo(r){Ht=r;}function es(r){Qo=Object.fromEntries(Object.entries(r).map(([e,t])=>[e,{...t}]));}function hn(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 Na(r){if(!r)return;let e="inputPerMillionTokensUsd"in r?r.inputPerMillionTokensUsd:r.input,t="outputPerMillionTokensUsd"in r?r.outputPerMillionTokensUsd:r.output;if(!(!Number.isFinite(e)||e<=0||!Number.isFinite(t)||t<=0))return {inputPerMillionTokensUsd:e,outputPerMillionTokensUsd:t}}function ts(r){if(!r)return;let e=r.replace(/\[[^\]]*\]$/g,"");return Na(Qo[e]??st[e])}function La(r){if(!r)return Bt;let e=hn(r),t=Da[e];if(t)return Ht[t]??st[t]??Bt;if(Ht[e])return Ht[e];if(st[e])return st[e];if(mn.has(e))return console.warn(`[pricing] unpublished model pricing: ${r}, cost_usd=0`),Bt;if(Yo.has(e))return console.warn(`[pricing] missing catalog pricing: ${r}, cost_usd=0`),Bt;let n={...st,...Ht};for(let o of Object.keys(n))if(e.includes(o))return n[o];return console.warn(`[pricing] Unknown model: ${r}, cost_usd=0`),Bt}function $a(r,e,t,n=0,o){let s=La(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:$a(e??0,t??0,o,n??0)}var Da,Bt,Ht,Qo,Ct=I(()=>{p();yn();yn();Da={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"},Bt={input:0,cachedInput:0,output:0},Ht={},Qo={};});function qt(r){return Fa.get(r)??r}exports.CLAUDE_OPUS_4_8_BASE_MODEL_ID=void 0;exports.CLAUDE_OPUS_4_8_LEGACY_MODEL_ID=void 0;exports.CLAUDE_MODEL_COMPATIBILITY_PAIRS=void 0;var Fa,Sr=I(()=>{p();exports.CLAUDE_OPUS_4_8_BASE_MODEL_ID="claude-opus-4-8",exports.CLAUDE_OPUS_4_8_LEGACY_MODEL_ID="claude-opus-4-8[1m]",exports.CLAUDE_MODEL_COMPATIBILITY_PAIRS=[{baseModelId:"claude-opus-4-8",catalogModelId:"claude-opus-4-8[1m]"},{baseModelId:"claude-opus-4-7",catalogModelId:"claude-opus-4-7[1m]"},{baseModelId:"claude-opus-4-6",catalogModelId:"claude-opus-4-6[1m]"},{baseModelId:"claude-sonnet-4-6",catalogModelId:"claude-sonnet-4-6[1m]"}],Fa=new Map(exports.CLAUDE_MODEL_COMPATIBILITY_PAIRS.map(({baseModelId:r,catalogModelId:e})=>[r,e]));});function ss(){return {models:[],modes:[],effort:[],modelOverrides:{}}}function ja(r){return Array.isArray(r)?{models:r,modes:[],effort:[],modelOverrides:{}}:r?{models:r.models??[],modes:r.modes??[],effort:r.effort??[],modelOverrides:r.modelOverrides??{}}:ss()}function _n(r){wn=Object.fromEntries(Object.entries(r).map(([e,t])=>[e,ja(t)]));}function Ba(){wn={};}function zt(r){os={...r};}function it(r){return at(r).models}function at(r){return wn[r]??gn[r]??ss()}function is(r){return os[r]??Xo.providers[r]}function Kt(r){return at(r).modes}function Gt(r,e){let t=at(r);return e?t.modelOverrides[qt(e)]?.effort??t.effort:t.effort}function as(r){return at(r).modelOverrides}function Vt(){return it("claude")}function kn(){return it("codex")}function vn(){return it("copilot")}function xn(){return it("antigravity")}function Jt(r,e){let t=new Map;for(let n of [...r,...e]){let o=t.get(n.id);if(!o){let{apiPricing:s,recommended:i,...a}=n;t.set(n.id,{...a,...i===true?{recommended:true}:{},...s!=null?{apiPricing:{...s}}:{}});continue}!o.name&&n.name&&(o.name=n.name),o.description==null&&n.description!=null&&(o.description=n.description),o.contextWindowTokens==null&&n.contextWindowTokens!=null&&(o.contextWindowTokens=n.contextWindowTokens),o.tier==null&&n.tier!=null&&(o.tier=n.tier),o.recommended!==true&&n.recommended===true&&(o.recommended=true),o.apiPricing==null&&n.apiPricing!=null&&(o.apiPricing={...n.apiPricing});}return Array.from(t.values())}function Xt(r){return r.map(e=>{let{apiPricing:t,...n}=e,o=ts(e.id);return o?{...n,apiPricing:o}:n})}var wn,os,Ee=I(()=>{p();fn();Ct();Sr();wn={},os={};});function dt(r){return Ha[r]??r}function En(r){if(!r)return "";let e=r.lastIndexOf("/");return e===-1?r.trim():r.slice(e+1).trim()}function ds(r){if(!r)return false;let e=at(r);return e.models.length>0||e.modes.length>0||e.effort.length>0||Object.keys(e.modelOverrides).length>0}function ls(r,e){if(!r)return false;let t=at(r),n=typeof e=="string"?qt(e):void 0;return t.models.length>0||t.effort.length>0||n!=null&&Array.isArray(t.modelOverrides[n]?.effort)}function An(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function qa(r,e,t){let n=r,o=false,s=false,i=[],a=()=>(o||(n={...r},o=true),n),d=typeof n.provider=="string"&&n.provider.trim()?En(n.provider):e,l=typeof n.model=="string"&&n.model.trim()?n.model.trim():t;if(ds(d)){if(typeof n.mode=="string"){let f=d==="claude"?dt(n.mode):n.mode,g=Kt(d).map(m=>d==="claude"?dt(m.id):m.id);f!==n.mode&&(a().mode=f,s=true),g.includes(f)||(delete a().mode,i.push("mode"));}typeof n.effort=="string"&&ls(d,l)&&(Gt(d,l).includes(n.effort)||(delete a().effort,i.push("effort")));}let c=n.overdrive;if(An(c)){let f=En(typeof c.provider=="string"?c.provider:void 0),g=typeof c.model=="string"?c.model:void 0;if(ds(f)){let m,w=()=>(m||(m={...c},a().overdrive=m),m);if(typeof c.mode=="string"){let _=f==="claude"?dt(c.mode):c.mode,v=Kt(f).map(h=>f==="claude"?dt(h.id):h.id);_!==c.mode&&(w().mode=_,s=true),v.includes(_)||(delete w().mode,i.push("overdrive.mode"));}typeof c.effort=="string"&&ls(f,g)&&(Gt(f,g).includes(c.effort)||(delete w().effort,i.push("overdrive.effort")));}}return {block:n,removed:i,changed:s}}function za(r){let{options:e}=r;if(!An(e))return {options:e,changed:false,removed:[]};let t=En(r.provider),n=[],o=false,s=e,i=false,a=()=>(i||(s={...e},i=true),s);for(let d of ["query","execute"]){let l=e[d];if(!An(l))continue;let{block:c,removed:f,changed:g}=qa(l,t,r.model);(g||f.length>0)&&(a()[d]=c,n.push(...f.map(m=>`${d}.${m}`)),o=true);}return {options:s,changed:o,removed:n}}var Ha,Tn=I(()=>{p();Ee();Sr();Ha={auto:"default"};});function Ir(r){if(!r)return {};let e=r.match(/^(.+?)\[([^\]]+)\]$/);if(e){let t=e[2].toLowerCase();return Ka.has(t)?{model:e[1],effort:e[2]}:{model:r}}return {model:r}}function cs(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 us(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 ps(r){return r?["-c",`model_reasoning_effort=${r}`]:[]}function gs(r){if(!r)return [];let e=new Set(["acceptEdits","bypassPermissions","default","delegate","dontAsk","plan"]),t=dt(r);return e.has(t)?["--permission-mode",t]:[]}function fs(r){return r?new Set(["low","medium","high","xhigh","max"]).has(r)?["--effort",r]:[]:[]}var Ka,Rn=I(()=>{p();Tn();Ka=new Set(["minimal","low","medium","high","xhigh","max"]);});function Va(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
|
-
`):""}function
|
|
6
|
-
`):i=JSON.stringify(s),{timestamp:r,type:"tool_result",toolUseId:o,resultPreview:i,isError:n}}return null}var
|
|
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=
|
|
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=
|
|
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=ye(d);return (a==="bash"||a==="Bash")&&fe(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
|
|
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=
|
|
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
|
|
5
|
+
`):""}function Ja(r){let e=r.toLowerCase();return e.includes("out of extra usage")||e.includes("rate limit")||e.includes("quota")}function Xa(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=ye(s);return n==="Bash"&&fe(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 Ga;exports.claudeAdapter=void 0;var bn=I(()=>{p();pn();Rt();bt();Rn();Ee();tt();Ga=new Set(["tool_progress"]),exports.claudeAdapter={command:"claude",meta:{displayName:"Claude",models:Vt(),capabilities:{resume:true}},buildArgs(r,e,t){let{model:n,effort:o}=Ir(e.model),s=e.effort??o,i=gs(e.mode),a=fs(s),d=n?["--model",n]:[],l=e.resumeSessionId?["--resume",e.resumeSessionId]:[];if(e.additionalArgs!==void 0){let f=[...e.additionalArgs];return f.indexOf("-p")!==-1?{args:["--output-format","stream-json","--verbose",...l,...i,...a,...d,...f],stdinMessage:r}:{args:["--output-format","stream-json","--verbose",...l,...i,...a,...d,...f],stdinMessage:r}}return {args:["-p","--output-format","stream-json","--verbose",...l,...i,...a,...d],stdinMessage:r}},extractText(r){let e=r.split(`
|
|
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=Va(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(Ja(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=Vo(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=Xa(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?Ga.has(n):!1}catch{return false}}};});var Ya,Qa;exports.copilotAdapter=void 0;var Cn=I(()=>{p();tt();Rt();bt();Ee();Ya=new Set(["interactive","plan","autopilot"]),Qa=new Set(["none","low","medium","high","xhigh","max"]),exports.copilotAdapter={command:"copilot",meta:{displayName:"Copilot",models:vn()},buildArgs(r,e,t){let n=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&n.push("--model",e.model),e.mode&&Ya.has(e.mode)&&n.push("--mode",e.mode),e.effort&&Qa.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=ye(d);return (a==="bash"||a==="Bash")&&fe(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 ed(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 td(r){return r[0]==="exec"?r.slice(1):r}function rd(r,e){let t=e.type;if(t==="command_execution"){let n=String(e.command||"");return fe(n)?[me(r,n)]:[{timestamp:r,type:"tool_use",toolName:"Bash",toolInput:n}]}return t==="web_search"?[]:t==="file_change"?[]:[]}function nd(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=od(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=ye(o);return n==="Bash"&&fe(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 od(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=ye(o);return n==="Bash"&&fe(s)?me(r,s):{timestamp:r,type:"tool_use",toolName:n,toolInput:s}}return null}var Za;exports.codexAdapter=void 0;var Pn=I(()=>{p();tt();Rt();bt();Rn();Ee();Za=new Set(["turn.started","turn.completed","item.updated"]);exports.codexAdapter={command:"codex",meta:{displayName:"Codex",models:kn(),capabilities:{resume:true}},buildArgs(r,e,t){let{model:n,effort:o}=Ir(e.model),s=e.effort??o,i=e.resumeSessionId?us(e.mode):cs(e.mode),a=ps(s),d=n?["-m",n]:[],l=td(e.additionalArgs??[]),f=l.includes("--json")||l.includes("--experimental-json")?[]:["--json"];return e.resumeSessionId?{args:["exec","resume",...f,...i,...a,...d,...l,e.resumeSessionId,"-"],stdinMessage:r}:{args:["exec",...f,...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=ed(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(...rd(t,d));continue}if(a==="item.completed"){let l=nd(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?Za.has(n):!1}catch{return false}}};});function ad(r){return r?id[r]??{agent:"build",autoApprove:false}:{agent:void 0,autoApprove:false}}function Nr(r,e){return r.some(t=>t===e||t.startsWith(`${e}=`))}function dd(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 sd,id;exports.opencodeAdapter=void 0;var Sn=I(()=>{p();tt();bt();sd=new Set(["step_start","step_finish"]),id={build:{agent:"build",autoApprove:false},"build-auto":{agent:"build",autoApprove:true},plan:{agent:"plan",autoApprove:false},"plan-auto":{agent:"plan",autoApprove:true}};exports.opencodeAdapter={command:"opencode",meta:{displayName:"OpenCode",capabilities:{resume:true}},buildArgs(r,e,t){let n=e.additionalArgs,o=n!==void 0?[...n]:["run"];Nr(o,"--format")||o.push("--format","json"),e.resumeSessionId&&!o.includes("-s")&&!o.includes("--session")&&o.push("-s",e.resumeSessionId);let{agent:s,autoApprove:i}=ad(e.mode);Nr(o,"--agent")||s!==void 0&&o.push("--agent",s),i&&!Nr(o,"--auto")&&o.push("--auto"),e.effort!==void 0&&!Nr(o,"--variant")&&o.push("--variant",e.effort),e.model&&o.push("--model",e.model);let a;return !t&&!i&&!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=dd(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||""),f=d.state,g=String(f?.status||""),m=f?.input,w=ye(m);if(n.push({timestamp:t,type:"tool_use",toolName:l,toolUseId:c,toolInput:w}),g==="completed"&&f?.output!==void 0){let _=f.output,v=typeof _=="string"?_:JSON.stringify(_);n.push({timestamp:t,type:"tool_result",toolUseId:c,resultPreview:v,isError:false});}else g==="error"&&n.push({timestamp:t,type:"tool_result",toolUseId:c,resultPreview:String(f?.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?sd.has(n):!1}catch{return false}}};});var In,On=I(()=>{p();jt();Ee();In={command:"agy",meta:{displayName:"Antigravity",models:xn(),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 ms,ys=I(()=>{p();Rt();bt();ms={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=ye(a);return /^bash$/i.test(s)&&fe(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 Yt(r,e,t){if(t){let n=exports.BUILTIN_ADAPTERS[t];if(n?.parseEvent)return n.parseEvent(e,r);let o=ld[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 ld,je=I(()=>{p();bn();Cn();Pn();Sn();On();ys();bn();Cn();Pn();Sn();On();Rt();exports.BUILTIN_ADAPTERS={codex:exports.codexAdapter,claude:exports.claudeAdapter,opencode:exports.opencodeAdapter,antigravity:In,copilot:exports.copilotAdapter},ld={gemini:ms};});var Pt,Mn=I(()=>{p();Pt=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 hs(r,e){if(r===void 0||r==="")return e;let t=parseInt(r,10);return Number.isNaN(t)?e:t}function Dn(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 ws(r=process.env){return {queryMs:hs(r.CREWX_TIMEOUT_QUERY,288e5),executeMs:hs(r.CREWX_TIMEOUT_EXECUTE,288e5),idleMs:Dn(r)??6e5}}var $r=I(()=>{p();});function ud(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
|
|
19
|
-
`);Y=H.pop()??"";for(let j of H)if(j.trim()&&(o?.onOutput?.(j,"stdout"),i?.extractFailure)){let Q=i.extractFailure(j);if(Q){v=true,clearTimeout(C),V?.stop(),
|
|
20
|
-
`);
|
|
18
|
+
`):i.length>0?i.join(""):a||r.trim()}function pd(r){let e=Se(r);return e?{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0}:null}function gd(r,e,t=process.platform){return r==="copilot"&&t==="win32"&&e instanceof exports.ProviderError&&e.message.includes('CLI command "copilot" not found')}function ks(r,e,t,n,o,s,i){return new Promise((a,d)=>{let l=o?.timeoutMs??288e5,c=o?.idleMs??6e5,f={...process.env,...o?.env??{}},g=o?.cwd??process.cwd(),m=Ze({command:r,env:f,cwd:g,allowShellFallback:true}),w=et(m,e),_=child_process.spawn(w.command,w.argv,{env:f,cwd:o?.cwd,stdio:["pipe","pipe","pipe"],shell:w.shell??false,windowsHide:w.windowsHide,detached:process.platform!=="win32"});_.stdin.on("error",U=>{U.code!=="EPIPE"&&o?.onOutput?.(`stdin error: ${U.message}`,"stderr");}),s!==void 0&&_.stdin.write(s),_.stdin.end(),_.pid!==void 0&&o?.onPid?.(_.pid);let v=false,h=false,k=U=>{if(_.pid!==void 0)try{process.platform==="win32"?_.kill(U):process.kill(-_.pid,U);}catch{}},E=()=>{k("SIGKILL");},C=setTimeout(()=>{v||(h=true,V?.stop(),k("SIGTERM"),setTimeout(E,Qt).unref());},l);C.unref();let V=c>0?new Pt({timeoutMs:c,onIdle:()=>{if(v)return;v=true,clearTimeout(C),k("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"),O=new string_decoder.StringDecoder("utf8"),D="",le="",Y="",N="",Z=U=>{U instanceof Error&&(U.stdout=D),d(U);};_.stdout.on("data",U=>{V?.refresh();let ne=$.write(U);D+=ne,Y+=ne;let H=Y.split(`
|
|
19
|
+
`);Y=H.pop()??"";for(let j of H)if(j.trim()&&(o?.onOutput?.(j,"stdout"),i?.extractFailure)){let Q=i.extractFailure(j);if(Q){v=true,clearTimeout(C),V?.stop(),k("SIGTERM"),setTimeout(E,Qt).unref(),Z(Q);return}}}),_.stderr.on("data",U=>{V?.refresh();let ne=O.write(U);le+=ne,N+=ne;let H=N.split(`
|
|
20
|
+
`);N=H.pop()??"";for(let j of H)j.trim()&&o?.onOutput?.(j,"stderr");}),_.on("error",U=>{v=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(v)return;v=true,clearTimeout(C),V?.stop();let H=$.end(),j=O.end();H&&(D+=H,Y+=H),j&&(le+=j,N+=j),Y.trim()&&o?.onOutput?.(Y,"stdout"),N.trim()&&o?.onOutput?.(N,"stderr");let Q=U??0;if(o?.onExitCode?.(Q),h)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(D):ud(D);}catch(q){Z(q instanceof Error?q:new exports.ProviderError(String(q),t));return}a({stdout:D,parsed:J});});})}function Ie(r,e){vs.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=vs.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 Nn(o,i,r,e)}throw new exports.ProviderError(`Unsupported provider namespace: "${n}". Register a factory with registerProviderFactory('${n}', factory).`,r)}function xs(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 vs,Nn,Te=I(()=>{p();Tt();tt();je();jt();Mn();$r();jt();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"},vs=new Map;Nn=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 xs(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
|
|
25
|
-
`);this.stderrBuffer=E.pop()??"";for(let
|
|
24
|
+
${e}`:e}async runProcess(e,t,n){try{return await ks(this.adapter.command,e,this.providerStr,this.providerId,t,n,this.adapter)}catch(o){if(gd(this.providerId,o)){let s=e[0]==="copilot"?e:["copilot",...e];try{return await ks("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=pd(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 Xn(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"&&Zd.has(t.type)){let n=e??new Date().toISOString();return [{...t,timestamp:t.timestamp||n}]}}catch{}return []}var Zd,Be=I(()=>{p();Zd=new Set(["text","tool_use","tool_result","error","running_instruction","agent_call"]);});var si,ii;exports.VercelProviderRuntime=void 0;var io=I(()=>{p();Te();si=10,ii=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??si,ii);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:g=>{if(l++,!!n?.onOutput){if(g.toolCalls&&g.toolCalls.length>0)for(let m of g.toolCalls)n.onOutput(JSON.stringify({type:"assistant",message:{content:[{type:"tool_use",id:m.toolCallId,name:m.toolName,input:m.args}]}}),"stdout");if(g.toolResults&&g.toolResults.length>0)for(let m of g.toolResults){let w=typeof m.result=="string"?m.result:JSON.stringify(m.result);n.onOutput(JSON.stringify({type:"user",message:{content:[{type:"tool_result",tool_use_id:m.toolCallId,output:w,is_error:!1}]}}),"stdout");}}}}),f=new Set((n?.tools??[]).filter(g=>!g.execute).map(g=>g.name));if(c.finishReason==="tool-calls"&&Array.isArray(c.toolCalls)&&c.toolCalls.length>0){let g=c.toolCalls.filter(m=>f.has(m.toolName));if(g.length>0){let m=g[0];throw new exports.ClientToolCallRequiredError({toolCallId:m.toolCallId,toolName:m.toolName,args:m.args},{userMessage:e,responseMessages:c.response?.messages??[],toolDefinitions:n?.tools??[],maxSteps:d,systemPrompt:n?.systemPrompt,modelOverride:n?.model})}}if(n?.onUsage&&c.usage){let g={inputTokens:c.usage.promptTokens??0,outputTokens:c.usage.completionTokens??0,cachedInputTokens:0,costUsd:0};n.onUsage(g);}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??si,ii),l=[{role:"user",content:e.userMessage},...e.responseMessages,{role:"tool",content:t.map(c=>({type:"tool-result",toolCallId:c.toolCallId,toolName:c.toolName,result:typeof c.result=="string"?c.result:JSON.stringify(c.result)}))}];try{let c=await o({model:a,system:e.systemPrompt??void 0,messages:l,tools:i,maxSteps:d,...this.config.temperature!==void 0&&{temperature:this.config.temperature},...this.config.maxTokens!==void 0&&{maxTokens:this.config.maxTokens}}),f=new Set(e.toolDefinitions.filter(g=>!g.execute).map(g=>g.name));if(c.finishReason==="tool-calls"&&Array.isArray(c.toolCalls)&&c.toolCalls.length>0){let g=c.toolCalls.filter(m=>f.has(m.toolName));if(g.length>0){let m=g[0];throw new exports.ClientToolCallRequiredError({toolCallId:m.toolCallId,toolName:m.toolName,args:m.args},{userMessage:e.userMessage,responseMessages:[...e.responseMessages,{role:"tool",content:t.map(w=>({type:"tool-result",toolCallId:w.toolCallId,toolName:w.toolName,result:typeof w.result=="string"?w.result:JSON.stringify(w.result)}))},...c.response?.messages??[]],toolDefinitions:e.toolDefinitions,maxSteps:e.maxSteps,systemPrompt:e.systemPrompt,modelOverride:e.modelOverride})}}return 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 di={};Ar(di,{registerApiProviders:()=>ai});function ai(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 ao=I(()=>{p();Te();io();});exports.AcpProtocolError=void 0;var lo=I(()=>{p();exports.AcpProtocolError=class extends Error{constructor(t,n,o){super(t);this.code=n;this.data=o;}code;data;name="AcpProtocolError"};});var mc,yc,li,ci,hc;exports.AcpConnection=void 0;var Xr=I(()=>{p();Tt();lo();Te();Mn();$r();mc=-32e3,yc=2e3,li=3e4,ci=1e4,hc=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 h=Ze({command:t.command,env:o,cwd:s,allowShellFallback:n});i=et(h,t.args);}catch(h){throw new exports.ProviderError(h instanceof Error?h.message:String(h),"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",h=>{let k=h.toString();this.collectedStderr+=k,this.stderrBuffer+=k;let E=this.stderrBuffer.split(`
|
|
25
|
+
`);this.stderrBuffer=E.pop()??"";for(let R of E)R.trim()&&this.options.onStderr?.(R);}),this.proc=a;let d=this.options.idleMs??6e5;d>0&&(this.idlePromise=new Promise((h,k)=>{this.idleReject=k;}),this.idlePromise.catch(()=>{}),this.idleWatchdog=new Pt({timeoutMs:d,onIdle:()=>{let h=Math.round(d/6e4),k=new rt(`acp produced no output for ${h}m (idle timeout). Process killed. The CLI may be waiting on interactive input or stuck \u2014 check the prompt or retry.`,"acp");this.idleReject?.(k),this.dispose();}}),this.idleWatchdog.start()),a.stdin.on("error",h=>{h.code!=="EPIPE"&&this.options.onStderr?.(`ACP stdin error: ${h.message}`);});let l=new WritableStream({write:h=>new Promise((k,E)=>{a.stdin.write(h,R=>{R?E(R):k();});}),close:()=>{a.stdin.end();}}),c=new ReadableStream({start:h=>{a.stdout.on("data",k=>{this.idleWatchdog?.refresh(),h.enqueue(new Uint8Array(k));}),a.stdout.on("end",()=>{h.close();}),a.stdout.on("error",k=>{h.error(k);});}}),f=sdk.ndJsonStream(l,c),g=this,m=new sdk.ClientSideConnection(h=>({requestPermission:async k=>{if(g.options.configOptions?.allow_all!==void 0){let E=k.options;if(Array.isArray(E)&&E.length>0)return {outcome:{outcome:"selected",optionId:(E.find(C=>C.kind==="allow_once")??E.find(C=>C.kind?.startsWith("allow_"))??E[0]).optionId}}}return {outcome:{outcome:"cancelled"}}},sessionUpdate:async k=>{g.pendingUpdateCallback?.(k);}}),f);this.sdkConnection=m;let w=new Promise((h,k)=>{a.on("error",E=>{if(E.code==="ENOENT"){let C=t.command==="npx"&&t.args.length>0?`@agentclientprotocol/${t.args[0]}`:t.command;k(new exports.ProviderError(`ACP command "${t.command}" not found. Is the ACP adapter installed? Try: npm install -g ${C}`,"acp"));}else k(new exports.ProviderError(`ACP spawn error: ${E.message}`,"acp"));});}),_=this.doInitialize(m,e),v=new Promise((h,k)=>{setTimeout(()=>{k(new exports.AcpProtocolError(`ACP connect timeout after ${li}ms. The ACP adapter may not be installed or may require interactive setup.`));},li).unref();});await Promise.race([_,v,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 ${ci}ms`));},ci).unref();});return Promise.race([t,n])}isAuthError(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code===mc}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??hc,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();}),f=new Promise((m,w)=>{let _=(E,R,C)=>{if(d)return;let V=R!=null?`signal=${R}`:`code=${String(E)}`;w(new exports.ProviderError(`ACP process terminated unexpectedly (${V}) [${C}]: ${this.collectedStderr.slice(-500)}`,"acp"));},v=(E,R)=>_(E,R,"exit"),h=(E,R)=>_(E,R,"close");i.once("exit",v),i.once("close",h);let k=()=>{i.off("exit",v),i.off("close",h);};l.then(k,k);}),g=[l,c,f];this.idlePromise&&g.push(this.idlePromise);try{return await Promise.race(g)}finally{this.pendingUpdateCallback=null;}}async dispose(){if(this.disposed)return;this.disposed=true,this.idleWatchdog?.stop(),this.pendingUpdateCallback=null,this.sdkConnection=null;let e=this.proc;if(!e)return;this.proc=null,this.stderrBuffer.trim()&&(this.options.onStderr?.(this.stderrBuffer),this.stderrBuffer="");let t=e.pid,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");},yc);});}get isConnected(){return !this.disposed&&this.sdkConnection!==null&&this.proc!==null}};});function ui(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 wc;exports.AcpProviderRuntime=void 0;var co=I(()=>{p();Be();Xr();wc={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),f=[],g=await a.prompt(l,c,m=>this.handleUpdate(m,t,f),t?.timeoutMs);return this.handleUsage(g,t),f.join("")}finally{await a.dispose().catch(()=>{});}}async applySessionOptions(e,t,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
|
-
`)}]}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=
|
|
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=Xn(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
|
-
`);}resolveToolCall(e){let t=e._meta;if(t?.claudeCode?.toolName)return {toolName:t.claudeCode.toolName,toolInput:
|
|
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 Qn=M(()=>{p();Be();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 Zn=M(()=>{p();Be();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 St;exports.copilotAcpAdapter=void 0;var eo=M(()=>{p();Be();St="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:`${St}#autopilot`,buildEffortAction(r){return r?{type:"set_config_option",configId:"reasoning_effort",value:r}:null},resolveMode(r){return r.startsWith("https://")?r:{yolo:`${St}#autopilot`,default:`${St}#agent`,agent:`${St}#agent`,plan:`${St}#plan`,autopilot:`${St}#autopilot`}[r]??null},parseEvent:we};});exports.opencodeAcpAdapter=void 0;var to=M(()=>{p();Be();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();Qn();Zn();eo();to();Qn();Zn();eo();to();exports.ACP_ADAPTERS={codex:exports.codexAcpAdapter,claude:exports.claudeAcpAdapter,opencode:exports.opencodeAcpAdapter,copilot:exports.copilotAcpAdapter};});var Xs={};wr(Xs,{registerAcpProviders:()=>Js});function Js(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 ro=M(()=>{p();Re();Yn();Gr();Re();});function Yl(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 no=M(()=>{p();exports.McpHttpTransport=class{endpoint;headers;timeoutMs;constructor(e){let t=Yl(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 oo=M(()=>{p();no();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 Qs={};wr(Qs,{RemoteProviderRuntime:()=>exports.RemoteProviderRuntime,createRemoteProviderFactory:()=>Ys,resolveFileRemoteAgent:()=>sc});function nc(r){let e=Is.readFileSync(r,"utf-8"),t=jsYaml.load(e);return {agents:Array.isArray(t?.agents)?t.agents:void 0}}function oc(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 sc(r,e=nc,t=Is.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=oc(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 Ys(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 ic(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 so=M(()=>{p();Re();oo();exports.RemoteProviderRuntime=class{manager;agentId;constructor(e,t,n=Oe){this.agentId=t.external_agent_id??e,this.manager=new exports.RemoteAgentManager;let o=ic(e,t);this.manager.loadConfig(this.agentId,o);}async query(e,t){return (await this.manager.query(this.agentId,{agentId:this.agentId,query:e,model:t?.model,context:t?.context??t?.systemPrompt})).content.map(o=>o.text).join(`
|
|
31
|
+
`);}resolveToolCall(e){let t=e._meta;if(t?.claudeCode?.toolName)return {toolName:t.claudeCode.toolName,toolInput:ui(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=wc[e.kind??""]??e.title??"unknown",o=ui(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 uo=I(()=>{p();Be();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 po=I(()=>{p();Be();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 Ot;exports.copilotAcpAdapter=void 0;var go=I(()=>{p();Be();Ot="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:`${Ot}#autopilot`,buildEffortAction(r){return r?{type:"set_config_option",configId:"reasoning_effort",value:r}:null},resolveMode(r){return r.startsWith("https://")?r:{yolo:`${Ot}#autopilot`,default:`${Ot}#agent`,agent:`${Ot}#agent`,plan:`${Ot}#plan`,autopilot:`${Ot}#autopilot`}[r]??null},parseEvent:we};});exports.opencodeAcpAdapter=void 0;var fo=I(()=>{p();Be();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:[]}},buildEffortAction(r){return null},resolveMode(r){return r},parseEvent:we};});exports.ACP_ADAPTERS=void 0;var tn=I(()=>{p();uo();po();go();fo();uo();po();go();fo();exports.ACP_ADAPTERS={codex:exports.codexAcpAdapter,claude:exports.claudeAcpAdapter,opencode:exports.opencodeAcpAdapter,copilot:exports.copilotAcpAdapter};});var gi={};Ar(gi,{registerAcpProviders:()=>pi});function pi(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 mo=I(()=>{p();Te();co();tn();Te();});function kc(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 yo=I(()=>{p();exports.McpHttpTransport=class{endpoint;headers;timeoutMs;constructor(e){let t=kc(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 ho=I(()=>{p();yo();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 mi={};Ar(mi,{RemoteProviderRuntime:()=>exports.RemoteProviderRuntime,createRemoteProviderFactory:()=>fi,resolveFileRemoteAgent:()=>Cc});function Rc(r){let e=Vs.readFileSync(r,"utf-8"),t=jsYaml.load(e);return {agents:Array.isArray(t?.agents)?t.agents:void 0}}function bc(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 Cc(r,e=Rc,t=Vs.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=bc(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 fi(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 Pc(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 wo=I(()=>{p();Te();ho();exports.RemoteProviderRuntime=class{manager;agentId;constructor(e,t,n=Oe){this.agentId=t.external_agent_id??e,this.manager=new exports.RemoteAgentManager;let o=Pc(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
|
|
35
|
-
`);m=
|
|
36
|
-
`);w=
|
|
34
|
+
`)}};});var _i={};Ar(_i,{PluginProviderRuntime:()=>exports.PluginProviderRuntime,createPluginProviderFactory:()=>wi});function wi(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 yi(r,e,t,n){let o=r.map(s=>s.replace(/\{model\}/g,e));return n&&o.push(t),o}function Ic(r){if(!r||typeof r!="string")throw new Error("Plugin provider requires a cli_command")}function hi(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 Oc(r){for(let{pattern:e}of r)if(typeof e!="string")throw new Error("Error pattern must be a string")}function Mc(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 _o=I(()=>{p();Te();Tt();exports.PluginProviderRuntime=class{constructor(e,t){this.config=t;this.providerStr=`plugin/${e}`,Ic(t.cli_command),hi(t.query_args),hi(t.execute_args),t.error_patterns&&Oc(t.error_patterns),t.env&&Mc(t.env);}config;providerStr;async query(e,t){let n=t?.model??this.config.default_model??"default",o=yi(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=yi(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 f="",g="",m="",w="";c.stdout.on("data",v=>{let h=v.toString();f+=h,m+=h;let k=m.split(`
|
|
35
|
+
`);m=k.pop()??"";for(let E of k)E.trim()&&t?.onOutput?.(E,"stdout");}),c.stderr.on("data",v=>{let h=v.toString();g+=h,w+=h;let k=w.split(`
|
|
36
|
+
`);w=k.pop()??"";for(let E of k)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",v=>{if(clearTimeout(_),v.code==="ENOENT"){let h=this.config.not_installed_message??`CLI command "${this.config.cli_command}" not found. Is ${this.config.id} installed?`;i(new exports.ProviderError(h,this.providerStr));}else i(new exports.ProviderError(`Spawn error: ${v.message}`,this.providerStr));}),c.on("close",v=>{clearTimeout(_),m.trim()&&t?.onOutput?.(m,"stdout"),w.trim()&&t?.onOutput?.(w,"stderr");let h=v??0;if(t?.onExitCode?.(h),this.config.error_patterns){let k=g||f;for(let E of this.config.error_patterns)if(k.includes(E.pattern)){i(new exports.ProviderError(E.message,this.providerStr));return}}if(v!==0){i(new exports.ProviderError(`Process exited with code ${v}: ${g.slice(0,500)}`,this.providerStr));return}s(f.trim());});})}};});p();p();p();function ca(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 ca(e).test(r)}catch{return false}}p();p();var ua=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()),qo=zod.z.object({include:zod.z.array(zod.z.string()).optional()}).optional(),pa=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:ua.optional(),skills:qo}).catchall(zod.z.unknown()),ga=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()}),fa=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()),zo=zod.z.object({agents:zod.z.array(pa).optional(),hooks:zod.z.array(zod.z.unknown()).optional(),settings:fa.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 Tr(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=ha(e),n=zo.safeParse(t);if(!n.success)throw new Xe(`Config validation error: ${n.error.message}`);return n.data}function Rr(r){let e;try{e=Vs.readFileSync(r,"utf-8");}catch(t){throw new Xe(`Cannot read file: ${r}`,t)}return Tr(e)}function ha(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 Ko(){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 Et(r){if(r&&Vs.existsSync(r))return r;let e=process.env.CREWX_SDK_TEMPLATES_PATH;if(e&&Vs.existsSync(e))return e;let t=Ko();if(t){let o=K.join(t,Ye);if(Vs.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(Vs.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
|
|
41
|
+
Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function un(){let r=Et();return {yamlPath:K.join(r,"default.yaml"),dir:r}}function ka(r){if(r&&Vs.existsSync(r))return r;let e=process.env.CREWX_SDK_WORKFLOW_TEMPLATES_PATH;if(e&&Vs.existsSync(e))return e;let t=Ko();if(t){let o=K.join(t,Qe);if(Vs.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(Vs.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.`)}p();var Pe=class extends Error{constructor(e,t){let n=t.length>0?` Available: ${t.join(", ")}`:"";super(`Agent not found: "${e}".${n}`),this.name="AgentNotFoundError";}},
|
|
46
|
+
Set CREWX_SDK_WORKFLOW_TEMPLATES_PATH or pass options.templatesPath.`)}p();var Pe=class extends Error{constructor(e,t){let n=t.length>0?` Available: ${t.join(", ")}`:"";super(`Agent not found: "${e}".${n}`),this.name="AgentNotFoundError";}},va={claude:{id:"claude",provider:"cli/claude"},copilot:{id:"copilot",provider:"cli/copilot"},codex:{id:"codex",provider:"cli/codex"}};function br(r,e){let t=r.startsWith("@")?r.slice(1):r,n=e.find(s=>s.id===t);if(n)return n;let o=va[t];if(o)return o;throw new Pe(r,e.map(s=>s.id))}Te();$r();Ct();p();function Ur(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 Wr(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 Fr(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=Ur(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 jr(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 md=[/^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],yd=/[;|&`$(){}!><\n\r]/,hd=2,wd=["*","**","*:*","* *","**/*"];function _d(){let r={};for(let[e,t]of Object.entries(process.env))t!==void 0&&(md.some(n=>n.test(e))||(r[e]=t));return r}function kd(r){if(yd.test(r))throw new Error(`exec blocked: shell metacharacter detected in "${r}"`)}function vd(r){return /^npx\s+@crewx\/[\w-]+/.test(r)}function xd(r){if(wd.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 Ed(r,e){let t=e.allow??[],n=e.deny??[];for(let o of [...t,...n])xd(o);return n.some(o=>xe(r,o))?false:vd(r)?true:t.some(o=>xe(r,o))}var Es=false;function Ad(r){Es=r;}function er(r){if(!Es)return;let e=JSON.stringify({span:"template_exec",...r,timestamp:new Date().toISOString()});console.error(e);}function Td(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 As(r,e){let t=Date.now(),n=parseInt(process.env.CREWX_EXEC_DEPTH??"0",10);if(isNaN(n)||n>=hd)return er({command:r,status:"denied",reason:"invalid or max recursion depth"}),"(exec blocked: max recursion depth reached)";try{kd(r);}catch{return er({command:r,status:"denied",reason:"shell metacharacter detected"}),`(exec blocked: shell metacharacter detected in "${r}")`}if(!Ed(r,e))return er({command:r,status:"denied",reason:"not in allow list"}),`(exec blocked: ${r})`;try{let o=Td(r),[s,...i]=o;if(!s)return `(exec failed: ${r})`;let a=_d(),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 er({command:r,status:"allowed",allowed_by:"policy",duration_ms:l}),`<exec-output cmd="${r}">
|
|
47
47
|
${d.trim()}
|
|
48
|
-
</exec-output>`}catch{return
|
|
48
|
+
</exec-output>`}catch{return er({command:r,status:"error",reason:"execution failed"}),`(exec failed: ${r})`}}p();function Ts(r){return r==null?"":String(r)}p();function Rs(r,e){return `\`\`\`${e?.hash?.lang??""}
|
|
49
49
|
${r??""}
|
|
50
|
-
\`\`\``}p();function
|
|
50
|
+
\`\`\``}p();function Ln(r,e){if(!r)return "";if(r.length<=e)return r;let t=r.length-e;return `${r.substring(0,e)} (...+${t} chars)`}function $n(r){return Array.isArray(r)||typeof r=="string"?r.length:0}function Un(r){return typeof r!="string"?"":r.replace(/\{\{/g,"{{").replace(/\}\}/g,"}}")}var bs=["B","KB","MB","GB"];function Wn(r){if(r===0)return "0 B";let e=Math.min(Math.floor(Math.log(r)/Math.log(1024)),bs.length-1);return `${Math.round(r/Math.pow(1024,e)*100)/100} ${bs[e]}`}function Fn(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 tr=class{hbs;execPolicy;execEnabled;constructor(e={}){this.hbs=Re__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(As(o,t)):"(exec disabled)"}),e.registerHelper("include",function(o){return new e.SafeString(Ts(o))}),e.registerHelper("fenced_code",function(o,s){return new e.SafeString(Rs(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 Ln(o,s)}),e.registerHelper("length",function(o){return $n(o)}),e.registerHelper("escapeHandlebars",function(o){return new e.SafeString(Un(o))}),e.registerHelper("formatFileSize",function(o){return Wn(o)}),e.registerHelper("formatTimestamp",function(o){return Fn(o)});}async render(e,t={}){return this.hbs.compile(e,{noEscape:true})(t)}};p();p();var Br=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 []}}},lt=new Br;var ct=class{docs=new Map;fs;constructor(e){this.fs=e??lt;}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)}};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 gd={validationMode:"lenient",fallbackLayoutId:"crewx/default"},Xt=class{layouts=new Map;options;constructor(e){this.options={...gd,...e,templatesPath:e?.templatesPath??kt()},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(!Is.existsSync(e))throw new ae(`Templates directory not found: ${e}`,void 0,new Error(`Directory does not exist: ${e}`));try{let t=Is.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=Is.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 Yt(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 fd(r){return r.map(e=>{let t=typeof e?.timestamp=="number"?e.timestamp:null;return t===null?e:{...e,created_at:Yt(new Date(t))}})}function md(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 fs(...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=md(t),d=a.length>0?a[0]:"",l=Date.now(),c={messages:fd(t),platform:typeof n=="string"?n:"",messagesCount:t.length,agentIds:a,primaryAgentId:d,currentAgentId:o,threadId:s,now:Yt(new Date(l))};return e.fn(c)}p();var Qt=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],f=this.resolveProp(c,d,l,n,s);f.shouldAssign&&(i[a]=f.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((f,g)=>{let m=[...n,String(g)];if(d){let w=this.validateType(f,{type:d},m,o,s);w.valid?a.push(w.value):s.push({path:this.buildPath(m),message:w.error??"Invalid array item",value:f});}else a.push(f);l&&!l.includes(f)&&s.push({path:this.buildPath(m),message:`Array item must be one of: ${l.join(", ")}`,value:f});}),{valid:s.length===c,value:a}}validatePlainObject(e){return this.isPlainObject(e)?{valid:true,value:{...e}}:{valid:false,error:`Expected object, got ${this.describeType(e)}`}}validateFunction(e){return typeof e!="function"?{valid:false,error:`Expected function, got ${this.describeType(e)}`}:{valid:true,value:e}}validateShape(e,t,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 Zt=class{handlebars;propsValidator;constructor(e){this.handlebars=Te__namespace.default.create(),this.propsValidator=e??new Qt,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",fs),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,"{{").replace(/\}\}/g,"}}")}),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,"{{{").replace(/\}\}\}/g,"}}}").replace(/\{\{/g,"{{").replace(/\}\}/g,"}}");t.user_input=this.handlebars.escapeExpression(n);}return t}};p();var Pn="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function yd(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+=Pn[o%62]);}for(;t.length<r;)t+=Pn[crypto$1.randomBytes(1)[0]%62];return t}function lt(r){return `${r}_${yd(8)}`}function hd(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+=Pn[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 ys(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 er=class{_emitter=new events.EventEmitter;on(e,t){let n=ys(e,t);return this._emitter.on(e,n),()=>this._emitter.off(e,n)}once(e,t){let n=ys(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 kd(){return On}function vd(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 g=>({userId:g,displayName:g})),c=async g=>{let m=On.getStore();if(!m){e.warn("respondSync called outside sync window \u2014 graceful degradation (no-op)",{textPreview:typeof g=="object"&&"text"in g?g.text.slice(0,80):void 0});return}let w="text"in g?g.text:"";m.res.status(200).json({text:w});},f=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:f,inbound:i,emitEvent:a,updateMessage:d,resolveUser:l,respondSync:c}}je();p();var xd=/^-\s*Status:\s*active/m,Ed=/^---\n([\s\S]*?)\n---/,Ad=/^type:\s*goal\s*$/m;async function hs(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 Nd={validationMode:"lenient",fallbackLayoutId:"crewx/default"},rr=class{layouts=new Map;options;constructor(e){this.options={...Nd,...e,templatesPath:e?.templatesPath??Et()},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(!Vs.existsSync(e))throw new ae(`Templates directory not found: ${e}`,void 0,new Error(`Directory does not exist: ${e}`));try{let t=Vs.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=Vs.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 ut(r){return String(Math.floor(Math.abs(r))).padStart(2,"0")}function nr(r){if(!(r instanceof Date)||Number.isNaN(r.getTime()))return "";let e=-r.getTimezoneOffset(),t=e>=0?"+":"-";return `${r.getFullYear()}-${ut(r.getMonth()+1)}-${ut(r.getDate())}T${ut(r.getHours())}:${ut(r.getMinutes())}:${ut(r.getSeconds())}${t}${ut(e/60)}:${ut(e%60)}`}function Ld(r){return r.map(e=>{let t=typeof e?.timestamp=="number"?e.timestamp:null;return t===null?e:{...e,created_at:nr(new Date(t))}})}function $d(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 Is(...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=$d(t),d=a.length>0?a[0]:"",l=Date.now(),c={messages:Ld(t),platform:typeof n=="string"?n:"",messagesCount:t.length,agentIds:a,primaryAgentId:d,currentAgentId:o,threadId:s,now:nr(new Date(l))};return e.fn(c)}p();var or=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],f=this.resolveProp(c,d,l,n,s);f.shouldAssign&&(i[a]=f.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((f,g)=>{let m=[...n,String(g)];if(d){let w=this.validateType(f,{type:d},m,o,s);w.valid?a.push(w.value):s.push({path:this.buildPath(m),message:w.error??"Invalid array item",value:f});}else a.push(f);l&&!l.includes(f)&&s.push({path:this.buildPath(m),message:`Array item must be one of: ${l.join(", ")}`,value:f});}),{valid:s.length===c,value:a}}validatePlainObject(e){return this.isPlainObject(e)?{valid:true,value:{...e}}:{valid:false,error:`Expected object, got ${this.describeType(e)}`}}validateFunction(e){return typeof e!="function"?{valid:false,error:`Expected function, got ${this.describeType(e)}`}:{valid:true,value:e}}validateShape(e,t,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 sr=class{handlebars;propsValidator;constructor(e){this.handlebars=Re__namespace.default.create(),this.propsValidator=e??new or,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",Is),Re__namespace.default.helpers.each&&this.handlebars.registerHelper("each",Re__namespace.default.helpers.each),Re__namespace.default.helpers.if&&this.handlebars.registerHelper("if",Re__namespace.default.helpers.if),Re__namespace.default.helpers.unless&&this.handlebars.registerHelper("unless",Re__namespace.default.helpers.unless),Re__namespace.default.helpers.with&&this.handlebars.registerHelper("with",Re__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 Re__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,"{{").replace(/\}\}/g,"}}")}),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,"{{{").replace(/\}\}\}/g,"}}}").replace(/\{\{/g,"{{").replace(/\}\}/g,"}}");t.user_input=this.handlebars.escapeExpression(n);}return t}};p();var jn="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function Ud(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+=jn[o%62]);}for(;t.length<r;)t+=jn[crypto$1.randomBytes(1)[0]%62];return t}function pt(r){return `${r}_${Ud(8)}`}function Wd(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+=jn[i%62];return `${r}_${s}`}p();function Bn(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())}`}function Fd(r){let e=r.toISOString();return `${e.slice(0,10)} ${e.slice(11,19)} UTC`}p();function Ms(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 ir=class{_emitter=new events.EventEmitter;on(e,t){let n=Ms(e,t);return this._emitter.on(e,n),()=>this._emitter.off(e,n)}once(e,t){let n=Ms(e,t);return this._emitter.once(e,n),()=>this._emitter.off(e,n)}emit(e,t){this._emitter.emit(e,t);}};p();function Hn(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 qn=new async_hooks.AsyncLocalStorage;function Hd(){return qn}function qd(r,e){return qn.run(r,e)}function zn(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 g=>({userId:g,displayName:g})),c=async g=>{let m=qn.getStore();if(!m){e.warn("respondSync called outside sync window \u2014 graceful degradation (no-op)",{textPreview:typeof g=="object"&&"text"in g?g.text.slice(0,80):void 0});return}let w="text"in g?g.text:"";m.res.status(200).json({text:w});},f=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:f,inbound:i,emitEvent:a,updateMessage:d,resolveUser:l,respondSync:c}}je();p();var zd=/^-\s*Status:\s*active/m,Kd=/^---\n([\s\S]*?)\n---/,Gd=/^type:\s*goal\s*$/m;async function Ds(r,e=lt,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
|
-
`)}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=
|
|
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=Kd.exec(l);!c||!Gd.test(c[1])||zd.test(l)&&i.push(l);}return i.join(`
|
|
55
55
|
---
|
|
56
|
-
`)}p();function
|
|
56
|
+
`)}p();function Vd(){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 Ns(r,e=lt){let t=e.resolvePath(r,`${Vd()}.md`);return await e.exists(t)?e.readFile(t):""}p();Tt();je();function Kn(r){if(r.startsWith("cli/"))return exports.BUILTIN_ADAPTERS[r.slice(4)]}function Xd(r,e={}){if(!r.startsWith("cli/"))return true;let n=(e.lookupAdapter??Kn)(r);if(!n?.command)return false;let o=Ft(n.command,{env:e.env});return K__namespace.default.isAbsolute(o)}function Gn(r,e={}){if(!Array.isArray(r))return r;if(r.length===0)return "cli/claude";for(let t of r)if(Xd(t,e))return t;return r[0]}p();var ar=new async_hooks.AsyncLocalStorage;function Vn(r){if(r)return {parentTaskId:r.parentTaskId??null,rootTraceId:r.rootTraceId,callerAgentId:r.callerAgentId??null}}p();function Qd(r){return typeof r!="string"?"":r.replace(/</g,"<").replace(/>/g,">")}function Jn(r){return r.messages.map(e=>({text:Qd(e.text),isAssistant:e.isAssistant,timestamp:e.timestamp,metadata:e.metadata,files:void 0}))}p();je();Be();p();p();var St=class{resolveDbPath(){return process.env.CREWX_DB?process.env.CREWX_DB:process.env.CREWX_TRACES_DB?process.env.CREWX_TRACES_DB:K.join(So__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 Vs.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 Ls=new Set,nl={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 Yn(r,e){return (r.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function ol(r,e){if(e>0||!Yn(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(nl))n.has(o)||r.run(`ALTER TABLE tasks ADD COLUMN ${o} ${s}`);}var sl={"0002_normalize_task_names":{workspace_name:"TEXT",project_name:"TEXT"}};function il(r,e,t){if(!Yn(r,"__drizzle_migrations")||!Yn(r,"tasks"))return;let n=r.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(n.map(i=>i.hash)),s=JSON.parse(Vs.readFileSync(K__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=sl[i.tag];if(!a)continue;let d=K__namespace.default.join(e,`${i.tag}.sql`);if(!Vs.existsSync(d))continue;let l=Vs.readFileSync(d,"utf-8"),c=crypto$1.createHash("sha256").update(l).digest("hex");if(o.has(c))continue;let f=r.all("PRAGMA table_info(tasks)"),g=new Set(f.map(m=>m.name));for(let[m,w]of Object.entries(a))g.has(m)||(r.run(`ALTER TABLE tasks ADD COLUMN ${m} ${w}`),g.add(m));}}function al(r,e,t){let n=r.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(n.map(i=>i.hash)),s=JSON.parse(Vs.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(!Vs.existsSync(a))continue;let d=Vs.readFileSync(a,"utf-8"),l=crypto$1.createHash("sha256").update(d).digest("hex");if(o.has(l))continue;let c=/ALTER\s+TABLE\s+[`"]?(\w+)[`"]?\s+ADD\s+[`"]?(\w+)[`"]?/gi,f=[],g;for(;(g=c.exec(d))!==null;)f.push({table:g[1],column:g[2]});if(f.length===0||!d.split(/-->\s*statement-breakpoint/).map(_=>_.trim()).filter(Boolean).every(_=>/^ALTER\s+TABLE\s+.+\s+ADD\s+/i.test(_)))continue;f.every(({table:_,column:v})=>r.all(`PRAGMA table_info("${_}")`).some(k=>k.name===v))&&r.run(t`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${l}, ${i.when})`);}}function dl(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=>Vs.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),Dd(r,i),s?.cnt&&(Ud(r,o,t),$d(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 Lr(r,e){_s.has(e)||(Wd(r),_s.add(e));}p();var P=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 vs=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 xs=sqliteCore.sqliteTable("threads",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").references(()=>vs.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(()=>xs.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",fl="0.8.9-rc.13",ze=10,Ke=parseInt(fl.split("rc.")[1]),ml=new Set(["workflow","mcp"]),Ss=600*1e3,nr=class extends Ct{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);Is.existsSync(o)||Is.mkdirSync(o,{recursive:true});}else if(!Is.existsSync(t))throw new P("NOT_FOUND","Database not found");let n=_e(t);if(e)try{Lr(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 P?n:new P("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),ol(r,i),s?.cnt&&(al(r,o,t),il(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 qr(r,e){Ls.has(e)||(dl(r),Ls.add(e));}p();var P=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 Us=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 Ws=sqliteCore.sqliteTable("threads",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").references(()=>Us.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 mt=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(()=>mt.id,{onDelete:"set null"}),name:sqliteCore.text("name").notNull(),kind:sqliteCore.text("kind").notNull().default("internal"),status:sqliteCore.text("status").notNull().default("ok"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),error:sqliteCore.text("error"),attributes:sqliteCore.text("attributes")},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(()=>Ws.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)}));Ct();var qe="2026-05-09",$l="0.8.9-rc.13",ze=10,Ke=parseInt($l.split("rc.")[1]),Ul=new Set(["workflow","mcp"]),Gs=600*1e3,lr=class extends St{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);Vs.existsSync(o)||Vs.mkdirSync(o,{recursive:true});}else if(!Vs.existsSync(t))throw new P("NOT_FOUND","Database not found");let n=_e(t);if(e)try{qr(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 P?n:new P("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 P?n:new P("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 P?o:new P("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 P("DB_ERROR","Failed to get running tasks",t)}finally{e.close();}}getAllTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(u).orderBy(drizzleOrm.desc(u.started_at)).limit(100).all()}catch(t){throw new P("DB_ERROR","Failed to get all tasks",t)}finally{e.close();}}getTask(e){if(!this.dbExists())return;let t=this.openHandle(false);try{return t.db.select().from(u).where(drizzleOrm.eq(u.id,e)).limit(1).get()??void 0}catch(n){throw new P("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 P?n:new P("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(
|
|
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 P?n:new P("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 P?o:new P("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 P("DB_ERROR","Failed to get running tasks",t)}finally{e.close();}}getAllTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(u).orderBy(drizzleOrm.desc(u.started_at)).limit(100).all()}catch(t){throw new P("DB_ERROR","Failed to get all tasks",t)}finally{e.close();}}getTask(e){if(!this.dbExists())return;let t=this.openHandle(false);try{return t.db.select().from(u).where(drizzleOrm.eq(u.id,e)).limit(1).get()??void 0}catch(n){throw new P("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 P?n:new P("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(Ul.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>=Gs&&(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=Gs){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(!Vs.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 P("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(!Vs.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 P("DB_ERROR","Failed to find child tasks",d)}finally{a.close();}}return s}getWorkspaceUsageSummary(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.all(e?drizzleOrm.sql`
|
|
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 P("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(!
|
|
82
|
+
`)}catch(n){throw new P("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(!Vs.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}%`))),f=t?drizzleOrm.and(c,drizzleOrm.eq(u.workspace_id,t)):c,g=l.db.select({id:u.id,input_tokens:u.input_tokens,output_tokens:u.output_tokens,cost_usd:u.cost_usd}).from(u).where(f).all();for(let m of g)o.has(m.id)||(o.add(m.id),s+=m.input_tokens??0,i+=m.output_tokens??0,a+=m.cost_usd??0);}catch(c){throw new P("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(!Vs.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 f of c)o.has(f.id)||(o.add(f.id),s.push(f));}catch(d){throw new P("DB_ERROR","Failed to find tasks by thread",d)}finally{a.close();}}return s}parseWorkflowCardMetadata(e){if(!e)return {};try{let t=JSON.parse(e);return {kind:typeof t.kind=="string"?t.kind:void 0,workflowRunId:typeof t.workflowRunId=="string"?t.workflowRunId:void 0}}catch{return {}}}extractThreadIdFromCommand(e){return e?/--thread=(\S+)/.exec(e)?.[1]??null:null}findRunningWorkflowParentTasks(){if(!this.dbExists())return [];let e=[];for(let t of this.resolveDbPaths()){if(!Vs.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 P("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 f=this.parseWorkflowCardMetadata(l.metadata);f.kind==="workflow_card"&&(s.set(d,l.started_at),n.set(d,{taskId:l.id,workflowRunId:f.workflowRunId,raw:l.result??void 0}));};for(let d of this.resolveDbPaths()){if(!Vs.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"%')),f=l.db.select({id:u.id,thread_id:u.thread_id,metadata:u.metadata,result:u.result,started_at:u.started_at}).from(u).where(i?drizzleOrm.and(c,i):c).all();for(let w of f)a(w.thread_id,w);let g=drizzleOrm.and(drizzleOrm.isNull(u.thread_id),drizzleOrm.like(u.metadata,'%"kind":"workflow_card"%')),m=l.db.select({id:u.id,command:u.command,metadata:u.metadata,result:u.result,started_at:u.started_at}).from(u).where(i?drizzleOrm.and(g,i):g).all();for(let w of m){let _=this.extractThreadIdFromCommand(w.command);!_||!o.has(_)||a(_,w);}}catch(c){throw new P("DB_ERROR","Failed to batch fetch workflow cards",c)}finally{l.close();}}return 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 P("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,7 +217,7 @@ ${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 P("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 P("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 P("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 P?s:new P("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(!
|
|
220
|
+
`).map(i=>({date:i.date,agentId:i.agent_id,inputTokens:i.input_tokens,outputTokens:i.output_tokens,cachedInputTokens:i.cached_input_tokens,costUsd:i.cost_usd,totalTokens:i.input_tokens+i.output_tokens}))}catch(s){throw new P("DB_ERROR","Failed to get agent usage trend",s)}finally{o.close();}}findTaskForStop(e,t){if(!this.dbExists())return;let 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 P("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 P("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 P?s:new P("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(!Vs.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 P("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
222
|
WHEN ${u.model} LIKE 'claude-%' OR ${u.model} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
|
|
223
223
|
WHEN ${u.model} LIKE 'gpt-%' OR ${u.model} LIKE 'codex-%' THEN 'codex'
|
|
@@ -289,7 +289,7 @@ ${n.join(`
|
|
|
289
289
|
FROM ${u}
|
|
290
290
|
${a}
|
|
291
291
|
GROUP BY ${u.model}
|
|
292
|
-
`),l=new Map;for(let c of d){let f=
|
|
292
|
+
`),l=new Map;for(let c of d){let f=hn(c.model??""),g=l.get(f);g?(g.totalTasks+=c.total_tasks,g.inputTokens+=c.input_tokens,g.outputTokens+=c.output_tokens,g.cachedInputTokens+=c.cached_input_tokens,g.costUsd+=c.cost_usd,g.totalTokens+=c.input_tokens+c.output_tokens,g.activeDurationMs+=c.active_duration_ms??0,c.last_active_at&&(!g.lastActiveAt||c.last_active_at>g.lastActiveAt)&&(g.lastActiveAt=c.last_active_at)):l.set(f,{model:f,provider:c.provider,totalTasks:c.total_tasks,inputTokens:c.input_tokens,outputTokens:c.output_tokens,cachedInputTokens:c.cached_input_tokens,costUsd:c.cost_usd,totalTokens:c.input_tokens+c.output_tokens,activeDurationMs:c.active_duration_ms??0,lastActiveAt:c.last_active_at??null});}return Array.from(l.values()).sort((c,f)=>f.costUsd-c.costUsd)}catch(s){throw new P("DB_ERROR","Failed to get model usage",s)}finally{o.close();}}getTasksForReport(e,t,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
294
|
${u.thread_id} AS thread_id,
|
|
295
295
|
${u.agent_id} AS agent_id,
|
|
@@ -300,30 +300,30 @@ ${n.join(`
|
|
|
300
300
|
FROM ${u}
|
|
301
301
|
${s}
|
|
302
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 P("DB_ERROR","Failed to get tasks for report",s)}finally{o.close();}}findTaskEvidence(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{let 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 P("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},f=a.get(l.thread_id);f?f.push(c):a.set(l.thread_id,[c]);}let d=[];for(let[l,c]of a){let f=c.filter(g=>g.agentId===e.targetAgentId).length;f<2||d.push({threadId:l,targetAgentTurnCount:f,turns:c});}return d.sort((l,c)=>{let f=l.turns[l.turns.length-1].startedAt,g=c.turns[c.turns.length-1].startedAt;return f<g?1:f>g?-1:0}),d.slice(0,n).map(l=>({threadId:l.threadId,targetAgentTurnCount:l.targetAgentTurnCount,turns:l.turns.slice(-o)}))}catch(n){throw new P("DB_ERROR","Failed to find thread chains",n)}finally{t.close();}}};var
|
|
304
|
-
`)[0].trimStart();return
|
|
305
|
-
`).find(s=>s.trim()&&!s.startsWith("Read "))?.trim()??e.trim();if(!o)return "unknown";try{let s=
|
|
306
|
-
`)[0]?.slice(0,150)??null:o.input?.slice(0,150)??null,i=
|
|
307
|
-
`)}function
|
|
308
|
-
`),f=
|
|
309
|
-
${i.message}`)}let s=_r(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 _ of e.agents??[])n.set(_.id,_);for(let _ of t.agents??[])n.has(_.id)&&console.warn(`[agent-loader] User agent "${_.id}" overrides built-in`),n.set(_.id,_);let o=Array.from(n.values()),s={...e.layouts??{},...t.layouts??{}},i={...e.documents??{},...t.documents??{}},a=e,d=t,l=oi(a.vars,d.vars),c=oi(a.settings,d.settings),f;e.skills&&t.skills&&typeof e.skills=="object"&&typeof t.skills=="object"&&!Array.isArray(e.skills)&&!Array.isArray(t.skills)?f={...e.skills,...t.skills}:f=t.skills??e.skills;let g=[...e.hooks??[],...t.hooks??[]],m=yc(a.providers,d.providers),w={...e},k={...t};for(let _ of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete w[_],delete k[_];let h={...{...w,...k},agents:o,layouts:s,documents:i,skills:f};return g.length>0&&(h.hooks=g),l!==void 0&&(h.vars=l),c!==void 0&&(h.settings=c),m!==void 0&&(h.providers=m),h}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 f=kr(e);s=r.mergeCrewxConfig(c,f),i=K.dirname(e);}else s=c,i=process.cwd();}else {if(e===void 0)throw new Error("[@crewx/sdk] loadYaml: path is required when includeBuiltIns is false");s=kr(e),i=K.dirname(e);}let a=new at(n);await a.load(s.documents,i);let d=s.agents??[];return await si(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 si(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 Kn(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,k)=>{let h=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${m}`,w,{threadId:k?.threadId,platform:d});return {output:h.ok?h.data:h.error?.message??""}}},c=e.onInbound??(async m=>{let w=m.routingHints?.agentId??e.defaultAgent;if(!w)return {accepted:false,reason:"no_agent"};let{output:k}=await l.run(w,m.text,{threadId:m.threadId});return {accepted:true,output:k}}),f=Mn({instanceId:n,config:o,capabilities:s,db:i,agentRunner:l,onInbound:c}),g={adapter:t,ctx:f,state:"starting"};this._activeAdapters.set(n,g),this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:n,state:"starting",timestamp:new Date});try{await t.start(f),g.state="started",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:n,state:"started",timestamp:new Date});}catch(m){throw g.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(zt+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 Pe(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 Pe(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(),f=t?.env??(typeof process<"u"?process.env:{}),g=t?.vars?.security_key??mc(),m={...t?.vars??{},documents:c,env:f,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??""}},w=await this._templateEngine.render(l,m),k={mode:t?.session?.mode??"query",platform:t?.session?.platform??"cli",options:t?.session?.options??[]},v=o.provider,h=Array.isArray(v)?v:typeof v=="string"&&v.length>0?[v]:[],_=h.join(", ")||(typeof v=="string"?v:""),E=o.options,T=["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,W]of Object.entries(F))T.includes(O)||(x[O]=W);if(Object.keys(x).length>0){let O=h.some(b=>b.startsWith("cli/")),W={};for(let[b,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)&&(W[b]=ce);}V=Object.keys(W).length>0?W: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 hs(F,void 0,C.goals);x&&(I.active_goals={content:x});}if(C.daily){let F=K.join(this._projectRoot,"docs","daily"),x=await ws(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;typeof D?.decayRate=="number"?D.decayRate:.5;let j=t?.threadId??"",Q=o.id,J=Z&&U>0&&j&&t?.messages&&t.messages.length>0?Ls({threadId:j,agentId:Q,lookback:U,maxEntryChars:ne}):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:_,providerList:h,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:k,env:f,vars:{security_key:g,...t?.vars??{}},props:{...a??{},...t?.messages&&t.messages.length>0?{showConversationHistory:true}:{}},platform:k.platform,mode:k.mode,thread_id:j,now:Yt(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=Zo();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=kn();return t!==void 0?t:e?.meta?.defaultIdleMs!==void 0?e.meta.defaultIdleMs:6e5}_lookupCliAdapter(e){return Nn(e)}_resolveEffectiveCost(e,t,n){return ss(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)??qt(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=tr.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 tr.run(d,async()=>{let c=Date.now(),f=new Date,g;try{g=vr(e,Array.from(this._agents.values()));}catch(x){if(x instanceof Pe){this.emit("task:start",{traceId:i,timestamp:f,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,W={code:"AGENT_NOT_FOUND",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:O,error:W,metadata:n?.metadata?{...n.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:W,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:O,taskId:i}}}throw x}d.callerAgentId=g.id;let m=Dn(g.provider),w=Or(g.options,"query",m,Ir(n?.overdrive)),k=Mr(g.options,"query"),v=w.active&&w.provider?w.provider:n?.provider??k.provider??m,h=w.active&&w.model?w.model:n?.model??k.model??g.inline?.model;h&&h.includes("{{")&&(h=await this._templateEngine.render(h,{...n?.vars??{}}));let _=v!==m?void 0:n?.resumeSessionId,E;try{E=Oe(v,this._additionalArgsProvider);}catch(x){this.emit("task:start",{traceId:i,timestamp:f,agentRef:e,message:t,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...n?.metadata??{}},threadId:n?.threadId,platform:n?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let O=Date.now()-c,W={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:W,metadata:n?.metadata?{...n.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:W,meta:{agentId:g.id,provider:v,model:h,durationMs:O,taskId:i}}}let T=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(g,n)},messages:T,threadId:n?.threadId});}catch(x){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${x instanceof Error?x.message:String(x)}`);}let V,$,I,N=h,le=!1,Y=x=>{le||(le=!0,this.emit("task:start",{traceId:i,timestamp:f,agentRef:e,message:t,mode:"query",pid:x,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:N,provider:v,codingAgentCommand:V,renderedPrompt:C,metadata:{...n?.metadata??{},provider:v,...w.active?{overdrive:!0}:{}},threadId:n?.threadId,platform:n?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},D=g.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,H=this._tools.size>0?this._filterToolsByMode(ne):[],j=(()=>{let x=D?.query;if(!x||Array.isArray(x))return;let{tools:O,effort:W,mode:b,provider:z,model:ce,profiles:_t,...en}=x,Lt=Object.entries(en).filter(([,Ce])=>Ce!=null);if(Lt.length!==0)return Object.fromEntries(Lt.map(([Ce,tn])=>[Ce,String(tn)]))})(),Q=g.inline?.max_steps;v.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:h,effort:U,mode:Z,context:n?.context,systemPrompt:C??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(D?.query)?D.query:void 0,resumeSessionId:_,tools:H.length>0?H:void 0,maxSteps:Q,configOptions:j,timeoutMs:this._resolveTimeout("query",this._lookupCliAdapter(v)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(v)),cwd:this._resolveEffectiveCwd(g,n),env:{CREWX_AGENT_ID:g.id,CREWX_AGENT_ROLE:g.role??"",CREWX_AGENT_TEAM:g.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:n?.threadId??"",CREWX_PROVIDER:v,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,f)},onPid:b=>{let z=this._activeTasks.get(i);z&&(z.pid=b),Y(b);},onOutput:(b,z)=>{let ce=this._lookupCliAdapter(v);z==="stdout"&&ce?.suppressOutputLine?.(b)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:b,level:z}),z==="stdout"&&this.emitToolEvents(i,e,v,b,g.id,n?.threadId??"","");},onTaskLog:b=>{this.emitTaskLogEntries(i,e,g.id,n?.threadId??"","",v,b);for(let z of b)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(z),level:"info"});},onCommand:b=>{V=b;},onUsage:b=>{$=b;},onExitCode:b=>{I=b;},onModel:b=>{N||(N=b);}});q=this._resolveEffectiveCost($,N,c),Y();let O=Date.now()-c,W={...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(W).length>0?W:void 0}),J=!0,{ok:!0,data:x,meta:{agentId:g.id,provider:v,model:h,durationMs:O,taskId:i}}}catch(x){if(x instanceof exports.ClientToolCallRequiredError){let b=lt("thd");return this._pendingThreads.set(b,{agentRef:g.id,providerStr:v,continuationState:x.continuationState,toolCall:x.toolCall,traceId:i,startMs:c,model:h}),J=!0,{ok:!0,status:"requires_action",data:"",toolCall:x.toolCall,threadId:b,meta:{agentId:g.id,provider:v,model:h,durationMs:Date.now()-c,taskId:i}}}q=this._resolveEffectiveCost($,N,c),Y();let O=Date.now()-c,W={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:W,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:W,meta:{agentId:g.id,provider:v,model:h,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=tr.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 tr.run(d,async()=>{let c=Date.now(),f=new Date,g;try{g=vr(e,Array.from(this._agents.values()));}catch(x){if(x instanceof Pe){this.emit("task:start",{traceId:i,timestamp:f,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,W={code:"AGENT_NOT_FOUND",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:O,error:W,metadata:n?.metadata?{...n.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:W,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:O,taskId:i}}}throw x}d.callerAgentId=g.id;let m=Dn(g.provider),w=Or(g.options,"execute",m,Ir(n?.overdrive)),k=Mr(g.options,"execute"),v=w.active&&w.provider?w.provider:n?.provider??k.provider??m,h=w.active&&w.model?w.model:n?.model??k.model??g.inline?.model;h&&h.includes("{{")&&(h=await this._templateEngine.render(h,{...n?.vars??{}}));let _=v!==m?void 0:n?.resumeSessionId,E;try{E=Oe(v,this._additionalArgsProvider);}catch(x){this.emit("task:start",{traceId:i,timestamp:f,agentRef:e,message:t,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...n?.metadata??{}},threadId:n?.threadId,platform:n?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let O=Date.now()-c,W={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:W,metadata:n?.metadata?{...n.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:W,meta:{agentId:g.id,provider:v,model:h,durationMs:O,taskId:i}}}let T=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(g,n)},messages:T,threadId:n?.threadId});}catch(x){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${x instanceof Error?x.message:String(x)}`);}let V,$,I,N=h,le=!1,Y=x=>{le||(le=!0,this.emit("task:start",{traceId:i,timestamp:f,agentRef:e,message:t,mode:"execute",pid:x,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:N,provider:v,codingAgentCommand:V,renderedPrompt:C,metadata:{...n?.metadata??{},provider:v,...w.active?{overdrive:!0}:{}},threadId:n?.threadId,platform:n?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},D=g.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,H=this._tools.size>0?this._filterToolsByMode(ne):[],j=(()=>{let x=D?.execute;if(!x||Array.isArray(x))return;let{tools:O,effort:W,mode:b,provider:z,model:ce,profiles:_t,...en}=x,Lt=Object.entries(en).filter(([,Ce])=>Ce!=null);if(Lt.length!==0)return Object.fromEntries(Lt.map(([Ce,tn])=>[Ce,String(tn)]))})(),Q=g.inline?.max_steps;v.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:h,effort:U,mode:Z,context:n?.context,systemPrompt:C??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(D?.execute)?D.execute:void 0,resumeSessionId:_,tools:H.length>0?H:void 0,maxSteps:Q,configOptions:j,timeoutMs:this._resolveTimeout("execute",this._lookupCliAdapter(v)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(v)),cwd:this._resolveEffectiveCwd(g,n),env:{CREWX_AGENT_ID:g.id,CREWX_AGENT_ROLE:g.role??"",CREWX_AGENT_TEAM:g.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:n?.threadId??"",CREWX_PROVIDER:v,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,f)},onPid:b=>{let z=this._activeTasks.get(i);z&&(z.pid=b),Y(b);},onOutput:(b,z)=>{let ce=this._lookupCliAdapter(v);z==="stdout"&&ce?.suppressOutputLine?.(b)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:b,level:z}),z==="stdout"&&this.emitToolEvents(i,e,v,b,g.id,n?.threadId??"","");},onTaskLog:b=>{this.emitTaskLogEntries(i,e,g.id,n?.threadId??"","",v,b);for(let z of b)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(z),level:"info"});},onCommand:b=>{V=b;},onUsage:b=>{$=b;},onExitCode:b=>{I=b;},onModel:b=>{N||(N=b);}});q=this._resolveEffectiveCost($,N,c),Y();let O=Date.now()-c,W={...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(W).length>0?W:void 0}),J=!0,{ok:!0,data:x,meta:{agentId:g.id,provider:v,model:h,durationMs:O,taskId:i}}}catch(x){q=this._resolveEffectiveCost($,N,c),Y();let O=Date.now()-c,W={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:W,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:W,meta:{agentId:g.id,provider:v,model:h,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 oi(r,e){let t=uo(r)?r:void 0,n=uo(e)?e:void 0;if(!(!t&&!n))return {...t??{},...n??{}}}function uo(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function yc(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(!uo(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 hc(r){let e=Array.isArray(r.provider)?r.provider:[r.provider],t=r.options,n=[...e];for(let o of ["query","execute"]){let s=Mr(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)?Sr(i.overdrive):void 0;a?.provider&&n.push(a.provider);}return n}async function si(r,e,t){let n=r.flatMap(hc);if(n.some(s=>s.startsWith("api/"))){let{registerApiProviders:s}=await Promise.resolve().then(()=>(Jn(),zs));s(t?.api);}await _c(n,e),kc(n,e),wc(n);}function wc(r){if(!r.some(n=>n.startsWith("acp/")))return;let{registerAcpProviders:t}=(ro(),Mo(Xs));t();}async function _c(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(()=>(so(),Qs)),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 kc(r,e){if(!r.some(i=>i.startsWith("plugin/")))return;let n=e.providers;if(!Array.isArray(n))return;let{createPluginProviderFactory:o}=(io(),Mo(ri)),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 po=class{detach(e){}};p();var vc="crewx:fs:",go=class{prefix;store;constructor(e){this.prefix=e?.prefix??vc,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 It="default",Ot="archive",ii="wi-default-flow",xc="wi-plan-flow",Ec="wi-default-flow.yaml",Ac="wi-plan-flow.yaml",Vr=/^[a-zA-Z0-9_-]{1,64}$/;function ai(r){return r===It||r===Ot}function Rc(r){let e={id:It,name:"Default",workflowId:ii,system:true,readOnly:false},t={id:Ot,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||ai(d)||!Vr.test(d)||o.has(d))continue;o.add(d);let f=typeof a.description=="string"?a.description:void 0,g=typeof a.goal_id=="string"?a.goal_id:void 0;s.push({id:d,name:l,workflowId:c,...f!==void 0?{description:f}:{},...g!==void 0?{goalId:g}:{},system:false,readOnly:false});}return [e,...s,t]}p();var ee=class extends Error{constructor(e){super(e),this.name="WiCreateError";}},bc=300*1e3,Cc=300*1e3,Pc=1e4,Sc=50;function Ic(r){return new Promise(e=>setTimeout(e,r))}function Oc(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 Mc(r){return r.normalize("NFKD").replace(/[^\x00-\x7F]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toUpperCase().slice(0,60)}function Nc(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 di(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 li(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 ci(r){return (typeof r=="string"?r.trim().replace(/^@+/,""):"")||void 0}function ui(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 pi(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===Ot)throw new ee(`board cannot be '${Ot}'`);return t}function Mt(r){return JSON.stringify(r)}function Dc(r,e){return e.length===0?[`${r}: []`]:[`${r}:`,...e.map(t=>` - ${Mt(t)}`)]}async function Lc(r){let e=await Is.promises.stat(r).catch(()=>null);e&&Date.now()-e.mtimeMs>Cc&&await Is.promises.rm(r,{recursive:true,force:true}).catch(()=>{});}async function $c(r,e){let t=K.join(r,".wi-create.lock"),n=Date.now()+Pc;for(;Date.now()<n;)try{await Is.promises.mkdir(t);try{return await e()}finally{await Is.promises.rm(t,{recursive:!0,force:!0}).catch(()=>{});}}catch(o){if(o.code!=="EEXIST")throw o;await Lc(t),await Ic(Sc);}throw new ee("WI create lock timeout: docs/wi/.wi-create.lock")}async function gi(r){let e=[],t=await Is.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 gi(o)):n.isFile()&&n.name.endsWith(".md")&&e.push(n.name);}return e}async function Uc(r){let e=await Is.promises.readdir(r).catch(n=>{if(n.code==="ENOENT")return [];throw n}),t=await gi(K.join(r,"archive"));return [...e,...t]}function Wc(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 Fc(r,e){return r.some(t=>t===`${e}.md`||t.startsWith(`${e}-`))}async function jc(r,e){let t=K.join(r,`.wi-${e}.lock`);try{return await Is.promises.writeFile(t,"",{flag:"wx"}),{claimed:!0,lockPath:t}}catch(n){if(n.code!=="EEXIST")throw n;return await Is.promises.stat(t).then(s=>Date.now()-s.mtimeMs>bc).catch(()=>false)&&await Is.promises.unlink(t).then(()=>true).catch(()=>false)?(await Is.promises.writeFile(t,"",{flag:"wx"}),{claimed:true,lockPath:t}):{claimed:false,lockPath:t}}}function Bc(r){return {title:di(r.title),assignee:ci(r.assignee),body:(r.body??"").trim(),board:pi(r.board),source:li(r.source),depends_on:ui(r.depends_on)}}function Hc(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 qc(r){let e=pi(r.board,{required:true}),t=li(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:Hc(o.key,s,n),title:di(o.title),assignee:ci(o.assignee),body:o.body.trim(),board:e,source:t,depends_on:ui(o.depends_on)}})}function zc(r,e){return r.map(t=>e.get(t)??t)}function Kc(r,e,t){let n=!!r.board&&r.board!==It,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:`---
|
|
310
|
-
${[`wi_id: ${e}`,`title: ${
|
|
303
|
+
`).map(a=>({threadId:a.thread_id,agentId:a.agent_id,startedAt:a.started_at,status:a.status,error:a.error,exitCode:a.exit_code}))}catch(s){throw new P("DB_ERROR","Failed to get tasks for report",s)}finally{o.close();}}findTaskEvidence(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{let 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 P("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},f=a.get(l.thread_id);f?f.push(c):a.set(l.thread_id,[c]);}let d=[];for(let[l,c]of a){let f=c.filter(g=>g.agentId===e.targetAgentId).length;f<2||d.push({threadId:l,targetAgentTurnCount:f,turns:c});}return d.sort((l,c)=>{let f=l.turns[l.turns.length-1].startedAt,g=c.turns[c.turns.length-1].startedAt;return f<g?1:f>g?-1:0}),d.slice(0,n).map(l=>({threadId:l.threadId,targetAgentTurnCount:l.targetAgentTurnCount,turns:l.turns.slice(-o)}))}catch(n){throw new P("DB_ERROR","Failed to find thread chains",n)}finally{t.close();}}};var Wl=new Set(["Read","Grep","Find","Glob"]),Fl=["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"],jl=[/\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/],Bl=8e3,Hl=100,ql=3,zl=Number.MAX_SAFE_INTEGER;function Kl(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(Wl.has(r))return true;if(r!=="Bash"||!e)return false;let t=e.split(`
|
|
304
|
+
`)[0].trimStart();return jl.some(n=>n.test(t))?false:Fl.some(n=>t.startsWith(n))}function It(r){return r.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function Vl(r,e,t){if(r!=="Read"||!e)return "ok";let o=e.split(`
|
|
305
|
+
`).find(s=>s.trim()&&!s.startsWith("Read "))?.trim()??e.trim();if(!o)return "unknown";try{let s=Vs__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 Jl(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 Xl(r){if(!Array.isArray(r))return [];let e=r,t=e.filter(a=>a.level==="stdout"&&a.message).map(a=>a.message),n=Jl(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(...Yt("",a.message,n));let s=new Map,i=[];for(let a of o)if(a.type==="tool_use"){let d={tool:Kl(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 Yl(r,e){let t=Xl(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:Vl(o.tool,o.input,e),reusable:i});}return n}function Js(r){let e=["<activity_log>"],{entries:t,omissions:n,tokenCap:o,totalEntries:s}=r,i=n.reduce((a,d)=>a+d.count,0);if(t.length===0&&i===0)e.push(" <!-- no activity found in previous tasks -->");else {if(e.push(" <!-- tool activity from previous tasks -->"),n.length>0){e.push(` <!-- activity_log_budget token_cap="${o}" included_entries="${t.length}" omitted_entries="${i}" total_entries="${s}" -->`);for(let a of n)e.push(` <!-- omitted_entries reason="${It(a.reason)}" count="${a.count}": ${It(a.message)} -->`);}for(let a of t){let d=a.entry,l=`tool="${It(d.tool)}"`,c=d.cmd?` cmd="${It(d.cmd)}"`:"",f="";if(d.reusable&&(f=d.status==="stale"?' reused="stale"':' reused="ok"'),d.reusable&&d.status==="stale")e.push(` <entry ${l}${c}${f}>\u26A0\uFE0F changed since \u2014 re-read</entry>`);else if(d.result){e.push(` <entry ${l}${c}${f}>`);let g=d.result,m=a.bodyCharsShown??g.length;g.length>m?e.push(It(g.slice(0,m))+` \u2026 [truncated, ${m}/${g.length} chars shown]`):e.push(It(g)),e.push(" </entry>");}else e.push(` <entry ${l}${c}${f} />`);}}return e.push("</activity_log>"),e}function Ql(r){return typeof r!="number"||!Number.isFinite(r)||r<0?Bl:Math.floor(r)}function Zl(r,e,t){let n=Math.floor(e/Hl),o=Math.pow(2,r+n);return !Number.isFinite(o)||o<=0?0:Math.floor(t/o)}function ec(r,e){let t=Math.pow(2,e+ql);return !Number.isFinite(t)||t<=0?0:Math.floor(r/t)}function Xs(r,e,t,n){let o=r.result?.length??null,s=o===null?null:Math.min(o,Math.max(0,t));return {entry:r,newestIndex:e,bodyLimitChars:t,bodyCharsShown:o===null?null:Math.max(0,Math.min(n??s??0,s??0)),originalBodyChars:o}}function Ys(r,e){let t=[];return r>0&&t.push({reason:"token_cap",count:r,message:"older entries omitted after the per-task token cap was reached"}),e>0&&t.push({reason:"repository_limit",count:e,message:"older entries omitted by the explicit repository safety limit before budgeting"}),t}function Qs(r){let e=Ys(r.omittedByTokenCap,r.repositoryLimitOmitted);return Js({entries:r.entries,omissions:e,tokenCap:r.tokenCap,totalEntries:r.totalEntries}).join(`
|
|
307
|
+
`)}function no(r,e){let t=r(e);return !Number.isFinite(t)||t<0?0:Math.floor(t)}function tc(r){let{entry:e,bodyLimitChars:t}=r;if(!e.result)return null;let n=Math.min(e.result.length,Math.max(0,t)),o=0,s=n,i=null;for(;o<=s;){let a=Math.floor((o+s)/2),d=Xs(e,r.newestIndex,t,a),l=[...r.selectedEntries,d],c=r.totalEntries-l.length-r.repositoryLimitOmitted,f=Qs({entries:l,tokenCap:r.tokenCap,totalEntries:r.totalEntries,omittedByTokenCap:c,repositoryLimitOmitted:r.repositoryLimitOmitted});no(r.countTokens,f)<=r.tokenCap?(i=d,o=a+1):s=a-1;}return i}function rc(r){let e=r.repositoryEntryLimit,t=typeof e=="number"&&Number.isFinite(e)&&e>=0&&r.entries.length>e,n=t?r.entries.length-Math.floor(e):0,s=[...t?r.entries.slice(n):r.entries].reverse(),i=[],a=r.entries.length;for(let g=0;g<s.length;g++){let m=s[g],w=Zl(r.taskDistance,g,r.baseEntryChars),_=Xs(m,g,w),v=[...i,_],h=a-v.length-n,k=Qs({entries:v,tokenCap:r.tokenCap,totalEntries:a,omittedByTokenCap:h,repositoryLimitOmitted:n});if(no(r.countTokens,k)<=r.tokenCap){i.push(_);continue}let R=tc({selectedEntries:i,entry:m,newestIndex:g,bodyLimitChars:w,tokenCap:r.tokenCap,totalEntries:a,repositoryLimitOmitted:n,countTokens:r.countTokens});R&&i.push(R);break}let d=a-i.length-n,l=Ys(d,n),c=Js({entries:i,omissions:l,tokenCap:r.tokenCap,totalEntries:a}).join(`
|
|
308
|
+
`),f=no(r.countTokens,c);return {taskId:r.taskId,taskDistance:r.taskDistance,tokenCap:r.tokenCap,tokenCount:f,includedEntries:i.length,omittedEntries:l.reduce((g,m)=>g+m.count,0),totalEntries:a,omissions:l,entries:i,activityLog:c}}function ro(r){return {threadId:r.threadId,agentId:r.agentId,lookback:r.lookback,activityLogTokenBudget:r.activityLogTokenBudget,baseEntryChars:r.baseEntryChars,tasks:[],activityLogByTask:new Map}}function nc(r){return !Number.isFinite(r)||r<0?0:Math.floor(r)}function oc(r){return r.length}function sc(r){let e=Ql(r.maxEntryChars),t=nc(r.activityLogTokenBudget),n=Math.max(0,Math.floor(r.lookback));if(!n||!r.threadId||!r.agentId)return ro({threadId:r.threadId,agentId:r.agentId,lookback:n,activityLogTokenBudget:t,baseEntryChars:e});let o;try{o=new lr().findTasksByThread(r.threadId).filter(l=>!l.parent_task_id&&l.agent_id===r.agentId).sort((l,c)=>c.started_at>l.started_at?1:-1).slice(0,n);}catch{return ro({threadId:r.threadId,agentId:r.agentId,lookback:n,activityLogTokenBudget:t,baseEntryChars:e})}if(!o.length)return ro({threadId:r.threadId,agentId:r.agentId,lookback:n,activityLogTokenBudget:t,baseEntryChars:e});let s=[];for(let d of o){let l=[];try{let c=JSON.parse(d.logs??"[]");Array.isArray(c)&&(l=c);}catch{}s.push({taskId:d.id,entries:Yl(l,d.completed_at)});}let i=[],a=new Map;for(let d=0;d<s.length;d++){let{taskId:l,entries:c}=s[d];if(c.length===0)continue;let f=rc({taskId:l,entries:c,taskDistance:d,baseEntryChars:e,tokenCap:ec(t,d),countTokens:r.countTokens,repositoryEntryLimit:r.repositoryEntryLimit});i.push(f),a.set(l,f.activityLog);}return {threadId:r.threadId,agentId:r.agentId,lookback:n,activityLogTokenBudget:t,baseEntryChars:e,tasks:i,activityLogByTask:a}}function Zs(r){if(r.activityLogTokenBudget!==void 0&&!r.countTokens)throw new Error("countTokens is required when activityLogTokenBudget is supplied");return sc({threadId:r.threadId,agentId:r.agentId,lookback:r.lookback,maxEntryChars:r.maxEntryChars,activityLogTokenBudget:r.activityLogTokenBudget??zl,countTokens:r.countTokens??oc,repositoryEntryLimit:r.repositoryEntryLimit}).activityLogByTask}p();p();var ic={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")},ac={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 ei(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",ic,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)",ac,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 ti(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 ri(r,e){return e?await e(r)?null:new Response(JSON.stringify({error:"Unauthorized"}),{status:401,headers:{"Content-Type":"application/json"}}):null}function cc(r,e){let t=new mcp_js.McpServer({name:"crewx-mcp-server",version:"1.0.0"},{capabilities:{tools:{}}});return ei(t,r,e),t}function oo(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=ti(o);if(s)return s;let i=await ri(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=cc(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 oi(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 so(r){let e=oi(r);return crypto$1.createHash("sha256").update(e).digest("hex")}function $c(r){return r?r.settings?.template?.exec:void 0}function Uc(){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 xo=class r extends ir{_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=so(i),this._workspaceName=K.basename(i);let a=$c(n);this._templateEngine=new tr({execPolicy:t.execPolicy??a}),this._documentLoader=o??new ct,this._layoutLoader=new rr({templatesPath:Et()}),this._layoutRenderer=new sr,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),f=Array.isArray(c?.provider)?c?.provider[0]:c?.provider;if(f?.startsWith("remote/"))throw new Error(`Chained remotes not allowed: "${o}" \u2192 "${f}"`);return {target:l,agentRef:"@"+a}}static async loadBuiltInConfig(e){let{yamlPath:t,dir:n}=un(),o;try{o=Vs.readFileSync(t,"utf-8");}catch(i){throw new Error(`[@crewx/sdk] Cannot read built-in config: ${t}
|
|
309
|
+
${i.message}`)}let s=Tr(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 k of e.agents??[])n.set(k.id,k);for(let k of t.agents??[])n.has(k.id)&&console.warn(`[agent-loader] User agent "${k.id}" overrides built-in`),n.set(k.id,k);let o=Array.from(n.values()),s={...e.layouts??{},...t.layouts??{}},i={...e.documents??{},...t.documents??{}},a=e,d=t,l=vi(a.vars,d.vars),c=vi(a.settings,d.settings),f;e.skills&&t.skills&&typeof e.skills=="object"&&typeof t.skills=="object"&&!Array.isArray(e.skills)&&!Array.isArray(t.skills)?f={...e.skills,...t.skills}:f=t.skills??e.skills;let g=[...e.hooks??[],...t.hooks??[]],m=Wc(a.providers,d.providers),w={...e},_={...t};for(let k of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete w[k],delete _[k];let h={...{...w,..._},agents:o,layouts:s,documents:i,skills:f};return g.length>0&&(h.hooks=g),l!==void 0&&(h.vars=l),c!==void 0&&(h.settings=c),m!==void 0&&(h.providers=m),h}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 f=Rr(e);s=r.mergeCrewxConfig(c,f),i=K.dirname(e);}else s=c,i=process.cwd();}else {if(e===void 0)throw new Error("[@crewx/sdk] loadYaml: path is required when includeBuiltIns is false");s=Rr(e),i=K.dirname(e);}let a=new ct(n);await a.load(s.documents,i);let d=s.agents??[];return await xi(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 ct(o);await a.load(i.documents,n??(typeof process<"u"?process.cwd():"/"));let d=i.agents??[];return await xi(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=Bn(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 oo(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??Hn(n),a=e.defaultMode??"query",d=t.manifest.platform,l=e.agentRunner??{run:async(m,w,_)=>{let h=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${m}`,w,{threadId:_?.threadId,platform:d});return {output:h.ok?h.data:h.error?.message??""}}},c=e.onInbound??(async m=>{let w=m.routingHints?.agentId??e.defaultAgent;if(!w)return {accepted:false,reason:"no_agent"};let{output:_}=await l.run(w,m.text,{threadId:m.threadId});return {accepted:true,output:_}}),f=zn({instanceId:n,config:o,capabilities:s,db:i,agentRunner:l,onInbound:c}),g={adapter:t,ctx:f,state:"starting"};this._activeAdapters.set(n,g),this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:n,state:"starting",timestamp:new Date});try{await t.start(f),g.state="started",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:n,state:"started",timestamp:new Date});}catch(m){throw g.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 Pe(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 Pe(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(),f=t?.env??(typeof process<"u"?process.env:{}),g=t?.vars?.security_key??Uc(),m={...t?.vars??{},documents:c,env:f,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??""}},w=await this._templateEngine.render(l,m),_={mode:t?.session?.mode??"query",platform:t?.session?.platform??"cli",options:t?.session?.options??[]},v=o.provider,h=Array.isArray(v)?v:typeof v=="string"&&v.length>0?[v]:[],k=h.join(", ")||(typeof v=="string"?v:""),E=o.options,R=["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 M=F.goals;typeof M=="string"||Array.isArray(M)?C.goals=M:C.goals=!!M;}"daily"in F&&(C.daily=!!F.daily);let x={};for(let[M,W]of Object.entries(F))R.includes(M)||(x[M]=W);if(Object.keys(x).length>0){let M=h.some(b=>b.startsWith("cli/")),W={};for(let[b,z]of Object.entries(x)){let ce={};if(Array.isArray(z))M&&(ce.rawArgs=z);else if(typeof z=="object"&&z!==null){let xt=z;Object.keys(xt).length>0&&(ce.named=xt);}(ce.named||ce.rawArgs&&ce.rawArgs.length>0)&&(W[b]=ce);}V=Object.keys(W).length>0?W:void 0;}}let $=Array.isArray(E)?E:void 0,O={};for(let[F,x]of Object.entries(c))O[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 Ds(F,void 0,C.goals);x&&(O.active_goals={content:x});}if(C.daily){let F=K.join(this._projectRoot,"docs","daily"),x=await Ns(F);x&&(O.today_daily={content:x});}let D=t?.vars?.user_input??void 0,N=this._config?.settings?.dreaming?.continuity,Z=N?.reuseReadOnly!==false,U=typeof N?.lookback=="number"?N.lookback:5,ne=typeof N?.maxEntryChars=="number"?N.maxEntryChars:8e3;typeof N?.decayRate=="number"?N.decayRate:.5;let j=t?.threadId??"",Q=o.id,J=Z&&U>0&&j&&t?.messages&&t.messages.length>0?Zs({threadId:j,agentId:Q,lookback:U,maxEntryChars:ne}):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:D,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??"",provider:k,providerList:h,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:O,skills:t?.skills??[],session:_,env:f,vars:{security_key:g,...t?.vars??{}},props:{...a??{},...t?.messages&&t.messages.length>0?{showConversationHistory:true}:{}},platform:_.platform,mode:_.mode,thread_id:j,now:nr(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:Jn(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=ws();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=Dn();return t!==void 0?t:e?.meta?.defaultIdleMs!==void 0?e.meta.defaultIdleMs:6e5}_lookupCliAdapter(e){return Kn(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)??Yt(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=ar.getStore()??Vn(n?.trace),i=n?.taskId??pt("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 ar.run(d,async()=>{let c=Date.now(),f=new Date,g;try{g=br(e,Array.from(this._agents.values()));}catch(x){if(x instanceof Pe){this.emit("task:start",{traceId:i,timestamp:f,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 M=Date.now()-c,W={code:"AGENT_NOT_FOUND",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:M,error:W,metadata:n?.metadata?{...n.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:W,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:M,taskId:i}}}throw x}d.callerAgentId=g.id;let m=Gn(g.provider),w=Fr(g.options,"query",m,Wr(n?.overdrive)),_=jr(g.options,"query"),v=w.active&&w.provider?w.provider:n?.provider??_.provider??m,h=w.active&&w.model?w.model:n?.model??_.model??g.inline?.model;h&&h.includes("{{")&&(h=await this._templateEngine.render(h,{...n?.vars??{}}));let k=v!==m?void 0:n?.resumeSessionId,E;try{E=Oe(v,this._additionalArgsProvider);}catch(x){this.emit("task:start",{traceId:i,timestamp:f,agentRef:e,message:t,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...n?.metadata??{}},threadId:n?.threadId,platform:n?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let M=Date.now()-c,W={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:M,error:W,metadata:n?.metadata?{...n.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:W,meta:{agentId:g.id,provider:v,model:h,durationMs:M,taskId:i}}}let R=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(g,n)},messages:R,threadId:n?.threadId});}catch(x){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${x instanceof Error?x.message:String(x)}`);}let V,$,O,D=h,le=!1,Y=x=>{le||(le=!0,this.emit("task:start",{traceId:i,timestamp:f,agentRef:e,message:t,mode:"query",pid:x,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:D,provider:v,codingAgentCommand:V,renderedPrompt:C,metadata:{...n?.metadata??{},provider:v,...w.active?{overdrive:!0}:{}},threadId:n?.threadId,platform:n?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},N=g.options,Z=w.active?w.mode:N?.query?.mode,U=w.effort??n?.effort??N?.query?.effort,ne=Array.isArray(N?.query?.tools)?N.query.tools:void 0,H=this._tools.size>0?this._filterToolsByMode(ne):[],j=(()=>{let x=N?.query;if(!x||Array.isArray(x))return;let{tools:M,effort:W,mode:b,provider:z,model:ce,profiles:xt,...dn}=x,Wt=Object.entries(dn).filter(([,Ce])=>Ce!=null);if(Wt.length!==0)return Object.fromEntries(Wt.map(([Ce,ln])=>[Ce,String(ln)]))})(),Q=g.inline?.max_steps;v.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:h,effort:U,mode:Z,context:n?.context,systemPrompt:C??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(N?.query)?N.query:void 0,resumeSessionId:k,tools:H.length>0?H:void 0,maxSteps:Q,configOptions:j,timeoutMs:this._resolveTimeout("query",this._lookupCliAdapter(v)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(v)),cwd:this._resolveEffectiveCwd(g,n),env:{CREWX_AGENT_ID:g.id,CREWX_AGENT_ROLE:g.role??"",CREWX_AGENT_TEAM:g.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:n?.threadId??"",CREWX_PROVIDER:v,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,f)},onPid:b=>{let z=this._activeTasks.get(i);z&&(z.pid=b),Y(b);},onOutput:(b,z)=>{let ce=this._lookupCliAdapter(v);z==="stdout"&&ce?.suppressOutputLine?.(b)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:b,level:z}),z==="stdout"&&this.emitToolEvents(i,e,v,b,g.id,n?.threadId??"","");},onTaskLog:b=>{this.emitTaskLogEntries(i,e,g.id,n?.threadId??"","",v,b);for(let z of b)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(z),level:"info"});},onCommand:b=>{V=b;},onUsage:b=>{$=b;},onExitCode:b=>{O=b;},onModel:b=>{D||(D=b);}});q=this._resolveEffectiveCost($,D,c),Y();let M=Date.now()-c,W={...n?.metadata??{},...n?.threadId?{threadId:n.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",result:x,durationMs:M,exitCode:O,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:D,metadata:Object.keys(W).length>0?W:void 0}),J=!0,{ok:!0,data:x,meta:{agentId:g.id,provider:v,model:h,durationMs:M,taskId:i}}}catch(x){if(x instanceof exports.ClientToolCallRequiredError){let b=pt("thd");return this._pendingThreads.set(b,{agentRef:g.id,providerStr:v,continuationState:x.continuationState,toolCall:x.toolCall,traceId:i,startMs:c,model:h}),J=!0,{ok:!0,status:"requires_action",data:"",toolCall:x.toolCall,threadId:b,meta:{agentId:g.id,provider:v,model:h,durationMs:Date.now()-c,taskId:i}}}q=this._resolveEffectiveCost($,D,c),Y();let M=Date.now()-c,W={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:M,error:W,exitCode:O,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:D,metadata:n?.metadata?{...n.metadata}:void 0}),J=!0,{ok:!1,data:"",error:W,meta:{agentId:g.id,provider:v,model:h,durationMs:M,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:O??-1,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:D}),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=ar.getStore()??Vn(n?.trace),i=n?.taskId??pt("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 ar.run(d,async()=>{let c=Date.now(),f=new Date,g;try{g=br(e,Array.from(this._agents.values()));}catch(x){if(x instanceof Pe){this.emit("task:start",{traceId:i,timestamp:f,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 M=Date.now()-c,W={code:"AGENT_NOT_FOUND",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:M,error:W,metadata:n?.metadata?{...n.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:W,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:M,taskId:i}}}throw x}d.callerAgentId=g.id;let m=Gn(g.provider),w=Fr(g.options,"execute",m,Wr(n?.overdrive)),_=jr(g.options,"execute"),v=w.active&&w.provider?w.provider:n?.provider??_.provider??m,h=w.active&&w.model?w.model:n?.model??_.model??g.inline?.model;h&&h.includes("{{")&&(h=await this._templateEngine.render(h,{...n?.vars??{}}));let k=v!==m?void 0:n?.resumeSessionId,E;try{E=Oe(v,this._additionalArgsProvider);}catch(x){this.emit("task:start",{traceId:i,timestamp:f,agentRef:e,message:t,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...n?.metadata??{}},threadId:n?.threadId,platform:n?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let M=Date.now()-c,W={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:M,error:W,metadata:n?.metadata?{...n.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:W,meta:{agentId:g.id,provider:v,model:h,durationMs:M,taskId:i}}}let R=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(g,n)},messages:R,threadId:n?.threadId});}catch(x){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${x instanceof Error?x.message:String(x)}`);}let V,$,O,D=h,le=!1,Y=x=>{le||(le=!0,this.emit("task:start",{traceId:i,timestamp:f,agentRef:e,message:t,mode:"execute",pid:x,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:D,provider:v,codingAgentCommand:V,renderedPrompt:C,metadata:{...n?.metadata??{},provider:v,...w.active?{overdrive:!0}:{}},threadId:n?.threadId,platform:n?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},N=g.options,Z=w.active?w.mode:N?.execute?.mode,U=w.effort??n?.effort??N?.execute?.effort,ne=Array.isArray(N?.execute?.tools)?N.execute.tools:void 0,H=this._tools.size>0?this._filterToolsByMode(ne):[],j=(()=>{let x=N?.execute;if(!x||Array.isArray(x))return;let{tools:M,effort:W,mode:b,provider:z,model:ce,profiles:xt,...dn}=x,Wt=Object.entries(dn).filter(([,Ce])=>Ce!=null);if(Wt.length!==0)return Object.fromEntries(Wt.map(([Ce,ln])=>[Ce,String(ln)]))})(),Q=g.inline?.max_steps;v.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:h,effort:U,mode:Z,context:n?.context,systemPrompt:C??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(N?.execute)?N.execute:void 0,resumeSessionId:k,tools:H.length>0?H:void 0,maxSteps:Q,configOptions:j,timeoutMs:this._resolveTimeout("execute",this._lookupCliAdapter(v)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(v)),cwd:this._resolveEffectiveCwd(g,n),env:{CREWX_AGENT_ID:g.id,CREWX_AGENT_ROLE:g.role??"",CREWX_AGENT_TEAM:g.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:n?.threadId??"",CREWX_PROVIDER:v,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,f)},onPid:b=>{let z=this._activeTasks.get(i);z&&(z.pid=b),Y(b);},onOutput:(b,z)=>{let ce=this._lookupCliAdapter(v);z==="stdout"&&ce?.suppressOutputLine?.(b)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:b,level:z}),z==="stdout"&&this.emitToolEvents(i,e,v,b,g.id,n?.threadId??"","");},onTaskLog:b=>{this.emitTaskLogEntries(i,e,g.id,n?.threadId??"","",v,b);for(let z of b)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(z),level:"info"});},onCommand:b=>{V=b;},onUsage:b=>{$=b;},onExitCode:b=>{O=b;},onModel:b=>{D||(D=b);}});q=this._resolveEffectiveCost($,D,c),Y();let M=Date.now()-c,W={...n?.metadata??{},...n?.threadId?{threadId:n.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",result:x,durationMs:M,exitCode:O,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:D,metadata:Object.keys(W).length>0?W:void 0}),J=!0,{ok:!0,data:x,meta:{agentId:g.id,provider:v,model:h,durationMs:M,taskId:i}}}catch(x){q=this._resolveEffectiveCost($,D,c),Y();let M=Date.now()-c,W={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:M,error:W,exitCode:O,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:D,metadata:n?.metadata?{...n.metadata}:void 0}),J=!0,{ok:!1,data:"",error:W,meta:{agentId:g.id,provider:v,model:h,durationMs:M,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:O??-1,inputTokens:$?.inputTokens,outputTokens:$?.outputTokens,cachedInputTokens:$?.cachedInputTokens,costUsd:q,model:D}),this._activeTasks.delete(i),this._clearCallerIdentityOverride(i,l),Je();}})}finally{this._clearCallerIdentityOverride(i,l);}}};function vi(r,e){let t=Eo(r)?r:void 0,n=Eo(e)?e:void 0;if(!(!t&&!n))return {...t??{},...n??{}}}function Eo(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function Wc(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(!Eo(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 Fc(r){let e=Array.isArray(r.provider)?r.provider:[r.provider],t=r.options,n=[...e];for(let o of ["query","execute"]){let s=jr(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)?Ur(i.overdrive):void 0;a?.provider&&n.push(a.provider);}return n}async function xi(r,e,t){let n=r.flatMap(Fc);if(n.some(s=>s.startsWith("api/"))){let{registerApiProviders:s}=await Promise.resolve().then(()=>(ao(),di));s(t?.api);}await Bc(n,e),Hc(n,e),jc(n);}function jc(r){if(!r.some(n=>n.startsWith("acp/")))return;let{registerAcpProviders:t}=(mo(),Ho(gi));t();}async function Bc(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(()=>(wo(),mi)),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 Hc(r,e){if(!r.some(i=>i.startsWith("plugin/")))return;let n=e.providers;if(!Array.isArray(n))return;let{createPluginProviderFactory:o}=(_o(),Ho(_i)),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 Ao=class{detach(e){}};p();var qc="crewx:fs:",To=class{prefix;store;constructor(e){this.prefix=e?.prefix??qc,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 Mt="default",Dt="archive",Ei="wi-default-flow",zc="wi-plan-flow",Kc="wi-default-flow.yaml",Gc="wi-plan-flow.yaml",rn=/^[a-zA-Z0-9_-]{1,64}$/;function Ai(r){return r===Mt||r===Dt}function Vc(r){let e={id:Mt,name:"Default",workflowId:Ei,system:true,readOnly:false},t={id:Dt,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||Ai(d)||!rn.test(d)||o.has(d))continue;o.add(d);let f=typeof a.description=="string"?a.description:void 0,g=typeof a.goal_id=="string"?a.goal_id:void 0;s.push({id:d,name:l,workflowId:c,...f!==void 0?{description:f}:{},...g!==void 0?{goalId:g}:{},system:false,readOnly:false});}return [e,...s,t]}p();var ee=class extends Error{constructor(e){super(e),this.name="WiCreateError";}},Xc=300*1e3,Yc=300*1e3,Qc=1e4,Zc=50;function eu(r){return new Promise(e=>setTimeout(e,r))}function tu(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 ru(r){return r.normalize("NFKD").replace(/[^\x00-\x7F]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toUpperCase().slice(0,60)}function nu(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 Ti(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 Ri(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 bi(r){return (typeof r=="string"?r.trim().replace(/^@+/,""):"")||void 0}function Ci(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 Pi(r,e){let t=typeof r=="string"?r.trim():"";if(!t){if(e?.required)throw new ee("board is required");return}if(!rn.test(t))throw new ee("board must match ^[a-zA-Z0-9_-]{1,64}$");if(t===Dt)throw new ee(`board cannot be '${Dt}'`);return t}function Nt(r){return JSON.stringify(r)}function ou(r,e){return e.length===0?[`${r}: []`]:[`${r}:`,...e.map(t=>` - ${Nt(t)}`)]}async function su(r){let e=await Vs.promises.stat(r).catch(()=>null);e&&Date.now()-e.mtimeMs>Yc&&await Vs.promises.rm(r,{recursive:true,force:true}).catch(()=>{});}async function iu(r,e){let t=K.join(r,".wi-create.lock"),n=Date.now()+Qc;for(;Date.now()<n;)try{await Vs.promises.mkdir(t);try{return await e()}finally{await Vs.promises.rm(t,{recursive:!0,force:!0}).catch(()=>{});}}catch(o){if(o.code!=="EEXIST")throw o;await su(t),await eu(Zc);}throw new ee("WI create lock timeout: docs/wi/.wi-create.lock")}async function Si(r){let e=[],t=await Vs.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 Si(o)):n.isFile()&&n.name.endsWith(".md")&&e.push(n.name);}return e}async function au(r){let e=await Vs.promises.readdir(r).catch(n=>{if(n.code==="ENOENT")return [];throw n}),t=await Si(K.join(r,"archive"));return [...e,...t]}function du(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 lu(r,e){return r.some(t=>t===`${e}.md`||t.startsWith(`${e}-`))}async function cu(r,e){let t=K.join(r,`.wi-${e}.lock`);try{return await Vs.promises.writeFile(t,"",{flag:"wx"}),{claimed:!0,lockPath:t}}catch(n){if(n.code!=="EEXIST")throw n;return await Vs.promises.stat(t).then(s=>Date.now()-s.mtimeMs>Xc).catch(()=>false)&&await Vs.promises.unlink(t).then(()=>true).catch(()=>false)?(await Vs.promises.writeFile(t,"",{flag:"wx"}),{claimed:true,lockPath:t}):{claimed:false,lockPath:t}}}function uu(r){return {title:Ti(r.title),assignee:bi(r.assignee),body:(r.body??"").trim(),board:Pi(r.board),source:Ri(r.source),depends_on:Ci(r.depends_on)}}function pu(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 gu(r){let e=Pi(r.board,{required:true}),t=Ri(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:pu(o.key,s,n),title:Ti(o.title),assignee:bi(o.assignee),body:o.body.trim(),board:e,source:t,depends_on:Ci(o.depends_on)}})}function fu(r,e){return r.map(t=>e.get(t)??t)}function mu(r,e,t){let n=!!r.board&&r.board!==Mt,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:`---
|
|
310
|
+
${[`wi_id: ${e}`,`title: ${Nt(r.title)}`,`date: ${Nt(t)}`,"status: draft",...r.assignee?[`assignee: ${Nt(r.assignee)}`]:[],"priority: normal",`source: ${Nt(r.source)}`,...n?[`board: ${Nt(r.board)}`]:[],...ou("depends_on",r.depends_on)].join(`
|
|
311
311
|
`)}
|
|
312
312
|
---
|
|
313
313
|
|
|
314
314
|
${r.body}
|
|
315
|
-
`,frontmatter:o}}async function fi(r,e){let t=K.join(r,"docs","wi");return await Is.promises.mkdir(t,{recursive:true}),$c(t,async()=>{let{compact:n,iso:o}=Oc(new Date),s=`WI-${n}-`,i=await Uc(t),a=Wc(i,s),d=[],l=[];try{let c=[];for(let m of e){let k;for(let v=0;v<999;v++,a++){let h=`WI-${n}-${String(a).padStart(3,"0")}`;if(Fc(i,h))continue;let _=await jc(t,h);if(!_.claimed)continue;let E=Mc(m.title),T=E?`${h}-${E}.md`:`${h}.md`,C=K.resolve(t,T);if(Nc(t,C),await Is.promises.access(C).then(()=>!0,()=>!1)){await Is.promises.unlink(_.lockPath).catch(()=>{});continue}l.push(_.lockPath),k={item:m,wiId:h,filename:T,fullPath:C};break}if(!k)throw new ee("Failed to allocate a unique WI id");c.push(k),i.push(k.filename);}let f=new Map;for(let m of c)m.item.key&&f.set(m.item.key,m.wiId);let g=[];for(let m of c){let w=zc(m.item.depends_on,f),k={...m.item,depends_on:w},v=Kc(k,m.wiId,o);await Is.promises.writeFile(m.fullPath,v.raw,{encoding:"utf8",flag:"wx"}),d.push(m.fullPath);let h=await Is.promises.stat(m.fullPath);g.push({summary:{wi_id:m.wiId,title:k.title,status:"draft",priority:"normal",assignee:k.assignee,depends_on:w,blocks:[],date:o,board:k.board&&k.board!==It?k.board:void 0,source:k.source,screens:[],path:`docs/wi/${m.filename}`,mtime:h.mtimeMs},frontmatter:v.frontmatter,body:k.body});}return g}catch(c){throw await Promise.all(d.map(f=>Is.promises.unlink(f).catch(()=>{}))),c}finally{await Promise.all(l.map(c=>Is.promises.unlink(c).catch(()=>{})));}})}async function Gc(r,e){let[t]=await fi(r,[Bc(e)]);if(!t)throw new ee("Failed to create WI");return t}async function Vc(r,e){return {created:await fi(r,qc(e))}}p();var Jc=new Set(["draft","approved","in-progress"]);function Xc(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(f=>o.has(f.wi_id)).map(f=>[f.wi_id,f])),i=t.filter(f=>{let g=s.get(f);return g&&g.status!=="done"});if(i.length===0)return {done:true};for(let f of i){let g=s.get(f);if(g)for(let m of g.depends_on??[]){if(!o.has(m))continue;if(s.get(m)?.status==="cancelled")return {blocked:true,reason:`${f} depends on cancelled WI ${m}`}}}let a=new Map,d=new Map;for(let f of i)a.set(f,new Set),d.set(f,0);for(let f of i){let g=s.get(f);if(g)for(let m of g.depends_on??[])d.has(m)&&(a.get(m).add(f),d.set(f,(d.get(f)??0)+1));}let l=i.filter(f=>(d.get(f)??0)===0),c=[];for(let f=0;f<l.length;f++){let g=l[f];c.push(g);for(let m of a.get(g)??[]){let w=(d.get(m)??0)-1;d.set(m,w),w===0&&l.push(m);}}if(c.length!==i.length)return {cycle:i.filter(f=>(d.get(f)??0)>0)};for(let f of t){if(!i.includes(f)||n.has(f))continue;let g=s.get(f);if(!g||!Jc.has(g.status))continue;if(!(g.depends_on??[]).some(w=>{if(!o.has(w))return false;let k=s.get(w);return k?k.status!=="done":false}))return {pick:f}}return {done:true}}p();function ur(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function mi(r,e){let t={...r};for(let[n,o]of Object.entries(e))ur(o)&&ur(t[n])?t[n]=mi(t[n],o):t[n]=o;return t}function au(r){let e=r?.filePath??K.join(ko.homedir(),".crewx","crewx.yaml"),t=null,n=null;function o(){try{return Is.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(Is.readFileSync(e,"utf-8"));}catch{a=null;}let d=ur(a)?a:{};return n=d,t=i,d}return {get path(){return e},read(){let i=s();return ur(i.settings)?i.settings:{}},update(i){let a=s(),d=ur(a.settings)?a.settings:{},l=mi(d,i),c={...a,settings:l};Is.mkdirSync(K.dirname(e),{recursive:true});let f=`${e}.tmp`;return Is.writeFileSync(f,jsYaml.dump(c)),Is.renameSync(f,e),t=null,n=null,l}}}p();Ee();function fo(r){if(!r)return "";let e=r.lastIndexOf("/");return e===-1?r.trim():r.slice(e+1).trim()}function yi(r){return r?Rt(r).models.length>0:false}function mo(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function du(r,e,t){let n=r,o=false,s=[],i=()=>(o||(n={...r},o=true),n),a=typeof n.provider=="string"&&n.provider.trim()?fo(n.provider):e,d=typeof n.model=="string"&&n.model.trim()?n.model.trim():t;yi(a)&&(typeof n.mode=="string"&&(Ft(a).map(f=>f.id).includes(n.mode)||(delete i().mode,s.push("mode"))),typeof n.effort=="string"&&(jt(a,d).includes(n.effort)||(delete i().effort,s.push("effort"))));let l=n.overdrive;if(mo(l)){let c=fo(typeof l.provider=="string"?l.provider:void 0),f=typeof l.model=="string"?l.model:void 0;if(yi(c)){let g,m=()=>(g||(g={...l},i().overdrive=g),g);typeof l.mode=="string"&&(Ft(c).map(k=>k.id).includes(l.mode)||(delete m().mode,s.push("overdrive.mode"))),typeof l.effort=="string"&&(jt(c,f).includes(l.effort)||(delete m().effort,s.push("overdrive.effort")));}}return {block:n,removed:s}}function lu(r){let{options:e}=r;if(!mo(e))return {options:e,changed:false,removed:[]};let t=fo(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(!mo(d))continue;let{block:l,removed:c}=du(d,t,r.model);c.length>0&&(i()[a]=l,n.push(...c.map(f=>`${a}.${f}`)));}return {options:o,changed:n.length>0,removed:n}}p();var cu="https://api.crewx.dev/v1/models",uu=3600*1e3,hi=0;async function pu(r){let e=r?.ttlMs??uu,t=Date.now();if(!(t-hi<e)){hi=t;try{let n=await fetch(r?.endpoint??cu);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});os(s);}catch{}}}p();Ee();var gu="https://api.crewx.dev/v1/models",fu=900*1e3,wi=0;function Jr(r){return r!=null&&typeof r=="object"&&!Array.isArray(r)}function mu(r){return typeof r=="number"&&Number.isInteger(r)&&r>0}function _i(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 yu(r,e){let t=r.modelOverrides[e]?.effort;return Array.isArray(t)&&t.every(n=>typeof n=="string")?t:r.effort}function hu(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=_i(o.query),a=_i(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=yu(s,o.model);!l.includes(i.effort)||!l.includes(a.effort)||(t[n]={model:o.model,query:i,execute:a});}return t}async function wu(r){let e=r?.ttlMs??fu,t=Date.now();if(!(t-wi<e)){wi=t;try{let n=await fetch(r?.endpoint??gu);if(!n.ok){Wt({});return}let o=await n.json();if(!o?.providers||typeof o.providers!="object"){Wt({});return}let s={};for(let[i,a]of Object.entries(o.providers)){let d=Array.isArray(a)?a:a.models??[],l=Array.isArray(a)?[]:a.modes??[],c=Array.isArray(a)?[]:a.effort??[],f=Array.isArray(a)?{}:a.modelOverrides??{},g=d.filter(m=>m!=null&&typeof m.id=="string").map(m=>({id:m.id,name:m.name??m.id,...m.description!=null?{description:m.description}:{},...mu(m.contextWindowTokens)?{contextWindowTokens:m.contextWindowTokens}:{}}));s[i]={models:g,modes:l.filter(m=>m!=null&&typeof m.id=="string").map(m=>({id:m.id,name:m.name??m.id,...m.description!=null?{description:m.description}:{}})),effort:c.filter(m=>typeof m=="string"),modelOverrides:f};}ln(s),Wt(hu(o.defaults,s));}catch{Wt({});}}}p();function _u(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 yo=["codex","claude","opencode","antigravity","copilot"];function ku(r){let e=r.indexOf("/");return e===-1?r:r.slice(e+1)}function ho(r){let e=ku(r),t=yo.indexOf(e);return t===-1?yo.length:t}function pr(r,e){return ho(r)-ho(e)}var vu=new Set(["claude","copilot","codex","opencode"]);function xu(r){if(!r)return "";if(r.startsWith("acp/")){let e=r.slice(4);if(vu.has(e))return `cli/${e}`}return r}Ee();Re();Vn();Jn();p();Xn();Be();p();Br();Gr();Ee();var Eu="model",Au="mode",Ru="thought_level";function wo(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 Tu(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 bu(r,e,t,n){let o=t.agentInfo?.name,s=e??o??r,i=n.configOptions??[],d=(n.modes?.availableModes??[]).map(h=>({id:h.id,name:h.name,...h.description!=null?{description:h.description}:{}})),l=[];for(let h of i)if(h.category?.trim().toLowerCase()===Au&&h.options!=null)for(let _ of wo(h.options))_.value!=null&&l.push({id:_.value,name:_.name??_.value});let c=Tu(d,l),f=[];for(let h of i)if(h.category?.trim().toLowerCase()===Ru&&h.type==="select")for(let _ of wo(h.options??[]))_.value!=null&&f.push(_.value);if(r==="claude"){let h=Bt(),_=ki(t);return vi(r,{models:h,modes:c,availableModelsCount:0,configModelsCount:0,skipModelWarn:true}),{id:`acp/${r}`,name:s,modes:c,effort:f,models:h,capabilities:_}}let m=(n.models?.availableModels??[]).map(h=>({id:h.modelId})),w=[];for(let h of i)if(h.category?.trim().toLowerCase()===Eu&&h.options!=null)for(let _ of wo(h.options))_.value!=null&&w.push({id:_.value,..._.name!=null?{name:_.name}:{}});let k=Ht(m,w);vi(r,{models:k,modes:c,availableModelsCount:m.length,configModelsCount:w.length,skipModelWarn:false});let v=ki(t);return {id:`acp/${r}`,name:s,modes:c,effort:f,models:k,capabilities:v}}function ki(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 vi(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 xi(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 bu(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=>xi(n))),t=[];for(let n of e)n.status==="fulfilled"&&n.value!==null&&t.push(n.value);return t.sort((n,o)=>pr(n.id,o.id))}Br();Yn();Gr();ro();on();je();p();je();Ee();function Su(r){return r.charAt(0).toUpperCase()+r.slice(1)}async function Ei(){return new Promise(r=>{child_process.execFile("opencode",["models"],{timeout:5e3,maxBuffer:1048576},(t,n)=>{if(t){r([]);return}let o=n.split(`
|
|
316
|
-
`).map(s=>s.trim()).filter(s=>s.length>0).map(s=>({id:s}));r(o);}).on("error",()=>r([]));})}function
|
|
315
|
+
`,frontmatter:o}}async function Ii(r,e){let t=K.join(r,"docs","wi");return await Vs.promises.mkdir(t,{recursive:true}),iu(t,async()=>{let{compact:n,iso:o}=tu(new Date),s=`WI-${n}-`,i=await au(t),a=du(i,s),d=[],l=[];try{let c=[];for(let m of e){let _;for(let v=0;v<999;v++,a++){let h=`WI-${n}-${String(a).padStart(3,"0")}`;if(lu(i,h))continue;let k=await cu(t,h);if(!k.claimed)continue;let E=ru(m.title),R=E?`${h}-${E}.md`:`${h}.md`,C=K.resolve(t,R);if(nu(t,C),await Vs.promises.access(C).then(()=>!0,()=>!1)){await Vs.promises.unlink(k.lockPath).catch(()=>{});continue}l.push(k.lockPath),_={item:m,wiId:h,filename:R,fullPath:C};break}if(!_)throw new ee("Failed to allocate a unique WI id");c.push(_),i.push(_.filename);}let f=new Map;for(let m of c)m.item.key&&f.set(m.item.key,m.wiId);let g=[];for(let m of c){let w=fu(m.item.depends_on,f),_={...m.item,depends_on:w},v=mu(_,m.wiId,o);await Vs.promises.writeFile(m.fullPath,v.raw,{encoding:"utf8",flag:"wx"}),d.push(m.fullPath);let h=await Vs.promises.stat(m.fullPath);g.push({summary:{wi_id:m.wiId,title:_.title,status:"draft",priority:"normal",assignee:_.assignee,depends_on:w,blocks:[],date:o,board:_.board&&_.board!==Mt?_.board:void 0,source:_.source,screens:[],path:`docs/wi/${m.filename}`,mtime:h.mtimeMs},frontmatter:v.frontmatter,body:_.body});}return g}catch(c){throw await Promise.all(d.map(f=>Vs.promises.unlink(f).catch(()=>{}))),c}finally{await Promise.all(l.map(c=>Vs.promises.unlink(c).catch(()=>{})));}})}async function yu(r,e){let[t]=await Ii(r,[uu(e)]);if(!t)throw new ee("Failed to create WI");return t}async function hu(r,e){return {created:await Ii(r,gu(e))}}p();var wu=new Set(["draft","approved","in-progress"]);function _u(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(f=>o.has(f.wi_id)).map(f=>[f.wi_id,f])),i=t.filter(f=>{let g=s.get(f);return g&&g.status!=="done"});if(i.length===0)return {done:true};for(let f of i){let g=s.get(f);if(g)for(let m of g.depends_on??[]){if(!o.has(m))continue;if(s.get(m)?.status==="cancelled")return {blocked:true,reason:`${f} depends on cancelled WI ${m}`}}}let a=new Map,d=new Map;for(let f of i)a.set(f,new Set),d.set(f,0);for(let f of i){let g=s.get(f);if(g)for(let m of g.depends_on??[])d.has(m)&&(a.get(m).add(f),d.set(f,(d.get(f)??0)+1));}let l=i.filter(f=>(d.get(f)??0)===0),c=[];for(let f=0;f<l.length;f++){let g=l[f];c.push(g);for(let m of a.get(g)??[]){let w=(d.get(m)??0)-1;d.set(m,w),w===0&&l.push(m);}}if(c.length!==i.length)return {cycle:i.filter(f=>(d.get(f)??0)>0)};for(let f of t){if(!i.includes(f)||n.has(f))continue;let g=s.get(f);if(!g||!wu.has(g.status))continue;if(!(g.depends_on??[]).some(w=>{if(!o.has(w))return false;let _=s.get(w);return _?_.status!=="done":false}))return {pick:f}}return {done:true}}p();function hr(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function Oi(r,e){let t={...r};for(let[n,o]of Object.entries(e))hr(o)&&hr(t[n])?t[n]=Oi(t[n],o):t[n]=o;return t}function Su(r){let e=r?.filePath??K.join(So.homedir(),".crewx","crewx.yaml"),t=null,n=null;function o(){try{return Vs.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(Vs.readFileSync(e,"utf-8"));}catch{a=null;}let d=hr(a)?a:{};return n=d,t=i,d}return {get path(){return e},read(){let i=s();return hr(i.settings)?i.settings:{}},update(i){let a=s(),d=hr(a.settings)?a.settings:{},l=Oi(d,i),c={...a,settings:l};Vs.mkdirSync(K.dirname(e),{recursive:true});let f=`${e}.tmp`;return Vs.writeFileSync(f,jsYaml.dump(c)),Vs.renameSync(f,e),t=null,n=null,l}}}Tn();Sr();p();Ct();var Iu="https://api.crewx.dev/v1/models",Ou=3600*1e3,Mi=0;async function Mu(r){let e=r?.ttlMs??Ou,t=Date.now();if(!(t-Mi<e)){Mi=t;try{let n=await fetch(r?.endpoint??Iu);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});Zo(s);}catch{}}}p();Ee();Ct();fn();var Du="https://api.crewx.dev/v1/models",Nu=900*1e3,Di=0;function Lt(r){return r!=null&&typeof r=="object"&&!Array.isArray(r)}function Lu(r){return typeof r=="number"&&Number.isInteger(r)&&r>0}function $u(r){return typeof r=="string"&&Jo.includes(r)}function Uu(r){if(!Lt(r))return {};let e={};for(let[t,n]of Object.entries(r)){if(!Lt(n))continue;let o=n.input,s=n.output;typeof o!="number"||!Number.isFinite(o)||o<=0||typeof s!="number"||!Number.isFinite(s)||s<=0||(e[t]={inputPerMillionTokensUsd:o,outputPerMillionTokensUsd:s});}return e}function Ni(r){if(Lt(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 Wu(r,e){let t=r.modelOverrides[e]?.effort;return Array.isArray(t)&&t.every(n=>typeof n=="string")?t:r.effort}function Fu(r,e){if(!Lt(r)||r.version!==1||!Lt(r.providers))return {};let t={};for(let[n,o]of Object.entries(r.providers)){if(!/^cli\/[^/]+$/.test(n)||!Lt(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=Ni(o.query),a=Ni(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=Wu(s,o.model);!l.includes(i.effort)||!l.includes(a.effort)||(t[n]={model:o.model,query:i,execute:a});}return t}async function ju(r){let e=r?.ttlMs??Nu,t=Date.now();if(!(t-Di<e)){Di=t;try{let n=await fetch(r?.endpoint??Du);if(!n.ok){zt({});return}let o=await n.json();if(!o?.providers||typeof o.providers!="object"){zt({});return}let s={};for(let[i,a]of Object.entries(o.providers)){let d=Array.isArray(a)?a:a.models??[],l=Array.isArray(a)?[]:a.modes??[],c=Array.isArray(a)?[]:a.effort??[],f=Array.isArray(a)?{}:a.modelOverrides??{},g=d.filter(m=>m!=null&&typeof m.id=="string").map(m=>({id:m.id,name:m.name??m.id,...m.description!=null?{description:m.description}:{},...Lu(m.contextWindowTokens)?{contextWindowTokens:m.contextWindowTokens}:{},...$u(m.tier)?{tier:m.tier}:{},...m.recommended===!0?{recommended:!0}:{}}));s[i]={models:g,modes:l.filter(m=>m!=null&&typeof m.id=="string").map(m=>({id:m.id,name:m.name??m.id,...m.description!=null?{description:m.description}:{}})),effort:c.filter(m=>typeof m=="string"),modelOverrides:f};}_n(s),es(Uu(o.models)),zt(Fu(o.defaults,s));}catch{zt({});}}}p();function Bu(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 Ro=["codex","claude","opencode","antigravity","copilot"];function Hu(r){let e=r.indexOf("/");return e===-1?r:r.slice(e+1)}function bo(r){let e=Hu(r),t=Ro.indexOf(e);return t===-1?Ro.length:t}function wr(r,e){return bo(r)-bo(e)}var qu=new Set(["claude","copilot","codex","opencode"]);function zu(r){if(!r)return "";if(r.startsWith("acp/")){let e=r.slice(4);if(qu.has(e))return `cli/${e}`}return r}Ee();Te();io();ao();p();lo();Be();p();Xr();tn();Ee();var Ku="model",Gu="mode",Vu="thought_level";function Co(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 Ju(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 Xu(r,e,t,n){let o=t.agentInfo?.name,s=e??o??r,i=n.configOptions??[],d=(n.modes?.availableModes??[]).map(h=>({id:h.id,name:h.name,...h.description!=null?{description:h.description}:{}})),l=[];for(let h of i)if(h.category?.trim().toLowerCase()===Gu&&h.options!=null)for(let k of Co(h.options))k.value!=null&&l.push({id:k.value,name:k.name??k.value});let c=Ju(d,l),f=[];for(let h of i)if(h.category?.trim().toLowerCase()===Vu&&h.type==="select")for(let k of Co(h.options??[]))k.value!=null&&f.push(k.value);if(r==="claude"){let h=Xt(Vt()),k=Li(t);return $i(r,{models:h,modes:c,availableModelsCount:0,configModelsCount:0,skipModelWarn:true}),{id:`acp/${r}`,name:s,modes:c,effort:f,models:h,capabilities:k}}let m=(n.models?.availableModels??[]).map(h=>({id:h.modelId})),w=[];for(let h of i)if(h.category?.trim().toLowerCase()===Ku&&h.options!=null)for(let k of Co(h.options))k.value!=null&&w.push({id:k.value,...k.name!=null?{name:k.name}:{}});let _=Xt(Jt(m,w));$i(r,{models:_,modes:c,availableModelsCount:m.length,configModelsCount:w.length,skipModelWarn:false});let v=Li(t);return {id:`acp/${r}`,name:s,modes:c,effort:f,models:_,capabilities:v}}function Li(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 $i(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 Ui(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 Xu(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 Yu(){let r=Object.keys(exports.ACP_ADAPTERS),e=await Promise.allSettled(r.map(n=>Ui(n))),t=[];for(let n of e)n.status==="fulfilled"&&n.value!==null&&t.push(n.value);return t.sort((n,o)=>wr(n.id,o.id))}Xr();co();tn();mo();pn();je();p();je();Ee();function Zu(r){return r.charAt(0).toUpperCase()+r.slice(1)}async function Wi(){return new Promise(r=>{child_process.execFile("opencode",["models"],{timeout:5e3,maxBuffer:1048576},(t,n)=>{if(t){r([]);return}let o=n.split(`
|
|
316
|
+
`).map(s=>s.trim()).filter(s=>s.length>0).map(s=>({id:s}));r(o);}).on("error",()=>r([]));})}function ep(r,e,t){if(!e.meta)return null;let n=e.meta.capabilities??{},o=it(r),s=o.length>0?o:e.meta.models??[],i=t!==void 0?Jt(t,s):s,a=is(`cli/${r}`);return {id:`cli/${r}`,name:e.meta.displayName??Zu(r),modes:Kt(r),effort:Gt(r),models:Xt(i),modelOverrides:as(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 tp(r={}){let e=r.includeOpencodeRuntimeModels?await Wi():void 0,t=[];for(let[n,o]of Object.entries(exports.BUILTIN_ADAPTERS)){let i=ep(n,o,n==="opencode"?e:void 0);i&&t.push(i);}return t.sort((n,o)=>wr(n.id,o.id))}p();var Po=0;function rp(r){let e=r.meta?.taskId,t=e?` taskId=${e}`:"";if(r.ok)return `Task completed:${t}
|
|
317
317
|
|
|
318
318
|
${r.data}`;let n=r.error?.message??"Unknown error";return `Task failed:${t}
|
|
319
|
-
Error: ${n}`}function
|
|
319
|
+
Error: ${n}`}function np(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(Po>=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(", ")}`;Po++;try{let i=s==="execute"?await r.execute(n,o):await r.query(n,o);return rp(i)}finally{Po--;}}}}p();var Fi=typeof process<"u"?process.env:{};function op(){return Fi.CREWX_CLI||"npx crewx"}function sp(){return Fi.CREWX_WORKSPACE||(typeof process<"u"?process.cwd():"/")}p();function ip(){if(process.env.CREWX_HOME)try{return Vs__namespace.realpathSync(process.env.CREWX_HOME)}catch{return K__namespace.join(So__namespace.homedir(),".crewx")}return process.platform!=="win32"&&process.env.XDG_CONFIG_HOME?K__namespace.join(process.env.XDG_CONFIG_HOME,"crewx"):K__namespace.join(So__namespace.homedir(),".crewx")}p();p();var ie="[REDACTED]",Bi="[PATH]";function Io(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=dp(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,Bi),e=e.replace(/\b[A-Z]:\\(?:Users|home|Windows|Program Files|workspace|workspaces)\\[^\s"'`),;]*/gi,Bi),e=e.replace(/[\r\n]{3,}/g,`
|
|
320
320
|
|
|
321
|
-
`).trim(),
|
|
321
|
+
`).trim(),ap(e,1024)||void 0}function ap(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 dp(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=lp(r,s),a=i>=0?i:r.indexOf(`
|
|
322
322
|
`,s)>=0?r.indexOf(`
|
|
323
|
-
`,s):r.length;t+=r.slice(n,o.index),t+=`[HTTP BODY ${ie}]`,n=a;}return t+r.slice(n)}function Fu(r,e){let t=r[e];if(t==='"'||t==="'")return ju(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 ju(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 Bu=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"]),Hu={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"},qu=[{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 zu(r){try{if(!Ve(r)||r.status!=="failed")return xo();let e=Ku(r.error);if(Ro(e.message))return xo();let t=ge(r.providerId)??e.provider??null,n=Vu(r.logs),o=Ci(e.code);if(o)return gr(o,t,e.message,e);let s=Yr(e.providerCode)??Yr(e.code),i=s?Ao(s,e.message):void 0;if(i)return gr(i,t,e.message,e,s);let a=Ju(n);if(!Gu(e)&&a&&(a.type==="user_stop"||Ro(a.message)))return xo();if(a){let l=Xu(a.code,a.providerCode,a.message);if(l)return gr(l,t,a.message??e.message,e,a.providerCode??a.code,a,a.structuredFailure?"terminal":"envelope")}let d=Yu(e.message,n);return d?gr(d.code,t,d.message,e,d.terminal?.providerCode??d.terminal?.code,d.terminal,d.terminal?.structuredFailure?"terminal":"envelope"):gr("PROCESS_FAILED",t,e.message,e)}catch{return {errorCode:"PROCESS_FAILED",errorProvider:null}}}function xo(){return {errorCode:null,errorProvider:null}}function gr(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 f=e?.startsWith("cli/")?e.slice(4):void 0;f&&(a.cliName=f);}let d=i==="terminal"?t:n?.message,l=i==="terminal"?s?.structuredFailure?d:void 0:n?.isEnvelope?d:void 0,c=vo(l);return c&&(a.technicalMessage=c),Object.keys(a).length>0?{errorCode:r,errorProvider:e,errorMeta:a}:{errorCode:r,errorProvider:e}}function Ku(r){let e=typeof r=="string"?Dt(r):r;return Ve(e)?{isEnvelope:true,code:ge(e.code),providerCode:ge(e.providerCode),message:ge(e.message)??ge(e.error),provider:ge(e.provider)??ge(e.errorProvider),model:ge(e.model)}:{isEnvelope:false,...typeof r=="string"&&r.trim()?{message:r.trim()}:{}}}function Dt(r){try{return JSON.parse(r)}catch{return}}function Gu(r){return !!(r.code||r.providerCode||r.message)}function Vu(r){let e=[];if(typeof r=="string"){let t=Dt(r);if(Array.isArray(t))e.push(...t);else for(let n of r.split(/\r?\n/)){let o=Dt(n.trim());o!==void 0&&e.push(o);}}else Array.isArray(r)?e.push(...r):Ve(r)&&e.push(r);return e.flatMap(Nt)}function Nt(r){if(!Ve(r))return [];let e=ge(r.type),t=ge(r.message);if(t&&!e){let o=Dt(t);if(Array.isArray(o))return o.flatMap(Nt);if(Ve(o))return Nt(o);let s=t.split(/\r?\n/).map(i=>Dt(i.trim())).filter(i=>Ve(i));return s.length>0?s.flatMap(Nt):r.level==="stderr"?[{type:"stderr",message:t,rank:1,structuredFailure:false}]:Nt({type:"info",content:t})}if(e==="rate_limit_event"){let o=bi(r.rate_limit_info);return ge(o?.status)!=="rejected"?[]:[{type:e,code:"RATE_LIMITED",message:fr(o?.message,r.message),resetAt:Qu(o?.resetsAt),rank:4,structuredFailure:true}]}if(e==="turn.failed"||e==="error"){let o=bi(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=Dt(r.content);if(Ve(o))return Nt(o)}let n=fr(r.errorMessage,r.content);return n&&Ro(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 Ju(r){return [...r].sort((e,t)=>t.rank-e.rank)[0]}function Xu(r,e,t){let n=Ci(r);if(n)return n;if(r){let o=Ao(r,t);if(o)return o}if(e){let o=Ao(e,t);if(o)return o}return Eo(t)}function Yu(r,e){let t=Eo(r);if(t)return {code:t,message:r};for(let n of [...e].sort((o,s)=>s.rank-o.rank)){let o=Eo(n.message);if(o)return {code:o,message:n.message,terminal:n}}}function Eo(r){if(!(typeof r!="string"||!r.trim()))return qu.find(e=>e.pattern.test(r))?.code}function Ao(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 Hu[t]}function Ci(r){let e=Yr(r);return e&&Bu.has(e)?e:void 0}function Yr(r){return typeof r=="string"&&r.trim()?r.trim().toUpperCase():void 0}function Ro(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 bi(r){return Ve(r)?r:void 0}function ge(r){return typeof r=="string"&&r.trim()?r.trim():void 0}function Qu(r){return typeof r=="string"||typeof r=="number"&&Number.isFinite(r)?r:void 0}function fr(...r){return r.map(ge).find(e=>!!e)}p();var Zu=/^[a-zA-Z0-9._-]+$/,To=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(!Zu.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return lt("box")}};p();function ep(r,e,t,n,o){let{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}=n,d=s*i,l=s*a,c=d+l,f=e.getThreadMessages(r),g=[],m=0,w=false,k=[];for(let _=0;_<f.length;_+=2){let E=f[_],T=f[_+1],C=E?.content||"",V=T?.content||"",$=o.countTokens(C+V),I=[];E&&I.push(E),T&&I.push(T),k.push({messages:I,tokens:$});}for(let _=k.length-1;_>=0;_--){let E=k[_];if(m+E.tokens>d){w=true;break}m+=E.tokens,g.unshift(...E.messages);}let v=[],h=0;if(w&&l>0)try{let{boxes:_}=t.listBoxes(r);for(let E=_.length-1;E>=0;E--){let T=_[E],C=T.summaryTokens??T.sourceTokens;if(h+C>l)break;h+=C,v.unshift({boxId:T.id,seq:T.seq,taskCount:T.taskCount,sourceTokens:T.sourceTokens,summary:T.summary,previewFirst:T.previewFirst,previewMid:T.previewMid,previewLast:T.previewLast,createdAt:T.createdAt});}}catch(_){if(_ instanceof Error&&!/not found/i.test(_.message))throw _}return {hot:g,warm:v,hotTokens:m,warmTokens:h,hotOverflow:w,totalBudget:c,config:{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}}}je();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},yr=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,f=0,g=0,m=false,w=0,k=perf_hooks.performance.now(),v=async I=>{a?.onTaskStart&&await a.onTaskStart(I),g+=1;let N=new AbortController,le={signal:N.signal},Y,D;typeof s=="number"&&Number.isFinite(s)&&s>0&&(D=new Promise((H,j)=>{Y=setTimeout(()=>{let Q=new Qr(I.id,s);N.abort(Q),j(Q);},s);}));let Z=perf_hooks.performance.now(),U=I.run(le),ne=D?Promise.race([U,D]):U;try{let H=await ne,j=perf_hooks.performance.now(),Q=j-Z,J=d(H,I),q={taskId:I.id,success:J,value:H,durationMs:Q,startedAt:Z,finishedAt:j,metadata:I.metadata,aborted:!1};l.push(q),J?c+=1:f+=1,a?.onTaskComplete&&await a.onTaskComplete(q),i&&!J&&(m=!0);}catch(H){let j=perf_hooks.performance.now(),Q=j-Z,J=H instanceof Error?H:new Error(String(H)),q={taskId:I.id,success:false,error:J,durationMs:Q,startedAt:Z,finishedAt:j,metadata:I.metadata,aborted:N.signal.aborted};l.push(q),f+=1,a?.onError&&await a.onError(I,J,Q),i&&(m=true);}finally{Y&&clearTimeout(Y),D&&U.catch(()=>{});}},h=async()=>{for(;!m;){let I=w;if(I>=e.length)break;w+=1;let N=e[I];if(!N||(await v(N),m))break}},_=Math.min(o,e.length),E=[];for(let I=0;I<_;I++)E.push(h());await Promise.all(E);let C=perf_hooks.performance.now()-k,V=l.length?l.reduce((I,N)=>I+N.durationMs,0)/l.length:0,$=C>0?l.length/(C/1e3):l.length;return this.metrics={totalTasks:e.length,startedTasks:g,completedTasks:l.length,successCount:c,failureCount:f,totalDurationMs:C,averageDurationMs:V,throughput:$},l}getMetrics(){return this.metrics}mergeOptions(e){return {maxConcurrency:e.maxConcurrency??this.defaults.maxConcurrency,timeoutMs:e.timeoutMs??this.defaults.timeoutMs,failFast:e.failFast??this.defaults.failFast,evaluateTaskSuccess:e.evaluateTaskSuccess??this.defaults.evaluateTaskSuccess,callbacks:this.mergeCallbacks(this.defaults.callbacks,e.callbacks)}}mergeCallbacks(e,t){if(!(!e&&!t))return {onTaskStart:async 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 Pi=3,Si=3e4,Ii=500,tp=r=>{if(typeof r!="number"||Number.isNaN(r)||!Number.isFinite(r))return Pi;let e=Math.floor(r);return e>0?e:Pi},rp=r=>r===void 0||typeof r!="number"||Number.isNaN(r)||r<=0?Si:r,np=r=>{if(!r)return {maxRetries:0,retryDelay:Ii};let e=Number.isInteger(r.maxRetries)&&r.maxRetries>=0?r.maxRetries:0,t=typeof r.retryDelay=="number"&&r.retryDelay>=0?r.retryDelay:Ii;return {maxRetries:e,retryDelay:t}},bo=r=>{let e=r.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},op=(r,e)=>r<=0?Promise.resolve():new Promise((t,n)=>{let o=setTimeout(()=>{e.removeEventListener("abort",s),t();},r),s=()=>{clearTimeout(o),n(bo(e));};if(e.aborted){s();return}e.addEventListener("abort",s,{once:true});}),sp=async(r,e,t)=>{let n,o;for(let s=0;s<=e.maxRetries;s++){if(t.aborted)throw bo(t);try{let i=await r();if(n=i,i.success||s===e.maxRetries)return i}catch(i){if(o=i,t.aborted)throw bo(t);if(s===e.maxRetries)throw i instanceof Error?i:new Error(String(i))}s<e.maxRetries&&await op(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")},Oi=(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);}},ip=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}}}),ap=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")}}),dp=(r,e)=>({onTaskComplete:async t=>{Oi(e,r,t.success);},onError:async()=>{Oi(e,r,false);}}),Mi=async(r,e,t={})=>{if(!Array.isArray(r))throw new TypeError("Parallel helpers expect an array of requests");if(r.length===0){let v={total:0,completed:0,successCount:0,failureCount:0,results:[],errors:[],metrics:{totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0}};return t.onComplete?.(v),[]}let n=tp(t.concurrency),o=rp(t.timeout),s=np(t.retryPolicy),i=new yr,a=new hr,d=r.map((k,v)=>({id:`${e}:${k.agentId??"anonymous"}:${v}`,metadata:{index:v,mode:e,request:k},run:h=>sp(()=>e==="query"?a.query(k):a.execute(k),s,h.signal)})),l={completed:0,success:0,failure:0,total:r.length},c=await i.run(d,{maxConcurrency:n,timeoutMs:o,evaluateTaskSuccess:k=>k.success,callbacks:dp(l,t)}),f=ip(c),g=ap(c),m=i.getMetrics(),w={total:r.length,completed:r.length,successCount:f.filter(k=>k.success).length,failureCount:f.filter(k=>!k.success).length,results:f,errors:g,metrics:m};return t.onComplete?.(w),f},lp=(r,e)=>Mi(r,"query",e),cp=(r,e)=>Mi(r,"execute",e);io();p();var Co=class extends Ct{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);Is.existsSync(o)||Is.mkdirSync(o,{recursive:true});}else if(!Is.existsSync(t))throw new P("NOT_FOUND","Database not found");let n=_e(t);if(e)try{Lr(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 P?n:new P("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 P("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 P("DB_ERROR","Failed to find span by id",n)}finally{t.close();}}};so();oo();no();p();p();var Zr=class{capabilities={required:[]}};p();p();p();var Li=2e3;function $i(r){let e=r.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=Li?e:e.slice(0,Li-11)+" [redacted]"}var vp=10*1024*1024,xp={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function Po(r,e){return r===void 0?true:Array.isArray(r)?r.includes(e):r===e}function Ep(r,e){return r===void 0?true:Array.isArray(r)?r.some(t=>e.includes(t)):e.includes(r)}function Wi(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*(xp[n]??1))}function Fi(r){return typeof r=="string"}function ji(r){try{let e=Is.statSync(r);return e.size>vp?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${r} (${e.size} bytes)
|
|
324
|
-
`),null):
|
|
325
|
-
`).length}catch{return null}}function
|
|
323
|
+
`,s):r.length;t+=r.slice(n,o.index),t+=`[HTTP BODY ${ie}]`,n=a;}return t+r.slice(n)}function lp(r,e){let t=r[e];if(t==='"'||t==="'")return cp(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 cp(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 up=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"]),pp={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"},gp=[{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 fp(r){try{if(!Ve(r)||r.status!=="failed")return Oo();let e=mp(r.error);if(No(e.message))return Oo();let t=ge(r.providerId)??e.provider??null,n=hp(r.logs),o=qi(e.code);if(o)return _r(o,t,e.message,e);let s=on(e.providerCode)??on(e.code),i=s?Do(s,e.message):void 0;if(i)return _r(i,t,e.message,e,s);let a=wp(n);if(!yp(e)&&a&&(a.type==="user_stop"||No(a.message)))return Oo();if(a){let l=_p(a.code,a.providerCode,a.message);if(l)return _r(l,t,a.message??e.message,e,a.providerCode??a.code,a,a.structuredFailure?"terminal":"envelope")}let d=kp(e.message,n);return d?_r(d.code,t,d.message,e,d.terminal?.providerCode??d.terminal?.code,d.terminal,d.terminal?.structuredFailure?"terminal":"envelope"):_r("PROCESS_FAILED",t,e.message,e)}catch{return {errorCode:"PROCESS_FAILED",errorProvider:null}}}function Oo(){return {errorCode:null,errorProvider:null}}function _r(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 f=e?.startsWith("cli/")?e.slice(4):void 0;f&&(a.cliName=f);}let d=i==="terminal"?t:n?.message,l=i==="terminal"?s?.structuredFailure?d:void 0:n?.isEnvelope?d:void 0,c=Io(l);return c&&(a.technicalMessage=c),Object.keys(a).length>0?{errorCode:r,errorProvider:e,errorMeta:a}:{errorCode:r,errorProvider:e}}function mp(r){let e=typeof r=="string"?Ut(r):r;return Ve(e)?{isEnvelope:true,code:ge(e.code),providerCode:ge(e.providerCode),message:ge(e.message)??ge(e.error),provider:ge(e.provider)??ge(e.errorProvider),model:ge(e.model)}:{isEnvelope:false,...typeof r=="string"&&r.trim()?{message:r.trim()}:{}}}function Ut(r){try{return JSON.parse(r)}catch{return}}function yp(r){return !!(r.code||r.providerCode||r.message)}function hp(r){let e=[];if(typeof r=="string"){let t=Ut(r);if(Array.isArray(t))e.push(...t);else for(let n of r.split(/\r?\n/)){let o=Ut(n.trim());o!==void 0&&e.push(o);}}else Array.isArray(r)?e.push(...r):Ve(r)&&e.push(r);return e.flatMap($t)}function $t(r){if(!Ve(r))return [];let e=ge(r.type),t=ge(r.message);if(t&&!e){let o=Ut(t);if(Array.isArray(o))return o.flatMap($t);if(Ve(o))return $t(o);let s=t.split(/\r?\n/).map(i=>Ut(i.trim())).filter(i=>Ve(i));return s.length>0?s.flatMap($t):r.level==="stderr"?[{type:"stderr",message:t,rank:1,structuredFailure:false}]:$t({type:"info",content:t})}if(e==="rate_limit_event"){let o=Hi(r.rate_limit_info);return ge(o?.status)!=="rejected"?[]:[{type:e,code:"RATE_LIMITED",message:kr(o?.message,r.message),resetAt:vp(o?.resetsAt),rank:4,structuredFailure:true}]}if(e==="turn.failed"||e==="error"){let o=Hi(r.error),s=kr(o?.message,o?.detail,r.message,r.errorMessage,r.content),i=kr(o?.code,r.code,r.errorCode);return [{type:e,code:i,providerCode:kr(o?.providerCode,r.providerCode),message:s,rank:e==="turn.failed"?3:2,structuredFailure:true}]}if(e==="text"&&typeof r.content=="string"){let o=Ut(r.content);if(Ve(o))return $t(o)}let n=kr(r.errorMessage,r.content);return n&&No(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 wp(r){return [...r].sort((e,t)=>t.rank-e.rank)[0]}function _p(r,e,t){let n=qi(r);if(n)return n;if(r){let o=Do(r,t);if(o)return o}if(e){let o=Do(e,t);if(o)return o}return Mo(t)}function kp(r,e){let t=Mo(r);if(t)return {code:t,message:r};for(let n of [...e].sort((o,s)=>s.rank-o.rank)){let o=Mo(n.message);if(o)return {code:o,message:n.message,terminal:n}}}function Mo(r){if(!(typeof r!="string"||!r.trim()))return gp.find(e=>e.pattern.test(r))?.code}function Do(r,e){let t=on(r)??r;if(t==="MODEL_UNAVAILABLE")return /(?:capacity|overloaded|busy)/i.test(e??"")?"MODEL_AT_CAPACITY":"MODEL_NOT_SUPPORTED";if(t!=="UNKNOWN")return pp[t]}function qi(r){let e=on(r);return e&&up.has(e)?e:void 0}function on(r){return typeof r=="string"&&r.trim()?r.trim().toUpperCase():void 0}function No(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 Hi(r){return Ve(r)?r:void 0}function ge(r){return typeof r=="string"&&r.trim()?r.trim():void 0}function vp(r){return typeof r=="string"||typeof r=="number"&&Number.isFinite(r)?r:void 0}function kr(...r){return r.map(ge).find(e=>!!e)}p();var xp=/^[a-zA-Z0-9._-]+$/,Lo=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(!xp.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return pt("box")}};p();function Ep(r,e,t,n,o){let{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}=n,d=s*i,l=s*a,c=d+l,f=e.getThreadMessages(r),g=[],m=0,w=false,_=[];for(let k=0;k<f.length;k+=2){let E=f[k],R=f[k+1],C=E?.content||"",V=R?.content||"",$=o.countTokens(C+V),O=[];E&&O.push(E),R&&O.push(R),_.push({messages:O,tokens:$});}for(let k=_.length-1;k>=0;k--){let E=_[k];if(m+E.tokens>d){w=true;break}m+=E.tokens,g.unshift(...E.messages);}let v=[],h=0;if(w&&l>0)try{let{boxes:k}=t.listBoxes(r);for(let E=k.length-1;E>=0;E--){let R=k[E],C=R.summaryTokens??R.sourceTokens;if(h+C>l)break;h+=C,v.unshift({boxId:R.id,seq:R.seq,taskCount:R.taskCount,sourceTokens:R.sourceTokens,summary:R.summary,previewFirst:R.previewFirst,previewMid:R.previewMid,previewLast:R.previewLast,createdAt:R.createdAt});}}catch(k){if(k instanceof Error&&!/not found/i.test(k.message))throw k}return {hot:g,warm:v,hotTokens:m,warmTokens:h,hotOverflow:w,totalBudget:c,config:{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}}}je();tt();p();var sn=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},xr=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,f=0,g=0,m=false,w=0,_=perf_hooks.performance.now(),v=async O=>{a?.onTaskStart&&await a.onTaskStart(O),g+=1;let D=new AbortController,le={signal:D.signal},Y,N;typeof s=="number"&&Number.isFinite(s)&&s>0&&(N=new Promise((H,j)=>{Y=setTimeout(()=>{let Q=new sn(O.id,s);D.abort(Q),j(Q);},s);}));let Z=perf_hooks.performance.now(),U=O.run(le),ne=N?Promise.race([U,N]):U;try{let H=await ne,j=perf_hooks.performance.now(),Q=j-Z,J=d(H,O),q={taskId:O.id,success:J,value:H,durationMs:Q,startedAt:Z,finishedAt:j,metadata:O.metadata,aborted:!1};l.push(q),J?c+=1:f+=1,a?.onTaskComplete&&await a.onTaskComplete(q),i&&!J&&(m=!0);}catch(H){let j=perf_hooks.performance.now(),Q=j-Z,J=H instanceof Error?H:new Error(String(H)),q={taskId:O.id,success:false,error:J,durationMs:Q,startedAt:Z,finishedAt:j,metadata:O.metadata,aborted:D.signal.aborted};l.push(q),f+=1,a?.onError&&await a.onError(O,J,Q),i&&(m=true);}finally{Y&&clearTimeout(Y),N&&U.catch(()=>{});}},h=async()=>{for(;!m;){let O=w;if(O>=e.length)break;w+=1;let D=e[O];if(!D||(await v(D),m))break}},k=Math.min(o,e.length),E=[];for(let O=0;O<k;O++)E.push(h());await Promise.all(E);let C=perf_hooks.performance.now()-_,V=l.length?l.reduce((O,D)=>O+D.durationMs,0)/l.length:0,$=C>0?l.length/(C/1e3):l.length;return this.metrics={totalTasks:e.length,startedTasks:g,completedTasks:l.length,successCount:c,failureCount:f,totalDurationMs:C,averageDurationMs:V,throughput:$},l}getMetrics(){return this.metrics}mergeOptions(e){return {maxConcurrency:e.maxConcurrency??this.defaults.maxConcurrency,timeoutMs:e.timeoutMs??this.defaults.timeoutMs,failFast:e.failFast??this.defaults.failFast,evaluateTaskSuccess:e.evaluateTaskSuccess??this.defaults.evaluateTaskSuccess,callbacks:this.mergeCallbacks(this.defaults.callbacks,e.callbacks)}}mergeCallbacks(e,t){if(!(!e&&!t))return {onTaskStart:async 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 Er=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 zi=3,Ki=3e4,Gi=500,Ap=r=>{if(typeof r!="number"||Number.isNaN(r)||!Number.isFinite(r))return zi;let e=Math.floor(r);return e>0?e:zi},Tp=r=>r===void 0||typeof r!="number"||Number.isNaN(r)||r<=0?Ki:r,Rp=r=>{if(!r)return {maxRetries:0,retryDelay:Gi};let e=Number.isInteger(r.maxRetries)&&r.maxRetries>=0?r.maxRetries:0,t=typeof r.retryDelay=="number"&&r.retryDelay>=0?r.retryDelay:Gi;return {maxRetries:e,retryDelay:t}},$o=r=>{let e=r.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},bp=(r,e)=>r<=0?Promise.resolve():new Promise((t,n)=>{let o=setTimeout(()=>{e.removeEventListener("abort",s),t();},r),s=()=>{clearTimeout(o),n($o(e));};if(e.aborted){s();return}e.addEventListener("abort",s,{once:true});}),Cp=async(r,e,t)=>{let n,o;for(let s=0;s<=e.maxRetries;s++){if(t.aborted)throw $o(t);try{let i=await r();if(n=i,i.success||s===e.maxRetries)return i}catch(i){if(o=i,t.aborted)throw $o(t);if(s===e.maxRetries)throw i instanceof Error?i:new Error(String(i))}s<e.maxRetries&&await bp(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")},Vi=(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);}},Pp=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}}}),Sp=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")}}),Ip=(r,e)=>({onTaskComplete:async t=>{Vi(e,r,t.success);},onError:async()=>{Vi(e,r,false);}}),Ji=async(r,e,t={})=>{if(!Array.isArray(r))throw new TypeError("Parallel helpers expect an array of requests");if(r.length===0){let v={total:0,completed:0,successCount:0,failureCount:0,results:[],errors:[],metrics:{totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0}};return t.onComplete?.(v),[]}let n=Ap(t.concurrency),o=Tp(t.timeout),s=Rp(t.retryPolicy),i=new xr,a=new Er,d=r.map((_,v)=>({id:`${e}:${_.agentId??"anonymous"}:${v}`,metadata:{index:v,mode:e,request:_},run:h=>Cp(()=>e==="query"?a.query(_):a.execute(_),s,h.signal)})),l={completed:0,success:0,failure:0,total:r.length},c=await i.run(d,{maxConcurrency:n,timeoutMs:o,evaluateTaskSuccess:_=>_.success,callbacks:Ip(l,t)}),f=Pp(c),g=Sp(c),m=i.getMetrics(),w={total:r.length,completed:r.length,successCount:f.filter(_=>_.success).length,failureCount:f.filter(_=>!_.success).length,results:f,errors:g,metrics:m};return t.onComplete?.(w),f},Op=(r,e)=>Ji(r,"query",e),Mp=(r,e)=>Ji(r,"execute",e);_o();p();var Uo=class extends St{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);Vs.existsSync(o)||Vs.mkdirSync(o,{recursive:true});}else if(!Vs.existsSync(t))throw new P("NOT_FOUND","Database not found");let n=_e(t);if(e)try{qr(n.db,t);}catch(o){throw n.close(),o}return n}insertSpan(e){let t=this.openHandle(true);try{t.db.insert(mt).values(e).run();}catch(n){throw n instanceof P?n:new P("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(mt).where(drizzleOrm.eq(mt.task_id,e)).all()}catch(n){throw new P("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(mt).where(drizzleOrm.eq(mt.id,e)).limit(1).get()??void 0}catch(n){throw new P("DB_ERROR","Failed to find span by id",n)}finally{t.close();}}};wo();ho();yo();p();p();var an=class{capabilities={required:[]}};p();p();p();var Qi=2e3;function Zi(r){let e=r.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=Qi?e:e.slice(0,Qi-11)+" [redacted]"}var qp=10*1024*1024,zp={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function Wo(r,e){return r===void 0?true:Array.isArray(r)?r.includes(e):r===e}function Kp(r,e){return r===void 0?true:Array.isArray(r)?r.some(t=>e.includes(t)):e.includes(r)}function ta(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*(zp[n]??1))}function ra(r){return typeof r=="string"}function na(r){try{let e=Vs.statSync(r);return e.size>qp?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${r} (${e.size} bytes)
|
|
324
|
+
`),null):Vs.readFileSync(r,"utf8").split(`
|
|
325
|
+
`).length}catch{return null}}function oa(r){try{return Vs.statSync(r).size}catch{return null}}function Gp(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 Vp(r,e){return r?JSON.stringify(e).includes(r):true}function Jp(r,e){if(!r)return true;try{let t=new RegExp(r),n=JSON.stringify(e);return t.test(n)}catch{return false}}function Xp(r,e){if(!r)return true;try{let t=new RegExp(r),n=JSON.stringify(e);return t.test(n)}catch{return false}}function Yp(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(ra(r.pathSizeMin)){let o=oa(n);if(o===null||o<ta(r.pathSizeMin))return false}else {let o=na(n);if(o===null||o<r.pathSizeMin)return false}if(r.pathSizeMax!==void 0)if(ra(r.pathSizeMax)){let o=oa(n);if(o===null||o>ta(r.pathSizeMax))return false}else {let o=na(n);if(o===null||o>r.pathSizeMax)return false}return true}function Qp(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 jo=class extends an{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(`
|
|
326
326
|
|
|
327
|
-
`)):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
|
|
328
|
-
`;
|
|
329
|
-
`);}}firedFilePath(e){let t=crypto$1.createHash("sha1").update(e).digest("hex");return K.join(
|
|
327
|
+
`)):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=Zi(t.message).slice(0,500)));let o=`[${new Date().toISOString()}] HOOK: ${JSON.stringify(n)}
|
|
328
|
+
`;Vs.appendFileSync(e,o,{encoding:"utf8",mode:384});}catch{}}matchEntryLevel(e,t){if(e.provider!==void 0){let n=t.provider.replace(/^cli\//,"");if(!Wo(e.provider,n))return false}if(e.team!==void 0){let o=this.agentMap.get(t.agent.id)?.team??t.agent.team;if(!Wo(e.team,o))return false}if(e.role!==void 0){let o=this.agentMap.get(t.agent.id)?.role??t.agent.role;if(!Wo(e.role,o))return false}if(e.tag!==void 0){let o=this.agentMap.get(t.agent.id)?.tags??[];if(!Kp(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)||!Vp(e.pattern,t.tool.input)||!Jp(e.regex,t.tool.input)||!Gp(e.pathPattern,t.tool.input,t.cwd)||!Yp(e,t.tool.input)||!Xp(e.whenInputRegex,t.tool.input))}hasFired(e,t){try{let n=this.firedFilePath(e);if(!Vs.existsSync(n))return !1;let o=JSON.parse(Vs.readFileSync(n,"utf8"));return Array.isArray(o.fired)&&o.fired.includes(t)}catch{return false}}markFired(e,t){try{let n=this.firedFilePath(e);Vs.mkdirSync(K.dirname(n),{recursive:!0,mode:448});let o=Vs.existsSync(n)?JSON.parse(Vs.readFileSync(n,"utf8")):{fired:[]};Array.isArray(o.fired)||(o.fired=[]),o.fired.includes(t)||(o.fired.push(t),Vs.writeFileSync(n,JSON.stringify(o),{mode:384}));}catch(n){process.stderr.write(`[YamlHookPlugin] once state write failed: ${n}
|
|
329
|
+
`);}}firedFilePath(e){let t=crypto$1.createHash("sha1").update(e).digest("hex");return K.join(So.homedir(),".crewx","sessions",t,"fired-rules.json")}};p();p();p();function Zp(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 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;}};p();function eg(r){return r}function tg(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);}}}Tt();exports.ARCHIVE_WI_BOARD_ID=Dt;exports.AdapterError=Bo;exports.AgentNotFoundError=Pe;exports.AgentRuntime=Er;exports.AgentSkillsSchema=qo;exports.BrowserFsAdapter=To;exports.ConfigLoadError=Xe;exports.Crewx=xo;exports.CrewxPlugin=Ao;exports.DEFAULT_WI_BOARD_ID=Mt;exports.DEFAULT_WI_WORKFLOW_ID=Ei;exports.DocumentLoader=ct;exports.LayoutLoadError=ae;exports.LayoutLoader=rr;exports.LayoutRenderer=sr;exports.NodeFsAdapter=Br;exports.PROVIDER_ORDER=Ro;exports.ParallelRunner=xr;exports.ParallelRunnerTimeoutError=sn;exports.PropsValidationError=Me;exports.PropsValidator=or;exports.SdkBoxService=Lo;exports.SpanRepository=Uo;exports.TaskRepository=lr;exports.TemplateEngine=tr;exports.TypedEventEmitter=ir;exports.WI_BOARD_ID_PATTERN=rn;exports.WI_DEFAULT_FLOW_FILENAME=Kc;exports.WI_PLAN_FLOW_FILENAME=Gc;exports.WI_PLAN_WORKFLOW_ID=zc;exports.WiBoardSchema=ga;exports.WiCreateError=ee;exports.YamlHookPlugin=jo;exports.buildContext=Ep;exports.canonicalizeAgentOptions=za;exports.classifyTaskError=fp;exports.clearModelsOverride=Ba;exports.compareProviders=wr;exports.createAdapterContext=zn;exports.createDelegateTool=np;exports.createGlobalSettingsStore=Su;exports.createHandler=oo;exports.createPluginProviderFactory=wi;exports.createProvider=Oe;exports.createRemoteProviderFactory=fi;exports.createScopedAdapterStore=Hn;exports.createWorkInstruction=yu;exports.createWorkInstructionBatch=hu;exports.defaultExtractText=Xn;exports.defaultFsAdapter=lt;exports.defaultParseEvent=we;exports.defineChannelAdapter=eg;exports.defineChannelAdapterPlugin=tg;exports.escapeHandlebarsHelper=Un;exports.formatDisplayTimestamp=Fd;exports.formatFileSizeHelper=Wn;exports.formatTimestamp=Bn;exports.formatTimestampHelper=Fn;exports.generateFingerprint=Wd;exports.generateId=pt;exports.getAntigravityModels=xn;exports.getClaudeModels=Vt;exports.getCodexModels=kn;exports.getCopilotModels=vn;exports.getCrewxHome=ip;exports.getProviderModels=it;exports.getSyncWindowStore=Hd;exports.hashWorkspaceId=so;exports.initModelsRemote=ju;exports.initPricingRemote=Mu;exports.isReservedWiBoardId=Ai;exports.lengthHelper=$n;exports.loadYamlFile=Rr;exports.materializeWindowsSpawnProgram=et;exports.mergeAdditionalArgs=xs;exports.mergeModels=Jt;exports.normalizeClaudeMode=dt;exports.normalizeProviderId=zu;exports.normalizeWorkspacePath=oi;exports.parseOverdriveProfile=Ur;exports.parseOverdriveSignal=Wr;exports.parseStdoutEvent=Yt;exports.parseUsage=Se;exports.parseYamlContent=Tr;exports.providerRank=bo;exports.queryAcpProviderMeta=Ui;exports.queryAllAcpProviderMetas=Yu;exports.queryAllCliProviderMetas=tp;exports.queryOpencodeModels=Wi;exports.redactTechnicalMessage=Io;exports.registerAcpProviders=pi;exports.registerApiProviders=ai;exports.registerProviderFactory=Ie;exports.resolveAgent=br;exports.resolveAgentSkills=Bu;exports.resolveCatalogModelId=qt;exports.resolveCrewxCli=op;exports.resolveCrewxWorkspace=sp;exports.resolveDefaultAgentsYaml=un;exports.resolveOverdrive=Fr;exports.resolveTemplatesPath=Et;exports.resolveWiBoards=Vc;exports.resolveWindowsExecutablePath=Ta;exports.resolveWindowsSpawnProgram=Ze;exports.resolveWorkflowTemplatesPath=ka;exports.runExecutesParallel=Mp;exports.runInSyncWindow=qd;exports.runQueriesParallel=Op;exports.selectNextWi=_u;exports.setAuditVerbose=Ad;exports.setModelsOverride=_n;exports.toTaskReader=Zp;exports.toTemplateMessages=Jn;exports.truncateHelper=Ln;exports.validateHooksSchema=Qp;
|