@crewx/sdk 0.8.8-rc.32 → 0.8.8-rc.34

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,59 +1,59 @@
1
- import*as z from'path';import z__default,{join,resolve,dirname,isAbsolute,basename}from'path';import {fileURLToPath}from'url';import {existsSync,readFileSync,readdirSync,mkdirSync,appendFileSync,writeFileSync,statSync}from'fs';import {spawn,execFileSync}from'child_process';import {ndJsonStream,ClientSideConnection}from'@agentclientprotocol/sdk';import {load}from'js-yaml';import {z as z$1}from'zod';import {createRequire}from'module';import*as le from'handlebars';import le__default from'handlebars';import {readFile,access,readdir}from'fs/promises';import {createHash,randomBytes}from'crypto';import {EventEmitter}from'events';import {AsyncLocalStorage}from'async_hooks';import {McpServer}from'@modelcontextprotocol/sdk/server/mcp.js';import {WebStandardStreamableHTTPServerTransport}from'@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js';import {performance}from'perf_hooks';import {sql,eq,desc,and,or as or$1,isNull,like,asc,inArray,gte,lt as lt$1}from'drizzle-orm';import Di,{homedir}from'os';import {sqliteTable,text,integer,real,index,unique}from'drizzle-orm/sqlite-core';var qt=Object.defineProperty;var fo=Object.getOwnPropertyDescriptor;var yo=Object.getOwnPropertyNames;var ho=Object.prototype.hasOwnProperty;var V=(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 D=(o,e)=>()=>(o&&(e=o(o=0)),e);var ut=(o,e)=>{for(var t in e)qt(o,t,{get:e[t],enumerable:true});},wo=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of yo(e))!ho.call(o,n)&&n!==t&&qt(o,n,{get:()=>e[n],enumerable:!(r=fo(e,n))||r.enumerable});return o};var Bt=o=>wo(qt({},"__esModule",{value:true}),o);var Vr,vo,m,y,l=D(()=>{Vr=()=>fileURLToPath(import.meta.url),vo=()=>z__default.dirname(Vr()),m=vo(),y=Vr();});function yt(o){return typeof o!="string"?void 0:o.trim()||void 0}function ht(o){return yt(o)?.toLowerCase()??""}function $e(o){try{return statSync(o).isFile()}catch{return false}}function Gr(o,e){if(o.includes("/")||o.includes("\\")||z__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=z__default.extname(o).length>0,s=e.PATHEXT??e.Pathext??process.env.PATHEXT??process.env.Pathext??".EXE;.CMD;.BAT;.COM",i=n?[""]:s.split(";").map(a=>a.trim()).filter(Boolean).map(a=>a.startsWith(".")?a:`.${a}`);for(let a of r)for(let d of i){let c=ht(d),u=d.toUpperCase();for(let g of [d,c,u]){let h=z__default.join(a,`${o}${g}`);if($e(h))return h}}return o}function Mo(o){if(!$e(o))return null;try{let e=readFileSync(o,"utf8"),t=z__default.dirname(o),r=[];for(let a of e.matchAll(/"([^"\r\n]*)"/g)){let u=(a[1]??"").match(/%~?dp0%?\s*[\\/]*(.*)$/i)?.[1]?.trim();if(!u)continue;let g=u.replace(/[\\/]+/g,z__default.sep).replace(/^[\\/]+/,""),h=z__default.resolve(t,g);$e(h)&&r.push(h);}let n=[],s=new Map;for(let a of e.matchAll(/SET\s+"(\w+)=%~?dp0%?[\\/]?([^"]+)"/gi)){let d=a[1].toUpperCase(),c=a[2].trim().replace(/[\\/]+/g,z__default.sep).replace(/^[\\/]+/,"");s.set(d,z__default.resolve(t,c));}for(let a of e.split(/\r?\n/))if(a.includes("%*"))for(let d of a.matchAll(/"%(\w+)%"/g)){let c=s.get(d[1].toUpperCase());c&&$e(c)&&n.push(c);}let i=a=>a.find(d=>{let c=ht(z__default.basename(d));return c!=="node.exe"&&c!=="node"})??null;return i(n)??i(r)}catch{return null}}function No(o,e){if(typeof e=="string")return yt(e)||null;if(!e||typeof e!="object")return null;if(o){let t=e[o],r=typeof t=="string"?yt(t):void 0;if(r)return r}for(let t of Object.values(e)){let r=typeof t=="string"?yt(t):void 0;if(r)return r}return null}function Do(o,e){if(!e)return null;let t=z__default.dirname(o),r=[z__default.resolve(t,"..",e),z__default.resolve(t,"node_modules",e)];for(let n of r){let s=z__default.join(n,"package.json");if($e(s))try{let i=JSON.parse(readFileSync(s,"utf8")),a=No(e,i.bin);if(!a)continue;let d=z__default.resolve(n,a);if($e(d))return d}catch{}}return null}function Lo(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=ht(z__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=Mo(n)??Do(n,o.packageName);return i?ht(z__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 $o(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(`${z__default.basename(o.candidate.command)} wrapper resolved, but no executable/Node entrypoint could be resolved without shell execution.`)}function ze(o){let e=Lo(o);return $o({candidate:e,allowShellFallback:o.allowShellFallback})}function Ve(o,e){return {command:o.command,argv:[...o.leadingArgv,...e],resolution:o.resolution,shell:o.shell,windowsHide:o.windowsHide}}var wt=D(()=>{l();});function jo(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 Uo(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 Fo(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 te(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=jo(r)??Uo(r)??Fo(r);n&&(e=n);}catch{}return e??void 0}var Re=D(()=>{l();});var Ke,zt=D(()=>{l();Ke=class extends Error{name="RateLimitError";constructor(e){super(e);}};});function re(o){return /crewx\s+(x|execute)\s/.test(o)}function ne(o,e){let t=e.match(/@(\S+)/);return {timestamp:o,type:"agent_call",targetAgent:t?.[1]?.replace(/["']/g,""),toolInput:e}}var je=D(()=>{l();});function oe(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 Ue=D(()=>{l();});function Ho(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=oe(s);return r==="Bash"&&re(i)?ne(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 xt,Vt=D(()=>{l();zt();je();Ue();xt={command:"claude",buildArgs(o,e,t){if(e.additionalArgs!==void 0){let n=[...e.additionalArgs],s=n.indexOf("-p");return s!==-1?(n.splice(s+1,0,o),e.model&&n.push("--model",e.model),{args:n}):(e.model&&n.push("--model",e.model),{args:n,stdinMessage:o})}let r=["-p",o,"--output-format","stream-json","--verbose"];return e.model&&r.push("--model",e.model),{args:r}},extractText(o){let e=o.split(`
4
- `).filter(n=>n.trim()),t=[],r=null;for(let n of e)try{let s=JSON.parse(n);if(s.type==="assistant"&&Array.isArray(s.message?.content))for(let i of s.message.content)i.type==="text"&&typeof i.text=="string"&&i.text.trim()&&t.push(i.text.trim());s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t.join(`
1
+ import*as z from'path';import z__default,{join,resolve,dirname,isAbsolute,basename}from'path';import {fileURLToPath}from'url';import {existsSync,readFileSync,readdirSync,mkdirSync,appendFileSync,writeFileSync,statSync}from'fs';import {spawn,execFileSync}from'child_process';import {ndJsonStream,ClientSideConnection}from'@agentclientprotocol/sdk';import {load}from'js-yaml';import {z as z$1}from'zod';import {createRequire}from'module';import*as le from'handlebars';import le__default from'handlebars';import {readFile,access,readdir}from'fs/promises';import {createHash,randomBytes}from'crypto';import {EventEmitter}from'events';import {AsyncLocalStorage}from'async_hooks';import {McpServer}from'@modelcontextprotocol/sdk/server/mcp.js';import {WebStandardStreamableHTTPServerTransport}from'@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js';import {performance}from'perf_hooks';import {sql,eq,desc,and,or as or$1,isNull,like,asc,inArray,gte,lt as lt$1}from'drizzle-orm';import Ui,{homedir}from'os';import {sqliteTable,text,integer,real,index,unique}from'drizzle-orm/sqlite-core';var Wt=Object.defineProperty;var wo=Object.getOwnPropertyDescriptor;var xo=Object.getOwnPropertyNames;var ko=Object.prototype.hasOwnProperty;var V=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var D=(n,e)=>()=>(n&&(e=n(n=0)),e);var gt=(n,e)=>{for(var t in e)Wt(n,t,{get:e[t],enumerable:true});},vo=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of xo(e))!ko.call(n,o)&&o!==t&&Wt(n,o,{get:()=>e[o],enumerable:!(r=wo(e,o))||r.enumerable});return n};var zt=n=>vo(Wt({},"__esModule",{value:true}),n);var Jr,Ro,m,y,l=D(()=>{Jr=()=>fileURLToPath(import.meta.url),Ro=()=>z__default.dirname(Jr()),m=Ro(),y=Jr();});function wt(n){return typeof n!="string"?void 0:n.trim()||void 0}function xt(n){return wt(n)?.toLowerCase()??""}function je(n){try{return statSync(n).isFile()}catch{return false}}function Qr(n,e){if(n.includes("/")||n.includes("\\")||z__default.isAbsolute(n))return n;let r=(e.PATH??e.Path??process.env.PATH??process.env.Path??"").split(";").map(a=>a.trim()).filter(Boolean),o=z__default.extname(n).length>0,s=e.PATHEXT??e.Pathext??process.env.PATHEXT??process.env.Pathext??".EXE;.CMD;.BAT;.COM",i=o?[""]:s.split(";").map(a=>a.trim()).filter(Boolean).map(a=>a.startsWith(".")?a:`.${a}`);for(let a of r)for(let d of i){let c=xt(d),u=d.toUpperCase();for(let g of [d,c,u]){let h=z__default.join(a,`${n}${g}`);if(je(h))return h}}return n}function $o(n){if(!je(n))return null;try{let e=readFileSync(n,"utf8"),t=z__default.dirname(n),r=[];for(let a of e.matchAll(/"([^"\r\n]*)"/g)){let u=(a[1]??"").match(/%~?dp0%?\s*[\\/]*(.*)$/i)?.[1]?.trim();if(!u)continue;let g=u.replace(/[\\/]+/g,z__default.sep).replace(/^[\\/]+/,""),h=z__default.resolve(t,g);je(h)&&r.push(h);}let o=[],s=new Map;for(let a of e.matchAll(/SET\s+"(\w+)=%~?dp0%?[\\/]?([^"]+)"/gi)){let d=a[1].toUpperCase(),c=a[2].trim().replace(/[\\/]+/g,z__default.sep).replace(/^[\\/]+/,"");s.set(d,z__default.resolve(t,c));}for(let a of e.split(/\r?\n/))if(a.includes("%*"))for(let d of a.matchAll(/"%(\w+)%"/g)){let c=s.get(d[1].toUpperCase());c&&je(c)&&o.push(c);}let i=a=>a.find(d=>{let c=xt(z__default.basename(d));return c!=="node.exe"&&c!=="node"})??null;return i(o)??i(r)}catch{return null}}function Lo(n,e){if(typeof e=="string")return wt(e)||null;if(!e||typeof e!="object")return null;if(n){let t=e[n],r=typeof t=="string"?wt(t):void 0;if(r)return r}for(let t of Object.values(e)){let r=typeof t=="string"?wt(t):void 0;if(r)return r}return null}function jo(n,e){if(!e)return null;let t=z__default.dirname(n),r=[z__default.resolve(t,"..",e),z__default.resolve(t,"node_modules",e)];for(let o of r){let s=z__default.join(o,"package.json");if(je(s))try{let i=JSON.parse(readFileSync(s,"utf8")),a=Lo(e,i.bin);if(!a)continue;let d=z__default.resolve(o,a);if(je(d))return d}catch{}}return null}function Uo(n){let e=n.platform??process.platform,t=n.env??process.env,r=n.execPath??process.execPath;if(e!=="win32")return {command:n.command,leadingArgv:[],resolution:"direct"};let o=Qr(n.command,t),s=xt(z__default.extname(o));if(s===".js"||s===".cjs"||s===".mjs")return {command:r,leadingArgv:[o],resolution:"node-entrypoint",windowsHide:true};if(s===".cmd"||s===".bat"){let i=$o(o)??jo(o,n.packageName);return i?xt(z__default.extname(i))===".exe"?{command:i,leadingArgv:[],resolution:"exe-entrypoint",windowsHide:true}:{command:r,leadingArgv:[i],resolution:"node-entrypoint",windowsHide:true}:{command:o,leadingArgv:[],resolution:"unresolved-wrapper"}}return {command:o,leadingArgv:[],resolution:"direct"}}function Fo(n){if(n.candidate.resolution!=="unresolved-wrapper")return {command:n.candidate.command,leadingArgv:n.candidate.leadingArgv,resolution:n.candidate.resolution,windowsHide:n.candidate.windowsHide};if(n.allowShellFallback===true)return {command:n.candidate.command,leadingArgv:[],resolution:"shell-fallback",shell:true};throw new Error(`${z__default.basename(n.candidate.command)} wrapper resolved, but no executable/Node entrypoint could be resolved without shell execution.`)}function Ve(n){let e=Uo(n);return Fo({candidate:e,allowShellFallback:n.allowShellFallback})}function Ke(n,e){return {command:n.command,argv:[...n.leadingArgv,...e],resolution:n.resolution,shell:n.shell,windowsHide:n.windowsHide}}var kt=D(()=>{l();});function Ho(n){if(n.type!=="usage"||!("input_tokens"in n))return null;let e=Number(n.input_tokens??0),t=Number(n.output_tokens??0),o="cache_read_input_tokens"in n?Number(n.cache_read_input_tokens):void 0,s="cached_input_tokens"in n?Number(n.cached_input_tokens):void 0,i=o!==void 0?o:s??0;return {inputTokens:o!==void 0?e+o:e,outputTokens:t,cachedInputTokens:i}}function qo(n){let e=n.usage;if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(!("input_tokens"in t))return null;let r=Number(t.input_tokens??0),o=Number(t.output_tokens??0),i="cache_read_input_tokens"in t?Number(t.cache_read_input_tokens):void 0,a="cached_input_tokens"in t?Number(t.cached_input_tokens):void 0,d=i!==void 0?i:a??0;return {inputTokens:i!==void 0?r+i:r,outputTokens:o,cachedInputTokens:d}}function Bo(n){if(n.type!=="step_finish")return null;let t=n.part?.tokens;if(!t)return null;let r=Number(t.input??0),o=Number(t.output??0),s=t.cache,i=s?Number(s.read??0):0;return {inputTokens:r+i,outputTokens:o,cachedInputTokens:i}}function te(n){if(!n||!n.trim())return;let e=null;for(let t of n.split(`
2
+ `))if(t.trim())try{let r=JSON.parse(t),o=Ho(r)??qo(r)??Bo(r);o&&(e=o);}catch{}return e??void 0}var Re=D(()=>{l();});var Je,Kt=D(()=>{l();Je=class extends Error{name="RateLimitError";constructor(e){super(e);}};});function re(n){return /crewx\s+(x|execute)\s/.test(n)}function ne(n,e){let t=e.match(/@(\S+)/);return {timestamp:n,type:"agent_call",targetAgent:t?.[1]?.replace(/["']/g,""),toolInput:e}}var Ue=D(()=>{l();});function oe(n){if(typeof n=="string")return n;if(!n||typeof n!="object")return JSON.stringify(n??{});let e=n;return typeof e.command=="string"?e.command:typeof e.file_path=="string"?e.file_path:typeof e.filePath=="string"?e.filePath:typeof e.path=="string"?e.path:typeof e.query=="string"?e.query:typeof e.pattern=="string"?e.pattern:typeof e.url=="string"?e.url:typeof e.prompt=="string"?e.prompt.length>200?e.prompt.slice(0,200)+"\u2026":e.prompt:typeof e.description=="string"?e.description:JSON.stringify(e)}var Fe=D(()=>{l();});function Wo(n,e){let t=e.type;if(t==="text"){let r=String(e.text||"");return r?{timestamp:n,type:"text",content:r}:null}if(t==="thinking"){let r=String(e.thinking||"");return {timestamp:n,type:"thinking",content:r||"(thinking)"}}if(t==="tool_use"){let r=String(e.name||""),o=e.id,s=e.input,i=oe(s);return r==="Bash"&&re(i)?ne(n,i):{timestamp:n,type:"tool_use",toolUseId:o,toolName:r,toolInput:i}}if(t==="tool_result"){let r=!!e.is_error,o=e.tool_use_id,s=e.output??e.content??"",i;return typeof s=="string"?i=s:Array.isArray(s)?i=s.filter(a=>a.type==="text"&&typeof a.text=="string").map(a=>a.text).join(`
3
+ `):i=JSON.stringify(s),{timestamp:n,type:"tool_result",toolUseId:o,resultPreview:i,isError:r}}return null}var vt,Jt=D(()=>{l();Kt();Ue();Fe();vt={command:"claude",buildArgs(n,e,t){if(e.additionalArgs!==void 0){let o=[...e.additionalArgs],s=o.indexOf("-p");return s!==-1?(o.splice(s+1,0,n),e.model&&o.push("--model",e.model),{args:o}):(e.model&&o.push("--model",e.model),{args:o,stdinMessage:n})}let r=["-p",n,"--output-format","stream-json","--verbose"];return e.model&&r.push("--model",e.model),{args:r}},extractText(n){let e=n.split(`
4
+ `).filter(o=>o.trim()),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant"&&Array.isArray(s.message?.content))for(let i of s.message.content)i.type==="text"&&typeof i.text=="string"&&i.text.trim()&&t.push(i.text.trim());s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t.join(`
5
5
 
6
- `):r||o.trim()},extractFailure(o){if(o.includes('"rate_limit_event"'))try{let e=JSON.parse(o);if(e.type==="rate_limit_event"){let t=e.rate_limit_info??{};if(t.status==="rejected")return new Ke(`Claude rate limit: ${t.rateLimitType??"unknown"} (status: ${t.status})`)}}catch{}return null},parseResultMeta(o){let e=o.split(`
7
- `);for(let t of e)if(t.trim())try{let r=JSON.parse(t);if(r.type==="result"){let n=r.usage,s=n?{inputTokens:Number(n.input_tokens??0)+Number(n.cache_read_input_tokens??0),outputTokens:Number(n.output_tokens??0),cachedInputTokens:Number(n.cache_read_input_tokens??0),costUsd:Number(r.total_cost_usd??0)}:null,i=r.modelUsage,a=i?Object.keys(i)[0]??null:null;return {usage:s,model:a}}}catch{}return {usage:null,model:null}},parseEvent(o,e){let t;try{t=JSON.parse(o);}catch{return []}let r=t.type;if(!r)return [];if(r!=="assistant"&&r!=="user")return [];let s=t.message?.content;if(!Array.isArray(s))return [];let i=e??new Date().toISOString(),a=[];for(let d of s){let c=Ho(i,d);c&&a.push(c);}return a}};});var kt,Kt=D(()=>{l();Re();je();Ue();kt={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=te(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=oe(a);return /^bash$/i.test(s)&&re(d)?[ne(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 vt,Jt=D(()=>{l();Re();je();Ue();vt={command:"copilot",buildArgs(o,e,t){let r=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&r.push("--model",e.model),{args:r,stdinMessage:o}},extractText(o){let e=o.split(`
9
- `).filter(n=>n.trim()),t=[],r=null;for(let n of e)try{let s=JSON.parse(n);if(s.type==="assistant.message"&&typeof s.data?.content=="string"){let i=s.data.content;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t.join(`
6
+ `):r||n.trim()},extractFailure(n){if(n.includes('"rate_limit_event"'))try{let e=JSON.parse(n);if(e.type==="rate_limit_event"){let t=e.rate_limit_info??{};if(t.status==="rejected")return new Je(`Claude rate limit: ${t.rateLimitType??"unknown"} (status: ${t.status})`)}}catch{}return null},parseResultMeta(n){let e=n.split(`
7
+ `);for(let t of e)if(t.trim())try{let r=JSON.parse(t);if(r.type==="result"){let o=r.usage,s=o?{inputTokens:Number(o.input_tokens??0)+Number(o.cache_read_input_tokens??0),outputTokens:Number(o.output_tokens??0),cachedInputTokens:Number(o.cache_read_input_tokens??0),costUsd:Number(r.total_cost_usd??0)}:null,i=r.modelUsage,a=i?Object.keys(i)[0]??null:null;return {usage:s,model:a}}}catch{}return {usage:null,model:null}},parseEvent(n,e){let t;try{t=JSON.parse(n);}catch{return []}let r=t.type;if(!r)return [];if(r!=="assistant"&&r!=="user")return [];let s=t.message?.content;if(!Array.isArray(s))return [];let i=e??new Date().toISOString(),a=[];for(let d of s){let c=Wo(i,d);c&&a.push(c);}return a}};});var _t,Xt=D(()=>{l();Re();Ue();Fe();_t={command:"gemini",buildArgs(n,e,t){if(e.additionalArgs!==void 0){let o=[...e.additionalArgs],s=o.indexOf("-p");return s!==-1?(o.splice(s+1,0,n),e.model&&o.push("--model",e.model),{args:o}):(e.model&&o.push("--model",e.model),{args:o,stdinMessage:n})}let r=["-p",n,"--output-format","stream-json","--verbose"];return e.model&&r.push("--model",e.model),{args:r}},extractText(n){let e=n.split(`
8
+ `).filter(o=>o.trim()),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);s.type==="message"&&s.role==="assistant"&&s.delta===!0&&typeof s.content=="string"&&t.push(s.content),s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t.join(""):r||n.trim()},parseResultMeta(n){let e=te(n);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(n,e){let t;try{t=JSON.parse(n);}catch{return []}let r=t.type;if(!r)return [];if(r!=="message"&&r!=="tool_use"&&r!=="tool_result")return [];let o=e??new Date().toISOString();if(r==="message"){if(t.role!=="assistant")return [];let i=t.content;return i?[{timestamp:o,type:"text",content:i}]:[]}if(r==="tool_use"){let s=String(t.tool_name||""),i=t.tool_id,a=t.parameters,d=oe(a);return /^bash$/i.test(s)&&re(d)?[ne(o,d)]:[{timestamp:o,type:"tool_use",toolName:s,toolUseId:i,toolInput:d}]}if(r==="tool_result"){let s=t.tool_id,i=String(t.output||""),a=t.status!=="success";return [{timestamp:o,type:"tool_result",toolUseId:s,resultPreview:i,isError:a}]}return []}};});var At,Gt=D(()=>{l();Re();Ue();Fe();At={command:"copilot",buildArgs(n,e,t){let r=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&r.push("--model",e.model),{args:r,stdinMessage:n}},extractText(n){let e=n.split(`
9
+ `).filter(o=>o.trim()),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant.message"&&typeof s.data?.content=="string"){let i=s.data.content;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t.join(`
10
10
 
11
- `):r||o.trim()},parseResultMeta(o){let e=te(o);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(o,e){let t;try{t=JSON.parse(o);}catch{return []}let r=t.type;if(!r)return [];if(!r.startsWith("tool.execution")&&!r.startsWith("assistant.")&&r!=="user.message")return [];let n=t.data;if(!n)return [];let s=e??new Date().toISOString(),i=n.toolCallId;if(r==="tool.execution_start"){let a=String(n.toolName||""),d=n.arguments,c=oe(d);return (a==="bash"||a==="Bash")&&re(c)?[ne(s,c)]:[{timestamp:s,type:"tool_use",toolName:a,toolInput:c,...i&&{toolUseId:i}}]}if(r==="tool.execution_complete"){let a=n.error;if(a)return [{timestamp:s,type:"tool_result",isError:true,resultPreview:String(a.message||""),...i&&{toolUseId:i}}];let d=n.result,c=String(d?.content||"");return [{timestamp:s,type:"tool_result",resultPreview:c,isError:false,...i&&{toolUseId:i}}]}if(r==="assistant.message"){let a=String(n.content||"");return a?[{timestamp:s,type:"text",content:a}]:[]}return []}};});function qo(o,e){if(e.type==="command_execution"){let r=String(e.command||"");return re(r)?[ne(o,r)]:[{timestamp:o,type:"tool_use",toolName:"Bash",toolInput:r}]}return []}function Bo(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=Wo(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=oe(n);return r==="Bash"&&re(s)?ne(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 Wo(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=oe(n);return r==="Bash"&&re(s)?ne(o,s):{timestamp:o,type:"tool_use",toolName:r,toolInput:s}}return null}var _t,Xt=D(()=>{l();Re();je();Ue();_t={command:"codex",buildArgs(o,e,t){if(e.additionalArgs!==void 0){let n=[...e.additionalArgs];return !n.includes("--json")&&!n.includes("--experimental-json")&&n.push("--json"),e.model&&n.push("--model",e.model),{args:n,stdinMessage:o}}let r=["exec","--json"];return e.model&&r.push("--model",e.model),{args:r,stdinMessage:o}},extractText(o){let e=o.split(`
12
- `).filter(n=>n.trim()),t=[],r=null;for(let n of e)try{let s=JSON.parse(n);if(s.type==="item.completed"&&(s.item?.type==="message"||s.item?.type==="agent_message")&&typeof s.item?.text=="string"){let i=s.item.text;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t.join(`
11
+ `):r||n.trim()},parseResultMeta(n){let e=te(n);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(n,e){let t;try{t=JSON.parse(n);}catch{return []}let r=t.type;if(!r)return [];if(!r.startsWith("tool.execution")&&!r.startsWith("assistant.")&&r!=="user.message")return [];let o=t.data;if(!o)return [];let s=e??new Date().toISOString(),i=o.toolCallId;if(r==="tool.execution_start"){let a=String(o.toolName||""),d=o.arguments,c=oe(d);return (a==="bash"||a==="Bash")&&re(c)?[ne(s,c)]:[{timestamp:s,type:"tool_use",toolName:a,toolInput:c,...i&&{toolUseId:i}}]}if(r==="tool.execution_complete"){let a=o.error;if(a)return [{timestamp:s,type:"tool_result",isError:true,resultPreview:String(a.message||""),...i&&{toolUseId:i}}];let d=o.result,c=String(d?.content||"");return [{timestamp:s,type:"tool_result",resultPreview:c,isError:false,...i&&{toolUseId:i}}]}if(r==="assistant.message"){let a=String(o.content||"");return a?[{timestamp:s,type:"text",content:a}]:[]}return []}};});function zo(n,e){if(e.type==="command_execution"){let r=String(e.command||"");return re(r)?[ne(n,r)]:[{timestamp:n,type:"tool_use",toolName:"Bash",toolInput:r}]}return []}function Vo(n,e){let t=e.type;if(t==="message"||t==="text"){let r=e.content;if(Array.isArray(r))for(let o of r){let s=Ko(n,o);if(s)return s}if(typeof e.text=="string")return {timestamp:n,type:"text",content:e.text}}if(t==="reasoning")return {timestamp:n,type:"text",content:String(e.text||"")};if(t==="command_execution"){let r=String(e.aggregated_output||e.output||""),o=!!e.is_error;return {timestamp:n,type:"tool_result",resultPreview:r,isError:o}}if(t==="tool_use"){let r=String(e.name||e.tool_name||""),o=e.input,s=oe(o);return r==="Bash"&&re(s)?ne(n,s):{timestamp:n,type:"tool_use",toolName:r,toolInput:s}}if(t==="tool_result"){let r=!!e.is_error,o=String(e.output||e.content||"");return {timestamp:n,type:"tool_result",resultPreview:o,isError:r}}return null}function Ko(n,e){let t=e.type;if(t==="text")return {timestamp:n,type:"text",content:String(e.text||"")};if(t==="tool_use"){let r=String(e.name||""),o=e.input,s=oe(o);return r==="Bash"&&re(s)?ne(n,s):{timestamp:n,type:"tool_use",toolName:r,toolInput:s}}return null}var Rt,Yt=D(()=>{l();Re();Ue();Fe();Rt={command:"codex",buildArgs(n,e,t){if(e.additionalArgs!==void 0){let o=[...e.additionalArgs];return !o.includes("--json")&&!o.includes("--experimental-json")&&o.push("--json"),e.model&&o.push("--model",e.model),{args:o,stdinMessage:n}}let r=["exec","--json"];return e.model&&r.push("--model",e.model),{args:r,stdinMessage:n}},extractText(n){let e=n.split(`
12
+ `).filter(o=>o.trim()),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="item.completed"&&(s.item?.type==="message"||s.item?.type==="agent_message")&&typeof s.item?.text=="string"){let i=s.item.text;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t.join(`
13
13
 
14
- `):r||o.trim()},parseResultMeta(o){let e=te(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 qo(s,n);if(r==="item.completed"){let i=Bo(s,n);return i?[i]:[]}return []}};});var At,Gt=D(()=>{l();Re();Ue();At={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=te(o);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(o,e){let t;try{t=JSON.parse(o);}catch{return []}let r=t.type;if(!r)return [];let n=e??new Date().toISOString();if(r==="text"){let i=t.part?.text;return i?[{timestamp:n,type:"text",content:i}]:[]}if(r==="tool_use"){let s=t.part;if(!s)return [];let i=String(s.tool||""),a=String(s.callID||""),d=s.state,c=String(d?.status||""),u=d?.input,g=oe(u),h=[{timestamp:n,type:"tool_use",toolName:i,toolUseId:a,toolInput:g}];if(c==="completed"&&d?.output!==void 0){let p=d.output,f=typeof p=="string"?p:JSON.stringify(p);h.push({timestamp:n,type:"tool_result",toolUseId:a,resultPreview:f,isError:false});}else c==="error"&&h.push({timestamp:n,type:"tool_result",toolUseId:a,resultPreview:String(d?.error||"tool error"),isError:true});return h}return []}};});var Yt,Qt=D(()=>{l();Yt={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 Zt(o,e,t){if(t){let r=we[t];if(r?.parseEvent)return r.parseEvent(e,o)}for(let r of Object.values(we)){let n=r.parseEvent?.(e,o)??[];if(n.length>0)return n}return []}var we,Fe=D(()=>{l();Vt();Kt();Jt();Xt();Gt();Qt();Vt();Kt();Jt();Xt();Gt();Qt();je();we={claude:xt,gemini:kt,copilot:vt,codex:_t,opencode:At,antigravity:Yt};});function Vo(o){let e=o.split(`
16
- `).filter(d=>d.trim()),t=[],r=[],n=[],s=[],i=[],a=null;for(let d of e)try{let c=JSON.parse(d);if(c.type==="assistant"&&Array.isArray(c.message?.content))for(let u of c.message.content)u.type==="text"&&typeof u.text=="string"&&u.text.trim()&&t.push(u.text.trim());if(c.type==="message"&&c.role==="assistant"&&c.delta===!0&&typeof c.content=="string"&&r.push(c.content),c.type==="assistant.message"&&typeof c.data?.content=="string"){let u=c.data.content;u.trim()&&n.push(u.trim());}if(c.type==="item.completed"&&(c.item?.type==="message"||c.item?.type==="agent_message")&&typeof c.item?.text=="string"){let u=c.item.text;u.trim()&&s.push(u.trim());}if(c.type==="text"&&typeof c.part?.text=="string"){let u=c.part.text;u.trim()&&i.push(u.trim());}c.type==="result"&&typeof c.result=="string"&&(a=c.result);}catch{}return t.length>0?t.join(`
14
+ `):r||n.trim()},parseResultMeta(n){let e=te(n);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(n,e){let t;try{t=JSON.parse(n);}catch{return []}let r=t.type;if(!r)return [];if(!r.startsWith("item.")&&!r.startsWith("turn.")&&!r.startsWith("thread."))return [];let o=t.item;if(!o)return [];let s=e??new Date().toISOString();if(r==="item.started")return zo(s,o);if(r==="item.completed"){let i=Vo(s,o);return i?[i]:[]}return []}};});var Pt,Qt=D(()=>{l();Re();Fe();Pt={command:"opencode",buildArgs(n,e,t){let r=e.additionalArgs,o=r!==void 0?[...r]:["run"];return o.includes("--format")||o.push("--format","json"),e.model&&o.push("--model",e.model),o.push(n),{args:o}},extractText(n){let e=n.split(`
15
+ `).filter(o=>o.trim()),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="text"&&typeof s.part?.text=="string"){let i=s.part.text;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t.join(""):r||n.trim()},parseResultMeta(n){let e=te(n);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(n,e){let t;try{t=JSON.parse(n);}catch{return []}let r=t.type;if(!r)return [];let o=e??new Date().toISOString();if(r==="text"){let i=t.part?.text;return i?[{timestamp:o,type:"text",content:i}]:[]}if(r==="tool_use"){let s=t.part;if(!s)return [];let i=String(s.tool||""),a=String(s.callID||""),d=s.state,c=String(d?.status||""),u=d?.input,g=oe(u),h=[{timestamp:o,type:"tool_use",toolName:i,toolUseId:a,toolInput:g}];if(c==="completed"&&d?.output!==void 0){let p=d.output,f=typeof p=="string"?p:JSON.stringify(p);h.push({timestamp:o,type:"tool_result",toolUseId:a,resultPreview:f,isError:false});}else c==="error"&&h.push({timestamp:o,type:"tool_result",toolUseId:a,resultPreview:String(d?.error||"tool error"),isError:true});return h}return []}};});var Zt,er=D(()=>{l();Zt={command:"agy",buildArgs(n,e,t){if(e.additionalArgs!==void 0){let o=[...e.additionalArgs];return o.includes("--print")||o.unshift("--print",n),e.model&&o.push("--model",e.model),o.push("--dangerously-skip-permissions"),{args:o}}let r=["--print",n,"--dangerously-skip-permissions"];return e.model&&r.push("--model",e.model),{args:r}},extractText(n){return n.trim()},parseResultMeta(n){return {usage:null,model:null}},parseEvent(n,e){return []}};});function tr(n,e,t){if(t){let r=we[t];if(r?.parseEvent)return r.parseEvent(e,n)}for(let r of Object.values(we)){let o=r.parseEvent?.(e,n)??[];if(o.length>0)return o}return []}var we,He=D(()=>{l();Jt();Xt();Gt();Yt();Qt();er();Jt();Xt();Gt();Yt();Qt();er();Ue();we={claude:vt,gemini:_t,copilot:At,codex:Rt,opencode:Pt,antigravity:Zt};});function Xo(n){let e=n.split(`
16
+ `).filter(d=>d.trim()),t=[],r=[],o=[],s=[],i=[],a=null;for(let d of e)try{let c=JSON.parse(d);if(c.type==="assistant"&&Array.isArray(c.message?.content))for(let u of c.message.content)u.type==="text"&&typeof u.text=="string"&&u.text.trim()&&t.push(u.text.trim());if(c.type==="message"&&c.role==="assistant"&&c.delta===!0&&typeof c.content=="string"&&r.push(c.content),c.type==="assistant.message"&&typeof c.data?.content=="string"){let u=c.data.content;u.trim()&&o.push(u.trim());}if(c.type==="item.completed"&&(c.item?.type==="message"||c.item?.type==="agent_message")&&typeof c.item?.text=="string"){let u=c.item.text;u.trim()&&s.push(u.trim());}if(c.type==="text"&&typeof c.part?.text=="string"){let u=c.part.text;u.trim()&&i.push(u.trim());}c.type==="result"&&typeof c.result=="string"&&(a=c.result);}catch{}return t.length>0?t.join(`
17
17
 
18
- `):r.length>0?r.join(""):n.length>0?n.join(`
18
+ `):r.length>0?r.join(""):o.length>0?o.join(`
19
19
 
20
20
  `):s.length>0?s.join(`
21
21
 
22
- `):i.length>0?i.join(""):a||o.trim()}function Ko(o){let e=te(o);return e?{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0}:null}function Jo(o,e,t=process.platform){return o==="copilot"&&t==="win32"&&e instanceof S&&e.message.includes('CLI command "copilot" not found')}function Qr(o,e,t,r,n,s,i){return new Promise((a,d)=>{let c=n?.timeoutMs??288e5,u=ze({command:o,allowShellFallback:true}),g=Ve(u,e),h=spawn(g.command,g.argv,{env:{...process.env,...n?.env??{}},cwd:n?.cwd,stdio:["pipe","pipe","pipe"],shell:g.shell??false,windowsHide:g.windowsHide});s!==void 0&&h.stdin.write(s),h.stdin.end(),h.pid!==void 0&&n?.onPid?.(h.pid);let p=false,f=false,x=()=>{try{h.kill("SIGKILL");}catch{}},_=setTimeout(()=>{if(!p){f=true;try{h.kill("SIGTERM");}catch{}setTimeout(x,Yr).unref();}},c);_.unref();let v="",k="",I="",b="";h.stdout.on("data",W=>{let j=W.toString();v+=j,I+=j;let C=I.split(`
23
- `);I=C.pop()??"";for(let q of C)if(q.trim()&&(n?.onOutput?.(q,"stdout"),i?.extractFailure)){let Y=i.extractFailure(q);if(Y){p=true,clearTimeout(_);try{h.kill("SIGTERM");}catch{}setTimeout(x,Yr).unref(),d(Y);return}}}),h.stderr.on("data",W=>{let j=W.toString();k+=j,b+=j;let C=b.split(`
24
- `);b=C.pop()??"";for(let q of C)q.trim()&&n?.onOutput?.(q,"stderr");}),h.on("error",W=>{p=true,clearTimeout(_),W.code==="ENOENT"?d(new S(`CLI command "${o}" not found. Is ${t} installed?`,t)):d(new S(`Spawn error: ${W.message}`,t));}),h.on("close",W=>{if(p)return;p=true,clearTimeout(_),I.trim()&&n?.onOutput?.(I,"stdout"),b.trim()&&n?.onOutput?.(b,"stderr");let j=W??0;if(n?.onExitCode?.(j),f&&W!==0)return d(new Je(`Total runtime exceeded ${c}ms; process killed.`,t));if(j!==0){if(i?.interpretExit){let q=i.interpretExit(j,k);if(q){d(q);return}}d(new S(`Process exited with code ${j}: ${k.slice(0,500)}`,t));return}let C=i?i.extractText(v):Vo(v);a({stdout:v,parsed:C});});})}function pe(o,e){Zr.set(o,e);}function ge(o){let e=o.split("/");if(e.length!==2)throw new S(`Invalid provider format: "${o}". Expected namespace/id (e.g., cli/claude)`,o);let[t,r]=e,n=Zr.get(t);if(n)return n(r,o);if(t==="cli"){let s=we[r];if(!s)throw new S(`Unknown CLI provider id: "${r}". Supported: ${Object.keys(we).join(", ")}`,o);return new er(r,s,o)}throw new S(`Unsupported provider namespace: "${t}". Register a factory with registerProviderFactory('${t}', factory).`,o)}var S,Je,Yr,se,Zr,er,de=D(()=>{l();wt();Re();Fe();S=class extends Error{constructor(t,r){super(t);this.providerStr=r;this.name="ProviderError";}providerStr},Je=class extends S{constructor(e,t){super(e,t),this.name="TotalTimeoutError";}};Yr=2e3;se=class extends Error{constructor(t,r){super(`Client tool call required: ${t.toolName}`);this.toolCall=t;this.continuationState=r;}toolCall;continuationState;name="ClientToolCallRequiredError"},Zr=new Map;er=class{constructor(e,t,r){this.providerId=e;this.adapter=t;this.providerStr=r;}providerId;adapter;providerStr;async execute(e,t){let r=this.composeMessage(e,t),{args:n,stdinMessage:s}=this.adapter.buildArgs(r,t??{},true);t?.onCommand?.(`${this.adapter.command} ${n.join(" ")}`);let{stdout:i,parsed:a}=await this.runProcess(n,t,s);return this.handleResultMeta(i,t),a}async query(e,t){let r=this.composeMessage(e,t),{args:n,stdinMessage:s}=this.adapter.buildArgs(r,t??{},false);t?.onCommand?.(`${this.adapter.command} ${n.join(" ")}`);let{stdout:i,parsed:a}=await this.runProcess(n,t,s);return this.handleResultMeta(i,t),a}composeMessage(e,t){return t?.systemPrompt?`${t.systemPrompt}
22
+ `):i.length>0?i.join(""):a||n.trim()}function Go(n){let e=te(n);return e?{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0}:null}function Yo(n,e,t=process.platform){return n==="copilot"&&t==="win32"&&e instanceof S&&e.message.includes('CLI command "copilot" not found')}function en(n,e,t,r,o,s,i){return new Promise((a,d)=>{let c=o?.timeoutMs??288e5,u=Ve({command:n,allowShellFallback:true}),g=Ke(u,e),h=spawn(g.command,g.argv,{env:{...process.env,...o?.env??{}},cwd:o?.cwd,stdio:["pipe","pipe","pipe"],shell:g.shell??false,windowsHide:g.windowsHide});s!==void 0&&h.stdin.write(s),h.stdin.end(),h.pid!==void 0&&o?.onPid?.(h.pid);let p=false,f=false,x=()=>{try{h.kill("SIGKILL");}catch{}},_=setTimeout(()=>{if(!p){f=true;try{h.kill("SIGTERM");}catch{}setTimeout(x,Zr).unref();}},c);_.unref();let v="",k="",I="",b="";h.stdout.on("data",W=>{let j=W.toString();v+=j,I+=j;let C=I.split(`
23
+ `);I=C.pop()??"";for(let q of C)if(q.trim()&&(o?.onOutput?.(q,"stdout"),i?.extractFailure)){let Y=i.extractFailure(q);if(Y){p=true,clearTimeout(_);try{h.kill("SIGTERM");}catch{}setTimeout(x,Zr).unref(),d(Y);return}}}),h.stderr.on("data",W=>{let j=W.toString();k+=j,b+=j;let C=b.split(`
24
+ `);b=C.pop()??"";for(let q of C)q.trim()&&o?.onOutput?.(q,"stderr");}),h.on("error",W=>{p=true,clearTimeout(_),W.code==="ENOENT"?d(new S(`CLI command "${n}" not found. Is ${t} installed?`,t)):d(new S(`Spawn error: ${W.message}`,t));}),h.on("close",W=>{if(p)return;p=true,clearTimeout(_),I.trim()&&o?.onOutput?.(I,"stdout"),b.trim()&&o?.onOutput?.(b,"stderr");let j=W??0;if(o?.onExitCode?.(j),f&&W!==0)return d(new Xe(`Total runtime exceeded ${c}ms; process killed.`,t));if(j!==0){if(i?.interpretExit){let q=i.interpretExit(j,k);if(q){d(q);return}}d(new S(`Process exited with code ${j}: ${k.slice(0,500)}`,t));return}let C=i?i.extractText(v):Xo(v);a({stdout:v,parsed:C});});})}function pe(n,e){tn.set(n,e);}function ge(n){let e=n.split("/");if(e.length!==2)throw new S(`Invalid provider format: "${n}". Expected namespace/id (e.g., cli/claude)`,n);let[t,r]=e,o=tn.get(t);if(o)return o(r,n);if(t==="cli"){let s=we[r];if(!s)throw new S(`Unknown CLI provider id: "${r}". Supported: ${Object.keys(we).join(", ")}`,n);return new rr(r,s,n)}throw new S(`Unsupported provider namespace: "${t}". Register a factory with registerProviderFactory('${t}', factory).`,n)}var S,Xe,Zr,se,tn,rr,de=D(()=>{l();kt();Re();He();S=class extends Error{constructor(t,r){super(t);this.providerStr=r;this.name="ProviderError";}providerStr},Xe=class extends S{constructor(e,t){super(e,t),this.name="TotalTimeoutError";}};Zr=2e3;se=class extends Error{constructor(t,r){super(`Client tool call required: ${t.toolName}`);this.toolCall=t;this.continuationState=r;}toolCall;continuationState;name="ClientToolCallRequiredError"},tn=new Map;rr=class{constructor(e,t,r){this.providerId=e;this.adapter=t;this.providerStr=r;}providerId;adapter;providerStr;async execute(e,t){let r=this.composeMessage(e,t),{args:o,stdinMessage:s}=this.adapter.buildArgs(r,t??{},true);t?.onCommand?.(`${this.adapter.command} ${o.join(" ")}`);let{stdout:i,parsed:a}=await this.runProcess(o,t,s);return this.handleResultMeta(i,t),a}async query(e,t){let r=this.composeMessage(e,t),{args:o,stdinMessage:s}=this.adapter.buildArgs(r,t??{},false);t?.onCommand?.(`${this.adapter.command} ${o.join(" ")}`);let{stdout:i,parsed:a}=await this.runProcess(o,t,s);return this.handleResultMeta(i,t),a}composeMessage(e,t){return t?.systemPrompt?`${t.systemPrompt}
25
25
 
26
26
  ---
27
27
 
28
- ${e}`:e}async runProcess(e,t,r){try{return await Qr(this.adapter.command,e,this.providerStr,this.providerId,t,r,this.adapter)}catch(n){if(Jo(this.providerId,n)){let s=e[0]==="copilot"?e:["copilot",...e];return Qr("gh",s,this.providerStr,this.providerId,t,r,this.adapter)}throw n}}handleResultMeta(e,t){if(!this.adapter.parseResultMeta){let i=Ko(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 vn,_n,rt,fr=D(()=>{l();de();vn=10,_n=50,rt=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??vn,_n);try{let c=0,u=await n({model:a,system:r?.systemPrompt??void 0,prompt:e,tools:i,maxSteps:d,...this.config.temperature!==void 0&&{temperature:this.config.temperature},...this.config.maxTokens!==void 0&&{maxTokens:this.config.maxTokens},onStepFinish:h=>{if(c++,!!r?.onOutput){if(h.toolCalls&&h.toolCalls.length>0)for(let p of h.toolCalls)r.onOutput(JSON.stringify({type:"assistant",message:{content:[{type:"tool_use",id:p.toolCallId,name:p.toolName,input:p.args}]}}),"stdout");if(h.toolResults&&h.toolResults.length>0)for(let p of h.toolResults){let f=typeof p.result=="string"?p.result:JSON.stringify(p.result);r.onOutput(JSON.stringify({type:"user",message:{content:[{type:"tool_result",tool_use_id:p.toolCallId,output:f,is_error:!1}]}}),"stdout");}}}}),g=new Set((r?.tools??[]).filter(h=>!h.execute).map(h=>h.name));if(u.finishReason==="tool-calls"&&Array.isArray(u.toolCalls)&&u.toolCalls.length>0){let h=u.toolCalls.filter(p=>g.has(p.toolName));if(h.length>0){let p=h[0];throw new se({toolCallId:p.toolCallId,toolName:p.toolName,args:p.args},{userMessage:e,responseMessages:u.response?.messages??[],toolDefinitions:r?.tools??[],maxSteps:d,systemPrompt:r?.systemPrompt,modelOverride:r?.model})}}if(r?.onUsage&&u.usage){let h={inputTokens:u.usage.promptTokens??0,outputTokens:u.usage.completionTokens??0,cachedInputTokens:0,costUsd:0};r.onUsage(h);}return r?.onModel&&r.onModel(r.model??this.config.model),u.text??""}catch(c){throw c instanceof se?c:c.status===401?new S(`Authentication failed for ${this.config.provider}. Check your API key.`,this.config.provider):c.status===429?new S(`Rate limit exceeded for ${this.config.provider}.`,this.config.provider):new S(`Provider error: ${c.message}`,this.config.provider)}}async continueWithToolResults(e,t,r){let{generateText: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??vn,_n),c=[{role:"user",content:e.userMessage},...e.responseMessages,{role:"tool",content:t.map(u=>({type:"tool-result",toolCallId:u.toolCallId,toolName:u.toolName,result:typeof u.result=="string"?u.result:JSON.stringify(u.result)}))}];try{let u=await n({model:a,system:e.systemPrompt??void 0,messages:c,tools:i,maxSteps:d,...this.config.temperature!==void 0&&{temperature:this.config.temperature},...this.config.maxTokens!==void 0&&{maxTokens:this.config.maxTokens}}),g=new Set(e.toolDefinitions.filter(h=>!h.execute).map(h=>h.name));if(u.finishReason==="tool-calls"&&Array.isArray(u.toolCalls)&&u.toolCalls.length>0){let h=u.toolCalls.filter(p=>g.has(p.toolName));if(h.length>0){let p=h[0];throw new se({toolCallId:p.toolCallId,toolName:p.toolName,args:p.args},{userMessage:e.userMessage,responseMessages:[...e.responseMessages,{role:"tool",content:t.map(f=>({type:"tool-result",toolCallId:f.toolCallId,toolName:f.toolName,result:typeof f.result=="string"?f.result:JSON.stringify(f.result)}))},...u.response?.messages??[]],toolDefinitions:e.toolDefinitions,maxSteps:e.maxSteps,systemPrompt:e.systemPrompt,modelOverride:e.modelOverride})}}return r?.onUsage&&u.usage&&r.onUsage({inputTokens:u.usage.promptTokens??0,outputTokens:u.usage.completionTokens??0,cachedInputTokens:0,costUsd:0}),r?.onModel&&r.onModel(e.modelOverride??this.config.model),u.text??""}catch(u){throw u instanceof se?u:new S(`Provider error: ${u.message}`,this.config.provider)}}convertTools(e,t){let{z:r}=V("zod"),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}=V("@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}=V("@ai-sdk/openai");return i({apiKey:r||process.env.OPENAI_API_KEY,...n&&{baseURL:n}})(s)}case "api/anthropic":{let{createAnthropic:i}=V("@ai-sdk/anthropic");return i({apiKey:r||process.env.ANTHROPIC_API_KEY,...n&&{baseURL:n}})(s)}case "api/google":{let{createGoogleGenerativeAI:i}=V("@ai-sdk/google");return i({apiKey:r||process.env.GOOGLE_API_KEY})(s)}default:throw new S(`Unsupported API provider: ${t}`,t)}}};});var Rn={};ut(Rn,{registerApiProviders:()=>An});function An(o){pe("api",(e,t)=>{let r=o?.apiKeys?.[e];return new rt({provider:t,model:"",apiKey:r,maxSteps:o?.defaults?.maxSteps,temperature:o?.defaults?.temperature})});}var yr=D(()=>{l();de();fr();});function hr(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 ie(o,e){try{let t=JSON.parse(o);if(t!=null&&typeof t=="object"&&typeof t.type=="string"&&Ls.has(t.type)){let r=e??new Date().toISOString();return [{...t,timestamp:t.timestamp||r}]}}catch{}return []}var Ls,ke=D(()=>{l();Ls=new Set(["text","tool_use","tool_result","error","agent_call"]);});var fe,wr=D(()=>{l();fe=class extends Error{constructor(t,r,n){super(t);this.code=r;this.data=n;}code;data;name="AcpProtocolError"};});var Fs,Hs,Pn,Cn,qs,be,Pt=D(()=>{l();wr();de();Fs=-32e3,Hs=2e3,Pn=3e4,Cn=1e4,qs=8*36e5,be=class{constructor(e){this.options=e;}options;proc=null;sdkConnection=null;disposed=false;stderrBuffer="";collectedStderr="";pendingUpdateCallback=null;authMethods=[];_initResponse=null;get initResponse(){return this._initResponse}async connect(e){if(this.disposed)throw new S("AcpConnection has been disposed","acp");let t=this.options.spawn,r=process.platform==="win32"&&(t.shellOnWindows??true),n=spawn(t.command,t.args,{stdio:["pipe","pipe","pipe"],env:{...process.env,...this.options.env??{}},cwd:this.options.cwd,shell:r,windowsHide:true,detached:process.platform!=="win32"});n.pid!==void 0&&this.options.onPid?.(n.pid),n.stderr.on("data",p=>{let f=p.toString();this.collectedStderr+=f,this.stderrBuffer+=f;let x=this.stderrBuffer.split(`
29
- `);this.stderrBuffer=x.pop()??"";for(let R of x)R.trim()&&this.options.onStderr?.(R);}),this.proc=n;let s=new WritableStream({write:p=>new Promise((f,x)=>{n.stdin.write(p,R=>{R?x(R):f();});}),close:()=>{n.stdin.end();}}),i=new ReadableStream({start:p=>{n.stdout.on("data",f=>{p.enqueue(new Uint8Array(f));}),n.stdout.on("end",()=>{p.close();}),n.stdout.on("error",f=>{p.error(f);});}}),a=ndJsonStream(s,i),d=this,c=new ClientSideConnection(p=>({requestPermission:async f=>{if(d.options.configOptions?.allow_all!==void 0){let x=f.options;if(Array.isArray(x)&&x.length>0)return {outcome:{outcome:"selected",optionId:(x.find(_=>_.kind==="allow_once")??x.find(_=>_.kind?.startsWith("allow_"))??x[0]).optionId}}}return {outcome:{outcome:"cancelled"}}},sessionUpdate:async f=>{d.pendingUpdateCallback?.(f);}}),a);this.sdkConnection=c;let u=new Promise((p,f)=>{n.on("error",x=>{if(x.code==="ENOENT"){let _=t.command==="npx"&&t.args.length>0?`@agentclientprotocol/${t.args[0]}`:t.command;f(new S(`ACP command "${t.command}" not found. Is the ACP adapter installed? Try: npm install -g ${_}`,"acp"));}else f(new S(`ACP spawn error: ${x.message}`,"acp"));});}),g=this.doInitialize(c,e),h=new Promise((p,f)=>{setTimeout(()=>{f(new fe(`ACP connect timeout after ${Pn}ms. The ACP adapter may not be installed or may require interactive setup.`));},Pn).unref();});await Promise.race([g,h,u]);}async doInitialize(e,t){let r=await e.initialize({protocolVersion:1,clientCapabilities:{auth:{}},clientInfo:{name:t?.name??"crewx-sdk",version:t?.version??"0.8.4"}});this._initResponse=r,this.authMethods=r.authMethods??[];}async newSession(e){if(!this.sdkConnection)throw new S("AcpConnection not connected. Call connect() first.","acp");try{return await this.newSessionWithTimeout(e)}catch(t){if(!this.isAuthError(t))throw t;return await this.tryAuthenticate(),this.newSessionWithTimeout(e)}}async newSessionWithTimeout(e){return (await this.newSessionRawTimeout(e)).sessionId}async newSessionRaw(e){if(!this.sdkConnection)throw new S("AcpConnection not connected. Call connect() first.","acp");try{return await this.newSessionRawTimeout(e)}catch(t){if(!this.isAuthError(t))throw t;return await this.tryAuthenticate(),this.newSessionRawTimeout(e)}}async newSessionRawTimeout(e){let t=this.sdkConnection.newSession(e),r=new Promise((n,s)=>{setTimeout(()=>{s(new fe(`ACP session/new timeout after ${Cn}ms`));},Cn).unref();});return Promise.race([t,r])}isAuthError(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code===Fs}async tryAuthenticate(){if(!this.sdkConnection)throw new S("AcpConnection not connected.","acp");let e=this.authMethods.find(r=>r.type==="env_var"&&this.hasEnvVarsFor(r));if(e){await this.sdkConnection.authenticate({methodId:e.id});return}let t=this.authMethods.map(r=>`${r.id} (${r.type??"agent"})`).join(", ");if(this.authMethods.length>0){let r=this.authMethods.filter(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 fe(`ACP authentication required. Missing environment variables: ${n.join(", ")}. Set them in your shell or crewx.yaml env block.`)}throw new fe(`ACP authentication required but no supported method found. Available methods: ${t}. CrewX currently supports env_var authentication only.`)}throw new fe("ACP agent requires authentication but advertised no auth methods.")}hasEnvVarsFor(e){return !e.vars||e.vars.length===0?true:e.vars.filter(t=>!t.optional).every(t=>!!process.env[t.name])}async setModel(e,t){if(!this.sdkConnection)throw new S("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.unstable_setSessionModel({sessionId:e,modelId:t});}async setMode(e,t){if(!this.sdkConnection)throw new S("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.setSessionMode({sessionId:e,modeId:t});}async setConfigOption(e,t,r){if(!this.sdkConnection)throw new S("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.setSessionConfigOption({sessionId:e,configId:t,value:r});}async prompt(e,t,r,n){if(!this.sdkConnection||!this.proc)throw new S("AcpConnection not connected. Call connect() first.","acp");this.pendingUpdateCallback=r??null;let s=this.sdkConnection,i=this.proc,a=n??qs,d=false,c=s.prompt({sessionId:e,prompt:t}).finally(()=>{d=true;}),u=new Promise((h,p)=>{setTimeout(()=>{s.cancel({sessionId:e}).catch(()=>{}),p(new Je(`ACP prompt timeout after ${a}ms`,"acp"));},a).unref();}),g=new Promise((h,p)=>{let f=(v,k,I)=>{if(d)return;let b=k!=null?`signal=${k}`:`code=${String(v)}`;p(new S(`ACP process terminated unexpectedly (${b}) [${I}]: ${this.collectedStderr.slice(-500)}`,"acp"));},x=(v,k)=>f(v,k,"exit"),R=(v,k)=>f(v,k,"close");i.once("exit",x),i.once("close",R);let _=()=>{i.off("exit",x),i.off("close",R);};c.then(_,_);});try{return await Promise.race([c,u,g])}finally{this.pendingUpdateCallback=null;}}async dispose(){if(this.disposed)return;this.disposed=true,this.pendingUpdateCallback=null,this.sdkConnection=null;let e=this.proc;if(!e)return;this.proc=null,this.stderrBuffer.trim()&&(this.options.onStderr?.(this.stderrBuffer),this.stderrBuffer="");let t=e.pid,r=n=>{if(t!==void 0&&process.platform!=="win32")try{process.kill(-t,n);}catch{}else try{e.kill(n);}catch{}};await new Promise(n=>{let s=()=>{clearTimeout(i),n();};e.once("close",s),e.once("error",s);try{r("SIGTERM");}catch{s();return}let i=setTimeout(()=>{r("SIGKILL");},Hs);});}get isConnected(){return !this.disposed&&this.sdkConnection!==null&&this.proc!==null}};});function Tn(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 Bs,nt,xr=D(()=>{l();ke();Pt();Bs={read:"Read",edit:"Edit",delete:"Delete",move:"Move",search:"Search",execute:"Bash",think:"Think",fetch:"WebFetch",switch_mode:"SwitchMode"};nt=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=this.adapter.buildSpawnEnv?.(t?.model??""),i=s?{...t?.env,...s}:t?.env,a=new be({spawn:this.adapter.spawn,env:i,cwd:t?.cwd,timeoutMs:t?.timeoutMs,onPid:t?.onPid,onStderr:d=>t?.onOutput?.(d,"stderr"),configOptions:t?.configOptions});try{await a.connect(this.adapter.clientInfo);let d=this.adapter.buildSessionParams({cwd:t?.cwd,env:t?.env,model:t?.model,systemPrompt:t?.systemPrompt}),c=await a.newSession(d);await this.applySessionOptions(a,c,t);let u=this.composePrompt(e,t),g=[],h=await a.prompt(c,u,p=>this.handleUpdate(p,t,g),t?.timeoutMs);return this.handleUsage(h,t),g.join("")}finally{await a.dispose().catch(()=>{});}}async applySessionOptions(e,t,r){if(r?.model&&r.model!=="default"&&!this.adapter.buildSpawnEnv){let n=this.adapter.buildEffortAction?.(r.effort??"",r.model);try{n?.type==="set_model"?await e.setModel(t,n.modelId):await e.setModel(t,r.model);}catch(s){console.warn(`[acp] setModel(${r.model}) failed: ${s instanceof Error?s.message:String(s)}`);}}if(r?.mode){let n=this.adapter.resolveMode?.(r.mode)??r.mode;if(n)try{await e.setMode(t,n);}catch(s){console.warn(`[acp] setMode(${n}) failed: ${s instanceof Error?s.message:String(s)}`);}}if(r?.effort){let n=this.adapter.buildEffortAction?.(r.effort,r.model);if(n&&n.type==="set_config_option")try{await e.setConfigOption(t,n.configId,n.value);}catch(s){console.warn(`[acp] setConfigOption(${n.configId}) effort failed: ${s instanceof Error?s.message:String(s)}`);}}if(r?.configOptions)for(let[n,s]of Object.entries(r.configOptions))try{await e.setConfigOption(t,n,s);}catch(i){console.warn(`[acp] setConfigOption(${n}) failed, retrying: ${i instanceof Error?i.message:String(i)}`);try{await new Promise(a=>setTimeout(a,500)),await e.setConfigOption(t,n,s);}catch(a){console.warn(`[acp] setConfigOption(${n}) retry failed: ${a instanceof Error?a.message:String(a)}`);}}}composePrompt(e,t){let r=[];return t?.systemPrompt?.trim()&&(r.push(t.systemPrompt),r.push("---")),t?.context&&(r.push(t.context),r.push("---")),r.push(e),[{type:"text",text:r.join(`
28
+ ${e}`:e}async runProcess(e,t,r){try{return await en(this.adapter.command,e,this.providerStr,this.providerId,t,r,this.adapter)}catch(o){if(Yo(this.providerId,o)){let s=e[0]==="copilot"?e:["copilot",...e];return en("gh",s,this.providerStr,this.providerId,t,r,this.adapter)}throw o}}handleResultMeta(e,t){if(!this.adapter.parseResultMeta){let i=Go(e);i&&t?.onUsage&&t.onUsage(i);return}let{usage:r,model:o}=this.adapter.parseResultMeta(e);r&&t?.onUsage&&t.onUsage(r);let s=o??(this.providerId==="opencode"?t?.model??null:null);s&&t?.onModel&&t.onModel(s);}};});var Rn,Pn,ot,hr=D(()=>{l();de();Rn=10,Pn=50,ot=class{config;constructor(e){this.config=e;}async query(e,t){return this._run(e,"query",t)}async execute(e,t){return this._run(e,"execute",t)}async _run(e,t,r){let{generateText:o,tool:s}=await import('ai'),i=this.convertTools(r?.tools??[],s),a=this.createModel(r?.model),d=Math.min(r?.maxSteps??this.config.maxSteps??Rn,Pn);try{let c=0,u=await o({model:a,system:r?.systemPrompt??void 0,prompt:e,tools:i,maxSteps:d,...this.config.temperature!==void 0&&{temperature:this.config.temperature},...this.config.maxTokens!==void 0&&{maxTokens:this.config.maxTokens},onStepFinish:h=>{if(c++,!!r?.onOutput){if(h.toolCalls&&h.toolCalls.length>0)for(let p of h.toolCalls)r.onOutput(JSON.stringify({type:"assistant",message:{content:[{type:"tool_use",id:p.toolCallId,name:p.toolName,input:p.args}]}}),"stdout");if(h.toolResults&&h.toolResults.length>0)for(let p of h.toolResults){let f=typeof p.result=="string"?p.result:JSON.stringify(p.result);r.onOutput(JSON.stringify({type:"user",message:{content:[{type:"tool_result",tool_use_id:p.toolCallId,output:f,is_error:!1}]}}),"stdout");}}}}),g=new Set((r?.tools??[]).filter(h=>!h.execute).map(h=>h.name));if(u.finishReason==="tool-calls"&&Array.isArray(u.toolCalls)&&u.toolCalls.length>0){let h=u.toolCalls.filter(p=>g.has(p.toolName));if(h.length>0){let p=h[0];throw new se({toolCallId:p.toolCallId,toolName:p.toolName,args:p.args},{userMessage:e,responseMessages:u.response?.messages??[],toolDefinitions:r?.tools??[],maxSteps:d,systemPrompt:r?.systemPrompt,modelOverride:r?.model})}}if(r?.onUsage&&u.usage){let h={inputTokens:u.usage.promptTokens??0,outputTokens:u.usage.completionTokens??0,cachedInputTokens:0,costUsd:0};r.onUsage(h);}return r?.onModel&&r.onModel(r.model??this.config.model),u.text??""}catch(c){throw c instanceof se?c:c.status===401?new S(`Authentication failed for ${this.config.provider}. Check your API key.`,this.config.provider):c.status===429?new S(`Rate limit exceeded for ${this.config.provider}.`,this.config.provider):new S(`Provider error: ${c.message}`,this.config.provider)}}async continueWithToolResults(e,t,r){let{generateText:o,tool:s}=await import('ai'),i=this.convertTools(e.toolDefinitions,s),a=this.createModel(e.modelOverride),d=Math.min(e.maxSteps??this.config.maxSteps??Rn,Pn),c=[{role:"user",content:e.userMessage},...e.responseMessages,{role:"tool",content:t.map(u=>({type:"tool-result",toolCallId:u.toolCallId,toolName:u.toolName,result:typeof u.result=="string"?u.result:JSON.stringify(u.result)}))}];try{let u=await o({model:a,system:e.systemPrompt??void 0,messages:c,tools:i,maxSteps:d,...this.config.temperature!==void 0&&{temperature:this.config.temperature},...this.config.maxTokens!==void 0&&{maxTokens:this.config.maxTokens}}),g=new Set(e.toolDefinitions.filter(h=>!h.execute).map(h=>h.name));if(u.finishReason==="tool-calls"&&Array.isArray(u.toolCalls)&&u.toolCalls.length>0){let h=u.toolCalls.filter(p=>g.has(p.toolName));if(h.length>0){let p=h[0];throw new se({toolCallId:p.toolCallId,toolName:p.toolName,args:p.args},{userMessage:e.userMessage,responseMessages:[...e.responseMessages,{role:"tool",content:t.map(f=>({type:"tool-result",toolCallId:f.toolCallId,toolName:f.toolName,result:typeof f.result=="string"?f.result:JSON.stringify(f.result)}))},...u.response?.messages??[]],toolDefinitions:e.toolDefinitions,maxSteps:e.maxSteps,systemPrompt:e.systemPrompt,modelOverride:e.modelOverride})}}return r?.onUsage&&u.usage&&r.onUsage({inputTokens:u.usage.promptTokens??0,outputTokens:u.usage.completionTokens??0,cachedInputTokens:0,costUsd:0}),r?.onModel&&r.onModel(e.modelOverride??this.config.model),u.text??""}catch(u){throw u instanceof se?u:new S(`Provider error: ${u.message}`,this.config.provider)}}convertTools(e,t){let{z:r}=V("zod"),o={};for(let s of e){let i=this.jsonSchemaToZod(s.parameters??{},r);s.execute?o[s.name]=t({description:s.description,parameters:i,execute:async a=>s.execute(a)}):o[s.name]=t({description:s.description,parameters:i});}return o}jsonSchemaToZod(e,t){if(!e||!e.properties)return t.object({});let r={},o=e.properties,s=e.required??[];for(let[i,a]of Object.entries(o)){let d;switch(a.type){case "string":d=t.string();break;case "number":d=t.number();break;case "integer":d=t.number().int();break;case "boolean":d=t.boolean();break;case "array":d=t.array(t.any());break;default:d=t.any();}a.description&&(d=d.describe(a.description)),s.includes(i)||(d=d.optional()),r[i]=d;}return t.object(r)}createModel(e){let{provider:t,apiKey:r,baseURL:o}=this.config,s=e||this.config.model;switch(t){case "api/openrouter":{let{createOpenAI:i}=V("@ai-sdk/openai");return i({apiKey:r||process.env.OPENROUTER_API_KEY,baseURL:o||"https://openrouter.ai/api/v1"})(s)}case "api/openai":{let{createOpenAI:i}=V("@ai-sdk/openai");return i({apiKey:r||process.env.OPENAI_API_KEY,...o&&{baseURL:o}})(s)}case "api/anthropic":{let{createAnthropic:i}=V("@ai-sdk/anthropic");return i({apiKey:r||process.env.ANTHROPIC_API_KEY,...o&&{baseURL:o}})(s)}case "api/google":{let{createGoogleGenerativeAI:i}=V("@ai-sdk/google");return i({apiKey:r||process.env.GOOGLE_API_KEY})(s)}default:throw new S(`Unsupported API provider: ${t}`,t)}}};});var Tn={};gt(Tn,{registerApiProviders:()=>Cn});function Cn(n){pe("api",(e,t)=>{let r=n?.apiKeys?.[e];return new ot({provider:t,model:"",apiKey:r,maxSteps:n?.defaults?.maxSteps,temperature:n?.defaults?.temperature})});}var wr=D(()=>{l();de();hr();});function xr(n){let e=n.update;if(e.sessionUpdate==="agent_message_chunk"){let t=e.content;if(t.type==="text"&&typeof t.text=="string")return t.text}return null}function ie(n,e){try{let t=JSON.parse(n);if(t!=null&&typeof t=="object"&&typeof t.type=="string"&&Fs.has(t.type)){let r=e??new Date().toISOString();return [{...t,timestamp:t.timestamp||r}]}}catch{}return []}var Fs,ke=D(()=>{l();Fs=new Set(["text","tool_use","tool_result","error","agent_call"]);});var fe,kr=D(()=>{l();fe=class extends Error{constructor(t,r,o){super(t);this.code=r;this.data=o;}code;data;name="AcpProtocolError"};});var Ws,zs,bn,En,Vs,Ee,Tt=D(()=>{l();kr();de();Ws=-32e3,zs=2e3,bn=3e4,En=1e4,Vs=8*36e5,Ee=class{constructor(e){this.options=e;}options;proc=null;sdkConnection=null;disposed=false;stderrBuffer="";collectedStderr="";pendingUpdateCallback=null;authMethods=[];_initResponse=null;get initResponse(){return this._initResponse}async connect(e){if(this.disposed)throw new S("AcpConnection has been disposed","acp");let t=this.options.spawn,r=process.platform==="win32"&&(t.shellOnWindows??true),o=spawn(t.command,t.args,{stdio:["pipe","pipe","pipe"],env:{...process.env,...this.options.env??{}},cwd:this.options.cwd,shell:r,windowsHide:true,detached:process.platform!=="win32"});o.pid!==void 0&&this.options.onPid?.(o.pid),o.stderr.on("data",p=>{let f=p.toString();this.collectedStderr+=f,this.stderrBuffer+=f;let x=this.stderrBuffer.split(`
29
+ `);this.stderrBuffer=x.pop()??"";for(let R of x)R.trim()&&this.options.onStderr?.(R);}),this.proc=o;let s=new WritableStream({write:p=>new Promise((f,x)=>{o.stdin.write(p,R=>{R?x(R):f();});}),close:()=>{o.stdin.end();}}),i=new ReadableStream({start:p=>{o.stdout.on("data",f=>{p.enqueue(new Uint8Array(f));}),o.stdout.on("end",()=>{p.close();}),o.stdout.on("error",f=>{p.error(f);});}}),a=ndJsonStream(s,i),d=this,c=new ClientSideConnection(p=>({requestPermission:async f=>{if(d.options.configOptions?.allow_all!==void 0){let x=f.options;if(Array.isArray(x)&&x.length>0)return {outcome:{outcome:"selected",optionId:(x.find(_=>_.kind==="allow_once")??x.find(_=>_.kind?.startsWith("allow_"))??x[0]).optionId}}}return {outcome:{outcome:"cancelled"}}},sessionUpdate:async f=>{d.pendingUpdateCallback?.(f);}}),a);this.sdkConnection=c;let u=new Promise((p,f)=>{o.on("error",x=>{if(x.code==="ENOENT"){let _=t.command==="npx"&&t.args.length>0?`@agentclientprotocol/${t.args[0]}`:t.command;f(new S(`ACP command "${t.command}" not found. Is the ACP adapter installed? Try: npm install -g ${_}`,"acp"));}else f(new S(`ACP spawn error: ${x.message}`,"acp"));});}),g=this.doInitialize(c,e),h=new Promise((p,f)=>{setTimeout(()=>{f(new fe(`ACP connect timeout after ${bn}ms. The ACP adapter may not be installed or may require interactive setup.`));},bn).unref();});await Promise.race([g,h,u]);}async doInitialize(e,t){let r=await e.initialize({protocolVersion:1,clientCapabilities:{auth:{}},clientInfo:{name:t?.name??"crewx-sdk",version:t?.version??"0.8.4"}});this._initResponse=r,this.authMethods=r.authMethods??[];}async newSession(e){if(!this.sdkConnection)throw new S("AcpConnection not connected. Call connect() first.","acp");try{return await this.newSessionWithTimeout(e)}catch(t){if(!this.isAuthError(t))throw t;return await this.tryAuthenticate(),this.newSessionWithTimeout(e)}}async newSessionWithTimeout(e){return (await this.newSessionRawTimeout(e)).sessionId}async newSessionRaw(e){if(!this.sdkConnection)throw new S("AcpConnection not connected. Call connect() first.","acp");try{return await this.newSessionRawTimeout(e)}catch(t){if(!this.isAuthError(t))throw t;return await this.tryAuthenticate(),this.newSessionRawTimeout(e)}}async newSessionRawTimeout(e){let t=this.sdkConnection.newSession(e),r=new Promise((o,s)=>{setTimeout(()=>{s(new fe(`ACP session/new timeout after ${En}ms`));},En).unref();});return Promise.race([t,r])}isAuthError(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code===Ws}async tryAuthenticate(){if(!this.sdkConnection)throw new S("AcpConnection not connected.","acp");let e=this.authMethods.find(r=>r.type==="env_var"&&this.hasEnvVarsFor(r));if(e){await this.sdkConnection.authenticate({methodId:e.id});return}let t=this.authMethods.map(r=>`${r.id} (${r.type??"agent"})`).join(", ");if(this.authMethods.length>0){let r=this.authMethods.filter(o=>o.type==="env_var");if(r.length>0){let o=r.flatMap(s=>(s.vars??[]).filter(i=>!i.optional&&!process.env[i.name]).map(i=>i.name));throw new fe(`ACP authentication required. Missing environment variables: ${o.join(", ")}. Set them in your shell or crewx.yaml env block.`)}throw new fe(`ACP authentication required but no supported method found. Available methods: ${t}. CrewX currently supports env_var authentication only.`)}throw new fe("ACP agent requires authentication but advertised no auth methods.")}hasEnvVarsFor(e){return !e.vars||e.vars.length===0?true:e.vars.filter(t=>!t.optional).every(t=>!!process.env[t.name])}async setModel(e,t){if(!this.sdkConnection)throw new S("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.unstable_setSessionModel({sessionId:e,modelId:t});}async setMode(e,t){if(!this.sdkConnection)throw new S("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.setSessionMode({sessionId:e,modeId:t});}async setConfigOption(e,t,r){if(!this.sdkConnection)throw new S("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.setSessionConfigOption({sessionId:e,configId:t,value:r});}async prompt(e,t,r,o){if(!this.sdkConnection||!this.proc)throw new S("AcpConnection not connected. Call connect() first.","acp");this.pendingUpdateCallback=r??null;let s=this.sdkConnection,i=this.proc,a=o??Vs,d=false,c=s.prompt({sessionId:e,prompt:t}).finally(()=>{d=true;}),u=new Promise((h,p)=>{setTimeout(()=>{s.cancel({sessionId:e}).catch(()=>{}),p(new Xe(`ACP prompt timeout after ${a}ms`,"acp"));},a).unref();}),g=new Promise((h,p)=>{let f=(v,k,I)=>{if(d)return;let b=k!=null?`signal=${k}`:`code=${String(v)}`;p(new S(`ACP process terminated unexpectedly (${b}) [${I}]: ${this.collectedStderr.slice(-500)}`,"acp"));},x=(v,k)=>f(v,k,"exit"),R=(v,k)=>f(v,k,"close");i.once("exit",x),i.once("close",R);let _=()=>{i.off("exit",x),i.off("close",R);};c.then(_,_);});try{return await Promise.race([c,u,g])}finally{this.pendingUpdateCallback=null;}}async dispose(){if(this.disposed)return;this.disposed=true,this.pendingUpdateCallback=null,this.sdkConnection=null;let e=this.proc;if(!e)return;this.proc=null,this.stderrBuffer.trim()&&(this.options.onStderr?.(this.stderrBuffer),this.stderrBuffer="");let t=e.pid,r=o=>{if(t!==void 0&&process.platform!=="win32")try{process.kill(-t,o);}catch{}else try{e.kill(o);}catch{}};await new Promise(o=>{let s=()=>{clearTimeout(i),o();};e.once("close",s),e.once("error",s);try{r("SIGTERM");}catch{s();return}let i=setTimeout(()=>{r("SIGKILL");},zs);});}get isConnected(){return !this.disposed&&this.sdkConnection!==null&&this.proc!==null}};});function Sn(n,e){if(n!=null&&typeof n=="object"){let t=n;if(typeof t.command=="string")return t.command;if(typeof t.file_path=="string")return t.file_path;if(typeof t.filePath=="string")return t.filePath;if(typeof t.path=="string")return t.path;if(typeof t.query=="string")return t.query;if(typeof t.pattern=="string")return t.pattern;if(typeof t.url=="string")return t.url;if(Object.keys(t).length>0)return JSON.stringify(t)}if(e&&e.length>0)return e.map(t=>t.path).join(", ")}var Ks,st,vr=D(()=>{l();ke();Tt();Ks={read:"Read",edit:"Edit",delete:"Delete",move:"Move",search:"Search",execute:"Bash",think:"Think",fetch:"WebFetch",switch_mode:"SwitchMode"};st=class{constructor(e,t,r){this.adapter=t;}adapter;async query(e,t){return this.runPrompt(e,t)}async execute(e,t){return this.runPrompt(e,t)}async dispose(){}async runPrompt(e,t){let{command:r,args:o}=this.adapter.spawn;t?.onCommand?.(`${r} ${o.join(" ")}`);let s=this.adapter.buildSpawnEnv?.(t?.model??""),i=s?{...t?.env,...s}:t?.env,a=new Ee({spawn:this.adapter.spawn,env:i,cwd:t?.cwd,timeoutMs:t?.timeoutMs,onPid:t?.onPid,onStderr:d=>t?.onOutput?.(d,"stderr"),configOptions:t?.configOptions});try{await a.connect(this.adapter.clientInfo);let d=this.adapter.buildSessionParams({cwd:t?.cwd,env:t?.env,model:t?.model,systemPrompt:t?.systemPrompt}),c=await a.newSession(d);await this.applySessionOptions(a,c,t);let u=this.composePrompt(e,t),g=[],h=await a.prompt(c,u,p=>this.handleUpdate(p,t,g),t?.timeoutMs);return this.handleUsage(h,t),g.join("")}finally{await a.dispose().catch(()=>{});}}async applySessionOptions(e,t,r){if(r?.model&&r.model!=="default"&&!this.adapter.buildSpawnEnv){let o=this.adapter.buildEffortAction?.(r.effort??"",r.model);try{o?.type==="set_model"?await e.setModel(t,o.modelId):await e.setModel(t,r.model);}catch(s){console.warn(`[acp] setModel(${r.model}) failed: ${s instanceof Error?s.message:String(s)}`);}}if(r?.mode){let o=this.adapter.resolveMode?.(r.mode)??r.mode;if(o)try{await e.setMode(t,o);}catch(s){console.warn(`[acp] setMode(${o}) failed: ${s instanceof Error?s.message:String(s)}`);}}if(r?.effort){let o=this.adapter.buildEffortAction?.(r.effort,r.model);if(o&&o.type==="set_config_option")try{await e.setConfigOption(t,o.configId,o.value);}catch(s){console.warn(`[acp] setConfigOption(${o.configId}) effort failed: ${s instanceof Error?s.message:String(s)}`);}}if(r?.configOptions)for(let[o,s]of Object.entries(r.configOptions))try{await e.setConfigOption(t,o,s);}catch(i){console.warn(`[acp] setConfigOption(${o}) failed, retrying: ${i instanceof Error?i.message:String(i)}`);try{await new Promise(a=>setTimeout(a,500)),await e.setConfigOption(t,o,s);}catch(a){console.warn(`[acp] setConfigOption(${o}) retry failed: ${a instanceof Error?a.message:String(a)}`);}}}composePrompt(e,t){let r=[];return t?.systemPrompt?.trim()&&(r.push(t.systemPrompt),r.push("---")),t?.context&&(r.push(t.context),r.push("---")),r.push(e),[{type:"text",text:r.join(`
30
30
 
31
- `)}]}handleUpdate(e,t,r){let n=e.update;if(n.sessionUpdate==="agent_message_chunk"){let s=null;this.adapter.extractTextFromUpdate?s=this.adapter.extractTextFromUpdate(e):s=hr(e),s!==null&&(r.push(s),t?.onOutput?.(s,"stdout"));}else if(n.sessionUpdate==="tool_call"){let s=new Date().toISOString(),i=n,a={title:i.title??"",kind:i.kind,rawInput:i.rawInput,rawOutput:i.rawOutput,locations:i.locations,_meta:i._meta},d=this.resolveToolCall(a),c={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:d.toolName,toolInput:d.toolInput};t?.onTaskLog?.([c]);}else if(n.sessionUpdate==="tool_call_update"){let s=new Date().toISOString(),i=n;if(i.status==="completed"||i.status==="failed"){let d=this.extractResultPreview(i.rawOutput),c={timestamp:s,type:"tool_result",toolUseId:i.toolCallId,resultPreview:d,isError:i.status==="failed"};t?.onTaskLog?.([c]);}else if(i.rawInput!=null&&typeof i.rawInput=="object"&&Object.keys(i.rawInput).length>0){let d={title:i.title??"",kind:i.kind,rawInput:i.rawInput,rawOutput:i.rawOutput,locations:i.locations,_meta:i._meta},c=this.resolveToolCall(d),u={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:c.toolName,toolInput:c.toolInput};t?.onTaskLog?.([u]);}}else n.sessionUpdate;}resolveToolCall(e){let t=e._meta;if(t?.claudeCode?.toolName)return {toolName:t.claudeCode.toolName,toolInput:Tn(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=Bs[e.kind??""]??e.title??"unknown",n=Tn(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 bn,Ct,Tt=D(()=>{l();ke();bn=[{id:"claude-opus-4-8[1m]",name:"Claude Opus 4.8 (Extended)"},{id:"claude-opus-4-8",name:"Claude Opus 4.8"},{id:"claude-opus-4-7[1m]",name:"Claude Opus 4.7 (Extended)"},{id:"claude-opus-4-7",name:"Claude Opus 4.7"},{id:"claude-opus-4-6[1m]",name:"Claude Opus 4.6 (Extended)"},{id:"claude-opus-4-6",name:"Claude Opus 4.6"},{id:"claude-sonnet-4-6[1m]",name:"Claude Sonnet 4.6 (Extended)"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5"}],Ct={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},buildSpawnEnv(o){if(!(!o||o==="default"))return {ANTHROPIC_MODEL:o}},resolveMode(o){return {yolo:"bypassPermissions"}[o]??o},parseEvent:ie};});var bt,kr=D(()=>{l();ke();bt={spawn:{command:"npx",args:["-y","@agentclientprotocol/codex-acp"],shellOnWindows:true},npmPackage:"@agentclientprotocol/codex-acp",clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Codex",defaultMode:"agent"},buildSessionParams(o){return {cwd:o.cwd??process.cwd(),mcpServers:[]}},extractUsage(o){let e=o.usage;return e?{inputTokens:e.inputTokens??0,outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"agent-full-access",buildEffortAction(o,e){if(!e)return null;let t=e.match(/^(.+?)\[([^\]]+)\]$/),r=t?t[1]:e,n=t?t[2]:void 0;return {type:"set_model",modelId:`${r}[${o||n||"medium"}]`}},resolveMode(o){return {yolo:"agent-full-access",default:"agent",plan:"read-only"}[o]??o},parseEvent:ie};});var Et,vr=D(()=>{l();ke();Et={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:ie};});var He,St,_r=D(()=>{l();ke();He="https://agentclientprotocol.com/protocol/session-modes",St={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:`${He}#autopilot`,buildEffortAction(o){return o?{type:"set_config_option",configId:"reasoning_effort",value:o}:null},resolveMode(o){return o.startsWith("https://")?o:{yolo:`${He}#autopilot`,default:`${He}#agent`,agent:`${He}#agent`,plan:`${He}#plan`,autopilot:`${He}#autopilot`}[o]??null},parseEvent:ie};});var It,Ar=D(()=>{l();ke();It={spawn:{command:"opencode",args:["acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"OpenCode"},buildSessionParams(o){return {cwd:o.cwd??process.cwd(),mcpServers:[]}},yoloModeId:void 0,buildEffortAction(o){return null},resolveMode(o){let e={default:"build"};return o==="yolo"?null:e[o]??o},parseEvent:ie};});var Ee,Ot=D(()=>{l();Tt();kr();vr();_r();Ar();Tt();kr();vr();_r();Ar();Ee={claude:Ct,codex:bt,gemini:Et,copilot:St,opencode:It};});var Sn={};ut(Sn,{registerAcpProviders:()=>En});function En(o){if(o){pe("acp",o);return}pe("acp",(e,t)=>{let r=Ee[e];if(!r)throw new S(`Unknown ACP provider id: "${e}". Supported: ${Object.keys(Ee).join(", ")}`,t);return new nt(e,r,t)});}var Rr=D(()=>{l();de();xr();Ot();de();});function zs(o){if(!o)return o;let e=o.trim().replace(/\/+$/,"");return e.toLowerCase().endsWith("/mcp")?e.slice(0,-4):e}var ot,Pr=D(()=>{l();ot=class{endpoint;headers;timeoutMs;constructor(e){let t=zs(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 st,Cr=D(()=>{l();Pr();st=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 ot({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 On={};ut(On,{RemoteProviderRuntime:()=>it,createRemoteProviderFactory:()=>In,resolveFileRemoteAgent:()=>Zs});function Ys(o){let e=readFileSync(o,"utf-8"),t=load(e);return {agents:Array.isArray(t?.agents)?t.agents:void 0}}function Qs(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 Zs(o,e=Ys,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=Qs(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 In(o,e=ge){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 it(t,n,e)}}function ei(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 it,Tr=D(()=>{l();de();Cr();it=class{manager;agentId;constructor(e,t,r=ge){this.agentId=t.external_agent_id??e,this.manager=new st;let n=ei(e,t);this.manager.loadConfig(this.agentId,n);}async query(e,t){return (await this.manager.query(this.agentId,{agentId:this.agentId,query:e,model:t?.model,context:t?.context??t?.systemPrompt})).content.map(n=>n.text).join(`
33
- `)}async execute(e,t){return (await this.manager.execute(this.agentId,{agentId:this.agentId,task:e,model:t?.model,context:t?.context??t?.systemPrompt})).content.map(n=>n.text).join(`
34
- `)}};});var Ln={};ut(Ln,{PluginProviderRuntime:()=>at,createPluginProviderFactory:()=>Dn});function Dn(o){return (e,t)=>{let r=o.get(e);if(!r)throw new S(`Plugin provider "${e}" not found. Available: ${Array.from(o.keys()).join(", ")||"(none)"}`,`plugin/${e}`);return new at(e,r)}}function Mn(o,e,t,r){let n=o.map(s=>s.replace(/\{model\}/g,e));return r&&n.push(t),n}function ri(o){if(!o||typeof o!="string")throw new Error("Plugin provider requires a cli_command")}function Nn(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 ni(o){for(let{pattern:e}of o)if(typeof e!="string")throw new Error("Error pattern must be a string")}function oi(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 at,br=D(()=>{l();de();wt();at=class{constructor(e,t){this.config=t;this.providerStr=`plugin/${e}`,ri(t.cli_command),Nn(t.query_args),Nn(t.execute_args),t.error_patterns&&ni(t.error_patterns),t.env&&oi(t.env);}config;providerStr;async query(e,t){let r=t?.model??this.config.default_model??"default",n=Mn(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=Mn(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=ze({command:this.config.cli_command,allowShellFallback:true}),c=Ve(d,e),u=spawn(c.command,c.argv,{env:a,shell:c.shell??false,stdio:["pipe","pipe","pipe"],windowsHide:c.windowsHide});r!==void 0&&u.stdin.write(r),u.stdin.end(),u.pid!==void 0&&t?.onPid?.(u.pid);let g="",h="",p="",f="";u.stdout.on("data",R=>{let _=R.toString();g+=_,p+=_;let v=p.split(`
31
+ `)}]}handleUpdate(e,t,r){let o=e.update;if(o.sessionUpdate==="agent_message_chunk"){let s=null;this.adapter.extractTextFromUpdate?s=this.adapter.extractTextFromUpdate(e):s=xr(e),s!==null&&(r.push(s),t?.onOutput?.(s,"stdout"));}else if(o.sessionUpdate==="tool_call"){let s=new Date().toISOString(),i=o,a={title:i.title??"",kind:i.kind,rawInput:i.rawInput,rawOutput:i.rawOutput,locations:i.locations,_meta:i._meta},d=this.resolveToolCall(a),c={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:d.toolName,toolInput:d.toolInput};t?.onTaskLog?.([c]);}else if(o.sessionUpdate==="tool_call_update"){let s=new Date().toISOString(),i=o;if(i.status==="completed"||i.status==="failed"){let d=this.extractResultPreview(i.rawOutput),c={timestamp:s,type:"tool_result",toolUseId:i.toolCallId,resultPreview:d,isError:i.status==="failed"};t?.onTaskLog?.([c]);}else if(i.rawInput!=null&&typeof i.rawInput=="object"&&Object.keys(i.rawInput).length>0){let d={title:i.title??"",kind:i.kind,rawInput:i.rawInput,rawOutput:i.rawOutput,locations:i.locations,_meta:i._meta},c=this.resolveToolCall(d),u={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:c.toolName,toolInput:c.toolInput};t?.onTaskLog?.([u]);}}else o.sessionUpdate;}resolveToolCall(e){let t=e._meta;if(t?.claudeCode?.toolName)return {toolName:t.claudeCode.toolName,toolInput:Sn(e.rawInput,e.locations)??(e.title||void 0)};if(this.adapter.parseToolCall){let s=this.adapter.parseToolCall(e);if(s)return {toolName:s.toolName??e.title??"unknown",toolInput:s.toolInput}}let r=Ks[e.kind??""]??e.title??"unknown",o=Sn(e.rawInput,e.locations)??(e.title||void 0);return {toolName:r,toolInput:o}}extractResultPreview(e){if(e!=null){if(typeof e=="string")return e;if(Array.isArray(e)){let t=e.filter(r=>r!=null&&typeof r=="object"&&r.type==="text"&&typeof r.text=="string").map(r=>r.text);if(t.length>0)return t.join(`
32
+ `)}if(typeof e=="object"){let t=e;if(typeof t.formatted_output=="string")return t.formatted_output;if(typeof t.content=="string")return t.content;if(Array.isArray(t.content)){let r=this.extractResultPreview(t.content);if(r)return r}if(typeof t.output=="string")return t.output;if(typeof t.text=="string")return t.text;if(typeof t.message=="string")return t.message;if(t.result!=null){let r=this.extractResultPreview(t.result);if(r)return r}if(t.error!=null){let r=this.extractResultPreview(t.error);if(r)return r}}return JSON.stringify(e)}}handleUsage(e,t){if(!t?.onUsage)return;if(this.adapter.extractUsage){let o=this.adapter.extractUsage(e);if(o){t.onUsage(o);return}}let r=e.usage;r&&t.onUsage({inputTokens:r.inputTokens??0,outputTokens:r.outputTokens??0,cachedInputTokens:r.cachedReadTokens??0,costUsd:0});}};});var In,bt,Et=D(()=>{l();ke();In=[{id:"claude-opus-4-8[1m]",name:"Claude Opus 4.8 (Extended)"},{id:"claude-opus-4-8",name:"Claude Opus 4.8"},{id:"claude-opus-4-7[1m]",name:"Claude Opus 4.7 (Extended)"},{id:"claude-opus-4-7",name:"Claude Opus 4.7"},{id:"claude-opus-4-6[1m]",name:"Claude Opus 4.6 (Extended)"},{id:"claude-opus-4-6",name:"Claude Opus 4.6"},{id:"claude-sonnet-4-6[1m]",name:"Claude Sonnet 4.6 (Extended)"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5"}],bt={spawn:{command:"npx",args:["-y","@agentclientprotocol/claude-agent-acp"],shellOnWindows:true},npmPackage:"@agentclientprotocol/claude-agent-acp",clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Claude",defaultMode:"default"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},extractUsage(n){let e=n.usage;return e?{inputTokens:e.inputTokens??0,outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"bypassPermissions",buildEffortAction(n){return n?{type:"set_config_option",configId:"effort",value:n}:null},buildSpawnEnv(n){if(!(!n||n==="default"))return {ANTHROPIC_MODEL:n}},resolveMode(n){return {yolo:"bypassPermissions"}[n]??n},parseEvent:ie};});var St,_r=D(()=>{l();ke();St={spawn:{command:"npx",args:["-y","@agentclientprotocol/codex-acp"],shellOnWindows:true},npmPackage:"@agentclientprotocol/codex-acp",clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Codex",defaultMode:"agent"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},extractUsage(n){let e=n.usage;return e?{inputTokens:e.inputTokens??0,outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"agent-full-access",buildEffortAction(n,e){if(!e)return null;let t=e.match(/^(.+?)\[([^\]]+)\]$/),r=t?t[1]:e,o=t?t[2]:void 0;return {type:"set_model",modelId:`${r}[${n||o||"medium"}]`}},resolveMode(n){return {yolo:"agent-full-access",default:"agent",plan:"read-only"}[n]??n},parseEvent:ie};});var It,Ar=D(()=>{l();ke();It={spawn:{command:"gemini",args:["--acp","--skip-trust"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Gemini"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},yoloModeId:"yolo",buildEffortAction(n){return null},resolveMode(n){return {acceptEdits:"autoEdit"}[n]??n},parseEvent:ie};});var qe,Ot,Rr=D(()=>{l();ke();qe="https://agentclientprotocol.com/protocol/session-modes",Ot={spawn:{command:"copilot",args:["--acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"GitHub Copilot"},buildSessionParams(n){return {cwd:n.cwd?resolve(n.cwd):process.cwd(),mcpServers:[]}},yoloModeId:`${qe}#autopilot`,buildEffortAction(n){return n?{type:"set_config_option",configId:"reasoning_effort",value:n}:null},resolveMode(n){return n.startsWith("https://")?n:{yolo:`${qe}#autopilot`,default:`${qe}#agent`,agent:`${qe}#agent`,plan:`${qe}#plan`,autopilot:`${qe}#autopilot`}[n]??null},parseEvent:ie};});var Mt,Pr=D(()=>{l();ke();Mt={spawn:{command:"opencode",args:["acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"OpenCode"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},yoloModeId:void 0,buildEffortAction(n){return null},resolveMode(n){let e={default:"build"};return n==="yolo"?null:e[n]??n},parseEvent:ie};});var Se,Nt=D(()=>{l();Et();_r();Ar();Rr();Pr();Et();_r();Ar();Rr();Pr();Se={claude:bt,codex:St,gemini:It,copilot:Ot,opencode:Mt};});var Mn={};gt(Mn,{registerAcpProviders:()=>On});function On(n){if(n){pe("acp",n);return}pe("acp",(e,t)=>{let r=Se[e];if(!r)throw new S(`Unknown ACP provider id: "${e}". Supported: ${Object.keys(Se).join(", ")}`,t);return new st(e,r,t)});}var Cr=D(()=>{l();de();vr();Nt();de();});function Xs(n){if(!n)return n;let e=n.trim().replace(/\/+$/,"");return e.toLowerCase().endsWith("/mcp")?e.slice(0,-4):e}var it,Tr=D(()=>{l();it=class{endpoint;headers;timeoutMs;constructor(e){let t=Xs(e.url);this.endpoint=`${t}/mcp`,this.headers={"Content-Type":"application/json",...e.headers??{}},e.apiKey&&(this.headers.Authorization=`Bearer ${e.apiKey}`),this.timeoutMs=e.timeoutMs??3e4;}async send(e){let t=new AbortController,r=setTimeout(()=>t.abort(),this.timeoutMs);try{let o=await fetch(this.endpoint,{method:"POST",headers:this.headers,body:JSON.stringify(e),signal:t.signal});if(clearTimeout(r),!o.ok){let a=await o.text();throw new Error(`HTTP ${o.status}: ${o.statusText}${a?` - ${a}`:""}`)}let s=o.headers.get("content-type");if(s?.includes("application/json"))return await o.json();let i=await o.text();return {jsonrpc:"2.0",id:e.id,error:{code:-32600,message:`Unexpected response content-type: ${s}`,data:i}}}catch(o){throw clearTimeout(r),o instanceof Error&&o.name==="AbortError"?new Error(`MCP-HTTP request timeout after ${this.timeoutMs}ms to ${this.endpoint}`):o}}async close(){}};});var at,br=D(()=>{l();Tr();at=class{logger;configs=new Map;transports=new Map;constructor(e={}){this.logger=e.logger??(()=>{});}loadConfig(e,t){this.validateConfig(t),this.configs.set(e,t),this.transports.set(e,new it({url:t.url,apiKey:t.apiKey,headers:t.headers,timeoutMs:t.timeoutMs})),this.logger(`Loaded remote agent config for: ${e}`,"debug");}loadConfigWithTransport(e,t,r){this.validateConfig(t),this.configs.set(e,t),this.transports.set(e,r),this.logger(`Loaded remote agent config for: ${e} (custom transport)`,"debug");}getConfig(e){return this.configs.get(e)}isRemoteAgent(e){return this.configs.has(e)}getRemoteAgentIds(){return Array.from(this.configs.keys())}async query(e,t){let r=this.requireConfig(e),o=r.tools?.query??"crewx_queryAgent",i={agentId:r.agentId??e,query:t.query};t.context&&(i.context=t.context),t.model&&(i.model=t.model),t.platform&&(i.platform=t.platform),t.messages?.length&&(i.messages=t.messages);try{let a=await this.callRemoteTool(e,o,i);return this.normalizeResponse(a)}catch(a){let d=a instanceof Error?a.message:String(a);throw this.logger(`Remote query failed for agent ${e}: ${d}`,"error"),a}}async execute(e,t){let r=this.requireConfig(e),o=r.tools?.execute??"crewx_executeAgent",i={agentId:r.agentId??e,task:t.task};t.context&&(i.context=t.context),t.model&&(i.model=t.model),t.platform&&(i.platform=t.platform),t.messages?.length&&(i.messages=t.messages);try{let a=await this.callRemoteTool(e,o,i);return this.normalizeResponse(a)}catch(a){let d=a instanceof Error?a.message:String(a);throw this.logger(`Remote execute failed for agent ${e}: ${d}`,"error"),a}}mapToolNames(e,t){let r=this.requireConfig(e);r.tools={query:t.query??r.tools?.query??"crewx_queryAgent",execute:t.execute??r.tools?.execute??"crewx_executeAgent"},this.logger(`Updated tool name mapping for agent ${e}`,"debug");}async clearConfigs(){for(let e of this.transports.values())await e.close();this.configs.clear(),this.transports.clear(),this.logger("Cleared all remote agent configurations","debug");}requireConfig(e){let t=this.configs.get(e);if(!t)throw new Error(`Agent ${e} is not configured as a remote agent`);return t}async callRemoteTool(e,t,r){let o=this.transports.get(e);if(!o)throw new Error(`No transport available for agent ${e}`);let s={jsonrpc:"2.0",id:`${t}-${Date.now()}`,method:"tools/call",params:{name:t,arguments:r}};this.logger(`Calling remote MCP tool ${t} for agent ${e}`,"debug");let i=await o.send(s);if(i.error)throw new Error(i.error.message||"MCP server returned an error");return i.result}normalizeResponse(e){if(!e)return {success:false,content:[{type:"text",text:"Remote agent returned no response."}]};let t=e;if(Array.isArray(t.content)&&t.content.length>0)return t;let r=t.response??t.implementation??t.message??t.output,o=typeof r=="string"?r:JSON.stringify(r??e,null,2);return {...t,content:[{type:"text",text:o}]}}validateConfig(e){if(!e.url)throw new Error("Remote agent configuration requires a URL");if(!e.url.startsWith("http://")&&!e.url.startsWith("https://"))throw new Error("Remote agent URL must start with http:// or https://");if(e.type!=="mcp-http")throw new Error(`Unsupported remote agent type: ${e.type}`)}};});var Dn={};gt(Dn,{RemoteProviderRuntime:()=>dt,createRemoteProviderFactory:()=>Nn,resolveFileRemoteAgent:()=>ni});function ti(n){let e=readFileSync(n,"utf-8"),t=load(e);return {agents:Array.isArray(t?.agents)?t.agents:void 0}}function ri(n){let e=Array.isArray(n.provider)?n.provider[0]:n.provider;return e||(Array.isArray(n.inline?.provider)?n.inline.provider[0]:n.inline?.provider)}function ni(n,e=ti,t=existsSync){let r=n.location.replace("file://","");if(!t(r))throw new Error(`Remote config file not found: ${r}`);if(!n.external_agent_id)throw new Error(`external_agent_id is required for file:// remote provider "${n.id}"`);let s=e(r).agents?.find(d=>d.id===n.external_agent_id);if(!s)throw new Error(`Agent "${n.external_agent_id}" not found in ${r}`);let i=ri(s);if(!i)throw new Error(`Agent "${n.external_agent_id}" in ${r} has no provider configured`);if(i.startsWith("remote/"))throw new Error(`Chained remotes not allowed: ${n.id} \u2192 ${i}`);let a=resolve(dirname(r),s.working_directory??".");return {agent:{...s,working_directory:a},provider:i}}function Nn(n,e=ge){return (t,r)=>{let o=n.get(t);if(!o)throw new Error(`Remote provider "${t}" not found. Available: ${Array.from(n.keys()).join(", ")||"(none)"}`);if(o.location.startsWith("file://"))throw new Error(`Remote provider "${t}" uses file:// location which is not supported at the SDK level. Use the CLI commands (crewx query / crewx execute) which handle file:// remotes automatically.`);return new dt(t,o,e)}}function oi(n,e){let t=e.location;if(!t)throw new Error("Remote provider config requires a location");if(!t.startsWith("http://")&&!t.startsWith("https://"))throw new Error(`Unsupported remote location protocol for MCP-HTTP: ${t}`);return {type:"mcp-http",url:t,apiKey:e.apiKey,headers:e.headers,timeoutMs:e.timeout?.query??3e4,agentId:e.external_agent_id??n}}var dt,Er=D(()=>{l();de();br();dt=class{manager;agentId;constructor(e,t,r=ge){this.agentId=t.external_agent_id??e,this.manager=new at;let o=oi(e,t);this.manager.loadConfig(this.agentId,o);}async query(e,t){return (await this.manager.query(this.agentId,{agentId:this.agentId,query:e,model:t?.model,context:t?.context??t?.systemPrompt})).content.map(o=>o.text).join(`
33
+ `)}async execute(e,t){return (await this.manager.execute(this.agentId,{agentId:this.agentId,task:e,model:t?.model,context:t?.context??t?.systemPrompt})).content.map(o=>o.text).join(`
34
+ `)}};});var Un={};gt(Un,{PluginProviderRuntime:()=>lt,createPluginProviderFactory:()=>jn});function jn(n){return (e,t)=>{let r=n.get(e);if(!r)throw new S(`Plugin provider "${e}" not found. Available: ${Array.from(n.keys()).join(", ")||"(none)"}`,`plugin/${e}`);return new lt(e,r)}}function $n(n,e,t,r){let o=n.map(s=>s.replace(/\{model\}/g,e));return r&&o.push(t),o}function ii(n){if(!n||typeof n!="string")throw new Error("Plugin provider requires a cli_command")}function Ln(n){if(!Array.isArray(n))throw new Error("CLI arguments must be an array");for(let e of n)if(typeof e!="string")throw new Error("Each CLI argument must be a string")}function ai(n){for(let{pattern:e}of n)if(typeof e!="string")throw new Error("Error pattern must be a string")}function di(n){for(let[e,t]of Object.entries(n))if(typeof e!="string"||typeof t!="string")throw new Error("env entries must be string key/value pairs")}var lt,Sr=D(()=>{l();de();kt();lt=class{constructor(e,t){this.config=t;this.providerStr=`plugin/${e}`,ii(t.cli_command),Ln(t.query_args),Ln(t.execute_args),t.error_patterns&&ai(t.error_patterns),t.env&&di(t.env);}config;providerStr;async query(e,t){let r=t?.model??this.config.default_model??"default",o=$n(this.config.query_args,r,e,this.config.prompt_in_args),s=this.config.prompt_in_args?void 0:e;t?.onCommand?.(`${this.config.cli_command} ${o.join(" ")}`);let i=this.config.timeout?.query??6e5;return this.runProcess(o,t,s,i)}async execute(e,t){let r=t?.model??this.config.default_model??"default",o=$n(this.config.execute_args,r,e,this.config.prompt_in_args),s=this.config.prompt_in_args?void 0:e;t?.onCommand?.(`${this.config.cli_command} ${o.join(" ")}`);let i=this.config.timeout?.execute??6e5;return this.runProcess(o,t,s,i)}runProcess(e,t,r,o){return new Promise((s,i)=>{let a={...process.env,...this.config.env??{}},d=Ve({command:this.config.cli_command,allowShellFallback:true}),c=Ke(d,e),u=spawn(c.command,c.argv,{env:a,shell:c.shell??false,stdio:["pipe","pipe","pipe"],windowsHide:c.windowsHide});r!==void 0&&u.stdin.write(r),u.stdin.end(),u.pid!==void 0&&t?.onPid?.(u.pid);let g="",h="",p="",f="";u.stdout.on("data",R=>{let _=R.toString();g+=_,p+=_;let v=p.split(`
35
35
  `);p=v.pop()??"";for(let k of v)k.trim()&&t?.onOutput?.(k,"stdout");}),u.stderr.on("data",R=>{let _=R.toString();h+=_,f+=_;let v=f.split(`
36
- `);f=v.pop()??"";for(let k of v)k.trim()&&t?.onOutput?.(k,"stderr");});let x=setTimeout(()=>{u.kill("SIGTERM"),i(new S(`Plugin provider "${this.providerStr}" timed out after ${n}ms`,this.providerStr));},n);u.on("error",R=>{if(clearTimeout(x),R.code==="ENOENT"){let _=this.config.not_installed_message??`CLI command "${this.config.cli_command}" not found. Is ${this.config.id} installed?`;i(new S(_,this.providerStr));}else i(new S(`Spawn error: ${R.message}`,this.providerStr));}),u.on("close",R=>{clearTimeout(x),p.trim()&&t?.onOutput?.(p,"stdout"),f.trim()&&t?.onOutput?.(f,"stderr");let _=R??0;if(t?.onExitCode?.(_),this.config.error_patterns){let v=h||g;for(let k of this.config.error_patterns)if(v.includes(k.pattern)){i(new S(k.message,this.providerStr));return}}if(R!==0){i(new S(`Process exited with code ${R}: ${h.slice(0,500)}`,this.providerStr));return}s(g.trim());});})}};});l();l();l();function _o(o){let e=n=>n.replace(/[.+^${}()|[\]\\]/g,"\\$&"),r=o.split("/").map(n=>n==="**"?".*":n.split("*").map(e).join("[^/]*"));return new RegExp(`^${r.join("\\/")}$`)}function ae(o,e){try{return _o(e).test(o)}catch{return false}}l();l();var Ao=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()),Kr=z$1.object({include:z$1.array(z$1.string()).optional()}).optional(),Ro=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:Ao.optional(),skills:Kr}).catchall(z$1.unknown()),Jr=z$1.object({agents:z$1.array(Ro).optional(),hooks:z$1.array(z$1.unknown()).optional(),settings:z$1.record(z$1.unknown()).optional(),skills:z$1.unknown().optional(),layouts:z$1.record(z$1.unknown()).optional(),documents:z$1.record(z$1.unknown()).optional()}).catchall(z$1.unknown());var _e=class extends Error{constructor(t,r){super(t);this.cause=r;this.name="ConfigLoadError";}cause};function pt(o){if(!o||typeof o!="string"||!o.trim())throw new _e("YAML content must be a non-empty string");let e;try{e=load(o);}catch(n){throw new _e(`YAML parse error: ${n.message}`,n)}let t=To(e),r=Jr.safeParse(t);if(!r.success)throw new _e(`Config validation error: ${r.error.message}`);return r.data}function gt(o){let e;try{e=readFileSync(o,"utf-8");}catch(t){throw new _e(`Cannot read file: ${o}`,t)}return pt(e)}function To(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 Ae=join("templates","agents");function So(){try{let e=(typeof V=="function"?V:createRequire(typeof y<"u"?y:process.cwd()+"/")).resolve("@crewx/sdk/package.json");return dirname(e)}catch{return null}}function Le(o){if(o&&existsSync(o))return o;let e=process.env.CREWX_SDK_TEMPLATES_PATH;if(e&&existsSync(e))return e;let t=So();if(t){let n=join(t,Ae);if(existsSync(n))return n}let r=[join(m,"..",Ae),join(m,"..","..",Ae),join(m,"..","..","..",Ae),join(process.cwd(),"packages","sdk",Ae),join(process.cwd(),Ae)];for(let n of r)if(existsSync(n))return n;throw new Error(`[@crewx/sdk] Templates directory not found.
36
+ `);f=v.pop()??"";for(let k of v)k.trim()&&t?.onOutput?.(k,"stderr");});let x=setTimeout(()=>{u.kill("SIGTERM"),i(new S(`Plugin provider "${this.providerStr}" timed out after ${o}ms`,this.providerStr));},o);u.on("error",R=>{if(clearTimeout(x),R.code==="ENOENT"){let _=this.config.not_installed_message??`CLI command "${this.config.cli_command}" not found. Is ${this.config.id} installed?`;i(new S(_,this.providerStr));}else i(new S(`Spawn error: ${R.message}`,this.providerStr));}),u.on("close",R=>{clearTimeout(x),p.trim()&&t?.onOutput?.(p,"stdout"),f.trim()&&t?.onOutput?.(f,"stderr");let _=R??0;if(t?.onExitCode?.(_),this.config.error_patterns){let v=h||g;for(let k of this.config.error_patterns)if(v.includes(k.pattern)){i(new S(k.message,this.providerStr));return}}if(R!==0){i(new S(`Process exited with code ${R}: ${h.slice(0,500)}`,this.providerStr));return}s(g.trim());});})}};});l();l();l();function Po(n){let e=o=>o.replace(/[.+^${}()|[\]\\]/g,"\\$&"),r=n.split("/").map(o=>o==="**"?".*":o.split("*").map(e).join("[^/]*"));return new RegExp(`^${r.join("\\/")}$`)}function ae(n,e){try{return Po(e).test(n)}catch{return false}}l();l();var Co=z$1.object({model:z$1.string().optional(),system_prompt:z$1.string().optional(),prompt:z$1.string().optional(),layout:z$1.union([z$1.string(),z$1.object({id:z$1.string(),props:z$1.record(z$1.unknown()).optional()}),z$1.object({props:z$1.record(z$1.unknown())}),z$1.object({template:z$1.string()})]).optional()}).catchall(z$1.unknown()),Xr=z$1.object({include:z$1.array(z$1.string()).optional()}).optional(),To=z$1.object({id:z$1.string(),name:z$1.string().optional(),role:z$1.string().optional(),team:z$1.string().optional(),provider:z$1.union([z$1.string(),z$1.array(z$1.string())]),working_directory:z$1.string().optional(),description:z$1.string().optional(),tags:z$1.array(z$1.string()).optional(),inline:Co.optional(),skills:Xr}).catchall(z$1.unknown()),Gr=z$1.object({agents:z$1.array(To).optional(),hooks:z$1.array(z$1.unknown()).optional(),settings:z$1.record(z$1.unknown()).optional(),skills:z$1.unknown().optional(),layouts:z$1.record(z$1.unknown()).optional(),documents:z$1.record(z$1.unknown()).optional()}).catchall(z$1.unknown());var _e=class extends Error{constructor(t,r){super(t);this.cause=r;this.name="ConfigLoadError";}cause};function mt(n){if(!n||typeof n!="string"||!n.trim())throw new _e("YAML content must be a non-empty string");let e;try{e=load(n);}catch(o){throw new _e(`YAML parse error: ${o.message}`,o)}let t=So(e),r=Gr.safeParse(t);if(!r.success)throw new _e(`Config validation error: ${r.error.message}`);return r.data}function ft(n){let e;try{e=readFileSync(n,"utf-8");}catch(t){throw new _e(`Cannot read file: ${n}`,t)}return mt(e)}function So(n){if(!n||typeof n!="object")return {agents:[]};let e=n,t;if(e.agents&&typeof e.agents=="object"&&!Array.isArray(e.agents)){let o=e.agents;t=Object.entries(o).map(([s,i])=>({id:s,...i&&typeof i=="object"?i:{}}));}else if(Array.isArray(e.agents))t=e.agents;else return {...e,agents:[]};let r=t.map(o=>{if(o.provider===void 0&&o.inline&&typeof o.inline=="object"){let s=o.inline;if(s.provider!==void 0)return {...o,provider:s.provider}}return o});return {...e,agents:r}}l();var Ae=join("templates","agents");function Mo(){try{let e=(typeof V=="function"?V:createRequire(typeof y<"u"?y:process.cwd()+"/")).resolve("@crewx/sdk/package.json");return dirname(e)}catch{return null}}function Le(n){if(n&&existsSync(n))return n;let e=process.env.CREWX_SDK_TEMPLATES_PATH;if(e&&existsSync(e))return e;let t=Mo();if(t){let o=join(t,Ae);if(existsSync(o))return o}let r=[join(m,"..",Ae),join(m,"..","..",Ae),join(m,"..","..","..",Ae),join(process.cwd(),"packages","sdk",Ae),join(process.cwd(),Ae)];for(let o of r)if(existsSync(o))return o;throw new Error(`[@crewx/sdk] Templates directory not found.
37
37
  `+(t?` package anchor: ${join(t,Ae)}
38
38
  `:` package anchor: (unresolved)
39
- `)+r.map(n=>` candidate: ${n}`).join(`
39
+ `)+r.map(o=>` candidate: ${o}`).join(`
40
40
  `)+`
41
- Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function Wt(){let o=Le();return {yamlPath:join(o,"default.yaml"),dir:o}}l();var ue=class extends Error{constructor(e,t){let r=t.length>0?` Available: ${t.join(", ")}`:"";super(`Agent not found: "${e}".${r}`),this.name="AgentNotFoundError";}},Io={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 ft(o,e){let t=o.startsWith("@")?o.slice(1):o,r=e.find(s=>s.id===t);if(r)return r;let n=Io[t];if(n)return n;throw new ue(o,e.map(s=>s.id))}de();l();function en(o,e){if(o===void 0||o==="")return e;let t=parseInt(o,10);return Number.isNaN(t)?e:t}function tn(o=process.env){return {queryMs:en(o.CREWX_TIMEOUT_QUERY,288e5),executeMs:en(o.CREWX_TIMEOUT_EXECUTE,288e5)}}l();l();var Go=[/^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],Yo=/[;|&`$(){}!><\n\r]/,Qo=2,Zo=["*","**","*:*","* *","**/*"];function es(){let o={};for(let[e,t]of Object.entries(process.env))t!==void 0&&(Go.some(r=>r.test(e))||(o[e]=t));return o}function ts(o){if(Yo.test(o))throw new Error(`exec blocked: shell metacharacter detected in "${o}"`)}function rs(o){return /^npx\s+@crewx\/[\w-]+/.test(o)}function ns(o){if(Zo.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 os(o,e){let t=e.allow??[],r=e.deny??[];for(let n of [...t,...r])ns(n);return r.some(n=>ae(o,n))?false:rs(o)?true:t.some(n=>ae(o,n))}var rn=false;function ss(o){rn=o;}function Xe(o){if(!rn)return;let e=JSON.stringify({span:"template_exec",...o,timestamp:new Date().toISOString()});console.error(e);}function is(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 nn(o,e){let t=Date.now(),r=parseInt(process.env.CREWX_EXEC_DEPTH??"0",10);if(isNaN(r)||r>=Qo)return Xe({command:o,status:"denied",reason:"invalid or max recursion depth"}),"(exec blocked: max recursion depth reached)";try{ts(o);}catch{return Xe({command:o,status:"denied",reason:"shell metacharacter detected"}),`(exec blocked: shell metacharacter detected in "${o}")`}if(!os(o,e))return Xe({command:o,status:"denied",reason:"not in allow list"}),`(exec blocked: ${o})`;try{let n=is(o),[s,...i]=n;if(!s)return `(exec failed: ${o})`;let a=es(),d=execFileSync(s,i,{timeout:e.timeout??5e3,maxBuffer:64*1024,encoding:"utf-8",env:{...a,CREWX_EXEC_DEPTH:String(r+1)},stdio:["pipe","pipe","pipe"]}),c=Date.now()-t;return Xe({command:o,status:"allowed",allowed_by:"policy",duration_ms:c}),`<exec-output cmd="${o}">
41
+ Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function Vt(){let n=Le();return {yamlPath:join(n,"default.yaml"),dir:n}}l();var ue=class extends Error{constructor(e,t){let r=t.length>0?` Available: ${t.join(", ")}`:"";super(`Agent not found: "${e}".${r}`),this.name="AgentNotFoundError";}},No={claude:{id:"claude",provider:"cli/claude"},gemini:{id:"gemini",provider:"cli/gemini"},copilot:{id:"copilot",provider:"cli/copilot"},codex:{id:"codex",provider:"cli/codex"}};function ht(n,e){let t=n.startsWith("@")?n.slice(1):n,r=e.find(s=>s.id===t);if(r)return r;let o=No[t];if(o)return o;throw new ue(n,e.map(s=>s.id))}de();l();function rn(n,e){if(n===void 0||n==="")return e;let t=parseInt(n,10);return Number.isNaN(t)?e:t}function nn(n=process.env){return {queryMs:rn(n.CREWX_TIMEOUT_QUERY,288e5),executeMs:rn(n.CREWX_TIMEOUT_EXECUTE,288e5)}}l();l();var Zo=[/^ANTHROPIC_/i,/^OPENAI_/i,/^AWS_SECRET/i,/^SLACK_/i,/^GITHUB_TOKEN$/i,/^CREWX_MCP_KEY$/i,/^DATABASE_/i,/^AWS_ACCESS_KEY/i,/^AWS_SESSION_TOKEN$/i,/^GH_TOKEN$/i,/^GH_APP_/i,/^NPM_TOKEN$/i,/^NPM_AUTH/i,/^GOOGLE_APPLICATION/i,/^GCLOUD_/i,/^AZURE_/i,/^ARM_/i,/^DOCKER_PASSWORD$/i,/^DOCKER_AUTH/i,/^SSH_PRIVATE/i,/^SSH_AUTH_SOCK$/i,/^CI_JOB_TOKEN$/i,/^ACTIONS_RUNTIME_TOKEN$/i,/^VAULT_TOKEN$/i,/^SONAR_TOKEN$/i,/^CODECOV_TOKEN$/i,/TOKEN$/i,/SECRET$/i,/PASSWORD$/i,/API_KEY$/i],es=/[;|&`$(){}!><\n\r]/,ts=2,rs=["*","**","*:*","* *","**/*"];function ns(){let n={};for(let[e,t]of Object.entries(process.env))t!==void 0&&(Zo.some(r=>r.test(e))||(n[e]=t));return n}function os(n){if(es.test(n))throw new Error(`exec blocked: shell metacharacter detected in "${n}"`)}function ss(n){return /^npx\s+@crewx\/[\w-]+/.test(n)}function is(n){if(rs.includes(n.trim()))throw new Error(`exec config error: overly broad pattern "${n}" is not allowed`);if(!/^[\w./@-]/.test(n))throw new Error("exec config error: pattern must start with a command name")}function as(n,e){let t=e.allow??[],r=e.deny??[];for(let o of [...t,...r])is(o);return r.some(o=>ae(n,o))?false:ss(n)?true:t.some(o=>ae(n,o))}var on=false;function ds(n){on=n;}function Ge(n){if(!on)return;let e=JSON.stringify({span:"template_exec",...n,timestamp:new Date().toISOString()});console.error(e);}function ls(n){let e=[],t="",r=false,o=false;for(let s=0;s<n.length;s++){let i=n[s];i==="'"&&!o?r=!r:i==='"'&&!r?o=!o:i===" "&&!r&&!o?t.length>0&&(e.push(t),t=""):t+=i;}return t.length>0&&e.push(t),e}function sn(n,e){let t=Date.now(),r=parseInt(process.env.CREWX_EXEC_DEPTH??"0",10);if(isNaN(r)||r>=ts)return Ge({command:n,status:"denied",reason:"invalid or max recursion depth"}),"(exec blocked: max recursion depth reached)";try{os(n);}catch{return Ge({command:n,status:"denied",reason:"shell metacharacter detected"}),`(exec blocked: shell metacharacter detected in "${n}")`}if(!as(n,e))return Ge({command:n,status:"denied",reason:"not in allow list"}),`(exec blocked: ${n})`;try{let o=ls(n),[s,...i]=o;if(!s)return `(exec failed: ${n})`;let a=ns(),d=execFileSync(s,i,{timeout:e.timeout??5e3,maxBuffer:64*1024,encoding:"utf-8",env:{...a,CREWX_EXEC_DEPTH:String(r+1)},stdio:["pipe","pipe","pipe"]}),c=Date.now()-t;return Ge({command:n,status:"allowed",allowed_by:"policy",duration_ms:c}),`<exec-output cmd="${n}">
42
42
  ${d.trim()}
43
- </exec-output>`}catch{return Xe({command:o,status:"error",reason:"execution failed"}),`(exec failed: ${o})`}}l();function on(o){return o==null?"":String(o)}l();function sn(o,e){return `\`\`\`${e?.hash?.lang??""}
44
- ${o??""}
45
- \`\`\``}l();function tr(o,e){if(!o)return "";if(o.length<=e)return o;let t=o.length-e;return `${o.substring(0,e)} (...+${t} chars)`}function rr(o){return Array.isArray(o)||typeof o=="string"?o.length:0}function nr(o){return typeof o!="string"?"":o.replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;")}var an=["B","KB","MB","GB"];function or(o){if(o===0)return "0 B";let e=Math.min(Math.floor(Math.log(o)/Math.log(1024)),an.length-1);return `${Math.round(o/Math.pow(1024,e)*100)/100} ${an[e]}`}function sr(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 Ge=class{hbs;execPolicy;execEnabled;constructor(e={}){this.hbs=le.create(),this.execPolicy=e.execPolicy??{allow:[],deny:[]},this.execEnabled=e.execEnabled??true,this.registerHelpers();}registerHelpers(){let e=this.hbs,t=this.execPolicy,r=this.execEnabled;e.registerHelper("exec",function(n){return typeof n!="string"?"":r?new e.SafeString(nn(n,t)):"(exec disabled)"}),e.registerHelper("include",function(n){return new e.SafeString(on(n))}),e.registerHelper("fenced_code",function(n,s){return new e.SafeString(sn(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 tr(n,s)}),e.registerHelper("length",function(n){return rr(n)}),e.registerHelper("escapeHandlebars",function(n){return new e.SafeString(nr(n))}),e.registerHelper("formatFileSize",function(n){return or(n)}),e.registerHelper("formatTimestamp",function(n){return sr(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)}async readdir(e){try{return await readdir(e)}catch{return []}}},Pe=new Rt;var Ce=class{docs=new Map;fs;constructor(e){this.fs=e??Pe;}async load(e,t){if(e)for(let[r,n]of Object.entries(e)){let s=n;if(typeof s=="string")this.docs.set(r,{content:s});else if(s&&typeof s=="object"){let i=s;"content"in i&&typeof i.content=="string"?this.docs.set(r,{content:i.content}):"path"in i&&typeof i.path=="string"?await this.loadFromFile(r,i.path,t):console.warn(`[DocumentLoader] Skipping '${r}': unsupported format`);}else console.warn(`[DocumentLoader] Skipping '${r}': unsupported format`);}}async getContent(e){return this.docs.get(e)?.content}async getToc(e){let t=this.docs.get(e);if(!t)return;let r=[];for(let n of t.content.split(`
46
- `)){let s=/^(#{1,6})\s+(.+)$/.exec(n.trim());s&&r.push({depth:s[1].length,text:s[2].trim()});}if(r.length!==0)return r.map(({depth:n,text:s})=>`${" ".repeat(n-1)}- ${s}`).join(`
47
- `)}getPath(e){return this.docs.get(e)?.path}getNames(){return Array.from(this.docs.keys())}async buildContext(){let e={};for(let t of this.docs.keys()){let r=await this.getContent(t)??"",n=await this.getToc(t),s=this.getPath(t);e[t]={content:r,toc:n,...s?{path:s}:{}};}return e}async loadFromFile(e,t,r){try{let n=this.resolve(t,r),s=await this.fs.readFile(n);this.docs.set(e,{content:s,path:n});}catch(n){let s=n instanceof Error?n.message:String(n);console.warn(`[DocumentLoader] Failed to load '${e}' from '${t}': ${s}`);}}resolve(e,t){return this.fs.isAbsolute(e)?e:t?this.fs.resolvePath(t,e):this.fs.resolvePath(e)}};l();l();var X=class extends Error{constructor(t,r,n){super(t);this.layoutId=r;this.cause=n;this.name="LayoutLoadError";}layoutId;cause},me=class extends Error{constructor(t,r=[],n){super(t);this.errors=r;this.cause=n;this.name="PropsValidationError";}errors;cause};var ys={validationMode:"lenient",fallbackLayoutId:"crewx/default"},Ye=class{layouts=new Map;options;constructor(e){this.options={...ys,...e,templatesPath:e?.templatesPath??Le()},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 X(`Fallback layout not found: ${this.options.fallbackLayoutId}`,this.options.fallbackLayoutId);return t&&Object.keys(t).length>0?{...r,defaultProps:{...r.defaultProps,...t}}:r}getLayoutIds(){return Array.from(this.layouts.keys())}hasLayout(e){if(this.layouts.has(e))return true;let t=this.normalizeLayoutId(e);return this.layouts.has(t)}reload(){this.layouts.clear(),this.loadAllLayouts();}registerLayout(e,t){if(!e||typeof e!="string")throw new X("Layout ID must be a non-empty string",e);let r=typeof t=="string"?{template:t}:t,n=typeof r.template=="string"?r.template:"";if(!n||n.trim().length===0)throw new X(`Custom layout template is empty for ${e}`,e);let s=r.propsSchema||{},i=this.extractDefaultProps(s),a=r.defaultProps||{},d={id:e,version:r.version||"1.0.0",description:r.description||`Custom layout ${e}`,template:n,propsSchema:this.parsePropsSchema(s),defaultProps:{...i,...a}},c=this.layouts.get(e),u=c?.template===n&&JSON.stringify(c?.defaultProps??{})===JSON.stringify(d.defaultProps??{})&&JSON.stringify(c?.propsSchema??{})===JSON.stringify(d.propsSchema??{});this.layouts.set(e,d),process.env.CREWX_VERBOSE==="1"&&(c?u||console.error(`Updated custom layout: ${e}`):console.error(`Registered custom layout: ${e}`));}registerLayouts(e){for(let[t,r]of Object.entries(e))try{this.registerLayout(t,r);}catch(n){console.warn(`Failed to register custom layout ${t}:`,n instanceof Error?n.message:n);}}loadAllLayouts(){let e=this.options.templatesPath;if(!existsSync(e))throw new X(`Templates directory not found: ${e}`,void 0,new Error(`Directory does not exist: ${e}`));try{let t=readdirSync(e).filter(r=>r.endsWith(".yaml")||r.endsWith(".yml"));t.length===0&&console.warn(`No layout files found in ${e}`);for(let r of t){let n=r.replace(/\.(yaml|yml)$/,""),s=z.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 X(`Failed to read layouts directory: ${e}`,void 0,t instanceof Error?t:new Error(String(t)))}}loadLayoutFile(e,t){try{let r=readFileSync(e,"utf-8");if(!r||r.trim().length===0)throw console.warn(`Empty YAML file: ${e}, will use fallback`),new X(`Empty YAML file: ${e}`,t,new Error("File content is empty"));let n=load(r);if(!n||typeof n!="object")throw console.warn(`Invalid YAML content in ${e} (parsed as ${typeof n}), will use fallback`),new X(`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 X(`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 X(`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 X(`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 hs(o){return Array.from(new Set(o.filter(e=>e?.isAssistant&&e?.metadata?.agent_id).map(e=>String(e.metadata.agent_id))))}function un(o,e,t){if(!Array.isArray(o)||o.length===0||!(t&&typeof t.fn=="function"))return "";let n=hs(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 Qe=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 me("Props validation failed in strict mode",n);return {valid:n.length===0,props:s,errors:n}}validateObject(e,t,r,n,s){let i={};if(r==="strict")for(let a of Object.keys(e))t[a]||s.push({path:this.buildPath([...n,a]),message:`Unknown prop '${a}'`,value:e[a]});for(let[a,d]of Object.entries(t)){let c=[...n,a],u=e[a],g=this.resolveProp(u,d,c,r,s);g.shouldAssign&&(i[a]=g.value);}return i}resolveProp(e,t,r,n,s){let i=this.buildPath(r);if(this.isNil(e)){if(t.isRequired&&s.push({path:i,message:`Required prop '${r[r.length-1]}' is missing`}),t.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(t.defaultValue)};if(t.type==="shape"&&t.shape){let d=this.applyDefaults(t.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}let a=this.validateType(e,t,r,n,s);if(!a.valid){if(t.type==="shape"&&a.value&&this.isPlainObject(a.value))return {shouldAssign:true,value:a.value};if(s.push({path:i,message:a.error??"Invalid value",value:e}),t.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(t.defaultValue)};if(t.type==="shape"&&t.shape){let d=this.applyDefaults(t.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}return {shouldAssign:true,value:a.value}}validateType(e,t,r,n,s){let{type:i}=t;switch(i){case "string":return this.validateString(e,t);case "number":return this.validateNumber(e,t);case "bool":return this.validateBoolean(e);case "array":return this.validateArray(e,t);case "arrayOf":return this.validateArrayOf(e,t,r,n,s);case "object":return this.validatePlainObject(e);case "shape":return this.validateShape(e,t,r,n,s);case "oneOfType":return this.validateOneOfType(e,t);case "func":return this.validateFunction(e);case "node":return {valid:true,value:e};default:return {valid:true,value:e}}}validateString(e,t){return typeof e!="string"?{valid:false,error:`Expected string, got ${this.describeType(e)}`}:t.oneOf&&!t.oneOf.includes(e)?{valid:false,error:`Expected one of: ${t.oneOf.join(", ")}`}:t.minLength!==void 0&&e.length<t.minLength?{valid:false,error:`String length must be >= ${t.minLength}`}:t.maxLength!==void 0&&e.length>t.maxLength?{valid:false,error:`String length must be <= ${t.maxLength}`}:t.pattern&&!new RegExp(t.pattern).test(e)?{valid:false,error:`String does not match pattern ${t.pattern}`}:{valid:true,value:e}}validateNumber(e,t){return typeof e!="number"||Number.isNaN(e)?{valid:false,error:`Expected number, got ${this.describeType(e)}`}:t.min!==void 0&&e<t.min?{valid:false,error:`Number must be >= ${t.min}`}:t.max!==void 0&&e>t.max?{valid:false,error:`Number must be <= ${t.max}`}:t.oneOf&&!t.oneOf.includes(e)?{valid:false,error:`Expected one of: ${t.oneOf.join(", ")}`}:{valid:true,value:e}}validateBoolean(e){return typeof e!="boolean"?{valid:false,error:`Expected boolean, got ${this.describeType(e)}`}:{valid:true,value:e}}validateArray(e,t){return Array.isArray(e)?t.minLength!==void 0&&e.length<t.minLength?{valid:false,error:`Array length must be >= ${t.minLength}`}:t.maxLength!==void 0&&e.length>t.maxLength?{valid:false,error:`Array length must be <= ${t.maxLength}`}:{valid:true,value:[...e]}:{valid:false,error:`Expected array, got ${this.describeType(e)}`}}validateArrayOf(e,t,r,n,s){let i=this.validateArray(e,t);if(!i.valid)return i;let a=[],d=t.itemType,c=t.itemOneOf,u=s.length;return i.value.forEach((g,h)=>{let p=[...r,String(h)];if(d){let f=this.validateType(g,{type:d},p,n,s);f.valid?a.push(f.value):s.push({path:this.buildPath(p),message:f.error??"Invalid array item",value:g});}else a.push(g);c&&!c.includes(g)&&s.push({path:this.buildPath(p),message:`Array item must be one of: ${c.join(", ")}`,value:g});}),{valid:s.length===u,value:a}}validatePlainObject(e){return this.isPlainObject(e)?{valid:true,value:{...e}}:{valid:false,error:`Expected object, got ${this.describeType(e)}`}}validateFunction(e){return typeof e!="function"?{valid:false,error:`Expected function, got ${this.describeType(e)}`}:{valid:true,value:e}}validateShape(e,t,r,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 Ze=class{handlebars;propsValidator;constructor(e){this.handlebars=le__default.create(),this.propsValidator=e??new Qe,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",un),le__default.helpers.each&&this.handlebars.registerHelper("each",le__default.helpers.each),le__default.helpers.if&&this.handlebars.registerHelper("if",le__default.helpers.if),le__default.helpers.unless&&this.handlebars.registerHelper("unless",le__default.helpers.unless),le__default.helpers.with&&this.handlebars.registerHelper("with",le__default.helpers.with),this.handlebars.registerHelper("eq",function(e,t){return e===t}),this.handlebars.registerHelper("ne",function(e,t){return e!==t}),this.handlebars.registerHelper("gt",function(e,t){return e>t}),this.handlebars.registerHelper("lt",function(e,t){return e<t}),this.handlebars.registerHelper("json",function(e){return new le__default.SafeString(JSON.stringify(e))}),this.handlebars.registerHelper("raw",function(e){return typeof e?.fn=="function"?e.fn(this):""}),this.handlebars.registerHelper("escapeHandlebars",function(e){return typeof e!="string"?"":e.replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;")}),this.handlebars.registerHelper("formatFileSize",function(e){if(e===0)return "0 B";let t=["B","KB","MB","GB"],r=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/Math.pow(1024,r)*100)/100+" "+t[r]});}executeValidation(e,t,r){try{return this.propsValidator.validate(e,t,r)}catch(n){if(n instanceof me&&n.errors&&n.errors.length>0){let s=n.errors[0];if(s)throw new me(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 ir="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function ws(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+=ir[n%62]);}for(;t.length<o;)t+=ir[randomBytes(1)[0]%62];return t}function Te(o){return `${o}_${ws(8)}`}function xs(o,e){let{createHash:t}=V("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+=ir[i%62];return `${o}_${s}`}l();function ar(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 gn(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 et=class{_emitter=new EventEmitter;on(e,t){let r=gn(e,t);return this._emitter.on(e,r),()=>this._emitter.off(e,r)}once(e,t){let r=gn(e,t);return this._emitter.once(e,r),()=>this._emitter.off(e,r)}emit(e,t){this._emitter.emit(e,t);}};l();function dr(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 lr=new AsyncLocalStorage;function _s(){return lr}function As(o,e){return lr.run(o,e)}function cr(o){let e=o.log??o.logger??{debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},t=o.agentRunner??{run:async()=>({output:""})},r=o.db??{get:async()=>{},set:async()=>{},delete:async()=>false,list:async()=>[]},n=o.storage??{put:async()=>"",get:async()=>{},delete:async()=>false},s=o.audit??{log:async()=>{}},i=o.onInbound??(async()=>({accepted:true})),a=o.onEmitEvent??(async()=>({accepted:true})),d=o.onUpdateMessage??(async()=>{}),c=o.onResolveUser??(async h=>({userId:h,displayName:h})),u=async h=>{let p=lr.getStore();if(!p){e.warn("respondSync called outside sync window \u2014 graceful degradation (no-op)",{textPreview:typeof h=="object"&&"text"in h?h.text.slice(0,80):void 0});return}let f="text"in h?h.text:"";p.res.status(200).json({text:f});},g=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:g,inbound:i,emitEvent:a,updateMessage:d,resolveUser:c,respondSync:u}}Fe();l();var Rs=/^-\s*Status:\s*active/m,Ps=/^---\n([\s\S]*?)\n---/,Cs=/^type:\s*goal\s*$/m;async function mn(o,e=Pe,t){let r=typeof t=="string"?[t]:Array.isArray(t)?t:void 0;if(r){let a=[];for(let d of r){let c=e.resolvePath(o,d);await e.exists(c)&&a.push(await e.readFile(c));}return a.join(`
43
+ </exec-output>`}catch{return Ge({command:n,status:"error",reason:"execution failed"}),`(exec failed: ${n})`}}l();function an(n){return n==null?"":String(n)}l();function dn(n,e){return `\`\`\`${e?.hash?.lang??""}
44
+ ${n??""}
45
+ \`\`\``}l();function nr(n,e){if(!n)return "";if(n.length<=e)return n;let t=n.length-e;return `${n.substring(0,e)} (...+${t} chars)`}function or(n){return Array.isArray(n)||typeof n=="string"?n.length:0}function sr(n){return typeof n!="string"?"":n.replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;")}var ln=["B","KB","MB","GB"];function ir(n){if(n===0)return "0 B";let e=Math.min(Math.floor(Math.log(n)/Math.log(1024)),ln.length-1);return `${Math.round(n/Math.pow(1024,e)*100)/100} ${ln[e]}`}function ar(n){if(!n)return "";try{let e=n instanceof Date?n:new Date(n);return isNaN(e.getTime())?"":e.toLocaleString("ko-KR",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}catch{return ""}}var Ye=class{hbs;execPolicy;execEnabled;constructor(e={}){this.hbs=le.create(),this.execPolicy=e.execPolicy??{allow:[],deny:[]},this.execEnabled=e.execEnabled??true,this.registerHelpers();}registerHelpers(){let e=this.hbs,t=this.execPolicy,r=this.execEnabled;e.registerHelper("exec",function(o){return typeof o!="string"?"":r?new e.SafeString(sn(o,t)):"(exec disabled)"}),e.registerHelper("include",function(o){return new e.SafeString(an(o))}),e.registerHelper("fenced_code",function(o,s){return new e.SafeString(dn(o,s))}),e.registerHelper("eq",function(o,s){return o===s}),e.registerHelper("ne",function(o,s){return o!==s}),e.registerHelper("and",function(o,s){return o&&s}),e.registerHelper("or",function(o,s){return o||s}),e.registerHelper("not",function(o){return !o}),e.registerHelper("contains",function(o,s){return Array.isArray(o)&&o.includes(s)}),e.registerHelper("json",function(o){return JSON.stringify(o,null,2)}),e.registerHelper("truncate",function(o,s){return nr(o,s)}),e.registerHelper("length",function(o){return or(o)}),e.registerHelper("escapeHandlebars",function(o){return new e.SafeString(sr(o))}),e.registerHelper("formatFileSize",function(o){return ir(o)}),e.registerHelper("formatTimestamp",function(o){return ar(o)});}async render(e,t={}){return this.hbs.compile(e,{noEscape:true})(t)}};l();l();var Ct=class{async readFile(e){return readFile(e,"utf-8")}async exists(e){try{return await access(e),!0}catch{return false}}resolvePath(...e){return e.length===1?resolve(e[0]):resolve(join(...e))}isAbsolute(e){return isAbsolute(e)}async readdir(e){try{return await readdir(e)}catch{return []}}},Pe=new Ct;var Ce=class{docs=new Map;fs;constructor(e){this.fs=e??Pe;}async load(e,t){if(e)for(let[r,o]of Object.entries(e)){let s=o;if(typeof s=="string")this.docs.set(r,{content:s});else if(s&&typeof s=="object"){let i=s;"content"in i&&typeof i.content=="string"?this.docs.set(r,{content:i.content}):"path"in i&&typeof i.path=="string"?await this.loadFromFile(r,i.path,t):console.warn(`[DocumentLoader] Skipping '${r}': unsupported format`);}else console.warn(`[DocumentLoader] Skipping '${r}': unsupported format`);}}async getContent(e){return this.docs.get(e)?.content}async getToc(e){let t=this.docs.get(e);if(!t)return;let r=[];for(let o of t.content.split(`
46
+ `)){let s=/^(#{1,6})\s+(.+)$/.exec(o.trim());s&&r.push({depth:s[1].length,text:s[2].trim()});}if(r.length!==0)return r.map(({depth:o,text:s})=>`${" ".repeat(o-1)}- ${s}`).join(`
47
+ `)}getPath(e){return this.docs.get(e)?.path}getNames(){return Array.from(this.docs.keys())}async buildContext(){let e={};for(let t of this.docs.keys()){let r=await this.getContent(t)??"",o=await this.getToc(t),s=this.getPath(t);e[t]={content:r,toc:o,...s?{path:s}:{}};}return e}async loadFromFile(e,t,r){try{let o=this.resolve(t,r),s=await this.fs.readFile(o);this.docs.set(e,{content:s,path:o});}catch(o){let s=o instanceof Error?o.message:String(o);console.warn(`[DocumentLoader] Failed to load '${e}' from '${t}': ${s}`);}}resolve(e,t){return this.fs.isAbsolute(e)?e:t?this.fs.resolvePath(t,e):this.fs.resolvePath(e)}};l();l();var X=class extends Error{constructor(t,r,o){super(t);this.layoutId=r;this.cause=o;this.name="LayoutLoadError";}layoutId;cause},me=class extends Error{constructor(t,r=[],o){super(t);this.errors=r;this.cause=o;this.name="PropsValidationError";}errors;cause};var xs={validationMode:"lenient",fallbackLayoutId:"crewx/default"},Qe=class{layouts=new Map;options;constructor(e){this.options={...xs,...e,templatesPath:e?.templatesPath??Le()},this.loadAllLayouts();}load(e,t){let r=this.layouts.get(e);if(!r){let o=this.normalizeLayoutId(e);r=this.layouts.get(o);}if(!r&&(console.warn(`Layout not found: ${e}, falling back to ${this.options.fallbackLayoutId}`),r=this.layouts.get(this.options.fallbackLayoutId),!r))throw new X(`Fallback layout not found: ${this.options.fallbackLayoutId}`,this.options.fallbackLayoutId);return t&&Object.keys(t).length>0?{...r,defaultProps:{...r.defaultProps,...t}}:r}getLayoutIds(){return Array.from(this.layouts.keys())}hasLayout(e){if(this.layouts.has(e))return true;let t=this.normalizeLayoutId(e);return this.layouts.has(t)}reload(){this.layouts.clear(),this.loadAllLayouts();}registerLayout(e,t){if(!e||typeof e!="string")throw new X("Layout ID must be a non-empty string",e);let r=typeof t=="string"?{template:t}:t,o=typeof r.template=="string"?r.template:"";if(!o||o.trim().length===0)throw new X(`Custom layout template is empty for ${e}`,e);let s=r.propsSchema||{},i=this.extractDefaultProps(s),a=r.defaultProps||{},d={id:e,version:r.version||"1.0.0",description:r.description||`Custom layout ${e}`,template:o,propsSchema:this.parsePropsSchema(s),defaultProps:{...i,...a}},c=this.layouts.get(e),u=c?.template===o&&JSON.stringify(c?.defaultProps??{})===JSON.stringify(d.defaultProps??{})&&JSON.stringify(c?.propsSchema??{})===JSON.stringify(d.propsSchema??{});this.layouts.set(e,d),process.env.CREWX_VERBOSE==="1"&&(c?u||console.error(`Updated custom layout: ${e}`):console.error(`Registered custom layout: ${e}`));}registerLayouts(e){for(let[t,r]of Object.entries(e))try{this.registerLayout(t,r);}catch(o){console.warn(`Failed to register custom layout ${t}:`,o instanceof Error?o.message:o);}}loadAllLayouts(){let e=this.options.templatesPath;if(!existsSync(e))throw new X(`Templates directory not found: ${e}`,void 0,new Error(`Directory does not exist: ${e}`));try{let t=readdirSync(e).filter(r=>r.endsWith(".yaml")||r.endsWith(".yml"));t.length===0&&console.warn(`No layout files found in ${e}`);for(let r of t){let o=r.replace(/\.(yaml|yml)$/,""),s=z.join(e,r);try{let i=this.loadLayoutFile(s,o),a=`crewx/${o}`;this.layouts.set(a,i),a!=="crewx/minimal"&&process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded layout: ${a} from ${r}`);}catch(i){console.error(`Failed to load layout file ${r}:`,i);}}process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded ${this.layouts.size} layouts from ${e}`);}catch(t){throw new X(`Failed to read layouts directory: ${e}`,void 0,t instanceof Error?t:new Error(String(t)))}}loadLayoutFile(e,t){try{let r=readFileSync(e,"utf-8");if(!r||r.trim().length===0)throw console.warn(`Empty YAML file: ${e}, will use fallback`),new X(`Empty YAML file: ${e}`,t,new Error("File content is empty"));let o=load(r);if(!o||typeof o!="object")throw console.warn(`Invalid YAML content in ${e} (parsed as ${typeof o}), will use fallback`),new X(`Invalid or empty YAML in ${e}`,t,new Error("YAML parsing returned null/undefined or non-object"));if(o.layouts&&typeof o.layouts=="object"){let s=this.resolveLayoutEntry(o.layouts,t);if(!s||s.template.trim().length===0)throw console.warn(`Empty or missing layout template in ${e} for ${t}`),new X(`Layout template not found or empty in layouts map: ${t}`,t);let i=s.propsSchema||o.propsSchema||{};return {id:`crewx/${t}`,version:o.version||"1.0.0",description:o.description||`CrewX ${t} layout`,template:s.template,propsSchema:this.parsePropsSchema(i),defaultProps:this.extractDefaultProps(i)}}else {if(!o.template||typeof o.template=="string"&&o.template.trim().length===0)throw console.warn(`Empty or missing template field in ${e}`),new X(`Layout template is missing or empty in ${e}`,t);return {id:o.id||`crewx/${t}`,version:o.version||"1.0.0",description:o.description||"",template:o.template,propsSchema:this.parsePropsSchema(o.propsSchema||{}),defaultProps:this.extractDefaultProps(o.propsSchema||{})}}}catch(r){throw new X(`Failed to load layout file: ${e}`,t,r instanceof Error?r:new Error(String(r)))}}parsePropsSchema(e){let t={};for(let[r,o]of Object.entries(e))typeof o=="object"&&o!==null&&(t[r]=o);return t}extractDefaultProps(e){let t={};for(let[r,o]of Object.entries(e))o&&typeof o=="object"&&("defaultValue"in o?t[r]=o.defaultValue:"default"in o&&(t[r]=o.default));return t}normalizeLayoutId(e){return e?e.includes("/")?e:`crewx/${e}`:this.options.fallbackLayoutId}resolveLayoutEntry(e,t){let r=new Set;if(t)if(r.add(t),t.includes("/")){let o=t.split("/"),s=o[o.length-1];s&&r.add(s);}else r.add(`crewx/${t}`);r.add("default");for(let o of r){let s=e[o];if(typeof s=="string"&&s.trim().length>0)return {template:s};if(s&&typeof s=="object"&&typeof s.template=="string"&&s.template.trim().length>0)return {template:s.template,propsSchema:s.propsSchema}}for(let o of Object.values(e)){if(typeof o=="string"&&o.trim().length>0)return {template:o};let s=o;if(s&&typeof s=="object"&&typeof s.template=="string"&&s.template.trim().length>0)return {template:s.template,propsSchema:s.propsSchema}}}};l();l();l();function Te(n){return String(Math.floor(Math.abs(n))).padStart(2,"0")}function Ze(n){if(!(n instanceof Date)||Number.isNaN(n.getTime()))return "";let e=-n.getTimezoneOffset(),t=e>=0?"+":"-";return `${n.getFullYear()}-${Te(n.getMonth()+1)}-${Te(n.getDate())}T${Te(n.getHours())}:${Te(n.getMinutes())}:${Te(n.getSeconds())}${t}${Te(e/60)}:${Te(e%60)}`}function gn(n){if(!Number.isFinite(n))return "";let e=Math.floor(n/1e3);if(e<=0)return "just now";if(e<60)return `${e}s ago`;let t=Math.floor(e/60);if(t<60)return `${t}m ago`;let r=Math.floor(t/60);return r<24?`${r}h ago`:`${Math.floor(r/24)}d ago`}function ks(n,e){return n.map(t=>{let r=typeof t?.timestamp=="number"?t.timestamp:null;return r===null?t:{...t,created_at:Ze(new Date(r)),relative_time:gn(e-r)}})}function vs(n){return Array.from(new Set(n.filter(e=>e?.isAssistant&&e?.metadata?.agent_id).map(e=>String(e.metadata.agent_id))))}function mn(...n){let e=n[n.length-1],t=n[0],r=n[1],o=typeof n[2]=="string"?n[2]:"",s=typeof n[3]=="string"?n[3]:"";if(!Array.isArray(t)||t.length===0||!(e&&typeof e.fn=="function"))return "";let a=vs(t),d=a.length>0?a[0]:"",c=Date.now(),u={messages:ks(t,c),platform:typeof r=="string"?r:"",messagesCount:t.length,agentIds:a,primaryAgentId:d,currentAgentId:o,threadId:s,now:Ze(new Date(c))};return e.fn(u)}l();var et=class{defaultMode;constructor(e={}){this.defaultMode=e.defaultMode??"lenient";}validate(e,t,r=this.defaultMode){let o=[],s=this.validateObject(e??{},t,r,["props"],o);if(o.length>0&&r==="strict")throw new me("Props validation failed in strict mode",o);return {valid:o.length===0,props:s,errors:o}}validateObject(e,t,r,o,s){let i={};if(r==="strict")for(let a of Object.keys(e))t[a]||s.push({path:this.buildPath([...o,a]),message:`Unknown prop '${a}'`,value:e[a]});for(let[a,d]of Object.entries(t)){let c=[...o,a],u=e[a],g=this.resolveProp(u,d,c,r,s);g.shouldAssign&&(i[a]=g.value);}return i}resolveProp(e,t,r,o,s){let i=this.buildPath(r);if(this.isNil(e)){if(t.isRequired&&s.push({path:i,message:`Required prop '${r[r.length-1]}' is missing`}),t.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(t.defaultValue)};if(t.type==="shape"&&t.shape){let d=this.applyDefaults(t.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}let a=this.validateType(e,t,r,o,s);if(!a.valid){if(t.type==="shape"&&a.value&&this.isPlainObject(a.value))return {shouldAssign:true,value:a.value};if(s.push({path:i,message:a.error??"Invalid value",value:e}),t.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(t.defaultValue)};if(t.type==="shape"&&t.shape){let d=this.applyDefaults(t.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}return {shouldAssign:true,value:a.value}}validateType(e,t,r,o,s){let{type:i}=t;switch(i){case "string":return this.validateString(e,t);case "number":return this.validateNumber(e,t);case "bool":return this.validateBoolean(e);case "array":return this.validateArray(e,t);case "arrayOf":return this.validateArrayOf(e,t,r,o,s);case "object":return this.validatePlainObject(e);case "shape":return this.validateShape(e,t,r,o,s);case "oneOfType":return this.validateOneOfType(e,t);case "func":return this.validateFunction(e);case "node":return {valid:true,value:e};default:return {valid:true,value:e}}}validateString(e,t){return typeof e!="string"?{valid:false,error:`Expected string, got ${this.describeType(e)}`}:t.oneOf&&!t.oneOf.includes(e)?{valid:false,error:`Expected one of: ${t.oneOf.join(", ")}`}:t.minLength!==void 0&&e.length<t.minLength?{valid:false,error:`String length must be >= ${t.minLength}`}:t.maxLength!==void 0&&e.length>t.maxLength?{valid:false,error:`String length must be <= ${t.maxLength}`}:t.pattern&&!new RegExp(t.pattern).test(e)?{valid:false,error:`String does not match pattern ${t.pattern}`}:{valid:true,value:e}}validateNumber(e,t){return typeof e!="number"||Number.isNaN(e)?{valid:false,error:`Expected number, got ${this.describeType(e)}`}:t.min!==void 0&&e<t.min?{valid:false,error:`Number must be >= ${t.min}`}:t.max!==void 0&&e>t.max?{valid:false,error:`Number must be <= ${t.max}`}:t.oneOf&&!t.oneOf.includes(e)?{valid:false,error:`Expected one of: ${t.oneOf.join(", ")}`}:{valid:true,value:e}}validateBoolean(e){return typeof e!="boolean"?{valid:false,error:`Expected boolean, got ${this.describeType(e)}`}:{valid:true,value:e}}validateArray(e,t){return Array.isArray(e)?t.minLength!==void 0&&e.length<t.minLength?{valid:false,error:`Array length must be >= ${t.minLength}`}:t.maxLength!==void 0&&e.length>t.maxLength?{valid:false,error:`Array length must be <= ${t.maxLength}`}:{valid:true,value:[...e]}:{valid:false,error:`Expected array, got ${this.describeType(e)}`}}validateArrayOf(e,t,r,o,s){let i=this.validateArray(e,t);if(!i.valid)return i;let a=[],d=t.itemType,c=t.itemOneOf,u=s.length;return i.value.forEach((g,h)=>{let p=[...r,String(h)];if(d){let f=this.validateType(g,{type:d},p,o,s);f.valid?a.push(f.value):s.push({path:this.buildPath(p),message:f.error??"Invalid array item",value:g});}else a.push(g);c&&!c.includes(g)&&s.push({path:this.buildPath(p),message:`Array item must be one of: ${c.join(", ")}`,value:g});}),{valid:s.length===u,value:a}}validatePlainObject(e){return this.isPlainObject(e)?{valid:true,value:{...e}}:{valid:false,error:`Expected object, got ${this.describeType(e)}`}}validateFunction(e){return typeof e!="function"?{valid:false,error:`Expected function, got ${this.describeType(e)}`}:{valid:true,value:e}}validateShape(e,t,r,o,s){if(!this.isPlainObject(e))return {valid:false,error:`Expected object, got ${this.describeType(e)}`};let i=s.length,a=this.validateObject(e,t.shape??{},o,r,s);return {valid:s.length===i,value:a}}validateOneOfType(e,t){let r=t.types??[];return r.some(s=>this.matchesType(e,s))?{valid:true,value:e}:{valid:false,error:`Value does not match any allowed type: ${r.join(", ")}`}}matchesType(e,t){switch(t){case "string":return typeof e=="string";case "number":return typeof e=="number"&&!Number.isNaN(e);case "bool":case "boolean":return typeof e=="boolean";case "array":return Array.isArray(e);case "object":return this.isPlainObject(e);case "func":case "function":return typeof e=="function";case "shape":return this.isPlainObject(e);case "node":return e==null||typeof e!="symbol";default:return true}}applyDefaults(e){let t={};for(let[r,o]of Object.entries(e)){if(o.defaultValue!==void 0){t[r]=this.cloneValue(o.defaultValue);continue}if(o.type==="shape"&&o.shape){let s=this.applyDefaults(o.shape);Object.keys(s).length>0&&(t[r]=s);}}return t}cloneValue(e){if(Array.isArray(e))return e.map(t=>this.cloneValue(t));if(this.isPlainObject(e)){let t={};for(let[r,o]of Object.entries(e))t[r]=this.cloneValue(o);return t}return e}isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}isNil(e){return e==null}buildPath(e){return e.join(".")}describeType(e){return Array.isArray(e)?"array":e===null?"null":typeof e}};var tt=class{handlebars;propsValidator;constructor(e){this.handlebars=le__default.create(),this.propsValidator=e??new et,this.registerHelpers();}render(e,t,r={}){try{let o=this.prepareRenderContext(e,t,r);return this.handlebars.compile(e.template,{noEscape:!0})(o)}catch(o){throw o instanceof Error?new Error(`Template rendering failed for layout '${e.id}': ${o.message}`):new Error(`Unknown error rendering layout '${e.id}'`)}}validate(e,t,r="lenient"){return this.executeValidation(e,t,r)}resolveProps(e,t,r="lenient"){let o=this.mergeProps(e.defaultProps,t);return !e.propsSchema||Object.keys(e.propsSchema).length===0?{valid:true,props:o,errors:[]}:this.executeValidation(o,e.propsSchema,r)}prepareRenderContext(e,t,r){let{validationMode:o="lenient",skipValidation:s=false}=r,i=s?this.mergeProps(e.defaultProps,t.props):this.resolveProps(e,t.props,o).props;return {...t,vars:this.sanitizeVars(t.vars),props:i}}registerHelpers(){this.handlebars.registerHelper("formatConversation",mn),le__default.helpers.each&&this.handlebars.registerHelper("each",le__default.helpers.each),le__default.helpers.if&&this.handlebars.registerHelper("if",le__default.helpers.if),le__default.helpers.unless&&this.handlebars.registerHelper("unless",le__default.helpers.unless),le__default.helpers.with&&this.handlebars.registerHelper("with",le__default.helpers.with),this.handlebars.registerHelper("eq",function(e,t){return e===t}),this.handlebars.registerHelper("ne",function(e,t){return e!==t}),this.handlebars.registerHelper("gt",function(e,t){return e>t}),this.handlebars.registerHelper("lt",function(e,t){return e<t}),this.handlebars.registerHelper("json",function(e){return new le__default.SafeString(JSON.stringify(e))}),this.handlebars.registerHelper("raw",function(e){return typeof e?.fn=="function"?e.fn(this):""}),this.handlebars.registerHelper("escapeHandlebars",function(e){return typeof e!="string"?"":e.replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;")}),this.handlebars.registerHelper("formatFileSize",function(e){if(e===0)return "0 B";let t=["B","KB","MB","GB"],r=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/Math.pow(1024,r)*100)/100+" "+t[r]});}executeValidation(e,t,r){try{return this.propsValidator.validate(e,t,r)}catch(o){if(o instanceof me&&o.errors&&o.errors.length>0){let s=o.errors[0];if(s)throw new me(s.message,o.errors)}throw o}}mergeProps(e,t){let r=this.cloneDeep(e??{});return t?this.deepMerge(r,t):r}deepMerge(e,t){for(let[r,o]of Object.entries(t)){if(this.isPlainObject(o)){let s=e[r];e[r]=this.deepMerge(this.isPlainObject(s)?s:{},o);continue}if(Array.isArray(o)){e[r]=this.cloneDeep(o);continue}e[r]=o;}return e}cloneDeep(e){if(Array.isArray(e))return e.map(t=>this.cloneDeep(t));if(this.isPlainObject(e)){let t={};for(let[r,o]of Object.entries(e))t[r]=this.cloneDeep(o);return t}return e}isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}sanitizeVars(e){if(!e)return {};let t={...e};if(typeof e.user_input=="string"){t.user_input_raw=e.user_input;let r=e.user_input.replace(/\{\{\{/g,"&#123;&#123;&#123;").replace(/\}\}\}/g,"&#125;&#125;&#125;").replace(/\{\{/g,"&#123;&#123;").replace(/\}\}/g,"&#125;&#125;");t.user_input=this.handlebars.escapeExpression(r);}return t}};l();var dr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function _s(n){let e=randomBytes(n*2),t="";for(let r=0;r<e.length&&t.length<n;r++){let o=e[r];o<248&&(t+=dr[o%62]);}for(;t.length<n;)t+=dr[randomBytes(1)[0]%62];return t}function be(n){return `${n}_${_s(8)}`}function As(n,e){let{createHash:t}=V("crypto"),r=t("sha256").update(e).digest(),o=Buffer.alloc(8);for(let i=0;i<32;i++)o[i%8]^=r[i];let s="";for(let i of o)s+=dr[i%62];return `${n}_${s}`}l();function lr(n){let e=t=>String(t).padStart(2,"0");return `${n.getFullYear()}${e(n.getMonth()+1)}${e(n.getDate())}T${e(n.getHours())}${e(n.getMinutes())}${e(n.getSeconds())}`}l();function yn(n,e){return t=>{try{let r=e(t);r instanceof Promise&&r.catch(o=>{console.error(`[crewx] event listener error (${n}): ${o instanceof Error?o.message:String(o)}`);});}catch(r){console.error(`[crewx] event listener error (${n}): ${r instanceof Error?r.message:String(r)}`);}}}var rt=class{_emitter=new EventEmitter;on(e,t){let r=yn(e,t);return this._emitter.on(e,r),()=>this._emitter.off(e,r)}once(e,t){let r=yn(e,t);return this._emitter.once(e,r),()=>this._emitter.off(e,r)}emit(e,t){this._emitter.emit(e,t);}};l();function cr(n){let e=new Map,t=r=>r.startsWith(`${n}::`)?r:`${n}::${r}`;return {async get(r){let o=e.get(t(r));return o?o.value:void 0},async set(r,o){e.set(t(r),{value:o});},async delete(r){return e.delete(t(r))},async list(r){let o=r?t(r):`${n}::`,s=[];for(let i of e.keys())i.startsWith(o)&&s.push(i.slice(n.length+2));return s}}}l();var ur=new AsyncLocalStorage;function Cs(){return ur}function Ts(n,e){return ur.run(n,e)}function pr(n){let e=n.log??n.logger??{debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},t=n.agentRunner??{run:async()=>({output:""})},r=n.db??{get:async()=>{},set:async()=>{},delete:async()=>false,list:async()=>[]},o=n.storage??{put:async()=>"",get:async()=>{},delete:async()=>false},s=n.audit??{log:async()=>{}},i=n.onInbound??(async()=>({accepted:true})),a=n.onEmitEvent??(async()=>({accepted:true})),d=n.onUpdateMessage??(async()=>{}),c=n.onResolveUser??(async h=>({userId:h,displayName:h})),u=async h=>{let p=ur.getStore();if(!p){e.warn("respondSync called outside sync window \u2014 graceful degradation (no-op)",{textPreview:typeof h=="object"&&"text"in h?h.text.slice(0,80):void 0});return}let f="text"in h?h.text:"";p.res.status(200).json({text:f});},g=n.httpRouter??{registerRoute:()=>{e.warn("httpRouter not configured \u2014 registerRoute is a no-op");}};return {instanceId:n.instanceId,config:n.config,capabilities:n.capabilities,log:e,agentRunner:t,db:r,storage:o,audit:s,abortSignal:n.abortSignal??new AbortController().signal,httpRouter:g,inbound:i,emitEvent:a,updateMessage:d,resolveUser:c,respondSync:u}}He();l();var bs=/^-\s*Status:\s*active/m,Es=/^---\n([\s\S]*?)\n---/,Ss=/^type:\s*goal\s*$/m;async function hn(n,e=Pe,t){let r=typeof t=="string"?[t]:Array.isArray(t)?t:void 0;if(r){let a=[];for(let d of r){let c=e.resolvePath(n,d);await e.exists(c)&&a.push(await e.readFile(c));}return a.join(`
48
48
  ---
49
- `)}let s=(await e.readdir(o)).filter(a=>a.endsWith(".md"));if(s.length===0)return "";let i=[];for(let a of s){let d=e.resolvePath(o,a),c=await e.readFile(d),u=Ps.exec(c);!u||!Cs.test(u[1])||Rs.test(c)&&i.push(c);}return i.join(`
49
+ `)}let s=(await e.readdir(n)).filter(a=>a.endsWith(".md"));if(s.length===0)return "";let i=[];for(let a of s){let d=e.resolvePath(n,a),c=await e.readFile(d),u=Es.exec(c);!u||!Ss.test(u[1])||bs.test(c)&&i.push(c);}return i.join(`
50
50
  ---
51
- `)}l();function Ts(){let o=new Date,e=o.getFullYear(),t=String(o.getMonth()+1).padStart(2,"0"),r=String(o.getDate()).padStart(2,"0");return `${e}-${t}-${r}`}async function fn(o,e=Pe){let t=e.resolvePath(o,`${Ts()}.md`);return await e.exists(t)?e.readFile(t):""}Fe();l();var tt=new AsyncLocalStorage;function ur(o){if(o)return {parentTaskId:o.parentTaskId??null,rootTraceId:o.rootTraceId,callerAgentId:o.callerAgentId??null}}l();function Es(o){return typeof o!="string"?"":o.replace(/</g,"&lt;").replace(/>/g,"&gt;")}function pr(o){return o.messages.map(e=>({text:Es(e.text),isAssistant:e.isAssistant,metadata:e.metadata,files:void 0}))}l();l();var Ss={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")},Is={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 yn(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",Ss,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)",Is,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 hn(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 wn(o,e){return e?await e(o)?null:new Response(JSON.stringify({error:"Unauthorized"}),{status:401,headers:{"Content-Type":"application/json"}}):null}function Ns(o,e){let t=new McpServer({name:"crewx-mcp-server",version:"1.0.0"},{capabilities:{tools:{}}});return yn(t,o,e),t}function gr(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=hn(n);if(s)return s;let i=await wn(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=Ns(o,t),c=new WebStandardStreamableHTTPServerTransport({sessionIdGenerator:()=>crypto.randomUUID(),onsessioninitialized:u=>{r.set(u,{transport:c,server:d});},onsessionclosed:u=>{r.delete(u);},enableJsonResponse:true});return await d.connect(c),c.handleRequest(n)}}l();function kn(o){let e=z.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 mr(o){let e=kn(o);return createHash("sha256").update(e).digest("hex")}function di(o){return o?o.settings?.template?.exec:void 0}function li(){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}=V("crypto");return o(8).toString("hex")}}var Sr=class o extends et{_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=mr(i),this._workspaceName=basename(i);let a=di(r);this._templateEngine=new Ge({execPolicy:t.execPolicy??a}),this._documentLoader=n??new Ce,this._layoutLoader=new Ye({templatesPath:Le()}),this._layoutRenderer=new Ze,this._remoteFactory=t.remoteFactory;}async resolveFileRemoteTarget(e){let t=this.getAgent(e),r=Array.isArray(t?.provider)?t?.provider[0]:t?.provider;if(!r?.startsWith("remote/"))return null;let n=r.slice(7),s=this.getRemoteProviderConfig(n);if(!s?.location?.startsWith("file://"))return null;let i=resolve(s.location.replace("file://","")),a=s.external_agent_id??e.replace(/^@/,""),d=this._remoteTargets.get(i);d||(d=(this._remoteFactory??(p=>o.loadYaml(p)))(i),this._remoteTargets.set(i,d),d.catch(()=>this._remoteTargets.delete(i)));let c=await d,u=c.getAgent("@"+a),g=Array.isArray(u?.provider)?u?.provider[0]:u?.provider;if(g?.startsWith("remote/"))throw new Error(`Chained remotes not allowed: "${n}" \u2192 "${g}"`);return {target:c,agentRef:"@"+a}}static async loadBuiltInConfig(e){let{yamlPath:t,dir:r}=Wt(),n;try{n=readFileSync(t,"utf-8");}catch(i){throw new Error(`[@crewx/sdk] Cannot read built-in config: ${t}
52
- ${i.message}`)}let s=pt(n);if(s.documents&&typeof s.documents=="object"){let i={};for(let[a,d]of Object.entries(s.documents))if(d&&typeof d=="object"){let c=d;typeof c.path=="string"&&!isAbsolute(c.path)?i[a]={...c,path:resolve(r,c.path)}:i[a]=c;}else i[a]=d;return {...s,documents:i}}return s}static mergeCrewxConfig(e,t){let r=new Map;for(let v of e.agents??[])r.set(v.id,v);for(let v of t.agents??[])r.has(v.id)&&console.warn(`[agent-loader] User agent "${v.id}" overrides built-in`),r.set(v.id,v);let n=Array.from(r.values()),s={...e.layouts??{},...t.layouts??{}},i={...e.documents??{},...t.documents??{}},a=e,d=t,c=Un(a.vars,d.vars),u=Un(a.settings,d.settings),g;e.skills&&t.skills&&typeof e.skills=="object"&&typeof t.skills=="object"&&!Array.isArray(e.skills)&&!Array.isArray(t.skills)?g={...e.skills,...t.skills}:g=t.skills??e.skills;let h=[...e.hooks??[],...t.hooks??[]],p=ci(a.providers,d.providers),f={...e},x={...t};for(let v of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete f[v],delete x[v];let _={...{...f,...x},agents:n,layouts:s,documents:i,skills:g};return h.length>0&&(_.hooks=h),c!==void 0&&(_.vars=c),u!==void 0&&(_.settings=u),p!==void 0&&(_.providers=p),_}static async loadYaml(e,t,r){let n=t?.includeBuiltIns!==false,s,i;if(n){let u=await o.loadBuiltInConfig(r);if(e!==void 0){let g=gt(e);s=o.mergeCrewxConfig(u,g),i=dirname(e);}else s=u,i=process.cwd();}else {if(e===void 0)throw new Error("[@crewx/sdk] loadYaml: path is required when includeBuiltIns is false");s=gt(e),i=dirname(e);}let a=new Ce(r);await a.load(s.documents,i);let d=s.agents??[];return await Fn(d,s,t),new o(d,t??{},s,a,i)}static async fromConfig(e,t,r,n){let s=t?.includeBuiltIns===true,i=e;if(s){let u=await o.loadBuiltInConfig(n);i=o.mergeCrewxConfig(u,e);}let a=new Ce(n);await a.load(i.documents,r??(typeof process<"u"?process.cwd():"/"));let d=i.agents??[];return await Fn(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=ar(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 gr(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??dr(r),a=e.defaultMode??"query",d=t.manifest.platform,c=e.agentRunner??{run:async(p,f,x)=>{let _=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${p}`,f,{threadId:x?.threadId,platform:d});return {output:_.ok?_.data:_.error?.message??""}}},u=e.onInbound??(async p=>{let f=p.routingHints?.agentId??e.defaultAgent;if(!f)return {accepted:false,reason:"no_agent"};let{output:x}=await c.run(f,p.text,{threadId:p.threadId});return {accepted:true,output:x}}),g=cr({instanceId:r,config:n,capabilities:s,db:i,agentRunner:c,onInbound:u}),h={adapter:t,ctx:g,state:"starting"};this._activeAdapters.set(r,h),this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"starting",timestamp:new Date});try{await t.start(g),h.state="started",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"started",timestamp:new Date});}catch(p){throw h.state="failed",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"failed",error:p instanceof Error?p:new Error(String(p)),timestamp:new Date}),this._activeAdapters.delete(r),p}}async unregisterChannelAdapter(e){let t=this._activeAdapters.get(e);if(t){t.state="stopping",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"stopping",timestamp:new Date});try{await t.adapter.stop(t.ctx),t.state="stopped",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"stopped",timestamp:new Date});}catch(r){t.state="failed",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"failed",error:r instanceof Error?r:new Error(String(r)),timestamp:new Date});}finally{this._activeAdapters.delete(e);}}}async stopAllAdapters(e={}){let t=e.timeoutMs??1e4,r=Array.from(this._activeAdapters.keys()),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=>ae(a.role.toLowerCase(),d)))),n&&(i=i.filter(a=>a.team&&n.some(d=>ae(a.team.toLowerCase(),d)))),s&&(i=i.filter(a=>(Array.isArray(a.provider)?a.provider:[a.provider]).some(c=>s.some(u=>ae(c.toLowerCase(),u))))),i}renderAgentPrompt(e){let t=e.startsWith("@")?e.slice(1):e,r=this._agents.get(t);if(!r)throw new ue(t,Array.from(this._agents.keys()));return r.inline?.prompt??r.inline?.system_prompt??r.description??`You are an expert ${t}.`}async renderPrompt(e,t){let 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 ue(r,Array.from(this._agents.keys()));let s=this._resolveLayoutSpec(n,t?.layout),i=this._extractLayoutId(s),a=this._extractLayoutProps(n,s,t?.layout),d=this._layoutLoader.load(i,a),c=n.inline?.prompt??n.inline?.system_prompt??n.description??`You are an expert ${r}.`,u=await this._documentLoader.buildContext(),g=t?.env??(typeof process<"u"?process.env:{}),h=t?.vars?.security_key??li(),p={...t?.vars??{},documents:u,env:g,agent:{id:n.id,name:n.name??n.id,role:n.role??"",team:n.team??"",description:n.description??""}},f=await this._templateEngine.render(c,p),x={mode:t?.session?.mode??"query",platform:t?.session?.platform??"cli",options:t?.session?.options??[]},R=n.provider,_=Array.isArray(R)?R:typeof R=="string"&&R.length>0?[R]:[],v=_.join(", ")||(typeof R=="string"?R:""),k=n.options,I=["goals","daily"],b={goals:false,daily:false},W;if(!Array.isArray(k)&&typeof k=="object"&&k!==null){let $=k;if("goals"in $){let F=$.goals;typeof F=="string"||Array.isArray(F)?b.goals=F:b.goals=!!F;}"daily"in $&&(b.daily=!!$.daily);let B={};for(let[F,A]of Object.entries($))I.includes(F)||(B[F]=A);if(Object.keys(B).length>0){let F=_.some(N=>N.startsWith("cli/")),A={};for(let[N,E]of Object.entries(B)){let P={};if(Array.isArray(E))F&&(P.rawArgs=E);else if(typeof E=="object"&&E!==null){let H=E;Object.keys(H).length>0&&(P.named=H);}(P.named||P.rawArgs&&P.rawArgs.length>0)&&(A[N]=P);}W=Object.keys(A).length>0?A:void 0;}}let j=Array.isArray(k)?k:void 0,C={};for(let[$,B]of Object.entries(u))C[$]={content:B.content??"",toc:B.toc,summary:B.summary,path:B.path};if(b.goals){let $=join(this._projectRoot,"docs","goal"),B=await mn($,void 0,b.goals);B&&(C.active_goals={content:B});}if(b.daily){let $=join(this._projectRoot,"docs","daily"),B=await fn($);B&&(C.today_daily={content:B});}let Y={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:v,providerList:_,model:n.inline?.model,workingDirectory:n.working_directory??n.workingDirectory??".",inline:{...n.inline??{},prompt:f},specialties:n.specialties??[],capabilities:n.capabilities??[],remote:n.remote??null,optionsByMode:W,optionsArray:j},agentMetadata:{specialties:n.specialties??[],capabilities:n.capabilities??[],description:n.description??""},contextOptions:b,documents:C,skills:t?.skills??[],session:x,env:g,vars:{security_key:h,...t?.vars??{}},props:{...a??{},...t?.messages&&t.messages.length>0?{showConversationHistory:true}:{}},platform:x.platform,mode:x.mode,messages:t?.messages??[],tools:this._tools.size>0?{list:Array.from(this._tools.values()).map($=>({name:$.name,description:$.description,parameters:$.parameters})),json:JSON.stringify(Array.from(this._tools.values()).map($=>({name:$.name,description:$.description,parameters:$.parameters})),null,2),count:this._tools.size}:null,metadata:{}};return this._layoutRenderer.render(d,Y)}_filterToolsByMode(e){return e?e.map(t=>this._tools.get(t)).filter(t=>t!==void 0):Array.from(this._tools.values())}_resolveLayoutSpec(e,t){if(t!==void 0)return t;let r=e.inline?.layout;if(r!==void 0)return r;let 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:pr(s)}catch{return}}_resolveTimeout(e){let t=tn();return e==="query"?t.queryMs:t.executeMs}emitToolEvents(e,t,r,n,s,i,a){try{let c=we[r]?.parseEvent?.(n)??Zt(new Date().toISOString(),n);for(let u of c)u.type==="tool_use"&&u.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:u.toolName,rawName:u.toolName,input:u.toolInput?this.tryParseJson(u.toolInput):void 0,toolUseId:u.toolUseId}}),u.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:u.toolName??"unknown",rawName:u.toolName??"unknown",toolUseId:u.toolUseId,result:u.resultPreview,isError:u.isError}});}catch{}}emitTaskLogEntries(e,t,r,n,s,i,a){try{for(let d of a)d.type==="tool_use"&&d.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:r,threadId:n,sessionId:s,provider:i,tool:{name:d.toolName,rawName:d.toolName,input:d.toolInput?this.tryParseJson(d.toolInput):void 0,toolUseId:d.toolUseId}}),d.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:t,agentId:r,threadId:n,sessionId:s,provider:i,tool:{name:d.toolName??"unknown",rawName:d.toolName??"unknown",toolUseId:d.toolUseId,result:d.resultPreview,isError:d.isError}});}catch{}}tryParseJson(e){try{return JSON.parse(e)}catch{return e}}async query(e,t,r){let n=await this.resolveFileRemoteTarget(e);if(n)return n.target.query(n.agentRef,t,r);let s=tt.getStore()??ur(r?.trace),i=r?.taskId??Te("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null};return tt.run(d,async()=>{let c=Date.now(),u=new Date,g;try{g=ft(e,Array.from(this._agents.values()));}catch(A){if(A instanceof ue){this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let N=Date.now()-c,E={code:"AGENT_NOT_FOUND",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:E,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:E,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:N}}}throw A}d.callerAgentId=g.id;let h=Array.isArray(g.provider)?g.provider[0]??"cli/claude":g.provider,p=r?.provider??h,f=r?.model??g.inline?.model;f&&f.includes("{{")&&(f=await this._templateEngine.render(f,{...r?.vars??{}}));let x;try{x=ge(p);}catch(A){this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let N=Date.now()-c,E={code:"PROVIDER_ERROR",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:E,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:E,meta:{agentId:g.id,provider:p,model:f,durationMs:N}}}let R=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),_;try{_=await this.renderAgentPromptFull(e,{session:{mode:"query",platform:r?.platform},vars:{user_input:t,...r?.vars??{}},messages:R});}catch(A){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${A instanceof Error?A.message:String(A)}`);}let v,k,I,b=f,W=false,j=A=>{W||(W=true,this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"query",pid:A,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:b,provider:p,codingAgentCommand:v,renderedPrompt:_,metadata:{...r?.metadata??{},provider:p},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},C=g.options,q=Array.isArray(C?.query?.tools)?C.query.tools:void 0,Y=this._tools.size>0?this._filterToolsByMode(q):[],$=(()=>{let A=C?.query;if(!A||Array.isArray(A))return;let{tools:N,effort:E,mode:P,...H}=A,Q=Object.entries(H).filter(([,J])=>J!=null);if(Q.length!==0)return Object.fromEntries(Q.map(([J,Ht])=>[J,String(Ht)]))})(),B=g.inline?.max_steps;p.startsWith("api/")&&j();let F=false;try{let A=await x.query(t,{model:f,effort:C?.query?.effort,mode:C?.query?.mode,context:r?.context,systemPrompt:_??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(C?.query)?C.query:void 0,tools:Y.length>0?Y:void 0,maxSteps:B,configOptions:$,timeoutMs:this._resolveTimeout("query"),cwd:r?.cwd,env:{CREWX_AGENT_ID:g.id,CREWX_AGENT_ROLE:g.role??"",CREWX_AGENT_TEAM:g.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:p,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,u)},onPid:P=>j(P),onOutput:(P,H)=>{this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:P,level:H}),H==="stdout"&&this.emitToolEvents(i,e,p,P,g.id,r?.threadId??"","");},onTaskLog:P=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",p,P);for(let H of P)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(H),level:"info"});},onCommand:P=>{v=P;},onUsage:P=>{k=P;},onExitCode:P=>{I=P;},onModel:P=>{b||(b=P);}});j();let N=Date.now()-c,E={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",result:A,durationMs:N,exitCode:I,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:k?.costUsd,model:b,metadata:Object.keys(E).length>0?E:void 0}),F=!0,{ok:!0,data:A,meta:{agentId:g.id,provider:p,model:f,durationMs:N,taskId:i}}}catch(A){if(A instanceof se){let P=Te("thd");return this._pendingThreads.set(P,{agentRef:g.id,providerStr:p,continuationState:A.continuationState,toolCall:A.toolCall,traceId:i,startMs:c,model:f}),F=true,{ok:true,status:"requires_action",data:"",toolCall:A.toolCall,threadId:P,meta:{agentId:g.id,provider:p,model:f,durationMs:Date.now()-c,taskId:i}}}j();let N=Date.now()-c,E={code:"QUERY_FAILED",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:E,exitCode:I,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:k?.costUsd,model:b,metadata:r?.metadata?{...r.metadata}:void 0}),F=true,{ok:false,data:"",error:E,meta:{agentId:g.id,provider:p,model:f,durationMs:N,taskId:i}}}finally{F||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:Date.now()-c,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:I??-1,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:k?.costUsd,model:b});}})}async continueQuery(e,t){let r=this._pendingThreads.get(e);if(!r)return {ok:false,data:"",error:{code:"THREAD_NOT_FOUND",message:`No pending thread: ${e}`},meta:{agentId:"",provider:"",durationMs:0}};this._pendingThreads.delete(e);let n=ge(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 se)return this._pendingThreads.set(e,{...r,continuationState:i.continuationState,toolCall:i.toolCall}),{ok:true,status:"requires_action",data:"",toolCall:i.toolCall,threadId:e,meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:Date.now()-r.startMs}};let a=Date.now()-r.startMs;return {ok:false,data:"",error:{code:"CONTINUE_FAILED",message:i.message},meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:a}}}}async execute(e,t,r){let n=await this.resolveFileRemoteTarget(e);if(n)return n.target.execute(n.agentRef,t,r);let s=tt.getStore()??ur(r?.trace),i=r?.taskId??Te("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null};return tt.run(d,async()=>{let c=Date.now(),u=new Date,g;try{g=ft(e,Array.from(this._agents.values()));}catch(A){if(A instanceof ue){this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let N=Date.now()-c,E={code:"AGENT_NOT_FOUND",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:E,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:E,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:N}}}throw A}d.callerAgentId=g.id;let h=Array.isArray(g.provider)?g.provider[0]??"cli/claude":g.provider,p=r?.provider??h,f=r?.model??g.inline?.model;f&&f.includes("{{")&&(f=await this._templateEngine.render(f,{...r?.vars??{}}));let x;try{x=ge(p);}catch(A){this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let N=Date.now()-c,E={code:"PROVIDER_ERROR",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:E,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:E,meta:{agentId:g.id,provider:p,model:f,durationMs:N}}}let R=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),_;try{_=await this.renderAgentPromptFull(e,{session:{mode:"execute",platform:r?.platform},vars:{user_input:t,...r?.vars??{}},messages:R});}catch(A){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${A instanceof Error?A.message:String(A)}`);}let v,k,I,b=f,W=false,j=A=>{W||(W=true,this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"execute",pid:A,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:b,provider:p,codingAgentCommand:v,renderedPrompt:_,metadata:{...r?.metadata??{},provider:p},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},C=g.options,q=Array.isArray(C?.execute?.tools)?C.execute.tools:void 0,Y=this._tools.size>0?this._filterToolsByMode(q):[],$=(()=>{let A=C?.execute;if(!A||Array.isArray(A))return;let{tools:N,effort:E,mode:P,...H}=A,Q=Object.entries(H).filter(([,J])=>J!=null);if(Q.length!==0)return Object.fromEntries(Q.map(([J,Ht])=>[J,String(Ht)]))})(),B=g.inline?.max_steps;p.startsWith("api/")&&j();let F=false;try{let A=await x.execute(t,{model:f,effort:C?.execute?.effort,mode:C?.execute?.mode,context:r?.context,systemPrompt:_??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(C?.execute)?C.execute:void 0,tools:Y.length>0?Y:void 0,maxSteps:B,configOptions:$,timeoutMs:this._resolveTimeout("execute"),cwd:r?.cwd,env:{CREWX_AGENT_ID:g.id,CREWX_AGENT_ROLE:g.role??"",CREWX_AGENT_TEAM:g.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:p,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,u)},onPid:P=>j(P),onOutput:(P,H)=>{this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:P,level:H}),H==="stdout"&&this.emitToolEvents(i,e,p,P,g.id,r?.threadId??"","");},onTaskLog:P=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",p,P);for(let H of P)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(H),level:"info"});},onCommand:P=>{v=P;},onUsage:P=>{k=P;},onExitCode:P=>{I=P;},onModel:P=>{b||(b=P);}});j();let N=Date.now()-c,E={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",result:A,durationMs:N,exitCode:I,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:k?.costUsd,model:b,metadata:Object.keys(E).length>0?E:void 0}),F=!0,{ok:!0,data:A,meta:{agentId:g.id,provider:p,model:f,durationMs:N,taskId:i}}}catch(A){j();let N=Date.now()-c,E={code:"EXECUTE_FAILED",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:E,exitCode:I,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:k?.costUsd,model:b,metadata:r?.metadata?{...r.metadata}:void 0}),F=true,{ok:false,data:"",error:E,meta:{agentId:g.id,provider:p,model:f,durationMs:N}}}finally{F||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:Date.now()-c,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:I??-1,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:k?.costUsd,model:b});}})}};function Un(o,e){let t=Ir(o)?o:void 0,r=Ir(e)?e:void 0;if(!(!t&&!r))return {...t??{},...r??{}}}function Ir(o){return typeof o=="object"&&o!==null&&!Array.isArray(o)}function ci(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(!Ir(a))return;let d=a.id;if(typeof d=="string")return `id:${d}`;let c=a.name;if(typeof c=="string")return `name:${c}`},s=new Set;for(let a of r??[]){let d=n(a);d&&s.add(d);}let i=[];for(let a of t??[]){let d=n(a);d&&s.has(d)||i.push(a);}for(let a of r??[])i.push(a);return i}async function Fn(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(()=>(yr(),Rn));n(t?.api);}pi(o,e),gi(o,e),ui(o);}function ui(o){if(!o.some(r=>(Array.isArray(r.provider)?r.provider:[r.provider]).some(s=>s.startsWith("acp/"))))return;let{registerAcpProviders:t}=(Rr(),Bt(Sn));t();}function pi(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}=(Tr(),Bt(On)),s=new Map;for(let i of r)i.type==="remote"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&pe("remote",n(s,ge));}function gi(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}=(br(),Bt(Ln)),s=new Map;for(let i of r)i.type==="plugin"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&pe("plugin",n(s));}l();var Or=class{detach(e){}};l();var mi="crewx:fs:",Mr=class{prefix;store;constructor(e){this.prefix=e?.prefix??mi,this.store=e?.storage??new Map;}async readFile(e){let t=this.toKey(e),r=this.store.get(t);if(r===void 0)throw new Error(`BrowserFsAdapter: file not found: ${e}`);return r}async exists(e){return this.store.has(this.toKey(e))}resolvePath(...e){let t=e.map(i=>i.replace(/\\/g,"/")).join("/").replace(/\/+/g,"/"),r=t.split("/"),n=[];for(let i of r)i==="."||i===""||(i===".."?n.pop():n.push(i));let s=n.join("/");return t.startsWith("/")?`/${s}`:s}isAbsolute(e){return e.startsWith("/")}setItem(e,t){this.store.set(this.toKey(e),t);}removeItem(e){this.store.delete(this.toKey(e));}keys(){return Array.from(this.store.keys()).filter(e=>e.startsWith(this.prefix)).map(e=>e.slice(this.prefix.length))}async readdir(e){let t=e.replace(/\\/g,"/").replace(/\/$/,""),r=this.toKey(t+"/"),n=[];for(let s of this.store.keys())if(s.startsWith(r)){let a=s.slice(r.length).split("/")[0];a&&!n.includes(a)&&n.push(a);}return n}toKey(e){return `${this.prefix}${e.replace(/\\/g,"/")}`}};l();function fi(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))}de();fr();yr();l();wr();ke();l();Pt();Ot();Tt();function yi(o,e,t,r){let n=t.agentInfo?.name,s=e??n??o,a=(r.modes?.availableModes??[]).map(f=>({id:f.id,name:f.name,...f.description!=null?{description:f.description}:{}})),d=[],c=r.configOptions??[];for(let f of c)if(f.category==="thought_level"&&f.type==="select"){let x=f.options??[];if(x.length>0&&x[0]?.group!=null)for(let R of x)for(let _ of R.options??[])d.push(_.value);else for(let R of x)R.value!=null&&d.push(R.value);}let u=r.models?.availableModels??[],g=o==="claude"?bn.map(f=>({id:f.id,name:f.name})):u.map(f=>({id:f.modelId})),h=t.agentCapabilities??{},p={loadSession:h.loadSession??false,image:h.promptCapabilities?.image??false,audio:h.promptCapabilities?.audio??false,mcp:h.mcpCapabilities!=null};return {id:`acp/${o}`,name:s,modes:a,effort:d,models:g,capabilities:p}}async function Hn(o){let e=Ee[o];if(!e)return null;let t=e.meta?.displayName,r=new be({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 yi(o,t,n,i)}catch{return null}finally{await r.dispose();}}async function hi(){let o=Object.keys(Ee),e=await Promise.allSettled(o.map(r=>Hn(r))),t=[];for(let r of e)r.status==="fulfilled"&&r.value!==null&&t.push(r.value);return t}Pt();xr();Ot();Rr();zt();Fe();l();var Nr=0;function wi(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(Nr>=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(", ")}`;Nr++;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{Nr--;}}}}l();var qn=typeof process<"u"?process.env:{};function xi(){return qn.CREWX_CLI||"npx crewx"}function ki(){return qn.CREWX_WORKSPACE||(typeof process<"u"?process.cwd():"/")}l();var vi=/^[a-zA-Z0-9._-]+$/,Dr=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(!vi.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return Te("box")}};l();function _i(o,e,t,r,n){let{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}=r,d=s*i,c=s*a,u=d+c,g=e.getThreadMessages(o),h=[],p=0,f=false,x=[];for(let v=0;v<g.length;v+=2){let k=g[v],I=g[v+1],b=k?.content||"",W=I?.content||"",j=n.countTokens(b+W),C=[];k&&C.push(k),I&&C.push(I),x.push({messages:C,tokens:j});}for(let v=x.length-1;v>=0;v--){let k=x[v];if(p+k.tokens>d){f=true;break}p+=k.tokens,h.unshift(...k.messages);}let R=[],_=0;if(f&&c>0)try{let{boxes:v}=t.listBoxes(o);for(let k=v.length-1;k>=0;k--){let I=v[k],b=I.summaryTokens??I.sourceTokens;if(_+b>c)break;_+=b,R.unshift({boxId:I.id,seq:I.seq,taskCount:I.taskCount,sourceTokens:I.sourceTokens,summary:I.summary,previewFirst:I.previewFirst,previewMid:I.previewMid,previewLast:I.previewLast,createdAt:I.createdAt});}}catch(v){if(v instanceof Error&&!/not found/i.test(v.message))throw v}return {hot:h,warm:R,hotTokens:p,warmTokens:_,hotOverflow:f,totalBudget:u,config:{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}}}Fe();Re();l();var Mt=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},lt=class{constructor(e={}){this.defaults=e;}defaults;metrics={totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0};async run(e,t={}){if(!Array.isArray(e))throw new TypeError("ParallelRunner.run expects an array of tasks");if(e.length===0)return this.metrics={totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0},[];let r=this.mergeOptions(t),n=Math.max(1,r.maxConcurrency??5),s=r.timeoutMs,i=r.failFast??false,a=r.callbacks,d=r.evaluateTaskSuccess??(()=>true),c=[],u=0,g=0,h=0,p=false,f=0,x=performance.now(),R=async C=>{a?.onTaskStart&&await a.onTaskStart(C),h+=1;let q=new AbortController,Y={signal:q.signal},$,B;typeof s=="number"&&Number.isFinite(s)&&s>0&&(B=new Promise((E,P)=>{$=setTimeout(()=>{let H=new Mt(C.id,s);q.abort(H),P(H);},s);}));let F=performance.now(),A=C.run(Y),N=B?Promise.race([A,B]):A;try{let E=await N,P=performance.now(),H=P-F,Q=d(E,C),J={taskId:C.id,success:Q,value:E,durationMs:H,startedAt:F,finishedAt:P,metadata:C.metadata,aborted:!1};c.push(J),Q?u+=1:g+=1,a?.onTaskComplete&&await a.onTaskComplete(J),i&&!Q&&(p=!0);}catch(E){let P=performance.now(),H=P-F,Q=E instanceof Error?E:new Error(String(E)),J={taskId:C.id,success:false,error:Q,durationMs:H,startedAt:F,finishedAt:P,metadata:C.metadata,aborted:q.signal.aborted};c.push(J),g+=1,a?.onError&&await a.onError(C,Q,H),i&&(p=true);}finally{$&&clearTimeout($),B&&A.catch(()=>{});}},_=async()=>{for(;!p;){let C=f;if(C>=e.length)break;f+=1;let q=e[C];if(!q||(await R(q),p))break}},v=Math.min(n,e.length),k=[];for(let C=0;C<v;C++)k.push(_());await Promise.all(k);let b=performance.now()-x,W=c.length?c.reduce((C,q)=>C+q.durationMs,0)/c.length:0,j=b>0?c.length/(b/1e3):c.length;return this.metrics={totalTasks:e.length,startedTasks:h,completedTasks:c.length,successCount:u,failureCount:g,totalDurationMs:b,averageDurationMs:W,throughput:j},c}getMetrics(){return this.metrics}mergeOptions(e){return {maxConcurrency:e.maxConcurrency??this.defaults.maxConcurrency,timeoutMs:e.timeoutMs??this.defaults.timeoutMs,failFast:e.failFast??this.defaults.failFast,evaluateTaskSuccess:e.evaluateTaskSuccess??this.defaults.evaluateTaskSuccess,callbacks:this.mergeCallbacks(this.defaults.callbacks,e.callbacks)}}mergeCallbacks(e,t){if(!(!e&&!t))return {onTaskStart:async r=>{e?.onTaskStart&&await e.onTaskStart(r),t?.onTaskStart&&await t.onTaskStart(r);},onTaskComplete:async r=>{e?.onTaskComplete&&await e.onTaskComplete(r),t?.onTaskComplete&&await t.onTaskComplete(r);},onError:async(r,n,s)=>{e?.onError&&await e.onError(r,n,s),t?.onError&&await t.onError(r,n,s);}}}};l();l();var ct=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 Bn=3,Wn=3e4,zn=500,Ai=o=>{if(typeof o!="number"||Number.isNaN(o)||!Number.isFinite(o))return Bn;let e=Math.floor(o);return e>0?e:Bn},Ri=o=>o===void 0||typeof o!="number"||Number.isNaN(o)||o<=0?Wn:o,Pi=o=>{if(!o)return {maxRetries:0,retryDelay:zn};let e=Number.isInteger(o.maxRetries)&&o.maxRetries>=0?o.maxRetries:0,t=typeof o.retryDelay=="number"&&o.retryDelay>=0?o.retryDelay:zn;return {maxRetries:e,retryDelay:t}},Lr=o=>{let e=o.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},Ci=(o,e)=>o<=0?Promise.resolve():new Promise((t,r)=>{let n=setTimeout(()=>{e.removeEventListener("abort",s),t();},o),s=()=>{clearTimeout(n),r(Lr(e));};if(e.aborted){s();return}e.addEventListener("abort",s,{once:true});}),Ti=async(o,e,t)=>{let r,n;for(let s=0;s<=e.maxRetries;s++){if(t.aborted)throw Lr(t);try{let i=await o();if(r=i,i.success||s===e.maxRetries)return i}catch(i){if(n=i,t.aborted)throw Lr(t);if(s===e.maxRetries)throw i instanceof Error?i:new Error(String(i))}s<e.maxRetries&&await Ci(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")},Vn=(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);}},bi=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}}}),Ei=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")}}),Si=(o,e)=>({onTaskComplete:async t=>{Vn(e,o,t.success);},onError:async()=>{Vn(e,o,false);}}),Kn=async(o,e,t={})=>{if(!Array.isArray(o))throw new TypeError("Parallel helpers expect an array of requests");if(o.length===0){let R={total:0,completed:0,successCount:0,failureCount:0,results:[],errors:[],metrics:{totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0}};return t.onComplete?.(R),[]}let r=Ai(t.concurrency),n=Ri(t.timeout),s=Pi(t.retryPolicy),i=new lt,a=new ct,d=o.map((x,R)=>({id:`${e}:${x.agentId??"anonymous"}:${R}`,metadata:{index:R,mode:e,request:x},run:_=>Ti(()=>e==="query"?a.query(x):a.execute(x),s,_.signal)})),c={completed:0,success:0,failure:0,total:o.length},u=await i.run(d,{maxConcurrency:r,timeoutMs:n,evaluateTaskSuccess:x=>x.success,callbacks:Si(c,t)}),g=bi(u),h=Ei(u),p=i.getMetrics(),f={total:o.length,completed:o.length,successCount:g.filter(x=>x.success).length,failureCount:g.filter(x=>!x.success).length,results:g,errors:h,metrics:p};return t.onComplete?.(f),g},Ii=(o,e)=>Kn(o,"query",e),Oi=(o,e)=>Kn(o,"execute",e);br();l();l();var qe=class{resolveDbPath(){return process.env.CREWX_DB?process.env.CREWX_DB:process.env.CREWX_TRACES_DB?process.env.CREWX_TRACES_DB:join(Di.homedir(),".crewx","crewx.db")}resolveDbPaths(){return [this.resolveDbPath()]}isMissingTableError(e){return e instanceof Error&&/no such table:/i.test(e.message)}dbExists(e){return existsSync(e??this.resolveDbPath())}};l();function ye(o){let e=V("better-sqlite3"),{drizzle:t}=V("drizzle-orm/better-sqlite3"),r=new e(o);return r.exec("PRAGMA journal_mode = WAL"),r.exec("PRAGMA busy_timeout = 5000"),r.exec("PRAGMA foreign_keys = ON"),{db:t(r),runRaw:(n,s=[])=>r.prepare(n).run(...s),close:()=>r.close()}}l();var Xn=new Set,$i={agent_id:"TEXT",status:"TEXT DEFAULT 'running'",started_at:"TEXT",trace_id:"TEXT",parent_task_id:"TEXT",crewx_version:"TEXT",pid:"INTEGER",thread_id:"TEXT",workspace_id:"TEXT",workspace_ref:"TEXT",workspace_name:"TEXT",project_id:"TEXT",project_name:"TEXT"};function ji(o,e){return (o.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function Ui(o,e){if(e>0||!ji(o,"tasks"))return;let t=o.all("PRAGMA table_info(tasks)"),r=new Set(t.map(n=>n.name));for(let[n,s]of Object.entries($i))r.has(n)||o.run(`ALTER TABLE tasks ADD COLUMN ${n} ${s}`);}function Fi(o,e,t){let r=o.all(t`SELECT hash FROM __drizzle_migrations`),n=new Set(r.map(i=>i.hash)),s=JSON.parse(readFileSync(z__default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=z__default.join(e,`${i.tag}.sql`);if(!existsSync(a))continue;let d=readFileSync(a,"utf-8"),c=createHash("sha256").update(d).digest("hex");if(n.has(c))continue;let u=/ALTER\s+TABLE\s+[`"]?(\w+)[`"]?\s+ADD\s+[`"]?(\w+)[`"]?/gi,g=[],h;for(;(h=u.exec(d))!==null;)g.push({table:h[1],column:h[2]});if(g.length===0||!d.split(/-->\s*statement-breakpoint/).map(x=>x.trim()).filter(Boolean).every(x=>/^ALTER\s+TABLE\s+.+\s+ADD\s+/i.test(x)))continue;g.every(({table:x,column:R})=>o.all(`PRAGMA table_info("${x}")`).some(v=>v.name===R))&&o.run(t`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${c}, ${i.when})`);}}function Hi(o){let{migrate:e}=V("drizzle-orm/better-sqlite3/migrator"),{sql:t}=V("drizzle-orm"),r=[z__default.join(m,"../migrations"),z__default.join(m,"migrations"),z__default.join(m,"../../../../drizzle/migrations"),z__default.join(process.cwd(),"drizzle/migrations")],n=r.find(c=>existsSync(z__default.join(c,"meta/_journal.json")));if(!n)throw new Error(`migrations folder not found. Searched:
51
+ `)}l();function Is(){let n=new Date,e=n.getFullYear(),t=String(n.getMonth()+1).padStart(2,"0"),r=String(n.getDate()).padStart(2,"0");return `${e}-${t}-${r}`}async function wn(n,e=Pe){let t=e.resolvePath(n,`${Is()}.md`);return await e.exists(t)?e.readFile(t):""}He();l();var nt=new AsyncLocalStorage;function gr(n){if(n)return {parentTaskId:n.parentTaskId??null,rootTraceId:n.rootTraceId,callerAgentId:n.callerAgentId??null}}l();function Ms(n){return typeof n!="string"?"":n.replace(/</g,"&lt;").replace(/>/g,"&gt;")}function mr(n){return n.messages.map(e=>({text:Ms(e.text),isAssistant:e.isAssistant,timestamp:e.timestamp,metadata:e.metadata,files:void 0}))}l();l();var Ns={agentId:z$1.string().describe("The agent ID to query"),query:z$1.string().describe("The query message to send"),context:z$1.string().optional().describe("Additional context"),thread:z$1.string().optional().describe("Thread ID for conversation continuity")},Ds={agentId:z$1.string().describe("The agent ID to execute"),task:z$1.string().describe("The task description to execute"),context:z$1.string().optional().describe("Additional context"),thread:z$1.string().optional().describe("Thread ID for conversation continuity")};function xn(n,e,t){n.tool("crewx_listAgents","List available CrewX agents exposed by this server",async()=>{let r=[];for(let o of t){let s=e.agents.get(o);s&&r.push({id:s.id,name:s.name??s.id,description:s.description??""});}return {content:[{type:"text",text:JSON.stringify(r,null,2)}]}}),n.tool("crewx_queryAgent","Query a CrewX agent with a read-only question",Ns,async({agentId:r,query:o,context:s,thread:i})=>{if(!t.has(r))return {content:[{type:"text",text:`Agent '${r}' is not exposed by this server`}],isError:true};let a=await e.query(r,o,{context:s,threadId:i});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Query failed"}],isError:true}}),n.tool("crewx_executeAgent","Execute a task on a CrewX agent (may modify state)",Ds,async({agentId:r,task:o,context:s,thread:i})=>{if(!t.has(r))return {content:[{type:"text",text:`Agent '${r}' is not exposed by this server`}],isError:true};let a=await e.execute(r,o,{context:s,threadId:i});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Execute failed"}],isError:true}});}l();function kn(n){return n.headers.get("Origin")?null:new Response(JSON.stringify({error:"Forbidden: Origin header required"}),{status:403,headers:{"Content-Type":"application/json"}})}async function vn(n,e){return e?await e(n)?null:new Response(JSON.stringify({error:"Unauthorized"}),{status:401,headers:{"Content-Type":"application/json"}}):null}function js(n,e){let t=new McpServer({name:"crewx-mcp-server",version:"1.0.0"},{capabilities:{tools:{}}});return xn(t,n,e),t}function fr(n,e){if(!e.agents||e.agents.length===0)throw new Error("crewx.handler() requires at least one agent in the agents option");let t=new Set(e.agents),r=new Map;return async o=>{let s=kn(o);if(s)return s;let i=await vn(o,e.auth);if(i)return i;let a=o.headers.get("mcp-session-id");if(a&&r.has(a))return r.get(a).transport.handleRequest(o);let d=js(n,t),c=new WebStandardStreamableHTTPServerTransport({sessionIdGenerator:()=>crypto.randomUUID(),onsessioninitialized:u=>{r.set(u,{transport:c,server:d});},onsessionclosed:u=>{r.delete(u);},enableJsonResponse:true});return await d.connect(c),c.handleRequest(o)}}l();function An(n){let e=z.resolve(n);return process.platform==="win32"&&(e=e.replace(/\\/g,"/"),e=e.replace(/^([A-Z]):/,(t,r)=>`${r.toLowerCase()}:`)),e.length>1&&!/^[a-zA-Z]:\/$/.test(e)&&(e=e.replace(/\/+$/,"")),e}function yr(n){let e=An(n);return createHash("sha256").update(e).digest("hex")}function pi(n){return n?n.settings?.template?.exec:void 0}function gi(){try{let n=new Uint8Array(8);return globalThis.crypto.getRandomValues(n),Array.from(n,e=>e.toString(16).padStart(2,"0")).join("")}catch{let{randomBytes:n}=V("crypto");return n(8).toString("hex")}}var Or=class n extends rt{_agents;_templateEngine;_documentLoader;_layoutLoader;_layoutRenderer;_config;_projectRoot;_workspaceId;_workspaceName;_plugins=[];_tools=new Map;_activeAdapters=new Map;_pendingThreads=new Map;_remoteFactory;_remoteTargets=new Map;constructor(e,t={},r,o,s){super(),this._agents=new Map(e.map(d=>[d.id,d])),this._config=r,this._projectRoot=s??(typeof process<"u"?process.cwd():"/");let i=s??(typeof process<"u"?process.env.CREWX_WORKSPACE??process.cwd():"/");this._workspaceId=yr(i),this._workspaceName=basename(i);let a=pi(r);this._templateEngine=new Ye({execPolicy:t.execPolicy??a}),this._documentLoader=o??new Ce,this._layoutLoader=new Qe({templatesPath:Le()}),this._layoutRenderer=new tt,this._remoteFactory=t.remoteFactory;}async resolveFileRemoteTarget(e){let t=this.getAgent(e),r=Array.isArray(t?.provider)?t?.provider[0]:t?.provider;if(!r?.startsWith("remote/"))return null;let o=r.slice(7),s=this.getRemoteProviderConfig(o);if(!s?.location?.startsWith("file://"))return null;let i=resolve(s.location.replace("file://","")),a=s.external_agent_id??e.replace(/^@/,""),d=this._remoteTargets.get(i);d||(d=(this._remoteFactory??(p=>n.loadYaml(p)))(i),this._remoteTargets.set(i,d),d.catch(()=>this._remoteTargets.delete(i)));let c=await d,u=c.getAgent("@"+a),g=Array.isArray(u?.provider)?u?.provider[0]:u?.provider;if(g?.startsWith("remote/"))throw new Error(`Chained remotes not allowed: "${o}" \u2192 "${g}"`);return {target:c,agentRef:"@"+a}}static async loadBuiltInConfig(e){let{yamlPath:t,dir:r}=Vt(),o;try{o=readFileSync(t,"utf-8");}catch(i){throw new Error(`[@crewx/sdk] Cannot read built-in config: ${t}
52
+ ${i.message}`)}let s=mt(o);if(s.documents&&typeof s.documents=="object"){let i={};for(let[a,d]of Object.entries(s.documents))if(d&&typeof d=="object"){let c=d;typeof c.path=="string"&&!isAbsolute(c.path)?i[a]={...c,path:resolve(r,c.path)}:i[a]=c;}else i[a]=d;return {...s,documents:i}}return s}static mergeCrewxConfig(e,t){let r=new Map;for(let v of e.agents??[])r.set(v.id,v);for(let v of t.agents??[])r.has(v.id)&&console.warn(`[agent-loader] User agent "${v.id}" overrides built-in`),r.set(v.id,v);let o=Array.from(r.values()),s={...e.layouts??{},...t.layouts??{}},i={...e.documents??{},...t.documents??{}},a=e,d=t,c=qn(a.vars,d.vars),u=qn(a.settings,d.settings),g;e.skills&&t.skills&&typeof e.skills=="object"&&typeof t.skills=="object"&&!Array.isArray(e.skills)&&!Array.isArray(t.skills)?g={...e.skills,...t.skills}:g=t.skills??e.skills;let h=[...e.hooks??[],...t.hooks??[]],p=mi(a.providers,d.providers),f={...e},x={...t};for(let v of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete f[v],delete x[v];let _={...{...f,...x},agents:o,layouts:s,documents:i,skills:g};return h.length>0&&(_.hooks=h),c!==void 0&&(_.vars=c),u!==void 0&&(_.settings=u),p!==void 0&&(_.providers=p),_}static async loadYaml(e,t,r){let o=t?.includeBuiltIns!==false,s,i;if(o){let u=await n.loadBuiltInConfig(r);if(e!==void 0){let g=ft(e);s=n.mergeCrewxConfig(u,g),i=dirname(e);}else s=u,i=process.cwd();}else {if(e===void 0)throw new Error("[@crewx/sdk] loadYaml: path is required when includeBuiltIns is false");s=ft(e),i=dirname(e);}let a=new Ce(r);await a.load(s.documents,i);let d=s.agents??[];return await Bn(d,s,t),new n(d,t??{},s,a,i)}static async fromConfig(e,t,r,o){let s=t?.includeBuiltIns===true,i=e;if(s){let u=await n.loadBuiltInConfig(o);i=n.mergeCrewxConfig(u,e);}let a=new Ce(o);await a.load(i.documents,r??(typeof process<"u"?process.cwd():"/"));let d=i.agents??[];return await Bn(d,i,t),new n(d,t??{},i,a,r)}get agents(){return this._agents}get config(){return this._config}get plugins(){return this._plugins}get tools(){return this._tools}get workspaceId(){return this._workspaceId}get workspaceName(){return this._workspaceName}getAgent(e){let t=e.startsWith("@")?e.slice(1):e;return this._agents.get(t)}getRemoteProviderConfig(e){let t=this._config?.providers;return Array.isArray(t)?t.find(o=>o.type==="remote"&&o.id===e):void 0}computeTaskLogPath(e,t){let r=lr(t);return join(this._projectRoot,".crewx","logs",`${r}_${e}.log`)}registerTool(e,t){this._tools.set(e,{name:e,...t});}async use(e){this._plugins.includes(e)||(await e.attach(this),this._plugins.push(e));}handler(e){return fr(this,e)}async registerChannelAdapter(e){let{adapter:t,instanceId:r,config:o}=e;if(this._activeAdapters.has(r))throw new Error(`Adapter instance already registered: ${r}`);let s=new Set(t.manifest.capabilities),i=e.store??cr(r),a=e.defaultMode??"query",d=t.manifest.platform,c=e.agentRunner??{run:async(p,f,x)=>{let _=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${p}`,f,{threadId:x?.threadId,platform:d});return {output:_.ok?_.data:_.error?.message??""}}},u=e.onInbound??(async p=>{let f=p.routingHints?.agentId??e.defaultAgent;if(!f)return {accepted:false,reason:"no_agent"};let{output:x}=await c.run(f,p.text,{threadId:p.threadId});return {accepted:true,output:x}}),g=pr({instanceId:r,config:o,capabilities:s,db:i,agentRunner:c,onInbound:u}),h={adapter:t,ctx:g,state:"starting"};this._activeAdapters.set(r,h),this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"starting",timestamp:new Date});try{await t.start(g),h.state="started",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"started",timestamp:new Date});}catch(p){throw h.state="failed",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"failed",error:p instanceof Error?p:new Error(String(p)),timestamp:new Date}),this._activeAdapters.delete(r),p}}async unregisterChannelAdapter(e){let t=this._activeAdapters.get(e);if(t){t.state="stopping",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"stopping",timestamp:new Date});try{await t.adapter.stop(t.ctx),t.state="stopped",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"stopped",timestamp:new Date});}catch(r){t.state="failed",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"failed",error:r instanceof Error?r:new Error(String(r)),timestamp:new Date});}finally{this._activeAdapters.delete(e);}}}async stopAllAdapters(e={}){let t=e.timeoutMs??1e4,r=Array.from(this._activeAdapters.keys()),o=await Promise.allSettled(r.map(s=>Promise.race([this.unregisterChannelAdapter(s),new Promise((i,a)=>setTimeout(()=>a(new Error(`Adapter stop timeout: ${s}`)),t))])));for(let s=0;s<o.length;s++)o[s].status==="rejected"&&console.error(`[crewx] adapter stop error (${r[s]}): ${o[s].reason}`);}async close(){await this.stopAllAdapters({timeoutMs:1e4});let e=[...this._remoteTargets.values()];this._remoteTargets.clear(),await Promise.allSettled(e.map(async r=>{try{await(await r).close();}catch(o){console.error(`[crewx] remote target close error: ${o instanceof Error?o.message:String(o)}`);}}));let t=[...this._plugins].reverse();for(let r of t)try{await r.detach(this);}catch(o){console.error(`[crewx] plugin ${r.name} detach error: ${o instanceof Error?o.message:String(o)}`);}this._plugins.length=0;}filterAgents(e){let t=a=>a?a.split(",").map(d=>d.trim().toLowerCase()).filter(Boolean):void 0,r=t(e.role),o=t(e.team),s=t(e.provider),i=Array.from(this._agents.values());return r&&(i=i.filter(a=>a.role&&r.some(d=>ae(a.role.toLowerCase(),d)))),o&&(i=i.filter(a=>a.team&&o.some(d=>ae(a.team.toLowerCase(),d)))),s&&(i=i.filter(a=>(Array.isArray(a.provider)?a.provider:[a.provider]).some(c=>s.some(u=>ae(c.toLowerCase(),u))))),i}renderAgentPrompt(e){let t=e.startsWith("@")?e.slice(1):e,r=this._agents.get(t);if(!r)throw new ue(t,Array.from(this._agents.keys()));return r.inline?.prompt??r.inline?.system_prompt??r.description??`You are an expert ${t}.`}async renderPrompt(e,t){let o={...await this._documentLoader.buildContext(),...t?.documents??{}},s={...t,documents:o};return this._templateEngine.render(e,s)}registerLayout(e,t){this._layoutLoader.registerLayout(e,t);}async renderAgentPromptFull(e,t){let r=e.startsWith("@")?e.slice(1):e,o=this._agents.get(r);if(!o)throw new ue(r,Array.from(this._agents.keys()));let s=this._resolveLayoutSpec(o,t?.layout),i=this._extractLayoutId(s),a=this._extractLayoutProps(o,s,t?.layout),d=this._layoutLoader.load(i,a),c=o.inline?.prompt??o.inline?.system_prompt??o.description??`You are an expert ${r}.`,u=await this._documentLoader.buildContext(),g=t?.env??(typeof process<"u"?process.env:{}),h=t?.vars?.security_key??gi(),p={...t?.vars??{},documents:u,env:g,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??""}},f=await this._templateEngine.render(c,p),x={mode:t?.session?.mode??"query",platform:t?.session?.platform??"cli",options:t?.session?.options??[]},R=o.provider,_=Array.isArray(R)?R:typeof R=="string"&&R.length>0?[R]:[],v=_.join(", ")||(typeof R=="string"?R:""),k=o.options,I=["goals","daily"],b={goals:false,daily:false},W;if(!Array.isArray(k)&&typeof k=="object"&&k!==null){let L=k;if("goals"in L){let F=L.goals;typeof F=="string"||Array.isArray(F)?b.goals=F:b.goals=!!F;}"daily"in L&&(b.daily=!!L.daily);let B={};for(let[F,A]of Object.entries(L))I.includes(F)||(B[F]=A);if(Object.keys(B).length>0){let F=_.some(N=>N.startsWith("cli/")),A={};for(let[N,E]of Object.entries(B)){let P={};if(Array.isArray(E))F&&(P.rawArgs=E);else if(typeof E=="object"&&E!==null){let H=E;Object.keys(H).length>0&&(P.named=H);}(P.named||P.rawArgs&&P.rawArgs.length>0)&&(A[N]=P);}W=Object.keys(A).length>0?A:void 0;}}let j=Array.isArray(k)?k:void 0,C={};for(let[L,B]of Object.entries(u))C[L]={content:B.content??"",toc:B.toc,summary:B.summary,path:B.path};if(b.goals){let L=join(this._projectRoot,"docs","goal"),B=await hn(L,void 0,b.goals);B&&(C.active_goals={content:B});}if(b.daily){let L=join(this._projectRoot,"docs","daily"),B=await wn(L);B&&(C.today_daily={content:B});}let Y={user_input:t?.vars?.user_input??void 0,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??"",provider:v,providerList:_,model:o.inline?.model,workingDirectory:o.working_directory??o.workingDirectory??".",inline:{...o.inline??{},prompt:f},specialties:o.specialties??[],capabilities:o.capabilities??[],remote:o.remote??null,optionsByMode:W,optionsArray:j},agentMetadata:{specialties:o.specialties??[],capabilities:o.capabilities??[],description:o.description??""},contextOptions:b,documents:C,skills:t?.skills??[],session:x,env:g,vars:{security_key:h,...t?.vars??{}},props:{...a??{},...t?.messages&&t.messages.length>0?{showConversationHistory:true}:{}},platform:x.platform,mode:x.mode,thread_id:t?.threadId??"",now:Ze(new Date),messages:t?.messages??[],tools:this._tools.size>0?{list:Array.from(this._tools.values()).map(L=>({name:L.name,description:L.description,parameters:L.parameters})),json:JSON.stringify(Array.from(this._tools.values()).map(L=>({name:L.name,description:L.description,parameters:L.parameters})),null,2),count:this._tools.size}:null,metadata:{}};return this._layoutRenderer.render(d,Y)}_filterToolsByMode(e){return e?e.map(t=>this._tools.get(t)).filter(t=>t!==void 0):Array.from(this._tools.values())}_resolveLayoutSpec(e,t){if(t!==void 0)return t;let r=e.inline?.layout;if(r!==void 0)return r;let o=this._config?.layouts?.default;return typeof o=="string"&&o?o:"crewx/default"}_extractLayoutId(e){if(typeof e=="string")return e;if("id"in e)return e.id;let t=`crewx/__inline_${Date.now()}`;return this._layoutLoader.registerLayout(t,e.template),t}_extractLayoutProps(e,t,r){let o=e.inline?.layout,s=o&&typeof o=="object"&&"props"in o?o.props:void 0,i=r&&typeof r=="object"&&"id"in r?r.props:void 0;if(s||i)return {...s??{},...i??{}}}_getConversationProvider(){return this._plugins.find(t=>t.name==="conversation")?.conversationProvider}async _fetchHistoryMessages(e,t,r){if(r&&r.length>0)return r;if(!e)return;let o=this._getConversationProvider();if(o)try{let s=await o.fetchHistory(e,{currentTraceId:t});return s.messages.length===0?void 0:mr(s)}catch{return}}_resolveTimeout(e){let t=nn();return e==="query"?t.queryMs:t.executeMs}emitToolEvents(e,t,r,o,s,i,a){try{let c=we[r]?.parseEvent?.(o)??tr(new Date().toISOString(),o);for(let u of c)u.type==="tool_use"&&u.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:u.toolName,rawName:u.toolName,input:u.toolInput?this.tryParseJson(u.toolInput):void 0,toolUseId:u.toolUseId}}),u.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:u.toolName??"unknown",rawName:u.toolName??"unknown",toolUseId:u.toolUseId,result:u.resultPreview,isError:u.isError}});}catch{}}emitTaskLogEntries(e,t,r,o,s,i,a){try{for(let d of a)d.type==="tool_use"&&d.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:r,threadId:o,sessionId:s,provider:i,tool:{name:d.toolName,rawName:d.toolName,input:d.toolInput?this.tryParseJson(d.toolInput):void 0,toolUseId:d.toolUseId}}),d.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:t,agentId:r,threadId:o,sessionId:s,provider:i,tool:{name:d.toolName??"unknown",rawName:d.toolName??"unknown",toolUseId:d.toolUseId,result:d.resultPreview,isError:d.isError}});}catch{}}tryParseJson(e){try{return JSON.parse(e)}catch{return e}}async query(e,t,r){let o=await this.resolveFileRemoteTarget(e);if(o)return o.target.query(o.agentRef,t,r);let s=nt.getStore()??gr(r?.trace),i=r?.taskId??be("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null};return nt.run(d,async()=>{let c=Date.now(),u=new Date,g;try{g=ht(e,Array.from(this._agents.values()));}catch(A){if(A instanceof ue){this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let N=Date.now()-c,E={code:"AGENT_NOT_FOUND",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:E,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:E,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:N}}}throw A}d.callerAgentId=g.id;let h=Array.isArray(g.provider)?g.provider[0]??"cli/claude":g.provider,p=r?.provider??h,f=r?.model??g.inline?.model;f&&f.includes("{{")&&(f=await this._templateEngine.render(f,{...r?.vars??{}}));let x;try{x=ge(p);}catch(A){this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let N=Date.now()-c,E={code:"PROVIDER_ERROR",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:E,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:E,meta:{agentId:g.id,provider:p,model:f,durationMs:N}}}let R=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),_;try{_=await this.renderAgentPromptFull(e,{session:{mode:"query",platform:r?.platform},vars:{user_input:t,...r?.vars??{}},messages:R,threadId:r?.threadId});}catch(A){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${A instanceof Error?A.message:String(A)}`);}let v,k,I,b=f,W=false,j=A=>{W||(W=true,this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"query",pid:A,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:b,provider:p,codingAgentCommand:v,renderedPrompt:_,metadata:{...r?.metadata??{},provider:p},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},C=g.options,q=Array.isArray(C?.query?.tools)?C.query.tools:void 0,Y=this._tools.size>0?this._filterToolsByMode(q):[],L=(()=>{let A=C?.query;if(!A||Array.isArray(A))return;let{tools:N,effort:E,mode:P,...H}=A,Q=Object.entries(H).filter(([,J])=>J!=null);if(Q.length!==0)return Object.fromEntries(Q.map(([J,Bt])=>[J,String(Bt)]))})(),B=g.inline?.max_steps;p.startsWith("api/")&&j();let F=false;try{let A=await x.query(t,{model:f,effort:C?.query?.effort,mode:C?.query?.mode,context:r?.context,systemPrompt:_??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(C?.query)?C.query:void 0,tools:Y.length>0?Y:void 0,maxSteps:B,configOptions:L,timeoutMs:this._resolveTimeout("query"),cwd:r?.cwd,env:{CREWX_AGENT_ID:g.id,CREWX_AGENT_ROLE:g.role??"",CREWX_AGENT_TEAM:g.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:p,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,u)},onPid:P=>j(P),onOutput:(P,H)=>{this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:P,level:H}),H==="stdout"&&this.emitToolEvents(i,e,p,P,g.id,r?.threadId??"","");},onTaskLog:P=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",p,P);for(let H of P)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(H),level:"info"});},onCommand:P=>{v=P;},onUsage:P=>{k=P;},onExitCode:P=>{I=P;},onModel:P=>{b||(b=P);}});j();let N=Date.now()-c,E={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",result:A,durationMs:N,exitCode:I,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:k?.costUsd,model:b,metadata:Object.keys(E).length>0?E:void 0}),F=!0,{ok:!0,data:A,meta:{agentId:g.id,provider:p,model:f,durationMs:N,taskId:i}}}catch(A){if(A instanceof se){let P=be("thd");return this._pendingThreads.set(P,{agentRef:g.id,providerStr:p,continuationState:A.continuationState,toolCall:A.toolCall,traceId:i,startMs:c,model:f}),F=true,{ok:true,status:"requires_action",data:"",toolCall:A.toolCall,threadId:P,meta:{agentId:g.id,provider:p,model:f,durationMs:Date.now()-c,taskId:i}}}j();let N=Date.now()-c,E={code:"QUERY_FAILED",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:E,exitCode:I,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:k?.costUsd,model:b,metadata:r?.metadata?{...r.metadata}:void 0}),F=true,{ok:false,data:"",error:E,meta:{agentId:g.id,provider:p,model:f,durationMs:N,taskId:i}}}finally{F||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:Date.now()-c,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:I??-1,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:k?.costUsd,model:b});}})}async continueQuery(e,t){let r=this._pendingThreads.get(e);if(!r)return {ok:false,data:"",error:{code:"THREAD_NOT_FOUND",message:`No pending thread: ${e}`},meta:{agentId:"",provider:"",durationMs:0}};this._pendingThreads.delete(e);let o=ge(r.providerStr);if(!o.continueWithToolResults)return {ok:false,data:"",error:{code:"UNSUPPORTED",message:"Provider does not support client tool continuation"},meta:{agentId:r.agentRef,provider:r.providerStr,durationMs:0}};let s=t.map(i=>({...i,toolName:r.toolCall.toolCallId===i.toolCallId?r.toolCall.toolName:i.toolCallId}));try{let i=await o.continueWithToolResults(r.continuationState,s),a=Date.now()-r.startMs;return this.emit("task:end",{traceId:r.traceId,timestamp:new Date,agentRef:r.agentRef,mode:"query",result:i,durationMs:a}),{ok:!0,status:"complete",data:i,meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:a}}}catch(i){if(i instanceof se)return this._pendingThreads.set(e,{...r,continuationState:i.continuationState,toolCall:i.toolCall}),{ok:true,status:"requires_action",data:"",toolCall:i.toolCall,threadId:e,meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:Date.now()-r.startMs}};let a=Date.now()-r.startMs;return {ok:false,data:"",error:{code:"CONTINUE_FAILED",message:i.message},meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:a}}}}async execute(e,t,r){let o=await this.resolveFileRemoteTarget(e);if(o)return o.target.execute(o.agentRef,t,r);let s=nt.getStore()??gr(r?.trace),i=r?.taskId??be("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null};return nt.run(d,async()=>{let c=Date.now(),u=new Date,g;try{g=ht(e,Array.from(this._agents.values()));}catch(A){if(A instanceof ue){this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let N=Date.now()-c,E={code:"AGENT_NOT_FOUND",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:E,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:E,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:N}}}throw A}d.callerAgentId=g.id;let h=Array.isArray(g.provider)?g.provider[0]??"cli/claude":g.provider,p=r?.provider??h,f=r?.model??g.inline?.model;f&&f.includes("{{")&&(f=await this._templateEngine.render(f,{...r?.vars??{}}));let x;try{x=ge(p);}catch(A){this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let N=Date.now()-c,E={code:"PROVIDER_ERROR",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:E,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:E,meta:{agentId:g.id,provider:p,model:f,durationMs:N}}}let R=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),_;try{_=await this.renderAgentPromptFull(e,{session:{mode:"execute",platform:r?.platform},vars:{user_input:t,...r?.vars??{}},messages:R,threadId:r?.threadId});}catch(A){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${A instanceof Error?A.message:String(A)}`);}let v,k,I,b=f,W=false,j=A=>{W||(W=true,this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"execute",pid:A,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:b,provider:p,codingAgentCommand:v,renderedPrompt:_,metadata:{...r?.metadata??{},provider:p},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},C=g.options,q=Array.isArray(C?.execute?.tools)?C.execute.tools:void 0,Y=this._tools.size>0?this._filterToolsByMode(q):[],L=(()=>{let A=C?.execute;if(!A||Array.isArray(A))return;let{tools:N,effort:E,mode:P,...H}=A,Q=Object.entries(H).filter(([,J])=>J!=null);if(Q.length!==0)return Object.fromEntries(Q.map(([J,Bt])=>[J,String(Bt)]))})(),B=g.inline?.max_steps;p.startsWith("api/")&&j();let F=false;try{let A=await x.execute(t,{model:f,effort:C?.execute?.effort,mode:C?.execute?.mode,context:r?.context,systemPrompt:_??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(C?.execute)?C.execute:void 0,tools:Y.length>0?Y:void 0,maxSteps:B,configOptions:L,timeoutMs:this._resolveTimeout("execute"),cwd:r?.cwd,env:{CREWX_AGENT_ID:g.id,CREWX_AGENT_ROLE:g.role??"",CREWX_AGENT_TEAM:g.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:p,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,u)},onPid:P=>j(P),onOutput:(P,H)=>{this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:P,level:H}),H==="stdout"&&this.emitToolEvents(i,e,p,P,g.id,r?.threadId??"","");},onTaskLog:P=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",p,P);for(let H of P)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(H),level:"info"});},onCommand:P=>{v=P;},onUsage:P=>{k=P;},onExitCode:P=>{I=P;},onModel:P=>{b||(b=P);}});j();let N=Date.now()-c,E={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",result:A,durationMs:N,exitCode:I,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:k?.costUsd,model:b,metadata:Object.keys(E).length>0?E:void 0}),F=!0,{ok:!0,data:A,meta:{agentId:g.id,provider:p,model:f,durationMs:N,taskId:i}}}catch(A){j();let N=Date.now()-c,E={code:"EXECUTE_FAILED",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:E,exitCode:I,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:k?.costUsd,model:b,metadata:r?.metadata?{...r.metadata}:void 0}),F=true,{ok:false,data:"",error:E,meta:{agentId:g.id,provider:p,model:f,durationMs:N}}}finally{F||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:Date.now()-c,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:I??-1,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:k?.costUsd,model:b});}})}};function qn(n,e){let t=Mr(n)?n:void 0,r=Mr(e)?e:void 0;if(!(!t&&!r))return {...t??{},...r??{}}}function Mr(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function mi(n,e){let t=Array.isArray(n)?n:void 0,r=Array.isArray(e)?e:void 0;if(!t&&!r)return;let o=a=>{if(!Mr(a))return;let d=a.id;if(typeof d=="string")return `id:${d}`;let c=a.name;if(typeof c=="string")return `name:${c}`},s=new Set;for(let a of r??[]){let d=o(a);d&&s.add(d);}let i=[];for(let a of t??[]){let d=o(a);d&&s.has(d)||i.push(a);}for(let a of r??[])i.push(a);return i}async function Bn(n,e,t){if(n.some(o=>(Array.isArray(o.provider)?o.provider:[o.provider]).some(i=>i.startsWith("api/")))){let{registerApiProviders:o}=await Promise.resolve().then(()=>(wr(),Tn));o(t?.api);}yi(n,e),hi(n,e),fi(n);}function fi(n){if(!n.some(r=>(Array.isArray(r.provider)?r.provider:[r.provider]).some(s=>s.startsWith("acp/"))))return;let{registerAcpProviders:t}=(Cr(),zt(Mn));t();}function yi(n,e){if(!n.some(i=>(Array.isArray(i.provider)?i.provider:[i.provider]).some(d=>d.startsWith("remote/"))))return;let r=e.providers;if(!Array.isArray(r))return;let{createRemoteProviderFactory:o}=(Er(),zt(Dn)),s=new Map;for(let i of r)i.type==="remote"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&pe("remote",o(s,ge));}function hi(n,e){if(!n.some(i=>(Array.isArray(i.provider)?i.provider:[i.provider]).some(d=>d.startsWith("plugin/"))))return;let r=e.providers;if(!Array.isArray(r))return;let{createPluginProviderFactory:o}=(Sr(),zt(Un)),s=new Map;for(let i of r)i.type==="plugin"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&pe("plugin",o(s));}l();var Nr=class{detach(e){}};l();var wi="crewx:fs:",Dr=class{prefix;store;constructor(e){this.prefix=e?.prefix??wi,this.store=e?.storage??new Map;}async readFile(e){let t=this.toKey(e),r=this.store.get(t);if(r===void 0)throw new Error(`BrowserFsAdapter: file not found: ${e}`);return r}async exists(e){return this.store.has(this.toKey(e))}resolvePath(...e){let t=e.map(i=>i.replace(/\\/g,"/")).join("/").replace(/\/+/g,"/"),r=t.split("/"),o=[];for(let i of r)i==="."||i===""||(i===".."?o.pop():o.push(i));let s=o.join("/");return t.startsWith("/")?`/${s}`:s}isAbsolute(e){return e.startsWith("/")}setItem(e,t){this.store.set(this.toKey(e),t);}removeItem(e){this.store.delete(this.toKey(e));}keys(){return Array.from(this.store.keys()).filter(e=>e.startsWith(this.prefix)).map(e=>e.slice(this.prefix.length))}async readdir(e){let t=e.replace(/\\/g,"/").replace(/\/$/,""),r=this.toKey(t+"/"),o=[];for(let s of this.store.keys())if(s.startsWith(r)){let a=s.slice(r.length).split("/")[0];a&&!o.includes(a)&&o.push(a);}return o}toKey(e){return `${this.prefix}${e.replace(/\\/g,"/")}`}};l();function xi(n,e){let t=n.skills?.include;if(t===void 0)return [...e];if(t.length===0)return [];let r=new Set(t);return e.filter(o=>r.has(o))}de();hr();wr();l();kr();ke();l();Tt();Nt();Et();function ki(n,e,t,r){let o=t.agentInfo?.name,s=e??o??n,a=(r.modes?.availableModes??[]).map(f=>({id:f.id,name:f.name,...f.description!=null?{description:f.description}:{}})),d=[],c=r.configOptions??[];for(let f of c)if(f.category==="thought_level"&&f.type==="select"){let x=f.options??[];if(x.length>0&&x[0]?.group!=null)for(let R of x)for(let _ of R.options??[])d.push(_.value);else for(let R of x)R.value!=null&&d.push(R.value);}let u=r.models?.availableModels??[],g=n==="claude"?In.map(f=>({id:f.id,name:f.name})):u.map(f=>({id:f.modelId})),h=t.agentCapabilities??{},p={loadSession:h.loadSession??false,image:h.promptCapabilities?.image??false,audio:h.promptCapabilities?.audio??false,mcp:h.mcpCapabilities!=null};return {id:`acp/${n}`,name:s,modes:a,effort:d,models:g,capabilities:p}}async function Wn(n){let e=Se[n];if(!e)return null;let t=e.meta?.displayName,r=new Ee({spawn:e.spawn,cwd:process.cwd()});try{await r.connect(e.clientInfo);let o=r.initResponse;if(!o)return null;let s=e.buildSessionParams({cwd:process.cwd()}),i=await r.newSessionRaw(s);return ki(n,t,o,i)}catch{return null}finally{await r.dispose();}}async function vi(){let n=Object.keys(Se),e=await Promise.allSettled(n.map(r=>Wn(r))),t=[];for(let r of e)r.status==="fulfilled"&&r.value!==null&&t.push(r.value);return t}Tt();vr();Nt();Cr();Kt();He();l();var $r=0;function _i(n){let e=Array.from(n.agents.keys());return {name:"delegate_to_agent",description:`Delegate a task to another agent. Available agents: ${e.join(", ")}`,parameters:{type:"object",properties:{agent:{type:"string",description:`Agent ID to delegate to. One of: ${e.join(", ")}`},message:{type:"string",description:"Task description for the target agent"},mode:{type:"string",description:'Execution mode: "query" for questions, "execute" for actions. Default: query'}},required:["agent","message"]},execute:async t=>{if($r>=3)return "Error: Maximum delegation depth (3) reached. Cannot delegate further.";let r=t.agent,o=t.message,s=t.mode??"query";if(!e.includes(r))return `Error: Unknown agent "${r}". Available: ${e.join(", ")}`;$r++;try{if(s==="execute"){let a=await n.execute(r,o);return a.ok?a.data:`Error: ${a.error?.message??"Unknown error"}`}let i=await n.query(r,o);return i.ok?i.data:`Error: ${i.error?.message??"Unknown error"}`}finally{$r--;}}}}l();var zn=typeof process<"u"?process.env:{};function Ai(){return zn.CREWX_CLI||"npx crewx"}function Ri(){return zn.CREWX_WORKSPACE||(typeof process<"u"?process.cwd():"/")}l();var Pi=/^[a-zA-Z0-9._-]+$/,Lr=class{constructor(e){this.storage=e;}storage;listBoxes(e){this.validateId(e);let r=this.storage.listBoxes(e).map(o=>this.toBoxResponse(o));return {boxes:r,total:r.length}}getBox(e,t){this.validateId(e),this.validateId(t);let r=this.storage.findBox(e,t);return r?this.toBoxResponse(r):null}createBox(e,t){this.validateId(e);let r=this.generateBoxId(),o=new Date().toISOString(),s=this.storage.insertBox(e,{id:r,seq:t.seq,firstTaskId:t.firstTaskId,midTaskId:t.midTaskId,lastTaskId:t.lastTaskId,taskCount:t.taskCount,summary:t.summary??null,sourceTokens:t.sourceTokens,summaryTokens:t.summaryTokens??null,createdAt:o});return this.toBoxResponse(s)}toBoxResponse(e){return {id:e.id,threadId:e.thread_id,seq:e.seq,firstTaskId:e.first_task_id,lastTaskId:e.last_task_id,taskCount:e.task_count,sourceTokens:e.source_tokens,summaryTokens:e.summary_tokens,summary:e.summary,previewFirst:this.storage.getTaskPreview(e.first_task_id,200),previewMid:this.storage.getTaskPreview(e.mid_task_id,200),previewLast:this.storage.getTaskPreview(e.last_task_id,200),createdAt:e.created_at}}validateId(e){if(!Pi.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return be("box")}};l();function Ci(n,e,t,r,o){let{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}=r,d=s*i,c=s*a,u=d+c,g=e.getThreadMessages(n),h=[],p=0,f=false,x=[];for(let v=0;v<g.length;v+=2){let k=g[v],I=g[v+1],b=k?.content||"",W=I?.content||"",j=o.countTokens(b+W),C=[];k&&C.push(k),I&&C.push(I),x.push({messages:C,tokens:j});}for(let v=x.length-1;v>=0;v--){let k=x[v];if(p+k.tokens>d){f=true;break}p+=k.tokens,h.unshift(...k.messages);}let R=[],_=0;if(f&&c>0)try{let{boxes:v}=t.listBoxes(n);for(let k=v.length-1;k>=0;k--){let I=v[k],b=I.summaryTokens??I.sourceTokens;if(_+b>c)break;_+=b,R.unshift({boxId:I.id,seq:I.seq,taskCount:I.taskCount,sourceTokens:I.sourceTokens,summary:I.summary,previewFirst:I.previewFirst,previewMid:I.previewMid,previewLast:I.previewLast,createdAt:I.createdAt});}}catch(v){if(v instanceof Error&&!/not found/i.test(v.message))throw v}return {hot:h,warm:R,hotTokens:p,warmTokens:_,hotOverflow:f,totalBudget:u,config:{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}}}He();Re();l();var Dt=class extends Error{constructor(t,r){super(`Task ${t} timed out after ${r}ms`);this.taskId=t;this.timeoutMs=r;this.name="ParallelRunnerTimeoutError";}taskId;timeoutMs},ut=class{constructor(e={}){this.defaults=e;}defaults;metrics={totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0};async run(e,t={}){if(!Array.isArray(e))throw new TypeError("ParallelRunner.run expects an array of tasks");if(e.length===0)return this.metrics={totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0},[];let r=this.mergeOptions(t),o=Math.max(1,r.maxConcurrency??5),s=r.timeoutMs,i=r.failFast??false,a=r.callbacks,d=r.evaluateTaskSuccess??(()=>true),c=[],u=0,g=0,h=0,p=false,f=0,x=performance.now(),R=async C=>{a?.onTaskStart&&await a.onTaskStart(C),h+=1;let q=new AbortController,Y={signal:q.signal},L,B;typeof s=="number"&&Number.isFinite(s)&&s>0&&(B=new Promise((E,P)=>{L=setTimeout(()=>{let H=new Dt(C.id,s);q.abort(H),P(H);},s);}));let F=performance.now(),A=C.run(Y),N=B?Promise.race([A,B]):A;try{let E=await N,P=performance.now(),H=P-F,Q=d(E,C),J={taskId:C.id,success:Q,value:E,durationMs:H,startedAt:F,finishedAt:P,metadata:C.metadata,aborted:!1};c.push(J),Q?u+=1:g+=1,a?.onTaskComplete&&await a.onTaskComplete(J),i&&!Q&&(p=!0);}catch(E){let P=performance.now(),H=P-F,Q=E instanceof Error?E:new Error(String(E)),J={taskId:C.id,success:false,error:Q,durationMs:H,startedAt:F,finishedAt:P,metadata:C.metadata,aborted:q.signal.aborted};c.push(J),g+=1,a?.onError&&await a.onError(C,Q,H),i&&(p=true);}finally{L&&clearTimeout(L),B&&A.catch(()=>{});}},_=async()=>{for(;!p;){let C=f;if(C>=e.length)break;f+=1;let q=e[C];if(!q||(await R(q),p))break}},v=Math.min(o,e.length),k=[];for(let C=0;C<v;C++)k.push(_());await Promise.all(k);let b=performance.now()-x,W=c.length?c.reduce((C,q)=>C+q.durationMs,0)/c.length:0,j=b>0?c.length/(b/1e3):c.length;return this.metrics={totalTasks:e.length,startedTasks:h,completedTasks:c.length,successCount:u,failureCount:g,totalDurationMs:b,averageDurationMs:W,throughput:j},c}getMetrics(){return this.metrics}mergeOptions(e){return {maxConcurrency:e.maxConcurrency??this.defaults.maxConcurrency,timeoutMs:e.timeoutMs??this.defaults.timeoutMs,failFast:e.failFast??this.defaults.failFast,evaluateTaskSuccess:e.evaluateTaskSuccess??this.defaults.evaluateTaskSuccess,callbacks:this.mergeCallbacks(this.defaults.callbacks,e.callbacks)}}mergeCallbacks(e,t){if(!(!e&&!t))return {onTaskStart:async r=>{e?.onTaskStart&&await e.onTaskStart(r),t?.onTaskStart&&await t.onTaskStart(r);},onTaskComplete:async r=>{e?.onTaskComplete&&await e.onTaskComplete(r),t?.onTaskComplete&&await t.onTaskComplete(r);},onError:async(r,o,s)=>{e?.onError&&await e.onError(r,o,s),t?.onError&&await t.onError(r,o,s);}}}};l();l();var pt=class{async query(e){throw new Error("AgentRuntime.query is not implemented. Provide a subclass or mock AgentRuntime.prototype.query.")}async execute(e){throw new Error("AgentRuntime.execute is not implemented. Provide a subclass or mock AgentRuntime.prototype.execute.")}};var Vn=3,Kn=3e4,Jn=500,Ti=n=>{if(typeof n!="number"||Number.isNaN(n)||!Number.isFinite(n))return Vn;let e=Math.floor(n);return e>0?e:Vn},bi=n=>n===void 0||typeof n!="number"||Number.isNaN(n)||n<=0?Kn:n,Ei=n=>{if(!n)return {maxRetries:0,retryDelay:Jn};let e=Number.isInteger(n.maxRetries)&&n.maxRetries>=0?n.maxRetries:0,t=typeof n.retryDelay=="number"&&n.retryDelay>=0?n.retryDelay:Jn;return {maxRetries:e,retryDelay:t}},jr=n=>{let e=n.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},Si=(n,e)=>n<=0?Promise.resolve():new Promise((t,r)=>{let o=setTimeout(()=>{e.removeEventListener("abort",s),t();},n),s=()=>{clearTimeout(o),r(jr(e));};if(e.aborted){s();return}e.addEventListener("abort",s,{once:true});}),Ii=async(n,e,t)=>{let r,o;for(let s=0;s<=e.maxRetries;s++){if(t.aborted)throw jr(t);try{let i=await n();if(r=i,i.success||s===e.maxRetries)return i}catch(i){if(o=i,t.aborted)throw jr(t);if(s===e.maxRetries)throw i instanceof Error?i:new Error(String(i))}s<e.maxRetries&&await Si(e.retryDelay,t);}if(r)return r;throw o?o instanceof Error?o:new Error(String(o)):new Error("Parallel helper encountered an unexpected state")},Xn=(n,e,t)=>{e.completed+=1,t?e.success+=1:e.failure+=1;try{n.onProgress?.(e.completed,e.total);}catch(r){process.env.NODE_ENV!=="production"&&console.warn("Parallel helper onProgress callback threw an error:",r);}},Oi=n=>n.map(t=>({metadata:t.metadata,taskResult:t})).slice().sort((t,r)=>t.metadata.index-r.metadata.index).map(({metadata:t,taskResult:r})=>{if(r.value){let s=r.value;return {...s,agentId:s.agentId??t.request.agentId,metadata:{...s.metadata,requestIndex:t.index,mode:t.mode}}}let o=r.error??new Error("Unknown error");return {agentId:t.request.agentId,content:o.message,success:false,metadata:{error:o.message,aborted:r.aborted??false,requestIndex:t.index,mode:t.mode}}}),Mi=n=>n.filter(e=>!e.success).map(e=>{let t=e.metadata;if(e.error instanceof Error)return {index:t.index,error:e.error};if(e.value&&!e.value.success){let r=String(e.value.metadata?.error??e.value.content??"Agent returned unsuccessful result");return {index:t.index,error:new Error(r)}}return {index:t.index,error:new Error("Unknown failure")}}),Ni=(n,e)=>({onTaskComplete:async t=>{Xn(e,n,t.success);},onError:async()=>{Xn(e,n,false);}}),Gn=async(n,e,t={})=>{if(!Array.isArray(n))throw new TypeError("Parallel helpers expect an array of requests");if(n.length===0){let R={total:0,completed:0,successCount:0,failureCount:0,results:[],errors:[],metrics:{totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0}};return t.onComplete?.(R),[]}let r=Ti(t.concurrency),o=bi(t.timeout),s=Ei(t.retryPolicy),i=new ut,a=new pt,d=n.map((x,R)=>({id:`${e}:${x.agentId??"anonymous"}:${R}`,metadata:{index:R,mode:e,request:x},run:_=>Ii(()=>e==="query"?a.query(x):a.execute(x),s,_.signal)})),c={completed:0,success:0,failure:0,total:n.length},u=await i.run(d,{maxConcurrency:r,timeoutMs:o,evaluateTaskSuccess:x=>x.success,callbacks:Ni(c,t)}),g=Oi(u),h=Mi(u),p=i.getMetrics(),f={total:n.length,completed:n.length,successCount:g.filter(x=>x.success).length,failureCount:g.filter(x=>!x.success).length,results:g,errors:h,metrics:p};return t.onComplete?.(f),g},Di=(n,e)=>Gn(n,"query",e),$i=(n,e)=>Gn(n,"execute",e);Sr();l();l();var Be=class{resolveDbPath(){return process.env.CREWX_DB?process.env.CREWX_DB:process.env.CREWX_TRACES_DB?process.env.CREWX_TRACES_DB:join(Ui.homedir(),".crewx","crewx.db")}resolveDbPaths(){return [this.resolveDbPath()]}isMissingTableError(e){return e instanceof Error&&/no such table:/i.test(e.message)}dbExists(e){return existsSync(e??this.resolveDbPath())}};l();function ye(n){let e=V("better-sqlite3"),{drizzle:t}=V("drizzle-orm/better-sqlite3"),r=new e(n);return r.exec("PRAGMA journal_mode = WAL"),r.exec("PRAGMA busy_timeout = 5000"),r.exec("PRAGMA foreign_keys = ON"),{db:t(r),runRaw:(o,s=[])=>r.prepare(o).run(...s),close:()=>r.close()}}l();var Qn=new Set,Hi={agent_id:"TEXT",status:"TEXT DEFAULT 'running'",started_at:"TEXT",trace_id:"TEXT",parent_task_id:"TEXT",crewx_version:"TEXT",pid:"INTEGER",thread_id:"TEXT",workspace_id:"TEXT",workspace_ref:"TEXT",workspace_name:"TEXT",project_id:"TEXT",project_name:"TEXT"};function qi(n,e){return (n.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function Bi(n,e){if(e>0||!qi(n,"tasks"))return;let t=n.all("PRAGMA table_info(tasks)"),r=new Set(t.map(o=>o.name));for(let[o,s]of Object.entries(Hi))r.has(o)||n.run(`ALTER TABLE tasks ADD COLUMN ${o} ${s}`);}function Wi(n,e,t){let r=n.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(readFileSync(z__default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=z__default.join(e,`${i.tag}.sql`);if(!existsSync(a))continue;let d=readFileSync(a,"utf-8"),c=createHash("sha256").update(d).digest("hex");if(o.has(c))continue;let u=/ALTER\s+TABLE\s+[`"]?(\w+)[`"]?\s+ADD\s+[`"]?(\w+)[`"]?/gi,g=[],h;for(;(h=u.exec(d))!==null;)g.push({table:h[1],column:h[2]});if(g.length===0||!d.split(/-->\s*statement-breakpoint/).map(x=>x.trim()).filter(Boolean).every(x=>/^ALTER\s+TABLE\s+.+\s+ADD\s+/i.test(x)))continue;g.every(({table:x,column:R})=>n.all(`PRAGMA table_info("${x}")`).some(v=>v.name===R))&&n.run(t`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${c}, ${i.when})`);}}function zi(n){let{migrate:e}=V("drizzle-orm/better-sqlite3/migrator"),{sql:t}=V("drizzle-orm"),r=[z__default.join(m,"../migrations"),z__default.join(m,"migrations"),z__default.join(m,"../../../../drizzle/migrations"),z__default.join(process.cwd(),"drizzle/migrations")],o=r.find(c=>existsSync(z__default.join(c,"meta/_journal.json")));if(!o)throw new Error(`migrations folder not found. Searched:
53
53
  ${r.join(`
54
- `)}`);let s=o.get(t`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'`),i=0;s?.cnt&&(i=o.get(t`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0),Ui(o,i),s?.cnt&&Fi(o,n,t),e(o,{migrationsFolder:n});let d=(o.get(t`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0)-i;if(d>0){let c=s?.cnt?"Database migrated":"Database initialized";console.log(`[crewx] ${c} (${d} migration${d>1?"s":""} applied).`);}}function Nt(o,e){Xn.has(e)||(Hi(o),Xn.add(e));}l();var M=class extends Error{code;cause;constructor(e,t,r){super(t),this.name="RepositoryError",this.code=e,this.cause=r,Object.setPrototypeOf(this,new.target.prototype);}};l();l();var Yn=sqliteTable("workspaces",{id:text("id").primaryKey(),slug:text("slug").notNull().unique(),name:text("name").notNull(),workspace_path:text("workspace_path"),description:text("description"),is_active:integer("is_active").notNull().default(1),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull()});l();var w=sqliteTable("tasks",{id:text("id").primaryKey(),agent_id:text("agent_id").notNull(),user_id:text("user_id"),prompt:text("prompt").notNull(),mode:text("mode").notNull().default("execute"),status:text("status").notNull().default("running"),result:text("result"),error:text("error"),started_at:text("started_at").notNull(),completed_at:text("completed_at"),duration_ms:integer("duration_ms"),metadata:text("metadata"),workspace_id:text("workspace_id"),trace_id:text("trace_id"),parent_task_id:text("parent_task_id"),caller_agent_id:text("caller_agent_id"),model:text("model"),platform:text("platform").default("cli"),crewx_version:text("crewx_version"),input_tokens:integer("input_tokens").default(0),output_tokens:integer("output_tokens").default(0),cost_usd:real("cost_usd").default(0),pid:integer("pid"),rendered_prompt:text("rendered_prompt"),command:text("command"),coding_agent_command:text("coding_agent_command"),exit_code:integer("exit_code"),logs:text("logs"),thread_id:text("thread_id"),workspace_ref:text("workspace_ref"),project_id:text("project_id"),project_ref:text("project_ref"),cached_input_tokens:integer("cached_input_tokens").default(0)},o=>({idx_tasks_agent_id:index("idx_tasks_agent_id").on(o.agent_id),idx_tasks_status:index("idx_tasks_status").on(o.status),idx_tasks_started_at:index("idx_tasks_started_at").on(o.started_at),idx_tasks_trace_id:index("idx_tasks_trace_id").on(o.trace_id),idx_tasks_parent_task_id:index("idx_tasks_parent_task_id").on(o.parent_task_id),idx_tasks_crewx_version:index("idx_tasks_crewx_version").on(o.crewx_version),idx_tasks_pid:index("idx_tasks_pid").on(o.pid),idx_tasks_thread_id:index("idx_tasks_thread_id").on(o.thread_id),idx_tasks_workspace_id:index("idx_tasks_workspace_id").on(o.workspace_id),idx_tasks_workspace_ref:index("idx_tasks_workspace_ref").on(o.workspace_ref),idx_tasks_project_id:index("idx_tasks_project_id").on(o.project_id),idx_tasks_ws_started:index("idx_tasks_ws_started").on(o.workspace_id,o.started_at)}));l();var Zn=sqliteTable("threads",{id:text("id").primaryKey(),workspace_id:text("workspace_id").references(()=>Yn.id,{onDelete:"set null"}),platform:text("platform").notNull().default("cli"),title:text("title"),first_message:text("first_message"),last_message:text("last_message"),message_count:integer("message_count").notNull().default(0),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull(),metadata:text("metadata"),title_locked:integer("title_locked").notNull().default(0),pinned:integer("pinned").notNull().default(0),starred:integer("starred").notNull().default(0)},o=>({idx_threads_updated_at:index("idx_threads_updated_at").on(o.updated_at),idx_threads_workspace_id:index("idx_threads_workspace_id").on(o.workspace_id)}));l();var Oe=sqliteTable("spans",{id:text("id").primaryKey(),task_id:text("task_id").references(()=>w.id,{onDelete:"set null"}),parent_span_id:text("parent_span_id").references(()=>Oe.id,{onDelete:"set null"}),name:text("name").notNull(),kind:text("kind").notNull().default("internal"),status:text("status").notNull().default("ok"),started_at:text("started_at").notNull(),completed_at:text("completed_at"),duration_ms:integer("duration_ms"),input:text("input"),output:text("output"),error:text("error"),attributes:text("attributes")},o=>({idx_spans_task_id:index("idx_spans_task_id").on(o.task_id),idx_spans_parent_span_id:index("idx_spans_parent_span_id").on(o.parent_span_id)}));l();sqliteTable("tool_calls",{id:text("id").primaryKey(),task_id:text("task_id").references(()=>w.id,{onDelete:"cascade"}),session_id:text("session_id"),tool_name:text("tool_name").notNull(),files:text("files"),input:text("input"),output:text("output"),duration_ms:integer("duration_ms"),timestamp:text("timestamp").notNull()},o=>({idx_tool_calls_task_id:index("idx_tool_calls_task_id").on(o.task_id),idx_tool_calls_tool_name:index("idx_tool_calls_tool_name").on(o.tool_name),idx_tool_calls_timestamp:index("idx_tool_calls_timestamp").on(o.timestamp)}));l();sqliteTable("thread_boxes",{id:text("id").primaryKey(),thread_id:text("thread_id").notNull().references(()=>Zn.id,{onDelete:"cascade"}),seq:integer("seq").notNull(),first_task_id:text("first_task_id").notNull(),mid_task_id:text("mid_task_id").notNull(),last_task_id:text("last_task_id").notNull(),task_count:integer("task_count").notNull(),summary:text("summary"),source_tokens:integer("source_tokens").notNull(),summary_tokens:integer("summary_tokens"),created_at:text("created_at").notNull()},o=>({idx_thread_boxes_thread_id:index("idx_thread_boxes_thread_id").on(o.thread_id),idx_thread_boxes_seq:index("idx_thread_boxes_seq").on(o.thread_id,o.seq),uniq_thread_boxes_thread_seq:unique().on(o.thread_id,o.seq)}));l();sqliteTable("request_logs",{id:text("id").primaryKey(),path:text("path").notNull(),method:text("method").notNull(),status_code:integer("status_code").notNull(),duration_ms:integer("duration_ms").notNull(),ip:text("ip"),request_headers:text("request_headers"),response_headers:text("response_headers"),request_body:text("request_body"),response_body:text("response_body"),query:text("query"),user_id:text("user_id"),project_id:text("project_id"),partition_key:text("partition_key").notNull(),timestamp:text("timestamp").notNull().default(sql`(datetime('now'))`),metadata:text("metadata")},o=>({idx_request_logs_timestamp:index("idx_request_logs_timestamp").on(o.timestamp),idx_request_logs_path:index("idx_request_logs_path").on(o.path),idx_request_logs_status_code:index("idx_request_logs_status_code").on(o.status_code),idx_request_logs_partition_key:index("idx_request_logs_partition_key").on(o.partition_key)}));var Fr=class extends qe{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let n=dirname(t);existsSync(n)||mkdirSync(n,{recursive:true});}else if(!existsSync(t))throw new M("NOT_FOUND","Database not found");let r=ye(t);if(e)try{Nt(r.db,t);}catch(n){throw r.close(),n}return r}startTask(e){let t=this.openHandle(true);try{t.db.insert(w).values({id:e.id,agent_id:e.agentId,prompt:e.prompt,mode:e.mode,status:e.status,started_at:e.startedAt,pid:e.pid??null,parent_task_id:e.parentTaskId??null,caller_agent_id:e.callerAgentId??null,trace_id:e.traceId??null,command:e.command??null,metadata:e.metadata??null,workspace_id:e.workspaceId??null,platform:e.platform??"cli",crewx_version:e.crewxVersion??null,thread_id:e.threadId??null,model:e.model??null,rendered_prompt:e.renderedPrompt??null,coding_agent_command:e.codingAgentCommand??null}).onConflictDoNothing().run();}catch(r){throw r instanceof M?r:new M("DB_ERROR","Failed to start task",r)}finally{t.close();}}finishTask(e){let t=this.openHandle(true);try{t.runRaw(`UPDATE tasks SET status=?, result=?, error=?, completed_at=?, duration_ms=?,
54
+ `)}`);let s=n.get(t`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'`),i=0;s?.cnt&&(i=n.get(t`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0),Bi(n,i),s?.cnt&&Wi(n,o,t),e(n,{migrationsFolder:o});let d=(n.get(t`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0)-i;if(d>0){let c=s?.cnt?"Database migrated":"Database initialized";console.log(`[crewx] ${c} (${d} migration${d>1?"s":""} applied).`);}}function $t(n,e){Qn.has(e)||(zi(n),Qn.add(e));}l();var M=class extends Error{code;cause;constructor(e,t,r){super(t),this.name="RepositoryError",this.code=e,this.cause=r,Object.setPrototypeOf(this,new.target.prototype);}};l();l();var eo=sqliteTable("workspaces",{id:text("id").primaryKey(),slug:text("slug").notNull().unique(),name:text("name").notNull(),workspace_path:text("workspace_path"),description:text("description"),is_active:integer("is_active").notNull().default(1),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull()});l();var w=sqliteTable("tasks",{id:text("id").primaryKey(),agent_id:text("agent_id").notNull(),user_id:text("user_id"),prompt:text("prompt").notNull(),mode:text("mode").notNull().default("execute"),status:text("status").notNull().default("running"),result:text("result"),error:text("error"),started_at:text("started_at").notNull(),completed_at:text("completed_at"),duration_ms:integer("duration_ms"),metadata:text("metadata"),workspace_id:text("workspace_id"),trace_id:text("trace_id"),parent_task_id:text("parent_task_id"),caller_agent_id:text("caller_agent_id"),model:text("model"),platform:text("platform").default("cli"),crewx_version:text("crewx_version"),input_tokens:integer("input_tokens").default(0),output_tokens:integer("output_tokens").default(0),cost_usd:real("cost_usd").default(0),pid:integer("pid"),rendered_prompt:text("rendered_prompt"),command:text("command"),coding_agent_command:text("coding_agent_command"),exit_code:integer("exit_code"),logs:text("logs"),thread_id:text("thread_id"),workspace_ref:text("workspace_ref"),project_id:text("project_id"),project_ref:text("project_ref"),cached_input_tokens:integer("cached_input_tokens").default(0)},n=>({idx_tasks_agent_id:index("idx_tasks_agent_id").on(n.agent_id),idx_tasks_status:index("idx_tasks_status").on(n.status),idx_tasks_started_at:index("idx_tasks_started_at").on(n.started_at),idx_tasks_trace_id:index("idx_tasks_trace_id").on(n.trace_id),idx_tasks_parent_task_id:index("idx_tasks_parent_task_id").on(n.parent_task_id),idx_tasks_crewx_version:index("idx_tasks_crewx_version").on(n.crewx_version),idx_tasks_pid:index("idx_tasks_pid").on(n.pid),idx_tasks_thread_id:index("idx_tasks_thread_id").on(n.thread_id),idx_tasks_workspace_id:index("idx_tasks_workspace_id").on(n.workspace_id),idx_tasks_workspace_ref:index("idx_tasks_workspace_ref").on(n.workspace_ref),idx_tasks_project_id:index("idx_tasks_project_id").on(n.project_id),idx_tasks_ws_started:index("idx_tasks_ws_started").on(n.workspace_id,n.started_at)}));l();var ro=sqliteTable("threads",{id:text("id").primaryKey(),workspace_id:text("workspace_id").references(()=>eo.id,{onDelete:"set null"}),platform:text("platform").notNull().default("cli"),title:text("title"),first_message:text("first_message"),last_message:text("last_message"),message_count:integer("message_count").notNull().default(0),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull(),metadata:text("metadata"),title_locked:integer("title_locked").notNull().default(0),pinned:integer("pinned").notNull().default(0),starred:integer("starred").notNull().default(0)},n=>({idx_threads_updated_at:index("idx_threads_updated_at").on(n.updated_at),idx_threads_workspace_id:index("idx_threads_workspace_id").on(n.workspace_id)}));l();var Me=sqliteTable("spans",{id:text("id").primaryKey(),task_id:text("task_id").references(()=>w.id,{onDelete:"set null"}),parent_span_id:text("parent_span_id").references(()=>Me.id,{onDelete:"set null"}),name:text("name").notNull(),kind:text("kind").notNull().default("internal"),status:text("status").notNull().default("ok"),started_at:text("started_at").notNull(),completed_at:text("completed_at"),duration_ms:integer("duration_ms"),input:text("input"),output:text("output"),error:text("error"),attributes:text("attributes")},n=>({idx_spans_task_id:index("idx_spans_task_id").on(n.task_id),idx_spans_parent_span_id:index("idx_spans_parent_span_id").on(n.parent_span_id)}));l();sqliteTable("tool_calls",{id:text("id").primaryKey(),task_id:text("task_id").references(()=>w.id,{onDelete:"cascade"}),session_id:text("session_id"),tool_name:text("tool_name").notNull(),files:text("files"),input:text("input"),output:text("output"),duration_ms:integer("duration_ms"),timestamp:text("timestamp").notNull()},n=>({idx_tool_calls_task_id:index("idx_tool_calls_task_id").on(n.task_id),idx_tool_calls_tool_name:index("idx_tool_calls_tool_name").on(n.tool_name),idx_tool_calls_timestamp:index("idx_tool_calls_timestamp").on(n.timestamp)}));l();sqliteTable("thread_boxes",{id:text("id").primaryKey(),thread_id:text("thread_id").notNull().references(()=>ro.id,{onDelete:"cascade"}),seq:integer("seq").notNull(),first_task_id:text("first_task_id").notNull(),mid_task_id:text("mid_task_id").notNull(),last_task_id:text("last_task_id").notNull(),task_count:integer("task_count").notNull(),summary:text("summary"),source_tokens:integer("source_tokens").notNull(),summary_tokens:integer("summary_tokens"),created_at:text("created_at").notNull()},n=>({idx_thread_boxes_thread_id:index("idx_thread_boxes_thread_id").on(n.thread_id),idx_thread_boxes_seq:index("idx_thread_boxes_seq").on(n.thread_id,n.seq),uniq_thread_boxes_thread_seq:unique().on(n.thread_id,n.seq)}));l();sqliteTable("request_logs",{id:text("id").primaryKey(),path:text("path").notNull(),method:text("method").notNull(),status_code:integer("status_code").notNull(),duration_ms:integer("duration_ms").notNull(),ip:text("ip"),request_headers:text("request_headers"),response_headers:text("response_headers"),request_body:text("request_body"),response_body:text("response_body"),query:text("query"),user_id:text("user_id"),project_id:text("project_id"),partition_key:text("partition_key").notNull(),timestamp:text("timestamp").notNull().default(sql`(datetime('now'))`),metadata:text("metadata")},n=>({idx_request_logs_timestamp:index("idx_request_logs_timestamp").on(n.timestamp),idx_request_logs_path:index("idx_request_logs_path").on(n.path),idx_request_logs_status_code:index("idx_request_logs_status_code").on(n.status_code),idx_request_logs_partition_key:index("idx_request_logs_partition_key").on(n.partition_key)}));var qr=class extends Be{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=dirname(t);existsSync(o)||mkdirSync(o,{recursive:true});}else if(!existsSync(t))throw new M("NOT_FOUND","Database not found");let r=ye(t);if(e)try{$t(r.db,t);}catch(o){throw r.close(),o}return r}startTask(e){let t=this.openHandle(true);try{t.db.insert(w).values({id:e.id,agent_id:e.agentId,prompt:e.prompt,mode:e.mode,status:e.status,started_at:e.startedAt,pid:e.pid??null,parent_task_id:e.parentTaskId??null,caller_agent_id:e.callerAgentId??null,trace_id:e.traceId??null,command:e.command??null,metadata:e.metadata??null,workspace_id:e.workspaceId??null,platform:e.platform??"cli",crewx_version:e.crewxVersion??null,thread_id:e.threadId??null,model:e.model??null,rendered_prompt:e.renderedPrompt??null,coding_agent_command:e.codingAgentCommand??null}).onConflictDoNothing().run();}catch(r){throw r instanceof M?r:new M("DB_ERROR","Failed to start task",r)}finally{t.close();}}finishTask(e){let t=this.openHandle(true);try{t.runRaw(`UPDATE tasks SET status=?, result=?, error=?, completed_at=?, duration_ms=?,
55
55
  exit_code=?, input_tokens=?, output_tokens=?, cached_input_tokens=?, cost_usd=?,
56
- model=COALESCE(?, model) WHERE id=?`,[e.status,e.result??null,e.error??null,e.completedAt,e.durationMs??null,e.exitCode??null,e.inputTokens??0,e.outputTokens??0,e.cachedInputTokens??0,e.costUsd??0,e.model??null,e.id]);}catch(r){throw r instanceof M?r:new M("DB_ERROR","Failed to finish task",r)}finally{t.close();}}appendLog(e,t){let r=this.openHandle(true);try{r.db.transaction(n=>{let s=n.select({logs:w.logs}).from(w).where(eq(w.id,e)).limit(1).get(),i=s?.logs?JSON.parse(s.logs):[];i.push(t),n.update(w).set({logs:JSON.stringify(i)}).where(eq(w.id,e)).run();},{behavior:"immediate"});}catch(n){throw n instanceof M?n:new M("DB_ERROR","Failed to append log",n)}finally{r.close();}}getRunningTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(w).where(eq(w.status,"running")).orderBy(desc(w.started_at)).all()}catch(t){throw new M("DB_ERROR","Failed to get running tasks",t)}finally{e.close();}}getAllTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(w).orderBy(desc(w.started_at)).limit(100).all()}catch(t){throw new M("DB_ERROR","Failed to get all tasks",t)}finally{e.close();}}getTask(e){if(!this.dbExists())return;let t=this.openHandle(false);try{return t.db.select().from(w).where(eq(w.id,e)).limit(1).get()??void 0}catch(r){throw new M("DB_ERROR","Failed to get task",r)}finally{t.close();}}killTask(e){if(!this.dbExists())return {killed:false};let t=this.openHandle(true);try{let r=t.db.select({id:w.id,status:w.status,pid:w.pid}).from(w).where(eq(w.id,e)).limit(1).get();if(!r||r.status!=="running")return {killed:!1};if(r.pid)try{process.kill(r.pid,"SIGTERM");}catch{}return t.db.update(w).set({status:"failed",error:"Killed by user",completed_at:new Date().toISOString()}).where(and(eq(w.id,e),eq(w.status,"running"))).run(),{killed:!0,pid:r.pid??void 0}}catch(r){throw r instanceof M?r:new M("DB_ERROR","Failed to kill task",r)}finally{t.close();}}reapOrphanedTasks(){if(!this.dbExists())return 0;let e=this.openHandle(true);try{let t=e.db.select({id:w.id,pid:w.pid}).from(w).where(eq(w.status,"running")).all(),r=0;for(let n of t){let s=!1;if(n.pid)try{process.kill(n.pid,0),s=!0;}catch{}s||(e.db.update(w).set({status:"failed",error:"Reaped: process not found (orphaned task)",completed_at:new Date().toISOString()}).where(and(eq(w.id,n.id),eq(w.status,"running"))).run(),r++);}return r}finally{e.close();}}findTaskStatus(e,t){let r=this.resolveDbPaths();for(let n of r){if(!existsSync(n))continue;let s=ye(n);try{let i=t?eq(w.workspace_id,t):void 0,a=i?and(eq(w.id,e),i):eq(w.id,e),d=s.db.select().from(w).where(a).limit(1).get()??void 0;if(!d){let c=or$1(eq(w.thread_id,e),and(isNull(w.thread_id),like(w.command,`%--thread=${e}%`))),u=i?and(c,i):c;d=s.db.select().from(w).where(u).orderBy(desc(w.started_at)).limit(1).get()??void 0;}if(d)return d}catch(i){throw new M("DB_ERROR","Failed to find task status",i)}finally{s.close();}}}findChildTasks(e,t){let r=this.resolveDbPaths(),n=new Set,s=[];for(let i of r){if(!existsSync(i))continue;let a=ye(i);try{let d=t?and(eq(w.parent_task_id,e),eq(w.workspace_id,t)):eq(w.parent_task_id,e),c=a.db.select().from(w).where(d).orderBy(asc(w.started_at)).all();for(let u of c)n.has(u.id)||(n.add(u.id),s.push(u));}catch(d){throw new M("DB_ERROR","Failed to find child tasks",d)}finally{a.close();}}return s}getWorkspaceUsageSummary(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.all(e?sql`
56
+ model=COALESCE(?, model) WHERE id=?`,[e.status,e.result??null,e.error??null,e.completedAt,e.durationMs??null,e.exitCode??null,e.inputTokens??0,e.outputTokens??0,e.cachedInputTokens??0,e.costUsd??0,e.model??null,e.id]);}catch(r){throw r instanceof M?r:new M("DB_ERROR","Failed to finish task",r)}finally{t.close();}}appendLog(e,t){let r=this.openHandle(true);try{r.db.transaction(o=>{let s=o.select({logs:w.logs}).from(w).where(eq(w.id,e)).limit(1).get(),i=s?.logs?JSON.parse(s.logs):[];i.push(t),o.update(w).set({logs:JSON.stringify(i)}).where(eq(w.id,e)).run();},{behavior:"immediate"});}catch(o){throw o instanceof M?o:new M("DB_ERROR","Failed to append log",o)}finally{r.close();}}getRunningTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(w).where(eq(w.status,"running")).orderBy(desc(w.started_at)).all()}catch(t){throw new M("DB_ERROR","Failed to get running tasks",t)}finally{e.close();}}getAllTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(w).orderBy(desc(w.started_at)).limit(100).all()}catch(t){throw new M("DB_ERROR","Failed to get all tasks",t)}finally{e.close();}}getTask(e){if(!this.dbExists())return;let t=this.openHandle(false);try{return t.db.select().from(w).where(eq(w.id,e)).limit(1).get()??void 0}catch(r){throw new M("DB_ERROR","Failed to get task",r)}finally{t.close();}}killTask(e){if(!this.dbExists())return {killed:false};let t=this.openHandle(true);try{let r=t.db.select({id:w.id,status:w.status,pid:w.pid}).from(w).where(eq(w.id,e)).limit(1).get();if(!r||r.status!=="running")return {killed:!1};if(r.pid)try{process.kill(r.pid,"SIGTERM");}catch{}return t.db.update(w).set({status:"failed",error:"Killed by user",completed_at:new Date().toISOString()}).where(and(eq(w.id,e),eq(w.status,"running"))).run(),{killed:!0,pid:r.pid??void 0}}catch(r){throw r instanceof M?r:new M("DB_ERROR","Failed to kill task",r)}finally{t.close();}}reapOrphanedTasks(){if(!this.dbExists())return 0;let e=this.openHandle(true);try{let t=e.db.select({id:w.id,pid:w.pid}).from(w).where(eq(w.status,"running")).all(),r=0;for(let o of t){let s=!1;if(o.pid)try{process.kill(o.pid,0),s=!0;}catch{}s||(e.db.update(w).set({status:"failed",error:"Reaped: process not found (orphaned task)",completed_at:new Date().toISOString()}).where(and(eq(w.id,o.id),eq(w.status,"running"))).run(),r++);}return r}finally{e.close();}}findTaskStatus(e,t){let r=this.resolveDbPaths();for(let o of r){if(!existsSync(o))continue;let s=ye(o);try{let i=t?eq(w.workspace_id,t):void 0,a=i?and(eq(w.id,e),i):eq(w.id,e),d=s.db.select().from(w).where(a).limit(1).get()??void 0;if(!d){let c=or$1(eq(w.thread_id,e),and(isNull(w.thread_id),like(w.command,`%--thread=${e}%`))),u=i?and(c,i):c;d=s.db.select().from(w).where(u).orderBy(desc(w.started_at)).limit(1).get()??void 0;}if(d)return d}catch(i){throw new M("DB_ERROR","Failed to find task status",i)}finally{s.close();}}}findChildTasks(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!existsSync(i))continue;let a=ye(i);try{let d=t?and(eq(w.parent_task_id,e),eq(w.workspace_id,t)):eq(w.parent_task_id,e),c=a.db.select().from(w).where(d).orderBy(asc(w.started_at)).all();for(let u of c)o.has(u.id)||(o.add(u.id),s.push(u));}catch(d){throw new M("DB_ERROR","Failed to find child tasks",d)}finally{a.close();}}return s}getWorkspaceUsageSummary(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.all(e?sql`
57
57
  SELECT
58
58
  COALESCE(workspace_id, 'unknown') AS workspace_id,
59
59
  COALESCE(SUM(input_tokens), 0) AS input_tokens,
@@ -74,7 +74,7 @@ ${r.join(`
74
74
  FROM tasks
75
75
  GROUP BY workspace_id
76
76
  ORDER BY (COALESCE(SUM(input_tokens), 0) + COALESCE(SUM(output_tokens), 0)) DESC
77
- `)}catch(r){throw new M("DB_ERROR","Failed to get workspace usage summary",r)}finally{t.close();}}getThreadTokenUsage(e,t){let r=this.resolveDbPaths(),n=new Set,s=0,i=0,a=0;for(let d of r){if(!existsSync(d))continue;let c=ye(d);try{let u=or$1(eq(w.thread_id,e),and(isNull(w.thread_id),like(w.command,`%--thread=${e}%`))),g=t?and(u,eq(w.workspace_id,t)):u,h=c.db.select({id:w.id,input_tokens:w.input_tokens,output_tokens:w.output_tokens,cost_usd:w.cost_usd}).from(w).where(g).all();for(let p of h)n.has(p.id)||(n.add(p.id),s+=p.input_tokens??0,i+=p.output_tokens??0,a+=p.cost_usd??0);}catch(u){throw new M("DB_ERROR","Failed to get thread token usage",u)}finally{c.close();}}return {inputTokens:s,outputTokens:i,costUsd:a}}findTasksByThread(e,t){let r=this.resolveDbPaths(),n=new Set,s=[];for(let i of r){if(!existsSync(i))continue;let a=ye(i);try{let d=or$1(eq(w.thread_id,e),and(isNull(w.thread_id),like(w.command,`%--thread=${e}%`))),c=t?and(d,eq(w.workspace_id,t)):d,u=a.db.select().from(w).where(c).orderBy(asc(w.started_at)).all();for(let g of u)n.has(g.id)||(n.add(g.id),s.push(g));}catch(d){throw new M("DB_ERROR","Failed to find tasks by thread",d)}finally{a.close();}}return s}findAllTasks(e){if(!this.dbExists())return {rows:[],total:0};let t=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(eq(w.workspace_id,e.workspaceId));let n=e.agents&&e.agents.length>0?e.agents:e.agentId?[e.agentId]:null;n&&r.push(inArray(w.agent_id,n));let s=e.statuses&&e.statuses.length>0?e.statuses:e.status?[e.status]:null;s&&r.push(inArray(w.status,s));let i=e.q??e.search;i&&r.push(like(w.prompt,`%${i}%`)),e.from&&r.push(gte(w.started_at,e.from)),e.to&&r.push(lt$1(w.started_at,e.to));let a=r.length>0?and(...r):void 0,d=t.db.select({count:sql`count(*)`}).from(w).where(a).get(),c=(e.sortDir??"DESC")==="ASC"?asc(w.started_at):desc(w.started_at);return {rows:t.db.select().from(w).where(a).orderBy(c).limit(e.limit).offset(e.offset).all(),total:d?.count??0}}catch(r){throw new M("DB_ERROR","Failed to find all tasks",r)}finally{t.close();}}getAgentUsage(e,t,r){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.all(r?sql`
77
+ `)}catch(r){throw new M("DB_ERROR","Failed to get workspace usage summary",r)}finally{t.close();}}getThreadTokenUsage(e,t){let r=this.resolveDbPaths(),o=new Set,s=0,i=0,a=0;for(let d of r){if(!existsSync(d))continue;let c=ye(d);try{let u=or$1(eq(w.thread_id,e),and(isNull(w.thread_id),like(w.command,`%--thread=${e}%`))),g=t?and(u,eq(w.workspace_id,t)):u,h=c.db.select({id:w.id,input_tokens:w.input_tokens,output_tokens:w.output_tokens,cost_usd:w.cost_usd}).from(w).where(g).all();for(let p of h)o.has(p.id)||(o.add(p.id),s+=p.input_tokens??0,i+=p.output_tokens??0,a+=p.cost_usd??0);}catch(u){throw new M("DB_ERROR","Failed to get thread token usage",u)}finally{c.close();}}return {inputTokens:s,outputTokens:i,costUsd:a}}findTasksByThread(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!existsSync(i))continue;let a=ye(i);try{let d=or$1(eq(w.thread_id,e),and(isNull(w.thread_id),like(w.command,`%--thread=${e}%`))),c=t?and(d,eq(w.workspace_id,t)):d,u=a.db.select().from(w).where(c).orderBy(asc(w.started_at)).all();for(let g of u)o.has(g.id)||(o.add(g.id),s.push(g));}catch(d){throw new M("DB_ERROR","Failed to find tasks by thread",d)}finally{a.close();}}return s}findAllTasks(e){if(!this.dbExists())return {rows:[],total:0};let t=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(eq(w.workspace_id,e.workspaceId));let o=e.agents&&e.agents.length>0?e.agents:e.agentId?[e.agentId]:null;o&&r.push(inArray(w.agent_id,o));let s=e.statuses&&e.statuses.length>0?e.statuses:e.status?[e.status]:null;s&&r.push(inArray(w.status,s));let i=e.q??e.search;i&&r.push(like(w.prompt,`%${i}%`)),e.from&&r.push(gte(w.started_at,e.from)),e.to&&r.push(lt$1(w.started_at,e.to));let a=r.length>0?and(...r):void 0,d=t.db.select({count:sql`count(*)`}).from(w).where(a).get(),c=(e.sortDir??"DESC")==="ASC"?asc(w.started_at):desc(w.started_at);return {rows:t.db.select().from(w).where(a).orderBy(c).limit(e.limit).offset(e.offset).all(),total:d?.count??0}}catch(r){throw new M("DB_ERROR","Failed to find all tasks",r)}finally{t.close();}}getAgentUsage(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.all(r?sql`
78
78
  SELECT
79
79
  t.agent_id,
80
80
  t.workspace_id,
@@ -105,7 +105,7 @@ ${r.join(`
105
105
  AND t.started_at < ${t}
106
106
  GROUP BY t.agent_id, t.workspace_id
107
107
  ORDER BY (COALESCE(SUM(t.input_tokens), 0) + COALESCE(SUM(t.output_tokens), 0)) DESC
108
- `).map(i=>({agentId:i.agent_id,workspaceId:i.workspace_id??null,totalTasks:i.total_tasks,inputTokens:i.input_tokens,outputTokens:i.output_tokens,cachedInputTokens:i.cached_input_tokens,costUsd:i.cost_usd}))}catch(s){throw new M("DB_ERROR","Failed to get agent usage",s)}finally{n.close();}}getAgentUsageTrendRaw(e,t,r){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.all(r?sql`
108
+ `).map(i=>({agentId:i.agent_id,workspaceId:i.workspace_id??null,totalTasks:i.total_tasks,inputTokens:i.input_tokens,outputTokens:i.output_tokens,cachedInputTokens:i.cached_input_tokens,costUsd:i.cost_usd}))}catch(s){throw new M("DB_ERROR","Failed to get agent usage",s)}finally{o.close();}}getAgentUsageTrendRaw(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.all(r?sql`
109
109
  SELECT
110
110
  date(t.started_at) AS date,
111
111
  t.agent_id,
@@ -134,10 +134,10 @@ ${r.join(`
134
134
  AND t.started_at < ${t}
135
135
  GROUP BY date(t.started_at), t.agent_id
136
136
  ORDER BY date(t.started_at) ASC
137
- `).map(i=>({date:i.date,agentId:i.agent_id,inputTokens:i.input_tokens,outputTokens:i.output_tokens,cachedInputTokens:i.cached_input_tokens,costUsd:i.cost_usd}))}catch(s){throw new M("DB_ERROR","Failed to get agent usage trend",s)}finally{n.close();}}findTaskForStop(e,t){if(!this.dbExists())return;let r=this.openHandle(false);try{return r.db.select().from(w).where(and(eq(w.id,e),eq(w.workspace_id,t))).limit(1).get()??void 0}catch(n){throw new M("DB_ERROR","Failed to find task for stop",n)}finally{r.close();}}markTaskFailed(e,t,r){if(!this.dbExists())return;let n=this.openHandle(true);try{let s=new Date().toISOString(),i=r?and(eq(w.id,e),eq(w.status,"running"),eq(w.workspace_id,r)):and(eq(w.id,e),eq(w.status,"running"));n.db.update(w).set({status:"failed",error:t,completed_at:s}).where(i).run();}catch(s){throw s instanceof M?s:new M("DB_ERROR","Failed to mark task failed",s)}finally{n.close();}}findTasksByPromptHint(e,t){let r=this.resolveDbPaths(),n=new Set,s=[];for(let i of r){if(!existsSync(i))continue;let a=ye(i);try{let d=t?and(like(w.prompt,`%${e}%`),eq(w.workspace_id,t)):like(w.prompt,`%${e}%`),c=a.db.select().from(w).where(d).orderBy(asc(w.started_at)).all();for(let u of c)n.has(u.id)||(n.add(u.id),s.push(u));}catch(d){throw new M("DB_ERROR","Failed to find tasks by prompt hint",d)}finally{a.close();}}return s}};l();var Hr=class extends qe{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let n=dirname(t);existsSync(n)||mkdirSync(n,{recursive:true});}else if(!existsSync(t))throw new M("NOT_FOUND","Database not found");let r=ye(t);if(e)try{Nt(r.db,t);}catch(n){throw r.close(),n}return r}insertSpan(e){let t=this.openHandle(true);try{t.db.insert(Oe).values(e).run();}catch(r){throw r instanceof M?r:new M("DB_ERROR","Failed to insert span",r)}finally{t.close();}}findByTaskId(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.select().from(Oe).where(eq(Oe.task_id,e)).all()}catch(r){throw new M("DB_ERROR","Failed to find spans by task id",r)}finally{t.close();}}findById(e){if(!this.dbExists())return;let t=this.openHandle(false);try{return t.db.select().from(Oe).where(eq(Oe.id,e)).limit(1).get()??void 0}catch(r){throw new M("DB_ERROR","Failed to find span by id",r)}finally{t.close();}}};Tr();Cr();Pr();l();l();var Ft=class{capabilities={required:[]}};l();l();l();var io=2e3;function ao(o){let e=o.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=io?e:e.slice(0,io-11)+" [redacted]"}var ya=10*1024*1024,ha={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function qr(o,e){return o===void 0?true:Array.isArray(o)?o.includes(e):o===e}function wa(o,e){return o===void 0?true:Array.isArray(o)?o.some(t=>e.includes(t)):e.includes(o)}function co(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*(ha[r]??1))}function uo(o){return typeof o=="string"}function po(o){try{let e=statSync(o);return e.size>ya?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${o} (${e.size} bytes)
138
- `),null):readFileSync(o,"utf8").split(`
139
- `).length}catch{return null}}function go(o){try{return statSync(o).size}catch{return null}}function xa(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(ae(n,o))return true;if(t&&n.startsWith("/")){let{relative:s,isAbsolute:i}=V("path");if(i(n)){let a=s(t,n);if(a&&!a.startsWith("..")&&ae(a,o))return true}}return false}function ka(o,e){return o?JSON.stringify(e).includes(o):true}function va(o,e){if(!o)return true;try{let t=new RegExp(o),r=JSON.stringify(e);return t.test(r)}catch{return false}}function _a(o,e){if(!o)return true;try{let t=new RegExp(o),r=JSON.stringify(e);return t.test(r)}catch{return false}}function Aa(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(uo(o.pathSizeMin)){let n=go(r);if(n===null||n<co(o.pathSizeMin))return false}else {let n=po(r);if(n===null||n<o.pathSizeMin)return false}if(o.pathSizeMax!==void 0)if(uo(o.pathSizeMax)){let n=go(r);if(n===null||n>co(o.pathSizeMax))return false}else {let n=po(r);if(n===null||n>o.pathSizeMax)return false}return true}function Ra(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 Wr=class extends Ft{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(`
137
+ `).map(i=>({date:i.date,agentId:i.agent_id,inputTokens:i.input_tokens,outputTokens:i.output_tokens,cachedInputTokens:i.cached_input_tokens,costUsd:i.cost_usd}))}catch(s){throw new M("DB_ERROR","Failed to get agent usage trend",s)}finally{o.close();}}findTaskForStop(e,t){if(!this.dbExists())return;let r=this.openHandle(false);try{return r.db.select().from(w).where(and(eq(w.id,e),eq(w.workspace_id,t))).limit(1).get()??void 0}catch(o){throw new M("DB_ERROR","Failed to find task for stop",o)}finally{r.close();}}markTaskFailed(e,t,r){if(!this.dbExists())return;let o=this.openHandle(true);try{let s=new Date().toISOString(),i=r?and(eq(w.id,e),eq(w.status,"running"),eq(w.workspace_id,r)):and(eq(w.id,e),eq(w.status,"running"));o.db.update(w).set({status:"failed",error:t,completed_at:s}).where(i).run();}catch(s){throw s instanceof M?s:new M("DB_ERROR","Failed to mark task failed",s)}finally{o.close();}}findTasksByPromptHint(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!existsSync(i))continue;let a=ye(i);try{let d=t?and(like(w.prompt,`%${e}%`),eq(w.workspace_id,t)):like(w.prompt,`%${e}%`),c=a.db.select().from(w).where(d).orderBy(asc(w.started_at)).all();for(let u of c)o.has(u.id)||(o.add(u.id),s.push(u));}catch(d){throw new M("DB_ERROR","Failed to find tasks by prompt hint",d)}finally{a.close();}}return s}};l();var Br=class extends Be{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=dirname(t);existsSync(o)||mkdirSync(o,{recursive:true});}else if(!existsSync(t))throw new M("NOT_FOUND","Database not found");let r=ye(t);if(e)try{$t(r.db,t);}catch(o){throw r.close(),o}return r}insertSpan(e){let t=this.openHandle(true);try{t.db.insert(Me).values(e).run();}catch(r){throw r instanceof M?r:new M("DB_ERROR","Failed to insert span",r)}finally{t.close();}}findByTaskId(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.select().from(Me).where(eq(Me.task_id,e)).all()}catch(r){throw new M("DB_ERROR","Failed to find spans by task id",r)}finally{t.close();}}findById(e){if(!this.dbExists())return;let t=this.openHandle(false);try{return t.db.select().from(Me).where(eq(Me.id,e)).limit(1).get()??void 0}catch(r){throw new M("DB_ERROR","Failed to find span by id",r)}finally{t.close();}}};Er();br();Tr();l();l();var qt=class{capabilities={required:[]}};l();l();l();var co=2e3;function uo(n){let e=n.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=co?e:e.slice(0,co-11)+" [redacted]"}var ka=10*1024*1024,va={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function Wr(n,e){return n===void 0?true:Array.isArray(n)?n.includes(e):n===e}function _a(n,e){return n===void 0?true:Array.isArray(n)?n.some(t=>e.includes(t)):e.includes(n)}function go(n){if(typeof n=="number")return n;let e=n.match(/^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/i);if(!e)return 0;let t=parseFloat(e[1]),r=(e[2]??"b").toLowerCase();return Math.floor(t*(va[r]??1))}function mo(n){return typeof n=="string"}function fo(n){try{let e=statSync(n);return e.size>ka?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${n} (${e.size} bytes)
138
+ `),null):readFileSync(n,"utf8").split(`
139
+ `).length}catch{return null}}function yo(n){try{return statSync(n).size}catch{return null}}function Aa(n,e,t){if(!n)return true;let r=e,o=r?.path??r?.file_path??r?.filePath??r?.filename;if(typeof o!="string")return false;if(ae(o,n))return true;if(t&&o.startsWith("/")){let{relative:s,isAbsolute:i}=V("path");if(i(o)){let a=s(t,o);if(a&&!a.startsWith("..")&&ae(a,n))return true}}return false}function Ra(n,e){return n?JSON.stringify(e).includes(n):true}function Pa(n,e){if(!n)return true;try{let t=new RegExp(n),r=JSON.stringify(e);return t.test(r)}catch{return false}}function Ca(n,e){if(!n)return true;try{let t=new RegExp(n),r=JSON.stringify(e);return t.test(r)}catch{return false}}function Ta(n,e){if(n.pathSizeMin===void 0&&n.pathSizeMax===void 0)return true;let t=e,r=t?.path??t?.file_path??t?.filePath??t?.filename;if(typeof r!="string")return false;if(n.pathSizeMin!==void 0)if(mo(n.pathSizeMin)){let o=yo(r);if(o===null||o<go(n.pathSizeMin))return false}else {let o=fo(r);if(o===null||o<n.pathSizeMin)return false}if(n.pathSizeMax!==void 0)if(mo(n.pathSizeMax)){let o=yo(r);if(o===null||o>go(n.pathSizeMax))return false}else {let o=fo(r);if(o===null||o>n.pathSizeMax)return false}return true}function ba(n){let e=[],t=[];for(let r=0;r<n.length;r++){let o=n[r];if(!o||typeof o!="object"){t.push(`Hook at index ${r}: not an object, skipping`);continue}let s=o;if(typeof s.name!="string"||!s.name){t.push(`Hook at index ${r}: missing or invalid "name", skipping`);continue}let i=s.guide&&typeof s.guide=="object",a=s.deny&&typeof s.deny=="object",d=typeof s.plugin=="string";if(!i&&!a&&!d){t.push(`Hook "${s.name}": missing guide/deny/plugin, skipping`);continue}if(i&&typeof s.guide.say!="string"){t.push(`Hook "${s.name}": guide.say is required and must be string, skipping`);continue}if(a&&typeof s.deny.reason!="string"){t.push(`Hook "${s.name}": deny.reason is required and must be string, skipping`);continue}e.push(s);}return {valid:e,warnings:t}}var Vr=class extends qt{name="@crewx/yaml-hook-plugin";version="0.1.0";capabilities={required:["inject"]};hooks;agentMap;constructor(e){super(),this.hooks=e.hooks,this.agentMap=new Map((e.agents??[]).map(t=>[t.id,t]));}async run(e){let t=[],r=process.env.CREWX_TASK_LOG_PATH,o=process.env.CREWX_HOOK_LOG_VERBOSE==="1";for(let s of this.hooks)if(this.matchEntryLevel(s,e)&&s.guide){if(!this.matchRuleLevel(s.guide,e)){o&&r&&this.appendHookLog(r,{rule:s.name,action:"pass",once:s.guide.once??false,ctx:e,matched:false});continue}s.guide.once&&this.hasFired(e.sessionId,s.name)||(s.guide.once&&this.markFired(e.sessionId,s.name),t.push(s.guide.say),r&&this.appendHookLog(r,{rule:s.name,action:"inject",once:s.guide.once??false,ctx:e,matched:true,message:s.guide.say}));}return t.length?e.inject(t.join(`
140
140
 
141
- `)):e.pass()}appendHookLog(e,t){try{let r={rule:t.rule,action:t.action,once:t.once,sessionId:t.ctx.sessionId,provider:t.ctx.provider,agent:t.ctx.agent.id,toolName:t.ctx.tool.name,rawToolName:t.ctx.tool.rawName};t.message&&(r.chars=t.message.length,process.env.CREWX_HOOK_LOG_VERBOSE==="1"&&(r.message=ao(t.message).slice(0,500)));let n=`[${new Date().toISOString()}] HOOK: ${JSON.stringify(r)}
142
- `;appendFileSync(e,n,{encoding:"utf8",mode:384});}catch{}}matchEntryLevel(e,t){if(e.provider!==void 0){let r=t.provider.replace(/^cli\//,"");if(!qr(e.provider,r))return false}if(e.team!==void 0){let n=this.agentMap.get(t.agent.id)?.team??t.agent.team;if(!qr(e.team,n))return false}if(e.role!==void 0){let n=this.agentMap.get(t.agent.id)?.role??t.agent.role;if(!qr(e.role,n))return false}if(e.tag!==void 0){let n=this.agentMap.get(t.agent.id)?.tags??[];if(!wa(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)||!ka(e.pattern,t.tool.input)||!va(e.regex,t.tool.input)||!xa(e.pathPattern,t.tool.input,t.cwd)||!Aa(e,t.tool.input)||!_a(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}
143
- `);}}firedFilePath(e){let t=createHash("sha1").update(e).digest("hex");return join(homedir(),".crewx","sessions",t,"fired-rules.json")}};l();l();l();function Pa(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 zr=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 Ca(o){return o}function Ta(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);}}}wt();export{Ee as ACP_ADAPTERS,be as AcpConnection,fe as AcpProtocolError,nt as AcpProviderRuntime,zr as AdapterError,ue as AgentNotFoundError,ct as AgentRuntime,Kr as AgentSkillsSchema,we as BUILTIN_ADAPTERS,Mr as BrowserFsAdapter,se as ClientToolCallRequiredError,_e as ConfigLoadError,Sr as Crewx,Or as CrewxPlugin,Ce as DocumentLoader,X as LayoutLoadError,Ye as LayoutLoader,Ze as LayoutRenderer,ot as McpHttpTransport,Rt as NodeFsAdapter,lt as ParallelRunner,Mt as ParallelRunnerTimeoutError,at as PluginProviderRuntime,me as PropsValidationError,Qe as PropsValidator,S as ProviderError,Ke as RateLimitError,st as RemoteAgentManager,it as RemoteProviderRuntime,Dr as SdkBoxService,Hr as SpanRepository,Fr as TaskRepository,Ge as TemplateEngine,et as TypedEventEmitter,rt as VercelProviderRuntime,Wr as YamlHookPlugin,_i as buildContext,Ct as claudeAcpAdapter,xt as claudeAdapter,bt as codexAcpAdapter,_t as codexAdapter,St as copilotAcpAdapter,vt as copilotAdapter,cr as createAdapterContext,wi as createDelegateTool,gr as createHandler,Dn as createPluginProviderFactory,ge as createProvider,In as createRemoteProviderFactory,dr as createScopedAdapterStore,hr as defaultExtractText,Pe as defaultFsAdapter,ie as defaultParseEvent,Ca as defineChannelAdapter,Ta as defineChannelAdapterPlugin,nr as escapeHandlebarsHelper,or as formatFileSizeHelper,ar as formatTimestamp,sr as formatTimestampHelper,Et as geminiAcpAdapter,kt as geminiAdapter,xs as generateFingerprint,Te as generateId,_s as getSyncWindowStore,mr as hashWorkspaceId,rr as lengthHelper,gt as loadYamlFile,Ve as materializeWindowsSpawnProgram,kn as normalizeWorkspacePath,It as opencodeAcpAdapter,At as opencodeAdapter,Zt as parseStdoutEvent,te as parseUsage,pt as parseYamlContent,Hn as queryAcpProviderMeta,hi as queryAllAcpProviderMetas,En as registerAcpProviders,An as registerApiProviders,pe as registerProviderFactory,ft as resolveAgent,fi as resolveAgentSkills,xi as resolveCrewxCli,ki as resolveCrewxWorkspace,Wt as resolveDefaultAgentsYaml,Le as resolveTemplatesPath,Gr as resolveWindowsExecutablePath,ze as resolveWindowsSpawnProgram,Oi as runExecutesParallel,As as runInSyncWindow,Ii as runQueriesParallel,ss as setAuditVerbose,Pa as toTaskReader,pr as toTemplateMessages,tr as truncateHelper,Ra as validateHooksSchema};
141
+ `)):e.pass()}appendHookLog(e,t){try{let r={rule:t.rule,action:t.action,once:t.once,sessionId:t.ctx.sessionId,provider:t.ctx.provider,agent:t.ctx.agent.id,toolName:t.ctx.tool.name,rawToolName:t.ctx.tool.rawName};t.message&&(r.chars=t.message.length,process.env.CREWX_HOOK_LOG_VERBOSE==="1"&&(r.message=uo(t.message).slice(0,500)));let o=`[${new Date().toISOString()}] HOOK: ${JSON.stringify(r)}
142
+ `;appendFileSync(e,o,{encoding:"utf8",mode:384});}catch{}}matchEntryLevel(e,t){if(e.provider!==void 0){let r=t.provider.replace(/^cli\//,"");if(!Wr(e.provider,r))return false}if(e.team!==void 0){let o=this.agentMap.get(t.agent.id)?.team??t.agent.team;if(!Wr(e.team,o))return false}if(e.role!==void 0){let o=this.agentMap.get(t.agent.id)?.role??t.agent.role;if(!Wr(e.role,o))return false}if(e.tag!==void 0){let o=this.agentMap.get(t.agent.id)?.tags??[];if(!_a(e.tag,o))return false}return !(e.agents!==void 0&&!e.agents.includes(t.agent.id))}matchRuleLevel(e,t){return !(e.when!==void 0&&e.when.length>0&&!e.when.includes(t.tool.name)&&!e.when.includes(t.tool.rawName)||!Ra(e.pattern,t.tool.input)||!Pa(e.regex,t.tool.input)||!Aa(e.pathPattern,t.tool.input,t.cwd)||!Ta(e,t.tool.input)||!Ca(e.whenInputRegex,t.tool.input))}hasFired(e,t){try{let r=this.firedFilePath(e);if(!existsSync(r))return !1;let o=JSON.parse(readFileSync(r,"utf8"));return Array.isArray(o.fired)&&o.fired.includes(t)}catch{return false}}markFired(e,t){try{let r=this.firedFilePath(e);mkdirSync(dirname(r),{recursive:!0,mode:448});let o=existsSync(r)?JSON.parse(readFileSync(r,"utf8")):{fired:[]};Array.isArray(o.fired)||(o.fired=[]),o.fired.includes(t)||(o.fired.push(t),writeFileSync(r,JSON.stringify(o),{mode:384}));}catch(r){process.stderr.write(`[YamlHookPlugin] once state write failed: ${r}
143
+ `);}}firedFilePath(e){let t=createHash("sha1").update(e).digest("hex");return join(homedir(),".crewx","sessions",t,"fired-rules.json")}};l();l();l();function Ea(n){let e=n.messages.map(t=>({id:t.id,role:t.isAssistant?"assistant":"user",content:t.text,timestamp:new Date(t.timestamp).toISOString(),metadata:t.metadata??null}));return {getThreadMessages(t){return e}}}l();var Kr=class extends Error{code;kind;retryAfterMs;constructor(e,t,r){super(`AdapterError: ${e}`),this.name="AdapterError",this.code=e,this.kind=t,this.retryAfterMs=r;}};l();function Sa(n){return n}function Ia(n){return {name:n.name,async attach(e){let t=await n.configFactory(e),o=e.registerChannelAdapter,s=n.instanceId??n.name;o&&await o({adapter:n.adapter,instanceId:s,config:t}),n.onAttach&&await n.onAttach(e);},async detach(e){let r=e.unregisterChannelAdapter;r&&await r(n.instanceId??n.name),n.onDetach&&await n.onDetach(e);}}}kt();export{Se as ACP_ADAPTERS,Ee as AcpConnection,fe as AcpProtocolError,st as AcpProviderRuntime,Kr as AdapterError,ue as AgentNotFoundError,pt as AgentRuntime,Xr as AgentSkillsSchema,we as BUILTIN_ADAPTERS,Dr as BrowserFsAdapter,se as ClientToolCallRequiredError,_e as ConfigLoadError,Or as Crewx,Nr as CrewxPlugin,Ce as DocumentLoader,X as LayoutLoadError,Qe as LayoutLoader,tt as LayoutRenderer,it as McpHttpTransport,Ct as NodeFsAdapter,ut as ParallelRunner,Dt as ParallelRunnerTimeoutError,lt as PluginProviderRuntime,me as PropsValidationError,et as PropsValidator,S as ProviderError,Je as RateLimitError,at as RemoteAgentManager,dt as RemoteProviderRuntime,Lr as SdkBoxService,Br as SpanRepository,qr as TaskRepository,Ye as TemplateEngine,rt as TypedEventEmitter,ot as VercelProviderRuntime,Vr as YamlHookPlugin,Ci as buildContext,bt as claudeAcpAdapter,vt as claudeAdapter,St as codexAcpAdapter,Rt as codexAdapter,Ot as copilotAcpAdapter,At as copilotAdapter,pr as createAdapterContext,_i as createDelegateTool,fr as createHandler,jn as createPluginProviderFactory,ge as createProvider,Nn as createRemoteProviderFactory,cr as createScopedAdapterStore,xr as defaultExtractText,Pe as defaultFsAdapter,ie as defaultParseEvent,Sa as defineChannelAdapter,Ia as defineChannelAdapterPlugin,sr as escapeHandlebarsHelper,ir as formatFileSizeHelper,lr as formatTimestamp,ar as formatTimestampHelper,It as geminiAcpAdapter,_t as geminiAdapter,As as generateFingerprint,be as generateId,Cs as getSyncWindowStore,yr as hashWorkspaceId,or as lengthHelper,ft as loadYamlFile,Ke as materializeWindowsSpawnProgram,An as normalizeWorkspacePath,Mt as opencodeAcpAdapter,Pt as opencodeAdapter,tr as parseStdoutEvent,te as parseUsage,mt as parseYamlContent,Wn as queryAcpProviderMeta,vi as queryAllAcpProviderMetas,On as registerAcpProviders,Cn as registerApiProviders,pe as registerProviderFactory,ht as resolveAgent,xi as resolveAgentSkills,Ai as resolveCrewxCli,Ri as resolveCrewxWorkspace,Vt as resolveDefaultAgentsYaml,Le as resolveTemplatesPath,Qr as resolveWindowsExecutablePath,Ve as resolveWindowsSpawnProgram,$i as runExecutesParallel,Ts as runInSyncWindow,Di as runQueriesParallel,ds as setAuditVerbose,Ea as toTaskReader,mr as toTemplateMessages,nr as truncateHelper,ba as validateHooksSchema};