@crewx/sdk 0.9.0-rc.41 → 0.9.0-rc.43
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/config/wi-boards.d.ts +4 -0
- package/dist/desktop/command-runner.d.ts +4 -0
- package/dist/desktop/default-adapters.d.ts +4 -0
- package/dist/desktop/global-install.d.ts +19 -0
- package/dist/desktop/index.d.ts +2 -0
- package/dist/desktop/index.js +3 -0
- package/dist/desktop/install.d.ts +5 -0
- package/dist/desktop/lnk.d.ts +22 -0
- package/dist/desktop/manifest.d.ts +20 -0
- package/dist/desktop/types.d.ts +66 -0
- package/dist/desktop/version.d.ts +1 -0
- package/dist/desktop/windows-paths.d.ts +21 -0
- package/dist/desktop/wrapper.d.ts +18 -0
- package/dist/esm/desktop/index.js +3 -0
- package/dist/esm/index.js +119 -108
- package/dist/index.d.ts +6 -2
- package/dist/index.js +120 -109
- package/dist/paths.d.ts +1 -0
- package/dist/wi/create.d.ts +48 -0
- package/dist/wi/select.d.ts +20 -0
- package/package.json +9 -2
- package/templates/workflows/wi-default-flow.yaml +65 -0
- package/templates/workflows/wi-plan-flow.yaml +140 -0
package/dist/esm/index.js
CHANGED
|
@@ -1,59 +1,64 @@
|
|
|
1
|
-
import*as G from'path';import G__default,{join,resolve,dirname,isAbsolute,basename}from'path';import {fileURLToPath}from'url';import*as
|
|
2
|
-
`))if(s.trim())try{let i=JSON.parse(s);if(i.type!=="assistant")continue;let a=i.message,d=a?.id,l=a?.usage;if(typeof d!="string"||!l)continue;let c=Number(l.input_tokens??0),f=Number(l.cache_read_input_tokens??0);e.set(d,{inputTokens:c+f,cachedInputTokens:f});let g=a?.model;typeof g=="string"&&g&&(t=g);}catch{}if(e.size===0)return;let r=0,o=0;for(let s of e.values())r+=s.inputTokens,o+=s.cachedInputTokens;return {inputTokens:r,cachedInputTokens:o,model:t}}function
|
|
3
|
-
`))if(r.trim())try{let o=JSON.parse(r),s=
|
|
1
|
+
import*as G from'path';import G__default,{join,resolve,dirname,isAbsolute,basename}from'path';import {fileURLToPath}from'url';import*as us from'fs';import {existsSync,readFileSync,readdirSync,mkdirSync,writeFileSync,renameSync,appendFileSync,promises,statSync}from'fs';import {spawn,execFile,execFileSync}from'child_process';import {StringDecoder}from'string_decoder';import {ndJsonStream,ClientSideConnection}from'@agentclientprotocol/sdk';import {load,dump}from'js-yaml';import {z}from'zod';import {createRequire}from'module';import*as Ae from'handlebars';import Ae__default from'handlebars';import {readFile,access,readdir}from'fs/promises';import {createHash,randomBytes}from'crypto';import {EventEmitter}from'events';import {AsyncLocalStorage}from'async_hooks';import {sql,eq,desc,and,isNull,lt,or,like,asc,inArray,gte,isNotNull,ne,notLike}from'drizzle-orm';import ad,{homedir}from'os';import {sqliteTable,text,integer,real,index,unique,uniqueIndex,primaryKey}from'drizzle-orm/sqlite-core';import {McpServer}from'@modelcontextprotocol/sdk/server/mcp.js';import {WebStandardStreamableHTTPServerTransport}from'@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js';import {performance}from'perf_hooks';var Kr=Object.defineProperty;var mi=Object.getOwnPropertyDescriptor;var hi=Object.getOwnPropertyNames;var yi=Object.prototype.hasOwnProperty;var se=(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 N=(n,e)=>()=>(n&&(e=n(n=0)),e);var cr=(n,e)=>{for(var t in e)Kr(n,t,{get:e[t],enumerable:true});},wi=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of hi(e))!yi.call(n,o)&&o!==t&&Kr(n,o,{get:()=>e[o],enumerable:!(r=mi(e,o))||r.enumerable});return n};var fo=n=>wi(Kr({},"__esModule",{value:true}),n);var mo,ki,h,y,u=N(()=>{mo=()=>fileURLToPath(import.meta.url),ki=()=>G__default.dirname(mo()),h=ki(),y=mo();});function fr(n){return typeof n!="string"?void 0:n.trim()||void 0}function mr(n){return fr(n)?.toLowerCase()??""}function yt(n){try{return statSync(n).isFile()}catch{return false}}function Di(n,e){if(n===e)return true;let t=G__default.relative(n,e);return t!==""&&!t.startsWith("..")&&!G__default.isAbsolute(t)}function Li(n,e){if(G__default.basename(n)!==".bin")return false;let t=G__default.dirname(n);if(G__default.basename(t)!=="node_modules")return false;let r=G__default.dirname(t);return Di(r,e)}function Ot(n,e={}){if(n.includes("/")||n.includes("\\")||G__default.isAbsolute(n))return n;let t=e.platform??process.platform,r=e.env??process.env,o=G__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(g=>g.trim()).filter(Boolean),l=G__default.extname(n).length>0,c=r.PATHEXT??r.Pathext??process.env.PATHEXT??process.env.Pathext??".EXE;.CMD;.BAT;.COM",f=t==="win32"?l?[""]:c.split(";").map(g=>g.trim()).filter(Boolean).map(g=>g.startsWith(".")?g:`.${g}`):[""];for(let g of d){let m=G__default.resolve(o,g);if(!(s&&Li(m,o)))for(let _ of f){let v=mr(_),x=_.toUpperCase();for(let w of [_,v,x]){let k=G__default.join(m,`${n}${w}`);if(yt(k))return k}}}return n}function $i(n,e){return Ot(n,{env:e,platform:"win32",resolution:"local_first"})}function Ui(n){if(!yt(n))return null;try{let e=readFileSync(n,"utf8"),t=G__default.dirname(n),r=[];for(let a of e.matchAll(/"([^"\r\n]*)"/g)){let c=(a[1]??"").match(/%~?dp0%?\s*[\\/]*(.*)$/i)?.[1]?.trim();if(!c)continue;let f=c.replace(/[\\/]+/g,G__default.sep).replace(/^[\\/]+/,""),g=G__default.resolve(t,f);yt(g)&&r.push(g);}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,G__default.sep).replace(/^[\\/]+/,"");s.set(d,G__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&&yt(l)&&o.push(l);}let i=a=>a.find(d=>{let l=mr(G__default.basename(d));return l!=="node.exe"&&l!=="node"})??null;return i(o)??i(r)}catch{return null}}function ji(n,e){if(typeof e=="string")return fr(e)||null;if(!e||typeof e!="object")return null;if(n){let t=e[n],r=typeof t=="string"?fr(t):void 0;if(r)return r}for(let t of Object.values(e)){let r=typeof t=="string"?fr(t):void 0;if(r)return r}return null}function Wi(n,e){if(!e)return null;let t=G__default.dirname(n),r=[G__default.resolve(t,"..",e),G__default.resolve(t,"node_modules",e)];for(let o of r){let s=G__default.join(o,"package.json");if(yt(s))try{let i=JSON.parse(readFileSync(s,"utf8")),a=ji(e,i.bin);if(!a)continue;let d=G__default.resolve(o,a);if(yt(d))return d}catch{}}return null}function Fi(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:Ot(n.command,{cwd:o,env:t,platform:e,resolution:s}),leadingArgv:[],resolution:"direct"};let i=Ot(n.command,{cwd:o,env:t,platform:e,resolution:s}),a=mr(G__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=Ui(i)??Wi(i,n.packageName);return d?mr(G__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 Hi(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(`${G__default.basename(n.candidate.command)} wrapper resolved, but no executable/Node entrypoint could be resolved without shell execution.`)}function Ye(n){let e=Fi(n);return Hi({candidate:e,allowShellFallback:n.allowShellFallback})}function Qe(n,e){return {command:n.command,argv:[...n.leadingArgv,...e],resolution:n.resolution,shell:n.shell,windowsHide:n.windowsHide}}var wt=N(()=>{u();});function Bi(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 qi(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 zi(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 vo(n){let e=new Map,t;for(let s of n.split(`
|
|
2
|
+
`))if(s.trim())try{let i=JSON.parse(s);if(i.type!=="assistant")continue;let a=i.message,d=a?.id,l=a?.usage;if(typeof d!="string"||!l)continue;let c=Number(l.input_tokens??0),f=Number(l.cache_read_input_tokens??0);e.set(d,{inputTokens:c+f,cachedInputTokens:f});let g=a?.model;typeof g=="string"&&g&&(t=g);}catch{}if(e.size===0)return;let r=0,o=0;for(let s of e.values())r+=s.inputTokens,o+=s.cachedInputTokens;return {inputTokens:r,cachedInputTokens:o,model:t}}function Pe(n){if(!n||!n.trim())return;let e=null,t=null;for(let r of n.split(`
|
|
3
|
+
`))if(r.trim())try{let o=JSON.parse(r),s=zi(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=Bi(o)??qi(o);i&&(e=i);}catch{}return t||(e??void 0)}var Ze=N(()=>{u();});var C,et,tt,Mt=N(()=>{u();C=class extends Error{constructor(t,r,o){super(t);this.providerStr=r;this.name="ProviderError",this.code=o?.code??"UNKNOWN",this.kind=o?.kind??(this.code==="UNKNOWN"?"transient":void 0),this.retryAfterMs=o?.retryAfterMs;}providerStr;code;kind;retryAfterMs;stdout},et=class extends C{constructor(e,t){super(e,t,{code:"TIMEOUT_IDLE",kind:"permanent"}),this.name="IdleTimeoutError";}},tt=class extends C{constructor(e,t){super(e,t,{code:"TIMEOUT_TOTAL",kind:"permanent"}),this.name="TotalTimeoutError";}};});var rt,Vr=N(()=>{u();Mt();rt=class extends C{name="RateLimitError";constructor(e,t="cli/claude"){super(e,t,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function ge(n){return /crewx\s+(x|execute)\s/.test(n)}function fe(n,e){let t=e.match(/@(\S+)/);return {timestamp:n,type:"agent_call",targetAgent:t?.[1]?.replace(/["']/g,""),toolInput:e}}var _t=N(()=>{u();});function me(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 vt=N(()=>{u();});function hr(n){if(!n)return {};let e=n.match(/^(.+?)\[([^\]]+)\]$/);if(e){let t=e[2].toLowerCase();return Ki.has(t)?{model:e[1],effort:e[2]}:{model:n}}return {model:n}}function ko(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 xo(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 Ao(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 Ro(n){return n?new Set(["low","medium","high","xhigh","max"]).has(n)?["--effort",n]:[]:[]}var Ki,Jr=N(()=>{u();Ki=new Set(["minimal","low","medium","high","xhigh","max"]);});var Xr,Co=N(()=>{u();Xr={claude:{models:[{id:"claude-fable-5",name:"Claude Fable 5"},{id:"claude-opus-5",name:"Claude Opus 5"},{id:"claude-sonnet-5",name:"Claude Sonnet 5"},{id:"claude-opus-4-8[1m]",name:"Claude Opus 4.8 (Extended)"},{id:"claude-opus-4-8",name:"Claude Opus 4.8"},{id:"claude-opus-4-7[1m]",name:"Claude Opus 4.7 (Extended)"},{id:"claude-opus-4-7",name:"Claude Opus 4.7"},{id:"claude-opus-4-6[1m]",name:"Claude Opus 4.6 (Extended)"},{id:"claude-opus-4-6",name:"Claude Opus 4.6"},{id:"claude-sonnet-4-6[1m]",name:"Claude Sonnet 4.6 (Extended)"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5"}],modes:[{id:"default",name:"Default"},{id:"acceptEdits",name:"Accept Edits"},{id:"plan",name:"Plan"},{id:"auto",name:"Auto"},{id:"dontAsk",name:"Don't Ask"},{id:"bypassPermissions",name:"Bypass Permissions"}],effort:["low","medium","high"],modelOverrides:{"claude-fable-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-sonnet-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-8[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-8":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-7[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-7":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-opus-4-6":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-haiku-4-5":{effort:[]}}},codex:{models:[{id:"gpt-5.6-sol",name:"GPT-5.6 Sol"},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra"},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna"},{id:"gpt-5.5",name:"GPT-5.5"},{id:"gpt-5.4",name:"GPT-5.4"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini"},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex"},{id:"gpt-5.3-codex-spark",name:"GPT-5.3 Codex Spark"}],modes:[{id:"agent",name:"Agent"},{id:"read-only",name:"Read Only"},{id:"plan",name:"Plan"},{id:"agent-full-access",name:"Agent Full Access"},{id:"yolo",name:"YOLO"}],effort:["minimal","low","medium","high"],modelOverrides:{"gpt-5.6-sol":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"xhigh"},"gpt-5.6-terra":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.6-luna":{effort:["none","low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.5":{effort:["minimal","low","medium","high","xhigh"],defaultEffort:"high"}}},copilot:{models:[{id:"auto",name:"Auto"},{id:"claude-sonnet-5",name:"Claude Sonnet 5"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"gpt-5.5",name:"GPT-5.5"},{id:"gpt-5.4",name:"GPT-5.4"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro"}],modes:[{id:"interactive",name:"Interactive"},{id:"plan",name:"Plan"},{id:"autopilot",name:"Autopilot"}],effort:["none","low","medium","high","xhigh","max"],modelOverrides:{}},antigravity:{models:[{id:"Gemini 3.5 Flash (Medium)",name:"Gemini 3.5 Flash (Medium)"},{id:"Gemini 3.5 Flash (High)",name:"Gemini 3.5 Flash (High)"},{id:"Gemini 3.5 Flash (Low)",name:"Gemini 3.5 Flash (Low)"},{id:"Gemini 3.1 Pro (Low)",name:"Gemini 3.1 Pro (Low)"},{id:"Gemini 3.1 Pro (High)",name:"Gemini 3.1 Pro (High)"},{id:"Claude Sonnet 4.6 (Thinking)",name:"Claude Sonnet 4.6 (Thinking)"},{id:"Claude Opus 4.6 (Thinking)",name:"Claude Opus 4.6 (Thinking)"},{id:"GPT-OSS 120B (Medium)",name:"GPT-OSS 120B (Medium)"}],modes:[],effort:[],modelOverrides:{}}},Object.fromEntries(Object.entries(Xr).map(([n,e])=>[n,e.models]));});function bo(){return {models:[],modes:[],effort:[],modelOverrides:{}}}function Gi(n){return Array.isArray(n)?{models:n,modes:[],effort:[],modelOverrides:{}}:n?{models:n.models??[],modes:n.modes??[],effort:n.effort??[],modelOverrides:n.modelOverrides??{}}:bo()}function Qr(n){Yr=Object.fromEntries(Object.entries(n).map(([e,t])=>[e,Gi(t)]));}function Vi(){Yr={};}function nt(n){return kt(n).models}function kt(n){return Yr[n]??Xr[n]??bo()}function Nt(n){return kt(n).modes}function Dt(n,e){let t=kt(n);return e?t.modelOverrides[e]?.effort??t.effort:t.effort}function To(n){return kt(n).modelOverrides}function Lt(){return nt("claude")}function Zr(){return nt("codex")}function en(){return nt("copilot")}function tn(){return nt("antigravity")}function $t(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 Yr,ve=N(()=>{u();Co();Yr={};});function Xi(n){let t=n.message?.content;return Array.isArray(t)?t.map(r=>typeof r.text=="string"?r.text.trim():"").filter(Boolean).join(`
|
|
4
4
|
|
|
5
|
-
`):""}function
|
|
6
|
-
`):i=JSON.stringify(s),{timestamp:n,type:"tool_result",toolUseId:o,resultPreview:i,isError:r}}return null}var
|
|
7
|
-
`).filter(o=>o.trim()),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant"&&Array.isArray(s.message?.content))for(let i of s.message.content)i.type==="text"&&typeof i.text=="string"&&i.text.trim()&&t.push(i.text.trim());s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},extractFailure(n){try{let e=JSON.parse(n);if(e.type==="rate_limit_event"){let t=e.rate_limit_info??{};if(t.status==="rejected")return new
|
|
8
|
-
`);for(let r of e)if(r.trim())try{let o=JSON.parse(r);if(o.type==="result"){let s=o.usage,i=s?{inputTokens:Number(s.input_tokens??0)+Number(s.cache_read_input_tokens??0),outputTokens:Number(s.output_tokens??0),cachedInputTokens:Number(s.cache_read_input_tokens??0),costUsd:Number(o.total_cost_usd??0)}:null,a=o.modelUsage,d=a?Object.keys(a)[0]??null:null;return {usage:i,model:d}}}catch{}let t=
|
|
9
|
-
`).filter(o=>o.trim()),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant.message"&&typeof s.data?.content=="string"){let i=s.data.content;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=
|
|
10
|
-
`).map(o=>o.trim()).filter(Boolean),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="item.completed"&&(s.item?.type==="message"||s.item?.type==="agent_message")&&typeof s.item?.text=="string"){let i=s.item.text;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=
|
|
11
|
-
`).map(o=>o.trim()).filter(Boolean),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="text"&&typeof s.part?.text=="string"){let i=s.part.text;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=
|
|
5
|
+
`):""}function Yi(n){let e=n.toLowerCase();return e.includes("out of extra usage")||e.includes("rate limit")||e.includes("quota")}function Qi(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=me(s);return r==="Bash"&&ge(i)?fe(n,i):{timestamp:n,type:"tool_use",toolUseId:o,toolName:r,toolInput:i}}if(t==="tool_result"){let r=!!e.is_error,o=e.tool_use_id,s=e.output??e.content??"",i;return typeof s=="string"?i=s:Array.isArray(s)?i=s.filter(a=>a.type==="text"&&typeof a.text=="string").map(a=>a.text).join(`
|
|
6
|
+
`):i=JSON.stringify(s),{timestamp:n,type:"tool_result",toolUseId:o,resultPreview:i,isError:r}}return null}var Ji,yr,rn=N(()=>{u();Vr();_t();vt();Jr();ve();Ze();Ji=new Set(["tool_progress"]),yr={command:"claude",meta:{displayName:"Claude",models:Lt(),capabilities:{resume:true}},buildArgs(n,e,t){let{model:r,effort:o}=hr(e.model),s=e.effort??o,i=Eo(e.mode),a=Ro(s),d=r?["--model",r]:[],l=e.resumeSessionId?["--resume",e.resumeSessionId]:[];if(e.additionalArgs!==void 0){let f=[...e.additionalArgs];return f.indexOf("-p")!==-1?{args:["--output-format","stream-json","--verbose",...l,...i,...a,...d,...f],stdinMessage:n}:{args:["--output-format","stream-json","--verbose",...l,...i,...a,...d,...f],stdinMessage:n}}return {args:["-p","--output-format","stream-json","--verbose",...l,...i,...a,...d],stdinMessage:n}},extractText(n){let e=n.split(`
|
|
7
|
+
`).filter(o=>o.trim()),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant"&&Array.isArray(s.message?.content))for(let i of s.message.content)i.type==="text"&&typeof i.text=="string"&&i.text.trim()&&t.push(i.text.trim());s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},extractFailure(n){try{let e=JSON.parse(n);if(e.type==="rate_limit_event"){let t=e.rate_limit_info??{};if(t.status==="rejected")return new rt(`Claude rate limit: ${t.rateLimitType??"unknown"} (status: ${t.status})`)}if(e.error==="rate_limit"){let t=Xi(e);return new rt(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(Yi(t))return new rt(`Claude rate limit: ${t}`)}}catch{}return null},parseResultMeta(n){let e=n.split(`
|
|
8
|
+
`);for(let r of e)if(r.trim())try{let o=JSON.parse(r);if(o.type==="result"){let s=o.usage,i=s?{inputTokens:Number(s.input_tokens??0)+Number(s.cache_read_input_tokens??0),outputTokens:Number(s.output_tokens??0),cachedInputTokens:Number(s.cache_read_input_tokens??0),costUsd:Number(o.total_cost_usd??0)}:null,a=o.modelUsage,d=a?Object.keys(a)[0]??null:null;return {usage:i,model:d}}}catch{}let t=vo(n);return t?{usage:{inputTokens:t.inputTokens,outputTokens:0,cachedInputTokens:t.cachedInputTokens,costUsd:0},model:t.model??null}:{usage:null,model:null}},parseEvent(n,e){let t;try{t=JSON.parse(n);}catch{return []}let r=t.type;if(!r)return [];if(r!=="assistant"&&r!=="user")return [];let s=t.message?.content;if(!Array.isArray(s))return [];let i=e??new Date().toISOString(),a=[];for(let d of s){let l=Qi(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?Ji.has(r):!1}catch{return false}}};});var Zi,ea,wr,nn=N(()=>{u();Ze();_t();vt();ve();Zi=new Set(["interactive","plan","autopilot"]),ea=new Set(["none","low","medium","high","xhigh","max"]),wr={command:"copilot",meta:{displayName:"Copilot",models:en()},buildArgs(n,e,t){let r=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&r.push("--model",e.model),e.mode&&Zi.has(e.mode)&&r.push("--mode",e.mode),e.effort&&ea.has(e.effort)&&r.push("--effort",e.effort),{args:r,stdinMessage:n}},extractText(n){let e=n.split(`
|
|
9
|
+
`).filter(o=>o.trim()),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant.message"&&typeof s.data?.content=="string"){let i=s.data.content;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=Pe(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=me(d);return (a==="bash"||a==="Bash")&&ge(l)?[fe(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 ra(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 na(n){return n[0]==="exec"?n.slice(1):n}function oa(n,e){let t=e.type;if(t==="command_execution"){let r=String(e.command||"");return ge(r)?[fe(n,r)]:[{timestamp:n,type:"tool_use",toolName:"Bash",toolInput:r}]}return t==="web_search"?[]:t==="file_change"?[]:[]}function sa(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=ia(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=me(o);return r==="Bash"&&ge(s)?fe(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 ia(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=me(o);return r==="Bash"&&ge(s)?fe(n,s):{timestamp:n,type:"tool_use",toolName:r,toolInput:s}}return null}var ta,_r,on=N(()=>{u();Ze();_t();vt();Jr();ve();ta=new Set(["turn.started","turn.completed","item.updated"]);_r={command:"codex",meta:{displayName:"Codex",models:Zr(),capabilities:{resume:true}},buildArgs(n,e,t){let{model:r,effort:o}=hr(e.model),s=e.effort??o,i=e.resumeSessionId?xo(e.mode):ko(e.mode),a=Ao(s),d=r?["-m",r]:[],l=na(e.additionalArgs??[]),f=l.includes("--json")||l.includes("--experimental-json")?[]:["--json"];return e.resumeSessionId?{args:["exec","resume",...f,...i,...a,...d,...l,e.resumeSessionId,"-"],stdinMessage:n}:{args:["exec",...f,...i,...a,...d,...l],stdinMessage:n}},extractText(n){let e=n.split(`
|
|
10
|
+
`).map(o=>o.trim()).filter(Boolean),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="item.completed"&&(s.item?.type==="message"||s.item?.type==="agent_message")&&typeof s.item?.text=="string"){let i=s.item.text;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=Pe(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=ra(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(...oa(t,d));continue}if(a==="item.completed"){let l=sa(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?ta.has(r):!1}catch{return false}}};});function ca(n){return n?n==="default"||n==="build"?{agent:"build",skipPermissions:false}:n==="plan"?{agent:"plan",skipPermissions:false}:da.has(n)?{agent:"build",skipPermissions:true}:{agent:la.has(n)?n:"build",skipPermissions:false}:{agent:void 0,skipPermissions:false}}function ua(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 aa,da,la,vr,sn=N(()=>{u();Ze();vt();aa=new Set(["step_start","step_finish"]),da=new Set(["bypassPermissions","yolo","agent-full-access"]),la=new Set(["build","plan"]);vr={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}=ca(e.mode);o.includes("--agent")||s!==void 0&&o.push("--agent",s),t&&i&&!o.includes("--dangerously-skip-permissions")&&o.push("--dangerously-skip-permissions"),e.effort!==void 0&&!o.includes("--variant")&&o.push("--variant",e.effort),e.model&&o.push("--model",e.model);let a;return !t&&!e.env?.OPENCODE_PERMISSION&&(a={OPENCODE_PERMISSION:JSON.stringify({external_directory:"allow"})}),{args:o,stdinMessage:n,env:a}},extractText(n){let e=n.split(`
|
|
11
|
+
`).map(o=>o.trim()).filter(Boolean),t=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="text"&&typeof s.part?.text=="string"){let i=s.part.text;i.trim()&&t.push(i.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}return t.length>0?t[t.length-1]:r||n.trim()},parseResultMeta(n){let e=Pe(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=ua(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||""),c=String(d.callID||""),f=d.state,g=String(f?.status||""),m=f?.input,_=me(m);if(r.push({timestamp:t,type:"tool_use",toolName:l,toolUseId:c,toolInput:_}),g==="completed"&&f?.output!==void 0){let v=f.output,x=typeof v=="string"?v:JSON.stringify(v);r.push({timestamp:t,type:"tool_result",toolUseId:c,resultPreview:x,isError:false});}else g==="error"&&r.push({timestamp:t,type:"tool_result",toolUseId:c,resultPreview:String(f?.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?aa.has(r):!1}catch{return false}}};});var an,dn=N(()=>{u();Mt();ve();an={command:"agy",meta:{displayName:"Antigravity",models:tn(),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 C("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 Po,So=N(()=>{u();_t();vt();Po={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=me(a);return /^bash$/i.test(s)&&ge(d)?[fe(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 Ut(n,e,t){if(t){let r=ke[t];if(r?.parseEvent)return r.parseEvent(e,n);let o=pa[t];if(o?.parseEvent)return o.parseEvent(e,n)}for(let r of Object.values(ke)){let o=r.parseEvent?.(e,n)??[];if(o.length>0)return o}return []}var ke,pa,Ue=N(()=>{u();rn();nn();on();sn();dn();So();rn();nn();on();sn();dn();_t();ke={codex:_r,claude:yr,opencode:vr,antigravity:an,copilot:wr},pa={gemini:Po};});var xt,ln=N(()=>{u();xt=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 Io(n,e){if(n===void 0||n==="")return e;let t=parseInt(n,10);return Number.isNaN(t)?e:t}function cn(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 Oo(n=process.env){return {queryMs:Io(n.CREWX_TIMEOUT_QUERY,288e5),executeMs:Io(n.CREWX_TIMEOUT_EXECUTE,288e5),idleMs:cn(n)??6e5}}var kr=N(()=>{u();});function fa(n){let e=n.split(`
|
|
12
12
|
`).filter(d=>d.trim()),t=[],r=[],o=[],s=[],i=[],a=null;for(let d of e)try{let l=JSON.parse(d);if(l.type==="assistant"&&Array.isArray(l.message?.content))for(let c of l.message.content)c.type==="text"&&typeof c.text=="string"&&c.text.trim()&&t.push(c.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 c=l.data.content;c.trim()&&o.push(c.trim());}if(l.type==="item.completed"&&(l.item?.type==="message"||l.item?.type==="agent_message")&&typeof l.item?.text=="string"){let c=l.item.text;c.trim()&&s.push(c.trim());}if(l.type==="text"&&typeof l.part?.text=="string"){let c=l.part.text;c.trim()&&i.push(c.trim());}l.type==="result"&&typeof l.result=="string"&&(a=l.result);}catch{}return t.length>0?t.join(`
|
|
13
13
|
|
|
14
14
|
`):r.length>0?r.join(""):o.length>0?o.join(`
|
|
15
15
|
|
|
16
16
|
`):s.length>0?s.join(`
|
|
17
17
|
|
|
18
|
-
`):i.length>0?i.join(""):a||n.trim()}function
|
|
19
|
-
`);Q=
|
|
20
|
-
`);L=
|
|
18
|
+
`):i.length>0?i.join(""):a||n.trim()}function ma(n){let e=Pe(n);return e?{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0}:null}function ha(n,e,t=process.platform){return n==="copilot"&&t==="win32"&&e instanceof C&&e.message.includes('CLI command "copilot" not found')}function No(n,e,t,r,o,s,i){return new Promise((a,d)=>{let l=o?.timeoutMs??288e5,c=o?.idleMs??6e5,f={...process.env,...o?.env??{}},g=o?.cwd??process.cwd(),m=Ye({command:n,env:f,cwd:g,allowShellFallback:true}),_=Qe(m,e),v=spawn(_.command,_.argv,{env:f,cwd:o?.cwd,stdio:["pipe","pipe","pipe"],shell:_.shell??false,windowsHide:_.windowsHide,detached:process.platform!=="win32"});v.stdin.on("error",j=>{j.code!=="EPIPE"&&o?.onOutput?.(`stdin error: ${j.message}`,"stderr");}),s!==void 0&&v.stdin.write(s),v.stdin.end(),v.pid!==void 0&&o?.onPid?.(v.pid);let x=false,w=false,k=j=>{if(v.pid!==void 0)try{process.platform==="win32"?v.kill(j):process.kill(-v.pid,j);}catch{}},E=()=>{k("SIGKILL");},T=setTimeout(()=>{x||(w=true,J?.stop(),k("SIGTERM"),setTimeout(E,jt).unref());},l);T.unref();let J=c>0?new xt({timeoutMs:c,onIdle:()=>{if(x)return;x=true,clearTimeout(T),k("SIGTERM"),setTimeout(E,jt).unref();let j=Math.round(c/6e4);ee(new et(`${t} produced no output for ${j}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 U=new StringDecoder("utf8"),O=new StringDecoder("utf8"),D="",le="",Q="",L="",ee=j=>{j instanceof Error&&(j.stdout=D),d(j);};v.stdout.on("data",j=>{J?.refresh();let oe=U.write(j);D+=oe,Q+=oe;let q=Q.split(`
|
|
19
|
+
`);Q=q.pop()??"";for(let H of q)if(H.trim()&&(o?.onOutput?.(H,"stdout"),i?.extractFailure)){let Z=i.extractFailure(H);if(Z){x=true,clearTimeout(T),J?.stop(),k("SIGTERM"),setTimeout(E,jt).unref(),ee(Z);return}}}),v.stderr.on("data",j=>{J?.refresh();let oe=O.write(j);le+=oe,L+=oe;let q=L.split(`
|
|
20
|
+
`);L=q.pop()??"";for(let H of q)H.trim()&&o?.onOutput?.(H,"stderr");}),v.on("error",j=>{x=true,clearTimeout(T),J?.stop(),j.code==="ENOENT"?ee(new C(`CLI command "${n}" not found. Is ${t} installed?`,t)):ee(new C(`Spawn error: ${j.message}`,t));}),v.on("close",(j,oe)=>{if(x)return;x=true,clearTimeout(T),J?.stop();let q=U.end(),H=O.end();q&&(D+=q,Q+=q),H&&(le+=H,L+=H),Q.trim()&&o?.onOutput?.(Q,"stdout"),L.trim()&&o?.onOutput?.(L,"stderr");let Z=j??0;if(o?.onExitCode?.(Z),w)return ee(new tt(`Total runtime exceeded ${l}ms; process killed.`,t));if(oe)return ee(new C(`Process terminated by signal ${oe}`,t,{code:"PROVIDER_CRASHED",kind:"permanent"}));if(Z!==0){if(i?.interpretExit){let z=i.interpretExit(Z,le);if(z){ee(z);return}}ee(new C(`Process exited with code ${Z}: ${le.slice(0,500)}`,t));return}let X;try{X=i?i.extractText(D):fa(D);}catch(z){ee(z instanceof Error?z:new C(String(z),t));return}a({stdout:D,parsed:X});});})}function Se(n,e){Do.set(n,e);}function Ie(n,e){let t=n.split("/");if(t.length!==2)throw new C(`Invalid provider format: "${n}". Expected namespace/id (e.g., cli/claude)`,n);let[r,o]=t,s=Do.get(r);if(s)return s(o,n);if(r==="cli"){let i=ke[o];if(!i)throw new C(`Unknown CLI provider id: "${o}". Supported: ${Object.keys(ke).join(", ")}`,n);return new un(o,i,n,e)}throw new C(`Unsupported provider namespace: "${r}". Register a factory with registerProviderFactory('${r}', factory).`,n)}function Lo(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 jt,he,Do,un,xe=N(()=>{u();wt();Ze();Ue();Mt();ln();kr();Mt();jt=2e3;he=class extends Error{constructor(t,r){super(`Client tool call required: ${t.toolName}`);this.toolCall=t;this.continuationState=r;}toolCall;continuationState;name="ClientToolCallRequiredError"},Do=new Map;un=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:c}=await this.runProcess(s,d,i);return this.handleResultMeta(l,o),c}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:c}=await this.runProcess(s,d,i);return this.handleResultMeta(l,o),c}applyAdditionalArgs(e){return Lo(e,this.additionalArgsProvider,{providerStr:this.providerStr,providerId:this.providerId})}composeMessage(e,t){return t?.systemPrompt?`${t.systemPrompt}
|
|
21
21
|
|
|
22
22
|
---
|
|
23
23
|
|
|
24
|
-
${e}`:e}async runProcess(e,t,r){try{return await
|
|
25
|
-
`);this.stderrBuffer=E.pop()??"";for(let
|
|
24
|
+
${e}`:e}async runProcess(e,t,r){try{return await No(this.adapter.command,e,this.providerStr,this.providerId,t,r,this.adapter)}catch(o){if(ha(this.providerId,o)){let s=e[0]==="copilot"?e:["copilot",...e];try{return await No("gh",s,this.providerStr,this.providerId,t,r,this.adapter)}catch(i){throw this.recoverPartialUsage(i,t),i}}throw this.recoverPartialUsage(o,t),o}}recoverPartialUsage(e,t){let r=e instanceof Error?e.stdout:void 0;typeof r=="string"&&r.length>0&&this.handleResultMeta(r,t);}handleResultMeta(e,t){if(!this.adapter.parseResultMeta){let i=ma(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 Tn(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 ye(n,e){try{let t=JSON.parse(n);if(t!=null&&typeof t=="object"&&typeof t.type=="string"&&od.has(t.type)){let r=e??new Date().toISOString();return [{...t,timestamp:t.timestamp||r}]}}catch{}return []}var od,je=N(()=>{u();od=new Set(["text","tool_use","tool_result","error","running_instruction","agent_call"]);});var ws,_s,Qt,Dn=N(()=>{u();xe();ws=10,_s=50,Qt=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??ws,_s);try{let l=0,c=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:g=>{if(l++,!!r?.onOutput){if(g.toolCalls&&g.toolCalls.length>0)for(let m of g.toolCalls)r.onOutput(JSON.stringify({type:"assistant",message:{content:[{type:"tool_use",id:m.toolCallId,name:m.toolName,input:m.args}]}}),"stdout");if(g.toolResults&&g.toolResults.length>0)for(let m of g.toolResults){let _=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:_,is_error:!1}]}}),"stdout");}}}}),f=new Set((r?.tools??[]).filter(g=>!g.execute).map(g=>g.name));if(c.finishReason==="tool-calls"&&Array.isArray(c.toolCalls)&&c.toolCalls.length>0){let g=c.toolCalls.filter(m=>f.has(m.toolName));if(g.length>0){let m=g[0];throw new he({toolCallId:m.toolCallId,toolName:m.toolName,args:m.args},{userMessage:e,responseMessages:c.response?.messages??[],toolDefinitions:r?.tools??[],maxSteps:d,systemPrompt:r?.systemPrompt,modelOverride:r?.model})}}if(r?.onUsage&&c.usage){let g={inputTokens:c.usage.promptTokens??0,outputTokens:c.usage.completionTokens??0,cachedInputTokens:0,costUsd:0};r.onUsage(g);}return r?.onModel&&r.onModel(r.model??this.config.model),c.text??""}catch(l){throw l instanceof he?l:l.status===401?new C(`Authentication failed for ${this.config.provider}. Check your API key.`,this.config.provider):l.status===429?new C(`Rate limit exceeded for ${this.config.provider}.`,this.config.provider):new C(`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??ws,_s),l=[{role:"user",content:e.userMessage},...e.responseMessages,{role:"tool",content:t.map(c=>({type:"tool-result",toolCallId:c.toolCallId,toolName:c.toolName,result:typeof c.result=="string"?c.result:JSON.stringify(c.result)}))}];try{let c=await 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}}),f=new Set(e.toolDefinitions.filter(g=>!g.execute).map(g=>g.name));if(c.finishReason==="tool-calls"&&Array.isArray(c.toolCalls)&&c.toolCalls.length>0){let g=c.toolCalls.filter(m=>f.has(m.toolName));if(g.length>0){let m=g[0];throw new he({toolCallId:m.toolCallId,toolName:m.toolName,args:m.args},{userMessage:e.userMessage,responseMessages:[...e.responseMessages,{role:"tool",content:t.map(_=>({type:"tool-result",toolCallId:_.toolCallId,toolName:_.toolName,result:typeof _.result=="string"?_.result:JSON.stringify(_.result)}))},...c.response?.messages??[]],toolDefinitions:e.toolDefinitions,maxSteps:e.maxSteps,systemPrompt:e.systemPrompt,modelOverride:e.modelOverride})}}return r?.onUsage&&c.usage&&r.onUsage({inputTokens:c.usage.promptTokens??0,outputTokens:c.usage.completionTokens??0,cachedInputTokens:0,costUsd:0}),r?.onModel&&r.onModel(e.modelOverride??this.config.model),c.text??""}catch(c){throw c instanceof he?c:new C(`Provider error: ${c.message}`,this.config.provider)}}convertTools(e,t){let{z:r}=se("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}=se("@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}=se("@ai-sdk/openai");return i({apiKey:r||process.env.OPENAI_API_KEY,...o&&{baseURL:o}})(s)}case "api/anthropic":{let{createAnthropic:i}=se("@ai-sdk/anthropic");return i({apiKey:r||process.env.ANTHROPIC_API_KEY,...o&&{baseURL:o}})(s)}case "api/google":{let{createGoogleGenerativeAI:i}=se("@ai-sdk/google");return i({apiKey:r||process.env.GOOGLE_API_KEY})(s)}default:throw new C(`Unsupported API provider: ${t}`,t)}}};});var ks={};cr(ks,{registerApiProviders:()=>vs});function vs(n){Se("api",(e,t)=>{let r=n?.apiKeys?.[e];return new Qt({provider:t,model:"",apiKey:r,maxSteps:n?.defaults?.maxSteps,temperature:n?.defaults?.temperature})});}var Ln=N(()=>{u();xe();Dn();});var Le,$n=N(()=>{u();Le=class extends Error{constructor(t,r,o){super(t);this.code=r;this.data=o;}code;data;name="AcpProtocolError"};});var ll,cl,xs,As,ul,gt,Dr=N(()=>{u();wt();$n();xe();ln();kr();ll=-32e3,cl=2e3,xs=3e4,As=1e4,ul=8*36e5,gt=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 C("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 w=Ye({command:t.command,env:o,cwd:s,allowShellFallback:r});i=Qe(w,t.args);}catch(w){throw new C(w instanceof Error?w.message:String(w),"acp")}let a=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",w=>{let k=w.toString();this.collectedStderr+=k,this.stderrBuffer+=k;let E=this.stderrBuffer.split(`
|
|
25
|
+
`);this.stderrBuffer=E.pop()??"";for(let P of E)P.trim()&&this.options.onStderr?.(P);}),this.proc=a;let d=this.options.idleMs??6e5;d>0&&(this.idlePromise=new Promise((w,k)=>{this.idleReject=k;}),this.idlePromise.catch(()=>{}),this.idleWatchdog=new xt({timeoutMs:d,onIdle:()=>{let w=Math.round(d/6e4),k=new et(`acp produced no output for ${w}m (idle timeout). Process killed. The CLI may be waiting on interactive input or stuck \u2014 check the prompt or retry.`,"acp");this.idleReject?.(k),this.dispose();}}),this.idleWatchdog.start()),a.stdin.on("error",w=>{w.code!=="EPIPE"&&this.options.onStderr?.(`ACP stdin error: ${w.message}`);});let l=new WritableStream({write:w=>new Promise((k,E)=>{a.stdin.write(w,P=>{P?E(P):k();});}),close:()=>{a.stdin.end();}}),c=new ReadableStream({start:w=>{a.stdout.on("data",k=>{this.idleWatchdog?.refresh(),w.enqueue(new Uint8Array(k));}),a.stdout.on("end",()=>{w.close();}),a.stdout.on("error",k=>{w.error(k);});}}),f=ndJsonStream(l,c),g=this,m=new ClientSideConnection(w=>({requestPermission:async k=>{if(g.options.configOptions?.allow_all!==void 0){let E=k.options;if(Array.isArray(E)&&E.length>0)return {outcome:{outcome:"selected",optionId:(E.find(T=>T.kind==="allow_once")??E.find(T=>T.kind?.startsWith("allow_"))??E[0]).optionId}}}return {outcome:{outcome:"cancelled"}}},sessionUpdate:async k=>{g.pendingUpdateCallback?.(k);}}),f);this.sdkConnection=m;let _=new Promise((w,k)=>{a.on("error",E=>{if(E.code==="ENOENT"){let T=t.command==="npx"&&t.args.length>0?`@agentclientprotocol/${t.args[0]}`:t.command;k(new C(`ACP command "${t.command}" not found. Is the ACP adapter installed? Try: npm install -g ${T}`,"acp"));}else k(new C(`ACP spawn error: ${E.message}`,"acp"));});}),v=this.doInitialize(m,e),x=new Promise((w,k)=>{setTimeout(()=>{k(new Le(`ACP connect timeout after ${xs}ms. The ACP adapter may not be installed or may require interactive setup.`));},xs).unref();});await Promise.race([v,x,_]);}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 C("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 C("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 Le(`ACP session/new timeout after ${As}ms`));},As).unref();});return Promise.race([t,r])}isAuthError(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code===ll}async tryAuthenticate(){if(!this.sdkConnection)throw new C("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 Le(`ACP authentication required. Missing environment variables: ${o.join(", ")}. Set them in your shell or crewx.yaml env block.`)}throw new Le(`ACP authentication required but no supported method found. Available methods: ${t}. CrewX currently supports env_var authentication only.`)}throw new Le("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 C("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 C("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 C("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 C("AcpConnection not connected. Call connect() first.","acp");this.pendingUpdateCallback=r??null;let s=this.sdkConnection,i=this.proc,a=o??ul,d=false,l=s.prompt({sessionId:e,prompt:t}).finally(()=>{d=true;}),c=new Promise((m,_)=>{setTimeout(()=>{s.cancel({sessionId:e}).catch(()=>{}),_(new tt(`ACP prompt timeout after ${a}ms`,"acp"));},a).unref();}),f=new Promise((m,_)=>{let v=(E,P,T)=>{if(d)return;let J=P!=null?`signal=${P}`:`code=${String(E)}`;_(new C(`ACP process terminated unexpectedly (${J}) [${T}]: ${this.collectedStderr.slice(-500)}`,"acp"));},x=(E,P)=>v(E,P,"exit"),w=(E,P)=>v(E,P,"close");i.once("exit",x),i.once("close",w);let k=()=>{i.off("exit",x),i.off("close",w);};l.then(k,k);}),g=[l,c,f];this.idlePromise&&g.push(this.idlePromise);try{return await Promise.race(g)}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");},cl);});}get isConnected(){return !this.disposed&&this.sdkConnection!==null&&this.proc!==null}};});function Es(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 pl,Zt,Un=N(()=>{u();je();Dr();pl={read:"Read",edit:"Edit",delete:"Delete",move:"Move",search:"Search",execute:"Bash",think:"Think",fetch:"WebFetch",switch_mode:"SwitchMode"};Zt=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 gt({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 c=this.composePrompt(e,t),f=[],g=await a.prompt(l,c,m=>this.handleUpdate(m,t,f),t?.timeoutMs);return this.handleUsage(g,t),f.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(`
|
|
26
26
|
|
|
27
|
-
`)}]}handleUpdate(e,t,r){let o=e.update;if(o.sessionUpdate==="agent_message_chunk"){let s=null;this.adapter.extractTextFromUpdate?s=this.adapter.extractTextFromUpdate(e):s=
|
|
27
|
+
`)}]}handleUpdate(e,t,r){let o=e.update;if(o.sessionUpdate==="agent_message_chunk"){let s=null;this.adapter.extractTextFromUpdate?s=this.adapter.extractTextFromUpdate(e):s=Tn(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),c={timestamp:s,type:"tool_use",toolUseId:i.toolCallId,toolName:l.toolName,toolInput:l.toolInput};t?.onTaskLog?.([c]);}}else o.sessionUpdate;}pushBlockBoundary(e){e.length===0||e[e.length-1].endsWith(`
|
|
28
28
|
|
|
29
29
|
`)||e.push(`
|
|
30
30
|
|
|
31
|
-
`);}resolveToolCall(e){let t=e._meta;if(t?.claudeCode?.toolName)return {toolName:t.claudeCode.toolName,toolInput:
|
|
32
|
-
`)}if(typeof e=="object"){let t=e;if(typeof t.formatted_output=="string")return t.formatted_output;if(typeof t.content=="string")return t.content;if(Array.isArray(t.content)){let r=this.extractResultPreview(t.content);if(r)return r}if(typeof t.output=="string")return t.output;if(typeof t.text=="string")return t.text;if(typeof t.message=="string")return t.message;if(t.result!=null){let r=this.extractResultPreview(t.result);if(r)return r}if(t.error!=null){let r=this.extractResultPreview(t.error);if(r)return r}}return JSON.stringify(e)}}handleUsage(e,t){if(!t?.onUsage)return;if(this.adapter.extractUsage){let o=this.adapter.extractUsage(e);if(o){t.onUsage(o);return}}let r=e.usage;r&&t.onUsage({inputTokens:r.inputTokens??0,outputTokens:r.outputTokens??0,cachedInputTokens:r.cachedReadTokens??0,costUsd:0});}};});var br,In=N(()=>{p();Le();br={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:fe};});var Sr,On=N(()=>{p();Le();Sr={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:fe};});var At,Ir,Mn=N(()=>{p();Le();At="https://agentclientprotocol.com/protocol/session-modes",Ir={spawn:{command:"copilot",args:["--acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"GitHub Copilot"},buildSessionParams(n){return {cwd:n.cwd?resolve(n.cwd):process.cwd(),mcpServers:[]}},yoloModeId:`${At}#autopilot`,buildEffortAction(n){return n?{type:"set_config_option",configId:"reasoning_effort",value:n}:null},resolveMode(n){return n.startsWith("https://")?n:{yolo:`${At}#autopilot`,default:`${At}#agent`,agent:`${At}#agent`,plan:`${At}#plan`,autopilot:`${At}#autopilot`}[n]??null},parseEvent:fe};});var Or,Nn=N(()=>{p();Le();Or={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:fe};});var ct,Mr=N(()=>{p();In();On();Mn();Nn();In();On();Mn();Nn();ct={codex:Sr,claude:br,opencode:Or,copilot:Ir};});var vs={};rr(vs,{registerAcpProviders:()=>ws});function ws(n){if(n){Pe("acp",n);return}Pe("acp",(e,t)=>{let r=ct[e];if(!r)throw new C(`Unknown ACP provider id: "${e}". Supported: ${Object.keys(ct).join(", ")}`,t);return new Kt(e,r,t)});}var Dn=N(()=>{p();ve();Sn();Mr();ve();});function el(n){if(!n)return n;let e=n.trim().replace(/\/+$/,"");return e.toLowerCase().endsWith("/mcp")?e.slice(0,-4):e}var Gt,Ln=N(()=>{p();Gt=class{endpoint;headers;timeoutMs;constructor(e){let t=el(e.url);this.endpoint=`${t}/mcp`,this.headers={"Content-Type":"application/json",...e.headers??{}},e.apiKey&&(this.headers.Authorization=`Bearer ${e.apiKey}`),this.timeoutMs=e.timeoutMs??3e4;}async send(e){let t=new AbortController,r=setTimeout(()=>t.abort(),this.timeoutMs);try{let o=await fetch(this.endpoint,{method:"POST",headers:this.headers,body:JSON.stringify(e),signal:t.signal});if(clearTimeout(r),!o.ok){let a=await o.text();throw new Error(`HTTP ${o.status}: ${o.statusText}${a?` - ${a}`:""}`)}let s=o.headers.get("content-type");if(s?.includes("application/json"))return await o.json();let i=await o.text();return {jsonrpc:"2.0",id:e.id,error:{code:-32600,message:`Unexpected response content-type: ${s}`,data:i}}}catch(o){throw clearTimeout(r),o instanceof Error&&o.name==="AbortError"?new Error(`MCP-HTTP request timeout after ${this.timeoutMs}ms to ${this.endpoint}`):o}}async close(){}};});var Vt,$n=N(()=>{p();Ln();Vt=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 Gt({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 ks={};rr(ks,{RemoteProviderRuntime:()=>Jt,createRemoteProviderFactory:()=>_s,resolveFileRemoteAgent:()=>dl});function il(n){let e=readFileSync(n,"utf-8"),t=load(e);return {agents:Array.isArray(t?.agents)?t.agents:void 0}}function al(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 dl(n,e=il,t=existsSync){let r=n.location.replace("file://","");if(!t(r))throw new Error(`Remote config file not found: ${r}`);if(!n.external_agent_id)throw new Error(`external_agent_id is required for file:// remote provider "${n.id}"`);let s=e(r).agents?.find(d=>d.id===n.external_agent_id);if(!s)throw new Error(`Agent "${n.external_agent_id}" not found in ${r}`);let i=al(s);if(!i)throw new Error(`Agent "${n.external_agent_id}" in ${r} has no provider configured`);if(i.startsWith("remote/"))throw new Error(`Chained remotes not allowed: ${n.id} \u2192 ${i}`);let a=resolve(dirname(r),s.working_directory??".");return {agent:{...s,working_directory:a},provider:i}}function _s(n,e=be){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 Jt(t,o,e)}}function ll(n,e){let t=e.location;if(!t)throw new Error("Remote provider config requires a location");if(!t.startsWith("http://")&&!t.startsWith("https://"))throw new Error(`Unsupported remote location protocol for MCP-HTTP: ${t}`);return {type:"mcp-http",url:t,apiKey:e.apiKey,headers:e.headers,timeoutMs:e.timeout?.query??3e4,agentId:e.external_agent_id??n}}var Jt,Un=N(()=>{p();ve();$n();Jt=class{manager;agentId;constructor(e,t,r=be){this.agentId=t.external_agent_id??e,this.manager=new Vt;let o=ll(e,t);this.manager.loadConfig(this.agentId,o);}async query(e,t){return (await this.manager.query(this.agentId,{agentId:this.agentId,query:e,model:t?.model,context:t?.context??t?.systemPrompt})).content.map(o=>o.text).join(`
|
|
31
|
+
`);}resolveToolCall(e){let t=e._meta;if(t?.claudeCode?.toolName)return {toolName:t.claudeCode.toolName,toolInput:Es(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=pl[e.kind??""]??e.title??"unknown",o=Es(e.rawInput,e.locations)??(e.title||void 0);return {toolName:r,toolInput:o}}extractResultPreview(e){if(e!=null){if(typeof e=="string")return e;if(Array.isArray(e)){let t=e.filter(r=>r!=null&&typeof r=="object"&&r.type==="text"&&typeof r.text=="string").map(r=>r.text);if(t.length>0)return t.join(`
|
|
32
|
+
`)}if(typeof e=="object"){let t=e;if(typeof t.formatted_output=="string")return t.formatted_output;if(typeof t.content=="string")return t.content;if(Array.isArray(t.content)){let r=this.extractResultPreview(t.content);if(r)return r}if(typeof t.output=="string")return t.output;if(typeof t.text=="string")return t.text;if(typeof t.message=="string")return t.message;if(t.result!=null){let r=this.extractResultPreview(t.result);if(r)return r}if(t.error!=null){let r=this.extractResultPreview(t.error);if(r)return r}}return JSON.stringify(e)}}handleUsage(e,t){if(!t?.onUsage)return;if(this.adapter.extractUsage){let o=this.adapter.extractUsage(e);if(o){t.onUsage(o);return}}let r=e.usage;r&&t.onUsage({inputTokens:r.inputTokens??0,outputTokens:r.outputTokens??0,cachedInputTokens:r.cachedReadTokens??0,costUsd:0});}};});var Lr,jn=N(()=>{u();je();Lr={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:ye};});var $r,Wn=N(()=>{u();je();$r={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:ye};});var bt,Ur,Fn=N(()=>{u();je();bt="https://agentclientprotocol.com/protocol/session-modes",Ur={spawn:{command:"copilot",args:["--acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"GitHub Copilot"},buildSessionParams(n){return {cwd:n.cwd?resolve(n.cwd):process.cwd(),mcpServers:[]}},yoloModeId:`${bt}#autopilot`,buildEffortAction(n){return n?{type:"set_config_option",configId:"reasoning_effort",value:n}:null},resolveMode(n){return n.startsWith("https://")?n:{yolo:`${bt}#autopilot`,default:`${bt}#agent`,agent:`${bt}#agent`,plan:`${bt}#plan`,autopilot:`${bt}#autopilot`}[n]??null},parseEvent:ye};});var jr,Hn=N(()=>{u();je();jr={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:ye};});var ft,Wr=N(()=>{u();jn();Wn();Fn();Hn();jn();Wn();Fn();Hn();ft={codex:$r,claude:Lr,opencode:jr,copilot:Ur};});var Cs={};cr(Cs,{registerAcpProviders:()=>Rs});function Rs(n){if(n){Se("acp",n);return}Se("acp",(e,t)=>{let r=ft[e];if(!r)throw new C(`Unknown ACP provider id: "${e}". Supported: ${Object.keys(ft).join(", ")}`,t);return new Zt(e,r,t)});}var Bn=N(()=>{u();xe();Un();Wr();xe();});function fl(n){if(!n)return n;let e=n.trim().replace(/\/+$/,"");return e.toLowerCase().endsWith("/mcp")?e.slice(0,-4):e}var er,qn=N(()=>{u();er=class{endpoint;headers;timeoutMs;constructor(e){let t=fl(e.url);this.endpoint=`${t}/mcp`,this.headers={"Content-Type":"application/json",...e.headers??{}},e.apiKey&&(this.headers.Authorization=`Bearer ${e.apiKey}`),this.timeoutMs=e.timeoutMs??3e4;}async send(e){let t=new AbortController,r=setTimeout(()=>t.abort(),this.timeoutMs);try{let o=await fetch(this.endpoint,{method:"POST",headers:this.headers,body:JSON.stringify(e),signal:t.signal});if(clearTimeout(r),!o.ok){let a=await o.text();throw new Error(`HTTP ${o.status}: ${o.statusText}${a?` - ${a}`:""}`)}let s=o.headers.get("content-type");if(s?.includes("application/json"))return await o.json();let i=await o.text();return {jsonrpc:"2.0",id:e.id,error:{code:-32600,message:`Unexpected response content-type: ${s}`,data:i}}}catch(o){throw clearTimeout(r),o instanceof Error&&o.name==="AbortError"?new Error(`MCP-HTTP request timeout after ${this.timeoutMs}ms to ${this.endpoint}`):o}}async close(){}};});var tr,zn=N(()=>{u();qn();tr=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 er({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={};cr(Ts,{RemoteProviderRuntime:()=>rr,createRemoteProviderFactory:()=>bs,resolveFileRemoteAgent:()=>xl});function vl(n){let e=readFileSync(n,"utf-8"),t=load(e);return {agents:Array.isArray(t?.agents)?t.agents:void 0}}function kl(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 xl(n,e=vl,t=existsSync){let r=n.location.replace("file://","");if(!t(r))throw new Error(`Remote config file not found: ${r}`);if(!n.external_agent_id)throw new Error(`external_agent_id is required for file:// remote provider "${n.id}"`);let s=e(r).agents?.find(d=>d.id===n.external_agent_id);if(!s)throw new Error(`Agent "${n.external_agent_id}" not found in ${r}`);let i=kl(s);if(!i)throw new Error(`Agent "${n.external_agent_id}" in ${r} has no provider configured`);if(i.startsWith("remote/"))throw new Error(`Chained remotes not allowed: ${n.id} \u2192 ${i}`);let a=resolve(dirname(r),s.working_directory??".");return {agent:{...s,working_directory:a},provider:i}}function bs(n,e=Ie){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 rr(t,o,e)}}function Al(n,e){let t=e.location;if(!t)throw new Error("Remote provider config requires a location");if(!t.startsWith("http://")&&!t.startsWith("https://"))throw new Error(`Unsupported remote location protocol for MCP-HTTP: ${t}`);return {type:"mcp-http",url:t,apiKey:e.apiKey,headers:e.headers,timeoutMs:e.timeout?.query??3e4,agentId:e.external_agent_id??n}}var rr,Kn=N(()=>{u();xe();zn();rr=class{manager;agentId;constructor(e,t,r=Ie){this.agentId=t.external_agent_id??e,this.manager=new tr;let o=Al(e,t);this.manager.loadConfig(this.agentId,o);}async query(e,t){return (await this.manager.query(this.agentId,{agentId:this.agentId,query:e,model:t?.model,context:t?.context??t?.systemPrompt})).content.map(o=>o.text).join(`
|
|
33
33
|
`)}async execute(e,t){return (await this.manager.execute(this.agentId,{agentId:this.agentId,task:e,model:t?.model,context:t?.context??t?.systemPrompt})).content.map(o=>o.text).join(`
|
|
34
|
-
`)}};});var
|
|
35
|
-
`);m=
|
|
36
|
-
`);
|
|
37
|
-
`+(t?` package anchor: ${join(t,
|
|
34
|
+
`)}};});var Os={};cr(Os,{PluginProviderRuntime:()=>nr,createPluginProviderFactory:()=>Is});function Is(n){return (e,t)=>{let r=n.get(e);if(!r)throw new C(`Plugin provider "${e}" not found. Available: ${Array.from(n.keys()).join(", ")||"(none)"}`,`plugin/${e}`);return new nr(e,r)}}function Ps(n,e,t,r){let o=n.map(s=>s.replace(/\{model\}/g,e));return r&&o.push(t),o}function Rl(n){if(!n||typeof n!="string")throw new Error("Plugin provider requires a cli_command")}function Ss(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 Cl(n){for(let{pattern:e}of n)if(typeof e!="string")throw new Error("Error pattern must be a string")}function bl(n){for(let[e,t]of Object.entries(n))if(typeof e!="string"||typeof t!="string")throw new Error("env entries must be string key/value pairs")}var nr,Gn=N(()=>{u();xe();wt();nr=class{constructor(e,t){this.config=t;this.providerStr=`plugin/${e}`,Rl(t.cli_command),Ss(t.query_args),Ss(t.execute_args),t.error_patterns&&Cl(t.error_patterns),t.env&&bl(t.env);}config;providerStr;async query(e,t){let r=t?.model??this.config.default_model??"default",o=Ps(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=Ps(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=Ye({command:this.config.cli_command,env:a,cwd:process.cwd(),resolution:this.config.prefer_local_bin?"local_first":"global_first",allowShellFallback:true}),l=Qe(d,e),c=spawn(l.command,l.argv,{env:a,shell:l.shell??false,stdio:["pipe","pipe","pipe"],windowsHide:l.windowsHide});r!==void 0&&c.stdin.write(r),c.stdin.end(),c.pid!==void 0&&t?.onPid?.(c.pid);let f="",g="",m="",_="";c.stdout.on("data",x=>{let w=x.toString();f+=w,m+=w;let k=m.split(`
|
|
35
|
+
`);m=k.pop()??"";for(let E of k)E.trim()&&t?.onOutput?.(E,"stdout");}),c.stderr.on("data",x=>{let w=x.toString();g+=w,_+=w;let k=_.split(`
|
|
36
|
+
`);_=k.pop()??"";for(let E of k)E.trim()&&t?.onOutput?.(E,"stderr");});let v=setTimeout(()=>{c.kill("SIGTERM"),i(new C(`Plugin provider "${this.providerStr}" timed out after ${o}ms`,this.providerStr));},o);c.on("error",x=>{if(clearTimeout(v),x.code==="ENOENT"){let w=this.config.not_installed_message??`CLI command "${this.config.cli_command}" not found. Is ${this.config.id} installed?`;i(new C(w,this.providerStr));}else i(new C(`Spawn error: ${x.message}`,this.providerStr));}),c.on("close",x=>{clearTimeout(v),m.trim()&&t?.onOutput?.(m,"stdout"),_.trim()&&t?.onOutput?.(_,"stderr");let w=x??0;if(t?.onExitCode?.(w),this.config.error_patterns){let k=g||f;for(let E of this.config.error_patterns)if(k.includes(E.pattern)){i(new C(E.message,this.providerStr));return}}if(x!==0){i(new C(`Process exited with code ${x}: ${g.slice(0,500)}`,this.providerStr));return}s(f.trim());});})}};});u();u();u();function xi(n){let e=o=>o.replace(/[.+^${}()|[\]\\]/g,"\\$&"),r=n.split("/").map(o=>o==="**"?".*":o.split("*").map(e).join("[^/]*"));return new RegExp(`^${r.join("\\/")}$`)}function _e(n,e){try{return xi(e).test(n)}catch{return false}}u();u();var Ai=z.object({model:z.string().optional(),system_prompt:z.string().optional(),prompt:z.string().optional(),layout:z.union([z.string(),z.object({id:z.string(),props:z.record(z.unknown()).optional()}),z.object({props:z.record(z.unknown())}),z.object({template:z.string()})]).optional()}).catchall(z.unknown()),ho=z.object({include:z.array(z.string()).optional()}).optional(),Ei=z.object({id:z.string(),name:z.string().optional(),role:z.string().optional(),team:z.string().optional(),provider:z.union([z.string(),z.array(z.string())]),working_directory:z.string().optional(),description:z.string().optional(),tags:z.array(z.string()).optional(),inline:Ai.optional(),skills:ho}).catchall(z.unknown()),Ri=z.object({id:z.string(),name:z.string(),workflow_id:z.string(),description:z.string().optional(),goal_id:z.string().optional()}),Ci=z.object({bin_resolution:z.enum(["global_first","local_first"]).optional(),wi:z.object({boards:z.array(z.unknown()).optional().catch(()=>{})}).catchall(z.unknown()).optional().catch(()=>{})}).catchall(z.unknown()),yo=z.object({agents:z.array(Ei).optional(),hooks:z.array(z.unknown()).optional(),settings:Ci.optional(),skills:z.unknown().optional(),layouts:z.record(z.unknown()).optional(),documents:z.record(z.unknown()).optional()}).catchall(z.unknown());var Ve=class extends Error{constructor(t,r){super(t);this.cause=r;this.name="ConfigLoadError";}cause};function ur(n){if(!n||typeof n!="string"||!n.trim())throw new Ve("YAML content must be a non-empty string");let e;try{e=load(n);}catch(o){throw new Ve(`YAML parse error: ${o.message}`,o)}let t=Pi(e),r=yo.safeParse(t);if(!r.success)throw new Ve(`Config validation error: ${r.error.message}`);return r.data}function pr(n){let e;try{e=readFileSync(n,"utf-8");}catch(t){throw new Ve(`Cannot read file: ${n}`,t)}return ur(e)}function Pi(n){if(!n||typeof n!="object")return {agents:[]};let e=n,t;if(e.agents&&typeof e.agents=="object"&&!Array.isArray(e.agents)){let o=e.agents;t=Object.entries(o).map(([s,i])=>({id:s,...i&&typeof i=="object"?i:{}}));}else if(Array.isArray(e.agents))t=e.agents;else return {...e,agents:[]};let r=t.map(o=>{if(o.provider===void 0&&o.inline&&typeof o.inline=="object"){let s=o.inline;if(s.provider!==void 0)return {...o,provider:s.provider}}return o});return {...e,agents:r}}u();var Je=join("templates","agents"),Xe=join("templates","workflows");function wo(){try{let e=(typeof se=="function"?se:createRequire(typeof y<"u"?y:process.cwd()+"/")).resolve("@crewx/sdk/package.json");return dirname(e)}catch{return null}}function ht(n){if(n&&existsSync(n))return n;let e=process.env.CREWX_SDK_TEMPLATES_PATH;if(e&&existsSync(e))return e;let t=wo();if(t){let o=join(t,Je);if(existsSync(o))return o}let r=[join(h,"..",Je),join(h,"..","..",Je),join(h,"..","..","..",Je),join(process.cwd(),"packages","sdk",Je),join(process.cwd(),Je)];for(let o of r)if(existsSync(o))return o;throw new Error(`[@crewx/sdk] Templates directory not found.
|
|
37
|
+
`+(t?` package anchor: ${join(t,Je)}
|
|
38
38
|
`:` package anchor: (unresolved)
|
|
39
39
|
`)+r.map(o=>` candidate: ${o}`).join(`
|
|
40
40
|
`)+`
|
|
41
|
-
Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function
|
|
41
|
+
Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function Gr(){let n=ht();return {yamlPath:join(n,"default.yaml"),dir:n}}function Oi(n){if(n&&existsSync(n))return n;let e=process.env.CREWX_SDK_WORKFLOW_TEMPLATES_PATH;if(e&&existsSync(e))return e;let t=wo();if(t){let o=join(t,Xe);if(existsSync(o))return o}let r=[join(h,"..",Xe),join(h,"..","..",Xe),join(h,"..","..","..",Xe),join(process.cwd(),"packages","sdk",Xe),join(process.cwd(),Xe)];for(let o of r)if(existsSync(o))return o;throw new Error(`[@crewx/sdk] Workflow templates directory not found.
|
|
42
|
+
`+(t?` package anchor: ${join(t,Xe)}
|
|
43
|
+
`:` package anchor: (unresolved)
|
|
44
|
+
`)+r.map(o=>` candidate: ${o}`).join(`
|
|
45
|
+
`)+`
|
|
46
|
+
Set CREWX_SDK_WORKFLOW_TEMPLATES_PATH or pass options.templatesPath.`)}u();var Te=class extends Error{constructor(e,t){let r=t.length>0?` Available: ${t.join(", ")}`:"";super(`Agent not found: "${e}".${r}`),this.name="AgentNotFoundError";}},Mi={claude:{id:"claude",provider:"cli/claude"},copilot:{id:"copilot",provider:"cli/copilot"},codex:{id:"codex",provider:"cli/codex"}};function gr(n,e){let t=n.startsWith("@")?n.slice(1):n,r=e.find(s=>s.id===t);if(r)return r;let o=Mi[t];if(o)return o;throw new Te(n,e.map(s=>s.id))}xe();kr();u();u();var At={"claude-fable-5":{input:10,cachedInput:1,output:50},"claude-opus-5":{input:5,cachedInput:.5,output:25},"claude-opus-4-8":{input:5,cachedInput:.5,output:25},"claude-opus-4-7":{input:5,cachedInput:.5,output:25},"claude-opus-4-6":{input:5,cachedInput:.5,output:25},"claude-sonnet-5":{input:2,cachedInput:.2,output:10},"claude-sonnet-4-6":{input:3,cachedInput:.3,output:15},"claude-haiku-4-5":{input:1,cachedInput:.1,output:5},"gpt-5.6-sol":{input:5,cachedInput:.5,output:30},"gpt-5.6-terra":{input:2.5,cachedInput:.25,output:15},"gpt-5.6-luna":{input:1,cachedInput:.1,output:6},"gpt-5.5":{input:5,cachedInput:1.25,output:15},"gpt-5.4":{input:2.5,cachedInput:.625,output:10},"gpt-5.3-codex":{input:1.5,cachedInput:.375,output:6},"gpt-5-mini":{input:.4,cachedInput:.1,output:1.6},"gpt-4.1":{input:2,cachedInput:.5,output:8},"gpt-4o":{input:2.5,cachedInput:1.25,output:10},"glm-5.2":{input:1.4,cachedInput:.26,output:4.4},"glm-5.1":{input:1.4,cachedInput:.26,output:4.4}};var ya={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"},pn={input:0,cachedInput:0,output:0},Ft={};function $o(n){Ft=n;}function gn(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 wa(n){if(!n)return pn;let e=gn(n),t=ya[e];if(t)return Ft[t]??At[t]??pn;if(Ft[e])return Ft[e];if(At[e])return At[e];let r={...At,...Ft};for(let o of Object.keys(r))if(e.includes(o))return r[o];return console.warn(`[pricing] Unknown model: ${n}, cost_usd=0`),pn}function _a(n,e,t,r=0,o){let s=wa(t),i=Math.min(r,n),d=(n-i)*s.input/1e6,l=i*s.cachedInput/1e6,c=e*s.output/1e6;return d+l+c}function Uo(n,e,t,r,o,s){return n&&n>0?n:!e&&!t?0:_a(e??0,t??0,o,r??0)}u();function xr(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 Ar(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 Er(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=xr(s.overdrive);if(!i||!i.provider||!i.model)return {active:false,crossProvider:false};let a=i.provider!==t;return {active:true,provider:i.provider,model:i.model,mode:i.mode,effort:i.effort,crossProvider:a}}function Rr(n,e){if(!n||typeof n!="object"||Array.isArray(n))return {};let r=n[e];if(!r||typeof r!="object"||Array.isArray(r))return {};let o=r,s={};return o.provider!==void 0&&(typeof o.provider=="string"?o.provider.trim()&&(s.provider=o.provider.trim()):console.warn(`[crewx] options.${e}.provider must be a single string; ignoring non-string value (${JSON.stringify(o.provider)})`)),typeof o.model=="string"&&o.model.trim()&&(s.model=o.model.trim()),s}u();u();var ka=[/^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],xa=/[;|&`$(){}!><\n\r]/,Aa=2,Ea=["*","**","*:*","* *","**/*"];function Ra(){let n={};for(let[e,t]of Object.entries(process.env))t!==void 0&&(ka.some(r=>r.test(e))||(n[e]=t));return n}function Ca(n){if(xa.test(n))throw new Error(`exec blocked: shell metacharacter detected in "${n}"`)}function ba(n){return /^npx\s+@crewx\/[\w-]+/.test(n)}function Ta(n){if(Ea.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 Pa(n,e){let t=e.allow??[],r=e.deny??[];for(let o of [...t,...r])Ta(o);return r.some(o=>_e(n,o))?false:ba(n)?true:t.some(o=>_e(n,o))}var jo=false;function Sa(n){jo=n;}function Ht(n){if(!jo)return;let e=JSON.stringify({span:"template_exec",...n,timestamp:new Date().toISOString()});console.error(e);}function Ia(n){let e=[],t="",r=false,o=false;for(let s=0;s<n.length;s++){let i=n[s];i==="'"&&!o?r=!r:i==='"'&&!r?o=!o:i===" "&&!r&&!o?t.length>0&&(e.push(t),t=""):t+=i;}return t.length>0&&e.push(t),e}function Wo(n,e){let t=Date.now(),r=parseInt(process.env.CREWX_EXEC_DEPTH??"0",10);if(isNaN(r)||r>=Aa)return Ht({command:n,status:"denied",reason:"invalid or max recursion depth"}),"(exec blocked: max recursion depth reached)";try{Ca(n);}catch{return Ht({command:n,status:"denied",reason:"shell metacharacter detected"}),`(exec blocked: shell metacharacter detected in "${n}")`}if(!Pa(n,e))return Ht({command:n,status:"denied",reason:"not in allow list"}),`(exec blocked: ${n})`;try{let o=Ia(n),[s,...i]=o;if(!s)return `(exec failed: ${n})`;let a=Ra(),d=execFileSync(s,i,{timeout:e.timeout??5e3,maxBuffer:64*1024,encoding:"utf-8",env:{...a,CREWX_EXEC_DEPTH:String(r+1)},stdio:["pipe","pipe","pipe"]}),l=Date.now()-t;return Ht({command:n,status:"allowed",allowed_by:"policy",duration_ms:l}),`<exec-output cmd="${n}">
|
|
42
47
|
${d.trim()}
|
|
43
|
-
</exec-output>`}catch{return
|
|
48
|
+
</exec-output>`}catch{return Ht({command:n,status:"error",reason:"execution failed"}),`(exec failed: ${n})`}}u();function Fo(n){return n==null?"":String(n)}u();function Ho(n,e){return `\`\`\`${e?.hash?.lang??""}
|
|
44
49
|
${n??""}
|
|
45
|
-
\`\`\``}
|
|
50
|
+
\`\`\``}u();function fn(n,e){if(!n)return "";if(n.length<=e)return n;let t=n.length-e;return `${n.substring(0,e)} (...+${t} chars)`}function mn(n){return Array.isArray(n)||typeof n=="string"?n.length:0}function hn(n){return typeof n!="string"?"":n.replace(/\{\{/g,"{{").replace(/\}\}/g,"}}")}var Bo=["B","KB","MB","GB"];function yn(n){if(n===0)return "0 B";let e=Math.min(Math.floor(Math.log(n)/Math.log(1024)),Bo.length-1);return `${Math.round(n/Math.pow(1024,e)*100)/100} ${Bo[e]}`}function wn(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 Bt=class{hbs;execPolicy;execEnabled;constructor(e={}){this.hbs=Ae.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(Wo(o,t)):"(exec disabled)"}),e.registerHelper("include",function(o){return new e.SafeString(Fo(o))}),e.registerHelper("fenced_code",function(o,s){return new e.SafeString(Ho(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 fn(o,s)}),e.registerHelper("length",function(o){return mn(o)}),e.registerHelper("escapeHandlebars",function(o){return new e.SafeString(hn(o))}),e.registerHelper("formatFileSize",function(o){return yn(o)}),e.registerHelper("formatTimestamp",function(o){return wn(o)});}async render(e,t={}){return this.hbs.compile(e,{noEscape:true})(t)}};u();u();var Cr=class{async readFile(e){return readFile(e,"utf-8")}async exists(e){try{return await access(e),!0}catch{return false}}resolvePath(...e){return e.length===1?resolve(e[0]):resolve(join(...e))}isAbsolute(e){return isAbsolute(e)}async readdir(e){try{return await readdir(e)}catch{return []}}},ot=new Cr;var st=class{docs=new Map;fs;constructor(e){this.fs=e??ot;}async load(e,t){if(e)for(let[r,o]of Object.entries(e)){let s=o;if(typeof s=="string")this.docs.set(r,{content:s});else if(s&&typeof s=="object"){let i=s;"content"in i&&typeof i.content=="string"?this.docs.set(r,{content:i.content}):"path"in i&&typeof i.path=="string"?await this.loadFromFile(r,i.path,t):console.warn(`[DocumentLoader] Skipping '${r}': unsupported format`);}else console.warn(`[DocumentLoader] Skipping '${r}': unsupported format`);}}async getContent(e){return this.docs.get(e)?.content}async getToc(e){let t=this.docs.get(e);if(!t)return;let r=[];for(let o of t.content.split(`
|
|
46
51
|
`)){let s=/^(#{1,6})\s+(.+)$/.exec(o.trim());s&&r.push({depth:s[1].length,text:s[2].trim()});}if(r.length!==0)return r.map(({depth:o,text:s})=>`${" ".repeat(o-1)}- ${s}`).join(`
|
|
47
|
-
`)}getPath(e){return this.docs.get(e)?.path}getNames(){return Array.from(this.docs.keys())}async buildContext(){let e={};for(let t of this.docs.keys()){let r=await this.getContent(t)??"",o=await this.getToc(t),s=this.getPath(t);e[t]={content:r,toc:o,...s?{path:s}:{}};}return e}async loadFromFile(e,t,r){try{let o=this.resolve(t,r),s=await this.fs.readFile(o);this.docs.set(e,{content:s,path:o});}catch(o){let s=o instanceof Error?o.message:String(o);console.warn(`[DocumentLoader] Failed to load '${e}' from '${t}': ${s}`);}}resolve(e,t){return this.fs.isAbsolute(e)?e:t?this.fs.resolvePath(t,e):this.fs.resolvePath(e)}};p();p();var oe=class extends Error{constructor(t,r,o){super(t);this.layoutId=r;this.cause=o;this.name="LayoutLoadError";}layoutId;cause},Se=class extends Error{constructor(t,r=[],o){super(t);this.errors=r;this.cause=o;this.name="PropsValidationError";}errors;cause};var Ta={validationMode:"lenient",fallbackLayoutId:"crewx/default"},$t=class{layouts=new Map;options;constructor(e){this.options={...Ta,...e,templatesPath:e?.templatesPath??pt()},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 oe(`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 oe("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 oe(`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),c=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?c||console.error(`Updated custom layout: ${e}`):console.error(`Registered custom layout: ${e}`));}registerLayouts(e){for(let[t,r]of Object.entries(e))try{this.registerLayout(t,r);}catch(o){console.warn(`Failed to register custom layout ${t}:`,o instanceof Error?o.message:o);}}loadAllLayouts(){let e=this.options.templatesPath;if(!existsSync(e))throw new oe(`Templates directory not found: ${e}`,void 0,new Error(`Directory does not exist: ${e}`));try{let t=readdirSync(e).filter(r=>r.endsWith(".yaml")||r.endsWith(".yml"));t.length===0&&console.warn(`No layout files found in ${e}`);for(let r of t){let o=r.replace(/\.(yaml|yml)$/,""),s=G.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 oe(`Failed to read layouts directory: ${e}`,void 0,t instanceof Error?t:new Error(String(t)))}}loadLayoutFile(e,t){try{let r=readFileSync(e,"utf-8");if(!r||r.trim().length===0)throw console.warn(`Empty YAML file: ${e}, will use fallback`),new oe(`Empty YAML file: ${e}`,t,new Error("File content is empty"));let o=load(r);if(!o||typeof o!="object")throw console.warn(`Invalid YAML content in ${e} (parsed as ${typeof o}), will use fallback`),new oe(`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 oe(`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 oe(`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 oe(`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}}}};p();p();p();function rt(n){return String(Math.floor(Math.abs(n))).padStart(2,"0")}function Ut(n){if(!(n instanceof Date)||Number.isNaN(n.getTime()))return "";let e=-n.getTimezoneOffset(),t=e>=0?"+":"-";return `${n.getFullYear()}-${rt(n.getMonth()+1)}-${rt(n.getDate())}T${rt(n.getHours())}:${rt(n.getMinutes())}:${rt(n.getSeconds())}${t}${rt(e/60)}:${rt(e%60)}`}function Pa(n){return n.map(e=>{let t=typeof e?.timestamp=="number"?e.timestamp:null;return t===null?e:{...e,created_at:Ut(new Date(t))}})}function ba(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 Fo(...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=ba(t),d=a.length>0?a[0]:"",l=Date.now(),c={messages:Pa(t),platform:typeof r=="string"?r:"",messagesCount:t.length,agentIds:a,primaryAgentId:d,currentAgentId:o,threadId:s,now:Ut(new Date(l))};return e.fn(c)}p();var jt=class{defaultMode;constructor(e={}){this.defaultMode=e.defaultMode??"lenient";}validate(e,t,r=this.defaultMode){let o=[],s=this.validateObject(e??{},t,r,["props"],o);if(o.length>0&&r==="strict")throw new Se("Props validation failed in strict mode",o);return {valid:o.length===0,props:s,errors:o}}validateObject(e,t,r,o,s){let i={};if(r==="strict")for(let a of Object.keys(e))t[a]||s.push({path:this.buildPath([...o,a]),message:`Unknown prop '${a}'`,value:e[a]});for(let[a,d]of Object.entries(t)){let l=[...o,a],c=e[a],f=this.resolveProp(c,d,l,r,s);f.shouldAssign&&(i[a]=f.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,c=s.length;return i.value.forEach((f,g)=>{let m=[...r,String(g)];if(d){let v=this.validateType(f,{type:d},m,o,s);v.valid?a.push(v.value):s.push({path:this.buildPath(m),message:v.error??"Invalid array item",value:f});}else a.push(f);l&&!l.includes(f)&&s.push({path:this.buildPath(m),message:`Array item must be one of: ${l.join(", ")}`,value:f});}),{valid:s.length===c,value:a}}validatePlainObject(e){return this.isPlainObject(e)?{valid:true,value:{...e}}:{valid:false,error:`Expected object, got ${this.describeType(e)}`}}validateFunction(e){return typeof e!="function"?{valid:false,error:`Expected function, got ${this.describeType(e)}`}:{valid:true,value:e}}validateShape(e,t,r,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 Ft=class{handlebars;propsValidator;constructor(e){this.handlebars=_e__default.create(),this.propsValidator=e??new jt,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",Fo),_e__default.helpers.each&&this.handlebars.registerHelper("each",_e__default.helpers.each),_e__default.helpers.if&&this.handlebars.registerHelper("if",_e__default.helpers.if),_e__default.helpers.unless&&this.handlebars.registerHelper("unless",_e__default.helpers.unless),_e__default.helpers.with&&this.handlebars.registerHelper("with",_e__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__default.SafeString(JSON.stringify(e))}),this.handlebars.registerHelper("raw",function(e){return typeof e?.fn=="function"?e.fn(this):""}),this.handlebars.registerHelper("escapeHandlebars",function(e){return typeof e!="string"?"":e.replace(/\{\{/g,"{{").replace(/\}\}/g,"}}")}),this.handlebars.registerHelper("formatFileSize",function(e){if(e===0)return "0 B";let t=["B","KB","MB","GB"],r=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/Math.pow(1024,r)*100)/100+" "+t[r]});}executeValidation(e,t,r){try{return this.propsValidator.validate(e,t,r)}catch(o){if(o instanceof Se&&o.errors&&o.errors.length>0){let s=o.errors[0];if(s)throw new Se(s.message,o.errors)}throw o}}mergeProps(e,t){let r=this.cloneDeep(e??{});return t?this.deepMerge(r,t):r}deepMerge(e,t){for(let[r,o]of Object.entries(t)){if(this.isPlainObject(o)){let s=e[r];e[r]=this.deepMerge(this.isPlainObject(s)?s:{},o);continue}if(Array.isArray(o)){e[r]=this.cloneDeep(o);continue}e[r]=o;}return e}cloneDeep(e){if(Array.isArray(e))return e.map(t=>this.cloneDeep(t));if(this.isPlainObject(e)){let t={};for(let[r,o]of Object.entries(e))t[r]=this.cloneDeep(o);return t}return e}isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}sanitizeVars(e){if(!e)return {};let t={...e};if(typeof e.user_input=="string"){t.user_input_raw=e.user_input;let r=e.user_input.replace(/\{\{\{/g,"{{{").replace(/\}\}\}/g,"}}}").replace(/\{\{/g,"{{").replace(/\}\}/g,"}}");t.user_input=this.handlebars.escapeExpression(r);}return t}};p();var un="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function Sa(n){let e=randomBytes(n*2),t="";for(let r=0;r<e.length&&t.length<n;r++){let o=e[r];o<248&&(t+=un[o%62]);}for(;t.length<n;)t+=un[randomBytes(1)[0]%62];return t}function nt(n){return `${n}_${Sa(8)}`}function Ia(n,e){let{createHash:t}=re("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+=un[i%62];return `${n}_${s}`}p();function pn(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())}`}p();function qo(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 Ht=class{_emitter=new EventEmitter;on(e,t){let r=qo(e,t);return this._emitter.on(e,r),()=>this._emitter.off(e,r)}once(e,t){let r=qo(e,t);return this._emitter.once(e,r),()=>this._emitter.off(e,r)}emit(e,t){this._emitter.emit(e,t);}};p();function gn(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}}}p();var fn=new AsyncLocalStorage;function Na(){return fn}function Da(n,e){return fn.run(n,e)}function mn(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 g=>({userId:g,displayName:g})),c=async g=>{let m=fn.getStore();if(!m){e.warn("respondSync called outside sync window \u2014 graceful degradation (no-op)",{textPreview:typeof g=="object"&&"text"in g?g.text.slice(0,80):void 0});return}let v="text"in g?g.text:"";m.res.status(200).json({text:v});},f=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:f,inbound:i,emitEvent:a,updateMessage:d,resolveUser:l,respondSync:c}}De();p();var La=/^-\s*Status:\s*active/m,$a=/^---\n([\s\S]*?)\n---/,Ua=/^type:\s*goal\s*$/m;async function Wo(n,e=et,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(`
|
|
52
|
+
`)}getPath(e){return this.docs.get(e)?.path}getNames(){return Array.from(this.docs.keys())}async buildContext(){let e={};for(let t of this.docs.keys()){let r=await this.getContent(t)??"",o=await this.getToc(t),s=this.getPath(t);e[t]={content:r,toc:o,...s?{path:s}:{}};}return e}async loadFromFile(e,t,r){try{let o=this.resolve(t,r),s=await this.fs.readFile(o);this.docs.set(e,{content:s,path:o});}catch(o){let s=o instanceof Error?o.message:String(o);console.warn(`[DocumentLoader] Failed to load '${e}' from '${t}': ${s}`);}}resolve(e,t){return this.fs.isAbsolute(e)?e:t?this.fs.resolvePath(t,e):this.fs.resolvePath(e)}};u();u();var ae=class extends Error{constructor(t,r,o){super(t);this.layoutId=r;this.cause=o;this.name="LayoutLoadError";}layoutId;cause},Oe=class extends Error{constructor(t,r=[],o){super(t);this.errors=r;this.cause=o;this.name="PropsValidationError";}errors;cause};var Fa={validationMode:"lenient",fallbackLayoutId:"crewx/default"},qt=class{layouts=new Map;options;constructor(e){this.options={...Fa,...e,templatesPath:e?.templatesPath??ht()},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 ae(`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 ae("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 ae(`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),c=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?c||console.error(`Updated custom layout: ${e}`):console.error(`Registered custom layout: ${e}`));}registerLayouts(e){for(let[t,r]of Object.entries(e))try{this.registerLayout(t,r);}catch(o){console.warn(`Failed to register custom layout ${t}:`,o instanceof Error?o.message:o);}}loadAllLayouts(){let e=this.options.templatesPath;if(!existsSync(e))throw new ae(`Templates directory not found: ${e}`,void 0,new Error(`Directory does not exist: ${e}`));try{let t=readdirSync(e).filter(r=>r.endsWith(".yaml")||r.endsWith(".yml"));t.length===0&&console.warn(`No layout files found in ${e}`);for(let r of t){let o=r.replace(/\.(yaml|yml)$/,""),s=G.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 ae(`Failed to read layouts directory: ${e}`,void 0,t instanceof Error?t:new Error(String(t)))}}loadLayoutFile(e,t){try{let r=readFileSync(e,"utf-8");if(!r||r.trim().length===0)throw console.warn(`Empty YAML file: ${e}, will use fallback`),new ae(`Empty YAML file: ${e}`,t,new Error("File content is empty"));let o=load(r);if(!o||typeof o!="object")throw console.warn(`Invalid YAML content in ${e} (parsed as ${typeof o}), will use fallback`),new ae(`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 ae(`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 ae(`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 ae(`Failed to load layout file: ${e}`,t,r instanceof Error?r:new Error(String(r)))}}parsePropsSchema(e){let t={};for(let[r,o]of Object.entries(e))typeof o=="object"&&o!==null&&(t[r]=o);return t}extractDefaultProps(e){let t={};for(let[r,o]of Object.entries(e))o&&typeof o=="object"&&("defaultValue"in o?t[r]=o.defaultValue:"default"in o&&(t[r]=o.default));return t}normalizeLayoutId(e){return e?e.includes("/")?e:`crewx/${e}`:this.options.fallbackLayoutId}resolveLayoutEntry(e,t){let r=new Set;if(t)if(r.add(t),t.includes("/")){let o=t.split("/"),s=o[o.length-1];s&&r.add(s);}else r.add(`crewx/${t}`);r.add("default");for(let o of r){let s=e[o];if(typeof s=="string"&&s.trim().length>0)return {template:s};if(s&&typeof s=="object"&&typeof s.template=="string"&&s.template.trim().length>0)return {template:s.template,propsSchema:s.propsSchema}}for(let o of Object.values(e)){if(typeof o=="string"&&o.trim().length>0)return {template:o};let s=o;if(s&&typeof s=="object"&&typeof s.template=="string"&&s.template.trim().length>0)return {template:s.template,propsSchema:s.propsSchema}}}};u();u();u();function it(n){return String(Math.floor(Math.abs(n))).padStart(2,"0")}function zt(n){if(!(n instanceof Date)||Number.isNaN(n.getTime()))return "";let e=-n.getTimezoneOffset(),t=e>=0?"+":"-";return `${n.getFullYear()}-${it(n.getMonth()+1)}-${it(n.getDate())}T${it(n.getHours())}:${it(n.getMinutes())}:${it(n.getSeconds())}${t}${it(e/60)}:${it(e%60)}`}function Ha(n){return n.map(e=>{let t=typeof e?.timestamp=="number"?e.timestamp:null;return t===null?e:{...e,created_at:zt(new Date(t))}})}function Ba(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 Go(...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=Ba(t),d=a.length>0?a[0]:"",l=Date.now(),c={messages:Ha(t),platform:typeof r=="string"?r:"",messagesCount:t.length,agentIds:a,primaryAgentId:d,currentAgentId:o,threadId:s,now:zt(new Date(l))};return e.fn(c)}u();var Kt=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 Oe("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],c=e[a],f=this.resolveProp(c,d,l,r,s);f.shouldAssign&&(i[a]=f.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,c=s.length;return i.value.forEach((f,g)=>{let m=[...r,String(g)];if(d){let _=this.validateType(f,{type:d},m,o,s);_.valid?a.push(_.value):s.push({path:this.buildPath(m),message:_.error??"Invalid array item",value:f});}else a.push(f);l&&!l.includes(f)&&s.push({path:this.buildPath(m),message:`Array item must be one of: ${l.join(", ")}`,value:f});}),{valid:s.length===c,value:a}}validatePlainObject(e){return this.isPlainObject(e)?{valid:true,value:{...e}}:{valid:false,error:`Expected object, got ${this.describeType(e)}`}}validateFunction(e){return typeof e!="function"?{valid:false,error:`Expected function, got ${this.describeType(e)}`}:{valid:true,value:e}}validateShape(e,t,r,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 Gt=class{handlebars;propsValidator;constructor(e){this.handlebars=Ae__default.create(),this.propsValidator=e??new Kt,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",Go),Ae__default.helpers.each&&this.handlebars.registerHelper("each",Ae__default.helpers.each),Ae__default.helpers.if&&this.handlebars.registerHelper("if",Ae__default.helpers.if),Ae__default.helpers.unless&&this.handlebars.registerHelper("unless",Ae__default.helpers.unless),Ae__default.helpers.with&&this.handlebars.registerHelper("with",Ae__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 Ae__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 Oe&&o.errors&&o.errors.length>0){let s=o.errors[0];if(s)throw new Oe(s.message,o.errors)}throw o}}mergeProps(e,t){let r=this.cloneDeep(e??{});return t?this.deepMerge(r,t):r}deepMerge(e,t){for(let[r,o]of Object.entries(t)){if(this.isPlainObject(o)){let s=e[r];e[r]=this.deepMerge(this.isPlainObject(s)?s:{},o);continue}if(Array.isArray(o)){e[r]=this.cloneDeep(o);continue}e[r]=o;}return e}cloneDeep(e){if(Array.isArray(e))return e.map(t=>this.cloneDeep(t));if(this.isPlainObject(e)){let t={};for(let[r,o]of Object.entries(e))t[r]=this.cloneDeep(o);return t}return e}isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}sanitizeVars(e){if(!e)return {};let t={...e};if(typeof e.user_input=="string"){t.user_input_raw=e.user_input;let r=e.user_input.replace(/\{\{\{/g,"{{{").replace(/\}\}\}/g,"}}}").replace(/\{\{/g,"{{").replace(/\}\}/g,"}}");t.user_input=this.handlebars.escapeExpression(r);}return t}};u();var _n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function qa(n){let e=randomBytes(n*2),t="";for(let r=0;r<e.length&&t.length<n;r++){let o=e[r];o<248&&(t+=_n[o%62]);}for(;t.length<n;)t+=_n[randomBytes(1)[0]%62];return t}function at(n){return `${n}_${qa(8)}`}function za(n,e){let{createHash:t}=se("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+=_n[i%62];return `${n}_${s}`}u();function vn(n){let e=t=>String(t).padStart(2,"0");return `${n.getFullYear()}${e(n.getMonth()+1)}${e(n.getDate())}T${e(n.getHours())}${e(n.getMinutes())}${e(n.getSeconds())}`}u();function Jo(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 Vt=class{_emitter=new EventEmitter;on(e,t){let r=Jo(e,t);return this._emitter.on(e,r),()=>this._emitter.off(e,r)}once(e,t){let r=Jo(e,t);return this._emitter.once(e,r),()=>this._emitter.off(e,r)}emit(e,t){this._emitter.emit(e,t);}};u();function kn(n){let e=new Map,t=r=>r.startsWith(`${n}::`)?r:`${n}::${r}`;return {async get(r){let o=e.get(t(r));return o?o.value:void 0},async set(r,o){e.set(t(r),{value:o});},async delete(r){return e.delete(t(r))},async list(r){let o=r?t(r):`${n}::`,s=[];for(let i of e.keys())i.startsWith(o)&&s.push(i.slice(n.length+2));return s}}}u();var xn=new AsyncLocalStorage;function Va(){return xn}function Ja(n,e){return xn.run(n,e)}function An(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 g=>({userId:g,displayName:g})),c=async g=>{let m=xn.getStore();if(!m){e.warn("respondSync called outside sync window \u2014 graceful degradation (no-op)",{textPreview:typeof g=="object"&&"text"in g?g.text.slice(0,80):void 0});return}let _="text"in g?g.text:"";m.res.status(200).json({text:_});},f=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:f,inbound:i,emitEvent:a,updateMessage:d,resolveUser:l,respondSync:c}}Ue();u();var Xa=/^-\s*Status:\s*active/m,Ya=/^---\n([\s\S]*?)\n---/,Qa=/^type:\s*goal\s*$/m;async function Xo(n,e=ot,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(`
|
|
48
53
|
---
|
|
49
|
-
`)}let s=(await e.readdir(n)).filter(a=>a.endsWith(".md"));if(s.length===0)return "";let i=[];for(let a of s){let d=e.resolvePath(n,a),l=await e.readFile(d),c
|
|
54
|
+
`)}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),c=Ya.exec(l);!c||!Qa.test(c[1])||Xa.test(l)&&i.push(l);}return i.join(`
|
|
50
55
|
---
|
|
51
|
-
`)}
|
|
56
|
+
`)}u();function Za(){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 Yo(n,e=ot){let t=e.resolvePath(n,`${Za()}.md`);return await e.exists(t)?e.readFile(t):""}u();wt();Ue();function En(n){if(n.startsWith("cli/"))return ke[n.slice(4)]}function td(n,e={}){if(!n.startsWith("cli/"))return true;let r=(e.lookupAdapter??En)(n);if(!r?.command)return false;let o=Ot(r.command,{env:e.env});return G__default.isAbsolute(o)}function Rn(n,e={}){if(!Array.isArray(n))return n;if(n.length===0)return "cli/claude";for(let t of n)if(td(t,e))return t;return n[0]}u();var Jt=new AsyncLocalStorage;function Cn(n){if(n)return {parentTaskId:n.parentTaskId??null,rootTraceId:n.rootTraceId,callerAgentId:n.callerAgentId??null}}u();function nd(n){return typeof n!="string"?"":n.replace(/</g,"<").replace(/>/g,">")}function bn(n){return n.messages.map(e=>({text:nd(e.text),isAssistant:e.isAssistant,timestamp:e.timestamp,metadata:e.metadata,files:void 0}))}u();Ue();je();u();u();var Et=class{resolveDbPath(){return process.env.CREWX_DB?process.env.CREWX_DB:process.env.CREWX_TRACES_DB?process.env.CREWX_TRACES_DB:join(ad.homedir(),".crewx","crewx.db")}resolveDbPaths(){return [this.resolveDbPath()]}isMissingTableError(e){return e instanceof Error&&/no such table:/i.test(e.message)}dbExists(e){return existsSync(e??this.resolveDbPath())}};u();function Ee(n){let e=se("better-sqlite3"),{drizzle:t}=se("drizzle-orm/better-sqlite3"),r=new e(n);return r.exec("PRAGMA journal_mode = WAL"),r.exec("PRAGMA busy_timeout = 5000"),r.exec("PRAGMA foreign_keys = ON"),r.exec("PRAGMA analysis_limit = 400"),r.exec("PRAGMA optimize"),{db:t(r),runRaw:(o,s=[])=>r.prepare(o).run(...s),close:()=>r.close()}}u();var Qo=new Set,dd={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 Pn(n,e){return (n.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function ld(n,e){if(e>0||!Pn(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(dd))r.has(o)||n.run(`ALTER TABLE tasks ADD COLUMN ${o} ${s}`);}var cd={"0002_normalize_task_names":{workspace_name:"TEXT",project_name:"TEXT"}};function ud(n,e,t){if(!Pn(n,"__drizzle_migrations")||!Pn(n,"tasks"))return;let r=n.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(readFileSync(G__default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=cd[i.tag];if(!a)continue;let d=G__default.join(e,`${i.tag}.sql`);if(!existsSync(d))continue;let l=readFileSync(d,"utf-8"),c=createHash("sha256").update(l).digest("hex");if(o.has(c))continue;let f=n.all("PRAGMA table_info(tasks)"),g=new Set(f.map(m=>m.name));for(let[m,_]of Object.entries(a))g.has(m)||(n.run(`ALTER TABLE tasks ADD COLUMN ${m} ${_}`),g.add(m));}}function pd(n,e,t){let r=n.all(t`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(i=>i.hash)),s=JSON.parse(readFileSync(G__default.join(e,"meta/_journal.json"),"utf-8"));for(let i of s.entries){let a=G__default.join(e,`${i.tag}.sql`);if(!existsSync(a))continue;let d=readFileSync(a,"utf-8"),l=createHash("sha256").update(d).digest("hex");if(o.has(l))continue;let c=/ALTER\s+TABLE\s+[`"]?(\w+)[`"]?\s+ADD\s+[`"]?(\w+)[`"]?/gi,f=[],g;for(;(g=c.exec(d))!==null;)f.push({table:g[1],column:g[2]});if(f.length===0||!d.split(/-->\s*statement-breakpoint/).map(v=>v.trim()).filter(Boolean).every(v=>/^ALTER\s+TABLE\s+.+\s+ADD\s+/i.test(v)))continue;f.every(({table:v,column:x})=>n.all(`PRAGMA table_info("${v}")`).some(k=>k.name===x))&&n.run(t`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${l}, ${i.when})`);}}function gd(n){let{migrate:e}=se("drizzle-orm/better-sqlite3/migrator"),{sql:t}=se("drizzle-orm"),r=[G__default.join(h,"../migrations"),G__default.join(h,"migrations"),G__default.join(h,"../../../../drizzle/migrations"),G__default.join(process.cwd(),"drizzle/migrations")],o=r.find(l=>existsSync(G__default.join(l,"meta/_journal.json")));if(!o)throw new Error(`migrations folder not found. Searched:
|
|
52
57
|
${r.join(`
|
|
53
|
-
`)}`);let s=n.get(t`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'`),i=0;s?.cnt&&(i=n.get(t`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0),Ja(n,i),s?.cnt&&(Qa(n,o,t),Ya(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 kr(n,e){zo.has(e)||(Za(n),zo.add(e));}p();var P=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);}};p();p();var Go=sqliteTable("workspaces",{id:text("id").primaryKey(),slug:text("slug").notNull().unique(),name:text("name").notNull(),workspace_path:text("workspace_path"),description:text("description"),is_active:integer("is_active").notNull().default(1),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull()});p();var u=sqliteTable("tasks",{id:text("id").primaryKey(),agent_id:text("agent_id").notNull(),user_id:text("user_id"),prompt:text("prompt").notNull(),mode:text("mode").notNull().default("execute"),status:text("status").notNull().default("running"),result:text("result"),error:text("error"),started_at:text("started_at").notNull(),completed_at:text("completed_at"),duration_ms:integer("duration_ms"),metadata:text("metadata"),workspace_id:text("workspace_id"),trace_id:text("trace_id"),parent_task_id:text("parent_task_id"),caller_agent_id:text("caller_agent_id"),model:text("model"),platform:text("platform").default("cli"),crewx_version:text("crewx_version"),input_tokens:integer("input_tokens").default(0),output_tokens:integer("output_tokens").default(0),cost_usd:real("cost_usd").default(0),pid:integer("pid"),rendered_prompt:text("rendered_prompt"),command:text("command"),coding_agent_command:text("coding_agent_command"),exit_code:integer("exit_code"),logs:text("logs"),thread_id:text("thread_id"),workspace_ref:text("workspace_ref"),project_id:text("project_id"),project_ref:text("project_ref"),cached_input_tokens:integer("cached_input_tokens").default(0),run_epoch:integer("run_epoch").default(0)},n=>({idx_tasks_agent_id:index("idx_tasks_agent_id").on(n.agent_id),idx_tasks_status:index("idx_tasks_status").on(n.status),idx_tasks_started_at:index("idx_tasks_started_at").on(n.started_at),idx_tasks_trace_id:index("idx_tasks_trace_id").on(n.trace_id),idx_tasks_parent_task_id:index("idx_tasks_parent_task_id").on(n.parent_task_id),idx_tasks_crewx_version:index("idx_tasks_crewx_version").on(n.crewx_version),idx_tasks_pid:index("idx_tasks_pid").on(n.pid),idx_tasks_thread_id:index("idx_tasks_thread_id").on(n.thread_id),idx_tasks_workspace_id:index("idx_tasks_workspace_id").on(n.workspace_id),idx_tasks_workspace_ref:index("idx_tasks_workspace_ref").on(n.workspace_ref),idx_tasks_project_id:index("idx_tasks_project_id").on(n.project_id),idx_tasks_ws_started:index("idx_tasks_ws_started").on(n.workspace_id,n.started_at)}));p();var Vo=sqliteTable("threads",{id:text("id").primaryKey(),workspace_id:text("workspace_id").references(()=>Go.id,{onDelete:"set null"}),platform:text("platform").notNull().default("cli"),title:text("title"),first_message:text("first_message"),last_message:text("last_message"),message_count:integer("message_count").notNull().default(0),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull(),metadata:text("metadata"),title_locked:integer("title_locked").notNull().default(0),pinned:integer("pinned").notNull().default(0),starred:integer("starred").notNull().default(0)},n=>({idx_threads_updated_at:index("idx_threads_updated_at").on(n.updated_at),idx_threads_workspace_id:index("idx_threads_workspace_id").on(n.workspace_id),idx_threads_ws_updated:index("idx_threads_ws_updated").on(n.workspace_id,n.updated_at),idx_threads_title:index("idx_threads_title").on(n.title)}));p();var it=sqliteTable("spans",{id:text("id").primaryKey(),task_id:text("task_id").references(()=>u.id,{onDelete:"set null"}),parent_span_id:text("parent_span_id").references(()=>it.id,{onDelete:"set null"}),name:text("name").notNull(),kind:text("kind").notNull().default("internal"),status:text("status").notNull().default("ok"),started_at:text("started_at").notNull(),completed_at:text("completed_at"),duration_ms:integer("duration_ms"),input:text("input"),output:text("output"),error:text("error"),attributes:text("attributes")},n=>({idx_spans_task_id:index("idx_spans_task_id").on(n.task_id),idx_spans_parent_span_id:index("idx_spans_parent_span_id").on(n.parent_span_id)}));p();sqliteTable("tool_calls",{id:text("id").primaryKey(),task_id:text("task_id").references(()=>u.id,{onDelete:"cascade"}),session_id:text("session_id"),tool_name:text("tool_name").notNull(),files:text("files"),input:text("input"),output:text("output"),duration_ms:integer("duration_ms"),timestamp:text("timestamp").notNull()},n=>({idx_tool_calls_task_id:index("idx_tool_calls_task_id").on(n.task_id),idx_tool_calls_tool_name:index("idx_tool_calls_tool_name").on(n.tool_name),idx_tool_calls_timestamp:index("idx_tool_calls_timestamp").on(n.timestamp)}));p();sqliteTable("thread_boxes",{id:text("id").primaryKey(),thread_id:text("thread_id").notNull().references(()=>Vo.id,{onDelete:"cascade"}),seq:integer("seq").notNull(),first_task_id:text("first_task_id").notNull(),mid_task_id:text("mid_task_id").notNull(),last_task_id:text("last_task_id").notNull(),task_count:integer("task_count").notNull(),summary:text("summary"),source_tokens:integer("source_tokens").notNull(),summary_tokens:integer("summary_tokens"),created_at:text("created_at").notNull()},n=>({idx_thread_boxes_thread_id:index("idx_thread_boxes_thread_id").on(n.thread_id),idx_thread_boxes_seq:index("idx_thread_boxes_seq").on(n.thread_id,n.seq),uniq_thread_boxes_thread_seq:unique().on(n.thread_id,n.seq)}));p();sqliteTable("request_logs",{id:text("id").primaryKey(),path:text("path").notNull(),method:text("method").notNull(),status_code:integer("status_code").notNull(),duration_ms:integer("duration_ms").notNull(),ip:text("ip"),request_headers:text("request_headers"),response_headers:text("response_headers"),request_body:text("request_body"),response_body:text("response_body"),query:text("query"),user_id:text("user_id"),project_id:text("project_id"),partition_key:text("partition_key").notNull(),timestamp:text("timestamp").notNull().default(sql`(datetime('now'))`),metadata:text("metadata")},n=>({idx_request_logs_timestamp:index("idx_request_logs_timestamp").on(n.timestamp),idx_request_logs_path:index("idx_request_logs_path").on(n.path),idx_request_logs_status_code:index("idx_request_logs_status_code").on(n.status_code),idx_request_logs_partition_key:index("idx_request_logs_partition_key").on(n.partition_key)}));p();sqliteTable("usage_limit_snapshots",{id:text("id").primaryKey(),provider:text("provider").notNull(),account_ref:text("account_ref").notNull().default("default"),limit_window:text("limit_window").notNull(),bucket_start:text("bucket_start").notNull(),captured_at:text("captured_at").notNull(),used_percent:integer("used_percent").notNull(),remaining_percent:integer("remaining_percent").notNull(),resets_at:text("resets_at"),source:text("source").notNull(),metadata:text("metadata")},n=>({uniq_usage_limit_snapshots_bucket:uniqueIndex("uniq_usage_limit_snapshots_bucket").on(n.provider,n.account_ref,n.limit_window,n.bucket_start),idx_usage_limit_snapshots_window_bucket:index("idx_usage_limit_snapshots_window_bucket").on(n.limit_window,n.bucket_start),idx_usage_limit_snapshots_provider_window_bucket:index("idx_usage_limit_snapshots_provider_window_bucket").on(n.provider,n.limit_window,n.bucket_start)}));p();sqliteTable("usage_reports",{id:text("id").primaryKey(),workspace_id:text("workspace_id").notNull(),month:text("month").notNull(),generated_at:text("generated_at").notNull(),source_range:text("source_range").notNull(),tier:text("tier").notNull(),total_tokens:integer("total_tokens").notNull(),total_cost_usd:real("total_cost_usd").notNull(),payload:text("payload").notNull(),payload_hash:text("payload_hash"),signature:text("signature"),signed_at:text("signed_at"),issuer:text("issuer")},n=>({uniq_usage_reports_ws_month:uniqueIndex("uniq_usage_reports_ws_month").on(n.workspace_id,n.month)}));p();sqliteTable("notifications",{id:text("id").primaryKey(),workspace_id:text("workspace_id").notNull(),agent_id:text("agent_id"),task_id:text("task_id"),thread_id:text("thread_id"),source:text("source").notNull().default("agent"),level:text("level").notNull().default("info"),title:text("title").notNull(),body:text("body"),target_user_id:text("target_user_id"),created_at:text("created_at").notNull(),metadata:text("metadata")},n=>({idx_notifications_ws_created:index("idx_notifications_ws_created").on(n.workspace_id,sql`${n.created_at} DESC`)}));sqliteTable("notification_reads",{notification_id:text("notification_id").notNull(),user_id:text("user_id").notNull(),read_at:text("read_at").notNull()},n=>({pk:primaryKey({columns:[n.notification_id,n.user_id]})}));p();sqliteTable("agent_suggestions",{id:text("id").primaryKey(),workspace_id:text("workspace_id").notNull(),agent_id:text("agent_id").notNull(),task_id:text("task_id"),type:text("type").notNull(),status:text("status").notNull().default("pending"),payload:text("payload").notNull(),applied_commit_sha:text("applied_commit_sha"),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull()},n=>({idx_agent_suggestions_ws_agent:index("idx_agent_suggestions_ws_agent").on(n.workspace_id,n.agent_id),idx_agent_suggestions_ws_created:index("idx_agent_suggestions_ws_created").on(n.workspace_id,n.created_at)}));var Fe="2026-05-09",Pd="0.8.9-rc.13",He=10,qe=parseInt(Pd.split("rc.")[1]),bd=new Set(["workflow","mcp"]),ns=600*1e3,Bt=class extends _t{dbPath;pidNullObservedSince=new Map;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=dirname(t);existsSync(o)||mkdirSync(o,{recursive:true});}else if(!existsSync(t))throw new P("NOT_FOUND","Database not found");let r=ke(t);if(e)try{kr(r.db,t);}catch(o){throw r.close(),o}return r}startTask(e){let t=this.openHandle(true);try{t.db.insert(u).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:u.id,set:{pid:sql`COALESCE(excluded.pid, ${u.pid})`},setWhere:eq(u.status,"running")}).run();}catch(r){throw r instanceof P?r:new P("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=?,
|
|
58
|
+
`)}`);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),ld(n,i),s?.cnt&&(pd(n,o,t),ud(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 Tr(n,e){Qo.has(e)||(gd(n),Qo.add(e));}u();var S=class extends Error{code;cause;constructor(e,t,r){super(t),this.name="RepositoryError",this.code=e,this.cause=r,Object.setPrototypeOf(this,new.target.prototype);}};u();u();var es=sqliteTable("workspaces",{id:text("id").primaryKey(),slug:text("slug").notNull().unique(),name:text("name").notNull(),workspace_path:text("workspace_path"),description:text("description"),is_active:integer("is_active").notNull().default(1),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull()});u();var p=sqliteTable("tasks",{id:text("id").primaryKey(),agent_id:text("agent_id").notNull(),user_id:text("user_id"),prompt:text("prompt").notNull(),mode:text("mode").notNull().default("execute"),status:text("status").notNull().default("running"),result:text("result"),error:text("error"),started_at:text("started_at").notNull(),completed_at:text("completed_at"),duration_ms:integer("duration_ms"),metadata:text("metadata"),workspace_id:text("workspace_id"),trace_id:text("trace_id"),parent_task_id:text("parent_task_id"),caller_agent_id:text("caller_agent_id"),model:text("model"),platform:text("platform").default("cli"),crewx_version:text("crewx_version"),input_tokens:integer("input_tokens").default(0),output_tokens:integer("output_tokens").default(0),cost_usd:real("cost_usd").default(0),pid:integer("pid"),rendered_prompt:text("rendered_prompt"),command:text("command"),coding_agent_command:text("coding_agent_command"),exit_code:integer("exit_code"),logs:text("logs"),thread_id:text("thread_id"),workspace_ref:text("workspace_ref"),project_id:text("project_id"),project_ref:text("project_ref"),cached_input_tokens:integer("cached_input_tokens").default(0),run_epoch:integer("run_epoch").default(0)},n=>({idx_tasks_agent_id:index("idx_tasks_agent_id").on(n.agent_id),idx_tasks_status:index("idx_tasks_status").on(n.status),idx_tasks_started_at:index("idx_tasks_started_at").on(n.started_at),idx_tasks_trace_id:index("idx_tasks_trace_id").on(n.trace_id),idx_tasks_parent_task_id:index("idx_tasks_parent_task_id").on(n.parent_task_id),idx_tasks_crewx_version:index("idx_tasks_crewx_version").on(n.crewx_version),idx_tasks_pid:index("idx_tasks_pid").on(n.pid),idx_tasks_thread_id:index("idx_tasks_thread_id").on(n.thread_id),idx_tasks_workspace_id:index("idx_tasks_workspace_id").on(n.workspace_id),idx_tasks_workspace_ref:index("idx_tasks_workspace_ref").on(n.workspace_ref),idx_tasks_project_id:index("idx_tasks_project_id").on(n.project_id),idx_tasks_ws_started:index("idx_tasks_ws_started").on(n.workspace_id,n.started_at)}));u();var ts=sqliteTable("threads",{id:text("id").primaryKey(),workspace_id:text("workspace_id").references(()=>es.id,{onDelete:"set null"}),platform:text("platform").notNull().default("cli"),title:text("title"),first_message:text("first_message"),last_message:text("last_message"),message_count:integer("message_count").notNull().default(0),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull(),metadata:text("metadata"),title_locked:integer("title_locked").notNull().default(0),pinned:integer("pinned").notNull().default(0),starred:integer("starred").notNull().default(0)},n=>({idx_threads_updated_at:index("idx_threads_updated_at").on(n.updated_at),idx_threads_workspace_id:index("idx_threads_workspace_id").on(n.workspace_id),idx_threads_ws_updated:index("idx_threads_ws_updated").on(n.workspace_id,n.updated_at),idx_threads_title:index("idx_threads_title").on(n.title)}));u();var ct=sqliteTable("spans",{id:text("id").primaryKey(),task_id:text("task_id").references(()=>p.id,{onDelete:"set null"}),parent_span_id:text("parent_span_id").references(()=>ct.id,{onDelete:"set null"}),name:text("name").notNull(),kind:text("kind").notNull().default("internal"),status:text("status").notNull().default("ok"),started_at:text("started_at").notNull(),completed_at:text("completed_at"),duration_ms:integer("duration_ms"),input:text("input"),output:text("output"),error:text("error"),attributes:text("attributes")},n=>({idx_spans_task_id:index("idx_spans_task_id").on(n.task_id),idx_spans_parent_span_id:index("idx_spans_parent_span_id").on(n.parent_span_id)}));u();sqliteTable("tool_calls",{id:text("id").primaryKey(),task_id:text("task_id").references(()=>p.id,{onDelete:"cascade"}),session_id:text("session_id"),tool_name:text("tool_name").notNull(),files:text("files"),input:text("input"),output:text("output"),duration_ms:integer("duration_ms"),timestamp:text("timestamp").notNull()},n=>({idx_tool_calls_task_id:index("idx_tool_calls_task_id").on(n.task_id),idx_tool_calls_tool_name:index("idx_tool_calls_tool_name").on(n.tool_name),idx_tool_calls_timestamp:index("idx_tool_calls_timestamp").on(n.timestamp)}));u();sqliteTable("thread_boxes",{id:text("id").primaryKey(),thread_id:text("thread_id").notNull().references(()=>ts.id,{onDelete:"cascade"}),seq:integer("seq").notNull(),first_task_id:text("first_task_id").notNull(),mid_task_id:text("mid_task_id").notNull(),last_task_id:text("last_task_id").notNull(),task_count:integer("task_count").notNull(),summary:text("summary"),source_tokens:integer("source_tokens").notNull(),summary_tokens:integer("summary_tokens"),created_at:text("created_at").notNull()},n=>({idx_thread_boxes_thread_id:index("idx_thread_boxes_thread_id").on(n.thread_id),idx_thread_boxes_seq:index("idx_thread_boxes_seq").on(n.thread_id,n.seq),uniq_thread_boxes_thread_seq:unique().on(n.thread_id,n.seq)}));u();sqliteTable("request_logs",{id:text("id").primaryKey(),path:text("path").notNull(),method:text("method").notNull(),status_code:integer("status_code").notNull(),duration_ms:integer("duration_ms").notNull(),ip:text("ip"),request_headers:text("request_headers"),response_headers:text("response_headers"),request_body:text("request_body"),response_body:text("response_body"),query:text("query"),user_id:text("user_id"),project_id:text("project_id"),partition_key:text("partition_key").notNull(),timestamp:text("timestamp").notNull().default(sql`(datetime('now'))`),metadata:text("metadata")},n=>({idx_request_logs_timestamp:index("idx_request_logs_timestamp").on(n.timestamp),idx_request_logs_path:index("idx_request_logs_path").on(n.path),idx_request_logs_status_code:index("idx_request_logs_status_code").on(n.status_code),idx_request_logs_partition_key:index("idx_request_logs_partition_key").on(n.partition_key)}));u();sqliteTable("usage_limit_snapshots",{id:text("id").primaryKey(),provider:text("provider").notNull(),account_ref:text("account_ref").notNull().default("default"),limit_window:text("limit_window").notNull(),bucket_start:text("bucket_start").notNull(),captured_at:text("captured_at").notNull(),used_percent:integer("used_percent").notNull(),remaining_percent:integer("remaining_percent").notNull(),resets_at:text("resets_at"),source:text("source").notNull(),metadata:text("metadata")},n=>({uniq_usage_limit_snapshots_bucket:uniqueIndex("uniq_usage_limit_snapshots_bucket").on(n.provider,n.account_ref,n.limit_window,n.bucket_start),idx_usage_limit_snapshots_window_bucket:index("idx_usage_limit_snapshots_window_bucket").on(n.limit_window,n.bucket_start),idx_usage_limit_snapshots_provider_window_bucket:index("idx_usage_limit_snapshots_provider_window_bucket").on(n.provider,n.limit_window,n.bucket_start)}));u();sqliteTable("usage_reports",{id:text("id").primaryKey(),workspace_id:text("workspace_id").notNull(),month:text("month").notNull(),generated_at:text("generated_at").notNull(),source_range:text("source_range").notNull(),tier:text("tier").notNull(),total_tokens:integer("total_tokens").notNull(),total_cost_usd:real("total_cost_usd").notNull(),payload:text("payload").notNull(),payload_hash:text("payload_hash"),signature:text("signature"),signed_at:text("signed_at"),issuer:text("issuer")},n=>({uniq_usage_reports_ws_month:uniqueIndex("uniq_usage_reports_ws_month").on(n.workspace_id,n.month)}));u();sqliteTable("notifications",{id:text("id").primaryKey(),workspace_id:text("workspace_id").notNull(),agent_id:text("agent_id"),task_id:text("task_id"),thread_id:text("thread_id"),source:text("source").notNull().default("agent"),level:text("level").notNull().default("info"),title:text("title").notNull(),body:text("body"),target_user_id:text("target_user_id"),created_at:text("created_at").notNull(),metadata:text("metadata")},n=>({idx_notifications_ws_created:index("idx_notifications_ws_created").on(n.workspace_id,sql`${n.created_at} DESC`)}));sqliteTable("notification_reads",{notification_id:text("notification_id").notNull(),user_id:text("user_id").notNull(),read_at:text("read_at").notNull()},n=>({pk:primaryKey({columns:[n.notification_id,n.user_id]})}));u();sqliteTable("agent_suggestions",{id:text("id").primaryKey(),workspace_id:text("workspace_id").notNull(),agent_id:text("agent_id").notNull(),task_id:text("task_id"),type:text("type").notNull(),status:text("status").notNull().default("pending"),payload:text("payload").notNull(),applied_commit_sha:text("applied_commit_sha"),created_at:text("created_at").notNull(),updated_at:text("updated_at").notNull()},n=>({idx_agent_suggestions_ws_agent:index("idx_agent_suggestions_ws_agent").on(n.workspace_id,n.agent_id),idx_agent_suggestions_ws_created:index("idx_agent_suggestions_ws_created").on(n.workspace_id,n.created_at)}));var Be="2026-05-09",Hd="0.8.9-rc.13",qe=10,ze=parseInt(Hd.split("rc.")[1]),Bd=new Set(["workflow","mcp"]),cs=600*1e3,Yt=class extends Et{dbPath;pidNullObservedSince=new Map;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=dirname(t);existsSync(o)||mkdirSync(o,{recursive:true});}else if(!existsSync(t))throw new S("NOT_FOUND","Database not found");let r=Ee(t);if(e)try{Tr(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:sql`COALESCE(excluded.pid, ${p.pid})`},setWhere:eq(p.status,"running")}).run();}catch(r){throw r instanceof S?r:new S("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=?,
|
|
54
59
|
exit_code=?, input_tokens=?, output_tokens=?, cached_input_tokens=?, cost_usd=?,
|
|
55
60
|
model=COALESCE(?, model)
|
|
56
|
-
WHERE id=? AND status='running' AND COALESCE(run_epoch, 0) = COALESCE(?, 0)`,[e.status,e.result??null,e.error??null,e.completedAt,e.durationMs??null,e.exitCode??null,e.inputTokens??0,e.outputTokens??0,e.cachedInputTokens??0,e.costUsd??0,e.model??null,e.id,r]);}catch(r){throw r instanceof
|
|
61
|
+
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 S?r:new S("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(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(eq(p.id,e)).run();},{behavior:"immediate"});}catch(o){throw o instanceof S?o:new S("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(eq(p.status,"running")).orderBy(desc(p.started_at)).all()}catch(t){throw new S("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(desc(p.started_at)).limit(100).all()}catch(t){throw new S("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(eq(p.id,e)).limit(1).get()??void 0}catch(r){throw new S("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(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(and(eq(p.id,e),eq(p.status,"running"))).run(),{killed:!0,pid:r.pid??void 0}}catch(r){throw r instanceof S?r:new S("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(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(and(eq(p.id,i.id),eq(p.status,"running"))).run(),s++);continue}if(Bd.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>=cs&&(e.db.update(p).set({status:"failed",error:"Reaped: pid never recorded after resume (stale running_instruction)",completed_at:new Date().toISOString()}).where(and(eq(p.id,i.id),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=cs){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(and(eq(p.status,"running"),eq(p.platform,"workflow"),isNull(p.pid),lt(p.started_at,r))).run().changes??0}finally{t.close();}}findTaskStatus(e,t){let r=this.resolveDbPaths();for(let o of r){if(!existsSync(o))continue;let s=Ee(o);try{let i=t?eq(p.workspace_id,t):void 0,a=i?and(eq(p.id,e),i):eq(p.id,e),d=s.db.select().from(p).where(a).limit(1).get()??void 0;if(!d){let l=or(eq(p.thread_id,e),and(isNull(p.thread_id),like(p.command,`%--thread=${e}%`))),c=i?and(l,i):l;d=s.db.select().from(p).where(c).orderBy(desc(p.started_at)).limit(1).get()??void 0;}if(d)return d}catch(i){throw new S("DB_ERROR","Failed to find task status",i)}finally{s.close();}}}findChildTasks(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!existsSync(i))continue;let a=Ee(i);try{let d=t?and(eq(p.parent_task_id,e),eq(p.workspace_id,t)):eq(p.parent_task_id,e),l=a.db.select().from(p).where(d).orderBy(asc(p.started_at)).all();for(let c of l)o.has(c.id)||(o.add(c.id),s.push(c));}catch(d){throw new S("DB_ERROR","Failed to find child tasks",d)}finally{a.close();}}return s}getWorkspaceUsageSummary(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{return t.db.all(e?sql`
|
|
57
62
|
SELECT
|
|
58
63
|
COALESCE(workspace_id, 'unknown') AS workspace_id,
|
|
59
64
|
COALESCE(SUM(input_tokens), 0) AS input_tokens,
|
|
@@ -74,7 +79,7 @@ ${r.join(`
|
|
|
74
79
|
FROM tasks
|
|
75
80
|
GROUP BY workspace_id
|
|
76
81
|
ORDER BY (COALESCE(SUM(input_tokens), 0) + COALESCE(SUM(output_tokens), 0)) DESC
|
|
77
|
-
`)}catch(r){throw new
|
|
82
|
+
`)}catch(r){throw new S("DB_ERROR","Failed to get workspace usage summary",r)}finally{t.close();}}getThreadTokenUsage(e,t){let r=this.resolveDbPaths(),o=new Set,s=0,i=0,a=0;for(let d of r){if(!existsSync(d))continue;let l=Ee(d);try{let c=or(eq(p.thread_id,e),and(isNull(p.thread_id),like(p.command,`%--thread=${e}%`))),f=t?and(c,eq(p.workspace_id,t)):c,g=l.db.select({id:p.id,input_tokens:p.input_tokens,output_tokens:p.output_tokens,cost_usd:p.cost_usd}).from(p).where(f).all();for(let m of g)o.has(m.id)||(o.add(m.id),s+=m.input_tokens??0,i+=m.output_tokens??0,a+=m.cost_usd??0);}catch(c){throw new S("DB_ERROR","Failed to get thread token usage",c)}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(!existsSync(i))continue;let a=Ee(i);try{let d=or(eq(p.thread_id,e),and(isNull(p.thread_id),like(p.command,`%--thread=${e}%`))),l=t?and(d,eq(p.workspace_id,t)):d,c=a.db.select().from(p).where(l).orderBy(asc(p.started_at)).all();for(let f of c)o.has(f.id)||(o.add(f.id),s.push(f));}catch(d){throw new S("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?eq(p.workspace_id,t):void 0,a=(d,l)=>{if(!d)return;let c=s.get(d);if(c&&l.started_at<=c)return;let f=this.parseWorkflowCardMetadata(l.metadata);f.kind==="workflow_card"&&(s.set(d,l.started_at),r.set(d,{taskId:l.id,workflowRunId:f.workflowRunId,raw:l.result??void 0}));};for(let d of this.resolveDbPaths()){if(!existsSync(d))continue;let l=Ee(d);try{let c=and(inArray(p.thread_id,e),like(p.metadata,'%"kind":"workflow_card"%')),f=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?and(c,i):c).all();for(let _ of f)a(_.thread_id,_);let g=and(isNull(p.thread_id),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?and(g,i):g).all();for(let _ of m){let v=this.extractThreadIdFromCommand(_.command);!v||!o.has(v)||a(v,_);}}catch(c){throw new S("DB_ERROR","Failed to batch fetch workflow cards",c)}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(eq(p.workspace_id,e.workspaceId));let o=e.agents&&e.agents.length>0?e.agents:e.agentId?[e.agentId]:null;o&&r.push(inArray(p.agent_id,o));let s=e.statuses&&e.statuses.length>0?e.statuses:e.status?[e.status]:null;s&&r.push(inArray(p.status,s));let i=e.q??e.search;i&&r.push(like(p.prompt,`%${i}%`)),e.from&&r.push(gte(p.started_at,e.from)),e.to&&r.push(lt(p.started_at,e.to));let a=r.length>0?and(...r):void 0,d=t.db.select({count:sql`count(*)`}).from(p).where(a).get(),l=(e.sortDir??"DESC")==="ASC"?asc(p.started_at):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 S("DB_ERROR","Failed to find all tasks",r)}finally{t.close();}}getAgentUsage(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.all(r?sql`
|
|
78
83
|
SELECT
|
|
79
84
|
t.agent_id,
|
|
80
85
|
t.workspace_id,
|
|
@@ -82,11 +87,11 @@ ${r.join(`
|
|
|
82
87
|
COALESCE(SUM(
|
|
83
88
|
COALESCE(t.input_tokens, 0)
|
|
84
89
|
+ CASE
|
|
85
|
-
WHEN t.started_at >= ${
|
|
90
|
+
WHEN t.started_at >= ${Be}
|
|
86
91
|
AND (
|
|
87
92
|
t.crewx_version IS NULL
|
|
88
93
|
OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
|
|
89
|
-
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${
|
|
94
|
+
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${qe}) AS INTEGER) < ${ze})
|
|
90
95
|
)
|
|
91
96
|
THEN COALESCE(t.cached_input_tokens, 0)
|
|
92
97
|
ELSE 0
|
|
@@ -105,11 +110,11 @@ ${r.join(`
|
|
|
105
110
|
COALESCE(SUM(
|
|
106
111
|
COALESCE(t.input_tokens, 0)
|
|
107
112
|
+ CASE
|
|
108
|
-
WHEN t.started_at >= ${
|
|
113
|
+
WHEN t.started_at >= ${Be}
|
|
109
114
|
AND (
|
|
110
115
|
t.crewx_version IS NULL
|
|
111
116
|
OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
|
|
112
|
-
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${
|
|
117
|
+
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${qe}) AS INTEGER) < ${ze})
|
|
113
118
|
)
|
|
114
119
|
THEN COALESCE(t.cached_input_tokens, 0)
|
|
115
120
|
ELSE 0
|
|
@@ -125,11 +130,11 @@ ${r.join(`
|
|
|
125
130
|
COALESCE(SUM(
|
|
126
131
|
COALESCE(t.input_tokens, 0)
|
|
127
132
|
+ CASE
|
|
128
|
-
WHEN t.started_at >= ${
|
|
133
|
+
WHEN t.started_at >= ${Be}
|
|
129
134
|
AND (
|
|
130
135
|
t.crewx_version IS NULL
|
|
131
136
|
OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
|
|
132
|
-
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${
|
|
137
|
+
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${qe}) AS INTEGER) < ${ze})
|
|
133
138
|
)
|
|
134
139
|
THEN COALESCE(t.cached_input_tokens, 0)
|
|
135
140
|
ELSE 0
|
|
@@ -147,11 +152,11 @@ ${r.join(`
|
|
|
147
152
|
COALESCE(SUM(
|
|
148
153
|
COALESCE(t.input_tokens, 0)
|
|
149
154
|
+ CASE
|
|
150
|
-
WHEN t.started_at >= ${
|
|
155
|
+
WHEN t.started_at >= ${Be}
|
|
151
156
|
AND (
|
|
152
157
|
t.crewx_version IS NULL
|
|
153
158
|
OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
|
|
154
|
-
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${
|
|
159
|
+
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${qe}) AS INTEGER) < ${ze})
|
|
155
160
|
)
|
|
156
161
|
THEN COALESCE(t.cached_input_tokens, 0)
|
|
157
162
|
ELSE 0
|
|
@@ -159,18 +164,18 @@ ${r.join(`
|
|
|
159
164
|
), 0)
|
|
160
165
|
+ COALESCE(SUM(t.output_tokens), 0)
|
|
161
166
|
) DESC
|
|
162
|
-
`).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
|
|
167
|
+
`).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 S("DB_ERROR","Failed to get agent usage",s)}finally{o.close();}}getAgentUsageTrendRaw(e,t,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.all(r?sql`
|
|
163
168
|
SELECT
|
|
164
169
|
date(t.started_at) AS date,
|
|
165
170
|
t.agent_id,
|
|
166
171
|
COALESCE(SUM(
|
|
167
172
|
COALESCE(t.input_tokens, 0)
|
|
168
173
|
+ CASE
|
|
169
|
-
WHEN t.started_at >= ${
|
|
174
|
+
WHEN t.started_at >= ${Be}
|
|
170
175
|
AND (
|
|
171
176
|
t.crewx_version IS NULL
|
|
172
177
|
OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
|
|
173
|
-
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${
|
|
178
|
+
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${qe}) AS INTEGER) < ${ze})
|
|
174
179
|
)
|
|
175
180
|
THEN COALESCE(t.cached_input_tokens, 0)
|
|
176
181
|
ELSE 0
|
|
@@ -193,11 +198,11 @@ ${r.join(`
|
|
|
193
198
|
COALESCE(SUM(
|
|
194
199
|
COALESCE(t.input_tokens, 0)
|
|
195
200
|
+ CASE
|
|
196
|
-
WHEN t.started_at >= ${
|
|
201
|
+
WHEN t.started_at >= ${Be}
|
|
197
202
|
AND (
|
|
198
203
|
t.crewx_version IS NULL
|
|
199
204
|
OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
|
|
200
|
-
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${
|
|
205
|
+
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${qe}) AS INTEGER) < ${ze})
|
|
201
206
|
)
|
|
202
207
|
THEN COALESCE(t.cached_input_tokens, 0)
|
|
203
208
|
ELSE 0
|
|
@@ -212,102 +217,108 @@ ${r.join(`
|
|
|
212
217
|
AND t.started_at < ${t}
|
|
213
218
|
GROUP BY date(t.started_at), t.agent_id
|
|
214
219
|
ORDER BY date(t.started_at) ASC
|
|
215
|
-
`).map(i=>({date:i.date,agentId:i.agent_id,inputTokens:i.input_tokens,outputTokens:i.output_tokens,cachedInputTokens:i.cached_input_tokens,costUsd:i.cost_usd,totalTokens:i.input_tokens+i.output_tokens}))}catch(s){throw new
|
|
220
|
+
`).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 S("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(and(eq(p.id,e),eq(p.workspace_id,t))).limit(1).get()??void 0}catch(o){throw new S("DB_ERROR","Failed to find task for stop",o)}finally{r.close();}}findLatestTaskByMetadata(e){if(!this.dbExists())return null;let t=this.openHandle(false);try{return t.db.select({id:p.id,thread_id:p.thread_id,status:p.status,result:p.result,error:p.error,started_at:p.started_at,completed_at:p.completed_at}).from(p).where(and(eq(p.agent_id,e.agentId),eq(p.workspace_id,e.workspaceId),sql`${p.metadata} IS NOT NULL AND json_valid(${p.metadata}) AND json_extract(${p.metadata}, '$.' || ${e.metaKey}) = ${e.metaValue}`)).orderBy(desc(p.started_at)).limit(1).get()??null}catch(r){throw new S("DB_ERROR","Failed to find latest task by metadata",r)}finally{t.close();}}markTaskFailed(e,t,r){if(!this.dbExists())return;let o=this.openHandle(true);try{let s=new Date().toISOString(),i=r?and(eq(p.id,e),eq(p.status,"running"),eq(p.workspace_id,r)):and(eq(p.id,e),eq(p.status,"running"));o.db.update(p).set({status:"failed",error:t,completed_at:s}).where(i).run();}catch(s){throw s instanceof S?s:new S("DB_ERROR","Failed to mark task failed",s)}finally{o.close();}}findTasksByPromptHint(e,t){let r=this.resolveDbPaths(),o=new Set,s=[];for(let i of r){if(!existsSync(i))continue;let a=Ee(i);try{let d=t?and(like(p.prompt,`%${e}%`),eq(p.workspace_id,t)):like(p.prompt,`%${e}%`),l=a.db.select().from(p).where(d).orderBy(asc(p.started_at)).all();for(let c of l)o.has(c.id)||(o.add(c.id),s.push(c));}catch(d){throw new S("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=sql`
|
|
216
221
|
CASE
|
|
217
|
-
WHEN ${
|
|
218
|
-
WHEN ${
|
|
219
|
-
WHEN ${
|
|
220
|
-
WHEN ${
|
|
221
|
-
WHEN ${
|
|
222
|
-
WHEN ${
|
|
222
|
+
WHEN ${p.model} LIKE 'claude-%' OR ${p.model} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
|
|
223
|
+
WHEN ${p.model} LIKE 'gpt-%' OR ${p.model} LIKE 'codex-%' THEN 'codex'
|
|
224
|
+
WHEN ${p.model} LIKE 'gemini-%' THEN 'gemini'
|
|
225
|
+
WHEN ${p.model} LIKE 'zai-%' OR ${p.model} LIKE 'openrouter/z-ai/%' THEN 'opencode'
|
|
226
|
+
WHEN ${p.model} LIKE 'minimax/%' THEN 'minimax'
|
|
227
|
+
WHEN ${p.model} LIKE 'qwen%' THEN 'qwen'
|
|
223
228
|
ELSE 'unknown'
|
|
224
229
|
END
|
|
225
230
|
`,i=sql`
|
|
226
|
-
COALESCE(${
|
|
231
|
+
COALESCE(${p.input_tokens}, 0)
|
|
227
232
|
+ CASE
|
|
228
|
-
WHEN ${
|
|
233
|
+
WHEN ${p.started_at} >= ${Be}
|
|
229
234
|
AND (
|
|
230
|
-
${
|
|
231
|
-
OR (${
|
|
232
|
-
OR (${
|
|
235
|
+
${p.crewx_version} IS NULL
|
|
236
|
+
OR (${p.crewx_version} LIKE '0.8.%' AND ${p.crewx_version} NOT LIKE '0.8.9%')
|
|
237
|
+
OR (${p.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${p.crewx_version}, ${qe}) AS INTEGER) < ${ze})
|
|
233
238
|
)
|
|
234
|
-
THEN COALESCE(${
|
|
239
|
+
THEN COALESCE(${p.cached_input_tokens}, 0)
|
|
235
240
|
ELSE 0
|
|
236
241
|
END
|
|
237
|
-
`,a=r?sql`WHERE ${
|
|
242
|
+
`,a=r?sql`WHERE ${p.status} IN ('completed', 'success') AND ${p.started_at} >= ${e} AND ${p.started_at} < ${t} AND ${p.workspace_id} = ${r}`:sql`WHERE ${p.status} IN ('completed', 'success') AND ${p.started_at} >= ${e} AND ${p.started_at} < ${t}`;return o.db.all(sql`
|
|
238
243
|
SELECT
|
|
239
244
|
${s} AS provider,
|
|
240
245
|
COUNT(*) AS total_tasks,
|
|
241
246
|
COALESCE(SUM(${i}), 0) AS input_tokens,
|
|
242
|
-
COALESCE(SUM(${
|
|
243
|
-
COALESCE(SUM(${
|
|
244
|
-
COALESCE(SUM(${
|
|
245
|
-
COALESCE(SUM(${
|
|
246
|
-
MAX(${
|
|
247
|
-
FROM ${
|
|
247
|
+
COALESCE(SUM(${p.output_tokens}), 0) AS output_tokens,
|
|
248
|
+
COALESCE(SUM(${p.cached_input_tokens}), 0) AS cached_input_tokens,
|
|
249
|
+
COALESCE(SUM(${p.cost_usd}), 0) AS cost_usd,
|
|
250
|
+
COALESCE(SUM(${p.duration_ms}), 0) AS active_duration_ms,
|
|
251
|
+
MAX(${p.completed_at}) AS last_active_at
|
|
252
|
+
FROM ${p}
|
|
248
253
|
${a}
|
|
249
254
|
GROUP BY provider
|
|
250
|
-
ORDER BY (COALESCE(SUM(${i}), 0) + COALESCE(SUM(${
|
|
251
|
-
`).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
|
|
255
|
+
ORDER BY (COALESCE(SUM(${i}), 0) + COALESCE(SUM(${p.output_tokens}), 0)) DESC
|
|
256
|
+
`).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 S("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=sql`
|
|
252
257
|
CASE
|
|
253
|
-
WHEN ${
|
|
254
|
-
WHEN ${
|
|
255
|
-
WHEN ${
|
|
256
|
-
WHEN ${
|
|
257
|
-
WHEN ${
|
|
258
|
-
WHEN ${
|
|
258
|
+
WHEN ${p.model} LIKE 'claude-%' OR ${p.model} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
|
|
259
|
+
WHEN ${p.model} LIKE 'gpt-%' OR ${p.model} LIKE 'codex-%' THEN 'codex'
|
|
260
|
+
WHEN ${p.model} LIKE 'gemini-%' THEN 'gemini'
|
|
261
|
+
WHEN ${p.model} LIKE 'zai-%' OR ${p.model} LIKE 'openrouter/z-ai/%' THEN 'opencode'
|
|
262
|
+
WHEN ${p.model} LIKE 'minimax/%' THEN 'minimax'
|
|
263
|
+
WHEN ${p.model} LIKE 'qwen%' THEN 'qwen'
|
|
259
264
|
ELSE 'unknown'
|
|
260
265
|
END
|
|
261
266
|
`,i=sql`
|
|
262
|
-
COALESCE(${
|
|
267
|
+
COALESCE(${p.input_tokens}, 0)
|
|
263
268
|
+ CASE
|
|
264
|
-
WHEN ${
|
|
269
|
+
WHEN ${p.started_at} >= ${Be}
|
|
265
270
|
AND (
|
|
266
|
-
${
|
|
267
|
-
OR (${
|
|
268
|
-
OR (${
|
|
271
|
+
${p.crewx_version} IS NULL
|
|
272
|
+
OR (${p.crewx_version} LIKE '0.8.%' AND ${p.crewx_version} NOT LIKE '0.8.9%')
|
|
273
|
+
OR (${p.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${p.crewx_version}, ${qe}) AS INTEGER) < ${ze})
|
|
269
274
|
)
|
|
270
|
-
THEN COALESCE(${
|
|
275
|
+
THEN COALESCE(${p.cached_input_tokens}, 0)
|
|
271
276
|
ELSE 0
|
|
272
277
|
END
|
|
273
|
-
`,a=r?sql`WHERE ${
|
|
278
|
+
`,a=r?sql`WHERE ${p.status} IN ('completed', 'success') AND ${p.started_at} >= ${e} AND ${p.started_at} < ${t} AND ${p.workspace_id} = ${r}`:sql`WHERE ${p.status} IN ('completed', 'success') AND ${p.started_at} >= ${e} AND ${p.started_at} < ${t}`,d=o.db.all(sql`
|
|
274
279
|
SELECT
|
|
275
|
-
${
|
|
280
|
+
${p.model} AS model,
|
|
276
281
|
${s} AS provider,
|
|
277
282
|
COUNT(*) AS total_tasks,
|
|
278
283
|
COALESCE(SUM(${i}), 0) AS input_tokens,
|
|
279
|
-
COALESCE(SUM(${
|
|
280
|
-
COALESCE(SUM(${
|
|
281
|
-
COALESCE(SUM(${
|
|
282
|
-
COALESCE(SUM(${
|
|
283
|
-
MAX(${
|
|
284
|
-
FROM ${
|
|
284
|
+
COALESCE(SUM(${p.output_tokens}), 0) AS output_tokens,
|
|
285
|
+
COALESCE(SUM(${p.cached_input_tokens}), 0) AS cached_input_tokens,
|
|
286
|
+
COALESCE(SUM(${p.cost_usd}), 0) AS cost_usd,
|
|
287
|
+
COALESCE(SUM(${p.duration_ms}), 0) AS active_duration_ms,
|
|
288
|
+
MAX(${p.completed_at}) AS last_active_at
|
|
289
|
+
FROM ${p}
|
|
285
290
|
${a}
|
|
286
|
-
GROUP BY ${
|
|
287
|
-
`),l=new Map;for(let c of d){let f=
|
|
291
|
+
GROUP BY ${p.model}
|
|
292
|
+
`),l=new Map;for(let c of d){let f=gn(c.model??""),g=l.get(f);g?(g.totalTasks+=c.total_tasks,g.inputTokens+=c.input_tokens,g.outputTokens+=c.output_tokens,g.cachedInputTokens+=c.cached_input_tokens,g.costUsd+=c.cost_usd,g.totalTokens+=c.input_tokens+c.output_tokens,g.activeDurationMs+=c.active_duration_ms??0,c.last_active_at&&(!g.lastActiveAt||c.last_active_at>g.lastActiveAt)&&(g.lastActiveAt=c.last_active_at)):l.set(f,{model:f,provider:c.provider,totalTasks:c.total_tasks,inputTokens:c.input_tokens,outputTokens:c.output_tokens,cachedInputTokens:c.cached_input_tokens,costUsd:c.cost_usd,totalTokens:c.input_tokens+c.output_tokens,activeDurationMs:c.active_duration_ms??0,lastActiveAt:c.last_active_at??null});}return Array.from(l.values()).sort((c,f)=>f.costUsd-c.costUsd)}catch(s){throw new S("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?sql`WHERE ${p.started_at} >= ${e} AND ${p.started_at} < ${t} AND ${p.workspace_id} = ${r}`:sql`WHERE ${p.started_at} >= ${e} AND ${p.started_at} < ${t}`;return o.db.all(sql`
|
|
288
293
|
SELECT
|
|
289
|
-
${
|
|
290
|
-
${
|
|
291
|
-
${
|
|
292
|
-
${
|
|
293
|
-
${
|
|
294
|
-
${
|
|
295
|
-
FROM ${
|
|
294
|
+
${p.thread_id} AS thread_id,
|
|
295
|
+
${p.agent_id} AS agent_id,
|
|
296
|
+
${p.started_at} AS started_at,
|
|
297
|
+
${p.status} AS status,
|
|
298
|
+
${p.error} AS error,
|
|
299
|
+
${p.exit_code} AS exit_code
|
|
300
|
+
FROM ${p}
|
|
296
301
|
${s}
|
|
297
|
-
ORDER BY ${
|
|
298
|
-
`).map(a=>({threadId:a.thread_id,agentId:a.agent_id,startedAt:a.started_at,status:a.status,error:a.error,exitCode:a.exit_code}))}catch(s){throw new
|
|
299
|
-
`)[0].trimStart();return
|
|
300
|
-
`).find(s=>s.trim()&&!s.startsWith("Read "))?.trim()??e.trim();if(!o)return "unknown";try{let s=
|
|
301
|
-
`)[0]?.slice(0,150)??null:o.input?.slice(0,150)??null,i=
|
|
302
|
-
`));}return d}
|
|
303
|
-
${i.message}`)}let s=nr(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"&&!isAbsolute(l.path)?i[a]={...l,path: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=Ts(a.vars,d.vars),c=Ts(a.settings,d.settings),f;e.skills&&t.skills&&typeof e.skills=="object"&&typeof t.skills=="object"&&!Array.isArray(e.skills)&&!Array.isArray(t.skills)?f={...e.skills,...t.skills}:f=t.skills??e.skills;let g=[...e.hooks??[],...t.hooks??[]],m=vl(a.providers,d.providers),v={...e},x={...t};for(let _ of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete v[_],delete x[_];let w={...{...v,...x},agents:o,layouts:s,documents:i,skills:f};return g.length>0&&(w.hooks=g),l!==void 0&&(w.vars=l),c!==void 0&&(w.settings=c),m!==void 0&&(w.providers=m),w}static async loadYaml(e,t,r){let o=t?.includeBuiltIns!==false,s,i;if(o){let c=await n.loadBuiltInConfig(r);if(e!==void 0){let f=or(e);s=n.mergeCrewxConfig(c,f),i=dirname(e);}else s=c,i=process.cwd();}else {if(e===void 0)throw new Error("[@crewx/sdk] loadYaml: path is required when includeBuiltIns is false");s=or(e),i=dirname(e);}let a=new tt(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 c=await n.loadBuiltInConfig(o);i=n.mergeCrewxConfig(c,e);}let a=new tt(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=pn(t);return join(this._projectRoot,".crewx","logs",`${r}_${e}.log`)}registerTool(e,t){this._tools.set(e,{name:e,...t});}async use(e){this._plugins.includes(e)||(await e.attach(this),this._plugins.push(e));}handler(e){return Rn(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??gn(r),a=e.defaultMode??"query",d=t.manifest.platform,l=e.agentRunner??{run:async(m,v,x)=>{let w=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${m}`,v,{threadId:x?.threadId,platform:d});return {output:w.ok?w.data:w.error?.message??""}}},c=e.onInbound??(async m=>{let v=m.routingHints?.agentId??e.defaultAgent;if(!v)return {accepted:false,reason:"no_agent"};let{output:x}=await l.run(v,m.text,{threadId:m.threadId});return {accepted:true,output:x}}),f=mn({instanceId:r,config:o,capabilities:s,db:i,agentRunner:l,onInbound:c}),g={adapter:t,ctx:f,state:"starting"};this._activeAdapters.set(r,g),this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"starting",timestamp:new Date});try{await t.start(f),g.state="started",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"started",timestamp:new Date});}catch(m){throw g.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(Ot+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(c=>ye(l.toLowerCase(),c))))),i}renderAgentPrompt(e){let t=e.startsWith("@")?e.slice(1):e,r=this._agents.get(t);if(!r)throw new Ce(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 Ce(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}.`,c=await this._documentLoader.buildContext(),f=t?.env??(typeof process<"u"?process.env:{}),g=t?.vars?.security_key??wl(),m={...t?.vars??{},documents:c,env:f,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??""}},v=await this._templateEngine.render(l,m),x={mode:t?.session?.mode??"query",platform:t?.session?.platform??"cli",options:t?.session?.options??[]},k=o.provider,w=Array.isArray(k)?k:typeof k=="string"&&k.length>0?[k]:[],_=w.join(", ")||(typeof k=="string"?k:""),E=o.options,O=["goals","daily"],S={goals:false,daily:false},J;if(!Array.isArray(E)&&typeof E=="object"&&E!==null){let H=E;if("goals"in H){let M=H.goals;typeof M=="string"||Array.isArray(M)?S.goals=M:S.goals=!!M;}"daily"in H&&(S.daily=!!H.daily);let A={};for(let[M,F]of Object.entries(H))O.includes(M)||(A[M]=F);if(Object.keys(A).length>0){let M=w.some(T=>T.startsWith("cli/")),F={};for(let[T,K]of Object.entries(A)){let ae={};if(Array.isArray(K))M&&(ae.rawArgs=K);else if(typeof K=="object"&&K!==null){let ut=K;Object.keys(ut).length>0&&(ae.named=ut);}(ae.named||ae.rawArgs&&ae.rawArgs.length>0)&&(F[T]=ae);}J=Object.keys(F).length>0?F:void 0;}}let U=Array.isArray(E)?E:void 0,I={};for(let[H,A]of Object.entries(c))I[H]={content:A.content??"",toc:A.toc,summary:A.summary,path:A.path};if(S.goals){let H=join(this._projectRoot,"docs","goal"),A=await Wo(H,void 0,S.goals);A&&(I.active_goals={content:A});}if(S.daily){let H=join(this._projectRoot,"docs","daily"),A=await Bo(H);A&&(I.today_daily={content:A});}let D=t?.vars?.user_input??void 0,L=this._config?.settings?.dreaming?.continuity,ee=L?.reuseReadOnly!==false,j=typeof L?.lookback=="number"?L.lookback:5,te=typeof L?.maxEntryChars=="number"?L.maxEntryChars:8e3,B=typeof L?.decayRate=="number"?L.decayRate:.5,q=t?.threadId??"",Z=o.id,X=ee&&j>0&&q&&t?.messages&&t.messages.length>0?ss({threadId:q,agentId:Z,lookback:j,maxEntryChars:te,decayRate:B}):new Map,z=(t?.messages??[]).map(H=>{if(!H.isAssistant)return H;let A=H.metadata?.task_id;return !A||!X.has(A)?H:{...H,activity_log:X.get(A)}}),Be={user_input:D,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??"",provider:_,providerList:w,model:o.inline?.model,workingDirectory:o.working_directory??o.workingDirectory??".",inline:{...o.inline??{},prompt:v},specialties:o.specialties??[],capabilities:o.capabilities??[],remote:o.remote??null,optionsByMode:J,optionsArray:U},agentMetadata:{specialties:o.specialties??[],capabilities:o.capabilities??[],description:o.description??""},contextOptions:S,documents:I,skills:t?.skills??[],session:x,env:f,vars:{security_key:g,...t?.vars??{}},props:{...a??{},...t?.messages&&t.messages.length>0?{showConversationHistory:true}:{}},platform:x.platform,mode:x.mode,thread_id:q,now:Ut(new Date),has_activity_log:X.size>0,messages:z,tools:this._tools.size>0?{list:Array.from(this._tools.values()).map(H=>({name:H.name,description:H.description,parameters:H.parameters})),json:JSON.stringify(Array.from(this._tools.values()).map(H=>({name:H.name,description:H.description,parameters:H.parameters})),null,2),count:this._tools.size}:null,metadata:{}};return this._layoutRenderer.render(d,Be)}_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:vn(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=Ro();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=tn();return t!==void 0?t:e?.meta?.defaultIdleMs!==void 0?e.meta.defaultIdleMs:6e5}_lookupCliAdapter(e){return yn(e)}_resolveEffectiveCost(e,t,r){return Io(e?.costUsd,e?.inputTokens,e?.outputTokens,e?.cachedInputTokens,t)}_resolveEffectiveCwd(e,t){return t?.cwd??(e.working_directory?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,callerIdentity:r,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}}}_registerCallerIdentityOverride(e,t,r){let o=Symbol("callerIdentityOverride");return this._callerIdentityOverrides.set(e,{token:o,callerIdentity:t,targetIdentity:r}),o}_clearCallerIdentityOverride(e,t){if(!t)return;let r=this._callerIdentityOverrides.get(e);r&&r.token===t&&this._callerIdentityOverrides.delete(e);}_rewriteCallerFacingPayload(e,t,r){let{callerIdentity:o,targetIdentity:s}=r,i={...t,agentRef:o.agentRef};if(e==="task:output")return i;let a=i,d=a.metadata??{},l=d.crewx??{};return {...a,workspaceId:o.id,workspaceName:o.name,metadata:{...d,crewx:{...l,remoteExecution:s}}}}emit(e,t){if(e==="task:start"||e==="task:end"||e==="task:output"){let r=t.traceId,o=this._callerIdentityOverrides.get(r);if(o){let s=this._rewriteCallerFacingPayload(e,t,o);super.emit(e,s);return}}super.emit(e,t);}emitToolEvents(e,t,r,o,s,i,a){try{let l=this._lookupCliAdapter(r)?.parseEvent?.(o)??It(new Date().toISOString(),o);for(let c of l)c.type==="tool_use"&&c.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:c.toolName,rawName:c.toolName,input:c.toolInput?this.tryParseJson(c.toolInput):void 0,toolUseId:c.toolUseId}}),c.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:c.toolName??"unknown",rawName:c.toolName??"unknown",toolUseId:c.toolUseId,result:c.resultPreview,isError:c.isError}});}catch{}}emitTaskLogEntries(e,t,r,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){let c=await o.target.query(o.agentRef,t,this._buildFileRemoteOptions(e,r));return {...c,meta:{...c.meta,agentId:e.replace(/^@/,"")}}}let s=qt.getStore()??wn(r?.trace),i=r?.taskId??nt("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null},l=r?.callerIdentity?this._registerCallerIdentityOverride(i,r.callerIdentity,{agentId:e.replace(/^@/,""),workspaceId:this._workspaceId,workspaceName:this._workspaceName}):void 0;try{return await qt.run(d,async()=>{let c=Date.now(),f=new Date,g;try{g=ir(e,Array.from(this._agents.values()));}catch(A){if(A instanceof Ce){this.emit("task:start",{traceId:i,timestamp:f,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 M=Date.now()-c,F={code:"AGENT_NOT_FOUND",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:M,error:F,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:F,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:M,taskId:i}}}throw A}d.callerAgentId=g.id;let m=hn(g.provider),v=hr(g.options,"query",m,yr(r?.overdrive)),x=wr(g.options,"query"),k=v.active&&v.provider?v.provider:r?.provider??x.provider??m,w=v.active&&v.model?v.model:r?.model??x.model??g.inline?.model;w&&w.includes("{{")&&(w=await this._templateEngine.render(w,{...r?.vars??{}}));let _=k!==m?void 0:r?.resumeSessionId,E;try{E=be(k,this._additionalArgsProvider);}catch(A){this.emit("task:start",{traceId:i,timestamp:f,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 M=Date.now()-c,F={code:"PROVIDER_ERROR",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:M,error:F,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:F,meta:{agentId:g.id,provider:k,model:w,durationMs:M,taskId:i}}}let O=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),S;try{S=await this.renderAgentPromptFull(e,{session:{mode:"query",platform:r?.platform},vars:{user_input:t,...r?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(g,r)},messages:O,threadId:r?.threadId});}catch(A){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${A instanceof Error?A.message:String(A)}`);}let J,U,I,D=w,ie=!1,Q=A=>{ie||(ie=!0,this.emit("task:start",{traceId:i,timestamp:f,agentRef:e,message:t,mode:"query",pid:A,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:D,provider:k,codingAgentCommand:J,renderedPrompt:S,metadata:{...r?.metadata??{},provider:k,...v.active?{overdrive:!0}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},L=g.options,ee=v.active?v.mode:L?.query?.mode,j=v.active?v.effort:L?.query?.effort,te=Array.isArray(L?.query?.tools)?L.query.tools:void 0,B=this._tools.size>0?this._filterToolsByMode(te):[],q=(()=>{let A=L?.query;if(!A||Array.isArray(A))return;let{tools:M,effort:F,mode:T,provider:K,model:ae,profiles:ut,...Lr}=A,Et=Object.entries(Lr).filter(([,Ee])=>Ee!=null);if(Et.length!==0)return Object.fromEntries(Et.map(([Ee,$r])=>[Ee,String($r)]))})(),Z=g.inline?.max_steps;k.startsWith("api/")&&Q();let X=!1,z=0,Be=()=>{},H=new Promise(A=>{Be=A;});this._activeTasks.set(i,{pid:void 0,done:H});try{let A=await E.query(t,{model:w,effort:j,mode:ee,context:r?.context,systemPrompt:S??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(L?.query)?L.query:void 0,resumeSessionId:_,tools:B.length>0?B:void 0,maxSteps:Z,configOptions:q,timeoutMs:this._resolveTimeout("query",this._lookupCliAdapter(k)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(k)),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:k,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,f)},onPid:T=>{let K=this._activeTasks.get(i);K&&(K.pid=T),Q(T);},onOutput:(T,K)=>{let ae=this._lookupCliAdapter(k);K==="stdout"&&ae?.suppressOutputLine?.(T)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:T,level:K}),K==="stdout"&&this.emitToolEvents(i,e,k,T,g.id,r?.threadId??"","");},onTaskLog:T=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",k,T);for(let K of T)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(K),level:"info"});},onCommand:T=>{J=T;},onUsage:T=>{U=T;},onExitCode:T=>{I=T;},onModel:T=>{D||(D=T);}});z=this._resolveEffectiveCost(U,D,c),Q();let M=Date.now()-c,F={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",result:A,durationMs:M,exitCode:I,inputTokens:U?.inputTokens,outputTokens:U?.outputTokens,cachedInputTokens:U?.cachedInputTokens,costUsd:z,model:D,metadata:Object.keys(F).length>0?F:void 0}),X=!0,{ok:!0,data:A,meta:{agentId:g.id,provider:k,model:w,durationMs:M,taskId:i}}}catch(A){if(A instanceof ge){let T=nt("thd");return this._pendingThreads.set(T,{agentRef:g.id,providerStr:k,continuationState:A.continuationState,toolCall:A.toolCall,traceId:i,startMs:c,model:w}),X=!0,{ok:!0,status:"requires_action",data:"",toolCall:A.toolCall,threadId:T,meta:{agentId:g.id,provider:k,model:w,durationMs:Date.now()-c,taskId:i}}}z=this._resolveEffectiveCost(U,D,c),Q();let M=Date.now()-c,F={code:"QUERY_FAILED",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:M,error:F,exitCode:I,inputTokens:U?.inputTokens,outputTokens:U?.outputTokens,cachedInputTokens:U?.cachedInputTokens,costUsd:z,model:D,metadata:r?.metadata?{...r.metadata}:void 0}),X=!0,{ok:!1,data:"",error:F,meta:{agentId:g.id,provider:k,model:w,durationMs:M,taskId:i}}}finally{X||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:Date.now()-c,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:I??-1,inputTokens:U?.inputTokens,outputTokens:U?.outputTokens,cachedInputTokens:U?.cachedInputTokens,costUsd:z,model:D}),this._activeTasks.delete(i),this._clearCallerIdentityOverride(i,l),Be();}})}finally{this._clearCallerIdentityOverride(i,l);}}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=be(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 ge)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){let c=await o.target.execute(o.agentRef,t,this._buildFileRemoteOptions(e,r));return {...c,meta:{...c.meta,agentId:e.replace(/^@/,"")}}}let s=qt.getStore()??wn(r?.trace),i=r?.taskId??nt("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null},l=r?.callerIdentity?this._registerCallerIdentityOverride(i,r.callerIdentity,{agentId:e.replace(/^@/,""),workspaceId:this._workspaceId,workspaceName:this._workspaceName}):void 0;try{return await qt.run(d,async()=>{let c=Date.now(),f=new Date,g;try{g=ir(e,Array.from(this._agents.values()));}catch(A){if(A instanceof Ce){this.emit("task:start",{traceId:i,timestamp:f,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 M=Date.now()-c,F={code:"AGENT_NOT_FOUND",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:M,error:F,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:F,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:M,taskId:i}}}throw A}d.callerAgentId=g.id;let m=hn(g.provider),v=hr(g.options,"execute",m,yr(r?.overdrive)),x=wr(g.options,"execute"),k=v.active&&v.provider?v.provider:r?.provider??x.provider??m,w=v.active&&v.model?v.model:r?.model??x.model??g.inline?.model;w&&w.includes("{{")&&(w=await this._templateEngine.render(w,{...r?.vars??{}}));let _=k!==m?void 0:r?.resumeSessionId,E;try{E=be(k,this._additionalArgsProvider);}catch(A){this.emit("task:start",{traceId:i,timestamp:f,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 M=Date.now()-c,F={code:"PROVIDER_ERROR",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:M,error:F,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:F,meta:{agentId:g.id,provider:k,model:w,durationMs:M,taskId:i}}}let O=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),S;try{S=await this.renderAgentPromptFull(e,{session:{mode:"execute",platform:r?.platform},vars:{user_input:t,...r?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(g,r)},messages:O,threadId:r?.threadId});}catch(A){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${A instanceof Error?A.message:String(A)}`);}let J,U,I,D=w,ie=!1,Q=A=>{ie||(ie=!0,this.emit("task:start",{traceId:i,timestamp:f,agentRef:e,message:t,mode:"execute",pid:A,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:D,provider:k,codingAgentCommand:J,renderedPrompt:S,metadata:{...r?.metadata??{},provider:k,...v.active?{overdrive:!0}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},L=g.options,ee=v.active?v.mode:L?.execute?.mode,j=v.active?v.effort:L?.execute?.effort,te=Array.isArray(L?.execute?.tools)?L.execute.tools:void 0,B=this._tools.size>0?this._filterToolsByMode(te):[],q=(()=>{let A=L?.execute;if(!A||Array.isArray(A))return;let{tools:M,effort:F,mode:T,provider:K,model:ae,profiles:ut,...Lr}=A,Et=Object.entries(Lr).filter(([,Ee])=>Ee!=null);if(Et.length!==0)return Object.fromEntries(Et.map(([Ee,$r])=>[Ee,String($r)]))})(),Z=g.inline?.max_steps;k.startsWith("api/")&&Q();let X=!1,z=0,Be=()=>{},H=new Promise(A=>{Be=A;});this._activeTasks.set(i,{pid:void 0,done:H});try{let A=await E.execute(t,{model:w,effort:j,mode:ee,context:r?.context,systemPrompt:S??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(L?.execute)?L.execute:void 0,resumeSessionId:_,tools:B.length>0?B:void 0,maxSteps:Z,configOptions:q,timeoutMs:this._resolveTimeout("execute",this._lookupCliAdapter(k)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(k)),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:k,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,f)},onPid:T=>{let K=this._activeTasks.get(i);K&&(K.pid=T),Q(T);},onOutput:(T,K)=>{let ae=this._lookupCliAdapter(k);K==="stdout"&&ae?.suppressOutputLine?.(T)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:T,level:K}),K==="stdout"&&this.emitToolEvents(i,e,k,T,g.id,r?.threadId??"","");},onTaskLog:T=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",k,T);for(let K of T)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(K),level:"info"});},onCommand:T=>{J=T;},onUsage:T=>{U=T;},onExitCode:T=>{I=T;},onModel:T=>{D||(D=T);}});z=this._resolveEffectiveCost(U,D,c),Q();let M=Date.now()-c,F={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",result:A,durationMs:M,exitCode:I,inputTokens:U?.inputTokens,outputTokens:U?.outputTokens,cachedInputTokens:U?.cachedInputTokens,costUsd:z,model:D,metadata:Object.keys(F).length>0?F:void 0}),X=!0,{ok:!0,data:A,meta:{agentId:g.id,provider:k,model:w,durationMs:M,taskId:i}}}catch(A){z=this._resolveEffectiveCost(U,D,c),Q();let M=Date.now()-c,F={code:"EXECUTE_FAILED",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:M,error:F,exitCode:I,inputTokens:U?.inputTokens,outputTokens:U?.outputTokens,cachedInputTokens:U?.cachedInputTokens,costUsd:z,model:D,metadata:r?.metadata?{...r.metadata}:void 0}),X=!0,{ok:!1,data:"",error:F,meta:{agentId:g.id,provider:k,model:w,durationMs:M,taskId:i}}}finally{X||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:Date.now()-c,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:I??-1,inputTokens:U?.inputTokens,outputTokens:U?.outputTokens,cachedInputTokens:U?.cachedInputTokens,costUsd:z,model:D}),this._activeTasks.delete(i),this._clearCallerIdentityOverride(i,l),Be();}})}finally{this._clearCallerIdentityOverride(i,l);}}};function Ts(n,e){let t=Wn(n)?n:void 0,r=Wn(e)?e:void 0;if(!(!t&&!r))return {...t??{},...r??{}}}function Wn(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function vl(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(!Wn(a))return;let d=a.id;if(typeof d=="string")return `id:${d}`;let l=a.name;if(typeof l=="string")return `name:${l}`},s=new Set;for(let a of r??[]){let d=o(a);d&&s.add(d);}let i=[];for(let a of t??[]){let d=o(a);d&&s.has(d)||i.push(a);}for(let a of r??[])i.push(a);return i}function _l(n){let e=Array.isArray(n.provider)?n.provider:[n.provider],t=n.options,r=[...e];for(let o of ["query","execute"]){let s=wr(t,o);s.provider&&r.push(s.provider);let i=t&&typeof t=="object"&&!Array.isArray(t)?t[o]:void 0,a=i&&typeof i=="object"&&!Array.isArray(i)?mr(i.overdrive):void 0;a?.provider&&r.push(a.provider);}return r}async function Ps(n,e,t){let r=n.flatMap(_l);if(r.some(s=>s.startsWith("api/"))){let{registerApiProviders:s}=await Promise.resolve().then(()=>(Pn(),fs));s(t?.api);}await xl(r,e),Al(r,e),kl(r);}function kl(n){if(!n.some(r=>r.startsWith("acp/")))return;let{registerAcpProviders:t}=(Dn(),ao(vs));t();}async function xl(n,e){if(!n.some(i=>i.startsWith("remote/")))return;let r=e.providers;if(!Array.isArray(r))return;let{createRemoteProviderFactory:o}=await Promise.resolve().then(()=>(Un(),ks)),s=new Map;for(let i of r)i.type==="remote"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&Pe("remote",o(s,be));}function Al(n,e){if(!n.some(i=>i.startsWith("plugin/")))return;let r=e.providers;if(!Array.isArray(r))return;let{createPluginProviderFactory:o}=(jn(),ao(Rs)),s=new Map;for(let i of r)i.type==="plugin"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&Pe("plugin",o(s));}p();var Bn=class{detach(e){}};p();var El="crewx:fs:",zn=class{prefix;store;constructor(e){this.prefix=e?.prefix??El,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,"/")}`}};p();var Kn="default",Gn="archive",bs=/^[a-zA-Z0-9_-]{1,64}$/;function Ss(n){return n===Kn||n===Gn}function Rl(n){let e={id:Kn,name:"Default",workflowId:"wi-default-flow",system:true,readOnly:false},t={id:Gn,name:"Archive",workflowId:"",system:true,readOnly:true},r=n?.settings?.wi?.boards;if(!Array.isArray(r)||r.length===0)return [e,t];let o=new Set,s=[];for(let i of r){if(!i||typeof i!="object")continue;let a=i,d=a.id,l=a.name,c=a.workflow_id;if(typeof d!="string"||d.length===0||typeof l!="string"||l.length===0||typeof c!="string"||c.length===0||Ss(d)||!bs.test(d)||o.has(d))continue;o.add(d);let f=typeof a.description=="string"?a.description:void 0,g=typeof a.goal_id=="string"?a.goal_id:void 0;s.push({id:d,name:l,workflowId:c,...f!==void 0?{description:f}:{},...g!==void 0?{goalId:g}:{},system:false,readOnly:false});}return [e,...s,t]}p();function Yt(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Is(n,e){let t={...n};for(let[r,o]of Object.entries(e))Yt(o)&&Yt(t[r])?t[r]=Is(t[r],o):t[r]=o;return t}function Ll(n){let e=n?.filePath??join(homedir(),".crewx","crewx.yaml"),t=null,r=null;function o(){try{return statSync(e).mtimeMs}catch{return null}}function s(){let i=o();if(i===null)return t=null,r=null,{};if(r!==null&&t===i)return r;let a=null;try{a=load(readFileSync(e,"utf-8"));}catch{a=null;}let d=Yt(a)?a:{};return r=d,t=i,d}return {get path(){return e},read(){let i=s();return Yt(i.settings)?i.settings:{}},update(i){let a=s(),d=Yt(a.settings)?a.settings:{},l=Is(d,i),c={...a,settings:l};mkdirSync(dirname(e),{recursive:true});let f=`${e}.tmp`;return writeFileSync(f,dump(c)),renameSync(f,e),t=null,r=null,l}}}p();he();function Vn(n){if(!n)return "";let e=n.lastIndexOf("/");return e===-1?n.trim():n.slice(e+1).trim()}function Os(n){return n?ht(n).models.length>0:false}function Jn(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function $l(n,e,t){let r=n,o=false,s=[],i=()=>(o||(r={...n},o=true),r),a=typeof r.provider=="string"&&r.provider.trim()?Vn(r.provider):e,d=typeof r.model=="string"&&r.model.trim()?r.model.trim():t;Os(a)&&(typeof r.mode=="string"&&(Tt(a).map(f=>f.id).includes(r.mode)||(delete i().mode,s.push("mode"))),typeof r.effort=="string"&&(Pt(a,d).includes(r.effort)||(delete i().effort,s.push("effort"))));let l=r.overdrive;if(Jn(l)){let c=Vn(typeof l.provider=="string"?l.provider:void 0),f=typeof l.model=="string"?l.model:void 0;if(Os(c)){let g,m=()=>(g||(g={...l},i().overdrive=g),g);typeof l.mode=="string"&&(Tt(c).map(x=>x.id).includes(l.mode)||(delete m().mode,s.push("overdrive.mode"))),typeof l.effort=="string"&&(Pt(c,f).includes(l.effort)||(delete m().effort,s.push("overdrive.effort")));}}return {block:r,removed:s}}function Ul(n){let{options:e}=n;if(!Jn(e))return {options:e,changed:false,removed:[]};let t=Vn(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(!Jn(d))continue;let{block:l,removed:c}=$l(d,t,n.model);c.length>0&&(i()[a]=l,r.push(...c.map(f=>`${a}.${f}`)));}return {options:o,changed:r.length>0,removed:r}}p();var jl="https://api.crewx.dev/v1/models",Fl=3600*1e3,Ms=0;async function Hl(n){let e=n?.ttlMs??Fl,t=Date.now();if(!(t-Ms<e)){Ms=t;try{let r=await fetch(n?.endpoint??jl);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});So(s);}catch{}}}p();he();var ql="https://api.crewx.dev/v1/models",Wl=900*1e3,Ns=0;async function Bl(n){let e=n?.ttlMs??Wl,t=Date.now();if(!(t-Ns<e)){Ns=t;try{let r=await fetch(n?.endpoint??ql);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??[],c=Array.isArray(a)?[]:a.effort??[],f=Array.isArray(a)?{}:a.modelOverrides??{},g=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:g,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:c.filter(m=>typeof m=="string"),modelOverrides:f};}Br(s);}catch{}}}p();function zl(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))}p();var Xn=["codex","claude","opencode","antigravity","copilot"];function Kl(n){let e=n.indexOf("/");return e===-1?n:n.slice(e+1)}function Yn(n){let e=Kl(n),t=Xn.indexOf(e);return t===-1?Xn.length:t}function Qt(n,e){return Yn(n)-Yn(e)}var Gl=new Set(["claude","copilot","codex","opencode"]);function Vl(n){if(!n)return "";if(n.startsWith("acp/")){let e=n.slice(4);if(Gl.has(e))return `cli/${e}`}return n}he();ve();Tn();Pn();p();bn();Le();p();Pr();Mr();he();var Jl="model",Xl="mode",Yl="thought_level";function Qn(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 Ql(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 Zl(n,e,t,r){let o=t.agentInfo?.name,s=e??o??n,i=r.configOptions??[],d=(r.modes?.availableModes??[]).map(w=>({id:w.id,name:w.name,...w.description!=null?{description:w.description}:{}})),l=[];for(let w of i)if(w.category?.trim().toLowerCase()===Xl&&w.options!=null)for(let _ of Qn(w.options))_.value!=null&&l.push({id:_.value,name:_.name??_.value});let c=Ql(d,l),f=[];for(let w of i)if(w.category?.trim().toLowerCase()===Yl&&w.type==="select")for(let _ of Qn(w.options??[]))_.value!=null&&f.push(_.value);if(n==="claude"){let w=bt().map(E=>({id:E.id,name:E.name})),_=Ds(t);return Ls(n,{models:w,modes:c,availableModelsCount:0,configModelsCount:0,skipModelWarn:true}),{id:`acp/${n}`,name:s,modes:c,effort:f,models:w,capabilities:_}}let m=(r.models?.availableModels??[]).map(w=>({id:w.modelId})),v=[];for(let w of i)if(w.category?.trim().toLowerCase()===Jl&&w.options!=null)for(let _ of Qn(w.options))_.value!=null&&v.push({id:_.value,..._.name!=null?{name:_.name}:{}});let x=St(m,v);Ls(n,{models:x,modes:c,availableModelsCount:m.length,configModelsCount:v.length,skipModelWarn:false});let k=Ds(t);return {id:`acp/${n}`,name:s,modes:c,effort:f,models:x,capabilities:k}}function Ds(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 Ls(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 $s(n){let e=ct[n];if(!e)return null;let t=e.meta?.displayName,r=new lt({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 Zl(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 ec(){let n=Object.keys(ct),e=await Promise.allSettled(n.map(r=>$s(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))}Pr();Sn();Mr();Dn();Fr();De();p();De();he();function rc(n){return n.charAt(0).toUpperCase()+n.slice(1)}async function Us(){return new Promise(n=>{execFile("opencode",["models"],{timeout:5e3,maxBuffer:1048576},(t,r)=>{if(t){n([]);return}let o=r.split(`
|
|
304
|
-
`
|
|
302
|
+
ORDER BY ${p.started_at} ASC
|
|
303
|
+
`).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 S("DB_ERROR","Failed to get tasks for report",s)}finally{o.close();}}findTaskEvidence(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(eq(p.workspace_id,e.workspaceId)),e.agents&&e.agents.length>0&&r.push(inArray(p.agent_id,e.agents)),e.statuses&&e.statuses.length>0&&r.push(inArray(p.status,e.statuses)),e.from&&r.push(gte(p.started_at,e.from)),e.to&&r.push(lt(p.started_at,e.to));let o=r.length>0?and(...r):void 0,s=(e.order??"DESC")==="ASC"?asc(p.started_at):desc(p.started_at),i={id:p.id,agent_id:p.agent_id,status:p.status,prompt:p.prompt,started_at:p.started_at,completed_at:p.completed_at,thread_id:p.thread_id};return e.limit?t.db.select(i).from(p).where(o).orderBy(s).limit(e.limit).all():t.db.select(i).from(p).where(o).orderBy(s).all()}catch(r){throw new S("DB_ERROR","Failed to find task evidence",r)}finally{t.close();}}findThreadChains(e){if(!this.dbExists())return [];let t=this.openHandle(false);try{let r=e.maxThreads??8,o=e.maxTurnsPerThread??4,s=[isNotNull(p.thread_id),isNull(p.parent_task_id),isNull(p.caller_agent_id),or(isNull(p.platform),ne(p.platform,"workflow")),or(isNull(p.metadata),notLike(p.metadata,'%"kind":"workflow_card"%')),or(isNull(p.metadata),notLike(p.metadata,'%"retriedFromTaskId"%'))];e.workspaceId&&s.push(eq(p.workspace_id,e.workspaceId)),e.from&&s.push(gte(p.started_at,e.from)),e.to&&s.push(lt(p.started_at,e.to));let i=t.db.select({id:p.id,agent_id:p.agent_id,status:p.status,prompt:p.prompt,started_at:p.started_at,completed_at:p.completed_at,thread_id:p.thread_id}).from(p).where(and(...s)).orderBy(asc(p.started_at),asc(p.id)).all(),a=new Map;for(let l of i){if(!l.thread_id)continue;let c={id:l.id,agentId:l.agent_id,status:l.status,prompt:l.prompt,startedAt:l.started_at,completedAt:l.completed_at},f=a.get(l.thread_id);f?f.push(c):a.set(l.thread_id,[c]);}let d=[];for(let[l,c]of a){let f=c.filter(g=>g.agentId===e.targetAgentId).length;f<2||d.push({threadId:l,targetAgentTurnCount:f,turns:c});}return d.sort((l,c)=>{let f=l.turns[l.turns.length-1].startedAt,g=c.turns[c.turns.length-1].startedAt;return f<g?1:f>g?-1:0}),d.slice(0,r).map(l=>({threadId:l.threadId,targetAgentTurnCount:l.targetAgentTurnCount,turns:l.turns.slice(-o)}))}catch(r){throw new S("DB_ERROR","Failed to find thread chains",r)}finally{t.close();}}};var qd=new Set(["Read","Grep","Find","Glob"]),zd=["git status","git log","git branch","git diff --stat","git show","git remote","git rev-parse","git ls-files","pwd","ls ","echo ","cat ","head ","tail ","npx crewx memory index","npx crewx memory find","npx crewx memory get","npx crewx doc toc","npx crewx doc section","npx crewx doc status","npx crewx search","npx skill tsserver find","npx skill tsserver refs","npx skill tsserver type","crewx memory index","crewx memory find","crewx memory get","crewx doc toc","crewx doc section","crewx doc status","crewx search","crewx agent ls","crewx agent list"],Kd=[/\bgit\s+(commit|push|pull|merge|rebase|reset|checkout|switch|add|rm)\b/,/\bnpm\s+(install|ci|publish|run\s+(test|lint|build))\b/,/\bnpx\s+tsc\b/,/\bpnpm\s+(install|run)\b/,/\bvitest\b/,/\bjest\b/];function Gd(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 Vd(n,e){if(qd.has(n))return true;if(n!=="Bash"||!e)return false;let t=e.split(`
|
|
304
|
+
`)[0].trimStart();return Kd.some(r=>r.test(t))?false:zd.some(r=>t.startsWith(r))}function Nr(n){return n.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function Jd(n,e,t){if(n!=="Read"||!e)return "ok";let o=e.split(`
|
|
305
|
+
`).find(s=>s.trim()&&!s.startsWith("Read "))?.trim()??e.trim();if(!o)return "unknown";try{let s=us.statSync(o);if(t){let i=Date.parse(t);if(!Number.isNaN(i)&&s.mtimeMs>i)return "stale"}return "ok"}catch{return "unknown"}}function Xd(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 Yd(n){if(!Array.isArray(n))return [];let e=n,t=e.filter(a=>a.level==="stdout"&&a.message).map(a=>a.message),r=Xd(t),o=[];for(let a of e)a.level==="info"&&a.message?o.push(...ye(a.message,a.timestamp)):a.level==="stdout"&&a.message&&r&&o.push(...Ut("",a.message,r));let s=new Map,i=[];for(let a of o)if(a.type==="tool_use"){let d={tool:Gd(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 Qd(n,e){let t=Yd(n),r=[];for(let o of t){let s=o.tool==="Bash"?o.input?.split(`
|
|
306
|
+
`)[0]?.slice(0,150)??null:o.input?.slice(0,150)??null,i=Vd(o.tool,o.input)&&!o.isError;r.push({tool:o.tool,cmd:s,result:o.result,status:Jd(o.tool,o.input,e),reusable:i});}return r}function Zd(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="${Nr(o.tool)}"`,i=o.cmd?` cmd="${Nr(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(Nr(l.slice(0,d))+` \u2026 [truncated, ${d}/${l.length} chars shown]`):r.push(Nr(l)),r.push(" </entry>");}else r.push(` <entry ${s}${i}${a} />`);}}return r.push("</activity_log>"),r}function ps(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 Yt().findTasksByThread(e).filter(g=>!g.parent_task_id&&g.agent_id===t).sort((g,m)=>m.started_at>g.started_at?1:-1).slice(0,Math.min(r,5));}catch{return new Map}if(!i.length)return new Map;let a=[];for(let f of i){let g=[];try{let m=JSON.parse(f.logs??"[]");Array.isArray(m)&&(g=m);}catch{}a.push({taskId:f.id,entries:Qd(g,f.completed_at)});}let d=new Map,l=typeof s=="number"&&s>0&&s<=1?s:1,c=1e3;for(let f=0;f<a.length;f++){let{taskId:g,entries:m}=a[f];if(m.length===0)continue;let _=Math.max(Math.floor((o??8e3)*Math.pow(l,f)),c),v=Math.max(0,m.length-200),x=v>0?m.slice(v):m,w=Zd(x,v,_);d.set(g,w.join(`
|
|
307
|
+
`));}return d}u();u();var el={agentId:z.string().describe("The agent ID to query"),query:z.string().describe("The query message to send"),context:z.string().optional().describe("Additional context"),thread:z.string().optional().describe("Thread ID for conversation continuity")},tl={agentId:z.string().describe("The agent ID to execute"),task:z.string().describe("The task description to execute"),context:z.string().optional().describe("Additional context"),thread:z.string().optional().describe("Thread ID for conversation continuity")};function gs(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",el,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)",tl,async({agentId:r,task:o,context:s,thread:i})=>{if(!t.has(r))return {content:[{type:"text",text:`Agent '${r}' is not exposed by this server`}],isError:true};let a=await e.execute(r,o,{context:s,threadId:i});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Execute failed"}],isError:true}});}u();function fs(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 ms(n,e){return e?await e(n)?null:new Response(JSON.stringify({error:"Unauthorized"}),{status:401,headers:{"Content-Type":"application/json"}}):null}function ol(n,e){let t=new McpServer({name:"crewx-mcp-server",version:"1.0.0"},{capabilities:{tools:{}}});return gs(t,n,e),t}function Mn(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=fs(o);if(s)return s;let i=await ms(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=ol(n,t),l=new WebStandardStreamableHTTPServerTransport({sessionIdGenerator:()=>crypto.randomUUID(),onsessioninitialized:c=>{r.set(c,{transport:l,server:d});},onsessionclosed:c=>{r.delete(c);},enableJsonResponse:true});return await d.connect(l),l.handleRequest(o)}}u();function ys(n){let e=G.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 Nn(n){let e=ys(n);return createHash("sha256").update(e).digest("hex")}function Il(n){return n?n.settings?.template?.exec:void 0}function Ol(){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}=se("crypto");return n(8).toString("hex")}}var Xn=class n extends Vt{_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;_callerIdentityOverrides=new Map;constructor(e,t={},r,o,s){super(),this._agents=new Map(e.map(d=>[d.id,d])),this._config=r,this._projectRoot=s??(typeof process<"u"?process.cwd():"/");let i=s??(typeof process<"u"?process.env.CREWX_WORKSPACE??process.cwd():"/");this._workspaceId=Nn(i),this._workspaceName=basename(i);let a=Il(r);this._templateEngine=new Bt({execPolicy:t.execPolicy??a}),this._documentLoader=o??new st,this._layoutLoader=new qt({templatesPath:ht()}),this._layoutRenderer=new Gt,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=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,c=l.getAgent("@"+a),f=Array.isArray(c?.provider)?c?.provider[0]:c?.provider;if(f?.startsWith("remote/"))throw new Error(`Chained remotes not allowed: "${o}" \u2192 "${f}"`);return {target:l,agentRef:"@"+a}}static async loadBuiltInConfig(e){let{yamlPath:t,dir:r}=Gr(),o;try{o=readFileSync(t,"utf-8");}catch(i){throw new Error(`[@crewx/sdk] Cannot read built-in config: ${t}
|
|
308
|
+
${i.message}`)}let s=ur(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"&&!isAbsolute(l.path)?i[a]={...l,path: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 k of e.agents??[])r.set(k.id,k);for(let k of t.agents??[])r.has(k.id)&&console.warn(`[agent-loader] User agent "${k.id}" overrides built-in`),r.set(k.id,k);let o=Array.from(r.values()),s={...e.layouts??{},...t.layouts??{}},i={...e.documents??{},...t.documents??{}},a=e,d=t,l=Ns(a.vars,d.vars),c=Ns(a.settings,d.settings),f;e.skills&&t.skills&&typeof e.skills=="object"&&typeof t.skills=="object"&&!Array.isArray(e.skills)&&!Array.isArray(t.skills)?f={...e.skills,...t.skills}:f=t.skills??e.skills;let g=[...e.hooks??[],...t.hooks??[]],m=Ml(a.providers,d.providers),_={...e},v={...t};for(let k of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete _[k],delete v[k];let w={...{..._,...v},agents:o,layouts:s,documents:i,skills:f};return g.length>0&&(w.hooks=g),l!==void 0&&(w.vars=l),c!==void 0&&(w.settings=c),m!==void 0&&(w.providers=m),w}static async loadYaml(e,t,r){let o=t?.includeBuiltIns!==false,s,i;if(o){let c=await n.loadBuiltInConfig(r);if(e!==void 0){let f=pr(e);s=n.mergeCrewxConfig(c,f),i=dirname(e);}else s=c,i=process.cwd();}else {if(e===void 0)throw new Error("[@crewx/sdk] loadYaml: path is required when includeBuiltIns is false");s=pr(e),i=dirname(e);}let a=new st(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 c=await n.loadBuiltInConfig(o);i=n.mergeCrewxConfig(c,e);}let a=new st(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=vn(t);return join(this._projectRoot,".crewx","logs",`${r}_${e}.log`)}registerTool(e,t){this._tools.set(e,{name:e,...t});}async use(e){this._plugins.includes(e)||(await e.attach(this),this._plugins.push(e));}handler(e){return Mn(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??kn(r),a=e.defaultMode??"query",d=t.manifest.platform,l=e.agentRunner??{run:async(m,_,v)=>{let w=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${m}`,_,{threadId:v?.threadId,platform:d});return {output:w.ok?w.data:w.error?.message??""}}},c=e.onInbound??(async m=>{let _=m.routingHints?.agentId??e.defaultAgent;if(!_)return {accepted:false,reason:"no_agent"};let{output:v}=await l.run(_,m.text,{threadId:m.threadId});return {accepted:true,output:v}}),f=An({instanceId:r,config:o,capabilities:s,db:i,agentRunner:l,onInbound:c}),g={adapter:t,ctx:f,state:"starting"};this._activeAdapters.set(r,g),this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"starting",timestamp:new Date});try{await t.start(f),g.state="started",this.emit("adapter:lifecycle",{adapterId:t.manifest.id,instanceId:r,state:"started",timestamp:new Date});}catch(m){throw g.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(jt+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=>_e(a.role.toLowerCase(),d)))),o&&(i=i.filter(a=>a.team&&o.some(d=>_e(a.team.toLowerCase(),d)))),s&&(i=i.filter(a=>(Array.isArray(a.provider)?a.provider:[a.provider]).some(l=>s.some(c=>_e(l.toLowerCase(),c))))),i}renderAgentPrompt(e){let t=e.startsWith("@")?e.slice(1):e,r=this._agents.get(t);if(!r)throw new Te(t,Array.from(this._agents.keys()));return r.inline?.prompt??r.inline?.system_prompt??r.description??`You are an expert ${t}.`}async renderPrompt(e,t){let 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 Te(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}.`,c=await this._documentLoader.buildContext(),f=t?.env??(typeof process<"u"?process.env:{}),g=t?.vars?.security_key??Ol(),m={...t?.vars??{},documents:c,env:f,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??""}},_=await this._templateEngine.render(l,m),v={mode:t?.session?.mode??"query",platform:t?.session?.platform??"cli",options:t?.session?.options??[]},x=o.provider,w=Array.isArray(x)?x:typeof x=="string"&&x.length>0?[x]:[],k=w.join(", ")||(typeof x=="string"?x:""),E=o.options,P=["goals","daily"],T={goals:false,daily:false},J;if(!Array.isArray(E)&&typeof E=="object"&&E!==null){let F=E;if("goals"in F){let M=F.goals;typeof M=="string"||Array.isArray(M)?T.goals=M:T.goals=!!M;}"daily"in F&&(T.daily=!!F.daily);let A={};for(let[M,W]of Object.entries(F))P.includes(M)||(A[M]=W);if(Object.keys(A).length>0){let M=w.some(b=>b.startsWith("cli/")),W={};for(let[b,K]of Object.entries(A)){let ce={};if(Array.isArray(K))M&&(ce.rawArgs=K);else if(typeof K=="object"&&K!==null){let mt=K;Object.keys(mt).length>0&&(ce.named=mt);}(ce.named||ce.rawArgs&&ce.rawArgs.length>0)&&(W[b]=ce);}J=Object.keys(W).length>0?W:void 0;}}let U=Array.isArray(E)?E:void 0,O={};for(let[F,A]of Object.entries(c))O[F]={content:A.content??"",toc:A.toc,summary:A.summary,path:A.path};if(T.goals){let F=join(this._projectRoot,"docs","goal"),A=await Xo(F,void 0,T.goals);A&&(O.active_goals={content:A});}if(T.daily){let F=join(this._projectRoot,"docs","daily"),A=await Yo(F);A&&(O.today_daily={content:A});}let D=t?.vars?.user_input??void 0,L=this._config?.settings?.dreaming?.continuity,ee=L?.reuseReadOnly!==false,j=typeof L?.lookback=="number"?L.lookback:5,oe=typeof L?.maxEntryChars=="number"?L.maxEntryChars:8e3,q=typeof L?.decayRate=="number"?L.decayRate:.5,H=t?.threadId??"",Z=o.id,X=ee&&j>0&&H&&t?.messages&&t.messages.length>0?ps({threadId:H,agentId:Z,lookback:j,maxEntryChars:oe,decayRate:q}):new Map,z=(t?.messages??[]).map(F=>{if(!F.isAssistant)return F;let A=F.metadata?.task_id;return !A||!X.has(A)?F:{...F,activity_log:X.get(A)}}),Ge={user_input:D,agent:{id:o.id,name:o.name??o.id,role:o.role??"",team:o.team??"",description:o.description??"",provider:k,providerList:w,model:o.inline?.model,workingDirectory:o.working_directory??o.workingDirectory??".",inline:{...o.inline??{},prompt:_},specialties:o.specialties??[],capabilities:o.capabilities??[],remote:o.remote??null,optionsByMode:J,optionsArray:U},agentMetadata:{specialties:o.specialties??[],capabilities:o.capabilities??[],description:o.description??""},contextOptions:T,documents:O,skills:t?.skills??[],session:v,env:f,vars:{security_key:g,...t?.vars??{}},props:{...a??{},...t?.messages&&t.messages.length>0?{showConversationHistory:true}:{}},platform:v.platform,mode:v.mode,thread_id:H,now:zt(new Date),has_activity_log:X.size>0,messages:z,tools:this._tools.size>0?{list:Array.from(this._tools.values()).map(F=>({name:F.name,description:F.description,parameters:F.parameters})),json:JSON.stringify(Array.from(this._tools.values()).map(F=>({name:F.name,description:F.description,parameters:F.parameters})),null,2),count:this._tools.size}:null,metadata:{}};return this._layoutRenderer.render(d,Ge)}_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:bn(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=Oo();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=cn();return t!==void 0?t:e?.meta?.defaultIdleMs!==void 0?e.meta.defaultIdleMs:6e5}_lookupCliAdapter(e){return En(e)}_resolveEffectiveCost(e,t,r){return Uo(e?.costUsd,e?.inputTokens,e?.outputTokens,e?.cachedInputTokens,t)}_resolveEffectiveCwd(e,t){return t?.cwd??(e.working_directory?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,callerIdentity:r,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}}}_registerCallerIdentityOverride(e,t,r){let o=Symbol("callerIdentityOverride");return this._callerIdentityOverrides.set(e,{token:o,callerIdentity:t,targetIdentity:r}),o}_clearCallerIdentityOverride(e,t){if(!t)return;let r=this._callerIdentityOverrides.get(e);r&&r.token===t&&this._callerIdentityOverrides.delete(e);}_rewriteCallerFacingPayload(e,t,r){let{callerIdentity:o,targetIdentity:s}=r,i={...t,agentRef:o.agentRef};if(e==="task:output")return i;let a=i,d=a.metadata??{},l=d.crewx??{};return {...a,workspaceId:o.id,workspaceName:o.name,metadata:{...d,crewx:{...l,remoteExecution:s}}}}emit(e,t){if(e==="task:start"||e==="task:end"||e==="task:output"){let r=t.traceId,o=this._callerIdentityOverrides.get(r);if(o){let s=this._rewriteCallerFacingPayload(e,t,o);super.emit(e,s);return}}super.emit(e,t);}emitToolEvents(e,t,r,o,s,i,a){try{let l=this._lookupCliAdapter(r)?.parseEvent?.(o)??Ut(new Date().toISOString(),o);for(let c of l)c.type==="tool_use"&&c.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:c.toolName,rawName:c.toolName,input:c.toolInput?this.tryParseJson(c.toolInput):void 0,toolUseId:c.toolUseId}}),c.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:t,agentId:s,threadId:i,sessionId:a,provider:r,tool:{name:c.toolName??"unknown",rawName:c.toolName??"unknown",toolUseId:c.toolUseId,result:c.resultPreview,isError:c.isError}});}catch{}}emitTaskLogEntries(e,t,r,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){let c=await o.target.query(o.agentRef,t,this._buildFileRemoteOptions(e,r));return {...c,meta:{...c.meta,agentId:e.replace(/^@/,"")}}}let s=Jt.getStore()??Cn(r?.trace),i=r?.taskId??at("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null},l=r?.callerIdentity?this._registerCallerIdentityOverride(i,r.callerIdentity,{agentId:e.replace(/^@/,""),workspaceId:this._workspaceId,workspaceName:this._workspaceName}):void 0;try{return await Jt.run(d,async()=>{let c=Date.now(),f=new Date,g;try{g=gr(e,Array.from(this._agents.values()));}catch(A){if(A instanceof Te){this.emit("task:start",{traceId:i,timestamp:f,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 M=Date.now()-c,W={code:"AGENT_NOT_FOUND",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:M,error:W,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:W,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:M,taskId:i}}}throw A}d.callerAgentId=g.id;let m=Rn(g.provider),_=Er(g.options,"query",m,Ar(r?.overdrive)),v=Rr(g.options,"query"),x=_.active&&_.provider?_.provider:r?.provider??v.provider??m,w=_.active&&_.model?_.model:r?.model??v.model??g.inline?.model;w&&w.includes("{{")&&(w=await this._templateEngine.render(w,{...r?.vars??{}}));let k=x!==m?void 0:r?.resumeSessionId,E;try{E=Ie(x,this._additionalArgsProvider);}catch(A){this.emit("task:start",{traceId:i,timestamp:f,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 M=Date.now()-c,W={code:"PROVIDER_ERROR",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:M,error:W,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:W,meta:{agentId:g.id,provider:x,model:w,durationMs:M,taskId:i}}}let P=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),T;try{T=await this.renderAgentPromptFull(e,{session:{mode:"query",platform:r?.platform},vars:{user_input:t,...r?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(g,r)},messages:P,threadId:r?.threadId});}catch(A){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${A instanceof Error?A.message:String(A)}`);}let J,U,O,D=w,le=!1,Q=A=>{le||(le=!0,this.emit("task:start",{traceId:i,timestamp:f,agentRef:e,message:t,mode:"query",pid:A,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:D,provider:x,codingAgentCommand:J,renderedPrompt:T,metadata:{...r?.metadata??{},provider:x,..._.active?{overdrive:!0}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},L=g.options,ee=_.active?_.mode:L?.query?.mode,j=_.active?_.effort:L?.query?.effort,oe=Array.isArray(L?.query?.tools)?L.query.tools:void 0,q=this._tools.size>0?this._filterToolsByMode(oe):[],H=(()=>{let A=L?.query;if(!A||Array.isArray(A))return;let{tools:M,effort:W,mode:b,provider:K,model:ce,profiles:mt,...qr}=A,It=Object.entries(qr).filter(([,be])=>be!=null);if(It.length!==0)return Object.fromEntries(It.map(([be,zr])=>[be,String(zr)]))})(),Z=g.inline?.max_steps;x.startsWith("api/")&&Q();let X=!1,z=0,Ge=()=>{},F=new Promise(A=>{Ge=A;});this._activeTasks.set(i,{pid:void 0,done:F});try{let A=await E.query(t,{model:w,effort:j,mode:ee,context:r?.context,systemPrompt:T??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(L?.query)?L.query:void 0,resumeSessionId:k,tools:q.length>0?q:void 0,maxSteps:Z,configOptions:H,timeoutMs:this._resolveTimeout("query",this._lookupCliAdapter(x)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(x)),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:x,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,f)},onPid:b=>{let K=this._activeTasks.get(i);K&&(K.pid=b),Q(b);},onOutput:(b,K)=>{let ce=this._lookupCliAdapter(x);K==="stdout"&&ce?.suppressOutputLine?.(b)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:b,level:K}),K==="stdout"&&this.emitToolEvents(i,e,x,b,g.id,r?.threadId??"","");},onTaskLog:b=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",x,b);for(let K of b)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(K),level:"info"});},onCommand:b=>{J=b;},onUsage:b=>{U=b;},onExitCode:b=>{O=b;},onModel:b=>{D||(D=b);}});z=this._resolveEffectiveCost(U,D,c),Q();let M=Date.now()-c,W={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",result:A,durationMs:M,exitCode:O,inputTokens:U?.inputTokens,outputTokens:U?.outputTokens,cachedInputTokens:U?.cachedInputTokens,costUsd:z,model:D,metadata:Object.keys(W).length>0?W:void 0}),X=!0,{ok:!0,data:A,meta:{agentId:g.id,provider:x,model:w,durationMs:M,taskId:i}}}catch(A){if(A instanceof he){let b=at("thd");return this._pendingThreads.set(b,{agentRef:g.id,providerStr:x,continuationState:A.continuationState,toolCall:A.toolCall,traceId:i,startMs:c,model:w}),X=!0,{ok:!0,status:"requires_action",data:"",toolCall:A.toolCall,threadId:b,meta:{agentId:g.id,provider:x,model:w,durationMs:Date.now()-c,taskId:i}}}z=this._resolveEffectiveCost(U,D,c),Q();let M=Date.now()-c,W={code:"QUERY_FAILED",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:M,error:W,exitCode:O,inputTokens:U?.inputTokens,outputTokens:U?.outputTokens,cachedInputTokens:U?.cachedInputTokens,costUsd:z,model:D,metadata:r?.metadata?{...r.metadata}:void 0}),X=!0,{ok:!1,data:"",error:W,meta:{agentId:g.id,provider:x,model:w,durationMs:M,taskId:i}}}finally{X||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"query",durationMs:Date.now()-c,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:O??-1,inputTokens:U?.inputTokens,outputTokens:U?.outputTokens,cachedInputTokens:U?.cachedInputTokens,costUsd:z,model:D}),this._activeTasks.delete(i),this._clearCallerIdentityOverride(i,l),Ge();}})}finally{this._clearCallerIdentityOverride(i,l);}}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=Ie(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 he)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){let c=await o.target.execute(o.agentRef,t,this._buildFileRemoteOptions(e,r));return {...c,meta:{...c.meta,agentId:e.replace(/^@/,"")}}}let s=Jt.getStore()??Cn(r?.trace),i=r?.taskId??at("tsk"),a={parentTaskId:s?.parentTaskId??null,rootTraceId:s?.rootTraceId??i,callerAgentId:s?.callerAgentId??null},d={parentTaskId:i,rootTraceId:s?.rootTraceId??i,callerAgentId:null},l=r?.callerIdentity?this._registerCallerIdentityOverride(i,r.callerIdentity,{agentId:e.replace(/^@/,""),workspaceId:this._workspaceId,workspaceName:this._workspaceName}):void 0;try{return await Jt.run(d,async()=>{let c=Date.now(),f=new Date,g;try{g=gr(e,Array.from(this._agents.values()));}catch(A){if(A instanceof Te){this.emit("task:start",{traceId:i,timestamp:f,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 M=Date.now()-c,W={code:"AGENT_NOT_FOUND",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:M,error:W,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:W,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:M,taskId:i}}}throw A}d.callerAgentId=g.id;let m=Rn(g.provider),_=Er(g.options,"execute",m,Ar(r?.overdrive)),v=Rr(g.options,"execute"),x=_.active&&_.provider?_.provider:r?.provider??v.provider??m,w=_.active&&_.model?_.model:r?.model??v.model??g.inline?.model;w&&w.includes("{{")&&(w=await this._templateEngine.render(w,{...r?.vars??{}}));let k=x!==m?void 0:r?.resumeSessionId,E;try{E=Ie(x,this._additionalArgsProvider);}catch(A){this.emit("task:start",{traceId:i,timestamp:f,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 M=Date.now()-c,W={code:"PROVIDER_ERROR",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:M,error:W,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(i,l),{ok:!1,data:"",error:W,meta:{agentId:g.id,provider:x,model:w,durationMs:M,taskId:i}}}let P=await this._fetchHistoryMessages(r?.threadId,i,r?.messages),T;try{T=await this.renderAgentPromptFull(e,{session:{mode:"execute",platform:r?.platform},vars:{user_input:t,...r?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(g,r)},messages:P,threadId:r?.threadId});}catch(A){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${A instanceof Error?A.message:String(A)}`);}let J,U,O,D=w,le=!1,Q=A=>{le||(le=!0,this.emit("task:start",{traceId:i,timestamp:f,agentRef:e,message:t,mode:"execute",pid:A,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:D,provider:x,codingAgentCommand:J,renderedPrompt:T,metadata:{...r?.metadata??{},provider:x,..._.active?{overdrive:!0}:{}},threadId:r?.threadId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));},L=g.options,ee=_.active?_.mode:L?.execute?.mode,j=_.active?_.effort:L?.execute?.effort,oe=Array.isArray(L?.execute?.tools)?L.execute.tools:void 0,q=this._tools.size>0?this._filterToolsByMode(oe):[],H=(()=>{let A=L?.execute;if(!A||Array.isArray(A))return;let{tools:M,effort:W,mode:b,provider:K,model:ce,profiles:mt,...qr}=A,It=Object.entries(qr).filter(([,be])=>be!=null);if(It.length!==0)return Object.fromEntries(It.map(([be,zr])=>[be,String(zr)]))})(),Z=g.inline?.max_steps;x.startsWith("api/")&&Q();let X=!1,z=0,Ge=()=>{},F=new Promise(A=>{Ge=A;});this._activeTasks.set(i,{pid:void 0,done:F});try{let A=await E.execute(t,{model:w,effort:j,mode:ee,context:r?.context,systemPrompt:T??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`,additionalArgs:Array.isArray(L?.execute)?L.execute:void 0,resumeSessionId:k,tools:q.length>0?q:void 0,maxSteps:Z,configOptions:H,timeoutMs:this._resolveTimeout("execute",this._lookupCliAdapter(x)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(x)),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:x,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(i,f)},onPid:b=>{let K=this._activeTasks.get(i);K&&(K.pid=b),Q(b);},onOutput:(b,K)=>{let ce=this._lookupCliAdapter(x);K==="stdout"&&ce?.suppressOutputLine?.(b)===!0||this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:b,level:K}),K==="stdout"&&this.emitToolEvents(i,e,x,b,g.id,r?.threadId??"","");},onTaskLog:b=>{this.emitTaskLogEntries(i,e,g.id,r?.threadId??"","",x,b);for(let K of b)this.emit("task:output",{traceId:i,timestamp:new Date,agentRef:e,output:JSON.stringify(K),level:"info"});},onCommand:b=>{J=b;},onUsage:b=>{U=b;},onExitCode:b=>{O=b;},onModel:b=>{D||(D=b);}});z=this._resolveEffectiveCost(U,D,c),Q();let M=Date.now()-c,W={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",result:A,durationMs:M,exitCode:O,inputTokens:U?.inputTokens,outputTokens:U?.outputTokens,cachedInputTokens:U?.cachedInputTokens,costUsd:z,model:D,metadata:Object.keys(W).length>0?W:void 0}),X=!0,{ok:!0,data:A,meta:{agentId:g.id,provider:x,model:w,durationMs:M,taskId:i}}}catch(A){z=this._resolveEffectiveCost(U,D,c),Q();let M=Date.now()-c,W={code:"EXECUTE_FAILED",message:A.message};return this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:M,error:W,exitCode:O,inputTokens:U?.inputTokens,outputTokens:U?.outputTokens,cachedInputTokens:U?.cachedInputTokens,costUsd:z,model:D,metadata:r?.metadata?{...r.metadata}:void 0}),X=!0,{ok:!1,data:"",error:W,meta:{agentId:g.id,provider:x,model:w,durationMs:M,taskId:i}}}finally{X||this.emit("task:end",{traceId:i,timestamp:new Date,agentRef:e,mode:"execute",durationMs:Date.now()-c,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:O??-1,inputTokens:U?.inputTokens,outputTokens:U?.outputTokens,cachedInputTokens:U?.cachedInputTokens,costUsd:z,model:D}),this._activeTasks.delete(i),this._clearCallerIdentityOverride(i,l),Ge();}})}finally{this._clearCallerIdentityOverride(i,l);}}};function Ns(n,e){let t=Yn(n)?n:void 0,r=Yn(e)?e:void 0;if(!(!t&&!r))return {...t??{},...r??{}}}function Yn(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Ml(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(!Yn(a))return;let d=a.id;if(typeof d=="string")return `id:${d}`;let l=a.name;if(typeof l=="string")return `name:${l}`},s=new Set;for(let a of r??[]){let d=o(a);d&&s.add(d);}let i=[];for(let a of t??[]){let d=o(a);d&&s.has(d)||i.push(a);}for(let a of r??[])i.push(a);return i}function Nl(n){let e=Array.isArray(n.provider)?n.provider:[n.provider],t=n.options,r=[...e];for(let o of ["query","execute"]){let s=Rr(t,o);s.provider&&r.push(s.provider);let i=t&&typeof t=="object"&&!Array.isArray(t)?t[o]:void 0,a=i&&typeof i=="object"&&!Array.isArray(i)?xr(i.overdrive):void 0;a?.provider&&r.push(a.provider);}return r}async function Ds(n,e,t){let r=n.flatMap(Nl);if(r.some(s=>s.startsWith("api/"))){let{registerApiProviders:s}=await Promise.resolve().then(()=>(Ln(),ks));s(t?.api);}await Ll(r,e),$l(r,e),Dl(r);}function Dl(n){if(!n.some(r=>r.startsWith("acp/")))return;let{registerAcpProviders:t}=(Bn(),fo(Cs));t();}async function Ll(n,e){if(!n.some(i=>i.startsWith("remote/")))return;let r=e.providers;if(!Array.isArray(r))return;let{createRemoteProviderFactory:o}=await Promise.resolve().then(()=>(Kn(),Ts)),s=new Map;for(let i of r)i.type==="remote"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&Se("remote",o(s,Ie));}function $l(n,e){if(!n.some(i=>i.startsWith("plugin/")))return;let r=e.providers;if(!Array.isArray(r))return;let{createPluginProviderFactory:o}=(Gn(),fo(Os)),s=new Map;for(let i of r)i.type==="plugin"&&typeof i.id=="string"&&s.set(i.id,i);s.size>0&&Se("plugin",o(s));}u();var Qn=class{detach(e){}};u();var Ul="crewx:fs:",Zn=class{prefix;store;constructor(e){this.prefix=e?.prefix??Ul,this.store=e?.storage??new Map;}async readFile(e){let t=this.toKey(e),r=this.store.get(t);if(r===void 0)throw new Error(`BrowserFsAdapter: file not found: ${e}`);return r}async exists(e){return this.store.has(this.toKey(e))}resolvePath(...e){let t=e.map(i=>i.replace(/\\/g,"/")).join("/").replace(/\/+/g,"/"),r=t.split("/"),o=[];for(let i of r)i==="."||i===""||(i===".."?o.pop():o.push(i));let s=o.join("/");return t.startsWith("/")?`/${s}`:s}isAbsolute(e){return e.startsWith("/")}setItem(e,t){this.store.set(this.toKey(e),t);}removeItem(e){this.store.delete(this.toKey(e));}keys(){return Array.from(this.store.keys()).filter(e=>e.startsWith(this.prefix)).map(e=>e.slice(this.prefix.length))}async readdir(e){let t=e.replace(/\\/g,"/").replace(/\/$/,""),r=this.toKey(t+"/"),o=[];for(let s of this.store.keys())if(s.startsWith(r)){let a=s.slice(r.length).split("/")[0];a&&!o.includes(a)&&o.push(a);}return o}toKey(e){return `${this.prefix}${e.replace(/\\/g,"/")}`}};u();var Tt="default",Pt="archive",Ls="wi-default-flow",jl="wi-plan-flow",Wl="wi-default-flow.yaml",Fl="wi-plan-flow.yaml",Fr=/^[a-zA-Z0-9_-]{1,64}$/;function $s(n){return n===Tt||n===Pt}function Hl(n){let e={id:Tt,name:"Default",workflowId:Ls,system:true,readOnly:false},t={id:Pt,name:"Archive",workflowId:"",system:true,readOnly:true},r=n?.settings?.wi?.boards;if(!Array.isArray(r)||r.length===0)return [e,t];let o=new Set,s=[];for(let i of r){if(!i||typeof i!="object")continue;let a=i,d=a.id,l=a.name,c=a.workflow_id;if(typeof d!="string"||d.length===0||typeof l!="string"||l.length===0||typeof c!="string"||c.length===0||$s(d)||!Fr.test(d)||o.has(d))continue;o.add(d);let f=typeof a.description=="string"?a.description:void 0,g=typeof a.goal_id=="string"?a.goal_id:void 0;s.push({id:d,name:l,workflowId:c,...f!==void 0?{description:f}:{},...g!==void 0?{goalId:g}:{},system:false,readOnly:false});}return [e,...s,t]}u();var te=class extends Error{constructor(e){super(e),this.name="WiCreateError";}},ql=300*1e3,zl=300*1e3,Kl=1e4,Gl=50;function Vl(n){return new Promise(e=>setTimeout(e,n))}function Jl(n){let e=n.getFullYear(),t=String(n.getMonth()+1).padStart(2,"0"),r=String(n.getDate()).padStart(2,"0");return {compact:`${e}${t}${r}`,iso:`${e}-${t}-${r}`}}function Xl(n){return n.normalize("NFKD").replace(/[^\x00-\x7F]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toUpperCase().slice(0,60)}function Yl(n,e){let t=n.replace(/\\/g,"/").toLowerCase(),r=e.replace(/\\/g,"/").toLowerCase();if(r!==t&&!r.startsWith(t+"/"))throw new te("Path is outside wi directory")}function Us(n){let e=typeof n=="string"?n.trim():"";if(!e)throw new te("title is required");if(e.length>200)throw new te("title must be 200 characters or fewer");return e}function js(n){let e=typeof n=="string"?n.trim():"";if(!e)return "manual";if(e.length>128)throw new te("source must be 128 characters or fewer");if(/[\r\n]/.test(e))throw new te("source must be a single line");return e}function Ws(n){return (typeof n=="string"?n.trim().replace(/^@+/,""):"")||void 0}function Fs(n){if(n==null)return [];if(!Array.isArray(n))throw new te("depends_on must be an array");return n.map(e=>String(e).trim()).filter(Boolean)}function Hs(n,e){let t=typeof n=="string"?n.trim():"";if(!t){if(e?.required)throw new te("board is required");return}if(!Fr.test(t))throw new te("board must match ^[a-zA-Z0-9_-]{1,64}$");if(t===Pt)throw new te(`board cannot be '${Pt}'`);return t}function St(n){return JSON.stringify(n)}function Ql(n,e){return e.length===0?[`${n}: []`]:[`${n}:`,...e.map(t=>` - ${St(t)}`)]}async function Zl(n){let e=await promises.stat(n).catch(()=>null);e&&Date.now()-e.mtimeMs>zl&&await promises.rm(n,{recursive:true,force:true}).catch(()=>{});}async function ec(n,e){let t=join(n,".wi-create.lock"),r=Date.now()+Kl;for(;Date.now()<r;)try{await promises.mkdir(t);try{return await e()}finally{await promises.rm(t,{recursive:!0,force:!0}).catch(()=>{});}}catch(o){if(o.code!=="EEXIST")throw o;await Zl(t),await Vl(Gl);}throw new te("WI create lock timeout: docs/wi/.wi-create.lock")}async function Bs(n){let e=[],t=await promises.readdir(n,{withFileTypes:true}).catch(r=>{if(r.code==="ENOENT")return [];throw r});for(let r of t){let o=join(n,r.name);r.isDirectory()?e.push(...await Bs(o)):r.isFile()&&r.name.endsWith(".md")&&e.push(r.name);}return e}async function tc(n){let e=await promises.readdir(n).catch(r=>{if(r.code==="ENOENT")return [];throw r}),t=await Bs(join(n,"archive"));return [...e,...t]}function rc(n,e){return n.reduce((t,r)=>{if(!r.startsWith(e))return t;let o=r.slice(e.length).match(/^(\d+)/);return o?Math.max(t,parseInt(o[1],10)):t},0)+1}function nc(n,e){return n.some(t=>t===`${e}.md`||t.startsWith(`${e}-`))}async function oc(n,e){let t=join(n,`.wi-${e}.lock`);try{return await promises.writeFile(t,"",{flag:"wx"}),{claimed:!0,lockPath:t}}catch(r){if(r.code!=="EEXIST")throw r;return await promises.stat(t).then(s=>Date.now()-s.mtimeMs>ql).catch(()=>false)&&await promises.unlink(t).then(()=>true).catch(()=>false)?(await promises.writeFile(t,"",{flag:"wx"}),{claimed:true,lockPath:t}):{claimed:false,lockPath:t}}}function sc(n){return {title:Us(n.title),assignee:Ws(n.assignee),body:(n.body??"").trim(),board:Hs(n.board),source:js(n.source),depends_on:Fs(n.depends_on)}}function ic(n,e,t){if(n==null)return;let r=typeof n=="string"?n.trim():"";if(!r)throw new te(`items[${e}].key must be a non-empty string when provided`);if(t.has(r))throw new te(`items[${e}].key "${r}" is duplicated`);return t.add(r),r}function ac(n){let e=Hs(n.board,{required:true}),t=js(n.source);if(!Array.isArray(n.items)||n.items.length===0)throw new te("items must contain at least one WI");let r=new Set;return n.items.map((o,s)=>{if(!o||typeof o!="object")throw new te(`items[${s}] must be an object`);if(typeof o.body!="string")throw new te(`items[${s}].body is required`);return {key:ic(o.key,s,r),title:Us(o.title),assignee:Ws(o.assignee),body:o.body.trim(),board:e,source:t,depends_on:Fs(o.depends_on)}})}function dc(n,e){return n.map(t=>e.get(t)??t)}function lc(n,e,t){let r=!!n.board&&n.board!==Tt,o={wi_id:e,title:n.title,date:t,status:"draft",priority:"normal",source:n.source};return n.assignee&&(o.assignee=n.assignee),r&&(o.board=n.board),o.depends_on=n.depends_on,{raw:`---
|
|
309
|
+
${[`wi_id: ${e}`,`title: ${St(n.title)}`,`date: ${St(t)}`,"status: draft",...n.assignee?[`assignee: ${St(n.assignee)}`]:[],"priority: normal",`source: ${St(n.source)}`,...r?[`board: ${St(n.board)}`]:[],...Ql("depends_on",n.depends_on)].join(`
|
|
310
|
+
`)}
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
${n.body}
|
|
314
|
+
`,frontmatter:o}}async function qs(n,e){let t=join(n,"docs","wi");return await promises.mkdir(t,{recursive:true}),ec(t,async()=>{let{compact:r,iso:o}=Jl(new Date),s=`WI-${r}-`,i=await tc(t),a=rc(i,s),d=[],l=[];try{let c=[];for(let m of e){let v;for(let x=0;x<999;x++,a++){let w=`WI-${r}-${String(a).padStart(3,"0")}`;if(nc(i,w))continue;let k=await oc(t,w);if(!k.claimed)continue;let E=Xl(m.title),P=E?`${w}-${E}.md`:`${w}.md`,T=resolve(t,P);if(Yl(t,T),await promises.access(T).then(()=>!0,()=>!1)){await promises.unlink(k.lockPath).catch(()=>{});continue}l.push(k.lockPath),v={item:m,wiId:w,filename:P,fullPath:T};break}if(!v)throw new te("Failed to allocate a unique WI id");c.push(v),i.push(v.filename);}let f=new Map;for(let m of c)m.item.key&&f.set(m.item.key,m.wiId);let g=[];for(let m of c){let _=dc(m.item.depends_on,f),v={...m.item,depends_on:_},x=lc(v,m.wiId,o);await promises.writeFile(m.fullPath,x.raw,{encoding:"utf8",flag:"wx"}),d.push(m.fullPath);let w=await promises.stat(m.fullPath);g.push({summary:{wi_id:m.wiId,title:v.title,status:"draft",priority:"normal",assignee:v.assignee,depends_on:_,blocks:[],date:o,board:v.board&&v.board!==Tt?v.board:void 0,source:v.source,screens:[],path:`docs/wi/${m.filename}`,mtime:w.mtimeMs},frontmatter:x.frontmatter,body:v.body});}return g}catch(c){throw await Promise.all(d.map(f=>promises.unlink(f).catch(()=>{}))),c}finally{await Promise.all(l.map(c=>promises.unlink(c).catch(()=>{})));}})}async function cc(n,e){let[t]=await qs(n,[sc(e)]);if(!t)throw new te("Failed to create WI");return t}async function uc(n,e){return {created:await qs(n,ac(e))}}u();var pc=new Set(["draft","approved","in-progress"]);function gc(n,e){let t=e.batch.filter(Boolean);if(t.length===0)return {done:true};let r=new Set(e.exclude??[]),o=new Set(t),s=new Map(n.filter(f=>o.has(f.wi_id)).map(f=>[f.wi_id,f])),i=t.filter(f=>{let g=s.get(f);return g&&g.status!=="done"});if(i.length===0)return {done:true};for(let f of i){let g=s.get(f);if(g)for(let m of g.depends_on??[]){if(!o.has(m))continue;if(s.get(m)?.status==="cancelled")return {blocked:true,reason:`${f} depends on cancelled WI ${m}`}}}let a=new Map,d=new Map;for(let f of i)a.set(f,new Set),d.set(f,0);for(let f of i){let g=s.get(f);if(g)for(let m of g.depends_on??[])d.has(m)&&(a.get(m).add(f),d.set(f,(d.get(f)??0)+1));}let l=i.filter(f=>(d.get(f)??0)===0),c=[];for(let f=0;f<l.length;f++){let g=l[f];c.push(g);for(let m of a.get(g)??[]){let _=(d.get(m)??0)-1;d.set(m,_),_===0&&l.push(m);}}if(c.length!==i.length)return {cycle:i.filter(f=>(d.get(f)??0)>0)};for(let f of t){if(!i.includes(f)||r.has(f))continue;let g=s.get(f);if(!g||!pc.has(g.status))continue;if(!(g.depends_on??[]).some(_=>{if(!o.has(_))return false;let v=s.get(_);return v?v.status!=="done":false}))return {pick:f}}return {done:true}}u();function sr(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function zs(n,e){let t={...n};for(let[r,o]of Object.entries(e))sr(o)&&sr(t[r])?t[r]=zs(t[r],o):t[r]=o;return t}function Ec(n){let e=n?.filePath??join(homedir(),".crewx","crewx.yaml"),t=null,r=null;function o(){try{return statSync(e).mtimeMs}catch{return null}}function s(){let i=o();if(i===null)return t=null,r=null,{};if(r!==null&&t===i)return r;let a=null;try{a=load(readFileSync(e,"utf-8"));}catch{a=null;}let d=sr(a)?a:{};return r=d,t=i,d}return {get path(){return e},read(){let i=s();return sr(i.settings)?i.settings:{}},update(i){let a=s(),d=sr(a.settings)?a.settings:{},l=zs(d,i),c={...a,settings:l};mkdirSync(dirname(e),{recursive:true});let f=`${e}.tmp`;return writeFileSync(f,dump(c)),renameSync(f,e),t=null,r=null,l}}}u();ve();function eo(n){if(!n)return "";let e=n.lastIndexOf("/");return e===-1?n.trim():n.slice(e+1).trim()}function Ks(n){return n?kt(n).models.length>0:false}function to(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Rc(n,e,t){let r=n,o=false,s=[],i=()=>(o||(r={...n},o=true),r),a=typeof r.provider=="string"&&r.provider.trim()?eo(r.provider):e,d=typeof r.model=="string"&&r.model.trim()?r.model.trim():t;Ks(a)&&(typeof r.mode=="string"&&(Nt(a).map(f=>f.id).includes(r.mode)||(delete i().mode,s.push("mode"))),typeof r.effort=="string"&&(Dt(a,d).includes(r.effort)||(delete i().effort,s.push("effort"))));let l=r.overdrive;if(to(l)){let c=eo(typeof l.provider=="string"?l.provider:void 0),f=typeof l.model=="string"?l.model:void 0;if(Ks(c)){let g,m=()=>(g||(g={...l},i().overdrive=g),g);typeof l.mode=="string"&&(Nt(c).map(v=>v.id).includes(l.mode)||(delete m().mode,s.push("overdrive.mode"))),typeof l.effort=="string"&&(Dt(c,f).includes(l.effort)||(delete m().effort,s.push("overdrive.effort")));}}return {block:r,removed:s}}function Cc(n){let{options:e}=n;if(!to(e))return {options:e,changed:false,removed:[]};let t=eo(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(!to(d))continue;let{block:l,removed:c}=Rc(d,t,n.model);c.length>0&&(i()[a]=l,r.push(...c.map(f=>`${a}.${f}`)));}return {options:o,changed:r.length>0,removed:r}}u();var bc="https://api.crewx.dev/v1/models",Tc=3600*1e3,Gs=0;async function Pc(n){let e=n?.ttlMs??Tc,t=Date.now();if(!(t-Gs<e)){Gs=t;try{let r=await fetch(n?.endpoint??bc);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});$o(s);}catch{}}}u();ve();var Sc="https://api.crewx.dev/v1/models",Ic=900*1e3,Vs=0;async function Oc(n){let e=n?.ttlMs??Ic,t=Date.now();if(!(t-Vs<e)){Vs=t;try{let r=await fetch(n?.endpoint??Sc);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??[],c=Array.isArray(a)?[]:a.effort??[],f=Array.isArray(a)?{}:a.modelOverrides??{},g=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:g,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:c.filter(m=>typeof m=="string"),modelOverrides:f};}Qr(s);}catch{}}}u();function Mc(n,e){let t=n.skills?.include;if(t===void 0)return [...e];if(t.length===0)return [];let r=new Set(t);return e.filter(o=>r.has(o))}u();var ro=["codex","claude","opencode","antigravity","copilot"];function Nc(n){let e=n.indexOf("/");return e===-1?n:n.slice(e+1)}function no(n){let e=Nc(n),t=ro.indexOf(e);return t===-1?ro.length:t}function ir(n,e){return no(n)-no(e)}var Dc=new Set(["claude","copilot","codex","opencode"]);function Lc(n){if(!n)return "";if(n.startsWith("acp/")){let e=n.slice(4);if(Dc.has(e))return `cli/${e}`}return n}ve();xe();Dn();Ln();u();$n();je();u();Dr();Wr();ve();var $c="model",Uc="mode",jc="thought_level";function oo(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 Wc(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 Fc(n,e,t,r){let o=t.agentInfo?.name,s=e??o??n,i=r.configOptions??[],d=(r.modes?.availableModes??[]).map(w=>({id:w.id,name:w.name,...w.description!=null?{description:w.description}:{}})),l=[];for(let w of i)if(w.category?.trim().toLowerCase()===Uc&&w.options!=null)for(let k of oo(w.options))k.value!=null&&l.push({id:k.value,name:k.name??k.value});let c=Wc(d,l),f=[];for(let w of i)if(w.category?.trim().toLowerCase()===jc&&w.type==="select")for(let k of oo(w.options??[]))k.value!=null&&f.push(k.value);if(n==="claude"){let w=Lt().map(E=>({id:E.id,name:E.name})),k=Js(t);return Xs(n,{models:w,modes:c,availableModelsCount:0,configModelsCount:0,skipModelWarn:true}),{id:`acp/${n}`,name:s,modes:c,effort:f,models:w,capabilities:k}}let m=(r.models?.availableModels??[]).map(w=>({id:w.modelId})),_=[];for(let w of i)if(w.category?.trim().toLowerCase()===$c&&w.options!=null)for(let k of oo(w.options))k.value!=null&&_.push({id:k.value,...k.name!=null?{name:k.name}:{}});let v=$t(m,_);Xs(n,{models:v,modes:c,availableModelsCount:m.length,configModelsCount:_.length,skipModelWarn:false});let x=Js(t);return {id:`acp/${n}`,name:s,modes:c,effort:f,models:v,capabilities:x}}function Js(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 Xs(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 Ys(n){let e=ft[n];if(!e)return null;let t=e.meta?.displayName,r=new gt({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 Fc(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 Hc(){let n=Object.keys(ft),e=await Promise.allSettled(n.map(r=>Ys(r))),t=[];for(let r of e)r.status==="fulfilled"&&r.value!==null&&t.push(r.value);return t.sort((r,o)=>ir(r.id,o.id))}Dr();Un();Wr();Bn();Vr();Ue();u();Ue();ve();function qc(n){return n.charAt(0).toUpperCase()+n.slice(1)}async function Qs(){return new Promise(n=>{execFile("opencode",["models"],{timeout:5e3,maxBuffer:1048576},(t,r)=>{if(t){n([]);return}let o=r.split(`
|
|
315
|
+
`).map(s=>s.trim()).filter(s=>s.length>0).map(s=>({id:s}));n(o);}).on("error",()=>n([]));})}function zc(n,e,t){if(!e.meta)return null;let r=e.meta.capabilities??{},o=nt(n),s=o.length>0?o:e.meta.models??[],i=t!==void 0?$t(t,s):s;return {id:`cli/${n}`,name:e.meta.displayName??qc(n),modes:Nt(n),effort:Dt(n),models:i,modelOverrides:To(n),capabilities:{loadSession:r.loadSession??false,resume:r.resume??false,image:r.image??false,audio:r.audio??false,mcp:r.mcp??false}}}async function Kc(n={}){let e=n.includeOpencodeRuntimeModels?await Qs():void 0,t=[];for(let[r,o]of Object.entries(ke)){let i=zc(r,o,r==="opencode"?e:void 0);i&&t.push(i);}return t.sort((r,o)=>ir(r.id,o.id))}u();var so=0;function Gc(n){let e=n.meta?.taskId,t=e?` taskId=${e}`:"";if(n.ok)return `Task completed:${t}
|
|
305
316
|
|
|
306
317
|
${n.data}`;let r=n.error?.message??"Unknown error";return `Task failed:${t}
|
|
307
|
-
Error: ${r}`}function ic(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(Zn>=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(", ")}`;Zn++;try{let i=s==="execute"?await n.execute(r,o):await n.query(r,o);return sc(i)}finally{Zn--;}}}}p();var js=typeof process<"u"?process.env:{};function ac(){return js.CREWX_CLI||"npx crewx"}function dc(){return js.CREWX_WORKSPACE||(typeof process<"u"?process.cwd():"/")}p();var lc=/^[a-zA-Z0-9._-]+$/,eo=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(!lc.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return nt("box")}};p();function cc(n,e,t,r,o){let{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}=r,d=s*i,l=s*a,c=d+l,f=e.getThreadMessages(n),g=[],m=0,v=false,x=[];for(let _=0;_<f.length;_+=2){let E=f[_],O=f[_+1],S=E?.content||"",J=O?.content||"",U=o.countTokens(S+J),I=[];E&&I.push(E),O&&I.push(O),x.push({messages:I,tokens:U});}for(let _=x.length-1;_>=0;_--){let E=x[_];if(m+E.tokens>d){v=true;break}m+=E.tokens,g.unshift(...E.messages);}let k=[],w=0;if(v&&l>0)try{let{boxes:_}=t.listBoxes(n);for(let E=_.length-1;E>=0;E--){let O=_[E],S=O.summaryTokens??O.sourceTokens;if(w+S>l)break;w+=S,k.unshift({boxId:O.id,seq:O.seq,taskCount:O.taskCount,sourceTokens:O.sourceTokens,summary:O.summary,previewFirst:O.previewFirst,previewMid:O.previewMid,previewLast:O.previewLast,createdAt:O.createdAt});}}catch(_){if(_ instanceof Error&&!/not found/i.test(_.message))throw _}return {hot:g,warm:k,hotTokens:m,warmTokens:w,hotOverflow:v,totalBudget:c,config:{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}}}De();Je();p();var Nr=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},er=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=[],c=0,f=0,g=0,m=false,v=0,x=performance.now(),k=async I=>{a?.onTaskStart&&await a.onTaskStart(I),g+=1;let D=new AbortController,ie={signal:D.signal},Q,L;typeof s=="number"&&Number.isFinite(s)&&s>0&&(L=new Promise((B,q)=>{Q=setTimeout(()=>{let Z=new Nr(I.id,s);D.abort(Z),q(Z);},s);}));let ee=performance.now(),j=I.run(ie),te=L?Promise.race([j,L]):j;try{let B=await te,q=performance.now(),Z=q-ee,X=d(B,I),z={taskId:I.id,success:X,value:B,durationMs:Z,startedAt:ee,finishedAt:q,metadata:I.metadata,aborted:!1};l.push(z),X?c+=1:f+=1,a?.onTaskComplete&&await a.onTaskComplete(z),i&&!X&&(m=!0);}catch(B){let q=performance.now(),Z=q-ee,X=B instanceof Error?B:new Error(String(B)),z={taskId:I.id,success:false,error:X,durationMs:Z,startedAt:ee,finishedAt:q,metadata:I.metadata,aborted:D.signal.aborted};l.push(z),f+=1,a?.onError&&await a.onError(I,X,Z),i&&(m=true);}finally{Q&&clearTimeout(Q),L&&j.catch(()=>{});}},w=async()=>{for(;!m;){let I=v;if(I>=e.length)break;v+=1;let D=e[I];if(!D||(await k(D),m))break}},_=Math.min(o,e.length),E=[];for(let I=0;I<_;I++)E.push(w());await Promise.all(E);let S=performance.now()-x,J=l.length?l.reduce((I,D)=>I+D.durationMs,0)/l.length:0,U=S>0?l.length/(S/1e3):l.length;return this.metrics={totalTasks:e.length,startedTasks:g,completedTasks:l.length,successCount:c,failureCount:f,totalDurationMs:S,averageDurationMs:J,throughput:U},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);}}}};p();p();var tr=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 Fs=3,Hs=3e4,qs=500,uc=n=>{if(typeof n!="number"||Number.isNaN(n)||!Number.isFinite(n))return Fs;let e=Math.floor(n);return e>0?e:Fs},pc=n=>n===void 0||typeof n!="number"||Number.isNaN(n)||n<=0?Hs:n,gc=n=>{if(!n)return {maxRetries:0,retryDelay:qs};let e=Number.isInteger(n.maxRetries)&&n.maxRetries>=0?n.maxRetries:0,t=typeof n.retryDelay=="number"&&n.retryDelay>=0?n.retryDelay:qs;return {maxRetries:e,retryDelay:t}},to=n=>{let e=n.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},fc=(n,e)=>n<=0?Promise.resolve():new Promise((t,r)=>{let o=setTimeout(()=>{e.removeEventListener("abort",s),t();},n),s=()=>{clearTimeout(o),r(to(e));};if(e.aborted){s();return}e.addEventListener("abort",s,{once:true});}),mc=async(n,e,t)=>{let r,o;for(let s=0;s<=e.maxRetries;s++){if(t.aborted)throw to(t);try{let i=await n();if(r=i,i.success||s===e.maxRetries)return i}catch(i){if(o=i,t.aborted)throw to(t);if(s===e.maxRetries)throw i instanceof Error?i:new Error(String(i))}s<e.maxRetries&&await fc(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")},Ws=(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);}},yc=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}}}),hc=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")}}),wc=(n,e)=>({onTaskComplete:async t=>{Ws(e,n,t.success);},onError:async()=>{Ws(e,n,false);}}),Bs=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=uc(t.concurrency),o=pc(t.timeout),s=gc(t.retryPolicy),i=new er,a=new tr,d=n.map((x,k)=>({id:`${e}:${x.agentId??"anonymous"}:${k}`,metadata:{index:k,mode:e,request:x},run:w=>mc(()=>e==="query"?a.query(x):a.execute(x),s,w.signal)})),l={completed:0,success:0,failure:0,total:n.length},c=await i.run(d,{maxConcurrency:r,timeoutMs:o,evaluateTaskSuccess:x=>x.success,callbacks:wc(l,t)}),f=yc(c),g=hc(c),m=i.getMetrics(),v={total:n.length,completed:n.length,successCount:f.filter(x=>x.success).length,failureCount:f.filter(x=>!x.success).length,results:f,errors:g,metrics:m};return t.onComplete?.(v),f},vc=(n,e)=>Bs(n,"query",e),_c=(n,e)=>Bs(n,"execute",e);jn();p();var ro=class extends _t{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=dirname(t);existsSync(o)||mkdirSync(o,{recursive:true});}else if(!existsSync(t))throw new P("NOT_FOUND","Database not found");let r=ke(t);if(e)try{kr(r.db,t);}catch(o){throw r.close(),o}return r}insertSpan(e){let t=this.openHandle(true);try{t.db.insert(it).values(e).run();}catch(r){throw r instanceof P?r:new P("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(it).where(eq(it.task_id,e)).all()}catch(r){throw new P("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(it).where(eq(it.id,e)).limit(1).get()??void 0}catch(r){throw new P("DB_ERROR","Failed to find span by id",r)}finally{t.close();}}};Un();$n();Ln();p();p();var Dr=class{capabilities={required:[]}};p();p();p();var Gs=2e3;function Vs(n){let e=n.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=Gs?e:e.slice(0,Gs-11)+" [redacted]"}var Ic=10*1024*1024,Oc={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function no(n,e){return n===void 0?true:Array.isArray(n)?n.includes(e):n===e}function Mc(n,e){return n===void 0?true:Array.isArray(n)?n.some(t=>e.includes(t)):e.includes(n)}function Xs(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*(Oc[r]??1))}function Ys(n){return typeof n=="string"}function Qs(n){try{let e=statSync(n);return e.size>Ic?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${n} (${e.size} bytes)
|
|
318
|
+
Error: ${r}`}function Vc(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(so>=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(", ")}`;so++;try{let i=s==="execute"?await n.execute(r,o):await n.query(r,o);return Gc(i)}finally{so--;}}}}u();var Zs=typeof process<"u"?process.env:{};function Jc(){return Zs.CREWX_CLI||"npx crewx"}function Xc(){return Zs.CREWX_WORKSPACE||(typeof process<"u"?process.cwd():"/")}u();var Yc=/^[a-zA-Z0-9._-]+$/,io=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(!Yc.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return at("box")}};u();function Qc(n,e,t,r,o){let{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}=r,d=s*i,l=s*a,c=d+l,f=e.getThreadMessages(n),g=[],m=0,_=false,v=[];for(let k=0;k<f.length;k+=2){let E=f[k],P=f[k+1],T=E?.content||"",J=P?.content||"",U=o.countTokens(T+J),O=[];E&&O.push(E),P&&O.push(P),v.push({messages:O,tokens:U});}for(let k=v.length-1;k>=0;k--){let E=v[k];if(m+E.tokens>d){_=true;break}m+=E.tokens,g.unshift(...E.messages);}let x=[],w=0;if(_&&l>0)try{let{boxes:k}=t.listBoxes(n);for(let E=k.length-1;E>=0;E--){let P=k[E],T=P.summaryTokens??P.sourceTokens;if(w+T>l)break;w+=T,x.unshift({boxId:P.id,seq:P.seq,taskCount:P.taskCount,sourceTokens:P.sourceTokens,summary:P.summary,previewFirst:P.previewFirst,previewMid:P.previewMid,previewLast:P.previewLast,createdAt:P.createdAt});}}catch(k){if(k instanceof Error&&!/not found/i.test(k.message))throw k}return {hot:g,warm:x,hotTokens:m,warmTokens:w,hotOverflow:_,totalBudget:c,config:{maxTokens:s,hotzoneRatio:i,warmzoneRatio:a}}}Ue();Ze();u();var Hr=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},dr=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=[],c=0,f=0,g=0,m=false,_=0,v=performance.now(),x=async O=>{a?.onTaskStart&&await a.onTaskStart(O),g+=1;let D=new AbortController,le={signal:D.signal},Q,L;typeof s=="number"&&Number.isFinite(s)&&s>0&&(L=new Promise((q,H)=>{Q=setTimeout(()=>{let Z=new Hr(O.id,s);D.abort(Z),H(Z);},s);}));let ee=performance.now(),j=O.run(le),oe=L?Promise.race([j,L]):j;try{let q=await oe,H=performance.now(),Z=H-ee,X=d(q,O),z={taskId:O.id,success:X,value:q,durationMs:Z,startedAt:ee,finishedAt:H,metadata:O.metadata,aborted:!1};l.push(z),X?c+=1:f+=1,a?.onTaskComplete&&await a.onTaskComplete(z),i&&!X&&(m=!0);}catch(q){let H=performance.now(),Z=H-ee,X=q instanceof Error?q:new Error(String(q)),z={taskId:O.id,success:false,error:X,durationMs:Z,startedAt:ee,finishedAt:H,metadata:O.metadata,aborted:D.signal.aborted};l.push(z),f+=1,a?.onError&&await a.onError(O,X,Z),i&&(m=true);}finally{Q&&clearTimeout(Q),L&&j.catch(()=>{});}},w=async()=>{for(;!m;){let O=_;if(O>=e.length)break;_+=1;let D=e[O];if(!D||(await x(D),m))break}},k=Math.min(o,e.length),E=[];for(let O=0;O<k;O++)E.push(w());await Promise.all(E);let T=performance.now()-v,J=l.length?l.reduce((O,D)=>O+D.durationMs,0)/l.length:0,U=T>0?l.length/(T/1e3):l.length;return this.metrics={totalTasks:e.length,startedTasks:g,completedTasks:l.length,successCount:c,failureCount:f,totalDurationMs:T,averageDurationMs:J,throughput:U},l}getMetrics(){return this.metrics}mergeOptions(e){return {maxConcurrency:e.maxConcurrency??this.defaults.maxConcurrency,timeoutMs:e.timeoutMs??this.defaults.timeoutMs,failFast:e.failFast??this.defaults.failFast,evaluateTaskSuccess:e.evaluateTaskSuccess??this.defaults.evaluateTaskSuccess,callbacks:this.mergeCallbacks(this.defaults.callbacks,e.callbacks)}}mergeCallbacks(e,t){if(!(!e&&!t))return {onTaskStart:async r=>{e?.onTaskStart&&await e.onTaskStart(r),t?.onTaskStart&&await t.onTaskStart(r);},onTaskComplete:async r=>{e?.onTaskComplete&&await e.onTaskComplete(r),t?.onTaskComplete&&await t.onTaskComplete(r);},onError:async(r,o,s)=>{e?.onError&&await e.onError(r,o,s),t?.onError&&await t.onError(r,o,s);}}}};u();u();var lr=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 ei=3,ti=3e4,ri=500,Zc=n=>{if(typeof n!="number"||Number.isNaN(n)||!Number.isFinite(n))return ei;let e=Math.floor(n);return e>0?e:ei},eu=n=>n===void 0||typeof n!="number"||Number.isNaN(n)||n<=0?ti:n,tu=n=>{if(!n)return {maxRetries:0,retryDelay:ri};let e=Number.isInteger(n.maxRetries)&&n.maxRetries>=0?n.maxRetries:0,t=typeof n.retryDelay=="number"&&n.retryDelay>=0?n.retryDelay:ri;return {maxRetries:e,retryDelay:t}},ao=n=>{let e=n.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},ru=(n,e)=>n<=0?Promise.resolve():new Promise((t,r)=>{let o=setTimeout(()=>{e.removeEventListener("abort",s),t();},n),s=()=>{clearTimeout(o),r(ao(e));};if(e.aborted){s();return}e.addEventListener("abort",s,{once:true});}),nu=async(n,e,t)=>{let r,o;for(let s=0;s<=e.maxRetries;s++){if(t.aborted)throw ao(t);try{let i=await n();if(r=i,i.success||s===e.maxRetries)return i}catch(i){if(o=i,t.aborted)throw ao(t);if(s===e.maxRetries)throw i instanceof Error?i:new Error(String(i))}s<e.maxRetries&&await ru(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")},ni=(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);}},ou=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}}}),su=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")}}),iu=(n,e)=>({onTaskComplete:async t=>{ni(e,n,t.success);},onError:async()=>{ni(e,n,false);}}),oi=async(n,e,t={})=>{if(!Array.isArray(n))throw new TypeError("Parallel helpers expect an array of requests");if(n.length===0){let x={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?.(x),[]}let r=Zc(t.concurrency),o=eu(t.timeout),s=tu(t.retryPolicy),i=new dr,a=new lr,d=n.map((v,x)=>({id:`${e}:${v.agentId??"anonymous"}:${x}`,metadata:{index:x,mode:e,request:v},run:w=>nu(()=>e==="query"?a.query(v):a.execute(v),s,w.signal)})),l={completed:0,success:0,failure:0,total:n.length},c=await i.run(d,{maxConcurrency:r,timeoutMs:o,evaluateTaskSuccess:v=>v.success,callbacks:iu(l,t)}),f=ou(c),g=su(c),m=i.getMetrics(),_={total:n.length,completed:n.length,successCount:f.filter(v=>v.success).length,failureCount:f.filter(v=>!v.success).length,results:f,errors:g,metrics:m};return t.onComplete?.(_),f},au=(n,e)=>oi(n,"query",e),du=(n,e)=>oi(n,"execute",e);Gn();u();var lo=class extends Et{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let t=this.resolveDbPath();if(e){let o=dirname(t);existsSync(o)||mkdirSync(o,{recursive:true});}else if(!existsSync(t))throw new S("NOT_FOUND","Database not found");let r=Ee(t);if(e)try{Tr(r.db,t);}catch(o){throw r.close(),o}return r}insertSpan(e){let t=this.openHandle(true);try{t.db.insert(ct).values(e).run();}catch(r){throw r instanceof S?r:new S("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(ct).where(eq(ct.task_id,e)).all()}catch(r){throw new S("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(ct).where(eq(ct.id,e)).limit(1).get()??void 0}catch(r){throw new S("DB_ERROR","Failed to find span by id",r)}finally{t.close();}}};Kn();zn();qn();u();u();var Br=class{capabilities={required:[]}};u();u();u();var ai=2e3;function di(n){let e=n.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=ai?e:e.slice(0,ai-11)+" [redacted]"}var _u=10*1024*1024,vu={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function co(n,e){return n===void 0?true:Array.isArray(n)?n.includes(e):n===e}function ku(n,e){return n===void 0?true:Array.isArray(n)?n.some(t=>e.includes(t)):e.includes(n)}function ci(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*(vu[r]??1))}function ui(n){return typeof n=="string"}function pi(n){try{let e=statSync(n);return e.size>_u?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${n} (${e.size} bytes)
|
|
308
319
|
`),null):readFileSync(n,"utf8").split(`
|
|
309
|
-
`).length}catch{return null}}function
|
|
320
|
+
`).length}catch{return null}}function gi(n){try{return statSync(n).size}catch{return null}}function xu(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(_e(o,n))return true;if(t&&o.startsWith("/")){let{relative:s,isAbsolute:i}=se("path");if(i(o)){let a=s(t,o);if(a&&!a.startsWith("..")&&_e(a,n))return true}}return false}function Au(n,e){return n?JSON.stringify(e).includes(n):true}function Eu(n,e){if(!n)return true;try{let t=new RegExp(n),r=JSON.stringify(e);return t.test(r)}catch{return false}}function Ru(n,e){if(!n)return true;try{let t=new RegExp(n),r=JSON.stringify(e);return t.test(r)}catch{return false}}function Cu(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(ui(n.pathSizeMin)){let o=gi(r);if(o===null||o<ci(n.pathSizeMin))return false}else {let o=pi(r);if(o===null||o<n.pathSizeMin)return false}if(n.pathSizeMax!==void 0)if(ui(n.pathSizeMax)){let o=gi(r);if(o===null||o>ci(n.pathSizeMax))return false}else {let o=pi(r);if(o===null||o>n.pathSizeMax)return false}return true}function bu(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 po=class extends Br{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(`
|
|
310
321
|
|
|
311
|
-
`)):e.pass()}appendHookLog(e,t){try{let r={rule:t.rule,action:t.action,once:t.once,sessionId:t.ctx.sessionId,provider:t.ctx.provider,agent:t.ctx.agent.id,toolName:t.ctx.tool.name,rawToolName:t.ctx.tool.rawName};t.message&&(r.chars=t.message.length,process.env.CREWX_HOOK_LOG_VERBOSE==="1"&&(r.message=
|
|
312
|
-
`;appendFileSync(e,o,{encoding:"utf8",mode:384});}catch{}}matchEntryLevel(e,t){if(e.provider!==void 0){let r=t.provider.replace(/^cli\//,"");if(!
|
|
313
|
-
`);}}firedFilePath(e){let t=createHash("sha1").update(e).digest("hex");return join(homedir(),".crewx","sessions",t,"fired-rules.json")}};
|
|
322
|
+
`)):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=di(t.message).slice(0,500)));let o=`[${new Date().toISOString()}] HOOK: ${JSON.stringify(r)}
|
|
323
|
+
`;appendFileSync(e,o,{encoding:"utf8",mode:384});}catch{}}matchEntryLevel(e,t){if(e.provider!==void 0){let r=t.provider.replace(/^cli\//,"");if(!co(e.provider,r))return false}if(e.team!==void 0){let o=this.agentMap.get(t.agent.id)?.team??t.agent.team;if(!co(e.team,o))return false}if(e.role!==void 0){let o=this.agentMap.get(t.agent.id)?.role??t.agent.role;if(!co(e.role,o))return false}if(e.tag!==void 0){let o=this.agentMap.get(t.agent.id)?.tags??[];if(!ku(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)||!Au(e.pattern,t.tool.input)||!Eu(e.regex,t.tool.input)||!xu(e.pathPattern,t.tool.input,t.cwd)||!Cu(e,t.tool.input)||!Ru(e.whenInputRegex,t.tool.input))}hasFired(e,t){try{let r=this.firedFilePath(e);if(!existsSync(r))return !1;let o=JSON.parse(readFileSync(r,"utf8"));return Array.isArray(o.fired)&&o.fired.includes(t)}catch{return false}}markFired(e,t){try{let r=this.firedFilePath(e);mkdirSync(dirname(r),{recursive:!0,mode:448});let o=existsSync(r)?JSON.parse(readFileSync(r,"utf8")):{fired:[]};Array.isArray(o.fired)||(o.fired=[]),o.fired.includes(t)||(o.fired.push(t),writeFileSync(r,JSON.stringify(o),{mode:384}));}catch(r){process.stderr.write(`[YamlHookPlugin] once state write failed: ${r}
|
|
324
|
+
`);}}firedFilePath(e){let t=createHash("sha1").update(e).digest("hex");return join(homedir(),".crewx","sessions",t,"fired-rules.json")}};u();u();u();function Tu(n){let e=n.messages.map(t=>({id:t.id,role:t.isAssistant?"assistant":"user",content:t.text,timestamp:new Date(t.timestamp).toISOString(),metadata:t.metadata??null}));return {getThreadMessages(t){return e}}}u();var go=class extends Error{code;kind;retryAfterMs;constructor(e,t,r){super(`AdapterError: ${e}`),this.name="AdapterError",this.code=e,this.kind=t,this.retryAfterMs=r;}};u();function Pu(n){return n}function Su(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);}}}wt();export{ft as ACP_ADAPTERS,Pt as ARCHIVE_WI_BOARD_ID,gt as AcpConnection,Le as AcpProtocolError,Zt as AcpProviderRuntime,go as AdapterError,Te as AgentNotFoundError,lr as AgentRuntime,ho as AgentSkillsSchema,ke as BUILTIN_ADAPTERS,Zn as BrowserFsAdapter,he as ClientToolCallRequiredError,Ve as ConfigLoadError,Xn as Crewx,Qn as CrewxPlugin,Tt as DEFAULT_WI_BOARD_ID,Ls as DEFAULT_WI_WORKFLOW_ID,st as DocumentLoader,ae as LayoutLoadError,qt as LayoutLoader,Gt as LayoutRenderer,er as McpHttpTransport,Cr as NodeFsAdapter,ro as PROVIDER_ORDER,dr as ParallelRunner,Hr as ParallelRunnerTimeoutError,nr as PluginProviderRuntime,Oe as PropsValidationError,Kt as PropsValidator,C as ProviderError,rt as RateLimitError,tr as RemoteAgentManager,rr as RemoteProviderRuntime,io as SdkBoxService,lo as SpanRepository,Yt as TaskRepository,Bt as TemplateEngine,Vt as TypedEventEmitter,Qt as VercelProviderRuntime,Fr as WI_BOARD_ID_PATTERN,Wl as WI_DEFAULT_FLOW_FILENAME,Fl as WI_PLAN_FLOW_FILENAME,jl as WI_PLAN_WORKFLOW_ID,Ri as WiBoardSchema,te as WiCreateError,po as YamlHookPlugin,Qc as buildContext,Cc as canonicalizeAgentOptions,Lr as claudeAcpAdapter,yr as claudeAdapter,Vi as clearModelsOverride,$r as codexAcpAdapter,_r as codexAdapter,ir as compareProviders,Ur as copilotAcpAdapter,wr as copilotAdapter,An as createAdapterContext,Vc as createDelegateTool,Ec as createGlobalSettingsStore,Mn as createHandler,Is as createPluginProviderFactory,Ie as createProvider,bs as createRemoteProviderFactory,kn as createScopedAdapterStore,cc as createWorkInstruction,uc as createWorkInstructionBatch,Tn as defaultExtractText,ot as defaultFsAdapter,ye as defaultParseEvent,Pu as defineChannelAdapter,Su as defineChannelAdapterPlugin,hn as escapeHandlebarsHelper,yn as formatFileSizeHelper,vn as formatTimestamp,wn as formatTimestampHelper,za as generateFingerprint,at as generateId,tn as getAntigravityModels,Lt as getClaudeModels,Zr as getCodexModels,en as getCopilotModels,nt as getProviderModels,Va as getSyncWindowStore,Nn as hashWorkspaceId,Oc as initModelsRemote,Pc as initPricingRemote,$s as isReservedWiBoardId,mn as lengthHelper,pr as loadYamlFile,Qe as materializeWindowsSpawnProgram,Lo as mergeAdditionalArgs,$t as mergeModels,Lc as normalizeProviderId,ys as normalizeWorkspacePath,jr as opencodeAcpAdapter,vr as opencodeAdapter,xr as parseOverdriveProfile,Ar as parseOverdriveSignal,Ut as parseStdoutEvent,Pe as parseUsage,ur as parseYamlContent,no as providerRank,Ys as queryAcpProviderMeta,Hc as queryAllAcpProviderMetas,Kc as queryAllCliProviderMetas,Qs as queryOpencodeModels,Rs as registerAcpProviders,vs as registerApiProviders,Se as registerProviderFactory,gr as resolveAgent,Mc as resolveAgentSkills,Jc as resolveCrewxCli,Xc as resolveCrewxWorkspace,Gr as resolveDefaultAgentsYaml,Er as resolveOverdrive,ht as resolveTemplatesPath,Hl as resolveWiBoards,$i as resolveWindowsExecutablePath,Ye as resolveWindowsSpawnProgram,Oi as resolveWorkflowTemplatesPath,du as runExecutesParallel,Ja as runInSyncWindow,au as runQueriesParallel,gc as selectNextWi,Sa as setAuditVerbose,Qr as setModelsOverride,Tu as toTaskReader,bn as toTemplateMessages,fn as truncateHelper,bu as validateHooksSchema};
|