@crewx/sdk 0.8.7-rc.10 → 0.8.7-rc.11

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,54 +1,54 @@
1
- import*as H from'path';import H__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 G from'handlebars';import G__default from'handlebars';import {readFile,access}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 pt=Object.defineProperty;var yn=Object.getOwnPropertyDescriptor;var hn=Object.getOwnPropertyNames;var wn=Object.prototype.hasOwnProperty;var q=(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 We=(o,e)=>{for(var t in e)pt(o,t,{get:e[t],enumerable:true});},vn=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of hn(e))!wn.call(o,n)&&n!==t&&pt(o,n,{get:()=>e[n],enumerable:!(r=yn(e,n))||r.enumerable});return o};var gt=o=>vn(pt({},"__esModule",{value:true}),o);var lr,An,f,h,l=M(()=>{lr=()=>fileURLToPath(import.meta.url),An=()=>H__default.dirname(lr()),f=An(),h=lr();});function Je(o){return typeof o!="string"?void 0:o.trim()||void 0}function Xe(o){return Je(o)?.toLowerCase()??""}function we(o){try{return statSync(o).isFile()}catch{return false}}function gr(o,e){if(o.includes("/")||o.includes("\\")||H__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=H__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 u=Xe(d),c=d.toUpperCase();for(let m of [d,u,c]){let p=H__default.join(a,`${o}${m}`);if(we(p))return p}}return o}function Nn(o){if(!we(o))return null;try{let e=readFileSync(o,"utf8"),t=H__default.dirname(o),r=[];for(let a of e.matchAll(/"([^"\r\n]*)"/g)){let c=(a[1]??"").match(/%~?dp0%?\s*[\\/]*(.*)$/i)?.[1]?.trim();if(!c)continue;let m=c.replace(/[\\/]+/g,H__default.sep).replace(/^[\\/]+/,""),p=H__default.resolve(t,m);we(p)&&r.push(p);}let n=[],s=new Map;for(let a of e.matchAll(/SET\s+"(\w+)=%~?dp0%?[\\/]?([^"]+)"/gi)){let d=a[1].toUpperCase(),u=a[2].trim().replace(/[\\/]+/g,H__default.sep).replace(/^[\\/]+/,"");s.set(d,H__default.resolve(t,u));}for(let a of e.split(/\r?\n/))if(a.includes("%*"))for(let d of a.matchAll(/"%(\w+)%"/g)){let u=s.get(d[1].toUpperCase());u&&we(u)&&n.push(u);}let i=a=>a.find(d=>{let u=Xe(H__default.basename(d));return u!=="node.exe"&&u!=="node"})??null;return i(n)??i(r)}catch{return null}}function $n(o,e){if(typeof e=="string")return Je(e)||null;if(!e||typeof e!="object")return null;if(o){let t=e[o],r=typeof t=="string"?Je(t):void 0;if(r)return r}for(let t of Object.values(e)){let r=typeof t=="string"?Je(t):void 0;if(r)return r}return null}function Ln(o,e){if(!e)return null;let t=H__default.dirname(o),r=[H__default.resolve(t,"..",e),H__default.resolve(t,"node_modules",e)];for(let n of r){let s=H__default.join(n,"package.json");if(we(s))try{let i=JSON.parse(readFileSync(s,"utf8")),a=$n(e,i.bin);if(!a)continue;let d=H__default.resolve(n,a);if(we(d))return d}catch{}}return null}function Dn(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=gr(o.command,t),s=Xe(H__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=Nn(n)??Ln(n,o.packageName);return i?Xe(H__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 jn(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(`${H__default.basename(o.candidate.command)} wrapper resolved, but no executable/Node entrypoint could be resolved without shell execution.`)}function Pe(o){let e=Dn(o);return jn({candidate:e,allowShellFallback:o.allowShellFallback})}function Re(o,e){return {command:o.command,argv:[...o.leadingArgv,...e],resolution:o.resolution,shell:o.shell,windowsHide:o.windowsHide}}var Qe=M(()=>{l();});function Hn(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 Un(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 Fn(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 W(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=Hn(r)??Un(r)??Fn(r);n&&(e=n);}catch{}return e??void 0}var ue=M(()=>{l();});var Ce,ft=M(()=>{l();Ce=class extends Error{name="RateLimitError";constructor(e){super(e);}};});function B(o){return /crewx\s+(x|execute)\s/.test(o)}function V(o,e){let t=e.match(/@(\S+)/);return {timestamp:o,type:"agent_call",targetAgent:t?.[1]?.replace(/["']/g,""),toolInput:e}}var ve=M(()=>{l();});function z(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 xe=M(()=>{l();});function qn(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=z(s);return r==="Bash"&&B(i)?V(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 Ge,yt=M(()=>{l();ft();ve();xe();Ge={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(`
1
+ import*as H from'path';import H__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 G from'handlebars';import G__default from'handlebars';import {readFile,access}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 pt=Object.defineProperty;var wn=Object.getOwnPropertyDescriptor;var vn=Object.getOwnPropertyNames;var xn=Object.prototype.hasOwnProperty;var q=(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 O=(o,e)=>()=>(o&&(e=o(o=0)),e);var We=(o,e)=>{for(var t in e)pt(o,t,{get:e[t],enumerable:true});},kn=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of vn(e))!xn.call(o,n)&&n!==t&&pt(o,n,{get:()=>e[n],enumerable:!(r=wn(e,n))||r.enumerable});return o};var gt=o=>kn(pt({},"__esModule",{value:true}),o);var ur,Rn,f,y,l=O(()=>{ur=()=>fileURLToPath(import.meta.url),Rn=()=>H__default.dirname(ur()),f=Rn(),y=ur();});function Je(o){return typeof o!="string"?void 0:o.trim()||void 0}function Xe(o){return Je(o)?.toLowerCase()??""}function we(o){try{return statSync(o).isFile()}catch{return false}}function fr(o,e){if(o.includes("/")||o.includes("\\")||H__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=H__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 u=Xe(d),c=d.toUpperCase();for(let m of [d,u,c]){let p=H__default.join(a,`${o}${m}`);if(we(p))return p}}return o}function Ln(o){if(!we(o))return null;try{let e=readFileSync(o,"utf8"),t=H__default.dirname(o),r=[];for(let a of e.matchAll(/"([^"\r\n]*)"/g)){let c=(a[1]??"").match(/%~?dp0%?\s*[\\/]*(.*)$/i)?.[1]?.trim();if(!c)continue;let m=c.replace(/[\\/]+/g,H__default.sep).replace(/^[\\/]+/,""),p=H__default.resolve(t,m);we(p)&&r.push(p);}let n=[],s=new Map;for(let a of e.matchAll(/SET\s+"(\w+)=%~?dp0%?[\\/]?([^"]+)"/gi)){let d=a[1].toUpperCase(),u=a[2].trim().replace(/[\\/]+/g,H__default.sep).replace(/^[\\/]+/,"");s.set(d,H__default.resolve(t,u));}for(let a of e.split(/\r?\n/))if(a.includes("%*"))for(let d of a.matchAll(/"%(\w+)%"/g)){let u=s.get(d[1].toUpperCase());u&&we(u)&&n.push(u);}let i=a=>a.find(d=>{let u=Xe(H__default.basename(d));return u!=="node.exe"&&u!=="node"})??null;return i(n)??i(r)}catch{return null}}function Dn(o,e){if(typeof e=="string")return Je(e)||null;if(!e||typeof e!="object")return null;if(o){let t=e[o],r=typeof t=="string"?Je(t):void 0;if(r)return r}for(let t of Object.values(e)){let r=typeof t=="string"?Je(t):void 0;if(r)return r}return null}function jn(o,e){if(!e)return null;let t=H__default.dirname(o),r=[H__default.resolve(t,"..",e),H__default.resolve(t,"node_modules",e)];for(let n of r){let s=H__default.join(n,"package.json");if(we(s))try{let i=JSON.parse(readFileSync(s,"utf8")),a=Dn(e,i.bin);if(!a)continue;let d=H__default.resolve(n,a);if(we(d))return d}catch{}}return null}function Hn(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=fr(o.command,t),s=Xe(H__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=Ln(n)??jn(n,o.packageName);return i?Xe(H__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 Un(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(`${H__default.basename(o.candidate.command)} wrapper resolved, but no executable/Node entrypoint could be resolved without shell execution.`)}function Pe(o){let e=Hn(o);return Un({candidate:e,allowShellFallback:o.allowShellFallback})}function Re(o,e){return {command:o.command,argv:[...o.leadingArgv,...e],resolution:o.resolution,shell:o.shell,windowsHide:o.windowsHide}}var Qe=O(()=>{l();});function Fn(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 qn(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 Wn(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 W(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=Fn(r)??qn(r)??Wn(r);n&&(e=n);}catch{}return e??void 0}var ue=O(()=>{l();});var Ce,ft=O(()=>{l();Ce=class extends Error{name="RateLimitError";constructor(e){super(e);}};});function B(o){return /crewx\s+(x|execute)\s/.test(o)}function V(o,e){let t=e.match(/@(\S+)/);return {timestamp:o,type:"agent_call",targetAgent:t?.[1]?.replace(/["']/g,""),toolInput:e}}var ve=O(()=>{l();});function z(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 xe=O(()=>{l();});function Bn(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=z(s);return r==="Bash"&&B(i)?V(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 Ge,yt=O(()=>{l();ft();ve();xe();Ge={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
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(`
5
5
 
6
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 Ce(`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 u=qn(i,d);u&&a.push(u);}return a}};});var Ye,ht=M(()=>{l();ue();ve();xe();Ye={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=W(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=z(a);return /^bash$/i.test(s)&&B(d)?[V(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 Ze,wt=M(()=>{l();ue();ve();xe();Ze={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(`
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 u=Bn(i,d);u&&a.push(u);}return a}};});var Ye,ht=O(()=>{l();ue();ve();xe();Ye={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=W(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=z(a);return /^bash$/i.test(s)&&B(d)?[V(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 Ze,wt=O(()=>{l();ue();ve();xe();Ze={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
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(`
10
10
 
11
- `):r||o.trim()},parseResultMeta(o){let e=W(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,u=z(d);return (a==="bash"||a==="Bash")&&B(u)?[V(s,u)]:[{timestamp:s,type:"tool_use",toolName:a,toolInput:u,...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,u=String(d?.content||"");return [{timestamp:s,type:"tool_result",resultPreview:u,isError:false,...i&&{toolUseId:i}}]}if(r==="assistant.message"){let a=String(n.content||"");return a?[{timestamp:s,type:"text",content:a}]:[]}return []}};});function Wn(o,e){if(e.type==="command_execution"){let r=String(e.command||"");return B(r)?[V(o,r)]:[{timestamp:o,type:"tool_use",toolName:"Bash",toolInput:r}]}return []}function Bn(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=Vn(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=z(n);return r==="Bash"&&B(s)?V(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 Vn(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=z(n);return r==="Bash"&&B(s)?V(o,s):{timestamp:o,type:"tool_use",toolName:r,toolInput:s}}return null}var et,vt=M(()=>{l();ue();ve();xe();et={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(`
11
+ `):r||o.trim()},parseResultMeta(o){let e=W(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,u=z(d);return (a==="bash"||a==="Bash")&&B(u)?[V(s,u)]:[{timestamp:s,type:"tool_use",toolName:a,toolInput:u,...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,u=String(d?.content||"");return [{timestamp:s,type:"tool_result",resultPreview:u,isError:false,...i&&{toolUseId:i}}]}if(r==="assistant.message"){let a=String(n.content||"");return a?[{timestamp:s,type:"text",content:a}]:[]}return []}};});function Vn(o,e){if(e.type==="command_execution"){let r=String(e.command||"");return B(r)?[V(o,r)]:[{timestamp:o,type:"tool_use",toolName:"Bash",toolInput:r}]}return []}function zn(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=Kn(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=z(n);return r==="Bash"&&B(s)?V(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 Kn(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=z(n);return r==="Bash"&&B(s)?V(o,s):{timestamp:o,type:"tool_use",toolName:r,toolInput:s}}return null}var et,vt=O(()=>{l();ue();ve();xe();et={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
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(`
13
13
 
14
- `):r||o.trim()},parseResultMeta(o){let e=W(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 Wn(s,n);if(r==="item.completed"){let i=Bn(s,n);return i?[i]:[]}return []}};});var tt,xt=M(()=>{l();ue();xe();tt={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=W(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,u=String(d?.status||""),c=d?.input,m=z(c),p=[{timestamp:n,type:"tool_use",toolName:i,toolUseId:a,toolInput:m}];if(u==="completed"&&d?.output!==void 0){let g=d.output,y=typeof g=="string"?g:JSON.stringify(g);p.push({timestamp:n,type:"tool_result",toolUseId:a,resultPreview:y,isError:false});}else u==="error"&&p.push({timestamp:n,type:"tool_result",toolUseId:a,resultPreview:String(d?.error||"tool error"),isError:true});return p}return []}};});function kt(o,e,t){if(t){let r=oe[t];if(r?.parseEvent)return r.parseEvent(e,o)}for(let r of Object.values(oe)){let n=r.parseEvent?.(e,o)??[];if(n.length>0)return n}return []}var oe,ke=M(()=>{l();yt();ht();wt();vt();xt();yt();ht();wt();vt();xt();ve();oe={claude:Ge,gemini:Ye,copilot:Ze,codex:et,opencode:tt};});function Kn(o){let e=o.split(`
14
+ `):r||o.trim()},parseResultMeta(o){let e=W(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 Vn(s,n);if(r==="item.completed"){let i=zn(s,n);return i?[i]:[]}return []}};});var tt,xt=O(()=>{l();ue();xe();tt={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=W(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,u=String(d?.status||""),c=d?.input,m=z(c),p=[{timestamp:n,type:"tool_use",toolName:i,toolUseId:a,toolInput:m}];if(u==="completed"&&d?.output!==void 0){let g=d.output,h=typeof g=="string"?g:JSON.stringify(g);p.push({timestamp:n,type:"tool_result",toolUseId:a,resultPreview:h,isError:false});}else u==="error"&&p.push({timestamp:n,type:"tool_result",toolUseId:a,resultPreview:String(d?.error||"tool error"),isError:true});return p}return []}};});var kt,At=O(()=>{l();kt={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 Pt(o,e,t){if(t){let r=oe[t];if(r?.parseEvent)return r.parseEvent(e,o)}for(let r of Object.values(oe)){let n=r.parseEvent?.(e,o)??[];if(n.length>0)return n}return []}var oe,ke=O(()=>{l();yt();ht();wt();vt();xt();At();yt();ht();wt();vt();xt();At();ve();oe={claude:Ge,gemini:Ye,copilot:Ze,codex:et,opencode:tt,antigravity:kt};});function Xn(o){let e=o.split(`
16
16
  `).filter(d=>d.trim()),t=[],r=[],n=[],s=[],i=[],a=null;for(let d of e)try{let u=JSON.parse(d);if(u.type==="assistant"&&Array.isArray(u.message?.content))for(let c of u.message.content)c.type==="text"&&typeof c.text=="string"&&c.text.trim()&&t.push(c.text.trim());if(u.type==="message"&&u.role==="assistant"&&u.delta===!0&&typeof u.content=="string"&&r.push(u.content),u.type==="assistant.message"&&typeof u.data?.content=="string"){let c=u.data.content;c.trim()&&n.push(c.trim());}if(u.type==="item.completed"&&(u.item?.type==="message"||u.item?.type==="agent_message")&&typeof u.item?.text=="string"){let c=u.item.text;c.trim()&&s.push(c.trim());}if(u.type==="text"&&typeof u.part?.text=="string"){let c=u.part.text;c.trim()&&i.push(c.trim());}u.type==="result"&&typeof u.result=="string"&&(a=u.result);}catch{}return t.length>0?t.join(`
17
17
 
18
18
  `):r.length>0?r.join(""):n.length>0?n.join(`
19
19
 
20
20
  `):s.length>0?s.join(`
21
21
 
22
- `):i.length>0?i.join(""):a||o.trim()}function Jn(o){let e=W(o);return e?{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0}:null}function Xn(o,e,t=process.platform){return o==="copilot"&&t==="win32"&&e instanceof b&&e.message.includes('CLI command "copilot" not found')}function fr(o,e,t,r,n,s,i){return new Promise((a,d)=>{let u=n?.timeoutMs??36e5,c=Pe({command:o,allowShellFallback:true}),m=Re(c,e),p=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&&p.stdin.write(s),p.stdin.end(),p.pid!==void 0&&n?.onPid?.(p.pid);let g=false,y=false,v=()=>{try{p.kill("SIGKILL");}catch{}},A=setTimeout(()=>{if(!g){y=true;try{p.kill("SIGTERM");}catch{}setTimeout(v,mr).unref();}},u);A.unref();let x="",C="",E="",_="";p.stdout.on("data",L=>{let $=L.toString();x+=$,E+=$;let T=E.split(`
23
- `);E=T.pop()??"";for(let I of T)if(I.trim()&&(n?.onOutput?.(I,"stdout"),i?.extractFailure)){let k=i.extractFailure(I);if(k){g=true,clearTimeout(A);try{p.kill("SIGTERM");}catch{}setTimeout(v,mr).unref(),d(k);return}}}),p.stderr.on("data",L=>{let $=L.toString();C+=$,_+=$;let T=_.split(`
24
- `);_=T.pop()??"";for(let I of T)I.trim()&&n?.onOutput?.(I,"stderr");}),p.on("error",L=>{g=true,clearTimeout(A),L.code==="ENOENT"?d(new b(`CLI command "${o}" not found. Is ${t} installed?`,t)):d(new b(`Spawn error: ${L.message}`,t));}),p.on("close",L=>{if(g)return;g=true,clearTimeout(A),E.trim()&&n?.onOutput?.(E,"stdout"),_.trim()&&n?.onOutput?.(_,"stderr");let $=L??0;if(n?.onExitCode?.($),y&&L!==0)return d(new be(`Total runtime exceeded ${u}ms; process killed.`,t));if($!==0){if(i?.interpretExit){let I=i.interpretExit($,C);if(I){d(I);return}}d(new b(`Process exited with code ${$}: ${C.slice(0,500)}`,t));return}let T=i?i.extractText(x):Kn(x);a({stdout:x,parsed:T});});})}function ee(o,e){yr.set(o,e);}function te(o){let e=o.split("/");if(e.length!==2)throw new b(`Invalid provider format: "${o}". Expected namespace/id (e.g., cli/claude)`,o);let[t,r]=e,n=yr.get(t);if(n)return n(r,o);if(t==="cli"){let s=oe[r];if(!s)throw new b(`Unknown CLI provider id: "${r}". Supported: ${Object.keys(oe).join(", ")}`,o);return new At(r,s,o)}throw new b(`Unsupported provider namespace: "${t}". Register a factory with registerProviderFactory('${t}', factory).`,o)}var b,be,mr,K,yr,At,Q=M(()=>{l();Qe();ue();ke();b=class extends Error{constructor(t,r){super(t);this.providerStr=r;this.name="ProviderError";}providerStr},be=class extends b{constructor(e,t){super(e,t),this.name="TotalTimeoutError";}};mr=2e3;K=class extends Error{constructor(t,r){super(`Client tool call required: ${t.toolName}`);this.toolCall=t;this.continuationState=r;}toolCall;continuationState;name="ClientToolCallRequiredError"},yr=new Map;At=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||o.trim()}function Qn(o){let e=W(o);return e?{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0}:null}function Gn(o,e,t=process.platform){return o==="copilot"&&t==="win32"&&e instanceof b&&e.message.includes('CLI command "copilot" not found')}function hr(o,e,t,r,n,s,i){return new Promise((a,d)=>{let u=n?.timeoutMs??36e5,c=Pe({command:o,allowShellFallback:true}),m=Re(c,e),p=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&&p.stdin.write(s),p.stdin.end(),p.pid!==void 0&&n?.onPid?.(p.pid);let g=false,h=false,v=()=>{try{p.kill("SIGKILL");}catch{}},A=setTimeout(()=>{if(!g){h=true;try{p.kill("SIGTERM");}catch{}setTimeout(v,yr).unref();}},u);A.unref();let x="",C="",E="",_="";p.stdout.on("data",L=>{let $=L.toString();x+=$,E+=$;let T=E.split(`
23
+ `);E=T.pop()??"";for(let I of T)if(I.trim()&&(n?.onOutput?.(I,"stdout"),i?.extractFailure)){let k=i.extractFailure(I);if(k){g=true,clearTimeout(A);try{p.kill("SIGTERM");}catch{}setTimeout(v,yr).unref(),d(k);return}}}),p.stderr.on("data",L=>{let $=L.toString();C+=$,_+=$;let T=_.split(`
24
+ `);_=T.pop()??"";for(let I of T)I.trim()&&n?.onOutput?.(I,"stderr");}),p.on("error",L=>{g=true,clearTimeout(A),L.code==="ENOENT"?d(new b(`CLI command "${o}" not found. Is ${t} installed?`,t)):d(new b(`Spawn error: ${L.message}`,t));}),p.on("close",L=>{if(g)return;g=true,clearTimeout(A),E.trim()&&n?.onOutput?.(E,"stdout"),_.trim()&&n?.onOutput?.(_,"stderr");let $=L??0;if(n?.onExitCode?.($),h&&L!==0)return d(new be(`Total runtime exceeded ${u}ms; process killed.`,t));if($!==0){if(i?.interpretExit){let I=i.interpretExit($,C);if(I){d(I);return}}d(new b(`Process exited with code ${$}: ${C.slice(0,500)}`,t));return}let T=i?i.extractText(x):Xn(x);a({stdout:x,parsed:T});});})}function ee(o,e){wr.set(o,e);}function te(o){let e=o.split("/");if(e.length!==2)throw new b(`Invalid provider format: "${o}". Expected namespace/id (e.g., cli/claude)`,o);let[t,r]=e,n=wr.get(t);if(n)return n(r,o);if(t==="cli"){let s=oe[r];if(!s)throw new b(`Unknown CLI provider id: "${r}". Supported: ${Object.keys(oe).join(", ")}`,o);return new Rt(r,s,o)}throw new b(`Unsupported provider namespace: "${t}". Register a factory with registerProviderFactory('${t}', factory).`,o)}var b,be,yr,K,wr,Rt,Q=O(()=>{l();Qe();ue();ke();b=class extends Error{constructor(t,r){super(t);this.providerStr=r;this.name="ProviderError";}providerStr},be=class extends b{constructor(e,t){super(e,t),this.name="TotalTimeoutError";}};yr=2e3;K=class extends Error{constructor(t,r){super(`Client tool call required: ${t.toolName}`);this.toolCall=t;this.continuationState=r;}toolCall;continuationState;name="ClientToolCallRequiredError"},wr=new Map;Rt=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}
25
25
 
26
26
  ---
27
27
 
28
- ${e}`:e}async runProcess(e,t,r){try{return await fr(this.adapter.command,e,this.providerStr,this.providerId,t,r,this.adapter)}catch(n){if(Xn(this.providerId,n)){let s=e[0]==="copilot"?e:["copilot",...e];return fr("gh",s,this.providerStr,this.providerId,t,r,this.adapter)}throw n}}handleResultMeta(e,t){if(!this.adapter.parseResultMeta){let i=Jn(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 $r,Lr,Me,Dt=M(()=>{l();Q();$r=10,Lr=50,Me=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??$r,Lr);try{let u=0,c=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:p=>{if(u++,!!r?.onOutput){if(p.toolCalls&&p.toolCalls.length>0)for(let g of p.toolCalls)r.onOutput(JSON.stringify({type:"assistant",message:{content:[{type:"tool_use",id:g.toolCallId,name:g.toolName,input:g.args}]}}),"stdout");if(p.toolResults&&p.toolResults.length>0)for(let g of p.toolResults){let y=typeof g.result=="string"?g.result:JSON.stringify(g.result);r.onOutput(JSON.stringify({type:"user",message:{content:[{type:"tool_result",tool_use_id:g.toolCallId,output:y,is_error:!1}]}}),"stdout");}}}}),m=new Set((r?.tools??[]).filter(p=>!p.execute).map(p=>p.name));if(c.finishReason==="tool-calls"&&Array.isArray(c.toolCalls)&&c.toolCalls.length>0){let p=c.toolCalls.filter(g=>m.has(g.toolName));if(p.length>0){let g=p[0];throw new K({toolCallId:g.toolCallId,toolName:g.toolName,args:g.args},{userMessage:e,responseMessages:c.response?.messages??[],toolDefinitions:r?.tools??[],maxSteps:d,systemPrompt:r?.systemPrompt,modelOverride:r?.model})}}if(r?.onUsage&&c.usage){let p={inputTokens:c.usage.promptTokens??0,outputTokens:c.usage.completionTokens??0,cachedInputTokens:0,costUsd:0};r.onUsage(p);}return r?.onModel&&r.onModel(r.model??this.config.model),c.text??""}catch(u){throw u instanceof K?u:u.status===401?new b(`Authentication failed for ${this.config.provider}. Check your API key.`,this.config.provider):u.status===429?new b(`Rate limit exceeded for ${this.config.provider}.`,this.config.provider):new b(`Provider error: ${u.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??$r,Lr),u=[{role:"user",content:e.userMessage},...e.responseMessages,{role:"tool",content:t.map(c=>({type:"tool-result",toolCallId:c.toolCallId,toolName:c.toolName,result:typeof c.result=="string"?c.result:JSON.stringify(c.result)}))}];try{let c=await n({model:a,system:e.systemPrompt??void 0,messages:u,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(p=>!p.execute).map(p=>p.name));if(c.finishReason==="tool-calls"&&Array.isArray(c.toolCalls)&&c.toolCalls.length>0){let p=c.toolCalls.filter(g=>m.has(g.toolName));if(p.length>0){let g=p[0];throw new K({toolCallId:g.toolCallId,toolName:g.toolName,args:g.args},{userMessage:e.userMessage,responseMessages:[...e.responseMessages,{role:"tool",content:t.map(y=>({type:"tool-result",toolCallId:y.toolCallId,toolName:y.toolName,result:typeof y.result=="string"?y.result:JSON.stringify(y.result)}))},...c.response?.messages??[]],toolDefinitions:e.toolDefinitions,maxSteps:e.maxSteps,systemPrompt:e.systemPrompt,modelOverride:e.modelOverride})}}return r?.onUsage&&c.usage&&r.onUsage({inputTokens:c.usage.promptTokens??0,outputTokens:c.usage.completionTokens??0,cachedInputTokens:0,costUsd:0}),r?.onModel&&r.onModel(e.modelOverride??this.config.model),c.text??""}catch(c){throw c instanceof K?c:new b(`Provider error: ${c.message}`,this.config.provider)}}convertTools(e,t){let{z:r}=q("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}=q("@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}=q("@ai-sdk/openai");return i({apiKey:r||process.env.OPENAI_API_KEY,...n&&{baseURL:n}})(s)}case "api/anthropic":{let{createAnthropic:i}=q("@ai-sdk/anthropic");return i({apiKey:r||process.env.ANTHROPIC_API_KEY,...n&&{baseURL:n}})(s)}case "api/google":{let{createGoogleGenerativeAI:i}=q("@ai-sdk/google");return i({apiKey:r||process.env.GOOGLE_API_KEY})(s)}default:throw new b(`Unsupported API provider: ${t}`,t)}}};});var jr={};We(jr,{registerApiProviders:()=>Dr});function Dr(o){ee("api",(e,t)=>{let r=o?.apiKeys?.[e];return new Me({provider:t,model:"",apiKey:r,maxSteps:o?.defaults?.maxSteps,temperature:o?.defaults?.temperature})});}var jt=M(()=>{l();Q();Dt();});function Ht(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 J(o,e){try{let t=JSON.parse(o);if(t!=null&&typeof t=="object"&&typeof t.type=="string"&&Oo.has(t.type)){let r=e??new Date().toISOString();return [{...t,timestamp:t.timestamp||r}]}}catch{}return []}var Oo,ie=M(()=>{l();Oo=new Set(["text","tool_use","tool_result","error","agent_call"]);});var ne,Ut=M(()=>{l();ne=class extends Error{constructor(t,r,n){super(t);this.code=r;this.data=n;}code;data;name="AcpProtocolError"};});var Lo,Do,Hr,Ur,me,nt=M(()=>{l();Ut();Q();Lo=-32e3,Do=2e3,Hr=3e4,Ur=1e4,me=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 b("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});n.pid!==void 0&&this.options.onPid?.(n.pid),n.stderr.on("data",g=>{let y=g.toString();this.collectedStderr+=y,this.stderrBuffer+=y;let v=this.stderrBuffer.split(`
29
- `);this.stderrBuffer=v.pop()??"";for(let w of v)w.trim()&&this.options.onStderr?.(w);}),this.proc=n;let s=new WritableStream({write:g=>new Promise((y,v)=>{n.stdin.write(g,w=>{w?v(w):y();});}),close:()=>{n.stdin.end();}}),i=new ReadableStream({start:g=>{n.stdout.on("data",y=>{g.enqueue(new Uint8Array(y));}),n.stdout.on("end",()=>{g.close();}),n.stdout.on("error",y=>{g.error(y);});}}),a=ndJsonStream(s,i),d=this,u=new ClientSideConnection(g=>({requestPermission:async y=>{if(d.options.configOptions?.allow_all!==void 0){let v=y.options;if(Array.isArray(v)&&v.length>0)return {outcome:{outcome:"selected",optionId:(v.find(A=>A.kind==="allow_once")??v.find(A=>A.kind?.startsWith("allow_"))??v[0]).optionId}}}return {outcome:{outcome:"cancelled"}}},sessionUpdate:async y=>{d.pendingUpdateCallback?.(y);}}),a);this.sdkConnection=u;let c=new Promise((g,y)=>{n.on("error",v=>{if(v.code==="ENOENT"){let A=t.command==="npx"&&t.args.length>0?`@agentclientprotocol/${t.args[0]}`:t.command;y(new b(`ACP command "${t.command}" not found. Is the ACP adapter installed? Try: npm install -g ${A}`,"acp"));}else y(new b(`ACP spawn error: ${v.message}`,"acp"));});}),m=this.doInitialize(u,e),p=new Promise((g,y)=>{setTimeout(()=>{y(new ne(`ACP connect timeout after ${Hr}ms. The ACP adapter may not be installed or may require interactive setup.`));},Hr).unref();});await Promise.race([m,p,c]);}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 b("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 b("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 ne(`ACP session/new timeout after ${Ur}ms`));},Ur).unref();});return Promise.race([t,r])}isAuthError(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code===Lo}async tryAuthenticate(){if(!this.sdkConnection)throw new b("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 ne(`ACP authentication required. Missing environment variables: ${n.join(", ")}. Set them in your shell or crewx.yaml env block.`)}throw new ne(`ACP authentication required but no supported method found. Available methods: ${t}. CrewX currently supports env_var authentication only.`)}throw new ne("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 b("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 b("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 b("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 b("AcpConnection not connected. Call connect() first.","acp");this.pendingUpdateCallback=r??null;let s=this.sdkConnection,i=this.proc,a=n??36e5,d=s.prompt({sessionId:e,prompt:t}),u=new Promise((m,p)=>{setTimeout(()=>{s.cancel({sessionId:e}).catch(()=>{}),p(new be(`ACP prompt timeout after ${a}ms`,"acp"));},a).unref();}),c=new Promise((m,p)=>{let g=y=>{y!==0&&p(new b(`ACP process exited unexpectedly (code=${String(y)}): ${this.collectedStderr.slice(0,500)}`,"acp"));};i.once("close",g),d.then(()=>i.off("close",g)).catch(()=>i.off("close",g));});try{return await Promise.race([d,u,c])}finally{this.pendingUpdateCallback=null;}}async dispose(){if(this.disposed)return;this.disposed=true,this.pendingUpdateCallback=null,this.sdkConnection=null;let e=this.proc;e&&(this.proc=null,this.stderrBuffer.trim()&&(this.options.onStderr?.(this.stderrBuffer),this.stderrBuffer=""),await new Promise(t=>{let r=()=>{clearTimeout(n),t();};e.once("close",r),e.once("error",r);try{e.kill("SIGTERM");}catch{r();return}let n=setTimeout(()=>{try{e.kill("SIGKILL");}catch{}},Do);}));}get isConnected(){return !this.disposed&&this.sdkConnection!==null&&this.proc!==null}};});function Fr(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,Ne,Ft=M(()=>{l();ie();nt();jo={read:"Read",edit:"Edit",delete:"Delete",move:"Move",search:"Search",execute:"Bash",think:"Think",fetch:"WebFetch",switch_mode:"SwitchMode"};Ne=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 me({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),u=[],c=await s.prompt(a,d,m=>this.handleUpdate(m,t,u),t?.timeoutMs);return this.handleUsage(c,t),u.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 hr(this.adapter.command,e,this.providerStr,this.providerId,t,r,this.adapter)}catch(n){if(Gn(this.providerId,n)){let s=e[0]==="copilot"?e:["copilot",...e];return hr("gh",s,this.providerStr,this.providerId,t,r,this.adapter)}throw n}}handleResultMeta(e,t){if(!this.adapter.parseResultMeta){let i=Qn(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 Dr,jr,Me,Ht=O(()=>{l();Q();Dr=10,jr=50,Me=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??Dr,jr);try{let u=0,c=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:p=>{if(u++,!!r?.onOutput){if(p.toolCalls&&p.toolCalls.length>0)for(let g of p.toolCalls)r.onOutput(JSON.stringify({type:"assistant",message:{content:[{type:"tool_use",id:g.toolCallId,name:g.toolName,input:g.args}]}}),"stdout");if(p.toolResults&&p.toolResults.length>0)for(let g of p.toolResults){let h=typeof g.result=="string"?g.result:JSON.stringify(g.result);r.onOutput(JSON.stringify({type:"user",message:{content:[{type:"tool_result",tool_use_id:g.toolCallId,output:h,is_error:!1}]}}),"stdout");}}}}),m=new Set((r?.tools??[]).filter(p=>!p.execute).map(p=>p.name));if(c.finishReason==="tool-calls"&&Array.isArray(c.toolCalls)&&c.toolCalls.length>0){let p=c.toolCalls.filter(g=>m.has(g.toolName));if(p.length>0){let g=p[0];throw new K({toolCallId:g.toolCallId,toolName:g.toolName,args:g.args},{userMessage:e,responseMessages:c.response?.messages??[],toolDefinitions:r?.tools??[],maxSteps:d,systemPrompt:r?.systemPrompt,modelOverride:r?.model})}}if(r?.onUsage&&c.usage){let p={inputTokens:c.usage.promptTokens??0,outputTokens:c.usage.completionTokens??0,cachedInputTokens:0,costUsd:0};r.onUsage(p);}return r?.onModel&&r.onModel(r.model??this.config.model),c.text??""}catch(u){throw u instanceof K?u:u.status===401?new b(`Authentication failed for ${this.config.provider}. Check your API key.`,this.config.provider):u.status===429?new b(`Rate limit exceeded for ${this.config.provider}.`,this.config.provider):new b(`Provider error: ${u.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??Dr,jr),u=[{role:"user",content:e.userMessage},...e.responseMessages,{role:"tool",content:t.map(c=>({type:"tool-result",toolCallId:c.toolCallId,toolName:c.toolName,result:typeof c.result=="string"?c.result:JSON.stringify(c.result)}))}];try{let c=await n({model:a,system:e.systemPrompt??void 0,messages:u,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(p=>!p.execute).map(p=>p.name));if(c.finishReason==="tool-calls"&&Array.isArray(c.toolCalls)&&c.toolCalls.length>0){let p=c.toolCalls.filter(g=>m.has(g.toolName));if(p.length>0){let g=p[0];throw new K({toolCallId:g.toolCallId,toolName:g.toolName,args:g.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)}))},...c.response?.messages??[]],toolDefinitions:e.toolDefinitions,maxSteps:e.maxSteps,systemPrompt:e.systemPrompt,modelOverride:e.modelOverride})}}return r?.onUsage&&c.usage&&r.onUsage({inputTokens:c.usage.promptTokens??0,outputTokens:c.usage.completionTokens??0,cachedInputTokens:0,costUsd:0}),r?.onModel&&r.onModel(e.modelOverride??this.config.model),c.text??""}catch(c){throw c instanceof K?c:new b(`Provider error: ${c.message}`,this.config.provider)}}convertTools(e,t){let{z:r}=q("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}=q("@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}=q("@ai-sdk/openai");return i({apiKey:r||process.env.OPENAI_API_KEY,...n&&{baseURL:n}})(s)}case "api/anthropic":{let{createAnthropic:i}=q("@ai-sdk/anthropic");return i({apiKey:r||process.env.ANTHROPIC_API_KEY,...n&&{baseURL:n}})(s)}case "api/google":{let{createGoogleGenerativeAI:i}=q("@ai-sdk/google");return i({apiKey:r||process.env.GOOGLE_API_KEY})(s)}default:throw new b(`Unsupported API provider: ${t}`,t)}}};});var Ur={};We(Ur,{registerApiProviders:()=>Hr});function Hr(o){ee("api",(e,t)=>{let r=o?.apiKeys?.[e];return new Me({provider:t,model:"",apiKey:r,maxSteps:o?.defaults?.maxSteps,temperature:o?.defaults?.temperature})});}var Ut=O(()=>{l();Q();Ht();});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 J(o,e){try{let t=JSON.parse(o);if(t!=null&&typeof t=="object"&&typeof t.type=="string"&&No.has(t.type)){let r=e??new Date().toISOString();return [{...t,timestamp:t.timestamp||r}]}}catch{}return []}var No,ie=O(()=>{l();No=new Set(["text","tool_use","tool_result","error","agent_call"]);});var ne,qt=O(()=>{l();ne=class extends Error{constructor(t,r,n){super(t);this.code=r;this.data=n;}code;data;name="AcpProtocolError"};});var jo,Ho,Fr,qr,me,nt=O(()=>{l();qt();Q();jo=-32e3,Ho=2e3,Fr=3e4,qr=1e4,me=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 b("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});n.pid!==void 0&&this.options.onPid?.(n.pid),n.stderr.on("data",g=>{let h=g.toString();this.collectedStderr+=h,this.stderrBuffer+=h;let v=this.stderrBuffer.split(`
29
+ `);this.stderrBuffer=v.pop()??"";for(let w of v)w.trim()&&this.options.onStderr?.(w);}),this.proc=n;let s=new WritableStream({write:g=>new Promise((h,v)=>{n.stdin.write(g,w=>{w?v(w):h();});}),close:()=>{n.stdin.end();}}),i=new ReadableStream({start:g=>{n.stdout.on("data",h=>{g.enqueue(new Uint8Array(h));}),n.stdout.on("end",()=>{g.close();}),n.stdout.on("error",h=>{g.error(h);});}}),a=ndJsonStream(s,i),d=this,u=new ClientSideConnection(g=>({requestPermission:async h=>{if(d.options.configOptions?.allow_all!==void 0){let v=h.options;if(Array.isArray(v)&&v.length>0)return {outcome:{outcome:"selected",optionId:(v.find(A=>A.kind==="allow_once")??v.find(A=>A.kind?.startsWith("allow_"))??v[0]).optionId}}}return {outcome:{outcome:"cancelled"}}},sessionUpdate:async h=>{d.pendingUpdateCallback?.(h);}}),a);this.sdkConnection=u;let c=new Promise((g,h)=>{n.on("error",v=>{if(v.code==="ENOENT"){let A=t.command==="npx"&&t.args.length>0?`@agentclientprotocol/${t.args[0]}`:t.command;h(new b(`ACP command "${t.command}" not found. Is the ACP adapter installed? Try: npm install -g ${A}`,"acp"));}else h(new b(`ACP spawn error: ${v.message}`,"acp"));});}),m=this.doInitialize(u,e),p=new Promise((g,h)=>{setTimeout(()=>{h(new ne(`ACP connect timeout after ${Fr}ms. The ACP adapter may not be installed or may require interactive setup.`));},Fr).unref();});await Promise.race([m,p,c]);}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 b("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 b("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 ne(`ACP session/new timeout after ${qr}ms`));},qr).unref();});return Promise.race([t,r])}isAuthError(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code===jo}async tryAuthenticate(){if(!this.sdkConnection)throw new b("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 ne(`ACP authentication required. Missing environment variables: ${n.join(", ")}. Set them in your shell or crewx.yaml env block.`)}throw new ne(`ACP authentication required but no supported method found. Available methods: ${t}. CrewX currently supports env_var authentication only.`)}throw new ne("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 b("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 b("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 b("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 b("AcpConnection not connected. Call connect() first.","acp");this.pendingUpdateCallback=r??null;let s=this.sdkConnection,i=this.proc,a=n??36e5,d=s.prompt({sessionId:e,prompt:t}),u=new Promise((m,p)=>{setTimeout(()=>{s.cancel({sessionId:e}).catch(()=>{}),p(new be(`ACP prompt timeout after ${a}ms`,"acp"));},a).unref();}),c=new Promise((m,p)=>{let g=h=>{h!==0&&p(new b(`ACP process exited unexpectedly (code=${String(h)}): ${this.collectedStderr.slice(0,500)}`,"acp"));};i.once("close",g),d.then(()=>i.off("close",g)).catch(()=>i.off("close",g));});try{return await Promise.race([d,u,c])}finally{this.pendingUpdateCallback=null;}}async dispose(){if(this.disposed)return;this.disposed=true,this.pendingUpdateCallback=null,this.sdkConnection=null;let e=this.proc;e&&(this.proc=null,this.stderrBuffer.trim()&&(this.options.onStderr?.(this.stderrBuffer),this.stderrBuffer=""),await new Promise(t=>{let r=()=>{clearTimeout(n),t();};e.once("close",r),e.once("error",r);try{e.kill("SIGTERM");}catch{r();return}let n=setTimeout(()=>{try{e.kill("SIGKILL");}catch{}},Ho);}));}get isConnected(){return !this.disposed&&this.sdkConnection!==null&&this.proc!==null}};});function Wr(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 Uo,Ne,Wt=O(()=>{l();ie();nt();Uo={read:"Read",edit:"Edit",delete:"Delete",move:"Move",search:"Search",execute:"Bash",think:"Think",fetch:"WebFetch",switch_mode:"SwitchMode"};Ne=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 me({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),u=[],c=await s.prompt(a,d,m=>this.handleUpdate(m,t,u),t?.timeoutMs);return this.handleUsage(c,t),u.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(`
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=Ht(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),u={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:d.toolName,toolInput:d.toolInput};t?.onTaskLog?.([u]);}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),u={timestamp:s,type:"tool_result",toolUseId:i.toolCallId,resultPreview:d,isError:i.status==="failed"};t?.onTaskLog?.([u]);}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},u=this.resolveToolCall(d),c={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:u.toolName,toolInput:u.toolInput};t?.onTaskLog?.([c]);}}else n.sessionUpdate;}resolveToolCall(e){let t=e._meta;if(t?.claudeCode?.toolName)return {toolName:t.claudeCode.toolName,toolInput:Fr(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=Fr(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 ot,qt=M(()=>{l();ie();ot={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:J};});var st,Wt=M(()=>{l();ie();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(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){return e&&o?{type:"set_model",modelId:`${e}[${o}]`}:e&&!o?{type:"set_model",modelId:`${e}[medium]`}:null},resolveMode(o){return {yolo:"agent-full-access",default:"agent",plan:"read-only"}[o]??o},parseEvent:J};});var it,Bt=M(()=>{l();ie();it={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:J};});var Ae,at,Vt=M(()=>{l();ie();Ae="https://agentclientprotocol.com/protocol/session-modes",at={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:`${Ae}#autopilot`,buildEffortAction(o){return o?{type:"set_config_option",configId:"reasoning_effort",value:o}:null},resolveMode(o){return o.startsWith("https://")?o:{yolo:`${Ae}#autopilot`,default:`${Ae}#agent`,agent:`${Ae}#agent`,plan:`${Ae}#plan`,autopilot:`${Ae}#autopilot`}[o]??null},parseEvent:J};});var dt,zt=M(()=>{l();ie();dt={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 o?{type:"set_config_option",configId:"effort",value:o}:null},resolveMode(o){let e={default:"build"};return o==="yolo"?null:e[o]??o},parseEvent:J};});var fe,lt=M(()=>{l();qt();Wt();Bt();Vt();zt();qt();Wt();Bt();Vt();zt();fe={claude:ot,codex:st,gemini:it,copilot:at,opencode:dt};});var Wr={};We(Wr,{registerAcpProviders:()=>qr});function qr(o){if(o){ee("acp",o);return}ee("acp",(e,t)=>{let r=fe[e];if(!r)throw new b(`Unknown ACP provider id: "${e}". Supported: ${Object.keys(fe).join(", ")}`,t);return new Ne(e,r,t)});}var Kt=M(()=>{l();Q();Ft();lt();Q();});function Uo(o){if(!o)return o;let e=o.trim().replace(/\/+$/,"");return e.toLowerCase().endsWith("/mcp")?e.slice(0,-4):e}var $e,Jt=M(()=>{l();$e=class{endpoint;headers;timeoutMs;constructor(e){let t=Uo(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,Xt=M(()=>{l();Jt();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 $e({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 Vr={};We(Vr,{RemoteProviderRuntime:()=>De,createRemoteProviderFactory:()=>Br,resolveFileRemoteAgent:()=>Jo});function zo(o){let e=readFileSync(o,"utf-8"),t=load(e);return {agents:Array.isArray(t?.agents)?t.agents:void 0}}function Ko(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 Jo(o,e=zo,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=Ko(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 Br(o,e=te){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 De(t,n,e)}}function Xo(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 De,Qt=M(()=>{l();Q();Xt();De=class{manager;agentId;constructor(e,t,r=te){this.agentId=t.external_agent_id??e,this.manager=new Le;let n=Xo(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(`
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),u={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:d.toolName,toolInput:d.toolInput};t?.onTaskLog?.([u]);}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),u={timestamp:s,type:"tool_result",toolUseId:i.toolCallId,resultPreview:d,isError:i.status==="failed"};t?.onTaskLog?.([u]);}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},u=this.resolveToolCall(d),c={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:u.toolName,toolInput:u.toolInput};t?.onTaskLog?.([c]);}}else n.sessionUpdate;}resolveToolCall(e){let t=e._meta;if(t?.claudeCode?.toolName)return {toolName:t.claudeCode.toolName,toolInput:Wr(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=Uo[e.kind??""]??e.title??"unknown",n=Wr(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 ot,Bt=O(()=>{l();ie();ot={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:J};});var st,Vt=O(()=>{l();ie();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(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){return e&&o?{type:"set_model",modelId:`${e}[${o}]`}:e&&!o?{type:"set_model",modelId:`${e}[medium]`}:null},resolveMode(o){return {yolo:"agent-full-access",default:"agent",plan:"read-only"}[o]??o},parseEvent:J};});var it,zt=O(()=>{l();ie();it={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:J};});var Ae,at,Kt=O(()=>{l();ie();Ae="https://agentclientprotocol.com/protocol/session-modes",at={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:`${Ae}#autopilot`,buildEffortAction(o){return o?{type:"set_config_option",configId:"reasoning_effort",value:o}:null},resolveMode(o){return o.startsWith("https://")?o:{yolo:`${Ae}#autopilot`,default:`${Ae}#agent`,agent:`${Ae}#agent`,plan:`${Ae}#plan`,autopilot:`${Ae}#autopilot`}[o]??null},parseEvent:J};});var dt,Jt=O(()=>{l();ie();dt={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 o?{type:"set_config_option",configId:"effort",value:o}:null},resolveMode(o){let e={default:"build"};return o==="yolo"?null:e[o]??o},parseEvent:J};});var fe,lt=O(()=>{l();Bt();Vt();zt();Kt();Jt();Bt();Vt();zt();Kt();Jt();fe={claude:ot,codex:st,gemini:it,copilot:at,opencode:dt};});var Vr={};We(Vr,{registerAcpProviders:()=>Br});function Br(o){if(o){ee("acp",o);return}ee("acp",(e,t)=>{let r=fe[e];if(!r)throw new b(`Unknown ACP provider id: "${e}". Supported: ${Object.keys(fe).join(", ")}`,t);return new Ne(e,r,t)});}var Xt=O(()=>{l();Q();Wt();lt();Q();});function qo(o){if(!o)return o;let e=o.trim().replace(/\/+$/,"");return e.toLowerCase().endsWith("/mcp")?e.slice(0,-4):e}var $e,Qt=O(()=>{l();$e=class{endpoint;headers;timeoutMs;constructor(e){let t=qo(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,Gt=O(()=>{l();Qt();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 $e({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 Kr={};We(Kr,{RemoteProviderRuntime:()=>De,createRemoteProviderFactory:()=>zr,resolveFileRemoteAgent:()=>Qo});function Jo(o){let e=readFileSync(o,"utf-8"),t=load(e);return {agents:Array.isArray(t?.agents)?t.agents:void 0}}function Xo(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 Qo(o,e=Jo,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=Xo(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 zr(o,e=te){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 De(t,n,e)}}function Go(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 De,Yt=O(()=>{l();Q();Gt();De=class{manager;agentId;constructor(e,t,r=te){this.agentId=t.external_agent_id??e,this.manager=new Le;let n=Go(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
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 Xr={};We(Xr,{PluginProviderRuntime:()=>je,createPluginProviderFactory:()=>Jr});function Jr(o){return (e,t)=>{let r=o.get(e);if(!r)throw new b(`Plugin provider "${e}" not found. Available: ${Array.from(o.keys()).join(", ")||"(none)"}`,`plugin/${e}`);return new je(e,r)}}function zr(o,e,t,r){let n=o.map(s=>s.replace(/\{model\}/g,e));return r&&n.push(t),n}function Go(o){if(!o||typeof o!="string")throw new Error("Plugin provider requires a cli_command")}function Kr(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 Yo(o){for(let{pattern:e}of o)if(typeof e!="string")throw new Error("Error pattern must be a string")}function Zo(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 je,Gt=M(()=>{l();Q();Qe();je=class{constructor(e,t){this.config=t;this.providerStr=`plugin/${e}`,Go(t.cli_command),Kr(t.query_args),Kr(t.execute_args),t.error_patterns&&Yo(t.error_patterns),t.env&&Zo(t.env);}config;providerStr;async query(e,t){let r=t?.model??this.config.default_model??"default",n=zr(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=zr(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=Pe({command:this.config.cli_command,allowShellFallback:true}),u=Re(d,e),c=spawn(u.command,u.argv,{env:a,shell:u.shell??false,stdio:["pipe","pipe","pipe"],windowsHide:u.windowsHide});r!==void 0&&c.stdin.write(r),c.stdin.end(),c.pid!==void 0&&t?.onPid?.(c.pid);let m="",p="",g="",y="";c.stdout.on("data",w=>{let A=w.toString();m+=A,g+=A;let x=g.split(`
35
- `);g=x.pop()??"";for(let C of x)C.trim()&&t?.onOutput?.(C,"stdout");}),c.stderr.on("data",w=>{let A=w.toString();p+=A,y+=A;let x=y.split(`
36
- `);y=x.pop()??"";for(let C of x)C.trim()&&t?.onOutput?.(C,"stderr");});let v=setTimeout(()=>{c.kill("SIGTERM"),i(new b(`Plugin provider "${this.providerStr}" timed out after ${n}ms`,this.providerStr));},n);c.on("error",w=>{if(clearTimeout(v),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 b(A,this.providerStr));}else i(new b(`Spawn error: ${w.message}`,this.providerStr));}),c.on("close",w=>{clearTimeout(v),g.trim()&&t?.onOutput?.(g,"stdout"),y.trim()&&t?.onOutput?.(y,"stderr");let A=w??0;if(t?.onExitCode?.(A),this.config.error_patterns){let x=p||m;for(let C of this.config.error_patterns)if(x.includes(C.pattern)){i(new b(C.message,this.providerStr));return}}if(w!==0){i(new b(`Process exited with code ${w}: ${p.slice(0,500)}`,this.providerStr));return}s(m.trim());});})}};});l();l();l();function Pn(o){let e=n=>n.replace(/[.+^${}()|[\]\\]/g,"\\$&"),r=o.split("/").map(n=>n==="**"?".*":n.split("*").map(e).join("[^/]*"));return new RegExp(`^${r.join("\\/")}$`)}function X(o,e){try{return Pn(e).test(o)}catch{return false}}l();l();var Rn=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()),cr=z$1.object({include:z$1.array(z$1.string()).optional()}).optional(),Cn=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:Rn.optional(),skills:cr}).catchall(z$1.unknown()),ur=z$1.object({agents:z$1.array(Cn).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 Be(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=Sn(e),r=ur.safeParse(t);if(!r.success)throw new le(`Config validation error: ${r.error.message}`);return r.data}function Ve(o){let e;try{e=readFileSync(o,"utf-8");}catch(t){throw new le(`Cannot read file: ${o}`,t)}return Be(e)}function Sn(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 In(){try{let e=(typeof q=="function"?q:createRequire(typeof h<"u"?h:process.cwd()+"/")).resolve("@crewx/sdk/package.json");return dirname(e)}catch{return null}}function he(o){if(o&&existsSync(o))return o;let e=process.env.CREWX_SDK_TEMPLATES_PATH;if(e&&existsSync(e))return e;let t=In();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.
34
+ `)}};});var Gr={};We(Gr,{PluginProviderRuntime:()=>je,createPluginProviderFactory:()=>Qr});function Qr(o){return (e,t)=>{let r=o.get(e);if(!r)throw new b(`Plugin provider "${e}" not found. Available: ${Array.from(o.keys()).join(", ")||"(none)"}`,`plugin/${e}`);return new je(e,r)}}function Jr(o,e,t,r){let n=o.map(s=>s.replace(/\{model\}/g,e));return r&&n.push(t),n}function Zo(o){if(!o||typeof o!="string")throw new Error("Plugin provider requires a cli_command")}function Xr(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 es(o){for(let{pattern:e}of o)if(typeof e!="string")throw new Error("Error pattern must be a string")}function ts(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 je,Zt=O(()=>{l();Q();Qe();je=class{constructor(e,t){this.config=t;this.providerStr=`plugin/${e}`,Zo(t.cli_command),Xr(t.query_args),Xr(t.execute_args),t.error_patterns&&es(t.error_patterns),t.env&&ts(t.env);}config;providerStr;async query(e,t){let r=t?.model??this.config.default_model??"default",n=Jr(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=Jr(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=Pe({command:this.config.cli_command,allowShellFallback:true}),u=Re(d,e),c=spawn(u.command,u.argv,{env:a,shell:u.shell??false,stdio:["pipe","pipe","pipe"],windowsHide:u.windowsHide});r!==void 0&&c.stdin.write(r),c.stdin.end(),c.pid!==void 0&&t?.onPid?.(c.pid);let m="",p="",g="",h="";c.stdout.on("data",w=>{let A=w.toString();m+=A,g+=A;let x=g.split(`
35
+ `);g=x.pop()??"";for(let C of x)C.trim()&&t?.onOutput?.(C,"stdout");}),c.stderr.on("data",w=>{let A=w.toString();p+=A,h+=A;let x=h.split(`
36
+ `);h=x.pop()??"";for(let C of x)C.trim()&&t?.onOutput?.(C,"stderr");});let v=setTimeout(()=>{c.kill("SIGTERM"),i(new b(`Plugin provider "${this.providerStr}" timed out after ${n}ms`,this.providerStr));},n);c.on("error",w=>{if(clearTimeout(v),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 b(A,this.providerStr));}else i(new b(`Spawn error: ${w.message}`,this.providerStr));}),c.on("close",w=>{clearTimeout(v),g.trim()&&t?.onOutput?.(g,"stdout"),h.trim()&&t?.onOutput?.(h,"stderr");let A=w??0;if(t?.onExitCode?.(A),this.config.error_patterns){let x=p||m;for(let C of this.config.error_patterns)if(x.includes(C.pattern)){i(new b(C.message,this.providerStr));return}}if(w!==0){i(new b(`Process exited with code ${w}: ${p.slice(0,500)}`,this.providerStr));return}s(m.trim());});})}};});l();l();l();function Cn(o){let e=n=>n.replace(/[.+^${}()|[\]\\]/g,"\\$&"),r=o.split("/").map(n=>n==="**"?".*":n.split("*").map(e).join("[^/]*"));return new RegExp(`^${r.join("\\/")}$`)}function X(o,e){try{return Cn(e).test(o)}catch{return false}}l();l();var bn=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()),pr=z$1.object({include:z$1.array(z$1.string()).optional()}).optional(),Tn=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:bn.optional(),skills:pr}).catchall(z$1.unknown()),gr=z$1.object({agents:z$1.array(Tn).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 Be(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=_n(e),r=gr.safeParse(t);if(!r.success)throw new le(`Config validation error: ${r.error.message}`);return r.data}function Ve(o){let e;try{e=readFileSync(o,"utf-8");}catch(t){throw new le(`Cannot read file: ${o}`,t)}return Be(e)}function _n(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 Mn(){try{let e=(typeof q=="function"?q:createRequire(typeof y<"u"?y:process.cwd()+"/")).resolve("@crewx/sdk/package.json");return dirname(e)}catch{return null}}function he(o){if(o&&existsSync(o))return o;let e=process.env.CREWX_SDK_TEMPLATES_PATH;if(e&&existsSync(e))return e;let t=Mn();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
37
  `+(t?` package anchor: ${join(t,ce)}
38
38
  `:` package anchor: (unresolved)
39
39
  `)+r.map(n=>` candidate: ${n}`).join(`
40
40
  `)+`
41
- Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function mt(){let o=he();return {yamlPath:join(o,"default.yaml"),dir:o}}l();var Z=class extends Error{constructor(e,t){let r=t.length>0?` Available: ${t.join(", ")}`:"";super(`Agent not found: "${e}".${r}`),this.name="AgentNotFoundError";}},On={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 Ke(o,e){let t=o.startsWith("@")?o.slice(1):o,r=e.find(s=>s.id===t);if(r)return r;let n=On[t];if(n)return n;throw new Z(o,e.map(s=>s.id))}Q();l();function hr(o,e){if(o===void 0||o==="")return e;let t=parseInt(o,10);return Number.isNaN(t)?e:t}function wr(o=process.env){return {queryMs:hr(o.CREWX_TIMEOUT_QUERY,36e5),executeMs:hr(o.CREWX_TIMEOUT_EXECUTE,36e5)}}l();l();var Gn=[/^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],Yn=/[;|&`$(){}!><\n\r]/,Zn=2,eo=["*","**","*:*","* *","**/*"];function to(){let o={};for(let[e,t]of Object.entries(process.env))t!==void 0&&(Gn.some(r=>r.test(e))||(o[e]=t));return o}function ro(o){if(Yn.test(o))throw new Error(`exec blocked: shell metacharacter detected in "${o}"`)}function no(o){return /^npx\s+@crewx\/[\w-]+/.test(o)}function oo(o){if(eo.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 so(o,e){let t=e.allow??[],r=e.deny??[];for(let n of [...t,...r])oo(n);return r.some(n=>X(o,n))?false:no(o)?true:t.some(n=>X(o,n))}var vr=false;function io(o){vr=o;}function Te(o){if(!vr)return;let e=JSON.stringify({span:"template_exec",...o,timestamp:new Date().toISOString()});console.error(e);}function ao(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 xr(o,e){let t=Date.now(),r=parseInt(process.env.CREWX_EXEC_DEPTH??"0",10);if(isNaN(r)||r>=Zn)return Te({command:o,status:"denied",reason:"invalid or max recursion depth"}),"(exec blocked: max recursion depth reached)";try{ro(o);}catch{return Te({command:o,status:"denied",reason:"shell metacharacter detected"}),`(exec blocked: shell metacharacter detected in "${o}")`}if(!so(o,e))return Te({command:o,status:"denied",reason:"not in allow list"}),`(exec blocked: ${o})`;try{let n=ao(o),[s,...i]=n;if(!s)return `(exec failed: ${o})`;let a=to(),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"]}),u=Date.now()-t;return Te({command:o,status:"allowed",allowed_by:"policy",duration_ms:u}),`<exec-output cmd="${o}">
41
+ Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function mt(){let o=he();return {yamlPath:join(o,"default.yaml"),dir:o}}l();var Z=class extends Error{constructor(e,t){let r=t.length>0?` Available: ${t.join(", ")}`:"";super(`Agent not found: "${e}".${r}`),this.name="AgentNotFoundError";}},Nn={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 Ke(o,e){let t=o.startsWith("@")?o.slice(1):o,r=e.find(s=>s.id===t);if(r)return r;let n=Nn[t];if(n)return n;throw new Z(o,e.map(s=>s.id))}Q();l();function vr(o,e){if(o===void 0||o==="")return e;let t=parseInt(o,10);return Number.isNaN(t)?e:t}function xr(o=process.env){return {queryMs:vr(o.CREWX_TIMEOUT_QUERY,36e5),executeMs:vr(o.CREWX_TIMEOUT_EXECUTE,36e5)}}l();l();var Zn=[/^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],eo=/[;|&`$(){}!><\n\r]/,to=2,ro=["*","**","*:*","* *","**/*"];function no(){let o={};for(let[e,t]of Object.entries(process.env))t!==void 0&&(Zn.some(r=>r.test(e))||(o[e]=t));return o}function oo(o){if(eo.test(o))throw new Error(`exec blocked: shell metacharacter detected in "${o}"`)}function so(o){return /^npx\s+@crewx\/[\w-]+/.test(o)}function io(o){if(ro.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 ao(o,e){let t=e.allow??[],r=e.deny??[];for(let n of [...t,...r])io(n);return r.some(n=>X(o,n))?false:so(o)?true:t.some(n=>X(o,n))}var kr=false;function lo(o){kr=o;}function Te(o){if(!kr)return;let e=JSON.stringify({span:"template_exec",...o,timestamp:new Date().toISOString()});console.error(e);}function co(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 Ar(o,e){let t=Date.now(),r=parseInt(process.env.CREWX_EXEC_DEPTH??"0",10);if(isNaN(r)||r>=to)return Te({command:o,status:"denied",reason:"invalid or max recursion depth"}),"(exec blocked: max recursion depth reached)";try{oo(o);}catch{return Te({command:o,status:"denied",reason:"shell metacharacter detected"}),`(exec blocked: shell metacharacter detected in "${o}")`}if(!ao(o,e))return Te({command:o,status:"denied",reason:"not in allow list"}),`(exec blocked: ${o})`;try{let n=co(o),[s,...i]=n;if(!s)return `(exec failed: ${o})`;let a=no(),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"]}),u=Date.now()-t;return Te({command:o,status:"allowed",allowed_by:"policy",duration_ms:u}),`<exec-output cmd="${o}">
42
42
  ${d.trim()}
43
- </exec-output>`}catch{return Te({command:o,status:"error",reason:"execution failed"}),`(exec failed: ${o})`}}l();function kr(o){return o==null?"":String(o)}l();function Ar(o,e){return `\`\`\`${e?.hash?.lang??""}
43
+ </exec-output>`}catch{return Te({command:o,status:"error",reason:"execution failed"}),`(exec failed: ${o})`}}l();function Pr(o){return o==null?"":String(o)}l();function Rr(o,e){return `\`\`\`${e?.hash?.lang??""}
44
44
  ${o??""}
45
- \`\`\``}l();function Pt(o,e){if(!o)return "";if(o.length<=e)return o;let t=o.length-e;return `${o.substring(0,e)} (...+${t} chars)`}function Rt(o){return Array.isArray(o)||typeof o=="string"?o.length:0}function Ct(o){return typeof o!="string"?"":o.replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;")}var Pr=["B","KB","MB","GB"];function bt(o){if(o===0)return "0 B";let e=Math.min(Math.floor(Math.log(o)/Math.log(1024)),Pr.length-1);return `${Math.round(o/Math.pow(1024,e)*100)/100} ${Pr[e]}`}function Tt(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 Se=class{hbs;execPolicy;execEnabled;constructor(e={}){this.hbs=G.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(xr(n,t)):"(exec disabled)"}),e.registerHelper("include",function(n){return new e.SafeString(kr(n))}),e.registerHelper("fenced_code",function(n,s){return new e.SafeString(Ar(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 Pt(n,s)}),e.registerHelper("length",function(n){return Rt(n)}),e.registerHelper("escapeHandlebars",function(n){return new e.SafeString(Ct(n))}),e.registerHelper("formatFileSize",function(n){return bt(n)}),e.registerHelper("formatTimestamp",function(n){return Tt(n)});}async render(e,t={}){return this.hbs.compile(e,{noEscape:true})(t)}};l();l();var rt=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)}},St=new rt;var pe=class{docs=new Map;fs;constructor(e){this.fs=e??St;}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(`
45
+ \`\`\``}l();function Ct(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 Tt(o){return typeof o!="string"?"":o.replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;")}var Cr=["B","KB","MB","GB"];function St(o){if(o===0)return "0 B";let e=Math.min(Math.floor(Math.log(o)/Math.log(1024)),Cr.length-1);return `${Math.round(o/Math.pow(1024,e)*100)/100} ${Cr[e]}`}function Et(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 Se=class{hbs;execPolicy;execEnabled;constructor(e={}){this.hbs=G.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(Ar(n,t)):"(exec disabled)"}),e.registerHelper("include",function(n){return new e.SafeString(Pr(n))}),e.registerHelper("fenced_code",function(n,s){return new e.SafeString(Rr(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 Ct(n,s)}),e.registerHelper("length",function(n){return bt(n)}),e.registerHelper("escapeHandlebars",function(n){return new e.SafeString(Tt(n))}),e.registerHelper("formatFileSize",function(n){return St(n)}),e.registerHelper("formatTimestamp",function(n){return Et(n)});}async render(e,t={}){return this.hbs.compile(e,{noEscape:true})(t)}};l();l();var rt=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)}},_t=new rt;var pe=class{docs=new Map;fs;constructor(e){this.fs=e??_t;}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
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 U=class extends Error{constructor(t,r,n){super(t);this.layoutId=r;this.cause=n;this.name="LayoutLoadError";}layoutId;cause},re=class extends Error{constructor(t,r=[],n){super(t);this.errors=r;this.cause=n;this.name="PropsValidationError";}errors;cause};var ho={validationMode:"lenient",fallbackLayoutId:"crewx/default"},Ee=class{layouts=new Map;options;constructor(e){this.options={...ho,...e,templatesPath:e?.templatesPath??he()},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 U(`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 U("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 U(`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}},u=this.layouts.get(e),c=u?.template===n&&JSON.stringify(u?.defaultProps??{})===JSON.stringify(d.defaultProps??{})&&JSON.stringify(u?.propsSchema??{})===JSON.stringify(d.propsSchema??{});this.layouts.set(e,d),process.env.CREWX_VERBOSE==="1"&&(u?c||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 U(`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=H.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 U(`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 U(`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 U(`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 U(`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 U(`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 U(`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 wo(o){return Array.from(new Set(o.filter(e=>e?.isAssistant&&e?.metadata?.agent_id).map(e=>String(e.metadata.agent_id))))}function Tr(o,e,t){if(!Array.isArray(o)||o.length===0||!(t&&typeof t.fn=="function"))return "";let n=wo(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 _e=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 re("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 u=[...n,a],c=e[a],m=this.resolveProp(c,d,u,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,u=t.itemOneOf,c=s.length;return i.value.forEach((m,p)=>{let g=[...r,String(p)];if(d){let y=this.validateType(m,{type:d},g,n,s);y.valid?a.push(y.value):s.push({path:this.buildPath(g),message:y.error??"Invalid array item",value:m});}else a.push(m);u&&!u.includes(m)&&s.push({path:this.buildPath(g),message:`Array item must be one of: ${u.join(", ")}`,value:m});}),{valid:s.length===c,value:a}}validatePlainObject(e){return this.isPlainObject(e)?{valid:true,value:{...e}}:{valid:false,error:`Expected object, got ${this.describeType(e)}`}}validateFunction(e){return typeof e!="function"?{valid:false,error:`Expected function, got ${this.describeType(e)}`}:{valid:true,value:e}}validateShape(e,t,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 Ie=class{handlebars;propsValidator;constructor(e){this.handlebars=G__default.create(),this.propsValidator=e??new _e,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",Tr),G__default.helpers.each&&this.handlebars.registerHelper("each",G__default.helpers.each),G__default.helpers.if&&this.handlebars.registerHelper("if",G__default.helpers.if),G__default.helpers.unless&&this.handlebars.registerHelper("unless",G__default.helpers.unless),G__default.helpers.with&&this.handlebars.registerHelper("with",G__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 G__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 re&&n.errors&&n.errors.length>0){let s=n.errors[0];if(s)throw new re(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 Et="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function vo(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+=Et[n%62]);}for(;t.length<o;)t+=Et[randomBytes(1)[0]%62];return t}function ge(o){return `${o}_${vo(8)}`}function xo(o,e){let{createHash:t}=q("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+=Et[i%62];return `${o}_${s}`}l();function _t(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 Er(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 Oe=class{_emitter=new EventEmitter;on(e,t){let r=Er(e,t);return this._emitter.on(e,r),()=>this._emitter.off(e,r)}once(e,t){let r=Er(e,t);return this._emitter.once(e,r),()=>this._emitter.off(e,r)}emit(e,t){this._emitter.emit(e,t);}};l();function It(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 Ot=new AsyncLocalStorage;function Po(){return Ot}function Ro(o,e){return Ot.run(o,e)}function Mt(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()=>{}),u=o.onResolveUser??(async p=>({userId:p,displayName:p})),c=async p=>{let g=Ot.getStore();if(!g){e.warn("respondSync called outside sync window \u2014 graceful degradation (no-op)",{textPreview:typeof p=="object"&&"text"in p?p.text.slice(0,80):void 0});return}let y="text"in p?p.text:"";g.res.status(200).json({text:y});},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:u,respondSync:c}}ke();ke();l();function Co(o){return typeof o!="string"?"":o.replace(/</g,"&lt;").replace(/>/g,"&gt;")}function Nt(o){return o.messages.map(e=>({text:Co(e.text),isAssistant:e.isAssistant,metadata:e.metadata,files:void 0}))}l();l();var bo={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")},To={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",bo,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)",To,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 Ir(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 Or(o,e){return e?await e(o)?null:new Response(JSON.stringify({error:"Unauthorized"}),{status:401,headers:{"Content-Type":"application/json"}}):null}function _o(o,e){let t=new McpServer({name:"crewx-mcp-server",version:"1.0.0"},{capabilities:{tools:{}}});return _r(t,o,e),t}function $t(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=Ir(n);if(s)return s;let i=await Or(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=_o(o,t),u=new WebStandardStreamableHTTPServerTransport({sessionIdGenerator:()=>crypto.randomUUID(),onsessioninitialized:c=>{r.set(c,{transport:u,server:d});},onsessionclosed:c=>{r.delete(c);},enableJsonResponse:true});return await d.connect(u),u.handleRequest(n)}}l();function Nr(o){let e=H.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 Lt(o){let e=Nr(o);return createHash("sha256").update(e).digest("hex")}function os(o){return o?o.settings?.template?.exec:void 0}function ss(){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}=q("crypto");return o(8).toString("hex")}}var Yt=class o extends Oe{_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=Lt(i),this._workspaceName=basename(i);let a=os(r);this._templateEngine=new Se({execPolicy:t.execPolicy??a}),this._documentLoader=n??new pe,this._layoutLoader=new Ee({templatesPath:he()}),this._layoutRenderer=new Ie,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??(g=>o.loadYaml(g)))(i),this._remoteTargets.set(i,d),d.catch(()=>this._remoteTargets.delete(i)));let u=await d,c=u.getAgent("@"+a),m=Array.isArray(c?.provider)?c?.provider[0]:c?.provider;if(m?.startsWith("remote/"))throw new Error(`Chained remotes not allowed: "${n}" \u2192 "${m}"`);return {target:u,agentRef:"@"+a}}static async loadBuiltInConfig(e){let{yamlPath:t,dir:r}=mt(),n;try{n=readFileSync(t,"utf-8");}catch(i){throw new Error(`[@crewx/sdk] Cannot read built-in config: ${t}
48
- ${i.message}`)}let s=Be(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 u=d;typeof u.path=="string"&&!isAbsolute(u.path)?i[a]={...u,path:resolve(r,u.path)}:i[a]=u;}else i[a]=d;return {...s,documents:i}}return s}static mergeCrewxConfig(e,t){let r=new Map;for(let x of e.agents??[])r.set(x.id,x);for(let x of t.agents??[])r.has(x.id)&&console.warn(`[agent-loader] User agent "${x.id}" overrides built-in`),r.set(x.id,x);let n=Array.from(r.values()),s={...e.layouts??{},...t.layouts??{}},i={...e.documents??{},...t.documents??{}},a=e,d=t,u=Yr(a.vars,d.vars),c=Yr(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 p=[...e.hooks??[],...t.hooks??[]],g=is(a.providers,d.providers),y={...e},v={...t};for(let x of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete y[x],delete v[x];let A={...{...y,...v},agents:n,layouts:s,documents:i,skills:m};return p.length>0&&(A.hooks=p),u!==void 0&&(A.vars=u),c!==void 0&&(A.settings=c),g!==void 0&&(A.providers=g),A}static async loadYaml(e,t,r){let n=t?.includeBuiltIns!==false,s,i;if(n){let c=await o.loadBuiltInConfig(r);if(e!==void 0){let m=Ve(e);s=o.mergeCrewxConfig(c,m),i=dirname(e);}else s=c,i=process.cwd();}else {if(e===void 0)throw new Error("[@crewx/sdk] loadYaml: path is required when includeBuiltIns is false");s=Ve(e),i=dirname(e);}let a=new pe(r);await a.load(s.documents,i);let d=s.agents??[];return await Zr(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 c=await o.loadBuiltInConfig(n);i=o.mergeCrewxConfig(c,e);}let a=new pe(n);await a.load(i.documents,r??(typeof process<"u"?process.cwd():"/"));let d=i.agents??[];return await Zr(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=_t(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 $t(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??It(r),a=e.defaultMode??"query",d=t.manifest.platform,u=e.agentRunner??{run:async(g,y,v)=>{let A=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${g}`,y,{threadId:v?.threadId,platform:d});return {output:A.ok?A.data:A.error?.message??""}}},c=e.onInbound??(async g=>{let y=g.routingHints?.agentId??e.defaultAgent;if(!y)return {accepted:false,reason:"no_agent"};let{output:v}=await u.run(y,g.text,{threadId:g.threadId});return {accepted:true,output:v}}),m=Mt({instanceId:r,config:n,capabilities:s,db:i,agentRunner:u,onInbound:c}),p={adapter:t,ctx:m,state:"starting"};this._activeAdapters.set(r,p),this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"starting",timestamp:new Date});try{await t.start(m),p.state="started",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"started",timestamp:new Date});}catch(g){throw p.state="failed",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"failed",error:g instanceof Error?g:new Error(String(g)),timestamp:new Date}),this._activeAdapters.delete(r),g}}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=>X(a.role.toLowerCase(),d)))),n&&(i=i.filter(a=>a.team&&n.some(d=>X(a.team.toLowerCase(),d)))),s&&(i=i.filter(a=>(Array.isArray(a.provider)?a.provider:[a.provider]).some(u=>s.some(c=>X(u.toLowerCase(),c))))),i}renderAgentPrompt(e){let t=e.startsWith("@")?e.slice(1):e,r=this._agents.get(t);if(!r)throw new Z(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 Z(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),u=n.inline?.prompt??n.inline?.system_prompt??n.description??`You are an expert ${r}.`,c=await this._documentLoader.buildContext(),m=t?.env??(typeof process<"u"?process.env:{}),p=t?.vars?.security_key??ss(),g={...t?.vars??{},documents:c,env:m,agent:{id:n.id,name:n.name??n.id,role:n.role??"",team:n.team??"",description:n.description??""}},y=await this._templateEngine.render(u,g),v={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]:[],x=A.join(", ")||(typeof w=="string"?w:""),C=n.options,E=!Array.isArray(C)&&typeof C=="object"&&C!==null?C:void 0,_=Array.isArray(C)?C:void 0,L={};for(let[I,k]of Object.entries(c))L[I]={content:k.content??"",toc:k.toc,summary:k.summary,path:k.path};let T={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:x,providerList:A,model:n.inline?.model,workingDirectory:n.working_directory??n.workingDirectory??".",inline:{...n.inline??{},prompt:y},specialties:n.specialties??[],capabilities:n.capabilities??[],remote:n.remote??null,optionsByMode:E,optionsArray:_},agentMetadata:{specialties:n.specialties??[],capabilities:n.capabilities??[],description:n.description??""},documents:L,skills:t?.skills??[],session:v,env:m,vars:{security_key:p,...t?.vars??{}},props:{...a??{},...t?.messages&&t.messages.length>0?{showConversationHistory:true}:{}},platform:v.platform,mode:v.mode,messages:t?.messages??[],tools:this._tools.size>0?{list:Array.from(this._tools.values()).map(I=>({name:I.name,description:I.description,parameters:I.parameters})),json:JSON.stringify(Array.from(this._tools.values()).map(I=>({name:I.name,description:I.description,parameters:I.parameters})),null,2),count:this._tools.size}:null,metadata:{}};return this._layoutRenderer.render(d,T)}_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:Nt(s)}catch{return}}_resolveTimeout(e){let t=wr();return e==="query"?t.queryMs:t.executeMs}emitToolEvents(e,t,r,n,s,i,a){try{let u=oe[r]?.parseEvent?.(n)??kt(new Date().toISOString(),n);for(let c of u)c.type==="tool_use"&&c.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:c.toolName,rawName:c.toolName,input:c.toolInput?this.tryParseJson(c.toolInput):void 0,toolUseId:c.toolUseId}}),c.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:c.toolName??"unknown",rawName:c.toolName??"unknown",toolUseId:c.toolUseId,result:c.resultPreview,isError:c.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=ge("tsk"),a=new Date,d;try{d=Ke(e,Array.from(this._agents.values()));}catch(k){if(k instanceof Z){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 N=Date.now()-s,O={code:"AGENT_NOT_FOUND",message:k.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:O,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:O,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:N}}}throw k}let u=Array.isArray(d.provider)?d.provider[0]??"cli/claude":d.provider,c=r?.provider??u,m=r?.model??d.inline?.model;m&&m.includes("{{")&&(m=await this._templateEngine.render(m,{...r?.vars??{}}));let p;try{p=te(c);}catch(k){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 N=Date.now()-s,O={code:"PROVIDER_ERROR",message:k.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:O,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:O,meta:{agentId:d.id,provider:c,model:m,durationMs:N}}}let g=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),y;try{y=await this.renderAgentPromptFull(e,{session:{mode:"query",platform:r?.platform},vars:{user_input:t,...r?.vars??{}},messages:g});}catch(k){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${k instanceof Error?k.message:String(k)}`);}let v,w,A,x=m,C=false,E=k=>{C||(C=true,this.emit("task:start",{traceId:i,timestamp:a,agentRef:e,message:t,mode:"query",pid:k,model:x,provider:c,codingAgentCommand:v,renderedPrompt:y,metadata:{...r?.metadata??{},provider:c},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},_=d.options,L=Array.isArray(_?.query?.tools)?_.query.tools:void 0,$=this._tools.size>0?this._filterToolsByMode(L):[],T=(()=>{let k=_?.query;if(!k||Array.isArray(k))return;let{tools:N,effort:O,mode:R,...D}=k,ae=Object.entries(D).filter(([,j])=>j!=null);if(ae.length!==0)return Object.fromEntries(ae.map(([j,F])=>[j,String(F)]))})(),I=d.inline?.max_steps;c.startsWith("api/")&&E();try{let k=await p.query(t,{model:m,effort:_?.query?.effort,mode:_?.query?.mode,context:r?.context,systemPrompt:y??d.inline?.system_prompt??d.inline?.prompt??d.description??`You are ${d.id}.`,additionalArgs:Array.isArray(_?.query)?_.query:void 0,tools:$.length>0?$:void 0,maxSteps:I,configOptions:T,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:c,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,a)},onPid:R=>E(R),onOutput:(R,D)=>{this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:R,level:D}),D==="stdout"&&this.emitToolEvents(i,e,c,R,d.id,r?.threadId??"","");},onTaskLog:R=>{this.emitTaskLogEntries(i,e,d.id,r?.threadId??"","",c,R);for(let D of R)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(D),level:"info"});},onCommand:R=>{v=R;},onUsage:R=>{w=R;},onExitCode:R=>{A=R;},onModel:R=>{x||(x=R);}});E();let N=Date.now()-s,O={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",result:k,durationMs:N,exitCode:A,inputTokens:w?.inputTokens,outputTokens:w?.outputTokens,cachedInputTokens:w?.cachedInputTokens,costUsd:w?.costUsd,model:x,metadata:Object.keys(O).length>0?O:void 0}),{ok:!0,data:k,meta:{agentId:d.id,provider:c,model:m,durationMs:N,taskId:i}}}catch(k){if(k instanceof K){let R=ge("thd");return this._pendingThreads.set(R,{agentRef:d.id,providerStr:c,continuationState:k.continuationState,toolCall:k.toolCall,traceId:i,startMs:s,model:m}),{ok:true,status:"requires_action",data:"",toolCall:k.toolCall,threadId:R,meta:{agentId:d.id,provider:c,model:m,durationMs:Date.now()-s,taskId:i}}}E();let N=Date.now()-s,O={code:"QUERY_FAILED",message:k.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:O,exitCode:A,inputTokens:w?.inputTokens,outputTokens:w?.outputTokens,cachedInputTokens:w?.cachedInputTokens,costUsd:w?.costUsd,model:x,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:O,meta:{agentId:d.id,provider:c,model:m,durationMs:N,taskId:i}}}}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=te(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 K)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=ge("tsk"),a=new Date,d;try{d=Ke(e,Array.from(this._agents.values()));}catch(k){if(k instanceof Z){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 N=Date.now()-s,O={code:"AGENT_NOT_FOUND",message:k.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:O,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:O,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:N}}}throw k}let u=Array.isArray(d.provider)?d.provider[0]??"cli/claude":d.provider,c=r?.provider??u,m=r?.model??d.inline?.model;m&&m.includes("{{")&&(m=await this._templateEngine.render(m,{...r?.vars??{}}));let p;try{p=te(c);}catch(k){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 N=Date.now()-s,O={code:"PROVIDER_ERROR",message:k.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:O,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:O,meta:{agentId:d.id,provider:c,model:m,durationMs:N}}}let g=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),y;try{y=await this.renderAgentPromptFull(e,{session:{mode:"execute",platform:r?.platform},vars:{user_input:t,...r?.vars??{}},messages:g});}catch(k){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${k instanceof Error?k.message:String(k)}`);}let v,w,A,x=m,C=false,E=k=>{C||(C=true,this.emit("task:start",{traceId:i,timestamp:a,agentRef:e,message:t,mode:"execute",pid:k,model:x,provider:c,codingAgentCommand:v,renderedPrompt:y,metadata:{...r?.metadata??{},provider:c},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},_=d.options,L=Array.isArray(_?.execute?.tools)?_.execute.tools:void 0,$=this._tools.size>0?this._filterToolsByMode(L):[],T=(()=>{let k=_?.execute;if(!k||Array.isArray(k))return;let{tools:N,effort:O,mode:R,...D}=k,ae=Object.entries(D).filter(([,j])=>j!=null);if(ae.length!==0)return Object.fromEntries(ae.map(([j,F])=>[j,String(F)]))})(),I=d.inline?.max_steps;c.startsWith("api/")&&E();try{let k=await p.execute(t,{model:m,effort:_?.execute?.effort,mode:_?.execute?.mode,context:r?.context,systemPrompt:y??d.inline?.system_prompt??d.inline?.prompt??d.description??`You are ${d.id}.`,additionalArgs:Array.isArray(_?.execute)?_.execute:void 0,tools:$.length>0?$:void 0,maxSteps:I,configOptions:T,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:c,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,a)},onPid:R=>E(R),onOutput:(R,D)=>{this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:R,level:D}),D==="stdout"&&this.emitToolEvents(i,e,c,R,d.id,r?.threadId??"","");},onTaskLog:R=>{this.emitTaskLogEntries(i,e,d.id,r?.threadId??"","",c,R);for(let D of R)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(D),level:"info"});},onCommand:R=>{v=R;},onUsage:R=>{w=R;},onExitCode:R=>{A=R;},onModel:R=>{x||(x=R);}});E();let N=Date.now()-s,O={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",result:k,durationMs:N,exitCode:A,inputTokens:w?.inputTokens,outputTokens:w?.outputTokens,cachedInputTokens:w?.cachedInputTokens,costUsd:w?.costUsd,model:x,metadata:Object.keys(O).length>0?O:void 0}),{ok:!0,data:k,meta:{agentId:d.id,provider:c,model:m,durationMs:N}}}catch(k){E();let N=Date.now()-s,O={code:"EXECUTE_FAILED",message:k.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:O,exitCode:A,inputTokens:w?.inputTokens,outputTokens:w?.outputTokens,cachedInputTokens:w?.cachedInputTokens,costUsd:w?.costUsd,model:x,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:O,meta:{agentId:d.id,provider:c,model:m,durationMs:N}}}}};function Yr(o,e){let t=Zt(o)?o:void 0,r=Zt(e)?e:void 0;if(!(!t&&!r))return {...t??{},...r??{}}}function Zt(o){return typeof o=="object"&&o!==null&&!Array.isArray(o)}function is(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(!Zt(a))return;let d=a.id;if(typeof d=="string")return `id:${d}`;let u=a.name;if(typeof u=="string")return `name:${u}`},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 Zr(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(()=>(jt(),jr));n(t?.api);}ds(o,e),ls(o,e),as(o);}function as(o){if(!o.some(r=>(Array.isArray(r.provider)?r.provider:[r.provider]).some(s=>s.startsWith("acp/"))))return;let{registerAcpProviders:t}=(Kt(),gt(Wr));t();}function ds(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(),gt(Vr)),s=new Map;for(let i of r)i.type==="remote"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&ee("remote",n(s,te));}function ls(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}=(Gt(),gt(Xr)),s=new Map;for(let i of r)i.type==="plugin"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&ee("plugin",n(s));}l();var er=class{detach(e){}};l();var cs="crewx:fs:",tr=class{prefix;store;constructor(e){this.prefix=e?.prefix??cs,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))}toKey(e){return `${this.prefix}${e.replace(/\\/g,"/")}`}};l();function us(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();Dt();jt();l();Ut();ie();l();nt();lt();function ps(o,e,t,r){let n=t.agentInfo?.name,s=e??n??o,a=(r.modes?.availableModes??[]).map(y=>({id:y.id,name:y.name,...y.description!=null?{description:y.description}:{}})),d=[],u=r.configOptions??[];for(let y of u)if(y.category==="thought_level"&&y.type==="select"){let v=y.options??[];if(v.length>0&&v[0]?.group!=null)for(let w of v)for(let A of w.options??[])d.push(A.value);else for(let w of v)w.value!=null&&d.push(w.value);}let m=(r.models?.availableModels??[]).map(y=>({id:y.modelId})),p=t.agentCapabilities??{},g={loadSession:p.loadSession??false,image:p.promptCapabilities?.image??false,audio:p.promptCapabilities?.audio??false,mcp:p.mcpCapabilities!=null};return {id:`acp/${o}`,name:s,modes:a,effort:d,models:m,capabilities:g}}async function en(o){let e=fe[o];if(!e)return null;let t=e.meta?.displayName,r=new me({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 ps(o,t,n,i)}catch{return null}finally{await r.dispose();}}async function gs(){let o=Object.keys(fe),e=await Promise.allSettled(o.map(r=>en(r))),t=[];for(let r of e)r.status==="fulfilled"&&r.value!==null&&t.push(r.value);return t}nt();Ft();lt();Kt();ft();ke();l();var rr=0;function ms(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(rr>=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(", ")}`;rr++;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{rr--;}}}}l();var tn=typeof process<"u"?process.env:{};function fs(){return tn.CREWX_CLI||"npx crewx"}function ys(){return tn.CREWX_WORKSPACE||(typeof process<"u"?process.cwd():"/")}l();var hs=/^[a-zA-Z0-9._-]+$/,nr=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(!hs.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return ge("box")}};l();function ws(o,e,t,r,n){let{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}=r,d=s*i,u=s*a,c=d+u,m=e.getThreadMessages(o),p=[],g=0,y=false,v=[];for(let x=0;x<m.length;x+=2){let C=m[x],E=m[x+1],_=C?.content||"",L=E?.content||"",$=n.countTokens(_+L),T=[];C&&T.push(C),E&&T.push(E),v.push({messages:T,tokens:$});}for(let x=v.length-1;x>=0;x--){let C=v[x];if(g+C.tokens>d){y=true;break}g+=C.tokens,p.unshift(...C.messages);}let w=[],A=0;if(y&&u>0)try{let{boxes:x}=t.listBoxes(o);for(let C=x.length-1;C>=0;C--){let E=x[C],_=E.summaryTokens??E.sourceTokens;if(A+_>u)break;A+=_,w.unshift({boxId:E.id,seq:E.seq,taskCount:E.taskCount,sourceTokens:E.sourceTokens,summary:E.summary,previewFirst:E.previewFirst,previewMid:E.previewMid,previewLast:E.previewLast,createdAt:E.createdAt});}}catch(x){if(x instanceof Error&&!/not found/i.test(x.message))throw x}return {hot:p,warm:w,hotTokens:g,warmTokens:A,hotOverflow:y,totalBudget:c,config:{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}}}ke();ue();l();var ct=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},Ue=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),u=[],c=0,m=0,p=0,g=false,y=0,v=performance.now(),w=async T=>{a?.onTaskStart&&await a.onTaskStart(T),p+=1;let I=new AbortController,k={signal:I.signal},N,O;typeof s=="number"&&Number.isFinite(s)&&s>0&&(O=new Promise((j,F)=>{N=setTimeout(()=>{let de=new ct(T.id,s);I.abort(de),F(de);},s);}));let R=performance.now(),D=T.run(k),ae=O?Promise.race([D,O]):D;try{let j=await ae,F=performance.now(),de=F-R,ye=d(j,T),qe={taskId:T.id,success:ye,value:j,durationMs:de,startedAt:R,finishedAt:F,metadata:T.metadata,aborted:!1};u.push(qe),ye?c+=1:m+=1,a?.onTaskComplete&&await a.onTaskComplete(qe),i&&!ye&&(g=!0);}catch(j){let F=performance.now(),de=F-R,ye=j instanceof Error?j:new Error(String(j)),qe={taskId:T.id,success:false,error:ye,durationMs:de,startedAt:R,finishedAt:F,metadata:T.metadata,aborted:I.signal.aborted};u.push(qe),m+=1,a?.onError&&await a.onError(T,ye,de),i&&(g=true);}finally{N&&clearTimeout(N),O&&D.catch(()=>{});}},A=async()=>{for(;!g;){let T=y;if(T>=e.length)break;y+=1;let I=e[T];if(!I||(await w(I),g))break}},x=Math.min(n,e.length),C=[];for(let T=0;T<x;T++)C.push(A());await Promise.all(C);let _=performance.now()-v,L=u.length?u.reduce((T,I)=>T+I.durationMs,0)/u.length:0,$=_>0?u.length/(_/1e3):u.length;return this.metrics={totalTasks:e.length,startedTasks:p,completedTasks:u.length,successCount:c,failureCount:m,totalDurationMs:_,averageDurationMs:L,throughput:$},u}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 Fe=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 rn=3,nn=3e4,on=500,vs=o=>{if(typeof o!="number"||Number.isNaN(o)||!Number.isFinite(o))return rn;let e=Math.floor(o);return e>0?e:rn},xs=o=>o===void 0||typeof o!="number"||Number.isNaN(o)||o<=0?nn:o,ks=o=>{if(!o)return {maxRetries:0,retryDelay:on};let e=Number.isInteger(o.maxRetries)&&o.maxRetries>=0?o.maxRetries:0,t=typeof o.retryDelay=="number"&&o.retryDelay>=0?o.retryDelay:on;return {maxRetries:e,retryDelay:t}},or=o=>{let e=o.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},As=(o,e)=>o<=0?Promise.resolve():new Promise((t,r)=>{let n=setTimeout(()=>{e.removeEventListener("abort",s),t();},o),s=()=>{clearTimeout(n),r(or(e));};if(e.aborted){s();return}e.addEventListener("abort",s,{once:true});}),Ps=async(o,e,t)=>{let r,n;for(let s=0;s<=e.maxRetries;s++){if(t.aborted)throw or(t);try{let i=await o();if(r=i,i.success||s===e.maxRetries)return i}catch(i){if(n=i,t.aborted)throw or(t);if(s===e.maxRetries)throw i instanceof Error?i:new Error(String(i))}s<e.maxRetries&&await As(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")},sn=(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);}},Rs=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}}}),Cs=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")}}),bs=(o,e)=>({onTaskComplete:async t=>{sn(e,o,t.success);},onError:async()=>{sn(e,o,false);}}),an=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=vs(t.concurrency),n=xs(t.timeout),s=ks(t.retryPolicy),i=new Ue,a=new Fe,d=o.map((v,w)=>({id:`${e}:${v.agentId??"anonymous"}:${w}`,metadata:{index:w,mode:e,request:v},run:A=>Ps(()=>e==="query"?a.query(v):a.execute(v),s,A.signal)})),u={completed:0,success:0,failure:0,total:o.length},c=await i.run(d,{maxConcurrency:r,timeoutMs:n,evaluateTaskSuccess:v=>v.success,callbacks:bs(u,t)}),m=Rs(c),p=Cs(c),g=i.getMetrics(),y={total:o.length,completed:o.length,successCount:m.filter(v=>v.success).length,failureCount:m.filter(v=>!v.success).length,results:m,errors:p,metrics:g};return t.onComplete?.(y),m},Ts=(o,e)=>an(o,"query",e),Ss=(o,e)=>an(o,"execute",e);Gt();Qt();Xt();Jt();l();l();var ut=class{capabilities={required:[]}};l();l();l();var dn=2e3;function ln(o){let e=o.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=dn?e:e.slice(0,dn-11)+" [redacted]"}var Ls=10*1024*1024,Ds={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function sr(o,e){return o===void 0?true:Array.isArray(o)?o.includes(e):o===e}function js(o,e){return o===void 0?true:Array.isArray(o)?o.some(t=>e.includes(t)):e.includes(o)}function un(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*(Ds[r]??1))}function pn(o){return typeof o=="string"}function gn(o){try{let e=statSync(o);return e.size>Ls?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${o} (${e.size} bytes)
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 U=class extends Error{constructor(t,r,n){super(t);this.layoutId=r;this.cause=n;this.name="LayoutLoadError";}layoutId;cause},re=class extends Error{constructor(t,r=[],n){super(t);this.errors=r;this.cause=n;this.name="PropsValidationError";}errors;cause};var vo={validationMode:"lenient",fallbackLayoutId:"crewx/default"},Ee=class{layouts=new Map;options;constructor(e){this.options={...vo,...e,templatesPath:e?.templatesPath??he()},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 U(`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 U("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 U(`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}},u=this.layouts.get(e),c=u?.template===n&&JSON.stringify(u?.defaultProps??{})===JSON.stringify(d.defaultProps??{})&&JSON.stringify(u?.propsSchema??{})===JSON.stringify(d.propsSchema??{});this.layouts.set(e,d),process.env.CREWX_VERBOSE==="1"&&(u?c||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 U(`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=H.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 U(`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 U(`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 U(`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 U(`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 U(`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 U(`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 xo(o){return Array.from(new Set(o.filter(e=>e?.isAssistant&&e?.metadata?.agent_id).map(e=>String(e.metadata.agent_id))))}function Er(o,e,t){if(!Array.isArray(o)||o.length===0||!(t&&typeof t.fn=="function"))return "";let n=xo(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 _e=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 re("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 u=[...n,a],c=e[a],m=this.resolveProp(c,d,u,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,u=t.itemOneOf,c=s.length;return i.value.forEach((m,p)=>{let g=[...r,String(p)];if(d){let h=this.validateType(m,{type:d},g,n,s);h.valid?a.push(h.value):s.push({path:this.buildPath(g),message:h.error??"Invalid array item",value:m});}else a.push(m);u&&!u.includes(m)&&s.push({path:this.buildPath(g),message:`Array item must be one of: ${u.join(", ")}`,value:m});}),{valid:s.length===c,value:a}}validatePlainObject(e){return this.isPlainObject(e)?{valid:true,value:{...e}}:{valid:false,error:`Expected object, got ${this.describeType(e)}`}}validateFunction(e){return typeof e!="function"?{valid:false,error:`Expected function, got ${this.describeType(e)}`}:{valid:true,value:e}}validateShape(e,t,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 Ie=class{handlebars;propsValidator;constructor(e){this.handlebars=G__default.create(),this.propsValidator=e??new _e,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",Er),G__default.helpers.each&&this.handlebars.registerHelper("each",G__default.helpers.each),G__default.helpers.if&&this.handlebars.registerHelper("if",G__default.helpers.if),G__default.helpers.unless&&this.handlebars.registerHelper("unless",G__default.helpers.unless),G__default.helpers.with&&this.handlebars.registerHelper("with",G__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 G__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 re&&n.errors&&n.errors.length>0){let s=n.errors[0];if(s)throw new re(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 ko(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 ge(o){return `${o}_${ko(8)}`}function Ao(o,e){let{createHash:t}=q("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 Ir(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 Oe=class{_emitter=new EventEmitter;on(e,t){let r=Ir(e,t);return this._emitter.on(e,r),()=>this._emitter.off(e,r)}once(e,t){let r=Ir(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 Co(){return Nt}function bo(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()=>{}),u=o.onResolveUser??(async p=>({userId:p,displayName:p})),c=async p=>{let g=Nt.getStore();if(!g){e.warn("respondSync called outside sync window \u2014 graceful degradation (no-op)",{textPreview:typeof p=="object"&&"text"in p?p.text.slice(0,80):void 0});return}let h="text"in p?p.text:"";g.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:u,respondSync:c}}ke();ke();l();function To(o){return typeof o!="string"?"":o.replace(/</g,"&lt;").replace(/>/g,"&gt;")}function Lt(o){return o.messages.map(e=>({text:To(e.text),isAssistant:e.isAssistant,metadata:e.metadata,files:void 0}))}l();l();var So={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")},Eo={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 Or(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",So,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)",Eo,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 Mr(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 Nr(o,e){return e?await e(o)?null:new Response(JSON.stringify({error:"Unauthorized"}),{status:401,headers:{"Content-Type":"application/json"}}):null}function Oo(o,e){let t=new McpServer({name:"crewx-mcp-server",version:"1.0.0"},{capabilities:{tools:{}}});return Or(t,o,e),t}function Dt(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=Mr(n);if(s)return s;let i=await Nr(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=Oo(o,t),u=new WebStandardStreamableHTTPServerTransport({sessionIdGenerator:()=>crypto.randomUUID(),onsessioninitialized:c=>{r.set(c,{transport:u,server:d});},onsessionclosed:c=>{r.delete(c);},enableJsonResponse:true});return await d.connect(u),u.handleRequest(n)}}l();function Lr(o){let e=H.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=Lr(o);return createHash("sha256").update(e).digest("hex")}function is(o){return o?o.settings?.template?.exec:void 0}function as(){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}=q("crypto");return o(8).toString("hex")}}var er=class o extends Oe{_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=is(r);this._templateEngine=new Se({execPolicy:t.execPolicy??a}),this._documentLoader=n??new pe,this._layoutLoader=new Ee({templatesPath:he()}),this._layoutRenderer=new Ie,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??(g=>o.loadYaml(g)))(i),this._remoteTargets.set(i,d),d.catch(()=>this._remoteTargets.delete(i)));let u=await d,c=u.getAgent("@"+a),m=Array.isArray(c?.provider)?c?.provider[0]:c?.provider;if(m?.startsWith("remote/"))throw new Error(`Chained remotes not allowed: "${n}" \u2192 "${m}"`);return {target:u,agentRef:"@"+a}}static async loadBuiltInConfig(e){let{yamlPath:t,dir:r}=mt(),n;try{n=readFileSync(t,"utf-8");}catch(i){throw new Error(`[@crewx/sdk] Cannot read built-in config: ${t}
48
+ ${i.message}`)}let s=Be(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 u=d;typeof u.path=="string"&&!isAbsolute(u.path)?i[a]={...u,path:resolve(r,u.path)}:i[a]=u;}else i[a]=d;return {...s,documents:i}}return s}static mergeCrewxConfig(e,t){let r=new Map;for(let x of e.agents??[])r.set(x.id,x);for(let x of t.agents??[])r.has(x.id)&&console.warn(`[agent-loader] User agent "${x.id}" overrides built-in`),r.set(x.id,x);let n=Array.from(r.values()),s={...e.layouts??{},...t.layouts??{}},i={...e.documents??{},...t.documents??{}},a=e,d=t,u=en(a.vars,d.vars),c=en(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 p=[...e.hooks??[],...t.hooks??[]],g=ds(a.providers,d.providers),h={...e},v={...t};for(let x of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete h[x],delete v[x];let A={...{...h,...v},agents:n,layouts:s,documents:i,skills:m};return p.length>0&&(A.hooks=p),u!==void 0&&(A.vars=u),c!==void 0&&(A.settings=c),g!==void 0&&(A.providers=g),A}static async loadYaml(e,t,r){let n=t?.includeBuiltIns!==false,s,i;if(n){let c=await o.loadBuiltInConfig(r);if(e!==void 0){let m=Ve(e);s=o.mergeCrewxConfig(c,m),i=dirname(e);}else s=c,i=process.cwd();}else {if(e===void 0)throw new Error("[@crewx/sdk] loadYaml: path is required when includeBuiltIns is false");s=Ve(e),i=dirname(e);}let a=new pe(r);await a.load(s.documents,i);let d=s.agents??[];return await tn(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 c=await o.loadBuiltInConfig(n);i=o.mergeCrewxConfig(c,e);}let a=new pe(n);await a.load(i.documents,r??(typeof process<"u"?process.cwd():"/"));let d=i.agents??[];return await tn(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 Dt(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,u=e.agentRunner??{run:async(g,h,v)=>{let A=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${g}`,h,{threadId:v?.threadId,platform:d});return {output:A.ok?A.data:A.error?.message??""}}},c=e.onInbound??(async g=>{let h=g.routingHints?.agentId??e.defaultAgent;if(!h)return {accepted:false,reason:"no_agent"};let{output:v}=await u.run(h,g.text,{threadId:g.threadId});return {accepted:true,output:v}}),m=$t({instanceId:r,config:n,capabilities:s,db:i,agentRunner:u,onInbound:c}),p={adapter:t,ctx:m,state:"starting"};this._activeAdapters.set(r,p),this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"starting",timestamp:new Date});try{await t.start(m),p.state="started",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"started",timestamp:new Date});}catch(g){throw p.state="failed",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"failed",error:g instanceof Error?g:new Error(String(g)),timestamp:new Date}),this._activeAdapters.delete(r),g}}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=>X(a.role.toLowerCase(),d)))),n&&(i=i.filter(a=>a.team&&n.some(d=>X(a.team.toLowerCase(),d)))),s&&(i=i.filter(a=>(Array.isArray(a.provider)?a.provider:[a.provider]).some(u=>s.some(c=>X(u.toLowerCase(),c))))),i}renderAgentPrompt(e){let t=e.startsWith("@")?e.slice(1):e,r=this._agents.get(t);if(!r)throw new Z(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 Z(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),u=n.inline?.prompt??n.inline?.system_prompt??n.description??`You are an expert ${r}.`,c=await this._documentLoader.buildContext(),m=t?.env??(typeof process<"u"?process.env:{}),p=t?.vars?.security_key??as(),g={...t?.vars??{},documents:c,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(u,g),v={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]:[],x=A.join(", ")||(typeof w=="string"?w:""),C=n.options,E=!Array.isArray(C)&&typeof C=="object"&&C!==null?C:void 0,_=Array.isArray(C)?C:void 0,L={};for(let[I,k]of Object.entries(c))L[I]={content:k.content??"",toc:k.toc,summary:k.summary,path:k.path};let T={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:x,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:E,optionsArray:_},agentMetadata:{specialties:n.specialties??[],capabilities:n.capabilities??[],description:n.description??""},documents:L,skills:t?.skills??[],session:v,env:m,vars:{security_key:p,...t?.vars??{}},props:{...a??{},...t?.messages&&t.messages.length>0?{showConversationHistory:true}:{}},platform:v.platform,mode:v.mode,messages:t?.messages??[],tools:this._tools.size>0?{list:Array.from(this._tools.values()).map(I=>({name:I.name,description:I.description,parameters:I.parameters})),json:JSON.stringify(Array.from(this._tools.values()).map(I=>({name:I.name,description:I.description,parameters:I.parameters})),null,2),count:this._tools.size}:null,metadata:{}};return this._layoutRenderer.render(d,T)}_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:Lt(s)}catch{return}}_resolveTimeout(e){let t=xr();return e==="query"?t.queryMs:t.executeMs}emitToolEvents(e,t,r,n,s,i,a){try{let u=oe[r]?.parseEvent?.(n)??Pt(new Date().toISOString(),n);for(let c of u)c.type==="tool_use"&&c.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:c.toolName,rawName:c.toolName,input:c.toolInput?this.tryParseJson(c.toolInput):void 0,toolUseId:c.toolUseId}}),c.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:c.toolName??"unknown",rawName:c.toolName??"unknown",toolUseId:c.toolUseId,result:c.resultPreview,isError:c.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=ge("tsk"),a=new Date,d;try{d=Ke(e,Array.from(this._agents.values()));}catch(k){if(k instanceof Z){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 N=Date.now()-s,M={code:"AGENT_NOT_FOUND",message:k.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:M,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:M,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:N}}}throw k}let u=Array.isArray(d.provider)?d.provider[0]??"cli/claude":d.provider,c=r?.provider??u,m=r?.model??d.inline?.model;m&&m.includes("{{")&&(m=await this._templateEngine.render(m,{...r?.vars??{}}));let p;try{p=te(c);}catch(k){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 N=Date.now()-s,M={code:"PROVIDER_ERROR",message:k.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:M,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:M,meta:{agentId:d.id,provider:c,model:m,durationMs:N}}}let g=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:g});}catch(k){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${k instanceof Error?k.message:String(k)}`);}let v,w,A,x=m,C=false,E=k=>{C||(C=true,this.emit("task:start",{traceId:i,timestamp:a,agentRef:e,message:t,mode:"query",pid:k,model:x,provider:c,codingAgentCommand:v,renderedPrompt:h,metadata:{...r?.metadata??{},provider:c},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},_=d.options,L=Array.isArray(_?.query?.tools)?_.query.tools:void 0,$=this._tools.size>0?this._filterToolsByMode(L):[],T=(()=>{let k=_?.query;if(!k||Array.isArray(k))return;let{tools:N,effort:M,mode:R,...D}=k,ae=Object.entries(D).filter(([,j])=>j!=null);if(ae.length!==0)return Object.fromEntries(ae.map(([j,F])=>[j,String(F)]))})(),I=d.inline?.max_steps;c.startsWith("api/")&&E();try{let k=await p.query(t,{model:m,effort:_?.query?.effort,mode:_?.query?.mode,context:r?.context,systemPrompt:h??d.inline?.system_prompt??d.inline?.prompt??d.description??`You are ${d.id}.`,additionalArgs:Array.isArray(_?.query)?_.query:void 0,tools:$.length>0?$:void 0,maxSteps:I,configOptions:T,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:c,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,a)},onPid:R=>E(R),onOutput:(R,D)=>{this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:R,level:D}),D==="stdout"&&this.emitToolEvents(i,e,c,R,d.id,r?.threadId??"","");},onTaskLog:R=>{this.emitTaskLogEntries(i,e,d.id,r?.threadId??"","",c,R);for(let D of R)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(D),level:"info"});},onCommand:R=>{v=R;},onUsage:R=>{w=R;},onExitCode:R=>{A=R;},onModel:R=>{x||(x=R);}});E();let N=Date.now()-s,M={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",result:k,durationMs:N,exitCode:A,inputTokens:w?.inputTokens,outputTokens:w?.outputTokens,cachedInputTokens:w?.cachedInputTokens,costUsd:w?.costUsd,model:x,metadata:Object.keys(M).length>0?M:void 0}),{ok:!0,data:k,meta:{agentId:d.id,provider:c,model:m,durationMs:N,taskId:i}}}catch(k){if(k instanceof K){let R=ge("thd");return this._pendingThreads.set(R,{agentRef:d.id,providerStr:c,continuationState:k.continuationState,toolCall:k.toolCall,traceId:i,startMs:s,model:m}),{ok:true,status:"requires_action",data:"",toolCall:k.toolCall,threadId:R,meta:{agentId:d.id,provider:c,model:m,durationMs:Date.now()-s,taskId:i}}}E();let N=Date.now()-s,M={code:"QUERY_FAILED",message:k.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:M,exitCode:A,inputTokens:w?.inputTokens,outputTokens:w?.outputTokens,cachedInputTokens:w?.cachedInputTokens,costUsd:w?.costUsd,model:x,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:M,meta:{agentId:d.id,provider:c,model:m,durationMs:N,taskId:i}}}}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=te(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 K)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=ge("tsk"),a=new Date,d;try{d=Ke(e,Array.from(this._agents.values()));}catch(k){if(k instanceof Z){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 N=Date.now()-s,M={code:"AGENT_NOT_FOUND",message:k.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:M,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:M,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:N}}}throw k}let u=Array.isArray(d.provider)?d.provider[0]??"cli/claude":d.provider,c=r?.provider??u,m=r?.model??d.inline?.model;m&&m.includes("{{")&&(m=await this._templateEngine.render(m,{...r?.vars??{}}));let p;try{p=te(c);}catch(k){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 N=Date.now()-s,M={code:"PROVIDER_ERROR",message:k.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:M,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:M,meta:{agentId:d.id,provider:c,model:m,durationMs:N}}}let g=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:g});}catch(k){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${k instanceof Error?k.message:String(k)}`);}let v,w,A,x=m,C=false,E=k=>{C||(C=true,this.emit("task:start",{traceId:i,timestamp:a,agentRef:e,message:t,mode:"execute",pid:k,model:x,provider:c,codingAgentCommand:v,renderedPrompt:h,metadata:{...r?.metadata??{},provider:c},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},_=d.options,L=Array.isArray(_?.execute?.tools)?_.execute.tools:void 0,$=this._tools.size>0?this._filterToolsByMode(L):[],T=(()=>{let k=_?.execute;if(!k||Array.isArray(k))return;let{tools:N,effort:M,mode:R,...D}=k,ae=Object.entries(D).filter(([,j])=>j!=null);if(ae.length!==0)return Object.fromEntries(ae.map(([j,F])=>[j,String(F)]))})(),I=d.inline?.max_steps;c.startsWith("api/")&&E();try{let k=await p.execute(t,{model:m,effort:_?.execute?.effort,mode:_?.execute?.mode,context:r?.context,systemPrompt:h??d.inline?.system_prompt??d.inline?.prompt??d.description??`You are ${d.id}.`,additionalArgs:Array.isArray(_?.execute)?_.execute:void 0,tools:$.length>0?$:void 0,maxSteps:I,configOptions:T,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:c,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,a)},onPid:R=>E(R),onOutput:(R,D)=>{this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:R,level:D}),D==="stdout"&&this.emitToolEvents(i,e,c,R,d.id,r?.threadId??"","");},onTaskLog:R=>{this.emitTaskLogEntries(i,e,d.id,r?.threadId??"","",c,R);for(let D of R)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(D),level:"info"});},onCommand:R=>{v=R;},onUsage:R=>{w=R;},onExitCode:R=>{A=R;},onModel:R=>{x||(x=R);}});E();let N=Date.now()-s,M={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",result:k,durationMs:N,exitCode:A,inputTokens:w?.inputTokens,outputTokens:w?.outputTokens,cachedInputTokens:w?.cachedInputTokens,costUsd:w?.costUsd,model:x,metadata:Object.keys(M).length>0?M:void 0}),{ok:!0,data:k,meta:{agentId:d.id,provider:c,model:m,durationMs:N}}}catch(k){E();let N=Date.now()-s,M={code:"EXECUTE_FAILED",message:k.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:M,exitCode:A,inputTokens:w?.inputTokens,outputTokens:w?.outputTokens,cachedInputTokens:w?.cachedInputTokens,costUsd:w?.costUsd,model:x,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:M,meta:{agentId:d.id,provider:c,model:m,durationMs:N}}}}};function en(o,e){let t=tr(o)?o:void 0,r=tr(e)?e:void 0;if(!(!t&&!r))return {...t??{},...r??{}}}function tr(o){return typeof o=="object"&&o!==null&&!Array.isArray(o)}function ds(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(!tr(a))return;let d=a.id;if(typeof d=="string")return `id:${d}`;let u=a.name;if(typeof u=="string")return `name:${u}`},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 tn(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(()=>(Ut(),Ur));n(t?.api);}cs(o,e),us(o,e),ls(o);}function ls(o){if(!o.some(r=>(Array.isArray(r.provider)?r.provider:[r.provider]).some(s=>s.startsWith("acp/"))))return;let{registerAcpProviders:t}=(Xt(),gt(Vr));t();}function cs(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}=(Yt(),gt(Kr)),s=new Map;for(let i of r)i.type==="remote"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&ee("remote",n(s,te));}function us(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(),gt(Gr)),s=new Map;for(let i of r)i.type==="plugin"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&ee("plugin",n(s));}l();var rr=class{detach(e){}};l();var ps="crewx:fs:",nr=class{prefix;store;constructor(e){this.prefix=e?.prefix??ps,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))}toKey(e){return `${this.prefix}${e.replace(/\\/g,"/")}`}};l();function gs(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();Ht();Ut();l();qt();ie();l();nt();lt();function ms(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=[],u=r.configOptions??[];for(let h of u)if(h.category==="thought_level"&&h.type==="select"){let v=h.options??[];if(v.length>0&&v[0]?.group!=null)for(let w of v)for(let A of w.options??[])d.push(A.value);else for(let w of v)w.value!=null&&d.push(w.value);}let m=(r.models?.availableModels??[]).map(h=>({id:h.modelId})),p=t.agentCapabilities??{},g={loadSession:p.loadSession??false,image:p.promptCapabilities?.image??false,audio:p.promptCapabilities?.audio??false,mcp:p.mcpCapabilities!=null};return {id:`acp/${o}`,name:s,modes:a,effort:d,models:m,capabilities:g}}async function rn(o){let e=fe[o];if(!e)return null;let t=e.meta?.displayName,r=new me({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 ms(o,t,n,i)}catch{return null}finally{await r.dispose();}}async function fs(){let o=Object.keys(fe),e=await Promise.allSettled(o.map(r=>rn(r))),t=[];for(let r of e)r.status==="fulfilled"&&r.value!==null&&t.push(r.value);return t}nt();Wt();lt();Xt();ft();ke();l();var or=0;function ys(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(or>=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(", ")}`;or++;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{or--;}}}}l();var nn=typeof process<"u"?process.env:{};function hs(){return nn.CREWX_CLI||"npx crewx"}function ws(){return nn.CREWX_WORKSPACE||(typeof process<"u"?process.cwd():"/")}l();var vs=/^[a-zA-Z0-9._-]+$/,sr=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(!vs.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return ge("box")}};l();function xs(o,e,t,r,n){let{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}=r,d=s*i,u=s*a,c=d+u,m=e.getThreadMessages(o),p=[],g=0,h=false,v=[];for(let x=0;x<m.length;x+=2){let C=m[x],E=m[x+1],_=C?.content||"",L=E?.content||"",$=n.countTokens(_+L),T=[];C&&T.push(C),E&&T.push(E),v.push({messages:T,tokens:$});}for(let x=v.length-1;x>=0;x--){let C=v[x];if(g+C.tokens>d){h=true;break}g+=C.tokens,p.unshift(...C.messages);}let w=[],A=0;if(h&&u>0)try{let{boxes:x}=t.listBoxes(o);for(let C=x.length-1;C>=0;C--){let E=x[C],_=E.summaryTokens??E.sourceTokens;if(A+_>u)break;A+=_,w.unshift({boxId:E.id,seq:E.seq,taskCount:E.taskCount,sourceTokens:E.sourceTokens,summary:E.summary,previewFirst:E.previewFirst,previewMid:E.previewMid,previewLast:E.previewLast,createdAt:E.createdAt});}}catch(x){if(x instanceof Error&&!/not found/i.test(x.message))throw x}return {hot:p,warm:w,hotTokens:g,warmTokens:A,hotOverflow:h,totalBudget:c,config:{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}}}ke();ue();l();var ct=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},Ue=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),u=[],c=0,m=0,p=0,g=false,h=0,v=performance.now(),w=async T=>{a?.onTaskStart&&await a.onTaskStart(T),p+=1;let I=new AbortController,k={signal:I.signal},N,M;typeof s=="number"&&Number.isFinite(s)&&s>0&&(M=new Promise((j,F)=>{N=setTimeout(()=>{let de=new ct(T.id,s);I.abort(de),F(de);},s);}));let R=performance.now(),D=T.run(k),ae=M?Promise.race([D,M]):D;try{let j=await ae,F=performance.now(),de=F-R,ye=d(j,T),qe={taskId:T.id,success:ye,value:j,durationMs:de,startedAt:R,finishedAt:F,metadata:T.metadata,aborted:!1};u.push(qe),ye?c+=1:m+=1,a?.onTaskComplete&&await a.onTaskComplete(qe),i&&!ye&&(g=!0);}catch(j){let F=performance.now(),de=F-R,ye=j instanceof Error?j:new Error(String(j)),qe={taskId:T.id,success:false,error:ye,durationMs:de,startedAt:R,finishedAt:F,metadata:T.metadata,aborted:I.signal.aborted};u.push(qe),m+=1,a?.onError&&await a.onError(T,ye,de),i&&(g=true);}finally{N&&clearTimeout(N),M&&D.catch(()=>{});}},A=async()=>{for(;!g;){let T=h;if(T>=e.length)break;h+=1;let I=e[T];if(!I||(await w(I),g))break}},x=Math.min(n,e.length),C=[];for(let T=0;T<x;T++)C.push(A());await Promise.all(C);let _=performance.now()-v,L=u.length?u.reduce((T,I)=>T+I.durationMs,0)/u.length:0,$=_>0?u.length/(_/1e3):u.length;return this.metrics={totalTasks:e.length,startedTasks:p,completedTasks:u.length,successCount:c,failureCount:m,totalDurationMs:_,averageDurationMs:L,throughput:$},u}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 Fe=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 on=3,sn=3e4,an=500,ks=o=>{if(typeof o!="number"||Number.isNaN(o)||!Number.isFinite(o))return on;let e=Math.floor(o);return e>0?e:on},As=o=>o===void 0||typeof o!="number"||Number.isNaN(o)||o<=0?sn:o,Ps=o=>{if(!o)return {maxRetries:0,retryDelay:an};let e=Number.isInteger(o.maxRetries)&&o.maxRetries>=0?o.maxRetries:0,t=typeof o.retryDelay=="number"&&o.retryDelay>=0?o.retryDelay:an;return {maxRetries:e,retryDelay:t}},ir=o=>{let e=o.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},Rs=(o,e)=>o<=0?Promise.resolve():new Promise((t,r)=>{let n=setTimeout(()=>{e.removeEventListener("abort",s),t();},o),s=()=>{clearTimeout(n),r(ir(e));};if(e.aborted){s();return}e.addEventListener("abort",s,{once:true});}),Cs=async(o,e,t)=>{let r,n;for(let s=0;s<=e.maxRetries;s++){if(t.aborted)throw ir(t);try{let i=await o();if(r=i,i.success||s===e.maxRetries)return i}catch(i){if(n=i,t.aborted)throw ir(t);if(s===e.maxRetries)throw i instanceof Error?i:new Error(String(i))}s<e.maxRetries&&await Rs(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")},dn=(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);}},bs=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}}}),Ts=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")}}),Ss=(o,e)=>({onTaskComplete:async t=>{dn(e,o,t.success);},onError:async()=>{dn(e,o,false);}}),ln=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=ks(t.concurrency),n=As(t.timeout),s=Ps(t.retryPolicy),i=new Ue,a=new Fe,d=o.map((v,w)=>({id:`${e}:${v.agentId??"anonymous"}:${w}`,metadata:{index:w,mode:e,request:v},run:A=>Cs(()=>e==="query"?a.query(v):a.execute(v),s,A.signal)})),u={completed:0,success:0,failure:0,total:o.length},c=await i.run(d,{maxConcurrency:r,timeoutMs:n,evaluateTaskSuccess:v=>v.success,callbacks:Ss(u,t)}),m=bs(c),p=Ts(c),g=i.getMetrics(),h={total:o.length,completed:o.length,successCount:m.filter(v=>v.success).length,failureCount:m.filter(v=>!v.success).length,results:m,errors:p,metrics:g};return t.onComplete?.(h),m},Es=(o,e)=>ln(o,"query",e),_s=(o,e)=>ln(o,"execute",e);Zt();Yt();Gt();Qt();l();l();var ut=class{capabilities={required:[]}};l();l();l();var cn=2e3;function un(o){let e=o.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=cn?e:e.slice(0,cn-11)+" [redacted]"}var js=10*1024*1024,Hs={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function ar(o,e){return o===void 0?true:Array.isArray(o)?o.includes(e):o===e}function Us(o,e){return o===void 0?true:Array.isArray(o)?o.some(t=>e.includes(t)):e.includes(o)}function gn(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*(Hs[r]??1))}function mn(o){return typeof o=="string"}function fn(o){try{let e=statSync(o);return e.size>js?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${o} (${e.size} bytes)
49
49
  `),null):readFileSync(o,"utf8").split(`
