@crewx/sdk 0.8.8-rc.8 → 0.8.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/esm/index.js CHANGED
@@ -1,58 +1,143 @@
1
- import*as j from'path';import j__default,{join,resolve,dirname,isAbsolute,basename}from'path';import {fileURLToPath}from'url';import {existsSync,readFileSync,readdirSync,appendFileSync,mkdirSync,writeFileSync,statSync}from'fs';import {spawn,execFileSync}from'child_process';import {ndJsonStream,ClientSideConnection}from'@agentclientprotocol/sdk';import {load}from'js-yaml';import {z as z$1}from'zod';import {createRequire}from'module';import*as Z from'handlebars';import Z__default from'handlebars';import {readFile,access,readdir}from'fs/promises';import {createHash,randomBytes}from'crypto';import {EventEmitter}from'events';import {AsyncLocalStorage}from'async_hooks';import {McpServer}from'@modelcontextprotocol/sdk/server/mcp.js';import {WebStandardStreamableHTTPServerTransport}from'@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js';import {performance}from'perf_hooks';import {homedir}from'os';var gt=Object.defineProperty;var kn=Object.getOwnPropertyDescriptor;var An=Object.getOwnPropertyNames;var Pn=Object.prototype.hasOwnProperty;var B=(o=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(o,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):o)(function(o){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+o+'" is not supported')});var M=(o,e)=>()=>(o&&(e=o(o=0)),e);var Be=(o,e)=>{for(var t in e)gt(o,t,{get:e[t],enumerable:true});},Rn=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of An(e))!Pn.call(o,n)&&n!==t&&gt(o,n,{get:()=>e[n],enumerable:!(r=kn(e,n))||r.enumerable});return o};var mt=o=>Rn(gt({},"__esModule",{value:true}),o);var pr,bn,f,y,l=M(()=>{pr=()=>fileURLToPath(import.meta.url),bn=()=>j__default.dirname(pr()),f=bn(),y=pr();});function Xe(o){return typeof o!="string"?void 0:o.trim()||void 0}function Ge(o){return Xe(o)?.toLowerCase()??""}function ve(o){try{return statSync(o).isFile()}catch{return false}}function yr(o,e){if(o.includes("/")||o.includes("\\")||j__default.isAbsolute(o))return o;let r=(e.PATH??e.Path??process.env.PATH??process.env.Path??"").split(";").map(a=>a.trim()).filter(Boolean),n=j__default.extname(o).length>0,s=e.PATHEXT??e.Pathext??process.env.PATHEXT??process.env.Pathext??".EXE;.CMD;.BAT;.COM",i=n?[""]:s.split(";").map(a=>a.trim()).filter(Boolean).map(a=>a.startsWith(".")?a:`.${a}`);for(let a of r)for(let d of i){let c=Ge(d),u=d.toUpperCase();for(let m of [d,c,u]){let g=j__default.join(a,`${o}${m}`);if(ve(g))return g}}return o}function Un(o){if(!ve(o))return null;try{let e=readFileSync(o,"utf8"),t=j__default.dirname(o),r=[];for(let a of e.matchAll(/"([^"\r\n]*)"/g)){let u=(a[1]??"").match(/%~?dp0%?\s*[\\/]*(.*)$/i)?.[1]?.trim();if(!u)continue;let m=u.replace(/[\\/]+/g,j__default.sep).replace(/^[\\/]+/,""),g=j__default.resolve(t,m);ve(g)&&r.push(g);}let n=[],s=new Map;for(let a of e.matchAll(/SET\s+"(\w+)=%~?dp0%?[\\/]?([^"]+)"/gi)){let d=a[1].toUpperCase(),c=a[2].trim().replace(/[\\/]+/g,j__default.sep).replace(/^[\\/]+/,"");s.set(d,j__default.resolve(t,c));}for(let a of e.split(/\r?\n/))if(a.includes("%*"))for(let d of a.matchAll(/"%(\w+)%"/g)){let c=s.get(d[1].toUpperCase());c&&ve(c)&&n.push(c);}let i=a=>a.find(d=>{let c=Ge(j__default.basename(d));return c!=="node.exe"&&c!=="node"})??null;return i(n)??i(r)}catch{return null}}function Hn(o,e){if(typeof e=="string")return Xe(e)||null;if(!e||typeof e!="object")return null;if(o){let t=e[o],r=typeof t=="string"?Xe(t):void 0;if(r)return r}for(let t of Object.values(e)){let r=typeof t=="string"?Xe(t):void 0;if(r)return r}return null}function Fn(o,e){if(!e)return null;let t=j__default.dirname(o),r=[j__default.resolve(t,"..",e),j__default.resolve(t,"node_modules",e)];for(let n of r){let s=j__default.join(n,"package.json");if(ve(s))try{let i=JSON.parse(readFileSync(s,"utf8")),a=Hn(e,i.bin);if(!a)continue;let d=j__default.resolve(n,a);if(ve(d))return d}catch{}}return null}function qn(o){let e=o.platform??process.platform,t=o.env??process.env,r=o.execPath??process.execPath;if(e!=="win32")return {command:o.command,leadingArgv:[],resolution:"direct"};let n=yr(o.command,t),s=Ge(j__default.extname(n));if(s===".js"||s===".cjs"||s===".mjs")return {command:r,leadingArgv:[n],resolution:"node-entrypoint",windowsHide:true};if(s===".cmd"||s===".bat"){let i=Un(n)??Fn(n,o.packageName);return i?Ge(j__default.extname(i))===".exe"?{command:i,leadingArgv:[],resolution:"exe-entrypoint",windowsHide:true}:{command:r,leadingArgv:[i],resolution:"node-entrypoint",windowsHide:true}:{command:n,leadingArgv:[],resolution:"unresolved-wrapper"}}return {command:n,leadingArgv:[],resolution:"direct"}}function Wn(o){if(o.candidate.resolution!=="unresolved-wrapper")return {command:o.candidate.command,leadingArgv:o.candidate.leadingArgv,resolution:o.candidate.resolution,windowsHide:o.candidate.windowsHide};if(o.allowShellFallback===true)return {command:o.candidate.command,leadingArgv:[],resolution:"shell-fallback",shell:true};throw new Error(`${j__default.basename(o.candidate.command)} wrapper resolved, but no executable/Node entrypoint could be resolved without shell execution.`)}function Re(o){let e=qn(o);return Wn({candidate:e,allowShellFallback:o.allowShellFallback})}function Ce(o,e){return {command:o.command,argv:[...o.leadingArgv,...e],resolution:o.resolution,shell:o.shell,windowsHide:o.windowsHide}}var Ye=M(()=>{l();});function Bn(o){if(o.type!=="usage"||!("input_tokens"in o))return null;let e=Number(o.input_tokens??0),t=Number(o.output_tokens??0),n="cache_read_input_tokens"in o?Number(o.cache_read_input_tokens):void 0,s="cached_input_tokens"in o?Number(o.cached_input_tokens):void 0,i=n!==void 0?n:s??0;return {inputTokens:n!==void 0?e+n:e,outputTokens:t,cachedInputTokens:i}}function Vn(o){let e=o.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),n=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:n,cachedInputTokens:d}}function zn(o){if(o.type!=="step_finish")return null;let t=o.part?.tokens;if(!t)return null;let r=Number(t.input??0),n=Number(t.output??0),s=t.cache,i=s?Number(s.read??0):0;return {inputTokens:r+i,outputTokens:n,cachedInputTokens:i}}function V(o){if(!o||!o.trim())return;let e=null;for(let t of o.split(`
2
- `))if(t.trim())try{let r=JSON.parse(t),n=Bn(r)??Vn(r)??zn(r);n&&(e=n);}catch{}return e??void 0}var ue=M(()=>{l();});var Te,yt=M(()=>{l();Te=class extends Error{name="RateLimitError";constructor(e){super(e);}};});function z(o){return /crewx\s+(x|execute)\s/.test(o)}function K(o,e){let t=e.match(/@(\S+)/);return {timestamp:o,type:"agent_call",targetAgent:t?.[1]?.replace(/["']/g,""),toolInput:e}}var xe=M(()=>{l();});function J(o){if(typeof o=="string")return o;if(!o||typeof o!="object")return JSON.stringify(o??{});let e=o;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 ke=M(()=>{l();});function Kn(o,e){let t=e.type;if(t==="text"){let r=String(e.text||"");return r?{timestamp:o,type:"text",content:r}:null}if(t==="thinking"){let r=String(e.thinking||"");return {timestamp:o,type:"thinking",content:r||"(thinking)"}}if(t==="tool_use"){let r=String(e.name||""),n=e.id,s=e.input,i=J(s);return r==="Bash"&&z(i)?K(o,i):{timestamp:o,type:"tool_use",toolUseId:n,toolName:r,toolInput:i}}if(t==="tool_result"){let r=!!e.is_error,n=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(`
3
- `):i=JSON.stringify(s),{timestamp:o,type:"tool_result",toolUseId:n,resultPreview:i,isError:r}}return null}var Qe,ht=M(()=>{l();yt();xe();ke();Qe={command:"claude",buildArgs(o,e,t){if(e.additionalArgs!==void 0){let n=[...e.additionalArgs],s=n.indexOf("-p");return s!==-1?(n.splice(s+1,0,o),e.model&&n.push("--model",e.model),{args:n}):(e.model&&n.push("--model",e.model),{args:n,stdinMessage:o})}let r=["-p",o,"--output-format","stream-json","--verbose"];return e.model&&r.push("--model",e.model),{args:r}},extractText(o){let e=o.split(`
4
- `).filter(n=>n.trim()),t=[],r=null;for(let n of e)try{let s=JSON.parse(n);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.join(`
1
+ import*as z from'path';import z__default,{join,resolve,dirname,isAbsolute,basename}from'path';import {fileURLToPath}from'url';import {existsSync,readFileSync,readdirSync,mkdirSync,appendFileSync,writeFileSync,statSync}from'fs';import {spawn,execFileSync}from'child_process';import {ndJsonStream,ClientSideConnection}from'@agentclientprotocol/sdk';import {load}from'js-yaml';import {z as z$1}from'zod';import {createRequire}from'module';import*as le from'handlebars';import le__default from'handlebars';import {readFile,access,readdir}from'fs/promises';import {createHash,randomBytes}from'crypto';import {EventEmitter}from'events';import {AsyncLocalStorage}from'async_hooks';import {McpServer}from'@modelcontextprotocol/sdk/server/mcp.js';import {WebStandardStreamableHTTPServerTransport}from'@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js';import {performance}from'perf_hooks';import {sql,eq,desc,and,or as or$1,isNull,like,asc,inArray,gte,lt as lt$1}from'drizzle-orm';import Ui,{homedir}from'os';import {sqliteTable,text,integer,real,index,unique}from'drizzle-orm/sqlite-core';var Wt=Object.defineProperty;var wo=Object.getOwnPropertyDescriptor;var xo=Object.getOwnPropertyNames;var ko=Object.prototype.hasOwnProperty;var V=(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 gt=(n,e)=>{for(var t in e)Wt(n,t,{get:e[t],enumerable:true});},vo=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of xo(e))!ko.call(n,o)&&o!==t&&Wt(n,o,{get:()=>e[o],enumerable:!(r=wo(e,o))||r.enumerable});return n};var zt=n=>vo(Wt({},"__esModule",{value:true}),n);var Jr,Ro,m,y,l=D(()=>{Jr=()=>fileURLToPath(import.meta.url),Ro=()=>z__default.dirname(Jr()),m=Ro(),y=Jr();});function wt(n){return typeof n!="string"?void 0:n.trim()||void 0}function xt(n){return wt(n)?.toLowerCase()??""}function je(n){try{return statSync(n).isFile()}catch{return false}}function Qr(n,e){if(n.includes("/")||n.includes("\\")||z__default.isAbsolute(n))return n;let r=(e.PATH??e.Path??process.env.PATH??process.env.Path??"").split(";").map(a=>a.trim()).filter(Boolean),o=z__default.extname(n).length>0,s=e.PATHEXT??e.Pathext??process.env.PATHEXT??process.env.Pathext??".EXE;.CMD;.BAT;.COM",i=o?[""]:s.split(";").map(a=>a.trim()).filter(Boolean).map(a=>a.startsWith(".")?a:`.${a}`);for(let a of r)for(let d of i){let c=xt(d),u=d.toUpperCase();for(let g of [d,c,u]){let h=z__default.join(a,`${n}${g}`);if(je(h))return h}}return n}function $o(n){if(!je(n))return null;try{let e=readFileSync(n,"utf8"),t=z__default.dirname(n),r=[];for(let a of e.matchAll(/"([^"\r\n]*)"/g)){let u=(a[1]??"").match(/%~?dp0%?\s*[\\/]*(.*)$/i)?.[1]?.trim();if(!u)continue;let g=u.replace(/[\\/]+/g,z__default.sep).replace(/^[\\/]+/,""),h=z__default.resolve(t,g);je(h)&&r.push(h);}let o=[],s=new Map;for(let a of e.matchAll(/SET\s+"(\w+)=%~?dp0%?[\\/]?([^"]+)"/gi)){let d=a[1].toUpperCase(),c=a[2].trim().replace(/[\\/]+/g,z__default.sep).replace(/^[\\/]+/,"");s.set(d,z__default.resolve(t,c));}for(let a of e.split(/\r?\n/))if(a.includes("%*"))for(let d of a.matchAll(/"%(\w+)%"/g)){let c=s.get(d[1].toUpperCase());c&&je(c)&&o.push(c);}let i=a=>a.find(d=>{let c=xt(z__default.basename(d));return c!=="node.exe"&&c!=="node"})??null;return i(o)??i(r)}catch{return null}}function Lo(n,e){if(typeof e=="string")return wt(e)||null;if(!e||typeof e!="object")return null;if(n){let t=e[n],r=typeof t=="string"?wt(t):void 0;if(r)return r}for(let t of Object.values(e)){let r=typeof t=="string"?wt(t):void 0;if(r)return r}return null}function jo(n,e){if(!e)return null;let t=z__default.dirname(n),r=[z__default.resolve(t,"..",e),z__default.resolve(t,"node_modules",e)];for(let o of r){let s=z__default.join(o,"package.json");if(je(s))try{let i=JSON.parse(readFileSync(s,"utf8")),a=Lo(e,i.bin);if(!a)continue;let d=z__default.resolve(o,a);if(je(d))return d}catch{}}return null}function Uo(n){let e=n.platform??process.platform,t=n.env??process.env,r=n.execPath??process.execPath;if(e!=="win32")return {command:n.command,leadingArgv:[],resolution:"direct"};let o=Qr(n.command,t),s=xt(z__default.extname(o));if(s===".js"||s===".cjs"||s===".mjs")return {command:r,leadingArgv:[o],resolution:"node-entrypoint",windowsHide:true};if(s===".cmd"||s===".bat"){let i=$o(o)??jo(o,n.packageName);return i?xt(z__default.extname(i))===".exe"?{command:i,leadingArgv:[],resolution:"exe-entrypoint",windowsHide:true}:{command:r,leadingArgv:[i],resolution:"node-entrypoint",windowsHide:true}:{command:o,leadingArgv:[],resolution:"unresolved-wrapper"}}return {command:o,leadingArgv:[],resolution:"direct"}}function Fo(n){if(n.candidate.resolution!=="unresolved-wrapper")return {command:n.candidate.command,leadingArgv:n.candidate.leadingArgv,resolution:n.candidate.resolution,windowsHide:n.candidate.windowsHide};if(n.allowShellFallback===true)return {command:n.candidate.command,leadingArgv:[],resolution:"shell-fallback",shell:true};throw new Error(`${z__default.basename(n.candidate.command)} wrapper resolved, but no executable/Node entrypoint could be resolved without shell execution.`)}function Ve(n){let e=Uo(n);return Fo({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 kt=D(()=>{l();});function Ho(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 qo(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 Bo(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 te(n){if(!n||!n.trim())return;let e=null;for(let t of n.split(`
2
+ `))if(t.trim())try{let r=JSON.parse(t),o=Ho(r)??qo(r)??Bo(r);o&&(e=o);}catch{}return e??void 0}var Re=D(()=>{l();});var Je,Kt=D(()=>{l();Je=class extends Error{name="RateLimitError";constructor(e){super(e);}};});function re(n){return /crewx\s+(x|execute)\s/.test(n)}function ne(n,e){let t=e.match(/@(\S+)/);return {timestamp:n,type:"agent_call",targetAgent:t?.[1]?.replace(/["']/g,""),toolInput:e}}var Ue=D(()=>{l();});function oe(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 Fe=D(()=>{l();});function Wo(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=oe(s);return r==="Bash"&&re(i)?ne(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(`
3
+ `):i=JSON.stringify(s),{timestamp:n,type:"tool_result",toolUseId:o,resultPreview:i,isError:r}}return null}var vt,Jt=D(()=>{l();Kt();Ue();Fe();vt={command:"claude",buildArgs(n,e,t){if(e.additionalArgs!==void 0){let o=[...e.additionalArgs],s=o.indexOf("-p");return s!==-1?(o.splice(s+1,0,n),e.model&&o.push("--model",e.model),{args:o}):(e.model&&o.push("--model",e.model),{args:o,stdinMessage:n})}let r=["-p",n,"--output-format","stream-json","--verbose"];return e.model&&r.push("--model",e.model),{args:r}},extractText(n){let e=n.split(`
4
+ `).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.join(`
5
5
 
6
- `):r||o.trim()},extractFailure(o){if(o.includes('"rate_limit_event"'))try{let e=JSON.parse(o);if(e.type==="rate_limit_event"){let t=e.rate_limit_info??{};if(t.status==="rejected")return new Te(`Claude rate limit: ${t.rateLimitType??"unknown"} (status: ${t.status})`)}}catch{}return null},parseResultMeta(o){let e=o.split(`
7
- `);for(let t of e)if(t.trim())try{let r=JSON.parse(t);if(r.type==="result"){let n=r.usage,s=n?{inputTokens:Number(n.input_tokens??0)+Number(n.cache_read_input_tokens??0),outputTokens:Number(n.output_tokens??0),cachedInputTokens:Number(n.cache_read_input_tokens??0),costUsd:Number(r.total_cost_usd??0)}:null,i=r.modelUsage,a=i?Object.keys(i)[0]??null:null;return {usage:s,model:a}}}catch{}return {usage:null,model:null}},parseEvent(o,e){let t;try{t=JSON.parse(o);}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 c=Kn(i,d);c&&a.push(c);}return a}};});var Ze,wt=M(()=>{l();ue();xe();ke();Ze={command:"gemini",buildArgs(o,e,t){if(e.additionalArgs!==void 0){let n=[...e.additionalArgs],s=n.indexOf("-p");return s!==-1?(n.splice(s+1,0,o),e.model&&n.push("--model",e.model),{args:n}):(e.model&&n.push("--model",e.model),{args:n,stdinMessage:o})}let r=["-p",o,"--output-format","stream-json","--verbose"];return e.model&&r.push("--model",e.model),{args:r}},extractText(o){let e=o.split(`
8
- `).filter(n=>n.trim()),t=[],r=null;for(let n of e)try{let s=JSON.parse(n);s.type==="message"&&s.role==="assistant"&&s.delta===!0&&typeof s.content=="string"&&t.push(s.content),s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t.join(""):r||o.trim()},parseResultMeta(o){let e=V(o);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(o,e){let t;try{t=JSON.parse(o);}catch{return []}let r=t.type;if(!r)return [];if(r!=="message"&&r!=="tool_use"&&r!=="tool_result")return [];let n=e??new Date().toISOString();if(r==="message"){if(t.role!=="assistant")return [];let i=t.content;return i?[{timestamp:n,type:"text",content:i}]:[]}if(r==="tool_use"){let s=String(t.tool_name||""),i=t.tool_id,a=t.parameters,d=J(a);return /^bash$/i.test(s)&&z(d)?[K(n,d)]:[{timestamp:n,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:n,type:"tool_result",toolUseId:s,resultPreview:i,isError:a}]}return []}};});var et,vt=M(()=>{l();ue();xe();ke();et={command:"copilot",buildArgs(o,e,t){let r=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&r.push("--model",e.model),{args:r,stdinMessage:o}},extractText(o){let e=o.split(`
9
- `).filter(n=>n.trim()),t=[],r=null;for(let n of e)try{let s=JSON.parse(n);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.join(`
6
+ `):r||n.trim()},extractFailure(n){if(n.includes('"rate_limit_event"'))try{let e=JSON.parse(n);if(e.type==="rate_limit_event"){let t=e.rate_limit_info??{};if(t.status==="rejected")return new Je(`Claude rate limit: ${t.rateLimitType??"unknown"} (status: ${t.status})`)}}catch{}return null},parseResultMeta(n){let e=n.split(`
7
+ `);for(let t of e)if(t.trim())try{let r=JSON.parse(t);if(r.type==="result"){let o=r.usage,s=o?{inputTokens:Number(o.input_tokens??0)+Number(o.cache_read_input_tokens??0),outputTokens:Number(o.output_tokens??0),cachedInputTokens:Number(o.cache_read_input_tokens??0),costUsd:Number(r.total_cost_usd??0)}:null,i=r.modelUsage,a=i?Object.keys(i)[0]??null:null;return {usage:s,model:a}}}catch{}return {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 c=Wo(i,d);c&&a.push(c);}return a}};});var _t,Xt=D(()=>{l();Re();Ue();Fe();_t={command:"gemini",buildArgs(n,e,t){if(e.additionalArgs!==void 0){let o=[...e.additionalArgs],s=o.indexOf("-p");return s!==-1?(o.splice(s+1,0,n),e.model&&o.push("--model",e.model),{args:o}):(e.model&&o.push("--model",e.model),{args:o,stdinMessage:n})}let r=["-p",n,"--output-format","stream-json","--verbose"];return e.model&&r.push("--model",e.model),{args:r}},extractText(n){let e=n.split(`
8
+ `).filter(o=>o.trim()),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);s.type==="message"&&s.role==="assistant"&&s.delta===!0&&typeof s.content=="string"&&t.push(s.content),s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t.join(""):r||n.trim()},parseResultMeta(n){let e=te(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!=="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=oe(a);return /^bash$/i.test(s)&&re(d)?[ne(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 []}};});var At,Gt=D(()=>{l();Re();Ue();Fe();At={command:"copilot",buildArgs(n,e,t){let r=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&r.push("--model",e.model),{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.join(`
10
10
 
11
- `):r||o.trim()},parseResultMeta(o){let e=V(o);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(o,e){let t;try{t=JSON.parse(o);}catch{return []}let r=t.type;if(!r)return [];if(!r.startsWith("tool.execution")&&!r.startsWith("assistant.")&&r!=="user.message")return [];let n=t.data;if(!n)return [];let s=e??new Date().toISOString(),i=n.toolCallId;if(r==="tool.execution_start"){let a=String(n.toolName||""),d=n.arguments,c=J(d);return (a==="bash"||a==="Bash")&&z(c)?[K(s,c)]:[{timestamp:s,type:"tool_use",toolName:a,toolInput:c,...i&&{toolUseId:i}}]}if(r==="tool.execution_complete"){let a=n.error;if(a)return [{timestamp:s,type:"tool_result",isError:true,resultPreview:String(a.message||""),...i&&{toolUseId:i}}];let d=n.result,c=String(d?.content||"");return [{timestamp:s,type:"tool_result",resultPreview:c,isError:false,...i&&{toolUseId:i}}]}if(r==="assistant.message"){let a=String(n.content||"");return a?[{timestamp:s,type:"text",content:a}]:[]}return []}};});function Jn(o,e){if(e.type==="command_execution"){let r=String(e.command||"");return z(r)?[K(o,r)]:[{timestamp:o,type:"tool_use",toolName:"Bash",toolInput:r}]}return []}function Xn(o,e){let t=e.type;if(t==="message"||t==="text"){let r=e.content;if(Array.isArray(r))for(let n of r){let s=Gn(o,n);if(s)return s}if(typeof e.text=="string")return {timestamp:o,type:"text",content:e.text}}if(t==="reasoning")return {timestamp:o,type:"text",content:String(e.text||"")};if(t==="command_execution"){let r=String(e.aggregated_output||e.output||""),n=!!e.is_error;return {timestamp:o,type:"tool_result",resultPreview:r,isError:n}}if(t==="tool_use"){let r=String(e.name||e.tool_name||""),n=e.input,s=J(n);return r==="Bash"&&z(s)?K(o,s):{timestamp:o,type:"tool_use",toolName:r,toolInput:s}}if(t==="tool_result"){let r=!!e.is_error,n=String(e.output||e.content||"");return {timestamp:o,type:"tool_result",resultPreview:n,isError:r}}return null}function Gn(o,e){let t=e.type;if(t==="text")return {timestamp:o,type:"text",content:String(e.text||"")};if(t==="tool_use"){let r=String(e.name||""),n=e.input,s=J(n);return r==="Bash"&&z(s)?K(o,s):{timestamp:o,type:"tool_use",toolName:r,toolInput:s}}return null}var tt,xt=M(()=>{l();ue();xe();ke();tt={command:"codex",buildArgs(o,e,t){if(e.additionalArgs!==void 0){let n=[...e.additionalArgs];return !n.includes("--json")&&!n.includes("--experimental-json")&&n.push("--json"),e.model&&n.push("--model",e.model),{args:n,stdinMessage:o}}let r=["exec","--json"];return e.model&&r.push("--model",e.model),{args:r,stdinMessage:o}},extractText(o){let e=o.split(`
12
- `).filter(n=>n.trim()),t=[],r=null;for(let n of e)try{let s=JSON.parse(n);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.join(`
11
+ `):r||n.trim()},parseResultMeta(n){let e=te(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,c=oe(d);return (a==="bash"||a==="Bash")&&re(c)?[ne(s,c)]:[{timestamp:s,type:"tool_use",toolName:a,toolInput:c,...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,c=String(d?.content||"");return [{timestamp:s,type:"tool_result",resultPreview:c,isError:false,...i&&{toolUseId:i}}]}if(r==="assistant.message"){let a=String(o.content||"");return a?[{timestamp:s,type:"text",content:a}]:[]}return []}};});function zo(n,e){if(e.type==="command_execution"){let r=String(e.command||"");return re(r)?[ne(n,r)]:[{timestamp:n,type:"tool_use",toolName:"Bash",toolInput:r}]}return []}function Vo(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=Ko(n,o);if(s)return s}if(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=oe(o);return r==="Bash"&&re(s)?ne(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}}return null}function Ko(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=oe(o);return r==="Bash"&&re(s)?ne(n,s):{timestamp:n,type:"tool_use",toolName:r,toolInput:s}}return null}var Rt,Yt=D(()=>{l();Re();Ue();Fe();Rt={command:"codex",buildArgs(n,e,t){if(e.additionalArgs!==void 0){let o=[...e.additionalArgs];return !o.includes("--json")&&!o.includes("--experimental-json")&&o.push("--json"),e.model&&o.push("--model",e.model),{args:o,stdinMessage:n}}let r=["exec","--json"];return e.model&&r.push("--model",e.model),{args:r,stdinMessage:n}},extractText(n){let e=n.split(`
12
+ `).filter(o=>o.trim()),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.join(`
13
13
 
14
- `):r||o.trim()},parseResultMeta(o){let e=V(o);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(o,e){let t;try{t=JSON.parse(o);}catch{return []}let r=t.type;if(!r)return [];if(!r.startsWith("item.")&&!r.startsWith("turn.")&&!r.startsWith("thread."))return [];let n=t.item;if(!n)return [];let s=e??new Date().toISOString();if(r==="item.started")return Jn(s,n);if(r==="item.completed"){let i=Xn(s,n);return i?[i]:[]}return []}};});var rt,kt=M(()=>{l();ue();ke();rt={command:"opencode",buildArgs(o,e,t){let r=e.additionalArgs,n=r!==void 0?[...r]:["run"];return n.includes("--format")||n.push("--format","json"),e.model&&n.push("--model",e.model),n.push(o),{args:n}},extractText(o){let e=o.split(`
15
- `).filter(n=>n.trim()),t=[],r=null;for(let n of e)try{let s=JSON.parse(n);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.join(""):r||o.trim()},parseResultMeta(o){let e=V(o);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(o,e){let t;try{t=JSON.parse(o);}catch{return []}let r=t.type;if(!r)return [];let n=e??new Date().toISOString();if(r==="text"){let i=t.part?.text;return i?[{timestamp:n,type:"text",content:i}]:[]}if(r==="tool_use"){let s=t.part;if(!s)return [];let i=String(s.tool||""),a=String(s.callID||""),d=s.state,c=String(d?.status||""),u=d?.input,m=J(u),g=[{timestamp:n,type:"tool_use",toolName:i,toolUseId:a,toolInput:m}];if(c==="completed"&&d?.output!==void 0){let p=d.output,h=typeof p=="string"?p:JSON.stringify(p);g.push({timestamp:n,type:"tool_result",toolUseId:a,resultPreview:h,isError:false});}else c==="error"&&g.push({timestamp:n,type:"tool_result",toolUseId:a,resultPreview:String(d?.error||"tool error"),isError:true});return g}return []}};});var At,Pt=M(()=>{l();At={command:"agy",buildArgs(o,e,t){if(e.additionalArgs!==void 0){let n=[...e.additionalArgs];return n.includes("--print")||n.unshift("--print",o),e.model&&n.push("--model",e.model),n.push("--dangerously-skip-permissions"),{args:n}}let r=["--print",o,"--dangerously-skip-permissions"];return e.model&&r.push("--model",e.model),{args:r}},extractText(o){return o.trim()},parseResultMeta(o){return {usage:null,model:null}},parseEvent(o,e){return []}};});function Rt(o,e,t){if(t){let r=ie[t];if(r?.parseEvent)return r.parseEvent(e,o)}for(let r of Object.values(ie)){let n=r.parseEvent?.(e,o)??[];if(n.length>0)return n}return []}var ie,Ae=M(()=>{l();ht();wt();vt();xt();kt();Pt();ht();wt();vt();xt();kt();Pt();xe();ie={claude:Qe,gemini:Ze,copilot:et,codex:tt,opencode:rt,antigravity:At};});function Qn(o){let e=o.split(`
16
- `).filter(d=>d.trim()),t=[],r=[],n=[],s=[],i=[],a=null;for(let d of e)try{let c=JSON.parse(d);if(c.type==="assistant"&&Array.isArray(c.message?.content))for(let u of c.message.content)u.type==="text"&&typeof u.text=="string"&&u.text.trim()&&t.push(u.text.trim());if(c.type==="message"&&c.role==="assistant"&&c.delta===!0&&typeof c.content=="string"&&r.push(c.content),c.type==="assistant.message"&&typeof c.data?.content=="string"){let u=c.data.content;u.trim()&&n.push(u.trim());}if(c.type==="item.completed"&&(c.item?.type==="message"||c.item?.type==="agent_message")&&typeof c.item?.text=="string"){let u=c.item.text;u.trim()&&s.push(u.trim());}if(c.type==="text"&&typeof c.part?.text=="string"){let u=c.part.text;u.trim()&&i.push(u.trim());}c.type==="result"&&typeof c.result=="string"&&(a=c.result);}catch{}return t.length>0?t.join(`
14
+ `):r||n.trim()},parseResultMeta(n){let e=te(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("item.")&&!r.startsWith("turn.")&&!r.startsWith("thread."))return [];let o=t.item;if(!o)return [];let s=e??new Date().toISOString();if(r==="item.started")return zo(s,o);if(r==="item.completed"){let i=Vo(s,o);return i?[i]:[]}return []}};});var Pt,Qt=D(()=>{l();Re();Fe();Pt={command:"opencode",buildArgs(n,e,t){let r=e.additionalArgs,o=r!==void 0?[...r]:["run"];return o.includes("--format")||o.push("--format","json"),e.model&&o.push("--model",e.model),o.push(n),{args:o}},extractText(n){let e=n.split(`
15
+ `).filter(o=>o.trim()),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.join(""):r||n.trim()},parseResultMeta(n){let e=te(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 [];let o=e??new Date().toISOString();if(r==="text"){let i=t.part?.text;return i?[{timestamp:o,type:"text",content:i}]:[]}if(r==="tool_use"){let s=t.part;if(!s)return [];let i=String(s.tool||""),a=String(s.callID||""),d=s.state,c=String(d?.status||""),u=d?.input,g=oe(u),h=[{timestamp:o,type:"tool_use",toolName:i,toolUseId:a,toolInput:g}];if(c==="completed"&&d?.output!==void 0){let p=d.output,f=typeof p=="string"?p:JSON.stringify(p);h.push({timestamp:o,type:"tool_result",toolUseId:a,resultPreview:f,isError:false});}else c==="error"&&h.push({timestamp:o,type:"tool_result",toolUseId:a,resultPreview:String(d?.error||"tool error"),isError:true});return h}return []}};});var Zt,er=D(()=>{l();Zt={command:"agy",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){return n.trim()},parseResultMeta(n){return {usage:null,model:null}},parseEvent(n,e){return []}};});function tr(n,e,t){if(t){let r=we[t];if(r?.parseEvent)return r.parseEvent(e,n)}for(let r of Object.values(we)){let o=r.parseEvent?.(e,n)??[];if(o.length>0)return o}return []}var we,He=D(()=>{l();Jt();Xt();Gt();Yt();Qt();er();Jt();Xt();Gt();Yt();Qt();er();Ue();we={claude:vt,gemini:_t,copilot:At,codex:Rt,opencode:Pt,antigravity:Zt};});function Xo(n){let e=n.split(`
16
+ `).filter(d=>d.trim()),t=[],r=[],o=[],s=[],i=[],a=null;for(let d of e)try{let c=JSON.parse(d);if(c.type==="assistant"&&Array.isArray(c.message?.content))for(let u of c.message.content)u.type==="text"&&typeof u.text=="string"&&u.text.trim()&&t.push(u.text.trim());if(c.type==="message"&&c.role==="assistant"&&c.delta===!0&&typeof c.content=="string"&&r.push(c.content),c.type==="assistant.message"&&typeof c.data?.content=="string"){let u=c.data.content;u.trim()&&o.push(u.trim());}if(c.type==="item.completed"&&(c.item?.type==="message"||c.item?.type==="agent_message")&&typeof c.item?.text=="string"){let u=c.item.text;u.trim()&&s.push(u.trim());}if(c.type==="text"&&typeof c.part?.text=="string"){let u=c.part.text;u.trim()&&i.push(u.trim());}c.type==="result"&&typeof c.result=="string"&&(a=c.result);}catch{}return t.length>0?t.join(`
17
17
 
18
- `):r.length>0?r.join(""):n.length>0?n.join(`
18
+ `):r.length>0?r.join(""):o.length>0?o.join(`
19
19
 
20
20
  `):s.length>0?s.join(`
21
21
 
22
- `):i.length>0?i.join(""):a||o.trim()}function Zn(o){let e=V(o);return e?{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0}:null}function eo(o,e,t=process.platform){return o==="copilot"&&t==="win32"&&e instanceof _&&e.message.includes('CLI command "copilot" not found')}function wr(o,e,t,r,n,s,i){return new Promise((a,d)=>{let c=n?.timeoutMs??36e5,u=Re({command:o,allowShellFallback:true}),m=Ce(u,e),g=spawn(m.command,m.argv,{env:{...process.env,...n?.env??{}},cwd:n?.cwd,stdio:["pipe","pipe","pipe"],shell:m.shell??false,windowsHide:m.windowsHide});s!==void 0&&g.stdin.write(s),g.stdin.end(),g.pid!==void 0&&n?.onPid?.(g.pid);let p=false,h=false,x=()=>{try{g.kill("SIGKILL");}catch{}},A=setTimeout(()=>{if(!p){h=true;try{g.kill("SIGTERM");}catch{}setTimeout(x,hr).unref();}},c);A.unref();let k="",P="",I="",b="";g.stdout.on("data",D=>{let $=D.toString();k+=$,I+=$;let E=I.split(`
23
- `);I=E.pop()??"";for(let N of E)if(N.trim()&&(n?.onOutput?.(N,"stdout"),i?.extractFailure)){let U=i.extractFailure(N);if(U){p=true,clearTimeout(A);try{g.kill("SIGTERM");}catch{}setTimeout(x,hr).unref(),d(U);return}}}),g.stderr.on("data",D=>{let $=D.toString();P+=$,b+=$;let E=b.split(`
24
- `);b=E.pop()??"";for(let N of E)N.trim()&&n?.onOutput?.(N,"stderr");}),g.on("error",D=>{p=true,clearTimeout(A),D.code==="ENOENT"?d(new _(`CLI command "${o}" not found. Is ${t} installed?`,t)):d(new _(`Spawn error: ${D.message}`,t));}),g.on("close",D=>{if(p)return;p=true,clearTimeout(A),I.trim()&&n?.onOutput?.(I,"stdout"),b.trim()&&n?.onOutput?.(b,"stderr");let $=D??0;if(n?.onExitCode?.($),h&&D!==0)return d(new be(`Total runtime exceeded ${c}ms; process killed.`,t));if($!==0){if(i?.interpretExit){let N=i.interpretExit($,P);if(N){d(N);return}}d(new _(`Process exited with code ${$}: ${P.slice(0,500)}`,t));return}let E=i?i.extractText(k):Qn(k);a({stdout:k,parsed:E});});})}function re(o,e){vr.set(o,e);}function ne(o){let e=o.split("/");if(e.length!==2)throw new _(`Invalid provider format: "${o}". Expected namespace/id (e.g., cli/claude)`,o);let[t,r]=e,n=vr.get(t);if(n)return n(r,o);if(t==="cli"){let s=ie[r];if(!s)throw new _(`Unknown CLI provider id: "${r}". Supported: ${Object.keys(ie).join(", ")}`,o);return new Ct(r,s,o)}throw new _(`Unsupported provider namespace: "${t}". Register a factory with registerProviderFactory('${t}', factory).`,o)}var _,be,hr,X,vr,Ct,Q=M(()=>{l();Ye();ue();Ae();_=class extends Error{constructor(t,r){super(t);this.providerStr=r;this.name="ProviderError";}providerStr},be=class extends _{constructor(e,t){super(e,t),this.name="TotalTimeoutError";}};hr=2e3;X=class extends Error{constructor(t,r){super(`Client tool call required: ${t.toolName}`);this.toolCall=t;this.continuationState=r;}toolCall;continuationState;name="ClientToolCallRequiredError"},vr=new Map;Ct=class{constructor(e,t,r){this.providerId=e;this.adapter=t;this.providerStr=r;}providerId;adapter;providerStr;async execute(e,t){let r=this.composeMessage(e,t),{args:n,stdinMessage:s}=this.adapter.buildArgs(r,t??{},true);t?.onCommand?.(`${this.adapter.command} ${n.join(" ")}`);let{stdout:i,parsed:a}=await this.runProcess(n,t,s);return this.handleResultMeta(i,t),a}async query(e,t){let r=this.composeMessage(e,t),{args:n,stdinMessage:s}=this.adapter.buildArgs(r,t??{},false);t?.onCommand?.(`${this.adapter.command} ${n.join(" ")}`);let{stdout:i,parsed:a}=await this.runProcess(n,t,s);return this.handleResultMeta(i,t),a}composeMessage(e,t){return t?.systemPrompt?`${t.systemPrompt}
22
+ `):i.length>0?i.join(""):a||n.trim()}function Go(n){let e=te(n);return e?{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0}:null}function Yo(n,e,t=process.platform){return n==="copilot"&&t==="win32"&&e instanceof S&&e.message.includes('CLI command "copilot" not found')}function en(n,e,t,r,o,s,i){return new Promise((a,d)=>{let c=o?.timeoutMs??288e5,u=Ve({command:n,allowShellFallback:true}),g=Ke(u,e),h=spawn(g.command,g.argv,{env:{...process.env,...o?.env??{}},cwd:o?.cwd,stdio:["pipe","pipe","pipe"],shell:g.shell??false,windowsHide:g.windowsHide});s!==void 0&&h.stdin.write(s),h.stdin.end(),h.pid!==void 0&&o?.onPid?.(h.pid);let p=false,f=false,x=()=>{try{h.kill("SIGKILL");}catch{}},_=setTimeout(()=>{if(!p){f=true;try{h.kill("SIGTERM");}catch{}setTimeout(x,Zr).unref();}},c);_.unref();let v="",k="",I="",b="";h.stdout.on("data",W=>{let j=W.toString();v+=j,I+=j;let C=I.split(`
23
+ `);I=C.pop()??"";for(let q of C)if(q.trim()&&(o?.onOutput?.(q,"stdout"),i?.extractFailure)){let Y=i.extractFailure(q);if(Y){p=true,clearTimeout(_);try{h.kill("SIGTERM");}catch{}setTimeout(x,Zr).unref(),d(Y);return}}}),h.stderr.on("data",W=>{let j=W.toString();k+=j,b+=j;let C=b.split(`
24
+ `);b=C.pop()??"";for(let q of C)q.trim()&&o?.onOutput?.(q,"stderr");}),h.on("error",W=>{p=true,clearTimeout(_),W.code==="ENOENT"?d(new S(`CLI command "${n}" not found. Is ${t} installed?`,t)):d(new S(`Spawn error: ${W.message}`,t));}),h.on("close",W=>{if(p)return;p=true,clearTimeout(_),I.trim()&&o?.onOutput?.(I,"stdout"),b.trim()&&o?.onOutput?.(b,"stderr");let j=W??0;if(o?.onExitCode?.(j),f&&W!==0)return d(new Xe(`Total runtime exceeded ${c}ms; process killed.`,t));if(j!==0){if(i?.interpretExit){let q=i.interpretExit(j,k);if(q){d(q);return}}d(new S(`Process exited with code ${j}: ${k.slice(0,500)}`,t));return}let C=i?i.extractText(v):Xo(v);a({stdout:v,parsed:C});});})}function pe(n,e){tn.set(n,e);}function ge(n){let e=n.split("/");if(e.length!==2)throw new S(`Invalid provider format: "${n}". Expected namespace/id (e.g., cli/claude)`,n);let[t,r]=e,o=tn.get(t);if(o)return o(r,n);if(t==="cli"){let s=we[r];if(!s)throw new S(`Unknown CLI provider id: "${r}". Supported: ${Object.keys(we).join(", ")}`,n);return new rr(r,s,n)}throw new S(`Unsupported provider namespace: "${t}". Register a factory with registerProviderFactory('${t}', factory).`,n)}var S,Xe,Zr,se,tn,rr,de=D(()=>{l();kt();Re();He();S=class extends Error{constructor(t,r){super(t);this.providerStr=r;this.name="ProviderError";}providerStr},Xe=class extends S{constructor(e,t){super(e,t),this.name="TotalTimeoutError";}};Zr=2e3;se=class extends Error{constructor(t,r){super(`Client tool call required: ${t.toolName}`);this.toolCall=t;this.continuationState=r;}toolCall;continuationState;name="ClientToolCallRequiredError"},tn=new Map;rr=class{constructor(e,t,r){this.providerId=e;this.adapter=t;this.providerStr=r;}providerId;adapter;providerStr;async execute(e,t){let r=this.composeMessage(e,t),{args:o,stdinMessage:s}=this.adapter.buildArgs(r,t??{},true);t?.onCommand?.(`${this.adapter.command} ${o.join(" ")}`);let{stdout:i,parsed:a}=await this.runProcess(o,t,s);return this.handleResultMeta(i,t),a}async query(e,t){let r=this.composeMessage(e,t),{args:o,stdinMessage:s}=this.adapter.buildArgs(r,t??{},false);t?.onCommand?.(`${this.adapter.command} ${o.join(" ")}`);let{stdout:i,parsed:a}=await this.runProcess(o,t,s);return this.handleResultMeta(i,t),a}composeMessage(e,t){return t?.systemPrompt?`${t.systemPrompt}
25
25
 
26
26
  ---
27
27
 
28
- ${e}`:e}async runProcess(e,t,r){try{return await wr(this.adapter.command,e,this.providerStr,this.providerId,t,r,this.adapter)}catch(n){if(eo(this.providerId,n)){let s=e[0]==="copilot"?e:["copilot",...e];return wr("gh",s,this.providerStr,this.providerId,t,r,this.adapter)}throw n}}handleResultMeta(e,t){if(!this.adapter.parseResultMeta){let i=Zn(e);i&&t?.onUsage&&t.onUsage(i);return}let{usage:r,model:n}=this.adapter.parseResultMeta(e);r&&t?.onUsage&&t.onUsage(r);let s=n??(this.providerId==="opencode"?t?.model??null:null);s&&t?.onModel&&t.onModel(s);}};});var Hr,Fr,Ne,Ut=M(()=>{l();Q();Hr=10,Fr=50,Ne=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:n,tool:s}=await import('ai'),i=this.convertTools(r?.tools??[],s),a=this.createModel(r?.model),d=Math.min(r?.maxSteps??this.config.maxSteps??Hr,Fr);try{let c=0,u=await n({model:a,system:r?.systemPrompt??void 0,prompt:e,tools:i,maxSteps:d,...this.config.temperature!==void 0&&{temperature:this.config.temperature},...this.config.maxTokens!==void 0&&{maxTokens:this.config.maxTokens},onStepFinish:g=>{if(c++,!!r?.onOutput){if(g.toolCalls&&g.toolCalls.length>0)for(let p of g.toolCalls)r.onOutput(JSON.stringify({type:"assistant",message:{content:[{type:"tool_use",id:p.toolCallId,name:p.toolName,input:p.args}]}}),"stdout");if(g.toolResults&&g.toolResults.length>0)for(let p of g.toolResults){let h=typeof p.result=="string"?p.result:JSON.stringify(p.result);r.onOutput(JSON.stringify({type:"user",message:{content:[{type:"tool_result",tool_use_id:p.toolCallId,output:h,is_error:!1}]}}),"stdout");}}}}),m=new Set((r?.tools??[]).filter(g=>!g.execute).map(g=>g.name));if(u.finishReason==="tool-calls"&&Array.isArray(u.toolCalls)&&u.toolCalls.length>0){let g=u.toolCalls.filter(p=>m.has(p.toolName));if(g.length>0){let p=g[0];throw new X({toolCallId:p.toolCallId,toolName:p.toolName,args:p.args},{userMessage:e,responseMessages:u.response?.messages??[],toolDefinitions:r?.tools??[],maxSteps:d,systemPrompt:r?.systemPrompt,modelOverride:r?.model})}}if(r?.onUsage&&u.usage){let g={inputTokens:u.usage.promptTokens??0,outputTokens:u.usage.completionTokens??0,cachedInputTokens:0,costUsd:0};r.onUsage(g);}return r?.onModel&&r.onModel(r.model??this.config.model),u.text??""}catch(c){throw c instanceof X?c:c.status===401?new _(`Authentication failed for ${this.config.provider}. Check your API key.`,this.config.provider):c.status===429?new _(`Rate limit exceeded for ${this.config.provider}.`,this.config.provider):new _(`Provider error: ${c.message}`,this.config.provider)}}async continueWithToolResults(e,t,r){let{generateText:n,tool:s}=await import('ai'),i=this.convertTools(e.toolDefinitions,s),a=this.createModel(e.modelOverride),d=Math.min(e.maxSteps??this.config.maxSteps??Hr,Fr),c=[{role:"user",content:e.userMessage},...e.responseMessages,{role:"tool",content:t.map(u=>({type:"tool-result",toolCallId:u.toolCallId,toolName:u.toolName,result:typeof u.result=="string"?u.result:JSON.stringify(u.result)}))}];try{let u=await n({model:a,system:e.systemPrompt??void 0,messages:c,tools:i,maxSteps:d,...this.config.temperature!==void 0&&{temperature:this.config.temperature},...this.config.maxTokens!==void 0&&{maxTokens:this.config.maxTokens}}),m=new Set(e.toolDefinitions.filter(g=>!g.execute).map(g=>g.name));if(u.finishReason==="tool-calls"&&Array.isArray(u.toolCalls)&&u.toolCalls.length>0){let g=u.toolCalls.filter(p=>m.has(p.toolName));if(g.length>0){let p=g[0];throw new X({toolCallId:p.toolCallId,toolName:p.toolName,args:p.args},{userMessage:e.userMessage,responseMessages:[...e.responseMessages,{role:"tool",content:t.map(h=>({type:"tool-result",toolCallId:h.toolCallId,toolName:h.toolName,result:typeof h.result=="string"?h.result:JSON.stringify(h.result)}))},...u.response?.messages??[]],toolDefinitions:e.toolDefinitions,maxSteps:e.maxSteps,systemPrompt:e.systemPrompt,modelOverride:e.modelOverride})}}return r?.onUsage&&u.usage&&r.onUsage({inputTokens:u.usage.promptTokens??0,outputTokens:u.usage.completionTokens??0,cachedInputTokens:0,costUsd:0}),r?.onModel&&r.onModel(e.modelOverride??this.config.model),u.text??""}catch(u){throw u instanceof X?u:new _(`Provider error: ${u.message}`,this.config.provider)}}convertTools(e,t){let{z:r}=B("zod"),n={};for(let s of e){let i=this.jsonSchemaToZod(s.parameters??{},r);s.execute?n[s.name]=t({description:s.description,parameters:i,execute:async a=>s.execute(a)}):n[s.name]=t({description:s.description,parameters:i});}return n}jsonSchemaToZod(e,t){if(!e||!e.properties)return t.object({});let r={},n=e.properties,s=e.required??[];for(let[i,a]of Object.entries(n)){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:n}=this.config,s=e||this.config.model;switch(t){case "api/openrouter":{let{createOpenAI:i}=B("@ai-sdk/openai");return i({apiKey:r||process.env.OPENROUTER_API_KEY,baseURL:n||"https://openrouter.ai/api/v1"})(s)}case "api/openai":{let{createOpenAI:i}=B("@ai-sdk/openai");return i({apiKey:r||process.env.OPENAI_API_KEY,...n&&{baseURL:n}})(s)}case "api/anthropic":{let{createAnthropic:i}=B("@ai-sdk/anthropic");return i({apiKey:r||process.env.ANTHROPIC_API_KEY,...n&&{baseURL:n}})(s)}case "api/google":{let{createGoogleGenerativeAI:i}=B("@ai-sdk/google");return i({apiKey:r||process.env.GOOGLE_API_KEY})(s)}default:throw new _(`Unsupported API provider: ${t}`,t)}}};});var Wr={};Be(Wr,{registerApiProviders:()=>qr});function qr(o){re("api",(e,t)=>{let r=o?.apiKeys?.[e];return new Ne({provider:t,model:"",apiKey:r,maxSteps:o?.defaults?.maxSteps,temperature:o?.defaults?.temperature})});}var Ht=M(()=>{l();Q();Ut();});function Ft(o){let e=o.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 G(o,e){try{let t=JSON.parse(o);if(t!=null&&typeof t=="object"&&typeof t.type=="string"&&qo.has(t.type)){let r=e??new Date().toISOString();return [{...t,timestamp:t.timestamp||r}]}}catch{}return []}var qo,de=M(()=>{l();qo=new Set(["text","tool_use","tool_result","error","agent_call"]);});var se,qt=M(()=>{l();se=class extends Error{constructor(t,r,n){super(t);this.code=r;this.data=n;}code;data;name="AcpProtocolError"};});var zo,Ko,Br,Vr,fe,ot=M(()=>{l();qt();Q();zo=-32e3,Ko=2e3,Br=3e4,Vr=1e4,fe=class{constructor(e){this.options=e;}options;proc=null;sdkConnection=null;disposed=false;stderrBuffer="";collectedStderr="";pendingUpdateCallback=null;authMethods=[];_initResponse=null;get initResponse(){return this._initResponse}async connect(e){if(this.disposed)throw new _("AcpConnection has been disposed","acp");let t=this.options.spawn,r=process.platform==="win32"&&(t.shellOnWindows??true),n=spawn(t.command,t.args,{stdio:["pipe","pipe","pipe"],env:{...process.env,...this.options.env??{}},cwd:this.options.cwd,shell:r,windowsHide:true,detached:process.platform!=="win32"});n.pid!==void 0&&this.options.onPid?.(n.pid),n.stderr.on("data",p=>{let h=p.toString();this.collectedStderr+=h,this.stderrBuffer+=h;let x=this.stderrBuffer.split(`
29
- `);this.stderrBuffer=x.pop()??"";for(let w of x)w.trim()&&this.options.onStderr?.(w);}),this.proc=n;let s=new WritableStream({write:p=>new Promise((h,x)=>{n.stdin.write(p,w=>{w?x(w):h();});}),close:()=>{n.stdin.end();}}),i=new ReadableStream({start:p=>{n.stdout.on("data",h=>{p.enqueue(new Uint8Array(h));}),n.stdout.on("end",()=>{p.close();}),n.stdout.on("error",h=>{p.error(h);});}}),a=ndJsonStream(s,i),d=this,c=new ClientSideConnection(p=>({requestPermission:async h=>{if(d.options.configOptions?.allow_all!==void 0){let x=h.options;if(Array.isArray(x)&&x.length>0)return {outcome:{outcome:"selected",optionId:(x.find(A=>A.kind==="allow_once")??x.find(A=>A.kind?.startsWith("allow_"))??x[0]).optionId}}}return {outcome:{outcome:"cancelled"}}},sessionUpdate:async h=>{d.pendingUpdateCallback?.(h);}}),a);this.sdkConnection=c;let u=new Promise((p,h)=>{n.on("error",x=>{if(x.code==="ENOENT"){let A=t.command==="npx"&&t.args.length>0?`@agentclientprotocol/${t.args[0]}`:t.command;h(new _(`ACP command "${t.command}" not found. Is the ACP adapter installed? Try: npm install -g ${A}`,"acp"));}else h(new _(`ACP spawn error: ${x.message}`,"acp"));});}),m=this.doInitialize(c,e),g=new Promise((p,h)=>{setTimeout(()=>{h(new se(`ACP connect timeout after ${Br}ms. The ACP adapter may not be installed or may require interactive setup.`));},Br).unref();});await Promise.race([m,g,u]);}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 _("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 _("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((n,s)=>{setTimeout(()=>{s(new se(`ACP session/new timeout after ${Vr}ms`));},Vr).unref();});return Promise.race([t,r])}isAuthError(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code===zo}async tryAuthenticate(){if(!this.sdkConnection)throw new _("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(n=>n.type==="env_var");if(r.length>0){let n=r.flatMap(s=>(s.vars??[]).filter(i=>!i.optional&&!process.env[i.name]).map(i=>i.name));throw new se(`ACP authentication required. Missing environment variables: ${n.join(", ")}. Set them in your shell or crewx.yaml env block.`)}throw new se(`ACP authentication required but no supported method found. Available methods: ${t}. CrewX currently supports env_var authentication only.`)}throw new se("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 _("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 _("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 _("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.setSessionConfigOption({sessionId:e,configId:t,value:r});}async prompt(e,t,r,n){if(!this.sdkConnection||!this.proc)throw new _("AcpConnection not connected. Call connect() first.","acp");this.pendingUpdateCallback=r??null;let s=this.sdkConnection,i=this.proc,a=n??36e5,d=false,c=s.prompt({sessionId:e,prompt:t}).finally(()=>{d=true;}),u=new Promise((g,p)=>{setTimeout(()=>{s.cancel({sessionId:e}).catch(()=>{}),p(new be(`ACP prompt timeout after ${a}ms`,"acp"));},a).unref();}),m=new Promise((g,p)=>{let h=(k,P,I)=>{if(d)return;let b=P!=null?`signal=${P}`:`code=${String(k)}`;p(new _(`ACP process terminated unexpectedly (${b}) [${I}]: ${this.collectedStderr.slice(-500)}`,"acp"));},x=(k,P)=>h(k,P,"exit"),w=(k,P)=>h(k,P,"close");i.once("exit",x),i.once("close",w);let A=()=>{i.off("exit",x),i.off("close",w);};c.then(A,A);});try{return await Promise.race([c,u,m])}finally{this.pendingUpdateCallback=null;}}async dispose(){if(this.disposed)return;this.disposed=true,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=n=>{if(t!==void 0&&process.platform!=="win32")try{process.kill(-t,n);}catch{}else try{e.kill(n);}catch{}};await new Promise(n=>{let s=()=>{clearTimeout(i),n();};e.once("close",s),e.once("error",s);try{r("SIGTERM");}catch{s();return}let i=setTimeout(()=>{r("SIGKILL");},Ko);});}get isConnected(){return !this.disposed&&this.sdkConnection!==null&&this.proc!==null}};});function zr(o,e){if(o!=null&&typeof o=="object"){let t=o;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 Jo,$e,Wt=M(()=>{l();de();ot();Jo={read:"Read",edit:"Edit",delete:"Delete",move:"Move",search:"Search",execute:"Bash",think:"Think",fetch:"WebFetch",switch_mode:"SwitchMode"};$e=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:n}=this.adapter.spawn;t?.onCommand?.(`${r} ${n.join(" ")}`);let s=new fe({spawn:this.adapter.spawn,env:t?.env,cwd:t?.cwd,timeoutMs:t?.timeoutMs,onPid:t?.onPid,onStderr:i=>t?.onOutput?.(i,"stderr"),configOptions:t?.configOptions});try{await s.connect(this.adapter.clientInfo);let i=this.adapter.buildSessionParams({cwd:t?.cwd,env:t?.env,model:t?.model,systemPrompt:t?.systemPrompt}),a=await s.newSession(i);await this.applySessionOptions(s,a,t);let d=this.composePrompt(e,t),c=[],u=await s.prompt(a,d,m=>this.handleUpdate(m,t,c),t?.timeoutMs);return this.handleUsage(u,t),c.join("")}finally{await s.dispose().catch(()=>{});}}async applySessionOptions(e,t,r){if(r?.model){let n=this.adapter.buildEffortAction?.(r.effort??"",r.model);n?.type==="set_model"?await e.setModel(t,n.modelId):await e.setModel(t,r.model);}if(r?.mode){let n=this.adapter.resolveMode?.(r.mode)??r.mode;if(n)try{await e.setMode(t,n);}catch(s){console.warn(`[acp] setMode(${n}) failed: ${s instanceof Error?s.message:String(s)}`);}}if(r?.effort){let n=this.adapter.buildEffortAction?.(r.effort,r.model);if(n&&n.type==="set_config_option")try{await e.setConfigOption(t,n.configId,n.value);}catch(s){console.warn(`[acp] setConfigOption(${n.configId}) effort failed: ${s instanceof Error?s.message:String(s)}`);}}if(r?.configOptions)for(let[n,s]of Object.entries(r.configOptions))try{await e.setConfigOption(t,n,s);}catch(i){console.warn(`[acp] setConfigOption(${n}) failed, retrying: ${i instanceof Error?i.message:String(i)}`);try{await new Promise(a=>setTimeout(a,500)),await e.setConfigOption(t,n,s);}catch(a){console.warn(`[acp] setConfigOption(${n}) retry failed: ${a instanceof Error?a.message:String(a)}`);}}}composePrompt(e,t){let r=[];return t?.systemPrompt?.trim()&&(r.push(t.systemPrompt),r.push("---")),t?.context&&(r.push(t.context),r.push("---")),r.push(e),[{type:"text",text:r.join(`
28
+ ${e}`:e}async runProcess(e,t,r){try{return await en(this.adapter.command,e,this.providerStr,this.providerId,t,r,this.adapter)}catch(o){if(Yo(this.providerId,o)){let s=e[0]==="copilot"?e:["copilot",...e];return en("gh",s,this.providerStr,this.providerId,t,r,this.adapter)}throw o}}handleResultMeta(e,t){if(!this.adapter.parseResultMeta){let i=Go(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);}};});var Rn,Pn,ot,hr=D(()=>{l();de();Rn=10,Pn=50,ot=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??Rn,Pn);try{let c=0,u=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:h=>{if(c++,!!r?.onOutput){if(h.toolCalls&&h.toolCalls.length>0)for(let p of h.toolCalls)r.onOutput(JSON.stringify({type:"assistant",message:{content:[{type:"tool_use",id:p.toolCallId,name:p.toolName,input:p.args}]}}),"stdout");if(h.toolResults&&h.toolResults.length>0)for(let p of h.toolResults){let f=typeof p.result=="string"?p.result:JSON.stringify(p.result);r.onOutput(JSON.stringify({type:"user",message:{content:[{type:"tool_result",tool_use_id:p.toolCallId,output:f,is_error:!1}]}}),"stdout");}}}}),g=new Set((r?.tools??[]).filter(h=>!h.execute).map(h=>h.name));if(u.finishReason==="tool-calls"&&Array.isArray(u.toolCalls)&&u.toolCalls.length>0){let h=u.toolCalls.filter(p=>g.has(p.toolName));if(h.length>0){let p=h[0];throw new se({toolCallId:p.toolCallId,toolName:p.toolName,args:p.args},{userMessage:e,responseMessages:u.response?.messages??[],toolDefinitions:r?.tools??[],maxSteps:d,systemPrompt:r?.systemPrompt,modelOverride:r?.model})}}if(r?.onUsage&&u.usage){let h={inputTokens:u.usage.promptTokens??0,outputTokens:u.usage.completionTokens??0,cachedInputTokens:0,costUsd:0};r.onUsage(h);}return r?.onModel&&r.onModel(r.model??this.config.model),u.text??""}catch(c){throw c instanceof se?c:c.status===401?new S(`Authentication failed for ${this.config.provider}. Check your API key.`,this.config.provider):c.status===429?new S(`Rate limit exceeded for ${this.config.provider}.`,this.config.provider):new S(`Provider error: ${c.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??Rn,Pn),c=[{role:"user",content:e.userMessage},...e.responseMessages,{role:"tool",content:t.map(u=>({type:"tool-result",toolCallId:u.toolCallId,toolName:u.toolName,result:typeof u.result=="string"?u.result:JSON.stringify(u.result)}))}];try{let u=await o({model:a,system:e.systemPrompt??void 0,messages:c,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(h=>!h.execute).map(h=>h.name));if(u.finishReason==="tool-calls"&&Array.isArray(u.toolCalls)&&u.toolCalls.length>0){let h=u.toolCalls.filter(p=>g.has(p.toolName));if(h.length>0){let p=h[0];throw new se({toolCallId:p.toolCallId,toolName:p.toolName,args:p.args},{userMessage:e.userMessage,responseMessages:[...e.responseMessages,{role:"tool",content:t.map(f=>({type:"tool-result",toolCallId:f.toolCallId,toolName:f.toolName,result:typeof f.result=="string"?f.result:JSON.stringify(f.result)}))},...u.response?.messages??[]],toolDefinitions:e.toolDefinitions,maxSteps:e.maxSteps,systemPrompt:e.systemPrompt,modelOverride:e.modelOverride})}}return r?.onUsage&&u.usage&&r.onUsage({inputTokens:u.usage.promptTokens??0,outputTokens:u.usage.completionTokens??0,cachedInputTokens:0,costUsd:0}),r?.onModel&&r.onModel(e.modelOverride??this.config.model),u.text??""}catch(u){throw u instanceof se?u:new S(`Provider error: ${u.message}`,this.config.provider)}}convertTools(e,t){let{z:r}=V("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}=V("@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}=V("@ai-sdk/openai");return i({apiKey:r||process.env.OPENAI_API_KEY,...o&&{baseURL:o}})(s)}case "api/anthropic":{let{createAnthropic:i}=V("@ai-sdk/anthropic");return i({apiKey:r||process.env.ANTHROPIC_API_KEY,...o&&{baseURL:o}})(s)}case "api/google":{let{createGoogleGenerativeAI:i}=V("@ai-sdk/google");return i({apiKey:r||process.env.GOOGLE_API_KEY})(s)}default:throw new S(`Unsupported API provider: ${t}`,t)}}};});var Tn={};gt(Tn,{registerApiProviders:()=>Cn});function Cn(n){pe("api",(e,t)=>{let r=n?.apiKeys?.[e];return new ot({provider:t,model:"",apiKey:r,maxSteps:n?.defaults?.maxSteps,temperature:n?.defaults?.temperature})});}var wr=D(()=>{l();de();hr();});function xr(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 ie(n,e){try{let t=JSON.parse(n);if(t!=null&&typeof t=="object"&&typeof t.type=="string"&&Fs.has(t.type)){let r=e??new Date().toISOString();return [{...t,timestamp:t.timestamp||r}]}}catch{}return []}var Fs,ke=D(()=>{l();Fs=new Set(["text","tool_use","tool_result","error","agent_call"]);});var fe,kr=D(()=>{l();fe=class extends Error{constructor(t,r,o){super(t);this.code=r;this.data=o;}code;data;name="AcpProtocolError"};});var Ws,zs,bn,En,Vs,Ee,Tt=D(()=>{l();kr();de();Ws=-32e3,zs=2e3,bn=3e4,En=1e4,Vs=8*36e5,Ee=class{constructor(e){this.options=e;}options;proc=null;sdkConnection=null;disposed=false;stderrBuffer="";collectedStderr="";pendingUpdateCallback=null;authMethods=[];_initResponse=null;get initResponse(){return this._initResponse}async connect(e){if(this.disposed)throw new S("AcpConnection has been disposed","acp");let t=this.options.spawn,r=process.platform==="win32"&&(t.shellOnWindows??true),o=spawn(t.command,t.args,{stdio:["pipe","pipe","pipe"],env:{...process.env,...this.options.env??{}},cwd:this.options.cwd,shell:r,windowsHide:true,detached:process.platform!=="win32"});o.pid!==void 0&&this.options.onPid?.(o.pid),o.stderr.on("data",p=>{let f=p.toString();this.collectedStderr+=f,this.stderrBuffer+=f;let x=this.stderrBuffer.split(`
29
+ `);this.stderrBuffer=x.pop()??"";for(let R of x)R.trim()&&this.options.onStderr?.(R);}),this.proc=o;let s=new WritableStream({write:p=>new Promise((f,x)=>{o.stdin.write(p,R=>{R?x(R):f();});}),close:()=>{o.stdin.end();}}),i=new ReadableStream({start:p=>{o.stdout.on("data",f=>{p.enqueue(new Uint8Array(f));}),o.stdout.on("end",()=>{p.close();}),o.stdout.on("error",f=>{p.error(f);});}}),a=ndJsonStream(s,i),d=this,c=new ClientSideConnection(p=>({requestPermission:async f=>{if(d.options.configOptions?.allow_all!==void 0){let x=f.options;if(Array.isArray(x)&&x.length>0)return {outcome:{outcome:"selected",optionId:(x.find(_=>_.kind==="allow_once")??x.find(_=>_.kind?.startsWith("allow_"))??x[0]).optionId}}}return {outcome:{outcome:"cancelled"}}},sessionUpdate:async f=>{d.pendingUpdateCallback?.(f);}}),a);this.sdkConnection=c;let u=new Promise((p,f)=>{o.on("error",x=>{if(x.code==="ENOENT"){let _=t.command==="npx"&&t.args.length>0?`@agentclientprotocol/${t.args[0]}`:t.command;f(new S(`ACP command "${t.command}" not found. Is the ACP adapter installed? Try: npm install -g ${_}`,"acp"));}else f(new S(`ACP spawn error: ${x.message}`,"acp"));});}),g=this.doInitialize(c,e),h=new Promise((p,f)=>{setTimeout(()=>{f(new fe(`ACP connect timeout after ${bn}ms. The ACP adapter may not be installed or may require interactive setup.`));},bn).unref();});await Promise.race([g,h,u]);}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 S("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 S("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 fe(`ACP session/new timeout after ${En}ms`));},En).unref();});return Promise.race([t,r])}isAuthError(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code===Ws}async tryAuthenticate(){if(!this.sdkConnection)throw new S("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 fe(`ACP authentication required. Missing environment variables: ${o.join(", ")}. Set them in your shell or crewx.yaml env block.`)}throw new fe(`ACP authentication required but no supported method found. Available methods: ${t}. CrewX currently supports env_var authentication only.`)}throw new fe("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 S("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 S("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 S("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 S("AcpConnection not connected. Call connect() first.","acp");this.pendingUpdateCallback=r??null;let s=this.sdkConnection,i=this.proc,a=o??Vs,d=false,c=s.prompt({sessionId:e,prompt:t}).finally(()=>{d=true;}),u=new Promise((h,p)=>{setTimeout(()=>{s.cancel({sessionId:e}).catch(()=>{}),p(new Xe(`ACP prompt timeout after ${a}ms`,"acp"));},a).unref();}),g=new Promise((h,p)=>{let f=(v,k,I)=>{if(d)return;let b=k!=null?`signal=${k}`:`code=${String(v)}`;p(new S(`ACP process terminated unexpectedly (${b}) [${I}]: ${this.collectedStderr.slice(-500)}`,"acp"));},x=(v,k)=>f(v,k,"exit"),R=(v,k)=>f(v,k,"close");i.once("exit",x),i.once("close",R);let _=()=>{i.off("exit",x),i.off("close",R);};c.then(_,_);});try{return await Promise.race([c,u,g])}finally{this.pendingUpdateCallback=null;}}async dispose(){if(this.disposed)return;this.disposed=true,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");},zs);});}get isConnected(){return !this.disposed&&this.sdkConnection!==null&&this.proc!==null}};});function Sn(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 Ks,st,vr=D(()=>{l();ke();Tt();Ks={read:"Read",edit:"Edit",delete:"Delete",move:"Move",search:"Search",execute:"Bash",think:"Think",fetch:"WebFetch",switch_mode:"SwitchMode"};st=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 Ee({spawn:this.adapter.spawn,env:i,cwd:t?.cwd,timeoutMs:t?.timeoutMs,onPid:t?.onPid,onStderr:d=>t?.onOutput?.(d,"stderr"),configOptions:t?.configOptions});try{await a.connect(this.adapter.clientInfo);let d=this.adapter.buildSessionParams({cwd:t?.cwd,env:t?.env,model:t?.model,systemPrompt:t?.systemPrompt}),c=await a.newSession(d);await this.applySessionOptions(a,c,t);let u=this.composePrompt(e,t),g=[],h=await a.prompt(c,u,p=>this.handleUpdate(p,t,g),t?.timeoutMs);return this.handleUsage(h,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(`
30
30
 
31
- `)}]}handleUpdate(e,t,r){let n=e.update;if(n.sessionUpdate==="agent_message_chunk"){let s=null;this.adapter.extractTextFromUpdate?s=this.adapter.extractTextFromUpdate(e):s=Ft(e),s!==null&&(r.push(s),t?.onOutput?.(s,"stdout"));}else if(n.sessionUpdate==="tool_call"){let s=new Date().toISOString(),i=n,a={title:i.title??"",kind:i.kind,rawInput:i.rawInput,rawOutput:i.rawOutput,locations:i.locations,_meta:i._meta},d=this.resolveToolCall(a),c={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:d.toolName,toolInput:d.toolInput};t?.onTaskLog?.([c]);}else if(n.sessionUpdate==="tool_call_update"){let s=new Date().toISOString(),i=n;if(i.status==="completed"||i.status==="failed"){let d=this.extractResultPreview(i.rawOutput),c={timestamp:s,type:"tool_result",toolUseId:i.toolCallId,resultPreview:d,isError:i.status==="failed"};t?.onTaskLog?.([c]);}else if(i.rawInput!=null&&typeof i.rawInput=="object"&&Object.keys(i.rawInput).length>0){let d={title:i.title??"",kind:i.kind,rawInput:i.rawInput,rawOutput:i.rawOutput,locations:i.locations,_meta:i._meta},c=this.resolveToolCall(d),u={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:c.toolName,toolInput:c.toolInput};t?.onTaskLog?.([u]);}}else n.sessionUpdate;}resolveToolCall(e){let t=e._meta;if(t?.claudeCode?.toolName)return {toolName:t.claudeCode.toolName,toolInput:zr(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=Jo[e.kind??""]??e.title??"unknown",n=zr(e.rawInput,e.locations)??(e.title||void 0);return {toolName:r,toolInput:n}}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 n=this.adapter.extractUsage(e);if(n){t.onUsage(n);return}}let r=e.usage;r&&t.onUsage({inputTokens:r.inputTokens??0,outputTokens:r.outputTokens??0,cachedInputTokens:r.cachedReadTokens??0,costUsd:0});}};});var st,Bt=M(()=>{l();de();st={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(o){return {cwd:o.cwd??process.cwd(),mcpServers:[]}},extractUsage(o){let e=o.usage;return e?{inputTokens:e.inputTokens??0,outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"bypassPermissions",buildEffortAction(o){return o?{type:"set_config_option",configId:"effort",value:o}:null},resolveMode(o){return {yolo:"bypassPermissions"}[o]??o},parseEvent:G};});var it,Vt=M(()=>{l();de();it={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(o){return {cwd:o.cwd??process.cwd(),mcpServers:[]}},extractUsage(o){let e=o.usage;return e?{inputTokens:e.inputTokens??0,outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"agent-full-access",buildEffortAction(o,e){if(!e)return null;let t=e.match(/^(.+?)\[([^\]]+)\]$/),r=t?t[1]:e,n=t?t[2]:void 0;return {type:"set_model",modelId:`${r}[${o||n||"medium"}]`}},resolveMode(o){return {yolo:"agent-full-access",default:"agent",plan:"read-only"}[o]??o},parseEvent:G};});var at,zt=M(()=>{l();de();at={spawn:{command:"gemini",args:["--acp","--skip-trust"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Gemini"},buildSessionParams(o){return {cwd:o.cwd??process.cwd(),mcpServers:[]}},yoloModeId:"yolo",buildEffortAction(o){return null},resolveMode(o){return {acceptEdits:"autoEdit"}[o]??o},parseEvent:G};});var Pe,dt,Kt=M(()=>{l();de();Pe="https://agentclientprotocol.com/protocol/session-modes",dt={spawn:{command:"copilot",args:["--acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"GitHub Copilot"},buildSessionParams(o){return {cwd:o.cwd?resolve(o.cwd):process.cwd(),mcpServers:[]}},yoloModeId:`${Pe}#autopilot`,buildEffortAction(o){return o?{type:"set_config_option",configId:"reasoning_effort",value:o}:null},resolveMode(o){return o.startsWith("https://")?o:{yolo:`${Pe}#autopilot`,default:`${Pe}#agent`,agent:`${Pe}#agent`,plan:`${Pe}#plan`,autopilot:`${Pe}#autopilot`}[o]??null},parseEvent:G};});var lt,Jt=M(()=>{l();de();lt={spawn:{command:"opencode",args:["acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"OpenCode"},buildSessionParams(o){return {cwd:o.cwd??process.cwd(),mcpServers:[]}},yoloModeId:void 0,buildEffortAction(o){return null},resolveMode(o){let e={default:"build"};return o==="yolo"?null:e[o]??o},parseEvent:G};});var ye,ct=M(()=>{l();Bt();Vt();zt();Kt();Jt();Bt();Vt();zt();Kt();Jt();ye={claude:st,codex:it,gemini:at,copilot:dt,opencode:lt};});var Jr={};Be(Jr,{registerAcpProviders:()=>Kr});function Kr(o){if(o){re("acp",o);return}re("acp",(e,t)=>{let r=ye[e];if(!r)throw new _(`Unknown ACP provider id: "${e}". Supported: ${Object.keys(ye).join(", ")}`,t);return new $e(e,r,t)});}var Xt=M(()=>{l();Q();Wt();ct();Q();});function Go(o){if(!o)return o;let e=o.trim().replace(/\/+$/,"");return e.toLowerCase().endsWith("/mcp")?e.slice(0,-4):e}var De,Gt=M(()=>{l();De=class{endpoint;headers;timeoutMs;constructor(e){let t=Go(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 n=await fetch(this.endpoint,{method:"POST",headers:this.headers,body:JSON.stringify(e),signal:t.signal});if(clearTimeout(r),!n.ok){let a=await n.text();throw new Error(`HTTP ${n.status}: ${n.statusText}${a?` - ${a}`:""}`)}let s=n.headers.get("content-type");if(s?.includes("application/json"))return await n.json();let i=await n.text();return {jsonrpc:"2.0",id:e.id,error:{code:-32600,message:`Unexpected response content-type: ${s}`,data:i}}}catch(n){throw clearTimeout(r),n instanceof Error&&n.name==="AbortError"?new Error(`MCP-HTTP request timeout after ${this.timeoutMs}ms to ${this.endpoint}`):n}}async close(){}};});var Le,Yt=M(()=>{l();Gt();Le=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 De({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),n=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,n,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),n=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,n,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 n=this.transports.get(e);if(!n)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 n.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,n=typeof r=="string"?r:JSON.stringify(r??e,null,2);return {...t,content:[{type:"text",text:n}]}}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 Gr={};Be(Gr,{RemoteProviderRuntime:()=>je,createRemoteProviderFactory:()=>Xr,resolveFileRemoteAgent:()=>os});function rs(o){let e=readFileSync(o,"utf-8"),t=load(e);return {agents:Array.isArray(t?.agents)?t.agents:void 0}}function ns(o){let e=Array.isArray(o.provider)?o.provider[0]:o.provider;return e||(Array.isArray(o.inline?.provider)?o.inline.provider[0]:o.inline?.provider)}function os(o,e=rs,t=existsSync){let r=o.location.replace("file://","");if(!t(r))throw new Error(`Remote config file not found: ${r}`);if(!o.external_agent_id)throw new Error(`external_agent_id is required for file:// remote provider "${o.id}"`);let s=e(r).agents?.find(d=>d.id===o.external_agent_id);if(!s)throw new Error(`Agent "${o.external_agent_id}" not found in ${r}`);let i=ns(s);if(!i)throw new Error(`Agent "${o.external_agent_id}" in ${r} has no provider configured`);if(i.startsWith("remote/"))throw new Error(`Chained remotes not allowed: ${o.id} \u2192 ${i}`);let a=resolve(dirname(r),s.working_directory??".");return {agent:{...s,working_directory:a},provider:i}}function Xr(o,e=ne){return (t,r)=>{let n=o.get(t);if(!n)throw new Error(`Remote provider "${t}" not found. Available: ${Array.from(o.keys()).join(", ")||"(none)"}`);if(n.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 je(t,n,e)}}function ss(o,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??o}}var je,Qt=M(()=>{l();Q();Yt();je=class{manager;agentId;constructor(e,t,r=ne){this.agentId=t.external_agent_id??e,this.manager=new Le;let n=ss(e,t);this.manager.loadConfig(this.agentId,n);}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(n=>n.text).join(`
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(n=>n.text).join(`
34
- `)}};});var en={};Be(en,{PluginProviderRuntime:()=>Ue,createPluginProviderFactory:()=>Zr});function Zr(o){return (e,t)=>{let r=o.get(e);if(!r)throw new _(`Plugin provider "${e}" not found. Available: ${Array.from(o.keys()).join(", ")||"(none)"}`,`plugin/${e}`);return new Ue(e,r)}}function Yr(o,e,t,r){let n=o.map(s=>s.replace(/\{model\}/g,e));return r&&n.push(t),n}function as(o){if(!o||typeof o!="string")throw new Error("Plugin provider requires a cli_command")}function Qr(o){if(!Array.isArray(o))throw new Error("CLI arguments must be an array");for(let e of o)if(typeof e!="string")throw new Error("Each CLI argument must be a string")}function ds(o){for(let{pattern:e}of o)if(typeof e!="string")throw new Error("Error pattern must be a string")}function ls(o){for(let[e,t]of Object.entries(o))if(typeof e!="string"||typeof t!="string")throw new Error("env entries must be string key/value pairs")}var Ue,Zt=M(()=>{l();Q();Ye();Ue=class{constructor(e,t){this.config=t;this.providerStr=`plugin/${e}`,as(t.cli_command),Qr(t.query_args),Qr(t.execute_args),t.error_patterns&&ds(t.error_patterns),t.env&&ls(t.env);}config;providerStr;async query(e,t){let r=t?.model??this.config.default_model??"default",n=Yr(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} ${n.join(" ")}`);let i=this.config.timeout?.query??6e5;return this.runProcess(n,t,s,i)}async execute(e,t){let r=t?.model??this.config.default_model??"default",n=Yr(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} ${n.join(" ")}`);let i=this.config.timeout?.execute??6e5;return this.runProcess(n,t,s,i)}runProcess(e,t,r,n){return new Promise((s,i)=>{let a={...process.env,...this.config.env??{}},d=Re({command:this.config.cli_command,allowShellFallback:true}),c=Ce(d,e),u=spawn(c.command,c.argv,{env:a,shell:c.shell??false,stdio:["pipe","pipe","pipe"],windowsHide:c.windowsHide});r!==void 0&&u.stdin.write(r),u.stdin.end(),u.pid!==void 0&&t?.onPid?.(u.pid);let m="",g="",p="",h="";u.stdout.on("data",w=>{let A=w.toString();m+=A,p+=A;let k=p.split(`
35
- `);p=k.pop()??"";for(let P of k)P.trim()&&t?.onOutput?.(P,"stdout");}),u.stderr.on("data",w=>{let A=w.toString();g+=A,h+=A;let k=h.split(`
36
- `);h=k.pop()??"";for(let P of k)P.trim()&&t?.onOutput?.(P,"stderr");});let x=setTimeout(()=>{u.kill("SIGTERM"),i(new _(`Plugin provider "${this.providerStr}" timed out after ${n}ms`,this.providerStr));},n);u.on("error",w=>{if(clearTimeout(x),w.code==="ENOENT"){let A=this.config.not_installed_message??`CLI command "${this.config.cli_command}" not found. Is ${this.config.id} installed?`;i(new _(A,this.providerStr));}else i(new _(`Spawn error: ${w.message}`,this.providerStr));}),u.on("close",w=>{clearTimeout(x),p.trim()&&t?.onOutput?.(p,"stdout"),h.trim()&&t?.onOutput?.(h,"stderr");let A=w??0;if(t?.onExitCode?.(A),this.config.error_patterns){let k=g||m;for(let P of this.config.error_patterns)if(k.includes(P.pattern)){i(new _(P.message,this.providerStr));return}}if(w!==0){i(new _(`Process exited with code ${w}: ${g.slice(0,500)}`,this.providerStr));return}s(m.trim());});})}};});l();l();l();function Sn(o){let e=n=>n.replace(/[.+^${}()|[\]\\]/g,"\\$&"),r=o.split("/").map(n=>n==="**"?".*":n.split("*").map(e).join("[^/]*"));return new RegExp(`^${r.join("\\/")}$`)}function Y(o,e){try{return Sn(e).test(o)}catch{return false}}l();l();var En=z$1.object({model:z$1.string().optional(),system_prompt:z$1.string().optional(),prompt:z$1.string().optional(),layout:z$1.union([z$1.string(),z$1.object({id:z$1.string(),props:z$1.record(z$1.unknown()).optional()}),z$1.object({props:z$1.record(z$1.unknown())}),z$1.object({template:z$1.string()})]).optional()}).catchall(z$1.unknown()),gr=z$1.object({include:z$1.array(z$1.string()).optional()}).optional(),_n=z$1.object({id:z$1.string(),name:z$1.string().optional(),role:z$1.string().optional(),team:z$1.string().optional(),provider:z$1.union([z$1.string(),z$1.array(z$1.string())]),working_directory:z$1.string().optional(),description:z$1.string().optional(),tags:z$1.array(z$1.string()).optional(),inline:En.optional(),skills:gr}).catchall(z$1.unknown()),mr=z$1.object({agents:z$1.array(_n).optional(),hooks:z$1.array(z$1.unknown()).optional(),settings:z$1.record(z$1.unknown()).optional(),skills:z$1.unknown().optional(),layouts:z$1.record(z$1.unknown()).optional(),documents:z$1.record(z$1.unknown()).optional()}).catchall(z$1.unknown());var le=class extends Error{constructor(t,r){super(t);this.cause=r;this.name="ConfigLoadError";}cause};function Ve(o){if(!o||typeof o!="string"||!o.trim())throw new le("YAML content must be a non-empty string");let e;try{e=load(o);}catch(n){throw new le(`YAML parse error: ${n.message}`,n)}let t=Mn(e),r=mr.safeParse(t);if(!r.success)throw new le(`Config validation error: ${r.error.message}`);return r.data}function ze(o){let e;try{e=readFileSync(o,"utf-8");}catch(t){throw new le(`Cannot read file: ${o}`,t)}return Ve(e)}function Mn(o){if(!o||typeof o!="object")return {agents:[]};let e=o,t;if(e.agents&&typeof e.agents=="object"&&!Array.isArray(e.agents)){let n=e.agents;t=Object.entries(n).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(n=>{if(n.provider===void 0&&n.inline&&typeof n.inline=="object"){let s=n.inline;if(s.provider!==void 0)return {...n,provider:s.provider}}return n});return {...e,agents:r}}l();var ce=join("templates","agents");function Dn(){try{let e=(typeof B=="function"?B:createRequire(typeof y<"u"?y:process.cwd()+"/")).resolve("@crewx/sdk/package.json");return dirname(e)}catch{return null}}function we(o){if(o&&existsSync(o))return o;let e=process.env.CREWX_SDK_TEMPLATES_PATH;if(e&&existsSync(e))return e;let t=Dn();if(t){let n=join(t,ce);if(existsSync(n))return n}let r=[join(f,"..",ce),join(f,"..","..",ce),join(f,"..","..","..",ce),join(process.cwd(),"packages","sdk",ce),join(process.cwd(),ce)];for(let n of r)if(existsSync(n))return n;throw new Error(`[@crewx/sdk] Templates directory not found.
37
- `+(t?` package anchor: ${join(t,ce)}
31
+ `)}]}handleUpdate(e,t,r){let o=e.update;if(o.sessionUpdate==="agent_message_chunk"){let s=null;this.adapter.extractTextFromUpdate?s=this.adapter.extractTextFromUpdate(e):s=xr(e),s!==null&&(r.push(s),t?.onOutput?.(s,"stdout"));}else if(o.sessionUpdate==="tool_call"){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),c={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:d.toolName,toolInput:d.toolInput};t?.onTaskLog?.([c]);}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),c={timestamp:s,type:"tool_result",toolUseId:i.toolCallId,resultPreview:d,isError:i.status==="failed"};t?.onTaskLog?.([c]);}else if(i.rawInput!=null&&typeof i.rawInput=="object"&&Object.keys(i.rawInput).length>0){let d={title:i.title??"",kind:i.kind,rawInput:i.rawInput,rawOutput:i.rawOutput,locations:i.locations,_meta:i._meta},c=this.resolveToolCall(d),u={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:c.toolName,toolInput:c.toolInput};t?.onTaskLog?.([u]);}}else o.sessionUpdate;}resolveToolCall(e){let t=e._meta;if(t?.claudeCode?.toolName)return {toolName:t.claudeCode.toolName,toolInput:Sn(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=Ks[e.kind??""]??e.title??"unknown",o=Sn(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});}};});var In,bt,Et=D(()=>{l();ke();In=[{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"}],bt={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,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:ie};});var St,_r=D(()=>{l();ke();St={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,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:ie};});var It,Ar=D(()=>{l();ke();It={spawn:{command:"gemini",args:["--acp","--skip-trust"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Gemini"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},yoloModeId:"yolo",buildEffortAction(n){return null},resolveMode(n){return {acceptEdits:"autoEdit"}[n]??n},parseEvent:ie};});var qe,Ot,Rr=D(()=>{l();ke();qe="https://agentclientprotocol.com/protocol/session-modes",Ot={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?resolve(n.cwd):process.cwd(),mcpServers:[]}},yoloModeId:`${qe}#autopilot`,buildEffortAction(n){return n?{type:"set_config_option",configId:"reasoning_effort",value:n}:null},resolveMode(n){return n.startsWith("https://")?n:{yolo:`${qe}#autopilot`,default:`${qe}#agent`,agent:`${qe}#agent`,plan:`${qe}#plan`,autopilot:`${qe}#autopilot`}[n]??null},parseEvent:ie};});var Mt,Pr=D(()=>{l();ke();Mt={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:ie};});var Se,Nt=D(()=>{l();Et();_r();Ar();Rr();Pr();Et();_r();Ar();Rr();Pr();Se={claude:bt,codex:St,gemini:It,copilot:Ot,opencode:Mt};});var Mn={};gt(Mn,{registerAcpProviders:()=>On});function On(n){if(n){pe("acp",n);return}pe("acp",(e,t)=>{let r=Se[e];if(!r)throw new S(`Unknown ACP provider id: "${e}". Supported: ${Object.keys(Se).join(", ")}`,t);return new st(e,r,t)});}var Cr=D(()=>{l();de();vr();Nt();de();});function Xs(n){if(!n)return n;let e=n.trim().replace(/\/+$/,"");return e.toLowerCase().endsWith("/mcp")?e.slice(0,-4):e}var it,Tr=D(()=>{l();it=class{endpoint;headers;timeoutMs;constructor(e){let t=Xs(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(){}};});var at,br=D(()=>{l();Tr();at=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 it({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 Dn={};gt(Dn,{RemoteProviderRuntime:()=>dt,createRemoteProviderFactory:()=>Nn,resolveFileRemoteAgent:()=>ni});function ti(n){let e=readFileSync(n,"utf-8"),t=load(e);return {agents:Array.isArray(t?.agents)?t.agents:void 0}}function ri(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 ni(n,e=ti,t=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=ri(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=resolve(dirname(r),s.working_directory??".");return {agent:{...s,working_directory:a},provider:i}}function Nn(n,e=ge){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 dt(t,o,e)}}function oi(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}}var dt,Er=D(()=>{l();de();br();dt=class{manager;agentId;constructor(e,t,r=ge){this.agentId=t.external_agent_id??e,this.manager=new at;let o=oi(e,t);this.manager.loadConfig(this.agentId,o);}async query(e,t){return (await this.manager.query(this.agentId,{agentId:this.agentId,query:e,model:t?.model,context:t?.context??t?.systemPrompt})).content.map(o=>o.text).join(`
33
+ `)}async execute(e,t){return (await this.manager.execute(this.agentId,{agentId:this.agentId,task:e,model:t?.model,context:t?.context??t?.systemPrompt})).content.map(o=>o.text).join(`
34
+ `)}};});var Un={};gt(Un,{PluginProviderRuntime:()=>lt,createPluginProviderFactory:()=>jn});function jn(n){return (e,t)=>{let r=n.get(e);if(!r)throw new S(`Plugin provider "${e}" not found. Available: ${Array.from(n.keys()).join(", ")||"(none)"}`,`plugin/${e}`);return new lt(e,r)}}function $n(n,e,t,r){let o=n.map(s=>s.replace(/\{model\}/g,e));return r&&o.push(t),o}function ii(n){if(!n||typeof n!="string")throw new Error("Plugin provider requires a cli_command")}function Ln(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 ai(n){for(let{pattern:e}of n)if(typeof e!="string")throw new Error("Error pattern must be a string")}function di(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")}var lt,Sr=D(()=>{l();de();kt();lt=class{constructor(e,t){this.config=t;this.providerStr=`plugin/${e}`,ii(t.cli_command),Ln(t.query_args),Ln(t.execute_args),t.error_patterns&&ai(t.error_patterns),t.env&&di(t.env);}config;providerStr;async query(e,t){let r=t?.model??this.config.default_model??"default",o=$n(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=$n(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=Ve({command:this.config.cli_command,allowShellFallback:true}),c=Ke(d,e),u=spawn(c.command,c.argv,{env:a,shell:c.shell??false,stdio:["pipe","pipe","pipe"],windowsHide:c.windowsHide});r!==void 0&&u.stdin.write(r),u.stdin.end(),u.pid!==void 0&&t?.onPid?.(u.pid);let g="",h="",p="",f="";u.stdout.on("data",R=>{let _=R.toString();g+=_,p+=_;let v=p.split(`
35
+ `);p=v.pop()??"";for(let k of v)k.trim()&&t?.onOutput?.(k,"stdout");}),u.stderr.on("data",R=>{let _=R.toString();h+=_,f+=_;let v=f.split(`
36
+ `);f=v.pop()??"";for(let k of v)k.trim()&&t?.onOutput?.(k,"stderr");});let x=setTimeout(()=>{u.kill("SIGTERM"),i(new S(`Plugin provider "${this.providerStr}" timed out after ${o}ms`,this.providerStr));},o);u.on("error",R=>{if(clearTimeout(x),R.code==="ENOENT"){let _=this.config.not_installed_message??`CLI command "${this.config.cli_command}" not found. Is ${this.config.id} installed?`;i(new S(_,this.providerStr));}else i(new S(`Spawn error: ${R.message}`,this.providerStr));}),u.on("close",R=>{clearTimeout(x),p.trim()&&t?.onOutput?.(p,"stdout"),f.trim()&&t?.onOutput?.(f,"stderr");let _=R??0;if(t?.onExitCode?.(_),this.config.error_patterns){let v=h||g;for(let k of this.config.error_patterns)if(v.includes(k.pattern)){i(new S(k.message,this.providerStr));return}}if(R!==0){i(new S(`Process exited with code ${R}: ${h.slice(0,500)}`,this.providerStr));return}s(g.trim());});})}};});l();l();l();function Po(n){let e=o=>o.replace(/[.+^${}()|[\]\\]/g,"\\$&"),r=n.split("/").map(o=>o==="**"?".*":o.split("*").map(e).join("[^/]*"));return new RegExp(`^${r.join("\\/")}$`)}function ae(n,e){try{return Po(e).test(n)}catch{return false}}l();l();var Co=z$1.object({model:z$1.string().optional(),system_prompt:z$1.string().optional(),prompt:z$1.string().optional(),layout:z$1.union([z$1.string(),z$1.object({id:z$1.string(),props:z$1.record(z$1.unknown()).optional()}),z$1.object({props:z$1.record(z$1.unknown())}),z$1.object({template:z$1.string()})]).optional()}).catchall(z$1.unknown()),Xr=z$1.object({include:z$1.array(z$1.string()).optional()}).optional(),To=z$1.object({id:z$1.string(),name:z$1.string().optional(),role:z$1.string().optional(),team:z$1.string().optional(),provider:z$1.union([z$1.string(),z$1.array(z$1.string())]),working_directory:z$1.string().optional(),description:z$1.string().optional(),tags:z$1.array(z$1.string()).optional(),inline:Co.optional(),skills:Xr}).catchall(z$1.unknown()),Gr=z$1.object({agents:z$1.array(To).optional(),hooks:z$1.array(z$1.unknown()).optional(),settings:z$1.record(z$1.unknown()).optional(),skills:z$1.unknown().optional(),layouts:z$1.record(z$1.unknown()).optional(),documents:z$1.record(z$1.unknown()).optional()}).catchall(z$1.unknown());var _e=class extends Error{constructor(t,r){super(t);this.cause=r;this.name="ConfigLoadError";}cause};function mt(n){if(!n||typeof n!="string"||!n.trim())throw new _e("YAML content must be a non-empty string");let e;try{e=load(n);}catch(o){throw new _e(`YAML parse error: ${o.message}`,o)}let t=So(e),r=Gr.safeParse(t);if(!r.success)throw new _e(`Config validation error: ${r.error.message}`);return r.data}function ft(n){let e;try{e=readFileSync(n,"utf-8");}catch(t){throw new _e(`Cannot read file: ${n}`,t)}return mt(e)}function So(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}}l();var Ae=join("templates","agents");function Mo(){try{let e=(typeof V=="function"?V:createRequire(typeof y<"u"?y:process.cwd()+"/")).resolve("@crewx/sdk/package.json");return dirname(e)}catch{return null}}function Le(n){if(n&&existsSync(n))return n;let e=process.env.CREWX_SDK_TEMPLATES_PATH;if(e&&existsSync(e))return e;let t=Mo();if(t){let o=join(t,Ae);if(existsSync(o))return o}let r=[join(m,"..",Ae),join(m,"..","..",Ae),join(m,"..","..","..",Ae),join(process.cwd(),"packages","sdk",Ae),join(process.cwd(),Ae)];for(let o of r)if(existsSync(o))return o;throw new Error(`[@crewx/sdk] Templates directory not found.
37
+ `+(t?` package anchor: ${join(t,Ae)}
38
38
  `:` package anchor: (unresolved)
39
- `)+r.map(n=>` candidate: ${n}`).join(`
39
+ `)+r.map(o=>` candidate: ${o}`).join(`
40
40
  `)+`
41
- Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function ft(){let o=we();return {yamlPath:join(o,"default.yaml"),dir:o}}l();var te=class extends Error{constructor(e,t){let r=t.length>0?` Available: ${t.join(", ")}`:"";super(`Agent not found: "${e}".${r}`),this.name="AgentNotFoundError";}},Ln={claude:{id:"claude",provider:"cli/claude"},gemini:{id:"gemini",provider:"cli/gemini"},copilot:{id:"copilot",provider:"cli/copilot"},codex:{id:"codex",provider:"cli/codex"}};function Je(o,e){let t=o.startsWith("@")?o.slice(1):o,r=e.find(s=>s.id===t);if(r)return r;let n=Ln[t];if(n)return n;throw new te(o,e.map(s=>s.id))}Q();l();function xr(o,e){if(o===void 0||o==="")return e;let t=parseInt(o,10);return Number.isNaN(t)?e:t}function kr(o=process.env){return {queryMs:xr(o.CREWX_TIMEOUT_QUERY,36e5),executeMs:xr(o.CREWX_TIMEOUT_EXECUTE,36e5)}}l();l();var ro=[/^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],no=/[;|&`$(){}!><\n\r]/,oo=2,so=["*","**","*:*","* *","**/*"];function io(){let o={};for(let[e,t]of Object.entries(process.env))t!==void 0&&(ro.some(r=>r.test(e))||(o[e]=t));return o}function ao(o){if(no.test(o))throw new Error(`exec blocked: shell metacharacter detected in "${o}"`)}function lo(o){return /^npx\s+@crewx\/[\w-]+/.test(o)}function co(o){if(so.includes(o.trim()))throw new Error(`exec config error: overly broad pattern "${o}" is not allowed`);if(!/^[\w./@-]/.test(o))throw new Error("exec config error: pattern must start with a command name")}function uo(o,e){let t=e.allow??[],r=e.deny??[];for(let n of [...t,...r])co(n);return r.some(n=>Y(o,n))?false:lo(o)?true:t.some(n=>Y(o,n))}var Ar=false;function po(o){Ar=o;}function Se(o){if(!Ar)return;let e=JSON.stringify({span:"template_exec",...o,timestamp:new Date().toISOString()});console.error(e);}function go(o){let e=[],t="",r=false,n=false;for(let s=0;s<o.length;s++){let i=o[s];i==="'"&&!n?r=!r:i==='"'&&!r?n=!n:i===" "&&!r&&!n?t.length>0&&(e.push(t),t=""):t+=i;}return t.length>0&&e.push(t),e}function Pr(o,e){let t=Date.now(),r=parseInt(process.env.CREWX_EXEC_DEPTH??"0",10);if(isNaN(r)||r>=oo)return Se({command:o,status:"denied",reason:"invalid or max recursion depth"}),"(exec blocked: max recursion depth reached)";try{ao(o);}catch{return Se({command:o,status:"denied",reason:"shell metacharacter detected"}),`(exec blocked: shell metacharacter detected in "${o}")`}if(!uo(o,e))return Se({command:o,status:"denied",reason:"not in allow list"}),`(exec blocked: ${o})`;try{let n=go(o),[s,...i]=n;if(!s)return `(exec failed: ${o})`;let a=io(),d=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"]}),c=Date.now()-t;return Se({command:o,status:"allowed",allowed_by:"policy",duration_ms:c}),`<exec-output cmd="${o}">
41
+ Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function Vt(){let n=Le();return {yamlPath:join(n,"default.yaml"),dir:n}}l();var ue=class extends Error{constructor(e,t){let r=t.length>0?` Available: ${t.join(", ")}`:"";super(`Agent not found: "${e}".${r}`),this.name="AgentNotFoundError";}},No={claude:{id:"claude",provider:"cli/claude"},gemini:{id:"gemini",provider:"cli/gemini"},copilot:{id:"copilot",provider:"cli/copilot"},codex:{id:"codex",provider:"cli/codex"}};function ht(n,e){let t=n.startsWith("@")?n.slice(1):n,r=e.find(s=>s.id===t);if(r)return r;let o=No[t];if(o)return o;throw new ue(n,e.map(s=>s.id))}de();l();function rn(n,e){if(n===void 0||n==="")return e;let t=parseInt(n,10);return Number.isNaN(t)?e:t}function nn(n=process.env){return {queryMs:rn(n.CREWX_TIMEOUT_QUERY,288e5),executeMs:rn(n.CREWX_TIMEOUT_EXECUTE,288e5)}}l();l();var Zo=[/^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],es=/[;|&`$(){}!><\n\r]/,ts=2,rs=["*","**","*:*","* *","**/*"];function ns(){let n={};for(let[e,t]of Object.entries(process.env))t!==void 0&&(Zo.some(r=>r.test(e))||(n[e]=t));return n}function os(n){if(es.test(n))throw new Error(`exec blocked: shell metacharacter detected in "${n}"`)}function ss(n){return /^npx\s+@crewx\/[\w-]+/.test(n)}function is(n){if(rs.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 as(n,e){let t=e.allow??[],r=e.deny??[];for(let o of [...t,...r])is(o);return r.some(o=>ae(n,o))?false:ss(n)?true:t.some(o=>ae(n,o))}var on=false;function ds(n){on=n;}function Ge(n){if(!on)return;let e=JSON.stringify({span:"template_exec",...n,timestamp:new Date().toISOString()});console.error(e);}function ls(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 sn(n,e){let t=Date.now(),r=parseInt(process.env.CREWX_EXEC_DEPTH??"0",10);if(isNaN(r)||r>=ts)return Ge({command:n,status:"denied",reason:"invalid or max recursion depth"}),"(exec blocked: max recursion depth reached)";try{os(n);}catch{return Ge({command:n,status:"denied",reason:"shell metacharacter detected"}),`(exec blocked: shell metacharacter detected in "${n}")`}if(!as(n,e))return Ge({command:n,status:"denied",reason:"not in allow list"}),`(exec blocked: ${n})`;try{let o=ls(n),[s,...i]=o;if(!s)return `(exec failed: ${n})`;let a=ns(),d=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"]}),c=Date.now()-t;return Ge({command:n,status:"allowed",allowed_by:"policy",duration_ms:c}),`<exec-output cmd="${n}">
42
42
  ${d.trim()}
43
- </exec-output>`}catch{return Se({command:o,status:"error",reason:"execution failed"}),`(exec failed: ${o})`}}l();function Rr(o){return o==null?"":String(o)}l();function Cr(o,e){return `\`\`\`${e?.hash?.lang??""}
44
- ${o??""}
45
- \`\`\``}l();function Tt(o,e){if(!o)return "";if(o.length<=e)return o;let t=o.length-e;return `${o.substring(0,e)} (...+${t} chars)`}function bt(o){return Array.isArray(o)||typeof o=="string"?o.length:0}function St(o){return typeof o!="string"?"":o.replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;")}var Tr=["B","KB","MB","GB"];function Et(o){if(o===0)return "0 B";let e=Math.min(Math.floor(Math.log(o)/Math.log(1024)),Tr.length-1);return `${Math.round(o/Math.pow(1024,e)*100)/100} ${Tr[e]}`}function _t(o){if(!o)return "";try{let e=o instanceof Date?o:new Date(o);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 Ee=class{hbs;execPolicy;execEnabled;constructor(e={}){this.hbs=Z.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(n){return typeof n!="string"?"":r?new e.SafeString(Pr(n,t)):"(exec disabled)"}),e.registerHelper("include",function(n){return new e.SafeString(Rr(n))}),e.registerHelper("fenced_code",function(n,s){return new e.SafeString(Cr(n,s))}),e.registerHelper("eq",function(n,s){return n===s}),e.registerHelper("ne",function(n,s){return n!==s}),e.registerHelper("and",function(n,s){return n&&s}),e.registerHelper("or",function(n,s){return n||s}),e.registerHelper("not",function(n){return !n}),e.registerHelper("contains",function(n,s){return Array.isArray(n)&&n.includes(s)}),e.registerHelper("json",function(n){return JSON.stringify(n,null,2)}),e.registerHelper("truncate",function(n,s){return Tt(n,s)}),e.registerHelper("length",function(n){return bt(n)}),e.registerHelper("escapeHandlebars",function(n){return new e.SafeString(St(n))}),e.registerHelper("formatFileSize",function(n){return Et(n)}),e.registerHelper("formatTimestamp",function(n){return _t(n)});}async render(e,t={}){return this.hbs.compile(e,{noEscape:true})(t)}};l();l();var nt=class{async readFile(e){return readFile(e,"utf-8")}async exists(e){try{return await access(e),!0}catch{return false}}resolvePath(...e){return e.length===1?resolve(e[0]):resolve(join(...e))}isAbsolute(e){return isAbsolute(e)}async readdir(e){try{return await readdir(e)}catch{return []}}},pe=new nt;var ge=class{docs=new Map;fs;constructor(e){this.fs=e??pe;}async load(e,t){if(e)for(let[r,n]of Object.entries(e)){let s=n;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 n of t.content.split(`
46
- `)){let s=/^(#{1,6})\s+(.+)$/.exec(n.trim());s&&r.push({depth:s[1].length,text:s[2].trim()});}if(r.length!==0)return r.map(({depth:n,text:s})=>`${" ".repeat(n-1)}- ${s}`).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)??"",n=await this.getToc(t),s=this.getPath(t);e[t]={content:r,toc:n,...s?{path:s}:{}};}return e}async loadFromFile(e,t,r){try{let n=this.resolve(t,r),s=await this.fs.readFile(n);this.docs.set(e,{content:s,path:n});}catch(n){let s=n instanceof Error?n.message:String(n);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)}};l();l();var F=class extends Error{constructor(t,r,n){super(t);this.layoutId=r;this.cause=n;this.name="LayoutLoadError";}layoutId;cause},oe=class extends Error{constructor(t,r=[],n){super(t);this.errors=r;this.cause=n;this.name="PropsValidationError";}errors;cause};var Po={validationMode:"lenient",fallbackLayoutId:"crewx/default"},_e=class{layouts=new Map;options;constructor(e){this.options={...Po,...e,templatesPath:e?.templatesPath??we()},this.loadAllLayouts();}load(e,t){let r=this.layouts.get(e);if(!r){let n=this.normalizeLayoutId(e);r=this.layouts.get(n);}if(!r&&(console.warn(`Layout not found: ${e}, falling back to ${this.options.fallbackLayoutId}`),r=this.layouts.get(this.options.fallbackLayoutId),!r))throw new F(`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 F("Layout ID must be a non-empty string",e);let r=typeof t=="string"?{template:t}:t,n=typeof r.template=="string"?r.template:"";if(!n||n.trim().length===0)throw new F(`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:n,propsSchema:this.parsePropsSchema(s),defaultProps:{...i,...a}},c=this.layouts.get(e),u=c?.template===n&&JSON.stringify(c?.defaultProps??{})===JSON.stringify(d.defaultProps??{})&&JSON.stringify(c?.propsSchema??{})===JSON.stringify(d.propsSchema??{});this.layouts.set(e,d),process.env.CREWX_VERBOSE==="1"&&(c?u||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(n){console.warn(`Failed to register custom layout ${t}:`,n instanceof Error?n.message:n);}}loadAllLayouts(){let e=this.options.templatesPath;if(!existsSync(e))throw new F(`Templates directory not found: ${e}`,void 0,new Error(`Directory does not exist: ${e}`));try{let t=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 n=r.replace(/\.(yaml|yml)$/,""),s=j.join(e,r);try{let i=this.loadLayoutFile(s,n),a=`crewx/${n}`;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 F(`Failed to read layouts directory: ${e}`,void 0,t instanceof Error?t:new Error(String(t)))}}loadLayoutFile(e,t){try{let r=readFileSync(e,"utf-8");if(!r||r.trim().length===0)throw console.warn(`Empty YAML file: ${e}, will use fallback`),new F(`Empty YAML file: ${e}`,t,new Error("File content is empty"));let n=load(r);if(!n||typeof n!="object")throw console.warn(`Invalid YAML content in ${e} (parsed as ${typeof n}), will use fallback`),new F(`Invalid or empty YAML in ${e}`,t,new Error("YAML parsing returned null/undefined or non-object"));if(n.layouts&&typeof n.layouts=="object"){let s=this.resolveLayoutEntry(n.layouts,t);if(!s||s.template.trim().length===0)throw console.warn(`Empty or missing layout template in ${e} for ${t}`),new F(`Layout template not found or empty in layouts map: ${t}`,t);let i=s.propsSchema||n.propsSchema||{};return {id:`crewx/${t}`,version:n.version||"1.0.0",description:n.description||`CrewX ${t} layout`,template:s.template,propsSchema:this.parsePropsSchema(i),defaultProps:this.extractDefaultProps(i)}}else {if(!n.template||typeof n.template=="string"&&n.template.trim().length===0)throw console.warn(`Empty or missing template field in ${e}`),new F(`Layout template is missing or empty in ${e}`,t);return {id:n.id||`crewx/${t}`,version:n.version||"1.0.0",description:n.description||"",template:n.template,propsSchema:this.parsePropsSchema(n.propsSchema||{}),defaultProps:this.extractDefaultProps(n.propsSchema||{})}}}catch(r){throw new F(`Failed to load layout file: ${e}`,t,r instanceof Error?r:new Error(String(r)))}}parsePropsSchema(e){let t={};for(let[r,n]of Object.entries(e))typeof n=="object"&&n!==null&&(t[r]=n);return t}extractDefaultProps(e){let t={};for(let[r,n]of Object.entries(e))n&&typeof n=="object"&&("defaultValue"in n?t[r]=n.defaultValue:"default"in n&&(t[r]=n.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 n=t.split("/"),s=n[n.length-1];s&&r.add(s);}else r.add(`crewx/${t}`);r.add("default");for(let n of r){let s=e[n];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 n of Object.values(e)){if(typeof n=="string"&&n.trim().length>0)return {template:n};let s=n;if(s&&typeof s=="object"&&typeof s.template=="string"&&s.template.trim().length>0)return {template:s.template,propsSchema:s.propsSchema}}}};l();l();function Ro(o){return Array.from(new Set(o.filter(e=>e?.isAssistant&&e?.metadata?.agent_id).map(e=>String(e.metadata.agent_id))))}function _r(o,e,t){if(!Array.isArray(o)||o.length===0||!(t&&typeof t.fn=="function"))return "";let n=Ro(o),s=n.length>0?n[0]:"",i={messages:o,platform:typeof e=="string"?e:"",messagesCount:o.length,agentIds:n,primaryAgentId:s};return t.fn(i)}l();var Ie=class{defaultMode;constructor(e={}){this.defaultMode=e.defaultMode??"lenient";}validate(e,t,r=this.defaultMode){let n=[],s=this.validateObject(e??{},t,r,["props"],n);if(n.length>0&&r==="strict")throw new oe("Props validation failed in strict mode",n);return {valid:n.length===0,props:s,errors:n}}validateObject(e,t,r,n,s){let i={};if(r==="strict")for(let a of Object.keys(e))t[a]||s.push({path:this.buildPath([...n,a]),message:`Unknown prop '${a}'`,value:e[a]});for(let[a,d]of Object.entries(t)){let c=[...n,a],u=e[a],m=this.resolveProp(u,d,c,r,s);m.shouldAssign&&(i[a]=m.value);}return i}resolveProp(e,t,r,n,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,n,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,n,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,n,s);case "object":return this.validatePlainObject(e);case "shape":return this.validateShape(e,t,r,n,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,n,s){let i=this.validateArray(e,t);if(!i.valid)return i;let a=[],d=t.itemType,c=t.itemOneOf,u=s.length;return i.value.forEach((m,g)=>{let p=[...r,String(g)];if(d){let h=this.validateType(m,{type:d},p,n,s);h.valid?a.push(h.value):s.push({path:this.buildPath(p),message:h.error??"Invalid array item",value:m});}else a.push(m);c&&!c.includes(m)&&s.push({path:this.buildPath(p),message:`Array item must be one of: ${c.join(", ")}`,value:m});}),{valid:s.length===u,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,n,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??{},n,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,n]of Object.entries(e)){if(n.defaultValue!==void 0){t[r]=this.cloneValue(n.defaultValue);continue}if(n.type==="shape"&&n.shape){let s=this.applyDefaults(n.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,n]of Object.entries(e))t[r]=this.cloneValue(n);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 Oe=class{handlebars;propsValidator;constructor(e){this.handlebars=Z__default.create(),this.propsValidator=e??new Ie,this.registerHelpers();}render(e,t,r={}){try{let n=this.prepareRenderContext(e,t,r);return this.handlebars.compile(e.template,{noEscape:!0})(n)}catch(n){throw n instanceof Error?new Error(`Template rendering failed for layout '${e.id}': ${n.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 n=this.mergeProps(e.defaultProps,t);return !e.propsSchema||Object.keys(e.propsSchema).length===0?{valid:true,props:n,errors:[]}:this.executeValidation(n,e.propsSchema,r)}prepareRenderContext(e,t,r){let{validationMode:n="lenient",skipValidation:s=false}=r,i=s?this.mergeProps(e.defaultProps,t.props):this.resolveProps(e,t.props,n).props;return {...t,vars:this.sanitizeVars(t.vars),props:i}}registerHelpers(){this.handlebars.registerHelper("formatConversation",_r),Z__default.helpers.each&&this.handlebars.registerHelper("each",Z__default.helpers.each),Z__default.helpers.if&&this.handlebars.registerHelper("if",Z__default.helpers.if),Z__default.helpers.unless&&this.handlebars.registerHelper("unless",Z__default.helpers.unless),Z__default.helpers.with&&this.handlebars.registerHelper("with",Z__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 Z__default.SafeString(JSON.stringify(e))}),this.handlebars.registerHelper("raw",function(e){return typeof e?.fn=="function"?e.fn(this):""}),this.handlebars.registerHelper("escapeHandlebars",function(e){return typeof e!="string"?"":e.replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;")}),this.handlebars.registerHelper("formatFileSize",function(e){if(e===0)return "0 B";let t=["B","KB","MB","GB"],r=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/Math.pow(1024,r)*100)/100+" "+t[r]});}executeValidation(e,t,r){try{return this.propsValidator.validate(e,t,r)}catch(n){if(n instanceof oe&&n.errors&&n.errors.length>0){let s=n.errors[0];if(s)throw new oe(s.message,n.errors)}throw n}}mergeProps(e,t){let r=this.cloneDeep(e??{});return t?this.deepMerge(r,t):r}deepMerge(e,t){for(let[r,n]of Object.entries(t)){if(this.isPlainObject(n)){let s=e[r];e[r]=this.deepMerge(this.isPlainObject(s)?s:{},n);continue}if(Array.isArray(n)){e[r]=this.cloneDeep(n);continue}e[r]=n;}return e}cloneDeep(e){if(Array.isArray(e))return e.map(t=>this.cloneDeep(t));if(this.isPlainObject(e)){let t={};for(let[r,n]of Object.entries(e))t[r]=this.cloneDeep(n);return t}return e}isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}sanitizeVars(e){if(!e)return {};let t={...e};if(typeof e.user_input=="string"){t.user_input_raw=e.user_input;let r=e.user_input.replace(/\{\{\{/g,"&#123;&#123;&#123;").replace(/\}\}\}/g,"&#125;&#125;&#125;").replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;");t.user_input=this.handlebars.escapeExpression(r);}return t}};l();var It="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function Co(o){let e=randomBytes(o*2),t="";for(let r=0;r<e.length&&t.length<o;r++){let n=e[r];n<248&&(t+=It[n%62]);}for(;t.length<o;)t+=It[randomBytes(1)[0]%62];return t}function me(o){return `${o}_${Co(8)}`}function To(o,e){let{createHash:t}=B("crypto"),r=t("sha256").update(e).digest(),n=Buffer.alloc(8);for(let i=0;i<32;i++)n[i%8]^=r[i];let s="";for(let i of n)s+=It[i%62];return `${o}_${s}`}l();function Ot(o){let e=t=>String(t).padStart(2,"0");return `${o.getFullYear()}${e(o.getMonth()+1)}${e(o.getDate())}T${e(o.getHours())}${e(o.getMinutes())}${e(o.getSeconds())}`}l();function Or(o,e){return t=>{try{let r=e(t);r instanceof Promise&&r.catch(n=>{console.error(`[crewx] event listener error (${o}): ${n instanceof Error?n.message:String(n)}`);});}catch(r){console.error(`[crewx] event listener error (${o}): ${r instanceof Error?r.message:String(r)}`);}}}var Me=class{_emitter=new EventEmitter;on(e,t){let r=Or(e,t);return this._emitter.on(e,r),()=>this._emitter.off(e,r)}once(e,t){let r=Or(e,t);return this._emitter.once(e,r),()=>this._emitter.off(e,r)}emit(e,t){this._emitter.emit(e,t);}};l();function Mt(o){let e=new Map,t=r=>r.startsWith(`${o}::`)?r:`${o}::${r}`;return {async get(r){let n=e.get(t(r));return n?n.value:void 0},async set(r,n){e.set(t(r),{value:n});},async delete(r){return e.delete(t(r))},async list(r){let n=r?t(r):`${o}::`,s=[];for(let i of e.keys())i.startsWith(n)&&s.push(i.slice(o.length+2));return s}}}l();var Nt=new AsyncLocalStorage;function Eo(){return Nt}function _o(o,e){return Nt.run(o,e)}function $t(o){let e=o.log??o.logger??{debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},t=o.agentRunner??{run:async()=>({output:""})},r=o.db??{get:async()=>{},set:async()=>{},delete:async()=>false,list:async()=>[]},n=o.storage??{put:async()=>"",get:async()=>{},delete:async()=>false},s=o.audit??{log:async()=>{}},i=o.onInbound??(async()=>({accepted:true})),a=o.onEmitEvent??(async()=>({accepted:true})),d=o.onUpdateMessage??(async()=>{}),c=o.onResolveUser??(async g=>({userId:g,displayName:g})),u=async g=>{let p=Nt.getStore();if(!p){e.warn("respondSync called outside sync window \u2014 graceful degradation (no-op)",{textPreview:typeof g=="object"&&"text"in g?g.text.slice(0,80):void 0});return}let h="text"in g?g.text:"";p.res.status(200).json({text:h});},m=o.httpRouter??{registerRoute:()=>{e.warn("httpRouter not configured \u2014 registerRoute is a no-op");}};return {instanceId:o.instanceId,config:o.config,capabilities:o.capabilities,log:e,agentRunner:t,db:r,storage:n,audit:s,abortSignal:o.abortSignal??new AbortController().signal,httpRouter:m,inbound:i,emitEvent:a,updateMessage:d,resolveUser:c,respondSync:u}}Ae();l();var Io=/^-\s*Status:\s*active/m,Oo=/^---\n([\s\S]*?)\n---/,Mo=/^type:\s*goal\s*$/m;async function Mr(o,e=pe,t){let r=typeof t=="string"?[t]:Array.isArray(t)?t:void 0;if(r){let a=[];for(let d of r){let c=e.resolvePath(o,d);await e.exists(c)&&a.push(await e.readFile(c));}return a.join(`
43
+ </exec-output>`}catch{return Ge({command:n,status:"error",reason:"execution failed"}),`(exec failed: ${n})`}}l();function an(n){return n==null?"":String(n)}l();function dn(n,e){return `\`\`\`${e?.hash?.lang??""}
44
+ ${n??""}
45
+ \`\`\``}l();function nr(n,e){if(!n)return "";if(n.length<=e)return n;let t=n.length-e;return `${n.substring(0,e)} (...+${t} chars)`}function or(n){return Array.isArray(n)||typeof n=="string"?n.length:0}function sr(n){return typeof n!="string"?"":n.replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;")}var ln=["B","KB","MB","GB"];function ir(n){if(n===0)return "0 B";let e=Math.min(Math.floor(Math.log(n)/Math.log(1024)),ln.length-1);return `${Math.round(n/Math.pow(1024,e)*100)/100} ${ln[e]}`}function ar(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 Ye=class{hbs;execPolicy;execEnabled;constructor(e={}){this.hbs=le.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(sn(o,t)):"(exec disabled)"}),e.registerHelper("include",function(o){return new e.SafeString(an(o))}),e.registerHelper("fenced_code",function(o,s){return new e.SafeString(dn(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 nr(o,s)}),e.registerHelper("length",function(o){return or(o)}),e.registerHelper("escapeHandlebars",function(o){return new e.SafeString(sr(o))}),e.registerHelper("formatFileSize",function(o){return ir(o)}),e.registerHelper("formatTimestamp",function(o){return ar(o)});}async render(e,t={}){return this.hbs.compile(e,{noEscape:true})(t)}};l();l();var Ct=class{async readFile(e){return readFile(e,"utf-8")}async exists(e){try{return await access(e),!0}catch{return false}}resolvePath(...e){return e.length===1?resolve(e[0]):resolve(join(...e))}isAbsolute(e){return isAbsolute(e)}async readdir(e){try{return await readdir(e)}catch{return []}}},Pe=new Ct;var Ce=class{docs=new Map;fs;constructor(e){this.fs=e??Pe;}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(`
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(`
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)}};l();l();var X=class extends Error{constructor(t,r,o){super(t);this.layoutId=r;this.cause=o;this.name="LayoutLoadError";}layoutId;cause},me=class extends Error{constructor(t,r=[],o){super(t);this.errors=r;this.cause=o;this.name="PropsValidationError";}errors;cause};var xs={validationMode:"lenient",fallbackLayoutId:"crewx/default"},Qe=class{layouts=new Map;options;constructor(e){this.options={...xs,...e,templatesPath:e?.templatesPath??Le()},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 X(`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 X("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 X(`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}},c=this.layouts.get(e),u=c?.template===o&&JSON.stringify(c?.defaultProps??{})===JSON.stringify(d.defaultProps??{})&&JSON.stringify(c?.propsSchema??{})===JSON.stringify(d.propsSchema??{});this.layouts.set(e,d),process.env.CREWX_VERBOSE==="1"&&(c?u||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(!existsSync(e))throw new X(`Templates directory not found: ${e}`,void 0,new Error(`Directory does not exist: ${e}`));try{let t=readdirSync(e).filter(r=>r.endsWith(".yaml")||r.endsWith(".yml"));t.length===0&&console.warn(`No layout files found in ${e}`);for(let r of t){let o=r.replace(/\.(yaml|yml)$/,""),s=z.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 X(`Failed to read layouts directory: ${e}`,void 0,t instanceof Error?t:new Error(String(t)))}}loadLayoutFile(e,t){try{let r=readFileSync(e,"utf-8");if(!r||r.trim().length===0)throw console.warn(`Empty YAML file: ${e}, will use fallback`),new X(`Empty YAML file: ${e}`,t,new Error("File content is empty"));let o=load(r);if(!o||typeof o!="object")throw console.warn(`Invalid YAML content in ${e} (parsed as ${typeof o}), will use fallback`),new X(`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 X(`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 X(`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 X(`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}}}};l();l();l();function Te(n){return String(Math.floor(Math.abs(n))).padStart(2,"0")}function Ze(n){if(!(n instanceof Date)||Number.isNaN(n.getTime()))return "";let e=-n.getTimezoneOffset(),t=e>=0?"+":"-";return `${n.getFullYear()}-${Te(n.getMonth()+1)}-${Te(n.getDate())}T${Te(n.getHours())}:${Te(n.getMinutes())}:${Te(n.getSeconds())}${t}${Te(e/60)}:${Te(e%60)}`}function gn(n){if(!Number.isFinite(n))return "";let e=Math.floor(n/1e3);if(e<=0)return "just now";if(e<60)return `${e}s ago`;let t=Math.floor(e/60);if(t<60)return `${t}m ago`;let r=Math.floor(t/60);return r<24?`${r}h ago`:`${Math.floor(r/24)}d ago`}function ks(n,e){return n.map(t=>{let r=typeof t?.timestamp=="number"?t.timestamp:null;return r===null?t:{...t,created_at:Ze(new Date(r)),relative_time:gn(e-r)}})}function vs(n){return Array.from(new Set(n.filter(e=>e?.isAssistant&&e?.metadata?.agent_id).map(e=>String(e.metadata.agent_id))))}function mn(...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=vs(t),d=a.length>0?a[0]:"",c=Date.now(),u={messages:ks(t,c),platform:typeof r=="string"?r:"",messagesCount:t.length,agentIds:a,primaryAgentId:d,currentAgentId:o,threadId:s,now:Ze(new Date(c))};return e.fn(u)}l();var et=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 me("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 c=[...o,a],u=e[a],g=this.resolveProp(u,d,c,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,c=t.itemOneOf,u=s.length;return i.value.forEach((g,h)=>{let p=[...r,String(h)];if(d){let f=this.validateType(g,{type:d},p,o,s);f.valid?a.push(f.value):s.push({path:this.buildPath(p),message:f.error??"Invalid array item",value:g});}else a.push(g);c&&!c.includes(g)&&s.push({path:this.buildPath(p),message:`Array item must be one of: ${c.join(", ")}`,value:g});}),{valid:s.length===u,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 tt=class{handlebars;propsValidator;constructor(e){this.handlebars=le__default.create(),this.propsValidator=e??new et,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",mn),le__default.helpers.each&&this.handlebars.registerHelper("each",le__default.helpers.each),le__default.helpers.if&&this.handlebars.registerHelper("if",le__default.helpers.if),le__default.helpers.unless&&this.handlebars.registerHelper("unless",le__default.helpers.unless),le__default.helpers.with&&this.handlebars.registerHelper("with",le__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 le__default.SafeString(JSON.stringify(e))}),this.handlebars.registerHelper("raw",function(e){return typeof e?.fn=="function"?e.fn(this):""}),this.handlebars.registerHelper("escapeHandlebars",function(e){return typeof e!="string"?"":e.replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;")}),this.handlebars.registerHelper("formatFileSize",function(e){if(e===0)return "0 B";let t=["B","KB","MB","GB"],r=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/Math.pow(1024,r)*100)/100+" "+t[r]});}executeValidation(e,t,r){try{return this.propsValidator.validate(e,t,r)}catch(o){if(o instanceof me&&o.errors&&o.errors.length>0){let s=o.errors[0];if(s)throw new me(s.message,o.errors)}throw o}}mergeProps(e,t){let r=this.cloneDeep(e??{});return t?this.deepMerge(r,t):r}deepMerge(e,t){for(let[r,o]of Object.entries(t)){if(this.isPlainObject(o)){let s=e[r];e[r]=this.deepMerge(this.isPlainObject(s)?s:{},o);continue}if(Array.isArray(o)){e[r]=this.cloneDeep(o);continue}e[r]=o;}return e}cloneDeep(e){if(Array.isArray(e))return e.map(t=>this.cloneDeep(t));if(this.isPlainObject(e)){let t={};for(let[r,o]of Object.entries(e))t[r]=this.cloneDeep(o);return t}return e}isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}sanitizeVars(e){if(!e)return {};let t={...e};if(typeof e.user_input=="string"){t.user_input_raw=e.user_input;let r=e.user_input.replace(/\{\{\{/g,"&#123;&#123;&#123;").replace(/\}\}\}/g,"&#125;&#125;&#125;").replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;");t.user_input=this.handlebars.escapeExpression(r);}return t}};l();var dr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function _s(n){let e=randomBytes(n*2),t="";for(let r=0;r<e.length&&t.length<n;r++){let o=e[r];o<248&&(t+=dr[o%62]);}for(;t.length<n;)t+=dr[randomBytes(1)[0]%62];return t}function be(n){return `${n}_${_s(8)}`}function As(n,e){let{createHash:t}=V("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+=dr[i%62];return `${n}_${s}`}l();function lr(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())}`}l();function yn(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 rt=class{_emitter=new EventEmitter;on(e,t){let r=yn(e,t);return this._emitter.on(e,r),()=>this._emitter.off(e,r)}once(e,t){let r=yn(e,t);return this._emitter.once(e,r),()=>this._emitter.off(e,r)}emit(e,t){this._emitter.emit(e,t);}};l();function cr(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}}}l();var ur=new AsyncLocalStorage;function Cs(){return ur}function Ts(n,e){return ur.run(n,e)}function pr(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()=>{}),c=n.onResolveUser??(async h=>({userId:h,displayName:h})),u=async h=>{let p=ur.getStore();if(!p){e.warn("respondSync called outside sync window \u2014 graceful degradation (no-op)",{textPreview:typeof h=="object"&&"text"in h?h.text.slice(0,80):void 0});return}let f="text"in h?h.text:"";p.res.status(200).json({text:f});},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:c,respondSync:u}}He();l();var bs=/^-\s*Status:\s*active/m,Es=/^---\n([\s\S]*?)\n---/,Ss=/^type:\s*goal\s*$/m;async function hn(n,e=Pe,t){let r=typeof t=="string"?[t]:Array.isArray(t)?t:void 0;if(r){let a=[];for(let d of r){let c=e.resolvePath(n,d);await e.exists(c)&&a.push(await e.readFile(c));}return a.join(`
48
48
  ---
49
- `)}let s=(await e.readdir(o)).filter(a=>a.endsWith(".md"));if(s.length===0)return "";let i=[];for(let a of s){let d=e.resolvePath(o,a),c=await e.readFile(d),u=Oo.exec(c);!u||!Mo.test(u[1])||Io.test(c)&&i.push(c);}return i.join(`
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),c=await e.readFile(d),u=Es.exec(c);!u||!Ss.test(u[1])||bs.test(c)&&i.push(c);}return i.join(`
50
50
  ---
51
- `)}l();function No(){let o=new Date,e=o.getFullYear(),t=String(o.getMonth()+1).padStart(2,"0"),r=String(o.getDate()).padStart(2,"0");return `${e}-${t}-${r}`}async function Nr(o,e=pe){let t=e.resolvePath(o,`${No()}.md`);return await e.exists(t)?e.readFile(t):""}Ae();l();function $o(o){return typeof o!="string"?"":o.replace(/</g,"&lt;").replace(/>/g,"&gt;")}function Dt(o){return o.messages.map(e=>({text:$o(e.text),isAssistant:e.isAssistant,metadata:e.metadata,files:void 0}))}l();l();var Do={agentId:z$1.string().describe("The agent ID to query"),query:z$1.string().describe("The query message to send"),context:z$1.string().optional().describe("Additional context"),thread:z$1.string().optional().describe("Thread ID for conversation continuity")},Lo={agentId:z$1.string().describe("The agent ID to execute"),task:z$1.string().describe("The task description to execute"),context:z$1.string().optional().describe("Additional context"),thread:z$1.string().optional().describe("Thread ID for conversation continuity")};function $r(o,e,t){o.tool("crewx_listAgents","List available CrewX agents exposed by this server",async()=>{let r=[];for(let n of t){let s=e.agents.get(n);s&&r.push({id:s.id,name:s.name??s.id,description:s.description??""});}return {content:[{type:"text",text:JSON.stringify(r,null,2)}]}}),o.tool("crewx_queryAgent","Query a CrewX agent with a read-only question",Do,async({agentId:r,query:n,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,n,{context:s,threadId:i});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Query failed"}],isError:true}}),o.tool("crewx_executeAgent","Execute a task on a CrewX agent (may modify state)",Lo,async({agentId:r,task:n,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,n,{context:s,threadId:i});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Execute failed"}],isError:true}});}l();function Dr(o){return o.headers.get("Origin")?null:new Response(JSON.stringify({error:"Forbidden: Origin header required"}),{status:403,headers:{"Content-Type":"application/json"}})}async function Lr(o,e){return e?await e(o)?null:new Response(JSON.stringify({error:"Unauthorized"}),{status:401,headers:{"Content-Type":"application/json"}}):null}function Ho(o,e){let t=new McpServer({name:"crewx-mcp-server",version:"1.0.0"},{capabilities:{tools:{}}});return $r(t,o,e),t}function Lt(o,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 n=>{let s=Dr(n);if(s)return s;let i=await Lr(n,e.auth);if(i)return i;let a=n.headers.get("mcp-session-id");if(a&&r.has(a))return r.get(a).transport.handleRequest(n);let d=Ho(o,t),c=new WebStandardStreamableHTTPServerTransport({sessionIdGenerator:()=>crypto.randomUUID(),onsessioninitialized:u=>{r.set(u,{transport:c,server:d});},onsessionclosed:u=>{r.delete(u);},enableJsonResponse:true});return await d.connect(c),c.handleRequest(n)}}l();function Ur(o){let e=j.resolve(o);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 jt(o){let e=Ur(o);return createHash("sha256").update(e).digest("hex")}function gs(o){return o?o.settings?.template?.exec:void 0}function ms(){try{let o=new Uint8Array(8);return globalThis.crypto.getRandomValues(o),Array.from(o,e=>e.toString(16).padStart(2,"0")).join("")}catch{let{randomBytes:o}=B("crypto");return o(8).toString("hex")}}var tr=class o extends Me{_agents;_templateEngine;_documentLoader;_layoutLoader;_layoutRenderer;_config;_projectRoot;_workspaceId;_workspaceName;_plugins=[];_tools=new Map;_activeAdapters=new Map;_pendingThreads=new Map;_remoteFactory;_remoteTargets=new Map;constructor(e,t={},r,n,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=jt(i),this._workspaceName=basename(i);let a=gs(r);this._templateEngine=new Ee({execPolicy:t.execPolicy??a}),this._documentLoader=n??new ge,this._layoutLoader=new _e({templatesPath:we()}),this._layoutRenderer=new Oe,this._remoteFactory=t.remoteFactory;}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 n=r.slice(7),s=this.getRemoteProviderConfig(n);if(!s?.location?.startsWith("file://"))return null;let i=resolve(s.location.replace("file://","")),a=s.external_agent_id??e.replace(/^@/,""),d=this._remoteTargets.get(i);d||(d=(this._remoteFactory??(p=>o.loadYaml(p)))(i),this._remoteTargets.set(i,d),d.catch(()=>this._remoteTargets.delete(i)));let c=await d,u=c.getAgent("@"+a),m=Array.isArray(u?.provider)?u?.provider[0]:u?.provider;if(m?.startsWith("remote/"))throw new Error(`Chained remotes not allowed: "${n}" \u2192 "${m}"`);return {target:c,agentRef:"@"+a}}static async loadBuiltInConfig(e){let{yamlPath:t,dir:r}=ft(),n;try{n=readFileSync(t,"utf-8");}catch(i){throw new Error(`[@crewx/sdk] Cannot read built-in config: ${t}
52
- ${i.message}`)}let s=Ve(n);if(s.documents&&typeof s.documents=="object"){let i={};for(let[a,d]of Object.entries(s.documents))if(d&&typeof d=="object"){let c=d;typeof c.path=="string"&&!isAbsolute(c.path)?i[a]={...c,path:resolve(r,c.path)}:i[a]=c;}else i[a]=d;return {...s,documents:i}}return s}static mergeCrewxConfig(e,t){let r=new Map;for(let k of e.agents??[])r.set(k.id,k);for(let k of t.agents??[])r.has(k.id)&&console.warn(`[agent-loader] User agent "${k.id}" overrides built-in`),r.set(k.id,k);let n=Array.from(r.values()),s={...e.layouts??{},...t.layouts??{}},i={...e.documents??{},...t.documents??{}},a=e,d=t,c=nn(a.vars,d.vars),u=nn(a.settings,d.settings),m;e.skills&&t.skills&&typeof e.skills=="object"&&typeof t.skills=="object"&&!Array.isArray(e.skills)&&!Array.isArray(t.skills)?m={...e.skills,...t.skills}:m=t.skills??e.skills;let g=[...e.hooks??[],...t.hooks??[]],p=fs(a.providers,d.providers),h={...e},x={...t};for(let k of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete h[k],delete x[k];let A={...{...h,...x},agents:n,layouts:s,documents:i,skills:m};return g.length>0&&(A.hooks=g),c!==void 0&&(A.vars=c),u!==void 0&&(A.settings=u),p!==void 0&&(A.providers=p),A}static async loadYaml(e,t,r){let n=t?.includeBuiltIns!==false,s,i;if(n){let u=await o.loadBuiltInConfig(r);if(e!==void 0){let m=ze(e);s=o.mergeCrewxConfig(u,m),i=dirname(e);}else s=u,i=process.cwd();}else {if(e===void 0)throw new Error("[@crewx/sdk] loadYaml: path is required when includeBuiltIns is false");s=ze(e),i=dirname(e);}let a=new ge(r);await a.load(s.documents,i);let d=s.agents??[];return await on(d,s,t),new o(d,t??{},s,a,i)}static async fromConfig(e,t,r,n){let s=t?.includeBuiltIns===true,i=e;if(s){let u=await o.loadBuiltInConfig(n);i=o.mergeCrewxConfig(u,e);}let a=new ge(n);await a.load(i.documents,r??(typeof process<"u"?process.cwd():"/"));let d=i.agents??[];return await on(d,i,t),new o(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(n=>n.type==="remote"&&n.id===e):void 0}computeTaskLogPath(e,t){let r=Ot(t);return 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 Lt(this,e)}async registerChannelAdapter(e){let{adapter:t,instanceId:r,config:n}=e;if(this._activeAdapters.has(r))throw new Error(`Adapter instance already registered: ${r}`);let s=new Set(t.manifest.capabilities),i=e.store??Mt(r),a=e.defaultMode??"query",d=t.manifest.platform,c=e.agentRunner??{run:async(p,h,x)=>{let A=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${p}`,h,{threadId:x?.threadId,platform:d});return {output:A.ok?A.data:A.error?.message??""}}},u=e.onInbound??(async p=>{let h=p.routingHints?.agentId??e.defaultAgent;if(!h)return {accepted:false,reason:"no_agent"};let{output:x}=await c.run(h,p.text,{threadId:p.threadId});return {accepted:true,output:x}}),m=$t({instanceId:r,config:n,capabilities:s,db:i,agentRunner:c,onInbound:u}),g={adapter:t,ctx:m,state:"starting"};this._activeAdapters.set(r,g),this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"starting",timestamp:new Date});try{await t.start(m),g.state="started",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"started",timestamp:new Date});}catch(p){throw g.state="failed",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"failed",error:p instanceof Error?p:new Error(String(p)),timestamp:new Date}),this._activeAdapters.delete(r),p}}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()),n=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<n.length;s++)n[s].status==="rejected"&&console.error(`[crewx] adapter stop error (${r[s]}): ${n[s].reason}`);}async close(){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(n){console.error(`[crewx] remote target close error: ${n instanceof Error?n.message:String(n)}`);}}));let t=[...this._plugins].reverse();for(let r of t)try{await r.detach(this);}catch(n){console.error(`[crewx] plugin ${r.name} detach error: ${n instanceof Error?n.message:String(n)}`);}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),n=t(e.team),s=t(e.provider),i=Array.from(this._agents.values());return r&&(i=i.filter(a=>a.role&&r.some(d=>Y(a.role.toLowerCase(),d)))),n&&(i=i.filter(a=>a.team&&n.some(d=>Y(a.team.toLowerCase(),d)))),s&&(i=i.filter(a=>(Array.isArray(a.provider)?a.provider:[a.provider]).some(c=>s.some(u=>Y(c.toLowerCase(),u))))),i}renderAgentPrompt(e){let t=e.startsWith("@")?e.slice(1):e,r=this._agents.get(t);if(!r)throw new te(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 n={...await this._documentLoader.buildContext(),...t?.documents??{}},s={...t,documents:n};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,n=this._agents.get(r);if(!n)throw new te(r,Array.from(this._agents.keys()));let s=this._resolveLayoutSpec(n,t?.layout),i=this._extractLayoutId(s),a=this._extractLayoutProps(n,s,t?.layout),d=this._layoutLoader.load(i,a),c=n.inline?.prompt??n.inline?.system_prompt??n.description??`You are an expert ${r}.`,u=await this._documentLoader.buildContext(),m=t?.env??(typeof process<"u"?process.env:{}),g=t?.vars?.security_key??ms(),p={...t?.vars??{},documents:u,env:m,agent:{id:n.id,name:n.name??n.id,role:n.role??"",team:n.team??"",description:n.description??""}},h=await this._templateEngine.render(c,p),x={mode:t?.session?.mode??"query",platform:t?.session?.platform??"cli",options:t?.session?.options??[]},w=n.provider,A=Array.isArray(w)?w:typeof w=="string"&&w.length>0?[w]:[],k=A.join(", ")||(typeof w=="string"?w:""),P=n.options,I=["goals","daily"],b={goals:false,daily:false},D;if(!Array.isArray(P)&&typeof P=="object"&&P!==null){let v=P;if("goals"in v){let S=v.goals;typeof S=="string"||Array.isArray(S)?b.goals=S:b.goals=!!S;}"daily"in v&&(b.daily=!!v.daily);let R={};for(let[S,T]of Object.entries(v))I.includes(S)||(R[S]=T);D=Object.keys(R).length>0?R:void 0;}let $=Array.isArray(P)?P:void 0,E={};for(let[v,R]of Object.entries(u))E[v]={content:R.content??"",toc:R.toc,summary:R.summary,path:R.path};if(b.goals){let v=join(this._projectRoot,"docs","goal"),R=await Mr(v,void 0,b.goals);R&&(E.active_goals={content:R});}if(b.daily){let v=join(this._projectRoot,"docs","daily"),R=await Nr(v);R&&(E.today_daily={content:R});}let U={user_input:t?.vars?.user_input??void 0,agent:{id:n.id,name:n.name??n.id,role:n.role??"",team:n.team??"",description:n.description??"",provider:k,providerList:A,model:n.inline?.model,workingDirectory:n.working_directory??n.workingDirectory??".",inline:{...n.inline??{},prompt:h},specialties:n.specialties??[],capabilities:n.capabilities??[],remote:n.remote??null,optionsByMode:D,optionsArray:$},agentMetadata:{specialties:n.specialties??[],capabilities:n.capabilities??[],description:n.description??""},contextOptions:b,documents:E,skills:t?.skills??[],session:x,env:m,vars:{security_key:g,...t?.vars??{}},props:{...a??{},...t?.messages&&t.messages.length>0?{showConversationHistory:true}:{}},platform:x.platform,mode:x.mode,messages:t?.messages??[],tools:this._tools.size>0?{list:Array.from(this._tools.values()).map(v=>({name:v.name,description:v.description,parameters:v.parameters})),json:JSON.stringify(Array.from(this._tools.values()).map(v=>({name:v.name,description:v.description,parameters:v.parameters})),null,2),count:this._tools.size}:null,metadata:{}};return this._layoutRenderer.render(d,U)}_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 n=this._config?.layouts?.default;return typeof n=="string"&&n?n:"crewx/default"}_extractLayoutId(e){if(typeof e=="string")return e;if("id"in e)return e.id;let t=`crewx/__inline_${Date.now()}`;return this._layoutLoader.registerLayout(t,e.template),t}_extractLayoutProps(e,t,r){let n=e.inline?.layout,s=n&&typeof n=="object"&&"props"in n?n.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 n=this._getConversationProvider();if(n)try{let s=await n.fetchHistory(e,{currentTraceId:t});return s.messages.length===0?void 0:Dt(s)}catch{return}}_resolveTimeout(e){let t=kr();return e==="query"?t.queryMs:t.executeMs}emitToolEvents(e,t,r,n,s,i,a){try{let c=ie[r]?.parseEvent?.(n)??Rt(new Date().toISOString(),n);for(let u of c)u.type==="tool_use"&&u.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:u.toolName,rawName:u.toolName,input:u.toolInput?this.tryParseJson(u.toolInput):void 0,toolUseId:u.toolUseId}}),u.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:u.toolName??"unknown",rawName:u.toolName??"unknown",toolUseId:u.toolUseId,result:u.resultPreview,isError:u.isError}});}catch{}}emitTaskLogEntries(e,t,r,n,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:n,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:n,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 n=await this.resolveFileRemoteTarget(e);if(n)return n.target.query(n.agentRef,t,r);let s=Date.now(),i=r?.taskId??me("tsk"),a=new Date,d;try{d=Je(e,Array.from(this._agents.values()));}catch(v){if(v instanceof te){this.emit("task:start",{traceId:i,timestamp:a,agentRef:e,message:t,mode:"query",metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let R=Date.now()-s,S={code:"AGENT_NOT_FOUND",message:v.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:R,error:S,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:S,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:R}}}throw v}let c=Array.isArray(d.provider)?d.provider[0]??"cli/claude":d.provider,u=r?.provider??c,m=r?.model??d.inline?.model;m&&m.includes("{{")&&(m=await this._templateEngine.render(m,{...r?.vars??{}}));let g;try{g=ne(u);}catch(v){this.emit("task:start",{traceId:i,timestamp:a,agentRef:e,message:t,mode:"query",metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let R=Date.now()-s,S={code:"PROVIDER_ERROR",message:v.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:R,error:S,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:S,meta:{agentId:d.id,provider:u,model:m,durationMs:R}}}let p=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),h;try{h=await this.renderAgentPromptFull(e,{session:{mode:"query",platform:r?.platform},vars:{user_input:t,...r?.vars??{}},messages:p});}catch(v){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${v instanceof Error?v.message:String(v)}`);}let x,w,A,k=m,P=false,I=v=>{P||(P=true,this.emit("task:start",{traceId:i,timestamp:a,agentRef:e,message:t,mode:"query",pid:v,model:k,provider:u,codingAgentCommand:x,renderedPrompt:h,metadata:{...r?.metadata??{},provider:u},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},b=d.options,D=Array.isArray(b?.query?.tools)?b.query.tools:void 0,$=this._tools.size>0?this._filterToolsByMode(D):[],E=(()=>{let v=b?.query;if(!v||Array.isArray(v))return;let{tools:R,effort:S,mode:T,...H}=v,q=Object.entries(H).filter(([,L])=>L!=null);if(q.length!==0)return Object.fromEntries(q.map(([L,W])=>[L,String(W)]))})(),N=d.inline?.max_steps;u.startsWith("api/")&&I();let U=false;try{let v=await g.query(t,{model:m,effort:b?.query?.effort,mode:b?.query?.mode,context:r?.context,systemPrompt:h??d.inline?.system_prompt??d.inline?.prompt??d.description??`You are ${d.id}.`,additionalArgs:Array.isArray(b?.query)?b.query:void 0,tools:$.length>0?$:void 0,maxSteps:N,configOptions:E,timeoutMs:this._resolveTimeout("query"),cwd:r?.cwd,env:{CREWX_AGENT_ID:d.id,CREWX_AGENT_ROLE:d.role??"",CREWX_AGENT_TEAM:d.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:u,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,a)},onPid:T=>I(T),onOutput:(T,H)=>{this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:T,level:H}),H==="stdout"&&this.emitToolEvents(i,e,u,T,d.id,r?.threadId??"","");},onTaskLog:T=>{this.emitTaskLogEntries(i,e,d.id,r?.threadId??"","",u,T);for(let H of T)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(H),level:"info"});},onCommand:T=>{x=T;},onUsage:T=>{w=T;},onExitCode:T=>{A=T;},onModel:T=>{k||(k=T);}});I();let R=Date.now()-s,S={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",result:v,durationMs:R,exitCode:A,inputTokens:w?.inputTokens,outputTokens:w?.outputTokens,cachedInputTokens:w?.cachedInputTokens,costUsd:w?.costUsd,model:k,metadata:Object.keys(S).length>0?S:void 0}),U=!0,{ok:!0,data:v,meta:{agentId:d.id,provider:u,model:m,durationMs:R,taskId:i}}}catch(v){if(v instanceof X){let T=me("thd");return this._pendingThreads.set(T,{agentRef:d.id,providerStr:u,continuationState:v.continuationState,toolCall:v.toolCall,traceId:i,startMs:s,model:m}),U=true,{ok:true,status:"requires_action",data:"",toolCall:v.toolCall,threadId:T,meta:{agentId:d.id,provider:u,model:m,durationMs:Date.now()-s,taskId:i}}}I();let R=Date.now()-s,S={code:"QUERY_FAILED",message:v.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:R,error:S,exitCode:A,inputTokens:w?.inputTokens,outputTokens:w?.outputTokens,cachedInputTokens:w?.cachedInputTokens,costUsd:w?.costUsd,model:k,metadata:r?.metadata?{...r.metadata}:void 0}),U=true,{ok:false,data:"",error:S,meta:{agentId:d.id,provider:u,model:m,durationMs:R,taskId:i}}}finally{U||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:Date.now()-s,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:A??-1,inputTokens:w?.inputTokens,outputTokens:w?.outputTokens,cachedInputTokens:w?.cachedInputTokens,costUsd:w?.costUsd,model:k});}}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 n=ne(r.providerStr);if(!n.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 n.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 X)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 n=await this.resolveFileRemoteTarget(e);if(n)return n.target.execute(n.agentRef,t,r);let s=Date.now(),i=r?.taskId??me("tsk"),a=new Date,d;try{d=Je(e,Array.from(this._agents.values()));}catch(v){if(v instanceof te){this.emit("task:start",{traceId:i,timestamp:a,agentRef:e,message:t,mode:"execute",metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let R=Date.now()-s,S={code:"AGENT_NOT_FOUND",message:v.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:R,error:S,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:S,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:R}}}throw v}let c=Array.isArray(d.provider)?d.provider[0]??"cli/claude":d.provider,u=r?.provider??c,m=r?.model??d.inline?.model;m&&m.includes("{{")&&(m=await this._templateEngine.render(m,{...r?.vars??{}}));let g;try{g=ne(u);}catch(v){this.emit("task:start",{traceId:i,timestamp:a,agentRef:e,message:t,mode:"execute",metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let R=Date.now()-s,S={code:"PROVIDER_ERROR",message:v.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:R,error:S,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:S,meta:{agentId:d.id,provider:u,model:m,durationMs:R}}}let p=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),h;try{h=await this.renderAgentPromptFull(e,{session:{mode:"execute",platform:r?.platform},vars:{user_input:t,...r?.vars??{}},messages:p});}catch(v){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${v instanceof Error?v.message:String(v)}`);}let x,w,A,k=m,P=false,I=v=>{P||(P=true,this.emit("task:start",{traceId:i,timestamp:a,agentRef:e,message:t,mode:"execute",pid:v,model:k,provider:u,codingAgentCommand:x,renderedPrompt:h,metadata:{...r?.metadata??{},provider:u},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},b=d.options,D=Array.isArray(b?.execute?.tools)?b.execute.tools:void 0,$=this._tools.size>0?this._filterToolsByMode(D):[],E=(()=>{let v=b?.execute;if(!v||Array.isArray(v))return;let{tools:R,effort:S,mode:T,...H}=v,q=Object.entries(H).filter(([,L])=>L!=null);if(q.length!==0)return Object.fromEntries(q.map(([L,W])=>[L,String(W)]))})(),N=d.inline?.max_steps;u.startsWith("api/")&&I();let U=false;try{let v=await g.execute(t,{model:m,effort:b?.execute?.effort,mode:b?.execute?.mode,context:r?.context,systemPrompt:h??d.inline?.system_prompt??d.inline?.prompt??d.description??`You are ${d.id}.`,additionalArgs:Array.isArray(b?.execute)?b.execute:void 0,tools:$.length>0?$:void 0,maxSteps:N,configOptions:E,timeoutMs:this._resolveTimeout("execute"),cwd:r?.cwd,env:{CREWX_AGENT_ID:d.id,CREWX_AGENT_ROLE:d.role??"",CREWX_AGENT_TEAM:d.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:u,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,a)},onPid:T=>I(T),onOutput:(T,H)=>{this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:T,level:H}),H==="stdout"&&this.emitToolEvents(i,e,u,T,d.id,r?.threadId??"","");},onTaskLog:T=>{this.emitTaskLogEntries(i,e,d.id,r?.threadId??"","",u,T);for(let H of T)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(H),level:"info"});},onCommand:T=>{x=T;},onUsage:T=>{w=T;},onExitCode:T=>{A=T;},onModel:T=>{k||(k=T);}});I();let R=Date.now()-s,S={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",result:v,durationMs:R,exitCode:A,inputTokens:w?.inputTokens,outputTokens:w?.outputTokens,cachedInputTokens:w?.cachedInputTokens,costUsd:w?.costUsd,model:k,metadata:Object.keys(S).length>0?S:void 0}),U=!0,{ok:!0,data:v,meta:{agentId:d.id,provider:u,model:m,durationMs:R,taskId:i}}}catch(v){I();let R=Date.now()-s,S={code:"EXECUTE_FAILED",message:v.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:R,error:S,exitCode:A,inputTokens:w?.inputTokens,outputTokens:w?.outputTokens,cachedInputTokens:w?.cachedInputTokens,costUsd:w?.costUsd,model:k,metadata:r?.metadata?{...r.metadata}:void 0}),U=true,{ok:false,data:"",error:S,meta:{agentId:d.id,provider:u,model:m,durationMs:R}}}finally{U||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:Date.now()-s,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:A??-1,inputTokens:w?.inputTokens,outputTokens:w?.outputTokens,cachedInputTokens:w?.cachedInputTokens,costUsd:w?.costUsd,model:k});}}};function nn(o,e){let t=rr(o)?o:void 0,r=rr(e)?e:void 0;if(!(!t&&!r))return {...t??{},...r??{}}}function rr(o){return typeof o=="object"&&o!==null&&!Array.isArray(o)}function fs(o,e){let t=Array.isArray(o)?o:void 0,r=Array.isArray(e)?e:void 0;if(!t&&!r)return;let n=a=>{if(!rr(a))return;let d=a.id;if(typeof d=="string")return `id:${d}`;let c=a.name;if(typeof c=="string")return `name:${c}`},s=new Set;for(let a of r??[]){let d=n(a);d&&s.add(d);}let i=[];for(let a of t??[]){let d=n(a);d&&s.has(d)||i.push(a);}for(let a of r??[])i.push(a);return i}async function on(o,e,t){if(o.some(n=>(Array.isArray(n.provider)?n.provider:[n.provider]).some(i=>i.startsWith("api/")))){let{registerApiProviders:n}=await Promise.resolve().then(()=>(Ht(),Wr));n(t?.api);}hs(o,e),ws(o,e),ys(o);}function ys(o){if(!o.some(r=>(Array.isArray(r.provider)?r.provider:[r.provider]).some(s=>s.startsWith("acp/"))))return;let{registerAcpProviders:t}=(Xt(),mt(Jr));t();}function hs(o,e){if(!o.some(i=>(Array.isArray(i.provider)?i.provider:[i.provider]).some(d=>d.startsWith("remote/"))))return;let r=e.providers;if(!Array.isArray(r))return;let{createRemoteProviderFactory:n}=(Qt(),mt(Gr)),s=new Map;for(let i of r)i.type==="remote"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&re("remote",n(s,ne));}function ws(o,e){if(!o.some(i=>(Array.isArray(i.provider)?i.provider:[i.provider]).some(d=>d.startsWith("plugin/"))))return;let r=e.providers;if(!Array.isArray(r))return;let{createPluginProviderFactory:n}=(Zt(),mt(en)),s=new Map;for(let i of r)i.type==="plugin"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&re("plugin",n(s));}l();var nr=class{detach(e){}};l();var vs="crewx:fs:",or=class{prefix;store;constructor(e){this.prefix=e?.prefix??vs,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("/"),n=[];for(let i of r)i==="."||i===""||(i===".."?n.pop():n.push(i));let s=n.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+"/"),n=[];for(let s of this.store.keys())if(s.startsWith(r)){let a=s.slice(r.length).split("/")[0];a&&!n.includes(a)&&n.push(a);}return n}toKey(e){return `${this.prefix}${e.replace(/\\/g,"/")}`}};l();function xs(o,e){let t=o.skills?.include;if(t===void 0)return [...e];if(t.length===0)return [];let r=new Set(t);return e.filter(n=>r.has(n))}Q();Ut();Ht();l();qt();de();l();ot();ct();function ks(o,e,t,r){let n=t.agentInfo?.name,s=e??n??o,a=(r.modes?.availableModes??[]).map(h=>({id:h.id,name:h.name,...h.description!=null?{description:h.description}:{}})),d=[],c=r.configOptions??[];for(let h of c)if(h.category==="thought_level"&&h.type==="select"){let x=h.options??[];if(x.length>0&&x[0]?.group!=null)for(let w of x)for(let A of w.options??[])d.push(A.value);else for(let w of x)w.value!=null&&d.push(w.value);}let m=(r.models?.availableModels??[]).map(h=>({id:h.modelId})),g=t.agentCapabilities??{},p={loadSession:g.loadSession??false,image:g.promptCapabilities?.image??false,audio:g.promptCapabilities?.audio??false,mcp:g.mcpCapabilities!=null};return {id:`acp/${o}`,name:s,modes:a,effort:d,models:m,capabilities:p}}async function sn(o){let e=ye[o];if(!e)return null;let t=e.meta?.displayName,r=new fe({spawn:e.spawn,cwd:process.cwd()});try{await r.connect(e.clientInfo);let n=r.initResponse;if(!n)return null;let s=e.buildSessionParams({cwd:process.cwd()}),i=await r.newSessionRaw(s);return ks(o,t,n,i)}catch{return null}finally{await r.dispose();}}async function As(){let o=Object.keys(ye),e=await Promise.allSettled(o.map(r=>sn(r))),t=[];for(let r of e)r.status==="fulfilled"&&r.value!==null&&t.push(r.value);return t}ot();Wt();ct();Xt();yt();Ae();l();var sr=0;function Ps(o){let e=Array.from(o.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(sr>=3)return "Error: Maximum delegation depth (3) reached. Cannot delegate further.";let r=t.agent,n=t.message,s=t.mode??"query";if(!e.includes(r))return `Error: Unknown agent "${r}". Available: ${e.join(", ")}`;sr++;try{if(s==="execute"){let a=await o.execute(r,n);return a.ok?a.data:`Error: ${a.error?.message??"Unknown error"}`}let i=await o.query(r,n);return i.ok?i.data:`Error: ${i.error?.message??"Unknown error"}`}finally{sr--;}}}}l();var an=typeof process<"u"?process.env:{};function Rs(){return an.CREWX_CLI||"npx crewx"}function Cs(){return an.CREWX_WORKSPACE||(typeof process<"u"?process.cwd():"/")}l();var Ts=/^[a-zA-Z0-9._-]+$/,ir=class{constructor(e){this.storage=e;}storage;listBoxes(e){this.validateId(e);let r=this.storage.listBoxes(e).map(n=>this.toBoxResponse(n));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(),n=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:n});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(!Ts.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return me("box")}};l();function bs(o,e,t,r,n){let{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}=r,d=s*i,c=s*a,u=d+c,m=e.getThreadMessages(o),g=[],p=0,h=false,x=[];for(let k=0;k<m.length;k+=2){let P=m[k],I=m[k+1],b=P?.content||"",D=I?.content||"",$=n.countTokens(b+D),E=[];P&&E.push(P),I&&E.push(I),x.push({messages:E,tokens:$});}for(let k=x.length-1;k>=0;k--){let P=x[k];if(p+P.tokens>d){h=true;break}p+=P.tokens,g.unshift(...P.messages);}let w=[],A=0;if(h&&c>0)try{let{boxes:k}=t.listBoxes(o);for(let P=k.length-1;P>=0;P--){let I=k[P],b=I.summaryTokens??I.sourceTokens;if(A+b>c)break;A+=b,w.unshift({boxId:I.id,seq:I.seq,taskCount:I.taskCount,sourceTokens:I.sourceTokens,summary:I.summary,previewFirst:I.previewFirst,previewMid:I.previewMid,previewLast:I.previewLast,createdAt:I.createdAt});}}catch(k){if(k instanceof Error&&!/not found/i.test(k.message))throw k}return {hot:g,warm:w,hotTokens:p,warmTokens:A,hotOverflow:h,totalBudget:u,config:{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}}}Ae();ue();l();var ut=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},Fe=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),n=Math.max(1,r.maxConcurrency??5),s=r.timeoutMs,i=r.failFast??false,a=r.callbacks,d=r.evaluateTaskSuccess??(()=>true),c=[],u=0,m=0,g=0,p=false,h=0,x=performance.now(),w=async E=>{a?.onTaskStart&&await a.onTaskStart(E),g+=1;let N=new AbortController,U={signal:N.signal},v,R;typeof s=="number"&&Number.isFinite(s)&&s>0&&(R=new Promise((q,L)=>{v=setTimeout(()=>{let W=new ut(E.id,s);N.abort(W),L(W);},s);}));let S=performance.now(),T=E.run(U),H=R?Promise.race([T,R]):T;try{let q=await H,L=performance.now(),W=L-S,he=d(q,E),We={taskId:E.id,success:he,value:q,durationMs:W,startedAt:S,finishedAt:L,metadata:E.metadata,aborted:!1};c.push(We),he?u+=1:m+=1,a?.onTaskComplete&&await a.onTaskComplete(We),i&&!he&&(p=!0);}catch(q){let L=performance.now(),W=L-S,he=q instanceof Error?q:new Error(String(q)),We={taskId:E.id,success:false,error:he,durationMs:W,startedAt:S,finishedAt:L,metadata:E.metadata,aborted:N.signal.aborted};c.push(We),m+=1,a?.onError&&await a.onError(E,he,W),i&&(p=true);}finally{v&&clearTimeout(v),R&&T.catch(()=>{});}},A=async()=>{for(;!p;){let E=h;if(E>=e.length)break;h+=1;let N=e[E];if(!N||(await w(N),p))break}},k=Math.min(n,e.length),P=[];for(let E=0;E<k;E++)P.push(A());await Promise.all(P);let b=performance.now()-x,D=c.length?c.reduce((E,N)=>E+N.durationMs,0)/c.length:0,$=b>0?c.length/(b/1e3):c.length;return this.metrics={totalTasks:e.length,startedTasks:g,completedTasks:c.length,successCount:u,failureCount:m,totalDurationMs:b,averageDurationMs:D,throughput:$},c}getMetrics(){return this.metrics}mergeOptions(e){return {maxConcurrency:e.maxConcurrency??this.defaults.maxConcurrency,timeoutMs:e.timeoutMs??this.defaults.timeoutMs,failFast:e.failFast??this.defaults.failFast,evaluateTaskSuccess:e.evaluateTaskSuccess??this.defaults.evaluateTaskSuccess,callbacks:this.mergeCallbacks(this.defaults.callbacks,e.callbacks)}}mergeCallbacks(e,t){if(!(!e&&!t))return {onTaskStart:async r=>{e?.onTaskStart&&await e.onTaskStart(r),t?.onTaskStart&&await t.onTaskStart(r);},onTaskComplete:async r=>{e?.onTaskComplete&&await e.onTaskComplete(r),t?.onTaskComplete&&await t.onTaskComplete(r);},onError:async(r,n,s)=>{e?.onError&&await e.onError(r,n,s),t?.onError&&await t.onError(r,n,s);}}}};l();l();var qe=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 dn=3,ln=3e4,cn=500,Ss=o=>{if(typeof o!="number"||Number.isNaN(o)||!Number.isFinite(o))return dn;let e=Math.floor(o);return e>0?e:dn},Es=o=>o===void 0||typeof o!="number"||Number.isNaN(o)||o<=0?ln:o,_s=o=>{if(!o)return {maxRetries:0,retryDelay:cn};let e=Number.isInteger(o.maxRetries)&&o.maxRetries>=0?o.maxRetries:0,t=typeof o.retryDelay=="number"&&o.retryDelay>=0?o.retryDelay:cn;return {maxRetries:e,retryDelay:t}},ar=o=>{let e=o.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},Is=(o,e)=>o<=0?Promise.resolve():new Promise((t,r)=>{let n=setTimeout(()=>{e.removeEventListener("abort",s),t();},o),s=()=>{clearTimeout(n),r(ar(e));};if(e.aborted){s();return}e.addEventListener("abort",s,{once:true});}),Os=async(o,e,t)=>{let r,n;for(let s=0;s<=e.maxRetries;s++){if(t.aborted)throw ar(t);try{let i=await o();if(r=i,i.success||s===e.maxRetries)return i}catch(i){if(n=i,t.aborted)throw ar(t);if(s===e.maxRetries)throw i instanceof Error?i:new Error(String(i))}s<e.maxRetries&&await Is(e.retryDelay,t);}if(r)return r;throw n?n instanceof Error?n:new Error(String(n)):new Error("Parallel helper encountered an unexpected state")},un=(o,e,t)=>{e.completed+=1,t?e.success+=1:e.failure+=1;try{o.onProgress?.(e.completed,e.total);}catch(r){process.env.NODE_ENV!=="production"&&console.warn("Parallel helper onProgress callback threw an error:",r);}},Ms=o=>o.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 n=r.error??new Error("Unknown error");return {agentId:t.request.agentId,content:n.message,success:false,metadata:{error:n.message,aborted:r.aborted??false,requestIndex:t.index,mode:t.mode}}}),Ns=o=>o.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")}}),$s=(o,e)=>({onTaskComplete:async t=>{un(e,o,t.success);},onError:async()=>{un(e,o,false);}}),pn=async(o,e,t={})=>{if(!Array.isArray(o))throw new TypeError("Parallel helpers expect an array of requests");if(o.length===0){let w={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?.(w),[]}let r=Ss(t.concurrency),n=Es(t.timeout),s=_s(t.retryPolicy),i=new Fe,a=new qe,d=o.map((x,w)=>({id:`${e}:${x.agentId??"anonymous"}:${w}`,metadata:{index:w,mode:e,request:x},run:A=>Os(()=>e==="query"?a.query(x):a.execute(x),s,A.signal)})),c={completed:0,success:0,failure:0,total:o.length},u=await i.run(d,{maxConcurrency:r,timeoutMs:n,evaluateTaskSuccess:x=>x.success,callbacks:$s(c,t)}),m=Ms(u),g=Ns(u),p=i.getMetrics(),h={total:o.length,completed:o.length,successCount:m.filter(x=>x.success).length,failureCount:m.filter(x=>!x.success).length,results:m,errors:g,metrics:p};return t.onComplete?.(h),m},Ds=(o,e)=>pn(o,"query",e),Ls=(o,e)=>pn(o,"execute",e);Zt();Qt();Yt();Gt();l();l();var pt=class{capabilities={required:[]}};l();l();l();var gn=2e3;function mn(o){let e=o.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=gn?e:e.slice(0,gn-11)+" [redacted]"}var Vs=10*1024*1024,zs={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function dr(o,e){return o===void 0?true:Array.isArray(o)?o.includes(e):o===e}function Ks(o,e){return o===void 0?true:Array.isArray(o)?o.some(t=>e.includes(t)):e.includes(o)}function yn(o){if(typeof o=="number")return o;let e=o.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*(zs[r]??1))}function hn(o){return typeof o=="string"}function wn(o){try{let e=statSync(o);return e.size>Vs?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${o} (${e.size} bytes)
53
- `),null):readFileSync(o,"utf8").split(`
54
- `).length}catch{return null}}function vn(o){try{return statSync(o).size}catch{return null}}function Js(o,e,t){if(!o)return true;let r=e,n=r?.path??r?.file_path??r?.filePath??r?.filename;if(typeof n!="string")return false;if(Y(n,o))return true;if(t&&n.startsWith("/")){let{relative:s,isAbsolute:i}=B("path");if(i(n)){let a=s(t,n);if(a&&!a.startsWith("..")&&Y(a,o))return true}}return false}function Xs(o,e){return o?JSON.stringify(e).includes(o):true}function Gs(o,e){if(!o)return true;try{let t=new RegExp(o),r=JSON.stringify(e);return t.test(r)}catch{return false}}function Ys(o,e){if(!o)return true;try{let t=new RegExp(o),r=JSON.stringify(e);return t.test(r)}catch{return false}}function Qs(o,e){if(o.pathSizeMin===void 0&&o.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(o.pathSizeMin!==void 0)if(hn(o.pathSizeMin)){let n=vn(r);if(n===null||n<yn(o.pathSizeMin))return false}else {let n=wn(r);if(n===null||n<o.pathSizeMin)return false}if(o.pathSizeMax!==void 0)if(hn(o.pathSizeMax)){let n=vn(r);if(n===null||n>yn(o.pathSizeMax))return false}else {let n=wn(r);if(n===null||n>o.pathSizeMax)return false}return true}function Zs(o){let e=[],t=[];for(let r=0;r<o.length;r++){let n=o[r];if(!n||typeof n!="object"){t.push(`Hook at index ${r}: not an object, skipping`);continue}let s=n;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 cr=class extends pt{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,n=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)){n&&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(`
55
-
56
- `)):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=mn(t.message).slice(0,500)));let n=`[${new Date().toISOString()}] HOOK: ${JSON.stringify(r)}
57
- `;appendFileSync(e,n,{encoding:"utf8",mode:384});}catch{}}matchEntryLevel(e,t){if(e.provider!==void 0){let r=t.provider.replace(/^cli\//,"");if(!dr(e.provider,r))return false}if(e.team!==void 0){let n=this.agentMap.get(t.agent.id)?.team??t.agent.team;if(!dr(e.team,n))return false}if(e.role!==void 0){let n=this.agentMap.get(t.agent.id)?.role??t.agent.role;if(!dr(e.role,n))return false}if(e.tag!==void 0){let n=this.agentMap.get(t.agent.id)?.tags??[];if(!Ks(e.tag,n))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)||!Xs(e.pattern,t.tool.input)||!Gs(e.regex,t.tool.input)||!Js(e.pathPattern,t.tool.input,t.cwd)||!Qs(e,t.tool.input)||!Ys(e.whenInputRegex,t.tool.input))}hasFired(e,t){try{let r=this.firedFilePath(e);if(!existsSync(r))return !1;let n=JSON.parse(readFileSync(r,"utf8"));return Array.isArray(n.fired)&&n.fired.includes(t)}catch{return false}}markFired(e,t){try{let r=this.firedFilePath(e);mkdirSync(dirname(r),{recursive:!0,mode:448});let n=existsSync(r)?JSON.parse(readFileSync(r,"utf8")):{fired:[]};Array.isArray(n.fired)||(n.fired=[]),n.fired.includes(t)||(n.fired.push(t),writeFileSync(r,JSON.stringify(n),{mode:384}));}catch(r){process.stderr.write(`[YamlHookPlugin] once state write failed: ${r}
58
- `);}}firedFilePath(e){let t=createHash("sha1").update(e).digest("hex");return join(homedir(),".crewx","sessions",t,"fired-rules.json")}};l();l();l();function ei(o){let e=o.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}}}l();var ur=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;}};l();function ti(o){return o}function ri(o){return {name:o.name,async attach(e){let t=await o.configFactory(e),n=e.registerChannelAdapter,s=o.instanceId??o.name;n&&await n({adapter:o.adapter,instanceId:s,config:t}),o.onAttach&&await o.onAttach(e);},async detach(e){let r=e.unregisterChannelAdapter;r&&await r(o.instanceId??o.name),o.onDetach&&await o.onDetach(e);}}}Ye();export{ye as ACP_ADAPTERS,fe as AcpConnection,se as AcpProtocolError,$e as AcpProviderRuntime,ur as AdapterError,te as AgentNotFoundError,qe as AgentRuntime,gr as AgentSkillsSchema,ie as BUILTIN_ADAPTERS,or as BrowserFsAdapter,X as ClientToolCallRequiredError,le as ConfigLoadError,tr as Crewx,nr as CrewxPlugin,ge as DocumentLoader,F as LayoutLoadError,_e as LayoutLoader,Oe as LayoutRenderer,De as McpHttpTransport,nt as NodeFsAdapter,Fe as ParallelRunner,ut as ParallelRunnerTimeoutError,Ue as PluginProviderRuntime,oe as PropsValidationError,Ie as PropsValidator,_ as ProviderError,Te as RateLimitError,Le as RemoteAgentManager,je as RemoteProviderRuntime,ir as SdkBoxService,Ee as TemplateEngine,Me as TypedEventEmitter,Ne as VercelProviderRuntime,cr as YamlHookPlugin,bs as buildContext,st as claudeAcpAdapter,Qe as claudeAdapter,it as codexAcpAdapter,tt as codexAdapter,dt as copilotAcpAdapter,et as copilotAdapter,$t as createAdapterContext,Ps as createDelegateTool,Lt as createHandler,Zr as createPluginProviderFactory,ne as createProvider,Xr as createRemoteProviderFactory,Mt as createScopedAdapterStore,Ft as defaultExtractText,pe as defaultFsAdapter,G as defaultParseEvent,ti as defineChannelAdapter,ri as defineChannelAdapterPlugin,St as escapeHandlebarsHelper,Et as formatFileSizeHelper,Ot as formatTimestamp,_t as formatTimestampHelper,at as geminiAcpAdapter,Ze as geminiAdapter,To as generateFingerprint,me as generateId,Eo as getSyncWindowStore,jt as hashWorkspaceId,bt as lengthHelper,ze as loadYamlFile,Ce as materializeWindowsSpawnProgram,Ur as normalizeWorkspacePath,lt as opencodeAcpAdapter,rt as opencodeAdapter,Rt as parseStdoutEvent,V as parseUsage,Ve as parseYamlContent,sn as queryAcpProviderMeta,As as queryAllAcpProviderMetas,Kr as registerAcpProviders,qr as registerApiProviders,re as registerProviderFactory,Je as resolveAgent,xs as resolveAgentSkills,Rs as resolveCrewxCli,Cs as resolveCrewxWorkspace,ft as resolveDefaultAgentsYaml,we as resolveTemplatesPath,yr as resolveWindowsExecutablePath,Re as resolveWindowsSpawnProgram,Ls as runExecutesParallel,_o as runInSyncWindow,Ds as runQueriesParallel,po as setAuditVerbose,ei as toTaskReader,Dt as toTemplateMessages,Tt as truncateHelper,Zs as validateHooksSchema};
51
+ `)}l();function Is(){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 wn(n,e=Pe){let t=e.resolvePath(n,`${Is()}.md`);return await e.exists(t)?e.readFile(t):""}He();l();var nt=new AsyncLocalStorage;function gr(n){if(n)return {parentTaskId:n.parentTaskId??null,rootTraceId:n.rootTraceId,callerAgentId:n.callerAgentId??null}}l();function Ms(n){return typeof n!="string"?"":n.replace(/</g,"&lt;").replace(/>/g,"&gt;")}function mr(n){return n.messages.map(e=>({text:Ms(e.text),isAssistant:e.isAssistant,timestamp:e.timestamp,metadata:e.metadata,files:void 0}))}l();l();var Ns={agentId:z$1.string().describe("The agent ID to query"),query:z$1.string().describe("The query message to send"),context:z$1.string().optional().describe("Additional context"),thread:z$1.string().optional().describe("Thread ID for conversation continuity")},Ds={agentId:z$1.string().describe("The agent ID to execute"),task:z$1.string().describe("The task description to execute"),context:z$1.string().optional().describe("Additional context"),thread:z$1.string().optional().describe("Thread ID for conversation continuity")};function xn(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",Ns,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)",Ds,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}});}l();function kn(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 vn(n,e){return e?await e(n)?null:new Response(JSON.stringify({error:"Unauthorized"}),{status:401,headers:{"Content-Type":"application/json"}}):null}function js(n,e){let t=new McpServer({name:"crewx-mcp-server",version:"1.0.0"},{capabilities:{tools:{}}});return xn(t,n,e),t}function fr(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=kn(o);if(s)return s;let i=await vn(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=js(n,t),c=new WebStandardStreamableHTTPServerTransport({sessionIdGenerator:()=>crypto.randomUUID(),onsessioninitialized:u=>{r.set(u,{transport:c,server:d});},onsessionclosed:u=>{r.delete(u);},enableJsonResponse:true});return await d.connect(c),c.handleRequest(o)}}l();function An(n){let e=z.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 yr(n){let e=An(n);return createHash("sha256").update(e).digest("hex")}function pi(n){return n?n.settings?.template?.exec:void 0}function gi(){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}=V("crypto");return n(8).toString("hex")}}var Or=class n extends rt{_agents;_templateEngine;_documentLoader;_layoutLoader;_layoutRenderer;_config;_projectRoot;_workspaceId;_workspaceName;_plugins=[];_tools=new Map;_activeAdapters=new Map;_pendingThreads=new Map;_remoteFactory;_remoteTargets=new Map;constructor(e,t={},r,o,s){super(),this._agents=new Map(e.map(d=>[d.id,d])),this._config=r,this._projectRoot=s??(typeof process<"u"?process.cwd():"/");let i=s??(typeof process<"u"?process.env.CREWX_WORKSPACE??process.cwd():"/");this._workspaceId=yr(i),this._workspaceName=basename(i);let a=pi(r);this._templateEngine=new Ye({execPolicy:t.execPolicy??a}),this._documentLoader=o??new Ce,this._layoutLoader=new Qe({templatesPath:Le()}),this._layoutRenderer=new tt,this._remoteFactory=t.remoteFactory;}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=resolve(s.location.replace("file://","")),a=s.external_agent_id??e.replace(/^@/,""),d=this._remoteTargets.get(i);d||(d=(this._remoteFactory??(p=>n.loadYaml(p)))(i),this._remoteTargets.set(i,d),d.catch(()=>this._remoteTargets.delete(i)));let c=await d,u=c.getAgent("@"+a),g=Array.isArray(u?.provider)?u?.provider[0]:u?.provider;if(g?.startsWith("remote/"))throw new Error(`Chained remotes not allowed: "${o}" \u2192 "${g}"`);return {target:c,agentRef:"@"+a}}static async loadBuiltInConfig(e){let{yamlPath:t,dir:r}=Vt(),o;try{o=readFileSync(t,"utf-8");}catch(i){throw new Error(`[@crewx/sdk] Cannot read built-in config: ${t}
52
+ ${i.message}`)}let s=mt(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 c=d;typeof c.path=="string"&&!isAbsolute(c.path)?i[a]={...c,path:resolve(r,c.path)}:i[a]=c;}else i[a]=d;return {...s,documents:i}}return s}static mergeCrewxConfig(e,t){let r=new Map;for(let v of e.agents??[])r.set(v.id,v);for(let v of t.agents??[])r.has(v.id)&&console.warn(`[agent-loader] User agent "${v.id}" overrides built-in`),r.set(v.id,v);let o=Array.from(r.values()),s={...e.layouts??{},...t.layouts??{}},i={...e.documents??{},...t.documents??{}},a=e,d=t,c=qn(a.vars,d.vars),u=qn(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 h=[...e.hooks??[],...t.hooks??[]],p=mi(a.providers,d.providers),f={...e},x={...t};for(let v of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete f[v],delete x[v];let _={...{...f,...x},agents:o,layouts:s,documents:i,skills:g};return h.length>0&&(_.hooks=h),c!==void 0&&(_.vars=c),u!==void 0&&(_.settings=u),p!==void 0&&(_.providers=p),_}static async loadYaml(e,t,r){let o=t?.includeBuiltIns!==false,s,i;if(o){let u=await n.loadBuiltInConfig(r);if(e!==void 0){let g=ft(e);s=n.mergeCrewxConfig(u,g),i=dirname(e);}else s=u,i=process.cwd();}else {if(e===void 0)throw new Error("[@crewx/sdk] loadYaml: path is required when includeBuiltIns is false");s=ft(e),i=dirname(e);}let a=new Ce(r);await a.load(s.documents,i);let d=s.agents??[];return await Bn(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 u=await n.loadBuiltInConfig(o);i=n.mergeCrewxConfig(u,e);}let a=new Ce(o);await a.load(i.documents,r??(typeof process<"u"?process.cwd():"/"));let d=i.agents??[];return await Bn(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=lr(t);return 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 fr(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??cr(r),a=e.defaultMode??"query",d=t.manifest.platform,c=e.agentRunner??{run:async(p,f,x)=>{let _=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${p}`,f,{threadId:x?.threadId,platform:d});return {output:_.ok?_.data:_.error?.message??""}}},u=e.onInbound??(async p=>{let f=p.routingHints?.agentId??e.defaultAgent;if(!f)return {accepted:false,reason:"no_agent"};let{output:x}=await c.run(f,p.text,{threadId:p.threadId});return {accepted:true,output:x}}),g=pr({instanceId:r,config:o,capabilities:s,db:i,agentRunner:c,onInbound:u}),h={adapter:t,ctx:g,state:"starting"};this._activeAdapters.set(r,h),this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"starting",timestamp:new Date});try{await t.start(g),h.state="started",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"started",timestamp:new Date});}catch(p){throw h.state="failed",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"failed",error:p instanceof Error?p:new Error(String(p)),timestamp:new Date}),this._activeAdapters.delete(r),p}}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}`);}async close(){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=>ae(a.role.toLowerCase(),d)))),o&&(i=i.filter(a=>a.team&&o.some(d=>ae(a.team.toLowerCase(),d)))),s&&(i=i.filter(a=>(Array.isArray(a.provider)?a.provider:[a.provider]).some(c=>s.some(u=>ae(c.toLowerCase(),u))))),i}renderAgentPrompt(e){let t=e.startsWith("@")?e.slice(1):e,r=this._agents.get(t);if(!r)throw new ue(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 ue(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),c=o.inline?.prompt??o.inline?.system_prompt??o.description??`You are an expert ${r}.`,u=await this._documentLoader.buildContext(),g=t?.env??(typeof process<"u"?process.env:{}),h=t?.vars?.security_key??gi(),p={...t?.vars??{},documents:u,env:g,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??""}},f=await this._templateEngine.render(c,p),x={mode:t?.session?.mode??"query",platform:t?.session?.platform??"cli",options:t?.session?.options??[]},R=o.provider,_=Array.isArray(R)?R:typeof R=="string"&&R.length>0?[R]:[],v=_.join(", ")||(typeof R=="string"?R:""),k=o.options,I=["goals","daily"],b={goals:false,daily:false},W;if(!Array.isArray(k)&&typeof k=="object"&&k!==null){let L=k;if("goals"in L){let F=L.goals;typeof F=="string"||Array.isArray(F)?b.goals=F:b.goals=!!F;}"daily"in L&&(b.daily=!!L.daily);let B={};for(let[F,A]of Object.entries(L))I.includes(F)||(B[F]=A);if(Object.keys(B).length>0){let F=_.some(N=>N.startsWith("cli/")),A={};for(let[N,E]of Object.entries(B)){let P={};if(Array.isArray(E))F&&(P.rawArgs=E);else if(typeof E=="object"&&E!==null){let H=E;Object.keys(H).length>0&&(P.named=H);}(P.named||P.rawArgs&&P.rawArgs.length>0)&&(A[N]=P);}W=Object.keys(A).length>0?A:void 0;}}let j=Array.isArray(k)?k:void 0,C={};for(let[L,B]of Object.entries(u))C[L]={content:B.content??"",toc:B.toc,summary:B.summary,path:B.path};if(b.goals){let L=join(this._projectRoot,"docs","goal"),B=await hn(L,void 0,b.goals);B&&(C.active_goals={content:B});}if(b.daily){let L=join(this._projectRoot,"docs","daily"),B=await wn(L);B&&(C.today_daily={content:B});}let Y={user_input:t?.vars?.user_input??void 0,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??"",provider:v,providerList:_,model:o.inline?.model,workingDirectory:o.working_directory??o.workingDirectory??".",inline:{...o.inline??{},prompt:f},specialties:o.specialties??[],capabilities:o.capabilities??[],remote:o.remote??null,optionsByMode:W,optionsArray:j},agentMetadata:{specialties:o.specialties??[],capabilities:o.capabilities??[],description:o.description??""},contextOptions:b,documents:C,skills:t?.skills??[],session:x,env:g,vars:{security_key:h,...t?.vars??{}},props:{...a??{},...t?.messages&&t.messages.length>0?{showConversationHistory:true}:{}},platform:x.platform,mode:x.mode,thread_id:t?.threadId??"",now:Ze(new Date),messages:t?.messages??[],tools:this._tools.size>0?{list:Array.from(this._tools.values()).map(L=>({name:L.name,description:L.description,parameters:L.parameters})),json:JSON.stringify(Array.from(this._tools.values()).map(L=>({name:L.name,description:L.description,parameters:L.parameters})),null,2),count:this._tools.size}:null,metadata:{}};return this._layoutRenderer.render(d,Y)}_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;let t=`crewx/__inline_${Date.now()}`;return this._layoutLoader.registerLayout(t,e.template),t}_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:mr(s)}catch{return}}_resolveTimeout(e){let t=nn();return e==="query"?t.queryMs:t.executeMs}emitToolEvents(e,t,r,o,s,i,a){try{let c=we[r]?.parseEvent?.(o)??tr(new Date().toISOString(),o);for(let u of c)u.type==="tool_use"&&u.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:u.toolName,rawName:u.toolName,input:u.toolInput?this.tryParseJson(u.toolInput):void 0,toolUseId:u.toolUseId}}),u.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:u.toolName??"unknown",rawName:u.toolName??"unknown",toolUseId:u.toolUseId,result:u.resultPreview,isError:u.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,r);let s=nt.getStore()??gr(r?.trace),i=r?.taskId??be("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null};return nt.run(d,async()=>{let c=Date.now(),u=new Date,g;try{g=ht(e,Array.from(this._agents.values()));}catch(A){if(A instanceof ue){this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let N=Date.now()-c,E={code:"AGENT_NOT_FOUND",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:E,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:E,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:N}}}throw A}d.callerAgentId=g.id;let h=Array.isArray(g.provider)?g.provider[0]??"cli/claude":g.provider,p=r?.provider??h,f=r?.model??g.inline?.model;f&&f.includes("{{")&&(f=await this._templateEngine.render(f,{...r?.vars??{}}));let x;try{x=ge(p);}catch(A){this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let N=Date.now()-c,E={code:"PROVIDER_ERROR",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:E,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:E,meta:{agentId:g.id,provider:p,model:f,durationMs:N}}}let R=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),_;try{_=await this.renderAgentPromptFull(e,{session:{mode:"query",platform:r?.platform},vars:{user_input:t,...r?.vars??{}},messages:R,threadId:r?.threadId});}catch(A){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${A instanceof Error?A.message:String(A)}`);}let v,k,I,b=f,W=false,j=A=>{W||(W=true,this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"query",pid:A,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:b,provider:p,codingAgentCommand:v,renderedPrompt:_,metadata:{...r?.metadata??{},provider:p},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},C=g.options,q=Array.isArray(C?.query?.tools)?C.query.tools:void 0,Y=this._tools.size>0?this._filterToolsByMode(q):[],L=(()=>{let A=C?.query;if(!A||Array.isArray(A))return;let{tools:N,effort:E,mode:P,...H}=A,Q=Object.entries(H).filter(([,J])=>J!=null);if(Q.length!==0)return Object.fromEntries(Q.map(([J,Bt])=>[J,String(Bt)]))})(),B=g.inline?.max_steps;p.startsWith("api/")&&j();let F=false;try{let A=await x.query(t,{model:f,effort:C?.query?.effort,mode:C?.query?.mode,context:r?.context,systemPrompt:_??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(C?.query)?C.query:void 0,tools:Y.length>0?Y:void 0,maxSteps:B,configOptions:L,timeoutMs:this._resolveTimeout("query"),cwd:r?.cwd,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:p,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,u)},onPid:P=>j(P),onOutput:(P,H)=>{this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:P,level:H}),H==="stdout"&&this.emitToolEvents(i,e,p,P,g.id,r?.threadId??"","");},onTaskLog:P=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",p,P);for(let H of P)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(H),level:"info"});},onCommand:P=>{v=P;},onUsage:P=>{k=P;},onExitCode:P=>{I=P;},onModel:P=>{b||(b=P);}});j();let N=Date.now()-c,E={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",result:A,durationMs:N,exitCode:I,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:k?.costUsd,model:b,metadata:Object.keys(E).length>0?E:void 0}),F=!0,{ok:!0,data:A,meta:{agentId:g.id,provider:p,model:f,durationMs:N,taskId:i}}}catch(A){if(A instanceof se){let P=be("thd");return this._pendingThreads.set(P,{agentRef:g.id,providerStr:p,continuationState:A.continuationState,toolCall:A.toolCall,traceId:i,startMs:c,model:f}),F=true,{ok:true,status:"requires_action",data:"",toolCall:A.toolCall,threadId:P,meta:{agentId:g.id,provider:p,model:f,durationMs:Date.now()-c,taskId:i}}}j();let N=Date.now()-c,E={code:"QUERY_FAILED",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:E,exitCode:I,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:k?.costUsd,model:b,metadata:r?.metadata?{...r.metadata}:void 0}),F=true,{ok:false,data:"",error:E,meta:{agentId:g.id,provider:p,model:f,durationMs:N,taskId:i}}}finally{F||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:Date.now()-c,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:I??-1,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:k?.costUsd,model:b});}})}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=ge(r.providerStr);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 se)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,r);let s=nt.getStore()??gr(r?.trace),i=r?.taskId??be("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null};return nt.run(d,async()=>{let c=Date.now(),u=new Date,g;try{g=ht(e,Array.from(this._agents.values()));}catch(A){if(A instanceof ue){this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let N=Date.now()-c,E={code:"AGENT_NOT_FOUND",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:E,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:E,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:N}}}throw A}d.callerAgentId=g.id;let h=Array.isArray(g.provider)?g.provider[0]??"cli/claude":g.provider,p=r?.provider??h,f=r?.model??g.inline?.model;f&&f.includes("{{")&&(f=await this._templateEngine.render(f,{...r?.vars??{}}));let x;try{x=ge(p);}catch(A){this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let N=Date.now()-c,E={code:"PROVIDER_ERROR",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:E,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:E,meta:{agentId:g.id,provider:p,model:f,durationMs:N}}}let R=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),_;try{_=await this.renderAgentPromptFull(e,{session:{mode:"execute",platform:r?.platform},vars:{user_input:t,...r?.vars??{}},messages:R,threadId:r?.threadId});}catch(A){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${A instanceof Error?A.message:String(A)}`);}let v,k,I,b=f,W=false,j=A=>{W||(W=true,this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"execute",pid:A,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:b,provider:p,codingAgentCommand:v,renderedPrompt:_,metadata:{...r?.metadata??{},provider:p},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},C=g.options,q=Array.isArray(C?.execute?.tools)?C.execute.tools:void 0,Y=this._tools.size>0?this._filterToolsByMode(q):[],L=(()=>{let A=C?.execute;if(!A||Array.isArray(A))return;let{tools:N,effort:E,mode:P,...H}=A,Q=Object.entries(H).filter(([,J])=>J!=null);if(Q.length!==0)return Object.fromEntries(Q.map(([J,Bt])=>[J,String(Bt)]))})(),B=g.inline?.max_steps;p.startsWith("api/")&&j();let F=false;try{let A=await x.execute(t,{model:f,effort:C?.execute?.effort,mode:C?.execute?.mode,context:r?.context,systemPrompt:_??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(C?.execute)?C.execute:void 0,tools:Y.length>0?Y:void 0,maxSteps:B,configOptions:L,timeoutMs:this._resolveTimeout("execute"),cwd:r?.cwd,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:p,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,u)},onPid:P=>j(P),onOutput:(P,H)=>{this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:P,level:H}),H==="stdout"&&this.emitToolEvents(i,e,p,P,g.id,r?.threadId??"","");},onTaskLog:P=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",p,P);for(let H of P)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(H),level:"info"});},onCommand:P=>{v=P;},onUsage:P=>{k=P;},onExitCode:P=>{I=P;},onModel:P=>{b||(b=P);}});j();let N=Date.now()-c,E={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",result:A,durationMs:N,exitCode:I,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:k?.costUsd,model:b,metadata:Object.keys(E).length>0?E:void 0}),F=!0,{ok:!0,data:A,meta:{agentId:g.id,provider:p,model:f,durationMs:N,taskId:i}}}catch(A){j();let N=Date.now()-c,E={code:"EXECUTE_FAILED",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:E,exitCode:I,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:k?.costUsd,model:b,metadata:r?.metadata?{...r.metadata}:void 0}),F=true,{ok:false,data:"",error:E,meta:{agentId:g.id,provider:p,model:f,durationMs:N}}}finally{F||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:Date.now()-c,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:I??-1,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:k?.costUsd,model:b});}})}};function qn(n,e){let t=Mr(n)?n:void 0,r=Mr(e)?e:void 0;if(!(!t&&!r))return {...t??{},...r??{}}}function Mr(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function mi(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(!Mr(a))return;let d=a.id;if(typeof d=="string")return `id:${d}`;let c=a.name;if(typeof c=="string")return `name:${c}`},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}async function Bn(n,e,t){if(n.some(o=>(Array.isArray(o.provider)?o.provider:[o.provider]).some(i=>i.startsWith("api/")))){let{registerApiProviders:o}=await Promise.resolve().then(()=>(wr(),Tn));o(t?.api);}yi(n,e),hi(n,e),fi(n);}function fi(n){if(!n.some(r=>(Array.isArray(r.provider)?r.provider:[r.provider]).some(s=>s.startsWith("acp/"))))return;let{registerAcpProviders:t}=(Cr(),zt(Mn));t();}function yi(n,e){if(!n.some(i=>(Array.isArray(i.provider)?i.provider:[i.provider]).some(d=>d.startsWith("remote/"))))return;let r=e.providers;if(!Array.isArray(r))return;let{createRemoteProviderFactory:o}=(Er(),zt(Dn)),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,ge));}function hi(n,e){if(!n.some(i=>(Array.isArray(i.provider)?i.provider:[i.provider]).some(d=>d.startsWith("plugin/"))))return;let r=e.providers;if(!Array.isArray(r))return;let{createPluginProviderFactory:o}=(Sr(),zt(Un)),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));}l();var Nr=class{detach(e){}};l();var wi="crewx:fs:",Dr=class{prefix;store;constructor(e){this.prefix=e?.prefix??wi,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,"/")}`}};l();function xi(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))}de();hr();wr();l();kr();ke();l();Tt();Nt();Et();function ki(n,e,t,r){let o=t.agentInfo?.name,s=e??o??n,a=(r.modes?.availableModes??[]).map(f=>({id:f.id,name:f.name,...f.description!=null?{description:f.description}:{}})),d=[],c=r.configOptions??[];for(let f of c)if(f.category==="thought_level"&&f.type==="select"){let x=f.options??[];if(x.length>0&&x[0]?.group!=null)for(let R of x)for(let _ of R.options??[])d.push(_.value);else for(let R of x)R.value!=null&&d.push(R.value);}let u=r.models?.availableModels??[],g=n==="claude"?In.map(f=>({id:f.id,name:f.name})):u.map(f=>({id:f.modelId})),h=t.agentCapabilities??{},p={loadSession:h.loadSession??false,image:h.promptCapabilities?.image??false,audio:h.promptCapabilities?.audio??false,mcp:h.mcpCapabilities!=null};return {id:`acp/${n}`,name:s,modes:a,effort:d,models:g,capabilities:p}}async function Wn(n){let e=Se[n];if(!e)return null;let t=e.meta?.displayName,r=new Ee({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 ki(n,t,o,i)}catch{return null}finally{await r.dispose();}}async function vi(){let n=Object.keys(Se),e=await Promise.allSettled(n.map(r=>Wn(r))),t=[];for(let r of e)r.status==="fulfilled"&&r.value!==null&&t.push(r.value);return t}Tt();vr();Nt();Cr();Kt();He();l();var $r=0;function _i(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($r>=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(", ")}`;$r++;try{if(s==="execute"){let a=await n.execute(r,o);return a.ok?a.data:`Error: ${a.error?.message??"Unknown error"}`}let i=await n.query(r,o);return i.ok?i.data:`Error: ${i.error?.message??"Unknown error"}`}finally{$r--;}}}}l();var zn=typeof process<"u"?process.env:{};function Ai(){return zn.CREWX_CLI||"npx crewx"}function Ri(){return zn.CREWX_WORKSPACE||(typeof process<"u"?process.cwd():"/")}l();var Pi=/^[a-zA-Z0-9._-]+$/,Lr=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(!Pi.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return be("box")}};l();function Ci(n,e,t,r,o){let{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}=r,d=s*i,c=s*a,u=d+c,g=e.getThreadMessages(n),h=[],p=0,f=false,x=[];for(let v=0;v<g.length;v+=2){let k=g[v],I=g[v+1],b=k?.content||"",W=I?.content||"",j=o.countTokens(b+W),C=[];k&&C.push(k),I&&C.push(I),x.push({messages:C,tokens:j});}for(let v=x.length-1;v>=0;v--){let k=x[v];if(p+k.tokens>d){f=true;break}p+=k.tokens,h.unshift(...k.messages);}let R=[],_=0;if(f&&c>0)try{let{boxes:v}=t.listBoxes(n);for(let k=v.length-1;k>=0;k--){let I=v[k],b=I.summaryTokens??I.sourceTokens;if(_+b>c)break;_+=b,R.unshift({boxId:I.id,seq:I.seq,taskCount:I.taskCount,sourceTokens:I.sourceTokens,summary:I.summary,previewFirst:I.previewFirst,previewMid:I.previewMid,previewLast:I.previewLast,createdAt:I.createdAt});}}catch(v){if(v instanceof Error&&!/not found/i.test(v.message))throw v}return {hot:h,warm:R,hotTokens:p,warmTokens:_,hotOverflow:f,totalBudget:u,config:{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}}}He();Re();l();var Dt=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},ut=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),c=[],u=0,g=0,h=0,p=false,f=0,x=performance.now(),R=async C=>{a?.onTaskStart&&await a.onTaskStart(C),h+=1;let q=new AbortController,Y={signal:q.signal},L,B;typeof s=="number"&&Number.isFinite(s)&&s>0&&(B=new Promise((E,P)=>{L=setTimeout(()=>{let H=new Dt(C.id,s);q.abort(H),P(H);},s);}));let F=performance.now(),A=C.run(Y),N=B?Promise.race([A,B]):A;try{let E=await N,P=performance.now(),H=P-F,Q=d(E,C),J={taskId:C.id,success:Q,value:E,durationMs:H,startedAt:F,finishedAt:P,metadata:C.metadata,aborted:!1};c.push(J),Q?u+=1:g+=1,a?.onTaskComplete&&await a.onTaskComplete(J),i&&!Q&&(p=!0);}catch(E){let P=performance.now(),H=P-F,Q=E instanceof Error?E:new Error(String(E)),J={taskId:C.id,success:false,error:Q,durationMs:H,startedAt:F,finishedAt:P,metadata:C.metadata,aborted:q.signal.aborted};c.push(J),g+=1,a?.onError&&await a.onError(C,Q,H),i&&(p=true);}finally{L&&clearTimeout(L),B&&A.catch(()=>{});}},_=async()=>{for(;!p;){let C=f;if(C>=e.length)break;f+=1;let q=e[C];if(!q||(await R(q),p))break}},v=Math.min(o,e.length),k=[];for(let C=0;C<v;C++)k.push(_());await Promise.all(k);let b=performance.now()-x,W=c.length?c.reduce((C,q)=>C+q.durationMs,0)/c.length:0,j=b>0?c.length/(b/1e3):c.length;return this.metrics={totalTasks:e.length,startedTasks:h,completedTasks:c.length,successCount:u,failureCount:g,totalDurationMs:b,averageDurationMs:W,throughput:j},c}getMetrics(){return this.metrics}mergeOptions(e){return {maxConcurrency:e.maxConcurrency??this.defaults.maxConcurrency,timeoutMs:e.timeoutMs??this.defaults.timeoutMs,failFast:e.failFast??this.defaults.failFast,evaluateTaskSuccess:e.evaluateTaskSuccess??this.defaults.evaluateTaskSuccess,callbacks:this.mergeCallbacks(this.defaults.callbacks,e.callbacks)}}mergeCallbacks(e,t){if(!(!e&&!t))return {onTaskStart:async r=>{e?.onTaskStart&&await e.onTaskStart(r),t?.onTaskStart&&await t.onTaskStart(r);},onTaskComplete:async r=>{e?.onTaskComplete&&await e.onTaskComplete(r),t?.onTaskComplete&&await t.onTaskComplete(r);},onError:async(r,o,s)=>{e?.onError&&await e.onError(r,o,s),t?.onError&&await t.onError(r,o,s);}}}};l();l();var pt=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 Vn=3,Kn=3e4,Jn=500,Ti=n=>{if(typeof n!="number"||Number.isNaN(n)||!Number.isFinite(n))return Vn;let e=Math.floor(n);return e>0?e:Vn},bi=n=>n===void 0||typeof n!="number"||Number.isNaN(n)||n<=0?Kn:n,Ei=n=>{if(!n)return {maxRetries:0,retryDelay:Jn};let e=Number.isInteger(n.maxRetries)&&n.maxRetries>=0?n.maxRetries:0,t=typeof n.retryDelay=="number"&&n.retryDelay>=0?n.retryDelay:Jn;return {maxRetries:e,retryDelay:t}},jr=n=>{let e=n.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},Si=(n,e)=>n<=0?Promise.resolve():new Promise((t,r)=>{let o=setTimeout(()=>{e.removeEventListener("abort",s),t();},n),s=()=>{clearTimeout(o),r(jr(e));};if(e.aborted){s();return}e.addEventListener("abort",s,{once:true});}),Ii=async(n,e,t)=>{let r,o;for(let s=0;s<=e.maxRetries;s++){if(t.aborted)throw jr(t);try{let i=await n();if(r=i,i.success||s===e.maxRetries)return i}catch(i){if(o=i,t.aborted)throw jr(t);if(s===e.maxRetries)throw i instanceof Error?i:new Error(String(i))}s<e.maxRetries&&await Si(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")},Xn=(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);}},Oi=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}}}),Mi=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")}}),Ni=(n,e)=>({onTaskComplete:async t=>{Xn(e,n,t.success);},onError:async()=>{Xn(e,n,false);}}),Gn=async(n,e,t={})=>{if(!Array.isArray(n))throw new TypeError("Parallel helpers expect an array of requests");if(n.length===0){let R={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?.(R),[]}let r=Ti(t.concurrency),o=bi(t.timeout),s=Ei(t.retryPolicy),i=new ut,a=new pt,d=n.map((x,R)=>({id:`${e}:${x.agentId??"anonymous"}:${R}`,metadata:{index:R,mode:e,request:x},run:_=>Ii(()=>e==="query"?a.query(x):a.execute(x),s,_.signal)})),c={completed:0,success:0,failure:0,total:n.length},u=await i.run(d,{maxConcurrency:r,timeoutMs:o,evaluateTaskSuccess:x=>x.success,callbacks:Ni(c,t)}),g=Oi(u),h=Mi(u),p=i.getMetrics(),f={total:n.length,completed:n.length,successCount:g.filter(x=>x.success).length,failureCount:g.filter(x=>!x.success).length,results:g,errors:h,metrics:p};return t.onComplete?.(f),g},Di=(n,e)=>Gn(n,"query",e),$i=(n,e)=>Gn(n,"execute",e);Sr();l();l();var Be=class{resolveDbPath(){return process.env.CREWX_DB?process.env.CREWX_DB:process.env.CREWX_TRACES_DB?process.env.CREWX_TRACES_DB:join(Ui.homedir(),".crewx","crewx.db")}resolveDbPaths(){return [this.resolveDbPath()]}isMissingTableError(e){return e instanceof Error&&/no such table:/i.test(e.message)}dbExists(e){return existsSync(e??this.resolveDbPath())}};l();function ye(n){let e=V("better-sqlite3"),{drizzle:t}=V("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"),{db:t(r),runRaw:(o,s=[])=>r.prepare(o).run(...s),close:()=>r.close()}}l();var Qn=new Set,Hi={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 qi(n,e){return (n.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function Bi(n,e){if(e>0||!qi(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(Hi))r.has(o)||n.run(`ALTER TABLE tasks ADD COLUMN ${o} ${s}`);}function Wi(n,e,t){let r=n.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(readFileSync(z__default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=z__default.join(e,`${i.tag}.sql`);if(!existsSync(a))continue;let d=readFileSync(a,"utf-8"),c=createHash("sha256").update(d).digest("hex");if(o.has(c))continue;let u=/ALTER\s+TABLE\s+[`"]?(\w+)[`"]?\s+ADD\s+[`"]?(\w+)[`"]?/gi,g=[],h;for(;(h=u.exec(d))!==null;)g.push({table:h[1],column:h[2]});if(g.length===0||!d.split(/-->\s*statement-breakpoint/).map(x=>x.trim()).filter(Boolean).every(x=>/^ALTER\s+TABLE\s+.+\s+ADD\s+/i.test(x)))continue;g.every(({table:x,column:R})=>n.all(`PRAGMA table_info("${x}")`).some(v=>v.name===R))&&n.run(t`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${c}, ${i.when})`);}}function zi(n){let{migrate:e}=V("drizzle-orm/better-sqlite3/migrator"),{sql:t}=V("drizzle-orm"),r=[z__default.join(m,"../migrations"),z__default.join(m,"migrations"),z__default.join(m,"../../../../drizzle/migrations"),z__default.join(process.cwd(),"drizzle/migrations")],o=r.find(c=>existsSync(z__default.join(c,"meta/_journal.json")));if(!o)throw new Error(`migrations folder not found. Searched:
53
+ ${r.join(`
54
+ `)}`);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),Bi(n,i),s?.cnt&&Wi(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 c=s?.cnt?"Database migrated":"Database initialized";console.log(`[crewx] ${c} (${d} migration${d>1?"s":""} applied).`);}}function $t(n,e){Qn.has(e)||(zi(n),Qn.add(e));}l();var M=class extends Error{code;cause;constructor(e,t,r){super(t),this.name="RepositoryError",this.code=e,this.cause=r,Object.setPrototypeOf(this,new.target.prototype);}};l();l();var eo=sqliteTable("workspaces",{id:text("id").primaryKey(),slug:text("slug").notNull().unique(),name:text("name").notNull(),workspace_path:text("workspace_path"),description:text("description"),is_active:integer("is_active").notNull().default(1),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull()});l();var w=sqliteTable("tasks",{id:text("id").primaryKey(),agent_id:text("agent_id").notNull(),user_id:text("user_id"),prompt:text("prompt").notNull(),mode:text("mode").notNull().default("execute"),status:text("status").notNull().default("running"),result:text("result"),error:text("error"),started_at:text("started_at").notNull(),completed_at:text("completed_at"),duration_ms:integer("duration_ms"),metadata:text("metadata"),workspace_id:text("workspace_id"),trace_id:text("trace_id"),parent_task_id:text("parent_task_id"),caller_agent_id:text("caller_agent_id"),model:text("model"),platform:text("platform").default("cli"),crewx_version:text("crewx_version"),input_tokens:integer("input_tokens").default(0),output_tokens:integer("output_tokens").default(0),cost_usd:real("cost_usd").default(0),pid:integer("pid"),rendered_prompt:text("rendered_prompt"),command:text("command"),coding_agent_command:text("coding_agent_command"),exit_code:integer("exit_code"),logs:text("logs"),thread_id:text("thread_id"),workspace_ref:text("workspace_ref"),project_id:text("project_id"),project_ref:text("project_ref"),cached_input_tokens:integer("cached_input_tokens").default(0)},n=>({idx_tasks_agent_id:index("idx_tasks_agent_id").on(n.agent_id),idx_tasks_status:index("idx_tasks_status").on(n.status),idx_tasks_started_at:index("idx_tasks_started_at").on(n.started_at),idx_tasks_trace_id:index("idx_tasks_trace_id").on(n.trace_id),idx_tasks_parent_task_id:index("idx_tasks_parent_task_id").on(n.parent_task_id),idx_tasks_crewx_version:index("idx_tasks_crewx_version").on(n.crewx_version),idx_tasks_pid:index("idx_tasks_pid").on(n.pid),idx_tasks_thread_id:index("idx_tasks_thread_id").on(n.thread_id),idx_tasks_workspace_id:index("idx_tasks_workspace_id").on(n.workspace_id),idx_tasks_workspace_ref:index("idx_tasks_workspace_ref").on(n.workspace_ref),idx_tasks_project_id:index("idx_tasks_project_id").on(n.project_id),idx_tasks_ws_started:index("idx_tasks_ws_started").on(n.workspace_id,n.started_at)}));l();var ro=sqliteTable("threads",{id:text("id").primaryKey(),workspace_id:text("workspace_id").references(()=>eo.id,{onDelete:"set null"}),platform:text("platform").notNull().default("cli"),title:text("title"),first_message:text("first_message"),last_message:text("last_message"),message_count:integer("message_count").notNull().default(0),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull(),metadata:text("metadata"),title_locked:integer("title_locked").notNull().default(0),pinned:integer("pinned").notNull().default(0),starred:integer("starred").notNull().default(0)},n=>({idx_threads_updated_at:index("idx_threads_updated_at").on(n.updated_at),idx_threads_workspace_id:index("idx_threads_workspace_id").on(n.workspace_id)}));l();var Me=sqliteTable("spans",{id:text("id").primaryKey(),task_id:text("task_id").references(()=>w.id,{onDelete:"set null"}),parent_span_id:text("parent_span_id").references(()=>Me.id,{onDelete:"set null"}),name:text("name").notNull(),kind:text("kind").notNull().default("internal"),status:text("status").notNull().default("ok"),started_at:text("started_at").notNull(),completed_at:text("completed_at"),duration_ms:integer("duration_ms"),input:text("input"),output:text("output"),error:text("error"),attributes:text("attributes")},n=>({idx_spans_task_id:index("idx_spans_task_id").on(n.task_id),idx_spans_parent_span_id:index("idx_spans_parent_span_id").on(n.parent_span_id)}));l();sqliteTable("tool_calls",{id:text("id").primaryKey(),task_id:text("task_id").references(()=>w.id,{onDelete:"cascade"}),session_id:text("session_id"),tool_name:text("tool_name").notNull(),files:text("files"),input:text("input"),output:text("output"),duration_ms:integer("duration_ms"),timestamp:text("timestamp").notNull()},n=>({idx_tool_calls_task_id:index("idx_tool_calls_task_id").on(n.task_id),idx_tool_calls_tool_name:index("idx_tool_calls_tool_name").on(n.tool_name),idx_tool_calls_timestamp:index("idx_tool_calls_timestamp").on(n.timestamp)}));l();sqliteTable("thread_boxes",{id:text("id").primaryKey(),thread_id:text("thread_id").notNull().references(()=>ro.id,{onDelete:"cascade"}),seq:integer("seq").notNull(),first_task_id:text("first_task_id").notNull(),mid_task_id:text("mid_task_id").notNull(),last_task_id:text("last_task_id").notNull(),task_count:integer("task_count").notNull(),summary:text("summary"),source_tokens:integer("source_tokens").notNull(),summary_tokens:integer("summary_tokens"),created_at:text("created_at").notNull()},n=>({idx_thread_boxes_thread_id:index("idx_thread_boxes_thread_id").on(n.thread_id),idx_thread_boxes_seq:index("idx_thread_boxes_seq").on(n.thread_id,n.seq),uniq_thread_boxes_thread_seq:unique().on(n.thread_id,n.seq)}));l();sqliteTable("request_logs",{id:text("id").primaryKey(),path:text("path").notNull(),method:text("method").notNull(),status_code:integer("status_code").notNull(),duration_ms:integer("duration_ms").notNull(),ip:text("ip"),request_headers:text("request_headers"),response_headers:text("response_headers"),request_body:text("request_body"),response_body:text("response_body"),query:text("query"),user_id:text("user_id"),project_id:text("project_id"),partition_key:text("partition_key").notNull(),timestamp:text("timestamp").notNull().default(sql`(datetime('now'))`),metadata:text("metadata")},n=>({idx_request_logs_timestamp:index("idx_request_logs_timestamp").on(n.timestamp),idx_request_logs_path:index("idx_request_logs_path").on(n.path),idx_request_logs_status_code:index("idx_request_logs_status_code").on(n.status_code),idx_request_logs_partition_key:index("idx_request_logs_partition_key").on(n.partition_key)}));var qr=class extends Be{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=dirname(t);existsSync(o)||mkdirSync(o,{recursive:true});}else if(!existsSync(t))throw new M("NOT_FOUND","Database not found");let r=ye(t);if(e)try{$t(r.db,t);}catch(o){throw r.close(),o}return r}startTask(e){let t=this.openHandle(true);try{t.db.insert(w).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}).onConflictDoNothing().run();}catch(r){throw r instanceof M?r:new M("DB_ERROR","Failed to start task",r)}finally{t.close();}}finishTask(e){let t=this.openHandle(true);try{t.runRaw(`UPDATE tasks SET status=?, result=?, error=?, completed_at=?, duration_ms=?,
55
+ exit_code=?, input_tokens=?, output_tokens=?, cached_input_tokens=?, cost_usd=?,
56
+ model=COALESCE(?, model) WHERE id=?`,[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]);}catch(r){throw r instanceof M?r:new M("DB_ERROR","Failed to finish task",r)}finally{t.close();}}appendLog(e,t){let r=this.openHandle(true);try{r.db.transaction(o=>{let s=o.select({logs:w.logs}).from(w).where(eq(w.id,e)).limit(1).get(),i=s?.logs?JSON.parse(s.logs):[];i.push(t),o.update(w).set({logs:JSON.stringify(i)}).where(eq(w.id,e)).run();},{behavior:"immediate"});}catch(o){throw o instanceof M?o:new M("DB_ERROR","Failed to append log",o)}finally{r.close();}}getRunningTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(w).where(eq(w.status,"running")).orderBy(desc(w.started_at)).all()}catch(t){throw new M("DB_ERROR","Failed to get running tasks",t)}finally{e.close();}}getAllTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(w).orderBy(desc(w.started_at)).limit(100).all()}catch(t){throw new M("DB_ERROR","Failed to get all tasks",t)}finally{e.close();}}getTask(e){if(!this.dbExists())return;let t=this.openHandle(false);try{return t.db.select().from(w).where(eq(w.id,e)).limit(1).get()??void 0}catch(r){throw new M("DB_ERROR","Failed to get task",r)}finally{t.close();}}killTask(e){if(!this.dbExists())return {killed:false};let t=this.openHandle(true);try{let r=t.db.select({id:w.id,status:w.status,pid:w.pid}).from(w).where(eq(w.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(w).set({status:"failed",error:"Killed by user",completed_at:new Date().toISOString()}).where(and(eq(w.id,e),eq(w.status,"running"))).run(),{killed:!0,pid:r.pid??void 0}}catch(r){throw r instanceof M?r:new M("DB_ERROR","Failed to kill task",r)}finally{t.close();}}reapOrphanedTasks(){if(!this.dbExists())return 0;let e=this.openHandle(true);try{let t=e.db.select({id:w.id,pid:w.pid}).from(w).where(eq(w.status,"running")).all(),r=0;for(let o of t){if(!o.pid)continue;let s=!1;try{process.kill(o.pid,0),s=!0;}catch{}s||(e.db.update(w).set({status:"failed",error:"Reaped: process not found (orphaned task)",completed_at:new Date().toISOString()}).where(and(eq(w.id,o.id),eq(w.status,"running"))).run(),r++);}return r}finally{e.close();}}findTaskStatus(e,t){let r=this.resolveDbPaths();for(let o of r){if(!existsSync(o))continue;let s=ye(o);try{let i=t?eq(w.workspace_id,t):void 0,a=i?and(eq(w.id,e),i):eq(w.id,e),d=s.db.select().from(w).where(a).limit(1).get()??void 0;if(!d){let c=or$1(eq(w.thread_id,e),and(isNull(w.thread_id),like(w.command,`%--thread=${e}%`))),u=i?and(c,i):c;d=s.db.select().from(w).where(u).orderBy(desc(w.started_at)).limit(1).get()??void 0;}if(d)return d}catch(i){throw new M("DB_ERROR","Failed to find task status",i)}finally{s.close();}}}findChildTasks(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!existsSync(i))continue;let a=ye(i);try{let d=t?and(eq(w.parent_task_id,e),eq(w.workspace_id,t)):eq(w.parent_task_id,e),c=a.db.select().from(w).where(d).orderBy(asc(w.started_at)).all();for(let u of c)o.has(u.id)||(o.add(u.id),s.push(u));}catch(d){throw new M("DB_ERROR","Failed to find child tasks",d)}finally{a.close();}}return s}getWorkspaceUsageSummary(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.all(e?sql`
57
+ SELECT
58
+ COALESCE(workspace_id, 'unknown') AS workspace_id,
59
+ COALESCE(SUM(input_tokens), 0) AS input_tokens,
60
+ COALESCE(SUM(output_tokens), 0) AS output_tokens,
61
+ COALESCE(SUM(cost_usd), 0) AS cost_usd,
62
+ COUNT(*) AS task_count
63
+ FROM tasks
64
+ WHERE workspace_id = ${e}
65
+ GROUP BY workspace_id
66
+ ORDER BY (COALESCE(SUM(input_tokens), 0) + COALESCE(SUM(output_tokens), 0)) DESC
67
+ `:sql`
68
+ SELECT
69
+ COALESCE(workspace_id, 'unknown') AS workspace_id,
70
+ COALESCE(SUM(input_tokens), 0) AS input_tokens,
71
+ COALESCE(SUM(output_tokens), 0) AS output_tokens,
72
+ COALESCE(SUM(cost_usd), 0) AS cost_usd,
73
+ COUNT(*) AS task_count
74
+ FROM tasks
75
+ GROUP BY workspace_id
76
+ ORDER BY (COALESCE(SUM(input_tokens), 0) + COALESCE(SUM(output_tokens), 0)) DESC
77
+ `)}catch(r){throw new M("DB_ERROR","Failed to get workspace usage summary",r)}finally{t.close();}}getThreadTokenUsage(e,t){let r=this.resolveDbPaths(),o=new Set,s=0,i=0,a=0;for(let d of r){if(!existsSync(d))continue;let c=ye(d);try{let u=or$1(eq(w.thread_id,e),and(isNull(w.thread_id),like(w.command,`%--thread=${e}%`))),g=t?and(u,eq(w.workspace_id,t)):u,h=c.db.select({id:w.id,input_tokens:w.input_tokens,output_tokens:w.output_tokens,cost_usd:w.cost_usd}).from(w).where(g).all();for(let p of h)o.has(p.id)||(o.add(p.id),s+=p.input_tokens??0,i+=p.output_tokens??0,a+=p.cost_usd??0);}catch(u){throw new M("DB_ERROR","Failed to get thread token usage",u)}finally{c.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(!existsSync(i))continue;let a=ye(i);try{let d=or$1(eq(w.thread_id,e),and(isNull(w.thread_id),like(w.command,`%--thread=${e}%`))),c=t?and(d,eq(w.workspace_id,t)):d,u=a.db.select().from(w).where(c).orderBy(asc(w.started_at)).all();for(let g of u)o.has(g.id)||(o.add(g.id),s.push(g));}catch(d){throw new M("DB_ERROR","Failed to find tasks by thread",d)}finally{a.close();}}return s}findAllTasks(e){if(!this.dbExists())return {rows:[],total:0};let t=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(eq(w.workspace_id,e.workspaceId));let o=e.agents&&e.agents.length>0?e.agents:e.agentId?[e.agentId]:null;o&&r.push(inArray(w.agent_id,o));let s=e.statuses&&e.statuses.length>0?e.statuses:e.status?[e.status]:null;s&&r.push(inArray(w.status,s));let i=e.q??e.search;i&&r.push(like(w.prompt,`%${i}%`)),e.from&&r.push(gte(w.started_at,e.from)),e.to&&r.push(lt$1(w.started_at,e.to));let a=r.length>0?and(...r):void 0,d=t.db.select({count:sql`count(*)`}).from(w).where(a).get(),c=(e.sortDir??"DESC")==="ASC"?asc(w.started_at):desc(w.started_at);return {rows:t.db.select().from(w).where(a).orderBy(c).limit(e.limit).offset(e.offset).all(),total:d?.count??0}}catch(r){throw new M("DB_ERROR","Failed to find all tasks",r)}finally{t.close();}}getAgentUsage(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.all(r?sql`
78
+ SELECT
79
+ t.agent_id,
80
+ t.workspace_id,
81
+ COUNT(*) AS total_tasks,
82
+ COALESCE(SUM(t.input_tokens), 0) AS input_tokens,
83
+ COALESCE(SUM(t.output_tokens), 0) AS output_tokens,
84
+ COALESCE(SUM(t.cached_input_tokens), 0) AS cached_input_tokens,
85
+ COALESCE(SUM(t.cost_usd), 0) AS cost_usd
86
+ FROM tasks t
87
+ WHERE t.status IN ('completed', 'success')
88
+ AND t.started_at >= ${e}
89
+ AND t.started_at < ${t}
90
+ AND t.workspace_id = ${r}
91
+ GROUP BY t.agent_id, t.workspace_id
92
+ ORDER BY (COALESCE(SUM(t.input_tokens), 0) + COALESCE(SUM(t.output_tokens), 0)) DESC
93
+ `:sql`
94
+ SELECT
95
+ t.agent_id,
96
+ t.workspace_id,
97
+ COUNT(*) AS total_tasks,
98
+ COALESCE(SUM(t.input_tokens), 0) AS input_tokens,
99
+ COALESCE(SUM(t.output_tokens), 0) AS output_tokens,
100
+ COALESCE(SUM(t.cached_input_tokens), 0) AS cached_input_tokens,
101
+ COALESCE(SUM(t.cost_usd), 0) AS cost_usd
102
+ FROM tasks t
103
+ WHERE t.status IN ('completed', 'success')
104
+ AND t.started_at >= ${e}
105
+ AND t.started_at < ${t}
106
+ GROUP BY t.agent_id, t.workspace_id
107
+ ORDER BY (COALESCE(SUM(t.input_tokens), 0) + COALESCE(SUM(t.output_tokens), 0)) DESC
108
+ `).map(i=>({agentId:i.agent_id,workspaceId:i.workspace_id??null,totalTasks:i.total_tasks,inputTokens:i.input_tokens,outputTokens:i.output_tokens,cachedInputTokens:i.cached_input_tokens,costUsd:i.cost_usd}))}catch(s){throw new M("DB_ERROR","Failed to get agent usage",s)}finally{o.close();}}getAgentUsageTrendRaw(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.all(r?sql`
109
+ SELECT
110
+ date(t.started_at) AS date,
111
+ t.agent_id,
112
+ COALESCE(SUM(t.input_tokens), 0) AS input_tokens,
113
+ COALESCE(SUM(t.output_tokens), 0) AS output_tokens,
114
+ COALESCE(SUM(t.cached_input_tokens), 0) AS cached_input_tokens,
115
+ COALESCE(SUM(t.cost_usd), 0) AS cost_usd
116
+ FROM tasks t
117
+ WHERE t.status IN ('completed', 'success')
118
+ AND t.started_at >= ${e}
119
+ AND t.started_at < ${t}
120
+ AND t.workspace_id = ${r}
121
+ GROUP BY date(t.started_at), t.agent_id
122
+ ORDER BY date(t.started_at) ASC
123
+ `:sql`
124
+ SELECT
125
+ date(t.started_at) AS date,
126
+ t.agent_id,
127
+ COALESCE(SUM(t.input_tokens), 0) AS input_tokens,
128
+ COALESCE(SUM(t.output_tokens), 0) AS output_tokens,
129
+ COALESCE(SUM(t.cached_input_tokens), 0) AS cached_input_tokens,
130
+ COALESCE(SUM(t.cost_usd), 0) AS cost_usd
131
+ FROM tasks t
132
+ WHERE t.status IN ('completed', 'success')
133
+ AND t.started_at >= ${e}
134
+ AND t.started_at < ${t}
135
+ GROUP BY date(t.started_at), t.agent_id
136
+ ORDER BY date(t.started_at) ASC
137
+ `).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}))}catch(s){throw new M("DB_ERROR","Failed to get agent usage trend",s)}finally{o.close();}}findTaskForStop(e,t){if(!this.dbExists())return;let r=this.openHandle(false);try{return r.db.select().from(w).where(and(eq(w.id,e),eq(w.workspace_id,t))).limit(1).get()??void 0}catch(o){throw new M("DB_ERROR","Failed to find task for stop",o)}finally{r.close();}}markTaskFailed(e,t,r){if(!this.dbExists())return;let o=this.openHandle(true);try{let s=new Date().toISOString(),i=r?and(eq(w.id,e),eq(w.status,"running"),eq(w.workspace_id,r)):and(eq(w.id,e),eq(w.status,"running"));o.db.update(w).set({status:"failed",error:t,completed_at:s}).where(i).run();}catch(s){throw s instanceof M?s:new M("DB_ERROR","Failed to mark task failed",s)}finally{o.close();}}findTasksByPromptHint(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!existsSync(i))continue;let a=ye(i);try{let d=t?and(like(w.prompt,`%${e}%`),eq(w.workspace_id,t)):like(w.prompt,`%${e}%`),c=a.db.select().from(w).where(d).orderBy(asc(w.started_at)).all();for(let u of c)o.has(u.id)||(o.add(u.id),s.push(u));}catch(d){throw new M("DB_ERROR","Failed to find tasks by prompt hint",d)}finally{a.close();}}return s}};l();var Br=class extends Be{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=dirname(t);existsSync(o)||mkdirSync(o,{recursive:true});}else if(!existsSync(t))throw new M("NOT_FOUND","Database not found");let r=ye(t);if(e)try{$t(r.db,t);}catch(o){throw r.close(),o}return r}insertSpan(e){let t=this.openHandle(true);try{t.db.insert(Me).values(e).run();}catch(r){throw r instanceof M?r:new M("DB_ERROR","Failed to insert span",r)}finally{t.close();}}findByTaskId(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.select().from(Me).where(eq(Me.task_id,e)).all()}catch(r){throw new M("DB_ERROR","Failed to find spans by task id",r)}finally{t.close();}}findById(e){if(!this.dbExists())return;let t=this.openHandle(false);try{return t.db.select().from(Me).where(eq(Me.id,e)).limit(1).get()??void 0}catch(r){throw new M("DB_ERROR","Failed to find span by id",r)}finally{t.close();}}};Er();br();Tr();l();l();var qt=class{capabilities={required:[]}};l();l();l();var co=2e3;function uo(n){let e=n.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=co?e:e.slice(0,co-11)+" [redacted]"}var ka=10*1024*1024,va={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function Wr(n,e){return n===void 0?true:Array.isArray(n)?n.includes(e):n===e}function _a(n,e){return n===void 0?true:Array.isArray(n)?n.some(t=>e.includes(t)):e.includes(n)}function go(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*(va[r]??1))}function mo(n){return typeof n=="string"}function fo(n){try{let e=statSync(n);return e.size>ka?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${n} (${e.size} bytes)
138
+ `),null):readFileSync(n,"utf8").split(`
139
+ `).length}catch{return null}}function yo(n){try{return statSync(n).size}catch{return null}}function Aa(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(ae(o,n))return true;if(t&&o.startsWith("/")){let{relative:s,isAbsolute:i}=V("path");if(i(o)){let a=s(t,o);if(a&&!a.startsWith("..")&&ae(a,n))return true}}return false}function Ra(n,e){return n?JSON.stringify(e).includes(n):true}function Pa(n,e){if(!n)return true;try{let t=new RegExp(n),r=JSON.stringify(e);return t.test(r)}catch{return false}}function Ca(n,e){if(!n)return true;try{let t=new RegExp(n),r=JSON.stringify(e);return t.test(r)}catch{return false}}function Ta(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(mo(n.pathSizeMin)){let o=yo(r);if(o===null||o<go(n.pathSizeMin))return false}else {let o=fo(r);if(o===null||o<n.pathSizeMin)return false}if(n.pathSizeMax!==void 0)if(mo(n.pathSizeMax)){let o=yo(r);if(o===null||o>go(n.pathSizeMax))return false}else {let o=fo(r);if(o===null||o>n.pathSizeMax)return false}return true}function ba(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 Vr=class extends qt{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(`
140
+
141
+ `)):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=uo(t.message).slice(0,500)));let o=`[${new Date().toISOString()}] HOOK: ${JSON.stringify(r)}
142
+ `;appendFileSync(e,o,{encoding:"utf8",mode:384});}catch{}}matchEntryLevel(e,t){if(e.provider!==void 0){let r=t.provider.replace(/^cli\//,"");if(!Wr(e.provider,r))return false}if(e.team!==void 0){let o=this.agentMap.get(t.agent.id)?.team??t.agent.team;if(!Wr(e.team,o))return false}if(e.role!==void 0){let o=this.agentMap.get(t.agent.id)?.role??t.agent.role;if(!Wr(e.role,o))return false}if(e.tag!==void 0){let o=this.agentMap.get(t.agent.id)?.tags??[];if(!_a(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)||!Ra(e.pattern,t.tool.input)||!Pa(e.regex,t.tool.input)||!Aa(e.pathPattern,t.tool.input,t.cwd)||!Ta(e,t.tool.input)||!Ca(e.whenInputRegex,t.tool.input))}hasFired(e,t){try{let r=this.firedFilePath(e);if(!existsSync(r))return !1;let o=JSON.parse(readFileSync(r,"utf8"));return Array.isArray(o.fired)&&o.fired.includes(t)}catch{return false}}markFired(e,t){try{let r=this.firedFilePath(e);mkdirSync(dirname(r),{recursive:!0,mode:448});let o=existsSync(r)?JSON.parse(readFileSync(r,"utf8")):{fired:[]};Array.isArray(o.fired)||(o.fired=[]),o.fired.includes(t)||(o.fired.push(t),writeFileSync(r,JSON.stringify(o),{mode:384}));}catch(r){process.stderr.write(`[YamlHookPlugin] once state write failed: ${r}
143
+ `);}}firedFilePath(e){let t=createHash("sha1").update(e).digest("hex");return join(homedir(),".crewx","sessions",t,"fired-rules.json")}};l();l();l();function Ea(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}}}l();var Kr=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;}};l();function Sa(n){return n}function Ia(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);}}}kt();export{Se as ACP_ADAPTERS,Ee as AcpConnection,fe as AcpProtocolError,st as AcpProviderRuntime,Kr as AdapterError,ue as AgentNotFoundError,pt as AgentRuntime,Xr as AgentSkillsSchema,we as BUILTIN_ADAPTERS,Dr as BrowserFsAdapter,se as ClientToolCallRequiredError,_e as ConfigLoadError,Or as Crewx,Nr as CrewxPlugin,Ce as DocumentLoader,X as LayoutLoadError,Qe as LayoutLoader,tt as LayoutRenderer,it as McpHttpTransport,Ct as NodeFsAdapter,ut as ParallelRunner,Dt as ParallelRunnerTimeoutError,lt as PluginProviderRuntime,me as PropsValidationError,et as PropsValidator,S as ProviderError,Je as RateLimitError,at as RemoteAgentManager,dt as RemoteProviderRuntime,Lr as SdkBoxService,Br as SpanRepository,qr as TaskRepository,Ye as TemplateEngine,rt as TypedEventEmitter,ot as VercelProviderRuntime,Vr as YamlHookPlugin,Ci as buildContext,bt as claudeAcpAdapter,vt as claudeAdapter,St as codexAcpAdapter,Rt as codexAdapter,Ot as copilotAcpAdapter,At as copilotAdapter,pr as createAdapterContext,_i as createDelegateTool,fr as createHandler,jn as createPluginProviderFactory,ge as createProvider,Nn as createRemoteProviderFactory,cr as createScopedAdapterStore,xr as defaultExtractText,Pe as defaultFsAdapter,ie as defaultParseEvent,Sa as defineChannelAdapter,Ia as defineChannelAdapterPlugin,sr as escapeHandlebarsHelper,ir as formatFileSizeHelper,lr as formatTimestamp,ar as formatTimestampHelper,It as geminiAcpAdapter,_t as geminiAdapter,As as generateFingerprint,be as generateId,Cs as getSyncWindowStore,yr as hashWorkspaceId,or as lengthHelper,ft as loadYamlFile,Ke as materializeWindowsSpawnProgram,An as normalizeWorkspacePath,Mt as opencodeAcpAdapter,Pt as opencodeAdapter,tr as parseStdoutEvent,te as parseUsage,mt as parseYamlContent,Wn as queryAcpProviderMeta,vi as queryAllAcpProviderMetas,On as registerAcpProviders,Cn as registerApiProviders,pe as registerProviderFactory,ht as resolveAgent,xi as resolveAgentSkills,Ai as resolveCrewxCli,Ri as resolveCrewxWorkspace,Vt as resolveDefaultAgentsYaml,Le as resolveTemplatesPath,Qr as resolveWindowsExecutablePath,Ve as resolveWindowsSpawnProgram,$i as runExecutesParallel,Ts as runInSyncWindow,Di as runQueriesParallel,ds as setAuditVerbose,Ea as toTaskReader,mr as toTemplateMessages,nr as truncateHelper,ba as validateHooksSchema};