@crewx/sdk 0.9.0-rc.38 → 0.9.0-rc.39
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/README.md +1 -1
- package/dist/esm/index.js +41 -40
- package/dist/facade/Crewx.d.ts +1 -0
- package/dist/index.browser.js +1 -1
- package/dist/index.js +44 -43
- package/dist/provider/errors.d.ts +1 -0
- package/dist/provider/parse-usage.d.ts +6 -0
- package/package.json +1 -1
- package/templates/agents/default.yaml +9 -8
- package/templates/documents/crewx-manual.md +138 -138
package/dist/index.js
CHANGED
|
@@ -1,58 +1,59 @@
|
|
|
1
|
-
'use strict';var
|
|
2
|
-
`))if(
|
|
1
|
+
'use strict';var Zo=require('fs'),B=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'),_e=require('handlebars'),promises=require('fs/promises'),crypto$1=require('crypto'),events=require('events'),async_hooks=require('async_hooks'),drizzleOrm=require('drizzle-orm'),La=require('os'),sqliteCore=require('drizzle-orm/sqlite-core'),mcp_js=require('@modelcontextprotocol/sdk/server/mcp.js'),webStandardStreamableHttp_js=require('@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js'),perf_hooks=require('perf_hooks');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var Zo__namespace=/*#__PURE__*/_interopNamespace(Zo);var B__namespace=/*#__PURE__*/_interopNamespace(B);var _e__namespace=/*#__PURE__*/_interopNamespace(_e);var La__default=/*#__PURE__*/_interopDefault(La);var Lr=Object.defineProperty;var Vs=Object.getOwnPropertyDescriptor;var Js=Object.getOwnPropertyNames;var Xs=Object.prototype.hasOwnProperty;var te=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var D=(n,e)=>()=>(n&&(e=n(n=0)),e);var tr=(n,e)=>{for(var t in e)Lr(n,t,{get:e[t],enumerable:true});},Ys=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Js(e))!Xs.call(n,o)&&o!==t&&Lr(n,o,{get:()=>e[o],enumerable:!(r=Vs(e,o))||r.enumerable});return n};var no=n=>Ys(Lr({},"__esModule",{value:true}),n);var u=D(()=>{});function ir(n){return typeof n!="string"?void 0:n.trim()||void 0}function ar(n){return ir(n)?.toLowerCase()??""}function ut(n){try{return Zo.statSync(n).isFile()}catch{return false}}function ci(n,e){if(n===e)return true;let t=B__namespace.default.relative(n,e);return t!==""&&!t.startsWith("..")&&!B__namespace.default.isAbsolute(t)}function ui(n,e){if(B__namespace.default.basename(n)!==".bin")return false;let t=B__namespace.default.dirname(n);if(B__namespace.default.basename(t)!=="node_modules")return false;let r=B__namespace.default.dirname(t);return ci(r,e)}function Et(n,e={}){if(n.includes("/")||n.includes("\\")||B__namespace.default.isAbsolute(n))return n;let t=e.platform??process.platform,r=e.env??process.env,o=B__namespace.default.resolve(e.cwd??process.cwd()),s=(e.resolution??"global_first")==="global_first",i=r.PATH??r.Path??process.env.PATH??process.env.Path??"",a=t==="win32"?";":":",d=i.split(a).map(m=>m.trim()).filter(Boolean),l=B__namespace.default.extname(n).length>0,p=r.PATHEXT??r.Pathext??process.env.PATHEXT??process.env.Pathext??".EXE;.CMD;.BAT;.COM",g=t==="win32"?l?[""]:p.split(";").map(m=>m.trim()).filter(Boolean).map(m=>m.startsWith(".")?m:`.${m}`):[""];for(let m of d){let f=B__namespace.default.resolve(o,m);if(!(s&&ui(f,o)))for(let v of g){let y=ar(v),k=v.toUpperCase();for(let _ of [v,y,k]){let w=B__namespace.default.join(f,`${n}${_}`);if(ut(w))return w}}}return n}function pi(n,e){return Et(n,{env:e,platform:"win32",resolution:"local_first"})}function gi(n){if(!ut(n))return null;try{let e=Zo.readFileSync(n,"utf8"),t=B__namespace.default.dirname(n),r=[];for(let a of e.matchAll(/"([^"\r\n]*)"/g)){let p=(a[1]??"").match(/%~?dp0%?\s*[\\/]*(.*)$/i)?.[1]?.trim();if(!p)continue;let g=p.replace(/[\\/]+/g,B__namespace.default.sep).replace(/^[\\/]+/,""),m=B__namespace.default.resolve(t,g);ut(m)&&r.push(m);}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,B__namespace.default.sep).replace(/^[\\/]+/,"");s.set(d,B__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&&ut(l)&&o.push(l);}let i=a=>a.find(d=>{let l=ar(B__namespace.default.basename(d));return l!=="node.exe"&&l!=="node"})??null;return i(o)??i(r)}catch{return null}}function fi(n,e){if(typeof e=="string")return ir(e)||null;if(!e||typeof e!="object")return null;if(n){let t=e[n],r=typeof t=="string"?ir(t):void 0;if(r)return r}for(let t of Object.values(e)){let r=typeof t=="string"?ir(t):void 0;if(r)return r}return null}function mi(n,e){if(!e)return null;let t=B__namespace.default.dirname(n),r=[B__namespace.default.resolve(t,"..",e),B__namespace.default.resolve(t,"node_modules",e)];for(let o of r){let s=B__namespace.default.join(o,"package.json");if(ut(s))try{let i=JSON.parse(Zo.readFileSync(s,"utf8")),a=fi(e,i.bin);if(!a)continue;let d=B__namespace.default.resolve(o,a);if(ut(d))return d}catch{}}return null}function hi(n){let e=n.platform??process.platform,t=n.env??process.env,r=n.execPath??process.execPath,o=n.cwd,s=n.resolution;if(e!=="win32")return {command:Et(n.command,{cwd:o,env:t,platform:e,resolution:s}),leadingArgv:[],resolution:"direct"};let i=Et(n.command,{cwd:o,env:t,platform:e,resolution:s}),a=ar(B__namespace.default.extname(i));if(a===".js"||a===".cjs"||a===".mjs")return {command:r,leadingArgv:[i],resolution:"node-entrypoint",windowsHide:true};if(a===".cmd"||a===".bat"){let d=gi(i)??mi(i,n.packageName);return d?ar(B__namespace.default.extname(d))===".exe"?{command:d,leadingArgv:[],resolution:"exe-entrypoint",windowsHide:true}:{command:r,leadingArgv:[d],resolution:"node-entrypoint",windowsHide:true}:{command:i,leadingArgv:[],resolution:"unresolved-wrapper"}}return {command:i,leadingArgv:[],resolution:"direct"}}function yi(n){if(n.candidate.resolution!=="unresolved-wrapper")return {command:n.candidate.command,leadingArgv:n.candidate.leadingArgv,resolution:n.candidate.resolution,windowsHide:n.candidate.windowsHide};if(n.allowShellFallback===true)return {command:n.candidate.command,leadingArgv:[],resolution:"shell-fallback",shell:true};throw new Error(`${B__namespace.default.basename(n.candidate.command)} wrapper resolved, but no executable/Node entrypoint could be resolved without shell execution.`)}function ze(n){let e=hi(n);return yi({candidate:e,allowShellFallback:n.allowShellFallback})}function Ke(n,e){return {command:n.command,argv:[...n.leadingArgv,...e],resolution:n.resolution,shell:n.shell,windowsHide:n.windowsHide}}var pt=D(()=>{u();});function wi(n){if(n.type!=="usage"||!("input_tokens"in n))return null;let e=Number(n.input_tokens??0),t=Number(n.output_tokens??0),o="cache_read_input_tokens"in n?Number(n.cache_read_input_tokens):void 0,s="cached_input_tokens"in n?Number(n.cached_input_tokens):void 0,i=o!==void 0?o:s??0;return {inputTokens:o!==void 0?e+o:e,outputTokens:t,cachedInputTokens:i}}function _i(n){let e=n.usage;if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(!("input_tokens"in t))return null;let r=Number(t.input_tokens??0),o=Number(t.output_tokens??0),i="cache_read_input_tokens"in t?Number(t.cache_read_input_tokens):void 0,a="cached_input_tokens"in t?Number(t.cached_input_tokens):void 0,d=i!==void 0?i:a??0;return {inputTokens:i!==void 0?r+i:r,outputTokens:o,cachedInputTokens:d}}function vi(n){if(n.type!=="step_finish")return null;let t=n.part?.tokens;if(!t)return null;let r=Number(t.input??0),o=Number(t.output??0),s=t.cache,i=s?Number(s.read??0):0;return {inputTokens:r+i,outputTokens:o,cachedInputTokens:i}}function ao(n){let e=new Map,t;for(let s of n.split(`
|
|
2
|
+
`))if(s.trim())try{let i=JSON.parse(s);if(i.type!=="assistant")continue;let a=i.message,d=a?.id,l=a?.usage;if(typeof d!="string"||!l)continue;let p=Number(l.input_tokens??0),g=Number(l.cache_read_input_tokens??0);e.set(d,{inputTokens:p+g,cachedInputTokens:g});let m=a?.model;typeof m=="string"&&m&&(t=m);}catch{}if(e.size===0)return;let r=0,o=0;for(let s of e.values())r+=s.inputTokens,o+=s.cachedInputTokens;return {inputTokens:r,cachedInputTokens:o,model:t}}function Ce(n){if(!n||!n.trim())return;let e=null,t=null;for(let r of n.split(`
|
|
3
|
+
`))if(r.trim())try{let o=JSON.parse(r),s=vi(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=wi(o)??_i(o);i&&(e=i);}catch{}return t||(e??void 0)}var Ge=D(()=>{u();});exports.ProviderError=void 0;var Ve,Je,Rt=D(()=>{u();exports.ProviderError=class extends Error{constructor(t,r,o){super(t);this.providerStr=r;this.name="ProviderError",this.code=o?.code??"UNKNOWN",this.kind=o?.kind??(this.code==="UNKNOWN"?"transient":void 0),this.retryAfterMs=o?.retryAfterMs;}providerStr;code;kind;retryAfterMs;stdout},Ve=class extends exports.ProviderError{constructor(e,t){super(e,t,{code:"TIMEOUT_IDLE",kind:"permanent"}),this.name="IdleTimeoutError";}},Je=class extends exports.ProviderError{constructor(e,t){super(e,t,{code:"TIMEOUT_TOTAL",kind:"permanent"}),this.name="TotalTimeoutError";}};});exports.RateLimitError=void 0;var Ur=D(()=>{u();Rt();exports.RateLimitError=class extends exports.ProviderError{name="RateLimitError";constructor(e,t="cli/claude"){super(e,t,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function de(n){return /crewx\s+(x|execute)\s/.test(n)}function le(n,e){let t=e.match(/@(\S+)/);return {timestamp:n,type:"agent_call",targetAgent:t?.[1]?.replace(/["']/g,""),toolInput:e}}var gt=D(()=>{u();});function ce(n){if(typeof n=="string")return n;if(!n||typeof n!="object")return JSON.stringify(n??{});let e=n;return typeof e.command=="string"?e.command:typeof e.file_path=="string"?e.file_path:typeof e.filePath=="string"?e.filePath:typeof e.path=="string"?e.path:typeof e.query=="string"?e.query:typeof e.pattern=="string"?e.pattern:typeof e.url=="string"?e.url:typeof e.prompt=="string"?e.prompt.length>200?e.prompt.slice(0,200)+"\u2026":e.prompt:typeof e.description=="string"?e.description:JSON.stringify(e)}var ft=D(()=>{u();});function dr(n){if(!n)return {};let e=n.match(/^(.+?)\[([^\]]+)\]$/);if(e){let t=e[2].toLowerCase();return ki.has(t)?{model:e[1],effort:e[2]}:{model:n}}return {model:n}}function lo(n){switch(n){case "agent-full-access":case "yolo":return ["--dangerously-bypass-approvals-and-sandbox"];case "read-only":case "plan":return ["--sandbox","read-only"];case "agent":return ["--sandbox","workspace-write"];default:return []}}function co(n){switch(n){case "agent-full-access":case "yolo":return ["--dangerously-bypass-approvals-and-sandbox"];case "read-only":case "plan":return ["-c","sandbox_mode=read-only"];case "agent":return ["-c","sandbox_mode=workspace-write"];default:return []}}function uo(n){return n?["-c",`model_reasoning_effort=${n}`]:[]}function po(n){if(!n)return [];let e=new Set(["acceptEdits","bypassPermissions","default","delegate","dontAsk","plan"]),t=n==="auto"?"default":n;return e.has(t)?["--permission-mode",t]:[]}function go(n){return n?new Set(["low","medium","high","xhigh","max"]).has(n)?["--effort",n]:[]:[]}var ki,jr=D(()=>{u();ki=new Set(["minimal","low","medium","high","xhigh","max"]);});var Fr,fo=D(()=>{u();Fr={claude:{models:[{id:"claude-fable-5",name:"Claude Fable 5"},{id:"claude-opus-5",name:"Claude Opus 5"},{id:"claude-sonnet-5",name:"Claude Sonnet 5"},{id:"claude-opus-4-8[1m]",name:"Claude Opus 4.8 (Extended)"},{id:"claude-opus-4-8",name:"Claude Opus 4.8"},{id:"claude-opus-4-7[1m]",name:"Claude Opus 4.7 (Extended)"},{id:"claude-opus-4-7",name:"Claude Opus 4.7"},{id:"claude-opus-4-6[1m]",name:"Claude Opus 4.6 (Extended)"},{id:"claude-opus-4-6",name:"Claude Opus 4.6"},{id:"claude-sonnet-4-6[1m]",name:"Claude Sonnet 4.6 (Extended)"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5"}],modes:[{id:"default",name:"Default"},{id:"acceptEdits",name:"Accept Edits"},{id:"plan",name:"Plan"},{id:"auto",name:"Auto"},{id:"dontAsk",name:"Don't Ask"},{id:"bypassPermissions",name:"Bypass Permissions"}],effort:["low","medium","high"],modelOverrides:{"claude-fable-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-sonnet-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-8[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-8":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-7[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-7":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-opus-4-6":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-haiku-4-5":{effort:[]}}},codex:{models:[{id:"gpt-5.6-sol",name:"GPT-5.6 Sol"},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra"},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna"},{id:"gpt-5.5",name:"GPT-5.5"},{id:"gpt-5.4",name:"GPT-5.4"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini"},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex"},{id:"gpt-5.3-codex-spark",name:"GPT-5.3 Codex Spark"}],modes:[{id:"agent",name:"Agent"},{id:"read-only",name:"Read Only"},{id:"plan",name:"Plan"},{id:"agent-full-access",name:"Agent Full Access"},{id:"yolo",name:"YOLO"}],effort:["minimal","low","medium","high"],modelOverrides:{"gpt-5.6-sol":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"xhigh"},"gpt-5.6-terra":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.6-luna":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.5":{effort:["minimal","low","medium","high","xhigh"],defaultEffort:"high"}}},copilot:{models:[{id:"auto",name:"Auto"},{id:"claude-sonnet-5",name:"Claude Sonnet 5"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"gpt-5.5",name:"GPT-5.5"},{id:"gpt-5.4",name:"GPT-5.4"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro"}],modes:[{id:"interactive",name:"Interactive"},{id:"plan",name:"Plan"},{id:"autopilot",name:"Autopilot"}],effort:["none","low","medium","high","xhigh","max"],modelOverrides:{}},antigravity:{models:[{id:"Gemini 3.5 Flash (Medium)",name:"Gemini 3.5 Flash (Medium)"},{id:"Gemini 3.5 Flash (High)",name:"Gemini 3.5 Flash (High)"},{id:"Gemini 3.5 Flash (Low)",name:"Gemini 3.5 Flash (Low)"},{id:"Gemini 3.1 Pro (Low)",name:"Gemini 3.1 Pro (Low)"},{id:"Gemini 3.1 Pro (High)",name:"Gemini 3.1 Pro (High)"},{id:"Claude Sonnet 4.6 (Thinking)",name:"Claude Sonnet 4.6 (Thinking)"},{id:"Claude Opus 4.6 (Thinking)",name:"Claude Opus 4.6 (Thinking)"},{id:"GPT-OSS 120B (Medium)",name:"GPT-OSS 120B (Medium)"}],modes:[],effort:[],modelOverrides:{}}},Object.fromEntries(Object.entries(Fr).map(([n,e])=>[n,e.models]));});function mo(){return {models:[],modes:[],effort:[],modelOverrides:{}}}function xi(n){return Array.isArray(n)?{models:n,modes:[],effort:[],modelOverrides:{}}:n?{models:n.models??[],modes:n.modes??[],effort:n.effort??[],modelOverrides:n.modelOverrides??{}}:mo()}function qr(n){Hr=Object.fromEntries(Object.entries(n).map(([e,t])=>[e,xi(t)]));}function Ai(){Hr={};}function Ye(n){return mt(n).models}function mt(n){return Hr[n]??Fr[n]??mo()}function Ct(n){return mt(n).modes}function Pt(n,e){let t=mt(n);return e?t.modelOverrides[e]?.effort??t.effort:t.effort}function ho(n){return mt(n).modelOverrides}function Tt(){return Ye("claude")}function Br(){return Ye("codex")}function Wr(){return Ye("copilot")}function zr(){return Ye("antigravity")}function bt(n,e){let t=new Map;for(let r of [...n,...e]){let o=t.get(r.id);(!o||!o.name&&r.name)&&t.set(r.id,r);}return Array.from(t.values())}var Hr,he=D(()=>{u();fo();Hr={};});function Ri(n){let t=n.message?.content;return Array.isArray(t)?t.map(r=>typeof r.text=="string"?r.text.trim():"").filter(Boolean).join(`
|
|
3
4
|
|
|
4
|
-
`):""}function
|
|
5
|
-
`):i=JSON.stringify(s),{timestamp:n,type:"tool_result",toolUseId:o,resultPreview:i,isError:r}}return null}var
|
|
6
|
-
`).filter(o=>o.trim()),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant"&&Array.isArray(s.message?.content))for(let i of s.message.content)i.type==="text"&&typeof i.text=="string"&&i.text.trim()&&t.push(i.text.trim());s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},extractFailure(n){try{let e=JSON.parse(n);if(e.type==="rate_limit_event"){let t=e.rate_limit_info??{};if(t.status==="rejected")return new exports.RateLimitError(`Claude rate limit: ${t.rateLimitType??"unknown"} (status: ${t.status})`)}if(e.error==="rate_limit"){let t=
|
|
7
|
-
`);for(let
|
|
8
|
-
`).filter(o=>o.trim()),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant.message"&&typeof s.data?.content=="string"){let i=s.data.content;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=Ce(n);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(n,e){let t;try{t=JSON.parse(n);}catch{return []}let r=t.type;if(!r)return [];if(!r.startsWith("tool.execution")&&!r.startsWith("assistant.")&&r!=="user.message")return [];let o=t.data;if(!o)return [];let s=e??new Date().toISOString(),i=o.toolCallId;if(r==="tool.execution_start"){let a=String(o.toolName||""),d=o.arguments,l=ce(d);return (a==="bash"||a==="Bash")&&de(l)?[le(s,l)]:[{timestamp:s,type:"tool_use",toolName:a,toolInput:l,...i&&{toolUseId:i}}]}if(r==="tool.execution_complete"){let a=o.error;if(a)return [{timestamp:s,type:"tool_result",isError:true,resultPreview:String(a.message||""),...i&&{toolUseId:i}}];let d=o.result,l=String(d?.content||"");return [{timestamp:s,type:"tool_result",resultPreview:l,isError:false,...i&&{toolUseId:i}}]}if(r==="assistant.message"){let a=String(o.content||"");return a?[{timestamp:s,type:"text",content:a}]:[]}return []}};});function
|
|
9
|
-
`).map(o=>o.trim()).filter(Boolean),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="item.completed"&&(s.item?.type==="message"||s.item?.type==="agent_message")&&typeof s.item?.text=="string"){let i=s.item.text;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=Ce(n);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(n,e){let t=e??new Date().toISOString(),r=[],o;try{JSON.parse(n),o=[n];}catch{o=
|
|
10
|
-
`).map(o=>o.trim()).filter(Boolean),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="text"&&typeof s.part?.text=="string"){let i=s.part.text;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=Ce(n);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(n,e){let t=e??new Date().toISOString(),r=[],o;try{JSON.parse(n),o=[n];}catch{o=
|
|
5
|
+
`):""}function Ci(n){let e=n.toLowerCase();return e.includes("out of extra usage")||e.includes("rate limit")||e.includes("quota")}function Pi(n,e){let t=e.type;if(t==="text"){let r=String(e.text||"");return r?{timestamp:n,type:"text",content:r}:null}if(t==="thinking"){let r=String(e.thinking||"");return {timestamp:n,type:"thinking",content:r||"(thinking)"}}if(t==="tool_use"){let r=String(e.name||""),o=e.id,s=e.input,i=ce(s);return r==="Bash"&&de(i)?le(n,i):{timestamp:n,type:"tool_use",toolUseId:o,toolName:r,toolInput:i}}if(t==="tool_result"){let r=!!e.is_error,o=e.tool_use_id,s=e.output??e.content??"",i;return typeof s=="string"?i=s:Array.isArray(s)?i=s.filter(a=>a.type==="text"&&typeof a.text=="string").map(a=>a.text).join(`
|
|
6
|
+
`):i=JSON.stringify(s),{timestamp:n,type:"tool_result",toolUseId:o,resultPreview:i,isError:r}}return null}var Ei;exports.claudeAdapter=void 0;var Kr=D(()=>{u();Ur();gt();ft();jr();he();Ge();Ei=new Set(["tool_progress"]),exports.claudeAdapter={command:"claude",meta:{displayName:"Claude",models:Tt(),capabilities:{resume:true}},buildArgs(n,e,t){let{model:r,effort:o}=dr(e.model),s=e.effort??o,i=po(e.mode),a=go(s),d=r?["--model",r]:[],l=e.resumeSessionId?["--resume",e.resumeSessionId]:[];if(e.additionalArgs!==void 0){let g=[...e.additionalArgs];return g.indexOf("-p")!==-1?{args:["--output-format","stream-json","--verbose",...l,...i,...a,...d,...g],stdinMessage:n}:{args:["--output-format","stream-json","--verbose",...l,...i,...a,...d,...g],stdinMessage:n}}return {args:["-p","--output-format","stream-json","--verbose",...l,...i,...a,...d],stdinMessage:n}},extractText(n){let e=n.split(`
|
|
7
|
+
`).filter(o=>o.trim()),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant"&&Array.isArray(s.message?.content))for(let i of s.message.content)i.type==="text"&&typeof i.text=="string"&&i.text.trim()&&t.push(i.text.trim());s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},extractFailure(n){try{let e=JSON.parse(n);if(e.type==="rate_limit_event"){let t=e.rate_limit_info??{};if(t.status==="rejected")return new exports.RateLimitError(`Claude rate limit: ${t.rateLimitType??"unknown"} (status: ${t.status})`)}if(e.error==="rate_limit"){let t=Ri(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(Ci(t))return new exports.RateLimitError(`Claude rate limit: ${t}`)}}catch{}return null},parseResultMeta(n){let e=n.split(`
|
|
8
|
+
`);for(let r of e)if(r.trim())try{let o=JSON.parse(r);if(o.type==="result"){let s=o.usage,i=s?{inputTokens:Number(s.input_tokens??0)+Number(s.cache_read_input_tokens??0),outputTokens:Number(s.output_tokens??0),cachedInputTokens:Number(s.cache_read_input_tokens??0),costUsd:Number(o.total_cost_usd??0)}:null,a=o.modelUsage,d=a?Object.keys(a)[0]??null:null;return {usage:i,model:d}}}catch{}let t=ao(n);return t?{usage:{inputTokens:t.inputTokens,outputTokens:0,cachedInputTokens:t.cachedInputTokens,costUsd:0},model:t.model??null}:{usage:null,model:null}},parseEvent(n,e){let t;try{t=JSON.parse(n);}catch{return []}let r=t.type;if(!r)return [];if(r!=="assistant"&&r!=="user")return [];let s=t.message?.content;if(!Array.isArray(s))return [];let i=e??new Date().toISOString(),a=[];for(let d of s){let l=Pi(i,d);l&&a.push(l);}return a},suppressOutputLine(n){let e=n.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?Ei.has(r):!1}catch{return false}}};});var Ti,bi;exports.copilotAdapter=void 0;var Gr=D(()=>{u();Ge();gt();ft();he();Ti=new Set(["interactive","plan","autopilot"]),bi=new Set(["none","low","medium","high","xhigh","max"]),exports.copilotAdapter={command:"copilot",meta:{displayName:"Copilot",models:Wr()},buildArgs(n,e,t){let r=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&r.push("--model",e.model),e.mode&&Ti.has(e.mode)&&r.push("--mode",e.mode),e.effort&&bi.has(e.effort)&&r.push("--effort",e.effort),{args:r,stdinMessage:n}},extractText(n){let e=n.split(`
|
|
9
|
+
`).filter(o=>o.trim()),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant.message"&&typeof s.data?.content=="string"){let i=s.data.content;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=Ce(n);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(n,e){let t;try{t=JSON.parse(n);}catch{return []}let r=t.type;if(!r)return [];if(!r.startsWith("tool.execution")&&!r.startsWith("assistant.")&&r!=="user.message")return [];let o=t.data;if(!o)return [];let s=e??new Date().toISOString(),i=o.toolCallId;if(r==="tool.execution_start"){let a=String(o.toolName||""),d=o.arguments,l=ce(d);return (a==="bash"||a==="Bash")&&de(l)?[le(s,l)]:[{timestamp:s,type:"tool_use",toolName:a,toolInput:l,...i&&{toolUseId:i}}]}if(r==="tool.execution_complete"){let a=o.error;if(a)return [{timestamp:s,type:"tool_result",isError:true,resultPreview:String(a.message||""),...i&&{toolUseId:i}}];let d=o.result,l=String(d?.content||"");return [{timestamp:s,type:"tool_result",resultPreview:l,isError:false,...i&&{toolUseId:i}}]}if(r==="assistant.message"){let a=String(o.content||"");return a?[{timestamp:s,type:"text",content:a}]:[]}return []}};});function Ii(n){let e=[],t=0,r=false,o=false,s=0;for(let a=0;a<n.length;a++){let d=n[a];if(o){o=false;continue}if(d==="\\"&&r){o=true;continue}if(d==='"'){r=!r;continue}if(!r){if(d==="{")t++;else if(d==="}"&&(t--,t===0)){let l=n.slice(s,a+1).trim();l&&e.push(l),s=a+1;}}}let i=n.slice(s).trim();return i&&e.push(i),e}function Oi(n){return n[0]==="exec"?n.slice(1):n}function Mi(n,e){let t=e.type;if(t==="command_execution"){let r=String(e.command||"");return de(r)?[le(n,r)]:[{timestamp:n,type:"tool_use",toolName:"Bash",toolInput:r}]}return t==="web_search"?[]:t==="file_change"?[]:[]}function Ni(n,e){let t=e.type;if(t==="message"||t==="text"){let r=e.content;if(Array.isArray(r))for(let o of r){let s=Di(n,o);if(s)return s}if(typeof e.text=="string")return {timestamp:n,type:"text",content:e.text}}if(t==="agent_message"&&typeof e.text=="string")return {timestamp:n,type:"text",content:e.text};if(t==="reasoning")return {timestamp:n,type:"text",content:String(e.text||"")};if(t==="command_execution"){let r=String(e.aggregated_output||e.output||""),o=!!e.is_error;return {timestamp:n,type:"tool_result",resultPreview:r,isError:o}}if(t==="tool_use"){let r=String(e.name||e.tool_name||""),o=e.input,s=ce(o);return r==="Bash"&&de(s)?le(n,s):{timestamp:n,type:"tool_use",toolName:r,toolInput:s}}if(t==="tool_result"){let r=!!e.is_error,o=String(e.output||e.content||"");return {timestamp:n,type:"tool_result",resultPreview:o,isError:r}}if(t==="web_search"){let r=e.action,o;if(r?.type==="search"){let s=r.queries;o=String(r.query||"")||(s?.length?s.join(", "):"")||String(e.query||"");}else o=e.query?"open: "+String(e.query):"";return o?{timestamp:n,type:"tool_use",toolName:"WebSearch",toolInput:o}:null}if(t==="file_change"){let r=e.changes;if(!Array.isArray(r)||r.length===0)return null;let o=r.map(i=>String(i.path||"")).filter(Boolean);if(o.length===0)return null;let s=o.length===1?o[0]:`${o.slice(0,2).join(", ")}${o.length>2?` (+${o.length-2})`:""}`;return {timestamp:n,type:"tool_use",toolName:"Edit",toolInput:s}}return null}function Di(n,e){let t=e.type;if(t==="text")return {timestamp:n,type:"text",content:String(e.text||"")};if(t==="tool_use"){let r=String(e.name||""),o=e.input,s=ce(o);return r==="Bash"&&de(s)?le(n,s):{timestamp:n,type:"tool_use",toolName:r,toolInput:s}}return null}var Si;exports.codexAdapter=void 0;var Vr=D(()=>{u();Ge();gt();ft();jr();he();Si=new Set(["turn.started","turn.completed","item.updated"]);exports.codexAdapter={command:"codex",meta:{displayName:"Codex",models:Br(),capabilities:{resume:true}},buildArgs(n,e,t){let{model:r,effort:o}=dr(e.model),s=e.effort??o,i=e.resumeSessionId?co(e.mode):lo(e.mode),a=uo(s),d=r?["-m",r]:[],l=Oi(e.additionalArgs??[]),g=l.includes("--json")||l.includes("--experimental-json")?[]:["--json"];return e.resumeSessionId?{args:["exec","resume",...g,...i,...a,...d,...l,e.resumeSessionId,"-"],stdinMessage:n}:{args:["exec",...g,...i,...a,...d,...l],stdinMessage:n}},extractText(n){let e=n.split(`
|
|
10
|
+
`).map(o=>o.trim()).filter(Boolean),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="item.completed"&&(s.item?.type==="message"||s.item?.type==="agent_message")&&typeof s.item?.text=="string"){let i=s.item.text;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=Ce(n);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(n,e){let t=e??new Date().toISOString(),r=[],o;try{JSON.parse(n),o=[n];}catch{o=Ii(n),o.length>1&&console.warn("[codex] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let s of o){let i;try{i=JSON.parse(s);}catch{continue}let a=i.type;if(!a||!a.startsWith("item.")&&!a.startsWith("turn.")&&!a.startsWith("thread."))continue;let d=i.item;if(d){if(a==="item.started"){r.push(...Mi(t,d));continue}if(a==="item.completed"){let l=Ni(t,d);l&&r.push(l);continue}}}return r},suppressOutputLine(n){let e=n.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?Si.has(r):!1}catch{return false}}};});function ji(n){return n?n==="default"||n==="build"?{agent:"build",skipPermissions:false}:n==="plan"?{agent:"plan",skipPermissions:false}:$i.has(n)?{agent:"build",skipPermissions:true}:{agent:Ui.has(n)?n:"build",skipPermissions:false}:{agent:void 0,skipPermissions:false}}function Fi(n){let e=[],t=0,r=false,o=false,s=0;for(let a=0;a<n.length;a++){let d=n[a];if(o){o=false;continue}if(d==="\\"&&r){o=true;continue}if(d==='"'){r=!r;continue}if(!r){if(d==="{")t++;else if(d==="}"&&(t--,t===0)){let l=n.slice(s,a+1).trim();l&&e.push(l),s=a+1;}}}let i=n.slice(s).trim();return i&&e.push(i),e}var Li,$i,Ui;exports.opencodeAdapter=void 0;var Jr=D(()=>{u();Ge();ft();Li=new Set(["step_start","step_finish"]),$i=new Set(["bypassPermissions","yolo","agent-full-access"]),Ui=new Set(["build","plan"]);exports.opencodeAdapter={command:"opencode",meta:{displayName:"OpenCode",capabilities:{resume:true}},buildArgs(n,e,t){let r=e.additionalArgs,o=r!==void 0?[...r]:["run"];o.includes("--format")||o.push("--format","json"),e.resumeSessionId&&!o.includes("-s")&&!o.includes("--session")&&o.push("-s",e.resumeSessionId);let{agent:s,skipPermissions:i}=ji(e.mode);o.includes("--agent")||s!==void 0&&o.push("--agent",s),t&&i&&!o.includes("--dangerously-skip-permissions")&&o.push("--dangerously-skip-permissions"),e.effort!==void 0&&!o.includes("--variant")&&o.push("--variant",e.effort),e.model&&o.push("--model",e.model);let a;return !t&&!e.env?.OPENCODE_PERMISSION&&(a={OPENCODE_PERMISSION:JSON.stringify({external_directory:"allow"})}),{args:o,stdinMessage:n,env:a}},extractText(n){let e=n.split(`
|
|
11
|
+
`).map(o=>o.trim()).filter(Boolean),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="text"&&typeof s.part?.text=="string"){let i=s.part.text;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=Ce(n);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(n,e){let t=e??new Date().toISOString(),r=[],o;try{JSON.parse(n),o=[n];}catch{o=Fi(n),o.length>1&&console.warn("[opencode] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let s of o){let i;try{i=JSON.parse(s);}catch{continue}let a=i.type;if(a){if(a==="text"){let l=i.part?.text;l&&r.push({timestamp:t,type:"text",content:l});continue}if(a==="tool_use"){let d=i.part;if(!d)continue;let l=String(d.tool||""),p=String(d.callID||""),g=d.state,m=String(g?.status||""),f=g?.input,v=ce(f);if(r.push({timestamp:t,type:"tool_use",toolName:l,toolUseId:p,toolInput:v}),m==="completed"&&g?.output!==void 0){let y=g.output,k=typeof y=="string"?y:JSON.stringify(y);r.push({timestamp:t,type:"tool_result",toolUseId:p,resultPreview:k,isError:false});}else m==="error"&&r.push({timestamp:t,type:"tool_result",toolUseId:p,resultPreview:String(g?.error||"tool error"),isError:true});continue}}}return r},suppressOutputLine(n){let e=n.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?Li.has(r):!1}catch{return false}}};});var Xr,Yr=D(()=>{u();Rt();he();Xr={command:"agy",meta:{displayName:"Antigravity",models:zr(),defaultTimeoutMs:{query:12e4,execute:3e5},defaultIdleMs:0},buildArgs(n,e,t){if(e.additionalArgs!==void 0){let o=[...e.additionalArgs];return o.includes("--print")||o.unshift("--print",n),e.model&&o.push("--model",e.model),o.push("--dangerously-skip-permissions"),{args:o}}let r=["--print",n,"--dangerously-skip-permissions"];return e.model&&r.push("--model",e.model),{args:r}},extractText(n){let e=n.trim();if(!e)throw new exports.ProviderError("Antigravity CLI returned empty output with exit code 0. agy may have hidden an auth/quota/model error in its log file; inspect ~/.gemini/antigravity-cli/log for details.","cli/antigravity",{code:"EMPTY_OUTPUT",kind:"transient"});return e},parseResultMeta(n){return {usage:null,model:null}},parseEvent(n,e){return []}};});var yo,wo=D(()=>{u();gt();ft();yo={parseEvent(n,e){let t;try{t=JSON.parse(n);}catch{return []}let r=t.type;if(!r)return [];if(r!=="message"&&r!=="tool_use"&&r!=="tool_result")return [];let o=e??new Date().toISOString();if(r==="message"){if(t.role!=="assistant")return [];let i=t.content;return i?[{timestamp:o,type:"text",content:i}]:[]}if(r==="tool_use"){let s=String(t.tool_name||""),i=t.tool_id,a=t.parameters,d=ce(a);return /^bash$/i.test(s)&&de(d)?[le(o,d)]:[{timestamp:o,type:"tool_use",toolName:s,toolUseId:i,toolInput:d}]}if(r==="tool_result"){let s=t.tool_id,i=String(t.output||""),a=t.status!=="success";return [{timestamp:o,type:"tool_result",toolUseId:s,resultPreview:i,isError:a}]}return []}};});function St(n,e,t){if(t){let r=exports.BUILTIN_ADAPTERS[t];if(r?.parseEvent)return r.parseEvent(e,n);let o=Hi[t];if(o?.parseEvent)return o.parseEvent(e,n)}for(let r of Object.values(exports.BUILTIN_ADAPTERS)){let o=r.parseEvent?.(e,n)??[];if(o.length>0)return o}return []}exports.BUILTIN_ADAPTERS=void 0;var Hi,Ne=D(()=>{u();Kr();Gr();Vr();Jr();Yr();wo();Kr();Gr();Vr();Jr();Yr();gt();exports.BUILTIN_ADAPTERS={codex:exports.codexAdapter,claude:exports.claudeAdapter,opencode:exports.opencodeAdapter,antigravity:Xr,copilot:exports.copilotAdapter},Hi={gemini:yo};});var ht,Qr=D(()=>{u();ht=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 _o(n,e){if(n===void 0||n==="")return e;let t=parseInt(n,10);return Number.isNaN(t)?e:t}function Zr(n=process.env){let e=n.CREWX_TIMEOUT_IDLE;if(e===void 0||e==="")return;let t=parseInt(e,10);if(!(!Number.isFinite(t)||t<=0))return t}function vo(n=process.env){return {queryMs:_o(n.CREWX_TIMEOUT_QUERY,288e5),executeMs:_o(n.CREWX_TIMEOUT_EXECUTE,288e5),idleMs:Zr(n)??6e5}}var gr=D(()=>{u();});function Bi(n){let e=n.split(`
|
|
11
12
|
`).filter(d=>d.trim()),t=[],r=[],o=[],s=[],i=[],a=null;for(let d of e)try{let l=JSON.parse(d);if(l.type==="assistant"&&Array.isArray(l.message?.content))for(let p of l.message.content)p.type==="text"&&typeof p.text=="string"&&p.text.trim()&&t.push(p.text.trim());if(l.type==="message"&&l.role==="assistant"&&l.delta===!0&&typeof l.content=="string"&&r.push(l.content),l.type==="assistant.message"&&typeof l.data?.content=="string"){let p=l.data.content;p.trim()&&o.push(p.trim());}if(l.type==="item.completed"&&(l.item?.type==="message"||l.item?.type==="agent_message")&&typeof l.item?.text=="string"){let p=l.item.text;p.trim()&&s.push(p.trim());}if(l.type==="text"&&typeof l.part?.text=="string"){let p=l.part.text;p.trim()&&i.push(p.trim());}l.type==="result"&&typeof l.result=="string"&&(a=l.result);}catch{}return t.length>0?t.join(`
|
|
12
13
|
|
|
13
14
|
`):r.length>0?r.join(""):o.length>0?o.join(`
|
|
14
15
|
|
|
15
16
|
`):s.length>0?s.join(`
|
|
16
17
|
|
|
17
|
-
`):i.length>0?i.join(""):a||n.trim()}function
|
|
18
|
-
`)
|
|
19
|
-
`);
|
|
18
|
+
`):i.length>0?i.join(""):a||n.trim()}function Wi(n){let e=Ce(n);return e?{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0}:null}function zi(n,e,t=process.platform){return n==="copilot"&&t==="win32"&&e instanceof exports.ProviderError&&e.message.includes('CLI command "copilot" not found')}function xo(n,e,t,r,o,s,i){return new Promise((a,d)=>{let l=o?.timeoutMs??288e5,p=o?.idleMs??6e5,g={...process.env,...o?.env??{}},m=o?.cwd??process.cwd(),f=ze({command:n,env:g,cwd:m,allowShellFallback:true}),v=Ke(f,e),y=child_process.spawn(v.command,v.argv,{env:g,cwd:o?.cwd,stdio:["pipe","pipe","pipe"],shell:v.shell??false,windowsHide:v.windowsHide,detached:process.platform!=="win32"});y.stdin.on("error",$=>{$.code!=="EPIPE"&&o?.onOutput?.(`stdin error: ${$.message}`,"stderr");}),s!==void 0&&y.stdin.write(s),y.stdin.end(),y.pid!==void 0&&o?.onPid?.(y.pid);let k=false,_=false,w=$=>{if(y.pid!==void 0)try{process.platform==="win32"?y.kill($):process.kill(-y.pid,$);}catch{}},A=()=>{w("SIGKILL");},M=setTimeout(()=>{k||(_=true,S?.stop(),w("SIGTERM"),setTimeout(A,It).unref());},l);M.unref();let S=p>0?new ht({timeoutMs:p,onIdle:()=>{if(k)return;k=true,clearTimeout(M),w("SIGTERM"),setTimeout(A,It).unref();let $=Math.round(p/6e4);X(new Ve(`${t} produced no output for ${$}m (idle timeout). Process killed. The CLI may be waiting on interactive input or stuck \u2014 check the prompt or retry.`,t));}}):null;S?.start();let Q=new string_decoder.StringDecoder("utf8"),R=new string_decoder.StringDecoder("utf8"),z="",ee="",U="",K="",X=$=>{$ instanceof Error&&($.stdout=z),d($);};y.stdout.on("data",$=>{S?.refresh();let Z=Q.write($);z+=Z,U+=Z;let G=U.split(`
|
|
19
|
+
`);U=G.pop()??"";for(let j of G)if(j.trim()&&(o?.onOutput?.(j,"stdout"),i?.extractFailure)){let F=i.extractFailure(j);if(F){k=true,clearTimeout(M),S?.stop(),w("SIGTERM"),setTimeout(A,It).unref(),X(F);return}}}),y.stderr.on("data",$=>{S?.refresh();let Z=R.write($);ee+=Z,K+=Z;let G=K.split(`
|
|
20
|
+
`);K=G.pop()??"";for(let j of G)j.trim()&&o?.onOutput?.(j,"stderr");}),y.on("error",$=>{k=true,clearTimeout(M),S?.stop(),$.code==="ENOENT"?X(new exports.ProviderError(`CLI command "${n}" not found. Is ${t} installed?`,t)):X(new exports.ProviderError(`Spawn error: ${$.message}`,t));}),y.on("close",($,Z)=>{if(k)return;k=true,clearTimeout(M),S?.stop();let G=Q.end(),j=R.end();G&&(z+=G,U+=G),j&&(ee+=j,K+=j),U.trim()&&o?.onOutput?.(U,"stdout"),K.trim()&&o?.onOutput?.(K,"stderr");let F=$??0;if(o?.onExitCode?.(F),_)return X(new Je(`Total runtime exceeded ${l}ms; process killed.`,t));if(Z)return X(new exports.ProviderError(`Process terminated by signal ${Z}`,t,{code:"PROVIDER_CRASHED",kind:"permanent"}));if(F!==0){if(i?.interpretExit){let Y=i.interpretExit(F,ee);if(Y){X(Y);return}}X(new exports.ProviderError(`Process exited with code ${F}: ${ee.slice(0,500)}`,t));return}let q;try{q=i?i.extractText(z):Bi(z);}catch(Y){X(Y instanceof Error?Y:new exports.ProviderError(String(Y),t));return}a({stdout:z,parsed:q});});})}function Pe(n,e){Ao.set(n,e);}function Te(n,e){let t=n.split("/");if(t.length!==2)throw new exports.ProviderError(`Invalid provider format: "${n}". Expected namespace/id (e.g., cli/claude)`,n);let[r,o]=t,s=Ao.get(r);if(s)return s(o,n);if(r==="cli"){let i=exports.BUILTIN_ADAPTERS[o];if(!i)throw new exports.ProviderError(`Unknown CLI provider id: "${o}". Supported: ${Object.keys(exports.BUILTIN_ADAPTERS).join(", ")}`,n);return new en(o,i,n,e)}throw new exports.ProviderError(`Unsupported provider namespace: "${r}". Register a factory with registerProviderFactory('${r}', factory).`,n)}function Eo(n,e,t){if(!n||!e)return n??{};let r=e({providerStr:t.providerStr,providerId:t.providerId,mode:n.mode});return r.length===0?n:{...n,additionalArgs:[...n.additionalArgs??[],...r]}}var It;exports.ClientToolCallRequiredError=void 0;var Ao,en,we=D(()=>{u();pt();Ge();Ne();Rt();Qr();gr();Rt();It=2e3;exports.ClientToolCallRequiredError=class extends Error{constructor(t,r){super(`Client tool call required: ${t.toolName}`);this.toolCall=t;this.continuationState=r;}toolCall;continuationState;name="ClientToolCallRequiredError"},Ao=new Map;en=class{constructor(e,t,r,o){this.providerId=e;this.adapter=t;this.providerStr=r;this.additionalArgsProvider=o;}providerId;adapter;providerStr;additionalArgsProvider;async execute(e,t){let r=this.composeMessage(e,t),o=this.applyAdditionalArgs(t),{args:s,stdinMessage:i,env:a}=this.adapter.buildArgs(r,o,true);o.onCommand?.(`${this.adapter.command} ${s.join(" ")}`);let d=a?{...o,env:{...o.env??{},...a}}:o,{stdout:l,parsed:p}=await this.runProcess(s,d,i);return this.handleResultMeta(l,o),p}async query(e,t){let r=this.composeMessage(e,t),o=this.applyAdditionalArgs(t),{args:s,stdinMessage:i,env:a}=this.adapter.buildArgs(r,o,false);o.onCommand?.(`${this.adapter.command} ${s.join(" ")}`);let d=a?{...o,env:{...o.env??{},...a}}:o,{stdout:l,parsed:p}=await this.runProcess(s,d,i);return this.handleResultMeta(l,o),p}applyAdditionalArgs(e){return Eo(e,this.additionalArgsProvider,{providerStr:this.providerStr,providerId:this.providerId})}composeMessage(e,t){return t?.systemPrompt?`${t.systemPrompt}
|
|
20
21
|
|
|
21
22
|
---
|
|
22
23
|
|
|
23
|
-
${e}`:e}async runProcess(e,t,r){try{return await xo(this.adapter.command,e,this.providerStr,this.providerId,t,r,this.adapter)}catch(o){if(
|
|
24
|
-
`);this.stderrBuffer=A.pop()??"";for(let b of A)b.trim()&&this.options.onStderr?.(b);}),this.proc=a;let d=this.options.idleMs??6e5;d>0&&(this.idlePromise=new Promise((_,w)=>{this.idleReject=w;}),this.idlePromise.catch(()=>{}),this.idleWatchdog=new ht({timeoutMs:d,onIdle:()=>{let _=Math.round(d/6e4),w=new
|
|
24
|
+
${e}`:e}async runProcess(e,t,r){try{return await xo(this.adapter.command,e,this.providerStr,this.providerId,t,r,this.adapter)}catch(o){if(zi(this.providerId,o)){let s=e[0]==="copilot"?e:["copilot",...e];try{return await xo("gh",s,this.providerStr,this.providerId,t,r,this.adapter)}catch(i){throw this.recoverPartialUsage(i,t),i}}throw this.recoverPartialUsage(o,t),o}}recoverPartialUsage(e,t){let r=e instanceof Error?e.stdout:void 0;typeof r=="string"&&r.length>0&&this.handleResultMeta(r,t);}handleResultMeta(e,t){if(!this.adapter.parseResultMeta){let i=Wi(e);i&&t?.onUsage&&t.onUsage(i);return}let{usage:r,model:o}=this.adapter.parseResultMeta(e);r&&t?.onUsage&&t.onUsage(r);let s=o??(this.providerId==="opencode"?t?.model??null:null);s&&t?.onModel&&t.onModel(s);}};});function wn(n){let e=n.update;if(e.sessionUpdate==="agent_message_chunk"){let t=e.content;if(t.type==="text"&&typeof t.text=="string")return t.text}return null}function pe(n,e){try{let t=JSON.parse(n);if(t!=null&&typeof t=="object"&&typeof t.type=="string"&&Ma.has(t.type)){let r=e??new Date().toISOString();return [{...t,timestamp:t.timestamp||r}]}}catch{}return []}var Ma,De=D(()=>{u();Ma=new Set(["text","tool_use","tool_result","error","running_instruction","agent_call"]);});var is,as;exports.VercelProviderRuntime=void 0;var Rn=D(()=>{u();we();is=10,as=50,exports.VercelProviderRuntime=class{config;constructor(e){this.config=e;}async query(e,t){return this._run(e,"query",t)}async execute(e,t){return this._run(e,"execute",t)}async _run(e,t,r){let{generateText:o,tool:s}=await import('ai'),i=this.convertTools(r?.tools??[],s),a=this.createModel(r?.model),d=Math.min(r?.maxSteps??this.config.maxSteps??is,as);try{let l=0,p=await o({model:a,system:r?.systemPrompt??void 0,prompt:e,tools:i,maxSteps:d,...this.config.temperature!==void 0&&{temperature:this.config.temperature},...this.config.maxTokens!==void 0&&{maxTokens:this.config.maxTokens},onStepFinish:m=>{if(l++,!!r?.onOutput){if(m.toolCalls&&m.toolCalls.length>0)for(let f of m.toolCalls)r.onOutput(JSON.stringify({type:"assistant",message:{content:[{type:"tool_use",id:f.toolCallId,name:f.toolName,input:f.args}]}}),"stdout");if(m.toolResults&&m.toolResults.length>0)for(let f of m.toolResults){let v=typeof f.result=="string"?f.result:JSON.stringify(f.result);r.onOutput(JSON.stringify({type:"user",message:{content:[{type:"tool_result",tool_use_id:f.toolCallId,output:v,is_error:!1}]}}),"stdout");}}}}),g=new Set((r?.tools??[]).filter(m=>!m.execute).map(m=>m.name));if(p.finishReason==="tool-calls"&&Array.isArray(p.toolCalls)&&p.toolCalls.length>0){let m=p.toolCalls.filter(f=>g.has(f.toolName));if(m.length>0){let f=m[0];throw new exports.ClientToolCallRequiredError({toolCallId:f.toolCallId,toolName:f.toolName,args:f.args},{userMessage:e,responseMessages:p.response?.messages??[],toolDefinitions:r?.tools??[],maxSteps:d,systemPrompt:r?.systemPrompt,modelOverride:r?.model})}}if(r?.onUsage&&p.usage){let m={inputTokens:p.usage.promptTokens??0,outputTokens:p.usage.completionTokens??0,cachedInputTokens:0,costUsd:0};r.onUsage(m);}return r?.onModel&&r.onModel(r.model??this.config.model),p.text??""}catch(l){throw l instanceof exports.ClientToolCallRequiredError?l:l.status===401?new exports.ProviderError(`Authentication failed for ${this.config.provider}. Check your API key.`,this.config.provider):l.status===429?new exports.ProviderError(`Rate limit exceeded for ${this.config.provider}.`,this.config.provider):new exports.ProviderError(`Provider error: ${l.message}`,this.config.provider)}}async continueWithToolResults(e,t,r){let{generateText:o,tool:s}=await import('ai'),i=this.convertTools(e.toolDefinitions,s),a=this.createModel(e.modelOverride),d=Math.min(e.maxSteps??this.config.maxSteps??is,as),l=[{role:"user",content:e.userMessage},...e.responseMessages,{role:"tool",content:t.map(p=>({type:"tool-result",toolCallId:p.toolCallId,toolName:p.toolName,result:typeof p.result=="string"?p.result:JSON.stringify(p.result)}))}];try{let p=await o({model:a,system:e.systemPrompt??void 0,messages:l,tools:i,maxSteps:d,...this.config.temperature!==void 0&&{temperature:this.config.temperature},...this.config.maxTokens!==void 0&&{maxTokens:this.config.maxTokens}}),g=new Set(e.toolDefinitions.filter(m=>!m.execute).map(m=>m.name));if(p.finishReason==="tool-calls"&&Array.isArray(p.toolCalls)&&p.toolCalls.length>0){let m=p.toolCalls.filter(f=>g.has(f.toolName));if(m.length>0){let f=m[0];throw new exports.ClientToolCallRequiredError({toolCallId:f.toolCallId,toolName:f.toolName,args:f.args},{userMessage:e.userMessage,responseMessages:[...e.responseMessages,{role:"tool",content:t.map(v=>({type:"tool-result",toolCallId:v.toolCallId,toolName:v.toolName,result:typeof v.result=="string"?v.result:JSON.stringify(v.result)}))},...p.response?.messages??[]],toolDefinitions:e.toolDefinitions,maxSteps:e.maxSteps,systemPrompt:e.systemPrompt,modelOverride:e.modelOverride})}}return r?.onUsage&&p.usage&&r.onUsage({inputTokens:p.usage.promptTokens??0,outputTokens:p.usage.completionTokens??0,cachedInputTokens:0,costUsd:0}),r?.onModel&&r.onModel(e.modelOverride??this.config.model),p.text??""}catch(p){throw p instanceof exports.ClientToolCallRequiredError?p:new exports.ProviderError(`Provider error: ${p.message}`,this.config.provider)}}convertTools(e,t){let{z:r}=te("zod"),o={};for(let s of e){let i=this.jsonSchemaToZod(s.parameters??{},r);s.execute?o[s.name]=t({description:s.description,parameters:i,execute:async a=>s.execute(a)}):o[s.name]=t({description:s.description,parameters:i});}return o}jsonSchemaToZod(e,t){if(!e||!e.properties)return t.object({});let r={},o=e.properties,s=e.required??[];for(let[i,a]of Object.entries(o)){let d;switch(a.type){case "string":d=t.string();break;case "number":d=t.number();break;case "integer":d=t.number().int();break;case "boolean":d=t.boolean();break;case "array":d=t.array(t.any());break;default:d=t.any();}a.description&&(d=d.describe(a.description)),s.includes(i)||(d=d.optional()),r[i]=d;}return t.object(r)}createModel(e){let{provider:t,apiKey:r,baseURL:o}=this.config,s=e||this.config.model;switch(t){case "api/openrouter":{let{createOpenAI:i}=te("@ai-sdk/openai");return i({apiKey:r||process.env.OPENROUTER_API_KEY,baseURL:o||"https://openrouter.ai/api/v1"})(s)}case "api/openai":{let{createOpenAI:i}=te("@ai-sdk/openai");return i({apiKey:r||process.env.OPENAI_API_KEY,...o&&{baseURL:o}})(s)}case "api/anthropic":{let{createAnthropic:i}=te("@ai-sdk/anthropic");return i({apiKey:r||process.env.ANTHROPIC_API_KEY,...o&&{baseURL:o}})(s)}case "api/google":{let{createGoogleGenerativeAI:i}=te("@ai-sdk/google");return i({apiKey:r||process.env.GOOGLE_API_KEY})(s)}default:throw new exports.ProviderError(`Unsupported API provider: ${t}`,t)}}};});var ls={};tr(ls,{registerApiProviders:()=>ds});function ds(n){Pe("api",(e,t)=>{let r=n?.apiKeys?.[e];return new exports.VercelProviderRuntime({provider:t,model:"",apiKey:r,maxSteps:n?.defaults?.maxSteps,temperature:n?.defaults?.temperature})});}var Cn=D(()=>{u();we();Rn();});exports.AcpProtocolError=void 0;var Pn=D(()=>{u();exports.AcpProtocolError=class extends Error{constructor(t,r,o){super(t);this.code=r;this.data=o;}code;data;name="AcpProtocolError"};});var Ud,jd,cs,us,Fd;exports.AcpConnection=void 0;var Pr=D(()=>{u();pt();Pn();we();Qr();gr();Ud=-32e3,jd=2e3,cs=3e4,us=1e4,Fd=8*36e5,exports.AcpConnection=class{constructor(e){this.options=e;}options;proc=null;sdkConnection=null;disposed=false;stderrBuffer="";collectedStderr="";pendingUpdateCallback=null;idleWatchdog=null;idleReject=null;idlePromise=null;authMethods=[];_initResponse=null;get initResponse(){return this._initResponse}async connect(e){if(this.disposed)throw new exports.ProviderError("AcpConnection has been disposed","acp");let t=this.options.spawn,r=process.platform==="win32"&&(t.shellOnWindows??true),o={...process.env,...this.options.env??{}},s=this.options.cwd??process.cwd(),i;try{let _=ze({command:t.command,env:o,cwd:s,allowShellFallback:r});i=Ke(_,t.args);}catch(_){throw new exports.ProviderError(_ instanceof Error?_.message:String(_),"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",_=>{let w=_.toString();this.collectedStderr+=w,this.stderrBuffer+=w;let A=this.stderrBuffer.split(`
|
|
25
|
+
`);this.stderrBuffer=A.pop()??"";for(let b of A)b.trim()&&this.options.onStderr?.(b);}),this.proc=a;let d=this.options.idleMs??6e5;d>0&&(this.idlePromise=new Promise((_,w)=>{this.idleReject=w;}),this.idlePromise.catch(()=>{}),this.idleWatchdog=new ht({timeoutMs:d,onIdle:()=>{let _=Math.round(d/6e4),w=new Ve(`acp produced no output for ${_}m (idle timeout). Process killed. The CLI may be waiting on interactive input or stuck \u2014 check the prompt or retry.`,"acp");this.idleReject?.(w),this.dispose();}}),this.idleWatchdog.start()),a.stdin.on("error",_=>{_.code!=="EPIPE"&&this.options.onStderr?.(`ACP stdin error: ${_.message}`);});let l=new WritableStream({write:_=>new Promise((w,A)=>{a.stdin.write(_,b=>{b?A(b):w();});}),close:()=>{a.stdin.end();}}),p=new ReadableStream({start:_=>{a.stdout.on("data",w=>{this.idleWatchdog?.refresh(),_.enqueue(new Uint8Array(w));}),a.stdout.on("end",()=>{_.close();}),a.stdout.on("error",w=>{_.error(w);});}}),g=sdk.ndJsonStream(l,p),m=this,f=new sdk.ClientSideConnection(_=>({requestPermission:async w=>{if(m.options.configOptions?.allow_all!==void 0){let A=w.options;if(Array.isArray(A)&&A.length>0)return {outcome:{outcome:"selected",optionId:(A.find(M=>M.kind==="allow_once")??A.find(M=>M.kind?.startsWith("allow_"))??A[0]).optionId}}}return {outcome:{outcome:"cancelled"}}},sessionUpdate:async w=>{m.pendingUpdateCallback?.(w);}}),g);this.sdkConnection=f;let v=new Promise((_,w)=>{a.on("error",A=>{if(A.code==="ENOENT"){let M=t.command==="npx"&&t.args.length>0?`@agentclientprotocol/${t.args[0]}`:t.command;w(new exports.ProviderError(`ACP command "${t.command}" not found. Is the ACP adapter installed? Try: npm install -g ${M}`,"acp"));}else w(new exports.ProviderError(`ACP spawn error: ${A.message}`,"acp"));});}),y=this.doInitialize(f,e),k=new Promise((_,w)=>{setTimeout(()=>{w(new exports.AcpProtocolError(`ACP connect timeout after ${cs}ms. The ACP adapter may not be installed or may require interactive setup.`));},cs).unref();});await Promise.race([y,k,v]);}async doInitialize(e,t){let r=await e.initialize({protocolVersion:1,clientCapabilities:{auth:{}},clientInfo:{name:t?.name??"crewx-sdk",version:t?.version??"0.8.4"}});this._initResponse=r,this.authMethods=r.authMethods??[];}async newSession(e){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");try{return await this.newSessionWithTimeout(e)}catch(t){if(!this.isAuthError(t))throw t;return await this.tryAuthenticate(),this.newSessionWithTimeout(e)}}async newSessionWithTimeout(e){return (await this.newSessionRawTimeout(e)).sessionId}async newSessionRaw(e){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");try{return await this.newSessionRawTimeout(e)}catch(t){if(!this.isAuthError(t))throw t;return await this.tryAuthenticate(),this.newSessionRawTimeout(e)}}async newSessionRawTimeout(e){let t=this.sdkConnection.newSession(e),r=new Promise((o,s)=>{setTimeout(()=>{s(new exports.AcpProtocolError(`ACP session/new timeout after ${us}ms`));},us).unref();});return Promise.race([t,r])}isAuthError(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code===Ud}async tryAuthenticate(){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected.","acp");let e=this.authMethods.find(r=>r.type==="env_var"&&this.hasEnvVarsFor(r));if(e){await this.sdkConnection.authenticate({methodId:e.id});return}let t=this.authMethods.map(r=>`${r.id} (${r.type??"agent"})`).join(", ");if(this.authMethods.length>0){let r=this.authMethods.filter(o=>o.type==="env_var");if(r.length>0){let o=r.flatMap(s=>(s.vars??[]).filter(i=>!i.optional&&!process.env[i.name]).map(i=>i.name));throw new exports.AcpProtocolError(`ACP authentication required. Missing environment variables: ${o.join(", ")}. Set them in your shell or crewx.yaml env block.`)}throw new exports.AcpProtocolError(`ACP authentication required but no supported method found. Available methods: ${t}. CrewX currently supports env_var authentication only.`)}throw new exports.AcpProtocolError("ACP agent requires authentication but advertised no auth methods.")}hasEnvVarsFor(e){return !e.vars||e.vars.length===0?true:e.vars.filter(t=>!t.optional).every(t=>!!process.env[t.name])}async setModel(e,t){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.unstable_setSessionModel({sessionId:e,modelId:t});}async setMode(e,t){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.setSessionMode({sessionId:e,modeId:t});}async setConfigOption(e,t,r){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.setSessionConfigOption({sessionId:e,configId:t,value:r});}async prompt(e,t,r,o){if(!this.sdkConnection||!this.proc)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");this.pendingUpdateCallback=r??null;let s=this.sdkConnection,i=this.proc,a=o??Fd,d=false,l=s.prompt({sessionId:e,prompt:t}).finally(()=>{d=true;}),p=new Promise((f,v)=>{setTimeout(()=>{s.cancel({sessionId:e}).catch(()=>{}),v(new Je(`ACP prompt timeout after ${a}ms`,"acp"));},a).unref();}),g=new Promise((f,v)=>{let y=(A,b,M)=>{if(d)return;let S=b!=null?`signal=${b}`:`code=${String(A)}`;v(new exports.ProviderError(`ACP process terminated unexpectedly (${S}) [${M}]: ${this.collectedStderr.slice(-500)}`,"acp"));},k=(A,b)=>y(A,b,"exit"),_=(A,b)=>y(A,b,"close");i.once("exit",k),i.once("close",_);let w=()=>{i.off("exit",k),i.off("close",_);};l.then(w,w);}),m=[l,p,g];this.idlePromise&&m.push(this.idlePromise);try{return await Promise.race(m)}finally{this.pendingUpdateCallback=null;}}async dispose(){if(this.disposed)return;this.disposed=true,this.idleWatchdog?.stop(),this.pendingUpdateCallback=null,this.sdkConnection=null;let e=this.proc;if(!e)return;this.proc=null,this.stderrBuffer.trim()&&(this.options.onStderr?.(this.stderrBuffer),this.stderrBuffer="");let t=e.pid,r=o=>{if(t!==void 0&&process.platform!=="win32")try{process.kill(-t,o);}catch{}else try{e.kill(o);}catch{}};await new Promise(o=>{let s=()=>{clearTimeout(i),o();};e.once("close",s),e.once("error",s);try{r("SIGTERM");}catch{s();return}let i=setTimeout(()=>{r("SIGKILL");},jd);});}get isConnected(){return !this.disposed&&this.sdkConnection!==null&&this.proc!==null}};});function ps(n,e){if(n!=null&&typeof n=="object"){let t=n;if(typeof t.command=="string")return t.command;if(typeof t.file_path=="string")return t.file_path;if(typeof t.filePath=="string")return t.filePath;if(typeof t.path=="string")return t.path;if(typeof t.query=="string")return t.query;if(typeof t.pattern=="string")return t.pattern;if(typeof t.url=="string")return t.url;if(Object.keys(t).length>0)return JSON.stringify(t)}if(e&&e.length>0)return e.map(t=>t.path).join(", ")}var Hd;exports.AcpProviderRuntime=void 0;var Tn=D(()=>{u();De();Pr();Hd={read:"Read",edit:"Edit",delete:"Delete",move:"Move",search:"Search",execute:"Bash",think:"Think",fetch:"WebFetch",switch_mode:"SwitchMode"};exports.AcpProviderRuntime=class{constructor(e,t,r){this.adapter=t;}adapter;async query(e,t){return this.runPrompt(e,t)}async execute(e,t){return this.runPrompt(e,t)}async dispose(){}async runPrompt(e,t){let{command:r,args:o}=this.adapter.spawn;t?.onCommand?.(`${r} ${o.join(" ")}`);let s=this.adapter.buildSpawnEnv?.(t?.model??""),i=s?{...t?.env,...s}:t?.env,a=new exports.AcpConnection({spawn:this.adapter.spawn,env:i,cwd:t?.cwd,timeoutMs:t?.timeoutMs,idleMs:t?.idleMs,onPid:t?.onPid,onStderr:d=>t?.onOutput?.(d,"stderr"),configOptions:t?.configOptions});try{await a.connect(this.adapter.clientInfo);let d=this.adapter.buildSessionParams({cwd:t?.cwd,env:t?.env,model:t?.model,systemPrompt:t?.systemPrompt}),l=await a.newSession(d);await this.applySessionOptions(a,l,t);let p=this.composePrompt(e,t),g=[],m=await a.prompt(l,p,f=>this.handleUpdate(f,t,g),t?.timeoutMs);return this.handleUsage(m,t),g.join("")}finally{await a.dispose().catch(()=>{});}}async applySessionOptions(e,t,r){if(r?.model&&r.model!=="default"&&!this.adapter.buildSpawnEnv){let o=this.adapter.buildEffortAction?.(r.effort??"",r.model);try{o?.type==="set_model"?await e.setModel(t,o.modelId):await e.setModel(t,r.model);}catch(s){console.warn(`[acp] setModel(${r.model}) failed: ${s instanceof Error?s.message:String(s)}`);}}if(r?.mode){let o=this.adapter.resolveMode?.(r.mode)??r.mode;if(o)try{await e.setMode(t,o);}catch(s){console.warn(`[acp] setMode(${o}) failed: ${s instanceof Error?s.message:String(s)}`);}}if(r?.effort){let o=this.adapter.buildEffortAction?.(r.effort,r.model);if(o&&o.type==="set_config_option")try{await e.setConfigOption(t,o.configId,o.value);}catch(s){console.warn(`[acp] setConfigOption(${o.configId}) effort failed: ${s instanceof Error?s.message:String(s)}`);}}if(r?.configOptions)for(let[o,s]of Object.entries(r.configOptions))try{await e.setConfigOption(t,o,s);}catch(i){console.warn(`[acp] setConfigOption(${o}) failed, retrying: ${i instanceof Error?i.message:String(i)}`);try{await new Promise(a=>setTimeout(a,500)),await e.setConfigOption(t,o,s);}catch(a){console.warn(`[acp] setConfigOption(${o}) retry failed: ${a instanceof Error?a.message:String(a)}`);}}}composePrompt(e,t){let r=[];return t?.systemPrompt?.trim()&&(r.push(t.systemPrompt),r.push("---")),t?.context&&(r.push(t.context),r.push("---")),r.push(e),[{type:"text",text:r.join(`
|
|
25
26
|
|
|
26
|
-
`)}]}handleUpdate(e,t,r){let o=e.update;if(o.sessionUpdate==="agent_message_chunk"){let s=null;this.adapter.extractTextFromUpdate?s=this.adapter.extractTextFromUpdate(e):s=
|
|
27
|
+
`)}]}handleUpdate(e,t,r){let o=e.update;if(o.sessionUpdate==="agent_message_chunk"){let s=null;this.adapter.extractTextFromUpdate?s=this.adapter.extractTextFromUpdate(e):s=wn(e),s!==null&&(r.push(s),t?.onOutput?.(s,"stdout"));}else if(o.sessionUpdate==="tool_call"){this.pushBlockBoundary(r);let s=new Date().toISOString(),i=o,a={title:i.title??"",kind:i.kind,rawInput:i.rawInput,rawOutput:i.rawOutput,locations:i.locations,_meta:i._meta},d=this.resolveToolCall(a),l={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:d.toolName,toolInput:d.toolInput};t?.onTaskLog?.([l]);}else if(o.sessionUpdate==="tool_call_update"){let s=new Date().toISOString(),i=o;if(i.status==="completed"||i.status==="failed"){let d=this.extractResultPreview(i.rawOutput),l={timestamp:s,type:"tool_result",toolUseId:i.toolCallId,resultPreview:d,isError:i.status==="failed"};t?.onTaskLog?.([l]);}else if(i.rawInput!=null&&typeof i.rawInput=="object"&&Object.keys(i.rawInput).length>0){this.pushBlockBoundary(r);let d={title:i.title??"",kind:i.kind,rawInput:i.rawInput,rawOutput:i.rawOutput,locations:i.locations,_meta:i._meta},l=this.resolveToolCall(d),p={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:l.toolName,toolInput:l.toolInput};t?.onTaskLog?.([p]);}}else o.sessionUpdate;}pushBlockBoundary(e){e.length===0||e[e.length-1].endsWith(`
|
|
27
28
|
|
|
28
29
|
`)||e.push(`
|
|
29
30
|
|
|
30
|
-
`);}resolveToolCall(e){let t=e._meta;if(t?.claudeCode?.toolName)return {toolName:t.claudeCode.toolName,toolInput:
|
|
31
|
-
`)}if(typeof e=="object"){let t=e;if(typeof t.formatted_output=="string")return t.formatted_output;if(typeof t.content=="string")return t.content;if(Array.isArray(t.content)){let r=this.extractResultPreview(t.content);if(r)return r}if(typeof t.output=="string")return t.output;if(typeof t.text=="string")return t.text;if(typeof t.message=="string")return t.message;if(t.result!=null){let r=this.extractResultPreview(t.result);if(r)return r}if(t.error!=null){let r=this.extractResultPreview(t.error);if(r)return r}}return JSON.stringify(e)}}handleUsage(e,t){if(!t?.onUsage)return;if(this.adapter.extractUsage){let o=this.adapter.extractUsage(e);if(o){t.onUsage(o);return}}let r=e.usage;r&&t.onUsage({inputTokens:r.inputTokens??0,outputTokens:r.outputTokens??0,cachedInputTokens:r.cachedReadTokens??0,costUsd:0});}};});exports.claudeAcpAdapter=void 0;var bn=D(()=>{u();De();exports.claudeAcpAdapter={spawn:{command:"npx",args:["-y","@agentclientprotocol/claude-agent-acp"],shellOnWindows:true},npmPackage:"@agentclientprotocol/claude-agent-acp",clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Claude",defaultMode:"default"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},extractUsage(n){let e=n.usage;return e?{inputTokens:(e.inputTokens??0)+(e.cachedReadTokens??0),outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"bypassPermissions",buildEffortAction(n){return n?{type:"set_config_option",configId:"effort",value:n}:null},buildSpawnEnv(n){if(!(!n||n==="default"))return {ANTHROPIC_MODEL:n}},resolveMode(n){return {yolo:"bypassPermissions"}[n]??n},parseEvent:pe};});exports.codexAcpAdapter=void 0;var In=D(()=>{u();De();exports.codexAcpAdapter={spawn:{command:"npx",args:["-y","@agentclientprotocol/codex-acp"],shellOnWindows:true},npmPackage:"@agentclientprotocol/codex-acp",clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Codex",defaultMode:"agent"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},extractUsage(n){let e=n.usage;return e?{inputTokens:(e.inputTokens??0)+(e.cachedReadTokens??0),outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"agent-full-access",buildEffortAction(n,e){if(!e)return null;let t=e.match(/^(.+?)\[([^\]]+)\]$/),r=t?t[1]:e,o=t?t[2]:void 0;return {type:"set_model",modelId:`${r}[${n||o||"medium"}]`}},resolveMode(n){return {yolo:"agent-full-access",default:"agent",plan:"read-only"}[n]??n},parseEvent:pe};});var kt;exports.copilotAcpAdapter=void 0;var On=D(()=>{u();De();kt="https://agentclientprotocol.com/protocol/session-modes",exports.copilotAcpAdapter={spawn:{command:"copilot",args:["--acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"GitHub Copilot"},buildSessionParams(n){return {cwd:n.cwd?H.resolve(n.cwd):process.cwd(),mcpServers:[]}},yoloModeId:`${kt}#autopilot`,buildEffortAction(n){return n?{type:"set_config_option",configId:"reasoning_effort",value:n}:null},resolveMode(n){return n.startsWith("https://")?n:{yolo:`${kt}#autopilot`,default:`${kt}#agent`,agent:`${kt}#agent`,plan:`${kt}#plan`,autopilot:`${kt}#autopilot`}[n]??null},parseEvent:pe};});exports.opencodeAcpAdapter=void 0;var Mn=D(()=>{u();De();exports.opencodeAcpAdapter={spawn:{command:"opencode",args:["acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"OpenCode"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},yoloModeId:void 0,buildEffortAction(n){return null},resolveMode(n){let e={default:"build"};return n==="yolo"?null:e[n]??n},parseEvent:pe};});exports.ACP_ADAPTERS=void 0;var Or=D(()=>{u();bn();In();On();Mn();bn();In();On();Mn();exports.ACP_ADAPTERS={codex:exports.codexAcpAdapter,claude:exports.claudeAcpAdapter,opencode:exports.opencodeAcpAdapter,copilot:exports.copilotAcpAdapter};});var gs={};tr(gs,{registerAcpProviders:()=>ps});function ps(n){if(n){Pe("acp",n);return}Pe("acp",(e,t)=>{let r=exports.ACP_ADAPTERS[e];if(!r)throw new exports.ProviderError(`Unknown ACP provider id: "${e}". Supported: ${Object.keys(exports.ACP_ADAPTERS).join(", ")}`,t);return new exports.AcpProviderRuntime(e,r,t)});}var Nn=D(()=>{u();we();Sn();Or();we();});function qd(n){if(!n)return n;let e=n.trim().replace(/\/+$/,"");return e.toLowerCase().endsWith("/mcp")?e.slice(0,-4):e}exports.McpHttpTransport=void 0;var Dn=D(()=>{u();exports.McpHttpTransport=class{endpoint;headers;timeoutMs;constructor(e){let t=qd(e.url);this.endpoint=`${t}/mcp`,this.headers={"Content-Type":"application/json",...e.headers??{}},e.apiKey&&(this.headers.Authorization=`Bearer ${e.apiKey}`),this.timeoutMs=e.timeoutMs??3e4;}async send(e){let t=new AbortController,r=setTimeout(()=>t.abort(),this.timeoutMs);try{let o=await fetch(this.endpoint,{method:"POST",headers:this.headers,body:JSON.stringify(e),signal:t.signal});if(clearTimeout(r),!o.ok){let a=await o.text();throw new Error(`HTTP ${o.status}: ${o.statusText}${a?` - ${a}`:""}`)}let s=o.headers.get("content-type");if(s?.includes("application/json"))return await o.json();let i=await o.text();return {jsonrpc:"2.0",id:e.id,error:{code:-32600,message:`Unexpected response content-type: ${s}`,data:i}}}catch(o){throw clearTimeout(r),o instanceof Error&&o.name==="AbortError"?new Error(`MCP-HTTP request timeout after ${this.timeoutMs}ms to ${this.endpoint}`):o}}async close(){}};});exports.RemoteAgentManager=void 0;var Ln=D(()=>{u();Dn();exports.RemoteAgentManager=class{logger;configs=new Map;transports=new Map;constructor(e={}){this.logger=e.logger??(()=>{});}loadConfig(e,t){this.validateConfig(t),this.configs.set(e,t),this.transports.set(e,new exports.McpHttpTransport({url:t.url,apiKey:t.apiKey,headers:t.headers,timeoutMs:t.timeoutMs})),this.logger(`Loaded remote agent config for: ${e}`,"debug");}loadConfigWithTransport(e,t,r){this.validateConfig(t),this.configs.set(e,t),this.transports.set(e,r),this.logger(`Loaded remote agent config for: ${e} (custom transport)`,"debug");}getConfig(e){return this.configs.get(e)}isRemoteAgent(e){return this.configs.has(e)}getRemoteAgentIds(){return Array.from(this.configs.keys())}async query(e,t){let r=this.requireConfig(e),o=r.tools?.query??"crewx_queryAgent",i={agentId:r.agentId??e,query:t.query};t.context&&(i.context=t.context),t.model&&(i.model=t.model),t.platform&&(i.platform=t.platform),t.messages?.length&&(i.messages=t.messages);try{let a=await this.callRemoteTool(e,o,i);return this.normalizeResponse(a)}catch(a){let d=a instanceof Error?a.message:String(a);throw this.logger(`Remote query failed for agent ${e}: ${d}`,"error"),a}}async execute(e,t){let r=this.requireConfig(e),o=r.tools?.execute??"crewx_executeAgent",i={agentId:r.agentId??e,task:t.task};t.context&&(i.context=t.context),t.model&&(i.model=t.model),t.platform&&(i.platform=t.platform),t.messages?.length&&(i.messages=t.messages);try{let a=await this.callRemoteTool(e,o,i);return this.normalizeResponse(a)}catch(a){let d=a instanceof Error?a.message:String(a);throw this.logger(`Remote execute failed for agent ${e}: ${d}`,"error"),a}}mapToolNames(e,t){let r=this.requireConfig(e);r.tools={query:t.query??r.tools?.query??"crewx_queryAgent",execute:t.execute??r.tools?.execute??"crewx_executeAgent"},this.logger(`Updated tool name mapping for agent ${e}`,"debug");}async clearConfigs(){for(let e of this.transports.values())await e.close();this.configs.clear(),this.transports.clear(),this.logger("Cleared all remote agent configurations","debug");}requireConfig(e){let t=this.configs.get(e);if(!t)throw new Error(`Agent ${e} is not configured as a remote agent`);return t}async callRemoteTool(e,t,r){let o=this.transports.get(e);if(!o)throw new Error(`No transport available for agent ${e}`);let s={jsonrpc:"2.0",id:`${t}-${Date.now()}`,method:"tools/call",params:{name:t,arguments:r}};this.logger(`Calling remote MCP tool ${t} for agent ${e}`,"debug");let i=await o.send(s);if(i.error)throw new Error(i.error.message||"MCP server returned an error");return i.result}normalizeResponse(e){if(!e)return {success:false,content:[{type:"text",text:"Remote agent returned no response."}]};let t=e;if(Array.isArray(t.content)&&t.content.length>0)return t;let r=t.response??t.implementation??t.message??t.output,o=typeof r=="string"?r:JSON.stringify(r??e,null,2);return {...t,content:[{type:"text",text:o}]}}validateConfig(e){if(!e.url)throw new Error("Remote agent configuration requires a URL");if(!e.url.startsWith("http://")&&!e.url.startsWith("https://"))throw new Error("Remote agent URL must start with http:// or https://");if(e.type!=="mcp-http")throw new Error(`Unsupported remote agent type: ${e.type}`)}};});var ms={};tr(ms,{RemoteProviderRuntime:()=>exports.RemoteProviderRuntime,createRemoteProviderFactory:()=>fs,resolveFileRemoteAgent:()=>Xd});function Vd(n){let e=Qo.readFileSync(n,"utf-8"),t=jsYaml.load(e);return {agents:Array.isArray(t?.agents)?t.agents:void 0}}function Jd(n){let e=Array.isArray(n.provider)?n.provider[0]:n.provider;return e||(Array.isArray(n.inline?.provider)?n.inline.provider[0]:n.inline?.provider)}function Xd(n,e=Vd,t=Qo.existsSync){let r=n.location.replace("file://","");if(!t(r))throw new Error(`Remote config file not found: ${r}`);if(!n.external_agent_id)throw new Error(`external_agent_id is required for file:// remote provider "${n.id}"`);let s=e(r).agents?.find(d=>d.id===n.external_agent_id);if(!s)throw new Error(`Agent "${n.external_agent_id}" not found in ${r}`);let i=Jd(s);if(!i)throw new Error(`Agent "${n.external_agent_id}" in ${r} has no provider configured`);if(i.startsWith("remote/"))throw new Error(`Chained remotes not allowed: ${n.id} \u2192 ${i}`);let a=H.resolve(H.dirname(r),s.working_directory??".");return {agent:{...s,working_directory:a},provider:i}}function fs(n,e=Te){return (t,r)=>{let o=n.get(t);if(!o)throw new Error(`Remote provider "${t}" not found. Available: ${Array.from(n.keys()).join(", ")||"(none)"}`);if(o.location.startsWith("file://"))throw new Error(`Remote provider "${t}" uses file:// location which is not supported at the SDK level. Use the CLI commands (crewx query / crewx execute) which handle file:// remotes automatically.`);return new exports.RemoteProviderRuntime(t,o,e)}}function Yd(n,e){let t=e.location;if(!t)throw new Error("Remote provider config requires a location");if(!t.startsWith("http://")&&!t.startsWith("https://"))throw new Error(`Unsupported remote location protocol for MCP-HTTP: ${t}`);return {type:"mcp-http",url:t,apiKey:e.apiKey,headers:e.headers,timeoutMs:e.timeout?.query??3e4,agentId:e.external_agent_id??n}}exports.RemoteProviderRuntime=void 0;var $n=D(()=>{u();we();Ln();exports.RemoteProviderRuntime=class{manager;agentId;constructor(e,t,r=Te){this.agentId=t.external_agent_id??e,this.manager=new exports.RemoteAgentManager;let o=Yd(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:ps(e.rawInput,e.locations)??(e.title||void 0)};if(this.adapter.parseToolCall){let s=this.adapter.parseToolCall(e);if(s)return {toolName:s.toolName??e.title??"unknown",toolInput:s.toolInput}}let r=Hd[e.kind??""]??e.title??"unknown",o=ps(e.rawInput,e.locations)??(e.title||void 0);return {toolName:r,toolInput:o}}extractResultPreview(e){if(e!=null){if(typeof e=="string")return e;if(Array.isArray(e)){let t=e.filter(r=>r!=null&&typeof r=="object"&&r.type==="text"&&typeof r.text=="string").map(r=>r.text);if(t.length>0)return t.join(`
|
|
32
|
+
`)}if(typeof e=="object"){let t=e;if(typeof t.formatted_output=="string")return t.formatted_output;if(typeof t.content=="string")return t.content;if(Array.isArray(t.content)){let r=this.extractResultPreview(t.content);if(r)return r}if(typeof t.output=="string")return t.output;if(typeof t.text=="string")return t.text;if(typeof t.message=="string")return t.message;if(t.result!=null){let r=this.extractResultPreview(t.result);if(r)return r}if(t.error!=null){let r=this.extractResultPreview(t.error);if(r)return r}}return JSON.stringify(e)}}handleUsage(e,t){if(!t?.onUsage)return;if(this.adapter.extractUsage){let o=this.adapter.extractUsage(e);if(o){t.onUsage(o);return}}let r=e.usage;r&&t.onUsage({inputTokens:r.inputTokens??0,outputTokens:r.outputTokens??0,cachedInputTokens:r.cachedReadTokens??0,costUsd:0});}};});exports.claudeAcpAdapter=void 0;var bn=D(()=>{u();De();exports.claudeAcpAdapter={spawn:{command:"npx",args:["-y","@agentclientprotocol/claude-agent-acp"],shellOnWindows:true},npmPackage:"@agentclientprotocol/claude-agent-acp",clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Claude",defaultMode:"default"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},extractUsage(n){let e=n.usage;return e?{inputTokens:(e.inputTokens??0)+(e.cachedReadTokens??0),outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"bypassPermissions",buildEffortAction(n){return n?{type:"set_config_option",configId:"effort",value:n}:null},buildSpawnEnv(n){if(!(!n||n==="default"))return {ANTHROPIC_MODEL:n}},resolveMode(n){return {yolo:"bypassPermissions"}[n]??n},parseEvent:pe};});exports.codexAcpAdapter=void 0;var Sn=D(()=>{u();De();exports.codexAcpAdapter={spawn:{command:"npx",args:["-y","@agentclientprotocol/codex-acp"],shellOnWindows:true},npmPackage:"@agentclientprotocol/codex-acp",clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Codex",defaultMode:"agent"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},extractUsage(n){let e=n.usage;return e?{inputTokens:(e.inputTokens??0)+(e.cachedReadTokens??0),outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"agent-full-access",buildEffortAction(n,e){if(!e)return null;let t=e.match(/^(.+?)\[([^\]]+)\]$/),r=t?t[1]:e,o=t?t[2]:void 0;return {type:"set_model",modelId:`${r}[${n||o||"medium"}]`}},resolveMode(n){return {yolo:"agent-full-access",default:"agent",plan:"read-only"}[n]??n},parseEvent:pe};});var kt;exports.copilotAcpAdapter=void 0;var In=D(()=>{u();De();kt="https://agentclientprotocol.com/protocol/session-modes",exports.copilotAcpAdapter={spawn:{command:"copilot",args:["--acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"GitHub Copilot"},buildSessionParams(n){return {cwd:n.cwd?B.resolve(n.cwd):process.cwd(),mcpServers:[]}},yoloModeId:`${kt}#autopilot`,buildEffortAction(n){return n?{type:"set_config_option",configId:"reasoning_effort",value:n}:null},resolveMode(n){return n.startsWith("https://")?n:{yolo:`${kt}#autopilot`,default:`${kt}#agent`,agent:`${kt}#agent`,plan:`${kt}#plan`,autopilot:`${kt}#autopilot`}[n]??null},parseEvent:pe};});exports.opencodeAcpAdapter=void 0;var On=D(()=>{u();De();exports.opencodeAcpAdapter={spawn:{command:"opencode",args:["acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"OpenCode"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},yoloModeId:void 0,buildEffortAction(n){return null},resolveMode(n){let e={default:"build"};return n==="yolo"?null:e[n]??n},parseEvent:pe};});exports.ACP_ADAPTERS=void 0;var Or=D(()=>{u();bn();Sn();In();On();bn();Sn();In();On();exports.ACP_ADAPTERS={codex:exports.codexAcpAdapter,claude:exports.claudeAcpAdapter,opencode:exports.opencodeAcpAdapter,copilot:exports.copilotAcpAdapter};});var fs={};tr(fs,{registerAcpProviders:()=>gs});function gs(n){if(n){Pe("acp",n);return}Pe("acp",(e,t)=>{let r=exports.ACP_ADAPTERS[e];if(!r)throw new exports.ProviderError(`Unknown ACP provider id: "${e}". Supported: ${Object.keys(exports.ACP_ADAPTERS).join(", ")}`,t);return new exports.AcpProviderRuntime(e,r,t)});}var Mn=D(()=>{u();we();Tn();Or();we();});function Bd(n){if(!n)return n;let e=n.trim().replace(/\/+$/,"");return e.toLowerCase().endsWith("/mcp")?e.slice(0,-4):e}exports.McpHttpTransport=void 0;var Nn=D(()=>{u();exports.McpHttpTransport=class{endpoint;headers;timeoutMs;constructor(e){let t=Bd(e.url);this.endpoint=`${t}/mcp`,this.headers={"Content-Type":"application/json",...e.headers??{}},e.apiKey&&(this.headers.Authorization=`Bearer ${e.apiKey}`),this.timeoutMs=e.timeoutMs??3e4;}async send(e){let t=new AbortController,r=setTimeout(()=>t.abort(),this.timeoutMs);try{let o=await fetch(this.endpoint,{method:"POST",headers:this.headers,body:JSON.stringify(e),signal:t.signal});if(clearTimeout(r),!o.ok){let a=await o.text();throw new Error(`HTTP ${o.status}: ${o.statusText}${a?` - ${a}`:""}`)}let s=o.headers.get("content-type");if(s?.includes("application/json"))return await o.json();let i=await o.text();return {jsonrpc:"2.0",id:e.id,error:{code:-32600,message:`Unexpected response content-type: ${s}`,data:i}}}catch(o){throw clearTimeout(r),o instanceof Error&&o.name==="AbortError"?new Error(`MCP-HTTP request timeout after ${this.timeoutMs}ms to ${this.endpoint}`):o}}async close(){}};});exports.RemoteAgentManager=void 0;var Dn=D(()=>{u();Nn();exports.RemoteAgentManager=class{logger;configs=new Map;transports=new Map;constructor(e={}){this.logger=e.logger??(()=>{});}loadConfig(e,t){this.validateConfig(t),this.configs.set(e,t),this.transports.set(e,new exports.McpHttpTransport({url:t.url,apiKey:t.apiKey,headers:t.headers,timeoutMs:t.timeoutMs})),this.logger(`Loaded remote agent config for: ${e}`,"debug");}loadConfigWithTransport(e,t,r){this.validateConfig(t),this.configs.set(e,t),this.transports.set(e,r),this.logger(`Loaded remote agent config for: ${e} (custom transport)`,"debug");}getConfig(e){return this.configs.get(e)}isRemoteAgent(e){return this.configs.has(e)}getRemoteAgentIds(){return Array.from(this.configs.keys())}async query(e,t){let r=this.requireConfig(e),o=r.tools?.query??"crewx_queryAgent",i={agentId:r.agentId??e,query:t.query};t.context&&(i.context=t.context),t.model&&(i.model=t.model),t.platform&&(i.platform=t.platform),t.messages?.length&&(i.messages=t.messages);try{let a=await this.callRemoteTool(e,o,i);return this.normalizeResponse(a)}catch(a){let d=a instanceof Error?a.message:String(a);throw this.logger(`Remote query failed for agent ${e}: ${d}`,"error"),a}}async execute(e,t){let r=this.requireConfig(e),o=r.tools?.execute??"crewx_executeAgent",i={agentId:r.agentId??e,task:t.task};t.context&&(i.context=t.context),t.model&&(i.model=t.model),t.platform&&(i.platform=t.platform),t.messages?.length&&(i.messages=t.messages);try{let a=await this.callRemoteTool(e,o,i);return this.normalizeResponse(a)}catch(a){let d=a instanceof Error?a.message:String(a);throw this.logger(`Remote execute failed for agent ${e}: ${d}`,"error"),a}}mapToolNames(e,t){let r=this.requireConfig(e);r.tools={query:t.query??r.tools?.query??"crewx_queryAgent",execute:t.execute??r.tools?.execute??"crewx_executeAgent"},this.logger(`Updated tool name mapping for agent ${e}`,"debug");}async clearConfigs(){for(let e of this.transports.values())await e.close();this.configs.clear(),this.transports.clear(),this.logger("Cleared all remote agent configurations","debug");}requireConfig(e){let t=this.configs.get(e);if(!t)throw new Error(`Agent ${e} is not configured as a remote agent`);return t}async callRemoteTool(e,t,r){let o=this.transports.get(e);if(!o)throw new Error(`No transport available for agent ${e}`);let s={jsonrpc:"2.0",id:`${t}-${Date.now()}`,method:"tools/call",params:{name:t,arguments:r}};this.logger(`Calling remote MCP tool ${t} for agent ${e}`,"debug");let i=await o.send(s);if(i.error)throw new Error(i.error.message||"MCP server returned an error");return i.result}normalizeResponse(e){if(!e)return {success:false,content:[{type:"text",text:"Remote agent returned no response."}]};let t=e;if(Array.isArray(t.content)&&t.content.length>0)return t;let r=t.response??t.implementation??t.message??t.output,o=typeof r=="string"?r:JSON.stringify(r??e,null,2);return {...t,content:[{type:"text",text:o}]}}validateConfig(e){if(!e.url)throw new Error("Remote agent configuration requires a URL");if(!e.url.startsWith("http://")&&!e.url.startsWith("https://"))throw new Error("Remote agent URL must start with http:// or https://");if(e.type!=="mcp-http")throw new Error(`Unsupported remote agent type: ${e.type}`)}};});var hs={};tr(hs,{RemoteProviderRuntime:()=>exports.RemoteProviderRuntime,createRemoteProviderFactory:()=>ms,resolveFileRemoteAgent:()=>Yd});function Jd(n){let e=Zo.readFileSync(n,"utf-8"),t=jsYaml.load(e);return {agents:Array.isArray(t?.agents)?t.agents:void 0}}function Xd(n){let e=Array.isArray(n.provider)?n.provider[0]:n.provider;return e||(Array.isArray(n.inline?.provider)?n.inline.provider[0]:n.inline?.provider)}function Yd(n,e=Jd,t=Zo.existsSync){let r=n.location.replace("file://","");if(!t(r))throw new Error(`Remote config file not found: ${r}`);if(!n.external_agent_id)throw new Error(`external_agent_id is required for file:// remote provider "${n.id}"`);let s=e(r).agents?.find(d=>d.id===n.external_agent_id);if(!s)throw new Error(`Agent "${n.external_agent_id}" not found in ${r}`);let i=Xd(s);if(!i)throw new Error(`Agent "${n.external_agent_id}" in ${r} has no provider configured`);if(i.startsWith("remote/"))throw new Error(`Chained remotes not allowed: ${n.id} \u2192 ${i}`);let a=B.resolve(B.dirname(r),s.working_directory??".");return {agent:{...s,working_directory:a},provider:i}}function ms(n,e=Te){return (t,r)=>{let o=n.get(t);if(!o)throw new Error(`Remote provider "${t}" not found. Available: ${Array.from(n.keys()).join(", ")||"(none)"}`);if(o.location.startsWith("file://"))throw new Error(`Remote provider "${t}" uses file:// location which is not supported at the SDK level. Use the CLI commands (crewx query / crewx execute) which handle file:// remotes automatically.`);return new exports.RemoteProviderRuntime(t,o,e)}}function Qd(n,e){let t=e.location;if(!t)throw new Error("Remote provider config requires a location");if(!t.startsWith("http://")&&!t.startsWith("https://"))throw new Error(`Unsupported remote location protocol for MCP-HTTP: ${t}`);return {type:"mcp-http",url:t,apiKey:e.apiKey,headers:e.headers,timeoutMs:e.timeout?.query??3e4,agentId:e.external_agent_id??n}}exports.RemoteProviderRuntime=void 0;var Ln=D(()=>{u();we();Dn();exports.RemoteProviderRuntime=class{manager;agentId;constructor(e,t,r=Te){this.agentId=t.external_agent_id??e,this.manager=new exports.RemoteAgentManager;let o=Qd(e,t);this.manager.loadConfig(this.agentId,o);}async query(e,t){return (await this.manager.query(this.agentId,{agentId:this.agentId,query:e,model:t?.model,context:t?.context??t?.systemPrompt})).content.map(o=>o.text).join(`
|
|
32
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(`
|
|
33
|
-
`)}};});var
|
|
34
|
+
`)}};});var vs={};tr(vs,{PluginProviderRuntime:()=>exports.PluginProviderRuntime,createPluginProviderFactory:()=>_s});function _s(n){return (e,t)=>{let r=n.get(e);if(!r)throw new exports.ProviderError(`Plugin provider "${e}" not found. Available: ${Array.from(n.keys()).join(", ")||"(none)"}`,`plugin/${e}`);return new exports.PluginProviderRuntime(e,r)}}function ys(n,e,t,r){let o=n.map(s=>s.replace(/\{model\}/g,e));return r&&o.push(t),o}function el(n){if(!n||typeof n!="string")throw new Error("Plugin provider requires a cli_command")}function ws(n){if(!Array.isArray(n))throw new Error("CLI arguments must be an array");for(let e of n)if(typeof e!="string")throw new Error("Each CLI argument must be a string")}function tl(n){for(let{pattern:e}of n)if(typeof e!="string")throw new Error("Error pattern must be a string")}function rl(n){for(let[e,t]of Object.entries(n))if(typeof e!="string"||typeof t!="string")throw new Error("env entries must be string key/value pairs")}exports.PluginProviderRuntime=void 0;var $n=D(()=>{u();we();pt();exports.PluginProviderRuntime=class{constructor(e,t){this.config=t;this.providerStr=`plugin/${e}`,el(t.cli_command),ws(t.query_args),ws(t.execute_args),t.error_patterns&&tl(t.error_patterns),t.env&&rl(t.env);}config;providerStr;async query(e,t){let r=t?.model??this.config.default_model??"default",o=ys(this.config.query_args,r,e,this.config.prompt_in_args),s=this.config.prompt_in_args?void 0:e;t?.onCommand?.(`${this.config.cli_command} ${o.join(" ")}`);let i=this.config.timeout?.query??6e5;return this.runProcess(o,t,s,i)}async execute(e,t){let r=t?.model??this.config.default_model??"default",o=ys(this.config.execute_args,r,e,this.config.prompt_in_args),s=this.config.prompt_in_args?void 0:e;t?.onCommand?.(`${this.config.cli_command} ${o.join(" ")}`);let i=this.config.timeout?.execute??6e5;return this.runProcess(o,t,s,i)}runProcess(e,t,r,o){return new Promise((s,i)=>{let a={...process.env,...this.config.env??{}},d=ze({command:this.config.cli_command,env:a,cwd:process.cwd(),resolution:this.config.prefer_local_bin?"local_first":"global_first",allowShellFallback:true}),l=Ke(d,e),p=child_process.spawn(l.command,l.argv,{env:a,shell:l.shell??false,stdio:["pipe","pipe","pipe"],windowsHide:l.windowsHide});r!==void 0&&p.stdin.write(r),p.stdin.end(),p.pid!==void 0&&t?.onPid?.(p.pid);let g="",m="",f="",v="";p.stdout.on("data",k=>{let _=k.toString();g+=_,f+=_;let w=f.split(`
|
|
34
35
|
`);f=w.pop()??"";for(let A of w)A.trim()&&t?.onOutput?.(A,"stdout");}),p.stderr.on("data",k=>{let _=k.toString();m+=_,v+=_;let w=v.split(`
|
|
35
|
-
`);v=w.pop()??"";for(let A of w)A.trim()&&t?.onOutput?.(A,"stderr");});let y=setTimeout(()=>{p.kill("SIGTERM"),i(new exports.ProviderError(`Plugin provider "${this.providerStr}" timed out after ${o}ms`,this.providerStr));},o);p.on("error",k=>{if(clearTimeout(y),k.code==="ENOENT"){let _=this.config.not_installed_message??`CLI command "${this.config.cli_command}" not found. Is ${this.config.id} installed?`;i(new exports.ProviderError(_,this.providerStr));}else i(new exports.ProviderError(`Spawn error: ${k.message}`,this.providerStr));}),p.on("close",k=>{clearTimeout(y),f.trim()&&t?.onOutput?.(f,"stdout"),v.trim()&&t?.onOutput?.(v,"stderr");let _=k??0;if(t?.onExitCode?.(_),this.config.error_patterns){let w=m||g;for(let A of this.config.error_patterns)if(w.includes(A.pattern)){i(new exports.ProviderError(A.message,this.providerStr));return}}if(k!==0){i(new exports.ProviderError(`Process exited with code ${k}: ${m.slice(0,500)}`,this.providerStr));return}s(g.trim());});})}};});u();u();u();function
|
|
36
|
-
`+(t?` package anchor: ${
|
|
36
|
+
`);v=w.pop()??"";for(let A of w)A.trim()&&t?.onOutput?.(A,"stderr");});let y=setTimeout(()=>{p.kill("SIGTERM"),i(new exports.ProviderError(`Plugin provider "${this.providerStr}" timed out after ${o}ms`,this.providerStr));},o);p.on("error",k=>{if(clearTimeout(y),k.code==="ENOENT"){let _=this.config.not_installed_message??`CLI command "${this.config.cli_command}" not found. Is ${this.config.id} installed?`;i(new exports.ProviderError(_,this.providerStr));}else i(new exports.ProviderError(`Spawn error: ${k.message}`,this.providerStr));}),p.on("close",k=>{clearTimeout(y),f.trim()&&t?.onOutput?.(f,"stdout"),v.trim()&&t?.onOutput?.(v,"stderr");let _=k??0;if(t?.onExitCode?.(_),this.config.error_patterns){let w=m||g;for(let A of this.config.error_patterns)if(w.includes(A.pattern)){i(new exports.ProviderError(A.message,this.providerStr));return}}if(k!==0){i(new exports.ProviderError(`Process exited with code ${k}: ${m.slice(0,500)}`,this.providerStr));return}s(g.trim());});})}};});u();u();u();function Qs(n){let e=o=>o.replace(/[.+^${}()|[\]\\]/g,"\\$&"),r=n.split("/").map(o=>o==="**"?".*":o.split("*").map(e).join("[^/]*"));return new RegExp(`^${r.join("\\/")}$`)}function me(n,e){try{return Qs(e).test(n)}catch{return false}}u();u();var Zs=zod.z.object({model:zod.z.string().optional(),system_prompt:zod.z.string().optional(),prompt:zod.z.string().optional(),layout:zod.z.union([zod.z.string(),zod.z.object({id:zod.z.string(),props:zod.z.record(zod.z.unknown()).optional()}),zod.z.object({props:zod.z.record(zod.z.unknown())}),zod.z.object({template:zod.z.string()})]).optional()}).catchall(zod.z.unknown()),oo=zod.z.object({include:zod.z.array(zod.z.string()).optional()}).optional(),ei=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:Zs.optional(),skills:oo}).catchall(zod.z.unknown()),ti=zod.z.object({bin_resolution:zod.z.enum(["global_first","local_first"]).optional()}).catchall(zod.z.unknown()),so=zod.z.object({agents:zod.z.array(ei).optional(),hooks:zod.z.array(zod.z.unknown()).optional(),settings:ti.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 Be=class extends Error{constructor(t,r){super(t);this.cause=r;this.name="ConfigLoadError";}cause};function rr(n){if(!n||typeof n!="string"||!n.trim())throw new Be("YAML content must be a non-empty string");let e;try{e=jsYaml.load(n);}catch(o){throw new Be(`YAML parse error: ${o.message}`,o)}let t=oi(e),r=so.safeParse(t);if(!r.success)throw new Be(`Config validation error: ${r.error.message}`);return r.data}function nr(n){let e;try{e=Zo.readFileSync(n,"utf-8");}catch(t){throw new Be(`Cannot read file: ${n}`,t)}return rr(e)}function oi(n){if(!n||typeof n!="object")return {agents:[]};let e=n,t;if(e.agents&&typeof e.agents=="object"&&!Array.isArray(e.agents)){let o=e.agents;t=Object.entries(o).map(([s,i])=>({id:s,...i&&typeof i=="object"?i:{}}));}else if(Array.isArray(e.agents))t=e.agents;else return {...e,agents:[]};let r=t.map(o=>{if(o.provider===void 0&&o.inline&&typeof o.inline=="object"){let s=o.inline;if(s.provider!==void 0)return {...o,provider:s.provider}}return o});return {...e,agents:r}}u();var We=B.join("templates","agents");function ai(){try{let e=(typeof te=="function"?te:module$1.createRequire(typeof __filename<"u"?__filename:process.cwd()+"/")).resolve("@crewx/sdk/package.json");return B.dirname(e)}catch{return null}}function ct(n){if(n&&Zo.existsSync(n))return n;let e=process.env.CREWX_SDK_TEMPLATES_PATH;if(e&&Zo.existsSync(e))return e;let t=ai();if(t){let o=B.join(t,We);if(Zo.existsSync(o))return o}let r=[B.join(__dirname,"..",We),B.join(__dirname,"..","..",We),B.join(__dirname,"..","..","..",We),B.join(process.cwd(),"packages","sdk",We),B.join(process.cwd(),We)];for(let o of r)if(Zo.existsSync(o))return o;throw new Error(`[@crewx/sdk] Templates directory not found.
|
|
37
|
+
`+(t?` package anchor: ${B.join(t,We)}
|
|
37
38
|
`:` package anchor: (unresolved)
|
|
38
39
|
`)+r.map(o=>` candidate: ${o}`).join(`
|
|
39
40
|
`)+`
|
|
40
|
-
Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function $r(){let n=
|
|
41
|
+
Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function $r(){let n=ct();return {yamlPath:B.join(n,"default.yaml"),dir:n}}u();var Re=class extends Error{constructor(e,t){let r=t.length>0?` Available: ${t.join(", ")}`:"";super(`Agent not found: "${e}".${r}`),this.name="AgentNotFoundError";}},di={claude:{id:"claude",provider:"cli/claude"},copilot:{id:"copilot",provider:"cli/copilot"},codex:{id:"codex",provider:"cli/codex"}};function sr(n,e){let t=n.startsWith("@")?n.slice(1):n,r=e.find(s=>s.id===t);if(r)return r;let o=di[t];if(o)return o;throw new Re(n,e.map(s=>s.id))}we();gr();u();u();var yt={"claude-fable-5":{input:10,cachedInput:1,output:50},"claude-opus-5":{input:5,cachedInput:.5,output:25},"claude-opus-4-8":{input:5,cachedInput:.5,output:25},"claude-opus-4-7":{input:5,cachedInput:.5,output:25},"claude-opus-4-6":{input:5,cachedInput:.5,output:25},"claude-sonnet-5":{input:2,cachedInput:.2,output:10},"claude-sonnet-4-6":{input:3,cachedInput:.3,output:15},"claude-haiku-4-5":{input:1,cachedInput:.1,output:5},"gpt-5.6-sol":{input:5,cachedInput:.5,output:30},"gpt-5.6-terra":{input:2.5,cachedInput:.25,output:15},"gpt-5.6-luna":{input:1,cachedInput:.1,output:6},"gpt-5.5":{input:5,cachedInput:1.25,output:15},"gpt-5.4":{input:2.5,cachedInput:.625,output:10},"gpt-5.3-codex":{input:1.5,cachedInput:.375,output:6},"gpt-5-mini":{input:.4,cachedInput:.1,output:1.6},"gpt-4.1":{input:2,cachedInput:.5,output:8},"gpt-4o":{input:2.5,cachedInput:1.25,output:10},"glm-5.2":{input:1.4,cachedInput:.26,output:4.4},"glm-5.1":{input:1.4,cachedInput:.26,output:4.4}};var Ki={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"},tn={input:0,cachedInput:0,output:0},Mt={};function Ro(n){Mt=n;}function rn(n){let e=n.toLowerCase().trim();e=e.replace(/\[[^\]]*\]$/g,"");let t=e.lastIndexOf("/");return t>=0&&(e=e.slice(t+1)),e=e.replace(/-\d{8}$/,""),e}function Gi(n){if(!n)return tn;let e=rn(n),t=Ki[e];if(t)return Mt[t]??yt[t]??tn;if(Mt[e])return Mt[e];if(yt[e])return yt[e];let r={...yt,...Mt};for(let o of Object.keys(r))if(e.includes(o))return r[o];return console.warn(`[pricing] Unknown model: ${n}, cost_usd=0`),tn}function Vi(n,e,t,r=0,o){let s=Gi(t),i=Math.min(r,n),d=(n-i)*s.input/1e6,l=i*s.cachedInput/1e6,p=e*s.output/1e6;return d+l+p}function Co(n,e,t,r,o,s){return n&&n>0?n:!e&&!t?0:Vi(e??0,t??0,o,r??0)}u();function fr(n){if(!n||typeof n!="object"||Array.isArray(n))return;let e=n,t={};return typeof e.provider=="string"&&e.provider.trim()&&(t.provider=e.provider.trim()),typeof e.model=="string"&&e.model.trim()&&(t.model=e.model.trim()),typeof e.mode=="string"&&e.mode.trim()&&(t.mode=e.mode.trim()),typeof e.effort=="string"&&e.effort.trim()&&(t.effort=e.effort.trim()),t}function mr(n){if(n==null||n===false)return {active:false};if(n===true)return {active:true};if(typeof n=="object"){let e=n.mode;return {active:true,mode:e==="count"||e==="latch"?e:void 0}}return {active:false}}function hr(n,e,t,r){if(!r.active)return {active:false,crossProvider:false};if(!n||typeof n!="object"||Array.isArray(n))return {active:false,crossProvider:false};let s=n[e];if(!s||typeof s!="object"||Array.isArray(s))return {active:false,crossProvider:false};let i=fr(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 yr(n,e){if(!n||typeof n!="object"||Array.isArray(n))return {};let r=n[e];if(!r||typeof r!="object"||Array.isArray(r))return {};let o=r,s={};return o.provider!==void 0&&(typeof o.provider=="string"?o.provider.trim()&&(s.provider=o.provider.trim()):console.warn(`[crewx] options.${e}.provider must be a single string; ignoring non-string value (${JSON.stringify(o.provider)})`)),typeof o.model=="string"&&o.model.trim()&&(s.model=o.model.trim()),s}u();u();var Xi=[/^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],Yi=/[;|&`$(){}!><\n\r]/,Qi=2,Zi=["*","**","*:*","* *","**/*"];function ea(){let n={};for(let[e,t]of Object.entries(process.env))t!==void 0&&(Xi.some(r=>r.test(e))||(n[e]=t));return n}function ta(n){if(Yi.test(n))throw new Error(`exec blocked: shell metacharacter detected in "${n}"`)}function ra(n){return /^npx\s+@crewx\/[\w-]+/.test(n)}function na(n){if(Zi.includes(n.trim()))throw new Error(`exec config error: overly broad pattern "${n}" is not allowed`);if(!/^[\w./@-]/.test(n))throw new Error("exec config error: pattern must start with a command name")}function oa(n,e){let t=e.allow??[],r=e.deny??[];for(let o of [...t,...r])na(o);return r.some(o=>me(n,o))?false:ra(n)?true:t.some(o=>me(n,o))}var Po=false;function sa(n){Po=n;}function Nt(n){if(!Po)return;let e=JSON.stringify({span:"template_exec",...n,timestamp:new Date().toISOString()});console.error(e);}function ia(n){let e=[],t="",r=false,o=false;for(let s=0;s<n.length;s++){let i=n[s];i==="'"&&!o?r=!r:i==='"'&&!r?o=!o:i===" "&&!r&&!o?t.length>0&&(e.push(t),t=""):t+=i;}return t.length>0&&e.push(t),e}function To(n,e){let t=Date.now(),r=parseInt(process.env.CREWX_EXEC_DEPTH??"0",10);if(isNaN(r)||r>=Qi)return Nt({command:n,status:"denied",reason:"invalid or max recursion depth"}),"(exec blocked: max recursion depth reached)";try{ta(n);}catch{return Nt({command:n,status:"denied",reason:"shell metacharacter detected"}),`(exec blocked: shell metacharacter detected in "${n}")`}if(!oa(n,e))return Nt({command:n,status:"denied",reason:"not in allow list"}),`(exec blocked: ${n})`;try{let o=ia(n),[s,...i]=o;if(!s)return `(exec failed: ${n})`;let a=ea(),d=child_process.execFileSync(s,i,{timeout:e.timeout??5e3,maxBuffer:64*1024,encoding:"utf-8",env:{...a,CREWX_EXEC_DEPTH:String(r+1)},stdio:["pipe","pipe","pipe"]}),l=Date.now()-t;return Nt({command:n,status:"allowed",allowed_by:"policy",duration_ms:l}),`<exec-output cmd="${n}">
|
|
41
42
|
${d.trim()}
|
|
42
|
-
</exec-output>`}catch{return Nt({command:n,status:"error",reason:"execution failed"}),`(exec failed: ${n})`}}u();function
|
|
43
|
+
</exec-output>`}catch{return Nt({command:n,status:"error",reason:"execution failed"}),`(exec failed: ${n})`}}u();function bo(n){return n==null?"":String(n)}u();function So(n,e){return `\`\`\`${e?.hash?.lang??""}
|
|
43
44
|
${n??""}
|
|
44
|
-
\`\`\``}u();function
|
|
45
|
+
\`\`\``}u();function nn(n,e){if(!n)return "";if(n.length<=e)return n;let t=n.length-e;return `${n.substring(0,e)} (...+${t} chars)`}function on(n){return Array.isArray(n)||typeof n=="string"?n.length:0}function sn(n){return typeof n!="string"?"":n.replace(/\{\{/g,"{{").replace(/\}\}/g,"}}")}var Io=["B","KB","MB","GB"];function an(n){if(n===0)return "0 B";let e=Math.min(Math.floor(Math.log(n)/Math.log(1024)),Io.length-1);return `${Math.round(n/Math.pow(1024,e)*100)/100} ${Io[e]}`}function dn(n){if(!n)return "";try{let e=n instanceof Date?n:new Date(n);return isNaN(e.getTime())?"":e.toLocaleString("ko-KR",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}catch{return ""}}var Dt=class{hbs;execPolicy;execEnabled;constructor(e={}){this.hbs=_e__namespace.create(),this.execPolicy=e.execPolicy??{allow:[],deny:[]},this.execEnabled=e.execEnabled??true,this.registerHelpers();}registerHelpers(){let e=this.hbs,t=this.execPolicy,r=this.execEnabled;e.registerHelper("exec",function(o){return typeof o!="string"?"":r?new e.SafeString(To(o,t)):"(exec disabled)"}),e.registerHelper("include",function(o){return new e.SafeString(bo(o))}),e.registerHelper("fenced_code",function(o,s){return new e.SafeString(So(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 nn(o,s)}),e.registerHelper("length",function(o){return on(o)}),e.registerHelper("escapeHandlebars",function(o){return new e.SafeString(sn(o))}),e.registerHelper("formatFileSize",function(o){return an(o)}),e.registerHelper("formatTimestamp",function(o){return dn(o)});}async render(e,t={}){return this.hbs.compile(e,{noEscape:true})(t)}};u();u();var wr=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?B.resolve(e[0]):B.resolve(B.join(...e))}isAbsolute(e){return B.isAbsolute(e)}async readdir(e){try{return await promises.readdir(e)}catch{return []}}},Qe=new wr;var Ze=class{docs=new Map;fs;constructor(e){this.fs=e??Qe;}async load(e,t){if(e)for(let[r,o]of Object.entries(e)){let s=o;if(typeof s=="string")this.docs.set(r,{content:s});else if(s&&typeof s=="object"){let i=s;"content"in i&&typeof i.content=="string"?this.docs.set(r,{content:i.content}):"path"in i&&typeof i.path=="string"?await this.loadFromFile(r,i.path,t):console.warn(`[DocumentLoader] Skipping '${r}': unsupported format`);}else console.warn(`[DocumentLoader] Skipping '${r}': unsupported format`);}}async getContent(e){return this.docs.get(e)?.content}async getToc(e){let t=this.docs.get(e);if(!t)return;let r=[];for(let o of t.content.split(`
|
|
45
46
|
`)){let s=/^(#{1,6})\s+(.+)$/.exec(o.trim());s&&r.push({depth:s[1].length,text:s[2].trim()});}if(r.length!==0)return r.map(({depth:o,text:s})=>`${" ".repeat(o-1)}- ${s}`).join(`
|
|
46
|
-
`)}getPath(e){return this.docs.get(e)?.path}getNames(){return Array.from(this.docs.keys())}async buildContext(){let e={};for(let t of this.docs.keys()){let r=await this.getContent(t)??"",o=await this.getToc(t),s=this.getPath(t);e[t]={content:r,toc:o,...s?{path:s}:{}};}return e}async loadFromFile(e,t,r){try{let o=this.resolve(t,r),s=await this.fs.readFile(o);this.docs.set(e,{content:s,path:o});}catch(o){let s=o instanceof Error?o.message:String(o);console.warn(`[DocumentLoader] Failed to load '${e}' from '${t}': ${s}`);}}resolve(e,t){return this.fs.isAbsolute(e)?e:t?this.fs.resolvePath(t,e):this.fs.resolvePath(e)}};u();u();var re=class extends Error{constructor(t,r,o){super(t);this.layoutId=r;this.cause=o;this.name="LayoutLoadError";}layoutId;cause},Se=class extends Error{constructor(t,r=[],o){super(t);this.errors=r;this.cause=o;this.name="PropsValidationError";}errors;cause};var ma={validationMode:"lenient",fallbackLayoutId:"crewx/default"},Lt=class{layouts=new Map;options;constructor(e){this.options={...ma,...e,templatesPath:e?.templatesPath??lt()},this.loadAllLayouts();}load(e,t){let r=this.layouts.get(e);if(!r){let o=this.normalizeLayoutId(e);r=this.layouts.get(o);}if(!r&&(console.warn(`Layout not found: ${e}, falling back to ${this.options.fallbackLayoutId}`),r=this.layouts.get(this.options.fallbackLayoutId),!r))throw new re(`Fallback layout not found: ${this.options.fallbackLayoutId}`,this.options.fallbackLayoutId);return t&&Object.keys(t).length>0?{...r,defaultProps:{...r.defaultProps,...t}}:r}getLayoutIds(){return Array.from(this.layouts.keys())}hasLayout(e){if(this.layouts.has(e))return true;let t=this.normalizeLayoutId(e);return this.layouts.has(t)}reload(){this.layouts.clear(),this.loadAllLayouts();}registerLayout(e,t){if(!e||typeof e!="string")throw new re("Layout ID must be a non-empty string",e);let r=typeof t=="string"?{template:t}:t,o=typeof r.template=="string"?r.template:"";if(!o||o.trim().length===0)throw new re(`Custom layout template is empty for ${e}`,e);let s=r.propsSchema||{},i=this.extractDefaultProps(s),a=r.defaultProps||{},d={id:e,version:r.version||"1.0.0",description:r.description||`Custom layout ${e}`,template:o,propsSchema:this.parsePropsSchema(s),defaultProps:{...i,...a}},l=this.layouts.get(e),p=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?p||console.error(`Updated custom layout: ${e}`):console.error(`Registered custom layout: ${e}`));}registerLayouts(e){for(let[t,r]of Object.entries(e))try{this.registerLayout(t,r);}catch(o){console.warn(`Failed to register custom layout ${t}:`,o instanceof Error?o.message:o);}}loadAllLayouts(){let e=this.options.templatesPath;if(!Qo.existsSync(e))throw new re(`Templates directory not found: ${e}`,void 0,new Error(`Directory does not exist: ${e}`));try{let t=Qo.readdirSync(e).filter(r=>r.endsWith(".yaml")||r.endsWith(".yml"));t.length===0&&console.warn(`No layout files found in ${e}`);for(let r of t){let o=r.replace(/\.(yaml|yml)$/,""),s=H__namespace.join(e,r);try{let i=this.loadLayoutFile(s,o),a=`crewx/${o}`;this.layouts.set(a,i),a!=="crewx/minimal"&&process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded layout: ${a} from ${r}`);}catch(i){console.error(`Failed to load layout file ${r}:`,i);}}process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded ${this.layouts.size} layouts from ${e}`);}catch(t){throw new re(`Failed to read layouts directory: ${e}`,void 0,t instanceof Error?t:new Error(String(t)))}}loadLayoutFile(e,t){try{let r=Qo.readFileSync(e,"utf-8");if(!r||r.trim().length===0)throw console.warn(`Empty YAML file: ${e}, will use fallback`),new re(`Empty YAML file: ${e}`,t,new Error("File content is empty"));let o=jsYaml.load(r);if(!o||typeof o!="object")throw console.warn(`Invalid YAML content in ${e} (parsed as ${typeof o}), will use fallback`),new re(`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 re(`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 re(`Layout template is missing or empty in ${e}`,t);return {id:o.id||`crewx/${t}`,version:o.version||"1.0.0",description:o.description||"",template:o.template,propsSchema:this.parsePropsSchema(o.propsSchema||{}),defaultProps:this.extractDefaultProps(o.propsSchema||{})}}}catch(r){throw new re(`Failed to load layout file: ${e}`,t,r instanceof Error?r:new Error(String(r)))}}parsePropsSchema(e){let t={};for(let[r,o]of Object.entries(e))typeof o=="object"&&o!==null&&(t[r]=o);return t}extractDefaultProps(e){let t={};for(let[r,o]of Object.entries(e))o&&typeof o=="object"&&("defaultValue"in o?t[r]=o.defaultValue:"default"in o&&(t[r]=o.default));return t}normalizeLayoutId(e){return e?e.includes("/")?e:`crewx/${e}`:this.options.fallbackLayoutId}resolveLayoutEntry(e,t){let r=new Set;if(t)if(r.add(t),t.includes("/")){let o=t.split("/"),s=o[o.length-1];s&&r.add(s);}else r.add(`crewx/${t}`);r.add("default");for(let o of r){let s=e[o];if(typeof s=="string"&&s.trim().length>0)return {template:s};if(s&&typeof s=="object"&&typeof s.template=="string"&&s.template.trim().length>0)return {template:s.template,propsSchema:s.propsSchema}}for(let o of Object.values(e)){if(typeof o=="string"&&o.trim().length>0)return {template:o};let s=o;if(s&&typeof s=="object"&&typeof s.template=="string"&&s.template.trim().length>0)return {template:s.template,propsSchema:s.propsSchema}}}};u();u();u();function Ze(n){return String(Math.floor(Math.abs(n))).padStart(2,"0")}function $t(n){if(!(n instanceof Date)||Number.isNaN(n.getTime()))return "";let e=-n.getTimezoneOffset(),t=e>=0?"+":"-";return `${n.getFullYear()}-${Ze(n.getMonth()+1)}-${Ze(n.getDate())}T${Ze(n.getHours())}:${Ze(n.getMinutes())}:${Ze(n.getSeconds())}${t}${Ze(e/60)}:${Ze(e%60)}`}function ha(n){return n.map(e=>{let t=typeof e?.timestamp=="number"?e.timestamp:null;return t===null?e:{...e,created_at:$t(new Date(t))}})}function ya(n){let e=[];for(let t of n)t?.isAssistant&&t?.metadata?.agent_id?e.push(String(t.metadata.agent_id)):!t?.isAssistant&&t?.metadata?.caller_agent_id&&e.push(String(t.metadata.caller_agent_id));return Array.from(new Set(e))}function No(...n){let e=n[n.length-1],t=n[0],r=n[1],o=typeof n[2]=="string"?n[2]:"",s=typeof n[3]=="string"?n[3]:"";if(!Array.isArray(t)||t.length===0||!(e&&typeof e.fn=="function"))return "";let a=ya(t),d=a.length>0?a[0]:"",l=Date.now(),p={messages:ha(t),platform:typeof r=="string"?r:"",messagesCount:t.length,agentIds:a,primaryAgentId:d,currentAgentId:o,threadId:s,now:$t(new Date(l))};return e.fn(p)}u();var Ut=class{defaultMode;constructor(e={}){this.defaultMode=e.defaultMode??"lenient";}validate(e,t,r=this.defaultMode){let o=[],s=this.validateObject(e??{},t,r,["props"],o);if(o.length>0&&r==="strict")throw new Se("Props validation failed in strict mode",o);return {valid:o.length===0,props:s,errors:o}}validateObject(e,t,r,o,s){let i={};if(r==="strict")for(let a of Object.keys(e))t[a]||s.push({path:this.buildPath([...o,a]),message:`Unknown prop '${a}'`,value:e[a]});for(let[a,d]of Object.entries(t)){let l=[...o,a],p=e[a],g=this.resolveProp(p,d,l,r,s);g.shouldAssign&&(i[a]=g.value);}return i}resolveProp(e,t,r,o,s){let i=this.buildPath(r);if(this.isNil(e)){if(t.isRequired&&s.push({path:i,message:`Required prop '${r[r.length-1]}' is missing`}),t.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(t.defaultValue)};if(t.type==="shape"&&t.shape){let d=this.applyDefaults(t.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}let a=this.validateType(e,t,r,o,s);if(!a.valid){if(t.type==="shape"&&a.value&&this.isPlainObject(a.value))return {shouldAssign:true,value:a.value};if(s.push({path:i,message:a.error??"Invalid value",value:e}),t.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(t.defaultValue)};if(t.type==="shape"&&t.shape){let d=this.applyDefaults(t.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}return {shouldAssign:true,value:a.value}}validateType(e,t,r,o,s){let{type:i}=t;switch(i){case "string":return this.validateString(e,t);case "number":return this.validateNumber(e,t);case "bool":return this.validateBoolean(e);case "array":return this.validateArray(e,t);case "arrayOf":return this.validateArrayOf(e,t,r,o,s);case "object":return this.validatePlainObject(e);case "shape":return this.validateShape(e,t,r,o,s);case "oneOfType":return this.validateOneOfType(e,t);case "func":return this.validateFunction(e);case "node":return {valid:true,value:e};default:return {valid:true,value:e}}}validateString(e,t){return typeof e!="string"?{valid:false,error:`Expected string, got ${this.describeType(e)}`}:t.oneOf&&!t.oneOf.includes(e)?{valid:false,error:`Expected one of: ${t.oneOf.join(", ")}`}:t.minLength!==void 0&&e.length<t.minLength?{valid:false,error:`String length must be >= ${t.minLength}`}:t.maxLength!==void 0&&e.length>t.maxLength?{valid:false,error:`String length must be <= ${t.maxLength}`}:t.pattern&&!new RegExp(t.pattern).test(e)?{valid:false,error:`String does not match pattern ${t.pattern}`}:{valid:true,value:e}}validateNumber(e,t){return typeof e!="number"||Number.isNaN(e)?{valid:false,error:`Expected number, got ${this.describeType(e)}`}:t.min!==void 0&&e<t.min?{valid:false,error:`Number must be >= ${t.min}`}:t.max!==void 0&&e>t.max?{valid:false,error:`Number must be <= ${t.max}`}:t.oneOf&&!t.oneOf.includes(e)?{valid:false,error:`Expected one of: ${t.oneOf.join(", ")}`}:{valid:true,value:e}}validateBoolean(e){return typeof e!="boolean"?{valid:false,error:`Expected boolean, got ${this.describeType(e)}`}:{valid:true,value:e}}validateArray(e,t){return Array.isArray(e)?t.minLength!==void 0&&e.length<t.minLength?{valid:false,error:`Array length must be >= ${t.minLength}`}:t.maxLength!==void 0&&e.length>t.maxLength?{valid:false,error:`Array length must be <= ${t.maxLength}`}:{valid:true,value:[...e]}:{valid:false,error:`Expected array, got ${this.describeType(e)}`}}validateArrayOf(e,t,r,o,s){let i=this.validateArray(e,t);if(!i.valid)return i;let a=[],d=t.itemType,l=t.itemOneOf,p=s.length;return i.value.forEach((g,m)=>{let f=[...r,String(m)];if(d){let v=this.validateType(g,{type:d},f,o,s);v.valid?a.push(v.value):s.push({path:this.buildPath(f),message:v.error??"Invalid array item",value:g});}else a.push(g);l&&!l.includes(g)&&s.push({path:this.buildPath(f),message:`Array item must be one of: ${l.join(", ")}`,value:g});}),{valid:s.length===p,value:a}}validatePlainObject(e){return this.isPlainObject(e)?{valid:true,value:{...e}}:{valid:false,error:`Expected object, got ${this.describeType(e)}`}}validateFunction(e){return typeof e!="function"?{valid:false,error:`Expected function, got ${this.describeType(e)}`}:{valid:true,value:e}}validateShape(e,t,r,o,s){if(!this.isPlainObject(e))return {valid:false,error:`Expected object, got ${this.describeType(e)}`};let i=s.length,a=this.validateObject(e,t.shape??{},o,r,s);return {valid:s.length===i,value:a}}validateOneOfType(e,t){let r=t.types??[];return r.some(s=>this.matchesType(e,s))?{valid:true,value:e}:{valid:false,error:`Value does not match any allowed type: ${r.join(", ")}`}}matchesType(e,t){switch(t){case "string":return typeof e=="string";case "number":return typeof e=="number"&&!Number.isNaN(e);case "bool":case "boolean":return typeof e=="boolean";case "array":return Array.isArray(e);case "object":return this.isPlainObject(e);case "func":case "function":return typeof e=="function";case "shape":return this.isPlainObject(e);case "node":return e==null||typeof e!="symbol";default:return true}}applyDefaults(e){let t={};for(let[r,o]of Object.entries(e)){if(o.defaultValue!==void 0){t[r]=this.cloneValue(o.defaultValue);continue}if(o.type==="shape"&&o.shape){let s=this.applyDefaults(o.shape);Object.keys(s).length>0&&(t[r]=s);}}return t}cloneValue(e){if(Array.isArray(e))return e.map(t=>this.cloneValue(t));if(this.isPlainObject(e)){let t={};for(let[r,o]of Object.entries(e))t[r]=this.cloneValue(o);return t}return e}isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}isNil(e){return e==null}buildPath(e){return e.join(".")}describeType(e){return Array.isArray(e)?"array":e===null?"null":typeof e}};var jt=class{handlebars;propsValidator;constructor(e){this.handlebars=_e__namespace.default.create(),this.propsValidator=e??new Ut,this.registerHelpers();}render(e,t,r={}){try{let o=this.prepareRenderContext(e,t,r);return this.handlebars.compile(e.template,{noEscape:!0})(o)}catch(o){throw o instanceof Error?new Error(`Template rendering failed for layout '${e.id}': ${o.message}`):new Error(`Unknown error rendering layout '${e.id}'`)}}validate(e,t,r="lenient"){return this.executeValidation(e,t,r)}resolveProps(e,t,r="lenient"){let o=this.mergeProps(e.defaultProps,t);return !e.propsSchema||Object.keys(e.propsSchema).length===0?{valid:true,props:o,errors:[]}:this.executeValidation(o,e.propsSchema,r)}prepareRenderContext(e,t,r){let{validationMode:o="lenient",skipValidation:s=false}=r,i=s?this.mergeProps(e.defaultProps,t.props):this.resolveProps(e,t.props,o).props;return {...t,vars:this.sanitizeVars(t.vars),props:i}}registerHelpers(){this.handlebars.registerHelper("formatConversation",No),_e__namespace.default.helpers.each&&this.handlebars.registerHelper("each",_e__namespace.default.helpers.each),_e__namespace.default.helpers.if&&this.handlebars.registerHelper("if",_e__namespace.default.helpers.if),_e__namespace.default.helpers.unless&&this.handlebars.registerHelper("unless",_e__namespace.default.helpers.unless),_e__namespace.default.helpers.with&&this.handlebars.registerHelper("with",_e__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 _e__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"],r=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/Math.pow(1024,r)*100)/100+" "+t[r]});}executeValidation(e,t,r){try{return this.propsValidator.validate(e,t,r)}catch(o){if(o instanceof Se&&o.errors&&o.errors.length>0){let s=o.errors[0];if(s)throw new Se(s.message,o.errors)}throw o}}mergeProps(e,t){let r=this.cloneDeep(e??{});return t?this.deepMerge(r,t):r}deepMerge(e,t){for(let[r,o]of Object.entries(t)){if(this.isPlainObject(o)){let s=e[r];e[r]=this.deepMerge(this.isPlainObject(s)?s:{},o);continue}if(Array.isArray(o)){e[r]=this.cloneDeep(o);continue}e[r]=o;}return e}cloneDeep(e){if(Array.isArray(e))return e.map(t=>this.cloneDeep(t));if(this.isPlainObject(e)){let t={};for(let[r,o]of Object.entries(e))t[r]=this.cloneDeep(o);return t}return e}isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}sanitizeVars(e){if(!e)return {};let t={...e};if(typeof e.user_input=="string"){t.user_input_raw=e.user_input;let r=e.user_input.replace(/\{\{\{/g,"{{{").replace(/\}\}\}/g,"}}}").replace(/\{\{/g,"{{").replace(/\}\}/g,"}}");t.user_input=this.handlebars.escapeExpression(r);}return t}};u();var cn="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function wa(n){let e=crypto$1.randomBytes(n*2),t="";for(let r=0;r<e.length&&t.length<n;r++){let o=e[r];o<248&&(t+=cn[o%62]);}for(;t.length<n;)t+=cn[crypto$1.randomBytes(1)[0]%62];return t}function et(n){return `${n}_${wa(8)}`}function _a(n,e){let{createHash:t}=ee("crypto"),r=t("sha256").update(e).digest(),o=Buffer.alloc(8);for(let i=0;i<32;i++)o[i%8]^=r[i];let s="";for(let i of o)s+=cn[i%62];return `${n}_${s}`}u();function un(n){let e=t=>String(t).padStart(2,"0");return `${n.getFullYear()}${e(n.getMonth()+1)}${e(n.getDate())}T${e(n.getHours())}${e(n.getMinutes())}${e(n.getSeconds())}`}u();function Lo(n,e){return t=>{try{let r=e(t);r instanceof Promise&&r.catch(o=>{console.error(`[crewx] event listener error (${n}): ${o instanceof Error?o.message:String(o)}`);});}catch(r){console.error(`[crewx] event listener error (${n}): ${r instanceof Error?r.message:String(r)}`);}}}var Ft=class{_emitter=new events.EventEmitter;on(e,t){let r=Lo(e,t);return this._emitter.on(e,r),()=>this._emitter.off(e,r)}once(e,t){let r=Lo(e,t);return this._emitter.once(e,r),()=>this._emitter.off(e,r)}emit(e,t){this._emitter.emit(e,t);}};u();function pn(n){let e=new Map,t=r=>r.startsWith(`${n}::`)?r:`${n}::${r}`;return {async get(r){let o=e.get(t(r));return o?o.value:void 0},async set(r,o){e.set(t(r),{value:o});},async delete(r){return e.delete(t(r))},async list(r){let o=r?t(r):`${n}::`,s=[];for(let i of e.keys())i.startsWith(o)&&s.push(i.slice(n.length+2));return s}}}u();var gn=new async_hooks.AsyncLocalStorage;function xa(){return gn}function Aa(n,e){return gn.run(n,e)}function fn(n){let e=n.log??n.logger??{debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},t=n.agentRunner??{run:async()=>({output:""})},r=n.db??{get:async()=>{},set:async()=>{},delete:async()=>false,list:async()=>[]},o=n.storage??{put:async()=>"",get:async()=>{},delete:async()=>false},s=n.audit??{log:async()=>{}},i=n.onInbound??(async()=>({accepted:true})),a=n.onEmitEvent??(async()=>({accepted:true})),d=n.onUpdateMessage??(async()=>{}),l=n.onResolveUser??(async m=>({userId:m,displayName:m})),p=async m=>{let f=gn.getStore();if(!f){e.warn("respondSync called outside sync window \u2014 graceful degradation (no-op)",{textPreview:typeof m=="object"&&"text"in m?m.text.slice(0,80):void 0});return}let v="text"in m?m.text:"";f.res.status(200).json({text:v});},g=n.httpRouter??{registerRoute:()=>{e.warn("httpRouter not configured \u2014 registerRoute is a no-op");}};return {instanceId:n.instanceId,config:n.config,capabilities:n.capabilities,log:e,agentRunner:t,db:r,storage:o,audit:s,abortSignal:n.abortSignal??new AbortController().signal,httpRouter:g,inbound:i,emitEvent:a,updateMessage:d,resolveUser:l,respondSync:p}}Ne();u();var Ea=/^-\s*Status:\s*active/m,Ra=/^---\n([\s\S]*?)\n---/,Ca=/^type:\s*goal\s*$/m;async function $o(n,e=Ye,t){let r=typeof t=="string"?[t]:Array.isArray(t)?t:void 0;if(r){let a=[];for(let d of r){let l=e.resolvePath(n,d);await e.exists(l)&&a.push(await e.readFile(l));}return a.join(`
|
|
47
|
+
`)}getPath(e){return this.docs.get(e)?.path}getNames(){return Array.from(this.docs.keys())}async buildContext(){let e={};for(let t of this.docs.keys()){let r=await this.getContent(t)??"",o=await this.getToc(t),s=this.getPath(t);e[t]={content:r,toc:o,...s?{path:s}:{}};}return e}async loadFromFile(e,t,r){try{let o=this.resolve(t,r),s=await this.fs.readFile(o);this.docs.set(e,{content:s,path:o});}catch(o){let s=o instanceof Error?o.message:String(o);console.warn(`[DocumentLoader] Failed to load '${e}' from '${t}': ${s}`);}}resolve(e,t){return this.fs.isAbsolute(e)?e:t?this.fs.resolvePath(t,e):this.fs.resolvePath(e)}};u();u();var ne=class extends Error{constructor(t,r,o){super(t);this.layoutId=r;this.cause=o;this.name="LayoutLoadError";}layoutId;cause},be=class extends Error{constructor(t,r=[],o){super(t);this.errors=r;this.cause=o;this.name="PropsValidationError";}errors;cause};var ha={validationMode:"lenient",fallbackLayoutId:"crewx/default"},Lt=class{layouts=new Map;options;constructor(e){this.options={...ha,...e,templatesPath:e?.templatesPath??ct()},this.loadAllLayouts();}load(e,t){let r=this.layouts.get(e);if(!r){let o=this.normalizeLayoutId(e);r=this.layouts.get(o);}if(!r&&(console.warn(`Layout not found: ${e}, falling back to ${this.options.fallbackLayoutId}`),r=this.layouts.get(this.options.fallbackLayoutId),!r))throw new ne(`Fallback layout not found: ${this.options.fallbackLayoutId}`,this.options.fallbackLayoutId);return t&&Object.keys(t).length>0?{...r,defaultProps:{...r.defaultProps,...t}}:r}getLayoutIds(){return Array.from(this.layouts.keys())}hasLayout(e){if(this.layouts.has(e))return true;let t=this.normalizeLayoutId(e);return this.layouts.has(t)}reload(){this.layouts.clear(),this.loadAllLayouts();}registerLayout(e,t){if(!e||typeof e!="string")throw new ne("Layout ID must be a non-empty string",e);let r=typeof t=="string"?{template:t}:t,o=typeof r.template=="string"?r.template:"";if(!o||o.trim().length===0)throw new ne(`Custom layout template is empty for ${e}`,e);let s=r.propsSchema||{},i=this.extractDefaultProps(s),a=r.defaultProps||{},d={id:e,version:r.version||"1.0.0",description:r.description||`Custom layout ${e}`,template:o,propsSchema:this.parsePropsSchema(s),defaultProps:{...i,...a}},l=this.layouts.get(e),p=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?p||console.error(`Updated custom layout: ${e}`):console.error(`Registered custom layout: ${e}`));}registerLayouts(e){for(let[t,r]of Object.entries(e))try{this.registerLayout(t,r);}catch(o){console.warn(`Failed to register custom layout ${t}:`,o instanceof Error?o.message:o);}}loadAllLayouts(){let e=this.options.templatesPath;if(!Zo.existsSync(e))throw new ne(`Templates directory not found: ${e}`,void 0,new Error(`Directory does not exist: ${e}`));try{let t=Zo.readdirSync(e).filter(r=>r.endsWith(".yaml")||r.endsWith(".yml"));t.length===0&&console.warn(`No layout files found in ${e}`);for(let r of t){let o=r.replace(/\.(yaml|yml)$/,""),s=B__namespace.join(e,r);try{let i=this.loadLayoutFile(s,o),a=`crewx/${o}`;this.layouts.set(a,i),a!=="crewx/minimal"&&process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded layout: ${a} from ${r}`);}catch(i){console.error(`Failed to load layout file ${r}:`,i);}}process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded ${this.layouts.size} layouts from ${e}`);}catch(t){throw new ne(`Failed to read layouts directory: ${e}`,void 0,t instanceof Error?t:new Error(String(t)))}}loadLayoutFile(e,t){try{let r=Zo.readFileSync(e,"utf-8");if(!r||r.trim().length===0)throw console.warn(`Empty YAML file: ${e}, will use fallback`),new ne(`Empty YAML file: ${e}`,t,new Error("File content is empty"));let o=jsYaml.load(r);if(!o||typeof o!="object")throw console.warn(`Invalid YAML content in ${e} (parsed as ${typeof o}), will use fallback`),new ne(`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 ne(`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 ne(`Layout template is missing or empty in ${e}`,t);return {id:o.id||`crewx/${t}`,version:o.version||"1.0.0",description:o.description||"",template:o.template,propsSchema:this.parsePropsSchema(o.propsSchema||{}),defaultProps:this.extractDefaultProps(o.propsSchema||{})}}}catch(r){throw new ne(`Failed to load layout file: ${e}`,t,r instanceof Error?r:new Error(String(r)))}}parsePropsSchema(e){let t={};for(let[r,o]of Object.entries(e))typeof o=="object"&&o!==null&&(t[r]=o);return t}extractDefaultProps(e){let t={};for(let[r,o]of Object.entries(e))o&&typeof o=="object"&&("defaultValue"in o?t[r]=o.defaultValue:"default"in o&&(t[r]=o.default));return t}normalizeLayoutId(e){return e?e.includes("/")?e:`crewx/${e}`:this.options.fallbackLayoutId}resolveLayoutEntry(e,t){let r=new Set;if(t)if(r.add(t),t.includes("/")){let o=t.split("/"),s=o[o.length-1];s&&r.add(s);}else r.add(`crewx/${t}`);r.add("default");for(let o of r){let s=e[o];if(typeof s=="string"&&s.trim().length>0)return {template:s};if(s&&typeof s=="object"&&typeof s.template=="string"&&s.template.trim().length>0)return {template:s.template,propsSchema:s.propsSchema}}for(let o of Object.values(e)){if(typeof o=="string"&&o.trim().length>0)return {template:o};let s=o;if(s&&typeof s=="object"&&typeof s.template=="string"&&s.template.trim().length>0)return {template:s.template,propsSchema:s.propsSchema}}}};u();u();u();function et(n){return String(Math.floor(Math.abs(n))).padStart(2,"0")}function $t(n){if(!(n instanceof Date)||Number.isNaN(n.getTime()))return "";let e=-n.getTimezoneOffset(),t=e>=0?"+":"-";return `${n.getFullYear()}-${et(n.getMonth()+1)}-${et(n.getDate())}T${et(n.getHours())}:${et(n.getMinutes())}:${et(n.getSeconds())}${t}${et(e/60)}:${et(e%60)}`}function ya(n){return n.map(e=>{let t=typeof e?.timestamp=="number"?e.timestamp:null;return t===null?e:{...e,created_at:$t(new Date(t))}})}function wa(n){let e=[];for(let t of n)t?.isAssistant&&t?.metadata?.agent_id?e.push(String(t.metadata.agent_id)):!t?.isAssistant&&t?.metadata?.caller_agent_id&&e.push(String(t.metadata.caller_agent_id));return Array.from(new Set(e))}function Do(...n){let e=n[n.length-1],t=n[0],r=n[1],o=typeof n[2]=="string"?n[2]:"",s=typeof n[3]=="string"?n[3]:"";if(!Array.isArray(t)||t.length===0||!(e&&typeof e.fn=="function"))return "";let a=wa(t),d=a.length>0?a[0]:"",l=Date.now(),p={messages:ya(t),platform:typeof r=="string"?r:"",messagesCount:t.length,agentIds:a,primaryAgentId:d,currentAgentId:o,threadId:s,now:$t(new Date(l))};return e.fn(p)}u();var Ut=class{defaultMode;constructor(e={}){this.defaultMode=e.defaultMode??"lenient";}validate(e,t,r=this.defaultMode){let o=[],s=this.validateObject(e??{},t,r,["props"],o);if(o.length>0&&r==="strict")throw new be("Props validation failed in strict mode",o);return {valid:o.length===0,props:s,errors:o}}validateObject(e,t,r,o,s){let i={};if(r==="strict")for(let a of Object.keys(e))t[a]||s.push({path:this.buildPath([...o,a]),message:`Unknown prop '${a}'`,value:e[a]});for(let[a,d]of Object.entries(t)){let l=[...o,a],p=e[a],g=this.resolveProp(p,d,l,r,s);g.shouldAssign&&(i[a]=g.value);}return i}resolveProp(e,t,r,o,s){let i=this.buildPath(r);if(this.isNil(e)){if(t.isRequired&&s.push({path:i,message:`Required prop '${r[r.length-1]}' is missing`}),t.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(t.defaultValue)};if(t.type==="shape"&&t.shape){let d=this.applyDefaults(t.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}let a=this.validateType(e,t,r,o,s);if(!a.valid){if(t.type==="shape"&&a.value&&this.isPlainObject(a.value))return {shouldAssign:true,value:a.value};if(s.push({path:i,message:a.error??"Invalid value",value:e}),t.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(t.defaultValue)};if(t.type==="shape"&&t.shape){let d=this.applyDefaults(t.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}return {shouldAssign:true,value:a.value}}validateType(e,t,r,o,s){let{type:i}=t;switch(i){case "string":return this.validateString(e,t);case "number":return this.validateNumber(e,t);case "bool":return this.validateBoolean(e);case "array":return this.validateArray(e,t);case "arrayOf":return this.validateArrayOf(e,t,r,o,s);case "object":return this.validatePlainObject(e);case "shape":return this.validateShape(e,t,r,o,s);case "oneOfType":return this.validateOneOfType(e,t);case "func":return this.validateFunction(e);case "node":return {valid:true,value:e};default:return {valid:true,value:e}}}validateString(e,t){return typeof e!="string"?{valid:false,error:`Expected string, got ${this.describeType(e)}`}:t.oneOf&&!t.oneOf.includes(e)?{valid:false,error:`Expected one of: ${t.oneOf.join(", ")}`}:t.minLength!==void 0&&e.length<t.minLength?{valid:false,error:`String length must be >= ${t.minLength}`}:t.maxLength!==void 0&&e.length>t.maxLength?{valid:false,error:`String length must be <= ${t.maxLength}`}:t.pattern&&!new RegExp(t.pattern).test(e)?{valid:false,error:`String does not match pattern ${t.pattern}`}:{valid:true,value:e}}validateNumber(e,t){return typeof e!="number"||Number.isNaN(e)?{valid:false,error:`Expected number, got ${this.describeType(e)}`}:t.min!==void 0&&e<t.min?{valid:false,error:`Number must be >= ${t.min}`}:t.max!==void 0&&e>t.max?{valid:false,error:`Number must be <= ${t.max}`}:t.oneOf&&!t.oneOf.includes(e)?{valid:false,error:`Expected one of: ${t.oneOf.join(", ")}`}:{valid:true,value:e}}validateBoolean(e){return typeof e!="boolean"?{valid:false,error:`Expected boolean, got ${this.describeType(e)}`}:{valid:true,value:e}}validateArray(e,t){return Array.isArray(e)?t.minLength!==void 0&&e.length<t.minLength?{valid:false,error:`Array length must be >= ${t.minLength}`}:t.maxLength!==void 0&&e.length>t.maxLength?{valid:false,error:`Array length must be <= ${t.maxLength}`}:{valid:true,value:[...e]}:{valid:false,error:`Expected array, got ${this.describeType(e)}`}}validateArrayOf(e,t,r,o,s){let i=this.validateArray(e,t);if(!i.valid)return i;let a=[],d=t.itemType,l=t.itemOneOf,p=s.length;return i.value.forEach((g,m)=>{let f=[...r,String(m)];if(d){let v=this.validateType(g,{type:d},f,o,s);v.valid?a.push(v.value):s.push({path:this.buildPath(f),message:v.error??"Invalid array item",value:g});}else a.push(g);l&&!l.includes(g)&&s.push({path:this.buildPath(f),message:`Array item must be one of: ${l.join(", ")}`,value:g});}),{valid:s.length===p,value:a}}validatePlainObject(e){return this.isPlainObject(e)?{valid:true,value:{...e}}:{valid:false,error:`Expected object, got ${this.describeType(e)}`}}validateFunction(e){return typeof e!="function"?{valid:false,error:`Expected function, got ${this.describeType(e)}`}:{valid:true,value:e}}validateShape(e,t,r,o,s){if(!this.isPlainObject(e))return {valid:false,error:`Expected object, got ${this.describeType(e)}`};let i=s.length,a=this.validateObject(e,t.shape??{},o,r,s);return {valid:s.length===i,value:a}}validateOneOfType(e,t){let r=t.types??[];return r.some(s=>this.matchesType(e,s))?{valid:true,value:e}:{valid:false,error:`Value does not match any allowed type: ${r.join(", ")}`}}matchesType(e,t){switch(t){case "string":return typeof e=="string";case "number":return typeof e=="number"&&!Number.isNaN(e);case "bool":case "boolean":return typeof e=="boolean";case "array":return Array.isArray(e);case "object":return this.isPlainObject(e);case "func":case "function":return typeof e=="function";case "shape":return this.isPlainObject(e);case "node":return e==null||typeof e!="symbol";default:return true}}applyDefaults(e){let t={};for(let[r,o]of Object.entries(e)){if(o.defaultValue!==void 0){t[r]=this.cloneValue(o.defaultValue);continue}if(o.type==="shape"&&o.shape){let s=this.applyDefaults(o.shape);Object.keys(s).length>0&&(t[r]=s);}}return t}cloneValue(e){if(Array.isArray(e))return e.map(t=>this.cloneValue(t));if(this.isPlainObject(e)){let t={};for(let[r,o]of Object.entries(e))t[r]=this.cloneValue(o);return t}return e}isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}isNil(e){return e==null}buildPath(e){return e.join(".")}describeType(e){return Array.isArray(e)?"array":e===null?"null":typeof e}};var jt=class{handlebars;propsValidator;constructor(e){this.handlebars=_e__namespace.default.create(),this.propsValidator=e??new Ut,this.registerHelpers();}render(e,t,r={}){try{let o=this.prepareRenderContext(e,t,r);return this.handlebars.compile(e.template,{noEscape:!0})(o)}catch(o){throw o instanceof Error?new Error(`Template rendering failed for layout '${e.id}': ${o.message}`):new Error(`Unknown error rendering layout '${e.id}'`)}}validate(e,t,r="lenient"){return this.executeValidation(e,t,r)}resolveProps(e,t,r="lenient"){let o=this.mergeProps(e.defaultProps,t);return !e.propsSchema||Object.keys(e.propsSchema).length===0?{valid:true,props:o,errors:[]}:this.executeValidation(o,e.propsSchema,r)}prepareRenderContext(e,t,r){let{validationMode:o="lenient",skipValidation:s=false}=r,i=s?this.mergeProps(e.defaultProps,t.props):this.resolveProps(e,t.props,o).props;return {...t,vars:this.sanitizeVars(t.vars),props:i}}registerHelpers(){this.handlebars.registerHelper("formatConversation",Do),_e__namespace.default.helpers.each&&this.handlebars.registerHelper("each",_e__namespace.default.helpers.each),_e__namespace.default.helpers.if&&this.handlebars.registerHelper("if",_e__namespace.default.helpers.if),_e__namespace.default.helpers.unless&&this.handlebars.registerHelper("unless",_e__namespace.default.helpers.unless),_e__namespace.default.helpers.with&&this.handlebars.registerHelper("with",_e__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 _e__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"],r=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/Math.pow(1024,r)*100)/100+" "+t[r]});}executeValidation(e,t,r){try{return this.propsValidator.validate(e,t,r)}catch(o){if(o instanceof be&&o.errors&&o.errors.length>0){let s=o.errors[0];if(s)throw new be(s.message,o.errors)}throw o}}mergeProps(e,t){let r=this.cloneDeep(e??{});return t?this.deepMerge(r,t):r}deepMerge(e,t){for(let[r,o]of Object.entries(t)){if(this.isPlainObject(o)){let s=e[r];e[r]=this.deepMerge(this.isPlainObject(s)?s:{},o);continue}if(Array.isArray(o)){e[r]=this.cloneDeep(o);continue}e[r]=o;}return e}cloneDeep(e){if(Array.isArray(e))return e.map(t=>this.cloneDeep(t));if(this.isPlainObject(e)){let t={};for(let[r,o]of Object.entries(e))t[r]=this.cloneDeep(o);return t}return e}isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}sanitizeVars(e){if(!e)return {};let t={...e};if(typeof e.user_input=="string"){t.user_input_raw=e.user_input;let r=e.user_input.replace(/\{\{\{/g,"{{{").replace(/\}\}\}/g,"}}}").replace(/\{\{/g,"{{").replace(/\}\}/g,"}}");t.user_input=this.handlebars.escapeExpression(r);}return t}};u();var ln="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function _a(n){let e=crypto$1.randomBytes(n*2),t="";for(let r=0;r<e.length&&t.length<n;r++){let o=e[r];o<248&&(t+=ln[o%62]);}for(;t.length<n;)t+=ln[crypto$1.randomBytes(1)[0]%62];return t}function tt(n){return `${n}_${_a(8)}`}function va(n,e){let{createHash:t}=te("crypto"),r=t("sha256").update(e).digest(),o=Buffer.alloc(8);for(let i=0;i<32;i++)o[i%8]^=r[i];let s="";for(let i of o)s+=ln[i%62];return `${n}_${s}`}u();function cn(n){let e=t=>String(t).padStart(2,"0");return `${n.getFullYear()}${e(n.getMonth()+1)}${e(n.getDate())}T${e(n.getHours())}${e(n.getMinutes())}${e(n.getSeconds())}`}u();function $o(n,e){return t=>{try{let r=e(t);r instanceof Promise&&r.catch(o=>{console.error(`[crewx] event listener error (${n}): ${o instanceof Error?o.message:String(o)}`);});}catch(r){console.error(`[crewx] event listener error (${n}): ${r instanceof Error?r.message:String(r)}`);}}}var Ft=class{_emitter=new events.EventEmitter;on(e,t){let r=$o(e,t);return this._emitter.on(e,r),()=>this._emitter.off(e,r)}once(e,t){let r=$o(e,t);return this._emitter.once(e,r),()=>this._emitter.off(e,r)}emit(e,t){this._emitter.emit(e,t);}};u();function un(n){let e=new Map,t=r=>r.startsWith(`${n}::`)?r:`${n}::${r}`;return {async get(r){let o=e.get(t(r));return o?o.value:void 0},async set(r,o){e.set(t(r),{value:o});},async delete(r){return e.delete(t(r))},async list(r){let o=r?t(r):`${n}::`,s=[];for(let i of e.keys())i.startsWith(o)&&s.push(i.slice(n.length+2));return s}}}u();var pn=new async_hooks.AsyncLocalStorage;function Aa(){return pn}function Ea(n,e){return pn.run(n,e)}function gn(n){let e=n.log??n.logger??{debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},t=n.agentRunner??{run:async()=>({output:""})},r=n.db??{get:async()=>{},set:async()=>{},delete:async()=>false,list:async()=>[]},o=n.storage??{put:async()=>"",get:async()=>{},delete:async()=>false},s=n.audit??{log:async()=>{}},i=n.onInbound??(async()=>({accepted:true})),a=n.onEmitEvent??(async()=>({accepted:true})),d=n.onUpdateMessage??(async()=>{}),l=n.onResolveUser??(async m=>({userId:m,displayName:m})),p=async m=>{let f=pn.getStore();if(!f){e.warn("respondSync called outside sync window \u2014 graceful degradation (no-op)",{textPreview:typeof m=="object"&&"text"in m?m.text.slice(0,80):void 0});return}let v="text"in m?m.text:"";f.res.status(200).json({text:v});},g=n.httpRouter??{registerRoute:()=>{e.warn("httpRouter not configured \u2014 registerRoute is a no-op");}};return {instanceId:n.instanceId,config:n.config,capabilities:n.capabilities,log:e,agentRunner:t,db:r,storage:o,audit:s,abortSignal:n.abortSignal??new AbortController().signal,httpRouter:g,inbound:i,emitEvent:a,updateMessage:d,resolveUser:l,respondSync:p}}Ne();u();var Ra=/^-\s*Status:\s*active/m,Ca=/^---\n([\s\S]*?)\n---/,Pa=/^type:\s*goal\s*$/m;async function Uo(n,e=Qe,t){let r=typeof t=="string"?[t]:Array.isArray(t)?t:void 0;if(r){let a=[];for(let d of r){let l=e.resolvePath(n,d);await e.exists(l)&&a.push(await e.readFile(l));}return a.join(`
|
|
47
48
|
---
|
|
48
|
-
`)}let s=(await e.readdir(n)).filter(a=>a.endsWith(".md"));if(s.length===0)return "";let i=[];for(let a of s){let d=e.resolvePath(n,a),l=await e.readFile(d),p=
|
|
49
|
+
`)}let s=(await e.readdir(n)).filter(a=>a.endsWith(".md"));if(s.length===0)return "";let i=[];for(let a of s){let d=e.resolvePath(n,a),l=await e.readFile(d),p=Ca.exec(l);!p||!Pa.test(p[1])||Ra.test(l)&&i.push(l);}return i.join(`
|
|
49
50
|
---
|
|
50
|
-
`)}u();function
|
|
51
|
+
`)}u();function Ta(){let n=new Date,e=n.getFullYear(),t=String(n.getMonth()+1).padStart(2,"0"),r=String(n.getDate()).padStart(2,"0");return `${e}-${t}-${r}`}async function jo(n,e=Qe){let t=e.resolvePath(n,`${Ta()}.md`);return await e.exists(t)?e.readFile(t):""}u();pt();Ne();function fn(n){if(n.startsWith("cli/"))return exports.BUILTIN_ADAPTERS[n.slice(4)]}function Sa(n,e={}){if(!n.startsWith("cli/"))return true;let r=(e.lookupAdapter??fn)(n);if(!r?.command)return false;let o=Et(r.command,{env:e.env});return B__namespace.default.isAbsolute(o)}function mn(n,e={}){if(!Array.isArray(n))return n;if(n.length===0)return "cli/claude";for(let t of n)if(Sa(t,e))return t;return n[0]}u();var Ht=new async_hooks.AsyncLocalStorage;function hn(n){if(n)return {parentTaskId:n.parentTaskId??null,rootTraceId:n.rootTraceId,callerAgentId:n.callerAgentId??null}}u();function Oa(n){return typeof n!="string"?"":n.replace(/</g,"<").replace(/>/g,">")}function yn(n){return n.messages.map(e=>({text:Oa(e.text),isAssistant:e.isAssistant,timestamp:e.timestamp,metadata:e.metadata,files:void 0}))}u();Ne();De();u();u();var wt=class{resolveDbPath(){return process.env.CREWX_DB?process.env.CREWX_DB:process.env.CREWX_TRACES_DB?process.env.CREWX_TRACES_DB:B.join(La__default.default.homedir(),".crewx","crewx.db")}resolveDbPaths(){return [this.resolveDbPath()]}isMissingTableError(e){return e instanceof Error&&/no such table:/i.test(e.message)}dbExists(e){return Zo.existsSync(e??this.resolveDbPath())}};u();function ve(n){let e=te("better-sqlite3"),{drizzle:t}=te("drizzle-orm/better-sqlite3"),r=new e(n);return r.exec("PRAGMA journal_mode = WAL"),r.exec("PRAGMA busy_timeout = 5000"),r.exec("PRAGMA foreign_keys = ON"),r.exec("PRAGMA analysis_limit = 400"),r.exec("PRAGMA optimize"),{db:t(r),runRaw:(o,s=[])=>r.prepare(o).run(...s),close:()=>r.close()}}u();var Fo=new Set,$a={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 _n(n,e){return (n.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function Ua(n,e){if(e>0||!_n(n,"tasks"))return;let t=n.all("PRAGMA table_info(tasks)"),r=new Set(t.map(o=>o.name));for(let[o,s]of Object.entries($a))r.has(o)||n.run(`ALTER TABLE tasks ADD COLUMN ${o} ${s}`);}var ja={"0002_normalize_task_names":{workspace_name:"TEXT",project_name:"TEXT"}};function Fa(n,e,t){if(!_n(n,"__drizzle_migrations")||!_n(n,"tasks"))return;let r=n.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(Zo.readFileSync(B__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=ja[i.tag];if(!a)continue;let d=B__namespace.default.join(e,`${i.tag}.sql`);if(!Zo.existsSync(d))continue;let l=Zo.readFileSync(d,"utf-8"),p=crypto$1.createHash("sha256").update(l).digest("hex");if(o.has(p))continue;let g=n.all("PRAGMA table_info(tasks)"),m=new Set(g.map(f=>f.name));for(let[f,v]of Object.entries(a))m.has(f)||(n.run(`ALTER TABLE tasks ADD COLUMN ${f} ${v}`),m.add(f));}}function Ha(n,e,t){let r=n.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(Zo.readFileSync(B__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=B__namespace.default.join(e,`${i.tag}.sql`);if(!Zo.existsSync(a))continue;let d=Zo.readFileSync(a,"utf-8"),l=crypto$1.createHash("sha256").update(d).digest("hex");if(o.has(l))continue;let p=/ALTER\s+TABLE\s+[`"]?(\w+)[`"]?\s+ADD\s+[`"]?(\w+)[`"]?/gi,g=[],m;for(;(m=p.exec(d))!==null;)g.push({table:m[1],column:m[2]});if(g.length===0||!d.split(/-->\s*statement-breakpoint/).map(y=>y.trim()).filter(Boolean).every(y=>/^ALTER\s+TABLE\s+.+\s+ADD\s+/i.test(y)))continue;g.every(({table:y,column:k})=>n.all(`PRAGMA table_info("${y}")`).some(w=>w.name===k))&&n.run(t`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${l}, ${i.when})`);}}function qa(n){let{migrate:e}=te("drizzle-orm/better-sqlite3/migrator"),{sql:t}=te("drizzle-orm"),r=[B__namespace.default.join(__dirname,"../migrations"),B__namespace.default.join(__dirname,"migrations"),B__namespace.default.join(__dirname,"../../../../drizzle/migrations"),B__namespace.default.join(process.cwd(),"drizzle/migrations")],o=r.find(l=>Zo.existsSync(B__namespace.default.join(l,"meta/_journal.json")));if(!o)throw new Error(`migrations folder not found. Searched:
|
|
51
52
|
${r.join(`
|
|
52
|
-
`)}`);let s=n.get(t`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'`),i=0;s?.cnt&&(i=n.get(t`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0),$a(n,i),s?.cnt&&(Fa(n,o,t),ja(n,o,t)),e(n,{migrationsFolder:o});let d=(n.get(t`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0)-i;if(d>0){let l=s?.cnt?"Database migrated":"Database initialized";console.error(`[crewx] ${l} (${d} migration${d>1?"s":""} applied).`);}}function vr(n,e){jo.has(e)||(Ha(n),jo.add(e));}u();var I=class extends Error{code;cause;constructor(e,t,r){super(t),this.name="RepositoryError",this.code=e,this.cause=r,Object.setPrototypeOf(this,new.target.prototype);}};u();u();var Ho=sqliteCore.sqliteTable("workspaces",{id:sqliteCore.text("id").primaryKey(),slug:sqliteCore.text("slug").notNull().unique(),name:sqliteCore.text("name").notNull(),workspace_path:sqliteCore.text("workspace_path"),description:sqliteCore.text("description"),is_active:sqliteCore.integer("is_active").notNull().default(1),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()});u();var c=sqliteCore.sqliteTable("tasks",{id:sqliteCore.text("id").primaryKey(),agent_id:sqliteCore.text("agent_id").notNull(),user_id:sqliteCore.text("user_id"),prompt:sqliteCore.text("prompt").notNull(),mode:sqliteCore.text("mode").notNull().default("execute"),status:sqliteCore.text("status").notNull().default("running"),result:sqliteCore.text("result"),error:sqliteCore.text("error"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),metadata:sqliteCore.text("metadata"),workspace_id:sqliteCore.text("workspace_id"),trace_id:sqliteCore.text("trace_id"),parent_task_id:sqliteCore.text("parent_task_id"),caller_agent_id:sqliteCore.text("caller_agent_id"),model:sqliteCore.text("model"),platform:sqliteCore.text("platform").default("cli"),crewx_version:sqliteCore.text("crewx_version"),input_tokens:sqliteCore.integer("input_tokens").default(0),output_tokens:sqliteCore.integer("output_tokens").default(0),cost_usd:sqliteCore.real("cost_usd").default(0),pid:sqliteCore.integer("pid"),rendered_prompt:sqliteCore.text("rendered_prompt"),command:sqliteCore.text("command"),coding_agent_command:sqliteCore.text("coding_agent_command"),exit_code:sqliteCore.integer("exit_code"),logs:sqliteCore.text("logs"),thread_id:sqliteCore.text("thread_id"),workspace_ref:sqliteCore.text("workspace_ref"),project_id:sqliteCore.text("project_id"),project_ref:sqliteCore.text("project_ref"),cached_input_tokens:sqliteCore.integer("cached_input_tokens").default(0),run_epoch:sqliteCore.integer("run_epoch").default(0)},n=>({idx_tasks_agent_id:sqliteCore.index("idx_tasks_agent_id").on(n.agent_id),idx_tasks_status:sqliteCore.index("idx_tasks_status").on(n.status),idx_tasks_started_at:sqliteCore.index("idx_tasks_started_at").on(n.started_at),idx_tasks_trace_id:sqliteCore.index("idx_tasks_trace_id").on(n.trace_id),idx_tasks_parent_task_id:sqliteCore.index("idx_tasks_parent_task_id").on(n.parent_task_id),idx_tasks_crewx_version:sqliteCore.index("idx_tasks_crewx_version").on(n.crewx_version),idx_tasks_pid:sqliteCore.index("idx_tasks_pid").on(n.pid),idx_tasks_thread_id:sqliteCore.index("idx_tasks_thread_id").on(n.thread_id),idx_tasks_workspace_id:sqliteCore.index("idx_tasks_workspace_id").on(n.workspace_id),idx_tasks_workspace_ref:sqliteCore.index("idx_tasks_workspace_ref").on(n.workspace_ref),idx_tasks_project_id:sqliteCore.index("idx_tasks_project_id").on(n.project_id),idx_tasks_ws_started:sqliteCore.index("idx_tasks_ws_started").on(n.workspace_id,n.started_at)}));u();var qo=sqliteCore.sqliteTable("threads",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").references(()=>Ho.id,{onDelete:"set null"}),platform:sqliteCore.text("platform").notNull().default("cli"),title:sqliteCore.text("title"),first_message:sqliteCore.text("first_message"),last_message:sqliteCore.text("last_message"),message_count:sqliteCore.integer("message_count").notNull().default(0),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull(),metadata:sqliteCore.text("metadata"),title_locked:sqliteCore.integer("title_locked").notNull().default(0),pinned:sqliteCore.integer("pinned").notNull().default(0),starred:sqliteCore.integer("starred").notNull().default(0)},n=>({idx_threads_updated_at:sqliteCore.index("idx_threads_updated_at").on(n.updated_at),idx_threads_workspace_id:sqliteCore.index("idx_threads_workspace_id").on(n.workspace_id),idx_threads_ws_updated:sqliteCore.index("idx_threads_ws_updated").on(n.workspace_id,n.updated_at),idx_threads_title:sqliteCore.index("idx_threads_title").on(n.title)}));u();var nt=sqliteCore.sqliteTable("spans",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>c.id,{onDelete:"set null"}),parent_span_id:sqliteCore.text("parent_span_id").references(()=>nt.id,{onDelete:"set null"}),name:sqliteCore.text("name").notNull(),kind:sqliteCore.text("kind").notNull().default("internal"),status:sqliteCore.text("status").notNull().default("ok"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),error:sqliteCore.text("error"),attributes:sqliteCore.text("attributes")},n=>({idx_spans_task_id:sqliteCore.index("idx_spans_task_id").on(n.task_id),idx_spans_parent_span_id:sqliteCore.index("idx_spans_parent_span_id").on(n.parent_span_id)}));u();sqliteCore.sqliteTable("tool_calls",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>c.id,{onDelete:"cascade"}),session_id:sqliteCore.text("session_id"),tool_name:sqliteCore.text("tool_name").notNull(),files:sqliteCore.text("files"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),duration_ms:sqliteCore.integer("duration_ms"),timestamp:sqliteCore.text("timestamp").notNull()},n=>({idx_tool_calls_task_id:sqliteCore.index("idx_tool_calls_task_id").on(n.task_id),idx_tool_calls_tool_name:sqliteCore.index("idx_tool_calls_tool_name").on(n.tool_name),idx_tool_calls_timestamp:sqliteCore.index("idx_tool_calls_timestamp").on(n.timestamp)}));u();sqliteCore.sqliteTable("thread_boxes",{id:sqliteCore.text("id").primaryKey(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>qo.id,{onDelete:"cascade"}),seq:sqliteCore.integer("seq").notNull(),first_task_id:sqliteCore.text("first_task_id").notNull(),mid_task_id:sqliteCore.text("mid_task_id").notNull(),last_task_id:sqliteCore.text("last_task_id").notNull(),task_count:sqliteCore.integer("task_count").notNull(),summary:sqliteCore.text("summary"),source_tokens:sqliteCore.integer("source_tokens").notNull(),summary_tokens:sqliteCore.integer("summary_tokens"),created_at:sqliteCore.text("created_at").notNull()},n=>({idx_thread_boxes_thread_id:sqliteCore.index("idx_thread_boxes_thread_id").on(n.thread_id),idx_thread_boxes_seq:sqliteCore.index("idx_thread_boxes_seq").on(n.thread_id,n.seq),uniq_thread_boxes_thread_seq:sqliteCore.unique().on(n.thread_id,n.seq)}));u();sqliteCore.sqliteTable("request_logs",{id:sqliteCore.text("id").primaryKey(),path:sqliteCore.text("path").notNull(),method:sqliteCore.text("method").notNull(),status_code:sqliteCore.integer("status_code").notNull(),duration_ms:sqliteCore.integer("duration_ms").notNull(),ip:sqliteCore.text("ip"),request_headers:sqliteCore.text("request_headers"),response_headers:sqliteCore.text("response_headers"),request_body:sqliteCore.text("request_body"),response_body:sqliteCore.text("response_body"),query:sqliteCore.text("query"),user_id:sqliteCore.text("user_id"),project_id:sqliteCore.text("project_id"),partition_key:sqliteCore.text("partition_key").notNull(),timestamp:sqliteCore.text("timestamp").notNull().default(drizzleOrm.sql`(datetime('now'))`),metadata:sqliteCore.text("metadata")},n=>({idx_request_logs_timestamp:sqliteCore.index("idx_request_logs_timestamp").on(n.timestamp),idx_request_logs_path:sqliteCore.index("idx_request_logs_path").on(n.path),idx_request_logs_status_code:sqliteCore.index("idx_request_logs_status_code").on(n.status_code),idx_request_logs_partition_key:sqliteCore.index("idx_request_logs_partition_key").on(n.partition_key)}));u();sqliteCore.sqliteTable("usage_limit_snapshots",{id:sqliteCore.text("id").primaryKey(),provider:sqliteCore.text("provider").notNull(),account_ref:sqliteCore.text("account_ref").notNull().default("default"),limit_window:sqliteCore.text("limit_window").notNull(),bucket_start:sqliteCore.text("bucket_start").notNull(),captured_at:sqliteCore.text("captured_at").notNull(),used_percent:sqliteCore.integer("used_percent").notNull(),remaining_percent:sqliteCore.integer("remaining_percent").notNull(),resets_at:sqliteCore.text("resets_at"),source:sqliteCore.text("source").notNull(),metadata:sqliteCore.text("metadata")},n=>({uniq_usage_limit_snapshots_bucket:sqliteCore.uniqueIndex("uniq_usage_limit_snapshots_bucket").on(n.provider,n.account_ref,n.limit_window,n.bucket_start),idx_usage_limit_snapshots_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_window_bucket").on(n.limit_window,n.bucket_start),idx_usage_limit_snapshots_provider_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_provider_window_bucket").on(n.provider,n.limit_window,n.bucket_start)}));u();sqliteCore.sqliteTable("usage_reports",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),month:sqliteCore.text("month").notNull(),generated_at:sqliteCore.text("generated_at").notNull(),source_range:sqliteCore.text("source_range").notNull(),tier:sqliteCore.text("tier").notNull(),total_tokens:sqliteCore.integer("total_tokens").notNull(),total_cost_usd:sqliteCore.real("total_cost_usd").notNull(),payload:sqliteCore.text("payload").notNull(),payload_hash:sqliteCore.text("payload_hash"),signature:sqliteCore.text("signature"),signed_at:sqliteCore.text("signed_at"),issuer:sqliteCore.text("issuer")},n=>({uniq_usage_reports_ws_month:sqliteCore.uniqueIndex("uniq_usage_reports_ws_month").on(n.workspace_id,n.month)}));u();sqliteCore.sqliteTable("notifications",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id"),task_id:sqliteCore.text("task_id"),thread_id:sqliteCore.text("thread_id"),source:sqliteCore.text("source").notNull().default("agent"),level:sqliteCore.text("level").notNull().default("info"),title:sqliteCore.text("title").notNull(),body:sqliteCore.text("body"),target_user_id:sqliteCore.text("target_user_id"),created_at:sqliteCore.text("created_at").notNull(),metadata:sqliteCore.text("metadata")},n=>({idx_notifications_ws_created:sqliteCore.index("idx_notifications_ws_created").on(n.workspace_id,drizzleOrm.sql`${n.created_at} DESC`)}));sqliteCore.sqliteTable("notification_reads",{notification_id:sqliteCore.text("notification_id").notNull(),user_id:sqliteCore.text("user_id").notNull(),read_at:sqliteCore.text("read_at").notNull()},n=>({pk:sqliteCore.primaryKey({columns:[n.notification_id,n.user_id]})}));u();sqliteCore.sqliteTable("agent_suggestions",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id").notNull(),task_id:sqliteCore.text("task_id"),type:sqliteCore.text("type").notNull(),status:sqliteCore.text("status").notNull().default("pending"),payload:sqliteCore.text("payload").notNull(),applied_commit_sha:sqliteCore.text("applied_commit_sha"),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()},n=>({idx_agent_suggestions_ws_agent:sqliteCore.index("idx_agent_suggestions_ws_agent").on(n.workspace_id,n.agent_id),idx_agent_suggestions_ws_created:sqliteCore.index("idx_agent_suggestions_ws_created").on(n.workspace_id,n.created_at)}));var je="2026-05-09",hd="0.8.9-rc.13",Fe=10,He=parseInt(hd.split("rc.")[1]),yd=new Set(["workflow","mcp"]),Yo=600*1e3,Bt=class extends wt{dbPath;pidNullObservedSince=new Map;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=H.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=H.dirname(t);Qo.existsSync(o)||Qo.mkdirSync(o,{recursive:true});}else if(!Qo.existsSync(t))throw new I("NOT_FOUND","Database not found");let r=ve(t);if(e)try{vr(r.db,t);}catch(o){throw r.close(),o}return r}startTask(e){let t=this.openHandle(true);try{t.db.insert(c).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:c.id,set:{pid:drizzleOrm.sql`COALESCE(excluded.pid, ${c.pid})`},setWhere:drizzleOrm.eq(c.status,"running")}).run();}catch(r){throw r instanceof I?r:new I("DB_ERROR","Failed to start task",r)}finally{t.close();}}finishTask(e){let t=this.openHandle(true);try{let r=e.runEpoch??null;t.runRaw(`UPDATE tasks SET status=?, result=?, error=?, completed_at=?, duration_ms=?,
|
|
53
|
+
`)}`);let s=n.get(t`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'`),i=0;s?.cnt&&(i=n.get(t`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0),Ua(n,i),s?.cnt&&(Ha(n,o,t),Fa(n,o,t)),e(n,{migrationsFolder:o});let d=(n.get(t`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0)-i;if(d>0){let l=s?.cnt?"Database migrated":"Database initialized";console.error(`[crewx] ${l} (${d} migration${d>1?"s":""} applied).`);}}function vr(n,e){Fo.has(e)||(qa(n),Fo.add(e));}u();var I=class extends Error{code;cause;constructor(e,t,r){super(t),this.name="RepositoryError",this.code=e,this.cause=r,Object.setPrototypeOf(this,new.target.prototype);}};u();u();var qo=sqliteCore.sqliteTable("workspaces",{id:sqliteCore.text("id").primaryKey(),slug:sqliteCore.text("slug").notNull().unique(),name:sqliteCore.text("name").notNull(),workspace_path:sqliteCore.text("workspace_path"),description:sqliteCore.text("description"),is_active:sqliteCore.integer("is_active").notNull().default(1),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()});u();var c=sqliteCore.sqliteTable("tasks",{id:sqliteCore.text("id").primaryKey(),agent_id:sqliteCore.text("agent_id").notNull(),user_id:sqliteCore.text("user_id"),prompt:sqliteCore.text("prompt").notNull(),mode:sqliteCore.text("mode").notNull().default("execute"),status:sqliteCore.text("status").notNull().default("running"),result:sqliteCore.text("result"),error:sqliteCore.text("error"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),metadata:sqliteCore.text("metadata"),workspace_id:sqliteCore.text("workspace_id"),trace_id:sqliteCore.text("trace_id"),parent_task_id:sqliteCore.text("parent_task_id"),caller_agent_id:sqliteCore.text("caller_agent_id"),model:sqliteCore.text("model"),platform:sqliteCore.text("platform").default("cli"),crewx_version:sqliteCore.text("crewx_version"),input_tokens:sqliteCore.integer("input_tokens").default(0),output_tokens:sqliteCore.integer("output_tokens").default(0),cost_usd:sqliteCore.real("cost_usd").default(0),pid:sqliteCore.integer("pid"),rendered_prompt:sqliteCore.text("rendered_prompt"),command:sqliteCore.text("command"),coding_agent_command:sqliteCore.text("coding_agent_command"),exit_code:sqliteCore.integer("exit_code"),logs:sqliteCore.text("logs"),thread_id:sqliteCore.text("thread_id"),workspace_ref:sqliteCore.text("workspace_ref"),project_id:sqliteCore.text("project_id"),project_ref:sqliteCore.text("project_ref"),cached_input_tokens:sqliteCore.integer("cached_input_tokens").default(0),run_epoch:sqliteCore.integer("run_epoch").default(0)},n=>({idx_tasks_agent_id:sqliteCore.index("idx_tasks_agent_id").on(n.agent_id),idx_tasks_status:sqliteCore.index("idx_tasks_status").on(n.status),idx_tasks_started_at:sqliteCore.index("idx_tasks_started_at").on(n.started_at),idx_tasks_trace_id:sqliteCore.index("idx_tasks_trace_id").on(n.trace_id),idx_tasks_parent_task_id:sqliteCore.index("idx_tasks_parent_task_id").on(n.parent_task_id),idx_tasks_crewx_version:sqliteCore.index("idx_tasks_crewx_version").on(n.crewx_version),idx_tasks_pid:sqliteCore.index("idx_tasks_pid").on(n.pid),idx_tasks_thread_id:sqliteCore.index("idx_tasks_thread_id").on(n.thread_id),idx_tasks_workspace_id:sqliteCore.index("idx_tasks_workspace_id").on(n.workspace_id),idx_tasks_workspace_ref:sqliteCore.index("idx_tasks_workspace_ref").on(n.workspace_ref),idx_tasks_project_id:sqliteCore.index("idx_tasks_project_id").on(n.project_id),idx_tasks_ws_started:sqliteCore.index("idx_tasks_ws_started").on(n.workspace_id,n.started_at)}));u();var Bo=sqliteCore.sqliteTable("threads",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").references(()=>qo.id,{onDelete:"set null"}),platform:sqliteCore.text("platform").notNull().default("cli"),title:sqliteCore.text("title"),first_message:sqliteCore.text("first_message"),last_message:sqliteCore.text("last_message"),message_count:sqliteCore.integer("message_count").notNull().default(0),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull(),metadata:sqliteCore.text("metadata"),title_locked:sqliteCore.integer("title_locked").notNull().default(0),pinned:sqliteCore.integer("pinned").notNull().default(0),starred:sqliteCore.integer("starred").notNull().default(0)},n=>({idx_threads_updated_at:sqliteCore.index("idx_threads_updated_at").on(n.updated_at),idx_threads_workspace_id:sqliteCore.index("idx_threads_workspace_id").on(n.workspace_id),idx_threads_ws_updated:sqliteCore.index("idx_threads_ws_updated").on(n.workspace_id,n.updated_at),idx_threads_title:sqliteCore.index("idx_threads_title").on(n.title)}));u();var ot=sqliteCore.sqliteTable("spans",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>c.id,{onDelete:"set null"}),parent_span_id:sqliteCore.text("parent_span_id").references(()=>ot.id,{onDelete:"set null"}),name:sqliteCore.text("name").notNull(),kind:sqliteCore.text("kind").notNull().default("internal"),status:sqliteCore.text("status").notNull().default("ok"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),error:sqliteCore.text("error"),attributes:sqliteCore.text("attributes")},n=>({idx_spans_task_id:sqliteCore.index("idx_spans_task_id").on(n.task_id),idx_spans_parent_span_id:sqliteCore.index("idx_spans_parent_span_id").on(n.parent_span_id)}));u();sqliteCore.sqliteTable("tool_calls",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>c.id,{onDelete:"cascade"}),session_id:sqliteCore.text("session_id"),tool_name:sqliteCore.text("tool_name").notNull(),files:sqliteCore.text("files"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),duration_ms:sqliteCore.integer("duration_ms"),timestamp:sqliteCore.text("timestamp").notNull()},n=>({idx_tool_calls_task_id:sqliteCore.index("idx_tool_calls_task_id").on(n.task_id),idx_tool_calls_tool_name:sqliteCore.index("idx_tool_calls_tool_name").on(n.tool_name),idx_tool_calls_timestamp:sqliteCore.index("idx_tool_calls_timestamp").on(n.timestamp)}));u();sqliteCore.sqliteTable("thread_boxes",{id:sqliteCore.text("id").primaryKey(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>Bo.id,{onDelete:"cascade"}),seq:sqliteCore.integer("seq").notNull(),first_task_id:sqliteCore.text("first_task_id").notNull(),mid_task_id:sqliteCore.text("mid_task_id").notNull(),last_task_id:sqliteCore.text("last_task_id").notNull(),task_count:sqliteCore.integer("task_count").notNull(),summary:sqliteCore.text("summary"),source_tokens:sqliteCore.integer("source_tokens").notNull(),summary_tokens:sqliteCore.integer("summary_tokens"),created_at:sqliteCore.text("created_at").notNull()},n=>({idx_thread_boxes_thread_id:sqliteCore.index("idx_thread_boxes_thread_id").on(n.thread_id),idx_thread_boxes_seq:sqliteCore.index("idx_thread_boxes_seq").on(n.thread_id,n.seq),uniq_thread_boxes_thread_seq:sqliteCore.unique().on(n.thread_id,n.seq)}));u();sqliteCore.sqliteTable("request_logs",{id:sqliteCore.text("id").primaryKey(),path:sqliteCore.text("path").notNull(),method:sqliteCore.text("method").notNull(),status_code:sqliteCore.integer("status_code").notNull(),duration_ms:sqliteCore.integer("duration_ms").notNull(),ip:sqliteCore.text("ip"),request_headers:sqliteCore.text("request_headers"),response_headers:sqliteCore.text("response_headers"),request_body:sqliteCore.text("request_body"),response_body:sqliteCore.text("response_body"),query:sqliteCore.text("query"),user_id:sqliteCore.text("user_id"),project_id:sqliteCore.text("project_id"),partition_key:sqliteCore.text("partition_key").notNull(),timestamp:sqliteCore.text("timestamp").notNull().default(drizzleOrm.sql`(datetime('now'))`),metadata:sqliteCore.text("metadata")},n=>({idx_request_logs_timestamp:sqliteCore.index("idx_request_logs_timestamp").on(n.timestamp),idx_request_logs_path:sqliteCore.index("idx_request_logs_path").on(n.path),idx_request_logs_status_code:sqliteCore.index("idx_request_logs_status_code").on(n.status_code),idx_request_logs_partition_key:sqliteCore.index("idx_request_logs_partition_key").on(n.partition_key)}));u();sqliteCore.sqliteTable("usage_limit_snapshots",{id:sqliteCore.text("id").primaryKey(),provider:sqliteCore.text("provider").notNull(),account_ref:sqliteCore.text("account_ref").notNull().default("default"),limit_window:sqliteCore.text("limit_window").notNull(),bucket_start:sqliteCore.text("bucket_start").notNull(),captured_at:sqliteCore.text("captured_at").notNull(),used_percent:sqliteCore.integer("used_percent").notNull(),remaining_percent:sqliteCore.integer("remaining_percent").notNull(),resets_at:sqliteCore.text("resets_at"),source:sqliteCore.text("source").notNull(),metadata:sqliteCore.text("metadata")},n=>({uniq_usage_limit_snapshots_bucket:sqliteCore.uniqueIndex("uniq_usage_limit_snapshots_bucket").on(n.provider,n.account_ref,n.limit_window,n.bucket_start),idx_usage_limit_snapshots_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_window_bucket").on(n.limit_window,n.bucket_start),idx_usage_limit_snapshots_provider_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_provider_window_bucket").on(n.provider,n.limit_window,n.bucket_start)}));u();sqliteCore.sqliteTable("usage_reports",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),month:sqliteCore.text("month").notNull(),generated_at:sqliteCore.text("generated_at").notNull(),source_range:sqliteCore.text("source_range").notNull(),tier:sqliteCore.text("tier").notNull(),total_tokens:sqliteCore.integer("total_tokens").notNull(),total_cost_usd:sqliteCore.real("total_cost_usd").notNull(),payload:sqliteCore.text("payload").notNull(),payload_hash:sqliteCore.text("payload_hash"),signature:sqliteCore.text("signature"),signed_at:sqliteCore.text("signed_at"),issuer:sqliteCore.text("issuer")},n=>({uniq_usage_reports_ws_month:sqliteCore.uniqueIndex("uniq_usage_reports_ws_month").on(n.workspace_id,n.month)}));u();sqliteCore.sqliteTable("notifications",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id"),task_id:sqliteCore.text("task_id"),thread_id:sqliteCore.text("thread_id"),source:sqliteCore.text("source").notNull().default("agent"),level:sqliteCore.text("level").notNull().default("info"),title:sqliteCore.text("title").notNull(),body:sqliteCore.text("body"),target_user_id:sqliteCore.text("target_user_id"),created_at:sqliteCore.text("created_at").notNull(),metadata:sqliteCore.text("metadata")},n=>({idx_notifications_ws_created:sqliteCore.index("idx_notifications_ws_created").on(n.workspace_id,drizzleOrm.sql`${n.created_at} DESC`)}));sqliteCore.sqliteTable("notification_reads",{notification_id:sqliteCore.text("notification_id").notNull(),user_id:sqliteCore.text("user_id").notNull(),read_at:sqliteCore.text("read_at").notNull()},n=>({pk:sqliteCore.primaryKey({columns:[n.notification_id,n.user_id]})}));u();sqliteCore.sqliteTable("agent_suggestions",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id").notNull(),task_id:sqliteCore.text("task_id"),type:sqliteCore.text("type").notNull(),status:sqliteCore.text("status").notNull().default("pending"),payload:sqliteCore.text("payload").notNull(),applied_commit_sha:sqliteCore.text("applied_commit_sha"),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()},n=>({idx_agent_suggestions_ws_agent:sqliteCore.index("idx_agent_suggestions_ws_agent").on(n.workspace_id,n.agent_id),idx_agent_suggestions_ws_created:sqliteCore.index("idx_agent_suggestions_ws_created").on(n.workspace_id,n.created_at)}));var je="2026-05-09",yd="0.8.9-rc.13",Fe=10,He=parseInt(yd.split("rc.")[1]),wd=new Set(["workflow","mcp"]),Qo=600*1e3,Bt=class extends wt{dbPath;pidNullObservedSince=new Map;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=B.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=B.dirname(t);Zo.existsSync(o)||Zo.mkdirSync(o,{recursive:true});}else if(!Zo.existsSync(t))throw new I("NOT_FOUND","Database not found");let r=ve(t);if(e)try{vr(r.db,t);}catch(o){throw r.close(),o}return r}startTask(e){let t=this.openHandle(true);try{t.db.insert(c).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:c.id,set:{pid:drizzleOrm.sql`COALESCE(excluded.pid, ${c.pid})`},setWhere:drizzleOrm.eq(c.status,"running")}).run();}catch(r){throw r instanceof I?r:new I("DB_ERROR","Failed to start task",r)}finally{t.close();}}finishTask(e){let t=this.openHandle(true);try{let r=e.runEpoch??null;t.runRaw(`UPDATE tasks SET status=?, result=?, error=?, completed_at=?, duration_ms=?,
|
|
53
54
|
exit_code=?, input_tokens=?, output_tokens=?, cached_input_tokens=?, cost_usd=?,
|
|
54
55
|
model=COALESCE(?, model)
|
|
55
|
-
WHERE id=? AND status='running' AND COALESCE(run_epoch, 0) = COALESCE(?, 0)`,[e.status,e.result??null,e.error??null,e.completedAt,e.durationMs??null,e.exitCode??null,e.inputTokens??0,e.outputTokens??0,e.cachedInputTokens??0,e.costUsd??0,e.model??null,e.id,r]);}catch(r){throw r instanceof I?r:new I("DB_ERROR","Failed to finish task",r)}finally{t.close();}}appendLog(e,t){let r=this.openHandle(true);try{r.db.transaction(o=>{let s=o.select({logs:c.logs}).from(c).where(drizzleOrm.eq(c.id,e)).limit(1).get(),i=s?.logs?JSON.parse(s.logs):[];i.push(t),o.update(c).set({logs:JSON.stringify(i)}).where(drizzleOrm.eq(c.id,e)).run();},{behavior:"immediate"});}catch(o){throw o instanceof I?o:new I("DB_ERROR","Failed to append log",o)}finally{r.close();}}getRunningTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(c).where(drizzleOrm.eq(c.status,"running")).orderBy(drizzleOrm.desc(c.started_at)).all()}catch(t){throw new I("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(c).orderBy(drizzleOrm.desc(c.started_at)).limit(100).all()}catch(t){throw new I("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(c).where(drizzleOrm.eq(c.id,e)).limit(1).get()??void 0}catch(r){throw new I("DB_ERROR","Failed to get task",r)}finally{t.close();}}killTask(e){if(!this.dbExists())return {killed:false};let t=this.openHandle(true);try{let r=t.db.select({id:c.id,status:c.status,pid:c.pid}).from(c).where(drizzleOrm.eq(c.id,e)).limit(1).get();if(!r||r.status!=="running")return {killed:!1};if(r.pid)try{process.kill(r.pid,"SIGTERM");}catch{}return t.db.update(c).set({status:"failed",error:"Killed by user",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(c.id,e),drizzleOrm.eq(c.status,"running"))).run(),{killed:!0,pid:r.pid??void 0}}catch(r){throw r instanceof I?r:new I("DB_ERROR","Failed to kill task",r)}finally{t.close();}}reapOrphanedTasks(){if(!this.dbExists())return 0;let e=this.openHandle(true);try{let t=e.db.select({id:c.id,pid:c.pid,platform:c.platform,run_epoch:c.run_epoch}).from(c).where(drizzleOrm.eq(c.status,"running")).all(),r=Date.now(),o=new Set,s=0;for(let i of t){if(i.pid){let l=!1;try{process.kill(i.pid,0),l=!0;}catch{}l||(e.db.update(c).set({status:"failed",error:"Reaped: process not found (orphaned task)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(c.id,i.id),drizzleOrm.eq(c.status,"running"))).run(),s++);continue}if(
|
|
56
|
+
WHERE id=? AND status='running' AND COALESCE(run_epoch, 0) = COALESCE(?, 0)`,[e.status,e.result??null,e.error??null,e.completedAt,e.durationMs??null,e.exitCode??null,e.inputTokens??0,e.outputTokens??0,e.cachedInputTokens??0,e.costUsd??0,e.model??null,e.id,r]);}catch(r){throw r instanceof I?r:new I("DB_ERROR","Failed to finish task",r)}finally{t.close();}}appendLog(e,t){let r=this.openHandle(true);try{r.db.transaction(o=>{let s=o.select({logs:c.logs}).from(c).where(drizzleOrm.eq(c.id,e)).limit(1).get(),i=s?.logs?JSON.parse(s.logs):[];i.push(t),o.update(c).set({logs:JSON.stringify(i)}).where(drizzleOrm.eq(c.id,e)).run();},{behavior:"immediate"});}catch(o){throw o instanceof I?o:new I("DB_ERROR","Failed to append log",o)}finally{r.close();}}getRunningTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(c).where(drizzleOrm.eq(c.status,"running")).orderBy(drizzleOrm.desc(c.started_at)).all()}catch(t){throw new I("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(c).orderBy(drizzleOrm.desc(c.started_at)).limit(100).all()}catch(t){throw new I("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(c).where(drizzleOrm.eq(c.id,e)).limit(1).get()??void 0}catch(r){throw new I("DB_ERROR","Failed to get task",r)}finally{t.close();}}killTask(e){if(!this.dbExists())return {killed:false};let t=this.openHandle(true);try{let r=t.db.select({id:c.id,status:c.status,pid:c.pid}).from(c).where(drizzleOrm.eq(c.id,e)).limit(1).get();if(!r||r.status!=="running")return {killed:!1};if(r.pid)try{process.kill(r.pid,"SIGTERM");}catch{}return t.db.update(c).set({status:"failed",error:"Killed by user",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(c.id,e),drizzleOrm.eq(c.status,"running"))).run(),{killed:!0,pid:r.pid??void 0}}catch(r){throw r instanceof I?r:new I("DB_ERROR","Failed to kill task",r)}finally{t.close();}}reapOrphanedTasks(){if(!this.dbExists())return 0;let e=this.openHandle(true);try{let t=e.db.select({id:c.id,pid:c.pid,platform:c.platform,run_epoch:c.run_epoch}).from(c).where(drizzleOrm.eq(c.status,"running")).all(),r=Date.now(),o=new Set,s=0;for(let i of t){if(i.pid){let l=!1;try{process.kill(i.pid,0),l=!0;}catch{}l||(e.db.update(c).set({status:"failed",error:"Reaped: process not found (orphaned task)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(c.id,i.id),drizzleOrm.eq(c.status,"running"))).run(),s++);continue}if(wd.has(i.platform??"cli"))continue;let a=`${i.id}:${i.run_epoch??0}`;o.add(a);let d=this.pidNullObservedSince.get(a);if(d===void 0){this.pidNullObservedSince.set(a,r);continue}r-d>=Qo&&(e.db.update(c).set({status:"failed",error:"Reaped: pid never recorded after resume (stale running_instruction)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(c.id,i.id),drizzleOrm.eq(c.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=Qo){if(!this.dbExists())return 0;let t=this.openHandle(true);try{let r=new Date(Date.now()-e).toISOString();return t.db.update(c).set({status:"failed",error:"Reaped: stale workflow run (finally not executed)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(c.status,"running"),drizzleOrm.eq(c.platform,"workflow"),drizzleOrm.isNull(c.pid),drizzleOrm.lt(c.started_at,r))).run().changes??0}finally{t.close();}}findTaskStatus(e,t){let r=this.resolveDbPaths();for(let o of r){if(!Zo.existsSync(o))continue;let s=ve(o);try{let i=t?drizzleOrm.eq(c.workspace_id,t):void 0,a=i?drizzleOrm.and(drizzleOrm.eq(c.id,e),i):drizzleOrm.eq(c.id,e),d=s.db.select().from(c).where(a).limit(1).get()??void 0;if(!d){let l=drizzleOrm.or(drizzleOrm.eq(c.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(c.thread_id),drizzleOrm.like(c.command,`%--thread=${e}%`))),p=i?drizzleOrm.and(l,i):l;d=s.db.select().from(c).where(p).orderBy(drizzleOrm.desc(c.started_at)).limit(1).get()??void 0;}if(d)return d}catch(i){throw new I("DB_ERROR","Failed to find task status",i)}finally{s.close();}}}findChildTasks(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!Zo.existsSync(i))continue;let a=ve(i);try{let d=t?drizzleOrm.and(drizzleOrm.eq(c.parent_task_id,e),drizzleOrm.eq(c.workspace_id,t)):drizzleOrm.eq(c.parent_task_id,e),l=a.db.select().from(c).where(d).orderBy(drizzleOrm.asc(c.started_at)).all();for(let p of l)o.has(p.id)||(o.add(p.id),s.push(p));}catch(d){throw new I("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`
|
|
56
57
|
SELECT
|
|
57
58
|
COALESCE(workspace_id, 'unknown') AS workspace_id,
|
|
58
59
|
COALESCE(SUM(input_tokens), 0) AS input_tokens,
|
|
@@ -73,7 +74,7 @@ ${r.join(`
|
|
|
73
74
|
FROM tasks
|
|
74
75
|
GROUP BY workspace_id
|
|
75
76
|
ORDER BY (COALESCE(SUM(input_tokens), 0) + COALESCE(SUM(output_tokens), 0)) DESC
|
|
76
|
-
`)}catch(r){throw new I("DB_ERROR","Failed to get workspace usage summary",r)}finally{t.close();}}getThreadTokenUsage(e,t){let r=this.resolveDbPaths(),o=new Set,s=0,i=0,a=0;for(let d of r){if(!
|
|
77
|
+
`)}catch(r){throw new I("DB_ERROR","Failed to get workspace usage summary",r)}finally{t.close();}}getThreadTokenUsage(e,t){let r=this.resolveDbPaths(),o=new Set,s=0,i=0,a=0;for(let d of r){if(!Zo.existsSync(d))continue;let l=ve(d);try{let p=drizzleOrm.or(drizzleOrm.eq(c.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(c.thread_id),drizzleOrm.like(c.command,`%--thread=${e}%`))),g=t?drizzleOrm.and(p,drizzleOrm.eq(c.workspace_id,t)):p,m=l.db.select({id:c.id,input_tokens:c.input_tokens,output_tokens:c.output_tokens,cost_usd:c.cost_usd}).from(c).where(g).all();for(let f of m)o.has(f.id)||(o.add(f.id),s+=f.input_tokens??0,i+=f.output_tokens??0,a+=f.cost_usd??0);}catch(p){throw new I("DB_ERROR","Failed to get thread token usage",p)}finally{l.close();}}return {inputTokens:s,outputTokens:i,costUsd:a}}findTasksByThread(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!Zo.existsSync(i))continue;let a=ve(i);try{let d=drizzleOrm.or(drizzleOrm.eq(c.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(c.thread_id),drizzleOrm.like(c.command,`%--thread=${e}%`))),l=t?drizzleOrm.and(d,drizzleOrm.eq(c.workspace_id,t)):d,p=a.db.select().from(c).where(l).orderBy(drizzleOrm.asc(c.started_at)).all();for(let g of p)o.has(g.id)||(o.add(g.id),s.push(g));}catch(d){throw new I("DB_ERROR","Failed to find tasks by thread",d)}finally{a.close();}}return s}parseWorkflowCardMetadata(e){if(!e)return {};try{let t=JSON.parse(e);return {kind:typeof t.kind=="string"?t.kind:void 0,workflowRunId:typeof t.workflowRunId=="string"?t.workflowRunId:void 0}}catch{return {}}}extractThreadIdFromCommand(e){return e?/--thread=(\S+)/.exec(e)?.[1]??null:null}batchFetchWorkflowCards(e,t){let r=new Map;if(e.length===0)return r;let o=new Set(e),s=new Map,i=t?drizzleOrm.eq(c.workspace_id,t):void 0,a=(d,l)=>{if(!d)return;let p=s.get(d);if(p&&l.started_at<=p)return;let g=this.parseWorkflowCardMetadata(l.metadata);g.kind==="workflow_card"&&(s.set(d,l.started_at),r.set(d,{taskId:l.id,workflowRunId:g.workflowRunId,raw:l.result??void 0}));};for(let d of this.resolveDbPaths()){if(!Zo.existsSync(d))continue;let l=ve(d);try{let p=drizzleOrm.and(drizzleOrm.inArray(c.thread_id,e),drizzleOrm.like(c.metadata,'%"kind":"workflow_card"%')),g=l.db.select({id:c.id,thread_id:c.thread_id,metadata:c.metadata,result:c.result,started_at:c.started_at}).from(c).where(i?drizzleOrm.and(p,i):p).all();for(let v of g)a(v.thread_id,v);let m=drizzleOrm.and(drizzleOrm.isNull(c.thread_id),drizzleOrm.like(c.metadata,'%"kind":"workflow_card"%')),f=l.db.select({id:c.id,command:c.command,metadata:c.metadata,result:c.result,started_at:c.started_at}).from(c).where(i?drizzleOrm.and(m,i):m).all();for(let v of f){let y=this.extractThreadIdFromCommand(v.command);!y||!o.has(y)||a(y,v);}}catch(p){throw new I("DB_ERROR","Failed to batch fetch workflow cards",p)}finally{l.close();}}return r}findAllTasks(e){if(!this.dbExists())return {rows:[],total:0};let t=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(drizzleOrm.eq(c.workspace_id,e.workspaceId));let o=e.agents&&e.agents.length>0?e.agents:e.agentId?[e.agentId]:null;o&&r.push(drizzleOrm.inArray(c.agent_id,o));let s=e.statuses&&e.statuses.length>0?e.statuses:e.status?[e.status]:null;s&&r.push(drizzleOrm.inArray(c.status,s));let i=e.q??e.search;i&&r.push(drizzleOrm.like(c.prompt,`%${i}%`)),e.from&&r.push(drizzleOrm.gte(c.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(c.started_at,e.to));let a=r.length>0?drizzleOrm.and(...r):void 0,d=t.db.select({count:drizzleOrm.sql`count(*)`}).from(c).where(a).get(),l=(e.sortDir??"DESC")==="ASC"?drizzleOrm.asc(c.started_at):drizzleOrm.desc(c.started_at);return {rows:t.db.select().from(c).where(a).orderBy(l).limit(e.limit).offset(e.offset).all(),total:d?.count??0}}catch(r){throw new I("DB_ERROR","Failed to find all tasks",r)}finally{t.close();}}getAgentUsage(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.all(r?drizzleOrm.sql`
|
|
77
78
|
SELECT
|
|
78
79
|
t.agent_id,
|
|
79
80
|
t.workspace_id,
|
|
@@ -211,7 +212,7 @@ ${r.join(`
|
|
|
211
212
|
AND t.started_at < ${t}
|
|
212
213
|
GROUP BY date(t.started_at), t.agent_id
|
|
213
214
|
ORDER BY date(t.started_at) ASC
|
|
214
|
-
`).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 I("DB_ERROR","Failed to get agent usage trend",s)}finally{o.close();}}findTaskForStop(e,t){if(!this.dbExists())return;let r=this.openHandle(false);try{return r.db.select().from(c).where(drizzleOrm.and(drizzleOrm.eq(c.id,e),drizzleOrm.eq(c.workspace_id,t))).limit(1).get()??void 0}catch(o){throw new I("DB_ERROR","Failed to find task for stop",o)}finally{r.close();}}findLatestTaskByMetadata(e){if(!this.dbExists())return null;let t=this.openHandle(false);try{return t.db.select({id:c.id,thread_id:c.thread_id,status:c.status,result:c.result,error:c.error,started_at:c.started_at,completed_at:c.completed_at}).from(c).where(drizzleOrm.and(drizzleOrm.eq(c.agent_id,e.agentId),drizzleOrm.eq(c.workspace_id,e.workspaceId),drizzleOrm.sql`${c.metadata} IS NOT NULL AND json_valid(${c.metadata}) AND json_extract(${c.metadata}, '$.' || ${e.metaKey}) = ${e.metaValue}`)).orderBy(drizzleOrm.desc(c.started_at)).limit(1).get()??null}catch(r){throw new I("DB_ERROR","Failed to find latest task by metadata",r)}finally{t.close();}}markTaskFailed(e,t,r){if(!this.dbExists())return;let o=this.openHandle(true);try{let s=new Date().toISOString(),i=r?drizzleOrm.and(drizzleOrm.eq(c.id,e),drizzleOrm.eq(c.status,"running"),drizzleOrm.eq(c.workspace_id,r)):drizzleOrm.and(drizzleOrm.eq(c.id,e),drizzleOrm.eq(c.status,"running"));o.db.update(c).set({status:"failed",error:t,completed_at:s}).where(i).run();}catch(s){throw s instanceof I?s:new I("DB_ERROR","Failed to mark task failed",s)}finally{o.close();}}findTasksByPromptHint(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!
|
|
215
|
+
`).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 I("DB_ERROR","Failed to get agent usage trend",s)}finally{o.close();}}findTaskForStop(e,t){if(!this.dbExists())return;let r=this.openHandle(false);try{return r.db.select().from(c).where(drizzleOrm.and(drizzleOrm.eq(c.id,e),drizzleOrm.eq(c.workspace_id,t))).limit(1).get()??void 0}catch(o){throw new I("DB_ERROR","Failed to find task for stop",o)}finally{r.close();}}findLatestTaskByMetadata(e){if(!this.dbExists())return null;let t=this.openHandle(false);try{return t.db.select({id:c.id,thread_id:c.thread_id,status:c.status,result:c.result,error:c.error,started_at:c.started_at,completed_at:c.completed_at}).from(c).where(drizzleOrm.and(drizzleOrm.eq(c.agent_id,e.agentId),drizzleOrm.eq(c.workspace_id,e.workspaceId),drizzleOrm.sql`${c.metadata} IS NOT NULL AND json_valid(${c.metadata}) AND json_extract(${c.metadata}, '$.' || ${e.metaKey}) = ${e.metaValue}`)).orderBy(drizzleOrm.desc(c.started_at)).limit(1).get()??null}catch(r){throw new I("DB_ERROR","Failed to find latest task by metadata",r)}finally{t.close();}}markTaskFailed(e,t,r){if(!this.dbExists())return;let o=this.openHandle(true);try{let s=new Date().toISOString(),i=r?drizzleOrm.and(drizzleOrm.eq(c.id,e),drizzleOrm.eq(c.status,"running"),drizzleOrm.eq(c.workspace_id,r)):drizzleOrm.and(drizzleOrm.eq(c.id,e),drizzleOrm.eq(c.status,"running"));o.db.update(c).set({status:"failed",error:t,completed_at:s}).where(i).run();}catch(s){throw s instanceof I?s:new I("DB_ERROR","Failed to mark task failed",s)}finally{o.close();}}findTasksByPromptHint(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!Zo.existsSync(i))continue;let a=ve(i);try{let d=t?drizzleOrm.and(drizzleOrm.like(c.prompt,`%${e}%`),drizzleOrm.eq(c.workspace_id,t)):drizzleOrm.like(c.prompt,`%${e}%`),l=a.db.select().from(c).where(d).orderBy(drizzleOrm.asc(c.started_at)).all();for(let p of l)o.has(p.id)||(o.add(p.id),s.push(p));}catch(d){throw new I("DB_ERROR","Failed to find tasks by prompt hint",d)}finally{a.close();}}return s}getProviderUsage(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=drizzleOrm.sql`
|
|
215
216
|
CASE
|
|
216
217
|
WHEN ${c.model} LIKE 'claude-%' OR ${c.model} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
|
|
217
218
|
WHEN ${c.model} LIKE 'gpt-%' OR ${c.model} LIKE 'codex-%' THEN 'codex'
|
|
@@ -294,19 +295,19 @@ ${r.join(`
|
|
|
294
295
|
FROM ${c}
|
|
295
296
|
${s}
|
|
296
297
|
ORDER BY ${c.started_at} ASC
|
|
297
|
-
`).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 I("DB_ERROR","Failed to get tasks for report",s)}finally{o.close();}}findTaskEvidence(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(drizzleOrm.eq(c.workspace_id,e.workspaceId)),e.agents&&e.agents.length>0&&r.push(drizzleOrm.inArray(c.agent_id,e.agents)),e.statuses&&e.statuses.length>0&&r.push(drizzleOrm.inArray(c.status,e.statuses)),e.from&&r.push(drizzleOrm.gte(c.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(c.started_at,e.to));let o=r.length>0?drizzleOrm.and(...r):void 0,s=(e.order??"DESC")==="ASC"?drizzleOrm.asc(c.started_at):drizzleOrm.desc(c.started_at),i={id:c.id,agent_id:c.agent_id,status:c.status,prompt:c.prompt,started_at:c.started_at,completed_at:c.completed_at,thread_id:c.thread_id};return e.limit?t.db.select(i).from(c).where(o).orderBy(s).limit(e.limit).all():t.db.select(i).from(c).where(o).orderBy(s).all()}catch(r){throw new I("DB_ERROR","Failed to find task evidence",r)}finally{t.close();}}findThreadChains(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{let r=e.maxThreads??8,o=e.maxTurnsPerThread??4,s=[drizzleOrm.isNotNull(c.thread_id),drizzleOrm.isNull(c.parent_task_id),drizzleOrm.isNull(c.caller_agent_id),drizzleOrm.or(drizzleOrm.isNull(c.platform),drizzleOrm.ne(c.platform,"workflow")),drizzleOrm.or(drizzleOrm.isNull(c.metadata),drizzleOrm.notLike(c.metadata,'%"kind":"workflow_card"%')),drizzleOrm.or(drizzleOrm.isNull(c.metadata),drizzleOrm.notLike(c.metadata,'%"retriedFromTaskId"%'))];e.workspaceId&&s.push(drizzleOrm.eq(c.workspace_id,e.workspaceId)),e.from&&s.push(drizzleOrm.gte(c.started_at,e.from)),e.to&&s.push(drizzleOrm.lt(c.started_at,e.to));let i=t.db.select({id:c.id,agent_id:c.agent_id,status:c.status,prompt:c.prompt,started_at:c.started_at,completed_at:c.completed_at,thread_id:c.thread_id}).from(c).where(drizzleOrm.and(...s)).orderBy(drizzleOrm.asc(c.started_at),drizzleOrm.asc(c.id)).all(),a=new Map;for(let l of i){if(!l.thread_id)continue;let p={id:l.id,agentId:l.agent_id,status:l.status,prompt:l.prompt,startedAt:l.started_at,completedAt:l.completed_at},g=a.get(l.thread_id);g?g.push(p):a.set(l.thread_id,[p]);}let d=[];for(let[l,p]of a){let g=p.filter(m=>m.agentId===e.targetAgentId).length;g<2||d.push({threadId:l,targetAgentTurnCount:g,turns:p});}return d.sort((l,p)=>{let g=l.turns[l.turns.length-1].startedAt,m=p.turns[p.turns.length-1].startedAt;return g<m?1:g>m?-1:0}),d.slice(0,r).map(l=>({threadId:l.threadId,targetAgentTurnCount:l.targetAgentTurnCount,turns:l.turns.slice(-o)}))}catch(r){throw new I("DB_ERROR","Failed to find thread chains",r)}finally{t.close();}}};var
|
|
298
|
-
`)[0].trimStart();return
|
|
299
|
-
`).find(s=>s.trim()&&!s.startsWith("Read "))?.trim()??e.trim();if(!o)return "unknown";try{let s=
|
|
300
|
-
`)[0]?.slice(0,150)??null:o.input?.slice(0,150)??null,i=
|
|
301
|
-
`));}return d}u();u();var
|
|
302
|
-
${i.message}`)}let s=rr(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"&&!H.isAbsolute(l.path)?i[a]={...l,path:H.resolve(r,l.path)}:i[a]=l;}else i[a]=d;return {...s,documents:i}}return s}static mergeCrewxConfig(e,t){let r=new Map;for(let w of e.agents??[])r.set(w.id,w);for(let w of t.agents??[])r.has(w.id)&&console.warn(`[agent-loader] User agent "${w.id}" overrides built-in`),r.set(w.id,w);let o=Array.from(r.values()),s={...e.layouts??{},...t.layouts??{}},i={...e.documents??{},...t.documents??{}},a=e,d=t,l=ks(a.vars,d.vars),p=ks(a.settings,d.settings),g;e.skills&&t.skills&&typeof e.skills=="object"&&typeof t.skills=="object"&&!Array.isArray(e.skills)&&!Array.isArray(t.skills)?g={...e.skills,...t.skills}:g=t.skills??e.skills;let m=[...e.hooks??[],...t.hooks??[]],f=al(a.providers,d.providers),v={...e},y={...t};for(let w of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete v[w],delete y[w];let _={...{...v,...y},agents:o,layouts:s,documents:i,skills:g};return m.length>0&&(_.hooks=m),l!==void 0&&(_.vars=l),p!==void 0&&(_.settings=p),f!==void 0&&(_.providers=f),_}static async loadYaml(e,t,r){let o=t?.includeBuiltIns!==false,s,i;if(o){let p=await n.loadBuiltInConfig(r);if(e!==void 0){let g=nr(e);s=n.mergeCrewxConfig(p,g),i=H.dirname(e);}else s=p,i=process.cwd();}else {if(e===void 0)throw new Error("[@crewx/sdk] loadYaml: path is required when includeBuiltIns is false");s=nr(e),i=H.dirname(e);}let a=new Qe(r);await a.load(s.documents,i);let d=s.agents??[];return await xs(d,s,t),new n(d,t??{},s,a,i)}static async fromConfig(e,t,r,o){let s=t?.includeBuiltIns===true,i=e;if(s){let p=await n.loadBuiltInConfig(o);i=n.mergeCrewxConfig(p,e);}let a=new Qe(o);await a.load(i.documents,r??(typeof process<"u"?process.cwd():"/"));let d=i.agents??[];return await xs(d,i,t),new n(d,t??{},i,a,r)}get agents(){return this._agents}get config(){return this._config}get plugins(){return this._plugins}get tools(){return this._tools}get workspaceId(){return this._workspaceId}get workspaceName(){return this._workspaceName}getAgent(e){let t=e.startsWith("@")?e.slice(1):e;return this._agents.get(t)}getRemoteProviderConfig(e){let t=this._config?.providers;return Array.isArray(t)?t.find(o=>o.type==="remote"&&o.id===e):void 0}computeTaskLogPath(e,t){let r=un(t);return H.join(this._projectRoot,".crewx","logs",`${r}_${e}.log`)}registerTool(e,t){this._tools.set(e,{name:e,...t});}async use(e){this._plugins.includes(e)||(await e.attach(this),this._plugins.push(e));}handler(e){return En(this,e)}async registerChannelAdapter(e){let{adapter:t,instanceId:r,config:o}=e;if(this._activeAdapters.has(r))throw new Error(`Adapter instance already registered: ${r}`);let s=new Set(t.manifest.capabilities),i=e.store??pn(r),a=e.defaultMode??"query",d=t.manifest.platform,l=e.agentRunner??{run:async(f,v,y)=>{let _=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${f}`,v,{threadId:y?.threadId,platform:d});return {output:_.ok?_.data:_.error?.message??""}}},p=e.onInbound??(async f=>{let v=f.routingHints?.agentId??e.defaultAgent;if(!v)return {accepted:false,reason:"no_agent"};let{output:y}=await l.run(v,f.text,{threadId:f.threadId});return {accepted:true,output:y}}),g=fn({instanceId:r,config:o,capabilities:s,db:i,agentRunner:l,onInbound:p}),m={adapter:t,ctx:g,state:"starting"};this._activeAdapters.set(r,m),this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"starting",timestamp:new Date});try{await t.start(g),m.state="started",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"started",timestamp:new Date});}catch(f){throw m.state="failed",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"failed",error:f instanceof Error?f:new Error(String(f)),timestamp:new Date}),this._activeAdapters.delete(r),f}}async unregisterChannelAdapter(e){let t=this._activeAdapters.get(e);if(t){t.state="stopping",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"stopping",timestamp:new Date});try{await t.adapter.stop(t.ctx),t.state="stopped",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"stopped",timestamp:new Date});}catch(r){t.state="failed",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"failed",error:r instanceof Error?r:new Error(String(r)),timestamp:new Date});}finally{this._activeAdapters.delete(e);}}}async stopAllAdapters(e={}){let t=e.timeoutMs??1e4,r=Array.from(this._activeAdapters.keys()),o=await Promise.allSettled(r.map(s=>Promise.race([this.unregisterChannelAdapter(s),new Promise((i,a)=>setTimeout(()=>a(new Error(`Adapter stop timeout: ${s}`)),t))])));for(let s=0;s<o.length;s++)o[s].status==="rejected"&&console.error(`[crewx] adapter stop error (${r[s]}): ${o[s].reason}`);}abortAll(){for(let[e,t]of this._activeTasks)if(t.pid!==void 0)try{process.platform==="win32"?process.kill(t.pid,"SIGTERM"):process.kill(-t.pid,"SIGTERM");}catch(r){console.error(`[crewx] abort task ${e} (pid=${t.pid}) error: ${r instanceof Error?r.message:String(r)}`);}}async _drainActiveTasks(e){let t=Array.from(this._activeTasks.values()).map(r=>r.done);t.length!==0&&await Promise.race([Promise.allSettled(t),new Promise(r=>setTimeout(r,e).unref())]);}async close(){this.abortAll(),await this._drainActiveTasks(It+1e3),await this.stopAllAdapters({timeoutMs:1e4});let e=[...this._remoteTargets.values()];this._remoteTargets.clear(),await Promise.allSettled(e.map(async r=>{try{await(await r).close();}catch(o){console.error(`[crewx] remote target close error: ${o instanceof Error?o.message:String(o)}`);}}));let t=[...this._plugins].reverse();for(let r of t)try{await r.detach(this);}catch(o){console.error(`[crewx] plugin ${r.name} detach error: ${o instanceof Error?o.message:String(o)}`);}this._plugins.length=0;}filterAgents(e){let t=a=>a?a.split(",").map(d=>d.trim().toLowerCase()).filter(Boolean):void 0,r=t(e.role),o=t(e.team),s=t(e.provider),i=Array.from(this._agents.values());return r&&(i=i.filter(a=>a.role&&r.some(d=>me(a.role.toLowerCase(),d)))),o&&(i=i.filter(a=>a.team&&o.some(d=>me(a.team.toLowerCase(),d)))),s&&(i=i.filter(a=>(Array.isArray(a.provider)?a.provider:[a.provider]).some(l=>s.some(p=>me(l.toLowerCase(),p))))),i}renderAgentPrompt(e){let t=e.startsWith("@")?e.slice(1):e,r=this._agents.get(t);if(!r)throw new Re(t,Array.from(this._agents.keys()));return r.inline?.prompt??r.inline?.system_prompt??r.description??`You are an expert ${t}.`}async renderPrompt(e,t){let o={...await this._documentLoader.buildContext(),...t?.documents??{}},s={...t,documents:o};return this._templateEngine.render(e,s)}registerLayout(e,t){this._layoutLoader.registerLayout(e,t);}async renderAgentPromptFull(e,t){let r=e.startsWith("@")?e.slice(1):e,o=this._agents.get(r);if(!o)throw new Re(r,Array.from(this._agents.keys()));let s=this._resolveLayoutSpec(o,t?.layout),i=this._extractLayoutId(s),a=this._extractLayoutProps(o,s,t?.layout),d=this._layoutLoader.load(i,a),l=o.inline?.prompt??o.inline?.system_prompt??o.description??`You are an expert ${r}.`,p=await this._documentLoader.buildContext(),g=t?.env??(typeof process<"u"?process.env:{}),m=t?.vars?.security_key??il(),f={...t?.vars??{},documents:p,env:g,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??""}},v=await this._templateEngine.render(l,f),y={mode:t?.session?.mode??"query",platform:t?.session?.platform??"cli",options:t?.session?.options??[]},k=o.provider,_=Array.isArray(k)?k:typeof k=="string"&&k.length>0?[k]:[],w=_.join(", ")||(typeof k=="string"?k:""),A=o.options,b=["goals","daily"],M={goals:false,daily:false},R;if(!Array.isArray(A)&&typeof A=="object"&&A!==null){let x=A;if("goals"in x){let N=x.goals;typeof N=="string"||Array.isArray(N)?M.goals=N:M.goals=!!N;}"daily"in x&&(M.daily=!!x.daily);let S={};for(let[N,C]of Object.entries(x))b.includes(N)||(S[N]=C);if(Object.keys(S).length>0){let N=_.some(K=>K.startsWith("cli/")),C={};for(let[K,ae]of Object.entries(S)){let fe={};if(Array.isArray(ae))N&&(fe.rawArgs=ae);else if(typeof ae=="object"&&ae!==null){let dt=ae;Object.keys(dt).length>0&&(fe.named=dt);}(fe.named||fe.rawArgs&&fe.rawArgs.length>0)&&(C[K]=fe);}R=Object.keys(C).length>0?C:void 0;}}let Q=Array.isArray(A)?A:void 0,T={};for(let[x,S]of Object.entries(p))T[x]={content:S.content??"",toc:S.toc,summary:S.summary,path:S.path};if(M.goals){let x=H.join(this._projectRoot,"docs","goal"),S=await $o(x,void 0,M.goals);S&&(T.active_goals={content:S});}if(M.daily){let x=H.join(this._projectRoot,"docs","daily"),S=await Uo(x);S&&(T.today_daily={content:S});}let G=t?.vars?.user_input??void 0,W=this._config?.settings?.dreaming?.continuity,U=W?.reuseReadOnly!==false,X=typeof W?.lookback=="number"?W.lookback:5,Y=typeof W?.maxEntryChars=="number"?W.maxEntryChars:8e3,q=typeof W?.decayRate=="number"?W.decayRate:.5,z=t?.threadId??"",J=o.id,j=U&&X>0&&z&&t?.messages&&t.messages.length>0?Zo({threadId:z,agentId:J,lookback:X,maxEntryChars:Y,decayRate:q}):new Map,oe=(t?.messages??[]).map(x=>{if(!x.isAssistant)return x;let S=x.metadata?.task_id;return !S||!j.has(S)?x:{...x,activity_log:j.get(S)}}),xt={user_input:G,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??"",provider:w,providerList:_,model:o.inline?.model,workingDirectory:o.working_directory??o.workingDirectory??".",inline:{...o.inline??{},prompt:v},specialties:o.specialties??[],capabilities:o.capabilities??[],remote:o.remote??null,optionsByMode:R,optionsArray:Q},agentMetadata:{specialties:o.specialties??[],capabilities:o.capabilities??[],description:o.description??""},contextOptions:M,documents:T,skills:t?.skills??[],session:y,env:g,vars:{security_key:m,...t?.vars??{}},props:{...a??{},...t?.messages&&t.messages.length>0?{showConversationHistory:true}:{}},platform:y.platform,mode:y.mode,thread_id:z,now:$t(new Date),has_activity_log:j.size>0,messages:oe,tools:this._tools.size>0?{list:Array.from(this._tools.values()).map(x=>({name:x.name,description:x.description,parameters:x.parameters})),json:JSON.stringify(Array.from(this._tools.values()).map(x=>({name:x.name,description:x.description,parameters:x.parameters})),null,2),count:this._tools.size}:null,metadata:{}};return this._layoutRenderer.render(d,xt)}_filterToolsByMode(e){return e?e.map(t=>this._tools.get(t)).filter(t=>t!==void 0):Array.from(this._tools.values())}_resolveLayoutSpec(e,t){if(t!==void 0)return t;let r=e.inline?.layout;if(r!==void 0)return r;let o=this._config?.layouts?.default;return typeof o=="string"&&o?o:"crewx/default"}_extractLayoutId(e){if(typeof e=="string")return e;if("id"in e)return e.id;if("template"in e&&typeof e.template=="string"&&e.template.trim()){let t=`crewx/__inline_${Date.now()}`;return this._layoutLoader.registerLayout(t,e.template),t}return "crewx/default"}_extractLayoutProps(e,t,r){let o=e.inline?.layout,s=o&&typeof o=="object"&&"props"in o?o.props:void 0,i=r&&typeof r=="object"&&"id"in r?r.props:void 0;if(s||i)return {...s??{},...i??{}}}_getConversationProvider(){return this._plugins.find(t=>t.name==="conversation")?.conversationProvider}async _fetchHistoryMessages(e,t,r){if(r&&r.length>0)return r;if(!e)return;let o=this._getConversationProvider();if(o)try{let s=await o.fetchHistory(e,{currentTraceId:t});return s.messages.length===0?void 0:wn(s)}catch{return}}_resolveTimeout(e,t){let r=e==="query"?"CREWX_TIMEOUT_QUERY":"CREWX_TIMEOUT_EXECUTE";if(process.env[r]!=null&&process.env[r]!==""){let o=vo();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=Zr();return t!==void 0?t:e?.meta?.defaultIdleMs!==void 0?e.meta.defaultIdleMs:6e5}_lookupCliAdapter(e){return mn(e)}_resolveEffectiveCwd(e,t){return t?.cwd??(e.working_directory?H.resolve(this._projectRoot,e.working_directory):this._projectRoot)}_buildFileRemoteOptions(e,t){let r={path:this._projectRoot,id:this._workspaceId,name:this._workspaceName,agentRef:e};return {...t,cwd:void 0,metadata:{...t?.metadata??{},crewx:{...t?.metadata?.crewx??{},callerWorkspace:r}},vars:{...t?.vars??{},crewx_caller_workspace_path:r.path,crewx_caller_workspace_id:r.id,crewx_caller_workspace_name:r.name}}}emitToolEvents(e,t,r,o,s,i,a){try{let l=this._lookupCliAdapter(r)?.parseEvent?.(o)??bt(new Date().toISOString(),o);for(let p of l)p.type==="tool_use"&&p.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:p.toolName,rawName:p.toolName,input:p.toolInput?this.tryParseJson(p.toolInput):void 0,toolUseId:p.toolUseId}}),p.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:p.toolName??"unknown",rawName:p.toolName??"unknown",toolUseId:p.toolUseId,result:p.resultPreview,isError:p.isError}});}catch{}}emitTaskLogEntries(e,t,r,o,s,i,a){try{for(let d of a)d.type==="tool_use"&&d.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:r,threadId:o,sessionId:s,provider:i,tool:{name:d.toolName,rawName:d.toolName,input:d.toolInput?this.tryParseJson(d.toolInput):void 0,toolUseId:d.toolUseId}}),d.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:t,agentId:r,threadId:o,sessionId:s,provider:i,tool:{name:d.toolName??"unknown",rawName:d.toolName??"unknown",toolUseId:d.toolUseId,result:d.resultPreview,isError:d.isError}});}catch{}}tryParseJson(e){try{return JSON.parse(e)}catch{return e}}async query(e,t,r){let o=await this.resolveFileRemoteTarget(e);if(o)return o.target.query(o.agentRef,t,this._buildFileRemoteOptions(e,r));let s=Ht.getStore()??yn(r?.trace),i=r?.taskId??et("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null};return Ht.run(d,async()=>{let l=Date.now(),p=new Date,g;try{g=sr(e,Array.from(this._agents.values()));}catch(x){if(x instanceof Re){this.emit("task:start",{traceId:i,timestamp:p,agentRef:e,message:t,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let S=Date.now()-l,N={code:"AGENT_NOT_FOUND",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:S,error:N,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:N,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:S,taskId:i}}}throw x}d.callerAgentId=g.id;let m=hn(g.provider),f=hr(g.options,"query",m,mr(r?.overdrive)),v=yr(g.options,"query"),y=f.active&&f.provider?f.provider:r?.provider??v.provider??m,k=f.active&&f.model?f.model:r?.model??v.model??g.inline?.model;k&&k.includes("{{")&&(k=await this._templateEngine.render(k,{...r?.vars??{}}));let _=y!==m?void 0:r?.resumeSessionId,w;try{w=Te(y,this._additionalArgsProvider);}catch(x){this.emit("task:start",{traceId:i,timestamp:p,agentRef:e,message:t,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let S=Date.now()-l,N={code:"PROVIDER_ERROR",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:S,error:N,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:N,meta:{agentId:g.id,provider:y,model:k,durationMs:S,taskId:i}}}let A=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),b;try{b=await this.renderAgentPromptFull(e,{session:{mode:"query",platform:r?.platform},vars:{user_input:t,...r?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(g,r)},messages:A,threadId:r?.threadId});}catch(x){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${x instanceof Error?x.message:String(x)}`);}let M,R,Q,T=k,G=false,Z=x=>{G||(G=true,this.emit("task:start",{traceId:i,timestamp:p,agentRef:e,message:t,mode:"query",pid:x,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:T,provider:y,codingAgentCommand:M,renderedPrompt:b,metadata:{...r?.metadata??{},provider:y,...f.active?{overdrive:true}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},$=g.options,W=f.active?f.mode:$?.query?.mode,U=f.active?f.effort:$?.query?.effort,X=Array.isArray($?.query?.tools)?$.query.tools:void 0,Y=this._tools.size>0?this._filterToolsByMode(X):[],q=(()=>{let x=$?.query;if(!x||Array.isArray(x))return;let{tools:S,effort:N,mode:C,provider:K,model:ae,profiles:fe,...dt}=x,At=Object.entries(dt).filter(([,Ae])=>Ae!=null);if(At.length!==0)return Object.fromEntries(At.map(([Ae,Dr])=>[Ae,String(Dr)]))})(),z=g.inline?.max_steps;y.startsWith("api/")&&Z();let J=false,j=0,oe=()=>{},xt=new Promise(x=>{oe=x;});this._activeTasks.set(i,{pid:void 0,done:xt});try{let x=await w.query(t,{model:k,effort:U,mode:W,context:r?.context,systemPrompt:b??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray($?.query)?$.query:void 0,resumeSessionId:_,tools:Y.length>0?Y:void 0,maxSteps:z,configOptions:q,timeoutMs:this._resolveTimeout("query",this._lookupCliAdapter(y)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(y)),cwd:this._resolveEffectiveCwd(g,r),env:{CREWX_AGENT_ID:g.id,CREWX_AGENT_ROLE:g.role??"",CREWX_AGENT_TEAM:g.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:y,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,p)},onPid:C=>{let K=this._activeTasks.get(i);K&&(K.pid=C),Z(C);},onOutput:(C,K)=>{let ae=this._lookupCliAdapter(y);K==="stdout"&&ae?.suppressOutputLine?.(C)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:C,level:K}),K==="stdout"&&this.emitToolEvents(i,e,y,C,g.id,r?.threadId??"","");},onTaskLog:C=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",y,C);for(let K of C)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(K),level:"info"});},onCommand:C=>{M=C;},onUsage:C=>{R=C;},onExitCode:C=>{Q=C;},onModel:C=>{T||(T=C);}});j=nn(R?.costUsd,R?.inputTokens,R?.outputTokens,R?.cachedInputTokens,T,new Date(l)),Z();let S=Date.now()-l,N={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",result:x,durationMs:S,exitCode:Q,inputTokens:R?.inputTokens,outputTokens:R?.outputTokens,cachedInputTokens:R?.cachedInputTokens,costUsd:j,model:T,metadata:Object.keys(N).length>0?N:void 0}),J=!0,{ok:!0,data:x,meta:{agentId:g.id,provider:y,model:k,durationMs:S,taskId:i}}}catch(x){if(x instanceof exports.ClientToolCallRequiredError){let C=et("thd");return this._pendingThreads.set(C,{agentRef:g.id,providerStr:y,continuationState:x.continuationState,toolCall:x.toolCall,traceId:i,startMs:l,model:k}),J=true,{ok:true,status:"requires_action",data:"",toolCall:x.toolCall,threadId:C,meta:{agentId:g.id,provider:y,model:k,durationMs:Date.now()-l,taskId:i}}}Z();let S=Date.now()-l,N={code:"QUERY_FAILED",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:S,error:N,exitCode:Q,inputTokens:R?.inputTokens,outputTokens:R?.outputTokens,cachedInputTokens:R?.cachedInputTokens,costUsd:j,model:T,metadata:r?.metadata?{...r.metadata}:void 0}),J=true,{ok:false,data:"",error:N,meta:{agentId:g.id,provider:y,model:k,durationMs:S,taskId:i}}}finally{J||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:Date.now()-l,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:Q??-1,inputTokens:R?.inputTokens,outputTokens:R?.outputTokens,cachedInputTokens:R?.cachedInputTokens,costUsd:j,model:T}),this._activeTasks.delete(i),oe();}})}async continueQuery(e,t){let r=this._pendingThreads.get(e);if(!r)return {ok:false,data:"",error:{code:"THREAD_NOT_FOUND",message:`No pending thread: ${e}`},meta:{agentId:"",provider:"",durationMs:0}};this._pendingThreads.delete(e);let o=Te(r.providerStr,this._additionalArgsProvider);if(!o.continueWithToolResults)return {ok:false,data:"",error:{code:"UNSUPPORTED",message:"Provider does not support client tool continuation"},meta:{agentId:r.agentRef,provider:r.providerStr,durationMs:0}};let s=t.map(i=>({...i,toolName:r.toolCall.toolCallId===i.toolCallId?r.toolCall.toolName:i.toolCallId}));try{let i=await o.continueWithToolResults(r.continuationState,s),a=Date.now()-r.startMs;return this.emit("task:end",{traceId:r.traceId,timestamp:new Date,agentRef:r.agentRef,mode:"query",result:i,durationMs:a}),{ok:!0,status:"complete",data:i,meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:a}}}catch(i){if(i instanceof exports.ClientToolCallRequiredError)return this._pendingThreads.set(e,{...r,continuationState:i.continuationState,toolCall:i.toolCall}),{ok:true,status:"requires_action",data:"",toolCall:i.toolCall,threadId:e,meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:Date.now()-r.startMs}};let a=Date.now()-r.startMs;return {ok:false,data:"",error:{code:"CONTINUE_FAILED",message:i.message},meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:a}}}}async execute(e,t,r){let o=await this.resolveFileRemoteTarget(e);if(o)return o.target.execute(o.agentRef,t,this._buildFileRemoteOptions(e,r));let s=Ht.getStore()??yn(r?.trace),i=r?.taskId??et("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null};return Ht.run(d,async()=>{let l=Date.now(),p=new Date,g;try{g=sr(e,Array.from(this._agents.values()));}catch(x){if(x instanceof Re){this.emit("task:start",{traceId:i,timestamp:p,agentRef:e,message:t,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let S=Date.now()-l,N={code:"AGENT_NOT_FOUND",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:S,error:N,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:N,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:S,taskId:i}}}throw x}d.callerAgentId=g.id;let m=hn(g.provider),f=hr(g.options,"execute",m,mr(r?.overdrive)),v=yr(g.options,"execute"),y=f.active&&f.provider?f.provider:r?.provider??v.provider??m,k=f.active&&f.model?f.model:r?.model??v.model??g.inline?.model;k&&k.includes("{{")&&(k=await this._templateEngine.render(k,{...r?.vars??{}}));let _=y!==m?void 0:r?.resumeSessionId,w;try{w=Te(y,this._additionalArgsProvider);}catch(x){this.emit("task:start",{traceId:i,timestamp:p,agentRef:e,message:t,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let S=Date.now()-l,N={code:"PROVIDER_ERROR",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:S,error:N,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:N,meta:{agentId:g.id,provider:y,model:k,durationMs:S,taskId:i}}}let A=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),b;try{b=await this.renderAgentPromptFull(e,{session:{mode:"execute",platform:r?.platform},vars:{user_input:t,...r?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(g,r)},messages:A,threadId:r?.threadId});}catch(x){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${x instanceof Error?x.message:String(x)}`);}let M,R,Q,T=k,G=false,Z=x=>{G||(G=true,this.emit("task:start",{traceId:i,timestamp:p,agentRef:e,message:t,mode:"execute",pid:x,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:T,provider:y,codingAgentCommand:M,renderedPrompt:b,metadata:{...r?.metadata??{},provider:y,...f.active?{overdrive:true}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},$=g.options,W=f.active?f.mode:$?.execute?.mode,U=f.active?f.effort:$?.execute?.effort,X=Array.isArray($?.execute?.tools)?$.execute.tools:void 0,Y=this._tools.size>0?this._filterToolsByMode(X):[],q=(()=>{let x=$?.execute;if(!x||Array.isArray(x))return;let{tools:S,effort:N,mode:C,provider:K,model:ae,profiles:fe,...dt}=x,At=Object.entries(dt).filter(([,Ae])=>Ae!=null);if(At.length!==0)return Object.fromEntries(At.map(([Ae,Dr])=>[Ae,String(Dr)]))})(),z=g.inline?.max_steps;y.startsWith("api/")&&Z();let J=false,j=0,oe=()=>{},xt=new Promise(x=>{oe=x;});this._activeTasks.set(i,{pid:void 0,done:xt});try{let x=await w.execute(t,{model:k,effort:U,mode:W,context:r?.context,systemPrompt:b??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray($?.execute)?$.execute:void 0,resumeSessionId:_,tools:Y.length>0?Y:void 0,maxSteps:z,configOptions:q,timeoutMs:this._resolveTimeout("execute",this._lookupCliAdapter(y)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(y)),cwd:this._resolveEffectiveCwd(g,r),env:{CREWX_AGENT_ID:g.id,CREWX_AGENT_ROLE:g.role??"",CREWX_AGENT_TEAM:g.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:y,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,p)},onPid:C=>{let K=this._activeTasks.get(i);K&&(K.pid=C),Z(C);},onOutput:(C,K)=>{let ae=this._lookupCliAdapter(y);K==="stdout"&&ae?.suppressOutputLine?.(C)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:C,level:K}),K==="stdout"&&this.emitToolEvents(i,e,y,C,g.id,r?.threadId??"","");},onTaskLog:C=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",y,C);for(let K of C)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(K),level:"info"});},onCommand:C=>{M=C;},onUsage:C=>{R=C;},onExitCode:C=>{Q=C;},onModel:C=>{T||(T=C);}});j=nn(R?.costUsd,R?.inputTokens,R?.outputTokens,R?.cachedInputTokens,T,new Date(l)),Z();let S=Date.now()-l,N={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",result:x,durationMs:S,exitCode:Q,inputTokens:R?.inputTokens,outputTokens:R?.outputTokens,cachedInputTokens:R?.cachedInputTokens,costUsd:j,model:T,metadata:Object.keys(N).length>0?N:void 0}),J=!0,{ok:!0,data:x,meta:{agentId:g.id,provider:y,model:k,durationMs:S,taskId:i}}}catch(x){Z();let S=Date.now()-l,N={code:"EXECUTE_FAILED",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:S,error:N,exitCode:Q,inputTokens:R?.inputTokens,outputTokens:R?.outputTokens,cachedInputTokens:R?.cachedInputTokens,costUsd:j,model:T,metadata:r?.metadata?{...r.metadata}:void 0}),J=true,{ok:false,data:"",error:N,meta:{agentId:g.id,provider:y,model:k,durationMs:S,taskId:i}}}finally{J||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:Date.now()-l,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:Q??-1,inputTokens:R?.inputTokens,outputTokens:R?.outputTokens,cachedInputTokens:R?.cachedInputTokens,costUsd:j,model:T}),this._activeTasks.delete(i),oe();}})}};function ks(n,e){let t=qn(n)?n:void 0,r=qn(e)?e:void 0;if(!(!t&&!r))return {...t??{},...r??{}}}function qn(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function al(n,e){let t=Array.isArray(n)?n:void 0,r=Array.isArray(e)?e:void 0;if(!t&&!r)return;let o=a=>{if(!qn(a))return;let d=a.id;if(typeof d=="string")return `id:${d}`;let l=a.name;if(typeof l=="string")return `name:${l}`},s=new Set;for(let a of r??[]){let d=o(a);d&&s.add(d);}let i=[];for(let a of t??[]){let d=o(a);d&&s.has(d)||i.push(a);}for(let a of r??[])i.push(a);return i}function dl(n){let e=Array.isArray(n.provider)?n.provider:[n.provider],t=n.options,r=[...e];for(let o of ["query","execute"]){let s=yr(t,o);s.provider&&r.push(s.provider);let i=t&&typeof t=="object"&&!Array.isArray(t)?t[o]:void 0,a=i&&typeof i=="object"&&!Array.isArray(i)?fr(i.overdrive):void 0;a?.provider&&r.push(a.provider);}return r}async function xs(n,e,t){let r=n.flatMap(dl);if(r.some(s=>s.startsWith("api/"))){let{registerApiProviders:s}=await Promise.resolve().then(()=>(Pn(),ds));s(t?.api);}await cl(r,e),ul(r,e),ll(r);}function ll(n){if(!n.some(r=>r.startsWith("acp/")))return;let{registerAcpProviders:t}=(Nn(),oo(gs));t();}async function cl(n,e){if(!n.some(i=>i.startsWith("remote/")))return;let r=e.providers;if(!Array.isArray(r))return;let{createRemoteProviderFactory:o}=await Promise.resolve().then(()=>($n(),ms)),s=new Map;for(let i of r)i.type==="remote"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&Pe("remote",o(s,Te));}function ul(n,e){if(!n.some(i=>i.startsWith("plugin/")))return;let r=e.providers;if(!Array.isArray(r))return;let{createPluginProviderFactory:o}=(Un(),oo(_s)),s=new Map;for(let i of r)i.type==="plugin"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&Pe("plugin",o(s));}u();var Bn=class{detach(e){}};u();var pl="crewx:fs:",Wn=class{prefix;store;constructor(e){this.prefix=e?.prefix??pl,this.store=e?.storage??new Map;}async readFile(e){let t=this.toKey(e),r=this.store.get(t);if(r===void 0)throw new Error(`BrowserFsAdapter: file not found: ${e}`);return r}async exists(e){return this.store.has(this.toKey(e))}resolvePath(...e){let t=e.map(i=>i.replace(/\\/g,"/")).join("/").replace(/\/+/g,"/"),r=t.split("/"),o=[];for(let i of r)i==="."||i===""||(i===".."?o.pop():o.push(i));let s=o.join("/");return t.startsWith("/")?`/${s}`:s}isAbsolute(e){return e.startsWith("/")}setItem(e,t){this.store.set(this.toKey(e),t);}removeItem(e){this.store.delete(this.toKey(e));}keys(){return Array.from(this.store.keys()).filter(e=>e.startsWith(this.prefix)).map(e=>e.slice(this.prefix.length))}async readdir(e){let t=e.replace(/\\/g,"/").replace(/\/$/,""),r=this.toKey(t+"/"),o=[];for(let s of this.store.keys())if(s.startsWith(r)){let a=s.slice(r.length).split("/")[0];a&&!o.includes(a)&&o.push(a);}return o}toKey(e){return `${this.prefix}${e.replace(/\\/g,"/")}`}};u();function Xt(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function As(n,e){let t={...n};for(let[r,o]of Object.entries(e))Xt(o)&&Xt(t[r])?t[r]=As(t[r],o):t[r]=o;return t}function Al(n){let e=n?.filePath??H.join(Da.homedir(),".crewx","crewx.yaml"),t=null,r=null;function o(){try{return Qo.statSync(e).mtimeMs}catch{return null}}function s(){let i=o();if(i===null)return t=null,r=null,{};if(r!==null&&t===i)return r;let a=null;try{a=jsYaml.load(Qo.readFileSync(e,"utf-8"));}catch{a=null;}let d=Xt(a)?a:{};return r=d,t=i,d}return {get path(){return e},read(){let i=s();return Xt(i.settings)?i.settings:{}},update(i){let a=s(),d=Xt(a.settings)?a.settings:{},l=As(d,i),p={...a,settings:l};Qo.mkdirSync(H.dirname(e),{recursive:true});let g=`${e}.tmp`;return Qo.writeFileSync(g,jsYaml.dump(p)),Qo.renameSync(g,e),t=null,r=null,l}}}u();he();function zn(n){if(!n)return "";let e=n.lastIndexOf("/");return e===-1?n.trim():n.slice(e+1).trim()}function Es(n){return n?mt(n).models.length>0:false}function Kn(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function El(n,e,t){let r=n,o=false,s=[],i=()=>(o||(r={...n},o=true),r),a=typeof r.provider=="string"&&r.provider.trim()?zn(r.provider):e,d=typeof r.model=="string"&&r.model.trim()?r.model.trim():t;Es(a)&&(typeof r.mode=="string"&&(Ct(a).map(g=>g.id).includes(r.mode)||(delete i().mode,s.push("mode"))),typeof r.effort=="string"&&(Pt(a,d).includes(r.effort)||(delete i().effort,s.push("effort"))));let l=r.overdrive;if(Kn(l)){let p=zn(typeof l.provider=="string"?l.provider:void 0),g=typeof l.model=="string"?l.model:void 0;if(Es(p)){let m,f=()=>(m||(m={...l},i().overdrive=m),m);typeof l.mode=="string"&&(Ct(p).map(y=>y.id).includes(l.mode)||(delete f().mode,s.push("overdrive.mode"))),typeof l.effort=="string"&&(Pt(p,g).includes(l.effort)||(delete f().effort,s.push("overdrive.effort")));}}return {block:r,removed:s}}function Rl(n){let{options:e}=n;if(!Kn(e))return {options:e,changed:false,removed:[]};let t=zn(n.provider),r=[],o=e,s=false,i=()=>(s||(o={...e},s=true),o);for(let a of ["query","execute"]){let d=e[a];if(!Kn(d))continue;let{block:l,removed:p}=El(d,t,n.model);p.length>0&&(i()[a]=l,r.push(...p.map(g=>`${a}.${g}`)));}return {options:o,changed:r.length>0,removed:r}}u();var Cl="https://api.crewx.dev/v1/models",Pl=3600*1e3,Rs=0;async function Tl(n){let e=n?.ttlMs??Pl,t=Date.now();if(!(t-Rs<e)){Rs=t;try{let r=await fetch(n?.endpoint??Cl);if(!r.ok)return;let o=await r.json();if(!o?.models||typeof o.models!="object")return;let s={};for(let[i,a]of Object.entries(o.models))a!=null&&(s[i]={input:a.input,cachedInput:a.cachedInput,output:a.output});Ro(s);}catch{}}}u();he();var Sl="https://api.crewx.dev/v1/models",bl=900*1e3,Cs=0;async function Il(n){let e=n?.ttlMs??bl,t=Date.now();if(!(t-Cs<e)){Cs=t;try{let r=await fetch(n?.endpoint??Sl);if(!r.ok)return;let o=await r.json();if(!o?.providers||typeof o.providers!="object")return;let s={};for(let[i,a]of Object.entries(o.providers)){let d=Array.isArray(a)?a:a.models??[],l=Array.isArray(a)?[]:a.modes??[],p=Array.isArray(a)?[]:a.effort??[],g=Array.isArray(a)?{}:a.modelOverrides??{},m=d.filter(f=>f!=null&&typeof f.id=="string").map(f=>({id:f.id,name:f.name??f.id,...f.description!=null?{description:f.description}:{}}));s[i]={models:m,modes:l.filter(f=>f!=null&&typeof f.id=="string").map(f=>({id:f.id,name:f.name??f.id,...f.description!=null?{description:f.description}:{}})),effort:p.filter(f=>typeof f=="string"),modelOverrides:g};}qr(s);}catch{}}}u();function Ol(n,e){let t=n.skills?.include;if(t===void 0)return [...e];if(t.length===0)return [];let r=new Set(t);return e.filter(o=>r.has(o))}u();var Gn=["codex","claude","opencode","antigravity","copilot"];function Ml(n){let e=n.indexOf("/");return e===-1?n:n.slice(e+1)}function Vn(n){let e=Ml(n),t=Gn.indexOf(e);return t===-1?Gn.length:t}function Yt(n,e){return Vn(n)-Vn(e)}var Nl=new Set(["claude","copilot","codex","opencode"]);function Dl(n){if(!n)return "";if(n.startsWith("acp/")){let e=n.slice(4);if(Nl.has(e))return `cli/${e}`}return n}he();we();Cn();Pn();u();Tn();De();u();Pr();Or();he();var Ll="model",$l="mode",Ul="thought_level";function Jn(n){if(n.length===0)return [];if(n[0]?.group!=null){let e=[];for(let t of n)for(let r of t.options??[])e.push(r);return e}return n}function jl(n,e){let t=new Map;for(let r of [...n,...e])t.has(r.id)||t.set(r.id,r);return Array.from(t.values())}function Fl(n,e,t,r){let o=t.agentInfo?.name,s=e??o??n,i=r.configOptions??[],d=(r.modes?.availableModes??[]).map(_=>({id:_.id,name:_.name,..._.description!=null?{description:_.description}:{}})),l=[];for(let _ of i)if(_.category?.trim().toLowerCase()===$l&&_.options!=null)for(let w of Jn(_.options))w.value!=null&&l.push({id:w.value,name:w.name??w.value});let p=jl(d,l),g=[];for(let _ of i)if(_.category?.trim().toLowerCase()===Ul&&_.type==="select")for(let w of Jn(_.options??[]))w.value!=null&&g.push(w.value);if(n==="claude"){let _=Tt().map(A=>({id:A.id,name:A.name})),w=Ps(t);return Ts(n,{models:_,modes:p,availableModelsCount:0,configModelsCount:0,skipModelWarn:true}),{id:`acp/${n}`,name:s,modes:p,effort:g,models:_,capabilities:w}}let f=(r.models?.availableModels??[]).map(_=>({id:_.modelId})),v=[];for(let _ of i)if(_.category?.trim().toLowerCase()===Ll&&_.options!=null)for(let w of Jn(_.options))w.value!=null&&v.push({id:w.value,...w.name!=null?{name:w.name}:{}});let y=St(f,v);Ts(n,{models:y,modes:p,availableModelsCount:f.length,configModelsCount:v.length,skipModelWarn:false});let k=Ps(t);return {id:`acp/${n}`,name:s,modes:p,effort:g,models:y,capabilities:k}}function Ps(n){let e=n.agentCapabilities??{};return {loadSession:e.loadSession??false,image:e.promptCapabilities?.image??false,audio:e.promptCapabilities?.audio??false,mcp:e.mcpCapabilities!=null}}function Ts(n,e){!e.skipModelWarn&&e.models.length===0&&console.warn(`[acp] ${n} meta: models empty (availableModels=${e.availableModelsCount}, configOptions[model]=${e.configModelsCount})`),e.modes.length===0&&console.warn(`[acp] ${n} meta: modes empty`);}async function Ss(n){let e=exports.ACP_ADAPTERS[n];if(!e)return null;let t=e.meta?.displayName,r=new exports.AcpConnection({spawn:e.spawn,cwd:process.cwd()});try{await r.connect(e.clientInfo);let o=r.initResponse;if(!o)return null;let s=e.buildSessionParams({cwd:process.cwd()}),i=await r.newSessionRaw(s);return Fl(n,t,o,i)}catch(o){return console.warn(`[acp] ${n} meta query failed: ${o instanceof Error?o.message:String(o)}`),null}finally{await r.dispose();}}async function Hl(){let n=Object.keys(exports.ACP_ADAPTERS),e=await Promise.allSettled(n.map(r=>Ss(r))),t=[];for(let r of e)r.status==="fulfilled"&&r.value!==null&&t.push(r.value);return t.sort((r,o)=>Yt(r.id,o.id))}Pr();Sn();Or();Nn();Ur();Ne();u();Ne();he();function Bl(n){return n.charAt(0).toUpperCase()+n.slice(1)}async function bs(){return new Promise(n=>{child_process.execFile("opencode",["models"],{timeout:5e3,maxBuffer:1048576},(t,r)=>{if(t){n([]);return}let o=r.split(`
|
|
303
|
-
`).map(s=>s.trim()).filter(s=>s.length>0).map(s=>({id:s}));n(o);}).on("error",()=>n([]));})}function
|
|
298
|
+
`).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 I("DB_ERROR","Failed to get tasks for report",s)}finally{o.close();}}findTaskEvidence(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(drizzleOrm.eq(c.workspace_id,e.workspaceId)),e.agents&&e.agents.length>0&&r.push(drizzleOrm.inArray(c.agent_id,e.agents)),e.statuses&&e.statuses.length>0&&r.push(drizzleOrm.inArray(c.status,e.statuses)),e.from&&r.push(drizzleOrm.gte(c.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(c.started_at,e.to));let o=r.length>0?drizzleOrm.and(...r):void 0,s=(e.order??"DESC")==="ASC"?drizzleOrm.asc(c.started_at):drizzleOrm.desc(c.started_at),i={id:c.id,agent_id:c.agent_id,status:c.status,prompt:c.prompt,started_at:c.started_at,completed_at:c.completed_at,thread_id:c.thread_id};return e.limit?t.db.select(i).from(c).where(o).orderBy(s).limit(e.limit).all():t.db.select(i).from(c).where(o).orderBy(s).all()}catch(r){throw new I("DB_ERROR","Failed to find task evidence",r)}finally{t.close();}}findThreadChains(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{let r=e.maxThreads??8,o=e.maxTurnsPerThread??4,s=[drizzleOrm.isNotNull(c.thread_id),drizzleOrm.isNull(c.parent_task_id),drizzleOrm.isNull(c.caller_agent_id),drizzleOrm.or(drizzleOrm.isNull(c.platform),drizzleOrm.ne(c.platform,"workflow")),drizzleOrm.or(drizzleOrm.isNull(c.metadata),drizzleOrm.notLike(c.metadata,'%"kind":"workflow_card"%')),drizzleOrm.or(drizzleOrm.isNull(c.metadata),drizzleOrm.notLike(c.metadata,'%"retriedFromTaskId"%'))];e.workspaceId&&s.push(drizzleOrm.eq(c.workspace_id,e.workspaceId)),e.from&&s.push(drizzleOrm.gte(c.started_at,e.from)),e.to&&s.push(drizzleOrm.lt(c.started_at,e.to));let i=t.db.select({id:c.id,agent_id:c.agent_id,status:c.status,prompt:c.prompt,started_at:c.started_at,completed_at:c.completed_at,thread_id:c.thread_id}).from(c).where(drizzleOrm.and(...s)).orderBy(drizzleOrm.asc(c.started_at),drizzleOrm.asc(c.id)).all(),a=new Map;for(let l of i){if(!l.thread_id)continue;let p={id:l.id,agentId:l.agent_id,status:l.status,prompt:l.prompt,startedAt:l.started_at,completedAt:l.completed_at},g=a.get(l.thread_id);g?g.push(p):a.set(l.thread_id,[p]);}let d=[];for(let[l,p]of a){let g=p.filter(m=>m.agentId===e.targetAgentId).length;g<2||d.push({threadId:l,targetAgentTurnCount:g,turns:p});}return d.sort((l,p)=>{let g=l.turns[l.turns.length-1].startedAt,m=p.turns[p.turns.length-1].startedAt;return g<m?1:g>m?-1:0}),d.slice(0,r).map(l=>({threadId:l.threadId,targetAgentTurnCount:l.targetAgentTurnCount,turns:l.turns.slice(-o)}))}catch(r){throw new I("DB_ERROR","Failed to find thread chains",r)}finally{t.close();}}};var _d=new Set(["Read","Grep","Find","Glob"]),vd=["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"],kd=[/\bgit\s+(commit|push|pull|merge|rebase|reset|checkout|switch|add|rm)\b/,/\bnpm\s+(install|ci|publish|run\s+(test|lint|build))\b/,/\bnpx\s+tsc\b/,/\bpnpm\s+(install|run)\b/,/\bvitest\b/,/\bjest\b/];function xd(n){let e=n.toLowerCase();return e==="bash"||e==="terminal"?"Bash":e==="read"||e==="view"?"Read":e==="edit"||e==="apply_patch"?"Edit":e==="write"?"Write":e==="grep"||e==="rg"?"Grep":e==="glob"||e==="find"?"Find":n}function Ad(n,e){if(_d.has(n))return true;if(n!=="Bash"||!e)return false;let t=e.split(`
|
|
299
|
+
`)[0].trimStart();return kd.some(r=>r.test(t))?false:vd.some(r=>t.startsWith(r))}function Cr(n){return n.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function Ed(n,e,t){if(n!=="Read"||!e)return "ok";let o=e.split(`
|
|
300
|
+
`).find(s=>s.trim()&&!s.startsWith("Read "))?.trim()??e.trim();if(!o)return "unknown";try{let s=Zo__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 Rd(n){let e=new Set;for(let t of n)try{let r=JSON.parse(t);r.type&&e.add(r.type);}catch{}return e.has("turn.started")||e.has("thread.started")?"codex":e.has("assistant.message_delta")?"copilot":e.has("step_start")&&e.has("step_finish")?"opencode":e.has("system")&&e.has("result")?"claude":e.has("init")&&e.has("message")?"gemini":e.has("result")&&e.has("assistant")?"claude":null}function Cd(n){if(!Array.isArray(n))return [];let e=n,t=e.filter(a=>a.level==="stdout"&&a.message).map(a=>a.message),r=Rd(t),o=[];for(let a of e)a.level==="info"&&a.message?o.push(...pe(a.message,a.timestamp)):a.level==="stdout"&&a.message&&r&&o.push(...St("",a.message,r));let s=new Map,i=[];for(let a of o)if(a.type==="tool_use"){let d={tool:xd(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 Pd(n,e){let t=Cd(n),r=[];for(let o of t){let s=o.tool==="Bash"?o.input?.split(`
|
|
301
|
+
`)[0]?.slice(0,150)??null:o.input?.slice(0,150)??null,i=Ad(o.tool,o.input)&&!o.isError;r.push({tool:o.tool,cmd:s,result:o.result,status:Ed(o.tool,o.input,e),reusable:i});}return r}function Td(n,e,t){let r=["<activity_log>"];if(n.length===0&&e===0)r.push(" <!-- no activity found in previous tasks -->");else {r.push(" <!-- tool activity from previous tasks -->"),e>0&&r.push(` <!-- ${e} entries omitted (cap) -->`);for(let o of n){let s=`tool="${Cr(o.tool)}"`,i=o.cmd?` cmd="${Cr(o.cmd)}"`:"",a="";if(o.reusable&&(a=o.status==="stale"?' reused="stale"':' reused="ok"'),o.reusable&&o.status==="stale")r.push(` <entry ${s}${i}${a}>\u26A0\uFE0F changed since \u2014 re-read</entry>`);else if(o.result){r.push(` <entry ${s}${i}${a}>`);let d=t&&t>0?t:8e3,l=o.result;l.length>d?r.push(Cr(l.slice(0,d))+` \u2026 [truncated, ${d}/${l.length} chars shown]`):r.push(Cr(l)),r.push(" </entry>");}else r.push(` <entry ${s}${i}${a} />`);}}return r.push("</activity_log>"),r}function es(n){let{threadId:e,agentId:t,lookback:r,maxEntryChars:o,decayRate:s}=n;if(!r||!e||!t)return new Map;let i;try{i=new Bt().findTasksByThread(e).filter(m=>!m.parent_task_id&&m.agent_id===t).sort((m,f)=>f.started_at>m.started_at?1:-1).slice(0,Math.min(r,5));}catch{return new Map}if(!i.length)return new Map;let a=[];for(let g of i){let m=[];try{let f=JSON.parse(g.logs??"[]");Array.isArray(f)&&(m=f);}catch{}a.push({taskId:g.id,entries:Pd(m,g.completed_at)});}let d=new Map,l=typeof s=="number"&&s>0&&s<=1?s:1,p=1e3;for(let g=0;g<a.length;g++){let{taskId:m,entries:f}=a[g];if(f.length===0)continue;let v=Math.max(Math.floor((o??8e3)*Math.pow(l,g)),p),y=Math.max(0,f.length-200),k=y>0?f.slice(y):f,_=Td(k,y,v);d.set(m,_.join(`
|
|
302
|
+
`));}return d}u();u();var bd={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")},Sd={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 ts(n,e,t){n.tool("crewx_listAgents","List available CrewX agents exposed by this server",async()=>{let r=[];for(let o of t){let s=e.agents.get(o);s&&r.push({id:s.id,name:s.name??s.id,description:s.description??""});}return {content:[{type:"text",text:JSON.stringify(r,null,2)}]}}),n.tool("crewx_queryAgent","Query a CrewX agent with a read-only question",bd,async({agentId:r,query:o,context:s,thread:i})=>{if(!t.has(r))return {content:[{type:"text",text:`Agent '${r}' is not exposed by this server`}],isError:true};let a=await e.query(r,o,{context:s,threadId:i});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Query failed"}],isError:true}}),n.tool("crewx_executeAgent","Execute a task on a CrewX agent (may modify state)",Sd,async({agentId:r,task:o,context:s,thread:i})=>{if(!t.has(r))return {content:[{type:"text",text:`Agent '${r}' is not exposed by this server`}],isError:true};let a=await e.execute(r,o,{context:s,threadId:i});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Execute failed"}],isError:true}});}u();function rs(n){return n.headers.get("Origin")?null:new Response(JSON.stringify({error:"Forbidden: Origin header required"}),{status:403,headers:{"Content-Type":"application/json"}})}async function ns(n,e){return e?await e(n)?null:new Response(JSON.stringify({error:"Unauthorized"}),{status:401,headers:{"Content-Type":"application/json"}}):null}function Md(n,e){let t=new mcp_js.McpServer({name:"crewx-mcp-server",version:"1.0.0"},{capabilities:{tools:{}}});return ts(t,n,e),t}function An(n,e){if(!e.agents||e.agents.length===0)throw new Error("crewx.handler() requires at least one agent in the agents option");let t=new Set(e.agents),r=new Map;return async o=>{let s=rs(o);if(s)return s;let i=await ns(o,e.auth);if(i)return i;let a=o.headers.get("mcp-session-id");if(a&&r.has(a))return r.get(a).transport.handleRequest(o);let d=Md(n,t),l=new webStandardStreamableHttp_js.WebStandardStreamableHTTPServerTransport({sessionIdGenerator:()=>crypto.randomUUID(),onsessioninitialized:p=>{r.set(p,{transport:l,server:d});},onsessionclosed:p=>{r.delete(p);},enableJsonResponse:true});return await d.connect(l),l.handleRequest(o)}}u();function ss(n){let e=B__namespace.resolve(n);return process.platform==="win32"&&(e=e.replace(/\\/g,"/"),e=e.replace(/^([A-Z]):/,(t,r)=>`${r.toLowerCase()}:`)),e.length>1&&!/^[a-zA-Z]:\/$/.test(e)&&(e=e.replace(/\/+$/,"")),e}function En(n){let e=ss(n);return crypto$1.createHash("sha256").update(e).digest("hex")}function il(n){return n?n.settings?.template?.exec:void 0}function al(){try{let n=new Uint8Array(8);return globalThis.crypto.getRandomValues(n),Array.from(n,e=>e.toString(16).padStart(2,"0")).join("")}catch{let{randomBytes:n}=te("crypto");return n(8).toString("hex")}}var Fn=class n extends Ft{_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;constructor(e,t={},r,o,s){super(),this._agents=new Map(e.map(d=>[d.id,d])),this._config=r,this._projectRoot=s??(typeof process<"u"?process.cwd():"/");let i=s??(typeof process<"u"?process.env.CREWX_WORKSPACE??process.cwd():"/");this._workspaceId=En(i),this._workspaceName=B.basename(i);let a=il(r);this._templateEngine=new Dt({execPolicy:t.execPolicy??a}),this._documentLoader=o??new Ze,this._layoutLoader=new Lt({templatesPath:ct()}),this._layoutRenderer=new jt,this._remoteFactory=t.remoteFactory,this._additionalArgsProvider=t.additionalArgsProvider;}async resolveFileRemoteTarget(e){let t=this.getAgent(e),r=Array.isArray(t?.provider)?t?.provider[0]:t?.provider;if(!r?.startsWith("remote/"))return null;let o=r.slice(7),s=this.getRemoteProviderConfig(o);if(!s?.location?.startsWith("file://"))return null;let i=B.resolve(s.location.replace("file://","")),a=s.external_agent_id??e.replace(/^@/,""),d=this._remoteTargets.get(i);d||(d=(this._remoteFactory??(f=>n.loadYaml(f)))(i),this._remoteTargets.set(i,d),d.catch(()=>this._remoteTargets.delete(i)));let l=await d,p=l.getAgent("@"+a),g=Array.isArray(p?.provider)?p?.provider[0]:p?.provider;if(g?.startsWith("remote/"))throw new Error(`Chained remotes not allowed: "${o}" \u2192 "${g}"`);return {target:l,agentRef:"@"+a}}static async loadBuiltInConfig(e){let{yamlPath:t,dir:r}=$r(),o;try{o=Zo.readFileSync(t,"utf-8");}catch(i){throw new Error(`[@crewx/sdk] Cannot read built-in config: ${t}
|
|
303
|
+
${i.message}`)}let s=rr(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"&&!B.isAbsolute(l.path)?i[a]={...l,path:B.resolve(r,l.path)}:i[a]=l;}else i[a]=d;return {...s,documents:i}}return s}static mergeCrewxConfig(e,t){let r=new Map;for(let w of e.agents??[])r.set(w.id,w);for(let w of t.agents??[])r.has(w.id)&&console.warn(`[agent-loader] User agent "${w.id}" overrides built-in`),r.set(w.id,w);let o=Array.from(r.values()),s={...e.layouts??{},...t.layouts??{}},i={...e.documents??{},...t.documents??{}},a=e,d=t,l=xs(a.vars,d.vars),p=xs(a.settings,d.settings),g;e.skills&&t.skills&&typeof e.skills=="object"&&typeof t.skills=="object"&&!Array.isArray(e.skills)&&!Array.isArray(t.skills)?g={...e.skills,...t.skills}:g=t.skills??e.skills;let m=[...e.hooks??[],...t.hooks??[]],f=dl(a.providers,d.providers),v={...e},y={...t};for(let w of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete v[w],delete y[w];let _={...{...v,...y},agents:o,layouts:s,documents:i,skills:g};return m.length>0&&(_.hooks=m),l!==void 0&&(_.vars=l),p!==void 0&&(_.settings=p),f!==void 0&&(_.providers=f),_}static async loadYaml(e,t,r){let o=t?.includeBuiltIns!==false,s,i;if(o){let p=await n.loadBuiltInConfig(r);if(e!==void 0){let g=nr(e);s=n.mergeCrewxConfig(p,g),i=B.dirname(e);}else s=p,i=process.cwd();}else {if(e===void 0)throw new Error("[@crewx/sdk] loadYaml: path is required when includeBuiltIns is false");s=nr(e),i=B.dirname(e);}let a=new Ze(r);await a.load(s.documents,i);let d=s.agents??[];return await As(d,s,t),new n(d,t??{},s,a,i)}static async fromConfig(e,t,r,o){let s=t?.includeBuiltIns===true,i=e;if(s){let p=await n.loadBuiltInConfig(o);i=n.mergeCrewxConfig(p,e);}let a=new Ze(o);await a.load(i.documents,r??(typeof process<"u"?process.cwd():"/"));let d=i.agents??[];return await As(d,i,t),new n(d,t??{},i,a,r)}get agents(){return this._agents}get config(){return this._config}get plugins(){return this._plugins}get tools(){return this._tools}get workspaceId(){return this._workspaceId}get workspaceName(){return this._workspaceName}getAgent(e){let t=e.startsWith("@")?e.slice(1):e;return this._agents.get(t)}getRemoteProviderConfig(e){let t=this._config?.providers;return Array.isArray(t)?t.find(o=>o.type==="remote"&&o.id===e):void 0}computeTaskLogPath(e,t){let r=cn(t);return B.join(this._projectRoot,".crewx","logs",`${r}_${e}.log`)}registerTool(e,t){this._tools.set(e,{name:e,...t});}async use(e){this._plugins.includes(e)||(await e.attach(this),this._plugins.push(e));}handler(e){return An(this,e)}async registerChannelAdapter(e){let{adapter:t,instanceId:r,config:o}=e;if(this._activeAdapters.has(r))throw new Error(`Adapter instance already registered: ${r}`);let s=new Set(t.manifest.capabilities),i=e.store??un(r),a=e.defaultMode??"query",d=t.manifest.platform,l=e.agentRunner??{run:async(f,v,y)=>{let _=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${f}`,v,{threadId:y?.threadId,platform:d});return {output:_.ok?_.data:_.error?.message??""}}},p=e.onInbound??(async f=>{let v=f.routingHints?.agentId??e.defaultAgent;if(!v)return {accepted:false,reason:"no_agent"};let{output:y}=await l.run(v,f.text,{threadId:f.threadId});return {accepted:true,output:y}}),g=gn({instanceId:r,config:o,capabilities:s,db:i,agentRunner:l,onInbound:p}),m={adapter:t,ctx:g,state:"starting"};this._activeAdapters.set(r,m),this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"starting",timestamp:new Date});try{await t.start(g),m.state="started",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"started",timestamp:new Date});}catch(f){throw m.state="failed",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"failed",error:f instanceof Error?f:new Error(String(f)),timestamp:new Date}),this._activeAdapters.delete(r),f}}async unregisterChannelAdapter(e){let t=this._activeAdapters.get(e);if(t){t.state="stopping",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"stopping",timestamp:new Date});try{await t.adapter.stop(t.ctx),t.state="stopped",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"stopped",timestamp:new Date});}catch(r){t.state="failed",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"failed",error:r instanceof Error?r:new Error(String(r)),timestamp:new Date});}finally{this._activeAdapters.delete(e);}}}async stopAllAdapters(e={}){let t=e.timeoutMs??1e4,r=Array.from(this._activeAdapters.keys()),o=await Promise.allSettled(r.map(s=>Promise.race([this.unregisterChannelAdapter(s),new Promise((i,a)=>setTimeout(()=>a(new Error(`Adapter stop timeout: ${s}`)),t))])));for(let s=0;s<o.length;s++)o[s].status==="rejected"&&console.error(`[crewx] adapter stop error (${r[s]}): ${o[s].reason}`);}abortAll(){for(let[e,t]of this._activeTasks)if(t.pid!==void 0)try{process.platform==="win32"?process.kill(t.pid,"SIGTERM"):process.kill(-t.pid,"SIGTERM");}catch(r){console.error(`[crewx] abort task ${e} (pid=${t.pid}) error: ${r instanceof Error?r.message:String(r)}`);}}async _drainActiveTasks(e){let t=Array.from(this._activeTasks.values()).map(r=>r.done);t.length!==0&&await Promise.race([Promise.allSettled(t),new Promise(r=>setTimeout(r,e).unref())]);}async close(){this.abortAll(),await this._drainActiveTasks(It+1e3),await this.stopAllAdapters({timeoutMs:1e4});let e=[...this._remoteTargets.values()];this._remoteTargets.clear(),await Promise.allSettled(e.map(async r=>{try{await(await r).close();}catch(o){console.error(`[crewx] remote target close error: ${o instanceof Error?o.message:String(o)}`);}}));let t=[...this._plugins].reverse();for(let r of t)try{await r.detach(this);}catch(o){console.error(`[crewx] plugin ${r.name} detach error: ${o instanceof Error?o.message:String(o)}`);}this._plugins.length=0;}filterAgents(e){let t=a=>a?a.split(",").map(d=>d.trim().toLowerCase()).filter(Boolean):void 0,r=t(e.role),o=t(e.team),s=t(e.provider),i=Array.from(this._agents.values());return r&&(i=i.filter(a=>a.role&&r.some(d=>me(a.role.toLowerCase(),d)))),o&&(i=i.filter(a=>a.team&&o.some(d=>me(a.team.toLowerCase(),d)))),s&&(i=i.filter(a=>(Array.isArray(a.provider)?a.provider:[a.provider]).some(l=>s.some(p=>me(l.toLowerCase(),p))))),i}renderAgentPrompt(e){let t=e.startsWith("@")?e.slice(1):e,r=this._agents.get(t);if(!r)throw new Re(t,Array.from(this._agents.keys()));return r.inline?.prompt??r.inline?.system_prompt??r.description??`You are an expert ${t}.`}async renderPrompt(e,t){let o={...await this._documentLoader.buildContext(),...t?.documents??{}},s={...t,documents:o};return this._templateEngine.render(e,s)}registerLayout(e,t){this._layoutLoader.registerLayout(e,t);}async renderAgentPromptFull(e,t){let r=e.startsWith("@")?e.slice(1):e,o=this._agents.get(r);if(!o)throw new Re(r,Array.from(this._agents.keys()));let s=this._resolveLayoutSpec(o,t?.layout),i=this._extractLayoutId(s),a=this._extractLayoutProps(o,s,t?.layout),d=this._layoutLoader.load(i,a),l=o.inline?.prompt??o.inline?.system_prompt??o.description??`You are an expert ${r}.`,p=await this._documentLoader.buildContext(),g=t?.env??(typeof process<"u"?process.env:{}),m=t?.vars?.security_key??al(),f={...t?.vars??{},documents:p,env:g,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??""}},v=await this._templateEngine.render(l,f),y={mode:t?.session?.mode??"query",platform:t?.session?.platform??"cli",options:t?.session?.options??[]},k=o.provider,_=Array.isArray(k)?k:typeof k=="string"&&k.length>0?[k]:[],w=_.join(", ")||(typeof k=="string"?k:""),A=o.options,b=["goals","daily"],M={goals:false,daily:false},S;if(!Array.isArray(A)&&typeof A=="object"&&A!==null){let x=A;if("goals"in x){let N=x.goals;typeof N=="string"||Array.isArray(N)?M.goals=N:M.goals=!!N;}"daily"in x&&(M.daily=!!x.daily);let T={};for(let[N,C]of Object.entries(x))b.includes(N)||(T[N]=C);if(Object.keys(T).length>0){let N=_.some(V=>V.startsWith("cli/")),C={};for(let[V,ae]of Object.entries(T)){let fe={};if(Array.isArray(ae))N&&(fe.rawArgs=ae);else if(typeof ae=="object"&&ae!==null){let lt=ae;Object.keys(lt).length>0&&(fe.named=lt);}(fe.named||fe.rawArgs&&fe.rawArgs.length>0)&&(C[V]=fe);}S=Object.keys(C).length>0?C:void 0;}}let Q=Array.isArray(A)?A:void 0,R={};for(let[x,T]of Object.entries(p))R[x]={content:T.content??"",toc:T.toc,summary:T.summary,path:T.path};if(M.goals){let x=B.join(this._projectRoot,"docs","goal"),T=await Uo(x,void 0,M.goals);T&&(R.active_goals={content:T});}if(M.daily){let x=B.join(this._projectRoot,"docs","daily"),T=await jo(x);T&&(R.today_daily={content:T});}let z=t?.vars?.user_input??void 0,K=this._config?.settings?.dreaming?.continuity,X=K?.reuseReadOnly!==false,$=typeof K?.lookback=="number"?K.lookback:5,Z=typeof K?.maxEntryChars=="number"?K.maxEntryChars:8e3,G=typeof K?.decayRate=="number"?K.decayRate:.5,j=t?.threadId??"",F=o.id,q=X&&$>0&&j&&t?.messages&&t.messages.length>0?es({threadId:j,agentId:F,lookback:$,maxEntryChars:Z,decayRate:G}):new Map,Y=(t?.messages??[]).map(x=>{if(!x.isAssistant)return x;let T=x.metadata?.task_id;return !T||!q.has(T)?x:{...x,activity_log:q.get(T)}}),xt={user_input:z,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??"",provider:w,providerList:_,model:o.inline?.model,workingDirectory:o.working_directory??o.workingDirectory??".",inline:{...o.inline??{},prompt:v},specialties:o.specialties??[],capabilities:o.capabilities??[],remote:o.remote??null,optionsByMode:S,optionsArray:Q},agentMetadata:{specialties:o.specialties??[],capabilities:o.capabilities??[],description:o.description??""},contextOptions:M,documents:R,skills:t?.skills??[],session:y,env:g,vars:{security_key:m,...t?.vars??{}},props:{...a??{},...t?.messages&&t.messages.length>0?{showConversationHistory:true}:{}},platform:y.platform,mode:y.mode,thread_id:j,now:$t(new Date),has_activity_log:q.size>0,messages:Y,tools:this._tools.size>0?{list:Array.from(this._tools.values()).map(x=>({name:x.name,description:x.description,parameters:x.parameters})),json:JSON.stringify(Array.from(this._tools.values()).map(x=>({name:x.name,description:x.description,parameters:x.parameters})),null,2),count:this._tools.size}:null,metadata:{}};return this._layoutRenderer.render(d,xt)}_filterToolsByMode(e){return e?e.map(t=>this._tools.get(t)).filter(t=>t!==void 0):Array.from(this._tools.values())}_resolveLayoutSpec(e,t){if(t!==void 0)return t;let r=e.inline?.layout;if(r!==void 0)return r;let o=this._config?.layouts?.default;return typeof o=="string"&&o?o:"crewx/default"}_extractLayoutId(e){if(typeof e=="string")return e;if("id"in e)return e.id;if("template"in e&&typeof e.template=="string"&&e.template.trim()){let t=`crewx/__inline_${Date.now()}`;return this._layoutLoader.registerLayout(t,e.template),t}return "crewx/default"}_extractLayoutProps(e,t,r){let o=e.inline?.layout,s=o&&typeof o=="object"&&"props"in o?o.props:void 0,i=r&&typeof r=="object"&&"id"in r?r.props:void 0;if(s||i)return {...s??{},...i??{}}}_getConversationProvider(){return this._plugins.find(t=>t.name==="conversation")?.conversationProvider}async _fetchHistoryMessages(e,t,r){if(r&&r.length>0)return r;if(!e)return;let o=this._getConversationProvider();if(o)try{let s=await o.fetchHistory(e,{currentTraceId:t});return s.messages.length===0?void 0:yn(s)}catch{return}}_resolveTimeout(e,t){let r=e==="query"?"CREWX_TIMEOUT_QUERY":"CREWX_TIMEOUT_EXECUTE";if(process.env[r]!=null&&process.env[r]!==""){let o=vo();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=Zr();return t!==void 0?t:e?.meta?.defaultIdleMs!==void 0?e.meta.defaultIdleMs:6e5}_lookupCliAdapter(e){return fn(e)}_resolveEffectiveCost(e,t,r){return Co(e?.costUsd,e?.inputTokens,e?.outputTokens,e?.cachedInputTokens,t)}_resolveEffectiveCwd(e,t){return t?.cwd??(e.working_directory?B.resolve(this._projectRoot,e.working_directory):this._projectRoot)}_buildFileRemoteOptions(e,t){let r={path:this._projectRoot,id:this._workspaceId,name:this._workspaceName,agentRef:e};return {...t,cwd:void 0,metadata:{...t?.metadata??{},crewx:{...t?.metadata?.crewx??{},callerWorkspace:r}},vars:{...t?.vars??{},crewx_caller_workspace_path:r.path,crewx_caller_workspace_id:r.id,crewx_caller_workspace_name:r.name}}}emitToolEvents(e,t,r,o,s,i,a){try{let l=this._lookupCliAdapter(r)?.parseEvent?.(o)??St(new Date().toISOString(),o);for(let p of l)p.type==="tool_use"&&p.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:p.toolName,rawName:p.toolName,input:p.toolInput?this.tryParseJson(p.toolInput):void 0,toolUseId:p.toolUseId}}),p.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:p.toolName??"unknown",rawName:p.toolName??"unknown",toolUseId:p.toolUseId,result:p.resultPreview,isError:p.isError}});}catch{}}emitTaskLogEntries(e,t,r,o,s,i,a){try{for(let d of a)d.type==="tool_use"&&d.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:r,threadId:o,sessionId:s,provider:i,tool:{name:d.toolName,rawName:d.toolName,input:d.toolInput?this.tryParseJson(d.toolInput):void 0,toolUseId:d.toolUseId}}),d.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:t,agentId:r,threadId:o,sessionId:s,provider:i,tool:{name:d.toolName??"unknown",rawName:d.toolName??"unknown",toolUseId:d.toolUseId,result:d.resultPreview,isError:d.isError}});}catch{}}tryParseJson(e){try{return JSON.parse(e)}catch{return e}}async query(e,t,r){let o=await this.resolveFileRemoteTarget(e);if(o)return o.target.query(o.agentRef,t,this._buildFileRemoteOptions(e,r));let s=Ht.getStore()??hn(r?.trace),i=r?.taskId??tt("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null};return Ht.run(d,async()=>{let l=Date.now(),p=new Date,g;try{g=sr(e,Array.from(this._agents.values()));}catch(x){if(x instanceof Re){this.emit("task:start",{traceId:i,timestamp:p,agentRef:e,message:t,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let T=Date.now()-l,N={code:"AGENT_NOT_FOUND",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:T,error:N,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:N,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:T,taskId:i}}}throw x}d.callerAgentId=g.id;let m=mn(g.provider),f=hr(g.options,"query",m,mr(r?.overdrive)),v=yr(g.options,"query"),y=f.active&&f.provider?f.provider:r?.provider??v.provider??m,k=f.active&&f.model?f.model:r?.model??v.model??g.inline?.model;k&&k.includes("{{")&&(k=await this._templateEngine.render(k,{...r?.vars??{}}));let _=y!==m?void 0:r?.resumeSessionId,w;try{w=Te(y,this._additionalArgsProvider);}catch(x){this.emit("task:start",{traceId:i,timestamp:p,agentRef:e,message:t,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let T=Date.now()-l,N={code:"PROVIDER_ERROR",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:T,error:N,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:N,meta:{agentId:g.id,provider:y,model:k,durationMs:T,taskId:i}}}let A=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),b;try{b=await this.renderAgentPromptFull(e,{session:{mode:"query",platform:r?.platform},vars:{user_input:t,...r?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(g,r)},messages:A,threadId:r?.threadId});}catch(x){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${x instanceof Error?x.message:String(x)}`);}let M,S,Q,R=k,z=false,ee=x=>{z||(z=true,this.emit("task:start",{traceId:i,timestamp:p,agentRef:e,message:t,mode:"query",pid:x,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:R,provider:y,codingAgentCommand:M,renderedPrompt:b,metadata:{...r?.metadata??{},provider:y,...f.active?{overdrive:true}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},U=g.options,K=f.active?f.mode:U?.query?.mode,X=f.active?f.effort:U?.query?.effort,$=Array.isArray(U?.query?.tools)?U.query.tools:void 0,Z=this._tools.size>0?this._filterToolsByMode($):[],G=(()=>{let x=U?.query;if(!x||Array.isArray(x))return;let{tools:T,effort:N,mode:C,provider:V,model:ae,profiles:fe,...lt}=x,At=Object.entries(lt).filter(([,Ae])=>Ae!=null);if(At.length!==0)return Object.fromEntries(At.map(([Ae,Dr])=>[Ae,String(Dr)]))})(),j=g.inline?.max_steps;y.startsWith("api/")&&ee();let F=false,q=0,Y=()=>{},xt=new Promise(x=>{Y=x;});this._activeTasks.set(i,{pid:void 0,done:xt});try{let x=await w.query(t,{model:k,effort:X,mode:K,context:r?.context,systemPrompt:b??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(U?.query)?U.query:void 0,resumeSessionId:_,tools:Z.length>0?Z:void 0,maxSteps:j,configOptions:G,timeoutMs:this._resolveTimeout("query",this._lookupCliAdapter(y)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(y)),cwd:this._resolveEffectiveCwd(g,r),env:{CREWX_AGENT_ID:g.id,CREWX_AGENT_ROLE:g.role??"",CREWX_AGENT_TEAM:g.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:y,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,p)},onPid:C=>{let V=this._activeTasks.get(i);V&&(V.pid=C),ee(C);},onOutput:(C,V)=>{let ae=this._lookupCliAdapter(y);V==="stdout"&&ae?.suppressOutputLine?.(C)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:C,level:V}),V==="stdout"&&this.emitToolEvents(i,e,y,C,g.id,r?.threadId??"","");},onTaskLog:C=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",y,C);for(let V of C)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(V),level:"info"});},onCommand:C=>{M=C;},onUsage:C=>{S=C;},onExitCode:C=>{Q=C;},onModel:C=>{R||(R=C);}});q=this._resolveEffectiveCost(S,R,l),ee();let T=Date.now()-l,N={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",result:x,durationMs:T,exitCode:Q,inputTokens:S?.inputTokens,outputTokens:S?.outputTokens,cachedInputTokens:S?.cachedInputTokens,costUsd:q,model:R,metadata:Object.keys(N).length>0?N:void 0}),F=!0,{ok:!0,data:x,meta:{agentId:g.id,provider:y,model:k,durationMs:T,taskId:i}}}catch(x){if(x instanceof exports.ClientToolCallRequiredError){let C=tt("thd");return this._pendingThreads.set(C,{agentRef:g.id,providerStr:y,continuationState:x.continuationState,toolCall:x.toolCall,traceId:i,startMs:l,model:k}),F=true,{ok:true,status:"requires_action",data:"",toolCall:x.toolCall,threadId:C,meta:{agentId:g.id,provider:y,model:k,durationMs:Date.now()-l,taskId:i}}}q=this._resolveEffectiveCost(S,R,l),ee();let T=Date.now()-l,N={code:"QUERY_FAILED",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:T,error:N,exitCode:Q,inputTokens:S?.inputTokens,outputTokens:S?.outputTokens,cachedInputTokens:S?.cachedInputTokens,costUsd:q,model:R,metadata:r?.metadata?{...r.metadata}:void 0}),F=true,{ok:false,data:"",error:N,meta:{agentId:g.id,provider:y,model:k,durationMs:T,taskId:i}}}finally{F||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:Date.now()-l,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:Q??-1,inputTokens:S?.inputTokens,outputTokens:S?.outputTokens,cachedInputTokens:S?.cachedInputTokens,costUsd:q,model:R}),this._activeTasks.delete(i),Y();}})}async continueQuery(e,t){let r=this._pendingThreads.get(e);if(!r)return {ok:false,data:"",error:{code:"THREAD_NOT_FOUND",message:`No pending thread: ${e}`},meta:{agentId:"",provider:"",durationMs:0}};this._pendingThreads.delete(e);let o=Te(r.providerStr,this._additionalArgsProvider);if(!o.continueWithToolResults)return {ok:false,data:"",error:{code:"UNSUPPORTED",message:"Provider does not support client tool continuation"},meta:{agentId:r.agentRef,provider:r.providerStr,durationMs:0}};let s=t.map(i=>({...i,toolName:r.toolCall.toolCallId===i.toolCallId?r.toolCall.toolName:i.toolCallId}));try{let i=await o.continueWithToolResults(r.continuationState,s),a=Date.now()-r.startMs;return this.emit("task:end",{traceId:r.traceId,timestamp:new Date,agentRef:r.agentRef,mode:"query",result:i,durationMs:a}),{ok:!0,status:"complete",data:i,meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:a}}}catch(i){if(i instanceof exports.ClientToolCallRequiredError)return this._pendingThreads.set(e,{...r,continuationState:i.continuationState,toolCall:i.toolCall}),{ok:true,status:"requires_action",data:"",toolCall:i.toolCall,threadId:e,meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:Date.now()-r.startMs}};let a=Date.now()-r.startMs;return {ok:false,data:"",error:{code:"CONTINUE_FAILED",message:i.message},meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:a}}}}async execute(e,t,r){let o=await this.resolveFileRemoteTarget(e);if(o)return o.target.execute(o.agentRef,t,this._buildFileRemoteOptions(e,r));let s=Ht.getStore()??hn(r?.trace),i=r?.taskId??tt("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null};return Ht.run(d,async()=>{let l=Date.now(),p=new Date,g;try{g=sr(e,Array.from(this._agents.values()));}catch(x){if(x instanceof Re){this.emit("task:start",{traceId:i,timestamp:p,agentRef:e,message:t,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let T=Date.now()-l,N={code:"AGENT_NOT_FOUND",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:T,error:N,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:N,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:T,taskId:i}}}throw x}d.callerAgentId=g.id;let m=mn(g.provider),f=hr(g.options,"execute",m,mr(r?.overdrive)),v=yr(g.options,"execute"),y=f.active&&f.provider?f.provider:r?.provider??v.provider??m,k=f.active&&f.model?f.model:r?.model??v.model??g.inline?.model;k&&k.includes("{{")&&(k=await this._templateEngine.render(k,{...r?.vars??{}}));let _=y!==m?void 0:r?.resumeSessionId,w;try{w=Te(y,this._additionalArgsProvider);}catch(x){this.emit("task:start",{traceId:i,timestamp:p,agentRef:e,message:t,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let T=Date.now()-l,N={code:"PROVIDER_ERROR",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:T,error:N,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:N,meta:{agentId:g.id,provider:y,model:k,durationMs:T,taskId:i}}}let A=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),b;try{b=await this.renderAgentPromptFull(e,{session:{mode:"execute",platform:r?.platform},vars:{user_input:t,...r?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(g,r)},messages:A,threadId:r?.threadId});}catch(x){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${x instanceof Error?x.message:String(x)}`);}let M,S,Q,R=k,z=false,ee=x=>{z||(z=true,this.emit("task:start",{traceId:i,timestamp:p,agentRef:e,message:t,mode:"execute",pid:x,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:R,provider:y,codingAgentCommand:M,renderedPrompt:b,metadata:{...r?.metadata??{},provider:y,...f.active?{overdrive:true}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},U=g.options,K=f.active?f.mode:U?.execute?.mode,X=f.active?f.effort:U?.execute?.effort,$=Array.isArray(U?.execute?.tools)?U.execute.tools:void 0,Z=this._tools.size>0?this._filterToolsByMode($):[],G=(()=>{let x=U?.execute;if(!x||Array.isArray(x))return;let{tools:T,effort:N,mode:C,provider:V,model:ae,profiles:fe,...lt}=x,At=Object.entries(lt).filter(([,Ae])=>Ae!=null);if(At.length!==0)return Object.fromEntries(At.map(([Ae,Dr])=>[Ae,String(Dr)]))})(),j=g.inline?.max_steps;y.startsWith("api/")&&ee();let F=false,q=0,Y=()=>{},xt=new Promise(x=>{Y=x;});this._activeTasks.set(i,{pid:void 0,done:xt});try{let x=await w.execute(t,{model:k,effort:X,mode:K,context:r?.context,systemPrompt:b??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(U?.execute)?U.execute:void 0,resumeSessionId:_,tools:Z.length>0?Z:void 0,maxSteps:j,configOptions:G,timeoutMs:this._resolveTimeout("execute",this._lookupCliAdapter(y)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(y)),cwd:this._resolveEffectiveCwd(g,r),env:{CREWX_AGENT_ID:g.id,CREWX_AGENT_ROLE:g.role??"",CREWX_AGENT_TEAM:g.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:y,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,p)},onPid:C=>{let V=this._activeTasks.get(i);V&&(V.pid=C),ee(C);},onOutput:(C,V)=>{let ae=this._lookupCliAdapter(y);V==="stdout"&&ae?.suppressOutputLine?.(C)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:C,level:V}),V==="stdout"&&this.emitToolEvents(i,e,y,C,g.id,r?.threadId??"","");},onTaskLog:C=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",y,C);for(let V of C)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(V),level:"info"});},onCommand:C=>{M=C;},onUsage:C=>{S=C;},onExitCode:C=>{Q=C;},onModel:C=>{R||(R=C);}});q=this._resolveEffectiveCost(S,R,l),ee();let T=Date.now()-l,N={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",result:x,durationMs:T,exitCode:Q,inputTokens:S?.inputTokens,outputTokens:S?.outputTokens,cachedInputTokens:S?.cachedInputTokens,costUsd:q,model:R,metadata:Object.keys(N).length>0?N:void 0}),F=!0,{ok:!0,data:x,meta:{agentId:g.id,provider:y,model:k,durationMs:T,taskId:i}}}catch(x){q=this._resolveEffectiveCost(S,R,l),ee();let T=Date.now()-l,N={code:"EXECUTE_FAILED",message:x.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:T,error:N,exitCode:Q,inputTokens:S?.inputTokens,outputTokens:S?.outputTokens,cachedInputTokens:S?.cachedInputTokens,costUsd:q,model:R,metadata:r?.metadata?{...r.metadata}:void 0}),F=true,{ok:false,data:"",error:N,meta:{agentId:g.id,provider:y,model:k,durationMs:T,taskId:i}}}finally{F||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:Date.now()-l,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:Q??-1,inputTokens:S?.inputTokens,outputTokens:S?.outputTokens,cachedInputTokens:S?.cachedInputTokens,costUsd:q,model:R}),this._activeTasks.delete(i),Y();}})}};function xs(n,e){let t=Hn(n)?n:void 0,r=Hn(e)?e:void 0;if(!(!t&&!r))return {...t??{},...r??{}}}function Hn(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function dl(n,e){let t=Array.isArray(n)?n:void 0,r=Array.isArray(e)?e:void 0;if(!t&&!r)return;let o=a=>{if(!Hn(a))return;let d=a.id;if(typeof d=="string")return `id:${d}`;let l=a.name;if(typeof l=="string")return `name:${l}`},s=new Set;for(let a of r??[]){let d=o(a);d&&s.add(d);}let i=[];for(let a of t??[]){let d=o(a);d&&s.has(d)||i.push(a);}for(let a of r??[])i.push(a);return i}function ll(n){let e=Array.isArray(n.provider)?n.provider:[n.provider],t=n.options,r=[...e];for(let o of ["query","execute"]){let s=yr(t,o);s.provider&&r.push(s.provider);let i=t&&typeof t=="object"&&!Array.isArray(t)?t[o]:void 0,a=i&&typeof i=="object"&&!Array.isArray(i)?fr(i.overdrive):void 0;a?.provider&&r.push(a.provider);}return r}async function As(n,e,t){let r=n.flatMap(ll);if(r.some(s=>s.startsWith("api/"))){let{registerApiProviders:s}=await Promise.resolve().then(()=>(Cn(),ls));s(t?.api);}await ul(r,e),pl(r,e),cl(r);}function cl(n){if(!n.some(r=>r.startsWith("acp/")))return;let{registerAcpProviders:t}=(Mn(),no(fs));t();}async function ul(n,e){if(!n.some(i=>i.startsWith("remote/")))return;let r=e.providers;if(!Array.isArray(r))return;let{createRemoteProviderFactory:o}=await Promise.resolve().then(()=>(Ln(),hs)),s=new Map;for(let i of r)i.type==="remote"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&Pe("remote",o(s,Te));}function pl(n,e){if(!n.some(i=>i.startsWith("plugin/")))return;let r=e.providers;if(!Array.isArray(r))return;let{createPluginProviderFactory:o}=($n(),no(vs)),s=new Map;for(let i of r)i.type==="plugin"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&Pe("plugin",o(s));}u();var qn=class{detach(e){}};u();var gl="crewx:fs:",Bn=class{prefix;store;constructor(e){this.prefix=e?.prefix??gl,this.store=e?.storage??new Map;}async readFile(e){let t=this.toKey(e),r=this.store.get(t);if(r===void 0)throw new Error(`BrowserFsAdapter: file not found: ${e}`);return r}async exists(e){return this.store.has(this.toKey(e))}resolvePath(...e){let t=e.map(i=>i.replace(/\\/g,"/")).join("/").replace(/\/+/g,"/"),r=t.split("/"),o=[];for(let i of r)i==="."||i===""||(i===".."?o.pop():o.push(i));let s=o.join("/");return t.startsWith("/")?`/${s}`:s}isAbsolute(e){return e.startsWith("/")}setItem(e,t){this.store.set(this.toKey(e),t);}removeItem(e){this.store.delete(this.toKey(e));}keys(){return Array.from(this.store.keys()).filter(e=>e.startsWith(this.prefix)).map(e=>e.slice(this.prefix.length))}async readdir(e){let t=e.replace(/\\/g,"/").replace(/\/$/,""),r=this.toKey(t+"/"),o=[];for(let s of this.store.keys())if(s.startsWith(r)){let a=s.slice(r.length).split("/")[0];a&&!o.includes(a)&&o.push(a);}return o}toKey(e){return `${this.prefix}${e.replace(/\\/g,"/")}`}};u();function Xt(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Es(n,e){let t={...n};for(let[r,o]of Object.entries(e))Xt(o)&&Xt(t[r])?t[r]=Es(t[r],o):t[r]=o;return t}function El(n){let e=n?.filePath??B.join(La.homedir(),".crewx","crewx.yaml"),t=null,r=null;function o(){try{return Zo.statSync(e).mtimeMs}catch{return null}}function s(){let i=o();if(i===null)return t=null,r=null,{};if(r!==null&&t===i)return r;let a=null;try{a=jsYaml.load(Zo.readFileSync(e,"utf-8"));}catch{a=null;}let d=Xt(a)?a:{};return r=d,t=i,d}return {get path(){return e},read(){let i=s();return Xt(i.settings)?i.settings:{}},update(i){let a=s(),d=Xt(a.settings)?a.settings:{},l=Es(d,i),p={...a,settings:l};Zo.mkdirSync(B.dirname(e),{recursive:true});let g=`${e}.tmp`;return Zo.writeFileSync(g,jsYaml.dump(p)),Zo.renameSync(g,e),t=null,r=null,l}}}u();he();function Wn(n){if(!n)return "";let e=n.lastIndexOf("/");return e===-1?n.trim():n.slice(e+1).trim()}function Rs(n){return n?mt(n).models.length>0:false}function zn(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Rl(n,e,t){let r=n,o=false,s=[],i=()=>(o||(r={...n},o=true),r),a=typeof r.provider=="string"&&r.provider.trim()?Wn(r.provider):e,d=typeof r.model=="string"&&r.model.trim()?r.model.trim():t;Rs(a)&&(typeof r.mode=="string"&&(Ct(a).map(g=>g.id).includes(r.mode)||(delete i().mode,s.push("mode"))),typeof r.effort=="string"&&(Pt(a,d).includes(r.effort)||(delete i().effort,s.push("effort"))));let l=r.overdrive;if(zn(l)){let p=Wn(typeof l.provider=="string"?l.provider:void 0),g=typeof l.model=="string"?l.model:void 0;if(Rs(p)){let m,f=()=>(m||(m={...l},i().overdrive=m),m);typeof l.mode=="string"&&(Ct(p).map(y=>y.id).includes(l.mode)||(delete f().mode,s.push("overdrive.mode"))),typeof l.effort=="string"&&(Pt(p,g).includes(l.effort)||(delete f().effort,s.push("overdrive.effort")));}}return {block:r,removed:s}}function Cl(n){let{options:e}=n;if(!zn(e))return {options:e,changed:false,removed:[]};let t=Wn(n.provider),r=[],o=e,s=false,i=()=>(s||(o={...e},s=true),o);for(let a of ["query","execute"]){let d=e[a];if(!zn(d))continue;let{block:l,removed:p}=Rl(d,t,n.model);p.length>0&&(i()[a]=l,r.push(...p.map(g=>`${a}.${g}`)));}return {options:o,changed:r.length>0,removed:r}}u();var Pl="https://api.crewx.dev/v1/models",Tl=3600*1e3,Cs=0;async function bl(n){let e=n?.ttlMs??Tl,t=Date.now();if(!(t-Cs<e)){Cs=t;try{let r=await fetch(n?.endpoint??Pl);if(!r.ok)return;let o=await r.json();if(!o?.models||typeof o.models!="object")return;let s={};for(let[i,a]of Object.entries(o.models))a!=null&&(s[i]={input:a.input,cachedInput:a.cachedInput,output:a.output});Ro(s);}catch{}}}u();he();var Sl="https://api.crewx.dev/v1/models",Il=900*1e3,Ps=0;async function Ol(n){let e=n?.ttlMs??Il,t=Date.now();if(!(t-Ps<e)){Ps=t;try{let r=await fetch(n?.endpoint??Sl);if(!r.ok)return;let o=await r.json();if(!o?.providers||typeof o.providers!="object")return;let s={};for(let[i,a]of Object.entries(o.providers)){let d=Array.isArray(a)?a:a.models??[],l=Array.isArray(a)?[]:a.modes??[],p=Array.isArray(a)?[]:a.effort??[],g=Array.isArray(a)?{}:a.modelOverrides??{},m=d.filter(f=>f!=null&&typeof f.id=="string").map(f=>({id:f.id,name:f.name??f.id,...f.description!=null?{description:f.description}:{}}));s[i]={models:m,modes:l.filter(f=>f!=null&&typeof f.id=="string").map(f=>({id:f.id,name:f.name??f.id,...f.description!=null?{description:f.description}:{}})),effort:p.filter(f=>typeof f=="string"),modelOverrides:g};}qr(s);}catch{}}}u();function Ml(n,e){let t=n.skills?.include;if(t===void 0)return [...e];if(t.length===0)return [];let r=new Set(t);return e.filter(o=>r.has(o))}u();var Kn=["codex","claude","opencode","antigravity","copilot"];function Nl(n){let e=n.indexOf("/");return e===-1?n:n.slice(e+1)}function Gn(n){let e=Nl(n),t=Kn.indexOf(e);return t===-1?Kn.length:t}function Yt(n,e){return Gn(n)-Gn(e)}var Dl=new Set(["claude","copilot","codex","opencode"]);function Ll(n){if(!n)return "";if(n.startsWith("acp/")){let e=n.slice(4);if(Dl.has(e))return `cli/${e}`}return n}he();we();Rn();Cn();u();Pn();De();u();Pr();Or();he();var $l="model",Ul="mode",jl="thought_level";function Vn(n){if(n.length===0)return [];if(n[0]?.group!=null){let e=[];for(let t of n)for(let r of t.options??[])e.push(r);return e}return n}function Fl(n,e){let t=new Map;for(let r of [...n,...e])t.has(r.id)||t.set(r.id,r);return Array.from(t.values())}function Hl(n,e,t,r){let o=t.agentInfo?.name,s=e??o??n,i=r.configOptions??[],d=(r.modes?.availableModes??[]).map(_=>({id:_.id,name:_.name,..._.description!=null?{description:_.description}:{}})),l=[];for(let _ of i)if(_.category?.trim().toLowerCase()===Ul&&_.options!=null)for(let w of Vn(_.options))w.value!=null&&l.push({id:w.value,name:w.name??w.value});let p=Fl(d,l),g=[];for(let _ of i)if(_.category?.trim().toLowerCase()===jl&&_.type==="select")for(let w of Vn(_.options??[]))w.value!=null&&g.push(w.value);if(n==="claude"){let _=Tt().map(A=>({id:A.id,name:A.name})),w=Ts(t);return bs(n,{models:_,modes:p,availableModelsCount:0,configModelsCount:0,skipModelWarn:true}),{id:`acp/${n}`,name:s,modes:p,effort:g,models:_,capabilities:w}}let f=(r.models?.availableModels??[]).map(_=>({id:_.modelId})),v=[];for(let _ of i)if(_.category?.trim().toLowerCase()===$l&&_.options!=null)for(let w of Vn(_.options))w.value!=null&&v.push({id:w.value,...w.name!=null?{name:w.name}:{}});let y=bt(f,v);bs(n,{models:y,modes:p,availableModelsCount:f.length,configModelsCount:v.length,skipModelWarn:false});let k=Ts(t);return {id:`acp/${n}`,name:s,modes:p,effort:g,models:y,capabilities:k}}function Ts(n){let e=n.agentCapabilities??{};return {loadSession:e.loadSession??false,image:e.promptCapabilities?.image??false,audio:e.promptCapabilities?.audio??false,mcp:e.mcpCapabilities!=null}}function bs(n,e){!e.skipModelWarn&&e.models.length===0&&console.warn(`[acp] ${n} meta: models empty (availableModels=${e.availableModelsCount}, configOptions[model]=${e.configModelsCount})`),e.modes.length===0&&console.warn(`[acp] ${n} meta: modes empty`);}async function Ss(n){let e=exports.ACP_ADAPTERS[n];if(!e)return null;let t=e.meta?.displayName,r=new exports.AcpConnection({spawn:e.spawn,cwd:process.cwd()});try{await r.connect(e.clientInfo);let o=r.initResponse;if(!o)return null;let s=e.buildSessionParams({cwd:process.cwd()}),i=await r.newSessionRaw(s);return Hl(n,t,o,i)}catch(o){return console.warn(`[acp] ${n} meta query failed: ${o instanceof Error?o.message:String(o)}`),null}finally{await r.dispose();}}async function ql(){let n=Object.keys(exports.ACP_ADAPTERS),e=await Promise.allSettled(n.map(r=>Ss(r))),t=[];for(let r of e)r.status==="fulfilled"&&r.value!==null&&t.push(r.value);return t.sort((r,o)=>Yt(r.id,o.id))}Pr();Tn();Or();Mn();Ur();Ne();u();Ne();he();function Wl(n){return n.charAt(0).toUpperCase()+n.slice(1)}async function Is(){return new Promise(n=>{child_process.execFile("opencode",["models"],{timeout:5e3,maxBuffer:1048576},(t,r)=>{if(t){n([]);return}let o=r.split(`
|
|
304
|
+
`).map(s=>s.trim()).filter(s=>s.length>0).map(s=>({id:s}));n(o);}).on("error",()=>n([]));})}function zl(n,e,t){if(!e.meta)return null;let r=e.meta.capabilities??{},o=Ye(n),s=o.length>0?o:e.meta.models??[],i=t!==void 0?bt(t,s):s;return {id:`cli/${n}`,name:e.meta.displayName??Wl(n),modes:Ct(n),effort:Pt(n),models:i,modelOverrides:ho(n),capabilities:{loadSession:r.loadSession??false,resume:r.resume??false,image:r.image??false,audio:r.audio??false,mcp:r.mcp??false}}}async function Kl(n={}){let e=n.includeOpencodeRuntimeModels?await Is():void 0,t=[];for(let[r,o]of Object.entries(exports.BUILTIN_ADAPTERS)){let i=zl(r,o,r==="opencode"?e:void 0);i&&t.push(i);}return t.sort((r,o)=>Yt(r.id,o.id))}u();var Jn=0;function Gl(n){let e=n.meta?.taskId,t=e?` taskId=${e}`:"";if(n.ok)return `Task completed:${t}
|
|
304
305
|
|
|
305
306
|
${n.data}`;let r=n.error?.message??"Unknown error";return `Task failed:${t}
|
|
306
|
-
Error: ${r}`}function Gl(n){let e=Array.from(n.agents.keys());return {name:"delegate_to_agent",description:`Delegate a task to another agent. Available agents: ${e.join(", ")}`,parameters:{type:"object",properties:{agent:{type:"string",description:`Agent ID to delegate to. One of: ${e.join(", ")}`},message:{type:"string",description:"Task description for the target agent"},mode:{type:"string",description:'Execution mode: "query" for questions, "execute" for actions. Default: query'}},required:["agent","message"]},execute:async t=>{if(Xn>=3)return "Error: Maximum delegation depth (3) reached. Cannot delegate further.";let r=t.agent,o=t.message,s=t.mode??"query";if(!e.includes(r))return `Error: Unknown agent "${r}". Available: ${e.join(", ")}`;Xn++;try{let i=s==="execute"?await n.execute(r,o):await n.query(r,o);return Kl(i)}finally{Xn--;}}}}u();var Is=typeof process<"u"?process.env:{};function Vl(){return Is.CREWX_CLI||"npx crewx"}function Jl(){return Is.CREWX_WORKSPACE||(typeof process<"u"?process.cwd():"/")}u();var Xl=/^[a-zA-Z0-9._-]+$/,Yn=class{constructor(e){this.storage=e;}storage;listBoxes(e){this.validateId(e);let r=this.storage.listBoxes(e).map(o=>this.toBoxResponse(o));return {boxes:r,total:r.length}}getBox(e,t){this.validateId(e),this.validateId(t);let r=this.storage.findBox(e,t);return r?this.toBoxResponse(r):null}createBox(e,t){this.validateId(e);let r=this.generateBoxId(),o=new Date().toISOString(),s=this.storage.insertBox(e,{id:r,seq:t.seq,firstTaskId:t.firstTaskId,midTaskId:t.midTaskId,lastTaskId:t.lastTaskId,taskCount:t.taskCount,summary:t.summary??null,sourceTokens:t.sourceTokens,summaryTokens:t.summaryTokens??null,createdAt:o});return this.toBoxResponse(s)}toBoxResponse(e){return {id:e.id,threadId:e.thread_id,seq:e.seq,firstTaskId:e.first_task_id,lastTaskId:e.last_task_id,taskCount:e.task_count,sourceTokens:e.source_tokens,summaryTokens:e.summary_tokens,summary:e.summary,previewFirst:this.storage.getTaskPreview(e.first_task_id,200),previewMid:this.storage.getTaskPreview(e.mid_task_id,200),previewLast:this.storage.getTaskPreview(e.last_task_id,200),createdAt:e.created_at}}validateId(e){if(!Xl.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return et("box")}};u();function Yl(n,e,t,r,o){let{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}=r,d=s*i,l=s*a,p=d+l,g=e.getThreadMessages(n),m=[],f=0,v=false,y=[];for(let w=0;w<g.length;w+=2){let A=g[w],b=g[w+1],M=A?.content||"",R=b?.content||"",Q=o.countTokens(M+R),T=[];A&&T.push(A),b&&T.push(b),y.push({messages:T,tokens:Q});}for(let w=y.length-1;w>=0;w--){let A=y[w];if(f+A.tokens>d){v=true;break}f+=A.tokens,m.unshift(...A.messages);}let k=[],_=0;if(v&&l>0)try{let{boxes:w}=t.listBoxes(n);for(let A=w.length-1;A>=0;A--){let b=w[A],M=b.summaryTokens??b.sourceTokens;if(_+M>l)break;_+=M,k.unshift({boxId:b.id,seq:b.seq,taskCount:b.taskCount,sourceTokens:b.sourceTokens,summary:b.summary,previewFirst:b.previewFirst,previewMid:b.previewMid,previewLast:b.previewLast,createdAt:b.createdAt});}}catch(w){if(w instanceof Error&&!/not found/i.test(w.message))throw w}return {hot:m,warm:k,hotTokens:f,warmTokens:_,hotOverflow:v,totalBudget:p,config:{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}}}Ne();pt();u();var Mr=class extends Error{constructor(t,r){super(`Task ${t} timed out after ${r}ms`);this.taskId=t;this.timeoutMs=r;this.name="ParallelRunnerTimeoutError";}taskId;timeoutMs},Zt=class{constructor(e={}){this.defaults=e;}defaults;metrics={totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0};async run(e,t={}){if(!Array.isArray(e))throw new TypeError("ParallelRunner.run expects an array of tasks");if(e.length===0)return this.metrics={totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0},[];let r=this.mergeOptions(t),o=Math.max(1,r.maxConcurrency??5),s=r.timeoutMs,i=r.failFast??false,a=r.callbacks,d=r.evaluateTaskSuccess??(()=>true),l=[],p=0,g=0,m=0,f=false,v=0,y=perf_hooks.performance.now(),k=async T=>{a?.onTaskStart&&await a.onTaskStart(T),m+=1;let G=new AbortController,Z={signal:G.signal},$,W;typeof s=="number"&&Number.isFinite(s)&&s>0&&(W=new Promise((q,z)=>{$=setTimeout(()=>{let J=new Mr(T.id,s);G.abort(J),z(J);},s);}));let U=perf_hooks.performance.now(),X=T.run(Z),Y=W?Promise.race([X,W]):X;try{let q=await Y,z=perf_hooks.performance.now(),J=z-U,j=d(q,T),oe={taskId:T.id,success:j,value:q,durationMs:J,startedAt:U,finishedAt:z,metadata:T.metadata,aborted:!1};l.push(oe),j?p+=1:g+=1,a?.onTaskComplete&&await a.onTaskComplete(oe),i&&!j&&(f=!0);}catch(q){let z=perf_hooks.performance.now(),J=z-U,j=q instanceof Error?q:new Error(String(q)),oe={taskId:T.id,success:false,error:j,durationMs:J,startedAt:U,finishedAt:z,metadata:T.metadata,aborted:G.signal.aborted};l.push(oe),g+=1,a?.onError&&await a.onError(T,j,J),i&&(f=true);}finally{$&&clearTimeout($),W&&X.catch(()=>{});}},_=async()=>{for(;!f;){let T=v;if(T>=e.length)break;v+=1;let G=e[T];if(!G||(await k(G),f))break}},w=Math.min(o,e.length),A=[];for(let T=0;T<w;T++)A.push(_());await Promise.all(A);let M=perf_hooks.performance.now()-y,R=l.length?l.reduce((T,G)=>T+G.durationMs,0)/l.length:0,Q=M>0?l.length/(M/1e3):l.length;return this.metrics={totalTasks:e.length,startedTasks:m,completedTasks:l.length,successCount:p,failureCount:g,totalDurationMs:M,averageDurationMs:R,throughput:Q},l}getMetrics(){return this.metrics}mergeOptions(e){return {maxConcurrency:e.maxConcurrency??this.defaults.maxConcurrency,timeoutMs:e.timeoutMs??this.defaults.timeoutMs,failFast:e.failFast??this.defaults.failFast,evaluateTaskSuccess:e.evaluateTaskSuccess??this.defaults.evaluateTaskSuccess,callbacks:this.mergeCallbacks(this.defaults.callbacks,e.callbacks)}}mergeCallbacks(e,t){if(!(!e&&!t))return {onTaskStart:async r=>{e?.onTaskStart&&await e.onTaskStart(r),t?.onTaskStart&&await t.onTaskStart(r);},onTaskComplete:async r=>{e?.onTaskComplete&&await e.onTaskComplete(r),t?.onTaskComplete&&await t.onTaskComplete(r);},onError:async(r,o,s)=>{e?.onError&&await e.onError(r,o,s),t?.onError&&await t.onError(r,o,s);}}}};u();u();var 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 Os=3,Ms=3e4,Ns=500,Ql=n=>{if(typeof n!="number"||Number.isNaN(n)||!Number.isFinite(n))return Os;let e=Math.floor(n);return e>0?e:Os},Zl=n=>n===void 0||typeof n!="number"||Number.isNaN(n)||n<=0?Ms:n,ec=n=>{if(!n)return {maxRetries:0,retryDelay:Ns};let e=Number.isInteger(n.maxRetries)&&n.maxRetries>=0?n.maxRetries:0,t=typeof n.retryDelay=="number"&&n.retryDelay>=0?n.retryDelay:Ns;return {maxRetries:e,retryDelay:t}},Qn=n=>{let e=n.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},tc=(n,e)=>n<=0?Promise.resolve():new Promise((t,r)=>{let o=setTimeout(()=>{e.removeEventListener("abort",s),t();},n),s=()=>{clearTimeout(o),r(Qn(e));};if(e.aborted){s();return}e.addEventListener("abort",s,{once:true});}),rc=async(n,e,t)=>{let r,o;for(let s=0;s<=e.maxRetries;s++){if(t.aborted)throw Qn(t);try{let i=await n();if(r=i,i.success||s===e.maxRetries)return i}catch(i){if(o=i,t.aborted)throw Qn(t);if(s===e.maxRetries)throw i instanceof Error?i:new Error(String(i))}s<e.maxRetries&&await tc(e.retryDelay,t);}if(r)return r;throw o?o instanceof Error?o:new Error(String(o)):new Error("Parallel helper encountered an unexpected state")},Ds=(n,e,t)=>{e.completed+=1,t?e.success+=1:e.failure+=1;try{n.onProgress?.(e.completed,e.total);}catch(r){process.env.NODE_ENV!=="production"&&console.warn("Parallel helper onProgress callback threw an error:",r);}},nc=n=>n.map(t=>({metadata:t.metadata,taskResult:t})).slice().sort((t,r)=>t.metadata.index-r.metadata.index).map(({metadata:t,taskResult:r})=>{if(r.value){let s=r.value;return {...s,agentId:s.agentId??t.request.agentId,metadata:{...s.metadata,requestIndex:t.index,mode:t.mode}}}let o=r.error??new Error("Unknown error");return {agentId:t.request.agentId,content:o.message,success:false,metadata:{error:o.message,aborted:r.aborted??false,requestIndex:t.index,mode:t.mode}}}),oc=n=>n.filter(e=>!e.success).map(e=>{let t=e.metadata;if(e.error instanceof Error)return {index:t.index,error:e.error};if(e.value&&!e.value.success){let r=String(e.value.metadata?.error??e.value.content??"Agent returned unsuccessful result");return {index:t.index,error:new Error(r)}}return {index:t.index,error:new Error("Unknown failure")}}),sc=(n,e)=>({onTaskComplete:async t=>{Ds(e,n,t.success);},onError:async()=>{Ds(e,n,false);}}),Ls=async(n,e,t={})=>{if(!Array.isArray(n))throw new TypeError("Parallel helpers expect an array of requests");if(n.length===0){let k={total:0,completed:0,successCount:0,failureCount:0,results:[],errors:[],metrics:{totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0}};return t.onComplete?.(k),[]}let r=Ql(t.concurrency),o=Zl(t.timeout),s=ec(t.retryPolicy),i=new Zt,a=new er,d=n.map((y,k)=>({id:`${e}:${y.agentId??"anonymous"}:${k}`,metadata:{index:k,mode:e,request:y},run:_=>rc(()=>e==="query"?a.query(y):a.execute(y),s,_.signal)})),l={completed:0,success:0,failure:0,total:n.length},p=await i.run(d,{maxConcurrency:r,timeoutMs:o,evaluateTaskSuccess:y=>y.success,callbacks:sc(l,t)}),g=nc(p),m=oc(p),f=i.getMetrics(),v={total:n.length,completed:n.length,successCount:g.filter(y=>y.success).length,failureCount:g.filter(y=>!y.success).length,results:g,errors:m,metrics:f};return t.onComplete?.(v),g},ic=(n,e)=>Ls(n,"query",e),ac=(n,e)=>Ls(n,"execute",e);Un();u();var Zn=class extends wt{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=H.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=H.dirname(t);Qo.existsSync(o)||Qo.mkdirSync(o,{recursive:true});}else if(!Qo.existsSync(t))throw new I("NOT_FOUND","Database not found");let r=ve(t);if(e)try{vr(r.db,t);}catch(o){throw r.close(),o}return r}insertSpan(e){let t=this.openHandle(true);try{t.db.insert(nt).values(e).run();}catch(r){throw r instanceof I?r:new I("DB_ERROR","Failed to insert span",r)}finally{t.close();}}findByTaskId(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.select().from(nt).where(drizzleOrm.eq(nt.task_id,e)).all()}catch(r){throw new I("DB_ERROR","Failed to find spans by task id",r)}finally{t.close();}}findById(e){if(!this.dbExists())return;let t=this.openHandle(false);try{return t.db.select().from(nt).where(drizzleOrm.eq(nt.id,e)).limit(1).get()??void 0}catch(r){throw new I("DB_ERROR","Failed to find span by id",r)}finally{t.close();}}};$n();Ln();Dn();u();u();var Nr=class{capabilities={required:[]}};u();u();u();var js=2e3;function Fs(n){let e=n.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=js?e:e.slice(0,js-11)+" [redacted]"}var wc=10*1024*1024,_c={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function eo(n,e){return n===void 0?true:Array.isArray(n)?n.includes(e):n===e}function vc(n,e){return n===void 0?true:Array.isArray(n)?n.some(t=>e.includes(t)):e.includes(n)}function qs(n){if(typeof n=="number")return n;let e=n.match(/^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/i);if(!e)return 0;let t=parseFloat(e[1]),r=(e[2]??"b").toLowerCase();return Math.floor(t*(_c[r]??1))}function Bs(n){return typeof n=="string"}function Ws(n){try{let e=Qo.statSync(n);return e.size>wc?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${n} (${e.size} bytes)
|
|
307
|
-
`),null):
|
|
308
|
-
`).length}catch{return null}}function
|
|
307
|
+
Error: ${r}`}function Vl(n){let e=Array.from(n.agents.keys());return {name:"delegate_to_agent",description:`Delegate a task to another agent. Available agents: ${e.join(", ")}`,parameters:{type:"object",properties:{agent:{type:"string",description:`Agent ID to delegate to. One of: ${e.join(", ")}`},message:{type:"string",description:"Task description for the target agent"},mode:{type:"string",description:'Execution mode: "query" for questions, "execute" for actions. Default: query'}},required:["agent","message"]},execute:async t=>{if(Jn>=3)return "Error: Maximum delegation depth (3) reached. Cannot delegate further.";let r=t.agent,o=t.message,s=t.mode??"query";if(!e.includes(r))return `Error: Unknown agent "${r}". Available: ${e.join(", ")}`;Jn++;try{let i=s==="execute"?await n.execute(r,o):await n.query(r,o);return Gl(i)}finally{Jn--;}}}}u();var Os=typeof process<"u"?process.env:{};function Jl(){return Os.CREWX_CLI||"npx crewx"}function Xl(){return Os.CREWX_WORKSPACE||(typeof process<"u"?process.cwd():"/")}u();var Yl=/^[a-zA-Z0-9._-]+$/,Xn=class{constructor(e){this.storage=e;}storage;listBoxes(e){this.validateId(e);let r=this.storage.listBoxes(e).map(o=>this.toBoxResponse(o));return {boxes:r,total:r.length}}getBox(e,t){this.validateId(e),this.validateId(t);let r=this.storage.findBox(e,t);return r?this.toBoxResponse(r):null}createBox(e,t){this.validateId(e);let r=this.generateBoxId(),o=new Date().toISOString(),s=this.storage.insertBox(e,{id:r,seq:t.seq,firstTaskId:t.firstTaskId,midTaskId:t.midTaskId,lastTaskId:t.lastTaskId,taskCount:t.taskCount,summary:t.summary??null,sourceTokens:t.sourceTokens,summaryTokens:t.summaryTokens??null,createdAt:o});return this.toBoxResponse(s)}toBoxResponse(e){return {id:e.id,threadId:e.thread_id,seq:e.seq,firstTaskId:e.first_task_id,lastTaskId:e.last_task_id,taskCount:e.task_count,sourceTokens:e.source_tokens,summaryTokens:e.summary_tokens,summary:e.summary,previewFirst:this.storage.getTaskPreview(e.first_task_id,200),previewMid:this.storage.getTaskPreview(e.mid_task_id,200),previewLast:this.storage.getTaskPreview(e.last_task_id,200),createdAt:e.created_at}}validateId(e){if(!Yl.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return tt("box")}};u();function Ql(n,e,t,r,o){let{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}=r,d=s*i,l=s*a,p=d+l,g=e.getThreadMessages(n),m=[],f=0,v=false,y=[];for(let w=0;w<g.length;w+=2){let A=g[w],b=g[w+1],M=A?.content||"",S=b?.content||"",Q=o.countTokens(M+S),R=[];A&&R.push(A),b&&R.push(b),y.push({messages:R,tokens:Q});}for(let w=y.length-1;w>=0;w--){let A=y[w];if(f+A.tokens>d){v=true;break}f+=A.tokens,m.unshift(...A.messages);}let k=[],_=0;if(v&&l>0)try{let{boxes:w}=t.listBoxes(n);for(let A=w.length-1;A>=0;A--){let b=w[A],M=b.summaryTokens??b.sourceTokens;if(_+M>l)break;_+=M,k.unshift({boxId:b.id,seq:b.seq,taskCount:b.taskCount,sourceTokens:b.sourceTokens,summary:b.summary,previewFirst:b.previewFirst,previewMid:b.previewMid,previewLast:b.previewLast,createdAt:b.createdAt});}}catch(w){if(w instanceof Error&&!/not found/i.test(w.message))throw w}return {hot:m,warm:k,hotTokens:f,warmTokens:_,hotOverflow:v,totalBudget:p,config:{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}}}Ne();Ge();u();var Mr=class extends Error{constructor(t,r){super(`Task ${t} timed out after ${r}ms`);this.taskId=t;this.timeoutMs=r;this.name="ParallelRunnerTimeoutError";}taskId;timeoutMs},Zt=class{constructor(e={}){this.defaults=e;}defaults;metrics={totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0};async run(e,t={}){if(!Array.isArray(e))throw new TypeError("ParallelRunner.run expects an array of tasks");if(e.length===0)return this.metrics={totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0},[];let r=this.mergeOptions(t),o=Math.max(1,r.maxConcurrency??5),s=r.timeoutMs,i=r.failFast??false,a=r.callbacks,d=r.evaluateTaskSuccess??(()=>true),l=[],p=0,g=0,m=0,f=false,v=0,y=perf_hooks.performance.now(),k=async R=>{a?.onTaskStart&&await a.onTaskStart(R),m+=1;let z=new AbortController,ee={signal:z.signal},U,K;typeof s=="number"&&Number.isFinite(s)&&s>0&&(K=new Promise((G,j)=>{U=setTimeout(()=>{let F=new Mr(R.id,s);z.abort(F),j(F);},s);}));let X=perf_hooks.performance.now(),$=R.run(ee),Z=K?Promise.race([$,K]):$;try{let G=await Z,j=perf_hooks.performance.now(),F=j-X,q=d(G,R),Y={taskId:R.id,success:q,value:G,durationMs:F,startedAt:X,finishedAt:j,metadata:R.metadata,aborted:!1};l.push(Y),q?p+=1:g+=1,a?.onTaskComplete&&await a.onTaskComplete(Y),i&&!q&&(f=!0);}catch(G){let j=perf_hooks.performance.now(),F=j-X,q=G instanceof Error?G:new Error(String(G)),Y={taskId:R.id,success:false,error:q,durationMs:F,startedAt:X,finishedAt:j,metadata:R.metadata,aborted:z.signal.aborted};l.push(Y),g+=1,a?.onError&&await a.onError(R,q,F),i&&(f=true);}finally{U&&clearTimeout(U),K&&$.catch(()=>{});}},_=async()=>{for(;!f;){let R=v;if(R>=e.length)break;v+=1;let z=e[R];if(!z||(await k(z),f))break}},w=Math.min(o,e.length),A=[];for(let R=0;R<w;R++)A.push(_());await Promise.all(A);let M=perf_hooks.performance.now()-y,S=l.length?l.reduce((R,z)=>R+z.durationMs,0)/l.length:0,Q=M>0?l.length/(M/1e3):l.length;return this.metrics={totalTasks:e.length,startedTasks:m,completedTasks:l.length,successCount:p,failureCount:g,totalDurationMs:M,averageDurationMs:S,throughput:Q},l}getMetrics(){return this.metrics}mergeOptions(e){return {maxConcurrency:e.maxConcurrency??this.defaults.maxConcurrency,timeoutMs:e.timeoutMs??this.defaults.timeoutMs,failFast:e.failFast??this.defaults.failFast,evaluateTaskSuccess:e.evaluateTaskSuccess??this.defaults.evaluateTaskSuccess,callbacks:this.mergeCallbacks(this.defaults.callbacks,e.callbacks)}}mergeCallbacks(e,t){if(!(!e&&!t))return {onTaskStart:async r=>{e?.onTaskStart&&await e.onTaskStart(r),t?.onTaskStart&&await t.onTaskStart(r);},onTaskComplete:async r=>{e?.onTaskComplete&&await e.onTaskComplete(r),t?.onTaskComplete&&await t.onTaskComplete(r);},onError:async(r,o,s)=>{e?.onError&&await e.onError(r,o,s),t?.onError&&await t.onError(r,o,s);}}}};u();u();var 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 Ms=3,Ns=3e4,Ds=500,Zl=n=>{if(typeof n!="number"||Number.isNaN(n)||!Number.isFinite(n))return Ms;let e=Math.floor(n);return e>0?e:Ms},ec=n=>n===void 0||typeof n!="number"||Number.isNaN(n)||n<=0?Ns:n,tc=n=>{if(!n)return {maxRetries:0,retryDelay:Ds};let e=Number.isInteger(n.maxRetries)&&n.maxRetries>=0?n.maxRetries:0,t=typeof n.retryDelay=="number"&&n.retryDelay>=0?n.retryDelay:Ds;return {maxRetries:e,retryDelay:t}},Yn=n=>{let e=n.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},rc=(n,e)=>n<=0?Promise.resolve():new Promise((t,r)=>{let o=setTimeout(()=>{e.removeEventListener("abort",s),t();},n),s=()=>{clearTimeout(o),r(Yn(e));};if(e.aborted){s();return}e.addEventListener("abort",s,{once:true});}),nc=async(n,e,t)=>{let r,o;for(let s=0;s<=e.maxRetries;s++){if(t.aborted)throw Yn(t);try{let i=await n();if(r=i,i.success||s===e.maxRetries)return i}catch(i){if(o=i,t.aborted)throw Yn(t);if(s===e.maxRetries)throw i instanceof Error?i:new Error(String(i))}s<e.maxRetries&&await rc(e.retryDelay,t);}if(r)return r;throw o?o instanceof Error?o:new Error(String(o)):new Error("Parallel helper encountered an unexpected state")},Ls=(n,e,t)=>{e.completed+=1,t?e.success+=1:e.failure+=1;try{n.onProgress?.(e.completed,e.total);}catch(r){process.env.NODE_ENV!=="production"&&console.warn("Parallel helper onProgress callback threw an error:",r);}},oc=n=>n.map(t=>({metadata:t.metadata,taskResult:t})).slice().sort((t,r)=>t.metadata.index-r.metadata.index).map(({metadata:t,taskResult:r})=>{if(r.value){let s=r.value;return {...s,agentId:s.agentId??t.request.agentId,metadata:{...s.metadata,requestIndex:t.index,mode:t.mode}}}let o=r.error??new Error("Unknown error");return {agentId:t.request.agentId,content:o.message,success:false,metadata:{error:o.message,aborted:r.aborted??false,requestIndex:t.index,mode:t.mode}}}),sc=n=>n.filter(e=>!e.success).map(e=>{let t=e.metadata;if(e.error instanceof Error)return {index:t.index,error:e.error};if(e.value&&!e.value.success){let r=String(e.value.metadata?.error??e.value.content??"Agent returned unsuccessful result");return {index:t.index,error:new Error(r)}}return {index:t.index,error:new Error("Unknown failure")}}),ic=(n,e)=>({onTaskComplete:async t=>{Ls(e,n,t.success);},onError:async()=>{Ls(e,n,false);}}),$s=async(n,e,t={})=>{if(!Array.isArray(n))throw new TypeError("Parallel helpers expect an array of requests");if(n.length===0){let k={total:0,completed:0,successCount:0,failureCount:0,results:[],errors:[],metrics:{totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0}};return t.onComplete?.(k),[]}let r=Zl(t.concurrency),o=ec(t.timeout),s=tc(t.retryPolicy),i=new Zt,a=new er,d=n.map((y,k)=>({id:`${e}:${y.agentId??"anonymous"}:${k}`,metadata:{index:k,mode:e,request:y},run:_=>nc(()=>e==="query"?a.query(y):a.execute(y),s,_.signal)})),l={completed:0,success:0,failure:0,total:n.length},p=await i.run(d,{maxConcurrency:r,timeoutMs:o,evaluateTaskSuccess:y=>y.success,callbacks:ic(l,t)}),g=oc(p),m=sc(p),f=i.getMetrics(),v={total:n.length,completed:n.length,successCount:g.filter(y=>y.success).length,failureCount:g.filter(y=>!y.success).length,results:g,errors:m,metrics:f};return t.onComplete?.(v),g},ac=(n,e)=>$s(n,"query",e),dc=(n,e)=>$s(n,"execute",e);$n();u();var Qn=class extends wt{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=B.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=B.dirname(t);Zo.existsSync(o)||Zo.mkdirSync(o,{recursive:true});}else if(!Zo.existsSync(t))throw new I("NOT_FOUND","Database not found");let r=ve(t);if(e)try{vr(r.db,t);}catch(o){throw r.close(),o}return r}insertSpan(e){let t=this.openHandle(true);try{t.db.insert(ot).values(e).run();}catch(r){throw r instanceof I?r:new I("DB_ERROR","Failed to insert span",r)}finally{t.close();}}findByTaskId(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.select().from(ot).where(drizzleOrm.eq(ot.task_id,e)).all()}catch(r){throw new I("DB_ERROR","Failed to find spans by task id",r)}finally{t.close();}}findById(e){if(!this.dbExists())return;let t=this.openHandle(false);try{return t.db.select().from(ot).where(drizzleOrm.eq(ot.id,e)).limit(1).get()??void 0}catch(r){throw new I("DB_ERROR","Failed to find span by id",r)}finally{t.close();}}};Ln();Dn();Nn();u();u();var Nr=class{capabilities={required:[]}};u();u();u();var Fs=2e3;function Hs(n){let e=n.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=Fs?e:e.slice(0,Fs-11)+" [redacted]"}var _c=10*1024*1024,vc={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function Zn(n,e){return n===void 0?true:Array.isArray(n)?n.includes(e):n===e}function kc(n,e){return n===void 0?true:Array.isArray(n)?n.some(t=>e.includes(t)):e.includes(n)}function Bs(n){if(typeof n=="number")return n;let e=n.match(/^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/i);if(!e)return 0;let t=parseFloat(e[1]),r=(e[2]??"b").toLowerCase();return Math.floor(t*(vc[r]??1))}function Ws(n){return typeof n=="string"}function zs(n){try{let e=Zo.statSync(n);return e.size>_c?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${n} (${e.size} bytes)
|
|
308
|
+
`),null):Zo.readFileSync(n,"utf8").split(`
|
|
309
|
+
`).length}catch{return null}}function Ks(n){try{return Zo.statSync(n).size}catch{return null}}function xc(n,e,t){if(!n)return true;let r=e,o=r?.path??r?.file_path??r?.filePath??r?.filename;if(typeof o!="string")return false;if(me(o,n))return true;if(t&&o.startsWith("/")){let{relative:s,isAbsolute:i}=te("path");if(i(o)){let a=s(t,o);if(a&&!a.startsWith("..")&&me(a,n))return true}}return false}function Ac(n,e){return n?JSON.stringify(e).includes(n):true}function Ec(n,e){if(!n)return true;try{let t=new RegExp(n),r=JSON.stringify(e);return t.test(r)}catch{return false}}function Rc(n,e){if(!n)return true;try{let t=new RegExp(n),r=JSON.stringify(e);return t.test(r)}catch{return false}}function Cc(n,e){if(n.pathSizeMin===void 0&&n.pathSizeMax===void 0)return true;let t=e,r=t?.path??t?.file_path??t?.filePath??t?.filename;if(typeof r!="string")return false;if(n.pathSizeMin!==void 0)if(Ws(n.pathSizeMin)){let o=Ks(r);if(o===null||o<Bs(n.pathSizeMin))return false}else {let o=zs(r);if(o===null||o<n.pathSizeMin)return false}if(n.pathSizeMax!==void 0)if(Ws(n.pathSizeMax)){let o=Ks(r);if(o===null||o>Bs(n.pathSizeMax))return false}else {let o=zs(r);if(o===null||o>n.pathSizeMax)return false}return true}function Pc(n){let e=[],t=[];for(let r=0;r<n.length;r++){let o=n[r];if(!o||typeof o!="object"){t.push(`Hook at index ${r}: not an object, skipping`);continue}let s=o;if(typeof s.name!="string"||!s.name){t.push(`Hook at index ${r}: missing or invalid "name", skipping`);continue}let i=s.guide&&typeof s.guide=="object",a=s.deny&&typeof s.deny=="object",d=typeof s.plugin=="string";if(!i&&!a&&!d){t.push(`Hook "${s.name}": missing guide/deny/plugin, skipping`);continue}if(i&&typeof s.guide.say!="string"){t.push(`Hook "${s.name}": guide.say is required and must be string, skipping`);continue}if(a&&typeof s.deny.reason!="string"){t.push(`Hook "${s.name}": deny.reason is required and must be string, skipping`);continue}e.push(s);}return {valid:e,warnings:t}}var to=class extends Nr{name="@crewx/yaml-hook-plugin";version="0.1.0";capabilities={required:["inject"]};hooks;agentMap;constructor(e){super(),this.hooks=e.hooks,this.agentMap=new Map((e.agents??[]).map(t=>[t.id,t]));}async run(e){let t=[],r=process.env.CREWX_TASK_LOG_PATH,o=process.env.CREWX_HOOK_LOG_VERBOSE==="1";for(let s of this.hooks)if(this.matchEntryLevel(s,e)&&s.guide){if(!this.matchRuleLevel(s.guide,e)){o&&r&&this.appendHookLog(r,{rule:s.name,action:"pass",once:s.guide.once??false,ctx:e,matched:false});continue}s.guide.once&&this.hasFired(e.sessionId,s.name)||(s.guide.once&&this.markFired(e.sessionId,s.name),t.push(s.guide.say),r&&this.appendHookLog(r,{rule:s.name,action:"inject",once:s.guide.once??false,ctx:e,matched:true,message:s.guide.say}));}return t.length?e.inject(t.join(`
|
|
309
310
|
|
|
310
|
-
`)):e.pass()}appendHookLog(e,t){try{let r={rule:t.rule,action:t.action,once:t.once,sessionId:t.ctx.sessionId,provider:t.ctx.provider,agent:t.ctx.agent.id,toolName:t.ctx.tool.name,rawToolName:t.ctx.tool.rawName};t.message&&(r.chars=t.message.length,process.env.CREWX_HOOK_LOG_VERBOSE==="1"&&(r.message=
|
|
311
|
-
`;
|
|
312
|
-
`);}}firedFilePath(e){let t=crypto$1.createHash("sha1").update(e).digest("hex");return
|
|
311
|
+
`)):e.pass()}appendHookLog(e,t){try{let r={rule:t.rule,action:t.action,once:t.once,sessionId:t.ctx.sessionId,provider:t.ctx.provider,agent:t.ctx.agent.id,toolName:t.ctx.tool.name,rawToolName:t.ctx.tool.rawName};t.message&&(r.chars=t.message.length,process.env.CREWX_HOOK_LOG_VERBOSE==="1"&&(r.message=Hs(t.message).slice(0,500)));let o=`[${new Date().toISOString()}] HOOK: ${JSON.stringify(r)}
|
|
312
|
+
`;Zo.appendFileSync(e,o,{encoding:"utf8",mode:384});}catch{}}matchEntryLevel(e,t){if(e.provider!==void 0){let r=t.provider.replace(/^cli\//,"");if(!Zn(e.provider,r))return false}if(e.team!==void 0){let o=this.agentMap.get(t.agent.id)?.team??t.agent.team;if(!Zn(e.team,o))return false}if(e.role!==void 0){let o=this.agentMap.get(t.agent.id)?.role??t.agent.role;if(!Zn(e.role,o))return false}if(e.tag!==void 0){let o=this.agentMap.get(t.agent.id)?.tags??[];if(!kc(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)||!Ac(e.pattern,t.tool.input)||!Ec(e.regex,t.tool.input)||!xc(e.pathPattern,t.tool.input,t.cwd)||!Cc(e,t.tool.input)||!Rc(e.whenInputRegex,t.tool.input))}hasFired(e,t){try{let r=this.firedFilePath(e);if(!Zo.existsSync(r))return !1;let o=JSON.parse(Zo.readFileSync(r,"utf8"));return Array.isArray(o.fired)&&o.fired.includes(t)}catch{return false}}markFired(e,t){try{let r=this.firedFilePath(e);Zo.mkdirSync(B.dirname(r),{recursive:!0,mode:448});let o=Zo.existsSync(r)?JSON.parse(Zo.readFileSync(r,"utf8")):{fired:[]};Array.isArray(o.fired)||(o.fired=[]),o.fired.includes(t)||(o.fired.push(t),Zo.writeFileSync(r,JSON.stringify(o),{mode:384}));}catch(r){process.stderr.write(`[YamlHookPlugin] once state write failed: ${r}
|
|
313
|
+
`);}}firedFilePath(e){let t=crypto$1.createHash("sha1").update(e).digest("hex");return B.join(La.homedir(),".crewx","sessions",t,"fired-rules.json")}};u();u();u();function Tc(n){let e=n.messages.map(t=>({id:t.id,role:t.isAssistant?"assistant":"user",content:t.text,timestamp:new Date(t.timestamp).toISOString(),metadata:t.metadata??null}));return {getThreadMessages(t){return e}}}u();var ro=class extends Error{code;kind;retryAfterMs;constructor(e,t,r){super(`AdapterError: ${e}`),this.name="AdapterError",this.code=e,this.kind=t,this.retryAfterMs=r;}};u();function bc(n){return n}function Sc(n){return {name:n.name,async attach(e){let t=await n.configFactory(e),o=e.registerChannelAdapter,s=n.instanceId??n.name;o&&await o({adapter:n.adapter,instanceId:s,config:t}),n.onAttach&&await n.onAttach(e);},async detach(e){let r=e.unregisterChannelAdapter;r&&await r(n.instanceId??n.name),n.onDetach&&await n.onDetach(e);}}}pt();exports.AdapterError=ro;exports.AgentNotFoundError=Re;exports.AgentRuntime=er;exports.AgentSkillsSchema=oo;exports.BrowserFsAdapter=Bn;exports.ConfigLoadError=Be;exports.Crewx=Fn;exports.CrewxPlugin=qn;exports.DocumentLoader=Ze;exports.LayoutLoadError=ne;exports.LayoutLoader=Lt;exports.LayoutRenderer=jt;exports.NodeFsAdapter=wr;exports.PROVIDER_ORDER=Kn;exports.ParallelRunner=Zt;exports.ParallelRunnerTimeoutError=Mr;exports.PropsValidationError=be;exports.PropsValidator=Ut;exports.SdkBoxService=Xn;exports.SpanRepository=Qn;exports.TaskRepository=Bt;exports.TemplateEngine=Dt;exports.TypedEventEmitter=Ft;exports.YamlHookPlugin=to;exports.buildContext=Ql;exports.canonicalizeAgentOptions=Cl;exports.clearModelsOverride=Ai;exports.compareProviders=Yt;exports.createAdapterContext=gn;exports.createDelegateTool=Vl;exports.createGlobalSettingsStore=El;exports.createHandler=An;exports.createPluginProviderFactory=_s;exports.createProvider=Te;exports.createRemoteProviderFactory=ms;exports.createScopedAdapterStore=un;exports.defaultExtractText=wn;exports.defaultFsAdapter=Qe;exports.defaultParseEvent=pe;exports.defineChannelAdapter=bc;exports.defineChannelAdapterPlugin=Sc;exports.escapeHandlebarsHelper=sn;exports.formatFileSizeHelper=an;exports.formatTimestamp=cn;exports.formatTimestampHelper=dn;exports.generateFingerprint=va;exports.generateId=tt;exports.getAntigravityModels=zr;exports.getClaudeModels=Tt;exports.getCodexModels=Br;exports.getCopilotModels=Wr;exports.getProviderModels=Ye;exports.getSyncWindowStore=Aa;exports.hashWorkspaceId=En;exports.initModelsRemote=Ol;exports.initPricingRemote=bl;exports.lengthHelper=on;exports.loadYamlFile=nr;exports.materializeWindowsSpawnProgram=Ke;exports.mergeAdditionalArgs=Eo;exports.mergeModels=bt;exports.normalizeProviderId=Ll;exports.normalizeWorkspacePath=ss;exports.parseOverdriveProfile=fr;exports.parseOverdriveSignal=mr;exports.parseStdoutEvent=St;exports.parseUsage=Ce;exports.parseYamlContent=rr;exports.providerRank=Gn;exports.queryAcpProviderMeta=Ss;exports.queryAllAcpProviderMetas=ql;exports.queryAllCliProviderMetas=Kl;exports.queryOpencodeModels=Is;exports.registerAcpProviders=gs;exports.registerApiProviders=ds;exports.registerProviderFactory=Pe;exports.resolveAgent=sr;exports.resolveAgentSkills=Ml;exports.resolveCrewxCli=Jl;exports.resolveCrewxWorkspace=Xl;exports.resolveDefaultAgentsYaml=$r;exports.resolveOverdrive=hr;exports.resolveTemplatesPath=ct;exports.resolveWindowsExecutablePath=pi;exports.resolveWindowsSpawnProgram=ze;exports.runExecutesParallel=dc;exports.runInSyncWindow=Ea;exports.runQueriesParallel=ac;exports.setAuditVerbose=sa;exports.setModelsOverride=qr;exports.toTaskReader=Tc;exports.toTemplateMessages=yn;exports.truncateHelper=nn;exports.validateHooksSchema=Pc;
|