@crewx/sdk 0.9.0-rc.30 → 0.9.0-rc.32
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 +62 -62
- package/dist/esm/plugins/index.js +33 -33
- package/dist/esm/repository/index.js +30 -30
- package/dist/index.browser.js +2 -2
- package/dist/index.js +63 -63
- package/dist/internal/windows-spawn.d.ts +10 -0
- package/dist/migrations/0012_blue_turbo.sql +23 -0
- package/dist/migrations/0013_hesitant_adam_destine.sql +15 -0
- package/dist/migrations/meta/0012_snapshot.json +1494 -0
- package/dist/migrations/meta/0013_snapshot.json +1592 -0
- package/dist/migrations/meta/_journal.json +14 -0
- package/dist/plugin/types.d.ts +1 -0
- package/dist/plugins/index.js +29 -29
- package/dist/repository/agent-suggestion.repository.d.ts +31 -0
- package/dist/repository/index.d.ts +4 -0
- package/dist/repository/index.js +30 -30
- package/dist/repository/notification.repository.d.ts +58 -0
- package/dist/schema/agent-suggestions.d.ts +199 -0
- package/dist/schema/index.d.ts +2 -0
- package/dist/schema/notifications.d.ts +303 -0
- package/dist/types/index.d.ts +28 -3
- package/dist/utils/id.d.ts +1 -1
- package/package.json +1 -1
- package/templates/agents/default.yaml +28 -1
package/dist/index.js
CHANGED
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
'use strict';var
|
|
2
|
-
`))if(r.trim())try{let o=JSON.parse(r),s=
|
|
1
|
+
'use strict';var qo=require('fs'),q=require('path'),child_process=require('child_process'),string_decoder=require('string_decoder'),sdk=require('@agentclientprotocol/sdk'),jsYaml=require('js-yaml'),zod=require('zod'),module$1=require('module'),_e=require('handlebars'),promises=require('fs/promises'),crypto$1=require('crypto'),events=require('events'),async_hooks=require('async_hooks'),drizzleOrm=require('drizzle-orm'),Aa=require('os'),sqliteCore=require('drizzle-orm/sqlite-core'),mcp_js=require('@modelcontextprotocol/sdk/server/mcp.js'),webStandardStreamableHttp_js=require('@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js'),perf_hooks=require('perf_hooks');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var qo__namespace=/*#__PURE__*/_interopNamespace(qo);var q__namespace=/*#__PURE__*/_interopNamespace(q);var _e__namespace=/*#__PURE__*/_interopNamespace(_e);var Aa__default=/*#__PURE__*/_interopDefault(Aa);var Rr=Object.defineProperty;var $s=Object.getOwnPropertyDescriptor;var Us=Object.getOwnPropertyNames;var js=Object.prototype.hasOwnProperty;var te=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var O=(n,e)=>()=>(n&&(e=n(n=0)),e);var Kt=(n,e)=>{for(var t in e)Rr(n,t,{get:e[t],enumerable:true});},Fs=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Us(e))!js.call(n,o)&&o!==t&&Rr(n,o,{get:()=>e[o],enumerable:!(r=$s(e,o))||r.enumerable});return n};var Vn=n=>Fs(Rr({},"__esModule",{value:true}),n);var c=O(()=>{});function Yt(n){return typeof n!="string"?void 0:n.trim()||void 0}function Qt(n){return Yt(n)?.toLowerCase()??""}function at(n){try{return qo.statSync(n).isFile()}catch{return false}}function Zs(n,e){if(n===e)return true;let t=q__namespace.default.relative(n,e);return t!==""&&!t.startsWith("..")&&!q__namespace.default.isAbsolute(t)}function ei(n,e){if(q__namespace.default.basename(n)!==".bin")return false;let t=q__namespace.default.dirname(n);if(q__namespace.default.basename(t)!=="node_modules")return false;let r=q__namespace.default.dirname(t);return Zs(r,e)}function Pr(n,e={}){if(n.includes("/")||n.includes("\\")||q__namespace.default.isAbsolute(n))return n;let t=e.platform??process.platform,r=e.env??process.env,o=q__namespace.default.resolve(e.cwd??process.cwd()),s=(e.resolution??"global_first")==="global_first",i=r.PATH??r.Path??process.env.PATH??process.env.Path??"",a=t==="win32"?";":":",d=i.split(a).map(f=>f.trim()).filter(Boolean),l=q__namespace.default.extname(n).length>0,u=r.PATHEXT??r.Pathext??process.env.PATHEXT??process.env.Pathext??".EXE;.CMD;.BAT;.COM",g=t==="win32"?l?[""]:u.split(";").map(f=>f.trim()).filter(Boolean).map(f=>f.startsWith(".")?f:`.${f}`):[""];for(let f of d){let m=q__namespace.default.resolve(o,f);if(!(s&&ei(m,o)))for(let h of g){let w=Qt(h),A=h.toUpperCase();for(let v of [h,w,A]){let _=q__namespace.default.join(m,`${n}${v}`);if(at(_))return _}}}return n}function ti(n,e){return Pr(n,{env:e,platform:"win32",resolution:"local_first"})}function ri(n){if(!at(n))return null;try{let e=qo.readFileSync(n,"utf8"),t=q__namespace.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,q__namespace.default.sep).replace(/^[\\/]+/,""),f=q__namespace.default.resolve(t,g);at(f)&&r.push(f);}let o=[],s=new Map;for(let a of e.matchAll(/SET\s+"(\w+)=%~?dp0%?[\\/]?([^"]+)"/gi)){let d=a[1].toUpperCase(),l=a[2].trim().replace(/[\\/]+/g,q__namespace.default.sep).replace(/^[\\/]+/,"");s.set(d,q__namespace.default.resolve(t,l));}for(let a of e.split(/\r?\n/))if(a.includes("%*"))for(let d of a.matchAll(/"%(\w+)%"/g)){let l=s.get(d[1].toUpperCase());l&&at(l)&&o.push(l);}let i=a=>a.find(d=>{let l=Qt(q__namespace.default.basename(d));return l!=="node.exe"&&l!=="node"})??null;return i(o)??i(r)}catch{return null}}function ni(n,e){if(typeof e=="string")return Yt(e)||null;if(!e||typeof e!="object")return null;if(n){let t=e[n],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 oi(n,e){if(!e)return null;let t=q__namespace.default.dirname(n),r=[q__namespace.default.resolve(t,"..",e),q__namespace.default.resolve(t,"node_modules",e)];for(let o of r){let s=q__namespace.default.join(o,"package.json");if(at(s))try{let i=JSON.parse(qo.readFileSync(s,"utf8")),a=ni(e,i.bin);if(!a)continue;let d=q__namespace.default.resolve(o,a);if(at(d))return d}catch{}}return null}function si(n){let e=n.platform??process.platform,t=n.env??process.env,r=n.execPath??process.execPath,o=n.cwd,s=n.resolution;if(e!=="win32")return {command:Pr(n.command,{cwd:o,env:t,platform:e,resolution:s}),leadingArgv:[],resolution:"direct"};let i=Pr(n.command,{cwd:o,env:t,platform:e,resolution:s}),a=Qt(q__namespace.default.extname(i));if(a===".js"||a===".cjs"||a===".mjs")return {command:r,leadingArgv:[i],resolution:"node-entrypoint",windowsHide:true};if(a===".cmd"||a===".bat"){let d=ri(i)??oi(i,n.packageName);return d?Qt(q__namespace.default.extname(d))===".exe"?{command:d,leadingArgv:[],resolution:"exe-entrypoint",windowsHide:true}:{command:r,leadingArgv:[d],resolution:"node-entrypoint",windowsHide:true}:{command:i,leadingArgv:[],resolution:"unresolved-wrapper"}}return {command:i,leadingArgv:[],resolution:"direct"}}function ii(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(`${q__namespace.default.basename(n.candidate.command)} wrapper resolved, but no executable/Node entrypoint could be resolved without shell execution.`)}function Be(n){let e=si(n);return ii({candidate:e,allowShellFallback:n.allowShellFallback})}function ze(n,e){return {command:n.command,argv:[...n.leadingArgv,...e],resolution:n.resolution,shell:n.shell,windowsHide:n.windowsHide}}var yt=O(()=>{c();});function ai(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 di(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 li(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 Re(n){if(!n||!n.trim())return;let e=null,t=null;for(let r of n.split(`
|
|
2
|
+
`))if(r.trim())try{let o=JSON.parse(r),s=li(o);if(s){t||(t={inputTokens:0,outputTokens:0,cachedInputTokens:0}),t.inputTokens+=s.inputTokens,t.outputTokens+=s.outputTokens,t.cachedInputTokens+=s.cachedInputTokens;continue}let i=ai(o)??di(o);i&&(e=i);}catch{}return t||(e??void 0)}var dt=O(()=>{c();});exports.ProviderError=void 0;var Ke,Ve,ht=O(()=>{c();exports.ProviderError=class extends Error{constructor(t,r,o){super(t);this.providerStr=r;this.name="ProviderError",this.code=o?.code??"UNKNOWN",this.kind=o?.kind??(this.code==="UNKNOWN"?"transient":void 0),this.retryAfterMs=o?.retryAfterMs;}providerStr;code;kind;retryAfterMs},Ke=class extends exports.ProviderError{constructor(e,t){super(e,t,{code:"TIMEOUT_IDLE",kind:"permanent"}),this.name="IdleTimeoutError";}},Ve=class extends exports.ProviderError{constructor(e,t){super(e,t,{code:"TIMEOUT_TOTAL",kind:"permanent"}),this.name="TotalTimeoutError";}};});exports.RateLimitError=void 0;var Tr=O(()=>{c();ht();exports.RateLimitError=class extends exports.ProviderError{name="RateLimitError";constructor(e,t="cli/claude"){super(e,t,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function de(n){return /crewx\s+(x|execute)\s/.test(n)}function le(n,e){let t=e.match(/@(\S+)/);return {timestamp:n,type:"agent_call",targetAgent:t?.[1]?.replace(/["']/g,""),toolInput:e}}var lt=O(()=>{c();});function ce(n){if(typeof n=="string")return n;if(!n||typeof n!="object")return JSON.stringify(n??{});let e=n;return typeof e.command=="string"?e.command:typeof e.file_path=="string"?e.file_path:typeof e.filePath=="string"?e.filePath:typeof e.path=="string"?e.path:typeof e.query=="string"?e.query:typeof e.pattern=="string"?e.pattern:typeof e.url=="string"?e.url:typeof e.prompt=="string"?e.prompt.length>200?e.prompt.slice(0,200)+"\u2026":e.prompt:typeof e.description=="string"?e.description:JSON.stringify(e)}var ct=O(()=>{c();});function Zt(n){if(!n)return {};let e=n.match(/^(.+?)\[([^\]]+)\]$/);if(e){let t=e[2].toLowerCase();return ci.has(t)?{model:e[1],effort:e[2]}:{model:n}}return {model:n}}function Yn(n){switch(n){case "agent-full-access":case "yolo":return ["--dangerously-bypass-approvals-and-sandbox"];case "read-only":case "plan":return ["--sandbox","read-only"];case "agent":return ["--sandbox","workspace-write"];default:return []}}function Qn(n){switch(n){case "agent-full-access":case "yolo":return ["--dangerously-bypass-approvals-and-sandbox"];case "read-only":case "plan":return ["-c","sandbox_mode=read-only"];case "agent":return ["-c","sandbox_mode=workspace-write"];default:return []}}function Zn(n){return n?["-c",`model_reasoning_effort=${n}`]:[]}function eo(n){if(!n)return [];let e=new Set(["acceptEdits","bypassPermissions","default","delegate","dontAsk","plan"]),t=n==="auto"?"default":n;return e.has(t)?["--permission-mode",t]:[]}function to(n){return n?new Set(["low","medium","high","xhigh","max"]).has(n)?["--effort",n]:[]:[]}var ci,Sr=O(()=>{c();ci=new Set(["minimal","low","medium","high","xhigh","max"]);});var br,ro=O(()=>{c();br={claude:{models:[{id:"claude-fable-5",name:"Claude Fable 5"},{id:"claude-sonnet-5",name:"Claude Sonnet 5"},{id:"claude-opus-4-8[1m]",name:"Claude Opus 4.8 (Extended)"},{id:"claude-opus-4-8",name:"Claude Opus 4.8"},{id:"claude-opus-4-7[1m]",name:"Claude Opus 4.7 (Extended)"},{id:"claude-opus-4-7",name:"Claude Opus 4.7"},{id:"claude-opus-4-6[1m]",name:"Claude Opus 4.6 (Extended)"},{id:"claude-opus-4-6",name:"Claude Opus 4.6"},{id:"claude-sonnet-4-6[1m]",name:"Claude Sonnet 4.6 (Extended)"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5"}],modes:[{id:"default",name:"Default"},{id:"acceptEdits",name:"Accept Edits"},{id:"plan",name:"Plan"},{id:"auto",name:"Auto"},{id:"dontAsk",name:"Don't Ask"},{id:"bypassPermissions",name:"Bypass Permissions"}],effort:["low","medium","high"],modelOverrides:{"claude-fable-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-sonnet-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-8[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-8":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-7[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-7":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-opus-4-6":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-haiku-4-5":{effort:[]}}},codex:{models:[{id:"gpt-5.6-sol",name:"GPT-5.6 Sol"},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra"},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna"},{id:"gpt-5.5",name:"GPT-5.5"},{id:"gpt-5.4",name:"GPT-5.4"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini"},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex"},{id:"gpt-5.3-codex-spark",name:"GPT-5.3 Codex Spark"}],modes:[{id:"agent",name:"Agent"},{id:"read-only",name:"Read Only"},{id:"plan",name:"Plan"},{id:"agent-full-access",name:"Agent Full Access"},{id:"yolo",name:"YOLO"}],effort:["minimal","low","medium","high"],modelOverrides:{"gpt-5.6-sol":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"xhigh"},"gpt-5.6-terra":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.6-luna":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.5":{effort:["minimal","low","medium","high","xhigh"],defaultEffort:"high"}}},copilot:{models:[{id:"auto",name:"Auto"},{id:"claude-sonnet-5",name:"Claude Sonnet 5"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"gpt-5.5",name:"GPT-5.5"},{id:"gpt-5.4",name:"GPT-5.4"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro"}],modes:[{id:"interactive",name:"Interactive"},{id:"plan",name:"Plan"},{id:"autopilot",name:"Autopilot"}],effort:["none","low","medium","high","xhigh","max"],modelOverrides:{}},antigravity:{models:[{id:"Gemini 3.5 Flash (Medium)",name:"Gemini 3.5 Flash (Medium)"},{id:"Gemini 3.5 Flash (High)",name:"Gemini 3.5 Flash (High)"},{id:"Gemini 3.5 Flash (Low)",name:"Gemini 3.5 Flash (Low)"},{id:"Gemini 3.1 Pro (Low)",name:"Gemini 3.1 Pro (Low)"},{id:"Gemini 3.1 Pro (High)",name:"Gemini 3.1 Pro (High)"},{id:"Claude Sonnet 4.6 (Thinking)",name:"Claude Sonnet 4.6 (Thinking)"},{id:"Claude Opus 4.6 (Thinking)",name:"Claude Opus 4.6 (Thinking)"},{id:"GPT-OSS 120B (Medium)",name:"GPT-OSS 120B (Medium)"}],modes:[],effort:[],modelOverrides:{}}},Object.fromEntries(Object.entries(br).map(([n,e])=>[n,e.models]));});function no(){return {models:[],modes:[],effort:[],modelOverrides:{}}}function ui(n){return Array.isArray(n)?{models:n,modes:[],effort:[],modelOverrides:{}}:n?{models:n.models??[],modes:n.modes??[],effort:n.effort??[],modelOverrides:n.modelOverrides??{}}:no()}function Or(n){Ir=Object.fromEntries(Object.entries(n).map(([e,t])=>[e,ui(t)]));}function pi(){Ir={};}function Je(n){return ut(n).models}function ut(n){return Ir[n]??br[n]??no()}function wt(n){return ut(n).modes}function vt(n,e){let t=ut(n);return e?t.modelOverrides[e]?.effort??t.effort:t.effort}function oo(n){return ut(n).modelOverrides}function _t(){return Je("claude")}function Mr(){return Je("codex")}function Nr(){return Je("copilot")}function Dr(){return Je("antigravity")}function xt(n,e){let t=new Map;for(let r of [...n,...e]){let o=t.get(r.id);(!o||!o.name&&r.name)&&t.set(r.id,r);}return Array.from(t.values())}var Ir,he=O(()=>{c();ro();Ir={};});function mi(n){let t=n.message?.content;return Array.isArray(t)?t.map(r=>typeof r.text=="string"?r.text.trim():"").filter(Boolean).join(`
|
|
3
3
|
|
|
4
|
-
`):""}function
|
|
5
|
-
`):i=JSON.stringify(s),{timestamp:n,type:"tool_result",toolUseId:o,resultPreview:i,isError:r}}return null}var
|
|
6
|
-
`).filter(o=>o.trim()),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant"&&Array.isArray(s.message?.content))for(let i of s.message.content)i.type==="text"&&typeof i.text=="string"&&i.text.trim()&&t.push(i.text.trim());s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},extractFailure(n){try{let e=JSON.parse(n);if(e.type==="rate_limit_event"){let t=e.rate_limit_info??{};if(t.status==="rejected")return new exports.RateLimitError(`Claude rate limit: ${t.rateLimitType??"unknown"} (status: ${t.status})`)}if(e.error==="rate_limit"){let t=
|
|
7
|
-
`);for(let 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 l=
|
|
8
|
-
`).filter(o=>o.trim()),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant.message"&&typeof s.data?.content=="string"){let i=s.data.content;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=
|
|
9
|
-
`).map(o=>o.trim()).filter(Boolean),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="item.completed"&&(s.item?.type==="message"||s.item?.type==="agent_message")&&typeof s.item?.text=="string"){let i=s.item.text;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=
|
|
10
|
-
`).map(o=>o.trim()).filter(Boolean),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="text"&&typeof s.part?.text=="string"){let i=s.part.text;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=
|
|
4
|
+
`):""}function fi(n){let e=n.toLowerCase();return e.includes("out of extra usage")||e.includes("rate limit")||e.includes("quota")}function yi(n,e){let t=e.type;if(t==="text"){let r=String(e.text||"");return r?{timestamp:n,type:"text",content:r}:null}if(t==="thinking"){let r=String(e.thinking||"");return {timestamp:n,type:"thinking",content:r||"(thinking)"}}if(t==="tool_use"){let r=String(e.name||""),o=e.id,s=e.input,i=ce(s);return r==="Bash"&&de(i)?le(n,i):{timestamp:n,type:"tool_use",toolUseId:o,toolName:r,toolInput:i}}if(t==="tool_result"){let r=!!e.is_error,o=e.tool_use_id,s=e.output??e.content??"",i;return typeof s=="string"?i=s:Array.isArray(s)?i=s.filter(a=>a.type==="text"&&typeof a.text=="string").map(a=>a.text).join(`
|
|
5
|
+
`):i=JSON.stringify(s),{timestamp:n,type:"tool_result",toolUseId:o,resultPreview:i,isError:r}}return null}var gi;exports.claudeAdapter=void 0;var Lr=O(()=>{c();Tr();lt();ct();Sr();he();gi=new Set(["tool_progress"]),exports.claudeAdapter={command:"claude",meta:{displayName:"Claude",models:_t(),capabilities:{resume:true}},buildArgs(n,e,t){let{model:r,effort:o}=Zt(e.model),s=e.effort??o,i=eo(e.mode),a=to(s),d=r?["--model",r]:[],l=e.resumeSessionId?["--resume",e.resumeSessionId]:[];if(e.additionalArgs!==void 0){let g=[...e.additionalArgs];return g.indexOf("-p")!==-1?{args:["--output-format","stream-json","--verbose",...l,...i,...a,...d,...g],stdinMessage:n}:{args:["--output-format","stream-json","--verbose",...l,...i,...a,...d,...g],stdinMessage:n}}return {args:["-p","--output-format","stream-json","--verbose",...l,...i,...a,...d],stdinMessage:n}},extractText(n){let e=n.split(`
|
|
6
|
+
`).filter(o=>o.trim()),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant"&&Array.isArray(s.message?.content))for(let i of s.message.content)i.type==="text"&&typeof i.text=="string"&&i.text.trim()&&t.push(i.text.trim());s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},extractFailure(n){try{let e=JSON.parse(n);if(e.type==="rate_limit_event"){let t=e.rate_limit_info??{};if(t.status==="rejected")return new exports.RateLimitError(`Claude rate limit: ${t.rateLimitType??"unknown"} (status: ${t.status})`)}if(e.error==="rate_limit"){let t=mi(e);return new exports.RateLimitError(t?`Claude rate limit: ${t}`:"Claude rate limit")}if(e.type==="result"&&e.is_error===!0){let t=typeof e.result=="string"?e.result:"";if(fi(t))return new exports.RateLimitError(`Claude rate limit: ${t}`)}}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 l=yi(i,d);l&&a.push(l);}return a},suppressOutputLine(n){let e=n.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?gi.has(r):!1}catch{return false}}};});var hi,wi;exports.copilotAdapter=void 0;var $r=O(()=>{c();dt();lt();ct();he();hi=new Set(["interactive","plan","autopilot"]),wi=new Set(["none","low","medium","high","xhigh","max"]),exports.copilotAdapter={command:"copilot",meta:{displayName:"Copilot",models:Nr()},buildArgs(n,e,t){let r=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&r.push("--model",e.model),e.mode&&hi.has(e.mode)&&r.push("--mode",e.mode),e.effort&&wi.has(e.effort)&&r.push("--effort",e.effort),{args:r,stdinMessage:n}},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);if(s.type==="assistant.message"&&typeof s.data?.content=="string"){let i=s.data.content;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=Re(n);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(n,e){let t;try{t=JSON.parse(n);}catch{return []}let r=t.type;if(!r)return [];if(!r.startsWith("tool.execution")&&!r.startsWith("assistant.")&&r!=="user.message")return [];let o=t.data;if(!o)return [];let s=e??new Date().toISOString(),i=o.toolCallId;if(r==="tool.execution_start"){let a=String(o.toolName||""),d=o.arguments,l=ce(d);return (a==="bash"||a==="Bash")&&de(l)?[le(s,l)]:[{timestamp:s,type:"tool_use",toolName:a,toolInput:l,...i&&{toolUseId:i}}]}if(r==="tool.execution_complete"){let a=o.error;if(a)return [{timestamp:s,type:"tool_result",isError:true,resultPreview:String(a.message||""),...i&&{toolUseId:i}}];let d=o.result,l=String(d?.content||"");return [{timestamp:s,type:"tool_result",resultPreview:l,isError:false,...i&&{toolUseId:i}}]}if(r==="assistant.message"){let a=String(o.content||"");return a?[{timestamp:s,type:"text",content:a}]:[]}return []}};});function _i(n){let e=[],t=0,r=false,o=false,s=0;for(let a=0;a<n.length;a++){let d=n[a];if(o){o=false;continue}if(d==="\\"&&r){o=true;continue}if(d==='"'){r=!r;continue}if(!r){if(d==="{")t++;else if(d==="}"&&(t--,t===0)){let l=n.slice(s,a+1).trim();l&&e.push(l),s=a+1;}}}let i=n.slice(s).trim();return i&&e.push(i),e}function xi(n){return n[0]==="exec"?n.slice(1):n}function ki(n,e){let t=e.type;if(t==="command_execution"){let r=String(e.command||"");return de(r)?[le(n,r)]:[{timestamp:n,type:"tool_use",toolName:"Bash",toolInput:r}]}return t==="web_search"?[]:t==="file_change"?[]:[]}function Ai(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=Ei(n,o);if(s)return s}if(typeof e.text=="string")return {timestamp:n,type:"text",content:e.text}}if(t==="agent_message"&&typeof e.text=="string")return {timestamp:n,type:"text",content:e.text};if(t==="reasoning")return {timestamp:n,type:"text",content:String(e.text||"")};if(t==="command_execution"){let r=String(e.aggregated_output||e.output||""),o=!!e.is_error;return {timestamp:n,type:"tool_result",resultPreview:r,isError:o}}if(t==="tool_use"){let r=String(e.name||e.tool_name||""),o=e.input,s=ce(o);return r==="Bash"&&de(s)?le(n,s):{timestamp:n,type:"tool_use",toolName:r,toolInput:s}}if(t==="tool_result"){let r=!!e.is_error,o=String(e.output||e.content||"");return {timestamp:n,type:"tool_result",resultPreview:o,isError:r}}if(t==="web_search"){let r=e.action,o;if(r?.type==="search"){let s=r.queries;o=String(r.query||"")||(s?.length?s.join(", "):"")||String(e.query||"");}else o=e.query?"open: "+String(e.query):"";return o?{timestamp:n,type:"tool_use",toolName:"WebSearch",toolInput:o}:null}if(t==="file_change"){let r=e.changes;if(!Array.isArray(r)||r.length===0)return null;let o=r.map(i=>String(i.path||"")).filter(Boolean);if(o.length===0)return null;let s=o.length===1?o[0]:`${o.slice(0,2).join(", ")}${o.length>2?` (+${o.length-2})`:""}`;return {timestamp:n,type:"tool_use",toolName:"Edit",toolInput:s}}return null}function Ei(n,e){let t=e.type;if(t==="text")return {timestamp:n,type:"text",content:String(e.text||"")};if(t==="tool_use"){let r=String(e.name||""),o=e.input,s=ce(o);return r==="Bash"&&de(s)?le(n,s):{timestamp:n,type:"tool_use",toolName:r,toolInput:s}}return null}var vi;exports.codexAdapter=void 0;var Ur=O(()=>{c();dt();lt();ct();Sr();he();vi=new Set(["turn.started","turn.completed","item.updated"]);exports.codexAdapter={command:"codex",meta:{displayName:"Codex",models:Mr(),capabilities:{resume:true}},buildArgs(n,e,t){let{model:r,effort:o}=Zt(e.model),s=e.effort??o,i=e.resumeSessionId?Qn(e.mode):Yn(e.mode),a=Zn(s),d=r?["-m",r]:[],l=xi(e.additionalArgs??[]),g=l.includes("--json")||l.includes("--experimental-json")?[]:["--json"];return e.resumeSessionId?{args:["exec","resume",...g,...i,...a,...d,...l,e.resumeSessionId,"-"],stdinMessage:n}:{args:["exec",...g,...i,...a,...d,...l],stdinMessage:n}},extractText(n){let e=n.split(`
|
|
9
|
+
`).map(o=>o.trim()).filter(Boolean),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="item.completed"&&(s.item?.type==="message"||s.item?.type==="agent_message")&&typeof s.item?.text=="string"){let i=s.item.text;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=Re(n);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(n,e){let t=e??new Date().toISOString(),r=[],o;try{JSON.parse(n),o=[n];}catch{o=_i(n),o.length>1&&console.warn("[codex] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let s of o){let i;try{i=JSON.parse(s);}catch{continue}let a=i.type;if(!a||!a.startsWith("item.")&&!a.startsWith("turn.")&&!a.startsWith("thread."))continue;let d=i.item;if(d){if(a==="item.started"){r.push(...ki(t,d));continue}if(a==="item.completed"){let l=Ai(t,d);l&&r.push(l);continue}}}return r},suppressOutputLine(n){let e=n.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?vi.has(r):!1}catch{return false}}};});function Ti(n){return n?n==="default"||n==="build"?{agent:"build",skipPermissions:false}:n==="plan"?{agent:"plan",skipPermissions:false}:Ci.has(n)?{agent:"build",skipPermissions:true}:{agent:Pi.has(n)?n:"build",skipPermissions:false}:{agent:void 0,skipPermissions:false}}function Si(n){let e=[],t=0,r=false,o=false,s=0;for(let a=0;a<n.length;a++){let d=n[a];if(o){o=false;continue}if(d==="\\"&&r){o=true;continue}if(d==='"'){r=!r;continue}if(!r){if(d==="{")t++;else if(d==="}"&&(t--,t===0)){let l=n.slice(s,a+1).trim();l&&e.push(l),s=a+1;}}}let i=n.slice(s).trim();return i&&e.push(i),e}var Ri,Ci,Pi;exports.opencodeAdapter=void 0;var jr=O(()=>{c();dt();ct();Ri=new Set(["step_start","step_finish"]),Ci=new Set(["bypassPermissions","yolo","agent-full-access"]),Pi=new Set(["build","plan"]);exports.opencodeAdapter={command:"opencode",meta:{displayName:"OpenCode",capabilities:{resume:true}},buildArgs(n,e,t){let r=e.additionalArgs,o=r!==void 0?[...r]:["run"];o.includes("--format")||o.push("--format","json"),e.resumeSessionId&&!o.includes("-s")&&!o.includes("--session")&&o.push("-s",e.resumeSessionId);let{agent:s,skipPermissions:i}=Ti(e.mode);o.includes("--agent")||s!==void 0&&o.push("--agent",s),t&&i&&!o.includes("--dangerously-skip-permissions")&&o.push("--dangerously-skip-permissions"),e.effort!==void 0&&!o.includes("--variant")&&o.push("--variant",e.effort),e.model&&o.push("--model",e.model);let a;return !t&&!e.env?.OPENCODE_PERMISSION&&(a={OPENCODE_PERMISSION:JSON.stringify({external_directory:"allow"})}),{args:o,stdinMessage:n,env:a}},extractText(n){let e=n.split(`
|
|
10
|
+
`).map(o=>o.trim()).filter(Boolean),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="text"&&typeof s.part?.text=="string"){let i=s.part.text;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=Re(n);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(n,e){let t=e??new Date().toISOString(),r=[],o;try{JSON.parse(n),o=[n];}catch{o=Si(n),o.length>1&&console.warn("[opencode] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let s of o){let i;try{i=JSON.parse(s);}catch{continue}let a=i.type;if(a){if(a==="text"){let l=i.part?.text;l&&r.push({timestamp:t,type:"text",content:l});continue}if(a==="tool_use"){let d=i.part;if(!d)continue;let l=String(d.tool||""),u=String(d.callID||""),g=d.state,f=String(g?.status||""),m=g?.input,h=ce(m);if(r.push({timestamp:t,type:"tool_use",toolName:l,toolUseId:u,toolInput:h}),f==="completed"&&g?.output!==void 0){let w=g.output,A=typeof w=="string"?w:JSON.stringify(w);r.push({timestamp:t,type:"tool_result",toolUseId:u,resultPreview:A,isError:false});}else f==="error"&&r.push({timestamp:t,type:"tool_result",toolUseId:u,resultPreview:String(g?.error||"tool error"),isError:true});continue}}}return r},suppressOutputLine(n){let e=n.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?Ri.has(r):!1}catch{return false}}};});var Fr,Hr=O(()=>{c();ht();he();Fr={command:"agy",meta:{displayName:"Antigravity",models:Dr(),defaultTimeoutMs:{query:12e4,execute:3e5},defaultIdleMs:0},buildArgs(n,e,t){if(e.additionalArgs!==void 0){let o=[...e.additionalArgs];return o.includes("--print")||o.unshift("--print",n),e.model&&o.push("--model",e.model),o.push("--dangerously-skip-permissions"),{args:o}}let r=["--print",n,"--dangerously-skip-permissions"];return e.model&&r.push("--model",e.model),{args:r}},extractText(n){let e=n.trim();if(!e)throw new exports.ProviderError("Antigravity CLI returned empty output with exit code 0. agy may have hidden an auth/quota/model error in its log file; inspect ~/.gemini/antigravity-cli/log for details.","cli/antigravity",{code:"EMPTY_OUTPUT",kind:"transient"});return e},parseResultMeta(n){return {usage:null,model:null}},parseEvent(n,e){return []}};});var so,io=O(()=>{c();lt();ct();so={parseEvent(n,e){let t;try{t=JSON.parse(n);}catch{return []}let r=t.type;if(!r)return [];if(r!=="message"&&r!=="tool_use"&&r!=="tool_result")return [];let o=e??new Date().toISOString();if(r==="message"){if(t.role!=="assistant")return [];let i=t.content;return i?[{timestamp:o,type:"text",content:i}]:[]}if(r==="tool_use"){let s=String(t.tool_name||""),i=t.tool_id,a=t.parameters,d=ce(a);return /^bash$/i.test(s)&&de(d)?[le(o,d)]:[{timestamp:o,type:"tool_use",toolName:s,toolUseId:i,toolInput:d}]}if(r==="tool_result"){let s=t.tool_id,i=String(t.output||""),a=t.status!=="success";return [{timestamp:o,type:"tool_result",toolUseId:s,resultPreview:i,isError:a}]}return []}};});function kt(n,e,t){if(t){let r=exports.BUILTIN_ADAPTERS[t];if(r?.parseEvent)return r.parseEvent(e,n);let o=bi[t];if(o?.parseEvent)return o.parseEvent(e,n)}for(let r of Object.values(exports.BUILTIN_ADAPTERS)){let o=r.parseEvent?.(e,n)??[];if(o.length>0)return o}return []}exports.BUILTIN_ADAPTERS=void 0;var bi,Me=O(()=>{c();Lr();$r();Ur();jr();Hr();io();Lr();$r();Ur();jr();Hr();lt();exports.BUILTIN_ADAPTERS={codex:exports.codexAdapter,claude:exports.claudeAdapter,opencode:exports.opencodeAdapter,antigravity:Fr,copilot:exports.copilotAdapter},bi={gemini:so};});var pt,qr=O(()=>{c();pt=class{timeoutMs;onIdleCb;now;timer=null;lastActivity=0;settled=false;constructor(e){this.timeoutMs=e.timeoutMs,this.onIdleCb=e.onIdle,this.now=e.now??Date.now;}start(){this.settled||(this.lastActivity=this.now(),this.scheduleCheck());}refresh(){this.settled||(this.lastActivity=this.now());}stop(){this.settled||(this.settled=true,this.timer&&(clearTimeout(this.timer),this.timer=null));}scheduleCheck(){if(this.settled)return;let e=this.timeoutMs-(this.now()-this.lastActivity);if(e<=0){this.fireIdle();return}this.timer=setTimeout(()=>this.scheduleCheck(),e),this.timer.unref();}fireIdle(){this.settled||(this.settled=true,this.timer=null,this.onIdleCb());}};});function ao(n,e){if(n===void 0||n==="")return e;let t=parseInt(n,10);return Number.isNaN(t)?e:t}function Wr(n=process.env){let e=n.CREWX_TIMEOUT_IDLE;if(e===void 0||e==="")return;let t=parseInt(e,10);if(!(!Number.isFinite(t)||t<=0))return t}function lo(n=process.env){return {queryMs:ao(n.CREWX_TIMEOUT_QUERY,288e5),executeMs:ao(n.CREWX_TIMEOUT_EXECUTE,288e5),idleMs:Wr(n)??6e5}}var or=O(()=>{c();});function Oi(n){let e=n.split(`
|
|
11
11
|
`).filter(d=>d.trim()),t=[],r=[],o=[],s=[],i=[],a=null;for(let d of e)try{let l=JSON.parse(d);if(l.type==="assistant"&&Array.isArray(l.message?.content))for(let u of l.message.content)u.type==="text"&&typeof u.text=="string"&&u.text.trim()&&t.push(u.text.trim());if(l.type==="message"&&l.role==="assistant"&&l.delta===!0&&typeof l.content=="string"&&r.push(l.content),l.type==="assistant.message"&&typeof l.data?.content=="string"){let u=l.data.content;u.trim()&&o.push(u.trim());}if(l.type==="item.completed"&&(l.item?.type==="message"||l.item?.type==="agent_message")&&typeof l.item?.text=="string"){let u=l.item.text;u.trim()&&s.push(u.trim());}if(l.type==="text"&&typeof l.part?.text=="string"){let u=l.part.text;u.trim()&&i.push(u.trim());}l.type==="result"&&typeof l.result=="string"&&(a=l.result);}catch{}return t.length>0?t.join(`
|
|
12
12
|
|
|
13
13
|
`):r.length>0?r.join(""):o.length>0?o.join(`
|
|
14
14
|
|
|
15
15
|
`):s.length>0?s.join(`
|
|
16
16
|
|
|
17
|
-
`):i.length>0?i.join(""):a||n.trim()}function
|
|
18
|
-
`)
|
|
19
|
-
`);
|
|
17
|
+
`):i.length>0?i.join(""):a||n.trim()}function Mi(n){let e=Re(n);return e?{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0}:null}function Ni(n,e,t=process.platform){return n==="copilot"&&t==="win32"&&e instanceof exports.ProviderError&&e.message.includes('CLI command "copilot" not found')}function uo(n,e,t,r,o,s,i){return new Promise((a,d)=>{let l=o?.timeoutMs??288e5,u=o?.idleMs??6e5,g={...process.env,...o?.env??{}},f=o?.cwd??process.cwd(),m=Be({command:n,env:g,cwd:f,allowShellFallback:true}),h=ze(m,e),w=child_process.spawn(h.command,h.argv,{env:g,cwd:o?.cwd,stdio:["pipe","pipe","pipe"],shell:h.shell??false,windowsHide:h.windowsHide,detached:process.platform!=="win32"});w.stdin.on("error",$=>{$.code!=="EPIPE"&&o?.onOutput?.(`stdin error: ${$.message}`,"stderr");}),s!==void 0&&w.stdin.write(s),w.stdin.end(),w.pid!==void 0&&o?.onPid?.(w.pid);let A=false,v=false,_=$=>{if(w.pid!==void 0)try{process.platform==="win32"?w.kill($):process.kill(-w.pid,$);}catch{}},x=()=>{_("SIGKILL");},k=setTimeout(()=>{A||(v=true,j?.stop(),_("SIGTERM"),setTimeout(x,At).unref());},l);k.unref();let j=u>0?new pt({timeoutMs:u,onIdle:()=>{if(A)return;A=true,clearTimeout(k),_("SIGTERM"),setTimeout(x,At).unref();let $=Math.round(u/6e4);d(new Ke(`${t} produced no output for ${$}m (idle timeout). Process killed. The CLI may be waiting on interactive input or stuck \u2014 check the prompt or retry.`,t));}}):null;j?.start();let W=new string_decoder.StringDecoder("utf8"),N=new string_decoder.StringDecoder("utf8"),F="",z="",ee="",K="";w.stdout.on("data",$=>{j?.refresh();let J=W.write($);F+=J,ee+=J;let Q=ee.split(`
|
|
18
|
+
`);ee=Q.pop()??"";for(let B of Q)if(B.trim()&&(o?.onOutput?.(B,"stdout"),i?.extractFailure)){let L=i.extractFailure(B);if(L){A=true,clearTimeout(k),j?.stop(),_("SIGTERM"),setTimeout(x,At).unref(),d(L);return}}}),w.stderr.on("data",$=>{j?.refresh();let J=N.write($);z+=J,K+=J;let Q=K.split(`
|
|
19
|
+
`);K=Q.pop()??"";for(let B of Q)B.trim()&&o?.onOutput?.(B,"stderr");}),w.on("error",$=>{A=true,clearTimeout(k),j?.stop(),$.code==="ENOENT"?d(new exports.ProviderError(`CLI command "${n}" not found. Is ${t} installed?`,t)):d(new exports.ProviderError(`Spawn error: ${$.message}`,t));}),w.on("close",($,J)=>{if(A)return;A=true,clearTimeout(k),j?.stop();let Q=W.end(),B=N.end();Q&&(F+=Q,ee+=Q),B&&(z+=B,K+=B),ee.trim()&&o?.onOutput?.(ee,"stdout"),K.trim()&&o?.onOutput?.(K,"stderr");let L=$??0;if(o?.onExitCode?.(L),v)return d(new Ve(`Total runtime exceeded ${l}ms; process killed.`,t));if(J)return d(new exports.ProviderError(`Process terminated by signal ${J}`,t,{code:"PROVIDER_CRASHED",kind:"permanent"}));if(L!==0){if(i?.interpretExit){let V=i.interpretExit(L,z);if(V){d(V);return}}d(new exports.ProviderError(`Process exited with code ${L}: ${z.slice(0,500)}`,t));return}let G;try{G=i?i.extractText(F):Oi(F);}catch(V){d(V instanceof Error?V:new exports.ProviderError(String(V),t));return}a({stdout:F,parsed:G});});})}function Ce(n,e){po.set(n,e);}function Pe(n,e){let t=n.split("/");if(t.length!==2)throw new exports.ProviderError(`Invalid provider format: "${n}". Expected namespace/id (e.g., cli/claude)`,n);let[r,o]=t,s=po.get(r);if(s)return s(o,n);if(r==="cli"){let i=exports.BUILTIN_ADAPTERS[o];if(!i)throw new exports.ProviderError(`Unknown CLI provider id: "${o}". Supported: ${Object.keys(exports.BUILTIN_ADAPTERS).join(", ")}`,n);return new Br(o,i,n,e)}throw new exports.ProviderError(`Unsupported provider namespace: "${r}". Register a factory with registerProviderFactory('${r}', factory).`,n)}function go(n,e,t){if(!n||!e)return n??{};let r=e({providerStr:t.providerStr,providerId:t.providerId,mode:n.mode});return r.length===0?n:{...n,additionalArgs:[...n.additionalArgs??[],...r]}}var At;exports.ClientToolCallRequiredError=void 0;var po,Br,ve=O(()=>{c();yt();dt();Me();ht();qr();or();ht();At=2e3;exports.ClientToolCallRequiredError=class extends Error{constructor(t,r){super(`Client tool call required: ${t.toolName}`);this.toolCall=t;this.continuationState=r;}toolCall;continuationState;name="ClientToolCallRequiredError"},po=new Map;Br=class{constructor(e,t,r,o){this.providerId=e;this.adapter=t;this.providerStr=r;this.additionalArgsProvider=o;}providerId;adapter;providerStr;additionalArgsProvider;async execute(e,t){let r=this.composeMessage(e,t),o=this.applyAdditionalArgs(t),{args:s,stdinMessage:i,env:a}=this.adapter.buildArgs(r,o,true);o.onCommand?.(`${this.adapter.command} ${s.join(" ")}`);let d=a?{...o,env:{...o.env??{},...a}}:o,{stdout:l,parsed:u}=await this.runProcess(s,d,i);return this.handleResultMeta(l,o),u}async query(e,t){let r=this.composeMessage(e,t),o=this.applyAdditionalArgs(t),{args:s,stdinMessage:i,env:a}=this.adapter.buildArgs(r,o,false);o.onCommand?.(`${this.adapter.command} ${s.join(" ")}`);let d=a?{...o,env:{...o.env??{},...a}}:o,{stdout:l,parsed:u}=await this.runProcess(s,d,i);return this.handleResultMeta(l,o),u}applyAdditionalArgs(e){return go(e,this.additionalArgsProvider,{providerStr:this.providerStr,providerId:this.providerId})}composeMessage(e,t){return t?.systemPrompt?`${t.systemPrompt}
|
|
20
20
|
|
|
21
21
|
---
|
|
22
22
|
|
|
23
|
-
${e}`:e}async runProcess(e,t,r){try{return await
|
|
24
|
-
`);this.stderrBuffer=
|
|
23
|
+
${e}`:e}async runProcess(e,t,r){try{return await uo(this.adapter.command,e,this.providerStr,this.providerId,t,r,this.adapter)}catch(o){if(Ni(this.providerId,o)){let s=e[0]==="copilot"?e:["copilot",...e];return uo("gh",s,this.providerStr,this.providerId,t,r,this.adapter)}throw o}}handleResultMeta(e,t){if(!this.adapter.parseResultMeta){let i=Mi(e);i&&t?.onUsage&&t.onUsage(i);return}let{usage:r,model:o}=this.adapter.parseResultMeta(e);r&&t?.onUsage&&t.onUsage(r);let s=o??(this.providerId==="opencode"?t?.model??null:null);s&&t?.onModel&&t.onModel(s);}};});function an(n){let e=n.update;if(e.sessionUpdate==="agent_message_chunk"){let t=e.content;if(t.type==="text"&&typeof t.text=="string")return t.text}return null}function pe(n,e){try{let t=JSON.parse(n);if(t!=null&&typeof t=="object"&&typeof t.type=="string"&&_a.has(t.type)){let r=e??new Date().toISOString();return [{...t,timestamp:t.timestamp||r}]}}catch{}return []}var _a,Ne=O(()=>{c();_a=new Set(["text","tool_use","tool_result","error","running_instruction","agent_call"]);});var Jo,Xo;exports.VercelProviderRuntime=void 0;var fn=O(()=>{c();ve();Jo=10,Xo=50,exports.VercelProviderRuntime=class{config;constructor(e){this.config=e;}async query(e,t){return this._run(e,"query",t)}async execute(e,t){return this._run(e,"execute",t)}async _run(e,t,r){let{generateText:o,tool:s}=await import('ai'),i=this.convertTools(r?.tools??[],s),a=this.createModel(r?.model),d=Math.min(r?.maxSteps??this.config.maxSteps??Jo,Xo);try{let l=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:f=>{if(l++,!!r?.onOutput){if(f.toolCalls&&f.toolCalls.length>0)for(let m of f.toolCalls)r.onOutput(JSON.stringify({type:"assistant",message:{content:[{type:"tool_use",id:m.toolCallId,name:m.toolName,input:m.args}]}}),"stdout");if(f.toolResults&&f.toolResults.length>0)for(let m of f.toolResults){let h=typeof m.result=="string"?m.result:JSON.stringify(m.result);r.onOutput(JSON.stringify({type:"user",message:{content:[{type:"tool_result",tool_use_id:m.toolCallId,output:h,is_error:!1}]}}),"stdout");}}}}),g=new Set((r?.tools??[]).filter(f=>!f.execute).map(f=>f.name));if(u.finishReason==="tool-calls"&&Array.isArray(u.toolCalls)&&u.toolCalls.length>0){let f=u.toolCalls.filter(m=>g.has(m.toolName));if(f.length>0){let m=f[0];throw new exports.ClientToolCallRequiredError({toolCallId:m.toolCallId,toolName:m.toolName,args:m.args},{userMessage:e,responseMessages:u.response?.messages??[],toolDefinitions:r?.tools??[],maxSteps:d,systemPrompt:r?.systemPrompt,modelOverride:r?.model})}}if(r?.onUsage&&u.usage){let f={inputTokens:u.usage.promptTokens??0,outputTokens:u.usage.completionTokens??0,cachedInputTokens:0,costUsd:0};r.onUsage(f);}return r?.onModel&&r.onModel(r.model??this.config.model),u.text??""}catch(l){throw l instanceof exports.ClientToolCallRequiredError?l:l.status===401?new exports.ProviderError(`Authentication failed for ${this.config.provider}. Check your API key.`,this.config.provider):l.status===429?new exports.ProviderError(`Rate limit exceeded for ${this.config.provider}.`,this.config.provider):new exports.ProviderError(`Provider error: ${l.message}`,this.config.provider)}}async continueWithToolResults(e,t,r){let{generateText:o,tool:s}=await import('ai'),i=this.convertTools(e.toolDefinitions,s),a=this.createModel(e.modelOverride),d=Math.min(e.maxSteps??this.config.maxSteps??Jo,Xo),l=[{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:l,tools:i,maxSteps:d,...this.config.temperature!==void 0&&{temperature:this.config.temperature},...this.config.maxTokens!==void 0&&{maxTokens:this.config.maxTokens}}),g=new Set(e.toolDefinitions.filter(f=>!f.execute).map(f=>f.name));if(u.finishReason==="tool-calls"&&Array.isArray(u.toolCalls)&&u.toolCalls.length>0){let f=u.toolCalls.filter(m=>g.has(m.toolName));if(f.length>0){let m=f[0];throw new exports.ClientToolCallRequiredError({toolCallId:m.toolCallId,toolName:m.toolName,args:m.args},{userMessage:e.userMessage,responseMessages:[...e.responseMessages,{role:"tool",content:t.map(h=>({type:"tool-result",toolCallId:h.toolCallId,toolName:h.toolName,result:typeof h.result=="string"?h.result:JSON.stringify(h.result)}))},...u.response?.messages??[]],toolDefinitions:e.toolDefinitions,maxSteps:e.maxSteps,systemPrompt:e.systemPrompt,modelOverride:e.modelOverride})}}return r?.onUsage&&u.usage&&r.onUsage({inputTokens:u.usage.promptTokens??0,outputTokens:u.usage.completionTokens??0,cachedInputTokens:0,costUsd:0}),r?.onModel&&r.onModel(e.modelOverride??this.config.model),u.text??""}catch(u){throw u instanceof exports.ClientToolCallRequiredError?u:new exports.ProviderError(`Provider error: ${u.message}`,this.config.provider)}}convertTools(e,t){let{z:r}=te("zod"),o={};for(let s of e){let i=this.jsonSchemaToZod(s.parameters??{},r);s.execute?o[s.name]=t({description:s.description,parameters:i,execute:async a=>s.execute(a)}):o[s.name]=t({description:s.description,parameters:i});}return o}jsonSchemaToZod(e,t){if(!e||!e.properties)return t.object({});let r={},o=e.properties,s=e.required??[];for(let[i,a]of Object.entries(o)){let d;switch(a.type){case "string":d=t.string();break;case "number":d=t.number();break;case "integer":d=t.number().int();break;case "boolean":d=t.boolean();break;case "array":d=t.array(t.any());break;default:d=t.any();}a.description&&(d=d.describe(a.description)),s.includes(i)||(d=d.optional()),r[i]=d;}return t.object(r)}createModel(e){let{provider:t,apiKey:r,baseURL:o}=this.config,s=e||this.config.model;switch(t){case "api/openrouter":{let{createOpenAI:i}=te("@ai-sdk/openai");return i({apiKey:r||process.env.OPENROUTER_API_KEY,baseURL:o||"https://openrouter.ai/api/v1"})(s)}case "api/openai":{let{createOpenAI:i}=te("@ai-sdk/openai");return i({apiKey:r||process.env.OPENAI_API_KEY,...o&&{baseURL:o}})(s)}case "api/anthropic":{let{createAnthropic:i}=te("@ai-sdk/anthropic");return i({apiKey:r||process.env.ANTHROPIC_API_KEY,...o&&{baseURL:o}})(s)}case "api/google":{let{createGoogleGenerativeAI:i}=te("@ai-sdk/google");return i({apiKey:r||process.env.GOOGLE_API_KEY})(s)}default:throw new exports.ProviderError(`Unsupported API provider: ${t}`,t)}}};});var Qo={};Kt(Qo,{registerApiProviders:()=>Yo});function Yo(n){Ce("api",(e,t)=>{let r=n?.apiKeys?.[e];return new exports.VercelProviderRuntime({provider:t,model:"",apiKey:r,maxSteps:n?.defaults?.maxSteps,temperature:n?.defaults?.temperature})});}var yn=O(()=>{c();ve();fn();});exports.AcpProtocolError=void 0;var hn=O(()=>{c();exports.AcpProtocolError=class extends Error{constructor(t,r,o){super(t);this.code=r;this.data=o;}code;data;name="AcpProtocolError"};});var Ed,Rd,Zo,es,Cd;exports.AcpConnection=void 0;var hr=O(()=>{c();yt();hn();ve();qr();or();Ed=-32e3,Rd=2e3,Zo=3e4,es=1e4,Cd=8*36e5,exports.AcpConnection=class{constructor(e){this.options=e;}options;proc=null;sdkConnection=null;disposed=false;stderrBuffer="";collectedStderr="";pendingUpdateCallback=null;idleWatchdog=null;idleReject=null;idlePromise=null;authMethods=[];_initResponse=null;get initResponse(){return this._initResponse}async connect(e){if(this.disposed)throw new exports.ProviderError("AcpConnection has been disposed","acp");let t=this.options.spawn,r=process.platform==="win32"&&(t.shellOnWindows??true),o={...process.env,...this.options.env??{}},s=this.options.cwd??process.cwd(),i;try{let v=Be({command:t.command,env:o,cwd:s,allowShellFallback:r});i=ze(v,t.args);}catch(v){throw new exports.ProviderError(v instanceof Error?v.message:String(v),"acp")}let a=child_process.spawn(i.command,i.argv,{stdio:["pipe","pipe","pipe"],env:o,cwd:this.options.cwd,shell:i.shell??false,windowsHide:true,detached:process.platform!=="win32"});a.pid!==void 0&&this.options.onPid?.(a.pid),a.stderr.on("data",v=>{let _=v.toString();this.collectedStderr+=_,this.stderrBuffer+=_;let x=this.stderrBuffer.split(`
|
|
24
|
+
`);this.stderrBuffer=x.pop()??"";for(let b of x)b.trim()&&this.options.onStderr?.(b);}),this.proc=a;let d=this.options.idleMs??6e5;d>0&&(this.idlePromise=new Promise((v,_)=>{this.idleReject=_;}),this.idlePromise.catch(()=>{}),this.idleWatchdog=new pt({timeoutMs:d,onIdle:()=>{let v=Math.round(d/6e4),_=new Ke(`acp produced no output for ${v}m (idle timeout). Process killed. The CLI may be waiting on interactive input or stuck \u2014 check the prompt or retry.`,"acp");this.idleReject?.(_),this.dispose();}}),this.idleWatchdog.start()),a.stdin.on("error",v=>{v.code!=="EPIPE"&&this.options.onStderr?.(`ACP stdin error: ${v.message}`);});let l=new WritableStream({write:v=>new Promise((_,x)=>{a.stdin.write(v,b=>{b?x(b):_();});}),close:()=>{a.stdin.end();}}),u=new ReadableStream({start:v=>{a.stdout.on("data",_=>{this.idleWatchdog?.refresh(),v.enqueue(new Uint8Array(_));}),a.stdout.on("end",()=>{v.close();}),a.stdout.on("error",_=>{v.error(_);});}}),g=sdk.ndJsonStream(l,u),f=this,m=new sdk.ClientSideConnection(v=>({requestPermission:async _=>{if(f.options.configOptions?.allow_all!==void 0){let x=_.options;if(Array.isArray(x)&&x.length>0)return {outcome:{outcome:"selected",optionId:(x.find(k=>k.kind==="allow_once")??x.find(k=>k.kind?.startsWith("allow_"))??x[0]).optionId}}}return {outcome:{outcome:"cancelled"}}},sessionUpdate:async _=>{f.pendingUpdateCallback?.(_);}}),g);this.sdkConnection=m;let h=new Promise((v,_)=>{a.on("error",x=>{if(x.code==="ENOENT"){let k=t.command==="npx"&&t.args.length>0?`@agentclientprotocol/${t.args[0]}`:t.command;_(new exports.ProviderError(`ACP command "${t.command}" not found. Is the ACP adapter installed? Try: npm install -g ${k}`,"acp"));}else _(new exports.ProviderError(`ACP spawn error: ${x.message}`,"acp"));});}),w=this.doInitialize(m,e),A=new Promise((v,_)=>{setTimeout(()=>{_(new exports.AcpProtocolError(`ACP connect timeout after ${Zo}ms. The ACP adapter may not be installed or may require interactive setup.`));},Zo).unref();});await Promise.race([w,A,h]);}async doInitialize(e,t){let r=await e.initialize({protocolVersion:1,clientCapabilities:{auth:{}},clientInfo:{name:t?.name??"crewx-sdk",version:t?.version??"0.8.4"}});this._initResponse=r,this.authMethods=r.authMethods??[];}async newSession(e){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");try{return await this.newSessionWithTimeout(e)}catch(t){if(!this.isAuthError(t))throw t;return await this.tryAuthenticate(),this.newSessionWithTimeout(e)}}async newSessionWithTimeout(e){return (await this.newSessionRawTimeout(e)).sessionId}async newSessionRaw(e){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");try{return await this.newSessionRawTimeout(e)}catch(t){if(!this.isAuthError(t))throw t;return await this.tryAuthenticate(),this.newSessionRawTimeout(e)}}async newSessionRawTimeout(e){let t=this.sdkConnection.newSession(e),r=new Promise((o,s)=>{setTimeout(()=>{s(new exports.AcpProtocolError(`ACP session/new timeout after ${es}ms`));},es).unref();});return Promise.race([t,r])}isAuthError(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code===Ed}async tryAuthenticate(){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected.","acp");let e=this.authMethods.find(r=>r.type==="env_var"&&this.hasEnvVarsFor(r));if(e){await this.sdkConnection.authenticate({methodId:e.id});return}let t=this.authMethods.map(r=>`${r.id} (${r.type??"agent"})`).join(", ");if(this.authMethods.length>0){let r=this.authMethods.filter(o=>o.type==="env_var");if(r.length>0){let o=r.flatMap(s=>(s.vars??[]).filter(i=>!i.optional&&!process.env[i.name]).map(i=>i.name));throw new exports.AcpProtocolError(`ACP authentication required. Missing environment variables: ${o.join(", ")}. Set them in your shell or crewx.yaml env block.`)}throw new exports.AcpProtocolError(`ACP authentication required but no supported method found. Available methods: ${t}. CrewX currently supports env_var authentication only.`)}throw new exports.AcpProtocolError("ACP agent requires authentication but advertised no auth methods.")}hasEnvVarsFor(e){return !e.vars||e.vars.length===0?true:e.vars.filter(t=>!t.optional).every(t=>!!process.env[t.name])}async setModel(e,t){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.unstable_setSessionModel({sessionId:e,modelId:t});}async setMode(e,t){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.setSessionMode({sessionId:e,modeId:t});}async setConfigOption(e,t,r){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.setSessionConfigOption({sessionId:e,configId:t,value:r});}async prompt(e,t,r,o){if(!this.sdkConnection||!this.proc)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");this.pendingUpdateCallback=r??null;let s=this.sdkConnection,i=this.proc,a=o??Cd,d=false,l=s.prompt({sessionId:e,prompt:t}).finally(()=>{d=true;}),u=new Promise((m,h)=>{setTimeout(()=>{s.cancel({sessionId:e}).catch(()=>{}),h(new Ve(`ACP prompt timeout after ${a}ms`,"acp"));},a).unref();}),g=new Promise((m,h)=>{let w=(x,b,k)=>{if(d)return;let j=b!=null?`signal=${b}`:`code=${String(x)}`;h(new exports.ProviderError(`ACP process terminated unexpectedly (${j}) [${k}]: ${this.collectedStderr.slice(-500)}`,"acp"));},A=(x,b)=>w(x,b,"exit"),v=(x,b)=>w(x,b,"close");i.once("exit",A),i.once("close",v);let _=()=>{i.off("exit",A),i.off("close",v);};l.then(_,_);}),f=[l,u,g];this.idlePromise&&f.push(this.idlePromise);try{return await Promise.race(f)}finally{this.pendingUpdateCallback=null;}}async dispose(){if(this.disposed)return;this.disposed=true,this.idleWatchdog?.stop(),this.pendingUpdateCallback=null,this.sdkConnection=null;let e=this.proc;if(!e)return;this.proc=null,this.stderrBuffer.trim()&&(this.options.onStderr?.(this.stderrBuffer),this.stderrBuffer="");let t=e.pid,r=o=>{if(t!==void 0&&process.platform!=="win32")try{process.kill(-t,o);}catch{}else try{e.kill(o);}catch{}};await new Promise(o=>{let s=()=>{clearTimeout(i),o();};e.once("close",s),e.once("error",s);try{r("SIGTERM");}catch{s();return}let i=setTimeout(()=>{r("SIGKILL");},Rd);});}get isConnected(){return !this.disposed&&this.sdkConnection!==null&&this.proc!==null}};});function ts(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 Pd;exports.AcpProviderRuntime=void 0;var wn=O(()=>{c();Ne();hr();Pd={read:"Read",edit:"Edit",delete:"Delete",move:"Move",search:"Search",execute:"Bash",think:"Think",fetch:"WebFetch",switch_mode:"SwitchMode"};exports.AcpProviderRuntime=class{constructor(e,t,r){this.adapter=t;}adapter;async query(e,t){return this.runPrompt(e,t)}async execute(e,t){return this.runPrompt(e,t)}async dispose(){}async runPrompt(e,t){let{command:r,args:o}=this.adapter.spawn;t?.onCommand?.(`${r} ${o.join(" ")}`);let s=this.adapter.buildSpawnEnv?.(t?.model??""),i=s?{...t?.env,...s}:t?.env,a=new exports.AcpConnection({spawn:this.adapter.spawn,env:i,cwd:t?.cwd,timeoutMs:t?.timeoutMs,idleMs:t?.idleMs,onPid:t?.onPid,onStderr:d=>t?.onOutput?.(d,"stderr"),configOptions:t?.configOptions});try{await a.connect(this.adapter.clientInfo);let d=this.adapter.buildSessionParams({cwd:t?.cwd,env:t?.env,model:t?.model,systemPrompt:t?.systemPrompt}),l=await a.newSession(d);await this.applySessionOptions(a,l,t);let u=this.composePrompt(e,t),g=[],f=await a.prompt(l,u,m=>this.handleUpdate(m,t,g),t?.timeoutMs);return this.handleUsage(f,t),g.join("")}finally{await a.dispose().catch(()=>{});}}async applySessionOptions(e,t,r){if(r?.model&&r.model!=="default"&&!this.adapter.buildSpawnEnv){let o=this.adapter.buildEffortAction?.(r.effort??"",r.model);try{o?.type==="set_model"?await e.setModel(t,o.modelId):await e.setModel(t,r.model);}catch(s){console.warn(`[acp] setModel(${r.model}) failed: ${s instanceof Error?s.message:String(s)}`);}}if(r?.mode){let o=this.adapter.resolveMode?.(r.mode)??r.mode;if(o)try{await e.setMode(t,o);}catch(s){console.warn(`[acp] setMode(${o}) failed: ${s instanceof Error?s.message:String(s)}`);}}if(r?.effort){let o=this.adapter.buildEffortAction?.(r.effort,r.model);if(o&&o.type==="set_config_option")try{await e.setConfigOption(t,o.configId,o.value);}catch(s){console.warn(`[acp] setConfigOption(${o.configId}) effort failed: ${s instanceof Error?s.message:String(s)}`);}}if(r?.configOptions)for(let[o,s]of Object.entries(r.configOptions))try{await e.setConfigOption(t,o,s);}catch(i){console.warn(`[acp] setConfigOption(${o}) failed, retrying: ${i instanceof Error?i.message:String(i)}`);try{await new Promise(a=>setTimeout(a,500)),await e.setConfigOption(t,o,s);}catch(a){console.warn(`[acp] setConfigOption(${o}) retry failed: ${a instanceof Error?a.message:String(a)}`);}}}composePrompt(e,t){let r=[];return t?.systemPrompt?.trim()&&(r.push(t.systemPrompt),r.push("---")),t?.context&&(r.push(t.context),r.push("---")),r.push(e),[{type:"text",text:r.join(`
|
|
25
25
|
|
|
26
|
-
`)}]}handleUpdate(e,t,r){let o=e.update;if(o.sessionUpdate==="agent_message_chunk"){let s=null;this.adapter.extractTextFromUpdate?s=this.adapter.extractTextFromUpdate(e):s=
|
|
26
|
+
`)}]}handleUpdate(e,t,r){let o=e.update;if(o.sessionUpdate==="agent_message_chunk"){let s=null;this.adapter.extractTextFromUpdate?s=this.adapter.extractTextFromUpdate(e):s=an(e),s!==null&&(r.push(s),t?.onOutput?.(s,"stdout"));}else if(o.sessionUpdate==="tool_call"){this.pushBlockBoundary(r);let s=new Date().toISOString(),i=o,a={title:i.title??"",kind:i.kind,rawInput:i.rawInput,rawOutput:i.rawOutput,locations:i.locations,_meta:i._meta},d=this.resolveToolCall(a),l={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:d.toolName,toolInput:d.toolInput};t?.onTaskLog?.([l]);}else if(o.sessionUpdate==="tool_call_update"){let s=new Date().toISOString(),i=o;if(i.status==="completed"||i.status==="failed"){let d=this.extractResultPreview(i.rawOutput),l={timestamp:s,type:"tool_result",toolUseId:i.toolCallId,resultPreview:d,isError:i.status==="failed"};t?.onTaskLog?.([l]);}else if(i.rawInput!=null&&typeof i.rawInput=="object"&&Object.keys(i.rawInput).length>0){this.pushBlockBoundary(r);let d={title:i.title??"",kind:i.kind,rawInput:i.rawInput,rawOutput:i.rawOutput,locations:i.locations,_meta:i._meta},l=this.resolveToolCall(d),u={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:l.toolName,toolInput:l.toolInput};t?.onTaskLog?.([u]);}}else o.sessionUpdate;}pushBlockBoundary(e){e.length===0||e[e.length-1].endsWith(`
|
|
27
27
|
|
|
28
28
|
`)||e.push(`
|
|
29
29
|
|
|
30
|
-
`);}resolveToolCall(e){let t=e._meta;if(t?.claudeCode?.toolName)return {toolName:t.claudeCode.toolName,toolInput:
|
|
31
|
-
`)}if(typeof e=="object"){let t=e;if(typeof t.formatted_output=="string")return t.formatted_output;if(typeof t.content=="string")return t.content;if(Array.isArray(t.content)){let r=this.extractResultPreview(t.content);if(r)return r}if(typeof t.output=="string")return t.output;if(typeof t.text=="string")return t.text;if(typeof t.message=="string")return t.message;if(t.result!=null){let r=this.extractResultPreview(t.result);if(r)return r}if(t.error!=null){let r=this.extractResultPreview(t.error);if(r)return r}}return JSON.stringify(e)}}handleUsage(e,t){if(!t?.onUsage)return;if(this.adapter.extractUsage){let o=this.adapter.extractUsage(e);if(o){t.onUsage(o);return}}let r=e.usage;r&&t.onUsage({inputTokens:r.inputTokens??0,outputTokens:r.outputTokens??0,cachedInputTokens:r.cachedReadTokens??0,costUsd:0});}};});exports.claudeAcpAdapter=void 0;var yn=M(()=>{c();Oe();exports.claudeAcpAdapter={spawn:{command:"npx",args:["-y","@agentclientprotocol/claude-agent-acp"],shellOnWindows:true},npmPackage:"@agentclientprotocol/claude-agent-acp",clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Claude",defaultMode:"default"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},extractUsage(n){let e=n.usage;return e?{inputTokens:(e.inputTokens??0)+(e.cachedReadTokens??0),outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"bypassPermissions",buildEffortAction(n){return n?{type:"set_config_option",configId:"effort",value:n}:null},buildSpawnEnv(n){if(!(!n||n==="default"))return {ANTHROPIC_MODEL:n}},resolveMode(n){return {yolo:"bypassPermissions"}[n]??n},parseEvent:ue};});exports.codexAcpAdapter=void 0;var hn=M(()=>{c();Oe();exports.codexAcpAdapter={spawn:{command:"npx",args:["-y","@agentclientprotocol/codex-acp"],shellOnWindows:true},npmPackage:"@agentclientprotocol/codex-acp",clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Codex",defaultMode:"agent"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},extractUsage(n){let e=n.usage;return e?{inputTokens:(e.inputTokens??0)+(e.cachedReadTokens??0),outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"agent-full-access",buildEffortAction(n,e){if(!e)return null;let t=e.match(/^(.+?)\[([^\]]+)\]$/),r=t?t[1]:e,o=t?t[2]:void 0;return {type:"set_model",modelId:`${r}[${n||o||"medium"}]`}},resolveMode(n){return {yolo:"agent-full-access",default:"agent",plan:"read-only"}[n]??n},parseEvent:ue};});var ut;exports.copilotAcpAdapter=void 0;var wn=M(()=>{c();Oe();ut="https://agentclientprotocol.com/protocol/session-modes",exports.copilotAcpAdapter={spawn:{command:"copilot",args:["--acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"GitHub Copilot"},buildSessionParams(n){return {cwd:n.cwd?Y.resolve(n.cwd):process.cwd(),mcpServers:[]}},yoloModeId:`${ut}#autopilot`,buildEffortAction(n){return n?{type:"set_config_option",configId:"reasoning_effort",value:n}:null},resolveMode(n){return n.startsWith("https://")?n:{yolo:`${ut}#autopilot`,default:`${ut}#agent`,agent:`${ut}#agent`,plan:`${ut}#plan`,autopilot:`${ut}#autopilot`}[n]??null},parseEvent:ue};});exports.opencodeAcpAdapter=void 0;var vn=M(()=>{c();Oe();exports.opencodeAcpAdapter={spawn:{command:"opencode",args:["acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"OpenCode"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},yoloModeId:void 0,buildEffortAction(n){return null},resolveMode(n){let e={default:"build"};return n==="yolo"?null:e[n]??n},parseEvent:ue};});exports.ACP_ADAPTERS=void 0;var _r=M(()=>{c();yn();hn();wn();vn();yn();hn();wn();vn();exports.ACP_ADAPTERS={codex:exports.codexAcpAdapter,claude:exports.claudeAcpAdapter,opencode:exports.opencodeAcpAdapter,copilot:exports.copilotAcpAdapter};});var Zo={};Wt(Zo,{registerAcpProviders:()=>Qo});function Qo(n){if(n){Ee("acp",n);return}Ee("acp",(e,t)=>{let r=exports.ACP_ADAPTERS[e];if(!r)throw new exports.ProviderError(`Unknown ACP provider id: "${e}". Supported: ${Object.keys(exports.ACP_ADAPTERS).join(", ")}`,t);return new exports.AcpProviderRuntime(e,r,t)});}var _n=M(()=>{c();we();fn();_r();we();});function hd(n){if(!n)return n;let e=n.trim().replace(/\/+$/,"");return e.toLowerCase().endsWith("/mcp")?e.slice(0,-4):e}exports.McpHttpTransport=void 0;var kn=M(()=>{c();exports.McpHttpTransport=class{endpoint;headers;timeoutMs;constructor(e){let t=hd(e.url);this.endpoint=`${t}/mcp`,this.headers={"Content-Type":"application/json",...e.headers??{}},e.apiKey&&(this.headers.Authorization=`Bearer ${e.apiKey}`),this.timeoutMs=e.timeoutMs??3e4;}async send(e){let t=new AbortController,r=setTimeout(()=>t.abort(),this.timeoutMs);try{let o=await fetch(this.endpoint,{method:"POST",headers:this.headers,body:JSON.stringify(e),signal:t.signal});if(clearTimeout(r),!o.ok){let a=await o.text();throw new Error(`HTTP ${o.status}: ${o.statusText}${a?` - ${a}`:""}`)}let s=o.headers.get("content-type");if(s?.includes("application/json"))return await o.json();let i=await o.text();return {jsonrpc:"2.0",id:e.id,error:{code:-32600,message:`Unexpected response content-type: ${s}`,data:i}}}catch(o){throw clearTimeout(r),o instanceof Error&&o.name==="AbortError"?new Error(`MCP-HTTP request timeout after ${this.timeoutMs}ms to ${this.endpoint}`):o}}async close(){}};});exports.RemoteAgentManager=void 0;var xn=M(()=>{c();kn();exports.RemoteAgentManager=class{logger;configs=new Map;transports=new Map;constructor(e={}){this.logger=e.logger??(()=>{});}loadConfig(e,t){this.validateConfig(t),this.configs.set(e,t),this.transports.set(e,new exports.McpHttpTransport({url:t.url,apiKey:t.apiKey,headers:t.headers,timeoutMs:t.timeoutMs})),this.logger(`Loaded remote agent config for: ${e}`,"debug");}loadConfigWithTransport(e,t,r){this.validateConfig(t),this.configs.set(e,t),this.transports.set(e,r),this.logger(`Loaded remote agent config for: ${e} (custom transport)`,"debug");}getConfig(e){return this.configs.get(e)}isRemoteAgent(e){return this.configs.has(e)}getRemoteAgentIds(){return Array.from(this.configs.keys())}async query(e,t){let r=this.requireConfig(e),o=r.tools?.query??"crewx_queryAgent",i={agentId:r.agentId??e,query:t.query};t.context&&(i.context=t.context),t.model&&(i.model=t.model),t.platform&&(i.platform=t.platform),t.messages?.length&&(i.messages=t.messages);try{let a=await this.callRemoteTool(e,o,i);return this.normalizeResponse(a)}catch(a){let d=a instanceof Error?a.message:String(a);throw this.logger(`Remote query failed for agent ${e}: ${d}`,"error"),a}}async execute(e,t){let r=this.requireConfig(e),o=r.tools?.execute??"crewx_executeAgent",i={agentId:r.agentId??e,task:t.task};t.context&&(i.context=t.context),t.model&&(i.model=t.model),t.platform&&(i.platform=t.platform),t.messages?.length&&(i.messages=t.messages);try{let a=await this.callRemoteTool(e,o,i);return this.normalizeResponse(a)}catch(a){let d=a instanceof Error?a.message:String(a);throw this.logger(`Remote execute failed for agent ${e}: ${d}`,"error"),a}}mapToolNames(e,t){let r=this.requireConfig(e);r.tools={query:t.query??r.tools?.query??"crewx_queryAgent",execute:t.execute??r.tools?.execute??"crewx_executeAgent"},this.logger(`Updated tool name mapping for agent ${e}`,"debug");}async clearConfigs(){for(let e of this.transports.values())await e.close();this.configs.clear(),this.transports.clear(),this.logger("Cleared all remote agent configurations","debug");}requireConfig(e){let t=this.configs.get(e);if(!t)throw new Error(`Agent ${e} is not configured as a remote agent`);return t}async callRemoteTool(e,t,r){let o=this.transports.get(e);if(!o)throw new Error(`No transport available for agent ${e}`);let s={jsonrpc:"2.0",id:`${t}-${Date.now()}`,method:"tools/call",params:{name:t,arguments:r}};this.logger(`Calling remote MCP tool ${t} for agent ${e}`,"debug");let i=await o.send(s);if(i.error)throw new Error(i.error.message||"MCP server returned an error");return i.result}normalizeResponse(e){if(!e)return {success:false,content:[{type:"text",text:"Remote agent returned no response."}]};let t=e;if(Array.isArray(t.content)&&t.content.length>0)return t;let r=t.response??t.implementation??t.message??t.output,o=typeof r=="string"?r:JSON.stringify(r??e,null,2);return {...t,content:[{type:"text",text:o}]}}validateConfig(e){if(!e.url)throw new Error("Remote agent configuration requires a URL");if(!e.url.startsWith("http://")&&!e.url.startsWith("https://"))throw new Error("Remote agent URL must start with http:// or https://");if(e.type!=="mcp-http")throw new Error(`Unsupported remote agent type: ${e.type}`)}};});var ts={};Wt(ts,{RemoteProviderRuntime:()=>exports.RemoteProviderRuntime,createRemoteProviderFactory:()=>es,resolveFileRemoteAgent:()=>Rd});function Ad(n){let e=Uo.readFileSync(n,"utf-8"),t=jsYaml.load(e);return {agents:Array.isArray(t?.agents)?t.agents:void 0}}function Ed(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 Rd(n,e=Ad,t=Uo.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=Ed(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=Y.resolve(Y.dirname(r),s.working_directory??".");return {agent:{...s,working_directory:a},provider:i}}function es(n,e=Re){return (t,r)=>{let o=n.get(t);if(!o)throw new Error(`Remote provider "${t}" not found. Available: ${Array.from(n.keys()).join(", ")||"(none)"}`);if(o.location.startsWith("file://"))throw new Error(`Remote provider "${t}" uses file:// location which is not supported at the SDK level. Use the CLI commands (crewx query / crewx execute) which handle file:// remotes automatically.`);return new exports.RemoteProviderRuntime(t,o,e)}}function Cd(n,e){let t=e.location;if(!t)throw new Error("Remote provider config requires a location");if(!t.startsWith("http://")&&!t.startsWith("https://"))throw new Error(`Unsupported remote location protocol for MCP-HTTP: ${t}`);return {type:"mcp-http",url:t,apiKey:e.apiKey,headers:e.headers,timeoutMs:e.timeout?.query??3e4,agentId:e.external_agent_id??n}}exports.RemoteProviderRuntime=void 0;var An=M(()=>{c();we();xn();exports.RemoteProviderRuntime=class{manager;agentId;constructor(e,t,r=Re){this.agentId=t.external_agent_id??e,this.manager=new exports.RemoteAgentManager;let o=Cd(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(`
|
|
30
|
+
`);}resolveToolCall(e){let t=e._meta;if(t?.claudeCode?.toolName)return {toolName:t.claudeCode.toolName,toolInput:ts(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=Pd[e.kind??""]??e.title??"unknown",o=ts(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(`
|
|
31
|
+
`)}if(typeof e=="object"){let t=e;if(typeof t.formatted_output=="string")return t.formatted_output;if(typeof t.content=="string")return t.content;if(Array.isArray(t.content)){let r=this.extractResultPreview(t.content);if(r)return r}if(typeof t.output=="string")return t.output;if(typeof t.text=="string")return t.text;if(typeof t.message=="string")return t.message;if(t.result!=null){let r=this.extractResultPreview(t.result);if(r)return r}if(t.error!=null){let r=this.extractResultPreview(t.error);if(r)return r}}return JSON.stringify(e)}}handleUsage(e,t){if(!t?.onUsage)return;if(this.adapter.extractUsage){let o=this.adapter.extractUsage(e);if(o){t.onUsage(o);return}}let r=e.usage;r&&t.onUsage({inputTokens:r.inputTokens??0,outputTokens:r.outputTokens??0,cachedInputTokens:r.cachedReadTokens??0,costUsd:0});}};});exports.claudeAcpAdapter=void 0;var vn=O(()=>{c();Ne();exports.claudeAcpAdapter={spawn:{command:"npx",args:["-y","@agentclientprotocol/claude-agent-acp"],shellOnWindows:true},npmPackage:"@agentclientprotocol/claude-agent-acp",clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Claude",defaultMode:"default"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},extractUsage(n){let e=n.usage;return e?{inputTokens:(e.inputTokens??0)+(e.cachedReadTokens??0),outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"bypassPermissions",buildEffortAction(n){return n?{type:"set_config_option",configId:"effort",value:n}:null},buildSpawnEnv(n){if(!(!n||n==="default"))return {ANTHROPIC_MODEL:n}},resolveMode(n){return {yolo:"bypassPermissions"}[n]??n},parseEvent:pe};});exports.codexAcpAdapter=void 0;var _n=O(()=>{c();Ne();exports.codexAcpAdapter={spawn:{command:"npx",args:["-y","@agentclientprotocol/codex-acp"],shellOnWindows:true},npmPackage:"@agentclientprotocol/codex-acp",clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Codex",defaultMode:"agent"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},extractUsage(n){let e=n.usage;return e?{inputTokens:(e.inputTokens??0)+(e.cachedReadTokens??0),outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"agent-full-access",buildEffortAction(n,e){if(!e)return null;let t=e.match(/^(.+?)\[([^\]]+)\]$/),r=t?t[1]:e,o=t?t[2]:void 0;return {type:"set_model",modelId:`${r}[${n||o||"medium"}]`}},resolveMode(n){return {yolo:"agent-full-access",default:"agent",plan:"read-only"}[n]??n},parseEvent:pe};});var ft;exports.copilotAcpAdapter=void 0;var xn=O(()=>{c();Ne();ft="https://agentclientprotocol.com/protocol/session-modes",exports.copilotAcpAdapter={spawn:{command:"copilot",args:["--acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"GitHub Copilot"},buildSessionParams(n){return {cwd:n.cwd?q.resolve(n.cwd):process.cwd(),mcpServers:[]}},yoloModeId:`${ft}#autopilot`,buildEffortAction(n){return n?{type:"set_config_option",configId:"reasoning_effort",value:n}:null},resolveMode(n){return n.startsWith("https://")?n:{yolo:`${ft}#autopilot`,default:`${ft}#agent`,agent:`${ft}#agent`,plan:`${ft}#plan`,autopilot:`${ft}#autopilot`}[n]??null},parseEvent:pe};});exports.opencodeAcpAdapter=void 0;var kn=O(()=>{c();Ne();exports.opencodeAcpAdapter={spawn:{command:"opencode",args:["acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"OpenCode"},buildSessionParams(n){return {cwd:n.cwd??process.cwd(),mcpServers:[]}},yoloModeId:void 0,buildEffortAction(n){return null},resolveMode(n){let e={default:"build"};return n==="yolo"?null:e[n]??n},parseEvent:pe};});exports.ACP_ADAPTERS=void 0;var kr=O(()=>{c();vn();_n();xn();kn();vn();_n();xn();kn();exports.ACP_ADAPTERS={codex:exports.codexAcpAdapter,claude:exports.claudeAcpAdapter,opencode:exports.opencodeAcpAdapter,copilot:exports.copilotAcpAdapter};});var ns={};Kt(ns,{registerAcpProviders:()=>rs});function rs(n){if(n){Ce("acp",n);return}Ce("acp",(e,t)=>{let r=exports.ACP_ADAPTERS[e];if(!r)throw new exports.ProviderError(`Unknown ACP provider id: "${e}". Supported: ${Object.keys(exports.ACP_ADAPTERS).join(", ")}`,t);return new exports.AcpProviderRuntime(e,r,t)});}var An=O(()=>{c();ve();wn();kr();ve();});function Sd(n){if(!n)return n;let e=n.trim().replace(/\/+$/,"");return e.toLowerCase().endsWith("/mcp")?e.slice(0,-4):e}exports.McpHttpTransport=void 0;var En=O(()=>{c();exports.McpHttpTransport=class{endpoint;headers;timeoutMs;constructor(e){let t=Sd(e.url);this.endpoint=`${t}/mcp`,this.headers={"Content-Type":"application/json",...e.headers??{}},e.apiKey&&(this.headers.Authorization=`Bearer ${e.apiKey}`),this.timeoutMs=e.timeoutMs??3e4;}async send(e){let t=new AbortController,r=setTimeout(()=>t.abort(),this.timeoutMs);try{let o=await fetch(this.endpoint,{method:"POST",headers:this.headers,body:JSON.stringify(e),signal:t.signal});if(clearTimeout(r),!o.ok){let a=await o.text();throw new Error(`HTTP ${o.status}: ${o.statusText}${a?` - ${a}`:""}`)}let s=o.headers.get("content-type");if(s?.includes("application/json"))return await o.json();let i=await o.text();return {jsonrpc:"2.0",id:e.id,error:{code:-32600,message:`Unexpected response content-type: ${s}`,data:i}}}catch(o){throw clearTimeout(r),o instanceof Error&&o.name==="AbortError"?new Error(`MCP-HTTP request timeout after ${this.timeoutMs}ms to ${this.endpoint}`):o}}async close(){}};});exports.RemoteAgentManager=void 0;var Rn=O(()=>{c();En();exports.RemoteAgentManager=class{logger;configs=new Map;transports=new Map;constructor(e={}){this.logger=e.logger??(()=>{});}loadConfig(e,t){this.validateConfig(t),this.configs.set(e,t),this.transports.set(e,new exports.McpHttpTransport({url:t.url,apiKey:t.apiKey,headers:t.headers,timeoutMs:t.timeoutMs})),this.logger(`Loaded remote agent config for: ${e}`,"debug");}loadConfigWithTransport(e,t,r){this.validateConfig(t),this.configs.set(e,t),this.transports.set(e,r),this.logger(`Loaded remote agent config for: ${e} (custom transport)`,"debug");}getConfig(e){return this.configs.get(e)}isRemoteAgent(e){return this.configs.has(e)}getRemoteAgentIds(){return Array.from(this.configs.keys())}async query(e,t){let r=this.requireConfig(e),o=r.tools?.query??"crewx_queryAgent",i={agentId:r.agentId??e,query:t.query};t.context&&(i.context=t.context),t.model&&(i.model=t.model),t.platform&&(i.platform=t.platform),t.messages?.length&&(i.messages=t.messages);try{let a=await this.callRemoteTool(e,o,i);return this.normalizeResponse(a)}catch(a){let d=a instanceof Error?a.message:String(a);throw this.logger(`Remote query failed for agent ${e}: ${d}`,"error"),a}}async execute(e,t){let r=this.requireConfig(e),o=r.tools?.execute??"crewx_executeAgent",i={agentId:r.agentId??e,task:t.task};t.context&&(i.context=t.context),t.model&&(i.model=t.model),t.platform&&(i.platform=t.platform),t.messages?.length&&(i.messages=t.messages);try{let a=await this.callRemoteTool(e,o,i);return this.normalizeResponse(a)}catch(a){let d=a instanceof Error?a.message:String(a);throw this.logger(`Remote execute failed for agent ${e}: ${d}`,"error"),a}}mapToolNames(e,t){let r=this.requireConfig(e);r.tools={query:t.query??r.tools?.query??"crewx_queryAgent",execute:t.execute??r.tools?.execute??"crewx_executeAgent"},this.logger(`Updated tool name mapping for agent ${e}`,"debug");}async clearConfigs(){for(let e of this.transports.values())await e.close();this.configs.clear(),this.transports.clear(),this.logger("Cleared all remote agent configurations","debug");}requireConfig(e){let t=this.configs.get(e);if(!t)throw new Error(`Agent ${e} is not configured as a remote agent`);return t}async callRemoteTool(e,t,r){let o=this.transports.get(e);if(!o)throw new Error(`No transport available for agent ${e}`);let s={jsonrpc:"2.0",id:`${t}-${Date.now()}`,method:"tools/call",params:{name:t,arguments:r}};this.logger(`Calling remote MCP tool ${t} for agent ${e}`,"debug");let i=await o.send(s);if(i.error)throw new Error(i.error.message||"MCP server returned an error");return i.result}normalizeResponse(e){if(!e)return {success:false,content:[{type:"text",text:"Remote agent returned no response."}]};let t=e;if(Array.isArray(t.content)&&t.content.length>0)return t;let r=t.response??t.implementation??t.message??t.output,o=typeof r=="string"?r:JSON.stringify(r??e,null,2);return {...t,content:[{type:"text",text:o}]}}validateConfig(e){if(!e.url)throw new Error("Remote agent configuration requires a URL");if(!e.url.startsWith("http://")&&!e.url.startsWith("https://"))throw new Error("Remote agent URL must start with http:// or https://");if(e.type!=="mcp-http")throw new Error(`Unsupported remote agent type: ${e.type}`)}};});var ss={};Kt(ss,{RemoteProviderRuntime:()=>exports.RemoteProviderRuntime,createRemoteProviderFactory:()=>os,resolveFileRemoteAgent:()=>$d});function Dd(n){let e=qo.readFileSync(n,"utf-8"),t=jsYaml.load(e);return {agents:Array.isArray(t?.agents)?t.agents:void 0}}function Ld(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 $d(n,e=Dd,t=qo.existsSync){let r=n.location.replace("file://","");if(!t(r))throw new Error(`Remote config file not found: ${r}`);if(!n.external_agent_id)throw new Error(`external_agent_id is required for file:// remote provider "${n.id}"`);let s=e(r).agents?.find(d=>d.id===n.external_agent_id);if(!s)throw new Error(`Agent "${n.external_agent_id}" not found in ${r}`);let i=Ld(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=q.resolve(q.dirname(r),s.working_directory??".");return {agent:{...s,working_directory:a},provider:i}}function os(n,e=Pe){return (t,r)=>{let o=n.get(t);if(!o)throw new Error(`Remote provider "${t}" not found. Available: ${Array.from(n.keys()).join(", ")||"(none)"}`);if(o.location.startsWith("file://"))throw new Error(`Remote provider "${t}" uses file:// location which is not supported at the SDK level. Use the CLI commands (crewx query / crewx execute) which handle file:// remotes automatically.`);return new exports.RemoteProviderRuntime(t,o,e)}}function Ud(n,e){let t=e.location;if(!t)throw new Error("Remote provider config requires a location");if(!t.startsWith("http://")&&!t.startsWith("https://"))throw new Error(`Unsupported remote location protocol for MCP-HTTP: ${t}`);return {type:"mcp-http",url:t,apiKey:e.apiKey,headers:e.headers,timeoutMs:e.timeout?.query??3e4,agentId:e.external_agent_id??n}}exports.RemoteProviderRuntime=void 0;var Cn=O(()=>{c();ve();Rn();exports.RemoteProviderRuntime=class{manager;agentId;constructor(e,t,r=Pe){this.agentId=t.external_agent_id??e,this.manager=new exports.RemoteAgentManager;let o=Ud(e,t);this.manager.loadConfig(this.agentId,o);}async query(e,t){return (await this.manager.query(this.agentId,{agentId:this.agentId,query:e,model:t?.model,context:t?.context??t?.systemPrompt})).content.map(o=>o.text).join(`
|
|
32
32
|
`)}async execute(e,t){return (await this.manager.execute(this.agentId,{agentId:this.agentId,task:e,model:t?.model,context:t?.context??t?.systemPrompt})).content.map(o=>o.text).join(`
|
|
33
|
-
`)}};});var
|
|
34
|
-
`);m=_.pop()??"";for(let x of _)x.trim()&&t?.onOutput?.(x,"stdout");}),u.stderr.on("data",
|
|
35
|
-
`);
|
|
36
|
-
`+(t?` package anchor: ${
|
|
33
|
+
`)}};});var ls={};Kt(ls,{PluginProviderRuntime:()=>exports.PluginProviderRuntime,createPluginProviderFactory:()=>ds});function ds(n){return (e,t)=>{let r=n.get(e);if(!r)throw new exports.ProviderError(`Plugin provider "${e}" not found. Available: ${Array.from(n.keys()).join(", ")||"(none)"}`,`plugin/${e}`);return new exports.PluginProviderRuntime(e,r)}}function is(n,e,t,r){let o=n.map(s=>s.replace(/\{model\}/g,e));return r&&o.push(t),o}function Fd(n){if(!n||typeof n!="string")throw new Error("Plugin provider requires a cli_command")}function as(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 Hd(n){for(let{pattern:e}of n)if(typeof e!="string")throw new Error("Error pattern must be a string")}function qd(n){for(let[e,t]of Object.entries(n))if(typeof e!="string"||typeof t!="string")throw new Error("env entries must be string key/value pairs")}exports.PluginProviderRuntime=void 0;var Pn=O(()=>{c();ve();yt();exports.PluginProviderRuntime=class{constructor(e,t){this.config=t;this.providerStr=`plugin/${e}`,Fd(t.cli_command),as(t.query_args),as(t.execute_args),t.error_patterns&&Hd(t.error_patterns),t.env&&qd(t.env);}config;providerStr;async query(e,t){let r=t?.model??this.config.default_model??"default",o=is(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=is(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=Be({command:this.config.cli_command,env:a,cwd:process.cwd(),resolution:this.config.prefer_local_bin?"local_first":"global_first",allowShellFallback:true}),l=ze(d,e),u=child_process.spawn(l.command,l.argv,{env:a,shell:l.shell??false,stdio:["pipe","pipe","pipe"],windowsHide:l.windowsHide});r!==void 0&&u.stdin.write(r),u.stdin.end(),u.pid!==void 0&&t?.onPid?.(u.pid);let g="",f="",m="",h="";u.stdout.on("data",A=>{let v=A.toString();g+=v,m+=v;let _=m.split(`
|
|
34
|
+
`);m=_.pop()??"";for(let x of _)x.trim()&&t?.onOutput?.(x,"stdout");}),u.stderr.on("data",A=>{let v=A.toString();f+=v,h+=v;let _=h.split(`
|
|
35
|
+
`);h=_.pop()??"";for(let x of _)x.trim()&&t?.onOutput?.(x,"stderr");});let w=setTimeout(()=>{u.kill("SIGTERM"),i(new exports.ProviderError(`Plugin provider "${this.providerStr}" timed out after ${o}ms`,this.providerStr));},o);u.on("error",A=>{if(clearTimeout(w),A.code==="ENOENT"){let v=this.config.not_installed_message??`CLI command "${this.config.cli_command}" not found. Is ${this.config.id} installed?`;i(new exports.ProviderError(v,this.providerStr));}else i(new exports.ProviderError(`Spawn error: ${A.message}`,this.providerStr));}),u.on("close",A=>{clearTimeout(w),m.trim()&&t?.onOutput?.(m,"stdout"),h.trim()&&t?.onOutput?.(h,"stderr");let v=A??0;if(t?.onExitCode?.(v),this.config.error_patterns){let _=f||g;for(let x of this.config.error_patterns)if(_.includes(x.pattern)){i(new exports.ProviderError(x.message,this.providerStr));return}}if(A!==0){i(new exports.ProviderError(`Process exited with code ${A}: ${f.slice(0,500)}`,this.providerStr));return}s(g.trim());});})}};});c();c();c();function Hs(n){let e=o=>o.replace(/[.+^${}()|[\]\\]/g,"\\$&"),r=n.split("/").map(o=>o==="**"?".*":o.split("*").map(e).join("[^/]*"));return new RegExp(`^${r.join("\\/")}$`)}function ye(n,e){try{return Hs(e).test(n)}catch{return false}}c();c();var qs=zod.z.object({model:zod.z.string().optional(),system_prompt:zod.z.string().optional(),prompt:zod.z.string().optional(),layout:zod.z.union([zod.z.string(),zod.z.object({id:zod.z.string(),props:zod.z.record(zod.z.unknown()).optional()}),zod.z.object({props:zod.z.record(zod.z.unknown())}),zod.z.object({template:zod.z.string()})]).optional()}).catchall(zod.z.unknown()),Gn=zod.z.object({include:zod.z.array(zod.z.string()).optional()}).optional(),Ws=zod.z.object({id:zod.z.string(),name:zod.z.string().optional(),role:zod.z.string().optional(),team:zod.z.string().optional(),provider:zod.z.union([zod.z.string(),zod.z.array(zod.z.string())]),working_directory:zod.z.string().optional(),description:zod.z.string().optional(),tags:zod.z.array(zod.z.string()).optional(),inline:qs.optional(),skills:Gn}).catchall(zod.z.unknown()),Bs=zod.z.object({bin_resolution:zod.z.enum(["global_first","local_first"]).optional()}).catchall(zod.z.unknown()),Jn=zod.z.object({agents:zod.z.array(Ws).optional(),hooks:zod.z.array(zod.z.unknown()).optional(),settings:Bs.optional(),skills:zod.z.unknown().optional(),layouts:zod.z.record(zod.z.unknown()).optional(),documents:zod.z.record(zod.z.unknown()).optional()}).catchall(zod.z.unknown());var qe=class extends Error{constructor(t,r){super(t);this.cause=r;this.name="ConfigLoadError";}cause};function Vt(n){if(!n||typeof n!="string"||!n.trim())throw new qe("YAML content must be a non-empty string");let e;try{e=jsYaml.load(n);}catch(o){throw new qe(`YAML parse error: ${o.message}`,o)}let t=Vs(e),r=Jn.safeParse(t);if(!r.success)throw new qe(`Config validation error: ${r.error.message}`);return r.data}function Gt(n){let e;try{e=qo.readFileSync(n,"utf-8");}catch(t){throw new qe(`Cannot read file: ${n}`,t)}return Vt(e)}function Vs(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}}c();var We=q.join("templates","agents");function Xs(){try{let e=(typeof te=="function"?te:module$1.createRequire(typeof __filename<"u"?__filename:process.cwd()+"/")).resolve("@crewx/sdk/package.json");return q.dirname(e)}catch{return null}}function it(n){if(n&&qo.existsSync(n))return n;let e=process.env.CREWX_SDK_TEMPLATES_PATH;if(e&&qo.existsSync(e))return e;let t=Xs();if(t){let o=q.join(t,We);if(qo.existsSync(o))return o}let r=[q.join(__dirname,"..",We),q.join(__dirname,"..","..",We),q.join(__dirname,"..","..","..",We),q.join(process.cwd(),"packages","sdk",We),q.join(process.cwd(),We)];for(let o of r)if(qo.existsSync(o))return o;throw new Error(`[@crewx/sdk] Templates directory not found.
|
|
36
|
+
`+(t?` package anchor: ${q.join(t,We)}
|
|
37
37
|
`:` package anchor: (unresolved)
|
|
38
38
|
`)+r.map(o=>` candidate: ${o}`).join(`
|
|
39
39
|
`)+`
|
|
40
|
-
Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function
|
|
40
|
+
Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function Cr(){let n=it();return {yamlPath:q.join(n,"default.yaml"),dir:n}}c();var Ee=class extends Error{constructor(e,t){let r=t.length>0?` Available: ${t.join(", ")}`:"";super(`Agent not found: "${e}".${r}`),this.name="AgentNotFoundError";}},Ys={claude:{id:"claude",provider:"cli/claude"},copilot:{id:"copilot",provider:"cli/copilot"},codex:{id:"codex",provider:"cli/codex"}};function Xt(n,e){let t=n.startsWith("@")?n.slice(1):n,r=e.find(s=>s.id===t);if(r)return r;let o=Ys[t];if(o)return o;throw new Ee(n,e.map(s=>s.id))}ve();or();c();c();var gt={"claude-fable-5":{input:10,cachedInput:1,output:50},"claude-opus-4-8":{input:5,cachedInput:.5,output:25},"claude-opus-4-7":{input:5,cachedInput:.5,output:25},"claude-opus-4-6":{input:5,cachedInput:.5,output:25},"claude-sonnet-5":{input:2,cachedInput:.2,output:10},"claude-sonnet-4-6":{input:3,cachedInput:.3,output:15},"claude-haiku-4-5":{input:1,cachedInput:.1,output:5},"gpt-5.6-sol":{input:5,cachedInput:.5,output:30},"gpt-5.6-terra":{input:2.5,cachedInput:.25,output:15},"gpt-5.6-luna":{input:1,cachedInput:.1,output:6},"gpt-5.5":{input:5,cachedInput:1.25,output:15},"gpt-5.4":{input:2.5,cachedInput:.625,output:10},"gpt-5.3-codex":{input:1.5,cachedInput:.375,output:6},"gpt-5-mini":{input:.4,cachedInput:.1,output:1.6},"gpt-4.1":{input:2,cachedInput:.5,output:8},"gpt-4o":{input:2.5,cachedInput:1.25,output:10},"glm-5.2":{input:1.4,cachedInput:.26,output:4.4},"glm-5.1":{input:1.4,cachedInput:.26,output:4.4}};var Di={opus:"claude-opus-4-8",sonnet:"claude-sonnet-4-6",haiku:"claude-haiku-4-5","codex-mini":"gpt-5.3-codex",codex:"gpt-5.3-codex"},zr={input:0,cachedInput:0,output:0},Rt={};function mo(n){Rt=n;}function Kr(n){let e=n.toLowerCase().trim();e=e.replace(/\[[^\]]*\]$/g,"");let t=e.lastIndexOf("/");return t>=0&&(e=e.slice(t+1)),e=e.replace(/-\d{8}$/,""),e}function Li(n){if(!n)return zr;let e=Kr(n),t=Di[e];if(t)return Rt[t]??gt[t]??zr;if(Rt[e])return Rt[e];if(gt[e])return gt[e];let r={...gt,...Rt};for(let o of Object.keys(r))if(e.includes(o))return r[o];return console.warn(`[pricing] Unknown model: ${n}, cost_usd=0`),zr}function $i(n,e,t,r=0,o){let s=Li(t),i=Math.min(r,n),d=(n-i)*s.input/1e6,l=i*s.cachedInput/1e6,u=e*s.output/1e6;return d+l+u}function Vr(n,e,t,r,o,s){return n&&n>0?n:!e&&!t?0:$i(e??0,t??0,o,r??0)}c();function fo(n){if(!n||typeof n!="object"||Array.isArray(n))return;let e=n,t={};return typeof e.provider=="string"&&e.provider.trim()&&(t.provider=e.provider.trim()),typeof e.model=="string"&&e.model.trim()&&(t.model=e.model.trim()),typeof e.mode=="string"&&e.mode.trim()&&(t.mode=e.mode.trim()),typeof e.effort=="string"&&e.effort.trim()&&(t.effort=e.effort.trim()),t}function sr(n){if(n==null||n===false)return {active:false};if(n===true)return {active:true};if(typeof n=="object"){let e=n.mode;return {active:true,mode:e==="count"||e==="latch"?e:void 0}}return {active:false}}function ir(n,e,t,r){if(!r.active)return {active:false,crossProvider:false};if(!n||typeof n!="object"||Array.isArray(n))return {active:false,crossProvider:false};let s=n[e];if(!s||typeof s!="object"||Array.isArray(s))return {active:false,crossProvider:false};let i=fo(s.overdrive);if(!i||!i.provider||!i.model)return {active:false,crossProvider:false};let a=i.provider!==t;return {active:true,provider:i.provider,model:i.model,mode:i.mode,effort:i.effort,crossProvider:a}}c();c();var ji=[/^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],Fi=/[;|&`$(){}!><\n\r]/,Hi=2,qi=["*","**","*:*","* *","**/*"];function Wi(){let n={};for(let[e,t]of Object.entries(process.env))t!==void 0&&(ji.some(r=>r.test(e))||(n[e]=t));return n}function Bi(n){if(Fi.test(n))throw new Error(`exec blocked: shell metacharacter detected in "${n}"`)}function zi(n){return /^npx\s+@crewx\/[\w-]+/.test(n)}function Ki(n){if(qi.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 Vi(n,e){let t=e.allow??[],r=e.deny??[];for(let o of [...t,...r])Ki(o);return r.some(o=>ye(n,o))?false:zi(n)?true:t.some(o=>ye(n,o))}var yo=false;function Gi(n){yo=n;}function Ct(n){if(!yo)return;let e=JSON.stringify({span:"template_exec",...n,timestamp:new Date().toISOString()});console.error(e);}function Ji(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 ho(n,e){let t=Date.now(),r=parseInt(process.env.CREWX_EXEC_DEPTH??"0",10);if(isNaN(r)||r>=Hi)return Ct({command:n,status:"denied",reason:"invalid or max recursion depth"}),"(exec blocked: max recursion depth reached)";try{Bi(n);}catch{return Ct({command:n,status:"denied",reason:"shell metacharacter detected"}),`(exec blocked: shell metacharacter detected in "${n}")`}if(!Vi(n,e))return Ct({command:n,status:"denied",reason:"not in allow list"}),`(exec blocked: ${n})`;try{let o=Ji(n),[s,...i]=o;if(!s)return `(exec failed: ${n})`;let a=Wi(),d=child_process.execFileSync(s,i,{timeout:e.timeout??5e3,maxBuffer:64*1024,encoding:"utf-8",env:{...a,CREWX_EXEC_DEPTH:String(r+1)},stdio:["pipe","pipe","pipe"]}),l=Date.now()-t;return Ct({command:n,status:"allowed",allowed_by:"policy",duration_ms:l}),`<exec-output cmd="${n}">
|
|
41
41
|
${d.trim()}
|
|
42
|
-
</exec-output>`}catch{return
|
|
42
|
+
</exec-output>`}catch{return Ct({command:n,status:"error",reason:"execution failed"}),`(exec failed: ${n})`}}c();function wo(n){return n==null?"":String(n)}c();function vo(n,e){return `\`\`\`${e?.hash?.lang??""}
|
|
43
43
|
${n??""}
|
|
44
|
-
\`\`\``}c();function
|
|
44
|
+
\`\`\``}c();function Gr(n,e){if(!n)return "";if(n.length<=e)return n;let t=n.length-e;return `${n.substring(0,e)} (...+${t} chars)`}function Jr(n){return Array.isArray(n)||typeof n=="string"?n.length:0}function Xr(n){return typeof n!="string"?"":n.replace(/\{\{/g,"{{").replace(/\}\}/g,"}}")}var _o=["B","KB","MB","GB"];function Yr(n){if(n===0)return "0 B";let e=Math.min(Math.floor(Math.log(n)/Math.log(1024)),_o.length-1);return `${Math.round(n/Math.pow(1024,e)*100)/100} ${_o[e]}`}function Qr(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 Pt=class{hbs;execPolicy;execEnabled;constructor(e={}){this.hbs=_e__namespace.create(),this.execPolicy=e.execPolicy??{allow:[],deny:[]},this.execEnabled=e.execEnabled??true,this.registerHelpers();}registerHelpers(){let e=this.hbs,t=this.execPolicy,r=this.execEnabled;e.registerHelper("exec",function(o){return typeof o!="string"?"":r?new e.SafeString(ho(o,t)):"(exec disabled)"}),e.registerHelper("include",function(o){return new e.SafeString(wo(o))}),e.registerHelper("fenced_code",function(o,s){return new e.SafeString(vo(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 Gr(o,s)}),e.registerHelper("length",function(o){return Jr(o)}),e.registerHelper("escapeHandlebars",function(o){return new e.SafeString(Xr(o))}),e.registerHelper("formatFileSize",function(o){return Yr(o)}),e.registerHelper("formatTimestamp",function(o){return Qr(o)});}async render(e,t={}){return this.hbs.compile(e,{noEscape:true})(t)}};c();c();var ar=class{async readFile(e){return promises.readFile(e,"utf-8")}async exists(e){try{return await promises.access(e),!0}catch{return false}}resolvePath(...e){return e.length===1?q.resolve(e[0]):q.resolve(q.join(...e))}isAbsolute(e){return q.isAbsolute(e)}async readdir(e){try{return await promises.readdir(e)}catch{return []}}},Xe=new ar;var Ye=class{docs=new Map;fs;constructor(e){this.fs=e??Xe;}async load(e,t){if(e)for(let[r,o]of Object.entries(e)){let s=o;if(typeof s=="string")this.docs.set(r,{content:s});else if(s&&typeof s=="object"){let i=s;"content"in i&&typeof i.content=="string"?this.docs.set(r,{content:i.content}):"path"in i&&typeof i.path=="string"?await this.loadFromFile(r,i.path,t):console.warn(`[DocumentLoader] Skipping '${r}': unsupported format`);}else console.warn(`[DocumentLoader] Skipping '${r}': unsupported format`);}}async getContent(e){return this.docs.get(e)?.content}async getToc(e){let t=this.docs.get(e);if(!t)return;let r=[];for(let o of t.content.split(`
|
|
45
45
|
`)){let s=/^(#{1,6})\s+(.+)$/.exec(o.trim());s&&r.push({depth:s[1].length,text:s[2].trim()});}if(r.length!==0)return r.map(({depth:o,text:s})=>`${" ".repeat(o-1)}- ${s}`).join(`
|
|
46
|
-
`)}getPath(e){return this.docs.get(e)?.path}getNames(){return Array.from(this.docs.keys())}async buildContext(){let e={};for(let t of this.docs.keys()){let r=await this.getContent(t)??"",o=await this.getToc(t),s=this.getPath(t);e[t]={content:r,toc:o,...s?{path:s}:{}};}return e}async loadFromFile(e,t,r){try{let o=this.resolve(t,r),s=await this.fs.readFile(o);this.docs.set(e,{content:s,path:o});}catch(o){let s=o instanceof Error?o.message:String(o);console.warn(`[DocumentLoader] Failed to load '${e}' from '${t}': ${s}`);}}resolve(e,t){return this.fs.isAbsolute(e)?e:t?this.fs.resolvePath(t,e):this.fs.resolvePath(e)}};c();c();var re=class extends Error{constructor(t,r,o){super(t);this.layoutId=r;this.cause=o;this.name="LayoutLoadError";}layoutId;cause},Ce=class extends Error{constructor(t,r=[],o){super(t);this.errors=r;this.cause=o;this.name="PropsValidationError";}errors;cause};var Yi={validationMode:"lenient",fallbackLayoutId:"crewx/default"},Rt=class{layouts=new Map;options;constructor(e){this.options={...Yi,...e,templatesPath:e?.templatesPath??rt()},this.loadAllLayouts();}load(e,t){let r=this.layouts.get(e);if(!r){let o=this.normalizeLayoutId(e);r=this.layouts.get(o);}if(!r&&(console.warn(`Layout not found: ${e}, falling back to ${this.options.fallbackLayoutId}`),r=this.layouts.get(this.options.fallbackLayoutId),!r))throw new re(`Fallback layout not found: ${this.options.fallbackLayoutId}`,this.options.fallbackLayoutId);return t&&Object.keys(t).length>0?{...r,defaultProps:{...r.defaultProps,...t}}:r}getLayoutIds(){return Array.from(this.layouts.keys())}hasLayout(e){if(this.layouts.has(e))return true;let t=this.normalizeLayoutId(e);return this.layouts.has(t)}reload(){this.layouts.clear(),this.loadAllLayouts();}registerLayout(e,t){if(!e||typeof e!="string")throw new re("Layout ID must be a non-empty string",e);let r=typeof t=="string"?{template:t}:t,o=typeof r.template=="string"?r.template:"";if(!o||o.trim().length===0)throw new re(`Custom layout template is empty for ${e}`,e);let s=r.propsSchema||{},i=this.extractDefaultProps(s),a=r.defaultProps||{},d={id:e,version:r.version||"1.0.0",description:r.description||`Custom layout ${e}`,template:o,propsSchema:this.parsePropsSchema(s),defaultProps:{...i,...a}},l=this.layouts.get(e),u=l?.template===o&&JSON.stringify(l?.defaultProps??{})===JSON.stringify(d.defaultProps??{})&&JSON.stringify(l?.propsSchema??{})===JSON.stringify(d.propsSchema??{});this.layouts.set(e,d),process.env.CREWX_VERBOSE==="1"&&(l?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(!Uo.existsSync(e))throw new re(`Templates directory not found: ${e}`,void 0,new Error(`Directory does not exist: ${e}`));try{let t=Uo.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=Y__namespace.join(e,r);try{let i=this.loadLayoutFile(s,o),a=`crewx/${o}`;this.layouts.set(a,i),a!=="crewx/minimal"&&process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded layout: ${a} from ${r}`);}catch(i){console.error(`Failed to load layout file ${r}:`,i);}}process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded ${this.layouts.size} layouts from ${e}`);}catch(t){throw new re(`Failed to read layouts directory: ${e}`,void 0,t instanceof Error?t:new Error(String(t)))}}loadLayoutFile(e,t){try{let r=Uo.readFileSync(e,"utf-8");if(!r||r.trim().length===0)throw console.warn(`Empty YAML file: ${e}, will use fallback`),new re(`Empty YAML file: ${e}`,t,new Error("File content is empty"));let o=jsYaml.load(r);if(!o||typeof o!="object")throw console.warn(`Invalid YAML content in ${e} (parsed as ${typeof o}), will use fallback`),new re(`Invalid or empty YAML in ${e}`,t,new Error("YAML parsing returned null/undefined or non-object"));if(o.layouts&&typeof o.layouts=="object"){let s=this.resolveLayoutEntry(o.layouts,t);if(!s||s.template.trim().length===0)throw console.warn(`Empty or missing layout template in ${e} for ${t}`),new re(`Layout template not found or empty in layouts map: ${t}`,t);let i=s.propsSchema||o.propsSchema||{};return {id:`crewx/${t}`,version:o.version||"1.0.0",description:o.description||`CrewX ${t} layout`,template:s.template,propsSchema:this.parsePropsSchema(i),defaultProps:this.extractDefaultProps(i)}}else {if(!o.template||typeof o.template=="string"&&o.template.trim().length===0)throw console.warn(`Empty or missing template field in ${e}`),new re(`Layout template is missing or empty in ${e}`,t);return {id:o.id||`crewx/${t}`,version:o.version||"1.0.0",description:o.description||"",template:o.template,propsSchema:this.parsePropsSchema(o.propsSchema||{}),defaultProps:this.extractDefaultProps(o.propsSchema||{})}}}catch(r){throw new re(`Failed to load layout file: ${e}`,t,r instanceof Error?r:new Error(String(r)))}}parsePropsSchema(e){let t={};for(let[r,o]of Object.entries(e))typeof o=="object"&&o!==null&&(t[r]=o);return t}extractDefaultProps(e){let t={};for(let[r,o]of Object.entries(e))o&&typeof o=="object"&&("defaultValue"in o?t[r]=o.defaultValue:"default"in o&&(t[r]=o.default));return t}normalizeLayoutId(e){return e?e.includes("/")?e:`crewx/${e}`:this.options.fallbackLayoutId}resolveLayoutEntry(e,t){let r=new Set;if(t)if(r.add(t),t.includes("/")){let o=t.split("/"),s=o[o.length-1];s&&r.add(s);}else r.add(`crewx/${t}`);r.add("default");for(let o of r){let s=e[o];if(typeof s=="string"&&s.trim().length>0)return {template:s};if(s&&typeof s=="object"&&typeof s.template=="string"&&s.template.trim().length>0)return {template:s.template,propsSchema:s.propsSchema}}for(let o of Object.values(e)){if(typeof o=="string"&&o.trim().length>0)return {template:o};let s=o;if(s&&typeof s=="object"&&typeof s.template=="string"&&s.template.trim().length>0)return {template:s.template,propsSchema:s.propsSchema}}}};c();c();c();function Ge(n){return String(Math.floor(Math.abs(n))).padStart(2,"0")}function Ct(n){if(!(n instanceof Date)||Number.isNaN(n.getTime()))return "";let e=-n.getTimezoneOffset(),t=e>=0?"+":"-";return `${n.getFullYear()}-${Ge(n.getMonth()+1)}-${Ge(n.getDate())}T${Ge(n.getHours())}:${Ge(n.getMinutes())}:${Ge(n.getSeconds())}${t}${Ge(e/60)}:${Ge(e%60)}`}function Qi(n){return n.map(e=>{let t=typeof e?.timestamp=="number"?e.timestamp:null;return t===null?e:{...e,created_at:Ct(new Date(t))}})}function Zi(n){let e=[];for(let t of n)t?.isAssistant&&t?.metadata?.agent_id?e.push(String(t.metadata.agent_id)):!t?.isAssistant&&t?.metadata?.caller_agent_id&&e.push(String(t.metadata.caller_agent_id));return Array.from(new Set(e))}function xo(...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=Zi(t),d=a.length>0?a[0]:"",l=Date.now(),u={messages:Qi(t),platform:typeof r=="string"?r:"",messagesCount:t.length,agentIds:a,primaryAgentId:d,currentAgentId:o,threadId:s,now:Ct(new Date(l))};return e.fn(u)}c();var Pt=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 Ce("Props validation failed in strict mode",o);return {valid:o.length===0,props:s,errors:o}}validateObject(e,t,r,o,s){let i={};if(r==="strict")for(let a of Object.keys(e))t[a]||s.push({path:this.buildPath([...o,a]),message:`Unknown prop '${a}'`,value:e[a]});for(let[a,d]of Object.entries(t)){let l=[...o,a],u=e[a],g=this.resolveProp(u,d,l,r,s);g.shouldAssign&&(i[a]=g.value);}return i}resolveProp(e,t,r,o,s){let i=this.buildPath(r);if(this.isNil(e)){if(t.isRequired&&s.push({path:i,message:`Required prop '${r[r.length-1]}' is missing`}),t.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(t.defaultValue)};if(t.type==="shape"&&t.shape){let d=this.applyDefaults(t.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}let a=this.validateType(e,t,r,o,s);if(!a.valid){if(t.type==="shape"&&a.value&&this.isPlainObject(a.value))return {shouldAssign:true,value:a.value};if(s.push({path:i,message:a.error??"Invalid value",value:e}),t.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(t.defaultValue)};if(t.type==="shape"&&t.shape){let d=this.applyDefaults(t.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}return {shouldAssign:true,value:a.value}}validateType(e,t,r,o,s){let{type:i}=t;switch(i){case "string":return this.validateString(e,t);case "number":return this.validateNumber(e,t);case "bool":return this.validateBoolean(e);case "array":return this.validateArray(e,t);case "arrayOf":return this.validateArrayOf(e,t,r,o,s);case "object":return this.validatePlainObject(e);case "shape":return this.validateShape(e,t,r,o,s);case "oneOfType":return this.validateOneOfType(e,t);case "func":return this.validateFunction(e);case "node":return {valid:true,value:e};default:return {valid:true,value:e}}}validateString(e,t){return typeof e!="string"?{valid:false,error:`Expected string, got ${this.describeType(e)}`}:t.oneOf&&!t.oneOf.includes(e)?{valid:false,error:`Expected one of: ${t.oneOf.join(", ")}`}:t.minLength!==void 0&&e.length<t.minLength?{valid:false,error:`String length must be >= ${t.minLength}`}:t.maxLength!==void 0&&e.length>t.maxLength?{valid:false,error:`String length must be <= ${t.maxLength}`}:t.pattern&&!new RegExp(t.pattern).test(e)?{valid:false,error:`String does not match pattern ${t.pattern}`}:{valid:true,value:e}}validateNumber(e,t){return typeof e!="number"||Number.isNaN(e)?{valid:false,error:`Expected number, got ${this.describeType(e)}`}:t.min!==void 0&&e<t.min?{valid:false,error:`Number must be >= ${t.min}`}:t.max!==void 0&&e>t.max?{valid:false,error:`Number must be <= ${t.max}`}:t.oneOf&&!t.oneOf.includes(e)?{valid:false,error:`Expected one of: ${t.oneOf.join(", ")}`}:{valid:true,value:e}}validateBoolean(e){return typeof e!="boolean"?{valid:false,error:`Expected boolean, got ${this.describeType(e)}`}:{valid:true,value:e}}validateArray(e,t){return Array.isArray(e)?t.minLength!==void 0&&e.length<t.minLength?{valid:false,error:`Array length must be >= ${t.minLength}`}:t.maxLength!==void 0&&e.length>t.maxLength?{valid:false,error:`Array length must be <= ${t.maxLength}`}:{valid:true,value:[...e]}:{valid:false,error:`Expected array, got ${this.describeType(e)}`}}validateArrayOf(e,t,r,o,s){let i=this.validateArray(e,t);if(!i.valid)return i;let a=[],d=t.itemType,l=t.itemOneOf,u=s.length;return i.value.forEach((g,f)=>{let m=[...r,String(f)];if(d){let y=this.validateType(g,{type:d},m,o,s);y.valid?a.push(y.value):s.push({path:this.buildPath(m),message:y.error??"Invalid array item",value:g});}else a.push(g);l&&!l.includes(g)&&s.push({path:this.buildPath(m),message:`Array item must be one of: ${l.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=ve__namespace.default.create(),this.propsValidator=e??new Pt,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",xo),ve__namespace.default.helpers.each&&this.handlebars.registerHelper("each",ve__namespace.default.helpers.each),ve__namespace.default.helpers.if&&this.handlebars.registerHelper("if",ve__namespace.default.helpers.if),ve__namespace.default.helpers.unless&&this.handlebars.registerHelper("unless",ve__namespace.default.helpers.unless),ve__namespace.default.helpers.with&&this.handlebars.registerHelper("with",ve__namespace.default.helpers.with),this.handlebars.registerHelper("eq",function(e,t){return e===t}),this.handlebars.registerHelper("ne",function(e,t){return e!==t}),this.handlebars.registerHelper("gt",function(e,t){return e>t}),this.handlebars.registerHelper("lt",function(e,t){return e<t}),this.handlebars.registerHelper("json",function(e){return new ve__namespace.default.SafeString(JSON.stringify(e))}),this.handlebars.registerHelper("raw",function(e){return typeof e?.fn=="function"?e.fn(this):""}),this.handlebars.registerHelper("escapeHandlebars",function(e){return typeof e!="string"?"":e.replace(/\{\{/g,"{{").replace(/\}\}/g,"}}")}),this.handlebars.registerHelper("formatFileSize",function(e){if(e===0)return "0 B";let t=["B","KB","MB","GB"],r=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/Math.pow(1024,r)*100)/100+" "+t[r]});}executeValidation(e,t,r){try{return this.propsValidator.validate(e,t,r)}catch(o){if(o instanceof Ce&&o.errors&&o.errors.length>0){let s=o.errors[0];if(s)throw new Ce(s.message,o.errors)}throw o}}mergeProps(e,t){let r=this.cloneDeep(e??{});return t?this.deepMerge(r,t):r}deepMerge(e,t){for(let[r,o]of Object.entries(t)){if(this.isPlainObject(o)){let s=e[r];e[r]=this.deepMerge(this.isPlainObject(s)?s:{},o);continue}if(Array.isArray(o)){e[r]=this.cloneDeep(o);continue}e[r]=o;}return e}cloneDeep(e){if(Array.isArray(e))return e.map(t=>this.cloneDeep(t));if(this.isPlainObject(e)){let t={};for(let[r,o]of Object.entries(e))t[r]=this.cloneDeep(o);return t}return e}isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}sanitizeVars(e){if(!e)return {};let t={...e};if(typeof e.user_input=="string"){t.user_input_raw=e.user_input;let r=e.user_input.replace(/\{\{\{/g,"{{{").replace(/\}\}\}/g,"}}}").replace(/\{\{/g,"{{").replace(/\}\}/g,"}}");t.user_input=this.handlebars.escapeExpression(r);}return t}};c();var Xr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function ea(n){let e=crypto$1.randomBytes(n*2),t="";for(let r=0;r<e.length&&t.length<n;r++){let o=e[r];o<248&&(t+=Xr[o%62]);}for(;t.length<n;)t+=Xr[crypto$1.randomBytes(1)[0]%62];return t}function Je(n){return `${n}_${ea(8)}`}function ta(n,e){let{createHash:t}=te("crypto"),r=t("sha256").update(e).digest(),o=Buffer.alloc(8);for(let i=0;i<32;i++)o[i%8]^=r[i];let s="";for(let i of o)s+=Xr[i%62];return `${n}_${s}`}c();function Yr(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())}`}c();function Eo(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 St=class{_emitter=new events.EventEmitter;on(e,t){let r=Eo(e,t);return this._emitter.on(e,r),()=>this._emitter.off(e,r)}once(e,t){let r=Eo(e,t);return this._emitter.once(e,r),()=>this._emitter.off(e,r)}emit(e,t){this._emitter.emit(e,t);}};c();function Qr(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}}}c();var Zr=new async_hooks.AsyncLocalStorage;function oa(){return Zr}function sa(n,e){return Zr.run(n,e)}function en(n){let e=n.log??n.logger??{debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},t=n.agentRunner??{run:async()=>({output:""})},r=n.db??{get:async()=>{},set:async()=>{},delete:async()=>false,list:async()=>[]},o=n.storage??{put:async()=>"",get:async()=>{},delete:async()=>false},s=n.audit??{log:async()=>{}},i=n.onInbound??(async()=>({accepted:true})),a=n.onEmitEvent??(async()=>({accepted:true})),d=n.onUpdateMessage??(async()=>{}),l=n.onResolveUser??(async f=>({userId:f,displayName:f})),u=async f=>{let m=Zr.getStore();if(!m){e.warn("respondSync called outside sync window \u2014 graceful degradation (no-op)",{textPreview:typeof f=="object"&&"text"in f?f.text.slice(0,80):void 0});return}let y="text"in f?f.text:"";m.res.status(200).json({text:y});},g=n.httpRouter??{registerRoute:()=>{e.warn("httpRouter not configured \u2014 registerRoute is a no-op");}};return {instanceId:n.instanceId,config:n.config,capabilities:n.capabilities,log:e,agentRunner:t,db:r,storage:o,audit:s,abortSignal:n.abortSignal??new AbortController().signal,httpRouter:g,inbound:i,emitEvent:a,updateMessage:d,resolveUser:l,respondSync:u}}Ie();c();var ia=/^-\s*Status:\s*active/m,aa=/^---\n([\s\S]*?)\n---/,da=/^type:\s*goal\s*$/m;async function Ro(n,e=Ke,t){let r=typeof t=="string"?[t]:Array.isArray(t)?t:void 0;if(r){let a=[];for(let d of r){let l=e.resolvePath(n,d);await e.exists(l)&&a.push(await e.readFile(l));}return a.join(`
|
|
46
|
+
`)}getPath(e){return this.docs.get(e)?.path}getNames(){return Array.from(this.docs.keys())}async buildContext(){let e={};for(let t of this.docs.keys()){let r=await this.getContent(t)??"",o=await this.getToc(t),s=this.getPath(t);e[t]={content:r,toc:o,...s?{path:s}:{}};}return e}async loadFromFile(e,t,r){try{let o=this.resolve(t,r),s=await this.fs.readFile(o);this.docs.set(e,{content:s,path:o});}catch(o){let s=o instanceof Error?o.message:String(o);console.warn(`[DocumentLoader] Failed to load '${e}' from '${t}': ${s}`);}}resolve(e,t){return this.fs.isAbsolute(e)?e:t?this.fs.resolvePath(t,e):this.fs.resolvePath(e)}};c();c();var ne=class extends Error{constructor(t,r,o){super(t);this.layoutId=r;this.cause=o;this.name="LayoutLoadError";}layoutId;cause},Te=class extends Error{constructor(t,r=[],o){super(t);this.errors=r;this.cause=o;this.name="PropsValidationError";}errors;cause};var sa={validationMode:"lenient",fallbackLayoutId:"crewx/default"},Tt=class{layouts=new Map;options;constructor(e){this.options={...sa,...e,templatesPath:e?.templatesPath??it()},this.loadAllLayouts();}load(e,t){let r=this.layouts.get(e);if(!r){let o=this.normalizeLayoutId(e);r=this.layouts.get(o);}if(!r&&(console.warn(`Layout not found: ${e}, falling back to ${this.options.fallbackLayoutId}`),r=this.layouts.get(this.options.fallbackLayoutId),!r))throw new ne(`Fallback layout not found: ${this.options.fallbackLayoutId}`,this.options.fallbackLayoutId);return t&&Object.keys(t).length>0?{...r,defaultProps:{...r.defaultProps,...t}}:r}getLayoutIds(){return Array.from(this.layouts.keys())}hasLayout(e){if(this.layouts.has(e))return true;let t=this.normalizeLayoutId(e);return this.layouts.has(t)}reload(){this.layouts.clear(),this.loadAllLayouts();}registerLayout(e,t){if(!e||typeof e!="string")throw new ne("Layout ID must be a non-empty string",e);let r=typeof t=="string"?{template:t}:t,o=typeof r.template=="string"?r.template:"";if(!o||o.trim().length===0)throw new ne(`Custom layout template is empty for ${e}`,e);let s=r.propsSchema||{},i=this.extractDefaultProps(s),a=r.defaultProps||{},d={id:e,version:r.version||"1.0.0",description:r.description||`Custom layout ${e}`,template:o,propsSchema:this.parsePropsSchema(s),defaultProps:{...i,...a}},l=this.layouts.get(e),u=l?.template===o&&JSON.stringify(l?.defaultProps??{})===JSON.stringify(d.defaultProps??{})&&JSON.stringify(l?.propsSchema??{})===JSON.stringify(d.propsSchema??{});this.layouts.set(e,d),process.env.CREWX_VERBOSE==="1"&&(l?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(!qo.existsSync(e))throw new ne(`Templates directory not found: ${e}`,void 0,new Error(`Directory does not exist: ${e}`));try{let t=qo.readdirSync(e).filter(r=>r.endsWith(".yaml")||r.endsWith(".yml"));t.length===0&&console.warn(`No layout files found in ${e}`);for(let r of t){let o=r.replace(/\.(yaml|yml)$/,""),s=q__namespace.join(e,r);try{let i=this.loadLayoutFile(s,o),a=`crewx/${o}`;this.layouts.set(a,i),a!=="crewx/minimal"&&process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded layout: ${a} from ${r}`);}catch(i){console.error(`Failed to load layout file ${r}:`,i);}}process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded ${this.layouts.size} layouts from ${e}`);}catch(t){throw new ne(`Failed to read layouts directory: ${e}`,void 0,t instanceof Error?t:new Error(String(t)))}}loadLayoutFile(e,t){try{let r=qo.readFileSync(e,"utf-8");if(!r||r.trim().length===0)throw console.warn(`Empty YAML file: ${e}, will use fallback`),new ne(`Empty YAML file: ${e}`,t,new Error("File content is empty"));let o=jsYaml.load(r);if(!o||typeof o!="object")throw console.warn(`Invalid YAML content in ${e} (parsed as ${typeof o}), will use fallback`),new ne(`Invalid or empty YAML in ${e}`,t,new Error("YAML parsing returned null/undefined or non-object"));if(o.layouts&&typeof o.layouts=="object"){let s=this.resolveLayoutEntry(o.layouts,t);if(!s||s.template.trim().length===0)throw console.warn(`Empty or missing layout template in ${e} for ${t}`),new ne(`Layout template not found or empty in layouts map: ${t}`,t);let i=s.propsSchema||o.propsSchema||{};return {id:`crewx/${t}`,version:o.version||"1.0.0",description:o.description||`CrewX ${t} layout`,template:s.template,propsSchema:this.parsePropsSchema(i),defaultProps:this.extractDefaultProps(i)}}else {if(!o.template||typeof o.template=="string"&&o.template.trim().length===0)throw console.warn(`Empty or missing template field in ${e}`),new ne(`Layout template is missing or empty in ${e}`,t);return {id:o.id||`crewx/${t}`,version:o.version||"1.0.0",description:o.description||"",template:o.template,propsSchema:this.parsePropsSchema(o.propsSchema||{}),defaultProps:this.extractDefaultProps(o.propsSchema||{})}}}catch(r){throw new ne(`Failed to load layout file: ${e}`,t,r instanceof Error?r:new Error(String(r)))}}parsePropsSchema(e){let t={};for(let[r,o]of Object.entries(e))typeof o=="object"&&o!==null&&(t[r]=o);return t}extractDefaultProps(e){let t={};for(let[r,o]of Object.entries(e))o&&typeof o=="object"&&("defaultValue"in o?t[r]=o.defaultValue:"default"in o&&(t[r]=o.default));return t}normalizeLayoutId(e){return e?e.includes("/")?e:`crewx/${e}`:this.options.fallbackLayoutId}resolveLayoutEntry(e,t){let r=new Set;if(t)if(r.add(t),t.includes("/")){let o=t.split("/"),s=o[o.length-1];s&&r.add(s);}else r.add(`crewx/${t}`);r.add("default");for(let o of r){let s=e[o];if(typeof s=="string"&&s.trim().length>0)return {template:s};if(s&&typeof s=="object"&&typeof s.template=="string"&&s.template.trim().length>0)return {template:s.template,propsSchema:s.propsSchema}}for(let o of Object.values(e)){if(typeof o=="string"&&o.trim().length>0)return {template:o};let s=o;if(s&&typeof s=="object"&&typeof s.template=="string"&&s.template.trim().length>0)return {template:s.template,propsSchema:s.propsSchema}}}};c();c();c();function Qe(n){return String(Math.floor(Math.abs(n))).padStart(2,"0")}function St(n){if(!(n instanceof Date)||Number.isNaN(n.getTime()))return "";let e=-n.getTimezoneOffset(),t=e>=0?"+":"-";return `${n.getFullYear()}-${Qe(n.getMonth()+1)}-${Qe(n.getDate())}T${Qe(n.getHours())}:${Qe(n.getMinutes())}:${Qe(n.getSeconds())}${t}${Qe(e/60)}:${Qe(e%60)}`}function ia(n){return n.map(e=>{let t=typeof e?.timestamp=="number"?e.timestamp:null;return t===null?e:{...e,created_at:St(new Date(t))}})}function aa(n){let e=[];for(let t of n)t?.isAssistant&&t?.metadata?.agent_id?e.push(String(t.metadata.agent_id)):!t?.isAssistant&&t?.metadata?.caller_agent_id&&e.push(String(t.metadata.caller_agent_id));return Array.from(new Set(e))}function Eo(...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=aa(t),d=a.length>0?a[0]:"",l=Date.now(),u={messages:ia(t),platform:typeof r=="string"?r:"",messagesCount:t.length,agentIds:a,primaryAgentId:d,currentAgentId:o,threadId:s,now:St(new Date(l))};return e.fn(u)}c();var bt=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 Te("Props validation failed in strict mode",o);return {valid:o.length===0,props:s,errors:o}}validateObject(e,t,r,o,s){let i={};if(r==="strict")for(let a of Object.keys(e))t[a]||s.push({path:this.buildPath([...o,a]),message:`Unknown prop '${a}'`,value:e[a]});for(let[a,d]of Object.entries(t)){let l=[...o,a],u=e[a],g=this.resolveProp(u,d,l,r,s);g.shouldAssign&&(i[a]=g.value);}return i}resolveProp(e,t,r,o,s){let i=this.buildPath(r);if(this.isNil(e)){if(t.isRequired&&s.push({path:i,message:`Required prop '${r[r.length-1]}' is missing`}),t.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(t.defaultValue)};if(t.type==="shape"&&t.shape){let d=this.applyDefaults(t.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}let a=this.validateType(e,t,r,o,s);if(!a.valid){if(t.type==="shape"&&a.value&&this.isPlainObject(a.value))return {shouldAssign:true,value:a.value};if(s.push({path:i,message:a.error??"Invalid value",value:e}),t.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(t.defaultValue)};if(t.type==="shape"&&t.shape){let d=this.applyDefaults(t.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}return {shouldAssign:true,value:a.value}}validateType(e,t,r,o,s){let{type:i}=t;switch(i){case "string":return this.validateString(e,t);case "number":return this.validateNumber(e,t);case "bool":return this.validateBoolean(e);case "array":return this.validateArray(e,t);case "arrayOf":return this.validateArrayOf(e,t,r,o,s);case "object":return this.validatePlainObject(e);case "shape":return this.validateShape(e,t,r,o,s);case "oneOfType":return this.validateOneOfType(e,t);case "func":return this.validateFunction(e);case "node":return {valid:true,value:e};default:return {valid:true,value:e}}}validateString(e,t){return typeof e!="string"?{valid:false,error:`Expected string, got ${this.describeType(e)}`}:t.oneOf&&!t.oneOf.includes(e)?{valid:false,error:`Expected one of: ${t.oneOf.join(", ")}`}:t.minLength!==void 0&&e.length<t.minLength?{valid:false,error:`String length must be >= ${t.minLength}`}:t.maxLength!==void 0&&e.length>t.maxLength?{valid:false,error:`String length must be <= ${t.maxLength}`}:t.pattern&&!new RegExp(t.pattern).test(e)?{valid:false,error:`String does not match pattern ${t.pattern}`}:{valid:true,value:e}}validateNumber(e,t){return typeof e!="number"||Number.isNaN(e)?{valid:false,error:`Expected number, got ${this.describeType(e)}`}:t.min!==void 0&&e<t.min?{valid:false,error:`Number must be >= ${t.min}`}:t.max!==void 0&&e>t.max?{valid:false,error:`Number must be <= ${t.max}`}:t.oneOf&&!t.oneOf.includes(e)?{valid:false,error:`Expected one of: ${t.oneOf.join(", ")}`}:{valid:true,value:e}}validateBoolean(e){return typeof e!="boolean"?{valid:false,error:`Expected boolean, got ${this.describeType(e)}`}:{valid:true,value:e}}validateArray(e,t){return Array.isArray(e)?t.minLength!==void 0&&e.length<t.minLength?{valid:false,error:`Array length must be >= ${t.minLength}`}:t.maxLength!==void 0&&e.length>t.maxLength?{valid:false,error:`Array length must be <= ${t.maxLength}`}:{valid:true,value:[...e]}:{valid:false,error:`Expected array, got ${this.describeType(e)}`}}validateArrayOf(e,t,r,o,s){let i=this.validateArray(e,t);if(!i.valid)return i;let a=[],d=t.itemType,l=t.itemOneOf,u=s.length;return i.value.forEach((g,f)=>{let m=[...r,String(f)];if(d){let h=this.validateType(g,{type:d},m,o,s);h.valid?a.push(h.value):s.push({path:this.buildPath(m),message:h.error??"Invalid array item",value:g});}else a.push(g);l&&!l.includes(g)&&s.push({path:this.buildPath(m),message:`Array item must be one of: ${l.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 It=class{handlebars;propsValidator;constructor(e){this.handlebars=_e__namespace.default.create(),this.propsValidator=e??new bt,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",Eo),_e__namespace.default.helpers.each&&this.handlebars.registerHelper("each",_e__namespace.default.helpers.each),_e__namespace.default.helpers.if&&this.handlebars.registerHelper("if",_e__namespace.default.helpers.if),_e__namespace.default.helpers.unless&&this.handlebars.registerHelper("unless",_e__namespace.default.helpers.unless),_e__namespace.default.helpers.with&&this.handlebars.registerHelper("with",_e__namespace.default.helpers.with),this.handlebars.registerHelper("eq",function(e,t){return e===t}),this.handlebars.registerHelper("ne",function(e,t){return e!==t}),this.handlebars.registerHelper("gt",function(e,t){return e>t}),this.handlebars.registerHelper("lt",function(e,t){return e<t}),this.handlebars.registerHelper("json",function(e){return new _e__namespace.default.SafeString(JSON.stringify(e))}),this.handlebars.registerHelper("raw",function(e){return typeof e?.fn=="function"?e.fn(this):""}),this.handlebars.registerHelper("escapeHandlebars",function(e){return typeof e!="string"?"":e.replace(/\{\{/g,"{{").replace(/\}\}/g,"}}")}),this.handlebars.registerHelper("formatFileSize",function(e){if(e===0)return "0 B";let t=["B","KB","MB","GB"],r=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/Math.pow(1024,r)*100)/100+" "+t[r]});}executeValidation(e,t,r){try{return this.propsValidator.validate(e,t,r)}catch(o){if(o instanceof Te&&o.errors&&o.errors.length>0){let s=o.errors[0];if(s)throw new Te(s.message,o.errors)}throw o}}mergeProps(e,t){let r=this.cloneDeep(e??{});return t?this.deepMerge(r,t):r}deepMerge(e,t){for(let[r,o]of Object.entries(t)){if(this.isPlainObject(o)){let s=e[r];e[r]=this.deepMerge(this.isPlainObject(s)?s:{},o);continue}if(Array.isArray(o)){e[r]=this.cloneDeep(o);continue}e[r]=o;}return e}cloneDeep(e){if(Array.isArray(e))return e.map(t=>this.cloneDeep(t));if(this.isPlainObject(e)){let t={};for(let[r,o]of Object.entries(e))t[r]=this.cloneDeep(o);return t}return e}isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}sanitizeVars(e){if(!e)return {};let t={...e};if(typeof e.user_input=="string"){t.user_input_raw=e.user_input;let r=e.user_input.replace(/\{\{\{/g,"{{{").replace(/\}\}\}/g,"}}}").replace(/\{\{/g,"{{").replace(/\}\}/g,"}}");t.user_input=this.handlebars.escapeExpression(r);}return t}};c();var Zr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function da(n){let e=crypto$1.randomBytes(n*2),t="";for(let r=0;r<e.length&&t.length<n;r++){let o=e[r];o<248&&(t+=Zr[o%62]);}for(;t.length<n;)t+=Zr[crypto$1.randomBytes(1)[0]%62];return t}function Ze(n){return `${n}_${da(8)}`}function la(n,e){let{createHash:t}=te("crypto"),r=t("sha256").update(e).digest(),o=Buffer.alloc(8);for(let i=0;i<32;i++)o[i%8]^=r[i];let s="";for(let i of o)s+=Zr[i%62];return `${n}_${s}`}c();function en(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())}`}c();function Co(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 Ot=class{_emitter=new events.EventEmitter;on(e,t){let r=Co(e,t);return this._emitter.on(e,r),()=>this._emitter.off(e,r)}once(e,t){let r=Co(e,t);return this._emitter.once(e,r),()=>this._emitter.off(e,r)}emit(e,t){this._emitter.emit(e,t);}};c();function tn(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}}}c();var rn=new async_hooks.AsyncLocalStorage;function pa(){return rn}function ga(n,e){return rn.run(n,e)}function nn(n){let e=n.log??n.logger??{debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},t=n.agentRunner??{run:async()=>({output:""})},r=n.db??{get:async()=>{},set:async()=>{},delete:async()=>false,list:async()=>[]},o=n.storage??{put:async()=>"",get:async()=>{},delete:async()=>false},s=n.audit??{log:async()=>{}},i=n.onInbound??(async()=>({accepted:true})),a=n.onEmitEvent??(async()=>({accepted:true})),d=n.onUpdateMessage??(async()=>{}),l=n.onResolveUser??(async f=>({userId:f,displayName:f})),u=async f=>{let m=rn.getStore();if(!m){e.warn("respondSync called outside sync window \u2014 graceful degradation (no-op)",{textPreview:typeof f=="object"&&"text"in f?f.text.slice(0,80):void 0});return}let h="text"in f?f.text:"";m.res.status(200).json({text:h});},g=n.httpRouter??{registerRoute:()=>{e.warn("httpRouter not configured \u2014 registerRoute is a no-op");}};return {instanceId:n.instanceId,config:n.config,capabilities:n.capabilities,log:e,agentRunner:t,db:r,storage:o,audit:s,abortSignal:n.abortSignal??new AbortController().signal,httpRouter:g,inbound:i,emitEvent:a,updateMessage:d,resolveUser:l,respondSync:u}}Me();c();var ma=/^-\s*Status:\s*active/m,fa=/^---\n([\s\S]*?)\n---/,ya=/^type:\s*goal\s*$/m;async function Po(n,e=Xe,t){let r=typeof t=="string"?[t]:Array.isArray(t)?t:void 0;if(r){let a=[];for(let d of r){let l=e.resolvePath(n,d);await e.exists(l)&&a.push(await e.readFile(l));}return a.join(`
|
|
47
47
|
---
|
|
48
|
-
`)}let s=(await e.readdir(n)).filter(a=>a.endsWith(".md"));if(s.length===0)return "";let i=[];for(let a of s){let d=e.resolvePath(n,a),l=await e.readFile(d),u=
|
|
48
|
+
`)}let s=(await e.readdir(n)).filter(a=>a.endsWith(".md"));if(s.length===0)return "";let i=[];for(let a of s){let d=e.resolvePath(n,a),l=await e.readFile(d),u=fa.exec(l);!u||!ya.test(u[1])||ma.test(l)&&i.push(l);}return i.join(`
|
|
49
49
|
---
|
|
50
|
-
`)}c();function
|
|
50
|
+
`)}c();function ha(){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 To(n,e=Xe){let t=e.resolvePath(n,`${ha()}.md`);return await e.exists(t)?e.readFile(t):""}Me();c();var Mt=new async_hooks.AsyncLocalStorage;function on(n){if(n)return {parentTaskId:n.parentTaskId??null,rootTraceId:n.rootTraceId,callerAgentId:n.callerAgentId??null}}c();function va(n){return typeof n!="string"?"":n.replace(/</g,"<").replace(/>/g,">")}function sn(n){return n.messages.map(e=>({text:va(e.text),isAssistant:e.isAssistant,timestamp:e.timestamp,metadata:e.metadata,files:void 0}))}c();Me();Ne();c();c();var mt=class{resolveDbPath(){return process.env.CREWX_DB?process.env.CREWX_DB:process.env.CREWX_TRACES_DB?process.env.CREWX_TRACES_DB:q.join(Aa__default.default.homedir(),".crewx","crewx.db")}resolveDbPaths(){return [this.resolveDbPath()]}isMissingTableError(e){return e instanceof Error&&/no such table:/i.test(e.message)}dbExists(e){return qo.existsSync(e??this.resolveDbPath())}};c();function xe(n){let e=te("better-sqlite3"),{drizzle:t}=te("drizzle-orm/better-sqlite3"),r=new e(n);return r.exec("PRAGMA journal_mode = WAL"),r.exec("PRAGMA busy_timeout = 5000"),r.exec("PRAGMA foreign_keys = ON"),r.exec("PRAGMA analysis_limit = 400"),r.exec("PRAGMA optimize"),{db:t(r),runRaw:(o,s=[])=>r.prepare(o).run(...s),close:()=>r.close()}}c();var So=new Set,Ea={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 dn(n,e){return (n.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function Ra(n,e){if(e>0||!dn(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(Ea))r.has(o)||n.run(`ALTER TABLE tasks ADD COLUMN ${o} ${s}`);}var Ca={"0002_normalize_task_names":{workspace_name:"TEXT",project_name:"TEXT"}};function Pa(n,e,t){if(!dn(n,"__drizzle_migrations")||!dn(n,"tasks"))return;let r=n.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(qo.readFileSync(q__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=Ca[i.tag];if(!a)continue;let d=q__namespace.default.join(e,`${i.tag}.sql`);if(!qo.existsSync(d))continue;let l=qo.readFileSync(d,"utf-8"),u=crypto$1.createHash("sha256").update(l).digest("hex");if(o.has(u))continue;let g=n.all("PRAGMA table_info(tasks)"),f=new Set(g.map(m=>m.name));for(let[m,h]of Object.entries(a))f.has(m)||(n.run(`ALTER TABLE tasks ADD COLUMN ${m} ${h}`),f.add(m));}}function Ta(n,e,t){let r=n.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(qo.readFileSync(q__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=q__namespace.default.join(e,`${i.tag}.sql`);if(!qo.existsSync(a))continue;let d=qo.readFileSync(a,"utf-8"),l=crypto$1.createHash("sha256").update(d).digest("hex");if(o.has(l))continue;let u=/ALTER\s+TABLE\s+[`"]?(\w+)[`"]?\s+ADD\s+[`"]?(\w+)[`"]?/gi,g=[],f;for(;(f=u.exec(d))!==null;)g.push({table:f[1],column:f[2]});if(g.length===0||!d.split(/-->\s*statement-breakpoint/).map(w=>w.trim()).filter(Boolean).every(w=>/^ALTER\s+TABLE\s+.+\s+ADD\s+/i.test(w)))continue;g.every(({table:w,column:A})=>n.all(`PRAGMA table_info("${w}")`).some(_=>_.name===A))&&n.run(t`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${l}, ${i.when})`);}}function Sa(n){let{migrate:e}=te("drizzle-orm/better-sqlite3/migrator"),{sql:t}=te("drizzle-orm"),r=[q__namespace.default.join(__dirname,"../migrations"),q__namespace.default.join(__dirname,"migrations"),q__namespace.default.join(__dirname,"../../../../drizzle/migrations"),q__namespace.default.join(process.cwd(),"drizzle/migrations")],o=r.find(l=>qo.existsSync(q__namespace.default.join(l,"meta/_journal.json")));if(!o)throw new Error(`migrations folder not found. Searched:
|
|
51
51
|
${r.join(`
|
|
52
|
-
`)}`);let s=n.get(t`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'`),i=0;s?.cnt&&(i=n.get(t`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0),ha(n,i),s?.cnt&&(_a(n,o,t),va(n,o,t)),e(n,{migrationsFolder:o});let d=(n.get(t`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0)-i;if(d>0){let l=s?.cnt?"Database migrated":"Database initialized";console.error(`[crewx] ${l} (${d} migration${d>1?"s":""} applied).`);}}function ar(n,e){Po.has(e)||(ka(n),Po.add(e));}c();var O=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);}};c();c();var So=sqliteCore.sqliteTable("workspaces",{id:sqliteCore.text("id").primaryKey(),slug:sqliteCore.text("slug").notNull().unique(),name:sqliteCore.text("name").notNull(),workspace_path:sqliteCore.text("workspace_path"),description:sqliteCore.text("description"),is_active:sqliteCore.integer("is_active").notNull().default(1),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()});c();var p=sqliteCore.sqliteTable("tasks",{id:sqliteCore.text("id").primaryKey(),agent_id:sqliteCore.text("agent_id").notNull(),user_id:sqliteCore.text("user_id"),prompt:sqliteCore.text("prompt").notNull(),mode:sqliteCore.text("mode").notNull().default("execute"),status:sqliteCore.text("status").notNull().default("running"),result:sqliteCore.text("result"),error:sqliteCore.text("error"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),metadata:sqliteCore.text("metadata"),workspace_id:sqliteCore.text("workspace_id"),trace_id:sqliteCore.text("trace_id"),parent_task_id:sqliteCore.text("parent_task_id"),caller_agent_id:sqliteCore.text("caller_agent_id"),model:sqliteCore.text("model"),platform:sqliteCore.text("platform").default("cli"),crewx_version:sqliteCore.text("crewx_version"),input_tokens:sqliteCore.integer("input_tokens").default(0),output_tokens:sqliteCore.integer("output_tokens").default(0),cost_usd:sqliteCore.real("cost_usd").default(0),pid:sqliteCore.integer("pid"),rendered_prompt:sqliteCore.text("rendered_prompt"),command:sqliteCore.text("command"),coding_agent_command:sqliteCore.text("coding_agent_command"),exit_code:sqliteCore.integer("exit_code"),logs:sqliteCore.text("logs"),thread_id:sqliteCore.text("thread_id"),workspace_ref:sqliteCore.text("workspace_ref"),project_id:sqliteCore.text("project_id"),project_ref:sqliteCore.text("project_ref"),cached_input_tokens:sqliteCore.integer("cached_input_tokens").default(0),run_epoch:sqliteCore.integer("run_epoch").default(0)},n=>({idx_tasks_agent_id:sqliteCore.index("idx_tasks_agent_id").on(n.agent_id),idx_tasks_status:sqliteCore.index("idx_tasks_status").on(n.status),idx_tasks_started_at:sqliteCore.index("idx_tasks_started_at").on(n.started_at),idx_tasks_trace_id:sqliteCore.index("idx_tasks_trace_id").on(n.trace_id),idx_tasks_parent_task_id:sqliteCore.index("idx_tasks_parent_task_id").on(n.parent_task_id),idx_tasks_crewx_version:sqliteCore.index("idx_tasks_crewx_version").on(n.crewx_version),idx_tasks_pid:sqliteCore.index("idx_tasks_pid").on(n.pid),idx_tasks_thread_id:sqliteCore.index("idx_tasks_thread_id").on(n.thread_id),idx_tasks_workspace_id:sqliteCore.index("idx_tasks_workspace_id").on(n.workspace_id),idx_tasks_workspace_ref:sqliteCore.index("idx_tasks_workspace_ref").on(n.workspace_ref),idx_tasks_project_id:sqliteCore.index("idx_tasks_project_id").on(n.project_id),idx_tasks_ws_started:sqliteCore.index("idx_tasks_ws_started").on(n.workspace_id,n.started_at)}));c();var bo=sqliteCore.sqliteTable("threads",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").references(()=>So.id,{onDelete:"set null"}),platform:sqliteCore.text("platform").notNull().default("cli"),title:sqliteCore.text("title"),first_message:sqliteCore.text("first_message"),last_message:sqliteCore.text("last_message"),message_count:sqliteCore.integer("message_count").notNull().default(0),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull(),metadata:sqliteCore.text("metadata"),title_locked:sqliteCore.integer("title_locked").notNull().default(0),pinned:sqliteCore.integer("pinned").notNull().default(0),starred:sqliteCore.integer("starred").notNull().default(0)},n=>({idx_threads_updated_at:sqliteCore.index("idx_threads_updated_at").on(n.updated_at),idx_threads_workspace_id:sqliteCore.index("idx_threads_workspace_id").on(n.workspace_id),idx_threads_ws_updated:sqliteCore.index("idx_threads_ws_updated").on(n.workspace_id,n.updated_at),idx_threads_title:sqliteCore.index("idx_threads_title").on(n.title)}));c();var Qe=sqliteCore.sqliteTable("spans",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>p.id,{onDelete:"set null"}),parent_span_id:sqliteCore.text("parent_span_id").references(()=>Qe.id,{onDelete:"set null"}),name:sqliteCore.text("name").notNull(),kind:sqliteCore.text("kind").notNull().default("internal"),status:sqliteCore.text("status").notNull().default("ok"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),error:sqliteCore.text("error"),attributes:sqliteCore.text("attributes")},n=>({idx_spans_task_id:sqliteCore.index("idx_spans_task_id").on(n.task_id),idx_spans_parent_span_id:sqliteCore.index("idx_spans_parent_span_id").on(n.parent_span_id)}));c();sqliteCore.sqliteTable("tool_calls",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>p.id,{onDelete:"cascade"}),session_id:sqliteCore.text("session_id"),tool_name:sqliteCore.text("tool_name").notNull(),files:sqliteCore.text("files"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),duration_ms:sqliteCore.integer("duration_ms"),timestamp:sqliteCore.text("timestamp").notNull()},n=>({idx_tool_calls_task_id:sqliteCore.index("idx_tool_calls_task_id").on(n.task_id),idx_tool_calls_tool_name:sqliteCore.index("idx_tool_calls_tool_name").on(n.tool_name),idx_tool_calls_timestamp:sqliteCore.index("idx_tool_calls_timestamp").on(n.timestamp)}));c();sqliteCore.sqliteTable("thread_boxes",{id:sqliteCore.text("id").primaryKey(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>bo.id,{onDelete:"cascade"}),seq:sqliteCore.integer("seq").notNull(),first_task_id:sqliteCore.text("first_task_id").notNull(),mid_task_id:sqliteCore.text("mid_task_id").notNull(),last_task_id:sqliteCore.text("last_task_id").notNull(),task_count:sqliteCore.integer("task_count").notNull(),summary:sqliteCore.text("summary"),source_tokens:sqliteCore.integer("source_tokens").notNull(),summary_tokens:sqliteCore.integer("summary_tokens"),created_at:sqliteCore.text("created_at").notNull()},n=>({idx_thread_boxes_thread_id:sqliteCore.index("idx_thread_boxes_thread_id").on(n.thread_id),idx_thread_boxes_seq:sqliteCore.index("idx_thread_boxes_seq").on(n.thread_id,n.seq),uniq_thread_boxes_thread_seq:sqliteCore.unique().on(n.thread_id,n.seq)}));c();sqliteCore.sqliteTable("request_logs",{id:sqliteCore.text("id").primaryKey(),path:sqliteCore.text("path").notNull(),method:sqliteCore.text("method").notNull(),status_code:sqliteCore.integer("status_code").notNull(),duration_ms:sqliteCore.integer("duration_ms").notNull(),ip:sqliteCore.text("ip"),request_headers:sqliteCore.text("request_headers"),response_headers:sqliteCore.text("response_headers"),request_body:sqliteCore.text("request_body"),response_body:sqliteCore.text("response_body"),query:sqliteCore.text("query"),user_id:sqliteCore.text("user_id"),project_id:sqliteCore.text("project_id"),partition_key:sqliteCore.text("partition_key").notNull(),timestamp:sqliteCore.text("timestamp").notNull().default(drizzleOrm.sql`(datetime('now'))`),metadata:sqliteCore.text("metadata")},n=>({idx_request_logs_timestamp:sqliteCore.index("idx_request_logs_timestamp").on(n.timestamp),idx_request_logs_path:sqliteCore.index("idx_request_logs_path").on(n.path),idx_request_logs_status_code:sqliteCore.index("idx_request_logs_status_code").on(n.status_code),idx_request_logs_partition_key:sqliteCore.index("idx_request_logs_partition_key").on(n.partition_key)}));c();sqliteCore.sqliteTable("usage_limit_snapshots",{id:sqliteCore.text("id").primaryKey(),provider:sqliteCore.text("provider").notNull(),account_ref:sqliteCore.text("account_ref").notNull().default("default"),limit_window:sqliteCore.text("limit_window").notNull(),bucket_start:sqliteCore.text("bucket_start").notNull(),captured_at:sqliteCore.text("captured_at").notNull(),used_percent:sqliteCore.integer("used_percent").notNull(),remaining_percent:sqliteCore.integer("remaining_percent").notNull(),resets_at:sqliteCore.text("resets_at"),source:sqliteCore.text("source").notNull(),metadata:sqliteCore.text("metadata")},n=>({uniq_usage_limit_snapshots_bucket:sqliteCore.uniqueIndex("uniq_usage_limit_snapshots_bucket").on(n.provider,n.account_ref,n.limit_window,n.bucket_start),idx_usage_limit_snapshots_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_window_bucket").on(n.limit_window,n.bucket_start),idx_usage_limit_snapshots_provider_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_provider_window_bucket").on(n.provider,n.limit_window,n.bucket_start)}));c();sqliteCore.sqliteTable("usage_reports",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),month:sqliteCore.text("month").notNull(),generated_at:sqliteCore.text("generated_at").notNull(),source_range:sqliteCore.text("source_range").notNull(),tier:sqliteCore.text("tier").notNull(),total_tokens:sqliteCore.integer("total_tokens").notNull(),total_cost_usd:sqliteCore.real("total_cost_usd").notNull(),payload:sqliteCore.text("payload").notNull(),payload_hash:sqliteCore.text("payload_hash"),signature:sqliteCore.text("signature"),signed_at:sqliteCore.text("signed_at"),issuer:sqliteCore.text("issuer")},n=>({uniq_usage_reports_ws_month:sqliteCore.uniqueIndex("uniq_usage_reports_ws_month").on(n.workspace_id,n.month)}));var Le="2026-05-09",za="0.8.9-rc.13",$e=10,Ue=parseInt(za.split("rc.")[1]),Ka=new Set(["workflow","mcp"]),$o=600*1e3,Ot=class extends ct{dbPath;pidNullObservedSince=new Map;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Y.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=Y.dirname(t);Uo.existsSync(o)||Uo.mkdirSync(o,{recursive:true});}else if(!Uo.existsSync(t))throw new O("NOT_FOUND","Database not found");let r=_e(t);if(e)try{ar(r.db,t);}catch(o){throw r.close(),o}return r}startTask(e){let t=this.openHandle(true);try{t.db.insert(p).values({id:e.id,agent_id:e.agentId,prompt:e.prompt,mode:e.mode,status:e.status,started_at:e.startedAt,pid:e.pid??null,parent_task_id:e.parentTaskId??null,caller_agent_id:e.callerAgentId??null,trace_id:e.traceId??null,command:e.command??null,metadata:e.metadata??null,workspace_id:e.workspaceId??null,platform:e.platform??"cli",crewx_version:e.crewxVersion??null,thread_id:e.threadId??null,model:e.model??null,rendered_prompt:e.renderedPrompt??null,coding_agent_command:e.codingAgentCommand??null}).onConflictDoUpdate({target:p.id,set:{pid:drizzleOrm.sql`COALESCE(excluded.pid, ${p.pid})`},setWhere:drizzleOrm.eq(p.status,"running")}).run();}catch(r){throw r instanceof O?r:new O("DB_ERROR","Failed to start task",r)}finally{t.close();}}finishTask(e){let t=this.openHandle(true);try{let r=e.runEpoch??null;t.runRaw(`UPDATE tasks SET status=?, result=?, error=?, completed_at=?, duration_ms=?,
|
|
52
|
+
`)}`);let s=n.get(t`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'`),i=0;s?.cnt&&(i=n.get(t`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0),Ra(n,i),s?.cnt&&(Ta(n,o,t),Pa(n,o,t)),e(n,{migrationsFolder:o});let d=(n.get(t`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0)-i;if(d>0){let l=s?.cnt?"Database migrated":"Database initialized";console.error(`[crewx] ${l} (${d} migration${d>1?"s":""} applied).`);}}function lr(n,e){So.has(e)||(Sa(n),So.add(e));}c();var I=class extends Error{code;cause;constructor(e,t,r){super(t),this.name="RepositoryError",this.code=e,this.cause=r,Object.setPrototypeOf(this,new.target.prototype);}};c();c();var Io=sqliteCore.sqliteTable("workspaces",{id:sqliteCore.text("id").primaryKey(),slug:sqliteCore.text("slug").notNull().unique(),name:sqliteCore.text("name").notNull(),workspace_path:sqliteCore.text("workspace_path"),description:sqliteCore.text("description"),is_active:sqliteCore.integer("is_active").notNull().default(1),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()});c();var p=sqliteCore.sqliteTable("tasks",{id:sqliteCore.text("id").primaryKey(),agent_id:sqliteCore.text("agent_id").notNull(),user_id:sqliteCore.text("user_id"),prompt:sqliteCore.text("prompt").notNull(),mode:sqliteCore.text("mode").notNull().default("execute"),status:sqliteCore.text("status").notNull().default("running"),result:sqliteCore.text("result"),error:sqliteCore.text("error"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),metadata:sqliteCore.text("metadata"),workspace_id:sqliteCore.text("workspace_id"),trace_id:sqliteCore.text("trace_id"),parent_task_id:sqliteCore.text("parent_task_id"),caller_agent_id:sqliteCore.text("caller_agent_id"),model:sqliteCore.text("model"),platform:sqliteCore.text("platform").default("cli"),crewx_version:sqliteCore.text("crewx_version"),input_tokens:sqliteCore.integer("input_tokens").default(0),output_tokens:sqliteCore.integer("output_tokens").default(0),cost_usd:sqliteCore.real("cost_usd").default(0),pid:sqliteCore.integer("pid"),rendered_prompt:sqliteCore.text("rendered_prompt"),command:sqliteCore.text("command"),coding_agent_command:sqliteCore.text("coding_agent_command"),exit_code:sqliteCore.integer("exit_code"),logs:sqliteCore.text("logs"),thread_id:sqliteCore.text("thread_id"),workspace_ref:sqliteCore.text("workspace_ref"),project_id:sqliteCore.text("project_id"),project_ref:sqliteCore.text("project_ref"),cached_input_tokens:sqliteCore.integer("cached_input_tokens").default(0),run_epoch:sqliteCore.integer("run_epoch").default(0)},n=>({idx_tasks_agent_id:sqliteCore.index("idx_tasks_agent_id").on(n.agent_id),idx_tasks_status:sqliteCore.index("idx_tasks_status").on(n.status),idx_tasks_started_at:sqliteCore.index("idx_tasks_started_at").on(n.started_at),idx_tasks_trace_id:sqliteCore.index("idx_tasks_trace_id").on(n.trace_id),idx_tasks_parent_task_id:sqliteCore.index("idx_tasks_parent_task_id").on(n.parent_task_id),idx_tasks_crewx_version:sqliteCore.index("idx_tasks_crewx_version").on(n.crewx_version),idx_tasks_pid:sqliteCore.index("idx_tasks_pid").on(n.pid),idx_tasks_thread_id:sqliteCore.index("idx_tasks_thread_id").on(n.thread_id),idx_tasks_workspace_id:sqliteCore.index("idx_tasks_workspace_id").on(n.workspace_id),idx_tasks_workspace_ref:sqliteCore.index("idx_tasks_workspace_ref").on(n.workspace_ref),idx_tasks_project_id:sqliteCore.index("idx_tasks_project_id").on(n.project_id),idx_tasks_ws_started:sqliteCore.index("idx_tasks_ws_started").on(n.workspace_id,n.started_at)}));c();var Oo=sqliteCore.sqliteTable("threads",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").references(()=>Io.id,{onDelete:"set null"}),platform:sqliteCore.text("platform").notNull().default("cli"),title:sqliteCore.text("title"),first_message:sqliteCore.text("first_message"),last_message:sqliteCore.text("last_message"),message_count:sqliteCore.integer("message_count").notNull().default(0),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull(),metadata:sqliteCore.text("metadata"),title_locked:sqliteCore.integer("title_locked").notNull().default(0),pinned:sqliteCore.integer("pinned").notNull().default(0),starred:sqliteCore.integer("starred").notNull().default(0)},n=>({idx_threads_updated_at:sqliteCore.index("idx_threads_updated_at").on(n.updated_at),idx_threads_workspace_id:sqliteCore.index("idx_threads_workspace_id").on(n.workspace_id),idx_threads_ws_updated:sqliteCore.index("idx_threads_ws_updated").on(n.workspace_id,n.updated_at),idx_threads_title:sqliteCore.index("idx_threads_title").on(n.title)}));c();var rt=sqliteCore.sqliteTable("spans",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>p.id,{onDelete:"set null"}),parent_span_id:sqliteCore.text("parent_span_id").references(()=>rt.id,{onDelete:"set null"}),name:sqliteCore.text("name").notNull(),kind:sqliteCore.text("kind").notNull().default("internal"),status:sqliteCore.text("status").notNull().default("ok"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),error:sqliteCore.text("error"),attributes:sqliteCore.text("attributes")},n=>({idx_spans_task_id:sqliteCore.index("idx_spans_task_id").on(n.task_id),idx_spans_parent_span_id:sqliteCore.index("idx_spans_parent_span_id").on(n.parent_span_id)}));c();sqliteCore.sqliteTable("tool_calls",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>p.id,{onDelete:"cascade"}),session_id:sqliteCore.text("session_id"),tool_name:sqliteCore.text("tool_name").notNull(),files:sqliteCore.text("files"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),duration_ms:sqliteCore.integer("duration_ms"),timestamp:sqliteCore.text("timestamp").notNull()},n=>({idx_tool_calls_task_id:sqliteCore.index("idx_tool_calls_task_id").on(n.task_id),idx_tool_calls_tool_name:sqliteCore.index("idx_tool_calls_tool_name").on(n.tool_name),idx_tool_calls_timestamp:sqliteCore.index("idx_tool_calls_timestamp").on(n.timestamp)}));c();sqliteCore.sqliteTable("thread_boxes",{id:sqliteCore.text("id").primaryKey(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>Oo.id,{onDelete:"cascade"}),seq:sqliteCore.integer("seq").notNull(),first_task_id:sqliteCore.text("first_task_id").notNull(),mid_task_id:sqliteCore.text("mid_task_id").notNull(),last_task_id:sqliteCore.text("last_task_id").notNull(),task_count:sqliteCore.integer("task_count").notNull(),summary:sqliteCore.text("summary"),source_tokens:sqliteCore.integer("source_tokens").notNull(),summary_tokens:sqliteCore.integer("summary_tokens"),created_at:sqliteCore.text("created_at").notNull()},n=>({idx_thread_boxes_thread_id:sqliteCore.index("idx_thread_boxes_thread_id").on(n.thread_id),idx_thread_boxes_seq:sqliteCore.index("idx_thread_boxes_seq").on(n.thread_id,n.seq),uniq_thread_boxes_thread_seq:sqliteCore.unique().on(n.thread_id,n.seq)}));c();sqliteCore.sqliteTable("request_logs",{id:sqliteCore.text("id").primaryKey(),path:sqliteCore.text("path").notNull(),method:sqliteCore.text("method").notNull(),status_code:sqliteCore.integer("status_code").notNull(),duration_ms:sqliteCore.integer("duration_ms").notNull(),ip:sqliteCore.text("ip"),request_headers:sqliteCore.text("request_headers"),response_headers:sqliteCore.text("response_headers"),request_body:sqliteCore.text("request_body"),response_body:sqliteCore.text("response_body"),query:sqliteCore.text("query"),user_id:sqliteCore.text("user_id"),project_id:sqliteCore.text("project_id"),partition_key:sqliteCore.text("partition_key").notNull(),timestamp:sqliteCore.text("timestamp").notNull().default(drizzleOrm.sql`(datetime('now'))`),metadata:sqliteCore.text("metadata")},n=>({idx_request_logs_timestamp:sqliteCore.index("idx_request_logs_timestamp").on(n.timestamp),idx_request_logs_path:sqliteCore.index("idx_request_logs_path").on(n.path),idx_request_logs_status_code:sqliteCore.index("idx_request_logs_status_code").on(n.status_code),idx_request_logs_partition_key:sqliteCore.index("idx_request_logs_partition_key").on(n.partition_key)}));c();sqliteCore.sqliteTable("usage_limit_snapshots",{id:sqliteCore.text("id").primaryKey(),provider:sqliteCore.text("provider").notNull(),account_ref:sqliteCore.text("account_ref").notNull().default("default"),limit_window:sqliteCore.text("limit_window").notNull(),bucket_start:sqliteCore.text("bucket_start").notNull(),captured_at:sqliteCore.text("captured_at").notNull(),used_percent:sqliteCore.integer("used_percent").notNull(),remaining_percent:sqliteCore.integer("remaining_percent").notNull(),resets_at:sqliteCore.text("resets_at"),source:sqliteCore.text("source").notNull(),metadata:sqliteCore.text("metadata")},n=>({uniq_usage_limit_snapshots_bucket:sqliteCore.uniqueIndex("uniq_usage_limit_snapshots_bucket").on(n.provider,n.account_ref,n.limit_window,n.bucket_start),idx_usage_limit_snapshots_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_window_bucket").on(n.limit_window,n.bucket_start),idx_usage_limit_snapshots_provider_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_provider_window_bucket").on(n.provider,n.limit_window,n.bucket_start)}));c();sqliteCore.sqliteTable("usage_reports",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),month:sqliteCore.text("month").notNull(),generated_at:sqliteCore.text("generated_at").notNull(),source_range:sqliteCore.text("source_range").notNull(),tier:sqliteCore.text("tier").notNull(),total_tokens:sqliteCore.integer("total_tokens").notNull(),total_cost_usd:sqliteCore.real("total_cost_usd").notNull(),payload:sqliteCore.text("payload").notNull(),payload_hash:sqliteCore.text("payload_hash"),signature:sqliteCore.text("signature"),signed_at:sqliteCore.text("signed_at"),issuer:sqliteCore.text("issuer")},n=>({uniq_usage_reports_ws_month:sqliteCore.uniqueIndex("uniq_usage_reports_ws_month").on(n.workspace_id,n.month)}));c();sqliteCore.sqliteTable("notifications",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id"),task_id:sqliteCore.text("task_id"),thread_id:sqliteCore.text("thread_id"),source:sqliteCore.text("source").notNull().default("agent"),level:sqliteCore.text("level").notNull().default("info"),title:sqliteCore.text("title").notNull(),body:sqliteCore.text("body"),target_user_id:sqliteCore.text("target_user_id"),created_at:sqliteCore.text("created_at").notNull(),metadata:sqliteCore.text("metadata")},n=>({idx_notifications_ws_created:sqliteCore.index("idx_notifications_ws_created").on(n.workspace_id,drizzleOrm.sql`${n.created_at} DESC`)}));sqliteCore.sqliteTable("notification_reads",{notification_id:sqliteCore.text("notification_id").notNull(),user_id:sqliteCore.text("user_id").notNull(),read_at:sqliteCore.text("read_at").notNull()},n=>({pk:sqliteCore.primaryKey({columns:[n.notification_id,n.user_id]})}));c();sqliteCore.sqliteTable("agent_suggestions",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id").notNull(),task_id:sqliteCore.text("task_id"),type:sqliteCore.text("type").notNull(),status:sqliteCore.text("status").notNull().default("pending"),payload:sqliteCore.text("payload").notNull(),applied_commit_sha:sqliteCore.text("applied_commit_sha"),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()},n=>({idx_agent_suggestions_ws_agent:sqliteCore.index("idx_agent_suggestions_ws_agent").on(n.workspace_id,n.agent_id),idx_agent_suggestions_ws_created:sqliteCore.index("idx_agent_suggestions_ws_created").on(n.workspace_id,n.created_at)}));var Ue="2026-05-09",nd="0.8.9-rc.13",je=10,Fe=parseInt(nd.split("rc.")[1]),od=new Set(["workflow","mcp"]),Ho=600*1e3,Dt=class extends mt{dbPath;pidNullObservedSince=new Map;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=q.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=q.dirname(t);qo.existsSync(o)||qo.mkdirSync(o,{recursive:true});}else if(!qo.existsSync(t))throw new I("NOT_FOUND","Database not found");let r=xe(t);if(e)try{lr(r.db,t);}catch(o){throw r.close(),o}return r}startTask(e){let t=this.openHandle(true);try{t.db.insert(p).values({id:e.id,agent_id:e.agentId,prompt:e.prompt,mode:e.mode,status:e.status,started_at:e.startedAt,pid:e.pid??null,parent_task_id:e.parentTaskId??null,caller_agent_id:e.callerAgentId??null,trace_id:e.traceId??null,command:e.command??null,metadata:e.metadata??null,workspace_id:e.workspaceId??null,platform:e.platform??"cli",crewx_version:e.crewxVersion??null,thread_id:e.threadId??null,model:e.model??null,rendered_prompt:e.renderedPrompt??null,coding_agent_command:e.codingAgentCommand??null}).onConflictDoUpdate({target:p.id,set:{pid:drizzleOrm.sql`COALESCE(excluded.pid, ${p.pid})`},setWhere:drizzleOrm.eq(p.status,"running")}).run();}catch(r){throw r instanceof I?r:new I("DB_ERROR","Failed to start task",r)}finally{t.close();}}finishTask(e){let t=this.openHandle(true);try{let r=e.runEpoch??null;t.runRaw(`UPDATE tasks SET status=?, result=?, error=?, completed_at=?, duration_ms=?,
|
|
53
53
|
exit_code=?, input_tokens=?, output_tokens=?, cached_input_tokens=?, cost_usd=?,
|
|
54
54
|
model=COALESCE(?, model)
|
|
55
|
-
WHERE id=? AND status='running' AND COALESCE(run_epoch, 0) = COALESCE(?, 0)`,[e.status,e.result??null,e.error??null,e.completedAt,e.durationMs??null,e.exitCode??null,e.inputTokens??0,e.outputTokens??0,e.cachedInputTokens??0,e.costUsd??0,e.model??null,e.id,r]);}catch(r){throw r instanceof
|
|
55
|
+
WHERE id=? AND status='running' AND COALESCE(run_epoch, 0) = COALESCE(?, 0)`,[e.status,e.result??null,e.error??null,e.completedAt,e.durationMs??null,e.exitCode??null,e.inputTokens??0,e.outputTokens??0,e.cachedInputTokens??0,e.costUsd??0,e.model??null,e.id,r]);}catch(r){throw r instanceof I?r:new I("DB_ERROR","Failed to finish task",r)}finally{t.close();}}appendLog(e,t){let r=this.openHandle(true);try{r.db.transaction(o=>{let s=o.select({logs:p.logs}).from(p).where(drizzleOrm.eq(p.id,e)).limit(1).get(),i=s?.logs?JSON.parse(s.logs):[];i.push(t),o.update(p).set({logs:JSON.stringify(i)}).where(drizzleOrm.eq(p.id,e)).run();},{behavior:"immediate"});}catch(o){throw o instanceof I?o:new I("DB_ERROR","Failed to append log",o)}finally{r.close();}}getRunningTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(p).where(drizzleOrm.eq(p.status,"running")).orderBy(drizzleOrm.desc(p.started_at)).all()}catch(t){throw new I("DB_ERROR","Failed to get running tasks",t)}finally{e.close();}}getAllTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(p).orderBy(drizzleOrm.desc(p.started_at)).limit(100).all()}catch(t){throw new I("DB_ERROR","Failed to get all tasks",t)}finally{e.close();}}getTask(e){if(!this.dbExists())return;let t=this.openHandle(false);try{return t.db.select().from(p).where(drizzleOrm.eq(p.id,e)).limit(1).get()??void 0}catch(r){throw new I("DB_ERROR","Failed to get task",r)}finally{t.close();}}killTask(e){if(!this.dbExists())return {killed:false};let t=this.openHandle(true);try{let r=t.db.select({id:p.id,status:p.status,pid:p.pid}).from(p).where(drizzleOrm.eq(p.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(p).set({status:"failed",error:"Killed by user",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.status,"running"))).run(),{killed:!0,pid:r.pid??void 0}}catch(r){throw r instanceof I?r:new I("DB_ERROR","Failed to kill task",r)}finally{t.close();}}reapOrphanedTasks(){if(!this.dbExists())return 0;let e=this.openHandle(true);try{let t=e.db.select({id:p.id,pid:p.pid,platform:p.platform,run_epoch:p.run_epoch}).from(p).where(drizzleOrm.eq(p.status,"running")).all(),r=Date.now(),o=new Set,s=0;for(let i of t){if(i.pid){let l=!1;try{process.kill(i.pid,0),l=!0;}catch{}l||(e.db.update(p).set({status:"failed",error:"Reaped: process not found (orphaned task)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(p.id,i.id),drizzleOrm.eq(p.status,"running"))).run(),s++);continue}if(od.has(i.platform??"cli"))continue;let a=`${i.id}:${i.run_epoch??0}`;o.add(a);let d=this.pidNullObservedSince.get(a);if(d===void 0){this.pidNullObservedSince.set(a,r);continue}r-d>=Ho&&(e.db.update(p).set({status:"failed",error:"Reaped: pid never recorded after resume (stale running_instruction)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(p.id,i.id),drizzleOrm.eq(p.status,"running"))).run(),s++,this.pidNullObservedSince.delete(a));}for(let i of Array.from(this.pidNullObservedSince.keys()))o.has(i)||this.pidNullObservedSince.delete(i);return s}finally{e.close();}}reapRunningWorkflowTasks(e=Ho){if(!this.dbExists())return 0;let t=this.openHandle(true);try{let r=new Date(Date.now()-e).toISOString();return t.db.update(p).set({status:"failed",error:"Reaped: stale workflow run (finally not executed)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(p.status,"running"),drizzleOrm.eq(p.platform,"workflow"),drizzleOrm.isNull(p.pid),drizzleOrm.lt(p.started_at,r))).run().changes??0}finally{t.close();}}findTaskStatus(e,t){let r=this.resolveDbPaths();for(let o of r){if(!qo.existsSync(o))continue;let s=xe(o);try{let i=t?drizzleOrm.eq(p.workspace_id,t):void 0,a=i?drizzleOrm.and(drizzleOrm.eq(p.id,e),i):drizzleOrm.eq(p.id,e),d=s.db.select().from(p).where(a).limit(1).get()??void 0;if(!d){let l=drizzleOrm.or(drizzleOrm.eq(p.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.like(p.command,`%--thread=${e}%`))),u=i?drizzleOrm.and(l,i):l;d=s.db.select().from(p).where(u).orderBy(drizzleOrm.desc(p.started_at)).limit(1).get()??void 0;}if(d)return d}catch(i){throw new I("DB_ERROR","Failed to find task status",i)}finally{s.close();}}}findChildTasks(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!qo.existsSync(i))continue;let a=xe(i);try{let d=t?drizzleOrm.and(drizzleOrm.eq(p.parent_task_id,e),drizzleOrm.eq(p.workspace_id,t)):drizzleOrm.eq(p.parent_task_id,e),l=a.db.select().from(p).where(d).orderBy(drizzleOrm.asc(p.started_at)).all();for(let u of l)o.has(u.id)||(o.add(u.id),s.push(u));}catch(d){throw new I("DB_ERROR","Failed to find child tasks",d)}finally{a.close();}}return s}getWorkspaceUsageSummary(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.all(e?drizzleOrm.sql`
|
|
56
56
|
SELECT
|
|
57
57
|
COALESCE(workspace_id, 'unknown') AS workspace_id,
|
|
58
58
|
COALESCE(SUM(input_tokens), 0) AS input_tokens,
|
|
@@ -73,7 +73,7 @@ ${r.join(`
|
|
|
73
73
|
FROM tasks
|
|
74
74
|
GROUP BY workspace_id
|
|
75
75
|
ORDER BY (COALESCE(SUM(input_tokens), 0) + COALESCE(SUM(output_tokens), 0)) DESC
|
|
76
|
-
`)}catch(r){throw new
|
|
76
|
+
`)}catch(r){throw new I("DB_ERROR","Failed to get workspace usage summary",r)}finally{t.close();}}getThreadTokenUsage(e,t){let r=this.resolveDbPaths(),o=new Set,s=0,i=0,a=0;for(let d of r){if(!qo.existsSync(d))continue;let l=xe(d);try{let u=drizzleOrm.or(drizzleOrm.eq(p.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.like(p.command,`%--thread=${e}%`))),g=t?drizzleOrm.and(u,drizzleOrm.eq(p.workspace_id,t)):u,f=l.db.select({id:p.id,input_tokens:p.input_tokens,output_tokens:p.output_tokens,cost_usd:p.cost_usd}).from(p).where(g).all();for(let m of f)o.has(m.id)||(o.add(m.id),s+=m.input_tokens??0,i+=m.output_tokens??0,a+=m.cost_usd??0);}catch(u){throw new I("DB_ERROR","Failed to get thread token usage",u)}finally{l.close();}}return {inputTokens:s,outputTokens:i,costUsd:a}}findTasksByThread(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!qo.existsSync(i))continue;let a=xe(i);try{let d=drizzleOrm.or(drizzleOrm.eq(p.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.like(p.command,`%--thread=${e}%`))),l=t?drizzleOrm.and(d,drizzleOrm.eq(p.workspace_id,t)):d,u=a.db.select().from(p).where(l).orderBy(drizzleOrm.asc(p.started_at)).all();for(let g of u)o.has(g.id)||(o.add(g.id),s.push(g));}catch(d){throw new I("DB_ERROR","Failed to find tasks by thread",d)}finally{a.close();}}return s}parseWorkflowCardMetadata(e){if(!e)return {};try{let t=JSON.parse(e);return {kind:typeof t.kind=="string"?t.kind:void 0,workflowRunId:typeof t.workflowRunId=="string"?t.workflowRunId:void 0}}catch{return {}}}extractThreadIdFromCommand(e){return e?/--thread=(\S+)/.exec(e)?.[1]??null:null}batchFetchWorkflowCards(e,t){let r=new Map;if(e.length===0)return r;let o=new Set(e),s=new Map,i=t?drizzleOrm.eq(p.workspace_id,t):void 0,a=(d,l)=>{if(!d)return;let u=s.get(d);if(u&&l.started_at<=u)return;let g=this.parseWorkflowCardMetadata(l.metadata);g.kind==="workflow_card"&&(s.set(d,l.started_at),r.set(d,{taskId:l.id,workflowRunId:g.workflowRunId,raw:l.result??void 0}));};for(let d of this.resolveDbPaths()){if(!qo.existsSync(d))continue;let l=xe(d);try{let u=drizzleOrm.and(drizzleOrm.inArray(p.thread_id,e),drizzleOrm.like(p.metadata,'%"kind":"workflow_card"%')),g=l.db.select({id:p.id,thread_id:p.thread_id,metadata:p.metadata,result:p.result,started_at:p.started_at}).from(p).where(i?drizzleOrm.and(u,i):u).all();for(let h of g)a(h.thread_id,h);let f=drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.like(p.metadata,'%"kind":"workflow_card"%')),m=l.db.select({id:p.id,command:p.command,metadata:p.metadata,result:p.result,started_at:p.started_at}).from(p).where(i?drizzleOrm.and(f,i):f).all();for(let h of m){let w=this.extractThreadIdFromCommand(h.command);!w||!o.has(w)||a(w,h);}}catch(u){throw new I("DB_ERROR","Failed to batch fetch workflow cards",u)}finally{l.close();}}return r}findAllTasks(e){if(!this.dbExists())return {rows:[],total:0};let t=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(drizzleOrm.eq(p.workspace_id,e.workspaceId));let o=e.agents&&e.agents.length>0?e.agents:e.agentId?[e.agentId]:null;o&&r.push(drizzleOrm.inArray(p.agent_id,o));let s=e.statuses&&e.statuses.length>0?e.statuses:e.status?[e.status]:null;s&&r.push(drizzleOrm.inArray(p.status,s));let i=e.q??e.search;i&&r.push(drizzleOrm.like(p.prompt,`%${i}%`)),e.from&&r.push(drizzleOrm.gte(p.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(p.started_at,e.to));let a=r.length>0?drizzleOrm.and(...r):void 0,d=t.db.select({count:drizzleOrm.sql`count(*)`}).from(p).where(a).get(),l=(e.sortDir??"DESC")==="ASC"?drizzleOrm.asc(p.started_at):drizzleOrm.desc(p.started_at);return {rows:t.db.select().from(p).where(a).orderBy(l).limit(e.limit).offset(e.offset).all(),total:d?.count??0}}catch(r){throw new I("DB_ERROR","Failed to find all tasks",r)}finally{t.close();}}getAgentUsage(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.all(r?drizzleOrm.sql`
|
|
77
77
|
SELECT
|
|
78
78
|
t.agent_id,
|
|
79
79
|
t.workspace_id,
|
|
@@ -81,11 +81,11 @@ ${r.join(`
|
|
|
81
81
|
COALESCE(SUM(
|
|
82
82
|
COALESCE(t.input_tokens, 0)
|
|
83
83
|
+ CASE
|
|
84
|
-
WHEN t.started_at >= ${
|
|
84
|
+
WHEN t.started_at >= ${Ue}
|
|
85
85
|
AND (
|
|
86
86
|
t.crewx_version IS NULL
|
|
87
87
|
OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
|
|
88
|
-
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${
|
|
88
|
+
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${je}) AS INTEGER) < ${Fe})
|
|
89
89
|
)
|
|
90
90
|
THEN COALESCE(t.cached_input_tokens, 0)
|
|
91
91
|
ELSE 0
|
|
@@ -104,11 +104,11 @@ ${r.join(`
|
|
|
104
104
|
COALESCE(SUM(
|
|
105
105
|
COALESCE(t.input_tokens, 0)
|
|
106
106
|
+ CASE
|
|
107
|
-
WHEN t.started_at >= ${
|
|
107
|
+
WHEN t.started_at >= ${Ue}
|
|
108
108
|
AND (
|
|
109
109
|
t.crewx_version IS NULL
|
|
110
110
|
OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
|
|
111
|
-
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${
|
|
111
|
+
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${je}) AS INTEGER) < ${Fe})
|
|
112
112
|
)
|
|
113
113
|
THEN COALESCE(t.cached_input_tokens, 0)
|
|
114
114
|
ELSE 0
|
|
@@ -124,11 +124,11 @@ ${r.join(`
|
|
|
124
124
|
COALESCE(SUM(
|
|
125
125
|
COALESCE(t.input_tokens, 0)
|
|
126
126
|
+ CASE
|
|
127
|
-
WHEN t.started_at >= ${
|
|
127
|
+
WHEN t.started_at >= ${Ue}
|
|
128
128
|
AND (
|
|
129
129
|
t.crewx_version IS NULL
|
|
130
130
|
OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
|
|
131
|
-
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${
|
|
131
|
+
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${je}) AS INTEGER) < ${Fe})
|
|
132
132
|
)
|
|
133
133
|
THEN COALESCE(t.cached_input_tokens, 0)
|
|
134
134
|
ELSE 0
|
|
@@ -146,11 +146,11 @@ ${r.join(`
|
|
|
146
146
|
COALESCE(SUM(
|
|
147
147
|
COALESCE(t.input_tokens, 0)
|
|
148
148
|
+ CASE
|
|
149
|
-
WHEN t.started_at >= ${
|
|
149
|
+
WHEN t.started_at >= ${Ue}
|
|
150
150
|
AND (
|
|
151
151
|
t.crewx_version IS NULL
|
|
152
152
|
OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
|
|
153
|
-
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${
|
|
153
|
+
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${je}) AS INTEGER) < ${Fe})
|
|
154
154
|
)
|
|
155
155
|
THEN COALESCE(t.cached_input_tokens, 0)
|
|
156
156
|
ELSE 0
|
|
@@ -158,18 +158,18 @@ ${r.join(`
|
|
|
158
158
|
), 0)
|
|
159
159
|
+ COALESCE(SUM(t.output_tokens), 0)
|
|
160
160
|
) DESC
|
|
161
|
-
`).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,totalTokens:i.input_tokens+i.output_tokens}))}catch(s){throw new
|
|
161
|
+
`).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,totalTokens:i.input_tokens+i.output_tokens}))}catch(s){throw new I("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?drizzleOrm.sql`
|
|
162
162
|
SELECT
|
|
163
163
|
date(t.started_at) AS date,
|
|
164
164
|
t.agent_id,
|
|
165
165
|
COALESCE(SUM(
|
|
166
166
|
COALESCE(t.input_tokens, 0)
|
|
167
167
|
+ CASE
|
|
168
|
-
WHEN t.started_at >= ${
|
|
168
|
+
WHEN t.started_at >= ${Ue}
|
|
169
169
|
AND (
|
|
170
170
|
t.crewx_version IS NULL
|
|
171
171
|
OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
|
|
172
|
-
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${
|
|
172
|
+
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${je}) AS INTEGER) < ${Fe})
|
|
173
173
|
)
|
|
174
174
|
THEN COALESCE(t.cached_input_tokens, 0)
|
|
175
175
|
ELSE 0
|
|
@@ -192,11 +192,11 @@ ${r.join(`
|
|
|
192
192
|
COALESCE(SUM(
|
|
193
193
|
COALESCE(t.input_tokens, 0)
|
|
194
194
|
+ CASE
|
|
195
|
-
WHEN t.started_at >= ${
|
|
195
|
+
WHEN t.started_at >= ${Ue}
|
|
196
196
|
AND (
|
|
197
197
|
t.crewx_version IS NULL
|
|
198
198
|
OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
|
|
199
|
-
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${
|
|
199
|
+
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${je}) AS INTEGER) < ${Fe})
|
|
200
200
|
)
|
|
201
201
|
THEN COALESCE(t.cached_input_tokens, 0)
|
|
202
202
|
ELSE 0
|
|
@@ -211,7 +211,7 @@ ${r.join(`
|
|
|
211
211
|
AND t.started_at < ${t}
|
|
212
212
|
GROUP BY date(t.started_at), t.agent_id
|
|
213
213
|
ORDER BY date(t.started_at) ASC
|
|
214
|
-
`).map(i=>({date:i.date,agentId:i.agent_id,inputTokens:i.input_tokens,outputTokens:i.output_tokens,cachedInputTokens:i.cached_input_tokens,costUsd:i.cost_usd,totalTokens:i.input_tokens+i.output_tokens}))}catch(s){throw new
|
|
214
|
+
`).map(i=>({date:i.date,agentId:i.agent_id,inputTokens:i.input_tokens,outputTokens:i.output_tokens,cachedInputTokens:i.cached_input_tokens,costUsd:i.cost_usd,totalTokens:i.input_tokens+i.output_tokens}))}catch(s){throw new I("DB_ERROR","Failed to get agent usage trend",s)}finally{o.close();}}findTaskForStop(e,t){if(!this.dbExists())return;let r=this.openHandle(false);try{return r.db.select().from(p).where(drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.workspace_id,t))).limit(1).get()??void 0}catch(o){throw new I("DB_ERROR","Failed to find task for stop",o)}finally{r.close();}}markTaskFailed(e,t,r){if(!this.dbExists())return;let o=this.openHandle(true);try{let s=new Date().toISOString(),i=r?drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.status,"running"),drizzleOrm.eq(p.workspace_id,r)):drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.status,"running"));o.db.update(p).set({status:"failed",error:t,completed_at:s}).where(i).run();}catch(s){throw s instanceof I?s:new I("DB_ERROR","Failed to mark task failed",s)}finally{o.close();}}findTasksByPromptHint(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!qo.existsSync(i))continue;let a=xe(i);try{let d=t?drizzleOrm.and(drizzleOrm.like(p.prompt,`%${e}%`),drizzleOrm.eq(p.workspace_id,t)):drizzleOrm.like(p.prompt,`%${e}%`),l=a.db.select().from(p).where(d).orderBy(drizzleOrm.asc(p.started_at)).all();for(let u of l)o.has(u.id)||(o.add(u.id),s.push(u));}catch(d){throw new I("DB_ERROR","Failed to find tasks by prompt hint",d)}finally{a.close();}}return s}getProviderUsage(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=drizzleOrm.sql`
|
|
215
215
|
CASE
|
|
216
216
|
WHEN ${p.model} LIKE 'claude-%' OR ${p.model} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
|
|
217
217
|
WHEN ${p.model} LIKE 'gpt-%' OR ${p.model} LIKE 'codex-%' THEN 'codex'
|
|
@@ -224,11 +224,11 @@ ${r.join(`
|
|
|
224
224
|
`,i=drizzleOrm.sql`
|
|
225
225
|
COALESCE(${p.input_tokens}, 0)
|
|
226
226
|
+ CASE
|
|
227
|
-
WHEN ${p.started_at} >= ${
|
|
227
|
+
WHEN ${p.started_at} >= ${Ue}
|
|
228
228
|
AND (
|
|
229
229
|
${p.crewx_version} IS NULL
|
|
230
230
|
OR (${p.crewx_version} LIKE '0.8.%' AND ${p.crewx_version} NOT LIKE '0.8.9%')
|
|
231
|
-
OR (${p.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${p.crewx_version}, ${
|
|
231
|
+
OR (${p.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${p.crewx_version}, ${je}) AS INTEGER) < ${Fe})
|
|
232
232
|
)
|
|
233
233
|
THEN COALESCE(${p.cached_input_tokens}, 0)
|
|
234
234
|
ELSE 0
|
|
@@ -247,7 +247,7 @@ ${r.join(`
|
|
|
247
247
|
${a}
|
|
248
248
|
GROUP BY provider
|
|
249
249
|
ORDER BY (COALESCE(SUM(${i}), 0) + COALESCE(SUM(${p.output_tokens}), 0)) DESC
|
|
250
|
-
`).map(l=>({provider:l.provider,totalTasks:l.total_tasks,inputTokens:l.input_tokens,outputTokens:l.output_tokens,cachedInputTokens:l.cached_input_tokens,costUsd:l.cost_usd,totalTokens:l.input_tokens+l.output_tokens,activeDurationMs:l.active_duration_ms??0,lastActiveAt:l.last_active_at??null}))}catch(s){throw new
|
|
250
|
+
`).map(l=>({provider:l.provider,totalTasks:l.total_tasks,inputTokens:l.input_tokens,outputTokens:l.output_tokens,cachedInputTokens:l.cached_input_tokens,costUsd:l.cost_usd,totalTokens:l.input_tokens+l.output_tokens,activeDurationMs:l.active_duration_ms??0,lastActiveAt:l.last_active_at??null}))}catch(s){throw new I("DB_ERROR","Failed to get provider usage",s)}finally{o.close();}}getModelUsage(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=drizzleOrm.sql`
|
|
251
251
|
CASE
|
|
252
252
|
WHEN ${p.model} LIKE 'claude-%' OR ${p.model} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
|
|
253
253
|
WHEN ${p.model} LIKE 'gpt-%' OR ${p.model} LIKE 'codex-%' THEN 'codex'
|
|
@@ -260,11 +260,11 @@ ${r.join(`
|
|
|
260
260
|
`,i=drizzleOrm.sql`
|
|
261
261
|
COALESCE(${p.input_tokens}, 0)
|
|
262
262
|
+ CASE
|
|
263
|
-
WHEN ${p.started_at} >= ${
|
|
263
|
+
WHEN ${p.started_at} >= ${Ue}
|
|
264
264
|
AND (
|
|
265
265
|
${p.crewx_version} IS NULL
|
|
266
266
|
OR (${p.crewx_version} LIKE '0.8.%' AND ${p.crewx_version} NOT LIKE '0.8.9%')
|
|
267
|
-
OR (${p.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${p.crewx_version}, ${
|
|
267
|
+
OR (${p.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${p.crewx_version}, ${je}) AS INTEGER) < ${Fe})
|
|
268
268
|
)
|
|
269
269
|
THEN COALESCE(${p.cached_input_tokens}, 0)
|
|
270
270
|
ELSE 0
|
|
@@ -283,7 +283,7 @@ ${r.join(`
|
|
|
283
283
|
FROM ${p}
|
|
284
284
|
${a}
|
|
285
285
|
GROUP BY ${p.model}
|
|
286
|
-
`),l=new Map;for(let u of d){let g=
|
|
286
|
+
`),l=new Map;for(let u of d){let g=Kr(u.model??""),f=l.get(g);f?(f.totalTasks+=u.total_tasks,f.inputTokens+=u.input_tokens,f.outputTokens+=u.output_tokens,f.cachedInputTokens+=u.cached_input_tokens,f.costUsd+=u.cost_usd,f.totalTokens+=u.input_tokens+u.output_tokens,f.activeDurationMs+=u.active_duration_ms??0,u.last_active_at&&(!f.lastActiveAt||u.last_active_at>f.lastActiveAt)&&(f.lastActiveAt=u.last_active_at)):l.set(g,{model:g,provider:u.provider,totalTasks:u.total_tasks,inputTokens:u.input_tokens,outputTokens:u.output_tokens,cachedInputTokens:u.cached_input_tokens,costUsd:u.cost_usd,totalTokens:u.input_tokens+u.output_tokens,activeDurationMs:u.active_duration_ms??0,lastActiveAt:u.last_active_at??null});}return Array.from(l.values()).sort((u,g)=>g.costUsd-u.costUsd)}catch(s){throw new I("DB_ERROR","Failed to get model usage",s)}finally{o.close();}}getTasksForReport(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=r?drizzleOrm.sql`WHERE ${p.started_at} >= ${e} AND ${p.started_at} < ${t} AND ${p.workspace_id} = ${r}`:drizzleOrm.sql`WHERE ${p.started_at} >= ${e} AND ${p.started_at} < ${t}`;return o.db.all(drizzleOrm.sql`
|
|
287
287
|
SELECT
|
|
288
288
|
${p.thread_id} AS thread_id,
|
|
289
289
|
${p.agent_id} AS agent_id,
|
|
@@ -294,19 +294,19 @@ ${r.join(`
|
|
|
294
294
|
FROM ${p}
|
|
295
295
|
${s}
|
|
296
296
|
ORDER BY ${p.started_at} ASC
|
|
297
|
-
`).map(a=>({threadId:a.thread_id,agentId:a.agent_id,startedAt:a.started_at,status:a.status,error:a.error,exitCode:a.exit_code}))}catch(s){throw new
|
|
298
|
-
`)[0].trimStart();return
|
|
299
|
-
`).find(s=>s.trim()&&!s.startsWith("Read "))?.trim()??e.trim();if(!o)return "unknown";try{let s=
|
|
300
|
-
`)[0]?.slice(0,150)??null:o.input?.slice(0,150)??null,i=
|
|
301
|
-
`));}return d}c();c();var
|
|
302
|
-
${i.message}`)}let s=Bt(o);if(s.documents&&typeof s.documents=="object"){let i={};for(let[a,d]of Object.entries(s.documents))if(d&&typeof d=="object"){let l=d;typeof l.path=="string"&&!Y.isAbsolute(l.path)?i[a]={...l,path:Y.resolve(r,l.path)}:i[a]=l;}else i[a]=d;return {...s,documents:i}}return s}static mergeCrewxConfig(e,t){let r=new Map;for(let _ of e.agents??[])r.set(_.id,_);for(let _ of t.agents??[])r.has(_.id)&&console.warn(`[agent-loader] User agent "${_.id}" overrides built-in`),r.set(_.id,_);let o=Array.from(r.values()),s={...e.layouts??{},...t.layouts??{}},i={...e.documents??{},...t.documents??{}},a=e,d=t,l=as(a.vars,d.vars),u=as(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 f=[...e.hooks??[],...t.hooks??[]],m=Ld(a.providers,d.providers),y={...e},w={...t};for(let _ of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete y[_],delete w[_];let v={...{...y,...w},agents:o,layouts:s,documents:i,skills:g};return f.length>0&&(v.hooks=f),l!==void 0&&(v.vars=l),u!==void 0&&(v.settings=u),m!==void 0&&(v.providers=m),v}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=zt(e);s=n.mergeCrewxConfig(u,g),i=Y.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=zt(e),i=Y.dirname(e);}let a=new Ve(r);await a.load(s.documents,i);let d=s.agents??[];return await ds(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 Ve(o);await a.load(i.documents,r??(typeof process<"u"?process.cwd():"/"));let d=i.agents??[];return await ds(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=Yr(t);return Y.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 cn(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??Qr(r),a=e.defaultMode??"query",d=t.manifest.platform,l=e.agentRunner??{run:async(m,y,w)=>{let v=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${m}`,y,{threadId:w?.threadId,platform:d});return {output:v.ok?v.data:v.error?.message??""}}},u=e.onInbound??(async m=>{let y=m.routingHints?.agentId??e.defaultAgent;if(!y)return {accepted:false,reason:"no_agent"};let{output:w}=await l.run(y,m.text,{threadId:m.threadId});return {accepted:true,output:w}}),g=en({instanceId:r,config:o,capabilities:s,db:i,agentRunner:l,onInbound:u}),f={adapter:t,ctx:g,state:"starting"};this._activeAdapters.set(r,f),this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"starting",timestamp:new Date});try{await t.start(g),f.state="started",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"started",timestamp:new Date});}catch(m){throw f.state="failed",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"failed",error:m instanceof Error?m:new Error(String(m)),timestamp:new Date}),this._activeAdapters.delete(r),m}}async unregisterChannelAdapter(e){let t=this._activeAdapters.get(e);if(t){t.state="stopping",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"stopping",timestamp:new Date});try{await t.adapter.stop(t.ctx),t.state="stopped",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"stopped",timestamp:new Date});}catch(r){t.state="failed",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"failed",error:r instanceof Error?r:new Error(String(r)),timestamp:new Date});}finally{this._activeAdapters.delete(e);}}}async stopAllAdapters(e={}){let t=e.timeoutMs??1e4,r=Array.from(this._activeAdapters.keys()),o=await Promise.allSettled(r.map(s=>Promise.race([this.unregisterChannelAdapter(s),new Promise((i,a)=>setTimeout(()=>a(new Error(`Adapter stop timeout: ${s}`)),t))])));for(let s=0;s<o.length;s++)o[s].status==="rejected"&&console.error(`[crewx] adapter stop error (${r[s]}): ${o[s].reason}`);}abortAll(){for(let[e,t]of this._activeTasks)if(t.pid!==void 0)try{process.platform==="win32"?process.kill(t.pid,"SIGTERM"):process.kill(-t.pid,"SIGTERM");}catch(r){console.error(`[crewx] abort task ${e} (pid=${t.pid}) error: ${r instanceof Error?r.message:String(r)}`);}}async _drainActiveTasks(e){let t=Array.from(this._activeTasks.values()).map(r=>r.done);t.length!==0&&await Promise.race([Promise.allSettled(t),new Promise(r=>setTimeout(r,e).unref())]);}async close(){this.abortAll(),await this._drainActiveTasks(_t+1e3),await this.stopAllAdapters({timeoutMs:1e4});let e=[...this._remoteTargets.values()];this._remoteTargets.clear(),await Promise.allSettled(e.map(async r=>{try{await(await r).close();}catch(o){console.error(`[crewx] remote target close error: ${o instanceof Error?o.message:String(o)}`);}}));let t=[...this._plugins].reverse();for(let r of t)try{await r.detach(this);}catch(o){console.error(`[crewx] plugin ${r.name} detach error: ${o instanceof Error?o.message:String(o)}`);}this._plugins.length=0;}filterAgents(e){let t=a=>a?a.split(",").map(d=>d.trim().toLowerCase()).filter(Boolean):void 0,r=t(e.role),o=t(e.team),s=t(e.provider),i=Array.from(this._agents.values());return r&&(i=i.filter(a=>a.role&&r.some(d=>fe(a.role.toLowerCase(),d)))),o&&(i=i.filter(a=>a.team&&o.some(d=>fe(a.team.toLowerCase(),d)))),s&&(i=i.filter(a=>(Array.isArray(a.provider)?a.provider:[a.provider]).some(l=>s.some(u=>fe(l.toLowerCase(),u))))),i}renderAgentPrompt(e){let t=e.startsWith("@")?e.slice(1):e,r=this._agents.get(t);if(!r)throw new xe(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 xe(r,Array.from(this._agents.keys()));let s=this._resolveLayoutSpec(o,t?.layout),i=this._extractLayoutId(s),a=this._extractLayoutProps(o,s,t?.layout),d=this._layoutLoader.load(i,a),l=o.inline?.prompt??o.inline?.system_prompt??o.description??`You are an expert ${r}.`,u=await this._documentLoader.buildContext(),g=t?.env??(typeof process<"u"?process.env:{}),f=t?.vars?.security_key??Dd(),m={...t?.vars??{},documents:u,env:g,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??""}},y=await this._templateEngine.render(l,m),w={mode:t?.session?.mode??"query",platform:t?.session?.platform??"cli",options:t?.session?.options??[]},k=o.provider,v=Array.isArray(k)?k:typeof k=="string"&&k.length>0?[k]:[],_=v.join(", ")||(typeof k=="string"?k:""),x=o.options,b=["goals","daily"],A={goals:false,daily:false},z;if(!Array.isArray(x)&&typeof x=="object"&&x!==null){let R=x;if("goals"in R){let C=R.goals;typeof C=="string"||Array.isArray(C)?A.goals=C:A.goals=!!C;}"daily"in R&&(A.daily=!!R.daily);let S={};for(let[C,j]of Object.entries(R))b.includes(C)||(S[C]=j);if(Object.keys(S).length>0){let C=v.some(oe=>oe.startsWith("cli/")),j={};for(let[oe,X]of Object.entries(S)){let me={};if(Array.isArray(X))C&&(me.rawArgs=X);else if(typeof X=="object"&&X!==null){let Wn=X;Object.keys(Wn).length>0&&(me.named=Wn);}(me.named||me.rawArgs&&me.rawArgs.length>0)&&(j[oe]=me);}z=Object.keys(j).length>0?j:void 0;}}let L=Array.isArray(x)?x:void 0,I={};for(let[R,S]of Object.entries(u))I[R]={content:S.content??"",toc:S.toc,summary:S.summary,path:S.path};if(A.goals){let R=Y.join(this._projectRoot,"docs","goal"),S=await Ro(R,void 0,A.goals);S&&(I.active_goals={content:S});}if(A.daily){let R=Y.join(this._projectRoot,"docs","daily"),S=await Co(R);S&&(I.today_daily={content:S});}let $=t?.vars?.user_input??void 0,W=this._config?.settings?.dreaming?.continuity,G=W?.reuseReadOnly!==false,B=typeof W?.lookback=="number"?W.lookback:5,ee=typeof W?.maxEntryChars=="number"?W.maxEntryChars:8e3,Q=typeof W?.decayRate=="number"?W.decayRate:.5,U=t?.threadId??"",J=o.id,Z=G&&B>0&&U&&t?.messages&&t.messages.length>0?jo({threadId:U,agentId:J,lookback:B,maxEntryChars:ee,decayRate:Q}):new Map,ge=(t?.messages??[]).map(R=>{if(!R.isAssistant)return R;let S=R.metadata?.task_id;return !S||!Z.has(S)?R:{...R,activity_log:Z.get(S)}}),E={user_input:$,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??"",provider:_,providerList:v,model:o.inline?.model,workingDirectory:o.working_directory??o.workingDirectory??".",inline:{...o.inline??{},prompt:y},specialties:o.specialties??[],capabilities:o.capabilities??[],remote:o.remote??null,optionsByMode:z,optionsArray:L},agentMetadata:{specialties:o.specialties??[],capabilities:o.capabilities??[],description:o.description??""},contextOptions:A,documents:I,skills:t?.skills??[],session:w,env:g,vars:{security_key:f,...t?.vars??{}},props:{...a??{},...t?.messages&&t.messages.length>0?{showConversationHistory:true}:{}},platform:w.platform,mode:w.mode,thread_id:U,now:Ct(new Date),has_activity_log:Z.size>0,messages:ge,tools:this._tools.size>0?{list:Array.from(this._tools.values()).map(R=>({name:R.name,description:R.description,parameters:R.parameters})),json:JSON.stringify(Array.from(this._tools.values()).map(R=>({name:R.name,description:R.description,parameters:R.parameters})),null,2),count:this._tools.size}:null,metadata:{}};return this._layoutRenderer.render(d,E)}_filterToolsByMode(e){return e?e.map(t=>this._tools.get(t)).filter(t=>t!==void 0):Array.from(this._tools.values())}_resolveLayoutSpec(e,t){if(t!==void 0)return t;let r=e.inline?.layout;if(r!==void 0)return r;let o=this._config?.layouts?.default;return typeof o=="string"&&o?o:"crewx/default"}_extractLayoutId(e){if(typeof e=="string")return e;if("id"in e)return e.id;if("template"in e&&typeof e.template=="string"&&e.template.trim()){let t=`crewx/__inline_${Date.now()}`;return this._layoutLoader.registerLayout(t,e.template),t}return "crewx/default"}_extractLayoutProps(e,t,r){let o=e.inline?.layout,s=o&&typeof o=="object"&&"props"in o?o.props:void 0,i=r&&typeof r=="object"&&"id"in r?r.props:void 0;if(s||i)return {...s??{},...i??{}}}_getConversationProvider(){return this._plugins.find(t=>t.name==="conversation")?.conversationProvider}async _fetchHistoryMessages(e,t,r){if(r&&r.length>0)return r;if(!e)return;let o=this._getConversationProvider();if(o)try{let s=await o.fetchHistory(e,{currentTraceId:t});return s.messages.length===0?void 0:rn(s)}catch{return}}_resolveTimeout(e,t){let r=e==="query"?"CREWX_TIMEOUT_QUERY":"CREWX_TIMEOUT_EXECUTE";if(process.env[r]!=null&&process.env[r]!==""){let o=io();return e==="query"?o.queryMs:o.executeMs}if(t?.meta?.defaultTimeoutMs){let o=e==="query"?t.meta.defaultTimeoutMs.query:t.meta.defaultTimeoutMs.execute;if(o!==void 0)return o}return 8*36e5}_resolveIdleTimeout(e){let t=Fr();return t!==void 0?t:e?.meta?.defaultIdleMs!==void 0?e.meta.defaultIdleMs:6e5}_lookupCliAdapter(e){if(e.startsWith("cli/"))return exports.BUILTIN_ADAPTERS[e.slice(4)]}_resolveEffectiveCwd(e,t){return t?.cwd??(e.working_directory?Y.resolve(this._projectRoot,e.working_directory):this._projectRoot)}_buildFileRemoteOptions(e,t){let r={path:this._projectRoot,id:this._workspaceId,name:this._workspaceName,agentRef:e};return {...t,cwd:void 0,metadata:{...t?.metadata??{},crewx:{...t?.metadata?.crewx??{},callerWorkspace:r}},vars:{...t?.vars??{},crewx_caller_workspace_path:r.path,crewx_caller_workspace_id:r.id,crewx_caller_workspace_name:r.name}}}emitToolEvents(e,t,r,o,s,i,a){try{let l=this._lookupCliAdapter(r)?.parseEvent?.(o)??vt(new Date().toISOString(),o);for(let u of l)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,this._buildFileRemoteOptions(e,r));let s=bt.getStore()??tn(r?.trace),i=r?.taskId??Je("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null};return bt.run(d,async()=>{let l=Date.now(),u=new Date,g;try{g=Vt(e,Array.from(this._agents.values()));}catch(E){if(E instanceof xe){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 R=Date.now()-l,S={code:"AGENT_NOT_FOUND",message:E.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:R,error:S,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:S,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:R,taskId:i}}}throw E}d.callerAgentId=g.id;let f=Array.isArray(g.provider)?g.provider[0]??"cli/claude":g.provider,m=or(g.options,"query",f,nr(r?.overdrive)),y=m.active&&m.provider?m.provider:r?.provider??f,w=m.active&&m.model?m.model:r?.model??g.inline?.model;w&&w.includes("{{")&&(w=await this._templateEngine.render(w,{...r?.vars??{}}));let k=m.crossProvider?void 0:r?.resumeSessionId,v;try{v=Re(y,this._additionalArgsProvider);}catch(E){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 R=Date.now()-l,S={code:"PROVIDER_ERROR",message:E.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:R,error:S,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:S,meta:{agentId:g.id,provider:y,model:w,durationMs:R,taskId:i}}}let _=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),x;try{x=await this.renderAgentPromptFull(e,{session:{mode:"query",platform:r?.platform},vars:{user_input:t,...r?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(g,r)},messages:_,threadId:r?.threadId});}catch(E){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${E instanceof Error?E.message:String(E)}`);}let b,A,z,L=w,I=false,$=E=>{I||(I=true,this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"query",pid:E,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:L,provider:y,codingAgentCommand:b,renderedPrompt:x,metadata:{...r?.metadata??{},provider:y,...m.active?{overdrive:true}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},H=g.options,q=m.active?m.mode:H?.query?.mode,W=m.active?m.effort:H?.query?.effort,G=Array.isArray(H?.query?.tools)?H.query.tools:void 0,B=this._tools.size>0?this._filterToolsByMode(G):[],ee=(()=>{let E=H?.query;if(!E||Array.isArray(E))return;let{tools:R,effort:S,mode:C,...j}=E,oe=Object.entries(j).filter(([,X])=>X!=null);if(oe.length!==0)return Object.fromEntries(oe.map(([X,me])=>[X,String(me)]))})(),Q=g.inline?.max_steps;y.startsWith("api/")&&$();let U=false,J=0,Z=()=>{},ge=new Promise(E=>{Z=E;});this._activeTasks.set(i,{pid:void 0,done:ge});try{let E=await v.query(t,{model:w,effort:W,mode:q,context:r?.context,systemPrompt:x??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(H?.query)?H.query:void 0,resumeSessionId:k,tools:B.length>0?B:void 0,maxSteps:Q,configOptions:ee,timeoutMs:this._resolveTimeout("query",this._lookupCliAdapter(y)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(y)),cwd:this._resolveEffectiveCwd(g,r),env:{CREWX_AGENT_ID:g.id,CREWX_AGENT_ROLE:g.role??"",CREWX_AGENT_TEAM:g.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:y,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,u)},onPid:C=>{let j=this._activeTasks.get(i);j&&(j.pid=C),$(C);},onOutput:(C,j)=>{let oe=this._lookupCliAdapter(y);j==="stdout"&&oe?.suppressOutputLine?.(C)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:C,level:j}),j==="stdout"&&this.emitToolEvents(i,e,y,C,g.id,r?.threadId??"","");},onTaskLog:C=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",y,C);for(let j of C)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(j),level:"info"});},onCommand:C=>{b=C;},onUsage:C=>{A=C;},onExitCode:C=>{z=C;},onModel:C=>{L||(L=C);}});J=Br(A?.costUsd,A?.inputTokens,A?.outputTokens,A?.cachedInputTokens,L,new Date(l)),$();let R=Date.now()-l,S={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",result:E,durationMs:R,exitCode:z,inputTokens:A?.inputTokens,outputTokens:A?.outputTokens,cachedInputTokens:A?.cachedInputTokens,costUsd:J,model:L,metadata:Object.keys(S).length>0?S:void 0}),U=!0,{ok:!0,data:E,meta:{agentId:g.id,provider:y,model:w,durationMs:R,taskId:i}}}catch(E){if(E instanceof exports.ClientToolCallRequiredError){let C=Je("thd");return this._pendingThreads.set(C,{agentRef:g.id,providerStr:y,continuationState:E.continuationState,toolCall:E.toolCall,traceId:i,startMs:l,model:w}),U=true,{ok:true,status:"requires_action",data:"",toolCall:E.toolCall,threadId:C,meta:{agentId:g.id,provider:y,model:w,durationMs:Date.now()-l,taskId:i}}}$();let R=Date.now()-l,S={code:"QUERY_FAILED",message:E.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:R,error:S,exitCode:z,inputTokens:A?.inputTokens,outputTokens:A?.outputTokens,cachedInputTokens:A?.cachedInputTokens,costUsd:J,model:L,metadata:r?.metadata?{...r.metadata}:void 0}),U=true,{ok:false,data:"",error:S,meta:{agentId:g.id,provider:y,model:w,durationMs:R,taskId:i}}}finally{U||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:Date.now()-l,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:z??-1,inputTokens:A?.inputTokens,outputTokens:A?.outputTokens,cachedInputTokens:A?.cachedInputTokens,costUsd:J,model:L}),this._activeTasks.delete(i),Z();}})}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=Re(r.providerStr,this._additionalArgsProvider);if(!o.continueWithToolResults)return {ok:false,data:"",error:{code:"UNSUPPORTED",message:"Provider does not support client tool continuation"},meta:{agentId:r.agentRef,provider:r.providerStr,durationMs:0}};let s=t.map(i=>({...i,toolName:r.toolCall.toolCallId===i.toolCallId?r.toolCall.toolName:i.toolCallId}));try{let i=await o.continueWithToolResults(r.continuationState,s),a=Date.now()-r.startMs;return this.emit("task:end",{traceId:r.traceId,timestamp:new Date,agentRef:r.agentRef,mode:"query",result:i,durationMs:a}),{ok:!0,status:"complete",data:i,meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:a}}}catch(i){if(i instanceof exports.ClientToolCallRequiredError)return this._pendingThreads.set(e,{...r,continuationState:i.continuationState,toolCall:i.toolCall}),{ok:true,status:"requires_action",data:"",toolCall:i.toolCall,threadId:e,meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:Date.now()-r.startMs}};let a=Date.now()-r.startMs;return {ok:false,data:"",error:{code:"CONTINUE_FAILED",message:i.message},meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:a}}}}async execute(e,t,r){let o=await this.resolveFileRemoteTarget(e);if(o)return o.target.execute(o.agentRef,t,this._buildFileRemoteOptions(e,r));let s=bt.getStore()??tn(r?.trace),i=r?.taskId??Je("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null};return bt.run(d,async()=>{let l=Date.now(),u=new Date,g;try{g=Vt(e,Array.from(this._agents.values()));}catch(E){if(E instanceof xe){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 R=Date.now()-l,S={code:"AGENT_NOT_FOUND",message:E.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:R,error:S,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:S,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:R,taskId:i}}}throw E}d.callerAgentId=g.id;let f=Array.isArray(g.provider)?g.provider[0]??"cli/claude":g.provider,m=or(g.options,"execute",f,nr(r?.overdrive)),y=m.active&&m.provider?m.provider:r?.provider??f,w=m.active&&m.model?m.model:r?.model??g.inline?.model;w&&w.includes("{{")&&(w=await this._templateEngine.render(w,{...r?.vars??{}}));let k=m.crossProvider?void 0:r?.resumeSessionId,v;try{v=Re(y,this._additionalArgsProvider);}catch(E){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 R=Date.now()-l,S={code:"PROVIDER_ERROR",message:E.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:R,error:S,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:S,meta:{agentId:g.id,provider:y,model:w,durationMs:R,taskId:i}}}let _=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),x;try{x=await this.renderAgentPromptFull(e,{session:{mode:"execute",platform:r?.platform},vars:{user_input:t,...r?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(g,r)},messages:_,threadId:r?.threadId});}catch(E){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${E instanceof Error?E.message:String(E)}`);}let b,A,z,L=w,I=false,$=E=>{I||(I=true,this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"execute",pid:E,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:L,provider:y,codingAgentCommand:b,renderedPrompt:x,metadata:{...r?.metadata??{},provider:y,...m.active?{overdrive:true}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},H=g.options,q=m.active?m.mode:H?.execute?.mode,W=m.active?m.effort:H?.execute?.effort,G=Array.isArray(H?.execute?.tools)?H.execute.tools:void 0,B=this._tools.size>0?this._filterToolsByMode(G):[],ee=(()=>{let E=H?.execute;if(!E||Array.isArray(E))return;let{tools:R,effort:S,mode:C,...j}=E,oe=Object.entries(j).filter(([,X])=>X!=null);if(oe.length!==0)return Object.fromEntries(oe.map(([X,me])=>[X,String(me)]))})(),Q=g.inline?.max_steps;y.startsWith("api/")&&$();let U=false,J=0,Z=()=>{},ge=new Promise(E=>{Z=E;});this._activeTasks.set(i,{pid:void 0,done:ge});try{let E=await v.execute(t,{model:w,effort:W,mode:q,context:r?.context,systemPrompt:x??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(H?.execute)?H.execute:void 0,resumeSessionId:k,tools:B.length>0?B:void 0,maxSteps:Q,configOptions:ee,timeoutMs:this._resolveTimeout("execute",this._lookupCliAdapter(y)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(y)),cwd:this._resolveEffectiveCwd(g,r),env:{CREWX_AGENT_ID:g.id,CREWX_AGENT_ROLE:g.role??"",CREWX_AGENT_TEAM:g.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:y,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,u)},onPid:C=>{let j=this._activeTasks.get(i);j&&(j.pid=C),$(C);},onOutput:(C,j)=>{let oe=this._lookupCliAdapter(y);j==="stdout"&&oe?.suppressOutputLine?.(C)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:C,level:j}),j==="stdout"&&this.emitToolEvents(i,e,y,C,g.id,r?.threadId??"","");},onTaskLog:C=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",y,C);for(let j of C)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(j),level:"info"});},onCommand:C=>{b=C;},onUsage:C=>{A=C;},onExitCode:C=>{z=C;},onModel:C=>{L||(L=C);}});J=Br(A?.costUsd,A?.inputTokens,A?.outputTokens,A?.cachedInputTokens,L,new Date(l)),$();let R=Date.now()-l,S={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",result:E,durationMs:R,exitCode:z,inputTokens:A?.inputTokens,outputTokens:A?.outputTokens,cachedInputTokens:A?.cachedInputTokens,costUsd:J,model:L,metadata:Object.keys(S).length>0?S:void 0}),U=!0,{ok:!0,data:E,meta:{agentId:g.id,provider:y,model:w,durationMs:R,taskId:i}}}catch(E){$();let R=Date.now()-l,S={code:"EXECUTE_FAILED",message:E.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:R,error:S,exitCode:z,inputTokens:A?.inputTokens,outputTokens:A?.outputTokens,cachedInputTokens:A?.cachedInputTokens,costUsd:J,model:L,metadata:r?.metadata?{...r.metadata}:void 0}),U=true,{ok:false,data:"",error:S,meta:{agentId:g.id,provider:y,model:w,durationMs:R,taskId:i}}}finally{U||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:Date.now()-l,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:z??-1,inputTokens:A?.inputTokens,outputTokens:A?.outputTokens,cachedInputTokens:A?.cachedInputTokens,costUsd:J,model:L}),this._activeTasks.delete(i),Z();}})}};function as(n,e){let t=Tn(n)?n:void 0,r=Tn(e)?e:void 0;if(!(!t&&!r))return {...t??{},...r??{}}}function Tn(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Ld(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(!Tn(a))return;let d=a.id;if(typeof d=="string")return `id:${d}`;let l=a.name;if(typeof l=="string")return `name:${l}`},s=new Set;for(let a of r??[]){let d=o(a);d&&s.add(d);}let i=[];for(let a of t??[]){let d=o(a);d&&s.has(d)||i.push(a);}for(let a of r??[])i.push(a);return i}async function ds(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(()=>(gn(),Go));o(t?.api);}await Ud(n,e),jd(n,e),$d(n);}function $d(n){if(!n.some(r=>(Array.isArray(r.provider)?r.provider:[r.provider]).some(s=>s.startsWith("acp/"))))return;let{registerAcpProviders:t}=(_n(),Bn(Zo));t();}async function Ud(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}=await Promise.resolve().then(()=>(An(),ts)),s=new Map;for(let i of r)i.type==="remote"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&Ee("remote",o(s,Re));}function jd(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}=(En(),Bn(ss)),s=new Map;for(let i of r)i.type==="plugin"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&Ee("plugin",o(s));}c();var Sn=class{detach(e){}};c();var Fd="crewx:fs:",bn=class{prefix;store;constructor(e){this.prefix=e?.prefix??Fd,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,"/")}`}};c();ye();function cs(n){if(!n)return "";let e=n.lastIndexOf("/");return e===-1?n.trim():n.slice(e+1).trim()}function ls(n){return n?at(n).models.length>0:false}function In(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Hd(n,e,t){let r=n,o=false,s=[],i=()=>(o||(r={...n},o=true),r);ls(e)&&(typeof r.mode=="string"&&(ft(e).map(l=>l.id).includes(r.mode)||(delete i().mode,s.push("mode"))),typeof r.effort=="string"&&(yt(e,t).includes(r.effort)||(delete i().effort,s.push("effort"))));let a=r.overdrive;if(In(a)){let d=cs(typeof a.provider=="string"?a.provider:void 0),l=typeof a.model=="string"?a.model:void 0;if(ls(d)){let u,g=()=>(u||(u={...a},i().overdrive=u),u);typeof a.mode=="string"&&(ft(d).map(m=>m.id).includes(a.mode)||(delete g().mode,s.push("overdrive.mode"))),typeof a.effort=="string"&&(yt(d,l).includes(a.effort)||(delete g().effort,s.push("overdrive.effort")));}}return {block:r,removed:s}}function qd(n){let{options:e}=n;if(!In(e))return {options:e,changed:false,removed:[]};let t=cs(n.provider),r=[],o=e,s=false,i=()=>(s||(o={...e},s=true),o);for(let a of ["query","execute"]){let d=e[a];if(!In(d))continue;let{block:l,removed:u}=Hd(d,t,n.model);u.length>0&&(i()[a]=l,r.push(...u.map(g=>`${a}.${g}`)));}return {options:o,changed:r.length>0,removed:r}}c();var Wd="https://api.crewx.dev/v1/models",Bd=3600*1e3,us=0;async function zd(n){let e=n?.ttlMs??Bd,t=Date.now();if(!(t-us<e)){us=t;try{let r=await fetch(n?.endpoint??Wd);if(!r.ok)return;let o=await r.json();if(!o?.models||typeof o.models!="object")return;let s={};for(let[i,a]of Object.entries(o.models))a!=null&&(s[i]={input:a.input,cachedInput:a.cachedInput,output:a.output});po(s);}catch{}}}c();ye();var Kd="https://api.crewx.dev/v1/models",Vd=900*1e3,ps=0;async function Gd(n){let e=n?.ttlMs??Vd,t=Date.now();if(!(t-ps<e)){ps=t;try{let r=await fetch(n?.endpoint??Kd);if(!r.ok)return;let o=await r.json();if(!o?.providers||typeof o.providers!="object")return;let s={};for(let[i,a]of Object.entries(o.providers)){let d=Array.isArray(a)?a:a.models??[],l=Array.isArray(a)?[]:a.modes??[],u=Array.isArray(a)?[]:a.effort??[],g=Array.isArray(a)?{}:a.modelOverrides??{},f=d.filter(m=>m!=null&&typeof m.id=="string").map(m=>({id:m.id,name:m.name??m.id,...m.description!=null?{description:m.description}:{}}));s[i]={models:f,modes:l.filter(m=>m!=null&&typeof m.id=="string").map(m=>({id:m.id,name:m.name??m.id,...m.description!=null?{description:m.description}:{}})),effort:u.filter(m=>typeof m=="string"),modelOverrides:g};}Sr(s);}catch{}}}c();function Jd(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))}c();var On=["codex","claude","opencode","antigravity","copilot"];function Xd(n){let e=n.indexOf("/");return e===-1?n:n.slice(e+1)}function Mn(n){let e=Xd(n),t=On.indexOf(e);return t===-1?On.length:t}function jt(n,e){return Mn(n)-Mn(e)}var Yd=new Set(["claude","copilot","codex","opencode"]);function Qd(n){if(!n)return "";if(n.startsWith("acp/")){let e=n.slice(4);if(Yd.has(e))return `cli/${e}`}return n}ye();we();pn();gn();c();mn();Oe();c();fr();_r();ye();var Zd="model",el="mode",tl="thought_level";function Nn(n){if(n.length===0)return [];if(n[0]?.group!=null){let e=[];for(let t of n)for(let r of t.options??[])e.push(r);return e}return n}function rl(n,e){let t=new Map;for(let r of [...n,...e])t.has(r.id)||t.set(r.id,r);return Array.from(t.values())}function nl(n,e,t,r){let o=t.agentInfo?.name,s=e??o??n,i=r.configOptions??[],d=(r.modes?.availableModes??[]).map(v=>({id:v.id,name:v.name,...v.description!=null?{description:v.description}:{}})),l=[];for(let v of i)if(v.category?.trim().toLowerCase()===el&&v.options!=null)for(let _ of Nn(v.options))_.value!=null&&l.push({id:_.value,name:_.name??_.value});let u=rl(d,l),g=[];for(let v of i)if(v.category?.trim().toLowerCase()===tl&&v.type==="select")for(let _ of Nn(v.options??[]))_.value!=null&&g.push(_.value);if(n==="claude"){let v=ht().map(x=>({id:x.id,name:x.name})),_=gs(t);return ms(n,{models:v,modes:u,availableModelsCount:0,configModelsCount:0,skipModelWarn:true}),{id:`acp/${n}`,name:s,modes:u,effort:g,models:v,capabilities:_}}let m=(r.models?.availableModels??[]).map(v=>({id:v.modelId})),y=[];for(let v of i)if(v.category?.trim().toLowerCase()===Zd&&v.options!=null)for(let _ of Nn(v.options))_.value!=null&&y.push({id:_.value,..._.name!=null?{name:_.name}:{}});let w=wt(m,y);ms(n,{models:w,modes:u,availableModelsCount:m.length,configModelsCount:y.length,skipModelWarn:false});let k=gs(t);return {id:`acp/${n}`,name:s,modes:u,effort:g,models:w,capabilities:k}}function gs(n){let e=n.agentCapabilities??{};return {loadSession:e.loadSession??false,image:e.promptCapabilities?.image??false,audio:e.promptCapabilities?.audio??false,mcp:e.mcpCapabilities!=null}}function ms(n,e){!e.skipModelWarn&&e.models.length===0&&console.warn(`[acp] ${n} meta: models empty (availableModels=${e.availableModelsCount}, configOptions[model]=${e.configModelsCount})`),e.modes.length===0&&console.warn(`[acp] ${n} meta: modes empty`);}async function fs(n){let e=exports.ACP_ADAPTERS[n];if(!e)return null;let t=e.meta?.displayName,r=new exports.AcpConnection({spawn:e.spawn,cwd:process.cwd()});try{await r.connect(e.clientInfo);let o=r.initResponse;if(!o)return null;let s=e.buildSessionParams({cwd:process.cwd()}),i=await r.newSessionRaw(s);return nl(n,t,o,i)}catch(o){return console.warn(`[acp] ${n} meta query failed: ${o instanceof Error?o.message:String(o)}`),null}finally{await r.dispose();}}async function ol(){let n=Object.keys(exports.ACP_ADAPTERS),e=await Promise.allSettled(n.map(r=>fs(r))),t=[];for(let r of e)r.status==="fulfilled"&&r.value!==null&&t.push(r.value);return t.sort((r,o)=>jt(r.id,o.id))}fr();fn();_r();_n();Rr();Ie();c();Ie();ye();function il(n){return n.charAt(0).toUpperCase()+n.slice(1)}async function ys(){return new Promise(n=>{child_process.execFile("opencode",["models"],{timeout:5e3,maxBuffer:1048576},(t,r)=>{if(t){n([]);return}let o=r.split(`
|
|
303
|
-
`).map(s=>s.trim()).filter(s=>s.length>0).map(s=>({id:s}));n(o);}).on("error",()=>n([]));})}function
|
|
297
|
+
`).map(a=>({threadId:a.thread_id,agentId:a.agent_id,startedAt:a.started_at,status:a.status,error:a.error,exitCode:a.exit_code}))}catch(s){throw new I("DB_ERROR","Failed to get tasks for report",s)}finally{o.close();}}};var sd=new Set(["Read","Grep","Find","Glob"]),id=["git status","git log","git branch","git diff --stat","git show","git remote","git rev-parse","git ls-files","pwd","ls ","echo ","cat ","head ","tail ","npx crewx memory index","npx crewx memory find","npx crewx memory get","npx crewx doc toc","npx crewx doc section","npx crewx doc status","npx crewx search","npx skill tsserver find","npx skill tsserver refs","npx skill tsserver type","crewx memory index","crewx memory find","crewx memory get","crewx doc toc","crewx doc section","crewx doc status","crewx search","crewx agent ls","crewx agent list"],ad=[/\bgit\s+(commit|push|pull|merge|rebase|reset|checkout|switch|add|rm)\b/,/\bnpm\s+(install|ci|publish|run\s+(test|lint|build))\b/,/\bnpx\s+tsc\b/,/\bpnpm\s+(install|run)\b/,/\bvitest\b/,/\bjest\b/];function dd(n){let e=n.toLowerCase();return e==="bash"||e==="terminal"?"Bash":e==="read"||e==="view"?"Read":e==="edit"||e==="apply_patch"?"Edit":e==="write"?"Write":e==="grep"||e==="rg"?"Grep":e==="glob"||e==="find"?"Find":n}function ld(n,e){if(sd.has(n))return true;if(n!=="Bash"||!e)return false;let t=e.split(`
|
|
298
|
+
`)[0].trimStart();return ad.some(r=>r.test(t))?false:id.some(r=>t.startsWith(r))}function yr(n){return n.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function cd(n,e,t){if(n!=="Read"||!e)return "ok";let o=e.split(`
|
|
299
|
+
`).find(s=>s.trim()&&!s.startsWith("Read "))?.trim()??e.trim();if(!o)return "unknown";try{let s=qo__namespace.statSync(o);if(t){let i=Date.parse(t);if(!Number.isNaN(i)&&s.mtimeMs>i)return "stale"}return "ok"}catch{return "unknown"}}function ud(n){let e=new Set;for(let t of n)try{let r=JSON.parse(t);r.type&&e.add(r.type);}catch{}return e.has("turn.started")||e.has("thread.started")?"codex":e.has("assistant.message_delta")?"copilot":e.has("step_start")&&e.has("step_finish")?"opencode":e.has("system")&&e.has("result")?"claude":e.has("init")&&e.has("message")?"gemini":e.has("result")&&e.has("assistant")?"claude":null}function pd(n){if(!Array.isArray(n))return [];let e=n,t=e.filter(a=>a.level==="stdout"&&a.message).map(a=>a.message),r=ud(t),o=[];for(let a of e)a.level==="info"&&a.message?o.push(...pe(a.message,a.timestamp)):a.level==="stdout"&&a.message&&r&&o.push(...kt("",a.message,r));let s=new Map,i=[];for(let a of o)if(a.type==="tool_use"){let d={tool:dd(a.toolName??""),input:a.toolInput??null,result:null,isError:false},l=a.toolUseId;if(l){if(s.has(l)){s.get(l).input=d.input;continue}s.set(l,d);}i.push(d);}else if(a.type==="tool_result"){if(a.toolUseId&&s.has(a.toolUseId)){let d=s.get(a.toolUseId);d.isError=a.isError===true,d.result=a.resultPreview??null;}else for(let d=i.length-1;d>=0;d--)if(i[d].result===null){i[d].isError=a.isError===true,i[d].result=a.resultPreview??null;break}}return i}function gd(n,e){let t=pd(n),r=[];for(let o of t){let s=o.tool==="Bash"?o.input?.split(`
|
|
300
|
+
`)[0]?.slice(0,150)??null:o.input?.slice(0,150)??null,i=ld(o.tool,o.input)&&!o.isError;r.push({tool:o.tool,cmd:s,result:o.result,status:cd(o.tool,o.input,e),reusable:i});}return r}function md(n,e,t){let r=["<activity_log>"];if(n.length===0&&e===0)r.push(" <!-- no activity found in previous tasks -->");else {r.push(" <!-- tool activity from previous tasks -->"),e>0&&r.push(` <!-- ${e} entries omitted (cap) -->`);for(let o of n){let s=`tool="${yr(o.tool)}"`,i=o.cmd?` cmd="${yr(o.cmd)}"`:"",a="";if(o.reusable&&(a=o.status==="stale"?' reused="stale"':' reused="ok"'),o.reusable&&o.status==="stale")r.push(` <entry ${s}${i}${a}>\u26A0\uFE0F changed since \u2014 re-read</entry>`);else if(o.result){r.push(` <entry ${s}${i}${a}>`);let d=t&&t>0?t:8e3,l=o.result;l.length>d?r.push(yr(l.slice(0,d))+` \u2026 [truncated, ${d}/${l.length} chars shown]`):r.push(yr(l)),r.push(" </entry>");}else r.push(` <entry ${s}${i}${a} />`);}}return r.push("</activity_log>"),r}function Wo(n){let{threadId:e,agentId:t,lookback:r,maxEntryChars:o,decayRate:s}=n;if(!r||!e||!t)return new Map;let i;try{i=new Dt().findTasksByThread(e).filter(f=>!f.parent_task_id&&f.agent_id===t).sort((f,m)=>m.started_at>f.started_at?1:-1).slice(0,Math.min(r,5));}catch{return new Map}if(!i.length)return new Map;let a=[];for(let g of i){let f=[];try{let m=JSON.parse(g.logs??"[]");Array.isArray(m)&&(f=m);}catch{}a.push({taskId:g.id,entries:gd(f,g.completed_at)});}let d=new Map,l=typeof s=="number"&&s>0&&s<=1?s:1,u=1e3;for(let g=0;g<a.length;g++){let{taskId:f,entries:m}=a[g];if(m.length===0)continue;let h=Math.max(Math.floor((o??8e3)*Math.pow(l,g)),u),w=Math.max(0,m.length-200),A=w>0?m.slice(w):m,v=md(A,w,h);d.set(f,v.join(`
|
|
301
|
+
`));}return d}c();c();var fd={agentId:zod.z.string().describe("The agent ID to query"),query:zod.z.string().describe("The query message to send"),context:zod.z.string().optional().describe("Additional context"),thread:zod.z.string().optional().describe("Thread ID for conversation continuity")},yd={agentId:zod.z.string().describe("The agent ID to execute"),task:zod.z.string().describe("The task description to execute"),context:zod.z.string().optional().describe("Additional context"),thread:zod.z.string().optional().describe("Thread ID for conversation continuity")};function Bo(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",fd,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)",yd,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}});}c();function zo(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 Ko(n,e){return e?await e(n)?null:new Response(JSON.stringify({error:"Unauthorized"}),{status:401,headers:{"Content-Type":"application/json"}}):null}function vd(n,e){let t=new mcp_js.McpServer({name:"crewx-mcp-server",version:"1.0.0"},{capabilities:{tools:{}}});return Bo(t,n,e),t}function gn(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=zo(o);if(s)return s;let i=await Ko(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=vd(n,t),l=new webStandardStreamableHttp_js.WebStandardStreamableHTTPServerTransport({sessionIdGenerator:()=>crypto.randomUUID(),onsessioninitialized:u=>{r.set(u,{transport:l,server:d});},onsessionclosed:u=>{r.delete(u);},enableJsonResponse:true});return await d.connect(l),l.handleRequest(o)}}c();function Go(n){let e=q__namespace.resolve(n);return process.platform==="win32"&&(e=e.replace(/\\/g,"/"),e=e.replace(/^([A-Z]):/,(t,r)=>`${r.toLowerCase()}:`)),e.length>1&&!/^[a-zA-Z]:\/$/.test(e)&&(e=e.replace(/\/+$/,"")),e}function mn(n){let e=Go(n);return crypto$1.createHash("sha256").update(e).digest("hex")}function Kd(n){return n?n.settings?.template?.exec:void 0}function Vd(){try{let n=new Uint8Array(8);return globalThis.crypto.getRandomValues(n),Array.from(n,e=>e.toString(16).padStart(2,"0")).join("")}catch{let{randomBytes:n}=te("crypto");return n(8).toString("hex")}}var bn=class n extends Ot{_agents;_templateEngine;_documentLoader;_layoutLoader;_layoutRenderer;_config;_projectRoot;_workspaceId;_workspaceName;_plugins=[];_tools=new Map;_activeAdapters=new Map;_pendingThreads=new Map;_activeTasks=new Map;_remoteFactory;_remoteTargets=new Map;_additionalArgsProvider;constructor(e,t={},r,o,s){super(),this._agents=new Map(e.map(d=>[d.id,d])),this._config=r,this._projectRoot=s??(typeof process<"u"?process.cwd():"/");let i=s??(typeof process<"u"?process.env.CREWX_WORKSPACE??process.cwd():"/");this._workspaceId=mn(i),this._workspaceName=q.basename(i);let a=Kd(r);this._templateEngine=new Pt({execPolicy:t.execPolicy??a}),this._documentLoader=o??new Ye,this._layoutLoader=new Tt({templatesPath:it()}),this._layoutRenderer=new It,this._remoteFactory=t.remoteFactory,this._additionalArgsProvider=t.additionalArgsProvider;}async resolveFileRemoteTarget(e){let t=this.getAgent(e),r=Array.isArray(t?.provider)?t?.provider[0]:t?.provider;if(!r?.startsWith("remote/"))return null;let o=r.slice(7),s=this.getRemoteProviderConfig(o);if(!s?.location?.startsWith("file://"))return null;let i=q.resolve(s.location.replace("file://","")),a=s.external_agent_id??e.replace(/^@/,""),d=this._remoteTargets.get(i);d||(d=(this._remoteFactory??(m=>n.loadYaml(m)))(i),this._remoteTargets.set(i,d),d.catch(()=>this._remoteTargets.delete(i)));let l=await d,u=l.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:l,agentRef:"@"+a}}static async loadBuiltInConfig(e){let{yamlPath:t,dir:r}=Cr(),o;try{o=qo.readFileSync(t,"utf-8");}catch(i){throw new Error(`[@crewx/sdk] Cannot read built-in config: ${t}
|
|
302
|
+
${i.message}`)}let s=Vt(o);if(s.documents&&typeof s.documents=="object"){let i={};for(let[a,d]of Object.entries(s.documents))if(d&&typeof d=="object"){let l=d;typeof l.path=="string"&&!q.isAbsolute(l.path)?i[a]={...l,path:q.resolve(r,l.path)}:i[a]=l;}else i[a]=d;return {...s,documents:i}}return s}static mergeCrewxConfig(e,t){let r=new Map;for(let _ of e.agents??[])r.set(_.id,_);for(let _ of t.agents??[])r.has(_.id)&&console.warn(`[agent-loader] User agent "${_.id}" overrides built-in`),r.set(_.id,_);let o=Array.from(r.values()),s={...e.layouts??{},...t.layouts??{}},i={...e.documents??{},...t.documents??{}},a=e,d=t,l=us(a.vars,d.vars),u=us(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 f=[...e.hooks??[],...t.hooks??[]],m=Gd(a.providers,d.providers),h={...e},w={...t};for(let _ of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete h[_],delete w[_];let v={...{...h,...w},agents:o,layouts:s,documents:i,skills:g};return f.length>0&&(v.hooks=f),l!==void 0&&(v.vars=l),u!==void 0&&(v.settings=u),m!==void 0&&(v.providers=m),v}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=Gt(e);s=n.mergeCrewxConfig(u,g),i=q.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=q.dirname(e);}let a=new Ye(r);await a.load(s.documents,i);let d=s.agents??[];return await ps(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 Ye(o);await a.load(i.documents,r??(typeof process<"u"?process.cwd():"/"));let d=i.agents??[];return await ps(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=en(t);return q.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 gn(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??tn(r),a=e.defaultMode??"query",d=t.manifest.platform,l=e.agentRunner??{run:async(m,h,w)=>{let v=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${m}`,h,{threadId:w?.threadId,platform:d});return {output:v.ok?v.data:v.error?.message??""}}},u=e.onInbound??(async m=>{let h=m.routingHints?.agentId??e.defaultAgent;if(!h)return {accepted:false,reason:"no_agent"};let{output:w}=await l.run(h,m.text,{threadId:m.threadId});return {accepted:true,output:w}}),g=nn({instanceId:r,config:o,capabilities:s,db:i,agentRunner:l,onInbound:u}),f={adapter:t,ctx:g,state:"starting"};this._activeAdapters.set(r,f),this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"starting",timestamp:new Date});try{await t.start(g),f.state="started",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"started",timestamp:new Date});}catch(m){throw f.state="failed",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"failed",error:m instanceof Error?m:new Error(String(m)),timestamp:new Date}),this._activeAdapters.delete(r),m}}async unregisterChannelAdapter(e){let t=this._activeAdapters.get(e);if(t){t.state="stopping",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"stopping",timestamp:new Date});try{await t.adapter.stop(t.ctx),t.state="stopped",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"stopped",timestamp:new Date});}catch(r){t.state="failed",this.emit("adapter:lifecycle",{adapterId:t.adapter.manifest.id,instanceId:e,state:"failed",error:r instanceof Error?r:new Error(String(r)),timestamp:new Date});}finally{this._activeAdapters.delete(e);}}}async stopAllAdapters(e={}){let t=e.timeoutMs??1e4,r=Array.from(this._activeAdapters.keys()),o=await Promise.allSettled(r.map(s=>Promise.race([this.unregisterChannelAdapter(s),new Promise((i,a)=>setTimeout(()=>a(new Error(`Adapter stop timeout: ${s}`)),t))])));for(let s=0;s<o.length;s++)o[s].status==="rejected"&&console.error(`[crewx] adapter stop error (${r[s]}): ${o[s].reason}`);}abortAll(){for(let[e,t]of this._activeTasks)if(t.pid!==void 0)try{process.platform==="win32"?process.kill(t.pid,"SIGTERM"):process.kill(-t.pid,"SIGTERM");}catch(r){console.error(`[crewx] abort task ${e} (pid=${t.pid}) error: ${r instanceof Error?r.message:String(r)}`);}}async _drainActiveTasks(e){let t=Array.from(this._activeTasks.values()).map(r=>r.done);t.length!==0&&await Promise.race([Promise.allSettled(t),new Promise(r=>setTimeout(r,e).unref())]);}async close(){this.abortAll(),await this._drainActiveTasks(At+1e3),await this.stopAllAdapters({timeoutMs:1e4});let e=[...this._remoteTargets.values()];this._remoteTargets.clear(),await Promise.allSettled(e.map(async r=>{try{await(await r).close();}catch(o){console.error(`[crewx] remote target close error: ${o instanceof Error?o.message:String(o)}`);}}));let t=[...this._plugins].reverse();for(let r of t)try{await r.detach(this);}catch(o){console.error(`[crewx] plugin ${r.name} detach error: ${o instanceof Error?o.message:String(o)}`);}this._plugins.length=0;}filterAgents(e){let t=a=>a?a.split(",").map(d=>d.trim().toLowerCase()).filter(Boolean):void 0,r=t(e.role),o=t(e.team),s=t(e.provider),i=Array.from(this._agents.values());return r&&(i=i.filter(a=>a.role&&r.some(d=>ye(a.role.toLowerCase(),d)))),o&&(i=i.filter(a=>a.team&&o.some(d=>ye(a.team.toLowerCase(),d)))),s&&(i=i.filter(a=>(Array.isArray(a.provider)?a.provider:[a.provider]).some(l=>s.some(u=>ye(l.toLowerCase(),u))))),i}renderAgentPrompt(e){let t=e.startsWith("@")?e.slice(1):e,r=this._agents.get(t);if(!r)throw new Ee(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 Ee(r,Array.from(this._agents.keys()));let s=this._resolveLayoutSpec(o,t?.layout),i=this._extractLayoutId(s),a=this._extractLayoutProps(o,s,t?.layout),d=this._layoutLoader.load(i,a),l=o.inline?.prompt??o.inline?.system_prompt??o.description??`You are an expert ${r}.`,u=await this._documentLoader.buildContext(),g=t?.env??(typeof process<"u"?process.env:{}),f=t?.vars?.security_key??Vd(),m={...t?.vars??{},documents:u,env:g,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??""}},h=await this._templateEngine.render(l,m),w={mode:t?.session?.mode??"query",platform:t?.session?.platform??"cli",options:t?.session?.options??[]},A=o.provider,v=Array.isArray(A)?A:typeof A=="string"&&A.length>0?[A]:[],_=v.join(", ")||(typeof A=="string"?A:""),x=o.options,b=["goals","daily"],k={goals:false,daily:false},j;if(!Array.isArray(x)&&typeof x=="object"&&x!==null){let R=x;if("goals"in R){let C=R.goals;typeof C=="string"||Array.isArray(C)?k.goals=C:k.goals=!!C;}"daily"in R&&(k.daily=!!R.daily);let S={};for(let[C,U]of Object.entries(R))b.includes(C)||(S[C]=U);if(Object.keys(S).length>0){let C=v.some(se=>se.startsWith("cli/")),U={};for(let[se,Z]of Object.entries(S)){let fe={};if(Array.isArray(Z))C&&(fe.rawArgs=Z);else if(typeof Z=="object"&&Z!==null){let Kn=Z;Object.keys(Kn).length>0&&(fe.named=Kn);}(fe.named||fe.rawArgs&&fe.rawArgs.length>0)&&(U[se]=fe);}j=Object.keys(U).length>0?U:void 0;}}let W=Array.isArray(x)?x:void 0,N={};for(let[R,S]of Object.entries(u))N[R]={content:S.content??"",toc:S.toc,summary:S.summary,path:S.path};if(k.goals){let R=q.join(this._projectRoot,"docs","goal"),S=await Po(R,void 0,k.goals);S&&(N.active_goals={content:S});}if(k.daily){let R=q.join(this._projectRoot,"docs","daily"),S=await To(R);S&&(N.today_daily={content:S});}let F=t?.vars?.user_input??void 0,K=this._config?.settings?.dreaming?.continuity,$=K?.reuseReadOnly!==false,J=typeof K?.lookback=="number"?K.lookback:5,Q=typeof K?.maxEntryChars=="number"?K.maxEntryChars:8e3,B=typeof K?.decayRate=="number"?K.decayRate:.5,L=t?.threadId??"",G=o.id,V=$&&J>0&&L&&t?.messages&&t.messages.length>0?Wo({threadId:L,agentId:G,lookback:J,maxEntryChars:Q,decayRate:B}):new Map,me=(t?.messages??[]).map(R=>{if(!R.isAssistant)return R;let S=R.metadata?.task_id;return !S||!V.has(S)?R:{...R,activity_log:V.get(S)}}),E={user_input:F,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??"",provider:_,providerList:v,model:o.inline?.model,workingDirectory:o.working_directory??o.workingDirectory??".",inline:{...o.inline??{},prompt:h},specialties:o.specialties??[],capabilities:o.capabilities??[],remote:o.remote??null,optionsByMode:j,optionsArray:W},agentMetadata:{specialties:o.specialties??[],capabilities:o.capabilities??[],description:o.description??""},contextOptions:k,documents:N,skills:t?.skills??[],session:w,env:g,vars:{security_key:f,...t?.vars??{}},props:{...a??{},...t?.messages&&t.messages.length>0?{showConversationHistory:true}:{}},platform:w.platform,mode:w.mode,thread_id:L,now:St(new Date),has_activity_log:V.size>0,messages:me,tools:this._tools.size>0?{list:Array.from(this._tools.values()).map(R=>({name:R.name,description:R.description,parameters:R.parameters})),json:JSON.stringify(Array.from(this._tools.values()).map(R=>({name:R.name,description:R.description,parameters:R.parameters})),null,2),count:this._tools.size}:null,metadata:{}};return this._layoutRenderer.render(d,E)}_filterToolsByMode(e){return e?e.map(t=>this._tools.get(t)).filter(t=>t!==void 0):Array.from(this._tools.values())}_resolveLayoutSpec(e,t){if(t!==void 0)return t;let r=e.inline?.layout;if(r!==void 0)return r;let o=this._config?.layouts?.default;return typeof o=="string"&&o?o:"crewx/default"}_extractLayoutId(e){if(typeof e=="string")return e;if("id"in e)return e.id;if("template"in e&&typeof e.template=="string"&&e.template.trim()){let t=`crewx/__inline_${Date.now()}`;return this._layoutLoader.registerLayout(t,e.template),t}return "crewx/default"}_extractLayoutProps(e,t,r){let o=e.inline?.layout,s=o&&typeof o=="object"&&"props"in o?o.props:void 0,i=r&&typeof r=="object"&&"id"in r?r.props:void 0;if(s||i)return {...s??{},...i??{}}}_getConversationProvider(){return this._plugins.find(t=>t.name==="conversation")?.conversationProvider}async _fetchHistoryMessages(e,t,r){if(r&&r.length>0)return r;if(!e)return;let o=this._getConversationProvider();if(o)try{let s=await o.fetchHistory(e,{currentTraceId:t});return s.messages.length===0?void 0:sn(s)}catch{return}}_resolveTimeout(e,t){let r=e==="query"?"CREWX_TIMEOUT_QUERY":"CREWX_TIMEOUT_EXECUTE";if(process.env[r]!=null&&process.env[r]!==""){let o=lo();return e==="query"?o.queryMs:o.executeMs}if(t?.meta?.defaultTimeoutMs){let o=e==="query"?t.meta.defaultTimeoutMs.query:t.meta.defaultTimeoutMs.execute;if(o!==void 0)return o}return 8*36e5}_resolveIdleTimeout(e){let t=Wr();return t!==void 0?t:e?.meta?.defaultIdleMs!==void 0?e.meta.defaultIdleMs:6e5}_lookupCliAdapter(e){if(e.startsWith("cli/"))return exports.BUILTIN_ADAPTERS[e.slice(4)]}_resolveEffectiveCwd(e,t){return t?.cwd??(e.working_directory?q.resolve(this._projectRoot,e.working_directory):this._projectRoot)}_buildFileRemoteOptions(e,t){let r={path:this._projectRoot,id:this._workspaceId,name:this._workspaceName,agentRef:e};return {...t,cwd:void 0,metadata:{...t?.metadata??{},crewx:{...t?.metadata?.crewx??{},callerWorkspace:r}},vars:{...t?.vars??{},crewx_caller_workspace_path:r.path,crewx_caller_workspace_id:r.id,crewx_caller_workspace_name:r.name}}}emitToolEvents(e,t,r,o,s,i,a){try{let l=this._lookupCliAdapter(r)?.parseEvent?.(o)??kt(new Date().toISOString(),o);for(let u of l)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,this._buildFileRemoteOptions(e,r));let s=Mt.getStore()??on(r?.trace),i=r?.taskId??Ze("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null};return Mt.run(d,async()=>{let l=Date.now(),u=new Date,g;try{g=Xt(e,Array.from(this._agents.values()));}catch(E){if(E instanceof Ee){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 R=Date.now()-l,S={code:"AGENT_NOT_FOUND",message:E.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:R,error:S,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:S,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:R,taskId:i}}}throw E}d.callerAgentId=g.id;let f=Array.isArray(g.provider)?g.provider[0]??"cli/claude":g.provider,m=ir(g.options,"query",f,sr(r?.overdrive)),h=m.active&&m.provider?m.provider:r?.provider??f,w=m.active&&m.model?m.model:r?.model??g.inline?.model;w&&w.includes("{{")&&(w=await this._templateEngine.render(w,{...r?.vars??{}}));let A=m.crossProvider?void 0:r?.resumeSessionId,v;try{v=Pe(h,this._additionalArgsProvider);}catch(E){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 R=Date.now()-l,S={code:"PROVIDER_ERROR",message:E.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:R,error:S,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:S,meta:{agentId:g.id,provider:h,model:w,durationMs:R,taskId:i}}}let _=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),x;try{x=await this.renderAgentPromptFull(e,{session:{mode:"query",platform:r?.platform},vars:{user_input:t,...r?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(g,r)},messages:_,threadId:r?.threadId});}catch(E){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${E instanceof Error?E.message:String(E)}`);}let b,k,j,W=w,N=false,F=E=>{N||(N=true,this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"query",pid:E,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:W,provider:h,codingAgentCommand:b,renderedPrompt:x,metadata:{...r?.metadata??{},provider:h,...m.active?{overdrive:true}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},z=g.options,ee=m.active?m.mode:z?.query?.mode,K=m.active?m.effort:z?.query?.effort,$=Array.isArray(z?.query?.tools)?z.query.tools:void 0,J=this._tools.size>0?this._filterToolsByMode($):[],Q=(()=>{let E=z?.query;if(!E||Array.isArray(E))return;let{tools:R,effort:S,mode:C,...U}=E,se=Object.entries(U).filter(([,Z])=>Z!=null);if(se.length!==0)return Object.fromEntries(se.map(([Z,fe])=>[Z,String(fe)]))})(),B=g.inline?.max_steps;h.startsWith("api/")&&F();let L=false,G=0,V=()=>{},me=new Promise(E=>{V=E;});this._activeTasks.set(i,{pid:void 0,done:me});try{let E=await v.query(t,{model:w,effort:K,mode:ee,context:r?.context,systemPrompt:x??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(z?.query)?z.query:void 0,resumeSessionId:A,tools:J.length>0?J:void 0,maxSteps:B,configOptions:Q,timeoutMs:this._resolveTimeout("query",this._lookupCliAdapter(h)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(h)),cwd:this._resolveEffectiveCwd(g,r),env:{CREWX_AGENT_ID:g.id,CREWX_AGENT_ROLE:g.role??"",CREWX_AGENT_TEAM:g.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:h,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,u)},onPid:C=>{let U=this._activeTasks.get(i);U&&(U.pid=C),F(C);},onOutput:(C,U)=>{let se=this._lookupCliAdapter(h);U==="stdout"&&se?.suppressOutputLine?.(C)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:C,level:U}),U==="stdout"&&this.emitToolEvents(i,e,h,C,g.id,r?.threadId??"","");},onTaskLog:C=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",h,C);for(let U of C)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(U),level:"info"});},onCommand:C=>{b=C;},onUsage:C=>{k=C;},onExitCode:C=>{j=C;},onModel:C=>{W||(W=C);}});G=Vr(k?.costUsd,k?.inputTokens,k?.outputTokens,k?.cachedInputTokens,W,new Date(l)),F();let R=Date.now()-l,S={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",result:E,durationMs:R,exitCode:j,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:G,model:W,metadata:Object.keys(S).length>0?S:void 0}),L=!0,{ok:!0,data:E,meta:{agentId:g.id,provider:h,model:w,durationMs:R,taskId:i}}}catch(E){if(E instanceof exports.ClientToolCallRequiredError){let C=Ze("thd");return this._pendingThreads.set(C,{agentRef:g.id,providerStr:h,continuationState:E.continuationState,toolCall:E.toolCall,traceId:i,startMs:l,model:w}),L=true,{ok:true,status:"requires_action",data:"",toolCall:E.toolCall,threadId:C,meta:{agentId:g.id,provider:h,model:w,durationMs:Date.now()-l,taskId:i}}}F();let R=Date.now()-l,S={code:"QUERY_FAILED",message:E.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:R,error:S,exitCode:j,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:G,model:W,metadata:r?.metadata?{...r.metadata}:void 0}),L=true,{ok:false,data:"",error:S,meta:{agentId:g.id,provider:h,model:w,durationMs:R,taskId:i}}}finally{L||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:Date.now()-l,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:j??-1,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:G,model:W}),this._activeTasks.delete(i),V();}})}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=Pe(r.providerStr,this._additionalArgsProvider);if(!o.continueWithToolResults)return {ok:false,data:"",error:{code:"UNSUPPORTED",message:"Provider does not support client tool continuation"},meta:{agentId:r.agentRef,provider:r.providerStr,durationMs:0}};let s=t.map(i=>({...i,toolName:r.toolCall.toolCallId===i.toolCallId?r.toolCall.toolName:i.toolCallId}));try{let i=await o.continueWithToolResults(r.continuationState,s),a=Date.now()-r.startMs;return this.emit("task:end",{traceId:r.traceId,timestamp:new Date,agentRef:r.agentRef,mode:"query",result:i,durationMs:a}),{ok:!0,status:"complete",data:i,meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:a}}}catch(i){if(i instanceof exports.ClientToolCallRequiredError)return this._pendingThreads.set(e,{...r,continuationState:i.continuationState,toolCall:i.toolCall}),{ok:true,status:"requires_action",data:"",toolCall:i.toolCall,threadId:e,meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:Date.now()-r.startMs}};let a=Date.now()-r.startMs;return {ok:false,data:"",error:{code:"CONTINUE_FAILED",message:i.message},meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:a}}}}async execute(e,t,r){let o=await this.resolveFileRemoteTarget(e);if(o)return o.target.execute(o.agentRef,t,this._buildFileRemoteOptions(e,r));let s=Mt.getStore()??on(r?.trace),i=r?.taskId??Ze("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null};return Mt.run(d,async()=>{let l=Date.now(),u=new Date,g;try{g=Xt(e,Array.from(this._agents.values()));}catch(E){if(E instanceof Ee){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 R=Date.now()-l,S={code:"AGENT_NOT_FOUND",message:E.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:R,error:S,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:S,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:R,taskId:i}}}throw E}d.callerAgentId=g.id;let f=Array.isArray(g.provider)?g.provider[0]??"cli/claude":g.provider,m=ir(g.options,"execute",f,sr(r?.overdrive)),h=m.active&&m.provider?m.provider:r?.provider??f,w=m.active&&m.model?m.model:r?.model??g.inline?.model;w&&w.includes("{{")&&(w=await this._templateEngine.render(w,{...r?.vars??{}}));let A=m.crossProvider?void 0:r?.resumeSessionId,v;try{v=Pe(h,this._additionalArgsProvider);}catch(E){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 R=Date.now()-l,S={code:"PROVIDER_ERROR",message:E.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:R,error:S,metadata:r?.metadata?{...r.metadata}:void 0}),{ok:false,data:"",error:S,meta:{agentId:g.id,provider:h,model:w,durationMs:R,taskId:i}}}let _=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),x;try{x=await this.renderAgentPromptFull(e,{session:{mode:"execute",platform:r?.platform},vars:{user_input:t,...r?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(g,r)},messages:_,threadId:r?.threadId});}catch(E){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${E instanceof Error?E.message:String(E)}`);}let b,k,j,W=w,N=false,F=E=>{N||(N=true,this.emit("task:start",{traceId:i,timestamp:u,agentRef:e,message:t,mode:"execute",pid:E,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:W,provider:h,codingAgentCommand:b,renderedPrompt:x,metadata:{...r?.metadata??{},provider:h,...m.active?{overdrive:true}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},z=g.options,ee=m.active?m.mode:z?.execute?.mode,K=m.active?m.effort:z?.execute?.effort,$=Array.isArray(z?.execute?.tools)?z.execute.tools:void 0,J=this._tools.size>0?this._filterToolsByMode($):[],Q=(()=>{let E=z?.execute;if(!E||Array.isArray(E))return;let{tools:R,effort:S,mode:C,...U}=E,se=Object.entries(U).filter(([,Z])=>Z!=null);if(se.length!==0)return Object.fromEntries(se.map(([Z,fe])=>[Z,String(fe)]))})(),B=g.inline?.max_steps;h.startsWith("api/")&&F();let L=false,G=0,V=()=>{},me=new Promise(E=>{V=E;});this._activeTasks.set(i,{pid:void 0,done:me});try{let E=await v.execute(t,{model:w,effort:K,mode:ee,context:r?.context,systemPrompt:x??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(z?.execute)?z.execute:void 0,resumeSessionId:A,tools:J.length>0?J:void 0,maxSteps:B,configOptions:Q,timeoutMs:this._resolveTimeout("execute",this._lookupCliAdapter(h)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(h)),cwd:this._resolveEffectiveCwd(g,r),env:{CREWX_AGENT_ID:g.id,CREWX_AGENT_ROLE:g.role??"",CREWX_AGENT_TEAM:g.team??"",CREWX_USER_ID:process.env.USER||process.env.USERNAME||"unknown",CREWX_TRACE_ID:i,CREWX_PARENT_TASK_ID:i,CREWX_TASK_ID:i,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:h,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,u)},onPid:C=>{let U=this._activeTasks.get(i);U&&(U.pid=C),F(C);},onOutput:(C,U)=>{let se=this._lookupCliAdapter(h);U==="stdout"&&se?.suppressOutputLine?.(C)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:C,level:U}),U==="stdout"&&this.emitToolEvents(i,e,h,C,g.id,r?.threadId??"","");},onTaskLog:C=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",h,C);for(let U of C)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(U),level:"info"});},onCommand:C=>{b=C;},onUsage:C=>{k=C;},onExitCode:C=>{j=C;},onModel:C=>{W||(W=C);}});G=Vr(k?.costUsd,k?.inputTokens,k?.outputTokens,k?.cachedInputTokens,W,new Date(l)),F();let R=Date.now()-l,S={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",result:E,durationMs:R,exitCode:j,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:G,model:W,metadata:Object.keys(S).length>0?S:void 0}),L=!0,{ok:!0,data:E,meta:{agentId:g.id,provider:h,model:w,durationMs:R,taskId:i}}}catch(E){F();let R=Date.now()-l,S={code:"EXECUTE_FAILED",message:E.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:R,error:S,exitCode:j,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:G,model:W,metadata:r?.metadata?{...r.metadata}:void 0}),L=true,{ok:false,data:"",error:S,meta:{agentId:g.id,provider:h,model:w,durationMs:R,taskId:i}}}finally{L||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:Date.now()-l,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:j??-1,inputTokens:k?.inputTokens,outputTokens:k?.outputTokens,cachedInputTokens:k?.cachedInputTokens,costUsd:G,model:W}),this._activeTasks.delete(i),V();}})}};function us(n,e){let t=In(n)?n:void 0,r=In(e)?e:void 0;if(!(!t&&!r))return {...t??{},...r??{}}}function In(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Gd(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(!In(a))return;let d=a.id;if(typeof d=="string")return `id:${d}`;let l=a.name;if(typeof l=="string")return `name:${l}`},s=new Set;for(let a of r??[]){let d=o(a);d&&s.add(d);}let i=[];for(let a of t??[]){let d=o(a);d&&s.has(d)||i.push(a);}for(let a of r??[])i.push(a);return i}async function ps(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(()=>(yn(),Qo));o(t?.api);}await Xd(n,e),Yd(n,e),Jd(n);}function Jd(n){if(!n.some(r=>(Array.isArray(r.provider)?r.provider:[r.provider]).some(s=>s.startsWith("acp/"))))return;let{registerAcpProviders:t}=(An(),Vn(ns));t();}async function Xd(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}=await Promise.resolve().then(()=>(Cn(),ss)),s=new Map;for(let i of r)i.type==="remote"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&Ce("remote",o(s,Pe));}function Yd(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}=(Pn(),Vn(ls)),s=new Map;for(let i of r)i.type==="plugin"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&Ce("plugin",o(s));}c();var On=class{detach(e){}};c();var Qd="crewx:fs:",Mn=class{prefix;store;constructor(e){this.prefix=e?.prefix??Qd,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,"/")}`}};c();he();function ms(n){if(!n)return "";let e=n.lastIndexOf("/");return e===-1?n.trim():n.slice(e+1).trim()}function gs(n){return n?ut(n).models.length>0:false}function Nn(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Zd(n,e,t){let r=n,o=false,s=[],i=()=>(o||(r={...n},o=true),r);gs(e)&&(typeof r.mode=="string"&&(wt(e).map(l=>l.id).includes(r.mode)||(delete i().mode,s.push("mode"))),typeof r.effort=="string"&&(vt(e,t).includes(r.effort)||(delete i().effort,s.push("effort"))));let a=r.overdrive;if(Nn(a)){let d=ms(typeof a.provider=="string"?a.provider:void 0),l=typeof a.model=="string"?a.model:void 0;if(gs(d)){let u,g=()=>(u||(u={...a},i().overdrive=u),u);typeof a.mode=="string"&&(wt(d).map(m=>m.id).includes(a.mode)||(delete g().mode,s.push("overdrive.mode"))),typeof a.effort=="string"&&(vt(d,l).includes(a.effort)||(delete g().effort,s.push("overdrive.effort")));}}return {block:r,removed:s}}function el(n){let{options:e}=n;if(!Nn(e))return {options:e,changed:false,removed:[]};let t=ms(n.provider),r=[],o=e,s=false,i=()=>(s||(o={...e},s=true),o);for(let a of ["query","execute"]){let d=e[a];if(!Nn(d))continue;let{block:l,removed:u}=Zd(d,t,n.model);u.length>0&&(i()[a]=l,r.push(...u.map(g=>`${a}.${g}`)));}return {options:o,changed:r.length>0,removed:r}}c();var tl="https://api.crewx.dev/v1/models",rl=3600*1e3,fs=0;async function nl(n){let e=n?.ttlMs??rl,t=Date.now();if(!(t-fs<e)){fs=t;try{let r=await fetch(n?.endpoint??tl);if(!r.ok)return;let o=await r.json();if(!o?.models||typeof o.models!="object")return;let s={};for(let[i,a]of Object.entries(o.models))a!=null&&(s[i]={input:a.input,cachedInput:a.cachedInput,output:a.output});mo(s);}catch{}}}c();he();var ol="https://api.crewx.dev/v1/models",sl=900*1e3,ys=0;async function il(n){let e=n?.ttlMs??sl,t=Date.now();if(!(t-ys<e)){ys=t;try{let r=await fetch(n?.endpoint??ol);if(!r.ok)return;let o=await r.json();if(!o?.providers||typeof o.providers!="object")return;let s={};for(let[i,a]of Object.entries(o.providers)){let d=Array.isArray(a)?a:a.models??[],l=Array.isArray(a)?[]:a.modes??[],u=Array.isArray(a)?[]:a.effort??[],g=Array.isArray(a)?{}:a.modelOverrides??{},f=d.filter(m=>m!=null&&typeof m.id=="string").map(m=>({id:m.id,name:m.name??m.id,...m.description!=null?{description:m.description}:{}}));s[i]={models:f,modes:l.filter(m=>m!=null&&typeof m.id=="string").map(m=>({id:m.id,name:m.name??m.id,...m.description!=null?{description:m.description}:{}})),effort:u.filter(m=>typeof m=="string"),modelOverrides:g};}Or(s);}catch{}}}c();function al(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))}c();var Dn=["codex","claude","opencode","antigravity","copilot"];function dl(n){let e=n.indexOf("/");return e===-1?n:n.slice(e+1)}function Ln(n){let e=dl(n),t=Dn.indexOf(e);return t===-1?Dn.length:t}function qt(n,e){return Ln(n)-Ln(e)}var ll=new Set(["claude","copilot","codex","opencode"]);function cl(n){if(!n)return "";if(n.startsWith("acp/")){let e=n.slice(4);if(ll.has(e))return `cli/${e}`}return n}he();ve();fn();yn();c();hn();Ne();c();hr();kr();he();var ul="model",pl="mode",gl="thought_level";function $n(n){if(n.length===0)return [];if(n[0]?.group!=null){let e=[];for(let t of n)for(let r of t.options??[])e.push(r);return e}return n}function ml(n,e){let t=new Map;for(let r of [...n,...e])t.has(r.id)||t.set(r.id,r);return Array.from(t.values())}function fl(n,e,t,r){let o=t.agentInfo?.name,s=e??o??n,i=r.configOptions??[],d=(r.modes?.availableModes??[]).map(v=>({id:v.id,name:v.name,...v.description!=null?{description:v.description}:{}})),l=[];for(let v of i)if(v.category?.trim().toLowerCase()===pl&&v.options!=null)for(let _ of $n(v.options))_.value!=null&&l.push({id:_.value,name:_.name??_.value});let u=ml(d,l),g=[];for(let v of i)if(v.category?.trim().toLowerCase()===gl&&v.type==="select")for(let _ of $n(v.options??[]))_.value!=null&&g.push(_.value);if(n==="claude"){let v=_t().map(x=>({id:x.id,name:x.name})),_=hs(t);return ws(n,{models:v,modes:u,availableModelsCount:0,configModelsCount:0,skipModelWarn:true}),{id:`acp/${n}`,name:s,modes:u,effort:g,models:v,capabilities:_}}let m=(r.models?.availableModels??[]).map(v=>({id:v.modelId})),h=[];for(let v of i)if(v.category?.trim().toLowerCase()===ul&&v.options!=null)for(let _ of $n(v.options))_.value!=null&&h.push({id:_.value,..._.name!=null?{name:_.name}:{}});let w=xt(m,h);ws(n,{models:w,modes:u,availableModelsCount:m.length,configModelsCount:h.length,skipModelWarn:false});let A=hs(t);return {id:`acp/${n}`,name:s,modes:u,effort:g,models:w,capabilities:A}}function hs(n){let e=n.agentCapabilities??{};return {loadSession:e.loadSession??false,image:e.promptCapabilities?.image??false,audio:e.promptCapabilities?.audio??false,mcp:e.mcpCapabilities!=null}}function ws(n,e){!e.skipModelWarn&&e.models.length===0&&console.warn(`[acp] ${n} meta: models empty (availableModels=${e.availableModelsCount}, configOptions[model]=${e.configModelsCount})`),e.modes.length===0&&console.warn(`[acp] ${n} meta: modes empty`);}async function vs(n){let e=exports.ACP_ADAPTERS[n];if(!e)return null;let t=e.meta?.displayName,r=new exports.AcpConnection({spawn:e.spawn,cwd:process.cwd()});try{await r.connect(e.clientInfo);let o=r.initResponse;if(!o)return null;let s=e.buildSessionParams({cwd:process.cwd()}),i=await r.newSessionRaw(s);return fl(n,t,o,i)}catch(o){return console.warn(`[acp] ${n} meta query failed: ${o instanceof Error?o.message:String(o)}`),null}finally{await r.dispose();}}async function yl(){let n=Object.keys(exports.ACP_ADAPTERS),e=await Promise.allSettled(n.map(r=>vs(r))),t=[];for(let r of e)r.status==="fulfilled"&&r.value!==null&&t.push(r.value);return t.sort((r,o)=>qt(r.id,o.id))}hr();wn();kr();An();Tr();Me();c();Me();he();function wl(n){return n.charAt(0).toUpperCase()+n.slice(1)}async function _s(){return new Promise(n=>{child_process.execFile("opencode",["models"],{timeout:5e3,maxBuffer:1048576},(t,r)=>{if(t){n([]);return}let o=r.split(`
|
|
303
|
+
`).map(s=>s.trim()).filter(s=>s.length>0).map(s=>({id:s}));n(o);}).on("error",()=>n([]));})}function vl(n,e,t){if(!e.meta)return null;let r=e.meta.capabilities??{},o=Je(n),s=o.length>0?o:e.meta.models??[],i=t!==void 0?xt(t,s):s;return {id:`cli/${n}`,name:e.meta.displayName??wl(n),modes:wt(n),effort:vt(n),models:i,modelOverrides:oo(n),capabilities:{loadSession:r.loadSession??false,resume:r.resume??false,image:r.image??false,audio:r.audio??false,mcp:r.mcp??false}}}async function _l(n={}){let e=n.includeOpencodeRuntimeModels?await _s():void 0,t=[];for(let[r,o]of Object.entries(exports.BUILTIN_ADAPTERS)){let i=vl(r,o,r==="opencode"?e:void 0);i&&t.push(i);}return t.sort((r,o)=>qt(r.id,o.id))}c();var Un=0;function xl(n){let e=n.meta?.taskId,t=e?` taskId=${e}`:"";if(n.ok)return `Task completed:${t}
|
|
304
304
|
|
|
305
305
|
${n.data}`;let r=n.error?.message??"Unknown error";return `Task failed:${t}
|
|
306
|
-
Error: ${r}`}function cl(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(Dn>=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(", ")}`;Dn++;try{let i=s==="execute"?await n.execute(r,o):await n.query(r,o);return ll(i)}finally{Dn--;}}}}c();var hs=typeof process<"u"?process.env:{};function ul(){return hs.CREWX_CLI||"npx crewx"}function pl(){return hs.CREWX_WORKSPACE||(typeof process<"u"?process.cwd():"/")}c();var gl=/^[a-zA-Z0-9._-]+$/,Ln=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(!gl.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return Je("box")}};c();function ml(n,e,t,r,o){let{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}=r,d=s*i,l=s*a,u=d+l,g=e.getThreadMessages(n),f=[],m=0,y=false,w=[];for(let _=0;_<g.length;_+=2){let x=g[_],b=g[_+1],A=x?.content||"",z=b?.content||"",L=o.countTokens(A+z),I=[];x&&I.push(x),b&&I.push(b),w.push({messages:I,tokens:L});}for(let _=w.length-1;_>=0;_--){let x=w[_];if(m+x.tokens>d){y=true;break}m+=x.tokens,f.unshift(...x.messages);}let k=[],v=0;if(y&&l>0)try{let{boxes:_}=t.listBoxes(n);for(let x=_.length-1;x>=0;x--){let b=_[x],A=b.summaryTokens??b.sourceTokens;if(v+A>l)break;v+=A,k.unshift({boxId:b.id,seq:b.seq,taskCount:b.taskCount,sourceTokens:b.sourceTokens,summary:b.summary,previewFirst:b.previewFirst,previewMid:b.previewMid,previewLast:b.previewLast,createdAt:b.createdAt});}}catch(_){if(_ instanceof Error&&!/not found/i.test(_.message))throw _}return {hot:f,warm:k,hotTokens:m,warmTokens:v,hotOverflow:y,totalBudget:u,config:{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}}}Ie();ot();c();var kr=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},Ht=class{constructor(e={}){this.defaults=e;}defaults;metrics={totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0};async run(e,t={}){if(!Array.isArray(e))throw new TypeError("ParallelRunner.run expects an array of tasks");if(e.length===0)return this.metrics={totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0},[];let r=this.mergeOptions(t),o=Math.max(1,r.maxConcurrency??5),s=r.timeoutMs,i=r.failFast??false,a=r.callbacks,d=r.evaluateTaskSuccess??(()=>true),l=[],u=0,g=0,f=0,m=false,y=0,w=perf_hooks.performance.now(),k=async I=>{a?.onTaskStart&&await a.onTaskStart(I),f+=1;let $=new AbortController,H={signal:$.signal},q,W;typeof s=="number"&&Number.isFinite(s)&&s>0&&(W=new Promise((Q,U)=>{q=setTimeout(()=>{let J=new kr(I.id,s);$.abort(J),U(J);},s);}));let G=perf_hooks.performance.now(),B=I.run(H),ee=W?Promise.race([B,W]):B;try{let Q=await ee,U=perf_hooks.performance.now(),J=U-G,Z=d(Q,I),ge={taskId:I.id,success:Z,value:Q,durationMs:J,startedAt:G,finishedAt:U,metadata:I.metadata,aborted:!1};l.push(ge),Z?u+=1:g+=1,a?.onTaskComplete&&await a.onTaskComplete(ge),i&&!Z&&(m=!0);}catch(Q){let U=perf_hooks.performance.now(),J=U-G,Z=Q instanceof Error?Q:new Error(String(Q)),ge={taskId:I.id,success:false,error:Z,durationMs:J,startedAt:G,finishedAt:U,metadata:I.metadata,aborted:$.signal.aborted};l.push(ge),g+=1,a?.onError&&await a.onError(I,Z,J),i&&(m=true);}finally{q&&clearTimeout(q),W&&B.catch(()=>{});}},v=async()=>{for(;!m;){let I=y;if(I>=e.length)break;y+=1;let $=e[I];if(!$||(await k($),m))break}},_=Math.min(o,e.length),x=[];for(let I=0;I<_;I++)x.push(v());await Promise.all(x);let A=perf_hooks.performance.now()-w,z=l.length?l.reduce((I,$)=>I+$.durationMs,0)/l.length:0,L=A>0?l.length/(A/1e3):l.length;return this.metrics={totalTasks:e.length,startedTasks:f,completedTasks:l.length,successCount:u,failureCount:g,totalDurationMs:A,averageDurationMs:z,throughput:L},l}getMetrics(){return this.metrics}mergeOptions(e){return {maxConcurrency:e.maxConcurrency??this.defaults.maxConcurrency,timeoutMs:e.timeoutMs??this.defaults.timeoutMs,failFast:e.failFast??this.defaults.failFast,evaluateTaskSuccess:e.evaluateTaskSuccess??this.defaults.evaluateTaskSuccess,callbacks:this.mergeCallbacks(this.defaults.callbacks,e.callbacks)}}mergeCallbacks(e,t){if(!(!e&&!t))return {onTaskStart:async r=>{e?.onTaskStart&&await e.onTaskStart(r),t?.onTaskStart&&await t.onTaskStart(r);},onTaskComplete:async r=>{e?.onTaskComplete&&await e.onTaskComplete(r),t?.onTaskComplete&&await t.onTaskComplete(r);},onError:async(r,o,s)=>{e?.onError&&await e.onError(r,o,s),t?.onError&&await t.onError(r,o,s);}}}};c();c();var qt=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 ws=3,vs=3e4,_s=500,fl=n=>{if(typeof n!="number"||Number.isNaN(n)||!Number.isFinite(n))return ws;let e=Math.floor(n);return e>0?e:ws},yl=n=>n===void 0||typeof n!="number"||Number.isNaN(n)||n<=0?vs:n,hl=n=>{if(!n)return {maxRetries:0,retryDelay:_s};let e=Number.isInteger(n.maxRetries)&&n.maxRetries>=0?n.maxRetries:0,t=typeof n.retryDelay=="number"&&n.retryDelay>=0?n.retryDelay:_s;return {maxRetries:e,retryDelay:t}},$n=n=>{let e=n.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},wl=(n,e)=>n<=0?Promise.resolve():new Promise((t,r)=>{let o=setTimeout(()=>{e.removeEventListener("abort",s),t();},n),s=()=>{clearTimeout(o),r($n(e));};if(e.aborted){s();return}e.addEventListener("abort",s,{once:true});}),vl=async(n,e,t)=>{let r,o;for(let s=0;s<=e.maxRetries;s++){if(t.aborted)throw $n(t);try{let i=await n();if(r=i,i.success||s===e.maxRetries)return i}catch(i){if(o=i,t.aborted)throw $n(t);if(s===e.maxRetries)throw i instanceof Error?i:new Error(String(i))}s<e.maxRetries&&await wl(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")},ks=(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);}},_l=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}}}),kl=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")}}),xl=(n,e)=>({onTaskComplete:async t=>{ks(e,n,t.success);},onError:async()=>{ks(e,n,false);}}),xs=async(n,e,t={})=>{if(!Array.isArray(n))throw new TypeError("Parallel helpers expect an array of requests");if(n.length===0){let k={total:0,completed:0,successCount:0,failureCount:0,results:[],errors:[],metrics:{totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0}};return t.onComplete?.(k),[]}let r=fl(t.concurrency),o=yl(t.timeout),s=hl(t.retryPolicy),i=new Ht,a=new qt,d=n.map((w,k)=>({id:`${e}:${w.agentId??"anonymous"}:${k}`,metadata:{index:k,mode:e,request:w},run:v=>vl(()=>e==="query"?a.query(w):a.execute(w),s,v.signal)})),l={completed:0,success:0,failure:0,total:n.length},u=await i.run(d,{maxConcurrency:r,timeoutMs:o,evaluateTaskSuccess:w=>w.success,callbacks:xl(l,t)}),g=_l(u),f=kl(u),m=i.getMetrics(),y={total:n.length,completed:n.length,successCount:g.filter(w=>w.success).length,failureCount:g.filter(w=>!w.success).length,results:g,errors:f,metrics:m};return t.onComplete?.(y),g},Al=(n,e)=>xs(n,"query",e),El=(n,e)=>xs(n,"execute",e);En();c();var Un=class extends ct{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Y.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=Y.dirname(t);Uo.existsSync(o)||Uo.mkdirSync(o,{recursive:true});}else if(!Uo.existsSync(t))throw new O("NOT_FOUND","Database not found");let r=_e(t);if(e)try{ar(r.db,t);}catch(o){throw r.close(),o}return r}insertSpan(e){let t=this.openHandle(true);try{t.db.insert(Qe).values(e).run();}catch(r){throw r instanceof O?r:new O("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(Qe).where(drizzleOrm.eq(Qe.task_id,e)).all()}catch(r){throw new O("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(Qe).where(drizzleOrm.eq(Qe.id,e)).limit(1).get()??void 0}catch(r){throw new O("DB_ERROR","Failed to find span by id",r)}finally{t.close();}}};An();xn();kn();c();c();var xr=class{capabilities={required:[]}};c();c();c();var Rs=2e3;function Cs(n){let e=n.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=Rs?e:e.slice(0,Rs-11)+" [redacted]"}var Dl=10*1024*1024,Ll={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function jn(n,e){return n===void 0?true:Array.isArray(n)?n.includes(e):n===e}function $l(n,e){return n===void 0?true:Array.isArray(n)?n.some(t=>e.includes(t)):e.includes(n)}function Ts(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*(Ll[r]??1))}function Ss(n){return typeof n=="string"}function bs(n){try{let e=Uo.statSync(n);return e.size>Dl?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${n} (${e.size} bytes)
|
|
307
|
-
`),null):
|
|
308
|
-
`).length}catch{return null}}function
|
|
306
|
+
Error: ${r}`}function kl(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(Un>=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(", ")}`;Un++;try{let i=s==="execute"?await n.execute(r,o):await n.query(r,o);return xl(i)}finally{Un--;}}}}c();var xs=typeof process<"u"?process.env:{};function Al(){return xs.CREWX_CLI||"npx crewx"}function El(){return xs.CREWX_WORKSPACE||(typeof process<"u"?process.cwd():"/")}c();var Rl=/^[a-zA-Z0-9._-]+$/,jn=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(!Rl.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return Ze("box")}};c();function Cl(n,e,t,r,o){let{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}=r,d=s*i,l=s*a,u=d+l,g=e.getThreadMessages(n),f=[],m=0,h=false,w=[];for(let _=0;_<g.length;_+=2){let x=g[_],b=g[_+1],k=x?.content||"",j=b?.content||"",W=o.countTokens(k+j),N=[];x&&N.push(x),b&&N.push(b),w.push({messages:N,tokens:W});}for(let _=w.length-1;_>=0;_--){let x=w[_];if(m+x.tokens>d){h=true;break}m+=x.tokens,f.unshift(...x.messages);}let A=[],v=0;if(h&&l>0)try{let{boxes:_}=t.listBoxes(n);for(let x=_.length-1;x>=0;x--){let b=_[x],k=b.summaryTokens??b.sourceTokens;if(v+k>l)break;v+=k,A.unshift({boxId:b.id,seq:b.seq,taskCount:b.taskCount,sourceTokens:b.sourceTokens,summary:b.summary,previewFirst:b.previewFirst,previewMid:b.previewMid,previewLast:b.previewLast,createdAt:b.createdAt});}}catch(_){if(_ instanceof Error&&!/not found/i.test(_.message))throw _}return {hot:f,warm:A,hotTokens:m,warmTokens:v,hotOverflow:h,totalBudget:u,config:{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}}}Me();dt();c();var Ar=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},Bt=class{constructor(e={}){this.defaults=e;}defaults;metrics={totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0};async run(e,t={}){if(!Array.isArray(e))throw new TypeError("ParallelRunner.run expects an array of tasks");if(e.length===0)return this.metrics={totalTasks:0,startedTasks:0,completedTasks:0,successCount:0,failureCount:0,totalDurationMs:0,averageDurationMs:0,throughput:0},[];let r=this.mergeOptions(t),o=Math.max(1,r.maxConcurrency??5),s=r.timeoutMs,i=r.failFast??false,a=r.callbacks,d=r.evaluateTaskSuccess??(()=>true),l=[],u=0,g=0,f=0,m=false,h=0,w=perf_hooks.performance.now(),A=async N=>{a?.onTaskStart&&await a.onTaskStart(N),f+=1;let F=new AbortController,z={signal:F.signal},ee,K;typeof s=="number"&&Number.isFinite(s)&&s>0&&(K=new Promise((B,L)=>{ee=setTimeout(()=>{let G=new Ar(N.id,s);F.abort(G),L(G);},s);}));let $=perf_hooks.performance.now(),J=N.run(z),Q=K?Promise.race([J,K]):J;try{let B=await Q,L=perf_hooks.performance.now(),G=L-$,V=d(B,N),me={taskId:N.id,success:V,value:B,durationMs:G,startedAt:$,finishedAt:L,metadata:N.metadata,aborted:!1};l.push(me),V?u+=1:g+=1,a?.onTaskComplete&&await a.onTaskComplete(me),i&&!V&&(m=!0);}catch(B){let L=perf_hooks.performance.now(),G=L-$,V=B instanceof Error?B:new Error(String(B)),me={taskId:N.id,success:false,error:V,durationMs:G,startedAt:$,finishedAt:L,metadata:N.metadata,aborted:F.signal.aborted};l.push(me),g+=1,a?.onError&&await a.onError(N,V,G),i&&(m=true);}finally{ee&&clearTimeout(ee),K&&J.catch(()=>{});}},v=async()=>{for(;!m;){let N=h;if(N>=e.length)break;h+=1;let F=e[N];if(!F||(await A(F),m))break}},_=Math.min(o,e.length),x=[];for(let N=0;N<_;N++)x.push(v());await Promise.all(x);let k=perf_hooks.performance.now()-w,j=l.length?l.reduce((N,F)=>N+F.durationMs,0)/l.length:0,W=k>0?l.length/(k/1e3):l.length;return this.metrics={totalTasks:e.length,startedTasks:f,completedTasks:l.length,successCount:u,failureCount:g,totalDurationMs:k,averageDurationMs:j,throughput:W},l}getMetrics(){return this.metrics}mergeOptions(e){return {maxConcurrency:e.maxConcurrency??this.defaults.maxConcurrency,timeoutMs:e.timeoutMs??this.defaults.timeoutMs,failFast:e.failFast??this.defaults.failFast,evaluateTaskSuccess:e.evaluateTaskSuccess??this.defaults.evaluateTaskSuccess,callbacks:this.mergeCallbacks(this.defaults.callbacks,e.callbacks)}}mergeCallbacks(e,t){if(!(!e&&!t))return {onTaskStart:async r=>{e?.onTaskStart&&await e.onTaskStart(r),t?.onTaskStart&&await t.onTaskStart(r);},onTaskComplete:async r=>{e?.onTaskComplete&&await e.onTaskComplete(r),t?.onTaskComplete&&await t.onTaskComplete(r);},onError:async(r,o,s)=>{e?.onError&&await e.onError(r,o,s),t?.onError&&await t.onError(r,o,s);}}}};c();c();var zt=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 ks=3,As=3e4,Es=500,Pl=n=>{if(typeof n!="number"||Number.isNaN(n)||!Number.isFinite(n))return ks;let e=Math.floor(n);return e>0?e:ks},Tl=n=>n===void 0||typeof n!="number"||Number.isNaN(n)||n<=0?As:n,Sl=n=>{if(!n)return {maxRetries:0,retryDelay:Es};let e=Number.isInteger(n.maxRetries)&&n.maxRetries>=0?n.maxRetries:0,t=typeof n.retryDelay=="number"&&n.retryDelay>=0?n.retryDelay:Es;return {maxRetries:e,retryDelay:t}},Fn=n=>{let e=n.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},bl=(n,e)=>n<=0?Promise.resolve():new Promise((t,r)=>{let o=setTimeout(()=>{e.removeEventListener("abort",s),t();},n),s=()=>{clearTimeout(o),r(Fn(e));};if(e.aborted){s();return}e.addEventListener("abort",s,{once:true});}),Il=async(n,e,t)=>{let r,o;for(let s=0;s<=e.maxRetries;s++){if(t.aborted)throw Fn(t);try{let i=await n();if(r=i,i.success||s===e.maxRetries)return i}catch(i){if(o=i,t.aborted)throw Fn(t);if(s===e.maxRetries)throw i instanceof Error?i:new Error(String(i))}s<e.maxRetries&&await bl(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")},Rs=(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);}},Ol=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}}}),Ml=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")}}),Nl=(n,e)=>({onTaskComplete:async t=>{Rs(e,n,t.success);},onError:async()=>{Rs(e,n,false);}}),Cs=async(n,e,t={})=>{if(!Array.isArray(n))throw new TypeError("Parallel helpers expect an array of requests");if(n.length===0){let A={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?.(A),[]}let r=Pl(t.concurrency),o=Tl(t.timeout),s=Sl(t.retryPolicy),i=new Bt,a=new zt,d=n.map((w,A)=>({id:`${e}:${w.agentId??"anonymous"}:${A}`,metadata:{index:A,mode:e,request:w},run:v=>Il(()=>e==="query"?a.query(w):a.execute(w),s,v.signal)})),l={completed:0,success:0,failure:0,total:n.length},u=await i.run(d,{maxConcurrency:r,timeoutMs:o,evaluateTaskSuccess:w=>w.success,callbacks:Nl(l,t)}),g=Ol(u),f=Ml(u),m=i.getMetrics(),h={total:n.length,completed:n.length,successCount:g.filter(w=>w.success).length,failureCount:g.filter(w=>!w.success).length,results:g,errors:f,metrics:m};return t.onComplete?.(h),g},Dl=(n,e)=>Cs(n,"query",e),Ll=(n,e)=>Cs(n,"execute",e);Pn();c();var Hn=class extends mt{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=q.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=q.dirname(t);qo.existsSync(o)||qo.mkdirSync(o,{recursive:true});}else if(!qo.existsSync(t))throw new I("NOT_FOUND","Database not found");let r=xe(t);if(e)try{lr(r.db,t);}catch(o){throw r.close(),o}return r}insertSpan(e){let t=this.openHandle(true);try{t.db.insert(rt).values(e).run();}catch(r){throw r instanceof I?r:new I("DB_ERROR","Failed to insert span",r)}finally{t.close();}}findByTaskId(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.select().from(rt).where(drizzleOrm.eq(rt.task_id,e)).all()}catch(r){throw new I("DB_ERROR","Failed to find spans by task id",r)}finally{t.close();}}findById(e){if(!this.dbExists())return;let t=this.openHandle(false);try{return t.db.select().from(rt).where(drizzleOrm.eq(rt.id,e)).limit(1).get()??void 0}catch(r){throw new I("DB_ERROR","Failed to find span by id",r)}finally{t.close();}}};Cn();Rn();En();c();c();var Er=class{capabilities={required:[]}};c();c();c();var Ss=2e3;function bs(n){let e=n.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=Ss?e:e.slice(0,Ss-11)+" [redacted]"}var Vl=10*1024*1024,Gl={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function qn(n,e){return n===void 0?true:Array.isArray(n)?n.includes(e):n===e}function Jl(n,e){return n===void 0?true:Array.isArray(n)?n.some(t=>e.includes(t)):e.includes(n)}function Os(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*(Gl[r]??1))}function Ms(n){return typeof n=="string"}function Ns(n){try{let e=qo.statSync(n);return e.size>Vl?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${n} (${e.size} bytes)
|
|
307
|
+
`),null):qo.readFileSync(n,"utf8").split(`
|
|
308
|
+
`).length}catch{return null}}function Ds(n){try{return qo.statSync(n).size}catch{return null}}function Xl(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(ye(o,n))return true;if(t&&o.startsWith("/")){let{relative:s,isAbsolute:i}=te("path");if(i(o)){let a=s(t,o);if(a&&!a.startsWith("..")&&ye(a,n))return true}}return false}function Yl(n,e){return n?JSON.stringify(e).includes(n):true}function Ql(n,e){if(!n)return true;try{let t=new RegExp(n),r=JSON.stringify(e);return t.test(r)}catch{return false}}function Zl(n,e){if(!n)return true;try{let t=new RegExp(n),r=JSON.stringify(e);return t.test(r)}catch{return false}}function ec(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(Ms(n.pathSizeMin)){let o=Ds(r);if(o===null||o<Os(n.pathSizeMin))return false}else {let o=Ns(r);if(o===null||o<n.pathSizeMin)return false}if(n.pathSizeMax!==void 0)if(Ms(n.pathSizeMax)){let o=Ds(r);if(o===null||o>Os(n.pathSizeMax))return false}else {let o=Ns(r);if(o===null||o>n.pathSizeMax)return false}return true}function tc(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 Bn=class extends Er{name="@crewx/yaml-hook-plugin";version="0.1.0";capabilities={required:["inject"]};hooks;agentMap;constructor(e){super(),this.hooks=e.hooks,this.agentMap=new Map((e.agents??[]).map(t=>[t.id,t]));}async run(e){let t=[],r=process.env.CREWX_TASK_LOG_PATH,o=process.env.CREWX_HOOK_LOG_VERBOSE==="1";for(let s of this.hooks)if(this.matchEntryLevel(s,e)&&s.guide){if(!this.matchRuleLevel(s.guide,e)){o&&r&&this.appendHookLog(r,{rule:s.name,action:"pass",once:s.guide.once??false,ctx:e,matched:false});continue}s.guide.once&&this.hasFired(e.sessionId,s.name)||(s.guide.once&&this.markFired(e.sessionId,s.name),t.push(s.guide.say),r&&this.appendHookLog(r,{rule:s.name,action:"inject",once:s.guide.once??false,ctx:e,matched:true,message:s.guide.say}));}return t.length?e.inject(t.join(`
|
|
309
309
|
|
|
310
|
-
`)):e.pass()}appendHookLog(e,t){try{let r={rule:t.rule,action:t.action,once:t.once,sessionId:t.ctx.sessionId,provider:t.ctx.provider,agent:t.ctx.agent.id,toolName:t.ctx.tool.name,rawToolName:t.ctx.tool.rawName};t.message&&(r.chars=t.message.length,process.env.CREWX_HOOK_LOG_VERBOSE==="1"&&(r.message=
|
|
311
|
-
`;
|
|
312
|
-
`);}}firedFilePath(e){let t=crypto$1.createHash("sha1").update(e).digest("hex");return
|
|
310
|
+
`)):e.pass()}appendHookLog(e,t){try{let r={rule:t.rule,action:t.action,once:t.once,sessionId:t.ctx.sessionId,provider:t.ctx.provider,agent:t.ctx.agent.id,toolName:t.ctx.tool.name,rawToolName:t.ctx.tool.rawName};t.message&&(r.chars=t.message.length,process.env.CREWX_HOOK_LOG_VERBOSE==="1"&&(r.message=bs(t.message).slice(0,500)));let o=`[${new Date().toISOString()}] HOOK: ${JSON.stringify(r)}
|
|
311
|
+
`;qo.appendFileSync(e,o,{encoding:"utf8",mode:384});}catch{}}matchEntryLevel(e,t){if(e.provider!==void 0){let r=t.provider.replace(/^cli\//,"");if(!qn(e.provider,r))return false}if(e.team!==void 0){let o=this.agentMap.get(t.agent.id)?.team??t.agent.team;if(!qn(e.team,o))return false}if(e.role!==void 0){let o=this.agentMap.get(t.agent.id)?.role??t.agent.role;if(!qn(e.role,o))return false}if(e.tag!==void 0){let o=this.agentMap.get(t.agent.id)?.tags??[];if(!Jl(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)||!Yl(e.pattern,t.tool.input)||!Ql(e.regex,t.tool.input)||!Xl(e.pathPattern,t.tool.input,t.cwd)||!ec(e,t.tool.input)||!Zl(e.whenInputRegex,t.tool.input))}hasFired(e,t){try{let r=this.firedFilePath(e);if(!qo.existsSync(r))return !1;let o=JSON.parse(qo.readFileSync(r,"utf8"));return Array.isArray(o.fired)&&o.fired.includes(t)}catch{return false}}markFired(e,t){try{let r=this.firedFilePath(e);qo.mkdirSync(q.dirname(r),{recursive:!0,mode:448});let o=qo.existsSync(r)?JSON.parse(qo.readFileSync(r,"utf8")):{fired:[]};Array.isArray(o.fired)||(o.fired=[]),o.fired.includes(t)||(o.fired.push(t),qo.writeFileSync(r,JSON.stringify(o),{mode:384}));}catch(r){process.stderr.write(`[YamlHookPlugin] once state write failed: ${r}
|
|
312
|
+
`);}}firedFilePath(e){let t=crypto$1.createHash("sha1").update(e).digest("hex");return q.join(Aa.homedir(),".crewx","sessions",t,"fired-rules.json")}};c();c();c();function rc(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}}}c();var zn=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;}};c();function nc(n){return n}function oc(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);}}}yt();exports.AdapterError=zn;exports.AgentNotFoundError=Ee;exports.AgentRuntime=zt;exports.AgentSkillsSchema=Gn;exports.BrowserFsAdapter=Mn;exports.ConfigLoadError=qe;exports.Crewx=bn;exports.CrewxPlugin=On;exports.DocumentLoader=Ye;exports.LayoutLoadError=ne;exports.LayoutLoader=Tt;exports.LayoutRenderer=It;exports.NodeFsAdapter=ar;exports.PROVIDER_ORDER=Dn;exports.ParallelRunner=Bt;exports.ParallelRunnerTimeoutError=Ar;exports.PropsValidationError=Te;exports.PropsValidator=bt;exports.SdkBoxService=jn;exports.SpanRepository=Hn;exports.TaskRepository=Dt;exports.TemplateEngine=Pt;exports.TypedEventEmitter=Ot;exports.YamlHookPlugin=Bn;exports.buildContext=Cl;exports.canonicalizeAgentOptions=el;exports.clearModelsOverride=pi;exports.compareProviders=qt;exports.createAdapterContext=nn;exports.createDelegateTool=kl;exports.createHandler=gn;exports.createPluginProviderFactory=ds;exports.createProvider=Pe;exports.createRemoteProviderFactory=os;exports.createScopedAdapterStore=tn;exports.defaultExtractText=an;exports.defaultFsAdapter=Xe;exports.defaultParseEvent=pe;exports.defineChannelAdapter=nc;exports.defineChannelAdapterPlugin=oc;exports.escapeHandlebarsHelper=Xr;exports.formatFileSizeHelper=Yr;exports.formatTimestamp=en;exports.formatTimestampHelper=Qr;exports.generateFingerprint=la;exports.generateId=Ze;exports.getAntigravityModels=Dr;exports.getClaudeModels=_t;exports.getCodexModels=Mr;exports.getCopilotModels=Nr;exports.getProviderModels=Je;exports.getSyncWindowStore=pa;exports.hashWorkspaceId=mn;exports.initModelsRemote=il;exports.initPricingRemote=nl;exports.lengthHelper=Jr;exports.loadYamlFile=Gt;exports.materializeWindowsSpawnProgram=ze;exports.mergeAdditionalArgs=go;exports.mergeModels=xt;exports.normalizeProviderId=cl;exports.normalizeWorkspacePath=Go;exports.parseOverdriveProfile=fo;exports.parseOverdriveSignal=sr;exports.parseStdoutEvent=kt;exports.parseUsage=Re;exports.parseYamlContent=Vt;exports.providerRank=Ln;exports.queryAcpProviderMeta=vs;exports.queryAllAcpProviderMetas=yl;exports.queryAllCliProviderMetas=_l;exports.queryOpencodeModels=_s;exports.registerAcpProviders=rs;exports.registerApiProviders=Yo;exports.registerProviderFactory=Ce;exports.resolveAgent=Xt;exports.resolveAgentSkills=al;exports.resolveCrewxCli=Al;exports.resolveCrewxWorkspace=El;exports.resolveDefaultAgentsYaml=Cr;exports.resolveOverdrive=ir;exports.resolveTemplatesPath=it;exports.resolveWindowsExecutablePath=ti;exports.resolveWindowsSpawnProgram=Be;exports.runExecutesParallel=Ll;exports.runInSyncWindow=ga;exports.runQueriesParallel=Dl;exports.setAuditVerbose=Gi;exports.setModelsOverride=Or;exports.toTaskReader=rc;exports.toTemplateMessages=sn;exports.truncateHelper=Gr;exports.validateHooksSchema=tc;
|