50
- `).length}catch{return null}}function mn(o){try{return statSync(o).size}catch{return null}}function Hs(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(X(n,o))return true;if(t&&n.startsWith("/")){let{relative:s,isAbsolute:i}=q("path");if(i(n)){let a=s(t,n);if(a&&!a.startsWith("..")&&X(a,o))return true}}return false}function Us(o,e){return o?JSON.stringify(e).includes(o):true}function Fs(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)return true;try{let t=new RegExp(o),r=JSON.stringify(e);return t.test(r)}catch{return false}}function Ws(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(pn(o.pathSizeMin)){let n=mn(r);if(n===null||n<un(o.pathSizeMin))return false}else {let n=gn(r);if(n===null||n<o.pathSizeMin)return false}if(o.pathSizeMax!==void 0)if(pn(o.pathSizeMax)){let n=mn(r);if(n===null||n>un(o.pathSizeMax))return false}else {let n=gn(r);if(n===null||n>o.pathSizeMax)return false}return true}function Bs(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 ar=class extends ut{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(`
50
+ `).length}catch{return null}}function yn(o){try{return statSync(o).size}catch{return null}}function Fs(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(X(n,o))return true;if(t&&n.startsWith("/")){let{relative:s,isAbsolute:i}=q("path");if(i(n)){let a=s(t,n);if(a&&!a.startsWith("..")&&X(a,o))return true}}return false}function qs(o,e){return o?JSON.stringify(e).includes(o):true}function Ws(o,e){if(!o)return true;try{let t=new RegExp(o),r=JSON.stringify(e);return t.test(r)}catch{return false}}function Bs(o,e){if(!o)return true;try{let t=new RegExp(o),r=JSON.stringify(e);return t.test(r)}catch{return false}}function Vs(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(mn(o.pathSizeMin)){let n=yn(r);if(n===null||n<gn(o.pathSizeMin))return false}else {let n=fn(r);if(n===null||n<o.pathSizeMin)return false}if(o.pathSizeMax!==void 0)if(mn(o.pathSizeMax)){let n=yn(r);if(n===null||n>gn(o.pathSizeMax))return false}else {let n=fn(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 lr=class extends ut{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(`
51
51
 
52
- `)):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=ln(t.message).slice(0,500)));let n=`[${new Date().toISOString()}] HOOK: ${JSON.stringify(r)}
53
- `;appendFileSync(e,n,{encoding:"utf8",mode:384});}catch{}}matchEntryLevel(e,t){if(e.provider!==void 0){let r=t.provider.replace(/^cli\//,"");if(!sr(e.provider,r))return false}if(e.team!==void 0){let n=this.agentMap.get(t.agent.id)?.team??t.agent.team;if(!sr(e.team,n))return false}if(e.role!==void 0){let n=this.agentMap.get(t.agent.id)?.role??t.agent.role;if(!sr(e.role,n))return false}if(e.tag!==void 0){let n=this.agentMap.get(t.agent.id)?.tags??[];if(!js(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)||!Us(e.pattern,t.tool.input)||!Fs(e.regex,t.tool.input)||!Hs(e.pathPattern,t.tool.input,t.cwd)||!Ws(e,t.tool.input)||!qs(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}
54
- `);}}firedFilePath(e){let t=createHash("sha1").update(e).digest("hex");return join(homedir(),".crewx","sessions",t,"fired-rules.json")}};l();l();l();function Vs(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 dr=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 zs(o){return o}function Ks(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);}}}Qe();export{fe as ACP_ADAPTERS,me as AcpConnection,ne as AcpProtocolError,Ne as AcpProviderRuntime,dr as AdapterError,Z as AgentNotFoundError,Fe as AgentRuntime,cr as AgentSkillsSchema,oe as BUILTIN_ADAPTERS,tr as BrowserFsAdapter,K as ClientToolCallRequiredError,le as ConfigLoadError,Yt as Crewx,er as CrewxPlugin,pe as DocumentLoader,U as LayoutLoadError,Ee as LayoutLoader,Ie as LayoutRenderer,$e as McpHttpTransport,rt as NodeFsAdapter,Ue as ParallelRunner,ct as ParallelRunnerTimeoutError,je as PluginProviderRuntime,re as PropsValidationError,_e as PropsValidator,b as ProviderError,Ce as RateLimitError,Le as RemoteAgentManager,De as RemoteProviderRuntime,nr as SdkBoxService,Se as TemplateEngine,Oe as TypedEventEmitter,Me as VercelProviderRuntime,ar as YamlHookPlugin,ws as buildContext,ot as claudeAcpAdapter,Ge as claudeAdapter,st as codexAcpAdapter,et as codexAdapter,at as copilotAcpAdapter,Ze as copilotAdapter,Mt as createAdapterContext,ms as createDelegateTool,$t as createHandler,Jr as createPluginProviderFactory,te as createProvider,Br as createRemoteProviderFactory,It as createScopedAdapterStore,Ht as defaultExtractText,St as defaultFsAdapter,J as defaultParseEvent,zs as defineChannelAdapter,Ks as defineChannelAdapterPlugin,Ct as escapeHandlebarsHelper,bt as formatFileSizeHelper,_t as formatTimestamp,Tt as formatTimestampHelper,it as geminiAcpAdapter,Ye as geminiAdapter,xo as generateFingerprint,ge as generateId,Po as getSyncWindowStore,Lt as hashWorkspaceId,Rt as lengthHelper,Ve as loadYamlFile,Re as materializeWindowsSpawnProgram,Nr as normalizeWorkspacePath,dt as opencodeAcpAdapter,tt as opencodeAdapter,kt as parseStdoutEvent,W as parseUsage,Be as parseYamlContent,en as queryAcpProviderMeta,gs as queryAllAcpProviderMetas,qr as registerAcpProviders,Dr as registerApiProviders,ee as registerProviderFactory,Ke as resolveAgent,us as resolveAgentSkills,fs as resolveCrewxCli,ys as resolveCrewxWorkspace,mt as resolveDefaultAgentsYaml,he as resolveTemplatesPath,gr as resolveWindowsExecutablePath,Pe as resolveWindowsSpawnProgram,Ss as runExecutesParallel,Ro as runInSyncWindow,Ts as runQueriesParallel,io as setAuditVerbose,Vs as toTaskReader,Nt as toTemplateMessages,Pt as truncateHelper,Bs as validateHooksSchema};
52
+ `)):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=un(t.message).slice(0,500)));let n=`[${new Date().toISOString()}] HOOK: ${JSON.stringify(r)}
53
+ `;appendFileSync(e,n,{encoding:"utf8",mode:384});}catch{}}matchEntryLevel(e,t){if(e.provider!==void 0){let r=t.provider.replace(/^cli\//,"");if(!ar(e.provider,r))return false}if(e.team!==void 0){let n=this.agentMap.get(t.agent.id)?.team??t.agent.team;if(!ar(e.team,n))return false}if(e.role!==void 0){let n=this.agentMap.get(t.agent.id)?.role??t.agent.role;if(!ar(e.role,n))return false}if(e.tag!==void 0){let n=this.agentMap.get(t.agent.id)?.tags??[];if(!Us(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)||!qs(e.pattern,t.tool.input)||!Ws(e.regex,t.tool.input)||!Fs(e.pathPattern,t.tool.input,t.cwd)||!Vs(e,t.tool.input)||!Bs(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}
54
+ `);}}firedFilePath(e){let t=createHash("sha1").update(e).digest("hex");return join(homedir(),".crewx","sessions",t,"fired-rules.json")}};l();l();l();function Ks(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 cr=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 Js(o){return o}function Xs(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);}}}Qe();export{fe as ACP_ADAPTERS,me as AcpConnection,ne as AcpProtocolError,Ne as AcpProviderRuntime,cr as AdapterError,Z as AgentNotFoundError,Fe as AgentRuntime,pr as AgentSkillsSchema,oe as BUILTIN_ADAPTERS,nr as BrowserFsAdapter,K as ClientToolCallRequiredError,le as ConfigLoadError,er as Crewx,rr as CrewxPlugin,pe as DocumentLoader,U as LayoutLoadError,Ee as LayoutLoader,Ie as LayoutRenderer,$e as McpHttpTransport,rt as NodeFsAdapter,Ue as ParallelRunner,ct as ParallelRunnerTimeoutError,je as PluginProviderRuntime,re as PropsValidationError,_e as PropsValidator,b as ProviderError,Ce as RateLimitError,Le as RemoteAgentManager,De as RemoteProviderRuntime,sr as SdkBoxService,Se as TemplateEngine,Oe as TypedEventEmitter,Me as VercelProviderRuntime,lr as YamlHookPlugin,xs as buildContext,ot as claudeAcpAdapter,Ge as claudeAdapter,st as codexAcpAdapter,et as codexAdapter,at as copilotAcpAdapter,Ze as copilotAdapter,$t as createAdapterContext,ys as createDelegateTool,Dt as createHandler,Qr as createPluginProviderFactory,te as createProvider,zr as createRemoteProviderFactory,Mt as createScopedAdapterStore,Ft as defaultExtractText,_t as defaultFsAdapter,J as defaultParseEvent,Js as defineChannelAdapter,Xs as defineChannelAdapterPlugin,Tt as escapeHandlebarsHelper,St as formatFileSizeHelper,Ot as formatTimestamp,Et as formatTimestampHelper,it as geminiAcpAdapter,Ye as geminiAdapter,Ao as generateFingerprint,ge as generateId,Co as getSyncWindowStore,jt as hashWorkspaceId,bt as lengthHelper,Ve as loadYamlFile,Re as materializeWindowsSpawnProgram,Lr as normalizeWorkspacePath,dt as opencodeAcpAdapter,tt as opencodeAdapter,Pt as parseStdoutEvent,W as parseUsage,Be as parseYamlContent,rn as queryAcpProviderMeta,fs as queryAllAcpProviderMetas,Br as registerAcpProviders,Hr as registerApiProviders,ee as registerProviderFactory,Ke as resolveAgent,gs as resolveAgentSkills,hs as resolveCrewxCli,ws as resolveCrewxWorkspace,mt as resolveDefaultAgentsYaml,he as resolveTemplatesPath,fr as resolveWindowsExecutablePath,Pe as resolveWindowsSpawnProgram,_s as runExecutesParallel,bo as runInSyncWindow,Es as runQueriesParallel,lo as setAuditVerbose,Ks as toTaskReader,Lt as toTemplateMessages,Ct as truncateHelper,zs as validateHooksSchema};