@crewx/sdk 0.9.0-rc.67 → 0.9.0-rc.69
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/model-compat.d.ts +10 -0
- package/dist/config/models.generated.d.ts +2 -2
- package/dist/config/pricing.generated.d.ts +2 -2
- package/dist/esm/index.js +107 -83
- package/dist/esm/plugins/index.js +69 -45
- package/dist/esm/repository/index.js +61 -37
- package/dist/esm/testing/index.js +1 -1
- package/dist/index.browser.d.ts +2 -1
- package/dist/index.browser.js +4 -4
- package/dist/index.d.ts +2 -1
- package/dist/index.js +108 -84
- package/dist/plugins/index.js +69 -45
- package/dist/provider/cli/adapters/cli-knob.util.d.ts +2 -0
- package/dist/repository/index.d.ts +1 -1
- package/dist/repository/index.js +64 -40
- package/dist/repository/task.repository.d.ts +12 -0
- package/dist/testing/index.js +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,76 +1,76 @@
|
|
|
1
|
-
'use strict';var fd=require('fs'),Y=require('path'),crypto$1=require('crypto'),child_process=require('child_process'),string_decoder=require('string_decoder'),sdk=require('@agentclientprotocol/sdk'),jsYaml=require('js-yaml'),jsTiktoken=require('js-tiktoken'),lite=require('js-tiktoken/lite'),Bo=require('js-tiktoken/ranks/o200k_base'),zod=require('zod'),Hi=require('os'),module$1=require('module'),Ye=require('handlebars'),promises=require('fs/promises'),events=require('events'),async_hooks=require('async_hooks'),drizzleOrm=require('drizzle-orm'),sqliteCore=require('drizzle-orm/sqlite-core'),mcp_js=require('@modelcontextprotocol/sdk/server/mcp.js'),webStandardStreamableHttp_js=require('@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js'),perf_hooks=require('perf_hooks');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var fd__namespace=/*#__PURE__*/_interopNamespace(fd);var Y__namespace=/*#__PURE__*/_interopNamespace(Y);var Bo__default=/*#__PURE__*/_interopDefault(Bo);var Hi__namespace=/*#__PURE__*/_interopNamespace(Hi);var Ye__namespace=/*#__PURE__*/_interopNamespace(Ye);var So=Object.defineProperty;var Vc=Object.getOwnPropertyDescriptor;var Kc=Object.getOwnPropertyNames;var Jc=Object.prototype.hasOwnProperty;var _e=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var L=(t,e)=>()=>(t&&(e=t(t=0)),e);var br=(t,e)=>{for(var n in e)So(t,n,{get:e[n],enumerable:true});},Xc=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Kc(e))!Jc.call(t,o)&&o!==n&&So(t,o,{get:()=>e[o],enumerable:!(r=Vc(e,o))||r.enumerable});return t};var Ps=t=>Xc(So({},"__esModule",{value:true}),t);var u=L(()=>{});var Cs,Po,Os,Co=L(()=>{u();Cs=["flagship","balanced","speed"],Po={claude:{models:[{id:"claude-fable-5",name:"Claude Fable 5",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-opus-5",name:"Claude Opus 5",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced",recommended:true},{id:"claude-opus-4-8[1m]",name:"Claude Opus 4.8",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-7[1m]",name:"Claude Opus 4.7",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-6[1m]",name:"Claude Opus 4.6",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-sonnet-4-6[1m]",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5",contextWindowTokens:2e5,tier:"speed"}],modes:[{id:"default",name:"Default",description:"Uses Claude's default permission handling with normal approval prompts."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without approval; other permission checks remain in place."},{id:"plan",name:"Plan",description:"Keeps Claude in plan mode so it can inspect and propose changes without applying them."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permissions; only pre-approved tool actions can proceed."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Claude permission checks so tools can run without approval prompts."}],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-7[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-haiku-4-5":{effort:[]}},providerOptions:[]},codex:{models:[{id:"gpt-5.6-sol",name:"GPT-5.6 Sol",contextWindowTokens:105e4,tier:"flagship",recommended:true},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra",contextWindowTokens:105e4,tier:"balanced",recommended:true},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna",contextWindowTokens:105e4,tier:"speed",recommended:true},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini",contextWindowTokens:4e5,tier:"speed"},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex",contextWindowTokens:4e5,tier:"flagship"},{id:"gpt-5.3-codex-spark",name:"GPT-5.3 Codex Spark",contextWindowTokens:128e3,tier:"speed"}],modes:[{id:"agent",name:"Agent",description:"Uses the workspace-write sandbox; can read and modify workspace files without full machine access."},{id:"read-only",name:"Read Only",description:"Uses the read-only sandbox; can inspect files but cannot write to the workspace."},{id:"plan",name:"Plan",description:"Uses the read-only sandbox for planning and inspection; cannot write to the workspace."},{id:"agent-full-access",name:"Agent Full Access",description:"Bypasses approvals and the sandbox; can access and modify files beyond the workspace."},{id:"yolo",name:"YOLO",description:"Bypasses approvals and the sandbox for unrestricted execution and full filesystem access."}],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"}},providerOptions:[]},opencode:{models:[],modes:[{id:"plan",name:"Plan",description:"Uses the plan agent without --auto; planning follows standard approval behavior."},{id:"plan-auto",name:"Plan \xB7 Auto",description:"Uses the plan agent with --auto; planning uses automatic approvals."},{id:"build",name:"Build",description:"Uses the build agent without --auto; work follows standard approval behavior."},{id:"build-auto",name:"Build \xB7 Auto",description:"Uses the build agent with --auto; work uses automatic approvals."}],effort:[],modelOverrides:{},providerOptions:[]},copilot:{models:[{id:"auto",name:"Auto"},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro",contextWindowTokens:1048576,tier:"flagship"}],modes:[{id:"interactive",name:"Interactive",description:"Passes --mode interactive; tool access follows Copilot's interactive mode behavior."},{id:"plan",name:"Plan",description:"Passes --mode plan; planning and permission behavior follow Copilot's plan mode."},{id:"autopilot",name:"Autopilot",description:"Passes --mode autopilot; execution behavior follows Copilot's autonomous mode."}],effort:["none","low","medium","high","xhigh","max"],modelOverrides:{},providerOptions:[]},antigravity:{models:[{id:"gemini-3.6-flash-high",name:"Gemini 3.6 Flash (High)",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.6-flash-medium",name:"Gemini 3.6 Flash (Medium)",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.6-flash-low",name:"Gemini 3.6 Flash (Low)",contextWindowTokens:1048576,tier:"balanced"},{id:"Gemini 3.5 Flash (Medium)",name:"Gemini 3.5 Flash (Medium)",contextWindowTokens:1048576,tier:"balanced"},{id:"Gemini 3.5 Flash (High)",name:"Gemini 3.5 Flash (High)",contextWindowTokens:1048576,tier:"balanced"},{id:"Gemini 3.5 Flash (Low)",name:"Gemini 3.5 Flash (Low)",contextWindowTokens:1048576,tier:"balanced"},{id:"Gemini 3.1 Pro (Low)",name:"Gemini 3.1 Pro (Low)",contextWindowTokens:1048576,tier:"flagship"},{id:"Gemini 3.1 Pro (High)",name:"Gemini 3.1 Pro (High)",contextWindowTokens:1048576,tier:"flagship"},{id:"Claude Sonnet 4.6 (Thinking)",name:"Claude Sonnet 4.6 (Thinking)",contextWindowTokens:1e6,tier:"balanced"},{id:"Claude Opus 4.6 (Thinking)",name:"Claude Opus 4.6 (Thinking)",contextWindowTokens:1e6,tier:"flagship"},{id:"GPT-OSS 120B (Medium)",name:"GPT-OSS 120B (Medium)",contextWindowTokens:128e3,tier:"balanced"}],modes:[],effort:[],modelOverrides:{},providerOptions:[]},grok:{models:[{id:"grok-4.6",name:"Grok 4.6",contextWindowTokens:5e5,tier:"flagship",recommended:true},{id:"grok-4.5",name:"Grok 4.5",contextWindowTokens:5e5,tier:"flagship"}],modes:[{id:"default",name:"Default",description:"Uses Grok's default permission handling."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without changing the selected sandbox profile."},{id:"auto",name:"Auto",description:"Uses Grok automatic permission handling."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permission before tool execution."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Grok permission checks for tool execution."},{id:"plan",name:"Plan",description:"Keeps Grok in planning mode without applying changes."}],effort:["low","medium","high"],modelOverrides:{"grok-4.6":{effort:["low","medium","high","xhigh"],defaultEffort:"high"},"grok-4.5":{effort:["low","medium","high"],defaultEffort:"high"}},providerOptions:[{key:"alwaysApprove",type:"boolean"},{key:"sandbox",type:"enum",values:["workspace","read-only","off"]}]}},Os={version:1,providers:{"cli/codex":{model:"gpt-5.6-sol",query:{mode:"agent",effort:"high"},execute:{mode:"agent-full-access",effort:"xhigh"}},"cli/claude":{model:"claude-opus-5",query:{mode:"default",effort:"high"},execute:{mode:"bypassPermissions",effort:"xhigh"}},"cli/grok":{model:"grok-4.6",query:{mode:"default",effort:"high",providerOptions:{alwaysApprove:true,sandbox:"off"}},execute:{mode:"default",effort:"xhigh",providerOptions:{alwaysApprove:true,sandbox:"off"}}}}},Object.fromEntries(Object.entries(Po).map(([t,e])=>[t,e.models]));});var Ot,Oo,Ns,No=L(()=>{u();Ot={"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,cachedInput:.2,output:12},"gpt-5.6-luna":{input:.2,cachedInput:.02,output:1.2},"gpt-5.5":{input:5,cachedInput:.5,output:30},"gpt-5.4":{input:2.5,cachedInput:.25,output:15},"gpt-5.4-mini":{input:.75,cachedInput:.075,output:4.5},"gpt-5.3-codex":{input:1.75,cachedInput:.175,output:14},"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},"gemini-3.6-flash":{input:1.5,cachedInput:.15,output:7.5},"grok-4.6":{input:2,cachedInput:.5,output:6},"grok-4.5":{input:2,cachedInput:.3,output:6}},Oo=new Set(["gpt-5.3-codex-spark"]),Ns=new Set(["Claude Opus 4.6 (Thinking)","Claude Sonnet 4.6 (Thinking)","GPT-OSS 120B (Medium)","Gemini 3.1 Pro (High)","Gemini 3.1 Pro (Low)","Gemini 3.5 Flash (High)","Gemini 3.5 Flash (Low)","Gemini 3.5 Flash (Medium)","auto","claude-fable-5","claude-haiku-4-5","claude-opus-4-6[1m]","claude-opus-4-7[1m]","claude-opus-4-8[1m]","claude-opus-5","claude-sonnet-4-6","claude-sonnet-4-6[1m]","claude-sonnet-5","gemini-3.1-pro","gemini-3.6-flash-high","gemini-3.6-flash-low","gemini-3.6-flash-medium","gpt-5.3-codex","gpt-5.3-codex-spark","gpt-5.4","gpt-5.4-mini","gpt-5.5","gpt-5.6-luna","gpt-5.6-sol","gpt-5.6-terra","grok-4.5","grok-4.6"]);});function Ls(t){Rn=t;}function Ms(t){Ds=Object.fromEntries(Object.entries(t).map(([e,n])=>[e,{...n}]));}function Do(t){let e=t.toLowerCase().trim();e=e.replace(/\[[^\]]*\]$/g,"");let n=e.lastIndexOf("/");return n>=0&&(e=e.slice(n+1)),e=e.replace(/-\d{8}$/,""),e}function Zc(t){if(!t)return;let e="inputPerMillionTokensUsd"in t?t.inputPerMillionTokensUsd:t.input,n="outputPerMillionTokensUsd"in t?t.outputPerMillionTokensUsd:t.output;if(!(!Number.isFinite(e)||e<=0||!Number.isFinite(n)||n<=0))return {inputPerMillionTokensUsd:e,outputPerMillionTokensUsd:n}}function Us(t){if(!t)return;let e=t.replace(/\[[^\]]*\]$/g,"");return Zc(Ds[e]??Ot[e])}function el(t){if(!t)return console.warn("[pricing] missing model id; cost is being recorded as 0"),En;let e=Do(t),n=Qc[e];if(n)return Rn[n]??Ot[n]??En;if(Rn[e])return Rn[e];if(Ot[e])return Ot[e];if(Oo.has(e))return console.warn(`[pricing] unpublished model pricing: ${t}, cost_usd=0`),En;if(Ns.has(e))return console.warn(`[pricing] missing catalog pricing: ${t}, cost_usd=0`),En;let r={...Ot,...Rn};for(let o of Object.keys(r))if(e.includes(o))return r[o];return console.warn(`[pricing] Unknown model: ${t}, cost_usd=0`),En}function tl(t,e,n,r=0,o){let i=el(n),s=Math.min(r,t),d=(t-s)*i.input/1e6,c=s*i.cachedInput/1e6,l=e*i.output/1e6;return d+c+l}function js(t,e,n,r,o,i){return t&&t>0?t:!e&&!n?0:tl(e??0,n??0,o,r??0)}var Qc,En,Rn,Ds,Zt=L(()=>{u();No();No();Qc={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"},En={input:0,cachedInput:0,output:0},Rn={},Ds={};});function Tn(t){return ol.get(t)??t}exports.CLAUDE_OPUS_4_8_BASE_MODEL_ID=void 0;exports.CLAUDE_OPUS_4_8_LEGACY_MODEL_ID=void 0;exports.CLAUDE_MODEL_COMPATIBILITY_PAIRS=void 0;var ol,Er=L(()=>{u();exports.CLAUDE_OPUS_4_8_BASE_MODEL_ID="claude-opus-4-8",exports.CLAUDE_OPUS_4_8_LEGACY_MODEL_ID="claude-opus-4-8[1m]",exports.CLAUDE_MODEL_COMPATIBILITY_PAIRS=[{baseModelId:"claude-opus-4-8",catalogModelId:"claude-opus-4-8[1m]"},{baseModelId:"claude-opus-4-7",catalogModelId:"claude-opus-4-7[1m]"},{baseModelId:"claude-opus-4-6",catalogModelId:"claude-opus-4-6[1m]"},{baseModelId:"claude-sonnet-4-6",catalogModelId:"claude-sonnet-4-6[1m]"}],ol=new Map(exports.CLAUDE_MODEL_COMPATIBILITY_PAIRS.map(({baseModelId:t,catalogModelId:e})=>[t,e]));});function Fs(){return {models:[],modes:[],effort:[],modelOverrides:{},providerOptions:[]}}function il(t){return Array.isArray(t)?{models:t,modes:[],effort:[],modelOverrides:{},providerOptions:[]}:t?{models:t.models??[],modes:t.modes??[],effort:t.effort??[],modelOverrides:t.modelOverrides??{},providerOptions:t.providerOptions??[]}:Fs()}function Mo(t){Lo=Object.fromEntries(Object.entries(t).map(([e,n])=>[e,il(n)]));}function sl(){Lo={};}function xn(t){Bs={...t};}function dt(t){return Ue(t).models}function Ue(t){return Lo[t]??Po[t]??Fs()}function Rr(t){return Bs[t]??Os.providers[t]}function An(t){return Ue(t).modes}function Nt(t,e){let n=Ue(t);return e?n.modelOverrides[Tn(e)]?.effort??n.effort:n.effort}function qs(t){return Ue(t).modelOverrides}function In(){return dt("claude")}function Uo(){return dt("codex")}function jo(){return dt("copilot")}function $o(){return dt("antigravity")}function Sn(t,e){let n=new Map;for(let r of [...t,...e]){let o=n.get(r.id);if(!o){let{apiPricing:i,recommended:s,...a}=r;n.set(r.id,{...a,...s===true?{recommended:true}:{},...i!=null?{apiPricing:{...i}}:{}});continue}!o.name&&r.name&&(o.name=r.name),o.description==null&&r.description!=null&&(o.description=r.description),o.contextWindowTokens==null&&r.contextWindowTokens!=null&&(o.contextWindowTokens=r.contextWindowTokens),o.tier==null&&r.tier!=null&&(o.tier=r.tier),o.recommended!==true&&r.recommended===true&&(o.recommended=true),o.apiPricing==null&&r.apiPricing!=null&&(o.apiPricing={...r.apiPricing});}return Array.from(n.values())}function Pn(t){return t.map(e=>{let{apiPricing:n,...r}=e,o=Us(e.id);return o?{...r,apiPricing:o}:r})}var Lo,Bs,Ae=L(()=>{u();Co();Zt();Er();Lo={},Bs={};});function Dr(t){return typeof t!="string"?void 0:t.trim()||void 0}function Lr(t){return Dr(t)?.toLowerCase()??""}function tn(t){try{return fd.statSync(t).isFile()}catch{return false}}function Vl(t,e){if(t===e)return true;let n=Y__namespace.default.relative(t,e);return n!==""&&!n.startsWith("..")&&!Y__namespace.default.isAbsolute(n)}function Kl(t,e){if(Y__namespace.default.basename(t)!==".bin")return false;let n=Y__namespace.default.dirname(t);if(Y__namespace.default.basename(n)!=="node_modules")return false;let r=Y__namespace.default.dirname(n);return Vl(r,e)}function Cn(t,e={}){if(t.includes("/")||t.includes("\\")||Y__namespace.default.isAbsolute(t))return t;let n=e.platform??process.platform,r=e.env??process.env,o=Y__namespace.default.resolve(e.cwd??process.cwd()),i=(e.resolution??"global_first")==="global_first",s=r.PATH??r.Path??process.env.PATH??process.env.Path??"",a=n==="win32"?";":":",d=s.split(a).map(g=>g.trim()).filter(Boolean),c=Y__namespace.default.extname(t).length>0,l=r.PATHEXT??r.Pathext??process.env.PATHEXT??process.env.Pathext??".EXE;.CMD;.BAT;.COM",f=n==="win32"?c?[""]:l.split(";").map(g=>g.trim()).filter(Boolean).map(g=>g.startsWith(".")?g:`.${g}`):[""];for(let g of d){let m=Y__namespace.default.resolve(o,g);if(!(i&&Kl(m,o)))for(let k of f){let h=Lr(k),v=k.toUpperCase();for(let _ of [k,h,v]){let w=Y__namespace.default.join(m,`${t}${_}`);if(tn(w))return w}}}return t}function Jl(t,e){return Cn(t,{env:e,platform:"win32",resolution:"local_first"})}function Xl(t){if(!tn(t))return null;try{let e=fd.readFileSync(t,"utf8"),n=Y__namespace.default.dirname(t),r=[];for(let a of e.matchAll(/"([^"\r\n]*)"/g)){let l=(a[1]??"").match(/%~?dp0%?\s*[\\/]*(.*)$/i)?.[1]?.trim();if(!l)continue;let f=l.replace(/[\\/]+/g,Y__namespace.default.sep).replace(/^[\\/]+/,""),g=Y__namespace.default.resolve(n,f);tn(g)&&r.push(g);}let o=[],i=new Map;for(let a of e.matchAll(/SET\s+"(\w+)=%~?dp0%?[\\/]?([^"]+)"/gi)){let d=a[1].toUpperCase(),c=a[2].trim().replace(/[\\/]+/g,Y__namespace.default.sep).replace(/^[\\/]+/,"");i.set(d,Y__namespace.default.resolve(n,c));}for(let a of e.split(/\r?\n/))if(a.includes("%*"))for(let d of a.matchAll(/"%(\w+)%"/g)){let c=i.get(d[1].toUpperCase());c&&tn(c)&&o.push(c);}let s=a=>a.find(d=>{let c=Lr(Y__namespace.default.basename(d));return c!=="node.exe"&&c!=="node"})??null;return s(o)??s(r)}catch{return null}}function Yl(t,e){if(typeof e=="string")return Dr(e)||null;if(!e||typeof e!="object")return null;if(t){let n=e[t],r=typeof n=="string"?Dr(n):void 0;if(r)return r}for(let n of Object.values(e)){let r=typeof n=="string"?Dr(n):void 0;if(r)return r}return null}function Ql(t,e){if(!e)return null;let n=Y__namespace.default.dirname(t),r=[Y__namespace.default.resolve(n,"..",e),Y__namespace.default.resolve(n,"node_modules",e)];for(let o of r){let i=Y__namespace.default.join(o,"package.json");if(tn(i))try{let s=JSON.parse(fd.readFileSync(i,"utf8")),a=Yl(e,s.bin);if(!a)continue;let d=Y__namespace.default.resolve(o,a);if(tn(d))return d}catch{}}return null}function Zl(t){let e=t.platform??process.platform,n=t.env??process.env,r=t.execPath??process.execPath,o=t.cwd,i=t.resolution;if(e!=="win32")return {command:Cn(t.command,{cwd:o,env:n,platform:e,resolution:i}),leadingArgv:[],resolution:"direct"};let s=Cn(t.command,{cwd:o,env:n,platform:e,resolution:i}),a=Lr(Y__namespace.default.extname(s));if(a===".js"||a===".cjs"||a===".mjs")return {command:r,leadingArgv:[s],resolution:"node-entrypoint",windowsHide:true};if(a===".cmd"||a===".bat"){let d=Xl(s)??Ql(s,t.packageName);return d?Lr(Y__namespace.default.extname(d))===".exe"?{command:d,leadingArgv:[],resolution:"exe-entrypoint",windowsHide:true}:{command:r,leadingArgv:[d],resolution:"node-entrypoint",windowsHide:true}:{command:s,leadingArgv:[],resolution:"unresolved-wrapper"}}return {command:s,leadingArgv:[],resolution:"direct"}}function eu(t){if(t.candidate.resolution!=="unresolved-wrapper")return {command:t.candidate.command,leadingArgv:t.candidate.leadingArgv,resolution:t.candidate.resolution,windowsHide:t.candidate.windowsHide};if(t.allowShellFallback===true)return {command:t.candidate.command,leadingArgv:[],resolution:"shell-fallback",shell:true};throw new Error(`${Y__namespace.default.basename(t.candidate.command)} wrapper resolved, but no executable/Node entrypoint could be resolved without shell execution.`)}function jt(t){let e=Zl(t);return eu({candidate:e,allowShellFallback:t.allowShellFallback})}function $t(t,e){return {command:t.command,argv:[...t.leadingArgv,...e],resolution:t.resolution,shell:t.shell,windowsHide:t.windowsHide}}var nn=L(()=>{u();});function tu(t){if(t.type!=="usage"||!("input_tokens"in t))return null;let e=Number(t.input_tokens??0),n=Number(t.output_tokens??0),o="cache_read_input_tokens"in t?Number(t.cache_read_input_tokens):void 0,i="cached_input_tokens"in t?Number(t.cached_input_tokens):void 0,s=o!==void 0?o:i??0;return {inputTokens:o!==void 0?e+o:e,outputTokens:n,cachedInputTokens:s}}function nu(t){let e=t.usage;if(!e||typeof e!="object"||Array.isArray(e))return null;let n=e;if(!("input_tokens"in n))return null;let r=Number(n.input_tokens??0),o=Number(n.output_tokens??0),s="cache_read_input_tokens"in n?Number(n.cache_read_input_tokens):void 0,a="cached_input_tokens"in n?Number(n.cached_input_tokens):void 0,d=s!==void 0?s:a??0;return {inputTokens:s!==void 0?r+s:r,outputTokens:o,cachedInputTokens:d}}function ru(t){if(t.type!=="step_finish")return null;let n=t.part?.tokens;if(!n)return null;let r=Number(n.input??0),o=Number(n.output??0),i=n.cache,s=i?Number(i.read??0):0;return {inputTokens:r+s,outputTokens:o,cachedInputTokens:s}}function Qs(t){let e=new Map,n;for(let i of t.split(`
|
|
2
|
-
`))if(i.trim())try{let s=JSON.parse(i);if(s.type!=="assistant")continue;let a=s.message,d=a?.id,c=a?.usage;if(typeof d!="string"||!c)continue;let l=Number(c.input_tokens??0),f=Number(c.cache_read_input_tokens??0);e.set(d,{inputTokens:l+f,cachedInputTokens:f});let g=a?.model;typeof g=="string"&&g&&(n=g);}catch{}if(e.size===0)return;let r=0,o=0;for(let i of e.values())r+=i.inputTokens,o+=i.cachedInputTokens;return {inputTokens:r,cachedInputTokens:o,model:n}}function
|
|
3
|
-
`))if(r.trim())try{let o=JSON.parse(r),i=
|
|
1
|
+
'use strict';var kd=require('fs'),X=require('path'),crypto$1=require('crypto'),child_process=require('child_process'),string_decoder=require('string_decoder'),sdk=require('@agentclientprotocol/sdk'),jsYaml=require('js-yaml'),jsTiktoken=require('js-tiktoken'),lite=require('js-tiktoken/lite'),Ho=require('js-tiktoken/ranks/o200k_base'),zod=require('zod'),Ki=require('os'),module$1=require('module'),Qe=require('handlebars'),promises=require('fs/promises'),events=require('events'),async_hooks=require('async_hooks'),drizzleOrm=require('drizzle-orm'),sqliteCore=require('drizzle-orm/sqlite-core'),mcp_js=require('@modelcontextprotocol/sdk/server/mcp.js'),webStandardStreamableHttp_js=require('@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js'),perf_hooks=require('perf_hooks');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var kd__namespace=/*#__PURE__*/_interopNamespace(kd);var X__namespace=/*#__PURE__*/_interopNamespace(X);var Ho__default=/*#__PURE__*/_interopDefault(Ho);var Ki__namespace=/*#__PURE__*/_interopNamespace(Ki);var Qe__namespace=/*#__PURE__*/_interopNamespace(Qe);var Co=Object.defineProperty;var el=Object.getOwnPropertyDescriptor;var tl=Object.getOwnPropertyNames;var nl=Object.prototype.hasOwnProperty;var _e=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var L=(t,e)=>()=>(t&&(e=t(t=0)),e);var Tr=(t,e)=>{for(var n in e)Co(t,n,{get:e[n],enumerable:true});},rl=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of tl(e))!nl.call(t,o)&&o!==n&&Co(t,o,{get:()=>e[o],enumerable:!(r=el(e,o))||r.enumerable});return t};var Ls=t=>rl(Co({},"__esModule",{value:true}),t);var u=L(()=>{});var Ms,Oo,Us,No=L(()=>{u();Ms=["flagship","balanced","speed"],Oo={claude:{models:[{id:"claude-fable-5",name:"Claude Fable 5",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-opus-5",name:"Claude Opus 5",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced",recommended:true},{id:"claude-opus-4-8[1m]",name:"Claude Opus 4.8",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-7[1m]",name:"Claude Opus 4.7",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-6[1m]",name:"Claude Opus 4.6",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-sonnet-4-6[1m]",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5",contextWindowTokens:2e5,tier:"speed"}],modes:[{id:"default",name:"Default",description:"Uses Claude's default permission handling with normal approval prompts."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without approval; other permission checks remain in place."},{id:"plan",name:"Plan",description:"Keeps Claude in plan mode so it can inspect and propose changes without applying them."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permissions; only pre-approved tool actions can proceed."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Claude permission checks so tools can run without approval prompts."}],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-7[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-haiku-4-5":{effort:[]}},providerOptions:[]},codex:{models:[{id:"gpt-5.6-sol",name:"GPT-5.6 Sol",contextWindowTokens:105e4,tier:"flagship",recommended:true},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra",contextWindowTokens:105e4,tier:"balanced",recommended:true},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna",contextWindowTokens:105e4,tier:"speed",recommended:true},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini",contextWindowTokens:4e5,tier:"speed"},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex",contextWindowTokens:4e5,tier:"flagship"},{id:"gpt-5.3-codex-spark",name:"GPT-5.3 Codex Spark",contextWindowTokens:128e3,tier:"speed"}],modes:[{id:"agent",name:"Agent",description:"Uses the workspace-write sandbox; can read and modify workspace files without full machine access."},{id:"read-only",name:"Read Only",description:"Uses the read-only sandbox; can inspect files but cannot write to the workspace."},{id:"plan",name:"Plan",description:"Uses the read-only sandbox for planning and inspection; cannot write to the workspace."},{id:"agent-full-access",name:"Agent Full Access",description:"Bypasses approvals and the sandbox; can access and modify files beyond the workspace."},{id:"yolo",name:"YOLO",description:"Bypasses approvals and the sandbox for unrestricted execution and full filesystem access."}],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"}},providerOptions:[]},opencode:{models:[],modes:[{id:"plan",name:"Plan",description:"Uses the plan agent without --auto; planning follows standard approval behavior."},{id:"plan-auto",name:"Plan \xB7 Auto",description:"Uses the plan agent with --auto; planning uses automatic approvals."},{id:"build",name:"Build",description:"Uses the build agent without --auto; work follows standard approval behavior."},{id:"build-auto",name:"Build \xB7 Auto",description:"Uses the build agent with --auto; work uses automatic approvals."}],effort:[],modelOverrides:{},providerOptions:[]},copilot:{models:[{id:"auto",name:"Auto"},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro",contextWindowTokens:1048576,tier:"flagship"}],modes:[{id:"interactive",name:"Interactive",description:"Passes --mode interactive; tool access follows Copilot's interactive mode behavior."},{id:"plan",name:"Plan",description:"Passes --mode plan; planning and permission behavior follow Copilot's plan mode."},{id:"autopilot",name:"Autopilot",description:"Passes --mode autopilot; execution behavior follows Copilot's autonomous mode."}],effort:["none","low","medium","high","xhigh","max"],modelOverrides:{},providerOptions:[]},antigravity:{models:[{id:"gemini-3.7-flash",name:"Gemini 3.7 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.6-flash",name:"Gemini 3.6 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.5-flash",name:"Gemini 3.5 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro",contextWindowTokens:1048576,tier:"flagship"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 Thinking",contextWindowTokens:1e6,tier:"flagship"},{id:"gpt-oss-120b",name:"GPT-OSS 120B",contextWindowTokens:128e3,tier:"balanced"}],modes:[{id:"default",name:"Default",description:"Uses Antigravity's default permission handling. No extra permission flags are passed."},{id:"plan",name:"Plan",description:"Passes --mode plan. This turns on /plan; it is not a Claude-style permission mode."},{id:"acceptEdits",name:"Accept Edits",description:"Passes --mode accept-edits."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Passes --dangerously-skip-permissions so tools can run without approval prompts."}],effort:["low","medium","high"],modelOverrides:{"gemini-3.7-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.6-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.5-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.1-pro":{effort:["low","high"],defaultEffort:"high"},"claude-sonnet-4-6":{effort:[]},"claude-opus-4-6-thinking":{effort:[]},"gpt-oss-120b":{effort:["medium"],defaultEffort:"medium"}},providerOptions:[]},grok:{models:[{id:"grok-4.6",name:"Grok 4.6",contextWindowTokens:5e5,tier:"flagship",recommended:true},{id:"grok-4.5",name:"Grok 4.5",contextWindowTokens:5e5,tier:"flagship"}],modes:[{id:"default",name:"Default",description:"Uses Grok's default permission handling."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without changing the selected sandbox profile."},{id:"auto",name:"Auto",description:"Uses Grok automatic permission handling."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permission before tool execution."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Grok permission checks for tool execution."},{id:"plan",name:"Plan",description:"Keeps Grok in planning mode without applying changes."}],effort:["low","medium","high"],modelOverrides:{"grok-4.6":{effort:["low","medium","high","xhigh"],defaultEffort:"high"},"grok-4.5":{effort:["low","medium","high"],defaultEffort:"high"}},providerOptions:[{key:"alwaysApprove",type:"boolean"},{key:"sandbox",type:"enum",values:["workspace","read-only","off"]}]}},Us={version:1,providers:{"cli/codex":{model:"gpt-5.6-sol",query:{mode:"agent",effort:"high"},execute:{mode:"agent-full-access",effort:"xhigh"}},"cli/claude":{model:"claude-opus-5",query:{mode:"default",effort:"high"},execute:{mode:"bypassPermissions",effort:"xhigh"}},"cli/grok":{model:"grok-4.6",query:{mode:"default",effort:"high",providerOptions:{alwaysApprove:true,sandbox:"off"}},execute:{mode:"default",effort:"xhigh",providerOptions:{alwaysApprove:true,sandbox:"off"}}}}},Object.fromEntries(Object.entries(Oo).map(([t,e])=>[t,e.models]));});var Dt,Do,js,Lo=L(()=>{u();Dt={"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,cachedInput:.2,output:12},"gpt-5.6-luna":{input:.2,cachedInput:.02,output:1.2},"gpt-5.5":{input:5,cachedInput:.5,output:30},"gpt-5.4":{input:2.5,cachedInput:.25,output:15},"gpt-5.4-mini":{input:.75,cachedInput:.075,output:4.5},"gpt-5.3-codex":{input:1.75,cachedInput:.175,output:14},"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},"gemini-3.7-flash":{input:1.5,cachedInput:.15,output:7.5},"gemini-3.6-flash":{input:1.5,cachedInput:.15,output:7.5},"grok-4.6":{input:2,cachedInput:.5,output:6},"grok-4.5":{input:2,cachedInput:.3,output:6}},Do=new Set(["gpt-5.3-codex-spark"]),js=new Set(["auto","claude-fable-5","claude-haiku-4-5","claude-opus-4-6-thinking","claude-opus-4-6[1m]","claude-opus-4-7[1m]","claude-opus-4-8[1m]","claude-opus-5","claude-sonnet-4-6","claude-sonnet-4-6[1m]","claude-sonnet-5","gemini-3.1-pro","gemini-3.5-flash","gemini-3.6-flash","gemini-3.7-flash","gpt-5.3-codex","gpt-5.3-codex-spark","gpt-5.4","gpt-5.4-mini","gpt-5.5","gpt-5.6-luna","gpt-5.6-sol","gpt-5.6-terra","gpt-oss-120b","grok-4.5","grok-4.6"]);});function Bs(t){Rn=t;}function Fs(t){$s=Object.fromEntries(Object.entries(t).map(([e,n])=>[e,{...n}]));}function Mo(t){let e=t.toLowerCase().trim();e=e.replace(/\[[^\]]*\]$/g,"");let n=e.lastIndexOf("/");return n>=0&&(e=e.slice(n+1)),e=e.replace(/-\d{8}$/,""),e}function sl(t){if(!t)return;let e="inputPerMillionTokensUsd"in t?t.inputPerMillionTokensUsd:t.input,n="outputPerMillionTokensUsd"in t?t.outputPerMillionTokensUsd:t.output;if(!(!Number.isFinite(e)||e<=0||!Number.isFinite(n)||n<=0))return {inputPerMillionTokensUsd:e,outputPerMillionTokensUsd:n}}function qs(t){if(!t)return;let e=t.replace(/\[[^\]]*\]$/g,"");return sl($s[e]??Dt[e])}function al(t){if(!t)return console.warn("[pricing] missing model id; cost is being recorded as 0"),bn;let e=Mo(t),n=il[e];if(n)return Rn[n]??Dt[n]??bn;if(Rn[e])return Rn[e];if(Dt[e])return Dt[e];if(Do.has(e))return console.warn(`[pricing] unpublished model pricing: ${t}, cost_usd=0`),bn;if(js.has(e))return console.warn(`[pricing] missing catalog pricing: ${t}, cost_usd=0`),bn;let r={...Dt,...Rn};for(let o of Object.keys(r))if(e.includes(o))return r[o];return console.warn(`[pricing] Unknown model: ${t}, cost_usd=0`),bn}function dl(t,e,n,r=0,o){let i=al(n),s=Math.min(r,t),d=(t-s)*i.input/1e6,c=s*i.cachedInput/1e6,l=e*i.output/1e6;return d+c+l}function Hs(t,e,n,r,o,i){return t&&t>0?t:!e&&!n?0:dl(e??0,n??0,o,r??0)}var il,bn,Rn,$s,en=L(()=>{u();Lo();Lo();il={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"},bn={input:0,cachedInput:0,output:0},Rn={},$s={};});function Tn(t){return ul.get(t)??t}function Uo(t){if(!t)return {};let e=pl.get(t);return e?{...e}:{model:t}}exports.CLAUDE_OPUS_4_8_BASE_MODEL_ID=void 0;exports.CLAUDE_OPUS_4_8_LEGACY_MODEL_ID=void 0;exports.CLAUDE_MODEL_COMPATIBILITY_PAIRS=void 0;var ul;exports.ANTIGRAVITY_MODEL_COMPATIBILITY=void 0;var pl,xn=L(()=>{u();exports.CLAUDE_OPUS_4_8_BASE_MODEL_ID="claude-opus-4-8",exports.CLAUDE_OPUS_4_8_LEGACY_MODEL_ID="claude-opus-4-8[1m]",exports.CLAUDE_MODEL_COMPATIBILITY_PAIRS=[{baseModelId:"claude-opus-4-8",catalogModelId:"claude-opus-4-8[1m]"},{baseModelId:"claude-opus-4-7",catalogModelId:"claude-opus-4-7[1m]"},{baseModelId:"claude-opus-4-6",catalogModelId:"claude-opus-4-6[1m]"},{baseModelId:"claude-sonnet-4-6",catalogModelId:"claude-sonnet-4-6[1m]"}],ul=new Map(exports.CLAUDE_MODEL_COMPATIBILITY_PAIRS.map(({baseModelId:t,catalogModelId:e})=>[t,e]));exports.ANTIGRAVITY_MODEL_COMPATIBILITY=[{legacyId:"Gemini 3.7 Flash (High)",model:"gemini-3.7-flash",effort:"high"},{legacyId:"Gemini 3.7 Flash (Medium)",model:"gemini-3.7-flash",effort:"medium"},{legacyId:"Gemini 3.7 Flash (Low)",model:"gemini-3.7-flash",effort:"low"},{legacyId:"Gemini 3.6 Flash (High)",model:"gemini-3.6-flash",effort:"high"},{legacyId:"Gemini 3.6 Flash (Medium)",model:"gemini-3.6-flash",effort:"medium"},{legacyId:"Gemini 3.6 Flash (Low)",model:"gemini-3.6-flash",effort:"low"},{legacyId:"Gemini 3.5 Flash (Medium)",model:"gemini-3.5-flash",effort:"medium"},{legacyId:"Gemini 3.5 Flash (High)",model:"gemini-3.5-flash",effort:"high"},{legacyId:"Gemini 3.5 Flash (Low)",model:"gemini-3.5-flash",effort:"low"},{legacyId:"Gemini 3.1 Pro (Low)",model:"gemini-3.1-pro",effort:"low"},{legacyId:"Gemini 3.1 Pro (High)",model:"gemini-3.1-pro",effort:"high"},{legacyId:"Claude Sonnet 4.6 (Thinking)",model:"claude-sonnet-4-6"},{legacyId:"Claude Opus 4.6 (Thinking)",model:"claude-opus-4-6-thinking"},{legacyId:"GPT-OSS 120B (Medium)",model:"gpt-oss-120b",effort:"medium"},{legacyId:"gemini-3.7-flash-high",model:"gemini-3.7-flash",effort:"high"},{legacyId:"gemini-3.7-flash-medium",model:"gemini-3.7-flash",effort:"medium"},{legacyId:"gemini-3.7-flash-low",model:"gemini-3.7-flash",effort:"low"},{legacyId:"gemini-3.6-flash-high",model:"gemini-3.6-flash",effort:"high"},{legacyId:"gemini-3.6-flash-medium",model:"gemini-3.6-flash",effort:"medium"},{legacyId:"gemini-3.6-flash-low",model:"gemini-3.6-flash",effort:"low"},{legacyId:"gemini-3.5-flash-high",model:"gemini-3.5-flash",effort:"high"},{legacyId:"gemini-3.5-flash-medium",model:"gemini-3.5-flash",effort:"medium"},{legacyId:"gemini-3.5-flash-low",model:"gemini-3.5-flash",effort:"low"},{legacyId:"gemini-3.1-pro-high",model:"gemini-3.1-pro",effort:"high"},{legacyId:"gemini-3.1-pro-low",model:"gemini-3.1-pro",effort:"low"},{legacyId:"gpt-oss-120b-medium",model:"gpt-oss-120b",effort:"medium"}],pl=new Map(exports.ANTIGRAVITY_MODEL_COMPATIBILITY.map(({legacyId:t,model:e,effort:n})=>[t,n===void 0?{model:e}:{model:e,effort:n}]));});function Vs(){return {models:[],modes:[],effort:[],modelOverrides:{},providerOptions:[]}}function fl(t){return Array.isArray(t)?{models:t,modes:[],effort:[],modelOverrides:{},providerOptions:[]}:t?{models:t.models??[],modes:t.modes??[],effort:t.effort??[],modelOverrides:t.modelOverrides??{},providerOptions:t.providerOptions??[]}:Vs()}function $o(t){jo=Object.fromEntries(Object.entries(t).map(([e,n])=>[e,fl(n)]));}function gl(){jo={};}function An(t){Gs={...t};}function Ue(t){return je(t).models}function je(t){return jo[t]??Oo[t]??Vs()}function xr(t){return Gs[t]??Us.providers[t]}function In(t){return je(t).modes}function ct(t,e){let n=je(t);return e?Object.prototype.hasOwnProperty.call(n.modelOverrides,e)?n.modelOverrides[e]?.effort??n.effort:n.modelOverrides[Tn(e)]?.effort??n.effort:n.effort}function Ar(t){return je(t).modelOverrides}function Sn(){return Ue("claude")}function Bo(){return Ue("codex")}function Fo(){return Ue("copilot")}function qo(){return Ue("antigravity")}function Pn(t,e){let n=new Map;for(let r of [...t,...e]){let o=n.get(r.id);if(!o){let{apiPricing:i,recommended:s,...a}=r;n.set(r.id,{...a,...s===true?{recommended:true}:{},...i!=null?{apiPricing:{...i}}:{}});continue}!o.name&&r.name&&(o.name=r.name),o.description==null&&r.description!=null&&(o.description=r.description),o.contextWindowTokens==null&&r.contextWindowTokens!=null&&(o.contextWindowTokens=r.contextWindowTokens),o.tier==null&&r.tier!=null&&(o.tier=r.tier),o.recommended!==true&&r.recommended===true&&(o.recommended=true),o.apiPricing==null&&r.apiPricing!=null&&(o.apiPricing={...r.apiPricing});}return Array.from(n.values())}function Cn(t){return t.map(e=>{let{apiPricing:n,...r}=e,o=qs(e.id);return o?{...r,apiPricing:o}:r})}var jo,Gs,Ae=L(()=>{u();No();en();xn();jo={},Gs={};});function Ur(t){return typeof t!="string"?void 0:t.trim()||void 0}function jr(t){return Ur(t)?.toLowerCase()??""}function nn(t){try{return kd.statSync(t).isFile()}catch{return false}}function tu(t,e){if(t===e)return true;let n=X__namespace.default.relative(t,e);return n!==""&&!n.startsWith("..")&&!X__namespace.default.isAbsolute(n)}function nu(t,e){if(X__namespace.default.basename(t)!==".bin")return false;let n=X__namespace.default.dirname(t);if(X__namespace.default.basename(n)!=="node_modules")return false;let r=X__namespace.default.dirname(n);return tu(r,e)}function On(t,e={}){if(t.includes("/")||t.includes("\\")||X__namespace.default.isAbsolute(t))return t;let n=e.platform??process.platform,r=e.env??process.env,o=X__namespace.default.resolve(e.cwd??process.cwd()),i=(e.resolution??"global_first")==="global_first",s=r.PATH??r.Path??process.env.PATH??process.env.Path??"",a=n==="win32"?";":":",d=s.split(a).map(g=>g.trim()).filter(Boolean),c=X__namespace.default.extname(t).length>0,l=r.PATHEXT??r.Pathext??process.env.PATHEXT??process.env.Pathext??".EXE;.CMD;.BAT;.COM",f=n==="win32"?c?[""]:l.split(";").map(g=>g.trim()).filter(Boolean).map(g=>g.startsWith(".")?g:`.${g}`):[""];for(let g of d){let m=X__namespace.default.resolve(o,g);if(!(i&&nu(m,o)))for(let k of f){let h=jr(k),v=k.toUpperCase();for(let _ of [k,h,v]){let w=X__namespace.default.join(m,`${t}${_}`);if(nn(w))return w}}}return t}function ru(t,e){return On(t,{env:e,platform:"win32",resolution:"local_first"})}function ou(t){if(!nn(t))return null;try{let e=kd.readFileSync(t,"utf8"),n=X__namespace.default.dirname(t),r=[];for(let a of e.matchAll(/"([^"\r\n]*)"/g)){let l=(a[1]??"").match(/%~?dp0%?\s*[\\/]*(.*)$/i)?.[1]?.trim();if(!l)continue;let f=l.replace(/[\\/]+/g,X__namespace.default.sep).replace(/^[\\/]+/,""),g=X__namespace.default.resolve(n,f);nn(g)&&r.push(g);}let o=[],i=new Map;for(let a of e.matchAll(/SET\s+"(\w+)=%~?dp0%?[\\/]?([^"]+)"/gi)){let d=a[1].toUpperCase(),c=a[2].trim().replace(/[\\/]+/g,X__namespace.default.sep).replace(/^[\\/]+/,"");i.set(d,X__namespace.default.resolve(n,c));}for(let a of e.split(/\r?\n/))if(a.includes("%*"))for(let d of a.matchAll(/"%(\w+)%"/g)){let c=i.get(d[1].toUpperCase());c&&nn(c)&&o.push(c);}let s=a=>a.find(d=>{let c=jr(X__namespace.default.basename(d));return c!=="node.exe"&&c!=="node"})??null;return s(o)??s(r)}catch{return null}}function iu(t,e){if(typeof e=="string")return Ur(e)||null;if(!e||typeof e!="object")return null;if(t){let n=e[t],r=typeof n=="string"?Ur(n):void 0;if(r)return r}for(let n of Object.values(e)){let r=typeof n=="string"?Ur(n):void 0;if(r)return r}return null}function su(t,e){if(!e)return null;let n=X__namespace.default.dirname(t),r=[X__namespace.default.resolve(n,"..",e),X__namespace.default.resolve(n,"node_modules",e)];for(let o of r){let i=X__namespace.default.join(o,"package.json");if(nn(i))try{let s=JSON.parse(kd.readFileSync(i,"utf8")),a=iu(e,s.bin);if(!a)continue;let d=X__namespace.default.resolve(o,a);if(nn(d))return d}catch{}}return null}function au(t){let e=t.platform??process.platform,n=t.env??process.env,r=t.execPath??process.execPath,o=t.cwd,i=t.resolution;if(e!=="win32")return {command:On(t.command,{cwd:o,env:n,platform:e,resolution:i}),leadingArgv:[],resolution:"direct"};let s=On(t.command,{cwd:o,env:n,platform:e,resolution:i}),a=jr(X__namespace.default.extname(s));if(a===".js"||a===".cjs"||a===".mjs")return {command:r,leadingArgv:[s],resolution:"node-entrypoint",windowsHide:true};if(a===".cmd"||a===".bat"){let d=ou(s)??su(s,t.packageName);return d?jr(X__namespace.default.extname(d))===".exe"?{command:d,leadingArgv:[],resolution:"exe-entrypoint",windowsHide:true}:{command:r,leadingArgv:[d],resolution:"node-entrypoint",windowsHide:true}:{command:s,leadingArgv:[],resolution:"unresolved-wrapper"}}return {command:s,leadingArgv:[],resolution:"direct"}}function du(t){if(t.candidate.resolution!=="unresolved-wrapper")return {command:t.candidate.command,leadingArgv:t.candidate.leadingArgv,resolution:t.candidate.resolution,windowsHide:t.candidate.windowsHide};if(t.allowShellFallback===true)return {command:t.candidate.command,leadingArgv:[],resolution:"shell-fallback",shell:true};throw new Error(`${X__namespace.default.basename(t.candidate.command)} wrapper resolved, but no executable/Node entrypoint could be resolved without shell execution.`)}function $t(t){let e=au(t);return du({candidate:e,allowShellFallback:t.allowShellFallback})}function Bt(t,e){return {command:t.command,argv:[...t.leadingArgv,...e],resolution:t.resolution,shell:t.shell,windowsHide:t.windowsHide}}var rn=L(()=>{u();});function cu(t){if(t.type!=="usage"||!("input_tokens"in t))return null;let e=Number(t.input_tokens??0),n=Number(t.output_tokens??0),o="cache_read_input_tokens"in t?Number(t.cache_read_input_tokens):void 0,i="cached_input_tokens"in t?Number(t.cached_input_tokens):void 0,s=o!==void 0?o:i??0;return {inputTokens:o!==void 0?e+o:e,outputTokens:n,cachedInputTokens:s}}function lu(t){let e=t.usage;if(!e||typeof e!="object"||Array.isArray(e))return null;let n=e;if(!("input_tokens"in n))return null;let r=Number(n.input_tokens??0),o=Number(n.output_tokens??0),s="cache_read_input_tokens"in n?Number(n.cache_read_input_tokens):void 0,a="cached_input_tokens"in n?Number(n.cached_input_tokens):void 0,d=s!==void 0?s:a??0;return {inputTokens:s!==void 0?r+s:r,outputTokens:o,cachedInputTokens:d}}function uu(t){if(t.type!=="step_finish")return null;let n=t.part?.tokens;if(!n)return null;let r=Number(n.input??0),o=Number(n.output??0),i=n.cache,s=i?Number(i.read??0):0;return {inputTokens:r+s,outputTokens:o,cachedInputTokens:s}}function ra(t){let e=new Map,n;for(let i of t.split(`
|
|
2
|
+
`))if(i.trim())try{let s=JSON.parse(i);if(s.type!=="assistant")continue;let a=s.message,d=a?.id,c=a?.usage;if(typeof d!="string"||!c)continue;let l=Number(c.input_tokens??0),f=Number(c.cache_read_input_tokens??0);e.set(d,{inputTokens:l+f,cachedInputTokens:f});let g=a?.model;typeof g=="string"&&g&&(n=g);}catch{}if(e.size===0)return;let r=0,o=0;for(let i of e.values())r+=i.inputTokens,o+=i.cachedInputTokens;return {inputTokens:r,cachedInputTokens:o,model:n}}function ut(t){if(!t||!t.trim())return;let e=null,n=null;for(let r of t.split(`
|
|
3
|
+
`))if(r.trim())try{let o=JSON.parse(r),i=uu(o);if(i){n||(n={inputTokens:0,outputTokens:0,cachedInputTokens:0}),n.inputTokens+=i.inputTokens,n.outputTokens+=i.outputTokens,n.cachedInputTokens+=i.cachedInputTokens;continue}let s=cu(o)??lu(o);s&&(e=s);}catch{}return n||(e??void 0)}var Ft=L(()=>{u();});exports.ProviderError=void 0;var qt,Ht,on=L(()=>{u();exports.ProviderError=class extends Error{constructor(n,r,o){super(n);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},qt=class extends exports.ProviderError{constructor(e,n){super(e,n,{code:"TIMEOUT_IDLE",kind:"permanent"}),this.name="IdleTimeoutError";}},Ht=class extends exports.ProviderError{constructor(e,n){super(e,n,{code:"TIMEOUT_TOTAL",kind:"permanent"}),this.name="TotalTimeoutError";}};});exports.RateLimitError=void 0;var $r=L(()=>{u();on();exports.RateLimitError=class extends exports.ProviderError{name="RateLimitError";constructor(e,n="cli/claude"){super(e,n,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function $e(t){return /crewx\s+(x|execute)\s/.test(t)}function Be(t,e){let n=e.match(/@(\S+)/);return {timestamp:t,type:"agent_call",targetAgent:n?.[1]?.replace(/["']/g,""),toolInput:e}}var sn=L(()=>{u();});function Fe(t){if(typeof t=="string")return t;if(!t||typeof t!="object")return JSON.stringify(t??{});let e=t;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 an=L(()=>{u();});function Wt(t){return pu[t]??t}function Xo(t){if(!t)return "";let e=t.lastIndexOf("/");return e===-1?t.trim():t.slice(e+1).trim()}function oa(t){if(!t)return false;let e=je(t);return e.models.length>0||e.modes.length>0||e.effort.length>0||Object.keys(e.modelOverrides).length>0}function ia(t,e){if(!t)return false;let n=je(t),r=typeof e=="string"?Tn(e):void 0;return n.models.length>0||n.effort.length>0||r!=null&&Array.isArray(n.modelOverrides[r]?.effort)}function Qo(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function fu(t,e,n){let r=t,o=false,i=false,s=[],a=()=>(o||(r={...t},o=true),r),d=typeof r.provider=="string"&&r.provider.trim()?Xo(r.provider):e,c=typeof r.model=="string"&&r.model.trim()?r.model.trim():n;if(oa(d)){if(typeof r.mode=="string"){let f=d==="claude"?Wt(r.mode):r.mode,g=In(d).map(m=>d==="claude"?Wt(m.id):m.id);f!==r.mode&&(a().mode=f,i=true),g.includes(f)||(delete a().mode,s.push("mode"));}typeof r.effort=="string"&&ia(d,c)&&(ct(d,c).includes(r.effort)||(delete a().effort,s.push("effort")));}let l=r.overdrive;if(Qo(l)){let f=Xo(typeof l.provider=="string"?l.provider:void 0),g=typeof l.model=="string"?l.model:void 0;if(oa(f)){let m,k=()=>(m||(m={...l},a().overdrive=m),m);if(typeof l.mode=="string"){let h=f==="claude"?Wt(l.mode):l.mode,v=In(f).map(_=>f==="claude"?Wt(_.id):_.id);h!==l.mode&&(k().mode=h,i=true),v.includes(h)||(delete k().mode,s.push("overdrive.mode"));}typeof l.effort=="string"&&ia(f,g)&&(ct(f,g).includes(l.effort)||(delete k().effort,s.push("overdrive.effort")));}}return {block:r,removed:s,changed:i}}function gu(t){let{options:e}=t;if(!Qo(e))return {options:e,changed:false,removed:[]};let n=Xo(t.provider),r=[],o=false,i=e,s=false,a=()=>(s||(i={...e},s=true),i);for(let d of ["query","execute"]){let c=e[d];if(!Qo(c))continue;let{block:l,removed:f,changed:g}=fu(c,n,t.model);(g||f.length>0)&&(a()[d]=l,r.push(...f.map(m=>`${d}.${m}`)),o=true);}return {options:i,changed:o,removed:r}}var pu,Zo=L(()=>{u();Ae();xn();pu={auto:"default"};});function xt(t){if(!t)return {};let e=t.match(/^(.+?)\[([^\]]+)\]$/);if(e){let n=e[2].toLowerCase();return mu.has(n)?{model:e[1],effort:e[2]}:{model:t}}return {model:t}}function sa(t){switch(t){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 aa(t){switch(t){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 da(t){return t?["-c",`model_reasoning_effort=${t}`]:[]}function ca(t){if(!t)return [];let e=new Set(["acceptEdits","bypassPermissions","default","delegate","dontAsk","plan"]),n=Wt(t);return e.has(n)?["--permission-mode",n]:[]}function la(t){return t?new Set(["low","medium","high","xhigh","max"]).has(t)?["--effort",t]:[]:[]}function ua(t){return t==="default"?[]:t&&hu.has(t)?["--permission-mode",t]:[]}function pa(t){return t===true?["--always-approve"]:[]}function fa(t,e=n=>console.warn(n)){return t===void 0?[]:t==="workspace"||t==="read-only"||t==="off"?["--sandbox",t]:(e(`[grok] Invalid sandbox value ${JSON.stringify(t)}; using workspace.`),["--sandbox","workspace"])}function ga(t){return t?new Set(["low","medium","high","xhigh"]).has(t)?["--effort",t]:[]:[]}function ma(t){if(!t||t==="default")return [];switch(t){case "plan":return ["--mode","plan"];case "acceptEdits":case "accept-edits":return ["--mode","accept-edits"];case "bypassPermissions":case "yolo":case "agent-full-access":return ["--dangerously-skip-permissions"];default:return []}}function ha(t){return t?new Set(["low","medium","high"]).has(t)?["--effort",t]:[]:[]}var mu,hu,Nn=L(()=>{u();Zo();mu=new Set(["minimal","low","medium","high","xhigh","max"]);hu=new Set(["default","acceptEdits","auto","dontAsk","bypassPermissions","plan"]);});function _u(t){let n=t.message?.content;return Array.isArray(n)?n.map(r=>typeof r.text=="string"?r.text.trim():"").filter(Boolean).join(`
|
|
4
4
|
|
|
5
|
-
`):""}function
|
|
6
|
-
`):s=JSON.stringify(i),{timestamp:t,type:"tool_result",toolUseId:o,resultPreview:s,isError:r}}return null}var
|
|
7
|
-
`).filter(o=>o.trim()),n=[],r=null;for(let o of e)try{let i=JSON.parse(o);if(i.type==="assistant"&&Array.isArray(i.message?.content))for(let s of i.message.content)s.type==="text"&&typeof s.text=="string"&&s.text.trim()&&n.push(s.text.trim());i.type==="result"&&typeof i.result=="string"&&(r=i.result);}catch{}return n.length>0?n[n.length-1]:r||t.trim()},extractFailure(t){try{let e=JSON.parse(t);if(e.type==="rate_limit_event"){let n=e.rate_limit_info??{};if(n.status==="rejected")return new exports.RateLimitError(`Claude rate limit: ${n.rateLimitType??"unknown"} (status: ${n.status})`)}if(e.error==="rate_limit"){let n=
|
|
8
|
-
`);for(let r of e)if(r.trim())try{let o=JSON.parse(r);if(o.type==="result"){let i=o.usage,s=i?{inputTokens:Number(i.input_tokens??0)+Number(i.cache_read_input_tokens??0),outputTokens:Number(i.output_tokens??0),cachedInputTokens:Number(i.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:s,model:d}}}catch{}let n=
|
|
9
|
-
`).filter(o=>o.trim()),n=[],r=null;for(let o of e)try{let i=JSON.parse(o);if(i.type==="assistant.message"&&typeof i.data?.content=="string"){let s=i.data.content;s.trim()&&n.push(s.trim());}i.type==="result"&&typeof i.result=="string"&&(r=i.result);}catch{}return n.length>0?n[n.length-1]:r||t.trim()},parseResultMeta(t){let e=
|
|
10
|
-
`).map(o=>o.trim()).filter(Boolean),n=[],r=null;for(let o of e)try{let i=JSON.parse(o);if(i.type==="item.completed"&&(i.item?.type==="message"||i.item?.type==="agent_message")&&typeof i.item?.text=="string"){let s=i.item.text;s.trim()&&n.push(s.trim());}i.type==="result"&&typeof i.result=="string"&&(r=i.result);}catch{}return n.length>0?n[n.length-1]:r||t.trim()},parseResultMeta(t){let e=
|
|
11
|
-
`).map(o=>o.trim()).filter(Boolean),n=[],r=null;for(let o of e)try{let i=JSON.parse(o);if(i.type==="text"&&typeof i.part?.text=="string"){let s=i.part.text;s.trim()&&n.push(s.trim());}i.type==="result"&&typeof i.result=="string"&&(r=i.result);}catch{}return n.length>0?n[n.length-1]:r||t.trim()},parseResultMeta(t){let e=
|
|
12
|
-
`):void 0}if(dn(t)){if(typeof t.text=="string")return t.text;if(typeof t.message=="string")return t.message;if(typeof t.error=="string")return t.error;if(t.type==="text"&&typeof t.data=="string")return t.data;for(let e of ["content","FileContent","rawOutput"]){let n=
|
|
13
|
-
`).flatMap(
|
|
14
|
-
`),o=r.length>
|
|
15
|
-
`).flatMap(
|
|
16
|
-
`).flatMap(
|
|
5
|
+
`):""}function wu(t){let e=t.toLowerCase();return e.includes("out of extra usage")||e.includes("rate limit")||e.includes("quota")}function ku(t,e){let n=e.type;if(n==="text"){let r=String(e.text||"");return r?{timestamp:t,type:"text",content:r}:null}if(n==="thinking"){let r=typeof e.thinking=="string"?e.thinking.trim():"";return r?{timestamp:t,type:"thinking",content:r}:null}if(n==="tool_use"){let r=String(e.name||""),o=e.id,i=e.input,s=Fe(i);return r==="Bash"&&$e(s)?Be(t,s):{timestamp:t,type:"tool_use",toolUseId:o,toolName:r,toolInput:s}}if(n==="tool_result"){let r=!!e.is_error,o=e.tool_use_id,i=e.output??e.content??"",s;return typeof i=="string"?s=i:Array.isArray(i)?s=i.filter(a=>a.type==="text"&&typeof a.text=="string").map(a=>a.text).join(`
|
|
6
|
+
`):s=JSON.stringify(i),{timestamp:t,type:"tool_result",toolUseId:o,resultPreview:s,isError:r}}return null}var yu;exports.claudeAdapter=void 0;var ei=L(()=>{u();$r();sn();an();Nn();Ae();Ft();yu=new Set(["tool_progress"]),exports.claudeAdapter={command:"claude",meta:{displayName:"Claude",models:Sn(),capabilities:{resume:true}},buildArgs(t,e,n){let{model:r,effort:o}=xt(e.model),i=e.effort??o,s=ca(e.mode),a=la(i),d=r?["--model",r]:[],c=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",...c,...s,...a,...d,...f],stdinMessage:t}:{args:["--output-format","stream-json","--verbose",...c,...s,...a,...d,...f],stdinMessage:t}}return {args:["-p","--output-format","stream-json","--verbose",...c,...s,...a,...d],stdinMessage:t}},extractText(t){let e=t.split(`
|
|
7
|
+
`).filter(o=>o.trim()),n=[],r=null;for(let o of e)try{let i=JSON.parse(o);if(i.type==="assistant"&&Array.isArray(i.message?.content))for(let s of i.message.content)s.type==="text"&&typeof s.text=="string"&&s.text.trim()&&n.push(s.text.trim());i.type==="result"&&typeof i.result=="string"&&(r=i.result);}catch{}return n.length>0?n[n.length-1]:r||t.trim()},extractFailure(t){try{let e=JSON.parse(t);if(e.type==="rate_limit_event"){let n=e.rate_limit_info??{};if(n.status==="rejected")return new exports.RateLimitError(`Claude rate limit: ${n.rateLimitType??"unknown"} (status: ${n.status})`)}if(e.error==="rate_limit"){let n=_u(e);return new exports.RateLimitError(n?`Claude rate limit: ${n}`:"Claude rate limit")}if(e.type==="result"&&e.is_error===!0){let n=typeof e.result=="string"?e.result:"";if(wu(n))return new exports.RateLimitError(`Claude rate limit: ${n}`)}}catch{}return null},parseResultMeta(t){let e=t.split(`
|
|
8
|
+
`);for(let r of e)if(r.trim())try{let o=JSON.parse(r);if(o.type==="result"){let i=o.usage,s=i?{inputTokens:Number(i.input_tokens??0)+Number(i.cache_read_input_tokens??0),outputTokens:Number(i.output_tokens??0),cachedInputTokens:Number(i.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:s,model:d}}}catch{}let n=ra(t);return n?{usage:{inputTokens:n.inputTokens,outputTokens:0,cachedInputTokens:n.cachedInputTokens,costUsd:0},model:n.model??null}:{usage:null,model:null}},parseEvent(t,e){let n;try{n=JSON.parse(t);}catch{return []}let r=n.type;if(!r)return [];if(r!=="assistant"&&r!=="user")return [];let i=n.message?.content;if(!Array.isArray(i))return [];let s=e??new Date().toISOString(),a=[];for(let d of i){let c=ku(s,d);c&&a.push(c);}return a},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?yu.has(r):!1}catch{return false}}};});var vu,Eu;exports.copilotAdapter=void 0;var ti=L(()=>{u();Ft();sn();an();Ae();vu=new Set(["interactive","plan","autopilot"]),Eu=new Set(["none","low","medium","high","xhigh","max"]),exports.copilotAdapter={command:"copilot",meta:{displayName:"Copilot",models:Fo()},buildArgs(t,e,n){let r=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&r.push("--model",e.model),e.mode&&vu.has(e.mode)&&r.push("--mode",e.mode),e.effort&&Eu.has(e.effort)&&r.push("--effort",e.effort),{args:r,stdinMessage:t}},extractText(t){let e=t.split(`
|
|
9
|
+
`).filter(o=>o.trim()),n=[],r=null;for(let o of e)try{let i=JSON.parse(o);if(i.type==="assistant.message"&&typeof i.data?.content=="string"){let s=i.data.content;s.trim()&&n.push(s.trim());}i.type==="result"&&typeof i.result=="string"&&(r=i.result);}catch{}return n.length>0?n[n.length-1]:r||t.trim()},parseResultMeta(t){let e=ut(t);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(t,e){let n;try{n=JSON.parse(t);}catch{return []}let r=n.type;if(!r)return [];if(!r.startsWith("tool.execution")&&!r.startsWith("assistant.")&&r!=="user.message")return [];let o=n.data;if(!o)return [];let i=e??new Date().toISOString(),s=o.toolCallId;if(r==="tool.execution_start"){let a=String(o.toolName||""),d=o.arguments,c=Fe(d);return (a==="bash"||a==="Bash")&&$e(c)?[Be(i,c)]:[{timestamp:i,type:"tool_use",toolName:a,toolInput:c,...s&&{toolUseId:s}}]}if(r==="tool.execution_complete"){let a=o.error;if(a)return [{timestamp:i,type:"tool_result",isError:true,resultPreview:String(a.message||""),...s&&{toolUseId:s}}];let d=o.result,c=String(d?.content||"");return [{timestamp:i,type:"tool_result",resultPreview:c,isError:false,...s&&{toolUseId:s}}]}if(r==="assistant.message"){let a=String(o.content||"");return a?[{timestamp:i,type:"text",content:a}]:[]}return []}};});function Ru(t){let e=[],n=0,r=false,o=false,i=0;for(let a=0;a<t.length;a++){let d=t[a];if(o){o=false;continue}if(d==="\\"&&r){o=true;continue}if(d==='"'){r=!r;continue}if(!r){if(d==="{")n++;else if(d==="}"&&(n--,n===0)){let c=t.slice(i,a+1).trim();c&&e.push(c),i=a+1;}}}let s=t.slice(i).trim();return s&&e.push(s),e}function Tu(t){return t[0]==="exec"?t.slice(1):t}function xu(t,e){let n=e.type;if(n==="command_execution"){let r=String(e.command||"");return $e(r)?[Be(t,r)]:[{timestamp:t,type:"tool_use",toolName:"Bash",toolInput:r}]}return n==="web_search"?[]:n==="file_change"?[]:[]}function Au(t,e){let n=e.type;if(n==="message"||n==="text"){let r=e.content;if(Array.isArray(r))for(let o of r){let i=Iu(t,o);if(i)return i}if(typeof e.text=="string")return {timestamp:t,type:"text",content:e.text}}if(n==="agent_message"&&typeof e.text=="string")return {timestamp:t,type:"text",content:e.text};if(n==="reasoning"){let r=typeof e.text=="string"?e.text.trim():"";return r?{timestamp:t,type:"thinking",content:r}:null}if(n==="command_execution"){let r=String(e.aggregated_output||e.output||""),o=!!e.is_error;return {timestamp:t,type:"tool_result",resultPreview:r,isError:o}}if(n==="tool_use"){let r=String(e.name||e.tool_name||""),o=e.input,i=Fe(o);return r==="Bash"&&$e(i)?Be(t,i):{timestamp:t,type:"tool_use",toolName:r,toolInput:i}}if(n==="tool_result"){let r=!!e.is_error,o=String(e.output||e.content||"");return {timestamp:t,type:"tool_result",resultPreview:o,isError:r}}if(n==="web_search"){let r=e.action,o;if(r?.type==="search"){let i=r.queries;o=String(r.query||"")||(i?.length?i.join(", "):"")||String(e.query||"");}else o=e.query?"open: "+String(e.query):"";return o?{timestamp:t,type:"tool_use",toolName:"WebSearch",toolInput:o}:null}if(n==="file_change"){let r=e.changes;if(!Array.isArray(r)||r.length===0)return null;let o=r.map(s=>String(s.path||"")).filter(Boolean);if(o.length===0)return null;let i=o.length===1?o[0]:`${o.slice(0,2).join(", ")}${o.length>2?` (+${o.length-2})`:""}`;return {timestamp:t,type:"tool_use",toolName:"Edit",toolInput:i}}return null}function Iu(t,e){let n=e.type;if(n==="text")return {timestamp:t,type:"text",content:String(e.text||"")};if(n==="tool_use"){let r=String(e.name||""),o=e.input,i=Fe(o);return r==="Bash"&&$e(i)?Be(t,i):{timestamp:t,type:"tool_use",toolName:r,toolInput:i}}return null}var bu;exports.codexAdapter=void 0;var ni=L(()=>{u();Ft();sn();an();Nn();Ae();bu=new Set(["turn.started","turn.completed","item.updated"]);exports.codexAdapter={command:"codex",meta:{displayName:"Codex",models:Bo(),capabilities:{resume:true}},buildArgs(t,e,n){let{model:r,effort:o}=xt(e.model),i=e.effort??o,s=e.resumeSessionId?aa(e.mode):sa(e.mode),a=da(i),d=r?["-m",r]:[],c=Tu(e.additionalArgs??[]),f=c.includes("--json")||c.includes("--experimental-json")?[]:["--json"];return e.resumeSessionId?{args:["exec","resume",...f,...s,...a,...d,...c,e.resumeSessionId,"-"],stdinMessage:t}:{args:["exec",...f,...s,...a,...d,...c],stdinMessage:t}},extractText(t){let e=t.split(`
|
|
10
|
+
`).map(o=>o.trim()).filter(Boolean),n=[],r=null;for(let o of e)try{let i=JSON.parse(o);if(i.type==="item.completed"&&(i.item?.type==="message"||i.item?.type==="agent_message")&&typeof i.item?.text=="string"){let s=i.item.text;s.trim()&&n.push(s.trim());}i.type==="result"&&typeof i.result=="string"&&(r=i.result);}catch{}return n.length>0?n[n.length-1]:r||t.trim()},parseResultMeta(t){let e=ut(t);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(t,e){let n=e??new Date().toISOString(),r=[],o;try{JSON.parse(t),o=[t];}catch{o=Ru(t),o.length>1&&console.warn("[codex] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let i of o){let s;try{s=JSON.parse(i);}catch{continue}let a=s.type;if(!a||!a.startsWith("item.")&&!a.startsWith("turn.")&&!a.startsWith("thread."))continue;let d=s.item;if(d){if(a==="item.started"){r.push(...xu(n,d));continue}if(a==="item.completed"){let c=Au(n,d);c&&r.push(c);continue}}}return r},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?bu.has(r):!1}catch{return false}}};});function Cu(t){return t?Pu[t]??{agent:"build",autoApprove:false}:{agent:void 0,autoApprove:false}}function Hr(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function Ou(t){let e=[],n=0,r=false,o=false,i=0;for(let a=0;a<t.length;a++){let d=t[a];if(o){o=false;continue}if(d==="\\"&&r){o=true;continue}if(d==='"'){r=!r;continue}if(!r){if(d==="{")n++;else if(d==="}"&&(n--,n===0)){let c=t.slice(i,a+1).trim();c&&e.push(c),i=a+1;}}}let s=t.slice(i).trim();return s&&e.push(s),e}var Su,Pu;exports.opencodeAdapter=void 0;var ri=L(()=>{u();Ft();an();Su=new Set(["step_start","step_finish"]),Pu={build:{agent:"build",autoApprove:false},"build-auto":{agent:"build",autoApprove:true},plan:{agent:"plan",autoApprove:false},"plan-auto":{agent:"plan",autoApprove:true}};exports.opencodeAdapter={command:"opencode",meta:{displayName:"OpenCode",capabilities:{resume:true}},buildArgs(t,e,n){let r=e.additionalArgs,o=r!==void 0?[...r]:["run"];Hr(o,"--format")||o.push("--format","json"),e.resumeSessionId&&!o.includes("-s")&&!o.includes("--session")&&o.push("-s",e.resumeSessionId);let{agent:i,autoApprove:s}=Cu(e.mode);Hr(o,"--agent")||i!==void 0&&o.push("--agent",i),s&&!Hr(o,"--auto")&&o.push("--auto"),e.effort!==void 0&&!Hr(o,"--variant")&&o.push("--variant",e.effort),e.model&&o.push("--model",e.model);let a;return !n&&!s&&!e.env?.OPENCODE_PERMISSION&&(a={OPENCODE_PERMISSION:JSON.stringify({external_directory:"allow"})}),{args:o,stdinMessage:t,env:a}},extractText(t){let e=t.split(`
|
|
11
|
+
`).map(o=>o.trim()).filter(Boolean),n=[],r=null;for(let o of e)try{let i=JSON.parse(o);if(i.type==="text"&&typeof i.part?.text=="string"){let s=i.part.text;s.trim()&&n.push(s.trim());}i.type==="result"&&typeof i.result=="string"&&(r=i.result);}catch{}return n.length>0?n[n.length-1]:r||t.trim()},parseResultMeta(t){let e=ut(t);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(t,e){let n=e??new Date().toISOString(),r=[],o;try{JSON.parse(t),o=[t];}catch{o=Ou(t),o.length>1&&console.warn("[opencode] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let i of o){let s;try{s=JSON.parse(i);}catch{continue}let a=s.type;if(a){if(a==="text"){let c=s.part?.text;c&&r.push({timestamp:n,type:"text",content:c});continue}if(a==="tool_use"){let d=s.part;if(!d)continue;let c=String(d.tool||""),l=String(d.callID||""),f=d.state,g=String(f?.status||""),m=f?.input,k=Fe(m);if(r.push({timestamp:n,type:"tool_use",toolName:c,toolUseId:l,toolInput:k}),g==="completed"&&f?.output!==void 0){let h=f.output,v=typeof h=="string"?h:JSON.stringify(h);r.push({timestamp:n,type:"tool_result",toolUseId:l,resultPreview:v,isError:false});}else g==="error"&&r.push({timestamp:n,type:"tool_result",toolUseId:l,resultPreview:String(f?.error||"tool error"),isError:true});continue}}}return r},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?Su.has(r):!1}catch{return false}}};});function Dn(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function Nu(t,e){if(!(t?Ue(oi).some(i=>i.id===t):false)||!t)return e;let r=ct(oi,t),o=Ar(oi)[t]?.defaultEffort;if(r.length!==0)return e?r.includes(e)?e:o&&r.includes(o)?o:void 0:o}var oi,ii,si=L(()=>{u();on();xn();Ae();Nn();oi="antigravity";ii={command:"agy",meta:{displayName:"Antigravity",models:qo(),defaultTimeoutMs:{query:12e4,execute:3e5},defaultIdleMs:0},buildArgs(t,e,n){let{model:r,effort:o}=xt(e.model),i=Uo(r),s=i.model,a=e.effort??o??i.effort,d=Nu(s,a),c=e.additionalArgs??[],l=s&&!Dn(c,"--model")?["--model",s]:[],f=Dn(c,"--effort")?[]:ha(d),g=Dn(c,"--mode")||Dn(c,"--dangerously-skip-permissions")?[]:ma(e.mode),m=Dn(c,"--print")?[]:["--print",t];return {args:[...l,...f,...g,...c,...m]}},extractText(t){let e=t.trim();if(!e)throw new exports.ProviderError("Antigravity CLI returned empty output with exit code 0. agy may have hidden an auth/quota/model error in its log file; inspect ~/.gemini/antigravity-cli/log for details.","cli/antigravity",{code:"EMPTY_OUTPUT",kind:"transient"});return e},parseResultMeta(t){return {usage:null,model:null}},parseEvent(t,e){return []}};});var ya,_a=L(()=>{u();sn();an();ya={parseEvent(t,e){let n;try{n=JSON.parse(t);}catch{return []}let r=n.type;if(!r)return [];if(r!=="message"&&r!=="tool_use"&&r!=="tool_result")return [];let o=e??new Date().toISOString();if(r==="message"){if(n.role!=="assistant")return [];let s=n.content;return s?[{timestamp:o,type:"text",content:s}]:[]}if(r==="tool_use"){let i=String(n.tool_name||""),s=n.tool_id,a=n.parameters,d=Fe(a);return /^bash$/i.test(i)&&$e(d)?[Be(o,d)]:[{timestamp:o,type:"tool_use",toolName:i,toolUseId:s,toolInput:d}]}if(r==="tool_result"){let i=n.tool_id,s=String(n.output||""),a=n.status!=="success";return [{timestamp:o,type:"tool_result",toolUseId:i,resultPreview:s,isError:a}]}return []}};});function dn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Gr(t){return dn(t)?t:void 0}function Ee(t){return typeof t=="string"?t:void 0}function zt(t){let e=typeof t=="number"?t:Number(t??0);return Number.isFinite(e)?e:0}function ju(t){let e=[],n=-1,r=0,o=false,i=false;for(let s=0;s<t.length;s+=1){let a=t[s];if(n===-1){(a==="{"||a==="[")&&(n=s,r=1);continue}if(i){i=false;continue}if(a==="\\"&&o){i=true;continue}if(a==='"'){o=!o;continue}o||(a==="{"||a==="["?r+=1:(a==="}"||a==="]")&&(r-=1,r===0&&(e.push(t.slice(n,s+1)),n=-1)));}return n!==-1&&e.push(t.slice(n)),e}function Ln(t){let e=t.trim();if(!e)return [];try{let n=JSON.parse(e);return dn(n)?[n]:[]}catch{return ju(e).flatMap(n=>{try{let r=JSON.parse(n);return dn(r)?[r]:[]}catch{return []}})}}function Mn(t){let e=JSON.stringify(t);return e===void 0?String(t):e}function Un(t){if(typeof t=="string")return t;if(Array.isArray(t)){let e=t.map(Un).filter(n=>n!==void 0);return e.length>0?e.join(`
|
|
12
|
+
`):void 0}if(dn(t)){if(typeof t.text=="string")return t.text;if(typeof t.message=="string")return t.message;if(typeof t.error=="string")return t.error;if(t.type==="text"&&typeof t.data=="string")return t.data;for(let e of ["content","FileContent","rawOutput"]){let n=Un(t[e]);if(n!==void 0)return n}}}function $u(t){if(t.rawOutput!==null&&t.rawOutput!==void 0)return Un(t.rawOutput)??Mn(t.rawOutput);if(t.content!==null&&t.content!==void 0)return Un(t.content)??Mn(t.content);if(t.result!==null&&t.result!==void 0)return Un(t.result)??Mn(t.result)}function ba(t){let e=Gr(t.error),n=[t.message,t.errorMessage,e?.message,e?.detail,typeof t.error=="string"?t.error:void 0].find(r=>typeof r=="string"&&r.trim().length>0);return n?Ra(n):"Grok CLI reported an error."}function Ra(t){return (t.replace(Uu,"").split(/\r?\n/).map(n=>n.trim()).filter(Boolean)[0]??t.trim()).slice(0,500)}function Ea(t){return Mu.test(t)}function Bu(t){let e=Gr(t.modelUsage);return e?Object.keys(e)[0]??null:null}function Fu(t){let e=Gr(t.usage);if(!e)return null;let n=zt(e.cache_read_input_tokens);return {inputTokens:zt(e.input_tokens)+n,cachedInputTokens:n,outputTokens:zt(e.output_tokens),costUsd:zt(t.total_cost_usd)}}function qu(t){let e=0,n=0,r=0,o=false,i=new Set;for(let s of t.split(`
|
|
13
|
+
`).flatMap(Ln)){if(s.type!=="usage")continue;let a=Gr(s.usage);if(!a)continue;let d=Ee(s.signature);if(d&&d.length>0){let l=`signature:${d}`;if(i.has(l))continue;i.add(l);}let c=zt(a.cache_read_input_tokens);e+=zt(a.input_tokens)+c,n+=c,r+=zt(a.output_tokens),o=true;}return o?{inputTokens:e,cachedInputTokens:n,outputTokens:r,costUsd:0}:null}function Hu(t,e){if(!Array.isArray(e.entries)||e.entries.length===0)return [];let n=[];for(let i of e.entries.slice(0,wa)){if(!dn(i))continue;let s=Ee(i.content)?.trim();if(!s)continue;let a=Ee(i.status)?.trim(),d=Ee(i.priority)?.trim(),c=[a?`status=${a}`:void 0,d?`priority=${d}`:void 0].filter(f=>!!f),l=c.length>0?` (${c.join(", ")})`:"";n.push(`- ${s}${l}`);}if(n.length===0)return [];e.entries.length>wa&&n.push(va);let r=n.join(`
|
|
14
|
+
`),o=r.length>ka?`${r.slice(0,ka-1)}${va}`:r;return [{timestamp:t,type:"info",content:o}]}function Wu(t,e){let n=Ee(e.type);if(n==="thought"){let r=Ee(e.data);return r===void 0?[]:[{timestamp:t,type:"thinking",content:r}]}if(n==="text"){let r=Ee(e.data);return r===void 0?[]:[{timestamp:t,type:"text",content:r}]}if(n==="plan")return Hu(t,e);if(n==="tool_call"){let r=Ee(e.toolCallId),o=Ee(e.toolName)??Ee(e.title),i=e.rawInput===void 0?void 0:Mn(e.rawInput);return [{timestamp:t,type:"tool_use",toolUseId:r,toolName:o,toolInput:i}]}if(n==="tool_call_update"){let r=Ee(e.status);return r!=="completed"&&r!=="failed"&&r!=="error"?[]:[{timestamp:t,type:"tool_result",toolUseId:Ee(e.toolCallId),toolName:Ee(e.toolName)??Ee(e.title),resultPreview:$u(e),isError:r!=="completed"||e.isError===true}]}if(n==="error"){let r=ba(e);return [{timestamp:t,type:"error",content:r,errorMessage:r}]}return []}var zr,Lu,Mu,Uu,wa,ka,va;exports.grokAdapter=void 0;var ai=L(()=>{u();on();$r();Ae();Nn();zr="cli/grok",Lu=new Set(["available_commands","usage","end"]),Mu=/(?:rate[\s_-]*limit|quota|usage[\s_-]*limit|too many requests|limit(?:ed|ing)?\s+(?:exceeded|reached))/i,Uu=/\u001b\[[0-?]*[ -/]*[@-~]/g,wa=20,ka=4e3,va="\u2026";exports.grokAdapter={command:"grok",createSessionId:()=>crypto$1.randomUUID(),meta:{displayName:"Grok",capabilities:{resume:true}},buildArgs(t,e){let{model:n,effort:r}=xt(e.model),o=e.effort??r,i=e.resumeSessionId?["--resume",e.resumeSessionId]:e.providerSessionId?["--session-id",e.providerSessionId]:[],s=n?["--model",n]:[],a=n?Ue("grok").some(T=>T.id===n):false,d=n&&a?ct("grok",n):[],c=!o||d.length===0||d.includes(o)?o:void 0,l=ga(c),f=e.additionalArgs??[],g=T=>f.some(x=>x===T||x.startsWith(`${T}=`)),m=e.providerOptions,k=m?.alwaysApprove,h=m?.sandbox,v=g("--permission-mode")?[]:ua(e.mode),_=g("--always-approve")?[]:pa(k),w=g("--sandbox")?[]:fa(h);return {args:["--no-auto-update",...i,"--single",t,"--output-format","streaming-json","--no-alt-screen",...s,...l,...v,..._,...w,...f]}},extractText(t){let e=[],n=false;for(let r of t.split(`
|
|
15
|
+
`).flatMap(Ln))typeof r.type=="string"&&(n=true),r.type==="text"&&typeof r.data=="string"&&e.push(r.data);return e.length>0?e.join(""):n?"":t.trim()},extractFailure(t){for(let e of Ln(t))if(e.type==="error"){let n=ba(e);return Ea(Mn(e))?new exports.RateLimitError(n,zr):new exports.ProviderError(n,zr)}return null},interpretExit(t,e){if(t===0)return null;let n=Ra(e)||`Grok CLI exited with code ${t}.`;return Ea(e)?new exports.RateLimitError(n,zr):new exports.ProviderError(n,zr)},parseResultMeta(t){let n=t.split(`
|
|
16
|
+
`).flatMap(Ln).find(r=>r.type==="end");return n?{usage:Fu(n),model:Bu(n)}:{usage:qu(t),model:null}},parseEvent(t,e){let n=e??new Date().toISOString();return Ln(t).flatMap(r=>Wu(n,r))},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let n=JSON.parse(e);return dn(n)&&typeof n.type=="string"?Lu.has(n.type):!1}catch{return false}}};});function jn(t,e,n){if(n){let r=exports.BUILTIN_ADAPTERS[n];if(r?.parseEvent)return r.parseEvent(e,t);let o=zu[n];if(o?.parseEvent)return o.parseEvent(e,t)}for(let r of Object.values(exports.BUILTIN_ADAPTERS)){let o=r.parseEvent?.(e,t)??[];if(o.length>0)return o}return []}exports.BUILTIN_ADAPTERS=void 0;var zu,At=L(()=>{u();ei();ti();ni();ri();si();_a();ai();ei();ti();ni();ri();si();ai();sn();exports.BUILTIN_ADAPTERS={codex:exports.codexAdapter,claude:exports.claudeAdapter,opencode:exports.opencodeAdapter,antigravity:ii,copilot:exports.copilotAdapter,grok:exports.grokAdapter},zu={gemini:ya};});var cn,di=L(()=>{u();cn=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 Ta(t,e){if(t===void 0||t==="")return e;let n=parseInt(t,10);return Number.isNaN(n)?e:n}function ci(t=process.env){let e=t.CREWX_TIMEOUT_IDLE;if(e===void 0||e==="")return;let n=parseInt(e,10);if(!(!Number.isFinite(n)||n<=0))return n}function xa(t=process.env){return {queryMs:Ta(t.CREWX_TIMEOUT_QUERY,288e5),executeMs:Ta(t.CREWX_TIMEOUT_EXECUTE,288e5),idleMs:ci(t)??6e5}}var Kr=L(()=>{u();});function Vu(t){let e=t.split(`
|
|
17
17
|
`).filter(d=>d.trim()),n=[],r=[],o=[],i=[],s=[],a=null;for(let d of e)try{let c=JSON.parse(d);if(c.type==="assistant"&&Array.isArray(c.message?.content))for(let l of c.message.content)l.type==="text"&&typeof l.text=="string"&&l.text.trim()&&n.push(l.text.trim());if(c.type==="message"&&c.role==="assistant"&&c.delta===!0&&typeof c.content=="string"&&r.push(c.content),c.type==="assistant.message"&&typeof c.data?.content=="string"){let l=c.data.content;l.trim()&&o.push(l.trim());}if(c.type==="item.completed"&&(c.item?.type==="message"||c.item?.type==="agent_message")&&typeof c.item?.text=="string"){let l=c.item.text;l.trim()&&i.push(l.trim());}if(c.type==="text"&&typeof c.part?.text=="string"){let l=c.part.text;l.trim()&&s.push(l.trim());}c.type==="result"&&typeof c.result=="string"&&(a=c.result);}catch{}return n.length>0?n.join(`
|
|
18
18
|
|
|
19
19
|
`):r.length>0?r.join(""):o.length>0?o.join(`
|
|
20
20
|
|
|
21
21
|
`):i.length>0?i.join(`
|
|
22
22
|
|
|
23
|
-
`):s.length>0?s.join(""):a||t.trim()}function
|
|
24
|
-
`);Q=
|
|
25
|
-
`);se=
|
|
23
|
+
`):s.length>0?s.join(""):a||t.trim()}function Ku(t){let e=ut(t);return e?{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0}:null}function Ju(t,e,n=process.platform){return t==="copilot"&&n==="win32"&&e instanceof exports.ProviderError&&e.message.includes('CLI command "copilot" not found')}function Ia(t,e,n,r,o,i,s){return new Promise((a,d)=>{let c=o?.timeoutMs??288e5,l=o?.idleMs??6e5,f={...process.env,...o?.env??{}},g=o?.cwd??process.cwd(),m=$t({command:t,env:f,cwd:g,allowShellFallback:true}),k=Bt(m,e),h=child_process.spawn(k.command,k.argv,{env:f,cwd:o?.cwd,stdio:["pipe","pipe","pipe"],shell:k.shell??false,windowsHide:k.windowsHide,detached:process.platform!=="win32"});h.stdin.on("error",F=>{F.code!=="EPIPE"&&o?.onOutput?.(`stdin error: ${F.message}`,"stderr");}),i!==void 0&&h.stdin.write(i),h.stdin.end(),h.pid!==void 0&&o?.onPid?.(h.pid);let v=false,_=false,w=F=>{if(h.pid!==void 0)try{process.platform==="win32"?h.kill(F):process.kill(-h.pid,F);}catch{}},T=()=>{w("SIGKILL");},U=setTimeout(()=>{v||(_=true,I?.stop(),w("SIGTERM"),setTimeout(T,$n).unref());},c);U.unref();let I=l>0?new cn({timeoutMs:l,onIdle:()=>{if(v)return;v=true,clearTimeout(U),w("SIGTERM"),setTimeout(T,$n).unref();let F=Math.round(l/6e4);j(new qt(`${n} produced no output for ${F}m (idle timeout). Process killed. The CLI may be waiting on interactive input or stuck \u2014 check the prompt or retry.`,n));}}):null;I?.start();let te=new string_decoder.StringDecoder("utf8"),S=new string_decoder.StringDecoder("utf8"),q="",fe="",Q="",se="",j=F=>{F instanceof Error&&(F.stdout=q),d(F);};h.stdout.on("data",F=>{I?.refresh();let B=te.write(F);q+=B,Q+=B;let J=Q.split(`
|
|
24
|
+
`);Q=J.pop()??"";for(let z of J)if(z.trim()&&(o?.onOutput?.(z,"stdout"),s?.extractFailure)){let H=s.extractFailure(z);if(H){v=true,clearTimeout(U),I?.stop(),w("SIGTERM"),setTimeout(T,$n).unref(),j(H);return}}}),h.stderr.on("data",F=>{I?.refresh();let B=S.write(F);fe+=B,se+=B;let J=se.split(`
|
|
25
|
+
`);se=J.pop()??"";for(let z of J)z.trim()&&o?.onOutput?.(z,"stderr");}),h.on("error",F=>{v=true,clearTimeout(U),I?.stop(),F.code==="ENOENT"?j(new exports.ProviderError(`CLI command "${t}" not found. Is ${n} installed?`,n)):j(new exports.ProviderError(`Spawn error: ${F.message}`,n));}),h.on("close",(F,B)=>{if(v)return;v=true,clearTimeout(U),I?.stop();let J=te.end(),z=S.end();J&&(q+=J,Q+=J),z&&(fe+=z,se+=z),Q.trim()&&o?.onOutput?.(Q,"stdout"),se.trim()&&o?.onOutput?.(se,"stderr");let H=F??0;if(o?.onExitCode?.(H),_)return j(new Ht(`Total runtime exceeded ${c}ms; process killed.`,n));if(B)return j(new exports.ProviderError(`Process terminated by signal ${B}`,n,{code:"PROVIDER_CRASHED",kind:"permanent"}));if(H!==0){if(s?.interpretExit){let re=s.interpretExit(H,fe);if(re){j(re);return}}j(new exports.ProviderError(`Process exited with code ${H}: ${fe.slice(0,500)}`,n));return}let ne;try{ne=s?s.extractText(q):Vu(q);}catch(re){j(re instanceof Error?re:new exports.ProviderError(String(re),n));return}a({stdout:q,parsed:ne});});})}function pt(t,e){Sa.set(t,e);}function ft(t,e){let n=t.split("/");if(n.length!==2)throw new exports.ProviderError(`Invalid provider format: "${t}". Expected namespace/id (e.g., cli/claude)`,t);let[r,o]=n,i=Sa.get(r);if(i)return i(o,t);if(r==="cli"){let s=exports.BUILTIN_ADAPTERS[o];if(!s)throw new exports.ProviderError(`Unknown CLI provider id: "${o}". Supported: ${Object.keys(exports.BUILTIN_ADAPTERS).join(", ")}`,t);return new li(o,s,t,e)}throw new exports.ProviderError(`Unsupported provider namespace: "${r}". Register a factory with registerProviderFactory('${r}', factory).`,t)}function Pa(t,e,n){if(!t||!e)return t??{};let r=e({providerStr:n.providerStr,providerId:n.providerId,mode:t.mode});return r.length===0?t:{...t,additionalArgs:[...t.additionalArgs??[],...r]}}var $n;exports.ClientToolCallRequiredError=void 0;var Sa,li,Xe=L(()=>{u();rn();Ft();At();on();di();Kr();on();$n=2e3;exports.ClientToolCallRequiredError=class extends Error{constructor(n,r){super(`Client tool call required: ${n.toolName}`);this.toolCall=n;this.continuationState=r;}toolCall;continuationState;name="ClientToolCallRequiredError"},Sa=new Map;li=class{constructor(e,n,r,o){this.providerId=e;this.adapter=n;this.providerStr=r;this.additionalArgsProvider=o;}providerId;adapter;providerStr;additionalArgsProvider;async execute(e,n){let r=this.composeMessage(e,n),o=this.prepareProviderSession(this.applyAdditionalArgs(n)),{args:i,stdinMessage:s,env:a}=this.adapter.buildArgs(r,o,true);o.onCommand?.(`${this.adapter.command} ${i.join(" ")}`);let d=a?{...o,env:{...o.env??{},...a}}:o,{stdout:c,parsed:l}=await this.runProcess(i,d,s);return this.handleResultMeta(c,o),l}async query(e,n){let r=this.composeMessage(e,n),o=this.prepareProviderSession(this.applyAdditionalArgs(n)),{args:i,stdinMessage:s,env:a}=this.adapter.buildArgs(r,o,false);o.onCommand?.(`${this.adapter.command} ${i.join(" ")}`);let d=a?{...o,env:{...o.env??{},...a}}:o,{stdout:c,parsed:l}=await this.runProcess(i,d,s);return this.handleResultMeta(c,o),l}applyAdditionalArgs(e){return Pa(e,this.additionalArgsProvider,{providerStr:this.providerStr,providerId:this.providerId})}prepareProviderSession(e){if(!this.adapter.createSessionId)return e;if(e.resumeSessionId)return e.onProviderSessionId?.(e.resumeSessionId),{...e,providerSessionId:void 0};let n=this.adapter.createSessionId();return e.onProviderSessionId?.(n),{...e,providerSessionId:n}}composeMessage(e,n){return n?.systemPrompt?`${n.systemPrompt}
|
|
26
26
|
|
|
27
27
|
---
|
|
28
28
|
|
|
29
|
-
${e}`:e}async runProcess(e,n,r){try{return await
|
|
30
|
-
`);this.stderrBuffer=T.pop()??"";for(let x of T)x.trim()&&this.options.onStderr?.(x);}),this.proc=a;let d=this.options.idleMs??6e5;d>0&&(this.idlePromise=new Promise((_,w)=>{this.idleReject=w;}),this.idlePromise.catch(()=>{}),this.idleWatchdog=new cn({timeoutMs:d,onIdle:()=>{let _=Math.round(d/6e4),w=new
|
|
29
|
+
${e}`:e}async runProcess(e,n,r){try{return await Ia(this.adapter.command,e,this.providerStr,this.providerId,n,r,this.adapter)}catch(o){if(Ju(this.providerId,o)){let i=e[0]==="copilot"?e:["copilot",...e];try{return await Ia("gh",i,this.providerStr,this.providerId,n,r,this.adapter)}catch(s){throw this.recoverPartialUsage(s,n),s}}throw this.recoverPartialUsage(o,n),o}}recoverPartialUsage(e,n){let r=e instanceof Error?e.stdout:void 0;typeof r=="string"&&r.length>0&&this.handleResultMeta(r,n);}handleResultMeta(e,n){if(!this.adapter.parseResultMeta){let s=Ku(e);s&&n?.onUsage&&n.onUsage(s);return}let{usage:r,model:o}=this.adapter.parseResultMeta(e);r&&n?.onUsage&&n.onUsage(r);let i=o??(this.providerId==="opencode"?n?.model??null:null);i&&n?.onModel&&n.onModel(i);}};});function Ni(t){let e=t.update;if(e.sessionUpdate==="agent_message_chunk"){let n=e.content;if(n.type==="text"&&typeof n.text=="string")return n.text}return null}function He(t,e){try{let n=JSON.parse(t);if(n!=null&&typeof n=="object"&&typeof n.type=="string"&&Yp.has(n.type)){let r=e??new Date().toISOString();return [{...n,timestamp:n.timestamp||r}]}}catch{}return []}var Yp,It=L(()=>{u();Yp=new Set(["text","tool_use","tool_result","error","running_instruction","agent_call"]);});var Jd,Yd;exports.VercelProviderRuntime=void 0;var ts=L(()=>{u();Xe();Jd=10,Yd=50,exports.VercelProviderRuntime=class{config;constructor(e){this.config=e;}async query(e,n){return this._run(e,"query",n)}async execute(e,n){return this._run(e,"execute",n)}async _run(e,n,r){let{generateText:o,tool:i}=await import('ai'),s=this.convertTools(r?.tools??[],i),a=this.createModel(r?.model),d=Math.min(r?.maxSteps??this.config.maxSteps??Jd,Yd);try{let c=0,l=await o({model:a,system:r?.systemPrompt??void 0,prompt:e,tools:s,maxSteps:d,...this.config.temperature!==void 0&&{temperature:this.config.temperature},...this.config.maxTokens!==void 0&&{maxTokens:this.config.maxTokens},onStepFinish:g=>{if(c++,!!r?.onOutput){if(g.toolCalls&&g.toolCalls.length>0)for(let 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 k=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:k,is_error:!1}]}}),"stdout");}}}}),f=new Set((r?.tools??[]).filter(g=>!g.execute).map(g=>g.name));if(l.finishReason==="tool-calls"&&Array.isArray(l.toolCalls)&&l.toolCalls.length>0){let g=l.toolCalls.filter(m=>f.has(m.toolName));if(g.length>0){let m=g[0];throw new exports.ClientToolCallRequiredError({toolCallId:m.toolCallId,toolName:m.toolName,args:m.args},{userMessage:e,responseMessages:l.response?.messages??[],toolDefinitions:r?.tools??[],maxSteps:d,systemPrompt:r?.systemPrompt,modelOverride:r?.model})}}if(r?.onUsage&&l.usage){let g={inputTokens:l.usage.promptTokens??0,outputTokens:l.usage.completionTokens??0,cachedInputTokens:0,costUsd:0};r.onUsage(g);}return r?.onModel&&r.onModel(r.model??this.config.model),l.text??""}catch(c){throw c instanceof exports.ClientToolCallRequiredError?c:c.status===401?new exports.ProviderError(`Authentication failed for ${this.config.provider}. Check your API key.`,this.config.provider):c.status===429?new exports.ProviderError(`Rate limit exceeded for ${this.config.provider}.`,this.config.provider):new exports.ProviderError(`Provider error: ${c.message}`,this.config.provider)}}async continueWithToolResults(e,n,r){let{generateText:o,tool:i}=await import('ai'),s=this.convertTools(e.toolDefinitions,i),a=this.createModel(e.modelOverride),d=Math.min(e.maxSteps??this.config.maxSteps??Jd,Yd),c=[{role:"user",content:e.userMessage},...e.responseMessages,{role:"tool",content:n.map(l=>({type:"tool-result",toolCallId:l.toolCallId,toolName:l.toolName,result:typeof l.result=="string"?l.result:JSON.stringify(l.result)}))}];try{let l=await o({model:a,system:e.systemPrompt??void 0,messages:c,tools:s,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(l.finishReason==="tool-calls"&&Array.isArray(l.toolCalls)&&l.toolCalls.length>0){let g=l.toolCalls.filter(m=>f.has(m.toolName));if(g.length>0){let m=g[0];throw new exports.ClientToolCallRequiredError({toolCallId:m.toolCallId,toolName:m.toolName,args:m.args},{userMessage:e.userMessage,responseMessages:[...e.responseMessages,{role:"tool",content:n.map(k=>({type:"tool-result",toolCallId:k.toolCallId,toolName:k.toolName,result:typeof k.result=="string"?k.result:JSON.stringify(k.result)}))},...l.response?.messages??[]],toolDefinitions:e.toolDefinitions,maxSteps:e.maxSteps,systemPrompt:e.systemPrompt,modelOverride:e.modelOverride})}}return r?.onUsage&&l.usage&&r.onUsage({inputTokens:l.usage.promptTokens??0,outputTokens:l.usage.completionTokens??0,cachedInputTokens:0,costUsd:0}),r?.onModel&&r.onModel(e.modelOverride??this.config.model),l.text??""}catch(l){throw l instanceof exports.ClientToolCallRequiredError?l:new exports.ProviderError(`Provider error: ${l.message}`,this.config.provider)}}convertTools(e,n){let{z:r}=_e("zod"),o={};for(let i of e){let s=this.jsonSchemaToZod(i.parameters??{},r);i.execute?o[i.name]=n({description:i.description,parameters:s,execute:async a=>i.execute(a)}):o[i.name]=n({description:i.description,parameters:s});}return o}jsonSchemaToZod(e,n){if(!e||!e.properties)return n.object({});let r={},o=e.properties,i=e.required??[];for(let[s,a]of Object.entries(o)){let d;switch(a.type){case "string":d=n.string();break;case "number":d=n.number();break;case "integer":d=n.number().int();break;case "boolean":d=n.boolean();break;case "array":d=n.array(n.any());break;default:d=n.any();}a.description&&(d=d.describe(a.description)),i.includes(s)||(d=d.optional()),r[s]=d;}return n.object(r)}createModel(e){let{provider:n,apiKey:r,baseURL:o}=this.config,i=e||this.config.model;switch(n){case "api/openrouter":{let{createOpenAI:s}=_e("@ai-sdk/openai");return s({apiKey:r||process.env.OPENROUTER_API_KEY,baseURL:o||"https://openrouter.ai/api/v1"})(i)}case "api/openai":{let{createOpenAI:s}=_e("@ai-sdk/openai");return s({apiKey:r||process.env.OPENAI_API_KEY,...o&&{baseURL:o}})(i)}case "api/anthropic":{let{createAnthropic:s}=_e("@ai-sdk/anthropic");return s({apiKey:r||process.env.ANTHROPIC_API_KEY,...o&&{baseURL:o}})(i)}case "api/google":{let{createGoogleGenerativeAI:s}=_e("@ai-sdk/google");return s({apiKey:r||process.env.GOOGLE_API_KEY})(i)}default:throw new exports.ProviderError(`Unsupported API provider: ${n}`,n)}}};});var Qd={};Tr(Qd,{registerApiProviders:()=>Xd});function Xd(t){pt("api",(e,n)=>{let r=t?.apiKeys?.[e];return new exports.VercelProviderRuntime({provider:n,model:"",apiKey:r,maxSteps:t?.defaults?.maxSteps,temperature:t?.defaults?.temperature})});}var ns=L(()=>{u();Xe();ts();});exports.AcpProtocolError=void 0;var rs=L(()=>{u();exports.AcpProtocolError=class extends Error{constructor(n,r,o){super(n);this.code=r;this.data=o;}code;data;name="AcpProtocolError"};});var Em,bm,Zd,ec,Rm;exports.AcpConnection=void 0;var ko=L(()=>{u();rn();rs();Xe();di();Kr();Em=-32e3,bm=2e3,Zd=3e4,ec=1e4,Rm=8*36e5,exports.AcpConnection=class{constructor(e){this.options=e;}options;proc=null;sdkConnection=null;disposed=false;stderrBuffer="";collectedStderr="";pendingUpdateCallback=null;idleWatchdog=null;idleReject=null;idlePromise=null;authMethods=[];_initResponse=null;get initResponse(){return this._initResponse}async connect(e){if(this.disposed)throw new exports.ProviderError("AcpConnection has been disposed","acp");let n=this.options.spawn,r=process.platform==="win32"&&(n.shellOnWindows??true),o={...process.env,...this.options.env??{}},i=this.options.cwd??process.cwd(),s;try{let _=$t({command:n.command,env:o,cwd:i,allowShellFallback:r});s=Bt(_,n.args);}catch(_){throw new exports.ProviderError(_ instanceof Error?_.message:String(_),"acp")}let a=child_process.spawn(s.command,s.argv,{stdio:["pipe","pipe","pipe"],env:o,cwd:this.options.cwd,shell:s.shell??false,windowsHide:true,detached:process.platform!=="win32"});a.pid!==void 0&&this.options.onPid?.(a.pid),a.stderr.on("data",_=>{let w=_.toString();this.collectedStderr+=w,this.stderrBuffer+=w;let T=this.stderrBuffer.split(`
|
|
30
|
+
`);this.stderrBuffer=T.pop()??"";for(let x of T)x.trim()&&this.options.onStderr?.(x);}),this.proc=a;let d=this.options.idleMs??6e5;d>0&&(this.idlePromise=new Promise((_,w)=>{this.idleReject=w;}),this.idlePromise.catch(()=>{}),this.idleWatchdog=new cn({timeoutMs:d,onIdle:()=>{let _=Math.round(d/6e4),w=new qt(`acp produced no output for ${_}m (idle timeout). Process killed. The CLI may be waiting on interactive input or stuck \u2014 check the prompt or retry.`,"acp");this.idleReject?.(w),this.dispose();}}),this.idleWatchdog.start()),a.stdin.on("error",_=>{_.code!=="EPIPE"&&this.options.onStderr?.(`ACP stdin error: ${_.message}`);});let c=new WritableStream({write:_=>new Promise((w,T)=>{a.stdin.write(_,x=>{x?T(x):w();});}),close:()=>{a.stdin.end();}}),l=new ReadableStream({start:_=>{a.stdout.on("data",w=>{this.idleWatchdog?.refresh(),_.enqueue(new Uint8Array(w));}),a.stdout.on("end",()=>{_.close();}),a.stdout.on("error",w=>{_.error(w);});}}),f=sdk.ndJsonStream(c,l),g=this,m=new sdk.ClientSideConnection(_=>({requestPermission:async w=>{if(g.options.configOptions?.allow_all!==void 0){let T=w.options;if(Array.isArray(T)&&T.length>0)return {outcome:{outcome:"selected",optionId:(T.find(U=>U.kind==="allow_once")??T.find(U=>U.kind?.startsWith("allow_"))??T[0]).optionId}}}return {outcome:{outcome:"cancelled"}}},sessionUpdate:async w=>{g.pendingUpdateCallback?.(w);}}),f);this.sdkConnection=m;let k=new Promise((_,w)=>{a.on("error",T=>{if(T.code==="ENOENT"){let U=n.command==="npx"&&n.args.length>0?`@agentclientprotocol/${n.args[0]}`:n.command;w(new exports.ProviderError(`ACP command "${n.command}" not found. Is the ACP adapter installed? Try: npm install -g ${U}`,"acp"));}else w(new exports.ProviderError(`ACP spawn error: ${T.message}`,"acp"));});}),h=this.doInitialize(m,e),v=new Promise((_,w)=>{setTimeout(()=>{w(new exports.AcpProtocolError(`ACP connect timeout after ${Zd}ms. The ACP adapter may not be installed or may require interactive setup.`));},Zd).unref();});await Promise.race([h,v,k]);}async doInitialize(e,n){let r=await e.initialize({protocolVersion:1,clientCapabilities:{auth:{}},clientInfo:{name:n?.name??"crewx-sdk",version:n?.version??"0.8.4"}});this._initResponse=r,this.authMethods=r.authMethods??[];}async newSession(e){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");try{return await this.newSessionWithTimeout(e)}catch(n){if(!this.isAuthError(n))throw n;return await this.tryAuthenticate(),this.newSessionWithTimeout(e)}}async newSessionWithTimeout(e){return (await this.newSessionRawTimeout(e)).sessionId}async newSessionRaw(e){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");try{return await this.newSessionRawTimeout(e)}catch(n){if(!this.isAuthError(n))throw n;return await this.tryAuthenticate(),this.newSessionRawTimeout(e)}}async newSessionRawTimeout(e){let n=this.sdkConnection.newSession(e),r=new Promise((o,i)=>{setTimeout(()=>{i(new exports.AcpProtocolError(`ACP session/new timeout after ${ec}ms`));},ec).unref();});return Promise.race([n,r])}isAuthError(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code===Em}async tryAuthenticate(){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected.","acp");let e=this.authMethods.find(r=>r.type==="env_var"&&this.hasEnvVarsFor(r));if(e){await this.sdkConnection.authenticate({methodId:e.id});return}let n=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(i=>(i.vars??[]).filter(s=>!s.optional&&!process.env[s.name]).map(s=>s.name));throw new exports.AcpProtocolError(`ACP authentication required. Missing environment variables: ${o.join(", ")}. Set them in your shell or crewx.yaml env block.`)}throw new exports.AcpProtocolError(`ACP authentication required but no supported method found. Available methods: ${n}. CrewX currently supports env_var authentication only.`)}throw new exports.AcpProtocolError("ACP agent requires authentication but advertised no auth methods.")}hasEnvVarsFor(e){return !e.vars||e.vars.length===0?true:e.vars.filter(n=>!n.optional).every(n=>!!process.env[n.name])}async setModel(e,n){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.unstable_setSessionModel({sessionId:e,modelId:n});}async setMode(e,n){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.setSessionMode({sessionId:e,modeId:n});}async setConfigOption(e,n,r){if(!this.sdkConnection)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");await this.sdkConnection.setSessionConfigOption({sessionId:e,configId:n,value:r});}async prompt(e,n,r,o){if(!this.sdkConnection||!this.proc)throw new exports.ProviderError("AcpConnection not connected. Call connect() first.","acp");this.pendingUpdateCallback=r??null;let i=this.sdkConnection,s=this.proc,a=o??Rm,d=false,c=i.prompt({sessionId:e,prompt:n}).finally(()=>{d=true;}),l=new Promise((m,k)=>{setTimeout(()=>{i.cancel({sessionId:e}).catch(()=>{}),k(new Ht(`ACP prompt timeout after ${a}ms`,"acp"));},a).unref();}),f=new Promise((m,k)=>{let h=(T,x,U)=>{if(d)return;let I=x!=null?`signal=${x}`:`code=${String(T)}`;k(new exports.ProviderError(`ACP process terminated unexpectedly (${I}) [${U}]: ${this.collectedStderr.slice(-500)}`,"acp"));},v=(T,x)=>h(T,x,"exit"),_=(T,x)=>h(T,x,"close");s.once("exit",v),s.once("close",_);let w=()=>{s.off("exit",v),s.off("close",_);};c.then(w,w);}),g=[c,l,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 n=e.pid,r=o=>{if(n!==void 0&&process.platform!=="win32")try{process.kill(-n,o);}catch{}else try{e.kill(o);}catch{}};await new Promise(o=>{let i=()=>{clearTimeout(s),o();};e.once("close",i),e.once("error",i);try{r("SIGTERM");}catch{i();return}let s=setTimeout(()=>{r("SIGKILL");},bm);});}get isConnected(){return !this.disposed&&this.sdkConnection!==null&&this.proc!==null}};});function tc(t,e){if(t!=null&&typeof t=="object"){let n=t;if(typeof n.command=="string")return n.command;if(typeof n.file_path=="string")return n.file_path;if(typeof n.filePath=="string")return n.filePath;if(typeof n.path=="string")return n.path;if(typeof n.query=="string")return n.query;if(typeof n.pattern=="string")return n.pattern;if(typeof n.url=="string")return n.url;if(Object.keys(n).length>0)return JSON.stringify(n)}if(e&&e.length>0)return e.map(n=>n.path).join(", ")}var Tm;exports.AcpProviderRuntime=void 0;var os=L(()=>{u();It();ko();Tm={read:"Read",edit:"Edit",delete:"Delete",move:"Move",search:"Search",execute:"Bash",think:"Think",fetch:"WebFetch",switch_mode:"SwitchMode"};exports.AcpProviderRuntime=class{constructor(e,n,r){this.adapter=n;}adapter;async query(e,n){return this.runPrompt(e,n)}async execute(e,n){return this.runPrompt(e,n)}async dispose(){}async runPrompt(e,n){let{command:r,args:o}=this.adapter.spawn;n?.onCommand?.(`${r} ${o.join(" ")}`);let i=this.adapter.buildSpawnEnv?.(n?.model??""),s=i?{...n?.env,...i}:n?.env,a=new exports.AcpConnection({spawn:this.adapter.spawn,env:s,cwd:n?.cwd,timeoutMs:n?.timeoutMs,idleMs:n?.idleMs,onPid:n?.onPid,onStderr:d=>n?.onOutput?.(d,"stderr"),configOptions:n?.configOptions});try{await a.connect(this.adapter.clientInfo);let d=this.adapter.buildSessionParams({cwd:n?.cwd,env:n?.env,model:n?.model,systemPrompt:n?.systemPrompt}),c=await a.newSession(d);await this.applySessionOptions(a,c,n);let l=this.composePrompt(e,n),f=[],g=await a.prompt(c,l,m=>this.handleUpdate(m,n,f),n?.timeoutMs);return this.handleUsage(g,n),f.join("")}finally{await a.dispose().catch(()=>{});}}async applySessionOptions(e,n,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(n,o.modelId):await e.setModel(n,r.model);}catch(i){console.warn(`[acp] setModel(${r.model}) failed: ${i instanceof Error?i.message:String(i)}`);}}if(r?.mode){let o=this.adapter.resolveMode?.(r.mode)??r.mode;if(o)try{await e.setMode(n,o);}catch(i){console.warn(`[acp] setMode(${o}) failed: ${i instanceof Error?i.message:String(i)}`);}}if(r?.effort){let o=this.adapter.buildEffortAction?.(r.effort,r.model);if(o&&o.type==="set_config_option")try{await e.setConfigOption(n,o.configId,o.value);}catch(i){console.warn(`[acp] setConfigOption(${o.configId}) effort failed: ${i instanceof Error?i.message:String(i)}`);}}if(r?.configOptions)for(let[o,i]of Object.entries(r.configOptions))try{await e.setConfigOption(n,o,i);}catch(s){console.warn(`[acp] setConfigOption(${o}) failed, retrying: ${s instanceof Error?s.message:String(s)}`);try{await new Promise(a=>setTimeout(a,500)),await e.setConfigOption(n,o,i);}catch(a){console.warn(`[acp] setConfigOption(${o}) retry failed: ${a instanceof Error?a.message:String(a)}`);}}}composePrompt(e,n){let r=[];return n?.systemPrompt?.trim()&&(r.push(n.systemPrompt),r.push("---")),n?.context&&(r.push(n.context),r.push("---")),r.push(e),[{type:"text",text:r.join(`
|
|
31
31
|
|
|
32
|
-
`)}]}handleUpdate(e,n,r){let o=e.update;if(o.sessionUpdate==="agent_message_chunk"){let i=null;this.adapter.extractTextFromUpdate?i=this.adapter.extractTextFromUpdate(e):i=
|
|
32
|
+
`)}]}handleUpdate(e,n,r){let o=e.update;if(o.sessionUpdate==="agent_message_chunk"){let i=null;this.adapter.extractTextFromUpdate?i=this.adapter.extractTextFromUpdate(e):i=Ni(e),i!==null&&(r.push(i),n?.onOutput?.(i,"stdout"));}else if(o.sessionUpdate==="tool_call"){this.pushBlockBoundary(r);let i=new Date().toISOString(),s=o,a={title:s.title??"",kind:s.kind,rawInput:s.rawInput,rawOutput:s.rawOutput,locations:s.locations,_meta:s._meta},d=this.resolveToolCall(a),c={timestamp:i,type:"tool_use",toolUseId:s.toolCallId,toolName:d.toolName,toolInput:d.toolInput};n?.onTaskLog?.([c]);}else if(o.sessionUpdate==="tool_call_update"){let i=new Date().toISOString(),s=o;if(s.status==="completed"||s.status==="failed"){let d=this.extractResultPreview(s.rawOutput),c={timestamp:i,type:"tool_result",toolUseId:s.toolCallId,resultPreview:d,isError:s.status==="failed"};n?.onTaskLog?.([c]);}else if(s.rawInput!=null&&typeof s.rawInput=="object"&&Object.keys(s.rawInput).length>0){this.pushBlockBoundary(r);let d={title:s.title??"",kind:s.kind,rawInput:s.rawInput,rawOutput:s.rawOutput,locations:s.locations,_meta:s._meta},c=this.resolveToolCall(d),l={timestamp:i,type:"tool_use",toolUseId:s.toolCallId,toolName:c.toolName,toolInput:c.toolInput};n?.onTaskLog?.([l]);}}else o.sessionUpdate;}pushBlockBoundary(e){e.length===0||e[e.length-1].endsWith(`
|
|
33
33
|
|
|
34
34
|
`)||e.push(`
|
|
35
35
|
|
|
36
|
-
`);}resolveToolCall(e){let n=e._meta;if(n?.claudeCode?.toolName)return {toolName:n.claudeCode.toolName,toolInput:
|
|
37
|
-
`)}if(typeof e=="object"){let n=e;if(typeof n.formatted_output=="string")return n.formatted_output;if(typeof n.content=="string")return n.content;if(Array.isArray(n.content)){let r=this.extractResultPreview(n.content);if(r)return r}if(typeof n.output=="string")return n.output;if(typeof n.text=="string")return n.text;if(typeof n.message=="string")return n.message;if(n.result!=null){let r=this.extractResultPreview(n.result);if(r)return r}if(n.error!=null){let r=this.extractResultPreview(n.error);if(r)return r}}return JSON.stringify(e)}}handleUsage(e,n){if(!n?.onUsage)return;if(this.adapter.extractUsage){let o=this.adapter.extractUsage(e);if(o){n.onUsage(o);return}}let r=e.usage;r&&n.onUsage({inputTokens:r.inputTokens??0,outputTokens:r.outputTokens??0,cachedInputTokens:r.cachedReadTokens??0,costUsd:0});}};});exports.claudeAcpAdapter=void 0;var es=L(()=>{u();Et();exports.claudeAcpAdapter={spawn:{command:"npx",args:["-y","@agentclientprotocol/claude-agent-acp"],shellOnWindows:true},npmPackage:"@agentclientprotocol/claude-agent-acp",clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Claude",defaultMode:"default"},buildSessionParams(t){return {cwd:t.cwd??process.cwd(),mcpServers:[]}},extractUsage(t){let e=t.usage;return e?{inputTokens:(e.inputTokens??0)+(e.cachedReadTokens??0),outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"bypassPermissions",buildEffortAction(t){return t?{type:"set_config_option",configId:"effort",value:t}:null},buildSpawnEnv(t){if(!(!t||t==="default"))return {ANTHROPIC_MODEL:t}},resolveMode(t){return {yolo:"bypassPermissions"}[t]??t},parseEvent:qe};});exports.codexAcpAdapter=void 0;var ts=L(()=>{u();Et();exports.codexAcpAdapter={spawn:{command:"npx",args:["-y","@agentclientprotocol/codex-acp"],shellOnWindows:true},npmPackage:"@agentclientprotocol/codex-acp",clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Codex",defaultMode:"agent"},buildSessionParams(t){return {cwd:t.cwd??process.cwd(),mcpServers:[]}},extractUsage(t){let e=t.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(t,e){if(!e)return null;let n=e.match(/^(.+?)\[([^\]]+)\]$/),r=n?n[1]:e,o=n?n[2]:void 0;return {type:"set_model",modelId:`${r}[${t||o||"medium"}]`}},resolveMode(t){return {yolo:"agent-full-access",default:"agent",plan:"read-only"}[t]??t},parseEvent:qe};});var gn;exports.copilotAcpAdapter=void 0;var ns=L(()=>{u();Et();gn="https://agentclientprotocol.com/protocol/session-modes",exports.copilotAcpAdapter={spawn:{command:"copilot",args:["--acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"GitHub Copilot"},buildSessionParams(t){return {cwd:t.cwd?Y.resolve(t.cwd):process.cwd(),mcpServers:[]}},yoloModeId:`${gn}#autopilot`,buildEffortAction(t){return t?{type:"set_config_option",configId:"reasoning_effort",value:t}:null},resolveMode(t){return t.startsWith("https://")?t:{yolo:`${gn}#autopilot`,default:`${gn}#agent`,agent:`${gn}#agent`,plan:`${gn}#plan`,autopilot:`${gn}#autopilot`}[t]??null},parseEvent:qe};});exports.opencodeAcpAdapter=void 0;var rs=L(()=>{u();Et();exports.opencodeAcpAdapter={spawn:{command:"opencode",args:["acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"OpenCode"},buildSessionParams(t){return {cwd:t.cwd??process.cwd(),mcpServers:[]}},buildEffortAction(t){return null},resolveMode(t){return t},parseEvent:qe};});exports.ACP_ADAPTERS=void 0;var Eo=L(()=>{u();es();ts();ns();rs();es();ts();ns();rs();exports.ACP_ADAPTERS={codex:exports.codexAcpAdapter,claude:exports.claudeAcpAdapter,opencode:exports.opencodeAcpAdapter,copilot:exports.copilotAcpAdapter};});var Xd={};br(Xd,{registerAcpProviders:()=>Jd});function Jd(t){if(t){ut("acp",t);return}ut("acp",(e,n)=>{let r=exports.ACP_ADAPTERS[e];if(!r)throw new exports.ProviderError(`Unknown ACP provider id: "${e}". Supported: ${Object.keys(exports.ACP_ADAPTERS).join(", ")}`,n);return new exports.AcpProviderRuntime(e,r,n)});}var os=L(()=>{u();Xe();Zi();Eo();Xe();});function _m(t){if(!t)return t;let e=t.trim().replace(/\/+$/,"");return e.toLowerCase().endsWith("/mcp")?e.slice(0,-4):e}exports.McpHttpTransport=void 0;var is=L(()=>{u();exports.McpHttpTransport=class{endpoint;headers;timeoutMs;constructor(e){let n=_m(e.url);this.endpoint=`${n}/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 n=new AbortController,r=setTimeout(()=>n.abort(),this.timeoutMs);try{let o=await fetch(this.endpoint,{method:"POST",headers:this.headers,body:JSON.stringify(e),signal:n.signal});if(clearTimeout(r),!o.ok){let a=await o.text();throw new Error(`HTTP ${o.status}: ${o.statusText}${a?` - ${a}`:""}`)}let i=o.headers.get("content-type");if(i?.includes("application/json"))return await o.json();let s=await o.text();return {jsonrpc:"2.0",id:e.id,error:{code:-32600,message:`Unexpected response content-type: ${i}`,data:s}}}catch(o){throw clearTimeout(r),o instanceof Error&&o.name==="AbortError"?new Error(`MCP-HTTP request timeout after ${this.timeoutMs}ms to ${this.endpoint}`):o}}async close(){}};});exports.RemoteAgentManager=void 0;var ss=L(()=>{u();is();exports.RemoteAgentManager=class{logger;configs=new Map;transports=new Map;constructor(e={}){this.logger=e.logger??(()=>{});}loadConfig(e,n){this.validateConfig(n),this.configs.set(e,n),this.transports.set(e,new exports.McpHttpTransport({url:n.url,apiKey:n.apiKey,headers:n.headers,timeoutMs:n.timeoutMs})),this.logger(`Loaded remote agent config for: ${e}`,"debug");}loadConfigWithTransport(e,n,r){this.validateConfig(n),this.configs.set(e,n),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,n){let r=this.requireConfig(e),o=r.tools?.query??"crewx_queryAgent",s={agentId:r.agentId??e,query:n.query};n.context&&(s.context=n.context),n.model&&(s.model=n.model),n.platform&&(s.platform=n.platform),n.messages?.length&&(s.messages=n.messages);try{let a=await this.callRemoteTool(e,o,s);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,n){let r=this.requireConfig(e),o=r.tools?.execute??"crewx_executeAgent",s={agentId:r.agentId??e,task:n.task};n.context&&(s.context=n.context),n.model&&(s.model=n.model),n.platform&&(s.platform=n.platform),n.messages?.length&&(s.messages=n.messages);try{let a=await this.callRemoteTool(e,o,s);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,n){let r=this.requireConfig(e);r.tools={query:n.query??r.tools?.query??"crewx_queryAgent",execute:n.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 n=this.configs.get(e);if(!n)throw new Error(`Agent ${e} is not configured as a remote agent`);return n}async callRemoteTool(e,n,r){let o=this.transports.get(e);if(!o)throw new Error(`No transport available for agent ${e}`);let i={jsonrpc:"2.0",id:`${n}-${Date.now()}`,method:"tools/call",params:{name:n,arguments:r}};this.logger(`Calling remote MCP tool ${n} for agent ${e}`,"debug");let s=await o.send(i);if(s.error)throw new Error(s.error.message||"MCP server returned an error");return s.result}normalizeResponse(e){if(!e)return {success:false,content:[{type:"text",text:"Remote agent returned no response."}]};let n=e;if(Array.isArray(n.content)&&n.content.length>0)return n;let r=n.response??n.implementation??n.message??n.output,o=typeof r=="string"?r:JSON.stringify(r??e,null,2);return {...n,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 Qd={};br(Qd,{RemoteProviderRuntime:()=>exports.RemoteProviderRuntime,createRemoteProviderFactory:()=>Yd,resolveFileRemoteAgent:()=>xm});function Rm(t){let e=fd.readFileSync(t,"utf-8"),n=jsYaml.load(e);return {agents:Array.isArray(n?.agents)?n.agents:void 0}}function Tm(t){let e=Array.isArray(t.provider)?t.provider[0]:t.provider;return e||(Array.isArray(t.inline?.provider)?t.inline.provider[0]:t.inline?.provider)}function xm(t,e=Rm,n=fd.existsSync){let r=t.location.replace("file://","");if(!n(r))throw new Error(`Remote config file not found: ${r}`);if(!t.external_agent_id)throw new Error(`external_agent_id is required for file:// remote provider "${t.id}"`);let i=e(r).agents?.find(d=>d.id===t.external_agent_id);if(!i)throw new Error(`Agent "${t.external_agent_id}" not found in ${r}`);let s=Tm(i);if(!s)throw new Error(`Agent "${t.external_agent_id}" in ${r} has no provider configured`);if(s.startsWith("remote/"))throw new Error(`Chained remotes not allowed: ${t.id} \u2192 ${s}`);let a=Y.resolve(Y.dirname(r),i.working_directory??".");return {agent:{...i,working_directory:a},provider:s}}function Yd(t,e=pt){return (n,r)=>{let o=t.get(n);if(!o)throw new Error(`Remote provider "${n}" not found. Available: ${Array.from(t.keys()).join(", ")||"(none)"}`);if(o.location.startsWith("file://"))throw new Error(`Remote provider "${n}" uses file:// location which is not supported at the SDK level. Use the CLI commands (crewx query / crewx execute) which handle file:// remotes automatically.`);return new exports.RemoteProviderRuntime(n,o,e)}}function Am(t,e){let n=e.location;if(!n)throw new Error("Remote provider config requires a location");if(!n.startsWith("http://")&&!n.startsWith("https://"))throw new Error(`Unsupported remote location protocol for MCP-HTTP: ${n}`);return {type:"mcp-http",url:n,apiKey:e.apiKey,headers:e.headers,timeoutMs:e.timeout?.query??3e4,agentId:e.external_agent_id??t}}exports.RemoteProviderRuntime=void 0;var as=L(()=>{u();Xe();ss();exports.RemoteProviderRuntime=class{manager;agentId;constructor(e,n,r=pt){this.agentId=n.external_agent_id??e,this.manager=new exports.RemoteAgentManager;let o=Am(e,n);this.manager.loadConfig(this.agentId,o);}async query(e,n){return (await this.manager.query(this.agentId,{agentId:this.agentId,query:e,model:n?.model,context:n?.context??n?.systemPrompt})).content.map(o=>o.text).join(`
|
|
36
|
+
`);}resolveToolCall(e){let n=e._meta;if(n?.claudeCode?.toolName)return {toolName:n.claudeCode.toolName,toolInput:tc(e.rawInput,e.locations)??(e.title||void 0)};if(this.adapter.parseToolCall){let i=this.adapter.parseToolCall(e);if(i)return {toolName:i.toolName??e.title??"unknown",toolInput:i.toolInput}}let r=Tm[e.kind??""]??e.title??"unknown",o=tc(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 n=e.filter(r=>r!=null&&typeof r=="object"&&r.type==="text"&&typeof r.text=="string").map(r=>r.text);if(n.length>0)return n.join(`
|
|
37
|
+
`)}if(typeof e=="object"){let n=e;if(typeof n.formatted_output=="string")return n.formatted_output;if(typeof n.content=="string")return n.content;if(Array.isArray(n.content)){let r=this.extractResultPreview(n.content);if(r)return r}if(typeof n.output=="string")return n.output;if(typeof n.text=="string")return n.text;if(typeof n.message=="string")return n.message;if(n.result!=null){let r=this.extractResultPreview(n.result);if(r)return r}if(n.error!=null){let r=this.extractResultPreview(n.error);if(r)return r}}return JSON.stringify(e)}}handleUsage(e,n){if(!n?.onUsage)return;if(this.adapter.extractUsage){let o=this.adapter.extractUsage(e);if(o){n.onUsage(o);return}}let r=e.usage;r&&n.onUsage({inputTokens:r.inputTokens??0,outputTokens:r.outputTokens??0,cachedInputTokens:r.cachedReadTokens??0,costUsd:0});}};});exports.claudeAcpAdapter=void 0;var is=L(()=>{u();It();exports.claudeAcpAdapter={spawn:{command:"npx",args:["-y","@agentclientprotocol/claude-agent-acp"],shellOnWindows:true},npmPackage:"@agentclientprotocol/claude-agent-acp",clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Claude",defaultMode:"default"},buildSessionParams(t){return {cwd:t.cwd??process.cwd(),mcpServers:[]}},extractUsage(t){let e=t.usage;return e?{inputTokens:(e.inputTokens??0)+(e.cachedReadTokens??0),outputTokens:e.outputTokens??0,cachedInputTokens:e.cachedReadTokens??0,costUsd:0}:null},yoloModeId:"bypassPermissions",buildEffortAction(t){return t?{type:"set_config_option",configId:"effort",value:t}:null},buildSpawnEnv(t){if(!(!t||t==="default"))return {ANTHROPIC_MODEL:t}},resolveMode(t){return {yolo:"bypassPermissions"}[t]??t},parseEvent:He};});exports.codexAcpAdapter=void 0;var ss=L(()=>{u();It();exports.codexAcpAdapter={spawn:{command:"npx",args:["-y","@agentclientprotocol/codex-acp"],shellOnWindows:true},npmPackage:"@agentclientprotocol/codex-acp",clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"Codex",defaultMode:"agent"},buildSessionParams(t){return {cwd:t.cwd??process.cwd(),mcpServers:[]}},extractUsage(t){let e=t.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(t,e){if(!e)return null;let n=e.match(/^(.+?)\[([^\]]+)\]$/),r=n?n[1]:e,o=n?n[2]:void 0;return {type:"set_model",modelId:`${r}[${t||o||"medium"}]`}},resolveMode(t){return {yolo:"agent-full-access",default:"agent",plan:"read-only"}[t]??t},parseEvent:He};});var gn;exports.copilotAcpAdapter=void 0;var as=L(()=>{u();It();gn="https://agentclientprotocol.com/protocol/session-modes",exports.copilotAcpAdapter={spawn:{command:"copilot",args:["--acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"GitHub Copilot"},buildSessionParams(t){return {cwd:t.cwd?X.resolve(t.cwd):process.cwd(),mcpServers:[]}},yoloModeId:`${gn}#autopilot`,buildEffortAction(t){return t?{type:"set_config_option",configId:"reasoning_effort",value:t}:null},resolveMode(t){return t.startsWith("https://")?t:{yolo:`${gn}#autopilot`,default:`${gn}#agent`,agent:`${gn}#agent`,plan:`${gn}#plan`,autopilot:`${gn}#autopilot`}[t]??null},parseEvent:He};});exports.opencodeAcpAdapter=void 0;var ds=L(()=>{u();It();exports.opencodeAcpAdapter={spawn:{command:"opencode",args:["acp"],shellOnWindows:false},clientInfo:{name:"crewx-sdk",version:"0.8.4"},meta:{displayName:"OpenCode"},buildSessionParams(t){return {cwd:t.cwd??process.cwd(),mcpServers:[]}},buildEffortAction(t){return null},resolveMode(t){return t},parseEvent:He};});exports.ACP_ADAPTERS=void 0;var To=L(()=>{u();is();ss();as();ds();is();ss();as();ds();exports.ACP_ADAPTERS={codex:exports.codexAcpAdapter,claude:exports.claudeAcpAdapter,opencode:exports.opencodeAcpAdapter,copilot:exports.copilotAcpAdapter};});var rc={};Tr(rc,{registerAcpProviders:()=>nc});function nc(t){if(t){pt("acp",t);return}pt("acp",(e,n)=>{let r=exports.ACP_ADAPTERS[e];if(!r)throw new exports.ProviderError(`Unknown ACP provider id: "${e}". Supported: ${Object.keys(exports.ACP_ADAPTERS).join(", ")}`,n);return new exports.AcpProviderRuntime(e,r,n)});}var cs=L(()=>{u();Xe();os();To();Xe();});function Am(t){if(!t)return t;let e=t.trim().replace(/\/+$/,"");return e.toLowerCase().endsWith("/mcp")?e.slice(0,-4):e}exports.McpHttpTransport=void 0;var ls=L(()=>{u();exports.McpHttpTransport=class{endpoint;headers;timeoutMs;constructor(e){let n=Am(e.url);this.endpoint=`${n}/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 n=new AbortController,r=setTimeout(()=>n.abort(),this.timeoutMs);try{let o=await fetch(this.endpoint,{method:"POST",headers:this.headers,body:JSON.stringify(e),signal:n.signal});if(clearTimeout(r),!o.ok){let a=await o.text();throw new Error(`HTTP ${o.status}: ${o.statusText}${a?` - ${a}`:""}`)}let i=o.headers.get("content-type");if(i?.includes("application/json"))return await o.json();let s=await o.text();return {jsonrpc:"2.0",id:e.id,error:{code:-32600,message:`Unexpected response content-type: ${i}`,data:s}}}catch(o){throw clearTimeout(r),o instanceof Error&&o.name==="AbortError"?new Error(`MCP-HTTP request timeout after ${this.timeoutMs}ms to ${this.endpoint}`):o}}async close(){}};});exports.RemoteAgentManager=void 0;var us=L(()=>{u();ls();exports.RemoteAgentManager=class{logger;configs=new Map;transports=new Map;constructor(e={}){this.logger=e.logger??(()=>{});}loadConfig(e,n){this.validateConfig(n),this.configs.set(e,n),this.transports.set(e,new exports.McpHttpTransport({url:n.url,apiKey:n.apiKey,headers:n.headers,timeoutMs:n.timeoutMs})),this.logger(`Loaded remote agent config for: ${e}`,"debug");}loadConfigWithTransport(e,n,r){this.validateConfig(n),this.configs.set(e,n),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,n){let r=this.requireConfig(e),o=r.tools?.query??"crewx_queryAgent",s={agentId:r.agentId??e,query:n.query};n.context&&(s.context=n.context),n.model&&(s.model=n.model),n.platform&&(s.platform=n.platform),n.messages?.length&&(s.messages=n.messages);try{let a=await this.callRemoteTool(e,o,s);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,n){let r=this.requireConfig(e),o=r.tools?.execute??"crewx_executeAgent",s={agentId:r.agentId??e,task:n.task};n.context&&(s.context=n.context),n.model&&(s.model=n.model),n.platform&&(s.platform=n.platform),n.messages?.length&&(s.messages=n.messages);try{let a=await this.callRemoteTool(e,o,s);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,n){let r=this.requireConfig(e);r.tools={query:n.query??r.tools?.query??"crewx_queryAgent",execute:n.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 n=this.configs.get(e);if(!n)throw new Error(`Agent ${e} is not configured as a remote agent`);return n}async callRemoteTool(e,n,r){let o=this.transports.get(e);if(!o)throw new Error(`No transport available for agent ${e}`);let i={jsonrpc:"2.0",id:`${n}-${Date.now()}`,method:"tools/call",params:{name:n,arguments:r}};this.logger(`Calling remote MCP tool ${n} for agent ${e}`,"debug");let s=await o.send(i);if(s.error)throw new Error(s.error.message||"MCP server returned an error");return s.result}normalizeResponse(e){if(!e)return {success:false,content:[{type:"text",text:"Remote agent returned no response."}]};let n=e;if(Array.isArray(n.content)&&n.content.length>0)return n;let r=n.response??n.implementation??n.message??n.output,o=typeof r=="string"?r:JSON.stringify(r??e,null,2);return {...n,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 ic={};Tr(ic,{RemoteProviderRuntime:()=>exports.RemoteProviderRuntime,createRemoteProviderFactory:()=>oc,resolveFileRemoteAgent:()=>Lm});function Nm(t){let e=kd.readFileSync(t,"utf-8"),n=jsYaml.load(e);return {agents:Array.isArray(n?.agents)?n.agents:void 0}}function Dm(t){let e=Array.isArray(t.provider)?t.provider[0]:t.provider;return e||(Array.isArray(t.inline?.provider)?t.inline.provider[0]:t.inline?.provider)}function Lm(t,e=Nm,n=kd.existsSync){let r=t.location.replace("file://","");if(!n(r))throw new Error(`Remote config file not found: ${r}`);if(!t.external_agent_id)throw new Error(`external_agent_id is required for file:// remote provider "${t.id}"`);let i=e(r).agents?.find(d=>d.id===t.external_agent_id);if(!i)throw new Error(`Agent "${t.external_agent_id}" not found in ${r}`);let s=Dm(i);if(!s)throw new Error(`Agent "${t.external_agent_id}" in ${r} has no provider configured`);if(s.startsWith("remote/"))throw new Error(`Chained remotes not allowed: ${t.id} \u2192 ${s}`);let a=X.resolve(X.dirname(r),i.working_directory??".");return {agent:{...i,working_directory:a},provider:s}}function oc(t,e=ft){return (n,r)=>{let o=t.get(n);if(!o)throw new Error(`Remote provider "${n}" not found. Available: ${Array.from(t.keys()).join(", ")||"(none)"}`);if(o.location.startsWith("file://"))throw new Error(`Remote provider "${n}" uses file:// location which is not supported at the SDK level. Use the CLI commands (crewx query / crewx execute) which handle file:// remotes automatically.`);return new exports.RemoteProviderRuntime(n,o,e)}}function Mm(t,e){let n=e.location;if(!n)throw new Error("Remote provider config requires a location");if(!n.startsWith("http://")&&!n.startsWith("https://"))throw new Error(`Unsupported remote location protocol for MCP-HTTP: ${n}`);return {type:"mcp-http",url:n,apiKey:e.apiKey,headers:e.headers,timeoutMs:e.timeout?.query??3e4,agentId:e.external_agent_id??t}}exports.RemoteProviderRuntime=void 0;var ps=L(()=>{u();Xe();us();exports.RemoteProviderRuntime=class{manager;agentId;constructor(e,n,r=ft){this.agentId=n.external_agent_id??e,this.manager=new exports.RemoteAgentManager;let o=Mm(e,n);this.manager.loadConfig(this.agentId,o);}async query(e,n){return (await this.manager.query(this.agentId,{agentId:this.agentId,query:e,model:n?.model,context:n?.context??n?.systemPrompt})).content.map(o=>o.text).join(`
|
|
38
38
|
`)}async execute(e,n){return (await this.manager.execute(this.agentId,{agentId:this.agentId,task:e,model:n?.model,context:n?.context??n?.systemPrompt})).content.map(o=>o.text).join(`
|
|
39
|
-
`)}};});var
|
|
39
|
+
`)}};});var cc={};Tr(cc,{PluginProviderRuntime:()=>exports.PluginProviderRuntime,createPluginProviderFactory:()=>dc});function dc(t){return (e,n)=>{let r=t.get(e);if(!r)throw new exports.ProviderError(`Plugin provider "${e}" not found. Available: ${Array.from(t.keys()).join(", ")||"(none)"}`,`plugin/${e}`);return new exports.PluginProviderRuntime(e,r)}}function sc(t,e,n,r){let o=t.map(i=>i.replace(/\{model\}/g,e));return r&&o.push(n),o}function jm(t){if(!t||typeof t!="string")throw new Error("Plugin provider requires a cli_command")}function ac(t){if(!Array.isArray(t))throw new Error("CLI arguments must be an array");for(let e of t)if(typeof e!="string")throw new Error("Each CLI argument must be a string")}function $m(t){for(let{pattern:e}of t)if(typeof e!="string")throw new Error("Error pattern must be a string")}function Bm(t){for(let[e,n]of Object.entries(t))if(typeof e!="string"||typeof n!="string")throw new Error("env entries must be string key/value pairs")}exports.PluginProviderRuntime=void 0;var fs=L(()=>{u();Xe();rn();exports.PluginProviderRuntime=class{constructor(e,n){this.config=n;this.providerStr=`plugin/${e}`,jm(n.cli_command),ac(n.query_args),ac(n.execute_args),n.error_patterns&&$m(n.error_patterns),n.env&&Bm(n.env);}config;providerStr;async query(e,n){let r=n?.model??this.config.default_model??"default",o=sc(this.config.query_args,r,e,this.config.prompt_in_args),i=this.config.prompt_in_args?void 0:e;n?.onCommand?.(`${this.config.cli_command} ${o.join(" ")}`);let s=this.config.timeout?.query??6e5;return this.runProcess(o,n,i,s)}async execute(e,n){let r=n?.model??this.config.default_model??"default",o=sc(this.config.execute_args,r,e,this.config.prompt_in_args),i=this.config.prompt_in_args?void 0:e;n?.onCommand?.(`${this.config.cli_command} ${o.join(" ")}`);let s=this.config.timeout?.execute??6e5;return this.runProcess(o,n,i,s)}runProcess(e,n,r,o){return new Promise((i,s)=>{let a={...process.env,...this.config.env??{}},d=$t({command:this.config.cli_command,env:a,cwd:process.cwd(),resolution:this.config.prefer_local_bin?"local_first":"global_first",allowShellFallback:true}),c=Bt(d,e),l=child_process.spawn(c.command,c.argv,{env:a,shell:c.shell??false,stdio:["pipe","pipe","pipe"],windowsHide:c.windowsHide});r!==void 0&&l.stdin.write(r),l.stdin.end(),l.pid!==void 0&&n?.onPid?.(l.pid);let f="",g="",m="",k="";l.stdout.on("data",v=>{let _=v.toString();f+=_,m+=_;let w=m.split(`
|
|
40
40
|
`);m=w.pop()??"";for(let T of w)T.trim()&&n?.onOutput?.(T,"stdout");}),l.stderr.on("data",v=>{let _=v.toString();g+=_,k+=_;let w=k.split(`
|
|
41
|
-
`);k=w.pop()??"";for(let T of w)T.trim()&&n?.onOutput?.(T,"stderr");});let h=setTimeout(()=>{l.kill("SIGTERM"),s(new exports.ProviderError(`Plugin provider "${this.providerStr}" timed out after ${o}ms`,this.providerStr));},o);l.on("error",v=>{if(clearTimeout(h),v.code==="ENOENT"){let _=this.config.not_installed_message??`CLI command "${this.config.cli_command}" not found. Is ${this.config.id} installed?`;s(new exports.ProviderError(_,this.providerStr));}else s(new exports.ProviderError(`Spawn error: ${v.message}`,this.providerStr));}),l.on("close",v=>{clearTimeout(h),m.trim()&&n?.onOutput?.(m,"stdout"),k.trim()&&n?.onOutput?.(k,"stderr");let _=v??0;if(n?.onExitCode?.(_),this.config.error_patterns){let w=g||f;for(let T of this.config.error_patterns)if(w.includes(T.pattern)){s(new exports.ProviderError(T.message,this.providerStr));return}}if(v!==0){s(new exports.ProviderError(`Process exited with code ${v}: ${g.slice(0,500)}`,this.providerStr));return}i(f.trim());});})}};});u();u();u();function
|
|
41
|
+
`);k=w.pop()??"";for(let T of w)T.trim()&&n?.onOutput?.(T,"stderr");});let h=setTimeout(()=>{l.kill("SIGTERM"),s(new exports.ProviderError(`Plugin provider "${this.providerStr}" timed out after ${o}ms`,this.providerStr));},o);l.on("error",v=>{if(clearTimeout(h),v.code==="ENOENT"){let _=this.config.not_installed_message??`CLI command "${this.config.cli_command}" not found. Is ${this.config.id} installed?`;s(new exports.ProviderError(_,this.providerStr));}else s(new exports.ProviderError(`Spawn error: ${v.message}`,this.providerStr));}),l.on("close",v=>{clearTimeout(h),m.trim()&&n?.onOutput?.(m,"stdout"),k.trim()&&n?.onOutput?.(k,"stderr");let _=v??0;if(n?.onExitCode?.(_),this.config.error_patterns){let w=g||f;for(let T of this.config.error_patterns)if(w.includes(T.pattern)){s(new exports.ProviderError(T.message,this.providerStr));return}}if(v!==0){s(new exports.ProviderError(`Process exited with code ${v}: ${g.slice(0,500)}`,this.providerStr));return}i(f.trim());});})}};});u();u();u();function ol(t){let e=o=>o.replace(/[.+^${}()|[\]\\]/g,"\\$&"),r=t.split("/").map(o=>o==="**"?".*":o.split("*").map(e).join("[^/]*"));return new RegExp(`^${r.join("\\/")}$`)}function Ke(t,e){try{return ol(e).test(t)}catch{return false}}u();u();u();Ae();var Ys=60,Ir=30,Sr=80,Wo="o200k_base",yl=`
|
|
42
42
|
|
|
43
43
|
---
|
|
44
44
|
|
|
45
|
-
`,
|
|
46
|
-
`+(n?` package anchor: ${
|
|
45
|
+
`,Pr="system_prompt\\n\\n---\\n\\nmessage",zo="message",_l=16384,wl=Object.keys(Ho__default.default.special_tokens),Ks,Js;function Xs(){return Ks??=jsTiktoken.getEncoding(Wo),Ks}function kl(){return Js??=new lite.Tiktoken(Ho__default.default),Js}function vl(t){return wl.some(e=>t.includes(e))}function El(t){return t===void 0?_l:!Number.isFinite(t)||t<=0?0:Math.floor(t)}function bl(t={}){let e=El(t.pieceCacheMaxEntries),n=new Map,r=t.observePieceCache;return o=>{if(vl(o))return r?.({type:"full_encode",reason:"special_token"}),Xs().encode(o).length;let i=0,s=new RegExp(Ho__default.default.pat_str,"ug");for(let a of o.matchAll(s)){let d=a[0],c=n.get(d);if(c!==void 0){n.delete(d),n.set(d,c),r?.({type:"hit",piece:d,tokenCount:c}),i+=c;continue}let l=kl().encode(d).length;if(r?.({type:"miss",piece:d,tokenCount:l}),e>0){if(n.size>=e){let f=n.keys().next().value;if(f!==void 0){let g=n.get(f);n.delete(f),r?.({type:"evict",piece:f,tokenCount:g});}}n.set(d,l);}i+=l;}return i}}function Go(t){let e=t.trim(),n=e.indexOf("/");return n===-1?e:e.slice(n+1)}function Rl(t){if(t===void 0)return Ys;if(!(!Number.isFinite(t)||!Number.isInteger(t))&&!(t<Ir||t>Sr))return t}function Tl(t){return typeof t=="number"&&Number.isInteger(t)&&t>0}function xl(t){return /^gpt-5(?:$|[.-])/.test(t)}function Cr(t={}){let e=t.provider?Go(t.provider):"",n=t.model??"",r={provider:e,model:n,encoding:Wo,exact:xl(n)};return r.exact||(r.fallbackReason="vendor_tokenizer_unavailable"),r}function Or(t,e={}){return {tokenCount:Xs().encode(t).length,tokenizer:Cr(e)}}function Al(t){let e=t.systemPrompt??"";return e?`${e}${yl}${t.message}`:t.message}function Vo(t,e){return e(Al(t))}function Il(t={},e={}){let n=Cr(t),r=bl(e);return {metadata:n,countTokens:r}}function Ko(t={}){return Il(t)}function Nr(t){let e=t.provider,n=Go(e),r=Cr({provider:n,model:t.model}),o=Rl(t.inputBudgetPercent);if(o===void 0)return {resolved:false,requestedProvider:e,provider:n,model:t.model,reason:"invalid_input_budget_percent",tokenizer:r};let i=je(n);if(i.models.length===0)return {resolved:false,requestedProvider:e,provider:n,model:t.model,inputBudgetPercent:o,reason:"provider_catalog_unavailable",tokenizer:r};let s=i.models.find(a=>a.id===t.model);return s?Tl(s.contextWindowTokens)?{resolved:true,requestedProvider:e,provider:n,model:t.model,contextWindowTokens:s.contextWindowTokens,inputBudgetPercent:o,inputBudgetTokens:Math.floor(s.contextWindowTokens*o/100),tokenizer:r}:{resolved:false,requestedProvider:e,provider:n,model:t.model,inputBudgetPercent:o,reason:"context_window_tokens_unavailable",tokenizer:r}:{resolved:false,requestedProvider:e,provider:n,model:t.model,inputBudgetPercent:o,reason:"model_not_found",tokenizer:r}}var Pl=zod.z.object({model:zod.z.string().optional(),system_prompt:zod.z.string().optional(),prompt:zod.z.string().optional(),layout:zod.z.union([zod.z.string(),zod.z.object({id:zod.z.string(),props:zod.z.record(zod.z.unknown()).optional()}),zod.z.object({props:zod.z.record(zod.z.unknown())}),zod.z.object({template:zod.z.string()})]).optional()}).catchall(zod.z.unknown()),Qs=zod.z.object({include:zod.z.array(zod.z.string()).optional()}).optional(),Cl=zod.z.object({id:zod.z.string(),name:zod.z.string().optional(),role:zod.z.string().optional(),team:zod.z.string().optional(),provider:zod.z.union([zod.z.string(),zod.z.array(zod.z.string())]),working_directory:zod.z.string().optional(),description:zod.z.string().optional(),tags:zod.z.array(zod.z.string()).optional(),inline:Pl.optional(),skills:Qs}).catchall(zod.z.unknown()),Ol=zod.z.object({id:zod.z.string(),name:zod.z.string(),workflow_id:zod.z.string(),description:zod.z.string().optional(),goal_id:zod.z.string().optional()}),Nl=zod.z.number().finite().int().min(Ir).max(Sr),Dl=zod.z.object({inputBudgetPercent:Nl.optional()}).catchall(zod.z.unknown()),Ll=zod.z.object({continuity:Dl.optional()}).catchall(zod.z.unknown()),Ml=zod.z.object({bin_resolution:zod.z.enum(["global_first","local_first"]).optional(),dreaming:Ll.optional(),wi:zod.z.object({boards:zod.z.array(zod.z.unknown()).optional().catch(()=>{})}).catchall(zod.z.unknown()).optional().catch(()=>{})}).catchall(zod.z.unknown()),Zs=zod.z.object({agents:zod.z.array(Cl).optional(),hooks:zod.z.array(zod.z.unknown()).optional(),settings:Ml.optional(),skills:zod.z.unknown().optional(),layouts:zod.z.record(zod.z.unknown()).optional(),documents:zod.z.record(zod.z.unknown()).optional()}).catchall(zod.z.unknown());var Lt=class extends Error{constructor(n,r){super(n);this.cause=r;this.name="ConfigLoadError";}cause};function Dr(t){if(!t||typeof t!="string"||!t.trim())throw new Lt("YAML content must be a non-empty string");let e;try{e=jsYaml.load(t);}catch(o){throw new Lt(`YAML parse error: ${o.message}`,o)}let n=$l(e),r=Zs.safeParse(n);if(!r.success)throw new Lt(`Config validation error: ${r.error.message}`);return r.data}function Lr(t){let e;try{e=kd.readFileSync(t,"utf-8");}catch(n){throw new Lt(`Cannot read file: ${t}`,n)}return Dr(e)}function $l(t){if(!t||typeof t!="object")return {agents:[]};let e=t,n;if(e.agents&&typeof e.agents=="object"&&!Array.isArray(e.agents)){let o=e.agents;n=Object.entries(o).map(([i,s])=>({id:i,...s&&typeof s=="object"?s:{}}));}else if(Array.isArray(e.agents))n=e.agents;else return {...e,agents:[]};let r=n.map(o=>{if(o.provider===void 0&&o.inline&&typeof o.inline=="object"){let i=o.inline;if(i.provider!==void 0)return {...o,provider:i.provider}}return o});return {...e,agents:r}}u();function Mt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function ea(t,e){let n={...t};for(let[r,o]of Object.entries(e))Mt(o)&&Mt(n[r])?n[r]=ea(n[r],o):n[r]=o;return n}function Jo(t){let e=t?.filePath??X.join(Ki.homedir(),".crewx","crewx.yaml"),n={mkdirSync:kd.mkdirSync,readFileSync:kd.readFileSync,renameSync:kd.renameSync,statSync:kd.statSync,writeFileSync:kd.writeFileSync,...t?.fileSystem??{}},r=null,o=null;function i(){try{return n.statSync(e).mtimeMs}catch{return null}}function s(){let d=i();if(d===null)return r=null,o=null,{};if(o!==null&&r===d)return o;let c=null;try{c=jsYaml.load(n.readFileSync(e,"utf-8"));}catch{c=null;}let l=Mt(c)?c:{};return o=l,r=d,l}return {get path(){return e},read(){let d=s();return Mt(d.settings)?d.settings:{}},update(d){let c=s(),l=Mt(c.settings)?c.settings:{},f=ea(l,d),g={...c,settings:f};return a(g),f},set(d,c){let l=s(),g={...Mt(l.settings)?l.settings:{},[d]:c};return a({...l,settings:g}),g},remove(d){let c=s(),l=Mt(c.settings)?c.settings:{};if(!Object.prototype.hasOwnProperty.call(l,d))return l;let f={...l};return delete f[d],a({...c,settings:f}),f}};function a(d){n.mkdirSync(X.dirname(e),{recursive:true});let c=`${e}.tmp`;n.writeFileSync(c,jsYaml.dump(d)),n.renameSync(c,e),r=null,o=null;}}u();var Ut=X.join("templates","agents"),jt=X.join("templates","workflows");function ta(){try{let e=(typeof _e=="function"?_e:module$1.createRequire(typeof __filename<"u"?__filename:process.cwd()+"/")).resolve("@crewx/sdk/package.json");return X.dirname(e)}catch{return null}}function tn(t){if(t&&kd.existsSync(t))return t;let e=process.env.CREWX_SDK_TEMPLATES_PATH;if(e&&kd.existsSync(e))return e;let n=ta();if(n){let o=X.join(n,Ut);if(kd.existsSync(o))return o}let r=[X.join(__dirname,"..",Ut),X.join(__dirname,"..","..",Ut),X.join(__dirname,"..","..","..",Ut),X.join(process.cwd(),"packages","sdk",Ut),X.join(process.cwd(),Ut)];for(let o of r)if(kd.existsSync(o))return o;throw new Error(`[@crewx/sdk] Templates directory not found.
|
|
46
|
+
`+(n?` package anchor: ${X.join(n,Ut)}
|
|
47
47
|
`:` package anchor: (unresolved)
|
|
48
48
|
`)+r.map(o=>` candidate: ${o}`).join(`
|
|
49
49
|
`)+`
|
|
50
|
-
Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function
|
|
51
|
-
`+(n?` package anchor: ${
|
|
50
|
+
Set CREWX_SDK_TEMPLATES_PATH or pass options.templatesPath.`)}function Yo(){let t=tn();return {yamlPath:X.join(t,"default.yaml"),dir:t}}function Ql(t){if(t&&kd.existsSync(t))return t;let e=process.env.CREWX_SDK_WORKFLOW_TEMPLATES_PATH;if(e&&kd.existsSync(e))return e;let n=ta();if(n){let o=X.join(n,jt);if(kd.existsSync(o))return o}let r=[X.join(__dirname,"..",jt),X.join(__dirname,"..","..",jt),X.join(__dirname,"..","..","..",jt),X.join(process.cwd(),"packages","sdk",jt),X.join(process.cwd(),jt)];for(let o of r)if(kd.existsSync(o))return o;throw new Error(`[@crewx/sdk] Workflow templates directory not found.
|
|
51
|
+
`+(n?` package anchor: ${X.join(n,jt)}
|
|
52
52
|
`:` package anchor: (unresolved)
|
|
53
53
|
`)+r.map(o=>` candidate: ${o}`).join(`
|
|
54
54
|
`)+`
|
|
55
|
-
Set CREWX_SDK_WORKFLOW_TEMPLATES_PATH or pass options.templatesPath.`)}u();var
|
|
55
|
+
Set CREWX_SDK_WORKFLOW_TEMPLATES_PATH or pass options.templatesPath.`)}u();var lt=class extends Error{constructor(e,n){let r=n.length>0?` Available: ${n.join(", ")}`:"";super(`Agent not found: "${e}".${r}`),this.name="AgentNotFoundError";}},Zl={claude:{id:"claude",provider:"cli/claude"},copilot:{id:"copilot",provider:"cli/copilot"},codex:{id:"codex",provider:"cli/codex"}};function Mr(t,e){let n=t.startsWith("@")?t.slice(1):t,r=e.find(i=>i.id===n);if(r)return r;let o=Zl[n];if(o)return o;throw new lt(t,e.map(i=>i.id))}Xe();Kr();en();u();u();function Yu(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Xu(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function Fn(t){if(!Yu(t)||Xu(t,"grok"))return t;let e=t.mode,n;switch(e){case "agent":n={...t,grok:{alwaysApprove:true,sandbox:"workspace"}},delete n.mode;break;case "agent-full-access":case "yolo":n={...t,grok:{alwaysApprove:true,sandbox:"off"}},delete n.mode;break;case "read-only":case "plan":n={...t,mode:"plan",grok:{alwaysApprove:false,sandbox:"read-only"}};break;default:return t}return n}function ui(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Ca(t){if(t)return t.slice(t.lastIndexOf("/")+1)}function Qu(t,e){let n=t.providerOptions;if(ui(n)){let i=Ca(e),s=i?n[i]:void 0;return ui(s)?{...s}:{...n}}let r=Ca(e),o=r?t[r]:void 0;return ui(o)?{...o}:void 0}function Jr(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t,n=typeof e.provider=="string"?e.provider.trim():void 0,r=n?.slice(n.lastIndexOf("/")+1)==="grok",o=Object.prototype.hasOwnProperty.call(e,"grok")||Object.prototype.hasOwnProperty.call(e,"providerOptions"),i=r&&!o?Fn(e):e,s={};typeof i.provider=="string"&&i.provider.trim()&&(s.provider=i.provider.trim()),typeof i.model=="string"&&i.model.trim()&&(s.model=i.model.trim()),typeof i.mode=="string"&&i.mode.trim()&&(s.mode=i.mode.trim()),typeof i.effort=="string"&&i.effort.trim()&&(s.effort=i.effort.trim());let a=Qu(i,s.provider);return a&&(s.providerOptions=a),s}function pi(t){if(t==null||t===false)return {active:false};if(t===true)return {active:true};if(typeof t=="object"){let e=t.mode;return {active:true,mode:e==="count"||e==="latch"?e:void 0}}return {active:false}}function fi(t,e,n,r){if(!r.active)return {active:false,crossProvider:false};if(!t||typeof t!="object"||Array.isArray(t))return {active:false,crossProvider:false};let i=t[e];if(!i||typeof i!="object"||Array.isArray(i))return {active:false,crossProvider:false};let s=Jr(i.overdrive);if(!s||!s.provider||!s.model)return {active:false,crossProvider:false};let a=s.provider!==n;return {active:true,provider:s.provider,model:s.model,mode:s.mode,effort:s.effort,crossProvider:a,providerOptions:s.providerOptions}}function gi(t,e){if(!t||typeof t!="object"||Array.isArray(t))return {};let r=t[e];if(!r||typeof r!="object"||Array.isArray(r))return {};let o=r,i={};return o.provider!==void 0&&(typeof o.provider=="string"?o.provider.trim()&&(i.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()&&(i.model=o.model.trim()),i}u();u();var ep=[/^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],tp=/[;|&`$(){}!><\n\r]/,np=2,rp=["*","**","*:*","* *","**/*"];function op(){let t={};for(let[e,n]of Object.entries(process.env))n!==void 0&&(ep.some(r=>r.test(e))||(t[e]=n));return t}function ip(t){if(tp.test(t))throw new Error(`exec blocked: shell metacharacter detected in "${t}"`)}function sp(t){return /^npx\s+@crewx\/[\w-]+/.test(t)}function ap(t){if(rp.includes(t.trim()))throw new Error(`exec config error: overly broad pattern "${t}" is not allowed`);if(!/^[\w./@-]/.test(t))throw new Error("exec config error: pattern must start with a command name")}function dp(t,e){let n=e.allow??[],r=e.deny??[];for(let o of [...n,...r])ap(o);return r.some(o=>Ke(t,o))?false:sp(t)?true:n.some(o=>Ke(t,o))}var Oa=false;function cp(t){Oa=t;}function qn(t){if(!Oa)return;let e=JSON.stringify({span:"template_exec",...t,timestamp:new Date().toISOString()});console.error(e);}function lp(t){let e=[],n="",r=false,o=false;for(let i=0;i<t.length;i++){let s=t[i];s==="'"&&!o?r=!r:s==='"'&&!r?o=!o:s===" "&&!r&&!o?n.length>0&&(e.push(n),n=""):n+=s;}return n.length>0&&e.push(n),e}function Na(t,e){let n=Date.now(),r=parseInt(process.env.CREWX_EXEC_DEPTH??"0",10);if(isNaN(r)||r>=np)return qn({command:t,status:"denied",reason:"invalid or max recursion depth"}),"(exec blocked: max recursion depth reached)";try{ip(t);}catch{return qn({command:t,status:"denied",reason:"shell metacharacter detected"}),`(exec blocked: shell metacharacter detected in "${t}")`}if(!dp(t,e))return qn({command:t,status:"denied",reason:"not in allow list"}),`(exec blocked: ${t})`;try{let o=lp(t),[i,...s]=o;if(!i)return `(exec failed: ${t})`;let a=op(),d=child_process.execFileSync(i,s,{timeout:e.timeout??5e3,maxBuffer:64*1024,encoding:"utf-8",env:{...a,CREWX_EXEC_DEPTH:String(r+1)},stdio:["pipe","pipe","pipe"]}),c=Date.now()-n;return qn({command:t,status:"allowed",allowed_by:"policy",duration_ms:c}),`<exec-output cmd="${t}">
|
|
56
56
|
${d.trim()}
|
|
57
|
-
</exec-output>`}catch{return
|
|
57
|
+
</exec-output>`}catch{return qn({command:t,status:"error",reason:"execution failed"}),`(exec failed: ${t})`}}u();function Da(t){return t==null?"":String(t)}u();function La(t,e){return `\`\`\`${e?.hash?.lang??""}
|
|
58
58
|
${t??""}
|
|
59
|
-
\`\`\``}u();u();function
|
|
59
|
+
\`\`\``}u();u();function mi(t){let e=n=>String(n).padStart(2,"0");return `${t.getFullYear()}${e(t.getMonth()+1)}${e(t.getDate())}T${e(t.getHours())}${e(t.getMinutes())}${e(t.getSeconds())}`}function hi(t){let e=t.toISOString();return `${e.slice(0,10)} ${e.slice(11,19)} UTC`}function yi(t,e){if(!t)return "";if(t.length<=e)return t;let n=t.length-e;return `${t.substring(0,e)} (...+${n} chars)`}function _i(t){return Array.isArray(t)||typeof t=="string"?t.length:0}function wi(t){return typeof t!="string"?"":t.replace(/\{\{/g,"{{").replace(/\}\}/g,"}}")}var Ma=["B","KB","MB","GB"];function ki(t){if(t===0)return "0 B";let e=Math.min(Math.floor(Math.log(t)/Math.log(1024)),Ma.length-1);return `${Math.round(t/Math.pow(1024,e)*100)/100} ${Ma[e]}`}function vi(t){if(!t)return "";try{let e=t instanceof Date?t:new Date(t);return isNaN(e.getTime())?"":hi(e)}catch{return ""}}var Hn=class{hbs;execPolicy;execEnabled;constructor(e={}){this.hbs=Qe__namespace.create(),this.execPolicy=e.execPolicy??{allow:[],deny:[]},this.execEnabled=e.execEnabled??true,this.registerHelpers();}registerHelpers(){let e=this.hbs,n=this.execPolicy,r=this.execEnabled;e.registerHelper("exec",function(o){return typeof o!="string"?"":r?new e.SafeString(Na(o,n)):"(exec disabled)"}),e.registerHelper("include",function(o){return new e.SafeString(Da(o))}),e.registerHelper("fenced_code",function(o,i){return new e.SafeString(La(o,i))}),e.registerHelper("eq",function(o,i){return o===i}),e.registerHelper("ne",function(o,i){return o!==i}),e.registerHelper("and",function(o,i){return o&&i}),e.registerHelper("or",function(o,i){return o||i}),e.registerHelper("not",function(o){return !o}),e.registerHelper("contains",function(o,i){return Array.isArray(o)&&o.includes(i)}),e.registerHelper("json",function(o){return JSON.stringify(o,null,2)}),e.registerHelper("truncate",function(o,i){return yi(o,i)}),e.registerHelper("length",function(o){return _i(o)}),e.registerHelper("escapeHandlebars",function(o){return new e.SafeString(wi(o))}),e.registerHelper("formatFileSize",function(o){return ki(o)}),e.registerHelper("formatTimestamp",function(o){return vi(o)});}async render(e,n={}){return this.hbs.compile(e,{noEscape:true})(n)}};u();u();var Yr=class{async readFile(e){return promises.readFile(e,"utf-8")}async exists(e){try{return await promises.access(e),!0}catch{return false}}resolvePath(...e){return e.length===1?X.resolve(e[0]):X.resolve(X.join(...e))}isAbsolute(e){return X.isAbsolute(e)}async readdir(e){try{return await promises.readdir(e)}catch{return []}}},Gt=new Yr;var Vt=class{docs=new Map;fs;constructor(e){this.fs=e??Gt;}async load(e,n){if(e)for(let[r,o]of Object.entries(e)){let i=o;if(typeof i=="string")this.docs.set(r,{content:i});else if(i&&typeof i=="object"){let s=i;"content"in s&&typeof s.content=="string"?this.docs.set(r,{content:s.content}):"path"in s&&typeof s.path=="string"?await this.loadFromFile(r,s.path,n):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 n=this.docs.get(e);if(!n)return;let r=[];for(let o of n.content.split(`
|
|
60
60
|
`)){let i=/^(#{1,6})\s+(.+)$/.exec(o.trim());i&&r.push({depth:i[1].length,text:i[2].trim()});}if(r.length!==0)return r.map(({depth:o,text:i})=>`${" ".repeat(o-1)}- ${i}`).join(`
|
|
61
|
-
`)}getPath(e){return this.docs.get(e)?.path}getNames(){return Array.from(this.docs.keys())}async buildContext(){let e={};for(let n of this.docs.keys()){let r=await this.getContent(n)??"",o=await this.getToc(n),i=this.getPath(n);e[n]={content:r,toc:o,...i?{path:i}:{}};}return e}async loadFromFile(e,n,r){try{let o=this.resolve(n,r),i=await this.fs.readFile(o);this.docs.set(e,{content:i,path:o});}catch(o){let i=o instanceof Error?o.message:String(o);console.warn(`[DocumentLoader] Failed to load '${e}' from '${n}': ${i}`);}}resolve(e,n){return this.fs.isAbsolute(e)?e:n?this.fs.resolvePath(n,e):this.fs.resolvePath(e)}};u();u();var Ee=class extends Error{constructor(n,r,o){super(n);this.layoutId=r;this.cause=o;this.name="LayoutLoadError";}layoutId;cause},ft=class extends Error{constructor(n,r=[],o){super(n);this.errors=r;this.cause=o;this.name="PropsValidationError";}errors;cause};var up={validationMode:"lenient",fallbackLayoutId:"crewx/default"},Fn=class{layouts=new Map;options;constructor(e){this.options={...up,...e,templatesPath:e?.templatesPath??en()},this.loadAllLayouts();}load(e,n){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 Ee(`Fallback layout not found: ${this.options.fallbackLayoutId}`,this.options.fallbackLayoutId);return n&&Object.keys(n).length>0?{...r,defaultProps:{...r.defaultProps,...n}}:r}getLayoutIds(){return Array.from(this.layouts.keys())}hasLayout(e){if(this.layouts.has(e))return true;let n=this.normalizeLayoutId(e);return this.layouts.has(n)}reload(){this.layouts.clear(),this.loadAllLayouts();}registerLayout(e,n){if(!e||typeof e!="string")throw new Ee("Layout ID must be a non-empty string",e);let r=typeof n=="string"?{template:n}:n,o=typeof r.template=="string"?r.template:"";if(!o||o.trim().length===0)throw new Ee(`Custom layout template is empty for ${e}`,e);let i=r.propsSchema||{},s=this.extractDefaultProps(i),a=r.defaultProps||{},d={id:e,version:r.version||"1.0.0",description:r.description||`Custom layout ${e}`,template:o,propsSchema:this.parsePropsSchema(i),defaultProps:{...s,...a}},c=this.layouts.get(e),l=c?.template===o&&JSON.stringify(c?.defaultProps??{})===JSON.stringify(d.defaultProps??{})&&JSON.stringify(c?.propsSchema??{})===JSON.stringify(d.propsSchema??{});this.layouts.set(e,d),process.env.CREWX_VERBOSE==="1"&&(c?l||console.error(`Updated custom layout: ${e}`):console.error(`Registered custom layout: ${e}`));}registerLayouts(e){for(let[n,r]of Object.entries(e))try{this.registerLayout(n,r);}catch(o){console.warn(`Failed to register custom layout ${n}:`,o instanceof Error?o.message:o);}}loadAllLayouts(){let e=this.options.templatesPath;if(!fd.existsSync(e))throw new Ee(`Templates directory not found: ${e}`,void 0,new Error(`Directory does not exist: ${e}`));try{let n=fd.readdirSync(e).filter(r=>r.endsWith(".yaml")||r.endsWith(".yml"));n.length===0&&console.warn(`No layout files found in ${e}`);for(let r of n){let o=r.replace(/\.(yaml|yml)$/,""),i=Y__namespace.join(e,r);try{let s=this.loadLayoutFile(i,o),a=`crewx/${o}`;this.layouts.set(a,s),a!=="crewx/minimal"&&process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded layout: ${a} from ${r}`);}catch(s){console.error(`Failed to load layout file ${r}:`,s);}}process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded ${this.layouts.size} layouts from ${e}`);}catch(n){throw new Ee(`Failed to read layouts directory: ${e}`,void 0,n instanceof Error?n:new Error(String(n)))}}loadLayoutFile(e,n){try{let r=fd.readFileSync(e,"utf-8");if(!r||r.trim().length===0)throw console.warn(`Empty YAML file: ${e}, will use fallback`),new Ee(`Empty YAML file: ${e}`,n,new Error("File content is empty"));let o=jsYaml.load(r);if(!o||typeof o!="object")throw console.warn(`Invalid YAML content in ${e} (parsed as ${typeof o}), will use fallback`),new Ee(`Invalid or empty YAML in ${e}`,n,new Error("YAML parsing returned null/undefined or non-object"));if(o.layouts&&typeof o.layouts=="object"){let i=this.resolveLayoutEntry(o.layouts,n);if(!i||i.template.trim().length===0)throw console.warn(`Empty or missing layout template in ${e} for ${n}`),new Ee(`Layout template not found or empty in layouts map: ${n}`,n);let s=i.propsSchema||o.propsSchema||{};return {id:`crewx/${n}`,version:o.version||"1.0.0",description:o.description||`CrewX ${n} layout`,template:i.template,propsSchema:this.parsePropsSchema(s),defaultProps:this.extractDefaultProps(s)}}else {if(!o.template||typeof o.template=="string"&&o.template.trim().length===0)throw console.warn(`Empty or missing template field in ${e}`),new Ee(`Layout template is missing or empty in ${e}`,n);return {id:o.id||`crewx/${n}`,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 Ee(`Failed to load layout file: ${e}`,n,r instanceof Error?r:new Error(String(r)))}}parsePropsSchema(e){let n={};for(let[r,o]of Object.entries(e))typeof o=="object"&&o!==null&&(n[r]=o);return n}extractDefaultProps(e){let n={};for(let[r,o]of Object.entries(e))o&&typeof o=="object"&&("defaultValue"in o?n[r]=o.defaultValue:"default"in o&&(n[r]=o.default));return n}normalizeLayoutId(e){return e?e.includes("/")?e:`crewx/${e}`:this.options.fallbackLayoutId}resolveLayoutEntry(e,n){let r=new Set;if(n)if(r.add(n),n.includes("/")){let o=n.split("/"),i=o[o.length-1];i&&r.add(i);}else r.add(`crewx/${n}`);r.add("default");for(let o of r){let i=e[o];if(typeof i=="string"&&i.trim().length>0)return {template:i};if(i&&typeof i=="object"&&typeof i.template=="string"&&i.template.trim().length>0)return {template:i.template,propsSchema:i.propsSchema}}for(let o of Object.values(e)){if(typeof o=="string"&&o.trim().length>0)return {template:o};let i=o;if(i&&typeof i=="object"&&typeof i.template=="string"&&i.template.trim().length>0)return {template:i.template,propsSchema:i.propsSchema}}}};u();u();u();function Vt(t){return String(Math.floor(Math.abs(t))).padStart(2,"0")}function qn(t){if(!(t instanceof Date)||Number.isNaN(t.getTime()))return "";let e=-t.getTimezoneOffset(),n=e>=0?"+":"-";return `${t.getFullYear()}-${Vt(t.getMonth()+1)}-${Vt(t.getDate())}T${Vt(t.getHours())}:${Vt(t.getMinutes())}:${Vt(t.getSeconds())}${n}${Vt(e/60)}:${Vt(e%60)}`}function pp(t){return t.map(e=>{let n=typeof e?.timestamp=="number"?e.timestamp:null;return n===null?e:{...e,created_at:qn(new Date(n))}})}function fp(t){let e=[];for(let n of t)n?.isAssistant&&n?.metadata?.agent_id?e.push(String(n.metadata.agent_id)):!n?.isAssistant&&n?.metadata?.caller_agent_id&&e.push(String(n.metadata.caller_agent_id));return Array.from(new Set(e))}function Na(...t){let e=t[t.length-1],n=t[0],r=t[1],o=typeof t[2]=="string"?t[2]:"",i=typeof t[3]=="string"?t[3]:"";if(!Array.isArray(n)||n.length===0||!(e&&typeof e.fn=="function"))return "";let a=fp(n),d=a.length>0?a[0]:"",c=Date.now(),l={messages:pp(n),platform:typeof r=="string"?r:"",messagesCount:n.length,agentIds:a,primaryAgentId:d,currentAgentId:o,threadId:i,now:qn(new Date(c))};return e.fn(l)}u();var Hn=class{defaultMode;constructor(e={}){this.defaultMode=e.defaultMode??"lenient";}validate(e,n,r=this.defaultMode){let o=[],i=this.validateObject(e??{},n,r,["props"],o);if(o.length>0&&r==="strict")throw new ft("Props validation failed in strict mode",o);return {valid:o.length===0,props:i,errors:o}}validateObject(e,n,r,o,i){let s={};if(r==="strict")for(let a of Object.keys(e))n[a]||i.push({path:this.buildPath([...o,a]),message:`Unknown prop '${a}'`,value:e[a]});for(let[a,d]of Object.entries(n)){let c=[...o,a],l=e[a],f=this.resolveProp(l,d,c,r,i);f.shouldAssign&&(s[a]=f.value);}return s}resolveProp(e,n,r,o,i){let s=this.buildPath(r);if(this.isNil(e)){if(n.isRequired&&i.push({path:s,message:`Required prop '${r[r.length-1]}' is missing`}),n.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(n.defaultValue)};if(n.type==="shape"&&n.shape){let d=this.applyDefaults(n.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}let a=this.validateType(e,n,r,o,i);if(!a.valid){if(n.type==="shape"&&a.value&&this.isPlainObject(a.value))return {shouldAssign:true,value:a.value};if(i.push({path:s,message:a.error??"Invalid value",value:e}),n.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(n.defaultValue)};if(n.type==="shape"&&n.shape){let d=this.applyDefaults(n.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}return {shouldAssign:true,value:a.value}}validateType(e,n,r,o,i){let{type:s}=n;switch(s){case "string":return this.validateString(e,n);case "number":return this.validateNumber(e,n);case "bool":return this.validateBoolean(e);case "array":return this.validateArray(e,n);case "arrayOf":return this.validateArrayOf(e,n,r,o,i);case "object":return this.validatePlainObject(e);case "shape":return this.validateShape(e,n,r,o,i);case "oneOfType":return this.validateOneOfType(e,n);case "func":return this.validateFunction(e);case "node":return {valid:true,value:e};default:return {valid:true,value:e}}}validateString(e,n){return typeof e!="string"?{valid:false,error:`Expected string, got ${this.describeType(e)}`}:n.oneOf&&!n.oneOf.includes(e)?{valid:false,error:`Expected one of: ${n.oneOf.join(", ")}`}:n.minLength!==void 0&&e.length<n.minLength?{valid:false,error:`String length must be >= ${n.minLength}`}:n.maxLength!==void 0&&e.length>n.maxLength?{valid:false,error:`String length must be <= ${n.maxLength}`}:n.pattern&&!new RegExp(n.pattern).test(e)?{valid:false,error:`String does not match pattern ${n.pattern}`}:{valid:true,value:e}}validateNumber(e,n){return typeof e!="number"||Number.isNaN(e)?{valid:false,error:`Expected number, got ${this.describeType(e)}`}:n.min!==void 0&&e<n.min?{valid:false,error:`Number must be >= ${n.min}`}:n.max!==void 0&&e>n.max?{valid:false,error:`Number must be <= ${n.max}`}:n.oneOf&&!n.oneOf.includes(e)?{valid:false,error:`Expected one of: ${n.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,n){return Array.isArray(e)?n.minLength!==void 0&&e.length<n.minLength?{valid:false,error:`Array length must be >= ${n.minLength}`}:n.maxLength!==void 0&&e.length>n.maxLength?{valid:false,error:`Array length must be <= ${n.maxLength}`}:{valid:true,value:[...e]}:{valid:false,error:`Expected array, got ${this.describeType(e)}`}}validateArrayOf(e,n,r,o,i){let s=this.validateArray(e,n);if(!s.valid)return s;let a=[],d=n.itemType,c=n.itemOneOf,l=i.length;return s.value.forEach((f,g)=>{let m=[...r,String(g)];if(d){let k=this.validateType(f,{type:d},m,o,i);k.valid?a.push(k.value):i.push({path:this.buildPath(m),message:k.error??"Invalid array item",value:f});}else a.push(f);c&&!c.includes(f)&&i.push({path:this.buildPath(m),message:`Array item must be one of: ${c.join(", ")}`,value:f});}),{valid:i.length===l,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,n,r,o,i){if(!this.isPlainObject(e))return {valid:false,error:`Expected object, got ${this.describeType(e)}`};let s=i.length,a=this.validateObject(e,n.shape??{},o,r,i);return {valid:i.length===s,value:a}}validateOneOfType(e,n){let r=n.types??[];return r.some(i=>this.matchesType(e,i))?{valid:true,value:e}:{valid:false,error:`Value does not match any allowed type: ${r.join(", ")}`}}matchesType(e,n){switch(n){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 n={};for(let[r,o]of Object.entries(e)){if(o.defaultValue!==void 0){n[r]=this.cloneValue(o.defaultValue);continue}if(o.type==="shape"&&o.shape){let i=this.applyDefaults(o.shape);Object.keys(i).length>0&&(n[r]=i);}}return n}cloneValue(e){if(Array.isArray(e))return e.map(n=>this.cloneValue(n));if(this.isPlainObject(e)){let n={};for(let[r,o]of Object.entries(e))n[r]=this.cloneValue(o);return n}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 Wn=class{handlebars;propsValidator;constructor(e){this.handlebars=Ye__namespace.default.create(),this.propsValidator=e??new Hn,this.registerHelpers();}render(e,n,r={}){try{let o=this.prepareRenderContext(e,n,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,n,r="lenient"){return this.executeValidation(e,n,r)}resolveProps(e,n,r="lenient"){let o=this.mergeProps(e.defaultProps,n);return !e.propsSchema||Object.keys(e.propsSchema).length===0?{valid:true,props:o,errors:[]}:this.executeValidation(o,e.propsSchema,r)}prepareRenderContext(e,n,r){let{validationMode:o="lenient",skipValidation:i=false}=r,s=i?this.mergeProps(e.defaultProps,n.props):this.resolveProps(e,n.props,o).props;return {...n,vars:this.sanitizeVars(n.vars),props:s}}registerHelpers(){this.handlebars.registerHelper("formatConversation",Na),Ye__namespace.default.helpers.each&&this.handlebars.registerHelper("each",Ye__namespace.default.helpers.each),Ye__namespace.default.helpers.if&&this.handlebars.registerHelper("if",Ye__namespace.default.helpers.if),Ye__namespace.default.helpers.unless&&this.handlebars.registerHelper("unless",Ye__namespace.default.helpers.unless),Ye__namespace.default.helpers.with&&this.handlebars.registerHelper("with",Ye__namespace.default.helpers.with),this.handlebars.registerHelper("eq",function(e,n){return e===n}),this.handlebars.registerHelper("ne",function(e,n){return e!==n}),this.handlebars.registerHelper("gt",function(e,n){return e>n}),this.handlebars.registerHelper("lt",function(e,n){return e<n}),this.handlebars.registerHelper("json",function(e){return new Ye__namespace.default.SafeString(JSON.stringify(e))}),this.handlebars.registerHelper("raw",function(e){return typeof e?.fn=="function"?e.fn(this):""}),this.handlebars.registerHelper("escapeHandlebars",function(e){return typeof e!="string"?"":e.replace(/\{\{/g,"{{").replace(/\}\}/g,"}}")}),this.handlebars.registerHelper("formatFileSize",function(e){if(e===0)return "0 B";let n=["B","KB","MB","GB"],r=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/Math.pow(1024,r)*100)/100+" "+n[r]});}executeValidation(e,n,r){try{return this.propsValidator.validate(e,n,r)}catch(o){if(o instanceof ft&&o.errors&&o.errors.length>0){let i=o.errors[0];if(i)throw new ft(i.message,o.errors)}throw o}}mergeProps(e,n){let r=this.cloneDeep(e??{});return n?this.deepMerge(r,n):r}deepMerge(e,n){for(let[r,o]of Object.entries(n)){if(this.isPlainObject(o)){let i=e[r];e[r]=this.deepMerge(this.isPlainObject(i)?i:{},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(n=>this.cloneDeep(n));if(this.isPlainObject(e)){let n={};for(let[r,o]of Object.entries(e))n[r]=this.cloneDeep(o);return n}return e}isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}sanitizeVars(e){if(!e)return {};let n={...e};if(typeof e.user_input=="string"){n.user_input_raw=e.user_input;let r=e.user_input.replace(/\{\{\{/g,"{{{").replace(/\}\}\}/g,"}}}").replace(/\{\{/g,"{{").replace(/\}\}/g,"}}");n.user_input=this.handlebars.escapeExpression(r);}return n}};u();var _i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function gp(t){let e=crypto$1.randomBytes(t*2),n="";for(let r=0;r<e.length&&n.length<t;r++){let o=e[r];o<248&&(n+=_i[o%62]);}for(;n.length<t;)n+=_i[crypto$1.randomBytes(1)[0]%62];return n}function Qe(t){return `${t}_${gp(8)}`}function mp(t,e){let{createHash:n}=_e("crypto"),r=n("sha256").update(e).digest(),o=Buffer.alloc(8);for(let s=0;s<32;s++)o[s%8]^=r[s];let i="";for(let s of o)i+=_i[s%62];return `${t}_${i}`}u();function La(t,e){return n=>{try{let r=e(n);r instanceof Promise&&r.catch(o=>{console.error(`[crewx] event listener error (${t}): ${o instanceof Error?o.message:String(o)}`);});}catch(r){console.error(`[crewx] event listener error (${t}): ${r instanceof Error?r.message:String(r)}`);}}}var zn=class{_emitter=new events.EventEmitter;on(e,n){let r=La(e,n);return this._emitter.on(e,r),()=>this._emitter.off(e,r)}once(e,n){let r=La(e,n);return this._emitter.once(e,r),()=>this._emitter.off(e,r)}emit(e,n){this._emitter.emit(e,n);}};u();function wi(t){let e=new Map,n=r=>r.startsWith(`${t}::`)?r:`${t}::${r}`;return {async get(r){let o=e.get(n(r));return o?o.value:void 0},async set(r,o){e.set(n(r),{value:o});},async delete(r){return e.delete(n(r))},async list(r){let o=r?n(r):`${t}::`,i=[];for(let s of e.keys())s.startsWith(o)&&i.push(s.slice(t.length+2));return i}}}u();var ki=new async_hooks.AsyncLocalStorage;function _p(){return ki}function wp(t,e){return ki.run(t,e)}function vi(t){let e=t.log??t.logger??{debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},n=t.agentRunner??{run:async()=>({output:""})},r=t.db??{get:async()=>{},set:async()=>{},delete:async()=>false,list:async()=>[]},o=t.storage??{put:async()=>"",get:async()=>{},delete:async()=>false},i=t.audit??{log:async()=>{}},s=t.onInbound??(async()=>({accepted:true})),a=t.onEmitEvent??(async()=>({accepted:true})),d=t.onUpdateMessage??(async()=>{}),c=t.onResolveUser??(async g=>({userId:g,displayName:g})),l=async g=>{let m=ki.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 k="text"in g?g.text:"";m.res.status(200).json({text:k});},f=t.httpRouter??{registerRoute:()=>{e.warn("httpRouter not configured \u2014 registerRoute is a no-op");}};return {instanceId:t.instanceId,config:t.config,capabilities:t.capabilities,log:e,agentRunner:n,db:r,storage:o,audit:i,abortSignal:t.abortSignal??new AbortController().signal,httpRouter:f,inbound:s,emitEvent:a,updateMessage:d,resolveUser:c,respondSync:l}}bt();u();var kp=/^-\s*Status:\s*active/m,vp=/^---\n([\s\S]*?)\n---/,bp=/^type:\s*goal\s*$/m;async function Ma(t,e=zt,n){let r=typeof n=="string"?[n]:Array.isArray(n)?n:void 0;if(r){let a=[];for(let d of r){let c=e.resolvePath(t,d);await e.exists(c)&&a.push(await e.readFile(c));}return a.join(`
|
|
61
|
+
`)}getPath(e){return this.docs.get(e)?.path}getNames(){return Array.from(this.docs.keys())}async buildContext(){let e={};for(let n of this.docs.keys()){let r=await this.getContent(n)??"",o=await this.getToc(n),i=this.getPath(n);e[n]={content:r,toc:o,...i?{path:i}:{}};}return e}async loadFromFile(e,n,r){try{let o=this.resolve(n,r),i=await this.fs.readFile(o);this.docs.set(e,{content:i,path:o});}catch(o){let i=o instanceof Error?o.message:String(o);console.warn(`[DocumentLoader] Failed to load '${e}' from '${n}': ${i}`);}}resolve(e,n){return this.fs.isAbsolute(e)?e:n?this.fs.resolvePath(n,e):this.fs.resolvePath(e)}};u();u();var be=class extends Error{constructor(n,r,o){super(n);this.layoutId=r;this.cause=o;this.name="LayoutLoadError";}layoutId;cause},gt=class extends Error{constructor(n,r=[],o){super(n);this.errors=r;this.cause=o;this.name="PropsValidationError";}errors;cause};var kp={validationMode:"lenient",fallbackLayoutId:"crewx/default"},Wn=class{layouts=new Map;options;constructor(e){this.options={...kp,...e,templatesPath:e?.templatesPath??tn()},this.loadAllLayouts();}load(e,n){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 be(`Fallback layout not found: ${this.options.fallbackLayoutId}`,this.options.fallbackLayoutId);return n&&Object.keys(n).length>0?{...r,defaultProps:{...r.defaultProps,...n}}:r}getLayoutIds(){return Array.from(this.layouts.keys())}hasLayout(e){if(this.layouts.has(e))return true;let n=this.normalizeLayoutId(e);return this.layouts.has(n)}reload(){this.layouts.clear(),this.loadAllLayouts();}registerLayout(e,n){if(!e||typeof e!="string")throw new be("Layout ID must be a non-empty string",e);let r=typeof n=="string"?{template:n}:n,o=typeof r.template=="string"?r.template:"";if(!o||o.trim().length===0)throw new be(`Custom layout template is empty for ${e}`,e);let i=r.propsSchema||{},s=this.extractDefaultProps(i),a=r.defaultProps||{},d={id:e,version:r.version||"1.0.0",description:r.description||`Custom layout ${e}`,template:o,propsSchema:this.parsePropsSchema(i),defaultProps:{...s,...a}},c=this.layouts.get(e),l=c?.template===o&&JSON.stringify(c?.defaultProps??{})===JSON.stringify(d.defaultProps??{})&&JSON.stringify(c?.propsSchema??{})===JSON.stringify(d.propsSchema??{});this.layouts.set(e,d),process.env.CREWX_VERBOSE==="1"&&(c?l||console.error(`Updated custom layout: ${e}`):console.error(`Registered custom layout: ${e}`));}registerLayouts(e){for(let[n,r]of Object.entries(e))try{this.registerLayout(n,r);}catch(o){console.warn(`Failed to register custom layout ${n}:`,o instanceof Error?o.message:o);}}loadAllLayouts(){let e=this.options.templatesPath;if(!kd.existsSync(e))throw new be(`Templates directory not found: ${e}`,void 0,new Error(`Directory does not exist: ${e}`));try{let n=kd.readdirSync(e).filter(r=>r.endsWith(".yaml")||r.endsWith(".yml"));n.length===0&&console.warn(`No layout files found in ${e}`);for(let r of n){let o=r.replace(/\.(yaml|yml)$/,""),i=X__namespace.join(e,r);try{let s=this.loadLayoutFile(i,o),a=`crewx/${o}`;this.layouts.set(a,s),a!=="crewx/minimal"&&process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded layout: ${a} from ${r}`);}catch(s){console.error(`Failed to load layout file ${r}:`,s);}}process.env.CREWX_VERBOSE==="1"&&console.error(`Loaded ${this.layouts.size} layouts from ${e}`);}catch(n){throw new be(`Failed to read layouts directory: ${e}`,void 0,n instanceof Error?n:new Error(String(n)))}}loadLayoutFile(e,n){try{let r=kd.readFileSync(e,"utf-8");if(!r||r.trim().length===0)throw console.warn(`Empty YAML file: ${e}, will use fallback`),new be(`Empty YAML file: ${e}`,n,new Error("File content is empty"));let o=jsYaml.load(r);if(!o||typeof o!="object")throw console.warn(`Invalid YAML content in ${e} (parsed as ${typeof o}), will use fallback`),new be(`Invalid or empty YAML in ${e}`,n,new Error("YAML parsing returned null/undefined or non-object"));if(o.layouts&&typeof o.layouts=="object"){let i=this.resolveLayoutEntry(o.layouts,n);if(!i||i.template.trim().length===0)throw console.warn(`Empty or missing layout template in ${e} for ${n}`),new be(`Layout template not found or empty in layouts map: ${n}`,n);let s=i.propsSchema||o.propsSchema||{};return {id:`crewx/${n}`,version:o.version||"1.0.0",description:o.description||`CrewX ${n} layout`,template:i.template,propsSchema:this.parsePropsSchema(s),defaultProps:this.extractDefaultProps(s)}}else {if(!o.template||typeof o.template=="string"&&o.template.trim().length===0)throw console.warn(`Empty or missing template field in ${e}`),new be(`Layout template is missing or empty in ${e}`,n);return {id:o.id||`crewx/${n}`,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 be(`Failed to load layout file: ${e}`,n,r instanceof Error?r:new Error(String(r)))}}parsePropsSchema(e){let n={};for(let[r,o]of Object.entries(e))typeof o=="object"&&o!==null&&(n[r]=o);return n}extractDefaultProps(e){let n={};for(let[r,o]of Object.entries(e))o&&typeof o=="object"&&("defaultValue"in o?n[r]=o.defaultValue:"default"in o&&(n[r]=o.default));return n}normalizeLayoutId(e){return e?e.includes("/")?e:`crewx/${e}`:this.options.fallbackLayoutId}resolveLayoutEntry(e,n){let r=new Set;if(n)if(r.add(n),n.includes("/")){let o=n.split("/"),i=o[o.length-1];i&&r.add(i);}else r.add(`crewx/${n}`);r.add("default");for(let o of r){let i=e[o];if(typeof i=="string"&&i.trim().length>0)return {template:i};if(i&&typeof i=="object"&&typeof i.template=="string"&&i.template.trim().length>0)return {template:i.template,propsSchema:i.propsSchema}}for(let o of Object.values(e)){if(typeof o=="string"&&o.trim().length>0)return {template:o};let i=o;if(i&&typeof i=="object"&&typeof i.template=="string"&&i.template.trim().length>0)return {template:i.template,propsSchema:i.propsSchema}}}};u();u();u();function Kt(t){return String(Math.floor(Math.abs(t))).padStart(2,"0")}function zn(t){if(!(t instanceof Date)||Number.isNaN(t.getTime()))return "";let e=-t.getTimezoneOffset(),n=e>=0?"+":"-";return `${t.getFullYear()}-${Kt(t.getMonth()+1)}-${Kt(t.getDate())}T${Kt(t.getHours())}:${Kt(t.getMinutes())}:${Kt(t.getSeconds())}${n}${Kt(e/60)}:${Kt(e%60)}`}function vp(t){return t.map(e=>{let n=typeof e?.timestamp=="number"?e.timestamp:null;return n===null?e:{...e,created_at:zn(new Date(n))}})}function Ep(t){let e=[];for(let n of t)n?.isAssistant&&n?.metadata?.agent_id?e.push(String(n.metadata.agent_id)):!n?.isAssistant&&n?.metadata?.caller_agent_id&&e.push(String(n.metadata.caller_agent_id));return Array.from(new Set(e))}function Ba(...t){let e=t[t.length-1],n=t[0],r=t[1],o=typeof t[2]=="string"?t[2]:"",i=typeof t[3]=="string"?t[3]:"";if(!Array.isArray(n)||n.length===0||!(e&&typeof e.fn=="function"))return "";let a=Ep(n),d=a.length>0?a[0]:"",c=Date.now(),l={messages:vp(n),platform:typeof r=="string"?r:"",messagesCount:n.length,agentIds:a,primaryAgentId:d,currentAgentId:o,threadId:i,now:zn(new Date(c))};return e.fn(l)}u();var Gn=class{defaultMode;constructor(e={}){this.defaultMode=e.defaultMode??"lenient";}validate(e,n,r=this.defaultMode){let o=[],i=this.validateObject(e??{},n,r,["props"],o);if(o.length>0&&r==="strict")throw new gt("Props validation failed in strict mode",o);return {valid:o.length===0,props:i,errors:o}}validateObject(e,n,r,o,i){let s={};if(r==="strict")for(let a of Object.keys(e))n[a]||i.push({path:this.buildPath([...o,a]),message:`Unknown prop '${a}'`,value:e[a]});for(let[a,d]of Object.entries(n)){let c=[...o,a],l=e[a],f=this.resolveProp(l,d,c,r,i);f.shouldAssign&&(s[a]=f.value);}return s}resolveProp(e,n,r,o,i){let s=this.buildPath(r);if(this.isNil(e)){if(n.isRequired&&i.push({path:s,message:`Required prop '${r[r.length-1]}' is missing`}),n.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(n.defaultValue)};if(n.type==="shape"&&n.shape){let d=this.applyDefaults(n.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}let a=this.validateType(e,n,r,o,i);if(!a.valid){if(n.type==="shape"&&a.value&&this.isPlainObject(a.value))return {shouldAssign:true,value:a.value};if(i.push({path:s,message:a.error??"Invalid value",value:e}),n.defaultValue!==void 0)return {shouldAssign:true,value:this.cloneValue(n.defaultValue)};if(n.type==="shape"&&n.shape){let d=this.applyDefaults(n.shape);if(Object.keys(d).length>0)return {shouldAssign:true,value:d}}return {shouldAssign:false}}return {shouldAssign:true,value:a.value}}validateType(e,n,r,o,i){let{type:s}=n;switch(s){case "string":return this.validateString(e,n);case "number":return this.validateNumber(e,n);case "bool":return this.validateBoolean(e);case "array":return this.validateArray(e,n);case "arrayOf":return this.validateArrayOf(e,n,r,o,i);case "object":return this.validatePlainObject(e);case "shape":return this.validateShape(e,n,r,o,i);case "oneOfType":return this.validateOneOfType(e,n);case "func":return this.validateFunction(e);case "node":return {valid:true,value:e};default:return {valid:true,value:e}}}validateString(e,n){return typeof e!="string"?{valid:false,error:`Expected string, got ${this.describeType(e)}`}:n.oneOf&&!n.oneOf.includes(e)?{valid:false,error:`Expected one of: ${n.oneOf.join(", ")}`}:n.minLength!==void 0&&e.length<n.minLength?{valid:false,error:`String length must be >= ${n.minLength}`}:n.maxLength!==void 0&&e.length>n.maxLength?{valid:false,error:`String length must be <= ${n.maxLength}`}:n.pattern&&!new RegExp(n.pattern).test(e)?{valid:false,error:`String does not match pattern ${n.pattern}`}:{valid:true,value:e}}validateNumber(e,n){return typeof e!="number"||Number.isNaN(e)?{valid:false,error:`Expected number, got ${this.describeType(e)}`}:n.min!==void 0&&e<n.min?{valid:false,error:`Number must be >= ${n.min}`}:n.max!==void 0&&e>n.max?{valid:false,error:`Number must be <= ${n.max}`}:n.oneOf&&!n.oneOf.includes(e)?{valid:false,error:`Expected one of: ${n.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,n){return Array.isArray(e)?n.minLength!==void 0&&e.length<n.minLength?{valid:false,error:`Array length must be >= ${n.minLength}`}:n.maxLength!==void 0&&e.length>n.maxLength?{valid:false,error:`Array length must be <= ${n.maxLength}`}:{valid:true,value:[...e]}:{valid:false,error:`Expected array, got ${this.describeType(e)}`}}validateArrayOf(e,n,r,o,i){let s=this.validateArray(e,n);if(!s.valid)return s;let a=[],d=n.itemType,c=n.itemOneOf,l=i.length;return s.value.forEach((f,g)=>{let m=[...r,String(g)];if(d){let k=this.validateType(f,{type:d},m,o,i);k.valid?a.push(k.value):i.push({path:this.buildPath(m),message:k.error??"Invalid array item",value:f});}else a.push(f);c&&!c.includes(f)&&i.push({path:this.buildPath(m),message:`Array item must be one of: ${c.join(", ")}`,value:f});}),{valid:i.length===l,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,n,r,o,i){if(!this.isPlainObject(e))return {valid:false,error:`Expected object, got ${this.describeType(e)}`};let s=i.length,a=this.validateObject(e,n.shape??{},o,r,i);return {valid:i.length===s,value:a}}validateOneOfType(e,n){let r=n.types??[];return r.some(i=>this.matchesType(e,i))?{valid:true,value:e}:{valid:false,error:`Value does not match any allowed type: ${r.join(", ")}`}}matchesType(e,n){switch(n){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 n={};for(let[r,o]of Object.entries(e)){if(o.defaultValue!==void 0){n[r]=this.cloneValue(o.defaultValue);continue}if(o.type==="shape"&&o.shape){let i=this.applyDefaults(o.shape);Object.keys(i).length>0&&(n[r]=i);}}return n}cloneValue(e){if(Array.isArray(e))return e.map(n=>this.cloneValue(n));if(this.isPlainObject(e)){let n={};for(let[r,o]of Object.entries(e))n[r]=this.cloneValue(o);return n}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 Vn=class{handlebars;propsValidator;constructor(e){this.handlebars=Qe__namespace.default.create(),this.propsValidator=e??new Gn,this.registerHelpers();}render(e,n,r={}){try{let o=this.prepareRenderContext(e,n,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,n,r="lenient"){return this.executeValidation(e,n,r)}resolveProps(e,n,r="lenient"){let o=this.mergeProps(e.defaultProps,n);return !e.propsSchema||Object.keys(e.propsSchema).length===0?{valid:true,props:o,errors:[]}:this.executeValidation(o,e.propsSchema,r)}prepareRenderContext(e,n,r){let{validationMode:o="lenient",skipValidation:i=false}=r,s=i?this.mergeProps(e.defaultProps,n.props):this.resolveProps(e,n.props,o).props;return {...n,vars:this.sanitizeVars(n.vars),props:s}}registerHelpers(){this.handlebars.registerHelper("formatConversation",Ba),Qe__namespace.default.helpers.each&&this.handlebars.registerHelper("each",Qe__namespace.default.helpers.each),Qe__namespace.default.helpers.if&&this.handlebars.registerHelper("if",Qe__namespace.default.helpers.if),Qe__namespace.default.helpers.unless&&this.handlebars.registerHelper("unless",Qe__namespace.default.helpers.unless),Qe__namespace.default.helpers.with&&this.handlebars.registerHelper("with",Qe__namespace.default.helpers.with),this.handlebars.registerHelper("eq",function(e,n){return e===n}),this.handlebars.registerHelper("ne",function(e,n){return e!==n}),this.handlebars.registerHelper("gt",function(e,n){return e>n}),this.handlebars.registerHelper("lt",function(e,n){return e<n}),this.handlebars.registerHelper("json",function(e){return new Qe__namespace.default.SafeString(JSON.stringify(e))}),this.handlebars.registerHelper("raw",function(e){return typeof e?.fn=="function"?e.fn(this):""}),this.handlebars.registerHelper("escapeHandlebars",function(e){return typeof e!="string"?"":e.replace(/\{\{/g,"{{").replace(/\}\}/g,"}}")}),this.handlebars.registerHelper("formatFileSize",function(e){if(e===0)return "0 B";let n=["B","KB","MB","GB"],r=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/Math.pow(1024,r)*100)/100+" "+n[r]});}executeValidation(e,n,r){try{return this.propsValidator.validate(e,n,r)}catch(o){if(o instanceof gt&&o.errors&&o.errors.length>0){let i=o.errors[0];if(i)throw new gt(i.message,o.errors)}throw o}}mergeProps(e,n){let r=this.cloneDeep(e??{});return n?this.deepMerge(r,n):r}deepMerge(e,n){for(let[r,o]of Object.entries(n)){if(this.isPlainObject(o)){let i=e[r];e[r]=this.deepMerge(this.isPlainObject(i)?i:{},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(n=>this.cloneDeep(n));if(this.isPlainObject(e)){let n={};for(let[r,o]of Object.entries(e))n[r]=this.cloneDeep(o);return n}return e}isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}sanitizeVars(e){if(!e)return {};let n={...e};if(typeof e.user_input=="string"){n.user_input_raw=e.user_input;let r=e.user_input.replace(/\{\{\{/g,"{{{").replace(/\}\}\}/g,"}}}").replace(/\{\{/g,"{{").replace(/\}\}/g,"}}");n.user_input=this.handlebars.escapeExpression(r);}return n}};u();var Ei="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function bp(t){let e=crypto$1.randomBytes(t*2),n="";for(let r=0;r<e.length&&n.length<t;r++){let o=e[r];o<248&&(n+=Ei[o%62]);}for(;n.length<t;)n+=Ei[crypto$1.randomBytes(1)[0]%62];return n}function Ze(t){return `${t}_${bp(8)}`}function Rp(t,e){let{createHash:n}=_e("crypto"),r=n("sha256").update(e).digest(),o=Buffer.alloc(8);for(let s=0;s<32;s++)o[s%8]^=r[s];let i="";for(let s of o)i+=Ei[s%62];return `${t}_${i}`}u();function qa(t,e){return n=>{try{let r=e(n);r instanceof Promise&&r.catch(o=>{console.error(`[crewx] event listener error (${t}): ${o instanceof Error?o.message:String(o)}`);});}catch(r){console.error(`[crewx] event listener error (${t}): ${r instanceof Error?r.message:String(r)}`);}}}var Kn=class{_emitter=new events.EventEmitter;on(e,n){let r=qa(e,n);return this._emitter.on(e,r),()=>this._emitter.off(e,r)}once(e,n){let r=qa(e,n);return this._emitter.once(e,r),()=>this._emitter.off(e,r)}emit(e,n){this._emitter.emit(e,n);}};u();function bi(t){let e=new Map,n=r=>r.startsWith(`${t}::`)?r:`${t}::${r}`;return {async get(r){let o=e.get(n(r));return o?o.value:void 0},async set(r,o){e.set(n(r),{value:o});},async delete(r){return e.delete(n(r))},async list(r){let o=r?n(r):`${t}::`,i=[];for(let s of e.keys())s.startsWith(o)&&i.push(s.slice(t.length+2));return i}}}u();var Ri=new async_hooks.AsyncLocalStorage;function Ap(){return Ri}function Ip(t,e){return Ri.run(t,e)}function Ti(t){let e=t.log??t.logger??{debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},n=t.agentRunner??{run:async()=>({output:""})},r=t.db??{get:async()=>{},set:async()=>{},delete:async()=>false,list:async()=>[]},o=t.storage??{put:async()=>"",get:async()=>{},delete:async()=>false},i=t.audit??{log:async()=>{}},s=t.onInbound??(async()=>({accepted:true})),a=t.onEmitEvent??(async()=>({accepted:true})),d=t.onUpdateMessage??(async()=>{}),c=t.onResolveUser??(async g=>({userId:g,displayName:g})),l=async g=>{let m=Ri.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 k="text"in g?g.text:"";m.res.status(200).json({text:k});},f=t.httpRouter??{registerRoute:()=>{e.warn("httpRouter not configured \u2014 registerRoute is a no-op");}};return {instanceId:t.instanceId,config:t.config,capabilities:t.capabilities,log:e,agentRunner:n,db:r,storage:o,audit:i,abortSignal:t.abortSignal??new AbortController().signal,httpRouter:f,inbound:s,emitEvent:a,updateMessage:d,resolveUser:c,respondSync:l}}At();u();var Sp=/^-\s*Status:\s*active/m,Pp=/^---\n([\s\S]*?)\n---/,Cp=/^type:\s*goal\s*$/m;async function Ha(t,e=Gt,n){let r=typeof n=="string"?[n]:Array.isArray(n)?n:void 0;if(r){let a=[];for(let d of r){let c=e.resolvePath(t,d);await e.exists(c)&&a.push(await e.readFile(c));}return a.join(`
|
|
62
62
|
---
|
|
63
|
-
`)}let i=(await e.readdir(t)).filter(a=>a.endsWith(".md"));if(i.length===0)return "";let s=[];for(let a of i){let d=e.resolvePath(t,a),c=await e.readFile(d),l=
|
|
63
|
+
`)}let i=(await e.readdir(t)).filter(a=>a.endsWith(".md"));if(i.length===0)return "";let s=[];for(let a of i){let d=e.resolvePath(t,a),c=await e.readFile(d),l=Pp.exec(c);!l||!Cp.test(l[1])||Sp.test(c)&&s.push(c);}return s.join(`
|
|
64
64
|
---
|
|
65
|
-
`)}u();function
|
|
66
|
-
`||t==="\r"||t==="\f"}function
|
|
67
|
-
${JSON.stringify(r)}`,isAssistant:true}]}function
|
|
65
|
+
`)}u();function Op(){let t=new Date,e=t.getFullYear(),n=String(t.getMonth()+1).padStart(2,"0"),r=String(t.getDate()).padStart(2,"0");return `${e}-${n}-${r}`}async function Wa(t,e=Gt){let n=e.resolvePath(t,`${Op()}.md`);return await e.exists(n)?e.readFile(n):""}u();rn();At();function xi(t){if(t.startsWith("cli/"))return exports.BUILTIN_ADAPTERS[t.slice(4)]}function Dp(t,e={}){if(!t.startsWith("cli/"))return true;let r=(e.lookupAdapter??xi)(t);if(!r?.command)return false;let o=On(r.command,{env:e.env});return X__namespace.default.isAbsolute(o)}function za(t,e={}){if(!Array.isArray(t))return t;if(t.length===0)return "cli/claude";for(let n of t)if(Dp(n,e))return n;return t[0]}u();var Jn=new async_hooks.AsyncLocalStorage;function Ai(t){if(t)return {parentTaskId:t.parentTaskId??null,rootTraceId:t.rootTraceId,callerAgentId:t.callerAgentId??null}}u();u();var Xr="<crewx_card";function Yn(t){return t===" "||t===" "||t===`
|
|
66
|
+
`||t==="\r"||t==="\f"}function Mp(t){if(!t)return false;let e=t.charCodeAt(0);return e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||t==="_"||t===":"||t==="-"}function Up(t){return t===void 0||Yn(t)||t==="/"||t===">"}function Ga(t,e){let n=t[e],r=e+1;for(;r<t.length;){if(t[r]===n)return {end:r+1,value:t.slice(e+1,r)};r++;}return {end:t.length,value:t.slice(e+1)}}function jp(t,e){if(t[e]==='"'||t[e]==="'")return Ga(t,e);let n=e;for(;n<t.length&&!Yn(t[n])&&t[n]!==">";)n++;return {end:n,value:t.slice(e,n)}}function $p(t,e){let n=Object.create(null),r=e+Xr.length,o=false;for(;r<t.length;){let i=t[r];if(i===">")return {end:r+1,closed:true,attrs:n,privileged:o};if(Yn(i)||i==="/"){r++;continue}if(i==='"'||i==="'"){r=Ga(t,r).end;continue}let s=r;for(;r<t.length&&Mp(t[r]);)r++;if(r===s){r++;continue}let a=t.slice(s,r);for(a==="proof"&&(o=true);r<t.length&&Yn(t[r]);)r++;if(t[r]!=="="){n[a]="";continue}for(r++;r<t.length&&Yn(t[r]);)r++;let d=jp(t,r);n[a]=d.value,r=d.end;}return {end:t.length,closed:false,attrs:n,privileged:o}}function Ii(t,e){let n=$p(t,e);return {start:e,end:n.end,raw:t.slice(e,n.end),closed:n.closed,attrs:n.attrs,privileged:n.privileged}}function Xn(t){let e=[],n=0;for(;n<t.length;){let r=t.indexOf(Xr,n);if(r<0)break;if(!Up(t[r+Xr.length])){n=r+Xr.length;continue}let o=Ii(t,r);if(e.push(o),!o.closed)break;n=o.end;}return e}function Va(t){return t&&Xn(t).find(r=>!!r.attrs.run_id?.trim())?.attrs.run_id?.trim()||void 0}u();u();var b=class extends Error{constructor(n,r=n,o){super(r);this.code=n;this.currentRevision=o;}code;currentRevision;name="UiRuntimeError"},Re=class extends Error{constructor(n){super("UI instance database operation will be retried");this.cause=n;}cause;name="UiRetryableDatabaseError"},Ce=class extends Error{constructor(n){super("UI instance revision reservation conflict");this.currentRevision=n;}currentRevision;name="UiReservationConflictError"};var Bp=/(?:proof|token|secret|password|cookie|authorization|private[_-]?key|stack|exception|plugin[_-]?text)/i,Fp=/(?:url|uri|endpoint|path|file(?:name|path)?|cwd|directory|dir|folder)$/i,qp=/<\/?[A-Za-z][^>]*>/,Hp=/^(?:[A-Za-z]:[\\/]|\\\\|~[\\/]|\/)/,Wp=/^(?:https?|file|ftp|ws|wss):\/\//i;function et(){throw new b("INPUT_INVALID","JSON value is not projection-safe")}function zp(t){let e=Object.getPrototypeOf(t);return e===Object.prototype||e===null}function Si(t,e,n,r){if(e>8&&et(),t===null||typeof t=="string"||typeof t=="boolean")return typeof t=="string"&&(qp.test(t)||Wp.test(t)||Hp.test(t))&&et(),t;if(typeof t=="number")return Number.isFinite(t)||et(),t;(typeof t!="object"||t===void 0||typeof t=="function"||typeof t=="bigint")&&et();let o=t;n.has(o)&&et(),n.add(o);try{if(Array.isArray(t))return t.map(s=>Si(s,e+1,n));zp(o)||et();let i={};for(let[s,a]of Object.entries(t))(Bp.test(s)||Fp.test(s))&&et(),i[s]=Si(a,e+1,n,s);return i}finally{n.delete(o);}}function de(t){let e=Si(t,0,new Set);return (e===null||Array.isArray(e)||typeof e!="object")&&et(),e}function we(t){try{let e=JSON.stringify(t);return e===void 0&&et(),e}catch{et();}}function Pi(t){return Array.isArray(t)?t.map(Pi):t!==null&&typeof t=="object"?Object.fromEntries(Object.keys(t).sort().map(e=>[e,Pi(t[e])])):t}function Ka(t){return we(Pi(t))}function Qn(t){return Buffer.byteLength(t,"utf8")}var Ja="[workflow card omitted from AI context]",Gp="[workflow UI instance omitted from AI context]",Vp=/\{\s*"instanceId"\s*:\s*"uic_[A-Za-z0-9_-]+"\s*\}/g;function Qr(t){return typeof t=="string"?t.replace(Vp,Gp):""}function Zr(t){if(typeof t!="string"||t.length===0)return "";let e="",n=0;for(let r of Xn(t))if(e+=t.slice(n,r.start),e+=r.privileged?Ja:r.raw,n=r.end,!r.closed)break;return e+=t.slice(n),e}function Kp(t){return t.replace(/</g,"<").replace(/>/g,">")}function Jp(t,e){if(typeof t!="string")return "";let n=e?Zr(t):t,r=e?Qr(n):n;return Kp(r)}function Ci(t){return t.map(e=>({...e,text:Jp(e.text,e.isAssistant)}))}function ln(t,e){let n=Ci(t);if(!e||e.length===0)return n;let r=[];for(let o of e)try{if(Object.keys(o).sort().join(",")!=="availableActions,definition,facts,instanceId,pendingDecision,recentChanges,revision"||!/^uic_[A-Za-z0-9_-]+$/.test(o.instanceId))continue;let s=de(o),a=JSON.stringify(s);if(typeof a!="string"||Qn(a)>64*1024)continue;r.push(s);}catch{}return r.length===0?n:[...n,{text:`CrewX workflow context:
|
|
67
|
+
${JSON.stringify(r)}`,isAssistant:true}]}function Oi(t){return Ci(t.messages.map(e=>({text:e.text,isAssistant:e.isAssistant,timestamp:e.timestamp,metadata:e.metadata,files:void 0})))}u();At();It();u();u();var ie=class{resolveDbPath(){return process.env.CREWX_DB?process.env.CREWX_DB:process.env.CREWX_TRACES_DB?process.env.CREWX_TRACES_DB:X.join(Ki__namespace.default.homedir(),".crewx","crewx.db")}resolveDbPaths(){return [this.resolveDbPath()]}isMissingTableError(e){return e instanceof Error&&/no such table:/i.test(e.message)}dbExists(e){return kd.existsSync(e??this.resolveDbPath())}};u();var Ya=32*1024*1024;function Y(t){let e=_e("better-sqlite3"),{drizzle:n}=_e("drizzle-orm/better-sqlite3"),r=new e(t);return r.exec("PRAGMA journal_mode = WAL"),r.exec(`PRAGMA journal_size_limit = ${Ya}`),r.exec("PRAGMA busy_timeout = 5000"),r.exec("PRAGMA foreign_keys = ON"),r.exec("PRAGMA analysis_limit = 400"),r.exec("PRAGMA optimize"),{db:n(r),runRaw:(o,i=[])=>r.prepare(o).run(...i),close:()=>r.close()}}u();var Xa=new Set,tf={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 Di(t,e){return (t.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function nf(t,e){if(e>0||!Di(t,"tasks"))return;let n=t.all("PRAGMA table_info(tasks)"),r=new Set(n.map(o=>o.name));for(let[o,i]of Object.entries(tf))r.has(o)||t.run(`ALTER TABLE tasks ADD COLUMN ${o} ${i}`);}var rf={"0002_normalize_task_names":{workspace_name:"TEXT",project_name:"TEXT"},"0015_panoramic_gorilla_man":{project_id:"TEXT",workspace_id:"TEXT"}};function of(t,e,n){if(!Di(t,"__drizzle_migrations")||!Di(t,"tasks"))return;let r=t.all(n`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(s=>s.hash)),i=JSON.parse(kd.readFileSync(X__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let s of i.entries){let a=rf[s.tag];if(!a)continue;let d=X__namespace.default.join(e,`${s.tag}.sql`);if(!kd.existsSync(d))continue;let c=kd.readFileSync(d,"utf-8"),l=crypto$1.createHash("sha256").update(c).digest("hex");if(o.has(l))continue;let f=t.all("PRAGMA table_info(tasks)"),g=new Set(f.map(m=>m.name));for(let[m,k]of Object.entries(a))g.has(m)||(t.run(`ALTER TABLE tasks ADD COLUMN ${m} ${k}`),g.add(m));}}function sf(t,e,n){let r=t.all(n`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(s=>s.hash)),i=JSON.parse(kd.readFileSync(X__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let s of i.entries){let a=X__namespace.default.join(e,`${s.tag}.sql`);if(!kd.existsSync(a))continue;let d=kd.readFileSync(a,"utf-8"),c=crypto$1.createHash("sha256").update(d).digest("hex");if(o.has(c))continue;let l=/ALTER\s+TABLE\s+[`"]?(\w+)[`"]?\s+ADD\s+[`"]?(\w+)[`"]?/gi,f=[],g;for(;(g=l.exec(d))!==null;)f.push({table:g[1],column:g[2]});if(f.length===0||!d.split(/-->\s*statement-breakpoint/).map(h=>h.trim()).filter(Boolean).every(h=>/^ALTER\s+TABLE\s+.+\s+ADD\s+/i.test(h)))continue;f.every(({table:h,column:v})=>t.all(`PRAGMA table_info("${h}")`).some(w=>w.name===v))&&t.run(n`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${c}, ${s.when})`);}}function to(t){let{migrate:e}=_e("drizzle-orm/better-sqlite3/migrator"),{sql:n}=_e("drizzle-orm"),r=[X__namespace.default.join(__dirname,"../migrations"),X__namespace.default.join(__dirname,"migrations"),X__namespace.default.join(__dirname,"../../../../drizzle/migrations"),X__namespace.default.join(process.cwd(),"drizzle/migrations")],o=r.find(c=>kd.existsSync(X__namespace.default.join(c,"meta/_journal.json")));if(!o)throw new Error(`migrations folder not found. Searched:
|
|
68
68
|
${r.join(`
|
|
69
|
-
`)}`);let i=t.get(n`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'`),s=0;i?.cnt&&(s=t.get(n`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0),Vp(t,s),i?.cnt&&(Xp(t,o,n),Jp(t,o,n)),e(t,{migrationsFolder:o});let d=(t.get(n`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0)-s;if(d>0){let c=i?.cnt?"Database migrated":"Database initialized";console.error(`[crewx] ${c} (${d} migration${d>1?"s":""} applied).`);}}function ce(t,e){Wa.has(e)||(Zr(t),Wa.add(e));}u();var R=class extends Error{code;cause;constructor(e,n,r){super(n),this.name="RepositoryError",this.code=e,this.cause=r,Object.setPrototypeOf(this,new.target.prototype);}};u();u();var Xn=sqliteCore.sqliteTable("workspaces",{id:sqliteCore.text("id").primaryKey(),slug:sqliteCore.text("slug").notNull().unique(),name:sqliteCore.text("name").notNull(),workspace_path:sqliteCore.text("workspace_path"),description:sqliteCore.text("description"),is_active:sqliteCore.integer("is_active").notNull().default(1),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()});u();var p=sqliteCore.sqliteTable("tasks",{id:sqliteCore.text("id").primaryKey(),agent_id:sqliteCore.text("agent_id").notNull(),user_id:sqliteCore.text("user_id"),prompt:sqliteCore.text("prompt").notNull(),mode:sqliteCore.text("mode").notNull().default("execute"),status:sqliteCore.text("status").notNull().default("running"),result:sqliteCore.text("result"),error:sqliteCore.text("error"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),metadata:sqliteCore.text("metadata"),workspace_id:sqliteCore.text("workspace_id"),trace_id:sqliteCore.text("trace_id"),parent_task_id:sqliteCore.text("parent_task_id"),caller_agent_id:sqliteCore.text("caller_agent_id"),model:sqliteCore.text("model"),platform:sqliteCore.text("platform").default("cli"),crewx_version:sqliteCore.text("crewx_version"),input_tokens:sqliteCore.integer("input_tokens").default(0),output_tokens:sqliteCore.integer("output_tokens").default(0),cost_usd:sqliteCore.real("cost_usd").default(0),pid:sqliteCore.integer("pid"),rendered_prompt:sqliteCore.text("rendered_prompt"),command:sqliteCore.text("command"),coding_agent_command:sqliteCore.text("coding_agent_command"),exit_code:sqliteCore.integer("exit_code"),logs:sqliteCore.text("logs"),log_storage:sqliteCore.text("log_storage",{enum:["blob","events"]}).notNull().default("blob"),last_log_seq:sqliteCore.integer("last_log_seq").notNull().default(0),log_revision:sqliteCore.integer("log_revision").notNull().default(0),thread_id:sqliteCore.text("thread_id"),workspace_ref:sqliteCore.text("workspace_ref"),project_id:sqliteCore.text("project_id"),project_ref:sqliteCore.text("project_ref"),cached_input_tokens:sqliteCore.integer("cached_input_tokens").default(0),run_epoch:sqliteCore.integer("run_epoch").default(0)},t=>({log_storage_check:sqliteCore.check("tasks_log_storage_ck",drizzleOrm.sql`${t.log_storage} IN ('blob', 'events')`),idx_tasks_agent_id:sqliteCore.index("idx_tasks_agent_id").on(t.agent_id),idx_tasks_status:sqliteCore.index("idx_tasks_status").on(t.status),idx_tasks_started_at:sqliteCore.index("idx_tasks_started_at").on(t.started_at),idx_tasks_trace_id:sqliteCore.index("idx_tasks_trace_id").on(t.trace_id),idx_tasks_parent_task_id:sqliteCore.index("idx_tasks_parent_task_id").on(t.parent_task_id),idx_tasks_crewx_version:sqliteCore.index("idx_tasks_crewx_version").on(t.crewx_version),idx_tasks_pid:sqliteCore.index("idx_tasks_pid").on(t.pid),idx_tasks_thread_id:sqliteCore.index("idx_tasks_thread_id").on(t.thread_id),idx_tasks_workspace_id:sqliteCore.index("idx_tasks_workspace_id").on(t.workspace_id),idx_tasks_workspace_ref:sqliteCore.index("idx_tasks_workspace_ref").on(t.workspace_ref),idx_tasks_project_id:sqliteCore.index("idx_tasks_project_id").on(t.project_id),idx_tasks_ws_started:sqliteCore.index("idx_tasks_ws_started").on(t.workspace_id,t.started_at)}));u();var et=sqliteCore.sqliteTable("task_log_events",{id:sqliteCore.integer("id").primaryKey(),task_id:sqliteCore.text("task_id").notNull().references(()=>p.id,{onDelete:"cascade"}),seq:sqliteCore.integer("seq").notNull(),timestamp:sqliteCore.text("timestamp").notNull(),level:sqliteCore.text("level").notNull(),message:sqliteCore.text("message").notNull()},t=>({taskSeqUnique:sqliteCore.uniqueIndex("task_log_events_task_seq_uq").on(t.task_id,t.seq)}));u();var Yn=sqliteCore.sqliteTable("threads",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").references(()=>Xn.id,{onDelete:"set null"}),platform:sqliteCore.text("platform").notNull().default("cli"),title:sqliteCore.text("title"),first_message:sqliteCore.text("first_message"),last_message:sqliteCore.text("last_message"),message_count:sqliteCore.integer("message_count").notNull().default(0),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull(),metadata:sqliteCore.text("metadata"),title_locked:sqliteCore.integer("title_locked").notNull().default(0),pinned:sqliteCore.integer("pinned").notNull().default(0),starred:sqliteCore.integer("starred").notNull().default(0)},t=>({idx_threads_updated_at:sqliteCore.index("idx_threads_updated_at").on(t.updated_at),idx_threads_workspace_id:sqliteCore.index("idx_threads_workspace_id").on(t.workspace_id),idx_threads_ws_updated:sqliteCore.index("idx_threads_ws_updated").on(t.workspace_id,t.updated_at),idx_threads_title:sqliteCore.index("idx_threads_title").on(t.title)}));u();var Rt=sqliteCore.sqliteTable("spans",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>p.id,{onDelete:"set null"}),parent_span_id:sqliteCore.text("parent_span_id").references(()=>Rt.id,{onDelete:"set null"}),name:sqliteCore.text("name").notNull(),kind:sqliteCore.text("kind").notNull().default("internal"),status:sqliteCore.text("status").notNull().default("ok"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),error:sqliteCore.text("error"),attributes:sqliteCore.text("attributes")},t=>({idx_spans_task_id:sqliteCore.index("idx_spans_task_id").on(t.task_id),idx_spans_parent_span_id:sqliteCore.index("idx_spans_parent_span_id").on(t.parent_span_id)}));u();sqliteCore.sqliteTable("tool_calls",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>p.id,{onDelete:"cascade"}),session_id:sqliteCore.text("session_id"),tool_name:sqliteCore.text("tool_name").notNull(),files:sqliteCore.text("files"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),duration_ms:sqliteCore.integer("duration_ms"),timestamp:sqliteCore.text("timestamp").notNull()},t=>({idx_tool_calls_task_id:sqliteCore.index("idx_tool_calls_task_id").on(t.task_id),idx_tool_calls_tool_name:sqliteCore.index("idx_tool_calls_tool_name").on(t.tool_name),idx_tool_calls_timestamp:sqliteCore.index("idx_tool_calls_timestamp").on(t.timestamp)}));u();sqliteCore.sqliteTable("thread_boxes",{id:sqliteCore.text("id").primaryKey(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>Yn.id,{onDelete:"cascade"}),seq:sqliteCore.integer("seq").notNull(),first_task_id:sqliteCore.text("first_task_id").notNull(),mid_task_id:sqliteCore.text("mid_task_id").notNull(),last_task_id:sqliteCore.text("last_task_id").notNull(),task_count:sqliteCore.integer("task_count").notNull(),summary:sqliteCore.text("summary"),source_tokens:sqliteCore.integer("source_tokens").notNull(),summary_tokens:sqliteCore.integer("summary_tokens"),created_at:sqliteCore.text("created_at").notNull()},t=>({idx_thread_boxes_thread_id:sqliteCore.index("idx_thread_boxes_thread_id").on(t.thread_id),idx_thread_boxes_seq:sqliteCore.index("idx_thread_boxes_seq").on(t.thread_id,t.seq),uniq_thread_boxes_thread_seq:sqliteCore.unique().on(t.thread_id,t.seq)}));u();sqliteCore.sqliteTable("request_logs",{id:sqliteCore.text("id").primaryKey(),path:sqliteCore.text("path").notNull(),method:sqliteCore.text("method").notNull(),status_code:sqliteCore.integer("status_code").notNull(),duration_ms:sqliteCore.integer("duration_ms").notNull(),ip:sqliteCore.text("ip"),request_headers:sqliteCore.text("request_headers"),response_headers:sqliteCore.text("response_headers"),request_body:sqliteCore.text("request_body"),response_body:sqliteCore.text("response_body"),query:sqliteCore.text("query"),user_id:sqliteCore.text("user_id"),project_id:sqliteCore.text("project_id"),partition_key:sqliteCore.text("partition_key").notNull(),timestamp:sqliteCore.text("timestamp").notNull().default(drizzleOrm.sql`(datetime('now'))`),metadata:sqliteCore.text("metadata")},t=>({idx_request_logs_timestamp:sqliteCore.index("idx_request_logs_timestamp").on(t.timestamp),idx_request_logs_path:sqliteCore.index("idx_request_logs_path").on(t.path),idx_request_logs_status_code:sqliteCore.index("idx_request_logs_status_code").on(t.status_code),idx_request_logs_partition_key:sqliteCore.index("idx_request_logs_partition_key").on(t.partition_key)}));u();sqliteCore.sqliteTable("usage_limit_snapshots",{id:sqliteCore.text("id").primaryKey(),provider:sqliteCore.text("provider").notNull(),account_ref:sqliteCore.text("account_ref").notNull().default("default"),limit_window:sqliteCore.text("limit_window").notNull(),bucket_start:sqliteCore.text("bucket_start").notNull(),captured_at:sqliteCore.text("captured_at").notNull(),used_percent:sqliteCore.integer("used_percent").notNull(),remaining_percent:sqliteCore.integer("remaining_percent").notNull(),resets_at:sqliteCore.text("resets_at"),source:sqliteCore.text("source").notNull(),metadata:sqliteCore.text("metadata")},t=>({uniq_usage_limit_snapshots_bucket:sqliteCore.uniqueIndex("uniq_usage_limit_snapshots_bucket").on(t.provider,t.account_ref,t.limit_window,t.bucket_start),idx_usage_limit_snapshots_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_window_bucket").on(t.limit_window,t.bucket_start),idx_usage_limit_snapshots_provider_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_provider_window_bucket").on(t.provider,t.limit_window,t.bucket_start)}));u();sqliteCore.sqliteTable("usage_reports",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),month:sqliteCore.text("month").notNull(),generated_at:sqliteCore.text("generated_at").notNull(),source_range:sqliteCore.text("source_range").notNull(),tier:sqliteCore.text("tier").notNull(),total_tokens:sqliteCore.integer("total_tokens").notNull(),total_cost_usd:sqliteCore.real("total_cost_usd").notNull(),payload:sqliteCore.text("payload").notNull(),payload_hash:sqliteCore.text("payload_hash"),signature:sqliteCore.text("signature"),signed_at:sqliteCore.text("signed_at"),issuer:sqliteCore.text("issuer")},t=>({uniq_usage_reports_ws_month:sqliteCore.uniqueIndex("uniq_usage_reports_ws_month").on(t.workspace_id,t.month)}));u();sqliteCore.sqliteTable("notifications",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id"),task_id:sqliteCore.text("task_id"),thread_id:sqliteCore.text("thread_id"),source:sqliteCore.text("source").notNull().default("agent"),level:sqliteCore.text("level").notNull().default("info"),title:sqliteCore.text("title").notNull(),body:sqliteCore.text("body"),target_user_id:sqliteCore.text("target_user_id"),created_at:sqliteCore.text("created_at").notNull(),metadata:sqliteCore.text("metadata")},t=>({idx_notifications_ws_created:sqliteCore.index("idx_notifications_ws_created").on(t.workspace_id,drizzleOrm.sql`${t.created_at} DESC`)}));sqliteCore.sqliteTable("notification_reads",{notification_id:sqliteCore.text("notification_id").notNull(),user_id:sqliteCore.text("user_id").notNull(),read_at:sqliteCore.text("read_at").notNull()},t=>({pk:sqliteCore.primaryKey({columns:[t.notification_id,t.user_id]})}));u();sqliteCore.sqliteTable("agent_suggestions",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id").notNull(),task_id:sqliteCore.text("task_id"),type:sqliteCore.text("type").notNull(),status:sqliteCore.text("status").notNull().default("pending"),payload:sqliteCore.text("payload").notNull(),applied_commit_sha:sqliteCore.text("applied_commit_sha"),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()},t=>({idx_agent_suggestions_ws_agent:sqliteCore.index("idx_agent_suggestions_ws_agent").on(t.workspace_id,t.agent_id),idx_agent_suggestions_ws_created:sqliteCore.index("idx_agent_suggestions_ws_created").on(t.workspace_id,t.created_at)}));u();sqliteCore.sqliteTable("ui_instances",{id:sqliteCore.text("id").primaryKey().notNull(),definition_id:sqliteCore.text("definition_id").notNull(),definition_version:sqliteCore.integer("definition_version").notNull(),definition_hash:sqliteCore.text("definition_hash").notNull(),workspace_id:sqliteCore.text("workspace_id").notNull(),thread_id:sqliteCore.text("thread_id").notNull(),anchor_task_id:sqliteCore.text("anchor_task_id"),domain_ref_json:sqliteCore.text("domain_ref_json").notNull(),state_json:sqliteCore.text("state_json").notNull(),revision:sqliteCore.integer("revision").notNull().default(0),status:sqliteCore.text("status").notNull().default("active"),granted_capabilities_json:sqliteCore.text("granted_capabilities_json").notNull().default("[]"),created_at:sqliteCore.integer("created_at").notNull(),updated_at:sqliteCore.integer("updated_at").notNull()},t=>({idCheck:sqliteCore.check("ui_instances_id_ck",drizzleOrm.sql`length(${t.id}) BETWEEN 5 AND 128 AND ${t.id} GLOB 'uic_*'`),definitionIdCheck:sqliteCore.check("ui_instances_definition_id_ck",drizzleOrm.sql`length(${t.definition_id}) BETWEEN 1 AND 128`),definitionVersionCheck:sqliteCore.check("ui_instances_definition_version_ck",drizzleOrm.sql`${t.definition_version} >= 1`),definitionHashCheck:sqliteCore.check("ui_instances_definition_hash_ck",drizzleOrm.sql`length(${t.definition_hash}) = 64 AND ${t.definition_hash} NOT GLOB '*[^0-9a-f]*'`),workspaceIdCheck:sqliteCore.check("ui_instances_workspace_id_ck",drizzleOrm.sql`length(${t.workspace_id}) BETWEEN 1 AND 256`),threadIdCheck:sqliteCore.check("ui_instances_thread_id_ck",drizzleOrm.sql`length(${t.thread_id}) BETWEEN 1 AND 256`),domainRefJsonCheck:sqliteCore.check("ui_instances_domain_ref_json_ck",drizzleOrm.sql`json_valid(${t.domain_ref_json}) AND json_type(${t.domain_ref_json}) = 'object'`),stateJsonCheck:sqliteCore.check("ui_instances_state_json_ck",drizzleOrm.sql`json_valid(${t.state_json}) AND json_type(${t.state_json}) = 'object'`),revisionCheck:sqliteCore.check("ui_instances_revision_ck",drizzleOrm.sql`${t.revision} >= 0`),statusCheck:sqliteCore.check("ui_instances_status_ck",drizzleOrm.sql`${t.status} IN ('active', 'completed', 'expired', 'revoked', 'unsupported')`),grantedCapabilitiesJsonCheck:sqliteCore.check("ui_instances_granted_capabilities_json_ck",drizzleOrm.sql`json_valid(${t.granted_capabilities_json}) AND json_type(${t.granted_capabilities_json}) = 'array'`),createdAtCheck:sqliteCore.check("ui_instances_created_at_ck",drizzleOrm.sql`${t.created_at} >= 0`),updatedAtCheck:sqliteCore.check("ui_instances_updated_at_ck",drizzleOrm.sql`${t.updated_at} >= ${t.created_at}`),workspaceThreadIdx:sqliteCore.index("ui_instances_workspace_thread_idx").on(t.workspace_id,t.thread_id)}));u();sqliteCore.sqliteTable("ui_action_receipts",{id:sqliteCore.text("id").primaryKey().notNull(),instance_id:sqliteCore.text("instance_id").notNull(),request_id:sqliteCore.text("request_id").notNull(),action_id:sqliteCore.text("action_id").notNull(),actor_json:sqliteCore.text("actor_json").notNull(),source:sqliteCore.text("source").notNull(),expected_revision:sqliteCore.integer("expected_revision").notNull(),before_revision:sqliteCore.integer("before_revision").notNull(),after_revision:sqliteCore.integer("after_revision"),status:sqliteCore.text("status").notNull(),outcome:sqliteCore.text("outcome"),input_json:sqliteCore.text("input_json").notNull(),result_json:sqliteCore.text("result_json"),error_code:sqliteCore.text("error_code"),requested_at:sqliteCore.integer("requested_at").notNull(),settled_at:sqliteCore.integer("settled_at")},t=>({idCheck:sqliteCore.check("ui_action_receipts_id_ck",drizzleOrm.sql`length(${t.id}) BETWEEN 5 AND 128`),instanceIdCheck:sqliteCore.check("ui_action_receipts_instance_id_ck",drizzleOrm.sql`length(${t.instance_id}) BETWEEN 1 AND 128`),requestIdCheck:sqliteCore.check("ui_action_receipts_request_id_ck",drizzleOrm.sql`length(${t.request_id}) BETWEEN 1 AND 128`),actionIdCheck:sqliteCore.check("ui_action_receipts_action_id_ck",drizzleOrm.sql`length(${t.action_id}) BETWEEN 1 AND 128`),actorJsonCheck:sqliteCore.check("ui_action_receipts_actor_json_ck",drizzleOrm.sql`json_valid(${t.actor_json}) AND json_type(${t.actor_json}) = 'object'`),sourceCheck:sqliteCore.check("ui_action_receipts_source_ck",drizzleOrm.sql`${t.source} IN ('ui_host', 'cli', 'system')`),expectedRevisionCheck:sqliteCore.check("ui_action_receipts_expected_revision_ck",drizzleOrm.sql`${t.expected_revision} >= 0`),beforeRevisionCheck:sqliteCore.check("ui_action_receipts_before_revision_ck",drizzleOrm.sql`${t.before_revision} >= 0`),afterRevisionCheck:sqliteCore.check("ui_action_receipts_after_revision_ck",drizzleOrm.sql`${t.after_revision} IS NULL OR ${t.after_revision} >= 0`),statusCheck:sqliteCore.check("ui_action_receipts_status_ck",drizzleOrm.sql`${t.status} IN ('requested', 'settled')`),outcomeCheck:sqliteCore.check("ui_action_receipts_outcome_ck",drizzleOrm.sql`${t.outcome} IS NULL OR ${t.outcome} IN ('succeeded', 'rejected', 'failed', 'conflicted', 'expired')`),inputJsonCheck:sqliteCore.check("ui_action_receipts_input_json_ck",drizzleOrm.sql`json_valid(${t.input_json}) AND json_type(${t.input_json}) = 'object'`),resultJsonCheck:sqliteCore.check("ui_action_receipts_result_json_ck",drizzleOrm.sql`${t.result_json} IS NULL OR (json_valid(${t.result_json}) AND json_type(${t.result_json}) = 'object')`),requestedAtCheck:sqliteCore.check("ui_action_receipts_requested_at_ck",drizzleOrm.sql`${t.requested_at} >= 0`),settledAtCheck:sqliteCore.check("ui_action_receipts_settled_at_ck",drizzleOrm.sql`${t.settled_at} IS NULL OR ${t.settled_at} >= ${t.requested_at}`),statusTransitionCheck:sqliteCore.check("ui_action_receipts_status_transition_ck",drizzleOrm.sql`(
|
|
69
|
+
`)}`);let i=t.get(n`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'`),s=0;i?.cnt&&(s=t.get(n`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0),nf(t,s),i?.cnt&&(sf(t,o,n),of(t,o,n)),e(t,{migrationsFolder:o});let d=(t.get(n`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0)-s;if(d>0){let c=i?.cnt?"Database migrated":"Database initialized";console.error(`[crewx] ${c} (${d} migration${d>1?"s":""} applied).`);}}function ce(t,e){Xa.has(e)||(to(t),Xa.add(e));}u();var R=class extends Error{code;cause;constructor(e,n,r){super(n),this.name="RepositoryError",this.code=e,this.cause=r,Object.setPrototypeOf(this,new.target.prototype);}};u();u();var Zn=sqliteCore.sqliteTable("workspaces",{id:sqliteCore.text("id").primaryKey(),slug:sqliteCore.text("slug").notNull().unique(),name:sqliteCore.text("name").notNull(),workspace_path:sqliteCore.text("workspace_path"),description:sqliteCore.text("description"),is_active:sqliteCore.integer("is_active").notNull().default(1),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()});u();var p=sqliteCore.sqliteTable("tasks",{id:sqliteCore.text("id").primaryKey(),agent_id:sqliteCore.text("agent_id").notNull(),user_id:sqliteCore.text("user_id"),prompt:sqliteCore.text("prompt").notNull(),mode:sqliteCore.text("mode").notNull().default("execute"),status:sqliteCore.text("status").notNull().default("running"),result:sqliteCore.text("result"),error:sqliteCore.text("error"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),metadata:sqliteCore.text("metadata"),workspace_id:sqliteCore.text("workspace_id"),trace_id:sqliteCore.text("trace_id"),parent_task_id:sqliteCore.text("parent_task_id"),caller_agent_id:sqliteCore.text("caller_agent_id"),model:sqliteCore.text("model"),platform:sqliteCore.text("platform").default("cli"),crewx_version:sqliteCore.text("crewx_version"),input_tokens:sqliteCore.integer("input_tokens").default(0),output_tokens:sqliteCore.integer("output_tokens").default(0),cost_usd:sqliteCore.real("cost_usd").default(0),pid:sqliteCore.integer("pid"),rendered_prompt:sqliteCore.text("rendered_prompt"),command:sqliteCore.text("command"),coding_agent_command:sqliteCore.text("coding_agent_command"),exit_code:sqliteCore.integer("exit_code"),logs:sqliteCore.text("logs"),log_storage:sqliteCore.text("log_storage",{enum:["blob","events"]}).notNull().default("blob"),last_log_seq:sqliteCore.integer("last_log_seq").notNull().default(0),log_revision:sqliteCore.integer("log_revision").notNull().default(0),thread_id:sqliteCore.text("thread_id"),workspace_ref:sqliteCore.text("workspace_ref"),project_id:sqliteCore.text("project_id"),project_ref:sqliteCore.text("project_ref"),cached_input_tokens:sqliteCore.integer("cached_input_tokens").default(0),run_epoch:sqliteCore.integer("run_epoch").default(0)},t=>({log_storage_check:sqliteCore.check("tasks_log_storage_ck",drizzleOrm.sql`${t.log_storage} IN ('blob', 'events')`),idx_tasks_agent_id:sqliteCore.index("idx_tasks_agent_id").on(t.agent_id),idx_tasks_status:sqliteCore.index("idx_tasks_status").on(t.status),idx_tasks_started_at:sqliteCore.index("idx_tasks_started_at").on(t.started_at),idx_tasks_trace_id:sqliteCore.index("idx_tasks_trace_id").on(t.trace_id),idx_tasks_parent_task_id:sqliteCore.index("idx_tasks_parent_task_id").on(t.parent_task_id),idx_tasks_crewx_version:sqliteCore.index("idx_tasks_crewx_version").on(t.crewx_version),idx_tasks_pid:sqliteCore.index("idx_tasks_pid").on(t.pid),idx_tasks_thread_id:sqliteCore.index("idx_tasks_thread_id").on(t.thread_id),idx_tasks_workspace_id:sqliteCore.index("idx_tasks_workspace_id").on(t.workspace_id),idx_tasks_workspace_ref:sqliteCore.index("idx_tasks_workspace_ref").on(t.workspace_ref),idx_tasks_project_id:sqliteCore.index("idx_tasks_project_id").on(t.project_id),idx_tasks_ws_started:sqliteCore.index("idx_tasks_ws_started").on(t.workspace_id,t.started_at)}));u();var tt=sqliteCore.sqliteTable("task_log_events",{id:sqliteCore.integer("id").primaryKey(),task_id:sqliteCore.text("task_id").notNull().references(()=>p.id,{onDelete:"cascade"}),seq:sqliteCore.integer("seq").notNull(),timestamp:sqliteCore.text("timestamp").notNull(),level:sqliteCore.text("level").notNull(),message:sqliteCore.text("message").notNull()},t=>({taskSeqUnique:sqliteCore.uniqueIndex("task_log_events_task_seq_uq").on(t.task_id,t.seq)}));u();var er=sqliteCore.sqliteTable("threads",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").references(()=>Zn.id,{onDelete:"set null"}),platform:sqliteCore.text("platform").notNull().default("cli"),title:sqliteCore.text("title"),first_message:sqliteCore.text("first_message"),last_message:sqliteCore.text("last_message"),message_count:sqliteCore.integer("message_count").notNull().default(0),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull(),metadata:sqliteCore.text("metadata"),title_locked:sqliteCore.integer("title_locked").notNull().default(0),pinned:sqliteCore.integer("pinned").notNull().default(0),starred:sqliteCore.integer("starred").notNull().default(0)},t=>({idx_threads_updated_at:sqliteCore.index("idx_threads_updated_at").on(t.updated_at),idx_threads_workspace_id:sqliteCore.index("idx_threads_workspace_id").on(t.workspace_id),idx_threads_ws_updated:sqliteCore.index("idx_threads_ws_updated").on(t.workspace_id,t.updated_at),idx_threads_title:sqliteCore.index("idx_threads_title").on(t.title)}));u();var St=sqliteCore.sqliteTable("spans",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>p.id,{onDelete:"set null"}),parent_span_id:sqliteCore.text("parent_span_id").references(()=>St.id,{onDelete:"set null"}),name:sqliteCore.text("name").notNull(),kind:sqliteCore.text("kind").notNull().default("internal"),status:sqliteCore.text("status").notNull().default("ok"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),error:sqliteCore.text("error"),attributes:sqliteCore.text("attributes")},t=>({idx_spans_task_id:sqliteCore.index("idx_spans_task_id").on(t.task_id),idx_spans_parent_span_id:sqliteCore.index("idx_spans_parent_span_id").on(t.parent_span_id)}));u();sqliteCore.sqliteTable("tool_calls",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>p.id,{onDelete:"cascade"}),session_id:sqliteCore.text("session_id"),tool_name:sqliteCore.text("tool_name").notNull(),files:sqliteCore.text("files"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),duration_ms:sqliteCore.integer("duration_ms"),timestamp:sqliteCore.text("timestamp").notNull()},t=>({idx_tool_calls_task_id:sqliteCore.index("idx_tool_calls_task_id").on(t.task_id),idx_tool_calls_tool_name:sqliteCore.index("idx_tool_calls_tool_name").on(t.tool_name),idx_tool_calls_timestamp:sqliteCore.index("idx_tool_calls_timestamp").on(t.timestamp)}));u();sqliteCore.sqliteTable("thread_boxes",{id:sqliteCore.text("id").primaryKey(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>er.id,{onDelete:"cascade"}),seq:sqliteCore.integer("seq").notNull(),first_task_id:sqliteCore.text("first_task_id").notNull(),mid_task_id:sqliteCore.text("mid_task_id").notNull(),last_task_id:sqliteCore.text("last_task_id").notNull(),task_count:sqliteCore.integer("task_count").notNull(),summary:sqliteCore.text("summary"),source_tokens:sqliteCore.integer("source_tokens").notNull(),summary_tokens:sqliteCore.integer("summary_tokens"),created_at:sqliteCore.text("created_at").notNull()},t=>({idx_thread_boxes_thread_id:sqliteCore.index("idx_thread_boxes_thread_id").on(t.thread_id),idx_thread_boxes_seq:sqliteCore.index("idx_thread_boxes_seq").on(t.thread_id,t.seq),uniq_thread_boxes_thread_seq:sqliteCore.unique().on(t.thread_id,t.seq)}));u();sqliteCore.sqliteTable("request_logs",{id:sqliteCore.text("id").primaryKey(),path:sqliteCore.text("path").notNull(),method:sqliteCore.text("method").notNull(),status_code:sqliteCore.integer("status_code").notNull(),duration_ms:sqliteCore.integer("duration_ms").notNull(),ip:sqliteCore.text("ip"),request_headers:sqliteCore.text("request_headers"),response_headers:sqliteCore.text("response_headers"),request_body:sqliteCore.text("request_body"),response_body:sqliteCore.text("response_body"),query:sqliteCore.text("query"),user_id:sqliteCore.text("user_id"),project_id:sqliteCore.text("project_id"),partition_key:sqliteCore.text("partition_key").notNull(),timestamp:sqliteCore.text("timestamp").notNull().default(drizzleOrm.sql`(datetime('now'))`),metadata:sqliteCore.text("metadata")},t=>({idx_request_logs_timestamp:sqliteCore.index("idx_request_logs_timestamp").on(t.timestamp),idx_request_logs_path:sqliteCore.index("idx_request_logs_path").on(t.path),idx_request_logs_status_code:sqliteCore.index("idx_request_logs_status_code").on(t.status_code),idx_request_logs_partition_key:sqliteCore.index("idx_request_logs_partition_key").on(t.partition_key)}));u();sqliteCore.sqliteTable("usage_limit_snapshots",{id:sqliteCore.text("id").primaryKey(),provider:sqliteCore.text("provider").notNull(),account_ref:sqliteCore.text("account_ref").notNull().default("default"),limit_window:sqliteCore.text("limit_window").notNull(),bucket_start:sqliteCore.text("bucket_start").notNull(),captured_at:sqliteCore.text("captured_at").notNull(),used_percent:sqliteCore.integer("used_percent").notNull(),remaining_percent:sqliteCore.integer("remaining_percent").notNull(),resets_at:sqliteCore.text("resets_at"),source:sqliteCore.text("source").notNull(),metadata:sqliteCore.text("metadata")},t=>({uniq_usage_limit_snapshots_bucket:sqliteCore.uniqueIndex("uniq_usage_limit_snapshots_bucket").on(t.provider,t.account_ref,t.limit_window,t.bucket_start),idx_usage_limit_snapshots_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_window_bucket").on(t.limit_window,t.bucket_start),idx_usage_limit_snapshots_provider_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_provider_window_bucket").on(t.provider,t.limit_window,t.bucket_start)}));u();sqliteCore.sqliteTable("usage_reports",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),month:sqliteCore.text("month").notNull(),generated_at:sqliteCore.text("generated_at").notNull(),source_range:sqliteCore.text("source_range").notNull(),tier:sqliteCore.text("tier").notNull(),total_tokens:sqliteCore.integer("total_tokens").notNull(),total_cost_usd:sqliteCore.real("total_cost_usd").notNull(),payload:sqliteCore.text("payload").notNull(),payload_hash:sqliteCore.text("payload_hash"),signature:sqliteCore.text("signature"),signed_at:sqliteCore.text("signed_at"),issuer:sqliteCore.text("issuer")},t=>({uniq_usage_reports_ws_month:sqliteCore.uniqueIndex("uniq_usage_reports_ws_month").on(t.workspace_id,t.month)}));u();sqliteCore.sqliteTable("notifications",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id"),task_id:sqliteCore.text("task_id"),thread_id:sqliteCore.text("thread_id"),source:sqliteCore.text("source").notNull().default("agent"),level:sqliteCore.text("level").notNull().default("info"),title:sqliteCore.text("title").notNull(),body:sqliteCore.text("body"),target_user_id:sqliteCore.text("target_user_id"),created_at:sqliteCore.text("created_at").notNull(),metadata:sqliteCore.text("metadata")},t=>({idx_notifications_ws_created:sqliteCore.index("idx_notifications_ws_created").on(t.workspace_id,drizzleOrm.sql`${t.created_at} DESC`)}));sqliteCore.sqliteTable("notification_reads",{notification_id:sqliteCore.text("notification_id").notNull(),user_id:sqliteCore.text("user_id").notNull(),read_at:sqliteCore.text("read_at").notNull()},t=>({pk:sqliteCore.primaryKey({columns:[t.notification_id,t.user_id]})}));u();sqliteCore.sqliteTable("agent_suggestions",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id").notNull(),task_id:sqliteCore.text("task_id"),type:sqliteCore.text("type").notNull(),status:sqliteCore.text("status").notNull().default("pending"),payload:sqliteCore.text("payload").notNull(),applied_commit_sha:sqliteCore.text("applied_commit_sha"),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()},t=>({idx_agent_suggestions_ws_agent:sqliteCore.index("idx_agent_suggestions_ws_agent").on(t.workspace_id,t.agent_id),idx_agent_suggestions_ws_created:sqliteCore.index("idx_agent_suggestions_ws_created").on(t.workspace_id,t.created_at)}));u();sqliteCore.sqliteTable("ui_instances",{id:sqliteCore.text("id").primaryKey().notNull(),definition_id:sqliteCore.text("definition_id").notNull(),definition_version:sqliteCore.integer("definition_version").notNull(),definition_hash:sqliteCore.text("definition_hash").notNull(),workspace_id:sqliteCore.text("workspace_id").notNull(),thread_id:sqliteCore.text("thread_id").notNull(),anchor_task_id:sqliteCore.text("anchor_task_id"),domain_ref_json:sqliteCore.text("domain_ref_json").notNull(),state_json:sqliteCore.text("state_json").notNull(),revision:sqliteCore.integer("revision").notNull().default(0),status:sqliteCore.text("status").notNull().default("active"),granted_capabilities_json:sqliteCore.text("granted_capabilities_json").notNull().default("[]"),created_at:sqliteCore.integer("created_at").notNull(),updated_at:sqliteCore.integer("updated_at").notNull()},t=>({idCheck:sqliteCore.check("ui_instances_id_ck",drizzleOrm.sql`length(${t.id}) BETWEEN 5 AND 128 AND ${t.id} GLOB 'uic_*'`),definitionIdCheck:sqliteCore.check("ui_instances_definition_id_ck",drizzleOrm.sql`length(${t.definition_id}) BETWEEN 1 AND 128`),definitionVersionCheck:sqliteCore.check("ui_instances_definition_version_ck",drizzleOrm.sql`${t.definition_version} >= 1`),definitionHashCheck:sqliteCore.check("ui_instances_definition_hash_ck",drizzleOrm.sql`length(${t.definition_hash}) = 64 AND ${t.definition_hash} NOT GLOB '*[^0-9a-f]*'`),workspaceIdCheck:sqliteCore.check("ui_instances_workspace_id_ck",drizzleOrm.sql`length(${t.workspace_id}) BETWEEN 1 AND 256`),threadIdCheck:sqliteCore.check("ui_instances_thread_id_ck",drizzleOrm.sql`length(${t.thread_id}) BETWEEN 1 AND 256`),domainRefJsonCheck:sqliteCore.check("ui_instances_domain_ref_json_ck",drizzleOrm.sql`json_valid(${t.domain_ref_json}) AND json_type(${t.domain_ref_json}) = 'object'`),stateJsonCheck:sqliteCore.check("ui_instances_state_json_ck",drizzleOrm.sql`json_valid(${t.state_json}) AND json_type(${t.state_json}) = 'object'`),revisionCheck:sqliteCore.check("ui_instances_revision_ck",drizzleOrm.sql`${t.revision} >= 0`),statusCheck:sqliteCore.check("ui_instances_status_ck",drizzleOrm.sql`${t.status} IN ('active', 'completed', 'expired', 'revoked', 'unsupported')`),grantedCapabilitiesJsonCheck:sqliteCore.check("ui_instances_granted_capabilities_json_ck",drizzleOrm.sql`json_valid(${t.granted_capabilities_json}) AND json_type(${t.granted_capabilities_json}) = 'array'`),createdAtCheck:sqliteCore.check("ui_instances_created_at_ck",drizzleOrm.sql`${t.created_at} >= 0`),updatedAtCheck:sqliteCore.check("ui_instances_updated_at_ck",drizzleOrm.sql`${t.updated_at} >= ${t.created_at}`),workspaceThreadIdx:sqliteCore.index("ui_instances_workspace_thread_idx").on(t.workspace_id,t.thread_id)}));u();sqliteCore.sqliteTable("ui_action_receipts",{id:sqliteCore.text("id").primaryKey().notNull(),instance_id:sqliteCore.text("instance_id").notNull(),request_id:sqliteCore.text("request_id").notNull(),action_id:sqliteCore.text("action_id").notNull(),actor_json:sqliteCore.text("actor_json").notNull(),source:sqliteCore.text("source").notNull(),expected_revision:sqliteCore.integer("expected_revision").notNull(),before_revision:sqliteCore.integer("before_revision").notNull(),after_revision:sqliteCore.integer("after_revision"),status:sqliteCore.text("status").notNull(),outcome:sqliteCore.text("outcome"),input_json:sqliteCore.text("input_json").notNull(),result_json:sqliteCore.text("result_json"),error_code:sqliteCore.text("error_code"),requested_at:sqliteCore.integer("requested_at").notNull(),settled_at:sqliteCore.integer("settled_at")},t=>({idCheck:sqliteCore.check("ui_action_receipts_id_ck",drizzleOrm.sql`length(${t.id}) BETWEEN 5 AND 128`),instanceIdCheck:sqliteCore.check("ui_action_receipts_instance_id_ck",drizzleOrm.sql`length(${t.instance_id}) BETWEEN 1 AND 128`),requestIdCheck:sqliteCore.check("ui_action_receipts_request_id_ck",drizzleOrm.sql`length(${t.request_id}) BETWEEN 1 AND 128`),actionIdCheck:sqliteCore.check("ui_action_receipts_action_id_ck",drizzleOrm.sql`length(${t.action_id}) BETWEEN 1 AND 128`),actorJsonCheck:sqliteCore.check("ui_action_receipts_actor_json_ck",drizzleOrm.sql`json_valid(${t.actor_json}) AND json_type(${t.actor_json}) = 'object'`),sourceCheck:sqliteCore.check("ui_action_receipts_source_ck",drizzleOrm.sql`${t.source} IN ('ui_host', 'cli', 'system')`),expectedRevisionCheck:sqliteCore.check("ui_action_receipts_expected_revision_ck",drizzleOrm.sql`${t.expected_revision} >= 0`),beforeRevisionCheck:sqliteCore.check("ui_action_receipts_before_revision_ck",drizzleOrm.sql`${t.before_revision} >= 0`),afterRevisionCheck:sqliteCore.check("ui_action_receipts_after_revision_ck",drizzleOrm.sql`${t.after_revision} IS NULL OR ${t.after_revision} >= 0`),statusCheck:sqliteCore.check("ui_action_receipts_status_ck",drizzleOrm.sql`${t.status} IN ('requested', 'settled')`),outcomeCheck:sqliteCore.check("ui_action_receipts_outcome_ck",drizzleOrm.sql`${t.outcome} IS NULL OR ${t.outcome} IN ('succeeded', 'rejected', 'failed', 'conflicted', 'expired')`),inputJsonCheck:sqliteCore.check("ui_action_receipts_input_json_ck",drizzleOrm.sql`json_valid(${t.input_json}) AND json_type(${t.input_json}) = 'object'`),resultJsonCheck:sqliteCore.check("ui_action_receipts_result_json_ck",drizzleOrm.sql`${t.result_json} IS NULL OR (json_valid(${t.result_json}) AND json_type(${t.result_json}) = 'object')`),requestedAtCheck:sqliteCore.check("ui_action_receipts_requested_at_ck",drizzleOrm.sql`${t.requested_at} >= 0`),settledAtCheck:sqliteCore.check("ui_action_receipts_settled_at_ck",drizzleOrm.sql`${t.settled_at} IS NULL OR ${t.settled_at} >= ${t.requested_at}`),statusTransitionCheck:sqliteCore.check("ui_action_receipts_status_transition_ck",drizzleOrm.sql`(
|
|
70
70
|
(${t.status} = 'requested' AND ${t.after_revision} IS NULL AND ${t.outcome} IS NULL AND ${t.settled_at} IS NULL)
|
|
71
71
|
OR
|
|
72
72
|
(${t.status} = 'settled' AND ${t.after_revision} IS NOT NULL AND ${t.outcome} IS NOT NULL AND ${t.settled_at} IS NOT NULL)
|
|
73
|
-
)`),instanceRequestUnique:sqliteCore.uniqueIndex("ui_action_receipts_instance_request_uq").on(t.instance_id,t.request_id),instanceIdIdx:sqliteCore.index("ui_action_receipts_instance_id_idx").on(t.instance_id),requestedAtIdx:sqliteCore.index("ui_action_receipts_requested_at_idx").on(t.requested_at)}));u();var
|
|
73
|
+
)`),instanceRequestUnique:sqliteCore.uniqueIndex("ui_action_receipts_instance_request_uq").on(t.instance_id,t.request_id),instanceIdIdx:sqliteCore.index("ui_action_receipts_instance_id_idx").on(t.instance_id),requestedAtIdx:sqliteCore.index("ui_action_receipts_requested_at_idx").on(t.requested_at)}));u();var $i=sqliteCore.sqliteTable("projects",{id:sqliteCore.text("id").primaryKey().notNull(),workspace_id:sqliteCore.text("workspace_id").notNull(),name:sqliteCore.text("name").notNull(),outcome:sqliteCore.text("outcome").notNull(),due_date:sqliteCore.text("due_date"),scene:sqliteCore.text("scene").notNull().default("planning"),stages_json:sqliteCore.text("stages_json").notNull(),stage_index:sqliteCore.integer("stage_index").notNull(),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull(),accepted_at:sqliteCore.text("accepted_at"),archived_at:sqliteCore.text("archived_at")},t=>({idCheck:sqliteCore.check("projects_id_ck",drizzleOrm.sql`${t.id} GLOB 'prj_*'`),sceneCheck:sqliteCore.check("projects_scene_ck",drizzleOrm.sql`${t.scene} IN ('planning', 'plan_review', 'running', 'human_wait', 'limit_wait', 'failed_stop', 'analyzing_feedback', 'replanned', 'awaiting_review', 'accepted')`),stagesJsonCheck:sqliteCore.check("projects_stages_json_ck",drizzleOrm.sql`json_valid(${t.stages_json}) AND json_type(${t.stages_json}) = 'array'`),stageIndexCheck:sqliteCore.check("projects_stage_index_ck",drizzleOrm.sql`${t.stage_index} >= 1`)}));sqliteCore.sqliteTable("project_criteria",{id:sqliteCore.text("id").primaryKey().notNull(),project_id:sqliteCore.text("project_id").notNull().references(()=>$i.id,{onDelete:"cascade"}),position:sqliteCore.integer("position").notNull(),statement:sqliteCore.text("statement").notNull(),verify_status:sqliteCore.text("verify_status").notNull().default("pending"),verified_at:sqliteCore.text("verified_at"),evidence_json:sqliteCore.text("evidence_json").notNull().default("[]"),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()},t=>({idCheck:sqliteCore.check("project_criteria_id_ck",drizzleOrm.sql`${t.id} GLOB 'pjc_*'`),verifyStatusCheck:sqliteCore.check("project_criteria_verify_status_ck",drizzleOrm.sql`${t.verify_status} IN ('pending', 'verifying', 'passed', 'failed')`),evidenceJsonCheck:sqliteCore.check("project_criteria_evidence_json_ck",drizzleOrm.sql`json_valid(${t.evidence_json}) AND json_type(${t.evidence_json}) = 'array'`),projectPositionUnique:sqliteCore.uniqueIndex("project_criteria_project_position_uq").on(t.project_id,t.position)}));sqliteCore.sqliteTable("project_events",{id:sqliteCore.text("id").primaryKey().notNull(),project_id:sqliteCore.text("project_id").notNull().references(()=>$i.id,{onDelete:"restrict"}),seq:sqliteCore.integer("seq").notNull(),actor_type:sqliteCore.text("actor_type").notNull(),actor_id:sqliteCore.text("actor_id"),type:sqliteCore.text("type").notNull(),title:sqliteCore.text("title").notNull(),summary:sqliteCore.text("summary"),payload_json:sqliteCore.text("payload_json").notNull().default("{}"),created_at:sqliteCore.text("created_at").notNull()},t=>({idCheck:sqliteCore.check("project_events_id_ck",drizzleOrm.sql`${t.id} GLOB 'pje_*'`),actorTypeCheck:sqliteCore.check("project_events_actor_type_ck",drizzleOrm.sql`${t.actor_type} IN ('user', 'project_manager', 'system')`),payloadJsonCheck:sqliteCore.check("project_events_payload_json_ck",drizzleOrm.sql`json_valid(${t.payload_json}) AND json_type(${t.payload_json}) = 'object'`),projectSeqUnique:sqliteCore.uniqueIndex("project_events_project_seq_uq").on(t.project_id,t.seq)}));en();u();function hd(t,e){let n=e===void 0?"":` at index ${e}`;if(!t||typeof t!="object")throw new R("VALIDATION",`Task log entry${n} must be an object`);if(typeof t.timestamp!="string"||typeof t.level!="string"||typeof t.message!="string")throw new R("VALIDATION",`Task log entry${n} must contain string timestamp, level, and message fields`);return {timestamp:t.timestamp,level:t.level,message:t.message}}function gd(t,e){if(e===null||e.trim()==="")return [];let n;try{n=JSON.parse(e);}catch(r){throw new R("DB_ERROR",`Malformed legacy task logs: ${t}`,r)}if(!Array.isArray(n))throw new R("DB_ERROR",`Malformed legacy task logs: ${t} (expected an array)`);try{return n.map((r,o)=>hd(r,o))}catch(r){throw r instanceof R?new R("DB_ERROR",`Malformed legacy task logs: ${t}`,r):r}}function yd(t){if(t.log_storage!=="blob"&&t.log_storage!=="events")throw new R("DB_ERROR",`Invalid task log storage for task: ${t.id}`);if(!Number.isInteger(t.last_log_seq)||t.last_log_seq<0)throw new R("DB_ERROR",`Invalid task log sequence for task: ${t.id}`);if(!Number.isInteger(t.log_revision)||t.log_revision<0)throw new R("DB_ERROR",`Invalid task log revision for task: ${t.id}`);return t.log_storage}function md(t){return {taskId:t.id,source:yd(t),revision:t.log_revision,lastSeq:t.last_log_seq}}function Xf(t){if(!Number.isInteger(t)||t<0)throw new R("VALIDATION","Task log tail limit must be a non-negative integer")}var rr=class extends ie{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=X.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=X.dirname(n);kd.existsSync(o)||kd.mkdirSync(o,{recursive:true});}else if(!kd.existsSync(n))throw new R("NOT_FOUND","Database not found");let r=Y(n);if(e)try{ce(r.db,n);}catch(o){throw r.close(),o}return r}findStateRow(e,n){return e.db.select({id:p.id,log_storage:p.log_storage,last_log_seq:p.last_log_seq,log_revision:p.log_revision,logs:p.logs}).from(p).where(drizzleOrm.eq(p.id,n)).limit(1).get()}findStateRowInTransaction(e,n){return e.select({id:p.id,log_storage:p.log_storage,last_log_seq:p.last_log_seq,log_revision:p.log_revision,logs:p.logs}).from(p).where(drizzleOrm.eq(p.id,n)).limit(1).get()}requireStateRowInTransaction(e,n){let r=this.findStateRowInTransaction(e,n);if(!r)throw new R("NOT_FOUND",`Task not found: ${n}`);return r}appendLog(e,n){return this.appendLogs(e,[n])}appendLogs(e,n){let r=n.map((i,s)=>hd(i,s));if(r.length===0){let i=this.getLogState(e);if(!i)throw new R("NOT_FOUND",`Task not found: ${e}`);return i}let o=this.openHandle(true);try{return o.db.transaction(s=>{let a=this.requireStateRowInTransaction(s,e),d=yd(a);if(d==="blob"){let g=gd(e,a.logs);if(s.update(p).set({logs:JSON.stringify([...g,...r]),log_revision:drizzleOrm.sql`${p.log_revision} + 1`}).where(drizzleOrm.eq(p.id,e)).run().changes!==1)throw new R("NOT_FOUND",`Task not found: ${e}`);return {taskId:e,source:d,revision:a.log_revision+1,lastSeq:a.last_log_seq}}let c=a.last_log_seq+1,l=a.last_log_seq+r.length;if(s.insert(tt).values(r.map((g,m)=>({task_id:e,seq:c+m,timestamp:g.timestamp,level:g.level,message:g.message}))).run(),s.update(p).set({last_log_seq:l,log_revision:drizzleOrm.sql`${p.log_revision} + 1`}).where(drizzleOrm.eq(p.id,e)).run().changes!==1)throw new R("NOT_FOUND",`Task not found: ${e}`);return {taskId:e,source:d,revision:a.log_revision+1,lastSeq:l}},{behavior:"immediate"})}catch(i){throw i instanceof R?i:new R("DB_ERROR","Failed to append task log",i)}finally{o.close();}}getLogState(e){if(!this.dbExists())return;let n=this.openHandle(false);try{let r=this.findStateRow(n,e);return r?md(r):void 0}catch(r){throw r instanceof R?r:new R("DB_ERROR","Failed to read task log state",r)}finally{n.close();}}readLogs(e){return this.readLogsInternal(e)}readLogsTail(e,n){return Xf(n),this.readLogsInternal(e,n)}readTail(e,n){return this.readLogsTail(e,n)}readLogsInternal(e,n){if(!this.dbExists())return;let r=this.openHandle(false);try{return r.db.transaction(o=>{let i=this.findStateRowInTransaction(o,e);if(!i)return;let s=md(i);if(s.source==="blob"){let l=gd(e,i.logs);return {...s,entries:n===void 0?l:l.slice(Math.max(0,l.length-n))}}let a=o.select({seq:tt.seq,timestamp:tt.timestamp,level:tt.level,message:tt.message}).from(tt).where(drizzleOrm.eq(tt.task_id,e)).orderBy(n===void 0?drizzleOrm.asc(tt.seq):drizzleOrm.desc(tt.seq)),c=(n===void 0?a.all():a.limit(n).all()).map(({timestamp:l,level:f,message:g})=>({timestamp:l,level:f,message:g}));return n!==void 0&&c.reverse(),{...s,entries:c}},{behavior:"deferred"})}catch(o){throw o instanceof R?o:new R("DB_ERROR","Failed to read task logs",o)}finally{r.close();}}};var Fi=40,kt="2026-05-09",rg="0.8.9-rc.13",vt=10,Et=parseInt(rg.split("rc.")[1]);function _d(){let t=drizzleOrm.sql`
|
|
74
74
|
CASE
|
|
75
75
|
WHEN ${p.model} LIKE 'claude-%' OR ${p.model} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
|
|
76
76
|
WHEN ${p.model} LIKE 'gpt-%' OR ${p.model} LIKE 'codex-%' THEN 'codex'
|
|
@@ -99,7 +99,7 @@ ${r.join(`
|
|
|
99
99
|
WHEN trim(${o}) = '' THEN 'unknown'
|
|
100
100
|
ELSE ${o}
|
|
101
101
|
END
|
|
102
|
-
`}var
|
|
102
|
+
`}var og=new Set(["workflow","mcp"]),wd=600*1e3,un=class extends ie{dbPath;taskLogRepository;pidNullObservedSince=new Map;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=X.join(e.dbRoot,".crewx","crewx.db")),this.taskLogRepository=new rr({dbPath:this.dbPath});}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=X.dirname(n);kd.existsSync(o)||kd.mkdirSync(o,{recursive:true});}else if(!kd.existsSync(n))throw new R("NOT_FOUND","Database not found");let r=Y(n);if(e)try{ce(r.db,n);}catch(o){throw r.close(),o}return r}startTask(e){let n=this.openHandle(true);try{let r={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,project_id:e.projectId??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,log_storage:"events"},o=i=>{n.db.insert(p).values(i).onConflictDoUpdate({target:p.id,set:{pid:drizzleOrm.sql`COALESCE(excluded.pid, ${p.pid})`},setWhere:drizzleOrm.eq(p.status,"running")}).run();};try{o(r);}catch(i){let s=i instanceof Error?i.message:typeof i=="object"&&i!==null&&"message"in i?String(i.message):String(i);if(!/log_storage/i.test(s)||!/no such column|no column named/i.test(s))throw i;n.runRaw(`INSERT INTO tasks (
|
|
103
103
|
id, agent_id, prompt, mode, status, started_at, pid,
|
|
104
104
|
parent_task_id, caller_agent_id, trace_id, command, metadata,
|
|
105
105
|
workspace_id, project_id, platform, crewx_version, thread_id,
|
|
@@ -109,7 +109,7 @@ ${r.join(`
|
|
|
109
109
|
WHERE tasks.status = 'running'`,[r.id,r.agent_id,r.prompt,r.mode,r.status,r.started_at,r.pid,r.parent_task_id,r.caller_agent_id,r.trace_id,r.command,r.metadata,r.workspace_id,r.project_id,r.platform,r.crewx_version,r.thread_id,r.model,r.rendered_prompt,r.coding_agent_command]);}}catch(r){throw r instanceof R?r:new R("DB_ERROR","Failed to start task",r)}finally{n.close();}}listTasksByProjectId(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.select().from(p).where(drizzleOrm.eq(p.project_id,e)).orderBy(drizzleOrm.desc(p.started_at)).all()}catch(r){throw r instanceof R?r:new R("DB_ERROR","Failed to list tasks by project",r)}finally{n.close();}}finishTask(e){let n=this.openHandle(true);try{let r=e.runEpoch??null;n.runRaw(`UPDATE tasks SET status=?, result=?, error=?, completed_at=?, duration_ms=?,
|
|
110
110
|
exit_code=?, input_tokens=?, output_tokens=?, cached_input_tokens=?, cost_usd=?,
|
|
111
111
|
model=COALESCE(?, model)
|
|
112
|
-
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 R?r:new R("DB_ERROR","Failed to finish task",r)}finally{n.close();}}appendLog(e,n){this.taskLogRepository.appendLog(e,n);}appendLogs(e,n){this.taskLogRepository.appendLogs(e,n);}readLogs(e){return this.taskLogRepository.readLogs(e)}readLogsTail(e,n){return this.taskLogRepository.readLogsTail(e,n)}getLogState(e){return this.taskLogRepository.getLogState(e)}getRunningTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(p).where(drizzleOrm.eq(p.status,"running")).orderBy(drizzleOrm.desc(p.started_at)).all()}catch(n){throw new R("DB_ERROR","Failed to get running tasks",n)}finally{e.close();}}getAllTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(p).orderBy(drizzleOrm.desc(p.started_at)).limit(100).all()}catch(n){throw new R("DB_ERROR","Failed to get all tasks",n)}finally{e.close();}}getTask(e){if(!this.dbExists())return;let n=this.openHandle(false);try{return n.db.select().from(p).where(drizzleOrm.eq(p.id,e)).limit(1).get()??void 0}catch(r){throw new R("DB_ERROR","Failed to get task",r)}finally{n.close();}}killTask(e){if(!this.dbExists())return {killed:false};let n=this.openHandle(true);try{let r=n.db.select({id:p.id,status:p.status,pid:p.pid}).from(p).where(drizzleOrm.eq(p.id,e)).limit(1).get();if(!r||r.status!=="running")return {killed:!1};if(r.pid)try{process.kill(r.pid,"SIGTERM");}catch{}return n.db.update(p).set({status:"failed",error:"Killed by user",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.status,"running"))).run(),{killed:!0,pid:r.pid??void 0}}catch(r){throw r instanceof R?r:new R("DB_ERROR","Failed to kill task",r)}finally{n.close();}}reapOrphanedTasks(){if(!this.dbExists())return 0;let e=this.openHandle(true);try{let n=e.db.select({id:p.id,pid:p.pid,platform:p.platform,run_epoch:p.run_epoch}).from(p).where(drizzleOrm.eq(p.status,"running")).all(),r=Date.now(),o=new Set,i=0;for(let s of n){if(s.pid){let c=!1;try{process.kill(s.pid,0),c=!0;}catch{}c||(e.db.update(p).set({status:"failed",error:"Reaped: process not found (orphaned task)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(p.id,s.id),drizzleOrm.eq(p.status,"running"))).run(),i++);continue}if(
|
|
112
|
+
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 R?r:new R("DB_ERROR","Failed to finish task",r)}finally{n.close();}}appendLog(e,n){this.taskLogRepository.appendLog(e,n);}appendLogs(e,n){this.taskLogRepository.appendLogs(e,n);}readLogs(e){return this.taskLogRepository.readLogs(e)}readLogsTail(e,n){return this.taskLogRepository.readLogsTail(e,n)}getLogState(e){return this.taskLogRepository.getLogState(e)}getRunningTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(p).where(drizzleOrm.eq(p.status,"running")).orderBy(drizzleOrm.desc(p.started_at)).all()}catch(n){throw new R("DB_ERROR","Failed to get running tasks",n)}finally{e.close();}}getAllTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(p).orderBy(drizzleOrm.desc(p.started_at)).limit(100).all()}catch(n){throw new R("DB_ERROR","Failed to get all tasks",n)}finally{e.close();}}getTask(e){if(!this.dbExists())return;let n=this.openHandle(false);try{return n.db.select().from(p).where(drizzleOrm.eq(p.id,e)).limit(1).get()??void 0}catch(r){throw new R("DB_ERROR","Failed to get task",r)}finally{n.close();}}killTask(e){if(!this.dbExists())return {killed:false};let n=this.openHandle(true);try{let r=n.db.select({id:p.id,status:p.status,pid:p.pid}).from(p).where(drizzleOrm.eq(p.id,e)).limit(1).get();if(!r||r.status!=="running")return {killed:!1};if(r.pid)try{process.kill(r.pid,"SIGTERM");}catch{}return n.db.update(p).set({status:"failed",error:"Killed by user",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.status,"running"))).run(),{killed:!0,pid:r.pid??void 0}}catch(r){throw r instanceof R?r:new R("DB_ERROR","Failed to kill task",r)}finally{n.close();}}reapOrphanedTasks(){if(!this.dbExists())return 0;let e=this.openHandle(true);try{let n=e.db.select({id:p.id,pid:p.pid,platform:p.platform,run_epoch:p.run_epoch}).from(p).where(drizzleOrm.eq(p.status,"running")).all(),r=Date.now(),o=new Set,i=0;for(let s of n){if(s.pid){let c=!1;try{process.kill(s.pid,0),c=!0;}catch{}c||(e.db.update(p).set({status:"failed",error:"Reaped: process not found (orphaned task)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(p.id,s.id),drizzleOrm.eq(p.status,"running"))).run(),i++);continue}if(og.has(s.platform??"cli"))continue;let a=`${s.id}:${s.run_epoch??0}`;o.add(a);let d=this.pidNullObservedSince.get(a);if(d===void 0){this.pidNullObservedSince.set(a,r);continue}r-d>=wd&&(e.db.update(p).set({status:"failed",error:"Reaped: pid never recorded after resume (stale running_instruction)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(p.id,s.id),drizzleOrm.eq(p.status,"running"))).run(),i++,this.pidNullObservedSince.delete(a));}for(let s of Array.from(this.pidNullObservedSince.keys()))o.has(s)||this.pidNullObservedSince.delete(s);return i}finally{e.close();}}reapRunningWorkflowTasks(e=wd){if(!this.dbExists())return 0;let n=this.openHandle(true);try{let r=new Date(Date.now()-e).toISOString();return n.db.update(p).set({status:"failed",error:"Reaped: stale workflow run (finally not executed)",completed_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(p.status,"running"),drizzleOrm.eq(p.platform,"workflow"),drizzleOrm.isNull(p.pid),drizzleOrm.lt(p.started_at,r),drizzleOrm.or(drizzleOrm.isNull(p.metadata),drizzleOrm.and(drizzleOrm.notLike(p.metadata,'%"kind":"workflow_card"%'),drizzleOrm.notLike(p.metadata,'%"kind":"workflow_ui_instance"%'))))).run().changes??0}finally{n.close();}}findTaskStatus(e,n){let r=this.resolveDbPaths();for(let o of r){if(!kd.existsSync(o))continue;let i=Y(o);try{let s=n?drizzleOrm.eq(p.workspace_id,n):void 0,a=s?drizzleOrm.and(drizzleOrm.eq(p.id,e),s):drizzleOrm.eq(p.id,e),d=i.db.select().from(p).where(a).limit(1).get()??void 0;if(!d){let c=drizzleOrm.or(drizzleOrm.eq(p.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.like(p.command,`%--thread=${e}%`))),l=s?drizzleOrm.and(c,s):c;d=i.db.select().from(p).where(l).orderBy(drizzleOrm.desc(p.started_at)).limit(1).get()??void 0;}if(d)return d}catch(s){throw new R("DB_ERROR","Failed to find task status",s)}finally{i.close();}}}findChildTasks(e,n){let r=this.resolveDbPaths(),o=new Set,i=[];for(let s of r){if(!kd.existsSync(s))continue;let a=Y(s);try{let d=n?drizzleOrm.and(drizzleOrm.eq(p.parent_task_id,e),drizzleOrm.eq(p.workspace_id,n)):drizzleOrm.eq(p.parent_task_id,e),c=a.db.select().from(p).where(d).orderBy(drizzleOrm.asc(p.started_at)).all();for(let l of c)o.has(l.id)||(o.add(l.id),i.push(l));}catch(d){throw new R("DB_ERROR","Failed to find child tasks",d)}finally{a.close();}}return i}getWorkspaceUsageSummary(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.all(e?drizzleOrm.sql`
|
|
113
113
|
SELECT
|
|
114
114
|
COALESCE(workspace_id, 'unknown') AS workspace_id,
|
|
115
115
|
COALESCE(SUM(input_tokens), 0) AS input_tokens,
|
|
@@ -130,7 +130,7 @@ ${r.join(`
|
|
|
130
130
|
FROM tasks
|
|
131
131
|
GROUP BY workspace_id
|
|
132
132
|
ORDER BY (COALESCE(SUM(input_tokens), 0) + COALESCE(SUM(output_tokens), 0)) DESC
|
|
133
|
-
`)}catch(r){throw new R("DB_ERROR","Failed to get workspace usage summary",r)}finally{n.close();}}getThreadTokenUsage(e,n){let r=this.resolveDbPaths(),o=new Set,i=0,s=0,a=0;for(let d of r){if(!
|
|
133
|
+
`)}catch(r){throw new R("DB_ERROR","Failed to get workspace usage summary",r)}finally{n.close();}}getThreadTokenUsage(e,n){let r=this.resolveDbPaths(),o=new Set,i=0,s=0,a=0;for(let d of r){if(!kd.existsSync(d))continue;let c=Y(d);try{let l=drizzleOrm.or(drizzleOrm.eq(p.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.like(p.command,`%--thread=${e}%`))),f=n?drizzleOrm.and(l,drizzleOrm.eq(p.workspace_id,n)):l,g=c.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),i+=m.input_tokens??0,s+=m.output_tokens??0,a+=m.cost_usd??0);}catch(l){throw new R("DB_ERROR","Failed to get thread token usage",l)}finally{c.close();}}return {inputTokens:i,outputTokens:s,costUsd:a}}findTasksByThread(e,n){let r=this.resolveDbPaths(),o=new Set,i=[];for(let s of r){if(!kd.existsSync(s))continue;let a=Y(s);try{let d=drizzleOrm.or(drizzleOrm.eq(p.thread_id,e),drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.like(p.command,`%--thread=${e}%`))),c=n?drizzleOrm.and(d,drizzleOrm.eq(p.workspace_id,n)):d,l=a.db.select().from(p).where(c).orderBy(drizzleOrm.asc(p.started_at)).all();for(let f of l)o.has(f.id)||(o.add(f.id),i.push(f));}catch(d){throw new R("DB_ERROR","Failed to find tasks by thread",d)}finally{a.close();}}return i}parseWorkflowCardMetadata(e){if(!e)return {};try{let n=JSON.parse(e);return {kind:typeof n.kind=="string"?n.kind:void 0,workflowRunId:typeof n.workflowRunId=="string"?n.workflowRunId:void 0}}catch{return {}}}extractThreadIdFromCommand(e){return e?/--thread=(\S+)/.exec(e)?.[1]??null:null}findRunningWorkflowParentTasks(){if(!this.dbExists())return [];let e=[];for(let n of this.resolveDbPaths()){if(!kd.existsSync(n))continue;let r=Y(n);try{e.push(...r.db.select({id:p.id,agent_id:p.agent_id,thread_id:p.thread_id,workspace_id:p.workspace_id,platform:p.platform,status:p.status,error:p.error,completed_at:p.completed_at,duration_ms:p.duration_ms,started_at:p.started_at,metadata:p.metadata}).from(p).where(drizzleOrm.and(drizzleOrm.eq(p.platform,"workflow"),drizzleOrm.or(drizzleOrm.like(p.metadata,'%"kind":"workflow_card"%'),drizzleOrm.like(p.metadata,'%"kind":"workflow_ui_instance"%')))).orderBy(drizzleOrm.desc(p.started_at)).all());}catch(o){throw new R("DB_ERROR","Failed to find workflow parent tasks",o)}finally{r.close();}}return e}batchFetchWorkflowCards(e,n){let r=new Map;if(e.length===0)return r;let o=new Set(e),i=new Map,s=n?drizzleOrm.eq(p.workspace_id,n):void 0,a=(d,c)=>{if(!d)return;let l=i.get(d);if(l&&c.started_at<=l)return;let f=this.parseWorkflowCardMetadata(c.metadata);f.kind!=="workflow_card"&&f.kind!=="workflow_ui_instance"||(i.set(d,c.started_at),r.set(d,{taskId:c.id,workflowRunId:f.workflowRunId,raw:c.result??void 0}));};for(let d of this.resolveDbPaths()){if(!kd.existsSync(d))continue;let c=Y(d);try{let l=drizzleOrm.and(drizzleOrm.inArray(p.thread_id,e),drizzleOrm.or(drizzleOrm.like(p.metadata,'%"kind":"workflow_card"%'),drizzleOrm.like(p.metadata,'%"kind":"workflow_ui_instance"%'))),f=c.db.select({id:p.id,thread_id:p.thread_id,metadata:p.metadata,result:p.result,started_at:p.started_at}).from(p).where(s?drizzleOrm.and(l,s):l).all();for(let k of f)a(k.thread_id,k);let g=drizzleOrm.and(drizzleOrm.isNull(p.thread_id),drizzleOrm.or(drizzleOrm.like(p.metadata,'%"kind":"workflow_card"%'),drizzleOrm.like(p.metadata,'%"kind":"workflow_ui_instance"%'))),m=c.db.select({id:p.id,command:p.command,metadata:p.metadata,result:p.result,started_at:p.started_at}).from(p).where(s?drizzleOrm.and(g,s):g).all();for(let k of m){let h=this.extractThreadIdFromCommand(k.command);!h||!o.has(h)||a(h,k);}}catch(l){throw new R("DB_ERROR","Failed to batch fetch workflow cards",l)}finally{c.close();}}return r}findAllTasks(e){if(!this.dbExists())return {rows:[],total:0};let n=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(drizzleOrm.eq(p.workspace_id,e.workspaceId));let o=e.agents&&e.agents.length>0?e.agents:e.agentId?[e.agentId]:null;o&&r.push(drizzleOrm.inArray(p.agent_id,o));let i=e.statuses&&e.statuses.length>0?e.statuses:e.status?[e.status]:null;i&&r.push(drizzleOrm.inArray(p.status,i));let s=e.q??e.search;s&&r.push(drizzleOrm.like(p.prompt,`%${s}%`)),e.from&&r.push(drizzleOrm.gte(p.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(p.started_at,e.to));let a=r.length>0?drizzleOrm.and(...r):void 0,d=n.db.select({count:drizzleOrm.sql`count(*)`}).from(p).where(a).get(),c=(e.sortDir??"DESC")==="ASC"?drizzleOrm.asc(p.started_at):drizzleOrm.desc(p.started_at);return {rows:n.db.select().from(p).where(a).orderBy(c).limit(e.limit).offset(e.offset).all(),total:d?.count??0}}catch(r){throw new R("DB_ERROR","Failed to find all tasks",r)}finally{n.close();}}getAgentUsage(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{return o.db.all(r?drizzleOrm.sql`
|
|
134
134
|
SELECT
|
|
135
135
|
t.agent_id,
|
|
136
136
|
t.workspace_id,
|
|
@@ -138,11 +138,11 @@ ${r.join(`
|
|
|
138
138
|
COALESCE(SUM(
|
|
139
139
|
COALESCE(t.input_tokens, 0)
|
|
140
140
|
+ CASE
|
|
141
|
-
WHEN t.started_at >= ${
|
|
141
|
+
WHEN t.started_at >= ${kt}
|
|
142
142
|
AND (
|
|
143
143
|
t.crewx_version IS NULL
|
|
144
144
|
OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
|
|
145
|
-
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${
|
|
145
|
+
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${vt}) AS INTEGER) < ${Et})
|
|
146
146
|
)
|
|
147
147
|
THEN COALESCE(t.cached_input_tokens, 0)
|
|
148
148
|
ELSE 0
|
|
@@ -161,11 +161,11 @@ ${r.join(`
|
|
|
161
161
|
COALESCE(SUM(
|
|
162
162
|
COALESCE(t.input_tokens, 0)
|
|
163
163
|
+ CASE
|
|
164
|
-
WHEN t.started_at >= ${
|
|
164
|
+
WHEN t.started_at >= ${kt}
|
|
165
165
|
AND (
|
|
166
166
|
t.crewx_version IS NULL
|
|
167
167
|
OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
|
|
168
|
-
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${
|
|
168
|
+
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${vt}) AS INTEGER) < ${Et})
|
|
169
169
|
)
|
|
170
170
|
THEN COALESCE(t.cached_input_tokens, 0)
|
|
171
171
|
ELSE 0
|
|
@@ -181,11 +181,11 @@ ${r.join(`
|
|
|
181
181
|
COALESCE(SUM(
|
|
182
182
|
COALESCE(t.input_tokens, 0)
|
|
183
183
|
+ CASE
|
|
184
|
-
WHEN t.started_at >= ${
|
|
184
|
+
WHEN t.started_at >= ${kt}
|
|
185
185
|
AND (
|
|
186
186
|
t.crewx_version IS NULL
|
|
187
187
|
OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
|
|
188
|
-
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${
|
|
188
|
+
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${vt}) AS INTEGER) < ${Et})
|
|
189
189
|
)
|
|
190
190
|
THEN COALESCE(t.cached_input_tokens, 0)
|
|
191
191
|
ELSE 0
|
|
@@ -203,11 +203,11 @@ ${r.join(`
|
|
|
203
203
|
COALESCE(SUM(
|
|
204
204
|
COALESCE(t.input_tokens, 0)
|
|
205
205
|
+ CASE
|
|
206
|
-
WHEN t.started_at >= ${
|
|
206
|
+
WHEN t.started_at >= ${kt}
|
|
207
207
|
AND (
|
|
208
208
|
t.crewx_version IS NULL
|
|
209
209
|
OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
|
|
210
|
-
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${
|
|
210
|
+
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${vt}) AS INTEGER) < ${Et})
|
|
211
211
|
)
|
|
212
212
|
THEN COALESCE(t.cached_input_tokens, 0)
|
|
213
213
|
ELSE 0
|
|
@@ -222,11 +222,11 @@ ${r.join(`
|
|
|
222
222
|
COALESCE(SUM(
|
|
223
223
|
COALESCE(t.input_tokens, 0)
|
|
224
224
|
+ CASE
|
|
225
|
-
WHEN t.started_at >= ${
|
|
225
|
+
WHEN t.started_at >= ${kt}
|
|
226
226
|
AND (
|
|
227
227
|
t.crewx_version IS NULL
|
|
228
228
|
OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
|
|
229
|
-
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${
|
|
229
|
+
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${vt}) AS INTEGER) < ${Et})
|
|
230
230
|
)
|
|
231
231
|
THEN COALESCE(t.cached_input_tokens, 0)
|
|
232
232
|
ELSE 0
|
|
@@ -249,11 +249,11 @@ ${r.join(`
|
|
|
249
249
|
COALESCE(SUM(
|
|
250
250
|
COALESCE(t.input_tokens, 0)
|
|
251
251
|
+ CASE
|
|
252
|
-
WHEN t.started_at >= ${
|
|
252
|
+
WHEN t.started_at >= ${kt}
|
|
253
253
|
AND (
|
|
254
254
|
t.crewx_version IS NULL
|
|
255
255
|
OR (t.crewx_version LIKE '0.8.%' AND t.crewx_version NOT LIKE '0.8.9%')
|
|
256
|
-
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${
|
|
256
|
+
OR (t.crewx_version LIKE '0.8.9-rc.%' AND CAST(SUBSTR(t.crewx_version, ${vt}) AS INTEGER) < ${Et})
|
|
257
257
|
)
|
|
258
258
|
THEN COALESCE(t.cached_input_tokens, 0)
|
|
259
259
|
ELSE 0
|
|
@@ -268,14 +268,14 @@ ${r.join(`
|
|
|
268
268
|
AND t.started_at < ${n}
|
|
269
269
|
GROUP BY date(t.started_at), t.agent_id
|
|
270
270
|
ORDER BY date(t.started_at) ASC
|
|
271
|
-
`).map(s=>({date:s.date,agentId:s.agent_id,inputTokens:s.input_tokens,outputTokens:s.output_tokens,cachedInputTokens:s.cached_input_tokens,costUsd:s.cost_usd,totalTokens:s.input_tokens+s.output_tokens}))}catch(i){throw new R("DB_ERROR","Failed to get agent usage trend",i)}finally{o.close();}}findTaskForStop(e,n){if(!this.dbExists())return;let r=this.openHandle(false);try{return r.db.select().from(p).where(drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.workspace_id,n))).limit(1).get()??void 0}catch(o){throw new R("DB_ERROR","Failed to find task for stop",o)}finally{r.close();}}findLatestTaskByMetadata(e){if(!this.dbExists())return null;let n=this.openHandle(false);try{return n.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,metadata:p.metadata}).from(p).where(drizzleOrm.and(drizzleOrm.eq(p.agent_id,e.agentId),drizzleOrm.eq(p.workspace_id,e.workspaceId),drizzleOrm.sql`${p.metadata} IS NOT NULL AND json_valid(${p.metadata}) AND json_extract(${p.metadata}, '$.' || ${e.metaKey}) = ${e.metaValue}`)).orderBy(drizzleOrm.desc(p.started_at)).limit(1).get()??null}catch(r){throw new R("DB_ERROR","Failed to find latest task by metadata",r)}finally{n.close();}}markTaskFailed(e,n,r){if(!this.dbExists())return;let o=this.openHandle(true);try{let i=new Date().toISOString(),s=r?drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.status,"running"),drizzleOrm.eq(p.workspace_id,r)):drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.status,"running"));o.db.update(p).set({status:"failed",error:n,completed_at:i}).where(s).run();}catch(i){throw i instanceof R?i:new R("DB_ERROR","Failed to mark task failed",i)}finally{o.close();}}findTasksByPromptHint(e,n){let r=this.resolveDbPaths(),o=new Set,i=[];for(let s of r){if(!
|
|
271
|
+
`).map(s=>({date:s.date,agentId:s.agent_id,inputTokens:s.input_tokens,outputTokens:s.output_tokens,cachedInputTokens:s.cached_input_tokens,costUsd:s.cost_usd,totalTokens:s.input_tokens+s.output_tokens}))}catch(i){throw new R("DB_ERROR","Failed to get agent usage trend",i)}finally{o.close();}}findTaskForStop(e,n){if(!this.dbExists())return;let r=this.openHandle(false);try{return r.db.select().from(p).where(drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.workspace_id,n))).limit(1).get()??void 0}catch(o){throw new R("DB_ERROR","Failed to find task for stop",o)}finally{r.close();}}findLatestTaskByMetadata(e){if(!this.dbExists())return null;let n=this.openHandle(false);try{return n.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,metadata:p.metadata}).from(p).where(drizzleOrm.and(drizzleOrm.eq(p.agent_id,e.agentId),drizzleOrm.eq(p.workspace_id,e.workspaceId),drizzleOrm.sql`${p.metadata} IS NOT NULL AND json_valid(${p.metadata}) AND json_extract(${p.metadata}, '$.' || ${e.metaKey}) = ${e.metaValue}`)).orderBy(drizzleOrm.desc(p.started_at)).limit(1).get()??null}catch(r){throw new R("DB_ERROR","Failed to find latest task by metadata",r)}finally{n.close();}}markTaskFailed(e,n,r){if(!this.dbExists())return;let o=this.openHandle(true);try{let i=new Date().toISOString(),s=r?drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.status,"running"),drizzleOrm.eq(p.workspace_id,r)):drizzleOrm.and(drizzleOrm.eq(p.id,e),drizzleOrm.eq(p.status,"running"));o.db.update(p).set({status:"failed",error:n,completed_at:i}).where(s).run();}catch(i){throw i instanceof R?i:new R("DB_ERROR","Failed to mark task failed",i)}finally{o.close();}}findTasksByPromptHint(e,n){let r=this.resolveDbPaths(),o=new Set,i=[];for(let s of r){if(!kd.existsSync(s))continue;let a=Y(s);try{let d=n?drizzleOrm.and(drizzleOrm.like(p.prompt,`%${e}%`),drizzleOrm.eq(p.workspace_id,n)):drizzleOrm.like(p.prompt,`%${e}%`),c=a.db.select().from(p).where(d).orderBy(drizzleOrm.asc(p.started_at)).all();for(let l of c)o.has(l.id)||(o.add(l.id),i.push(l));}catch(d){throw new R("DB_ERROR","Failed to find tasks by prompt hint",d)}finally{a.close();}}return i}getProviderUsage(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let i=_d(),s=drizzleOrm.sql`
|
|
272
272
|
COALESCE(${p.input_tokens}, 0)
|
|
273
273
|
+ CASE
|
|
274
|
-
WHEN ${p.started_at} >= ${
|
|
274
|
+
WHEN ${p.started_at} >= ${kt}
|
|
275
275
|
AND (
|
|
276
276
|
${p.crewx_version} IS NULL
|
|
277
277
|
OR (${p.crewx_version} LIKE '0.8.%' AND ${p.crewx_version} NOT LIKE '0.8.9%')
|
|
278
|
-
OR (${p.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${p.crewx_version}, ${
|
|
278
|
+
OR (${p.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${p.crewx_version}, ${vt}) AS INTEGER) < ${Et})
|
|
279
279
|
)
|
|
280
280
|
THEN COALESCE(${p.cached_input_tokens}, 0)
|
|
281
281
|
ELSE 0
|
|
@@ -294,14 +294,14 @@ ${r.join(`
|
|
|
294
294
|
${a}
|
|
295
295
|
GROUP BY ${i}
|
|
296
296
|
ORDER BY (COALESCE(SUM(${s}), 0) + COALESCE(SUM(${p.output_tokens}), 0)) DESC
|
|
297
|
-
`).map(c=>({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}))}catch(i){throw new R("DB_ERROR","Failed to get provider usage",i)}finally{o.close();}}getModelUsage(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let i=
|
|
297
|
+
`).map(c=>({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}))}catch(i){throw new R("DB_ERROR","Failed to get provider usage",i)}finally{o.close();}}getModelUsage(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let i=_d(),s=drizzleOrm.sql`
|
|
298
298
|
COALESCE(${p.input_tokens}, 0)
|
|
299
299
|
+ CASE
|
|
300
|
-
WHEN ${p.started_at} >= ${
|
|
300
|
+
WHEN ${p.started_at} >= ${kt}
|
|
301
301
|
AND (
|
|
302
302
|
${p.crewx_version} IS NULL
|
|
303
303
|
OR (${p.crewx_version} LIKE '0.8.%' AND ${p.crewx_version} NOT LIKE '0.8.9%')
|
|
304
|
-
OR (${p.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${p.crewx_version}, ${
|
|
304
|
+
OR (${p.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${p.crewx_version}, ${vt}) AS INTEGER) < ${Et})
|
|
305
305
|
)
|
|
306
306
|
THEN COALESCE(${p.cached_input_tokens}, 0)
|
|
307
307
|
ELSE 0
|
|
@@ -320,7 +320,7 @@ ${r.join(`
|
|
|
320
320
|
FROM ${p}
|
|
321
321
|
${a}
|
|
322
322
|
GROUP BY ${p.model}, ${i}
|
|
323
|
-
`),c=new Map;for(let l of d){let f=
|
|
323
|
+
`),c=new Map;for(let l of d){let f=Mo(l.model??""),g=JSON.stringify([l.provider,f]),m=c.get(g);m?(m.totalTasks+=l.total_tasks,m.inputTokens+=l.input_tokens,m.outputTokens+=l.output_tokens,m.cachedInputTokens+=l.cached_input_tokens,m.costUsd+=l.cost_usd,m.totalTokens+=l.input_tokens+l.output_tokens,m.activeDurationMs+=l.active_duration_ms??0,l.last_active_at&&(!m.lastActiveAt||l.last_active_at>m.lastActiveAt)&&(m.lastActiveAt=l.last_active_at)):c.set(g,{model:f,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});}return Array.from(c.values()).sort((l,f)=>f.costUsd-l.costUsd)}catch(i){throw new R("DB_ERROR","Failed to get model usage",i)}finally{o.close();}}getTasksForReport(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let i=r?drizzleOrm.sql`WHERE ${p.started_at} >= ${e} AND ${p.started_at} < ${n} AND ${p.workspace_id} = ${r}`:drizzleOrm.sql`WHERE ${p.started_at} >= ${e} AND ${p.started_at} < ${n}`;return o.db.all(drizzleOrm.sql`
|
|
324
324
|
SELECT
|
|
325
325
|
${p.thread_id} AS thread_id,
|
|
326
326
|
${p.agent_id} AS agent_id,
|
|
@@ -331,12 +331,36 @@ ${r.join(`
|
|
|
331
331
|
FROM ${p}
|
|
332
332
|
${i}
|
|
333
333
|
ORDER BY ${p.started_at} ASC
|
|
334
|
-
`).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(i){throw new R("DB_ERROR","Failed to get tasks for report",i)}finally{o.close();}}
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
`),f=ji(t.countTokens,l);return {taskId:t.taskId,taskDistance:t.taskDistance,tokenCap:t.tokenCap,tokenCount:f,includedEntries:s.length,omittedEntries:c.reduce((g,m)=>g+m.count,0),totalEntries:a,omissions:c,entries:s,activityLog:l}}function Ui(t){return {threadId:t.threadId,agentId:t.agentId,lookback:t.lookback,activityLogTokenBudget:t.activityLogTokenBudget,baseEntryChars:t.baseEntryChars,tasks:[],activityLogByTask:new Map}}function mg(t){return !Number.isFinite(t)||t<0?0:Math.floor(t)}function hg(t){return t.length}function $i(t){let e=lg(t.maxEntryChars),n=mg(t.activityLogTokenBudget),r=Math.max(0,Math.floor(t.lookback));if(!r||!t.threadId||!t.agentId)return Ui({threadId:t.threadId,agentId:t.agentId,lookback:r,activityLogTokenBudget:n,baseEntryChars:e});let o,i;try{i=new un,o=i.findTasksByThread(t.threadId).filter(c=>!c.parent_task_id&&c.agent_id===t.agentId).sort((c,l)=>l.started_at>c.started_at?1:-1).slice(0,r);}catch{return Ui({threadId:t.threadId,agentId:t.agentId,lookback:r,activityLogTokenBudget:n,baseEntryChars:e})}if(!o.length)return Ui({threadId:t.threadId,agentId:t.agentId,lookback:r,activityLogTokenBudget:n,baseEntryChars:e});let s=[];for(let c of o){let l=cg(i,c.id);s.push({taskId:c.id,entries:dg(l,c.completed_at)});}let a=[],d=new Map;for(let c=0;c<s.length;c++){let{taskId:l,entries:f}=s[c];if(f.length===0)continue;let g=gg({taskId:l,entries:f,taskDistance:c,baseEntryChars:e,tokenCap:pg(n,c),countTokens:t.countTokens,repositoryEntryLimit:t.repositoryEntryLimit});a.push(g),d.set(l,g.activityLog);}return {threadId:t.threadId,agentId:t.agentId,lookback:r,activityLogTokenBudget:n,baseEntryChars:e,tasks:a,activityLogByTask:d}}function _d(t){if(t.activityLogTokenBudget!==void 0&&!t.countTokens)throw new Error("countTokens is required when activityLogTokenBudget is supplied");return $i({threadId:t.threadId,agentId:t.agentId,lookback:t.lookback,maxEntryChars:t.maxEntryChars,activityLogTokenBudget:t.activityLogTokenBudget??ng,countTokens:t.countTokens??hg,repositoryEntryLimit:t.repositoryEntryLimit}).activityLogByTask}u();u();var _g={agentId:zod.z.string().describe("The agent ID to query"),query:zod.z.string().describe("The query message to send"),context:zod.z.string().optional().describe("Additional context"),thread:zod.z.string().optional().describe("Thread ID for conversation continuity")},wg={agentId:zod.z.string().describe("The agent ID to execute"),task:zod.z.string().describe("The task description to execute"),context:zod.z.string().optional().describe("Additional context"),thread:zod.z.string().optional().describe("Thread ID for conversation continuity")};function wd(t,e,n){t.tool("crewx_listAgents","List available CrewX agents exposed by this server",async()=>{let r=[];for(let o of n){let i=e.agents.get(o);i&&r.push({id:i.id,name:i.name??i.id,description:i.description??""});}return {content:[{type:"text",text:JSON.stringify(r,null,2)}]}}),t.tool("crewx_queryAgent","Query a CrewX agent with a read-only question",_g,async({agentId:r,query:o,context:i,thread:s})=>{if(!n.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:i,threadId:s});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Query failed"}],isError:true}}),t.tool("crewx_executeAgent","Execute a task on a CrewX agent (may modify state)",wg,async({agentId:r,task:o,context:i,thread:s})=>{if(!n.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:i,threadId:s});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Execute failed"}],isError:true}});}u();function kd(t){return t.headers.get("Origin")?null:new Response(JSON.stringify({error:"Forbidden: Origin header required"}),{status:403,headers:{"Content-Type":"application/json"}})}async function vd(t,e){return e?await e(t)?null:new Response(JSON.stringify({error:"Unauthorized"}),{status:401,headers:{"Content-Type":"application/json"}}):null}function bg(t,e){let n=new mcp_js.McpServer({name:"crewx-mcp-server",version:"1.0.0"},{capabilities:{tools:{}}});return wd(n,t,e),n}function Bi(t,e){if(!e.agents||e.agents.length===0)throw new Error("crewx.handler() requires at least one agent in the agents option");let n=new Set(e.agents),r=new Map;return async o=>{let i=kd(o);if(i)return i;let s=await vd(o,e.auth);if(s)return s;let a=o.headers.get("mcp-session-id");if(a&&r.has(a))return r.get(a).transport.handleRequest(o);let d=bg(t,n),c=new webStandardStreamableHttp_js.WebStandardStreamableHTTPServerTransport({sessionIdGenerator:()=>crypto.randomUUID(),onsessioninitialized:l=>{r.set(l,{transport:c,server:d});},onsessionclosed:l=>{r.delete(l);},enableJsonResponse:true});return await d.connect(c),c.handleRequest(o)}}u();function Fi(t){let e=Y__namespace.resolve(t);return process.platform==="win32"&&(e=e.replace(/\\/g,"/"),e=e.replace(/^([A-Z]):/,(n,r)=>`${r.toLowerCase()}:`)),e.length>1&&!/^[a-zA-Z]:\/$/.test(e)&&(e=e.replace(/\/+$/,"")),e}function ao(t){let e=Fi(t);return crypto$1.createHash("sha256").update(e).digest("hex")}u();u();function rr(t){let n=t.renderer!==void 0||t.surfaces!==void 0||t.stateProjection!==void 0||Object.values(t.actions).some(o=>o.resultProjection!==void 0)?{id:t.id,version:t.version,renderer:t.renderer,surfaces:t.surfaces,stateProjection:t.stateProjection,actions:t.actions}:{id:t.id,version:t.version,actions:t.actions},r=de(n);return crypto$1.createHash("sha256").update(Fa(r)).digest("hex")}function qi(t){return `${t.id}\0${t.version}`}function Rd(t){if(!/^\d+$/.test(String(t.version))||t.version<1||t.id.length<1||t.id.length>128)throw new E("DEFINITION_UNSUPPORTED","UI definition is invalid");if(!/^[0-9a-f]{64}$/.test(t.hash)||rr(t)!==t.hash)throw new E("DEFINITION_UNSUPPORTED","UI definition hash is invalid");for(let[e,n]of Object.entries(t.actions)){if(!e||!Array.isArray(n.capabilities)||n.capabilities.some(r=>!Tg(r)))throw new E("DEFINITION_UNSUPPORTED","UI action declaration is invalid");if(n.inputKeys&&(!Array.isArray(n.inputKeys)||n.inputKeys.some(r=>typeof r!="string"||!r)))throw new E("DEFINITION_UNSUPPORTED","UI action input declaration is invalid");n.resultProjection&&Ed(n.resultProjection);}if(t.renderer!==void 0&&(!t.renderer||t.renderer.length>128))throw new E("DEFINITION_UNSUPPORTED","UI definition renderer is invalid");if(t.surfaces&&(!Array.isArray(t.surfaces)||t.surfaces.some(e=>!e||e.length>64)))throw new E("DEFINITION_UNSUPPORTED","UI definition surfaces are invalid");t.stateProjection&&Ed(t.stateProjection);}function Ed(t){if(!Array.isArray(t.allow)||t.allow.some(e=>!/^[A-Za-z0-9_]+(?:\.[A-Za-z0-9_]+)*$/.test(e)))throw new E("DEFINITION_UNSUPPORTED","UI projection policy is invalid")}function Tg(t){return t.length>0&&t.length<=128&&t!=="*"&&t!=="all"&&!/[/*]/.test(t)}u();function co(t,e,n){let r=new Set(e),o=n===void 0?void 0:new Set(n);return t.filter(i=>r.has(i)&&(o===void 0||o.has(i)))}u();u();function Wi(){if(process.env.CREWX_HOME)try{return fd__namespace.realpathSync(process.env.CREWX_HOME)}catch{return Y__namespace.join(Hi__namespace.homedir(),".crewx")}return process.platform!=="win32"&&process.env.XDG_CONFIG_HOME?Y__namespace.join(process.env.XDG_CONFIG_HOME,"crewx"):Y__namespace.join(Hi__namespace.homedir(),".crewx")}u();u();u();u();u();var xd=["success","failed","completed"];new Set(xd);u();u();var uo=class extends ie{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Y.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Y.dirname(n);fd.existsSync(o)||fd.mkdirSync(o,{recursive:true});}else if(!fd.existsSync(n))throw new R("NOT_FOUND","Database not found");let r=J(n);if(e)try{ce(r.db,n);}catch(o){throw r.close(),o}return r}insertSpan(e){let n=this.openHandle(true);try{n.db.insert(Rt).values(e).run();}catch(r){throw r instanceof R?r:new R("DB_ERROR","Failed to insert span",r)}finally{n.close();}}findByTaskId(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.select().from(Rt).where(drizzleOrm.eq(Rt.task_id,e)).all()}catch(r){throw new R("DB_ERROR","Failed to find spans by task id",r)}finally{n.close();}}findById(e){if(!this.dbExists())return;let n=this.openHandle(false);try{return n.db.select().from(Rt).where(drizzleOrm.eq(Rt.id,e)).limit(1).get()??void 0}catch(r){throw new R("DB_ERROR","Failed to find span by id",r)}finally{n.close();}}};u();u();u();u();u();u();u();function Ng(){return process.env.CREWX_DB??Y.join(Wi(),"crewx.db")}function fo(t){let e=JSON.parse(t);return de(e)}function Dg(t){let e=JSON.parse(t);if(e.kind!=="local"&&e.kind!=="authenticated"||typeof e.id!="string")throw new E("EXECUTION_FAILED","Stored actor is invalid");return {kind:e.kind,id:e.id}}function or(t){let e=t.status;if(!["active","completed","expired","revoked","unsupported"].includes(e))throw new E("EXECUTION_FAILED","Stored UI instance status is invalid");let n=JSON.parse(t.granted_capabilities_json);if(!Array.isArray(n)||n.some(r=>typeof r!="string"))throw new E("EXECUTION_FAILED","Stored UI capability grant is invalid");return {id:t.id,definition:{id:t.definition_id,version:t.definition_version,hash:t.definition_hash},workspaceId:t.workspace_id,threadId:t.thread_id,anchorTaskId:t.anchor_task_id,domainRef:fo(t.domain_ref_json),state:fo(t.state_json),revision:t.revision,status:e,grantedCapabilities:n,createdAt:t.created_at,updatedAt:t.updated_at}}function ir(t){return {id:t.id,instanceId:t.instance_id,requestId:t.request_id,actionId:t.action_id,actor:Dg(t.actor_json),source:t.source,expectedRevision:t.expected_revision,beforeRevision:t.before_revision,afterRevision:t.after_revision,status:t.status,outcome:t.outcome,input:fo(t.input_json),result:t.result_json===null?null:fo(t.result_json),errorCode:t.error_code,requestedAt:t.requested_at,settledAt:t.settled_at}}function sr(t,e){return t.get(drizzleOrm.sql`SELECT * FROM ui_instances WHERE id = ${e}`)}function ar(t,e,n){return t.get(drizzleOrm.sql`SELECT * FROM ui_action_receipts WHERE instance_id = ${e} AND request_id = ${n}`)}function po(t){let e=t,n;for(let r=0;e&&r<4;r+=1){if(typeof e.code=="string"){n=e.code;break}e=e.cause;}return n==="SQLITE_BUSY"||n==="SQLITE_BUSY_SNAPSHOT"||n==="SQLITE_CONSTRAINT_UNIQUE"||n==="SQLITE_CONSTRAINT_PRIMARYKEY"}function Lg(t){throw po(t)?new Re(t):new E("EXECUTION_FAILED","UI instance database operation failed")}var go=class{handle;db;testHooks;constructor(e=Ng(),n){fd.mkdirSync(Y.dirname(e),{recursive:true}),this.handle=J(e),this.db=this.handle.db,this.testHooks=n,ce(this.db,e);}close(){this.handle.close();}create(e){let n=we(e.domainRef),r=we(e.state),o=we([...e.grants]);try{this.db.run(drizzleOrm.sql`
|
|
334
|
+
`).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(i){throw new R("DB_ERROR","Failed to get tasks for report",i)}finally{o.close();}}getDelegationMatrix(e,n,r){if(!this.dbExists())return {edges:[],truncated:false};let o=this.openHandle(false);try{let i=drizzleOrm.sql`
|
|
335
|
+
COALESCE(${p.input_tokens}, 0)
|
|
336
|
+
+ CASE
|
|
337
|
+
WHEN ${p.started_at} >= ${kt}
|
|
338
|
+
AND (
|
|
339
|
+
${p.crewx_version} IS NULL
|
|
340
|
+
OR (${p.crewx_version} LIKE '0.8.%' AND ${p.crewx_version} NOT LIKE '0.8.9%')
|
|
341
|
+
OR (${p.crewx_version} LIKE '0.8.9-rc.%' AND CAST(SUBSTR(${p.crewx_version}, ${vt}) AS INTEGER) < ${Et})
|
|
342
|
+
)
|
|
343
|
+
THEN COALESCE(${p.cached_input_tokens}, 0)
|
|
344
|
+
ELSE 0
|
|
345
|
+
END
|
|
346
|
+
`,s=r?drizzleOrm.sql`WHERE ${p.status} IN ('completed', 'success') AND ${p.started_at} >= ${e} AND ${p.started_at} < ${n} AND ${p.workspace_id} = ${r}`:drizzleOrm.sql`WHERE ${p.status} IN ('completed', 'success') AND ${p.started_at} >= ${e} AND ${p.started_at} < ${n}`,a=o.db.all(drizzleOrm.sql`
|
|
347
|
+
SELECT
|
|
348
|
+
${p.caller_agent_id} AS caller_agent_id,
|
|
349
|
+
${p.agent_id} AS agent_id,
|
|
350
|
+
COUNT(*) AS task_count,
|
|
351
|
+
COALESCE(SUM(${i}), 0) AS input_tokens,
|
|
352
|
+
COALESCE(SUM(${p.output_tokens}), 0) AS output_tokens
|
|
353
|
+
FROM ${p}
|
|
354
|
+
${s}
|
|
355
|
+
GROUP BY ${p.caller_agent_id}, ${p.agent_id}
|
|
356
|
+
ORDER BY task_count DESC, ${p.caller_agent_id} ASC, ${p.agent_id} ASC
|
|
357
|
+
LIMIT ${Fi+1}
|
|
358
|
+
`),d=a.length>Fi;return {edges:a.slice(0,Fi).map(l=>({callerAgentId:l.caller_agent_id??null,agentId:l.agent_id,taskCount:l.task_count,totalTokens:l.input_tokens+l.output_tokens,outputTokens:l.output_tokens})),truncated:d}}catch(i){throw new R("DB_ERROR","Failed to get delegation matrix",i)}finally{o.close();}}findTaskEvidence(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(drizzleOrm.eq(p.workspace_id,e.workspaceId)),e.agents&&e.agents.length>0&&r.push(drizzleOrm.inArray(p.agent_id,e.agents)),e.statuses&&e.statuses.length>0&&r.push(drizzleOrm.inArray(p.status,e.statuses)),e.from&&r.push(drizzleOrm.gte(p.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(p.started_at,e.to));let o=r.length>0?drizzleOrm.and(...r):void 0,i=(e.order??"DESC")==="ASC"?drizzleOrm.asc(p.started_at):drizzleOrm.desc(p.started_at),s={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?n.db.select(s).from(p).where(o).orderBy(i).limit(e.limit).all():n.db.select(s).from(p).where(o).orderBy(i).all()}catch(r){throw new R("DB_ERROR","Failed to find task evidence",r)}finally{n.close();}}findThreadChains(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{let r=e.maxThreads??8,o=e.maxTurnsPerThread??4,i=[drizzleOrm.isNotNull(p.thread_id),drizzleOrm.isNull(p.parent_task_id),drizzleOrm.isNull(p.caller_agent_id),drizzleOrm.or(drizzleOrm.isNull(p.platform),drizzleOrm.ne(p.platform,"workflow")),drizzleOrm.or(drizzleOrm.isNull(p.metadata),drizzleOrm.and(drizzleOrm.notLike(p.metadata,'%"kind":"workflow_card"%'),drizzleOrm.notLike(p.metadata,'%"kind":"workflow_ui_instance"%'))),drizzleOrm.or(drizzleOrm.isNull(p.metadata),drizzleOrm.notLike(p.metadata,'%"retriedFromTaskId"%'))];e.workspaceId&&i.push(drizzleOrm.eq(p.workspace_id,e.workspaceId)),e.from&&i.push(drizzleOrm.gte(p.started_at,e.from)),e.to&&i.push(drizzleOrm.lt(p.started_at,e.to));let s=n.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(drizzleOrm.and(...i)).orderBy(drizzleOrm.asc(p.started_at),drizzleOrm.asc(p.id)).all(),a=new Map;for(let c of s){if(!c.thread_id)continue;let l={id:c.id,agentId:c.agent_id,status:c.status,prompt:c.prompt,startedAt:c.started_at,completedAt:c.completed_at},f=a.get(c.thread_id);f?f.push(l):a.set(c.thread_id,[l]);}let d=[];for(let[c,l]of a){let f=l.filter(g=>g.agentId===e.targetAgentId).length;f<2||d.push({threadId:c,targetAgentTurnCount:f,turns:l});}return d.sort((c,l)=>{let f=c.turns[c.turns.length-1].startedAt,g=l.turns[l.turns.length-1].startedAt;return f<g?1:f>g?-1:0}),d.slice(0,r).map(c=>({threadId:c.threadId,targetAgentTurnCount:c.targetAgentTurnCount,turns:c.turns.slice(-o)}))}catch(r){throw new R("DB_ERROR","Failed to find thread chains",r)}finally{n.close();}}};var ig=new Set(["Read","Grep","Find","Glob"]),sg=["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"],ag=[/\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/],dg=8e3,cg=100,lg=3,ug=Number.MAX_SAFE_INTEGER;function pg(t){let e=t.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":t}function fg(t,e){if(ig.has(t))return true;if(t!=="Bash"||!e)return false;let n=e.split(`
|
|
359
|
+
`)[0].trimStart();return ag.some(r=>r.test(n))?false:sg.some(r=>n.startsWith(r))}function pn(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function gg(t,e,n){if(t!=="Read"||!e)return "ok";let o=e.split(`
|
|
360
|
+
`).find(i=>i.trim()&&!i.startsWith("Read "))?.trim()??e.trim();if(!o)return "unknown";try{let i=kd__namespace.statSync(o);if(n){let s=Date.parse(n);if(!Number.isNaN(s)&&i.mtimeMs>s)return "stale"}return "ok"}catch{return "unknown"}}function mg(t){let e=new Set;for(let n of t)try{let r=JSON.parse(n);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 hg(t){if(!Array.isArray(t))return [];let e=t,n=e.filter(a=>a.level==="stdout"&&a.message).map(a=>a.message),r=mg(n),o=[];for(let a of e)a.level==="info"&&a.message?o.push(...He(a.message,a.timestamp)):a.level==="stdout"&&a.message&&r&&o.push(...jn("",a.message,r));let i=new Map,s=[];for(let a of o)if(a.type==="tool_use"){let d={tool:pg(a.toolName??""),input:a.toolInput??null,result:null,isError:false},c=a.toolUseId;if(c){if(i.has(c)){i.get(c).input=d.input;continue}i.set(c,d);}s.push(d);}else if(a.type==="tool_result"){if(a.toolUseId&&i.has(a.toolUseId)){let d=i.get(a.toolUseId);d.isError=a.isError===true,d.result=a.resultPreview??null;}else for(let d=s.length-1;d>=0;d--)if(s[d].result===null){s[d].isError=a.isError===true,s[d].result=a.resultPreview??null;break}}return s}function yg(t,e){let n=hg(t),r=[];for(let o of n){let i=o.tool==="Bash"?o.input?.split(`
|
|
361
|
+
`)[0]?.slice(0,150)??null:o.input?.slice(0,150)??null,s=fg(o.tool,o.input)&&!o.isError;r.push({tool:o.tool,cmd:i,result:o.result,status:gg(o.tool,o.input,e),reusable:s});}return r}function _g(t,e){try{return t.readLogs(e)?.entries??[]}catch{return []}}function vd(t){let e=["<activity_log>"],{entries:n,omissions:r,tokenCap:o,totalEntries:i}=t,s=r.reduce((a,d)=>a+d.count,0);if(n.length===0&&s===0)e.push(" <!-- no activity found in previous tasks -->");else {if(e.push(" <!-- tool activity from previous tasks -->"),r.length>0){e.push(` <!-- activity_log_budget token_cap="${o}" included_entries="${n.length}" omitted_entries="${s}" total_entries="${i}" -->`);for(let a of r)e.push(` <!-- omitted_entries reason="${pn(a.reason)}" count="${a.count}": ${pn(a.message)} -->`);}for(let a of n){let d=a.entry,c=`tool="${pn(d.tool)}"`,l=d.cmd?` cmd="${pn(d.cmd)}"`:"",f="";if(d.reusable&&(f=d.status==="stale"?' reused="stale"':' reused="ok"'),d.reusable&&d.status==="stale")e.push(` <entry ${c}${l}${f}>\u26A0\uFE0F changed since \u2014 re-read</entry>`);else if(d.result){e.push(` <entry ${c}${l}${f}>`);let g=Zr(d.result),m=Math.min(a.bodyCharsShown??g.length,g.length);g.length>m?e.push(pn(g.slice(0,m))+` \u2026 [truncated, ${m}/${g.length} chars shown]`):e.push(pn(g)),e.push(" </entry>");}else e.push(` <entry ${c}${l}${f} />`);}}return e.push("</activity_log>"),e}function wg(t){return typeof t!="number"||!Number.isFinite(t)||t<0?dg:Math.floor(t)}function kg(t,e,n){let r=Math.floor(e/cg),o=Math.pow(2,t+r);return !Number.isFinite(o)||o<=0?0:Math.floor(n/o)}function vg(t,e){let n=Math.pow(2,e+lg);return !Number.isFinite(n)||n<=0?0:Math.floor(t/n)}function Ed(t,e,n,r){let o=t.result?.length??null,i=o===null?null:Math.min(o,Math.max(0,n));return {entry:t,newestIndex:e,bodyLimitChars:n,bodyCharsShown:o===null?null:Math.max(0,Math.min(r??i??0,i??0)),originalBodyChars:o}}function bd(t,e){let n=[];return t>0&&n.push({reason:"token_cap",count:t,message:"older entries omitted after the per-task token cap was reached"}),e>0&&n.push({reason:"repository_limit",count:e,message:"older entries omitted by the explicit repository safety limit before budgeting"}),n}function Rd(t){let e=bd(t.omittedByTokenCap,t.repositoryLimitOmitted);return vd({entries:t.entries,omissions:e,tokenCap:t.tokenCap,totalEntries:t.totalEntries}).join(`
|
|
362
|
+
`)}function Hi(t,e){let n=t(e);return !Number.isFinite(n)||n<0?0:Math.floor(n)}function Eg(t){let{entry:e,bodyLimitChars:n}=t;if(!e.result)return null;let r=Math.min(e.result.length,Math.max(0,n));for(let o=r;o>=0;o--){let i=Ed(e,t.newestIndex,n,o),s=[...t.selectedEntries,i],a=t.totalEntries-s.length-t.repositoryLimitOmitted,d=Rd({entries:s,tokenCap:t.tokenCap,totalEntries:t.totalEntries,omittedByTokenCap:a,repositoryLimitOmitted:t.repositoryLimitOmitted});if(Hi(t.countTokens,d)<=t.tokenCap)return i}return null}function bg(t){let e=t.repositoryEntryLimit,n=typeof e=="number"&&Number.isFinite(e)&&e>=0&&t.entries.length>e,r=n?t.entries.length-Math.floor(e):0,i=[...n?t.entries.slice(r):t.entries].reverse(),s=[],a=t.entries.length;for(let g=0;g<i.length;g++){let m=i[g],k=kg(t.taskDistance,g,t.baseEntryChars),h=Ed(m,g,k),v=[...s,h],_=a-v.length-r,w=Rd({entries:v,tokenCap:t.tokenCap,totalEntries:a,omittedByTokenCap:_,repositoryLimitOmitted:r});if(Hi(t.countTokens,w)<=t.tokenCap){s.push(h);continue}let x=Eg({selectedEntries:s,entry:m,newestIndex:g,bodyLimitChars:k,tokenCap:t.tokenCap,totalEntries:a,repositoryLimitOmitted:r,countTokens:t.countTokens});x&&s.push(x);break}let d=a-s.length-r,c=bd(d,r),l=vd({entries:s,omissions:c,tokenCap:t.tokenCap,totalEntries:a}).join(`
|
|
363
|
+
`),f=Hi(t.countTokens,l);return {taskId:t.taskId,taskDistance:t.taskDistance,tokenCap:t.tokenCap,tokenCount:f,includedEntries:s.length,omittedEntries:c.reduce((g,m)=>g+m.count,0),totalEntries:a,omissions:c,entries:s,activityLog:l}}function qi(t){return {threadId:t.threadId,agentId:t.agentId,lookback:t.lookback,activityLogTokenBudget:t.activityLogTokenBudget,baseEntryChars:t.baseEntryChars,tasks:[],activityLogByTask:new Map}}function Rg(t){return !Number.isFinite(t)||t<0?0:Math.floor(t)}function Tg(t){return t.length}function Wi(t){let e=wg(t.maxEntryChars),n=Rg(t.activityLogTokenBudget),r=Math.max(0,Math.floor(t.lookback));if(!r||!t.threadId||!t.agentId)return qi({threadId:t.threadId,agentId:t.agentId,lookback:r,activityLogTokenBudget:n,baseEntryChars:e});let o,i;try{i=new un,o=i.findTasksByThread(t.threadId).filter(c=>!c.parent_task_id&&c.agent_id===t.agentId).sort((c,l)=>l.started_at>c.started_at?1:-1).slice(0,r);}catch{return qi({threadId:t.threadId,agentId:t.agentId,lookback:r,activityLogTokenBudget:n,baseEntryChars:e})}if(!o.length)return qi({threadId:t.threadId,agentId:t.agentId,lookback:r,activityLogTokenBudget:n,baseEntryChars:e});let s=[];for(let c of o){let l=_g(i,c.id);s.push({taskId:c.id,entries:yg(l,c.completed_at)});}let a=[],d=new Map;for(let c=0;c<s.length;c++){let{taskId:l,entries:f}=s[c];if(f.length===0)continue;let g=bg({taskId:l,entries:f,taskDistance:c,baseEntryChars:e,tokenCap:vg(n,c),countTokens:t.countTokens,repositoryEntryLimit:t.repositoryEntryLimit});a.push(g),d.set(l,g.activityLog);}return {threadId:t.threadId,agentId:t.agentId,lookback:r,activityLogTokenBudget:n,baseEntryChars:e,tasks:a,activityLogByTask:d}}function Td(t){if(t.activityLogTokenBudget!==void 0&&!t.countTokens)throw new Error("countTokens is required when activityLogTokenBudget is supplied");return Wi({threadId:t.threadId,agentId:t.agentId,lookback:t.lookback,maxEntryChars:t.maxEntryChars,activityLogTokenBudget:t.activityLogTokenBudget??ug,countTokens:t.countTokens??Tg,repositoryEntryLimit:t.repositoryEntryLimit}).activityLogByTask}u();u();var Ag={agentId:zod.z.string().describe("The agent ID to query"),query:zod.z.string().describe("The query message to send"),context:zod.z.string().optional().describe("Additional context"),thread:zod.z.string().optional().describe("Thread ID for conversation continuity")},Ig={agentId:zod.z.string().describe("The agent ID to execute"),task:zod.z.string().describe("The task description to execute"),context:zod.z.string().optional().describe("Additional context"),thread:zod.z.string().optional().describe("Thread ID for conversation continuity")};function xd(t,e,n){t.tool("crewx_listAgents","List available CrewX agents exposed by this server",async()=>{let r=[];for(let o of n){let i=e.agents.get(o);i&&r.push({id:i.id,name:i.name??i.id,description:i.description??""});}return {content:[{type:"text",text:JSON.stringify(r,null,2)}]}}),t.tool("crewx_queryAgent","Query a CrewX agent with a read-only question",Ag,async({agentId:r,query:o,context:i,thread:s})=>{if(!n.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:i,threadId:s});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Query failed"}],isError:true}}),t.tool("crewx_executeAgent","Execute a task on a CrewX agent (may modify state)",Ig,async({agentId:r,task:o,context:i,thread:s})=>{if(!n.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:i,threadId:s});return a.ok?{content:[{type:"text",text:a.data}]}:{content:[{type:"text",text:a.error?.message??"Execute failed"}],isError:true}});}u();function Ad(t){return t.headers.get("Origin")?null:new Response(JSON.stringify({error:"Forbidden: Origin header required"}),{status:403,headers:{"Content-Type":"application/json"}})}async function Id(t,e){return e?await e(t)?null:new Response(JSON.stringify({error:"Unauthorized"}),{status:401,headers:{"Content-Type":"application/json"}}):null}function Cg(t,e){let n=new mcp_js.McpServer({name:"crewx-mcp-server",version:"1.0.0"},{capabilities:{tools:{}}});return xd(n,t,e),n}function zi(t,e){if(!e.agents||e.agents.length===0)throw new Error("crewx.handler() requires at least one agent in the agents option");let n=new Set(e.agents),r=new Map;return async o=>{let i=Ad(o);if(i)return i;let s=await Id(o,e.auth);if(s)return s;let a=o.headers.get("mcp-session-id");if(a&&r.has(a))return r.get(a).transport.handleRequest(o);let d=Cg(t,n),c=new webStandardStreamableHttp_js.WebStandardStreamableHTTPServerTransport({sessionIdGenerator:()=>crypto.randomUUID(),onsessioninitialized:l=>{r.set(l,{transport:c,server:d});},onsessionclosed:l=>{r.delete(l);},enableJsonResponse:true});return await d.connect(c),c.handleRequest(o)}}u();function Gi(t){let e=X__namespace.resolve(t);return process.platform==="win32"&&(e=e.replace(/\\/g,"/"),e=e.replace(/^([A-Z]):/,(n,r)=>`${r.toLowerCase()}:`)),e.length>1&&!/^[a-zA-Z]:\/$/.test(e)&&(e=e.replace(/\/+$/,"")),e}function lo(t){let e=Gi(t);return crypto$1.createHash("sha256").update(e).digest("hex")}u();u();function sr(t){let n=t.renderer!==void 0||t.surfaces!==void 0||t.stateProjection!==void 0||Object.values(t.actions).some(o=>o.resultProjection!==void 0)?{id:t.id,version:t.version,renderer:t.renderer,surfaces:t.surfaces,stateProjection:t.stateProjection,actions:t.actions}:{id:t.id,version:t.version,actions:t.actions},r=de(n);return crypto$1.createHash("sha256").update(Ka(r)).digest("hex")}function Vi(t){return `${t.id}\0${t.version}`}function Cd(t){if(!/^\d+$/.test(String(t.version))||t.version<1||t.id.length<1||t.id.length>128)throw new b("DEFINITION_UNSUPPORTED","UI definition is invalid");if(!/^[0-9a-f]{64}$/.test(t.hash)||sr(t)!==t.hash)throw new b("DEFINITION_UNSUPPORTED","UI definition hash is invalid");for(let[e,n]of Object.entries(t.actions)){if(!e||!Array.isArray(n.capabilities)||n.capabilities.some(r=>!Dg(r)))throw new b("DEFINITION_UNSUPPORTED","UI action declaration is invalid");if(n.inputKeys&&(!Array.isArray(n.inputKeys)||n.inputKeys.some(r=>typeof r!="string"||!r)))throw new b("DEFINITION_UNSUPPORTED","UI action input declaration is invalid");n.resultProjection&&Pd(n.resultProjection);}if(t.renderer!==void 0&&(!t.renderer||t.renderer.length>128))throw new b("DEFINITION_UNSUPPORTED","UI definition renderer is invalid");if(t.surfaces&&(!Array.isArray(t.surfaces)||t.surfaces.some(e=>!e||e.length>64)))throw new b("DEFINITION_UNSUPPORTED","UI definition surfaces are invalid");t.stateProjection&&Pd(t.stateProjection);}function Pd(t){if(!Array.isArray(t.allow)||t.allow.some(e=>!/^[A-Za-z0-9_]+(?:\.[A-Za-z0-9_]+)*$/.test(e)))throw new b("DEFINITION_UNSUPPORTED","UI projection policy is invalid")}function Dg(t){return t.length>0&&t.length<=128&&t!=="*"&&t!=="all"&&!/[/*]/.test(t)}u();function uo(t,e,n){let r=new Set(e),o=n===void 0?void 0:new Set(n);return t.filter(i=>r.has(i)&&(o===void 0||o.has(i)))}u();u();function Ji(){if(process.env.CREWX_HOME)try{return kd__namespace.realpathSync(process.env.CREWX_HOME)}catch{return X__namespace.join(Ki__namespace.homedir(),".crewx")}return process.platform!=="win32"&&process.env.XDG_CONFIG_HOME?X__namespace.join(process.env.XDG_CONFIG_HOME,"crewx"):X__namespace.join(Ki__namespace.homedir(),".crewx")}u();u();u();u();u();var Nd=["success","failed","completed"];new Set(Nd);u();u();var fo=class extends ie{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=X.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=X.dirname(n);kd.existsSync(o)||kd.mkdirSync(o,{recursive:true});}else if(!kd.existsSync(n))throw new R("NOT_FOUND","Database not found");let r=Y(n);if(e)try{ce(r.db,n);}catch(o){throw r.close(),o}return r}insertSpan(e){let n=this.openHandle(true);try{n.db.insert(St).values(e).run();}catch(r){throw r instanceof R?r:new R("DB_ERROR","Failed to insert span",r)}finally{n.close();}}findByTaskId(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.select().from(St).where(drizzleOrm.eq(St.task_id,e)).all()}catch(r){throw new R("DB_ERROR","Failed to find spans by task id",r)}finally{n.close();}}findById(e){if(!this.dbExists())return;let n=this.openHandle(false);try{return n.db.select().from(St).where(drizzleOrm.eq(St.id,e)).limit(1).get()??void 0}catch(r){throw new R("DB_ERROR","Failed to find span by id",r)}finally{n.close();}}};u();u();u();u();u();u();u();function qg(){return process.env.CREWX_DB??X.join(Ji(),"crewx.db")}function mo(t){let e=JSON.parse(t);return de(e)}function Hg(t){let e=JSON.parse(t);if(e.kind!=="local"&&e.kind!=="authenticated"||typeof e.id!="string")throw new b("EXECUTION_FAILED","Stored actor is invalid");return {kind:e.kind,id:e.id}}function ar(t){let e=t.status;if(!["active","completed","expired","revoked","unsupported"].includes(e))throw new b("EXECUTION_FAILED","Stored UI instance status is invalid");let n=JSON.parse(t.granted_capabilities_json);if(!Array.isArray(n)||n.some(r=>typeof r!="string"))throw new b("EXECUTION_FAILED","Stored UI capability grant is invalid");return {id:t.id,definition:{id:t.definition_id,version:t.definition_version,hash:t.definition_hash},workspaceId:t.workspace_id,threadId:t.thread_id,anchorTaskId:t.anchor_task_id,domainRef:mo(t.domain_ref_json),state:mo(t.state_json),revision:t.revision,status:e,grantedCapabilities:n,createdAt:t.created_at,updatedAt:t.updated_at}}function dr(t){return {id:t.id,instanceId:t.instance_id,requestId:t.request_id,actionId:t.action_id,actor:Hg(t.actor_json),source:t.source,expectedRevision:t.expected_revision,beforeRevision:t.before_revision,afterRevision:t.after_revision,status:t.status,outcome:t.outcome,input:mo(t.input_json),result:t.result_json===null?null:mo(t.result_json),errorCode:t.error_code,requestedAt:t.requested_at,settledAt:t.settled_at}}function cr(t,e){return t.get(drizzleOrm.sql`SELECT * FROM ui_instances WHERE id = ${e}`)}function lr(t,e,n){return t.get(drizzleOrm.sql`SELECT * FROM ui_action_receipts WHERE instance_id = ${e} AND request_id = ${n}`)}function go(t){let e=t,n;for(let r=0;e&&r<4;r+=1){if(typeof e.code=="string"){n=e.code;break}e=e.cause;}return n==="SQLITE_BUSY"||n==="SQLITE_BUSY_SNAPSHOT"||n==="SQLITE_CONSTRAINT_UNIQUE"||n==="SQLITE_CONSTRAINT_PRIMARYKEY"}function Wg(t){throw go(t)?new Re(t):new b("EXECUTION_FAILED","UI instance database operation failed")}var ho=class{handle;db;testHooks;constructor(e=qg(),n){kd.mkdirSync(X.dirname(e),{recursive:true}),this.handle=Y(e),this.db=this.handle.db,this.testHooks=n,ce(this.db,e);}close(){this.handle.close();}create(e){let n=we(e.domainRef),r=we(e.state),o=we([...e.grants]);try{this.db.run(drizzleOrm.sql`
|
|
340
364
|
INSERT INTO ui_instances (
|
|
341
365
|
id, definition_id, definition_version, definition_hash, workspace_id, thread_id,
|
|
342
366
|
anchor_task_id, domain_ref_json, state_json, revision, status,
|
|
@@ -346,7 +370,7 @@ ${r.join(`
|
|
|
346
370
|
${e.workspaceId}, ${e.threadId}, ${e.anchorTaskId}, ${n},
|
|
347
371
|
${r}, 0, 'active', ${o}, ${e.now}, ${e.now}
|
|
348
372
|
)
|
|
349
|
-
`);}catch(s){
|
|
373
|
+
`);}catch(s){Wg(s);}let i=cr(this.db,e.id);if(!i)throw new b("EXECUTION_FAILED","Created UI instance could not be read");return ar(i)}get(e){let n=cr(this.db,e);return n?ar(n):null}getReceipt(e,n){let r=lr(this.db,e,n);return r?dr(r):null}runStateOnly(e,n){try{return this.db.transaction(r=>{let o=this.testHooks?.injectDatabaseError?.();if(o!==void 0)throw o;let i=cr(r,e.instanceId);if(!i)throw new b("INSTANCE_NOT_FOUND","UI instance was not found");let s=e.expectedRevision+1,a=Md();if(r.run(drizzleOrm.sql`
|
|
350
374
|
INSERT INTO ui_action_receipts (
|
|
351
375
|
id, instance_id, request_id, action_id, actor_json, source,
|
|
352
376
|
expected_revision, before_revision, after_revision, status, outcome,
|
|
@@ -361,12 +385,12 @@ ${r.join(`
|
|
|
361
385
|
UPDATE ui_instances
|
|
362
386
|
SET revision = revision + 1, updated_at = ${Math.max(e.now,i.updated_at)}
|
|
363
387
|
WHERE id = ${e.instanceId} AND revision = ${e.expectedRevision} AND status = 'active'
|
|
364
|
-
`).changes!==1)throw new Ce(i.revision);let c={instance:{...
|
|
388
|
+
`).changes!==1)throw new Ce(i.revision);let c={instance:{...ar(i),revision:s},actor:e.actor,source:e.source,input:e.input,requestId:e.requestId},l=n(c);if(l&&typeof l.then=="function")throw new b("EXECUTION_FAILED","State-only handler must be synchronous");let f=l??{},g="outcome"in f?f.outcome:"succeeded",m="errorCode"in f?zg(f.errorCode):null,k=f.state?de(f.state):ar(i).state,h=f.result?we(de(f.result)):null,v=Math.max(e.now,i.updated_at);r.run(drizzleOrm.sql`UPDATE ui_instances SET state_json = ${we(k)}, updated_at = ${v} WHERE id = ${e.instanceId} AND revision = ${s}`),r.run(drizzleOrm.sql`
|
|
365
389
|
UPDATE ui_action_receipts
|
|
366
390
|
SET status = 'settled', outcome = ${g}, after_revision = ${s},
|
|
367
391
|
result_json = ${h}, error_code = ${m}, settled_at = ${Math.max(e.now,i.updated_at)}
|
|
368
392
|
WHERE id = ${a} AND status = 'requested'
|
|
369
|
-
`);let _=
|
|
393
|
+
`);let _=lr(r,e.instanceId,e.requestId);if(!_)throw new b("EXECUTION_FAILED","Action receipt settlement failed");return dr(_)})}catch(r){throw r instanceof Ce||r instanceof Re||r instanceof b?r:go(r)?new Re(r):new b("EXECUTION_FAILED","UI state action failed")}}reserveExternal(e){try{return this.db.transaction(n=>{let r=this.testHooks?.injectDatabaseError?.();if(r!==void 0)throw r;let o=cr(n,e.instanceId);if(!o)throw new b("INSTANCE_NOT_FOUND","UI instance was not found");let i=e.expectedRevision+1,s=Md();if(n.run(drizzleOrm.sql`
|
|
370
394
|
INSERT INTO ui_action_receipts (
|
|
371
395
|
id, instance_id, request_id, action_id, actor_json, source,
|
|
372
396
|
expected_revision, before_revision, after_revision, status, outcome,
|
|
@@ -381,7 +405,7 @@ ${r.join(`
|
|
|
381
405
|
UPDATE ui_instances
|
|
382
406
|
SET revision = revision + 1, updated_at = ${Math.max(e.now,o.updated_at)}
|
|
383
407
|
WHERE id = ${e.instanceId} AND revision = ${e.expectedRevision} AND status = 'active'
|
|
384
|
-
`).changes!==1)throw new Ce(o.revision);let d=
|
|
408
|
+
`).changes!==1)throw new Ce(o.revision);let d=lr(n,e.instanceId,e.requestId);if(!d)throw new b("EXECUTION_FAILED","Requested receipt could not be read");return {instance:{...ar(o),revision:i},receipt:dr(d),reservedRevision:i}})}catch(n){throw n instanceof Ce||n instanceof Re||n instanceof b?n:go(n)?new Re(n):new b("EXECUTION_FAILED","UI external action reservation failed")}}settleExternal(e){try{return this.db.transaction(n=>{let r=cr(n,e.reservation.instanceId),o=lr(n,e.reservation.instanceId,e.reservation.requestId);if(!r||!o)throw new b("EXECUTION_FAILED","Requested action receipt is missing");if(o.status==="settled")return dr(o);let i=de(e.state),s=e.result===null?null:we(de(e.result)),a=Math.max(e.now,o.requested_at,r.updated_at);n.run(drizzleOrm.sql`
|
|
385
409
|
UPDATE ui_instances SET state_json = ${we(i)}, updated_at = ${a}
|
|
386
410
|
WHERE id = ${e.reservation.instanceId} AND revision = ${e.reservedRevision}
|
|
387
411
|
`).changes!==1?n.run(drizzleOrm.sql`
|
|
@@ -394,25 +418,25 @@ ${r.join(`
|
|
|
394
418
|
SET status = 'settled', outcome = ${e.outcome}, after_revision = ${e.reservedRevision},
|
|
395
419
|
result_json = ${s}, error_code = ${e.errorCode}, settled_at = ${a}
|
|
396
420
|
WHERE id = ${o.id} AND status = 'requested'
|
|
397
|
-
`);let c=ar(n,e.reservation.instanceId,e.reservation.requestId);if(!c)throw new E("EXECUTION_FAILED","External action settlement failed");return ir(c)})}catch(n){throw n instanceof Re||n instanceof E?n:po(n)?new Re(n):new E("EXECUTION_FAILED","UI external action settlement failed")}}};function Sd(){return `uicr_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,12)}`}function Mg(t){return typeof t=="string"&&/^[A-Z][A-Z0-9_]{0,63}$/.test(t)?t:"EXECUTION_FAILED"}var Ug=new Set(["definition","workspaceId","threadId","anchorTaskId","domainRef","state"]),jg=new Set(["definition","workspaceId","threadId","domainRef","state"]),$g=new Set(["instanceId","actionId","expectedRevision","requestId","input"]),Od=new Set(["source","workspaceId","actor"]),Pd=new Set(["source","workspaceId","threadId","actor"]),Bg=Od,zi=4;function Nd(t,e){return new mo(t,e)}function Dd(t){return new mo(t.workspaceId,t,void 0,true)}var mo=class{store;workspaceId;localActor;policy;serverPolicy;serverMode;definitions=new Map;handlers=new Map;clock;testHooks;constructor(e,n,r,o=false){if(this.serverMode=o,!e)throw new E("INPUT_INVALID","UI runtime workspace is invalid");if(o){let i=n;if(!i.dbPath||!i.grantPolicy)throw new E("INPUT_INVALID","Authenticated UI runtime options are invalid");this.serverPolicy=i.grantPolicy;}else {let i=n;if(i.localActor.kind!=="local"||!i.localActor.id)throw new E("INPUT_INVALID","Local UI runtime identity is invalid");this.localActor=i.localActor,this.policy=i.localGrantPolicy;}this.workspaceId=e,this.clock=n.clock??(()=>Date.now()),this.testHooks=r;for(let i of n.definitions??[]){Rd(i);let s=qi(i);if(this.definitions.has(s))throw new E("DEFINITION_UNSUPPORTED","Duplicate UI definition");this.definitions.set(s,i);}for(let i of n.handlers??[]){if(!i.definitionId||!i.actionId||i.version<1)throw new E("INPUT_INVALID","UI handler registration is invalid");let s=Cd(i.definitionId,i.version,i.actionId);if(this.handlers.has(s))throw new E("INPUT_INVALID","Duplicate UI handler registration");this.handlers.set(s,i);}this.store=Fg(n.dbPath,r);}close(){this.store.close();}async createInstance(e,n){if(Gi(e,Ug,jg),this.serverMode){if(!n)throw new E("UNAUTHENTICATED","Authenticated UI context is required");if(this.validateServerContext(n),e.workspaceId!==n.workspaceId||e.threadId!==n.threadId)throw new E("WORKSPACE_MISMATCH","UI instance scope does not match authenticated context")}else if(e.workspaceId!==this.workspaceId)throw new E("WORKSPACE_MISMATCH","Workspace does not match this runtime");if(!e.threadId||e.threadId.length>256||e.anchorTaskId!==void 0&&e.anchorTaskId.length>256)throw new E("INPUT_INVALID","UI instance scope is invalid");let r=this.requireDefinition(e.definition),o=de(e.domainRef),i=de(e.state),s=this.resolveInstanceGrants(r,n),a=this.now();return this.store.create({id:qg(),definitionId:r.id,definitionVersion:r.version,definitionHash:r.hash,workspaceId:e.workspaceId,threadId:e.threadId,anchorTaskId:e.anchorTaskId??null,domainRef:o,state:i,grants:s,now:a})}async dispatchAction(e,n){Gi(e,$g),Gi(n,this.serverMode?Pd:Od,this.serverMode?Pd:Bg),this.validateContext(n);let r={...e,input:this.validateEnvelope(e)},o=this.store.get(r.instanceId);if(!o)throw new E("INSTANCE_NOT_FOUND","UI instance was not found");if(o.workspaceId!==this.workspaceId||n.workspaceId!==o.workspaceId||this.serverMode&&o.threadId!==n.threadId)throw new E("WORKSPACE_MISMATCH","Workspace does not match the UI instance");if(o.status!=="active")throw new E("INSTANCE_NOT_ACTIONABLE","UI instance is not actionable");let i=this.requireDefinition(o.definition),s=i.actions[r.actionId];if(!s)throw new E("ACTION_UNAVAILABLE","UI action is not declared");if(this.validateActionDeclaration(i,r.actionId,s.inputKeys,r.input),this.resolveEffectiveCapabilities(i,r.actionId,s.capabilities,o.grantedCapabilities,n).length===0)throw new E("CAPABILITY_DENIED","UI action capability is not granted");let d=this.handlers.get(Cd(i.id,i.version,r.actionId));if(!d)throw new E("HANDLER_NOT_FOUND","UI action handler is not registered");let c=this.store.getReceipt(r.instanceId,r.requestId);if(c)return c;if(o.revision!==r.expectedRevision)throw new E("REVISION_CONFLICT","UI instance revision is stale",o.revision);await this.testHooks?.beforeReservation?.();let l={instanceId:r.instanceId,requestId:r.requestId,actionId:r.actionId,actor:n.actor,source:n.source,expectedRevision:r.expectedRevision,input:r.input,now:this.now()};return d.kind==="state"?this.dispatchStateWithRetry(l,d):this.dispatchExternalWithRetry(l,d)}async getInstance(e,n){if(!this.serverMode)throw new E("UNAUTHENTICATED","Authenticated UI context is not available in local runtime");if(this.validateServerContext(n),!e)throw new E("INPUT_INVALID","UI instance lookup identity is invalid");let r=this.store.get(e);return !r||r.workspaceId!==n.workspaceId||r.threadId!==n.threadId?null:r}async getReceipt(e,n,r){if(!e||!n)throw new E("INPUT_INVALID","Receipt lookup identity is invalid");let o=this.store.get(e);if(this.serverMode){if(!r)throw new E("UNAUTHENTICATED","Authenticated UI context is required");if(this.validateServerContext(r),!o||o.workspaceId!==r.workspaceId||o.threadId!==r.threadId)return null}else if(!o||o.workspaceId!==this.workspaceId)return null;return this.store.getReceipt(e,n)}async dispatchStateWithRetry(e,n){for(let o=0;o<zi;o+=1)try{return this.store.runStateOnly(e,n.handle)}catch(i){if(i instanceof Ce){let a=this.store.getReceipt(e.instanceId,e.requestId);if(a)return a;throw new E("REVISION_CONFLICT","UI instance revision is stale",i.currentRevision)}if(!(i instanceof Re))throw i;let s=this.store.getReceipt(e.instanceId,e.requestId);if(s)return s;await Vi(o);}let r=this.store.getReceipt(e.instanceId,e.requestId);if(r)return r;throw new E("ACTION_IN_FLIGHT","UI action is still being committed")}async dispatchExternalWithRetry(e,n){let r;for(let l=0;l<zi;l+=1)try{r=this.store.reserveExternal(e);break}catch(f){if(f instanceof Ce){let m=this.store.getReceipt(e.instanceId,e.requestId);if(m)return m;throw new E("REVISION_CONFLICT","UI instance revision is stale",f.currentRevision)}if(!(f instanceof Re))throw f;let g=this.store.getReceipt(e.instanceId,e.requestId);if(g)return g;await Vi(l);}if(!r){let l=this.store.getReceipt(e.instanceId,e.requestId);if(l)return l;throw new E("ACTION_IN_FLIGHT","UI action is still being committed")}let o;try{o=await n.handle({instance:r.instance,actor:e.actor,source:e.source,input:e.input,requestId:e.requestId});}catch{o={outcome:"failed",errorCode:"EXECUTION_FAILED"};}let i="outcome"in o?o.outcome:"succeeded",s="errorCode"in o?Hg(o.errorCode):null,a=r.instance.state,d=null;try{o.state&&(a=de(o.state)),o.result&&(d=de(o.result));}catch{a=r.instance.state,d=null;}for(let l=0;l<zi;l+=1)try{return this.store.settleExternal({reservation:e,reservedRevision:r.reservedRevision,outcome:i,state:a,result:d,errorCode:s,now:this.now()})}catch(f){if(!(f instanceof Re))throw f;await Vi(l);}let c=this.store.getReceipt(e.instanceId,e.requestId);if(c)return c;throw new E("ACTION_IN_FLIGHT","UI action settlement is still being committed")}resolveDefinition(e){let n=this.definitions.get(qi(e));return !n||n.hash!==e.hash||rr(n)!==n.hash?null:n}requireDefinition(e){let n=this.resolveDefinition(e);if(!n)throw new E("DEFINITION_UNSUPPORTED","Pinned UI definition is unavailable");return n}resolveInstanceGrants(e,n){if(this.serverMode){if(!n||!this.serverPolicy)throw new E("UNAUTHENTICATED","Authenticated grant policy is unavailable");try{let r=this.serverPolicy.resolveInstanceGrants({definition:e,workspaceId:n.workspaceId,actor:n.actor});if(!Array.isArray(r)||r.some(o=>typeof o!="string"||!o||o==="*"||o==="all"||/[/*]/.test(o)))throw new Error("invalid grant");return [...new Set(r)]}catch{throw new E("CAPABILITY_DENIED","Authenticated capability grant was denied")}}if(!this.policy||!this.localActor)return [];try{let r=this.policy.resolveInstanceGrants({definition:e,workspaceId:this.workspaceId,actor:this.localActor});if(!Array.isArray(r)||r.some(o=>typeof o!="string"||!o||o==="*"||o==="all"||/[/*]/.test(o)))throw new Error("invalid grant");return [...new Set(r)]}catch{throw new E("INPUT_INVALID","Local capability policy returned an invalid grant")}}resolveEffectiveCapabilities(e,n,r,o,i){if(this.policy)try{let a=this.policy.resolveActionCapabilities({definition:e,actionId:n});if(!Wg(a,r))throw new Error("definition capability mismatch")}catch{throw new E("DEFINITION_UNSUPPORTED","UI action capability declaration is unavailable")}let s;if(this.serverMode&&this.serverPolicy?.resolveDispatchCapabilities)try{if(s=this.serverPolicy.resolveDispatchCapabilities({definition:e,actionId:n,actor:i.actor,source:i.source}),!Array.isArray(s)||s.some(a=>typeof a!="string"||!a||a==="*"||a==="all"||/[/*]/.test(a)))throw new Error("invalid dispatch grant")}catch{throw new E("CAPABILITY_DENIED","Authenticated dispatch capability was denied")}return [...co(r,o,s)]}validateContext(e){if(this.serverMode){this.validateServerContext(e);return}if(!this.localActor||e.source!=="cli"||e.workspaceId!==this.workspaceId||e.actor.kind!=="local"||e.actor.id!==this.localActor.id)throw new E("UNAUTHENTICATED","CLI local execution context is invalid")}validateServerContext(e){if(e.source!=="system"&&e.source!=="ui_host")throw new E("UNAUTHENTICATED","Authenticated UI source is invalid");if(e.workspaceId!==this.workspaceId||!e.threadId||e.actor.kind!=="authenticated"||!e.actor.id)throw new E("UNAUTHENTICATED","Authenticated UI context is invalid")}validateEnvelope(e){if(!e.instanceId||e.instanceId.length>128||!e.actionId||e.actionId.length>128||!e.requestId||Jn(e.requestId)>128||!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)throw new E("INPUT_INVALID","UI action envelope is invalid");let n=de(e.input),r=we(n);if(Jn(r)>64*1024)throw new E("INPUT_INVALID","UI action input is too large");return n}validateActionDeclaration(e,n,r,o){if(r&&Object.keys(o).some(i=>!r.includes(i)))throw new E("INPUT_INVALID","UI action input is invalid")}now(){let e=this.clock();if(!Number.isFinite(e))throw new E("EXECUTION_FAILED","UI runtime clock is invalid");return Math.max(0,Math.floor(e))}};function Fg(t,e){return new go(t,{injectDatabaseError:e?.injectDatabaseError,bumpRevisionBeforeCas:e?.bumpRevisionBeforeCas})}function Gi(t,e,n=e){if(t===null||typeof t!="object")throw new E("INPUT_INVALID","UI contract input is invalid");for(let r of Object.keys(t))if(!e.has(r))throw new E("INPUT_INVALID","Unknown UI contract field");for(let r of n)if(!Object.prototype.hasOwnProperty.call(t,r))throw new E("INPUT_INVALID","Missing UI contract field")}function Cd(t,e,n){return `${t}\0${e}\0${n}`}function qg(){return `uic_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,12)}`}function Hg(t){return typeof t=="string"&&/^[A-Z][A-Z0-9_]{0,63}$/.test(t)?t:"EXECUTION_FAILED"}function Wg(t,e){return t.length===e.length&&t.every(n=>e.includes(n))}async function Vi(t){await new Promise(e=>setTimeout(e,Math.min(8,1<<t)));}Ae();u();u();function fn(t,e={}){if(typeof t!="string")return ee("invalid_input");let n=t.trim();if(n.length===0)return ee("invalid_input");if(n.length>2048)return ee("url_too_long");let r=/^([a-z][a-z\d+.-]*):\/\//i.exec(n);if(!r||r[1].toLowerCase()!=="http"&&r[1].toLowerCase()!=="https")return ee("invalid_scheme");if(n.includes("?"))return ee("query_not_allowed");if(n.includes("#"))return ee("fragment_not_allowed");let o=zg(n,r[0].length);if(!o.ok)return o;if(o.value.host.includes("%"))return ee(o.value.bracketed?"zone_id":"host_not_ip_literal");let i=Gg(o.value.port);if(i)return ee(i);let s;try{s=new URL(n);}catch{return ee("invalid_url")}if(s.protocol!=="http:"&&s.protocol!=="https:")return ee("invalid_scheme");if(s.username.length>0||s.password.length>0)return ee("userinfo_not_allowed");let a=o.value.host,d;if(a.toLowerCase()==="localhost"){if(d="loopback",!e.allowLoopback)return ee("loopback_not_allowed");s.hostname="127.0.0.1";}else {let c=Ud(a);if("code"in c)return ee(c.code);if(d=c.hostClass,d==="loopback"&&!e.allowLoopback)return ee("loopback_not_allowed")}return {ok:true,normalizedBaseUrl:s.toString().replace(/\/+$/,""),hostClass:d}}function Md(t,e={}){if(typeof t!="string")return false;let n=Ud(t);return "code"in n?false:n.hostClass!=="loopback"||e.allowLoopback===true}function zg(t,e){let n=e,r=t.slice(n),o=r.search(/[/?#]/),i=r.slice(0,o===-1?r.length:o);if(i.length===0)return ee("invalid_url");if(i.includes("@"))return ee("userinfo_not_allowed");if(i.startsWith("[")){let d=i.indexOf("]");if(d===-1)return ee("invalid_url");let c=i.slice(1,d),l=i.slice(d+1);return c.length===0||l.length>0&&!l.startsWith(":")?ee("invalid_url"):{ok:true,value:{host:c,port:l.length>0?l.slice(1):void 0,bracketed:true}}}if(i.includes("[")||i.includes("]"))return ee("invalid_url");let s=i.indexOf(":");if(s!==-1&&i.indexOf(":",s+1)!==-1)return ee("host_not_ip_literal");let a=s===-1?i:i.slice(0,s);return a.length===0?ee("invalid_url"):{ok:true,value:{host:a,port:s===-1?void 0:i.slice(s+1),bracketed:false}}}function Gg(t){if(t===void 0||t==="")return;if(!/^\d+$/.test(t))return "invalid_port";let e=Number(t);if(!Number.isSafeInteger(e))return "invalid_port";if(!(e===80||e===443))return e>=1024&&e<=65535?void 0:"invalid_port"}function Ud(t){let e=jd(t);if(e)return Vg(e);if(t.includes("%"))return {code:"zone_id"};let n=Jg(t);return n?Xg(n.words)?{code:"ipv4_mapped_ipv6"}:Kg(n.words):{code:"host_not_ip_literal"}}function Vg(t){let[e,n,r,o]=t,i=((e*256+n)*256+r)*256+o;return i===0?{code:"unspecified"}:i===2852039166||i===1684301e3?{code:"metadata_address"}:e===127?{hostClass:"loopback"}:e===10||e===172&&n>=16&&n<=31||e===192&&n===168?{hostClass:"private-ipv4"}:e===100&&n>=64&&n<=127?{hostClass:"cgnat"}:e===169&&n===254?{code:"link_local"}:e>=224?{code:"multicast"}:{code:"ip_not_allowed"}}function Kg(t){return Yg(t)?{code:"unspecified"}:Qg(t)?{hostClass:"loopback"}:t[0]===64768&&t[1]===3778&&t[2]===0&&t[3]===0&&t[4]===0&&t[5]===0&&t[6]===0&&t[7]===596?{code:"metadata_address"}:(t[0]&65472)===65152?{code:"link_local"}:(t[0]&65280)===65280?{code:"multicast"}:(t[0]&65280)===64768?{hostClass:"unique-local-ipv6"}:{code:"ip_not_allowed"}}function jd(t){let e=t.split(".");if(e.length!==4)return;let n=[];for(let r of e){if(!/^\d{1,3}$/.test(r)||r.length>1&&r.startsWith("0"))return;let o=Number(r);if(o>255)return;n.push(o);}return n}function Jg(t){let e=t.indexOf("::");if(e!==-1&&t.indexOf("::",e+2)!==-1)return;let n=e!==-1,r=n?t.slice(0,e):t,o=n?t.slice(e+2):"",i=Ld(r),s=n?Ld(o):{words:[]};if(!i||!s)return;let a=i.words.length+s.words.length;if(n?a>=8:a!==8)return;let d=n?8-a:0;return {words:[...i.words,...Array.from({length:d},()=>0),...s.words]}}function Ld(t){if(t==="")return {words:[]};let e=t.split(":"),n=[];for(let[r,o]of e.entries()){if(o.includes(".")){if(r!==e.length-1)return;let i=jd(o);if(!i)return;n.push(i[0]<<8|i[1],i[2]<<8|i[3]);continue}if(!/^[0-9a-f]{1,4}$/i.test(o))return;n.push(Number.parseInt(o,16));}return {words:n}}function Xg(t){return t.length===8&&t[0]===0&&t[1]===0&&t[2]===0&&t[3]===0&&t[4]===0&&t[5]===65535}function Yg(t){return t.every(e=>e===0)}function Qg(t){return t.slice(0,7).every(e=>e===0)&&t[7]===1}function ee(t){return {ok:false,code:t}}u();var Zg="@ai-sdk/openai-compatible",em=/^CREWX_LOCAL_AI_[A-Z0-9_]+$/,tm=64,nm=100,rm=200,om=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,st=class extends Error{constructor(n){super(sm(n));this.code=n;Object.setPrototypeOf(this,new.target.prototype);}code;name="LocalServerOpenCodeOverlayError"};function ho(t){let e=t.definition,n=e.defaultModel;if(typeof n!="string"||n.trim().length===0)throw new st("missing_default_model");if(n.length>rm)throw new st("invalid_default_model");let r=e.label;if(typeof r!="string"||r.trim().length===0||r.length>nm)throw new st("invalid_label");let i=`crewx-${im(e.id)}`,s=fn(e.baseUrl,{allowLoopback:true});if(!s.ok)throw new st("invalid_base_url");let a={baseURL:s.normalizedBaseUrl},d=e.auth?.apiKeyEnv;if(d!==void 0){if(typeof d!="string"||d.length>tm||!em.test(d))throw new st("invalid_api_key_env");a.apiKey=`{env:${d}}`;}let c={provider:{[i]:{npm:Zg,name:r,options:a,models:{[n]:{name:n}}}}};return {env:{OPENCODE_CONFIG_CONTENT:JSON.stringify(c,null,2)},model:`${i}/${n}`,providerId:i}}function im(t){let e=typeof t=="string"?t.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,""):"";if(!om.test(e))throw new st("invalid_provider_id");return e}function sm(t){switch(t){case "missing_default_model":return "A default model is required for the local server overlay.";case "invalid_default_model":return "The local server default model is invalid.";case "invalid_label":return "The local server label is invalid.";case "invalid_provider_id":return "The local server provider id is invalid.";case "invalid_api_key_env":return "The local server API key environment variable name is invalid.";case "invalid_base_url":return "The local server base URL is invalid."}}var am=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,Bd="LOCAL_AI_SERVER_CONFIG_INVALID",Pe=class extends Error{name="LocalServerRuntimeError";code=Bd;constructor(){super("Local AI server configuration is invalid."),Object.setPrototypeOf(this,new.target.prototype);}};function yo(t,e){return t==="cli/opencode"&&!Fd(e)}function Ji(t){if(!yo(t.effectiveProviderStr,t.effectiveModel))return {};if(!t.globalSettings)return {};let e;try{e=t.globalSettings.read();}catch{throw new Pe}if(!Ki(e))throw new Pe;let n=e.ai_server;if(n===void 0)return {};if(!Ki(n)||n.version!==1)throw new Pe;let r=n.definition;if(!Ki(r))throw new Pe;let o=fn(r.baseUrl,{allowLoopback:true}),i=o.ok?o.normalizedBaseUrl:void 0;if(i===void 0||!dm(r.id)||!$d(r.label,100)||!$d(r.defaultModel,200))throw new Pe;let s;try{s=ho({...n,definition:{...r,baseUrl:i}});}catch{throw new Pe}if(!cm(s))throw new Pe;return {model:s.model,env:s.env,metadata:{providerId:s.providerId,model:s.model,source:"global_settings"}}}function Fd(t){return typeof t=="string"&&t.trim().length>0}function dm(t){return typeof t=="string"&&t===t.trim()&&am.test(t)}function $d(t,e){return typeof t=="string"&&t.trim().length>0&&t.length<=e}function cm(t){return Fd(t.model)&&typeof t.providerId=="string"&&t.providerId.length>0&&typeof t.env?.OPENCODE_CONFIG_CONTENT=="string"&&t.env.OPENCODE_CONFIG_CONTENT.length>0}function Ki(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function oc(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)?t:void 0}function Lm(t){return t.slice(t.lastIndexOf("/")+1)}var Mm=new Set(["tools","effort","mode","provider","model","profiles","overdrive"]);function Um(t){if(!t)return;let n=Object.entries(t).filter(([,r])=>r!=null&&typeof r!="object"&&typeof r!="function").filter(([r])=>!Mm.has(r));if(n.length!==0)return Object.fromEntries(n.map(([r,o])=>[r,String(o)]))}function ic(t,e,n){let r=oc(t);if(!r)return {};let o=Lm(e),i=!n.active&&o==="grok"?jn(r):r,s=n.active?n.providerOptions:oc(i[o]);return {modeOptions:i,providerOptions:s,configOptions:Um(i)}}function jm(t){return t?t.settings?.template?.exec:void 0}function $m(){try{let t=new Uint8Array(8);return globalThis.crypto.getRandomValues(t),Array.from(t,e=>e.toString(16).padStart(2,"0")).join("")}catch{let{randomBytes:t}=_e("crypto");return t(8).toString("hex")}}var us=class t extends zn{_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;_globalSettings;_callerIdentityOverrides=new Map;constructor(e,n={},r,o,i){super(),this._agents=new Map(e.map(d=>[d.id,d])),this._config=r,this._projectRoot=i??(typeof process<"u"?process.cwd():"/");let s=i??(typeof process<"u"?process.env.CREWX_WORKSPACE??process.cwd():"/");this._workspaceId=ao(s),this._workspaceName=Y.basename(s);let a=jm(r);this._templateEngine=new Bn({execPolicy:n.execPolicy??a}),this._documentLoader=o??new Gt,this._layoutLoader=new Fn({templatesPath:en()}),this._layoutRenderer=new Wn,this._remoteFactory=n.remoteFactory,this._additionalArgsProvider=n.additionalArgsProvider,this._globalSettings=n.globalSettings;}async resolveFileRemoteTarget(e){let n=this.getAgent(e),r=Array.isArray(n?.provider)?n?.provider[0]:n?.provider;if(!r?.startsWith("remote/"))return null;let o=r.slice(7),i=this.getRemoteProviderConfig(o);if(!i?.location?.startsWith("file://"))return null;let s=Y.resolve(i.location.replace("file://","")),a=i.external_agent_id??e.replace(/^@/,""),d=this._remoteTargets.get(s);d||(d=(this._remoteFactory??(m=>t.loadYaml(m)))(s),this._remoteTargets.set(s,d),d.catch(()=>this._remoteTargets.delete(s)));let c=await d,l=c.getAgent("@"+a),f=Array.isArray(l?.provider)?l?.provider[0]:l?.provider;if(f?.startsWith("remote/"))throw new Error(`Chained remotes not allowed: "${o}" \u2192 "${f}"`);return {target:c,agentRef:"@"+a}}static async loadBuiltInConfig(e){let{yamlPath:n,dir:r}=Vo(),o;try{o=fd.readFileSync(n,"utf-8");}catch(s){throw new Error(`[@crewx/sdk] Cannot read built-in config: ${n}
|
|
398
|
-
${s.message}`)}let i=Cr(o);if(i.documents&&typeof i.documents=="object"){let s={};for(let[a,d]of Object.entries(i.documents))if(d&&typeof d=="object"){let c=d;typeof c.path=="string"&&!Y.isAbsolute(c.path)?s[a]={...c,path:Y.resolve(r,c.path)}:s[a]=c;}else s[a]=d;return {...i,documents:s}}return i}static mergeCrewxConfig(e,n){let r=new Map;for(let w of e.agents??[])r.set(w.id,w);for(let w of n.agents??[])r.has(w.id)&&console.warn(`[agent-loader] User agent "${w.id}" overrides built-in`),r.set(w.id,w);let o=Array.from(r.values()),i={...e.layouts??{},...n.layouts??{}},s={...e.documents??{},...n.documents??{}},a=e,d=n,c=sc(a.vars,d.vars),l=sc(a.settings,d.settings),f;e.skills&&n.skills&&typeof e.skills=="object"&&typeof n.skills=="object"&&!Array.isArray(e.skills)&&!Array.isArray(n.skills)?f={...e.skills,...n.skills}:f=n.skills??e.skills;let g=[...e.hooks??[],...n.hooks??[]],m=Bm(a.providers,d.providers),k={...e},h={...n};for(let w of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete k[w],delete h[w];let _={...{...k,...h},agents:o,layouts:i,documents:s,skills:f};return g.length>0&&(_.hooks=g),c!==void 0&&(_.vars=c),l!==void 0&&(_.settings=l),m!==void 0&&(_.providers=m),_}static async loadYaml(e,n,r){let o=n?.includeBuiltIns!==false,i,s;if(o){let l=await t.loadBuiltInConfig(r);if(e!==void 0){let f=Or(e);i=t.mergeCrewxConfig(l,f),s=Y.dirname(e);}else i=l,s=process.cwd();}else {if(e===void 0)throw new Error("[@crewx/sdk] loadYaml: path is required when includeBuiltIns is false");i=Or(e),s=Y.dirname(e);}let a=new Gt(r);await a.load(i.documents,s);let d=i.agents??[];return await ac(d,i,n),new t(d,n??{},i,a,s)}static async fromConfig(e,n,r,o){let i=n?.includeBuiltIns===true,s=e;if(i){let l=await t.loadBuiltInConfig(o);s=t.mergeCrewxConfig(l,e);}let a=new Gt(o);await a.load(s.documents,r??(typeof process<"u"?process.cwd():"/"));let d=s.agents??[];return await ac(d,s,n),new t(d,n??{},s,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}createUiRuntime(e){return Nd(this._workspaceId,e)}get workspaceName(){return this._workspaceName}getAgent(e){let n=e.startsWith("@")?e.slice(1):e;return this._agents.get(n)}getRemoteProviderConfig(e){let n=this._config?.providers;return Array.isArray(n)?n.find(o=>o.type==="remote"&&o.id===e):void 0}computeTaskLogPath(e,n){let r=ui(n);return Y.join(this._projectRoot,".crewx","logs",`${r}_${e}.log`)}registerTool(e,n){this._tools.set(e,{name:e,...n});}async use(e){this._plugins.includes(e)||(await e.attach(this),this._plugins.push(e));}handler(e){return Bi(this,e)}async registerChannelAdapter(e){let{adapter:n,instanceId:r,config:o}=e;if(this._activeAdapters.has(r))throw new Error(`Adapter instance already registered: ${r}`);let i=new Set(n.manifest.capabilities),s=e.store??wi(r),a=e.defaultMode??"query",d=n.manifest.platform,c=e.agentRunner??{run:async(m,k,h)=>{let _=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${m}`,k,{threadId:h?.threadId,platform:d});return {output:_.ok?_.data:_.error?.message??""}}},l=e.onInbound??(async m=>{let k=m.routingHints?.agentId??e.defaultAgent;if(!k)return {accepted:false,reason:"no_agent"};let{output:h}=await c.run(k,m.text,{threadId:m.threadId});return {accepted:true,output:h}}),f=vi({instanceId:r,config:o,capabilities:i,db:s,agentRunner:c,onInbound:l}),g={adapter:n,ctx:f,state:"starting"};this._activeAdapters.set(r,g),this.emit("adapter:lifecycle",{adapterId:n.manifest.id,instanceId:r,state:"starting",timestamp:new Date});try{await n.start(f),g.state="started",this.emit("adapter:lifecycle",{adapterId:n.manifest.id,instanceId:r,state:"started",timestamp:new Date});}catch(m){throw g.state="failed",this.emit("adapter:lifecycle",{adapterId:n.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 n=this._activeAdapters.get(e);if(n){n.state="stopping",this.emit("adapter:lifecycle",{adapterId:n.adapter.manifest.id,instanceId:e,state:"stopping",timestamp:new Date});try{await n.adapter.stop(n.ctx),n.state="stopped",this.emit("adapter:lifecycle",{adapterId:n.adapter.manifest.id,instanceId:e,state:"stopped",timestamp:new Date});}catch(r){n.state="failed",this.emit("adapter:lifecycle",{adapterId:n.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 n=e.timeoutMs??1e4,r=Array.from(this._activeAdapters.keys()),o=await Promise.allSettled(r.map(i=>Promise.race([this.unregisterChannelAdapter(i),new Promise((s,a)=>setTimeout(()=>a(new Error(`Adapter stop timeout: ${i}`)),n))])));for(let i=0;i<o.length;i++)o[i].status==="rejected"&&console.error(`[crewx] adapter stop error (${r[i]}): ${o[i].reason}`);}abortAll(){for(let[e,n]of this._activeTasks)if(n.pid!==void 0)try{process.platform==="win32"?process.kill(n.pid,"SIGTERM"):process.kill(-n.pid,"SIGTERM");}catch(r){console.error(`[crewx] abort task ${e} (pid=${n.pid}) error: ${r instanceof Error?r.message:String(r)}`);}}async _drainActiveTasks(e){let n=Array.from(this._activeTasks.values()).map(r=>r.done);n.length!==0&&await Promise.race([Promise.allSettled(n),new Promise(r=>setTimeout(r,e).unref())]);}async close(){this.abortAll(),await this._drainActiveTasks(Mn+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 n=[...this._plugins].reverse();for(let r of n)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 n=a=>a?a.split(",").map(d=>d.trim().toLowerCase()).filter(Boolean):void 0,r=n(e.role),o=n(e.team),i=n(e.provider),s=Array.from(this._agents.values());return r&&(s=s.filter(a=>a.role&&r.some(d=>Ve(a.role.toLowerCase(),d)))),o&&(s=s.filter(a=>a.team&&o.some(d=>Ve(a.team.toLowerCase(),d)))),i&&(s=s.filter(a=>(Array.isArray(a.provider)?a.provider:[a.provider]).some(c=>i.some(l=>Ve(c.toLowerCase(),l))))),s}renderAgentPrompt(e){let n=e.startsWith("@")?e.slice(1):e,r=this._agents.get(n);if(!r)throw new ct(n,Array.from(this._agents.keys()));return r.inline?.prompt??r.inline?.system_prompt??r.description??`You are an expert ${n}.`}async renderPrompt(e,n){let o={...await this._documentLoader.buildContext(),...n?.documents??{}},i={...n,documents:o};return this._templateEngine.render(e,i)}registerLayout(e,n){this._layoutLoader.registerLayout(e,n);}async renderAgentPromptFull(e,n){let r=n?.__contextBudget,o=e.startsWith("@")?e.slice(1):e,i=this._agents.get(o);if(!i)throw new ct(o,Array.from(this._agents.keys()));let s=this._resolveLayoutSpec(i,n?.layout),a=this._extractLayoutId(s),d=this._extractLayoutProps(i,s,n?.layout),c=this._layoutLoader.load(a,d),l=i.inline?.prompt??i.inline?.system_prompt??i.description??`You are an expert ${o}.`,f=await this._documentLoader.buildContext(),g=n?.env??(typeof process<"u"?process.env:{}),m=n?.vars?.security_key??$m(),k={...n?.vars??{},documents:f,env:g,agent:{id:i.id,name:i.name??i.id,role:i.role??"",team:i.team??"",description:i.description??""}},h=await this._templateEngine.render(l,k),v={mode:n?.session?.mode??"query",platform:n?.session?.platform??"cli",options:n?.session?.options??[]},_=i.provider,w=Array.isArray(_)?_:typeof _=="string"&&_.length>0?[_]:[],T=w.join(", ")||(typeof _=="string"?_:""),x=i.options,U=["goals","daily"],I={goals:false,daily:false},te;if(!Array.isArray(x)&&typeof x=="object"&&x!==null){let O=x;if("goals"in O){let ae=O.goals;typeof ae=="string"||Array.isArray(ae)?I.goals=ae:I.goals=!!ae;}"daily"in O&&(I.daily=!!O.daily);let Z={};for(let[ae,ge]of Object.entries(O))U.includes(ae)||(Z[ae]=ge);if(Object.keys(Z).length>0){let ae=w.some(ye=>ye.startsWith("cli/")),ge={};for(let[ye,Me]of Object.entries(Z)){let Ge={};if(Array.isArray(Me))ae&&(Ge.rawArgs=Me);else if(typeof Me=="object"&&Me!==null){let b=Me;Object.keys(b).length>0&&(Ge.named=b);}(Ge.named||Ge.rawArgs&&Ge.rawArgs.length>0)&&(ge[ye]=Ge);}te=Object.keys(ge).length>0?ge:void 0;}}let S=Array.isArray(x)?x:void 0,q={};for(let[O,Z]of Object.entries(f))q[O]={content:Z.content??"",toc:Z.toc,summary:Z.summary,path:Z.path};if(I.goals){let O=Y.join(this._projectRoot,"docs","goal"),Z=await Ma(O,void 0,I.goals);Z&&(q.active_goals={content:Z});}if(I.daily){let O=Y.join(this._projectRoot,"docs","daily"),Z=await Ua(O);Z&&(q.today_daily={content:Z});}let fe=n?.vars?.user_input??void 0,j=this._config?.settings?.dreaming?.continuity,F=j?.reuseReadOnly!==false,B=typeof j?.lookback=="number"?j.lookback:5,K=typeof j?.maxEntryChars=="number"?j.maxEntryChars:8e3,W=n?.threadId??"",H=i.id,ne=!r?.activityLogDisabled&&F&&B>0&&!!W&&!!n?.messages?.length,re=new Map;if(ne)if(r?.activityLogTokenBudget!==void 0&&r.countTokens){let O=$i({threadId:W,agentId:H,lookback:B,maxEntryChars:K,activityLogTokenBudget:r.activityLogTokenBudget,countTokens:r.countTokens});re=O.activityLogByTask,r.onActivityLogResult?.(O);}else {typeof j?.decayRate=="number"?j.decayRate:.5;re=_d({threadId:W,agentId:H,lookback:B,maxEntryChars:K});}let kn=(n?.messages??[]).map(O=>{let Z=typeof O.activity_log=="string"?Xr(O.activity_log):O.activity_log;if(!O.isAssistant)return Z===O.activity_log?O:{...O,activity_log:Z};let ae=O.metadata?.task_id;return !ae||!re.has(ae)?Z===O.activity_log?O:{...O,activity_log:Z}:{...O,activity_log:Xr(re.get(ae))}}),vn={user_input:fe,agent:{id:i.id,name:i.name??i.id,role:i.role??"",team:i.team??"",description:i.description??"",provider:T,providerList:w,model:i.inline?.model,workingDirectory:i.working_directory??i.workingDirectory??".",inline:{...i.inline??{},prompt:h},specialties:i.specialties??[],capabilities:i.capabilities??[],remote:i.remote??null,optionsByMode:te,optionsArray:S},agentMetadata:{specialties:i.specialties??[],capabilities:i.capabilities??[],description:i.description??""},contextOptions:I,documents:q,skills:n?.skills??[],session:v,env:g,vars:{security_key:m,...n?.vars??{}},props:{...d??{},...n?.messages&&n.messages.length>0?{showConversationHistory:true}:{}},platform:v.platform,mode:v.mode,thread_id:W,now:qn(new Date),has_activity_log:re.size>0,messages:kn,tools:this._tools.size>0?{list:Array.from(this._tools.values()).map(O=>({name:O.name,description:O.description,parameters:O.parameters})),json:JSON.stringify(Array.from(this._tools.values()).map(O=>({name:O.name,description:O.description,parameters:O.parameters})),null,2),count:this._tools.size}:null,metadata:{}};return this._layoutRenderer.render(c,vn)}_filterToolsByMode(e){return e?e.map(n=>this._tools.get(n)).filter(n=>n!==void 0):Array.from(this._tools.values())}_resolveLayoutSpec(e,n){if(n!==void 0)return n;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 n=`crewx/__inline_${Date.now()}`;return this._layoutLoader.registerLayout(n,e.template),n}return "crewx/default"}_extractLayoutProps(e,n,r){let o=e.inline?.layout,i=o&&typeof o=="object"&&"props"in o?o.props:void 0,s=r&&typeof r=="object"&&"id"in r?r.props:void 0;if(i||s)return {...i??{},...s??{}}}_getConversationProvider(){return this._plugins.find(n=>n.name==="conversation")?.conversationProvider}async _fetchHistoryMessages(e,n,r,o){if(r&&r.length>0)return ln(r,o);if(!e){let s=ln([],o);return s.length>0?s:void 0}let i=this._getConversationProvider();if(!i){let s=ln([],o);return s.length>0?s:void 0}try{let s=await i.fetchHistory(e,{currentTraceId:n});if(s.messages.length===0){let a=ln([],o);return a.length>0?a:void 0}return ln(Ii(s),o)}catch{return}}async _resolveFreshProvider(e,n,r){let o=ja(e.provider),i=ci(e.options,n,o,di(r?.overdrive)),s=li(e.options,n),a=i.active&&i.provider?i.provider:r?.provider??s.provider??o,d=i.active&&i.model?i.model:r?.model??s.model??e.inline?.model;return d&&d.includes("{{")&&(d=await this._templateEngine.render(d,{...r?.vars??{}})),{baseProviderStr:o,baseModel:e.inline?.model,effectiveProviderStr:a,effectiveModel:d,overdrive:i}}_resolveLocalServerRuntime(e,n){return yo(e,n)?(this._globalSettings??=Go(),Ji({effectiveProviderStr:e,effectiveModel:n,globalSettings:this._globalSettings})):{}}_readInputBudgetPercent(){let r=this._config?.settings?.dreaming?.continuity;if(!(!r||!Object.prototype.hasOwnProperty.call(r,"inputBudgetPercent")))return r.inputBudgetPercent}_resolveBudgetModel(e,n){if(n&&n.trim())return n;let r=Rr(e)?.model;return typeof r=="string"&&r.trim()?r:""}_resolveContextMode(e){return e?.contextMode==="instruction-only"?"instruction-only":"full"}_hasUsableResumeSessionId(e){return typeof e=="string"&&e.trim().length>0}_buildInstructionOnlyResumeManifest(e){return {phase:"resume",initialInputFraming:qo,resolved:e.budget.resolved,reason:e.budget.resolved?void 0:e.budget.reason,requestedProvider:e.requestedProvider,requestedModel:e.requestedModel,effectiveProvider:e.effectiveProvider,effectiveModel:e.effectiveModel,contextWindowTokens:e.budget.resolved?e.budget.contextWindowTokens:null,inputBudgetPercent:e.budget.resolved?e.budget.inputBudgetPercent:e.budget.inputBudgetPercent??(typeof e.rawInputBudgetPercent=="number"?e.rawInputBudgetPercent:null),inputBudgetTokens:e.budget.resolved?e.budget.inputBudgetTokens:null,tokenizer:e.budget.tokenizer,initialTokenCount:e.messageTokenCount,finalTokenCount:e.messageTokenCount,activityLogTokenCount:0,activityIncludedEntries:0,activityOmittedEntries:0,activityRemovedForBudget:false,activityNewestTaskTokenCap:null,historyOriginalMessages:0,historyIncludedMessages:0,historyOmittedMessages:0,overBudget:e.budget.resolved?e.messageTokenCount>e.budget.inputBudgetTokens:false}}_prepareInstructionOnlyResumeWithBudget(e){let n=e.providerResolution.effectiveProviderStr,r=this._resolveBudgetModel(n,e.providerResolution.effectiveModel),o=this._readInputBudgetPercent(),i=Pr({provider:n,model:r,inputBudgetPercent:o}),s=e.providerResolution.baseProviderStr,a=e.providerResolution.baseModel??null,d=r||null,c=Sr(e.message,{provider:n,model:r}).tokenCount,l=this._buildInstructionOnlyResumeManifest({budget:i,requestedProvider:s,requestedModel:a,effectiveProvider:n,effectiveModel:d,rawInputBudgetPercent:o,messageTokenCount:c});return this._hasUsableResumeSessionId(e.resumeSessionId)?i.resolved&&c>i.inputBudgetTokens?{contextBudget:l,error:{code:"INPUT_BUDGET_EXCEEDED",message:`Input budget exceeded: instruction-only resume message is ${c} tokens; budget is ${i.inputBudgetTokens} tokens.`}}:{contextBudget:l}:{contextBudget:l,error:{code:"RESUME_SESSION_REQUIRED",message:'contextMode "instruction-only" requires a same-provider native resumeSessionId.'}}}_activityLogEntryCounts(e){return e?e.tasks.reduce((n,r)=>({tokenCount:n.tokenCount+r.tokenCount,includedEntries:n.includedEntries+r.includedEntries,omittedEntries:n.omittedEntries+r.omittedEntries}),{tokenCount:0,includedEntries:0,omittedEntries:0}):{tokenCount:0,includedEntries:0,omittedEntries:0}}_buildUnresolvedContextBudgetManifest(e){return {phase:"fresh",initialInputFraming:Ar,resolved:false,reason:e.budget.resolved?void 0:e.budget.reason,requestedProvider:e.requestedProvider,requestedModel:e.requestedModel,effectiveProvider:e.effectiveProvider,effectiveModel:e.effectiveModel,contextWindowTokens:null,inputBudgetPercent:e.budget.resolved?e.budget.inputBudgetPercent:e.budget.inputBudgetPercent??(typeof e.rawInputBudgetPercent=="number"?e.rawInputBudgetPercent:null),inputBudgetTokens:null,tokenizer:e.budget.tokenizer,initialTokenCount:null,finalTokenCount:null,activityLogTokenCount:null,activityIncludedEntries:null,activityOmittedEntries:null,activityRemovedForBudget:false,activityNewestTaskTokenCap:null,historyOriginalMessages:e.historyOriginalMessages,historyIncludedMessages:e.historyOriginalMessages,historyOmittedMessages:0,overBudget:false}}_buildResolvedContextBudgetManifest(e){let n=this._activityLogEntryCounts(e.activityLogResult);return {phase:"fresh",initialInputFraming:Ar,resolved:true,requestedProvider:e.requestedProvider,requestedModel:e.requestedModel,effectiveProvider:e.effectiveProvider,effectiveModel:e.effectiveModel,contextWindowTokens:e.budget.contextWindowTokens,inputBudgetPercent:e.budget.inputBudgetPercent,inputBudgetTokens:e.budget.inputBudgetTokens,tokenizer:e.budget.tokenizer,initialTokenCount:e.initialTokenCount,finalTokenCount:e.finalTokenCount,activityLogTokenCount:n.tokenCount,activityIncludedEntries:n.includedEntries,activityOmittedEntries:n.omittedEntries,activityRemovedForBudget:e.activityRemovedForBudget,activityNewestTaskTokenCap:Math.floor(e.budget.inputBudgetTokens/8),historyOriginalMessages:e.historyOriginalMessages,historyIncludedMessages:e.historyIncludedMessages,historyOmittedMessages:e.historyOriginalMessages-e.historyIncludedMessages,overBudget:e.initialTokenCount>e.budget.inputBudgetTokens}}async _renderFreshPromptVariant(e){return this.renderAgentPromptFull(e.agentRef,{session:{mode:e.mode,platform:e.options?.platform},vars:{user_input:e.message,...e.options?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(e.agent,e.options)},messages:e.messages,threadId:e.options?.threadId,__contextBudget:{activityLogDisabled:e.activityLogDisabled,activityLogTokenBudget:e.activityLogTokenBudget,countTokens:e.countTokens,onActivityLogResult:e.onActivityLogResult}})}async _prepareFreshPromptWithBudget(e){let n=e.historyMessages,r=n??[],o=r.length,i=e.providerResolution.effectiveProviderStr,s=this._resolveBudgetModel(i,e.providerResolution.effectiveModel),a=this._readInputBudgetPercent(),d=Pr({provider:i,model:s,inputBudgetPercent:a}),c=e.providerResolution.baseProviderStr,l=e.providerResolution.baseModel??null,f=s||null;if(!d.resolved)return {renderedPrompt:await this._renderFreshPromptVariant({...e,messages:n}),contextBudget:this._buildUnresolvedContextBudgetManifest({budget:d,requestedProvider:c,requestedModel:l,effectiveProvider:i,effectiveModel:f,rawInputBudgetPercent:a,historyOriginalMessages:o})};let g=zo({provider:i,model:d.model}),m=I=>g.countTokens(I),k=I=>Wo({systemPrompt:I,message:e.message},m),h,v=await this._renderFreshPromptVariant({...e,messages:n,activityLogTokenBudget:d.inputBudgetTokens,countTokens:m,onActivityLogResult:I=>{h=I;}}),_=k(v),w=_,T=false,x=r;if(w>d.inputBudgetTokens&&h&&h.activityLogByTask.size>0&&(v=await this._renderFreshPromptVariant({...e,messages:x,activityLogDisabled:true,activityLogTokenBudget:d.inputBudgetTokens,countTokens:m}),w=k(v),T=true),w>d.inputBudgetTokens&&x.length>0)for(let I=1;I<=r.length;I++){let te=r.slice(I),S=await this._renderFreshPromptVariant({...e,messages:te,activityLogDisabled:T,activityLogTokenBudget:d.inputBudgetTokens,countTokens:m}),q=k(S);if(v=S,w=q,x=te,q<=d.inputBudgetTokens)break}let U=this._buildResolvedContextBudgetManifest({budget:d,requestedProvider:c,requestedModel:l,effectiveProvider:i,effectiveModel:f,initialTokenCount:_,finalTokenCount:w,activityLogResult:h,activityRemovedForBudget:T,historyOriginalMessages:o,historyIncludedMessages:x.length});return w>d.inputBudgetTokens?{renderedPrompt:v,contextBudget:U,countTokens:m,error:{code:"INPUT_BUDGET_EXCEEDED",message:`Input budget exceeded: final provider initial input is ${w} tokens; budget is ${d.inputBudgetTokens} tokens.`}}:{renderedPrompt:v,contextBudget:U,countTokens:m}}_recountFreshProviderInitialInput(e){let n=e.contextBudgetManifest;if(!n?.resolved||!n.effectiveModel)return null;let r=e.countTokens??(o=>Sr(o,{provider:n.effectiveProvider,model:n.effectiveModel}).tokenCount);return Wo({systemPrompt:e.providerOptions.systemPrompt,message:e.message},r)}_validateFreshProviderInitialInputBudget(e){let n=e.contextBudgetManifest;if(!n?.resolved||n.finalTokenCount===null||n.inputBudgetTokens===null)return;let r=this._recountFreshProviderInitialInput(e);if(r!==null){if(r!==n.finalTokenCount)throw new Error(`Context budget recount mismatch: provider initial input is ${r} tokens but manifest.finalTokenCount is ${n.finalTokenCount}.`);if(r>n.inputBudgetTokens)return {code:"INPUT_BUDGET_EXCEEDED",message:`Input budget exceeded: final provider initial input is ${r} tokens; budget is ${n.inputBudgetTokens} tokens.`}}}_resolveTimeout(e,n){let r=e==="query"?"CREWX_TIMEOUT_QUERY":"CREWX_TIMEOUT_EXECUTE";if(process.env[r]!=null&&process.env[r]!==""){let o=wa();return e==="query"?o.queryMs:o.executeMs}if(n?.meta?.defaultTimeoutMs){let o=e==="query"?n.meta.defaultTimeoutMs.query:n.meta.defaultTimeoutMs.execute;if(o!==void 0)return o}return 8*36e5}_resolveIdleTimeout(e){let n=ii();return n!==void 0?n:e?.meta?.defaultIdleMs!==void 0?e.meta.defaultIdleMs:6e5}_lookupCliAdapter(e){return bi(e)}_resolveEffectiveCost(e,n,r){return js(e?.costUsd,e?.inputTokens,e?.outputTokens,e?.cachedInputTokens,n)}_resolveEffectiveCwd(e,n){return n?.cwd??(e.working_directory?Y.resolve(this._projectRoot,e.working_directory):this._projectRoot)}_buildFileRemoteOptions(e,n){let r={path:this._projectRoot,id:this._workspaceId,name:this._workspaceName,agentRef:e};return {...n,cwd:void 0,callerIdentity:r,metadata:{...n?.metadata??{},crewx:{...n?.metadata?.crewx??{},callerWorkspace:r}},vars:{...n?.vars??{},crewx_caller_workspace_path:r.path,crewx_caller_workspace_id:r.id,crewx_caller_workspace_name:r.name}}}_registerCallerIdentityOverride(e,n,r){let o=Symbol("callerIdentityOverride");return this._callerIdentityOverrides.set(e,{token:o,callerIdentity:n,targetIdentity:r}),o}_clearCallerIdentityOverride(e,n){if(!n)return;let r=this._callerIdentityOverrides.get(e);r&&r.token===n&&this._callerIdentityOverrides.delete(e);}_rewriteCallerFacingPayload(e,n,r){let{callerIdentity:o,targetIdentity:i}=r,s={...n,agentRef:o.agentRef};if(e==="task:output")return s;let a=s,d=a.metadata??{},c=d.crewx??{};return {...a,workspaceId:o.id,workspaceName:o.name,metadata:{...d,crewx:{...c,remoteExecution:i}}}}emit(e,n){if(e==="task:start"||e==="task:end"||e==="task:output"){let r=n.traceId,o=this._callerIdentityOverrides.get(r);if(o){let i=this._rewriteCallerFacingPayload(e,n,o);super.emit(e,i);return}}super.emit(e,n);}emitToolEvents(e,n,r,o,i,s,a){try{let c=this._lookupCliAdapter(r)?.parseEvent?.(o)??Ln(new Date().toISOString(),o);for(let l of c)l.type==="tool_use"&&l.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:n,agentId:i,threadId:s,sessionId:a,provider:r,tool:{name:l.toolName,rawName:l.toolName,input:l.toolInput?this.tryParseJson(l.toolInput):void 0,toolUseId:l.toolUseId}}),l.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:n,agentId:i,threadId:s,sessionId:a,provider:r,tool:{name:l.toolName??"unknown",rawName:l.toolName??"unknown",toolUseId:l.toolUseId,result:l.resultPreview,isError:l.isError}});}catch{}}emitTaskLogEntries(e,n,r,o,i,s,a){try{for(let d of a)d.type==="tool_use"&&d.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:n,agentId:r,threadId:o,sessionId:i,provider:s,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:n,agentId:r,threadId:o,sessionId:i,provider:s,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,n,r){let o=await this.resolveFileRemoteTarget(e);if(o){let l=await o.target.query(o.agentRef,n,this._buildFileRemoteOptions(e,r));return {...l,meta:{...l.meta,agentId:e.replace(/^@/,"")}}}let i=Gn.getStore()??Ei(r?.trace),s=r?.taskId??Qe("tsk"),a={parentTaskId:i?.parentTaskId??null,rootTraceId:i?.rootTraceId??s,callerAgentId:i?.callerAgentId??null},d={parentTaskId:s,rootTraceId:i?.rootTraceId??s,callerAgentId:null},c=r?.callerIdentity?this._registerCallerIdentityOverride(s,r.callerIdentity,{agentId:e.replace(/^@/,""),workspaceId:this._workspaceId,workspaceName:this._workspaceName}):void 0;try{return await Gn.run(d,async()=>{let l=Date.now(),f=new Date,g;try{g=Nr(e,Array.from(this._agents.values()));}catch(b){if(b instanceof ct){this.emit("task:start",{traceId:s,timestamp:f,agentRef:e,message:n,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,projectId:r?.projectId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let N=Date.now()-l,D={code:"AGENT_NOT_FOUND",message:b.message};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:D,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:D,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:N,taskId:s}}}throw b}d.callerAgentId=g.id;let m=await this._resolveFreshProvider(g,"query",r),k=m.baseProviderStr,h=m.effectiveProviderStr,v=m.effectiveModel,_=m.overdrive,w=h!==k?void 0:r?.resumeSessionId,x=this._resolveContextMode(r)==="instruction-only",U,I,te,S=v,q,fe,Q,se,j={},F=!1,B=b=>{F||(F=!0,this.emit("task:start",{traceId:s,timestamp:f,agentRef:e,message:n,mode:"query",pid:b,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:S,provider:h,codingAgentCommand:U,renderedPrompt:fe,metadata:{...r?.metadata??{},provider:h,..._.active?{overdrive:!0}:{},...q?{provider_session_id:q}:{},...Q?{context_budget:Q}:{},...j.metadata?{local_ai_server:j.metadata}:{}},threadId:r?.threadId,projectId:r?.projectId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));};try{j=this._resolveLocalServerRuntime(h,v);}catch(b){if(!(b instanceof Pe))throw b;B();let N=Date.now()-l,D={code:b.code,message:b.message};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:D,model:S,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:h,model:v,durationMs:N,taskId:s}}}if(j.model&&(v=j.model,m.effectiveModel=v,S=v),x){let b=this._prepareInstructionOnlyResumeWithBudget({message:n,providerResolution:m,resumeSessionId:w});if(Q=b.contextBudget,b.error){B();let N=Date.now()-l,D=b.error;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:D,model:S,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:h,model:v,durationMs:N,taskId:s}}}}let K;try{K=pt(h,this._additionalArgsProvider);}catch(b){B();let N=Date.now()-l,D={code:"PROVIDER_ERROR",message:b.message,...b instanceof exports.ProviderError?{providerCode:b.code}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:D,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:h,model:v,durationMs:N,taskId:s}}}let W;if(x||(W=await this._fetchHistoryMessages(r?.threadId,s,r?.messages,r?.uiProjections)),!x)try{let b=await this._prepareFreshPromptWithBudget({agentRef:e,agent:g,mode:"query",message:n,options:r,providerResolution:m,historyMessages:W});if(fe=b.renderedPrompt,Q=b.contextBudget,se=b.countTokens,b.error){B();let N=Date.now()-l,D=b.error;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:D,model:S,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:h,model:v,durationMs:N,taskId:s}}}}catch(b){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${b instanceof Error?b.message:String(b)}`);}let H=g.options,ne=ic(H?.query,h,_),re=_.active?_.mode:ne.modeOptions?.mode,kn=_.effort??r?.effort??ne.modeOptions?.effort,vn=Array.isArray(H?.query?.tools)?H.query.tools:void 0,O=this._tools.size>0?this._filterToolsByMode(vn):[],Z=ne.configOptions,ae=g.inline?.max_steps;h.startsWith("api/")&&B();let ge=!1,ye=0,Me=()=>{},Ge=new Promise(b=>{Me=b;});this._activeTasks.set(s,{pid:void 0,done:Ge});try{let b={model:v,effort:kn,mode:re,context:r?.context,...x?{}:{systemPrompt:fe??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`},additionalArgs:Array.isArray(H?.query)?H.query:void 0,resumeSessionId:w,tools:O.length>0?O:void 0,maxSteps:ae,providerOptions:ne.providerOptions,configOptions:Z,timeoutMs:this._resolveTimeout("query",this._lookupCliAdapter(h)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(h)),cwd:this._resolveEffectiveCwd(g,r),env:{...j.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:s,CREWX_PARENT_TASK_ID:s,CREWX_TASK_ID:s,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:h,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(s,f)},onPid:C=>{let le=this._activeTasks.get(s);le&&(le.pid=C),B(C);},onProviderSessionId:C=>{q=C;},onOutput:(C,le)=>{let Io=this._lookupCliAdapter(h);le==="stdout"&&Io?.suppressOutputLine?.(C)===!0||this.emit("task:output",{traceId:s,timestamp:new Date,agentRef:e,output:C,level:le}),le==="stdout"&&this.emitToolEvents(s,e,h,C,g.id,r?.threadId??"","");},onTaskLog:C=>{this.emitTaskLogEntries(s,e,g.id,r?.threadId??"","",h,C);for(let le of C)this.emit("task:output",{traceId:s,timestamp:new Date,agentRef:e,output:JSON.stringify(le),level:"info"});},onCommand:C=>{U=C;},onUsage:C=>{I=C;},onExitCode:C=>{te=C;},onModel:C=>{S||(S=C);}},N=x?void 0:this._validateFreshProviderInitialInputBudget({message:n,providerOptions:b,contextBudgetManifest:Q,countTokens:se});if(N){B();let C=Date.now()-l;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:C,error:N,model:S,metadata:r?.metadata?{...r.metadata}:void 0}),ge=!0,{ok:!1,data:"",error:N,meta:{agentId:g.id,provider:h,model:v,durationMs:C,taskId:s}}}let D=await K.query(n,b);ye=this._resolveEffectiveCost(I,S,l),B();let kt=Date.now()-l,bn={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",result:D,durationMs:kt,exitCode:te,inputTokens:I?.inputTokens,outputTokens:I?.outputTokens,cachedInputTokens:I?.cachedInputTokens,costUsd:ye,model:S,metadata:Object.keys(bn).length>0?bn:void 0}),ge=!0,{ok:!0,data:D,meta:{agentId:g.id,provider:h,model:v,durationMs:kt,taskId:s}}}catch(b){if(b instanceof exports.ClientToolCallRequiredError){let kt=Qe("thd");return this._pendingThreads.set(kt,{agentRef:g.id,providerStr:h,continuationState:b.continuationState,toolCall:b.toolCall,traceId:s,startMs:l,model:v}),ge=!0,{ok:!0,status:"requires_action",data:"",toolCall:b.toolCall,threadId:kt,meta:{agentId:g.id,provider:h,model:v,durationMs:Date.now()-l,taskId:s}}}ye=this._resolveEffectiveCost(I,S,l),B();let N=Date.now()-l,D={code:"QUERY_FAILED",message:b.message,...b instanceof exports.ProviderError?{providerCode:b.code}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:D,exitCode:te,inputTokens:I?.inputTokens,outputTokens:I?.outputTokens,cachedInputTokens:I?.cachedInputTokens,costUsd:ye,model:S,metadata:r?.metadata?{...r.metadata}:void 0}),ge=!0,{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:h,model:v,durationMs:N,taskId:s}}}finally{ge||this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:Date.now()-l,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:te??-1,inputTokens:I?.inputTokens,outputTokens:I?.outputTokens,cachedInputTokens:I?.cachedInputTokens,costUsd:ye,model:S}),this._activeTasks.delete(s),this._clearCallerIdentityOverride(s,c),Me();}})}finally{this._clearCallerIdentityOverride(s,c);}}async continueQuery(e,n){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=pt(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 i=n.map(s=>({...s,toolName:r.toolCall.toolCallId===s.toolCallId?r.toolCall.toolName:s.toolCallId}));try{let s=await o.continueWithToolResults(r.continuationState,i),a=Date.now()-r.startMs;return this.emit("task:end",{traceId:r.traceId,timestamp:new Date,agentRef:r.agentRef,mode:"query",result:s,durationMs:a}),{ok:!0,status:"complete",data:s,meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:a}}}catch(s){if(s instanceof exports.ClientToolCallRequiredError)return this._pendingThreads.set(e,{...r,continuationState:s.continuationState,toolCall:s.toolCall}),{ok:true,status:"requires_action",data:"",toolCall:s.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:s.message},meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:a}}}}async execute(e,n,r){let o=await this.resolveFileRemoteTarget(e);if(o){let l=await o.target.execute(o.agentRef,n,this._buildFileRemoteOptions(e,r));return {...l,meta:{...l.meta,agentId:e.replace(/^@/,"")}}}let i=Gn.getStore()??Ei(r?.trace),s=r?.taskId??Qe("tsk"),a={parentTaskId:i?.parentTaskId??null,rootTraceId:i?.rootTraceId??s,callerAgentId:i?.callerAgentId??null},d={parentTaskId:s,rootTraceId:i?.rootTraceId??s,callerAgentId:null},c=r?.callerIdentity?this._registerCallerIdentityOverride(s,r.callerIdentity,{agentId:e.replace(/^@/,""),workspaceId:this._workspaceId,workspaceName:this._workspaceName}):void 0;try{return await Gn.run(d,async()=>{let l=Date.now(),f=new Date,g;try{g=Nr(e,Array.from(this._agents.values()));}catch(b){if(b instanceof ct){this.emit("task:start",{traceId:s,timestamp:f,agentRef:e,message:n,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,projectId:r?.projectId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let N=Date.now()-l,D={code:"AGENT_NOT_FOUND",message:b.message};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:D,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:D,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:N,taskId:s}}}throw b}d.callerAgentId=g.id;let m=await this._resolveFreshProvider(g,"execute",r),k=m.baseProviderStr,h=m.effectiveProviderStr,v=m.effectiveModel,_=m.overdrive,w=h!==k?void 0:r?.resumeSessionId,x=this._resolveContextMode(r)==="instruction-only",U,I,te,S=v,q,fe,Q,se,j={},F=!1,B=b=>{F||(F=!0,this.emit("task:start",{traceId:s,timestamp:f,agentRef:e,message:n,mode:"execute",pid:b,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:S,provider:h,codingAgentCommand:U,renderedPrompt:fe,metadata:{...r?.metadata??{},provider:h,..._.active?{overdrive:!0}:{},...q?{provider_session_id:q}:{},...Q?{context_budget:Q}:{},...j.metadata?{local_ai_server:j.metadata}:{}},threadId:r?.threadId,projectId:r?.projectId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));};try{j=this._resolveLocalServerRuntime(h,v);}catch(b){if(!(b instanceof Pe))throw b;B();let N=Date.now()-l,D={code:b.code,message:b.message};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:D,model:S,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:h,model:v,durationMs:N,taskId:s}}}if(j.model&&(v=j.model,m.effectiveModel=v,S=v),x){let b=this._prepareInstructionOnlyResumeWithBudget({message:n,providerResolution:m,resumeSessionId:w});if(Q=b.contextBudget,b.error){B();let N=Date.now()-l,D=b.error;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:D,model:S,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:h,model:v,durationMs:N,taskId:s}}}}let K;try{K=pt(h,this._additionalArgsProvider);}catch(b){B();let N=Date.now()-l,D={code:"PROVIDER_ERROR",message:b.message,...b instanceof exports.ProviderError?{providerCode:b.code}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:D,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:h,model:v,durationMs:N,taskId:s}}}let W;if(x||(W=await this._fetchHistoryMessages(r?.threadId,s,r?.messages,r?.uiProjections)),!x)try{let b=await this._prepareFreshPromptWithBudget({agentRef:e,agent:g,mode:"execute",message:n,options:r,providerResolution:m,historyMessages:W});if(fe=b.renderedPrompt,Q=b.contextBudget,se=b.countTokens,b.error){B();let N=Date.now()-l,D=b.error;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:D,model:S,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:h,model:v,durationMs:N,taskId:s}}}}catch(b){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${b instanceof Error?b.message:String(b)}`);}let H=g.options,ne=ic(H?.execute,h,_),re=_.active?_.mode:ne.modeOptions?.mode,kn=_.effort??r?.effort??ne.modeOptions?.effort,vn=Array.isArray(H?.execute?.tools)?H.execute.tools:void 0,O=this._tools.size>0?this._filterToolsByMode(vn):[],Z=ne.configOptions,ae=g.inline?.max_steps;h.startsWith("api/")&&B();let ge=!1,ye=0,Me=()=>{},Ge=new Promise(b=>{Me=b;});this._activeTasks.set(s,{pid:void 0,done:Ge});try{let b={model:v,effort:kn,mode:re,context:r?.context,...x?{}:{systemPrompt:fe??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`},additionalArgs:Array.isArray(H?.execute)?H.execute:void 0,resumeSessionId:w,tools:O.length>0?O:void 0,maxSteps:ae,providerOptions:ne.providerOptions,configOptions:Z,timeoutMs:this._resolveTimeout("execute",this._lookupCliAdapter(h)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(h)),cwd:this._resolveEffectiveCwd(g,r),env:{...j.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:s,CREWX_PARENT_TASK_ID:s,CREWX_TASK_ID:s,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:h,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(s,f)},onPid:C=>{let le=this._activeTasks.get(s);le&&(le.pid=C),B(C);},onProviderSessionId:C=>{q=C;},onOutput:(C,le)=>{let Io=this._lookupCliAdapter(h);le==="stdout"&&Io?.suppressOutputLine?.(C)===!0||this.emit("task:output",{traceId:s,timestamp:new Date,agentRef:e,output:C,level:le}),le==="stdout"&&this.emitToolEvents(s,e,h,C,g.id,r?.threadId??"","");},onTaskLog:C=>{this.emitTaskLogEntries(s,e,g.id,r?.threadId??"","",h,C);for(let le of C)this.emit("task:output",{traceId:s,timestamp:new Date,agentRef:e,output:JSON.stringify(le),level:"info"});},onCommand:C=>{U=C;},onUsage:C=>{I=C;},onExitCode:C=>{te=C;},onModel:C=>{S||(S=C);}},N=x?void 0:this._validateFreshProviderInitialInputBudget({message:n,providerOptions:b,contextBudgetManifest:Q,countTokens:se});if(N){B();let C=Date.now()-l;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:C,error:N,model:S,metadata:r?.metadata?{...r.metadata}:void 0}),ge=!0,{ok:!1,data:"",error:N,meta:{agentId:g.id,provider:h,model:v,durationMs:C,taskId:s}}}let D=await K.execute(n,b);ye=this._resolveEffectiveCost(I,S,l),B();let kt=Date.now()-l,bn={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",result:D,durationMs:kt,exitCode:te,inputTokens:I?.inputTokens,outputTokens:I?.outputTokens,cachedInputTokens:I?.cachedInputTokens,costUsd:ye,model:S,metadata:Object.keys(bn).length>0?bn:void 0}),ge=!0,{ok:!0,data:D,meta:{agentId:g.id,provider:h,model:v,durationMs:kt,taskId:s}}}catch(b){ye=this._resolveEffectiveCost(I,S,l),B();let N=Date.now()-l,D={code:"EXECUTE_FAILED",message:b.message,...b instanceof exports.ProviderError?{providerCode:b.code}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:D,exitCode:te,inputTokens:I?.inputTokens,outputTokens:I?.outputTokens,cachedInputTokens:I?.cachedInputTokens,costUsd:ye,model:S,metadata:r?.metadata?{...r.metadata}:void 0}),ge=!0,{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:h,model:v,durationMs:N,taskId:s}}}finally{ge||this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:Date.now()-l,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:te??-1,inputTokens:I?.inputTokens,outputTokens:I?.outputTokens,cachedInputTokens:I?.cachedInputTokens,costUsd:ye,model:S}),this._activeTasks.delete(s),this._clearCallerIdentityOverride(s,c),Me();}})}finally{this._clearCallerIdentityOverride(s,c);}}};function sc(t,e){let n=ps(t)?t:void 0,r=ps(e)?e:void 0;if(!(!n&&!r))return {...n??{},...r??{}}}function ps(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Bm(t,e){let n=Array.isArray(t)?t:void 0,r=Array.isArray(e)?e:void 0;if(!n&&!r)return;let o=a=>{if(!ps(a))return;let d=a.id;if(typeof d=="string")return `id:${d}`;let c=a.name;if(typeof c=="string")return `name:${c}`},i=new Set;for(let a of r??[]){let d=o(a);d&&i.add(d);}let s=[];for(let a of n??[]){let d=o(a);d&&i.has(d)||s.push(a);}for(let a of r??[])s.push(a);return s}function Fm(t){let e=Array.isArray(t.provider)?t.provider:[t.provider],n=t.options,r=[...e];for(let o of ["query","execute"]){let i=li(n,o);i.provider&&r.push(i.provider);let s=n&&typeof n=="object"&&!Array.isArray(n)?n[o]:void 0,a=s&&typeof s=="object"&&!Array.isArray(s)?Vr(s.overdrive):void 0;a?.provider&&r.push(a.provider);}return r}async function ac(t,e,n){let r=t.flatMap(Fm);if(r.some(i=>i.startsWith("api/"))){let{registerApiProviders:i}=await Promise.resolve().then(()=>(Yi(),zd));i(n?.api);}await Hm(r,e),Wm(r,e),qm(r);}function qm(t){if(!t.some(r=>r.startsWith("acp/")))return;let{registerAcpProviders:n}=(os(),Ps(Xd));n();}async function Hm(t,e){if(!t.some(s=>s.startsWith("remote/")))return;let r=e.providers;if(!Array.isArray(r))return;let{createRemoteProviderFactory:o}=await Promise.resolve().then(()=>(as(),Qd)),i=new Map;for(let s of r)s.type==="remote"&&typeof s.id=="string"&&i.set(s.id,s);i.size>0&&ut("remote",o(i,pt));}function Wm(t,e){if(!t.some(s=>s.startsWith("plugin/")))return;let r=e.providers;if(!Array.isArray(r))return;let{createPluginProviderFactory:o}=(ds(),Ps(nc)),i=new Map;for(let s of r)s.type==="plugin"&&typeof s.id=="string"&&i.set(s.id,s);i.size>0&&ut("plugin",o(i));}u();u();var fs=class{detach(e){}};u();var zm="crewx:fs:",gs=class{prefix;store;constructor(e){this.prefix=e?.prefix??zm,this.store=e?.storage??new Map;}async readFile(e){let n=this.toKey(e),r=this.store.get(n);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 n=e.map(s=>s.replace(/\\/g,"/")).join("/").replace(/\/+/g,"/"),r=n.split("/"),o=[];for(let s of r)s==="."||s===""||(s===".."?o.pop():o.push(s));let i=o.join("/");return n.startsWith("/")?`/${i}`:i}isAbsolute(e){return e.startsWith("/")}setItem(e,n){this.store.set(this.toKey(e),n);}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 n=e.replace(/\\/g,"/").replace(/\/$/,""),r=this.toKey(n+"/"),o=[];for(let i of this.store.keys())if(i.startsWith(r)){let a=i.slice(r.length).split("/")[0];a&&!o.includes(a)&&o.push(a);}return o}toKey(e){return `${this.prefix}${e.replace(/\\/g,"/")}`}};u();var mn="default",hn="archive",dc="wi-default-flow",Gm="wi-plan-flow",Vm="wi-default-flow.yaml",Km="wi-plan-flow.yaml",Ro=/^[a-zA-Z0-9_-]{1,64}$/;function cc(t){return t===mn||t===hn}function Jm(t){let e={id:mn,name:"Default",workflowId:dc,system:true,readOnly:false},n={id:hn,name:"Archive",workflowId:"",system:true,readOnly:true},r=t?.settings?.wi?.boards;if(!Array.isArray(r)||r.length===0)return [e,n];let o=new Set,i=[];for(let s of r){if(!s||typeof s!="object")continue;let a=s,d=a.id,c=a.name,l=a.workflow_id;if(typeof d!="string"||d.length===0||typeof c!="string"||c.length===0||typeof l!="string"||l.length===0||cc(d)||!Ro.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;i.push({id:d,name:c,workflowId:l,...f!==void 0?{description:f}:{},...g!==void 0?{goalId:g}:{},system:false,readOnly:false});}return [e,...i,n]}u();var oe=class extends Error{constructor(e){super(e),this.name="WiCreateError";}},Ym=300*1e3,Qm=300*1e3,Zm=1e4,eh=50;function th(t){return new Promise(e=>setTimeout(e,t))}function nh(t){let e=t.getFullYear(),n=String(t.getMonth()+1).padStart(2,"0"),r=String(t.getDate()).padStart(2,"0");return {compact:`${e}${n}${r}`,iso:`${e}-${n}-${r}`}}function rh(t){return t.normalize("NFKD").replace(/[^\x00-\x7F]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toUpperCase().slice(0,60)}function oh(t,e){let n=t.replace(/\\/g,"/").toLowerCase(),r=e.replace(/\\/g,"/").toLowerCase();if(r!==n&&!r.startsWith(n+"/"))throw new oe("Path is outside wi directory")}function lc(t){let e=typeof t=="string"?t.trim():"";if(!e)throw new oe("title is required");if(e.length>200)throw new oe("title must be 200 characters or fewer");return e}function uc(t){let e=typeof t=="string"?t.trim():"";if(!e)return "manual";if(e.length>128)throw new oe("source must be 128 characters or fewer");if(/[\r\n]/.test(e))throw new oe("source must be a single line");return e}function pc(t){return (typeof t=="string"?t.trim().replace(/^@+/,""):"")||void 0}function fc(t){if(t==null)return [];if(!Array.isArray(t))throw new oe("depends_on must be an array");return t.map(e=>String(e).trim()).filter(Boolean)}function gc(t,e){let n=typeof t=="string"?t.trim():"";if(!n){if(e?.required)throw new oe("board is required");return}if(!Ro.test(n))throw new oe("board must match ^[a-zA-Z0-9_-]{1,64}$");if(n===hn)throw new oe(`board cannot be '${hn}'`);return n}function yn(t){return JSON.stringify(t)}function ih(t,e){return e.length===0?[`${t}: []`]:[`${t}:`,...e.map(n=>` - ${yn(n)}`)]}async function sh(t){let e=await fd.promises.stat(t).catch(()=>null);e&&Date.now()-e.mtimeMs>Qm&&await fd.promises.rm(t,{recursive:true,force:true}).catch(()=>{});}async function ah(t,e){let n=Y.join(t,".wi-create.lock"),r=Date.now()+Zm;for(;Date.now()<r;)try{await fd.promises.mkdir(n);try{return await e()}finally{await fd.promises.rm(n,{recursive:!0,force:!0}).catch(()=>{});}}catch(o){if(o.code!=="EEXIST")throw o;await sh(n),await th(eh);}throw new oe("WI create lock timeout: docs/wi/.wi-create.lock")}async function mc(t){let e=[],n=await fd.promises.readdir(t,{withFileTypes:true}).catch(r=>{if(r.code==="ENOENT")return [];throw r});for(let r of n){let o=Y.join(t,r.name);r.isDirectory()?e.push(...await mc(o)):r.isFile()&&r.name.endsWith(".md")&&e.push(r.name);}return e}async function dh(t){let e=await fd.promises.readdir(t).catch(r=>{if(r.code==="ENOENT")return [];throw r}),n=await mc(Y.join(t,"archive"));return [...e,...n]}function ch(t,e){return t.reduce((n,r)=>{if(!r.startsWith(e))return n;let o=r.slice(e.length).match(/^(\d+)/);return o?Math.max(n,parseInt(o[1],10)):n},0)+1}function lh(t,e){return t.some(n=>n===`${e}.md`||n.startsWith(`${e}-`))}async function uh(t,e){let n=Y.join(t,`.wi-${e}.lock`);try{return await fd.promises.writeFile(n,"",{flag:"wx"}),{claimed:!0,lockPath:n}}catch(r){if(r.code!=="EEXIST")throw r;return await fd.promises.stat(n).then(i=>Date.now()-i.mtimeMs>Ym).catch(()=>false)&&await fd.promises.unlink(n).then(()=>true).catch(()=>false)?(await fd.promises.writeFile(n,"",{flag:"wx"}),{claimed:true,lockPath:n}):{claimed:false,lockPath:n}}}function ph(t){return {title:lc(t.title),assignee:pc(t.assignee),body:(t.body??"").trim(),board:gc(t.board),source:uc(t.source),depends_on:fc(t.depends_on)}}function fh(t,e,n){if(t==null)return;let r=typeof t=="string"?t.trim():"";if(!r)throw new oe(`items[${e}].key must be a non-empty string when provided`);if(n.has(r))throw new oe(`items[${e}].key "${r}" is duplicated`);return n.add(r),r}function gh(t){let e=gc(t.board,{required:true}),n=uc(t.source);if(!Array.isArray(t.items)||t.items.length===0)throw new oe("items must contain at least one WI");let r=new Set;return t.items.map((o,i)=>{if(!o||typeof o!="object")throw new oe(`items[${i}] must be an object`);if(typeof o.body!="string")throw new oe(`items[${i}].body is required`);return {key:fh(o.key,i,r),title:lc(o.title),assignee:pc(o.assignee),body:o.body.trim(),board:e,source:n,depends_on:fc(o.depends_on)}})}function mh(t,e){return t.map(n=>e.get(n)??n)}function hh(t,e,n){let r=!!t.board&&t.board!==mn,o={wi_id:e,title:t.title,date:n,status:"draft",priority:"normal",source:t.source};return t.assignee&&(o.assignee=t.assignee),r&&(o.board=t.board),o.depends_on=t.depends_on,{raw:`---
|
|
399
|
-
${[`wi_id: ${e}`,`title: ${yn(t.title)}`,`date: ${yn(n)}`,"status: draft",...t.assignee?[`assignee: ${yn(t.assignee)}`]:[],"priority: normal",`source: ${yn(t.source)}`,...r?[`board: ${yn(t.board)}`]:[],...
|
|
421
|
+
`);let c=lr(n,e.reservation.instanceId,e.reservation.requestId);if(!c)throw new b("EXECUTION_FAILED","External action settlement failed");return dr(c)})}catch(n){throw n instanceof Re||n instanceof b?n:go(n)?new Re(n):new b("EXECUTION_FAILED","UI external action settlement failed")}}};function Md(){return `uicr_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,12)}`}function zg(t){return typeof t=="string"&&/^[A-Z][A-Z0-9_]{0,63}$/.test(t)?t:"EXECUTION_FAILED"}var Gg=new Set(["definition","workspaceId","threadId","anchorTaskId","domainRef","state"]),Vg=new Set(["definition","workspaceId","threadId","domainRef","state"]),Kg=new Set(["instanceId","actionId","expectedRevision","requestId","input"]),$d=new Set(["source","workspaceId","actor"]),Ud=new Set(["source","workspaceId","threadId","actor"]),Jg=$d,Yi=4;function Bd(t,e){return new yo(t,e)}function Fd(t){return new yo(t.workspaceId,t,void 0,true)}var yo=class{store;workspaceId;localActor;policy;serverPolicy;serverMode;definitions=new Map;handlers=new Map;clock;testHooks;constructor(e,n,r,o=false){if(this.serverMode=o,!e)throw new b("INPUT_INVALID","UI runtime workspace is invalid");if(o){let i=n;if(!i.dbPath||!i.grantPolicy)throw new b("INPUT_INVALID","Authenticated UI runtime options are invalid");this.serverPolicy=i.grantPolicy;}else {let i=n;if(i.localActor.kind!=="local"||!i.localActor.id)throw new b("INPUT_INVALID","Local UI runtime identity is invalid");this.localActor=i.localActor,this.policy=i.localGrantPolicy;}this.workspaceId=e,this.clock=n.clock??(()=>Date.now()),this.testHooks=r;for(let i of n.definitions??[]){Cd(i);let s=Vi(i);if(this.definitions.has(s))throw new b("DEFINITION_UNSUPPORTED","Duplicate UI definition");this.definitions.set(s,i);}for(let i of n.handlers??[]){if(!i.definitionId||!i.actionId||i.version<1)throw new b("INPUT_INVALID","UI handler registration is invalid");let s=jd(i.definitionId,i.version,i.actionId);if(this.handlers.has(s))throw new b("INPUT_INVALID","Duplicate UI handler registration");this.handlers.set(s,i);}this.store=Yg(n.dbPath,r);}close(){this.store.close();}async createInstance(e,n){if(Xi(e,Gg,Vg),this.serverMode){if(!n)throw new b("UNAUTHENTICATED","Authenticated UI context is required");if(this.validateServerContext(n),e.workspaceId!==n.workspaceId||e.threadId!==n.threadId)throw new b("WORKSPACE_MISMATCH","UI instance scope does not match authenticated context")}else if(e.workspaceId!==this.workspaceId)throw new b("WORKSPACE_MISMATCH","Workspace does not match this runtime");if(!e.threadId||e.threadId.length>256||e.anchorTaskId!==void 0&&e.anchorTaskId.length>256)throw new b("INPUT_INVALID","UI instance scope is invalid");let r=this.requireDefinition(e.definition),o=de(e.domainRef),i=de(e.state),s=this.resolveInstanceGrants(r,n),a=this.now();return this.store.create({id:Xg(),definitionId:r.id,definitionVersion:r.version,definitionHash:r.hash,workspaceId:e.workspaceId,threadId:e.threadId,anchorTaskId:e.anchorTaskId??null,domainRef:o,state:i,grants:s,now:a})}async dispatchAction(e,n){Xi(e,Kg),Xi(n,this.serverMode?Ud:$d,this.serverMode?Ud:Jg),this.validateContext(n);let r={...e,input:this.validateEnvelope(e)},o=this.store.get(r.instanceId);if(!o)throw new b("INSTANCE_NOT_FOUND","UI instance was not found");if(o.workspaceId!==this.workspaceId||n.workspaceId!==o.workspaceId||this.serverMode&&o.threadId!==n.threadId)throw new b("WORKSPACE_MISMATCH","Workspace does not match the UI instance");if(o.status!=="active")throw new b("INSTANCE_NOT_ACTIONABLE","UI instance is not actionable");let i=this.requireDefinition(o.definition),s=i.actions[r.actionId];if(!s)throw new b("ACTION_UNAVAILABLE","UI action is not declared");if(this.validateActionDeclaration(i,r.actionId,s.inputKeys,r.input),this.resolveEffectiveCapabilities(i,r.actionId,s.capabilities,o.grantedCapabilities,n).length===0)throw new b("CAPABILITY_DENIED","UI action capability is not granted");let d=this.handlers.get(jd(i.id,i.version,r.actionId));if(!d)throw new b("HANDLER_NOT_FOUND","UI action handler is not registered");let c=this.store.getReceipt(r.instanceId,r.requestId);if(c)return c;if(o.revision!==r.expectedRevision)throw new b("REVISION_CONFLICT","UI instance revision is stale",o.revision);await this.testHooks?.beforeReservation?.();let l={instanceId:r.instanceId,requestId:r.requestId,actionId:r.actionId,actor:n.actor,source:n.source,expectedRevision:r.expectedRevision,input:r.input,now:this.now()};return d.kind==="state"?this.dispatchStateWithRetry(l,d):this.dispatchExternalWithRetry(l,d)}async getInstance(e,n){if(!this.serverMode)throw new b("UNAUTHENTICATED","Authenticated UI context is not available in local runtime");if(this.validateServerContext(n),!e)throw new b("INPUT_INVALID","UI instance lookup identity is invalid");let r=this.store.get(e);return !r||r.workspaceId!==n.workspaceId||r.threadId!==n.threadId?null:r}async getReceipt(e,n,r){if(!e||!n)throw new b("INPUT_INVALID","Receipt lookup identity is invalid");let o=this.store.get(e);if(this.serverMode){if(!r)throw new b("UNAUTHENTICATED","Authenticated UI context is required");if(this.validateServerContext(r),!o||o.workspaceId!==r.workspaceId||o.threadId!==r.threadId)return null}else if(!o||o.workspaceId!==this.workspaceId)return null;return this.store.getReceipt(e,n)}async dispatchStateWithRetry(e,n){for(let o=0;o<Yi;o+=1)try{return this.store.runStateOnly(e,n.handle)}catch(i){if(i instanceof Ce){let a=this.store.getReceipt(e.instanceId,e.requestId);if(a)return a;throw new b("REVISION_CONFLICT","UI instance revision is stale",i.currentRevision)}if(!(i instanceof Re))throw i;let s=this.store.getReceipt(e.instanceId,e.requestId);if(s)return s;await Qi(o);}let r=this.store.getReceipt(e.instanceId,e.requestId);if(r)return r;throw new b("ACTION_IN_FLIGHT","UI action is still being committed")}async dispatchExternalWithRetry(e,n){let r;for(let l=0;l<Yi;l+=1)try{r=this.store.reserveExternal(e);break}catch(f){if(f instanceof Ce){let m=this.store.getReceipt(e.instanceId,e.requestId);if(m)return m;throw new b("REVISION_CONFLICT","UI instance revision is stale",f.currentRevision)}if(!(f instanceof Re))throw f;let g=this.store.getReceipt(e.instanceId,e.requestId);if(g)return g;await Qi(l);}if(!r){let l=this.store.getReceipt(e.instanceId,e.requestId);if(l)return l;throw new b("ACTION_IN_FLIGHT","UI action is still being committed")}let o;try{o=await n.handle({instance:r.instance,actor:e.actor,source:e.source,input:e.input,requestId:e.requestId});}catch{o={outcome:"failed",errorCode:"EXECUTION_FAILED"};}let i="outcome"in o?o.outcome:"succeeded",s="errorCode"in o?Qg(o.errorCode):null,a=r.instance.state,d=null;try{o.state&&(a=de(o.state)),o.result&&(d=de(o.result));}catch{a=r.instance.state,d=null;}for(let l=0;l<Yi;l+=1)try{return this.store.settleExternal({reservation:e,reservedRevision:r.reservedRevision,outcome:i,state:a,result:d,errorCode:s,now:this.now()})}catch(f){if(!(f instanceof Re))throw f;await Qi(l);}let c=this.store.getReceipt(e.instanceId,e.requestId);if(c)return c;throw new b("ACTION_IN_FLIGHT","UI action settlement is still being committed")}resolveDefinition(e){let n=this.definitions.get(Vi(e));return !n||n.hash!==e.hash||sr(n)!==n.hash?null:n}requireDefinition(e){let n=this.resolveDefinition(e);if(!n)throw new b("DEFINITION_UNSUPPORTED","Pinned UI definition is unavailable");return n}resolveInstanceGrants(e,n){if(this.serverMode){if(!n||!this.serverPolicy)throw new b("UNAUTHENTICATED","Authenticated grant policy is unavailable");try{let r=this.serverPolicy.resolveInstanceGrants({definition:e,workspaceId:n.workspaceId,actor:n.actor});if(!Array.isArray(r)||r.some(o=>typeof o!="string"||!o||o==="*"||o==="all"||/[/*]/.test(o)))throw new Error("invalid grant");return [...new Set(r)]}catch{throw new b("CAPABILITY_DENIED","Authenticated capability grant was denied")}}if(!this.policy||!this.localActor)return [];try{let r=this.policy.resolveInstanceGrants({definition:e,workspaceId:this.workspaceId,actor:this.localActor});if(!Array.isArray(r)||r.some(o=>typeof o!="string"||!o||o==="*"||o==="all"||/[/*]/.test(o)))throw new Error("invalid grant");return [...new Set(r)]}catch{throw new b("INPUT_INVALID","Local capability policy returned an invalid grant")}}resolveEffectiveCapabilities(e,n,r,o,i){if(this.policy)try{let a=this.policy.resolveActionCapabilities({definition:e,actionId:n});if(!Zg(a,r))throw new Error("definition capability mismatch")}catch{throw new b("DEFINITION_UNSUPPORTED","UI action capability declaration is unavailable")}let s;if(this.serverMode&&this.serverPolicy?.resolveDispatchCapabilities)try{if(s=this.serverPolicy.resolveDispatchCapabilities({definition:e,actionId:n,actor:i.actor,source:i.source}),!Array.isArray(s)||s.some(a=>typeof a!="string"||!a||a==="*"||a==="all"||/[/*]/.test(a)))throw new Error("invalid dispatch grant")}catch{throw new b("CAPABILITY_DENIED","Authenticated dispatch capability was denied")}return [...uo(r,o,s)]}validateContext(e){if(this.serverMode){this.validateServerContext(e);return}if(!this.localActor||e.source!=="cli"||e.workspaceId!==this.workspaceId||e.actor.kind!=="local"||e.actor.id!==this.localActor.id)throw new b("UNAUTHENTICATED","CLI local execution context is invalid")}validateServerContext(e){if(e.source!=="system"&&e.source!=="ui_host")throw new b("UNAUTHENTICATED","Authenticated UI source is invalid");if(e.workspaceId!==this.workspaceId||!e.threadId||e.actor.kind!=="authenticated"||!e.actor.id)throw new b("UNAUTHENTICATED","Authenticated UI context is invalid")}validateEnvelope(e){if(!e.instanceId||e.instanceId.length>128||!e.actionId||e.actionId.length>128||!e.requestId||Qn(e.requestId)>128||!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)throw new b("INPUT_INVALID","UI action envelope is invalid");let n=de(e.input),r=we(n);if(Qn(r)>64*1024)throw new b("INPUT_INVALID","UI action input is too large");return n}validateActionDeclaration(e,n,r,o){if(r&&Object.keys(o).some(i=>!r.includes(i)))throw new b("INPUT_INVALID","UI action input is invalid")}now(){let e=this.clock();if(!Number.isFinite(e))throw new b("EXECUTION_FAILED","UI runtime clock is invalid");return Math.max(0,Math.floor(e))}};function Yg(t,e){return new ho(t,{injectDatabaseError:e?.injectDatabaseError,bumpRevisionBeforeCas:e?.bumpRevisionBeforeCas})}function Xi(t,e,n=e){if(t===null||typeof t!="object")throw new b("INPUT_INVALID","UI contract input is invalid");for(let r of Object.keys(t))if(!e.has(r))throw new b("INPUT_INVALID","Unknown UI contract field");for(let r of n)if(!Object.prototype.hasOwnProperty.call(t,r))throw new b("INPUT_INVALID","Missing UI contract field")}function jd(t,e,n){return `${t}\0${e}\0${n}`}function Xg(){return `uic_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,12)}`}function Qg(t){return typeof t=="string"&&/^[A-Z][A-Z0-9_]{0,63}$/.test(t)?t:"EXECUTION_FAILED"}function Zg(t,e){return t.length===e.length&&t.every(n=>e.includes(n))}async function Qi(t){await new Promise(e=>setTimeout(e,Math.min(8,1<<t)));}Ae();u();u();function fn(t,e={}){if(typeof t!="string")return ee("invalid_input");let n=t.trim();if(n.length===0)return ee("invalid_input");if(n.length>2048)return ee("url_too_long");let r=/^([a-z][a-z\d+.-]*):\/\//i.exec(n);if(!r||r[1].toLowerCase()!=="http"&&r[1].toLowerCase()!=="https")return ee("invalid_scheme");if(n.includes("?"))return ee("query_not_allowed");if(n.includes("#"))return ee("fragment_not_allowed");let o=em(n,r[0].length);if(!o.ok)return o;if(o.value.host.includes("%"))return ee(o.value.bracketed?"zone_id":"host_not_ip_literal");let i=tm(o.value.port);if(i)return ee(i);let s;try{s=new URL(n);}catch{return ee("invalid_url")}if(s.protocol!=="http:"&&s.protocol!=="https:")return ee("invalid_scheme");if(s.username.length>0||s.password.length>0)return ee("userinfo_not_allowed");let a=o.value.host,d;if(a.toLowerCase()==="localhost"){if(d="loopback",!e.allowLoopback)return ee("loopback_not_allowed");s.hostname="127.0.0.1";}else {let c=Wd(a);if("code"in c)return ee(c.code);if(d=c.hostClass,d==="loopback"&&!e.allowLoopback)return ee("loopback_not_allowed")}return {ok:true,normalizedBaseUrl:s.toString().replace(/\/+$/,""),hostClass:d}}function Hd(t,e={}){if(typeof t!="string")return false;let n=Wd(t);return "code"in n?false:n.hostClass!=="loopback"||e.allowLoopback===true}function em(t,e){let n=e,r=t.slice(n),o=r.search(/[/?#]/),i=r.slice(0,o===-1?r.length:o);if(i.length===0)return ee("invalid_url");if(i.includes("@"))return ee("userinfo_not_allowed");if(i.startsWith("[")){let d=i.indexOf("]");if(d===-1)return ee("invalid_url");let c=i.slice(1,d),l=i.slice(d+1);return c.length===0||l.length>0&&!l.startsWith(":")?ee("invalid_url"):{ok:true,value:{host:c,port:l.length>0?l.slice(1):void 0,bracketed:true}}}if(i.includes("[")||i.includes("]"))return ee("invalid_url");let s=i.indexOf(":");if(s!==-1&&i.indexOf(":",s+1)!==-1)return ee("host_not_ip_literal");let a=s===-1?i:i.slice(0,s);return a.length===0?ee("invalid_url"):{ok:true,value:{host:a,port:s===-1?void 0:i.slice(s+1),bracketed:false}}}function tm(t){if(t===void 0||t==="")return;if(!/^\d+$/.test(t))return "invalid_port";let e=Number(t);if(!Number.isSafeInteger(e))return "invalid_port";if(!(e===80||e===443))return e>=1024&&e<=65535?void 0:"invalid_port"}function Wd(t){let e=zd(t);if(e)return nm(e);if(t.includes("%"))return {code:"zone_id"};let n=om(t);return n?im(n.words)?{code:"ipv4_mapped_ipv6"}:rm(n.words):{code:"host_not_ip_literal"}}function nm(t){let[e,n,r,o]=t,i=((e*256+n)*256+r)*256+o;return i===0?{code:"unspecified"}:i===2852039166||i===1684301e3?{code:"metadata_address"}:e===127?{hostClass:"loopback"}:e===10||e===172&&n>=16&&n<=31||e===192&&n===168?{hostClass:"private-ipv4"}:e===100&&n>=64&&n<=127?{hostClass:"cgnat"}:e===169&&n===254?{code:"link_local"}:e>=224?{code:"multicast"}:{code:"ip_not_allowed"}}function rm(t){return sm(t)?{code:"unspecified"}:am(t)?{hostClass:"loopback"}:t[0]===64768&&t[1]===3778&&t[2]===0&&t[3]===0&&t[4]===0&&t[5]===0&&t[6]===0&&t[7]===596?{code:"metadata_address"}:(t[0]&65472)===65152?{code:"link_local"}:(t[0]&65280)===65280?{code:"multicast"}:(t[0]&65280)===64768?{hostClass:"unique-local-ipv6"}:{code:"ip_not_allowed"}}function zd(t){let e=t.split(".");if(e.length!==4)return;let n=[];for(let r of e){if(!/^\d{1,3}$/.test(r)||r.length>1&&r.startsWith("0"))return;let o=Number(r);if(o>255)return;n.push(o);}return n}function om(t){let e=t.indexOf("::");if(e!==-1&&t.indexOf("::",e+2)!==-1)return;let n=e!==-1,r=n?t.slice(0,e):t,o=n?t.slice(e+2):"",i=qd(r),s=n?qd(o):{words:[]};if(!i||!s)return;let a=i.words.length+s.words.length;if(n?a>=8:a!==8)return;let d=n?8-a:0;return {words:[...i.words,...Array.from({length:d},()=>0),...s.words]}}function qd(t){if(t==="")return {words:[]};let e=t.split(":"),n=[];for(let[r,o]of e.entries()){if(o.includes(".")){if(r!==e.length-1)return;let i=zd(o);if(!i)return;n.push(i[0]<<8|i[1],i[2]<<8|i[3]);continue}if(!/^[0-9a-f]{1,4}$/i.test(o))return;n.push(Number.parseInt(o,16));}return {words:n}}function im(t){return t.length===8&&t[0]===0&&t[1]===0&&t[2]===0&&t[3]===0&&t[4]===0&&t[5]===65535}function sm(t){return t.every(e=>e===0)}function am(t){return t.slice(0,7).every(e=>e===0)&&t[7]===1}function ee(t){return {ok:false,code:t}}u();var dm="@ai-sdk/openai-compatible",cm=/^CREWX_LOCAL_AI_[A-Z0-9_]+$/,lm=64,um=100,pm=200,fm=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,at=class extends Error{constructor(n){super(mm(n));this.code=n;Object.setPrototypeOf(this,new.target.prototype);}code;name="LocalServerOpenCodeOverlayError"};function _o(t){let e=t.definition,n=e.defaultModel;if(typeof n!="string"||n.trim().length===0)throw new at("missing_default_model");if(n.length>pm)throw new at("invalid_default_model");let r=e.label;if(typeof r!="string"||r.trim().length===0||r.length>um)throw new at("invalid_label");let i=`crewx-${gm(e.id)}`,s=fn(e.baseUrl,{allowLoopback:true});if(!s.ok)throw new at("invalid_base_url");let a={baseURL:s.normalizedBaseUrl},d=e.auth?.apiKeyEnv;if(d!==void 0){if(typeof d!="string"||d.length>lm||!cm.test(d))throw new at("invalid_api_key_env");a.apiKey=`{env:${d}}`;}let c={provider:{[i]:{npm:dm,name:r,options:a,models:{[n]:{name:n}}}}};return {env:{OPENCODE_CONFIG_CONTENT:JSON.stringify(c,null,2)},model:`${i}/${n}`,providerId:i}}function gm(t){let e=typeof t=="string"?t.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,""):"";if(!fm.test(e))throw new at("invalid_provider_id");return e}function mm(t){switch(t){case "missing_default_model":return "A default model is required for the local server overlay.";case "invalid_default_model":return "The local server default model is invalid.";case "invalid_label":return "The local server label is invalid.";case "invalid_provider_id":return "The local server provider id is invalid.";case "invalid_api_key_env":return "The local server API key environment variable name is invalid.";case "invalid_base_url":return "The local server base URL is invalid."}}var hm=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,Vd="LOCAL_AI_SERVER_CONFIG_INVALID",Pe=class extends Error{name="LocalServerRuntimeError";code=Vd;constructor(){super("Local AI server configuration is invalid."),Object.setPrototypeOf(this,new.target.prototype);}};function wo(t,e){return t==="cli/opencode"&&!Kd(e)}function es(t){if(!wo(t.effectiveProviderStr,t.effectiveModel))return {};if(!t.globalSettings)return {};let e;try{e=t.globalSettings.read();}catch{throw new Pe}if(!Zi(e))throw new Pe;let n=e.ai_server;if(n===void 0)return {};if(!Zi(n)||n.version!==1)throw new Pe;let r=n.definition;if(!Zi(r))throw new Pe;let o=fn(r.baseUrl,{allowLoopback:true}),i=o.ok?o.normalizedBaseUrl:void 0;if(i===void 0||!ym(r.id)||!Gd(r.label,100)||!Gd(r.defaultModel,200))throw new Pe;let s;try{s=_o({...n,definition:{...r,baseUrl:i}});}catch{throw new Pe}if(!_m(s))throw new Pe;return {model:s.model,env:s.env,metadata:{providerId:s.providerId,model:s.model,source:"global_settings"}}}function Kd(t){return typeof t=="string"&&t.trim().length>0}function ym(t){return typeof t=="string"&&t===t.trim()&&hm.test(t)}function Gd(t,e){return typeof t=="string"&&t.trim().length>0&&t.length<=e}function _m(t){return Kd(t.model)&&typeof t.providerId=="string"&&t.providerId.length>0&&typeof t.env?.OPENCODE_CONFIG_CONTENT=="string"&&t.env.OPENCODE_CONFIG_CONTENT.length>0}function Zi(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function uc(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)?t:void 0}function Wm(t){return t.slice(t.lastIndexOf("/")+1)}var zm=new Set(["tools","effort","mode","provider","model","profiles","overdrive"]);function Gm(t){if(!t)return;let n=Object.entries(t).filter(([,r])=>r!=null&&typeof r!="object"&&typeof r!="function").filter(([r])=>!zm.has(r));if(n.length!==0)return Object.fromEntries(n.map(([r,o])=>[r,String(o)]))}function pc(t,e,n){let r=uc(t);if(!r)return {};let o=Wm(e),i=!n.active&&o==="grok"?Fn(r):r,s=n.active?n.providerOptions:uc(i[o]);return {modeOptions:i,providerOptions:s,configOptions:Gm(i)}}function Vm(t){return t?t.settings?.template?.exec:void 0}function Km(){try{let t=new Uint8Array(8);return globalThis.crypto.getRandomValues(t),Array.from(t,e=>e.toString(16).padStart(2,"0")).join("")}catch{let{randomBytes:t}=_e("crypto");return t(8).toString("hex")}}var hs=class t extends Kn{_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;_globalSettings;_callerIdentityOverrides=new Map;constructor(e,n={},r,o,i){super(),this._agents=new Map(e.map(d=>[d.id,d])),this._config=r,this._projectRoot=i??(typeof process<"u"?process.cwd():"/");let s=i??(typeof process<"u"?process.env.CREWX_WORKSPACE??process.cwd():"/");this._workspaceId=lo(s),this._workspaceName=X.basename(s);let a=Vm(r);this._templateEngine=new Hn({execPolicy:n.execPolicy??a}),this._documentLoader=o??new Vt,this._layoutLoader=new Wn({templatesPath:tn()}),this._layoutRenderer=new Vn,this._remoteFactory=n.remoteFactory,this._additionalArgsProvider=n.additionalArgsProvider,this._globalSettings=n.globalSettings;}async resolveFileRemoteTarget(e){let n=this.getAgent(e),r=Array.isArray(n?.provider)?n?.provider[0]:n?.provider;if(!r?.startsWith("remote/"))return null;let o=r.slice(7),i=this.getRemoteProviderConfig(o);if(!i?.location?.startsWith("file://"))return null;let s=X.resolve(i.location.replace("file://","")),a=i.external_agent_id??e.replace(/^@/,""),d=this._remoteTargets.get(s);d||(d=(this._remoteFactory??(m=>t.loadYaml(m)))(s),this._remoteTargets.set(s,d),d.catch(()=>this._remoteTargets.delete(s)));let c=await d,l=c.getAgent("@"+a),f=Array.isArray(l?.provider)?l?.provider[0]:l?.provider;if(f?.startsWith("remote/"))throw new Error(`Chained remotes not allowed: "${o}" \u2192 "${f}"`);return {target:c,agentRef:"@"+a}}static async loadBuiltInConfig(e){let{yamlPath:n,dir:r}=Yo(),o;try{o=kd.readFileSync(n,"utf-8");}catch(s){throw new Error(`[@crewx/sdk] Cannot read built-in config: ${n}
|
|
422
|
+
${s.message}`)}let i=Dr(o);if(i.documents&&typeof i.documents=="object"){let s={};for(let[a,d]of Object.entries(i.documents))if(d&&typeof d=="object"){let c=d;typeof c.path=="string"&&!X.isAbsolute(c.path)?s[a]={...c,path:X.resolve(r,c.path)}:s[a]=c;}else s[a]=d;return {...i,documents:s}}return i}static mergeCrewxConfig(e,n){let r=new Map;for(let w of e.agents??[])r.set(w.id,w);for(let w of n.agents??[])r.has(w.id)&&console.warn(`[agent-loader] User agent "${w.id}" overrides built-in`),r.set(w.id,w);let o=Array.from(r.values()),i={...e.layouts??{},...n.layouts??{}},s={...e.documents??{},...n.documents??{}},a=e,d=n,c=fc(a.vars,d.vars),l=fc(a.settings,d.settings),f;e.skills&&n.skills&&typeof e.skills=="object"&&typeof n.skills=="object"&&!Array.isArray(e.skills)&&!Array.isArray(n.skills)?f={...e.skills,...n.skills}:f=n.skills??e.skills;let g=[...e.hooks??[],...n.hooks??[]],m=Jm(a.providers,d.providers),k={...e},h={...n};for(let w of ["agents","layouts","documents","skills","hooks","vars","settings","providers"])delete k[w],delete h[w];let _={...{...k,...h},agents:o,layouts:i,documents:s,skills:f};return g.length>0&&(_.hooks=g),c!==void 0&&(_.vars=c),l!==void 0&&(_.settings=l),m!==void 0&&(_.providers=m),_}static async loadYaml(e,n,r){let o=n?.includeBuiltIns!==false,i,s;if(o){let l=await t.loadBuiltInConfig(r);if(e!==void 0){let f=Lr(e);i=t.mergeCrewxConfig(l,f),s=X.dirname(e);}else i=l,s=process.cwd();}else {if(e===void 0)throw new Error("[@crewx/sdk] loadYaml: path is required when includeBuiltIns is false");i=Lr(e),s=X.dirname(e);}let a=new Vt(r);await a.load(i.documents,s);let d=i.agents??[];return await gc(d,i,n),new t(d,n??{},i,a,s)}static async fromConfig(e,n,r,o){let i=n?.includeBuiltIns===true,s=e;if(i){let l=await t.loadBuiltInConfig(o);s=t.mergeCrewxConfig(l,e);}let a=new Vt(o);await a.load(s.documents,r??(typeof process<"u"?process.cwd():"/"));let d=s.agents??[];return await gc(d,s,n),new t(d,n??{},s,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}createUiRuntime(e){return Bd(this._workspaceId,e)}get workspaceName(){return this._workspaceName}getAgent(e){let n=e.startsWith("@")?e.slice(1):e;return this._agents.get(n)}getRemoteProviderConfig(e){let n=this._config?.providers;return Array.isArray(n)?n.find(o=>o.type==="remote"&&o.id===e):void 0}computeTaskLogPath(e,n){let r=mi(n);return X.join(this._projectRoot,".crewx","logs",`${r}_${e}.log`)}registerTool(e,n){this._tools.set(e,{name:e,...n});}async use(e){this._plugins.includes(e)||(await e.attach(this),this._plugins.push(e));}handler(e){return zi(this,e)}async registerChannelAdapter(e){let{adapter:n,instanceId:r,config:o}=e;if(this._activeAdapters.has(r))throw new Error(`Adapter instance already registered: ${r}`);let i=new Set(n.manifest.capabilities),s=e.store??bi(r),a=e.defaultMode??"query",d=n.manifest.platform,c=e.agentRunner??{run:async(m,k,h)=>{let _=await(a==="execute"?this.execute.bind(this):this.query.bind(this))(`@${m}`,k,{threadId:h?.threadId,platform:d});return {output:_.ok?_.data:_.error?.message??""}}},l=e.onInbound??(async m=>{let k=m.routingHints?.agentId??e.defaultAgent;if(!k)return {accepted:false,reason:"no_agent"};let{output:h}=await c.run(k,m.text,{threadId:m.threadId});return {accepted:true,output:h}}),f=Ti({instanceId:r,config:o,capabilities:i,db:s,agentRunner:c,onInbound:l}),g={adapter:n,ctx:f,state:"starting"};this._activeAdapters.set(r,g),this.emit("adapter:lifecycle",{adapterId:n.manifest.id,instanceId:r,state:"starting",timestamp:new Date});try{await n.start(f),g.state="started",this.emit("adapter:lifecycle",{adapterId:n.manifest.id,instanceId:r,state:"started",timestamp:new Date});}catch(m){throw g.state="failed",this.emit("adapter:lifecycle",{adapterId:n.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 n=this._activeAdapters.get(e);if(n){n.state="stopping",this.emit("adapter:lifecycle",{adapterId:n.adapter.manifest.id,instanceId:e,state:"stopping",timestamp:new Date});try{await n.adapter.stop(n.ctx),n.state="stopped",this.emit("adapter:lifecycle",{adapterId:n.adapter.manifest.id,instanceId:e,state:"stopped",timestamp:new Date});}catch(r){n.state="failed",this.emit("adapter:lifecycle",{adapterId:n.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 n=e.timeoutMs??1e4,r=Array.from(this._activeAdapters.keys()),o=await Promise.allSettled(r.map(i=>Promise.race([this.unregisterChannelAdapter(i),new Promise((s,a)=>setTimeout(()=>a(new Error(`Adapter stop timeout: ${i}`)),n))])));for(let i=0;i<o.length;i++)o[i].status==="rejected"&&console.error(`[crewx] adapter stop error (${r[i]}): ${o[i].reason}`);}abortAll(){for(let[e,n]of this._activeTasks)if(n.pid!==void 0)try{process.platform==="win32"?process.kill(n.pid,"SIGTERM"):process.kill(-n.pid,"SIGTERM");}catch(r){console.error(`[crewx] abort task ${e} (pid=${n.pid}) error: ${r instanceof Error?r.message:String(r)}`);}}async _drainActiveTasks(e){let n=Array.from(this._activeTasks.values()).map(r=>r.done);n.length!==0&&await Promise.race([Promise.allSettled(n),new Promise(r=>setTimeout(r,e).unref())]);}async close(){this.abortAll(),await this._drainActiveTasks($n+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 n=[...this._plugins].reverse();for(let r of n)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 n=a=>a?a.split(",").map(d=>d.trim().toLowerCase()).filter(Boolean):void 0,r=n(e.role),o=n(e.team),i=n(e.provider),s=Array.from(this._agents.values());return r&&(s=s.filter(a=>a.role&&r.some(d=>Ke(a.role.toLowerCase(),d)))),o&&(s=s.filter(a=>a.team&&o.some(d=>Ke(a.team.toLowerCase(),d)))),i&&(s=s.filter(a=>(Array.isArray(a.provider)?a.provider:[a.provider]).some(c=>i.some(l=>Ke(c.toLowerCase(),l))))),s}renderAgentPrompt(e){let n=e.startsWith("@")?e.slice(1):e,r=this._agents.get(n);if(!r)throw new lt(n,Array.from(this._agents.keys()));return r.inline?.prompt??r.inline?.system_prompt??r.description??`You are an expert ${n}.`}async renderPrompt(e,n){let o={...await this._documentLoader.buildContext(),...n?.documents??{}},i={...n,documents:o};return this._templateEngine.render(e,i)}registerLayout(e,n){this._layoutLoader.registerLayout(e,n);}async renderAgentPromptFull(e,n){let r=n?.__contextBudget,o=e.startsWith("@")?e.slice(1):e,i=this._agents.get(o);if(!i)throw new lt(o,Array.from(this._agents.keys()));let s=this._resolveLayoutSpec(i,n?.layout),a=this._extractLayoutId(s),d=this._extractLayoutProps(i,s,n?.layout),c=this._layoutLoader.load(a,d),l=i.inline?.prompt??i.inline?.system_prompt??i.description??`You are an expert ${o}.`,f=await this._documentLoader.buildContext(),g=n?.env??(typeof process<"u"?process.env:{}),m=n?.vars?.security_key??Km(),k={...n?.vars??{},documents:f,env:g,agent:{id:i.id,name:i.name??i.id,role:i.role??"",team:i.team??"",description:i.description??""}},h=await this._templateEngine.render(l,k),v={mode:n?.session?.mode??"query",platform:n?.session?.platform??"cli",options:n?.session?.options??[]},_=i.provider,w=Array.isArray(_)?_:typeof _=="string"&&_.length>0?[_]:[],T=w.join(", ")||(typeof _=="string"?_:""),x=i.options,U=["goals","daily"],I={goals:false,daily:false},te;if(!Array.isArray(x)&&typeof x=="object"&&x!==null){let O=x;if("goals"in O){let ae=O.goals;typeof ae=="string"||Array.isArray(ae)?I.goals=ae:I.goals=!!ae;}"daily"in O&&(I.daily=!!O.daily);let Z={};for(let[ae,ge]of Object.entries(O))U.includes(ae)||(Z[ae]=ge);if(Object.keys(Z).length>0){let ae=w.some(ye=>ye.startsWith("cli/")),ge={};for(let[ye,Me]of Object.entries(Z)){let Ve={};if(Array.isArray(Me))ae&&(Ve.rawArgs=Me);else if(typeof Me=="object"&&Me!==null){let E=Me;Object.keys(E).length>0&&(Ve.named=E);}(Ve.named||Ve.rawArgs&&Ve.rawArgs.length>0)&&(ge[ye]=Ve);}te=Object.keys(ge).length>0?ge:void 0;}}let S=Array.isArray(x)?x:void 0,q={};for(let[O,Z]of Object.entries(f))q[O]={content:Z.content??"",toc:Z.toc,summary:Z.summary,path:Z.path};if(I.goals){let O=X.join(this._projectRoot,"docs","goal"),Z=await Ha(O,void 0,I.goals);Z&&(q.active_goals={content:Z});}if(I.daily){let O=X.join(this._projectRoot,"docs","daily"),Z=await Wa(O);Z&&(q.today_daily={content:Z});}let fe=n?.vars?.user_input??void 0,j=this._config?.settings?.dreaming?.continuity,F=j?.reuseReadOnly!==false,B=typeof j?.lookback=="number"?j.lookback:5,J=typeof j?.maxEntryChars=="number"?j.maxEntryChars:8e3,z=n?.threadId??"",H=i.id,ne=!r?.activityLogDisabled&&F&&B>0&&!!z&&!!n?.messages?.length,re=new Map;if(ne)if(r?.activityLogTokenBudget!==void 0&&r.countTokens){let O=Wi({threadId:z,agentId:H,lookback:B,maxEntryChars:J,activityLogTokenBudget:r.activityLogTokenBudget,countTokens:r.countTokens});re=O.activityLogByTask,r.onActivityLogResult?.(O);}else {typeof j?.decayRate=="number"?j.decayRate:.5;re=Td({threadId:z,agentId:H,lookback:B,maxEntryChars:J});}let kn=(n?.messages??[]).map(O=>{let Z=typeof O.activity_log=="string"?Qr(O.activity_log):O.activity_log;if(!O.isAssistant)return Z===O.activity_log?O:{...O,activity_log:Z};let ae=O.metadata?.task_id;return !ae||!re.has(ae)?Z===O.activity_log?O:{...O,activity_log:Z}:{...O,activity_log:Qr(re.get(ae))}}),vn={user_input:fe,agent:{id:i.id,name:i.name??i.id,role:i.role??"",team:i.team??"",description:i.description??"",provider:T,providerList:w,model:i.inline?.model,workingDirectory:i.working_directory??i.workingDirectory??".",inline:{...i.inline??{},prompt:h},specialties:i.specialties??[],capabilities:i.capabilities??[],remote:i.remote??null,optionsByMode:te,optionsArray:S},agentMetadata:{specialties:i.specialties??[],capabilities:i.capabilities??[],description:i.description??""},contextOptions:I,documents:q,skills:n?.skills??[],session:v,env:g,vars:{security_key:m,...n?.vars??{}},props:{...d??{},...n?.messages&&n.messages.length>0?{showConversationHistory:true}:{}},platform:v.platform,mode:v.mode,thread_id:z,now:zn(new Date),has_activity_log:re.size>0,messages:kn,tools:this._tools.size>0?{list:Array.from(this._tools.values()).map(O=>({name:O.name,description:O.description,parameters:O.parameters})),json:JSON.stringify(Array.from(this._tools.values()).map(O=>({name:O.name,description:O.description,parameters:O.parameters})),null,2),count:this._tools.size}:null,metadata:{}};return this._layoutRenderer.render(c,vn)}_filterToolsByMode(e){return e?e.map(n=>this._tools.get(n)).filter(n=>n!==void 0):Array.from(this._tools.values())}_resolveLayoutSpec(e,n){if(n!==void 0)return n;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 n=`crewx/__inline_${Date.now()}`;return this._layoutLoader.registerLayout(n,e.template),n}return "crewx/default"}_extractLayoutProps(e,n,r){let o=e.inline?.layout,i=o&&typeof o=="object"&&"props"in o?o.props:void 0,s=r&&typeof r=="object"&&"id"in r?r.props:void 0;if(i||s)return {...i??{},...s??{}}}_getConversationProvider(){return this._plugins.find(n=>n.name==="conversation")?.conversationProvider}async _fetchHistoryMessages(e,n,r,o){if(r&&r.length>0)return ln(r,o);if(!e){let s=ln([],o);return s.length>0?s:void 0}let i=this._getConversationProvider();if(!i){let s=ln([],o);return s.length>0?s:void 0}try{let s=await i.fetchHistory(e,{currentTraceId:n});if(s.messages.length===0){let a=ln([],o);return a.length>0?a:void 0}return ln(Oi(s),o)}catch{return}}async _resolveFreshProvider(e,n,r){let o=za(e.provider),i=fi(e.options,n,o,pi(r?.overdrive)),s=gi(e.options,n),a=i.active&&i.provider?i.provider:r?.provider??s.provider??o,d=i.active&&i.model?i.model:r?.model??s.model??e.inline?.model;return d&&d.includes("{{")&&(d=await this._templateEngine.render(d,{...r?.vars??{}})),{baseProviderStr:o,baseModel:e.inline?.model,effectiveProviderStr:a,effectiveModel:d,overdrive:i}}_resolveLocalServerRuntime(e,n){return wo(e,n)?(this._globalSettings??=Jo(),es({effectiveProviderStr:e,effectiveModel:n,globalSettings:this._globalSettings})):{}}_readInputBudgetPercent(){let r=this._config?.settings?.dreaming?.continuity;if(!(!r||!Object.prototype.hasOwnProperty.call(r,"inputBudgetPercent")))return r.inputBudgetPercent}_resolveBudgetModel(e,n){if(n&&n.trim())return n;let r=xr(e)?.model;return typeof r=="string"&&r.trim()?r:""}_resolveContextMode(e){return e?.contextMode==="instruction-only"?"instruction-only":"full"}_hasUsableResumeSessionId(e){return typeof e=="string"&&e.trim().length>0}_buildInstructionOnlyResumeManifest(e){return {phase:"resume",initialInputFraming:zo,resolved:e.budget.resolved,reason:e.budget.resolved?void 0:e.budget.reason,requestedProvider:e.requestedProvider,requestedModel:e.requestedModel,effectiveProvider:e.effectiveProvider,effectiveModel:e.effectiveModel,contextWindowTokens:e.budget.resolved?e.budget.contextWindowTokens:null,inputBudgetPercent:e.budget.resolved?e.budget.inputBudgetPercent:e.budget.inputBudgetPercent??(typeof e.rawInputBudgetPercent=="number"?e.rawInputBudgetPercent:null),inputBudgetTokens:e.budget.resolved?e.budget.inputBudgetTokens:null,tokenizer:e.budget.tokenizer,initialTokenCount:e.messageTokenCount,finalTokenCount:e.messageTokenCount,activityLogTokenCount:0,activityIncludedEntries:0,activityOmittedEntries:0,activityRemovedForBudget:false,activityNewestTaskTokenCap:null,historyOriginalMessages:0,historyIncludedMessages:0,historyOmittedMessages:0,overBudget:e.budget.resolved?e.messageTokenCount>e.budget.inputBudgetTokens:false}}_prepareInstructionOnlyResumeWithBudget(e){let n=e.providerResolution.effectiveProviderStr,r=this._resolveBudgetModel(n,e.providerResolution.effectiveModel),o=this._readInputBudgetPercent(),i=Nr({provider:n,model:r,inputBudgetPercent:o}),s=e.providerResolution.baseProviderStr,a=e.providerResolution.baseModel??null,d=r||null,c=Or(e.message,{provider:n,model:r}).tokenCount,l=this._buildInstructionOnlyResumeManifest({budget:i,requestedProvider:s,requestedModel:a,effectiveProvider:n,effectiveModel:d,rawInputBudgetPercent:o,messageTokenCount:c});return this._hasUsableResumeSessionId(e.resumeSessionId)?i.resolved&&c>i.inputBudgetTokens?{contextBudget:l,error:{code:"INPUT_BUDGET_EXCEEDED",message:`Input budget exceeded: instruction-only resume message is ${c} tokens; budget is ${i.inputBudgetTokens} tokens.`}}:{contextBudget:l}:{contextBudget:l,error:{code:"RESUME_SESSION_REQUIRED",message:'contextMode "instruction-only" requires a same-provider native resumeSessionId.'}}}_activityLogEntryCounts(e){return e?e.tasks.reduce((n,r)=>({tokenCount:n.tokenCount+r.tokenCount,includedEntries:n.includedEntries+r.includedEntries,omittedEntries:n.omittedEntries+r.omittedEntries}),{tokenCount:0,includedEntries:0,omittedEntries:0}):{tokenCount:0,includedEntries:0,omittedEntries:0}}_buildUnresolvedContextBudgetManifest(e){return {phase:"fresh",initialInputFraming:Pr,resolved:false,reason:e.budget.resolved?void 0:e.budget.reason,requestedProvider:e.requestedProvider,requestedModel:e.requestedModel,effectiveProvider:e.effectiveProvider,effectiveModel:e.effectiveModel,contextWindowTokens:null,inputBudgetPercent:e.budget.resolved?e.budget.inputBudgetPercent:e.budget.inputBudgetPercent??(typeof e.rawInputBudgetPercent=="number"?e.rawInputBudgetPercent:null),inputBudgetTokens:null,tokenizer:e.budget.tokenizer,initialTokenCount:null,finalTokenCount:null,activityLogTokenCount:null,activityIncludedEntries:null,activityOmittedEntries:null,activityRemovedForBudget:false,activityNewestTaskTokenCap:null,historyOriginalMessages:e.historyOriginalMessages,historyIncludedMessages:e.historyOriginalMessages,historyOmittedMessages:0,overBudget:false}}_buildResolvedContextBudgetManifest(e){let n=this._activityLogEntryCounts(e.activityLogResult);return {phase:"fresh",initialInputFraming:Pr,resolved:true,requestedProvider:e.requestedProvider,requestedModel:e.requestedModel,effectiveProvider:e.effectiveProvider,effectiveModel:e.effectiveModel,contextWindowTokens:e.budget.contextWindowTokens,inputBudgetPercent:e.budget.inputBudgetPercent,inputBudgetTokens:e.budget.inputBudgetTokens,tokenizer:e.budget.tokenizer,initialTokenCount:e.initialTokenCount,finalTokenCount:e.finalTokenCount,activityLogTokenCount:n.tokenCount,activityIncludedEntries:n.includedEntries,activityOmittedEntries:n.omittedEntries,activityRemovedForBudget:e.activityRemovedForBudget,activityNewestTaskTokenCap:Math.floor(e.budget.inputBudgetTokens/8),historyOriginalMessages:e.historyOriginalMessages,historyIncludedMessages:e.historyIncludedMessages,historyOmittedMessages:e.historyOriginalMessages-e.historyIncludedMessages,overBudget:e.initialTokenCount>e.budget.inputBudgetTokens}}async _renderFreshPromptVariant(e){return this.renderAgentPromptFull(e.agentRef,{session:{mode:e.mode,platform:e.options?.platform},vars:{user_input:e.message,...e.options?.vars??{},crewx_workspace_path:this._resolveEffectiveCwd(e.agent,e.options)},messages:e.messages,threadId:e.options?.threadId,__contextBudget:{activityLogDisabled:e.activityLogDisabled,activityLogTokenBudget:e.activityLogTokenBudget,countTokens:e.countTokens,onActivityLogResult:e.onActivityLogResult}})}async _prepareFreshPromptWithBudget(e){let n=e.historyMessages,r=n??[],o=r.length,i=e.providerResolution.effectiveProviderStr,s=this._resolveBudgetModel(i,e.providerResolution.effectiveModel),a=this._readInputBudgetPercent(),d=Nr({provider:i,model:s,inputBudgetPercent:a}),c=e.providerResolution.baseProviderStr,l=e.providerResolution.baseModel??null,f=s||null;if(!d.resolved)return {renderedPrompt:await this._renderFreshPromptVariant({...e,messages:n}),contextBudget:this._buildUnresolvedContextBudgetManifest({budget:d,requestedProvider:c,requestedModel:l,effectiveProvider:i,effectiveModel:f,rawInputBudgetPercent:a,historyOriginalMessages:o})};let g=Ko({provider:i,model:d.model}),m=I=>g.countTokens(I),k=I=>Vo({systemPrompt:I,message:e.message},m),h,v=await this._renderFreshPromptVariant({...e,messages:n,activityLogTokenBudget:d.inputBudgetTokens,countTokens:m,onActivityLogResult:I=>{h=I;}}),_=k(v),w=_,T=false,x=r;if(w>d.inputBudgetTokens&&h&&h.activityLogByTask.size>0&&(v=await this._renderFreshPromptVariant({...e,messages:x,activityLogDisabled:true,activityLogTokenBudget:d.inputBudgetTokens,countTokens:m}),w=k(v),T=true),w>d.inputBudgetTokens&&x.length>0)for(let I=1;I<=r.length;I++){let te=r.slice(I),S=await this._renderFreshPromptVariant({...e,messages:te,activityLogDisabled:T,activityLogTokenBudget:d.inputBudgetTokens,countTokens:m}),q=k(S);if(v=S,w=q,x=te,q<=d.inputBudgetTokens)break}let U=this._buildResolvedContextBudgetManifest({budget:d,requestedProvider:c,requestedModel:l,effectiveProvider:i,effectiveModel:f,initialTokenCount:_,finalTokenCount:w,activityLogResult:h,activityRemovedForBudget:T,historyOriginalMessages:o,historyIncludedMessages:x.length});return w>d.inputBudgetTokens?{renderedPrompt:v,contextBudget:U,countTokens:m,error:{code:"INPUT_BUDGET_EXCEEDED",message:`Input budget exceeded: final provider initial input is ${w} tokens; budget is ${d.inputBudgetTokens} tokens.`}}:{renderedPrompt:v,contextBudget:U,countTokens:m}}_recountFreshProviderInitialInput(e){let n=e.contextBudgetManifest;if(!n?.resolved||!n.effectiveModel)return null;let r=e.countTokens??(o=>Or(o,{provider:n.effectiveProvider,model:n.effectiveModel}).tokenCount);return Vo({systemPrompt:e.providerOptions.systemPrompt,message:e.message},r)}_validateFreshProviderInitialInputBudget(e){let n=e.contextBudgetManifest;if(!n?.resolved||n.finalTokenCount===null||n.inputBudgetTokens===null)return;let r=this._recountFreshProviderInitialInput(e);if(r!==null){if(r!==n.finalTokenCount)throw new Error(`Context budget recount mismatch: provider initial input is ${r} tokens but manifest.finalTokenCount is ${n.finalTokenCount}.`);if(r>n.inputBudgetTokens)return {code:"INPUT_BUDGET_EXCEEDED",message:`Input budget exceeded: final provider initial input is ${r} tokens; budget is ${n.inputBudgetTokens} tokens.`}}}_resolveTimeout(e,n){let r=e==="query"?"CREWX_TIMEOUT_QUERY":"CREWX_TIMEOUT_EXECUTE";if(process.env[r]!=null&&process.env[r]!==""){let o=xa();return e==="query"?o.queryMs:o.executeMs}if(n?.meta?.defaultTimeoutMs){let o=e==="query"?n.meta.defaultTimeoutMs.query:n.meta.defaultTimeoutMs.execute;if(o!==void 0)return o}return 8*36e5}_resolveIdleTimeout(e){let n=ci();return n!==void 0?n:e?.meta?.defaultIdleMs!==void 0?e.meta.defaultIdleMs:6e5}_lookupCliAdapter(e){return xi(e)}_resolveEffectiveCost(e,n,r){return Hs(e?.costUsd,e?.inputTokens,e?.outputTokens,e?.cachedInputTokens,n)}_resolveEffectiveCwd(e,n){return n?.cwd??(e.working_directory?X.resolve(this._projectRoot,e.working_directory):this._projectRoot)}_buildFileRemoteOptions(e,n){let r={path:this._projectRoot,id:this._workspaceId,name:this._workspaceName,agentRef:e};return {...n,cwd:void 0,callerIdentity:r,metadata:{...n?.metadata??{},crewx:{...n?.metadata?.crewx??{},callerWorkspace:r}},vars:{...n?.vars??{},crewx_caller_workspace_path:r.path,crewx_caller_workspace_id:r.id,crewx_caller_workspace_name:r.name}}}_registerCallerIdentityOverride(e,n,r){let o=Symbol("callerIdentityOverride");return this._callerIdentityOverrides.set(e,{token:o,callerIdentity:n,targetIdentity:r}),o}_clearCallerIdentityOverride(e,n){if(!n)return;let r=this._callerIdentityOverrides.get(e);r&&r.token===n&&this._callerIdentityOverrides.delete(e);}_rewriteCallerFacingPayload(e,n,r){let{callerIdentity:o,targetIdentity:i}=r,s={...n,agentRef:o.agentRef};if(e==="task:output")return s;let a=s,d=a.metadata??{},c=d.crewx??{};return {...a,workspaceId:o.id,workspaceName:o.name,metadata:{...d,crewx:{...c,remoteExecution:i}}}}emit(e,n){if(e==="task:start"||e==="task:end"||e==="task:output"){let r=n.traceId,o=this._callerIdentityOverrides.get(r);if(o){let i=this._rewriteCallerFacingPayload(e,n,o);super.emit(e,i);return}}super.emit(e,n);}emitToolEvents(e,n,r,o,i,s,a){try{let c=this._lookupCliAdapter(r)?.parseEvent?.(o)??jn(new Date().toISOString(),o);for(let l of c)l.type==="tool_use"&&l.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:n,agentId:i,threadId:s,sessionId:a,provider:r,tool:{name:l.toolName,rawName:l.toolName,input:l.toolInput?this.tryParseJson(l.toolInput):void 0,toolUseId:l.toolUseId}}),l.type==="tool_result"&&this.emit("tool:observed:after",{traceId:e,timestamp:new Date,agentRef:n,agentId:i,threadId:s,sessionId:a,provider:r,tool:{name:l.toolName??"unknown",rawName:l.toolName??"unknown",toolUseId:l.toolUseId,result:l.resultPreview,isError:l.isError}});}catch{}}emitTaskLogEntries(e,n,r,o,i,s,a){try{for(let d of a)d.type==="tool_use"&&d.toolName&&this.emit("tool:observed:before",{traceId:e,timestamp:new Date,agentRef:n,agentId:r,threadId:o,sessionId:i,provider:s,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:n,agentId:r,threadId:o,sessionId:i,provider:s,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,n,r){let o=await this.resolveFileRemoteTarget(e);if(o){let l=await o.target.query(o.agentRef,n,this._buildFileRemoteOptions(e,r));return {...l,meta:{...l.meta,agentId:e.replace(/^@/,"")}}}let i=Jn.getStore()??Ai(r?.trace),s=r?.taskId??Ze("tsk"),a={parentTaskId:i?.parentTaskId??null,rootTraceId:i?.rootTraceId??s,callerAgentId:i?.callerAgentId??null},d={parentTaskId:s,rootTraceId:i?.rootTraceId??s,callerAgentId:null},c=r?.callerIdentity?this._registerCallerIdentityOverride(s,r.callerIdentity,{agentId:e.replace(/^@/,""),workspaceId:this._workspaceId,workspaceName:this._workspaceName}):void 0;try{return await Jn.run(d,async()=>{let l=Date.now(),f=new Date,g;try{g=Mr(e,Array.from(this._agents.values()));}catch(E){if(E instanceof lt){this.emit("task:start",{traceId:s,timestamp:f,agentRef:e,message:n,mode:"query",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,projectId:r?.projectId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let N=Date.now()-l,D={code:"AGENT_NOT_FOUND",message:E.message};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:D,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:D,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:N,taskId:s}}}throw E}d.callerAgentId=g.id;let m=await this._resolveFreshProvider(g,"query",r),k=m.baseProviderStr,h=m.effectiveProviderStr,v=m.effectiveModel,_=m.overdrive,w=h!==k?void 0:r?.resumeSessionId,x=this._resolveContextMode(r)==="instruction-only",U,I,te,S=v,q,fe,Q,se,j={},F=!1,B=E=>{F||(F=!0,this.emit("task:start",{traceId:s,timestamp:f,agentRef:e,message:n,mode:"query",pid:E,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:S,provider:h,codingAgentCommand:U,renderedPrompt:fe,metadata:{...r?.metadata??{},provider:h,..._.active?{overdrive:!0}:{},...q?{provider_session_id:q}:{},...Q?{context_budget:Q}:{},...j.metadata?{local_ai_server:j.metadata}:{}},threadId:r?.threadId,projectId:r?.projectId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));};try{j=this._resolveLocalServerRuntime(h,v);}catch(E){if(!(E instanceof Pe))throw E;B();let N=Date.now()-l,D={code:E.code,message:E.message};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:D,model:S,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:h,model:v,durationMs:N,taskId:s}}}if(j.model&&(v=j.model,m.effectiveModel=v,S=v),x){let E=this._prepareInstructionOnlyResumeWithBudget({message:n,providerResolution:m,resumeSessionId:w});if(Q=E.contextBudget,E.error){B();let N=Date.now()-l,D=E.error;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:D,model:S,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:h,model:v,durationMs:N,taskId:s}}}}let J;try{J=ft(h,this._additionalArgsProvider);}catch(E){B();let N=Date.now()-l,D={code:"PROVIDER_ERROR",message:E.message,...E instanceof exports.ProviderError?{providerCode:E.code}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:D,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:h,model:v,durationMs:N,taskId:s}}}let z;if(x||(z=await this._fetchHistoryMessages(r?.threadId,s,r?.messages,r?.uiProjections)),!x)try{let E=await this._prepareFreshPromptWithBudget({agentRef:e,agent:g,mode:"query",message:n,options:r,providerResolution:m,historyMessages:z});if(fe=E.renderedPrompt,Q=E.contextBudget,se=E.countTokens,E.error){B();let N=Date.now()-l,D=E.error;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:D,model:S,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:h,model:v,durationMs:N,taskId:s}}}}catch(E){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${E instanceof Error?E.message:String(E)}`);}let H=g.options,ne=pc(H?.query,h,_),re=_.active?_.mode:ne.modeOptions?.mode,kn=_.effort??r?.effort??ne.modeOptions?.effort,vn=Array.isArray(H?.query?.tools)?H.query.tools:void 0,O=this._tools.size>0?this._filterToolsByMode(vn):[],Z=ne.configOptions,ae=g.inline?.max_steps;h.startsWith("api/")&&B();let ge=!1,ye=0,Me=()=>{},Ve=new Promise(E=>{Me=E;});this._activeTasks.set(s,{pid:void 0,done:Ve});try{let E={model:v,effort:kn,mode:re,context:r?.context,...x?{}:{systemPrompt:fe??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`},additionalArgs:Array.isArray(H?.query)?H.query:void 0,resumeSessionId:w,tools:O.length>0?O:void 0,maxSteps:ae,providerOptions:ne.providerOptions,configOptions:Z,timeoutMs:this._resolveTimeout("query",this._lookupCliAdapter(h)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(h)),cwd:this._resolveEffectiveCwd(g,r),env:{...j.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:s,CREWX_PARENT_TASK_ID:s,CREWX_TASK_ID:s,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:h,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(s,f)},onPid:C=>{let le=this._activeTasks.get(s);le&&(le.pid=C),B(C);},onProviderSessionId:C=>{q=C;},onOutput:(C,le)=>{let Po=this._lookupCliAdapter(h);le==="stdout"&&Po?.suppressOutputLine?.(C)===!0||this.emit("task:output",{traceId:s,timestamp:new Date,agentRef:e,output:C,level:le}),le==="stdout"&&this.emitToolEvents(s,e,h,C,g.id,r?.threadId??"","");},onTaskLog:C=>{this.emitTaskLogEntries(s,e,g.id,r?.threadId??"","",h,C);for(let le of C)this.emit("task:output",{traceId:s,timestamp:new Date,agentRef:e,output:JSON.stringify(le),level:"info"});},onCommand:C=>{U=C;},onUsage:C=>{I=C;},onExitCode:C=>{te=C;},onModel:C=>{S||(S=C);}},N=x?void 0:this._validateFreshProviderInitialInputBudget({message:n,providerOptions:E,contextBudgetManifest:Q,countTokens:se});if(N){B();let C=Date.now()-l;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:C,error:N,model:S,metadata:r?.metadata?{...r.metadata}:void 0}),ge=!0,{ok:!1,data:"",error:N,meta:{agentId:g.id,provider:h,model:v,durationMs:C,taskId:s}}}let D=await J.query(n,E);ye=this._resolveEffectiveCost(I,S,l),B();let Rt=Date.now()-l,En={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",result:D,durationMs:Rt,exitCode:te,inputTokens:I?.inputTokens,outputTokens:I?.outputTokens,cachedInputTokens:I?.cachedInputTokens,costUsd:ye,model:S,metadata:Object.keys(En).length>0?En:void 0}),ge=!0,{ok:!0,data:D,meta:{agentId:g.id,provider:h,model:v,durationMs:Rt,taskId:s}}}catch(E){if(E instanceof exports.ClientToolCallRequiredError){let Rt=Ze("thd");return this._pendingThreads.set(Rt,{agentRef:g.id,providerStr:h,continuationState:E.continuationState,toolCall:E.toolCall,traceId:s,startMs:l,model:v}),ge=!0,{ok:!0,status:"requires_action",data:"",toolCall:E.toolCall,threadId:Rt,meta:{agentId:g.id,provider:h,model:v,durationMs:Date.now()-l,taskId:s}}}ye=this._resolveEffectiveCost(I,S,l),B();let N=Date.now()-l,D={code:"QUERY_FAILED",message:E.message,...E instanceof exports.ProviderError?{providerCode:E.code}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:N,error:D,exitCode:te,inputTokens:I?.inputTokens,outputTokens:I?.outputTokens,cachedInputTokens:I?.cachedInputTokens,costUsd:ye,model:S,metadata:r?.metadata?{...r.metadata}:void 0}),ge=!0,{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:h,model:v,durationMs:N,taskId:s}}}finally{ge||this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"query",durationMs:Date.now()-l,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:te??-1,inputTokens:I?.inputTokens,outputTokens:I?.outputTokens,cachedInputTokens:I?.cachedInputTokens,costUsd:ye,model:S}),this._activeTasks.delete(s),this._clearCallerIdentityOverride(s,c),Me();}})}finally{this._clearCallerIdentityOverride(s,c);}}async continueQuery(e,n){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=ft(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 i=n.map(s=>({...s,toolName:r.toolCall.toolCallId===s.toolCallId?r.toolCall.toolName:s.toolCallId}));try{let s=await o.continueWithToolResults(r.continuationState,i),a=Date.now()-r.startMs;return this.emit("task:end",{traceId:r.traceId,timestamp:new Date,agentRef:r.agentRef,mode:"query",result:s,durationMs:a}),{ok:!0,status:"complete",data:s,meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:a}}}catch(s){if(s instanceof exports.ClientToolCallRequiredError)return this._pendingThreads.set(e,{...r,continuationState:s.continuationState,toolCall:s.toolCall}),{ok:true,status:"requires_action",data:"",toolCall:s.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:s.message},meta:{agentId:r.agentRef,provider:r.providerStr,model:r.model,durationMs:a}}}}async execute(e,n,r){let o=await this.resolveFileRemoteTarget(e);if(o){let l=await o.target.execute(o.agentRef,n,this._buildFileRemoteOptions(e,r));return {...l,meta:{...l.meta,agentId:e.replace(/^@/,"")}}}let i=Jn.getStore()??Ai(r?.trace),s=r?.taskId??Ze("tsk"),a={parentTaskId:i?.parentTaskId??null,rootTraceId:i?.rootTraceId??s,callerAgentId:i?.callerAgentId??null},d={parentTaskId:s,rootTraceId:i?.rootTraceId??s,callerAgentId:null},c=r?.callerIdentity?this._registerCallerIdentityOverride(s,r.callerIdentity,{agentId:e.replace(/^@/,""),workspaceId:this._workspaceId,workspaceName:this._workspaceName}):void 0;try{return await Jn.run(d,async()=>{let l=Date.now(),f=new Date,g;try{g=Mr(e,Array.from(this._agents.values()));}catch(E){if(E instanceof lt){this.emit("task:start",{traceId:s,timestamp:f,agentRef:e,message:n,mode:"execute",parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,metadata:{...r?.metadata??{}},threadId:r?.threadId,projectId:r?.projectId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName});let N=Date.now()-l,D={code:"AGENT_NOT_FOUND",message:E.message};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:D,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:D,meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:N,taskId:s}}}throw E}d.callerAgentId=g.id;let m=await this._resolveFreshProvider(g,"execute",r),k=m.baseProviderStr,h=m.effectiveProviderStr,v=m.effectiveModel,_=m.overdrive,w=h!==k?void 0:r?.resumeSessionId,x=this._resolveContextMode(r)==="instruction-only",U,I,te,S=v,q,fe,Q,se,j={},F=!1,B=E=>{F||(F=!0,this.emit("task:start",{traceId:s,timestamp:f,agentRef:e,message:n,mode:"execute",pid:E,parentTaskId:a.parentTaskId,rootTraceId:a.rootTraceId,callerAgentId:a.callerAgentId,model:S,provider:h,codingAgentCommand:U,renderedPrompt:fe,metadata:{...r?.metadata??{},provider:h,..._.active?{overdrive:!0}:{},...q?{provider_session_id:q}:{},...Q?{context_budget:Q}:{},...j.metadata?{local_ai_server:j.metadata}:{}},threadId:r?.threadId,projectId:r?.projectId,platform:r?.platform??"cli",workspaceId:this._workspaceId,workspaceName:this._workspaceName}));};try{j=this._resolveLocalServerRuntime(h,v);}catch(E){if(!(E instanceof Pe))throw E;B();let N=Date.now()-l,D={code:E.code,message:E.message};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:D,model:S,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:h,model:v,durationMs:N,taskId:s}}}if(j.model&&(v=j.model,m.effectiveModel=v,S=v),x){let E=this._prepareInstructionOnlyResumeWithBudget({message:n,providerResolution:m,resumeSessionId:w});if(Q=E.contextBudget,E.error){B();let N=Date.now()-l,D=E.error;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:D,model:S,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:h,model:v,durationMs:N,taskId:s}}}}let J;try{J=ft(h,this._additionalArgsProvider);}catch(E){B();let N=Date.now()-l,D={code:"PROVIDER_ERROR",message:E.message,...E instanceof exports.ProviderError?{providerCode:E.code}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:D,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:h,model:v,durationMs:N,taskId:s}}}let z;if(x||(z=await this._fetchHistoryMessages(r?.threadId,s,r?.messages,r?.uiProjections)),!x)try{let E=await this._prepareFreshPromptWithBudget({agentRef:e,agent:g,mode:"execute",message:n,options:r,providerResolution:m,historyMessages:z});if(fe=E.renderedPrompt,Q=E.contextBudget,se=E.countTokens,E.error){B();let N=Date.now()-l,D=E.error;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:D,model:S,metadata:r?.metadata?{...r.metadata}:void 0}),this._clearCallerIdentityOverride(s,c),{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:h,model:v,durationMs:N,taskId:s}}}}catch(E){console.error(`[crewx] renderAgentPromptFull failed for ${e}: ${E instanceof Error?E.message:String(E)}`);}let H=g.options,ne=pc(H?.execute,h,_),re=_.active?_.mode:ne.modeOptions?.mode,kn=_.effort??r?.effort??ne.modeOptions?.effort,vn=Array.isArray(H?.execute?.tools)?H.execute.tools:void 0,O=this._tools.size>0?this._filterToolsByMode(vn):[],Z=ne.configOptions,ae=g.inline?.max_steps;h.startsWith("api/")&&B();let ge=!1,ye=0,Me=()=>{},Ve=new Promise(E=>{Me=E;});this._activeTasks.set(s,{pid:void 0,done:Ve});try{let E={model:v,effort:kn,mode:re,context:r?.context,...x?{}:{systemPrompt:fe??g.inline?.system_prompt??g.inline?.prompt??g.description??`You are ${g.id}.`},additionalArgs:Array.isArray(H?.execute)?H.execute:void 0,resumeSessionId:w,tools:O.length>0?O:void 0,maxSteps:ae,providerOptions:ne.providerOptions,configOptions:Z,timeoutMs:this._resolveTimeout("execute",this._lookupCliAdapter(h)),idleMs:this._resolveIdleTimeout(this._lookupCliAdapter(h)),cwd:this._resolveEffectiveCwd(g,r),env:{...j.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:s,CREWX_PARENT_TASK_ID:s,CREWX_TASK_ID:s,CREWX_CALLER_AGENT_ID:process.env.CREWX_AGENT_ID??"",CREWX_THREAD_ID:r?.threadId??"",CREWX_PROVIDER:h,CREWX_SESSION_ID:"",CREWX_TASK_LOG_PATH:this.computeTaskLogPath(s,f)},onPid:C=>{let le=this._activeTasks.get(s);le&&(le.pid=C),B(C);},onProviderSessionId:C=>{q=C;},onOutput:(C,le)=>{let Po=this._lookupCliAdapter(h);le==="stdout"&&Po?.suppressOutputLine?.(C)===!0||this.emit("task:output",{traceId:s,timestamp:new Date,agentRef:e,output:C,level:le}),le==="stdout"&&this.emitToolEvents(s,e,h,C,g.id,r?.threadId??"","");},onTaskLog:C=>{this.emitTaskLogEntries(s,e,g.id,r?.threadId??"","",h,C);for(let le of C)this.emit("task:output",{traceId:s,timestamp:new Date,agentRef:e,output:JSON.stringify(le),level:"info"});},onCommand:C=>{U=C;},onUsage:C=>{I=C;},onExitCode:C=>{te=C;},onModel:C=>{S||(S=C);}},N=x?void 0:this._validateFreshProviderInitialInputBudget({message:n,providerOptions:E,contextBudgetManifest:Q,countTokens:se});if(N){B();let C=Date.now()-l;return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:C,error:N,model:S,metadata:r?.metadata?{...r.metadata}:void 0}),ge=!0,{ok:!1,data:"",error:N,meta:{agentId:g.id,provider:h,model:v,durationMs:C,taskId:s}}}let D=await J.execute(n,E);ye=this._resolveEffectiveCost(I,S,l),B();let Rt=Date.now()-l,En={...r?.metadata??{},...r?.threadId?{threadId:r.threadId}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",result:D,durationMs:Rt,exitCode:te,inputTokens:I?.inputTokens,outputTokens:I?.outputTokens,cachedInputTokens:I?.cachedInputTokens,costUsd:ye,model:S,metadata:Object.keys(En).length>0?En:void 0}),ge=!0,{ok:!0,data:D,meta:{agentId:g.id,provider:h,model:v,durationMs:Rt,taskId:s}}}catch(E){ye=this._resolveEffectiveCost(I,S,l),B();let N=Date.now()-l,D={code:"EXECUTE_FAILED",message:E.message,...E instanceof exports.ProviderError?{providerCode:E.code}:{}};return this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:N,error:D,exitCode:te,inputTokens:I?.inputTokens,outputTokens:I?.outputTokens,cachedInputTokens:I?.cachedInputTokens,costUsd:ye,model:S,metadata:r?.metadata?{...r.metadata}:void 0}),ge=!0,{ok:!1,data:"",error:D,meta:{agentId:g.id,provider:h,model:v,durationMs:N,taskId:s}}}finally{ge||this.emit("task:end",{traceId:s,timestamp:new Date,agentRef:e,mode:"execute",durationMs:Date.now()-l,error:{code:"TASK_END_GUARD",message:"task:end was not emitted normally"},exitCode:te??-1,inputTokens:I?.inputTokens,outputTokens:I?.outputTokens,cachedInputTokens:I?.cachedInputTokens,costUsd:ye,model:S}),this._activeTasks.delete(s),this._clearCallerIdentityOverride(s,c),Me();}})}finally{this._clearCallerIdentityOverride(s,c);}}};function fc(t,e){let n=ys(t)?t:void 0,r=ys(e)?e:void 0;if(!(!n&&!r))return {...n??{},...r??{}}}function ys(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Jm(t,e){let n=Array.isArray(t)?t:void 0,r=Array.isArray(e)?e:void 0;if(!n&&!r)return;let o=a=>{if(!ys(a))return;let d=a.id;if(typeof d=="string")return `id:${d}`;let c=a.name;if(typeof c=="string")return `name:${c}`},i=new Set;for(let a of r??[]){let d=o(a);d&&i.add(d);}let s=[];for(let a of n??[]){let d=o(a);d&&i.has(d)||s.push(a);}for(let a of r??[])s.push(a);return s}function Ym(t){let e=Array.isArray(t.provider)?t.provider:[t.provider],n=t.options,r=[...e];for(let o of ["query","execute"]){let i=gi(n,o);i.provider&&r.push(i.provider);let s=n&&typeof n=="object"&&!Array.isArray(n)?n[o]:void 0,a=s&&typeof s=="object"&&!Array.isArray(s)?Jr(s.overdrive):void 0;a?.provider&&r.push(a.provider);}return r}async function gc(t,e,n){let r=t.flatMap(Ym);if(r.some(i=>i.startsWith("api/"))){let{registerApiProviders:i}=await Promise.resolve().then(()=>(ns(),Qd));i(n?.api);}await Qm(r,e),Zm(r,e),Xm(r);}function Xm(t){if(!t.some(r=>r.startsWith("acp/")))return;let{registerAcpProviders:n}=(cs(),Ls(rc));n();}async function Qm(t,e){if(!t.some(s=>s.startsWith("remote/")))return;let r=e.providers;if(!Array.isArray(r))return;let{createRemoteProviderFactory:o}=await Promise.resolve().then(()=>(ps(),ic)),i=new Map;for(let s of r)s.type==="remote"&&typeof s.id=="string"&&i.set(s.id,s);i.size>0&&pt("remote",o(i,ft));}function Zm(t,e){if(!t.some(s=>s.startsWith("plugin/")))return;let r=e.providers;if(!Array.isArray(r))return;let{createPluginProviderFactory:o}=(fs(),Ls(cc)),i=new Map;for(let s of r)s.type==="plugin"&&typeof s.id=="string"&&i.set(s.id,s);i.size>0&&pt("plugin",o(i));}u();u();var _s=class{detach(e){}};u();var eh="crewx:fs:",ws=class{prefix;store;constructor(e){this.prefix=e?.prefix??eh,this.store=e?.storage??new Map;}async readFile(e){let n=this.toKey(e),r=this.store.get(n);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 n=e.map(s=>s.replace(/\\/g,"/")).join("/").replace(/\/+/g,"/"),r=n.split("/"),o=[];for(let s of r)s==="."||s===""||(s===".."?o.pop():o.push(s));let i=o.join("/");return n.startsWith("/")?`/${i}`:i}isAbsolute(e){return e.startsWith("/")}setItem(e,n){this.store.set(this.toKey(e),n);}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 n=e.replace(/\\/g,"/").replace(/\/$/,""),r=this.toKey(n+"/"),o=[];for(let i of this.store.keys())if(i.startsWith(r)){let a=i.slice(r.length).split("/")[0];a&&!o.includes(a)&&o.push(a);}return o}toKey(e){return `${this.prefix}${e.replace(/\\/g,"/")}`}};u();var mn="default",hn="archive",mc="wi-default-flow",th="wi-plan-flow",nh="wi-default-flow.yaml",rh="wi-plan-flow.yaml",xo=/^[a-zA-Z0-9_-]{1,64}$/;function hc(t){return t===mn||t===hn}function oh(t){let e={id:mn,name:"Default",workflowId:mc,system:true,readOnly:false},n={id:hn,name:"Archive",workflowId:"",system:true,readOnly:true},r=t?.settings?.wi?.boards;if(!Array.isArray(r)||r.length===0)return [e,n];let o=new Set,i=[];for(let s of r){if(!s||typeof s!="object")continue;let a=s,d=a.id,c=a.name,l=a.workflow_id;if(typeof d!="string"||d.length===0||typeof c!="string"||c.length===0||typeof l!="string"||l.length===0||hc(d)||!xo.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;i.push({id:d,name:c,workflowId:l,...f!==void 0?{description:f}:{},...g!==void 0?{goalId:g}:{},system:false,readOnly:false});}return [e,...i,n]}u();var oe=class extends Error{constructor(e){super(e),this.name="WiCreateError";}},sh=300*1e3,ah=300*1e3,dh=1e4,ch=50;function lh(t){return new Promise(e=>setTimeout(e,t))}function uh(t){let e=t.getFullYear(),n=String(t.getMonth()+1).padStart(2,"0"),r=String(t.getDate()).padStart(2,"0");return {compact:`${e}${n}${r}`,iso:`${e}-${n}-${r}`}}function ph(t){return t.normalize("NFKD").replace(/[^\x00-\x7F]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toUpperCase().slice(0,60)}function fh(t,e){let n=t.replace(/\\/g,"/").toLowerCase(),r=e.replace(/\\/g,"/").toLowerCase();if(r!==n&&!r.startsWith(n+"/"))throw new oe("Path is outside wi directory")}function yc(t){let e=typeof t=="string"?t.trim():"";if(!e)throw new oe("title is required");if(e.length>200)throw new oe("title must be 200 characters or fewer");return e}function _c(t){let e=typeof t=="string"?t.trim():"";if(!e)return "manual";if(e.length>128)throw new oe("source must be 128 characters or fewer");if(/[\r\n]/.test(e))throw new oe("source must be a single line");return e}function wc(t){return (typeof t=="string"?t.trim().replace(/^@+/,""):"")||void 0}function kc(t){if(t==null)return [];if(!Array.isArray(t))throw new oe("depends_on must be an array");return t.map(e=>String(e).trim()).filter(Boolean)}function vc(t,e){let n=typeof t=="string"?t.trim():"";if(!n){if(e?.required)throw new oe("board is required");return}if(!xo.test(n))throw new oe("board must match ^[a-zA-Z0-9_-]{1,64}$");if(n===hn)throw new oe(`board cannot be '${hn}'`);return n}function yn(t){return JSON.stringify(t)}function gh(t,e){return e.length===0?[`${t}: []`]:[`${t}:`,...e.map(n=>` - ${yn(n)}`)]}async function mh(t){let e=await kd.promises.stat(t).catch(()=>null);e&&Date.now()-e.mtimeMs>ah&&await kd.promises.rm(t,{recursive:true,force:true}).catch(()=>{});}async function hh(t,e){let n=X.join(t,".wi-create.lock"),r=Date.now()+dh;for(;Date.now()<r;)try{await kd.promises.mkdir(n);try{return await e()}finally{await kd.promises.rm(n,{recursive:!0,force:!0}).catch(()=>{});}}catch(o){if(o.code!=="EEXIST")throw o;await mh(n),await lh(ch);}throw new oe("WI create lock timeout: docs/wi/.wi-create.lock")}async function Ec(t){let e=[],n=await kd.promises.readdir(t,{withFileTypes:true}).catch(r=>{if(r.code==="ENOENT")return [];throw r});for(let r of n){let o=X.join(t,r.name);r.isDirectory()?e.push(...await Ec(o)):r.isFile()&&r.name.endsWith(".md")&&e.push(r.name);}return e}async function yh(t){let e=await kd.promises.readdir(t).catch(r=>{if(r.code==="ENOENT")return [];throw r}),n=await Ec(X.join(t,"archive"));return [...e,...n]}function _h(t,e){return t.reduce((n,r)=>{if(!r.startsWith(e))return n;let o=r.slice(e.length).match(/^(\d+)/);return o?Math.max(n,parseInt(o[1],10)):n},0)+1}function wh(t,e){return t.some(n=>n===`${e}.md`||n.startsWith(`${e}-`))}async function kh(t,e){let n=X.join(t,`.wi-${e}.lock`);try{return await kd.promises.writeFile(n,"",{flag:"wx"}),{claimed:!0,lockPath:n}}catch(r){if(r.code!=="EEXIST")throw r;return await kd.promises.stat(n).then(i=>Date.now()-i.mtimeMs>sh).catch(()=>false)&&await kd.promises.unlink(n).then(()=>true).catch(()=>false)?(await kd.promises.writeFile(n,"",{flag:"wx"}),{claimed:true,lockPath:n}):{claimed:false,lockPath:n}}}function vh(t){return {title:yc(t.title),assignee:wc(t.assignee),body:(t.body??"").trim(),board:vc(t.board),source:_c(t.source),depends_on:kc(t.depends_on)}}function Eh(t,e,n){if(t==null)return;let r=typeof t=="string"?t.trim():"";if(!r)throw new oe(`items[${e}].key must be a non-empty string when provided`);if(n.has(r))throw new oe(`items[${e}].key "${r}" is duplicated`);return n.add(r),r}function bh(t){let e=vc(t.board,{required:true}),n=_c(t.source);if(!Array.isArray(t.items)||t.items.length===0)throw new oe("items must contain at least one WI");let r=new Set;return t.items.map((o,i)=>{if(!o||typeof o!="object")throw new oe(`items[${i}] must be an object`);if(typeof o.body!="string")throw new oe(`items[${i}].body is required`);return {key:Eh(o.key,i,r),title:yc(o.title),assignee:wc(o.assignee),body:o.body.trim(),board:e,source:n,depends_on:kc(o.depends_on)}})}function Rh(t,e){return t.map(n=>e.get(n)??n)}function Th(t,e,n){let r=!!t.board&&t.board!==mn,o={wi_id:e,title:t.title,date:n,status:"draft",priority:"normal",source:t.source};return t.assignee&&(o.assignee=t.assignee),r&&(o.board=t.board),o.depends_on=t.depends_on,{raw:`---
|
|
423
|
+
${[`wi_id: ${e}`,`title: ${yn(t.title)}`,`date: ${yn(n)}`,"status: draft",...t.assignee?[`assignee: ${yn(t.assignee)}`]:[],"priority: normal",`source: ${yn(t.source)}`,...r?[`board: ${yn(t.board)}`]:[],...gh("depends_on",t.depends_on)].join(`
|
|
400
424
|
`)}
|
|
401
425
|
---
|
|
402
426
|
|
|
403
427
|
${t.body}
|
|
404
|
-
`,frontmatter:o}}async function hc(t,e){let n=Y.join(t,"docs","wi");return await fd.promises.mkdir(n,{recursive:true}),ah(n,async()=>{let{compact:r,iso:o}=nh(new Date),i=`WI-${r}-`,s=await dh(n),a=ch(s,i),d=[],c=[];try{let l=[];for(let m of e){let h;for(let v=0;v<999;v++,a++){let _=`WI-${r}-${String(a).padStart(3,"0")}`;if(lh(s,_))continue;let w=await uh(n,_);if(!w.claimed)continue;let T=rh(m.title),x=T?`${_}-${T}.md`:`${_}.md`,U=Y.resolve(n,x);if(oh(n,U),await fd.promises.access(U).then(()=>!0,()=>!1)){await fd.promises.unlink(w.lockPath).catch(()=>{});continue}c.push(w.lockPath),h={item:m,wiId:_,filename:x,fullPath:U};break}if(!h)throw new oe("Failed to allocate a unique WI id");l.push(h),s.push(h.filename);}let f=new Map;for(let m of l)m.item.key&&f.set(m.item.key,m.wiId);let g=[];for(let m of l){let k=mh(m.item.depends_on,f),h={...m.item,depends_on:k},v=hh(h,m.wiId,o);await fd.promises.writeFile(m.fullPath,v.raw,{encoding:"utf8",flag:"wx"}),d.push(m.fullPath);let _=await fd.promises.stat(m.fullPath);g.push({summary:{wi_id:m.wiId,title:h.title,status:"draft",priority:"normal",assignee:h.assignee,depends_on:k,blocks:[],date:o,board:h.board&&h.board!==mn?h.board:void 0,source:h.source,screens:[],path:`docs/wi/${m.filename}`,mtime:_.mtimeMs},frontmatter:v.frontmatter,body:h.body});}return g}catch(l){throw await Promise.all(d.map(f=>fd.promises.unlink(f).catch(()=>{}))),l}finally{await Promise.all(c.map(l=>fd.promises.unlink(l).catch(()=>{})));}})}async function yh(t,e){let[n]=await hc(t,[ph(e)]);if(!n)throw new oe("Failed to create WI");return n}async function _h(t,e){return {created:await hc(t,gh(e))}}u();var wh=new Set(["draft","approved","in-progress"]);function kh(t,e){let n=e.batch.filter(Boolean);if(n.length===0)return {done:true};let r=new Set(e.exclude??[]),o=new Set(n),i=new Map(t.filter(f=>o.has(f.wi_id)).map(f=>[f.wi_id,f])),s=n.filter(f=>{let g=i.get(f);return g&&g.status!=="done"});if(s.length===0)return {done:true};for(let f of s){let g=i.get(f);if(g)for(let m of g.depends_on??[]){if(!o.has(m))continue;if(i.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 s)a.set(f,new Set),d.set(f,0);for(let f of s){let g=i.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 c=s.filter(f=>(d.get(f)??0)===0),l=[];for(let f=0;f<c.length;f++){let g=c[f];l.push(g);for(let m of a.get(g)??[]){let k=(d.get(m)??0)-1;d.set(m,k),k===0&&c.push(m);}}if(l.length!==s.length)return {cycle:s.filter(f=>(d.get(f)??0)>0)};for(let f of n){if(!s.includes(f)||r.has(f))continue;let g=i.get(f);if(!g||!wh.has(g.status))continue;if(!(g.depends_on??[]).some(k=>{if(!o.has(k))return false;let h=i.get(k);return h?h.status!=="done":false}))return {pick:f}}return {done:true}}u();u();var _c=3e3,wc=Symbol("local-server-probe-timeout");async function kc(t,e={}){let n=Date.now(),r=`${t.replace(/\/+$/,"")}/models`,o=vh(e.timeoutMs),i=e.fetch??globalThis.fetch;if(typeof i!="function")return mr("network_error",n);try{let s=await Eh(o,async d=>{let c=await i(r,{method:"GET",signal:d});if(!c.ok)return {kind:"http_error"};try{return {kind:"payload",value:await c.json()}}catch{return {kind:"invalid_json"}}});if(s.kind==="http_error")return mr("http_error",n);if(s.kind==="invalid_json")return mr("invalid_json",n);let a=bh(s.value);return a===void 0?mr("invalid_envelope",n):{ok:!0,models:a,latencyMs:vc(n)}}catch(s){return mr(s===wc?"timeout":"network_error",n)}}function vh(t){return t!==void 0&&Number.isFinite(t)&&t>0?t:3e3}function mr(t,e){return {ok:false,models:[],latencyMs:vc(e),reason:t}}function vc(t){return Math.max(0,Date.now()-t)}function bh(t){if(!yc(t)||!Array.isArray(t.data))return;let e=new Set,n=[];for(let r of t.data){if(!yc(r)||typeof r.id!="string")return;let o=r.id.trim();o.length===0||e.has(o)||(e.add(o),n.push({id:o}));}return n}function yc(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Eh(t,e){let n=new AbortController;return new Promise((r,o)=>{let i=setTimeout(()=>{n.abort(),o(wc);},t);Promise.resolve().then(()=>e(n.signal)).then(s=>{clearTimeout(i),r(s);},s=>{clearTimeout(i),o(s);});})}Xo();Er();u();Zt();var Rh="https://api.crewx.dev/v1/models",Th=3600*1e3,bc=0;async function xh(t){let e=t?.ttlMs??Th,n=Date.now();if(!(n-bc<e)){bc=n;try{let r=await fetch(t?.endpoint??Rh);if(!r.ok)return;let o=await r.json();if(!o?.models||typeof o.models!="object")return;let i={};for(let[s,a]of Object.entries(o.models))a!=null&&(i[s]={input:a.input,cachedInput:a.cachedInput,output:a.output});Ls(i);}catch{}}}u();Ae();Zt();Co();var Ah="https://api.crewx.dev/v1/models",Ih=900*1e3,Ec=0;function at(t){return t!=null&&typeof t=="object"&&!Array.isArray(t)}function Sh(t){return typeof t=="number"&&Number.isInteger(t)&&t>0}function Ph(t){return typeof t=="string"&&Cs.includes(t)}function Ch(t){if(t===void 0)return [];if(!Array.isArray(t))return;let e=new Set,n=[];for(let r of t){if(!at(r)||typeof r.key!="string"||r.key.trim().length===0)return;let o=r.key.trim();if(e.has(o))return;if(e.add(o),r.type==="boolean"){n.push({key:o,type:"boolean"});continue}if(r.type!=="enum"||!Array.isArray(r.values)||r.values.length===0||r.values.some(i=>typeof i!="string"||i.length===0)||new Set(r.values).size!==r.values.length)return;n.push({key:o,type:"enum",values:[...r.values]});}return n}function Oh(t,e){if(t===void 0)return;if(!at(t))return null;let n=new Map(e.map(o=>[o.key,o])),r={};for(let[o,i]of Object.entries(t)){let s=n.get(o);if(s){if(s.type==="boolean"&&typeof i!="boolean"||s.type==="enum"&&(typeof i!="string"||!s.values.includes(i)))return null;r[o]=i;}}return r}function Nh(t){if(!at(t))return {};let e={};for(let[n,r]of Object.entries(t)){if(!at(r))continue;let o=r.input,i=r.output;typeof o!="number"||!Number.isFinite(o)||o<=0||typeof i!="number"||!Number.isFinite(i)||i<=0||(e[n]={inputPerMillionTokensUsd:o,outputPerMillionTokensUsd:i});}return e}function Rc(t,e){if(!at(t)||typeof t.mode!="string"||t.mode.length===0||typeof t.effort!="string"||t.effort.length===0)return;let n=Oh(t.providerOptions,e);if(n!==null)return {mode:t.mode,effort:t.effort,...n!==void 0?{providerOptions:n}:{}}}function Dh(t,e){let n=t.modelOverrides[e]?.effort;return Array.isArray(n)&&n.every(r=>typeof r=="string")?n:t.effort}function Lh(t,e){if(!at(t)||t.version!==1||!at(t.providers))return {};let n={};for(let[r,o]of Object.entries(t.providers)){if(!/^cli\/[^/]+$/.test(r)||!at(o))continue;let i=e[r.slice(4)];if(!i||typeof o.model!="string"||o.model.length===0||!i.models.some(f=>f.id===o.model))continue;let s=i.providerOptions??[],a=Rc(o.query,s),d=Rc(o.execute,s);if(!a||!d)continue;let c=new Set(i.modes.map(f=>f.id));if(!c.has(a.mode)||!c.has(d.mode))continue;let l=Dh(i,o.model);!l.includes(a.effort)||!l.includes(d.effort)||(n[r]={model:o.model,query:a,execute:d});}return n}async function Mh(t){let e=t?.ttlMs??Ih,n=Date.now();if(!(n-Ec<e)){Ec=n;try{let r=await fetch(t?.endpoint??Ah);if(!r.ok){xn({});return}let o=await r.json();if(!o?.providers||typeof o.providers!="object"){xn({});return}let i={};for(let[s,a]of Object.entries(o.providers)){let d=Array.isArray(a);if(!d&&!at(a))continue;let c=d?[]:Ch(a.providerOptions);if(c===void 0)continue;let l=d?a:Array.isArray(a.models)?a.models:[],f=d?[]:Array.isArray(a.modes)?a.modes:[],g=d?[]:Array.isArray(a.effort)?a.effort:[],m=d||!at(a.modelOverrides)?{}:a.modelOverrides,k=l.filter(h=>h!=null&&typeof h.id=="string").map(h=>({id:h.id,name:h.name??h.id,...h.description!=null?{description:h.description}:{},...Sh(h.contextWindowTokens)?{contextWindowTokens:h.contextWindowTokens}:{},...Ph(h.tier)?{tier:h.tier}:{},...h.recommended===!0?{recommended:!0}:{}}));i[s]={models:k,modes:f.filter(h=>h!=null&&typeof h.id=="string").map(h=>({id:h.id,name:h.name??h.id,...h.description!=null?{description:h.description}:{}})),effort:g.filter(h=>typeof h=="string"),modelOverrides:m,providerOptions:c};}Mo(i),Ms(Nh(o.models)),xn(Lh(o.defaults,i));}catch{xn({});}}}u();function Uh(t,e){let n=t.skills?.include;if(n===void 0)return [...e];if(n.length===0)return [];let r=new Set(n);return e.filter(o=>r.has(o))}u();var ms=["codex","claude","grok","opencode","antigravity","copilot"];function jh(t){let e=t.indexOf("/");return e===-1?t:t.slice(e+1)}function hs(t){let e=jh(t),n=ms.indexOf(e);return n===-1?ms.length:n}function hr(t,e){return hs(t)-hs(e)}var $h=new Set(["claude","copilot","codex","grok","opencode"]);function Bh(t){if(!t)return "";if(t.startsWith("acp/")){let e=t.slice(4);if($h.has(e))return `cli/${e}`}return t}Ae();Xe();Xi();Yi();u();Qi();Et();u();_o();Eo();Ae();var Fh="model",qh="mode",Hh="thought_level";function ys(t){if(t.length===0)return [];if(t[0]?.group!=null){let e=[];for(let n of t)for(let r of n.options??[])e.push(r);return e}return t}function Wh(t,e){let n=new Map;for(let r of [...t,...e])n.has(r.id)||n.set(r.id,r);return Array.from(n.values())}function zh(t,e,n,r){let o=n.agentInfo?.name,i=e??o??t,s=r.configOptions??[],d=(r.modes?.availableModes??[]).map(_=>({id:_.id,name:_.name,..._.description!=null?{description:_.description}:{}})),c=[];for(let _ of s)if(_.category?.trim().toLowerCase()===qh&&_.options!=null)for(let w of ys(_.options))w.value!=null&&c.push({id:w.value,name:w.name??w.value});let l=Wh(d,c),f=[];for(let _ of s)if(_.category?.trim().toLowerCase()===Hh&&_.type==="select")for(let w of ys(_.options??[]))w.value!=null&&f.push(w.value);if(t==="claude"){let _=Pn(In()),w=Tc(n);return xc(t,{models:_,modes:l,availableModelsCount:0,configModelsCount:0,skipModelWarn:true}),{id:`acp/${t}`,name:i,modes:l,effort:f,models:_,capabilities:w}}let m=(r.models?.availableModels??[]).map(_=>({id:_.modelId})),k=[];for(let _ of s)if(_.category?.trim().toLowerCase()===Fh&&_.options!=null)for(let w of ys(_.options))w.value!=null&&k.push({id:w.value,...w.name!=null?{name:w.name}:{}});let h=Pn(Sn(m,k));xc(t,{models:h,modes:l,availableModelsCount:m.length,configModelsCount:k.length,skipModelWarn:false});let v=Tc(n);return {id:`acp/${t}`,name:i,modes:l,effort:f,models:h,capabilities:v}}function Tc(t){let e=t.agentCapabilities??{};return {loadSession:e.loadSession??false,image:e.promptCapabilities?.image??false,audio:e.promptCapabilities?.audio??false,mcp:e.mcpCapabilities!=null}}function xc(t,e){!e.skipModelWarn&&e.models.length===0&&console.warn(`[acp] ${t} meta: models empty (availableModels=${e.availableModelsCount}, configOptions[model]=${e.configModelsCount})`),e.modes.length===0&&console.warn(`[acp] ${t} meta: modes empty`);}async function Ac(t){let e=exports.ACP_ADAPTERS[t];if(!e)return null;let n=e.meta?.displayName,r=new exports.AcpConnection({spawn:e.spawn,cwd:process.cwd()});try{await r.connect(e.clientInfo);let o=r.initResponse;if(!o)return null;let i=e.buildSessionParams({cwd:process.cwd()}),s=await r.newSessionRaw(i);return zh(t,n,o,s)}catch(o){return console.warn(`[acp] ${t} meta query failed: ${o instanceof Error?o.message:String(o)}`),null}finally{await r.dispose();}}async function Gh(){let t=Object.keys(exports.ACP_ADAPTERS),e=await Promise.allSettled(t.map(r=>Ac(r))),n=[];for(let r of e)r.status==="fulfilled"&&r.value!==null&&n.push(r.value);return n.sort((r,o)=>hr(r.id,o.id))}_o();Zi();Eo();os();Mr();bt();u();bt();Ae();function Kh(t){return t.charAt(0).toUpperCase()+t.slice(1)}async function Ic(){return new Promise(t=>{child_process.execFile("opencode",["models"],{timeout:5e3,maxBuffer:1048576},(n,r)=>{if(n){t([]);return}let o=r.split(`
|
|
405
|
-
`).map(i=>i.trim()).filter(i=>i.length>0).map(i=>({id:i}));t(o);}).on("error",()=>t([]));})}function
|
|
428
|
+
`,frontmatter:o}}async function bc(t,e){let n=X.join(t,"docs","wi");return await kd.promises.mkdir(n,{recursive:true}),hh(n,async()=>{let{compact:r,iso:o}=uh(new Date),i=`WI-${r}-`,s=await yh(n),a=_h(s,i),d=[],c=[];try{let l=[];for(let m of e){let h;for(let v=0;v<999;v++,a++){let _=`WI-${r}-${String(a).padStart(3,"0")}`;if(wh(s,_))continue;let w=await kh(n,_);if(!w.claimed)continue;let T=ph(m.title),x=T?`${_}-${T}.md`:`${_}.md`,U=X.resolve(n,x);if(fh(n,U),await kd.promises.access(U).then(()=>!0,()=>!1)){await kd.promises.unlink(w.lockPath).catch(()=>{});continue}c.push(w.lockPath),h={item:m,wiId:_,filename:x,fullPath:U};break}if(!h)throw new oe("Failed to allocate a unique WI id");l.push(h),s.push(h.filename);}let f=new Map;for(let m of l)m.item.key&&f.set(m.item.key,m.wiId);let g=[];for(let m of l){let k=Rh(m.item.depends_on,f),h={...m.item,depends_on:k},v=Th(h,m.wiId,o);await kd.promises.writeFile(m.fullPath,v.raw,{encoding:"utf8",flag:"wx"}),d.push(m.fullPath);let _=await kd.promises.stat(m.fullPath);g.push({summary:{wi_id:m.wiId,title:h.title,status:"draft",priority:"normal",assignee:h.assignee,depends_on:k,blocks:[],date:o,board:h.board&&h.board!==mn?h.board:void 0,source:h.source,screens:[],path:`docs/wi/${m.filename}`,mtime:_.mtimeMs},frontmatter:v.frontmatter,body:h.body});}return g}catch(l){throw await Promise.all(d.map(f=>kd.promises.unlink(f).catch(()=>{}))),l}finally{await Promise.all(c.map(l=>kd.promises.unlink(l).catch(()=>{})));}})}async function xh(t,e){let[n]=await bc(t,[vh(e)]);if(!n)throw new oe("Failed to create WI");return n}async function Ah(t,e){return {created:await bc(t,bh(e))}}u();var Ih=new Set(["draft","approved","in-progress"]);function Sh(t,e){let n=e.batch.filter(Boolean);if(n.length===0)return {done:true};let r=new Set(e.exclude??[]),o=new Set(n),i=new Map(t.filter(f=>o.has(f.wi_id)).map(f=>[f.wi_id,f])),s=n.filter(f=>{let g=i.get(f);return g&&g.status!=="done"});if(s.length===0)return {done:true};for(let f of s){let g=i.get(f);if(g)for(let m of g.depends_on??[]){if(!o.has(m))continue;if(i.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 s)a.set(f,new Set),d.set(f,0);for(let f of s){let g=i.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 c=s.filter(f=>(d.get(f)??0)===0),l=[];for(let f=0;f<c.length;f++){let g=c[f];l.push(g);for(let m of a.get(g)??[]){let k=(d.get(m)??0)-1;d.set(m,k),k===0&&c.push(m);}}if(l.length!==s.length)return {cycle:s.filter(f=>(d.get(f)??0)>0)};for(let f of n){if(!s.includes(f)||r.has(f))continue;let g=i.get(f);if(!g||!Ih.has(g.status))continue;if(!(g.depends_on??[]).some(k=>{if(!o.has(k))return false;let h=i.get(k);return h?h.status!=="done":false}))return {pick:f}}return {done:true}}u();u();var Tc=3e3,xc=Symbol("local-server-probe-timeout");async function Ac(t,e={}){let n=Date.now(),r=`${t.replace(/\/+$/,"")}/models`,o=Ph(e.timeoutMs),i=e.fetch??globalThis.fetch;if(typeof i!="function")return _r("network_error",n);try{let s=await Oh(o,async d=>{let c=await i(r,{method:"GET",signal:d});if(!c.ok)return {kind:"http_error"};try{return {kind:"payload",value:await c.json()}}catch{return {kind:"invalid_json"}}});if(s.kind==="http_error")return _r("http_error",n);if(s.kind==="invalid_json")return _r("invalid_json",n);let a=Ch(s.value);return a===void 0?_r("invalid_envelope",n):{ok:!0,models:a,latencyMs:Ic(n)}}catch(s){return _r(s===xc?"timeout":"network_error",n)}}function Ph(t){return t!==void 0&&Number.isFinite(t)&&t>0?t:3e3}function _r(t,e){return {ok:false,models:[],latencyMs:Ic(e),reason:t}}function Ic(t){return Math.max(0,Date.now()-t)}function Ch(t){if(!Rc(t)||!Array.isArray(t.data))return;let e=new Set,n=[];for(let r of t.data){if(!Rc(r)||typeof r.id!="string")return;let o=r.id.trim();o.length===0||e.has(o)||(e.add(o),n.push({id:o}));}return n}function Rc(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Oh(t,e){let n=new AbortController;return new Promise((r,o)=>{let i=setTimeout(()=>{n.abort(),o(xc);},t);Promise.resolve().then(()=>e(n.signal)).then(s=>{clearTimeout(i),r(s);},s=>{clearTimeout(i),o(s);});})}Zo();xn();u();en();var Nh="https://api.crewx.dev/v1/models",Dh=3600*1e3,Sc=0;async function Lh(t){let e=t?.ttlMs??Dh,n=Date.now();if(!(n-Sc<e)){Sc=n;try{let r=await fetch(t?.endpoint??Nh);if(!r.ok)return;let o=await r.json();if(!o?.models||typeof o.models!="object")return;let i={};for(let[s,a]of Object.entries(o.models))a!=null&&(i[s]={input:a.input,cachedInput:a.cachedInput,output:a.output});Bs(i);}catch{}}}u();Ae();en();No();var Mh="https://api.crewx.dev/v1/models",Uh=900*1e3,Pc=0;function dt(t){return t!=null&&typeof t=="object"&&!Array.isArray(t)}function jh(t){return typeof t=="number"&&Number.isInteger(t)&&t>0}function $h(t){return typeof t=="string"&&Ms.includes(t)}function Bh(t){if(t===void 0)return [];if(!Array.isArray(t))return;let e=new Set,n=[];for(let r of t){if(!dt(r)||typeof r.key!="string"||r.key.trim().length===0)return;let o=r.key.trim();if(e.has(o))return;if(e.add(o),r.type==="boolean"){n.push({key:o,type:"boolean"});continue}if(r.type!=="enum"||!Array.isArray(r.values)||r.values.length===0||r.values.some(i=>typeof i!="string"||i.length===0)||new Set(r.values).size!==r.values.length)return;n.push({key:o,type:"enum",values:[...r.values]});}return n}function Fh(t,e){if(t===void 0)return;if(!dt(t))return null;let n=new Map(e.map(o=>[o.key,o])),r={};for(let[o,i]of Object.entries(t)){let s=n.get(o);if(s){if(s.type==="boolean"&&typeof i!="boolean"||s.type==="enum"&&(typeof i!="string"||!s.values.includes(i)))return null;r[o]=i;}}return r}function qh(t){if(!dt(t))return {};let e={};for(let[n,r]of Object.entries(t)){if(!dt(r))continue;let o=r.input,i=r.output;typeof o!="number"||!Number.isFinite(o)||o<=0||typeof i!="number"||!Number.isFinite(i)||i<=0||(e[n]={inputPerMillionTokensUsd:o,outputPerMillionTokensUsd:i});}return e}function Cc(t,e){if(!dt(t)||typeof t.mode!="string"||t.mode.length===0||typeof t.effort!="string"||t.effort.length===0)return;let n=Fh(t.providerOptions,e);if(n!==null)return {mode:t.mode,effort:t.effort,...n!==void 0?{providerOptions:n}:{}}}function Hh(t,e){let n=t.modelOverrides[e]?.effort;return Array.isArray(n)&&n.every(r=>typeof r=="string")?n:t.effort}function Wh(t,e){if(!dt(t)||t.version!==1||!dt(t.providers))return {};let n={};for(let[r,o]of Object.entries(t.providers)){if(!/^cli\/[^/]+$/.test(r)||!dt(o))continue;let i=e[r.slice(4)];if(!i||typeof o.model!="string"||o.model.length===0||!i.models.some(f=>f.id===o.model))continue;let s=i.providerOptions??[],a=Cc(o.query,s),d=Cc(o.execute,s);if(!a||!d)continue;let c=new Set(i.modes.map(f=>f.id));if(!c.has(a.mode)||!c.has(d.mode))continue;let l=Hh(i,o.model);!l.includes(a.effort)||!l.includes(d.effort)||(n[r]={model:o.model,query:a,execute:d});}return n}async function zh(t){let e=t?.ttlMs??Uh,n=Date.now();if(!(n-Pc<e)){Pc=n;try{let r=await fetch(t?.endpoint??Mh);if(!r.ok){An({});return}let o=await r.json();if(!o?.providers||typeof o.providers!="object"){An({});return}let i={};for(let[s,a]of Object.entries(o.providers)){let d=Array.isArray(a);if(!d&&!dt(a))continue;let c=d?[]:Bh(a.providerOptions);if(c===void 0)continue;let l=d?a:Array.isArray(a.models)?a.models:[],f=d?[]:Array.isArray(a.modes)?a.modes:[],g=d?[]:Array.isArray(a.effort)?a.effort:[],m=d||!dt(a.modelOverrides)?{}:a.modelOverrides,k=l.filter(h=>h!=null&&typeof h.id=="string").map(h=>({id:h.id,name:h.name??h.id,...h.description!=null?{description:h.description}:{},...jh(h.contextWindowTokens)?{contextWindowTokens:h.contextWindowTokens}:{},...$h(h.tier)?{tier:h.tier}:{},...h.recommended===!0?{recommended:!0}:{}}));i[s]={models:k,modes:f.filter(h=>h!=null&&typeof h.id=="string").map(h=>({id:h.id,name:h.name??h.id,...h.description!=null?{description:h.description}:{}})),effort:g.filter(h=>typeof h=="string"),modelOverrides:m,providerOptions:c};}$o(i),Fs(qh(o.models)),An(Wh(o.defaults,i));}catch{An({});}}}u();function Gh(t,e){let n=t.skills?.include;if(n===void 0)return [...e];if(n.length===0)return [];let r=new Set(n);return e.filter(o=>r.has(o))}u();var ks=["codex","claude","grok","opencode","antigravity","copilot"];function Vh(t){let e=t.indexOf("/");return e===-1?t:t.slice(e+1)}function vs(t){let e=Vh(t),n=ks.indexOf(e);return n===-1?ks.length:n}function wr(t,e){return vs(t)-vs(e)}var Kh=new Set(["claude","copilot","codex","grok","opencode"]);function Jh(t){if(!t)return "";if(t.startsWith("acp/")){let e=t.slice(4);if(Kh.has(e))return `cli/${e}`}return t}Ae();Xe();ts();ns();u();rs();It();u();ko();To();Ae();var Yh="model",Xh="mode",Qh="thought_level";function Es(t){if(t.length===0)return [];if(t[0]?.group!=null){let e=[];for(let n of t)for(let r of n.options??[])e.push(r);return e}return t}function Zh(t,e){let n=new Map;for(let r of [...t,...e])n.has(r.id)||n.set(r.id,r);return Array.from(n.values())}function ey(t,e,n,r){let o=n.agentInfo?.name,i=e??o??t,s=r.configOptions??[],d=(r.modes?.availableModes??[]).map(_=>({id:_.id,name:_.name,..._.description!=null?{description:_.description}:{}})),c=[];for(let _ of s)if(_.category?.trim().toLowerCase()===Xh&&_.options!=null)for(let w of Es(_.options))w.value!=null&&c.push({id:w.value,name:w.name??w.value});let l=Zh(d,c),f=[];for(let _ of s)if(_.category?.trim().toLowerCase()===Qh&&_.type==="select")for(let w of Es(_.options??[]))w.value!=null&&f.push(w.value);if(t==="claude"){let _=Cn(Sn()),w=Oc(n);return Nc(t,{models:_,modes:l,availableModelsCount:0,configModelsCount:0,skipModelWarn:true}),{id:`acp/${t}`,name:i,modes:l,effort:f,models:_,capabilities:w}}let m=(r.models?.availableModels??[]).map(_=>({id:_.modelId})),k=[];for(let _ of s)if(_.category?.trim().toLowerCase()===Yh&&_.options!=null)for(let w of Es(_.options))w.value!=null&&k.push({id:w.value,...w.name!=null?{name:w.name}:{}});let h=Cn(Pn(m,k));Nc(t,{models:h,modes:l,availableModelsCount:m.length,configModelsCount:k.length,skipModelWarn:false});let v=Oc(n);return {id:`acp/${t}`,name:i,modes:l,effort:f,models:h,capabilities:v}}function Oc(t){let e=t.agentCapabilities??{};return {loadSession:e.loadSession??false,image:e.promptCapabilities?.image??false,audio:e.promptCapabilities?.audio??false,mcp:e.mcpCapabilities!=null}}function Nc(t,e){!e.skipModelWarn&&e.models.length===0&&console.warn(`[acp] ${t} meta: models empty (availableModels=${e.availableModelsCount}, configOptions[model]=${e.configModelsCount})`),e.modes.length===0&&console.warn(`[acp] ${t} meta: modes empty`);}async function Dc(t){let e=exports.ACP_ADAPTERS[t];if(!e)return null;let n=e.meta?.displayName,r=new exports.AcpConnection({spawn:e.spawn,cwd:process.cwd()});try{await r.connect(e.clientInfo);let o=r.initResponse;if(!o)return null;let i=e.buildSessionParams({cwd:process.cwd()}),s=await r.newSessionRaw(i);return ey(t,n,o,s)}catch(o){return console.warn(`[acp] ${t} meta query failed: ${o instanceof Error?o.message:String(o)}`),null}finally{await r.dispose();}}async function ty(){let t=Object.keys(exports.ACP_ADAPTERS),e=await Promise.allSettled(t.map(r=>Dc(r))),n=[];for(let r of e)r.status==="fulfilled"&&r.value!==null&&n.push(r.value);return n.sort((r,o)=>wr(r.id,o.id))}ko();os();To();cs();$r();At();u();At();Ae();function ry(t){return t.charAt(0).toUpperCase()+t.slice(1)}async function Lc(){return new Promise(t=>{child_process.execFile("opencode",["models"],{timeout:5e3,maxBuffer:1048576},(n,r)=>{if(n){t([]);return}let o=r.split(`
|
|
429
|
+
`).map(i=>i.trim()).filter(i=>i.length>0).map(i=>({id:i}));t(o);}).on("error",()=>t([]));})}function oy(t,e,n){if(!e.meta)return null;let r=e.meta.capabilities??{},o=Ue(t),i=o.length>0?o:e.meta.models??[],s=n!==void 0?Pn(n,i):i,a=xr(`cli/${t}`),d=je(t).providerOptions??[];return {id:`cli/${t}`,name:e.meta.displayName??ry(t),modes:In(t),effort:ct(t),models:Cn(s),modelOverrides:Ar(t),...d.length>0?{providerOptions:d}:{},...a!==void 0?{defaults:a}:{},capabilities:{loadSession:r.loadSession??false,resume:r.resume??false,image:r.image??false,audio:r.audio??false,mcp:r.mcp??false}}}async function iy(t={}){let e=t.includeOpencodeRuntimeModels?await Lc():void 0,n=[];for(let[r,o]of Object.entries(exports.BUILTIN_ADAPTERS)){let s=oy(r,o,r==="opencode"?e:void 0);s&&n.push(s);}return n.sort((r,o)=>wr(r.id,o.id))}u();var bs=0;function sy(t){let e=t.meta?.taskId,n=e?` taskId=${e}`:"";if(t.ok)return `Task completed:${n}
|
|
406
430
|
|
|
407
431
|
${t.data}`;let r=t.error?.message??"Unknown error";return `Task failed:${n}
|
|
408
|
-
Error: ${r}`}function
|
|
432
|
+
Error: ${r}`}function ay(t){let e=Array.from(t.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 n=>{if(bs>=3)return "Error: Maximum delegation depth (3) reached. Cannot delegate further.";let r=n.agent,o=n.message,i=n.mode??"query";if(!e.includes(r))return `Error: Unknown agent "${r}". Available: ${e.join(", ")}`;bs++;try{let s=i==="execute"?await t.execute(r,o):await t.query(r,o);return sy(s)}finally{bs--;}}}}u();var Mc=typeof process<"u"?process.env:{};function dy(){return Mc.CREWX_CLI||"npx crewx"}function cy(){return Mc.CREWX_WORKSPACE||(typeof process<"u"?process.cwd():"/")}u();u();u();var ve="[REDACTED]",Uc="[PATH]";function Rs(t){if(typeof t!="string")return;let e=t.trim();if(e)return e=e.replace(/^\s*at\s+[^\r\n]+(?:\r?\n|$)/gim,""),e=e.replace(/(^|[\r\n])\s*(?:authorization|proxy-authorization|x-api-key|x-goog-api-key|x-auth-token|cookie|set-cookie)\s*:\s*[^\r\n]*/gim,`$1[HTTP HEADER ${ve}]`),e=uy(e),e=e.replace(/\b(?:Bearer|Basic)\s+[A-Za-z0-9._~+\-/]+=*/gi,`${ve}`),e=e.replace(/\bsk-[A-Za-z0-9][A-Za-z0-9_-]*/g,ve),e=e.replace(/\bghp_[A-Za-z0-9][A-Za-z0-9_-]*/g,ve),e=e.replace(/\bxoxb-[A-Za-z0-9-]+/g,ve),e=e.replace(/\bxoxp-[A-Za-z0-9-]+/g,ve),e=e.replace(/\bAKIA[0-9A-Z]{12,}\b/g,ve),e=e.replace(/\bgithub_pat_[A-Za-z0-9_]+/g,ve),e=e.replace(/\bgho_[A-Za-z0-9_]+/g,ve),e=e.replace(/\bAIza[A-Za-z0-9_-]{20,}\b/g,ve),e=e.replace(/\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g,ve),e=e.replace(/\b(?:authorization|api[_ -]?key|access[_ -]?token|auth[_ -]?token|refresh[_ -]?token|token|secret|password)\s*([:=])\s*["']?[^\s,;&"']+/gi,(n,r)=>`${ve}${r}${ve}`),e=e.replace(/([?&](?:api[_-]?key|access[_-]?token|token)=)[^&\s]+/gi,`$1${ve}`),e=e.replace(/(?:\/(?:Users|home|private|var\/folders|tmp|workspace|workspaces|Volumes|opt|etc|srv|Applications)\/[^\s"'`),;]+)/g,Uc),e=e.replace(/\b[A-Z]:\\(?:Users|home|Windows|Program Files|workspace|workspaces)\\[^\s"'`),;]*/gi,Uc),e=e.replace(/[\r\n]{3,}/g,`
|
|
409
433
|
|
|
410
|
-
`).trim(),
|
|
434
|
+
`).trim(),ly(e,1024)||void 0}function ly(t,e){let n=new TextEncoder;if(n.encode(t).byteLength<=e)return t;let r="",o=0;for(let i of t){let s=n.encode(i).byteLength;if(o+s>e)break;r+=i,o+=s;}return r}function uy(t){let e=/\b(?:request|response|http)?\s*body\s*[:=]\s*/gim,n="",r=0,o;for(;(o=e.exec(t))!==null;){if(o.index<r)continue;let i=o.index+o[0].length,s=py(t,i),a=s>=0?s:t.indexOf(`
|
|
411
435
|
`,i)>=0?t.indexOf(`
|
|
412
|
-
`,i):t.length;n+=t.slice(r,o.index),n+=`[HTTP BODY ${ve}]`,r=a;}return n+t.slice(r)}function ry(t,e){let n=t[e];if(n==='"'||n==="'")return oy(t,e,n);if(n!=="{"&&n!=="[")return -1;let r=[],o,i=false;for(let s=e;s<t.length;s+=1){let a=t[s];if(o){i?i=false:a==="\\"?i=true:a===o&&(o=void 0);continue}if(a==='"'||a==="'"){o=a;continue}if(a==="{"||a==="["){r.push(a);continue}if(a!=="}"&&a!=="]")continue;let d=r.pop();if(a==="}"&&d!=="{"||a==="]"&&d!=="[")return -1;if(r.length===0)return s+1}return -1}function oy(t,e,n){let r=false;for(let o=e+1;o<t.length;o+=1){let i=t[o];if(r)r=false;else if(i==="\\")r=true;else if(i===n)return o+1}return -1}var iy=new Set(["USAGE_LIMITED","CONTEXT_WINDOW_EXCEEDED","INPUT_TOO_LARGE","MODEL_NOT_SUPPORTED","MODEL_AT_CAPACITY","AUTH_REQUIRED","CLI_NOT_AVAILABLE","CLI_UPDATE_REQUIRED","AGENT_NOT_FOUND","PERMISSION_OR_TRUST","TIMEOUT_OR_STUCK","NETWORK_OR_PROVIDER_TRANSIENT","PROVIDER_CONFIGURATION","PROCESS_FAILED"]),sy={QUOTA_EXHAUSTED:"USAGE_LIMITED",RATE_LIMITED:"USAGE_LIMITED",AUTH_REQUIRED:"AUTH_REQUIRED",TIMEOUT_IDLE:"TIMEOUT_OR_STUCK",TIMEOUT_TOTAL:"TIMEOUT_OR_STUCK",PROVIDER_NOT_FOUND:"PROVIDER_CONFIGURATION",INVALID_PROVIDER_FORMAT:"PROVIDER_CONFIGURATION",PROVIDER_CRASHED:"PROCESS_FAILED",EMPTY_OUTPUT:"PROCESS_FAILED"},ay=[{code:"USAGE_LIMITED",pattern:/(?:rate[ _-]?limit|quota|usage[ /_-]?limit|usage exhausted|too many requests|429\b)/i},{code:"CONTEXT_WINDOW_EXCEEDED",pattern:/context (?:window|length)|maximum context|context[_ -]?window[_ -]?exceeded|too many tokens/i},{code:"INPUT_TOO_LARGE",pattern:/input[_ -]?(?:is[_ -]?)?too[_ -]?large|prompt (?:is )?too (?:large|long)|request[_ -]?(?:is[_ -]?)?too[_ -]?large|payload[_ -]?(?:is[_ -]?)?too[_ -]?large|maximum input/i},{code:"MODEL_AT_CAPACITY",pattern:/(?:model|service|provider).*(?:at capacity|overloaded|temporarily busy)|at capacity|overloaded/i},{code:"MODEL_NOT_SUPPORTED",pattern:/(?:model|invalid_request_error).*(?:not[ _-]?supported|unsupported|does[ _-]?not[ _-]?exist|not[ _-]?found|invalid)|model[_-]?not[_-]?(?:found|supported)/i},{code:"AUTH_REQUIRED",pattern:/(?:401\b|unauthori[sz]ed|not logged in|login required|sign[ -]?in required|api key (?:is )?(?:missing|invalid|required)|authentication required)/i},{code:"CLI_UPDATE_REQUIRED",pattern:/(?:requires? a newer version|update (?:your )?cli|cli version.*(?:old|outdated|unsupported)|version mismatch)/i},{code:"CLI_NOT_AVAILABLE",pattern:/(?:ENOENT|command not found|executable.*not found|cli.*(?:not installed|unavailable)|is .* installed\?)/i},{code:"AGENT_NOT_FOUND",pattern:/agent[_ -]?not[_ -]?found|unknown agent/i},{code:"PERMISSION_OR_TRUST",pattern:/(?:permission denied|operation not permitted|workspace trust|not trusted|access denied|EACCES|EPERM)/i},{code:"TIMEOUT_OR_STUCK",pattern:/(?:timeout|timed out|took too long|stuck|idle timeout|ETIMEDOUT)/i},{code:"NETWORK_OR_PROVIDER_TRANSIENT",pattern:/(?:network (?:unreachable|error)|connection (?:reset|refused|closed)|ECONN(?:RESET|REFUSED|ABORTED)|service unavailable|upstream.*(?:5\d\d|error)|provider.*(?:5\d\d|unavailable|down)|\b5\d\d\b)/i},{code:"PROVIDER_CONFIGURATION",pattern:/(?:invalid provider|unsupported provider|provider namespace|provider configuration|provider config|missing provider)/i}];function dy(t){try{if(!Ct(t)||t.status!=="failed")return ks();let e=cy(t.error);if(Es(e.message))return ks();let n=Le(t.providerId)??e.provider??null,r=uy(t.logs),o=Oc(e.code);if(o)return yr(o,n,e.message,e);let i=To(e.providerCode)??To(e.code),s=i?bs(i,e.message):void 0;if(s)return yr(s,n,e.message,e,i);let a=py(r);if(!ly(e)&&a&&(a.type==="user_stop"||Es(a.message)))return ks();if(a){let c=fy(a.code,a.providerCode,a.message);if(c)return yr(c,n,a.message??e.message,e,a.providerCode??a.code,a,a.structuredFailure?"terminal":"envelope")}let d=gy(e.message,r);return d?yr(d.code,n,d.message,e,d.terminal?.providerCode??d.terminal?.code,d.terminal,d.terminal?.structuredFailure?"terminal":"envelope"):yr("PROCESS_FAILED",n,e.message,e)}catch{return {errorCode:"PROCESS_FAILED",errorProvider:null}}}function ks(){return {errorCode:null,errorProvider:null}}function yr(t,e,n,r,o,i,s="envelope"){let a={};if(i?.resetAt!==void 0&&(a.resetAt=i.resetAt),r?.model&&(a.model=r.model),i?.type&&(a.upstreamType=i.type),o&&(a.upstreamCode=o),t==="CLI_NOT_AVAILABLE"||t==="CLI_UPDATE_REQUIRED"){let f=e?.startsWith("cli/")?e.slice(4):void 0;f&&(a.cliName=f);}let d=s==="terminal"?n:r?.message,c=s==="terminal"?i?.structuredFailure?d:void 0:r?.isEnvelope?d:void 0,l=ws(c);return l&&(a.technicalMessage=l),Object.keys(a).length>0?{errorCode:t,errorProvider:e,errorMeta:a}:{errorCode:t,errorProvider:e}}function cy(t){let e=typeof t=="string"?wn(t):t;return Ct(e)?{isEnvelope:true,code:Le(e.code),providerCode:Le(e.providerCode),message:Le(e.message)??Le(e.error),provider:Le(e.provider)??Le(e.errorProvider),model:Le(e.model)}:{isEnvelope:false,...typeof t=="string"&&t.trim()?{message:t.trim()}:{}}}function wn(t){try{return JSON.parse(t)}catch{return}}function ly(t){return !!(t.code||t.providerCode||t.message)}function uy(t){let e=[];if(typeof t=="string"){let n=wn(t);if(Array.isArray(n))e.push(...n);else for(let r of t.split(/\r?\n/)){let o=wn(r.trim());o!==void 0&&e.push(o);}}else Array.isArray(t)?e.push(...t):Ct(t)&&e.push(t);return e.flatMap(_n)}function _n(t){if(!Ct(t))return [];let e=Le(t.type),n=Le(t.message);if(n&&!e){let o=wn(n);if(Array.isArray(o))return o.flatMap(_n);if(Ct(o))return _n(o);let i=n.split(/\r?\n/).map(s=>wn(s.trim())).filter(s=>Ct(s));return i.length>0?i.flatMap(_n):t.level==="stderr"?[{type:"stderr",message:n,rank:1,structuredFailure:false}]:_n({type:"info",content:n})}if(e==="rate_limit_event"){let o=Cc(t.rate_limit_info);return Le(o?.status)!=="rejected"?[]:[{type:e,code:"RATE_LIMITED",message:_r(o?.message,t.message),resetAt:my(o?.resetsAt),rank:4,structuredFailure:true}]}if(e==="turn.failed"||e==="error"){let o=Cc(t.error),i=_r(o?.message,o?.detail,t.message,t.errorMessage,t.content),s=_r(o?.code,t.code,t.errorCode);return [{type:e,code:s,providerCode:_r(o?.providerCode,t.providerCode),message:i,rank:e==="turn.failed"?3:2,structuredFailure:true}]}if(e==="text"&&typeof t.content=="string"){let o=wn(t.content);if(Ct(o))return _n(o)}let r=_r(t.errorMessage,t.content);return r&&Es(r)?[{type:"user_stop",message:r,rank:1,structuredFailure:false}]:r&&/(?:turn\.failed|type:error)/i.test(r)?[{type:r.match(/turn\.failed/i)?"turn.failed":"error",message:r,rank:3,structuredFailure:false}]:[]}function py(t){return [...t].sort((e,n)=>n.rank-e.rank)[0]}function fy(t,e,n){let r=Oc(t);if(r)return r;if(t){let o=bs(t,n);if(o)return o}if(e){let o=bs(e,n);if(o)return o}return vs(n)}function gy(t,e){let n=vs(t);if(n)return {code:n,message:t};for(let r of [...e].sort((o,i)=>i.rank-o.rank)){let o=vs(r.message);if(o)return {code:o,message:r.message,terminal:r}}}function vs(t){if(!(typeof t!="string"||!t.trim()))return ay.find(e=>e.pattern.test(t))?.code}function bs(t,e){let n=To(t)??t;if(n==="MODEL_UNAVAILABLE")return /(?:capacity|overloaded|busy)/i.test(e??"")?"MODEL_AT_CAPACITY":"MODEL_NOT_SUPPORTED";if(n!=="UNKNOWN")return sy[n]}function Oc(t){let e=To(t);return e&&iy.has(e)?e:void 0}function To(t){return typeof t=="string"&&t.trim()?t.trim().toUpperCase():void 0}function Es(t){return t?/\b(?:stopped|killed|aborted|cancelled|canceled)\s+by\s+user\b/i.test(t)||/사용자에 의해 중지됨/.test(t)||/\b(?:SIGTERM\s+143|143\s+SIGTERM)\b/i.test(t):false}function Ct(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Cc(t){return Ct(t)?t:void 0}function Le(t){return typeof t=="string"&&t.trim()?t.trim():void 0}function my(t){return typeof t=="string"||typeof t=="number"&&Number.isFinite(t)?t:void 0}function _r(...t){return t.map(Le).find(e=>!!e)}u();var hy=/^[a-zA-Z0-9._-]+$/,Rs=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,n){this.validateId(e),this.validateId(n);let r=this.storage.findBox(e,n);return r?this.toBoxResponse(r):null}createBox(e,n){this.validateId(e);let r=this.generateBoxId(),o=new Date().toISOString(),i=this.storage.insertBox(e,{id:r,seq:n.seq,firstTaskId:n.firstTaskId,midTaskId:n.midTaskId,lastTaskId:n.lastTaskId,taskCount:n.taskCount,summary:n.summary??null,sourceTokens:n.sourceTokens,summaryTokens:n.summaryTokens??null,createdAt:o});return this.toBoxResponse(i)}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(!hy.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return Qe("box")}};u();function yy(t,e,n,r,o){let{maxTokens:i,hotzoneRatio:s,warmzoneRatio:a}=r,d=i*s,c=i*a,l=d+c,f=e.getThreadMessages(t),g=[],m=0,k=false,h=[];for(let w=0;w<f.length;w+=2){let T=f[w],x=f[w+1],U=T?.content||"",I=x?.content||"",te=o.countTokens(U+I),S=[];T&&S.push(T),x&&S.push(x),h.push({messages:S,tokens:te});}for(let w=h.length-1;w>=0;w--){let T=h[w];if(m+T.tokens>d){k=true;break}m+=T.tokens,g.unshift(...T.messages);}let v=[],_=0;if(k&&c>0)try{let{boxes:w}=n.listBoxes(t);for(let T=w.length-1;T>=0;T--){let x=w[T],U=x.summaryTokens??x.sourceTokens;if(_+U>c)break;_+=U,v.unshift({boxId:x.id,seq:x.seq,taskCount:x.taskCount,sourceTokens:x.sourceTokens,summary:x.summary,previewFirst:x.previewFirst,previewMid:x.previewMid,previewLast:x.previewLast,createdAt:x.createdAt});}}catch(w){if(w instanceof Error&&!/not found/i.test(w.message))throw w}return {hot:g,warm:v,hotTokens:m,warmTokens:_,hotOverflow:k,totalBudget:l,config:{maxTokens:i,hotzoneRatio:s,warmzoneRatio:a}}}bt();Bt();u();var xo=class extends Error{constructor(n,r){super(`Task ${n} timed out after ${r}ms`);this.taskId=n;this.timeoutMs=r;this.name="ParallelRunnerTimeoutError";}taskId;timeoutMs},kr=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,n={}){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(n),o=Math.max(1,r.maxConcurrency??5),i=r.timeoutMs,s=r.failFast??false,a=r.callbacks,d=r.evaluateTaskSuccess??(()=>true),c=[],l=0,f=0,g=0,m=false,k=0,h=perf_hooks.performance.now(),v=async S=>{a?.onTaskStart&&await a.onTaskStart(S),g+=1;let q=new AbortController,fe={signal:q.signal},Q,se;typeof i=="number"&&Number.isFinite(i)&&i>0&&(se=new Promise((K,W)=>{Q=setTimeout(()=>{let H=new xo(S.id,i);q.abort(H),W(H);},i);}));let j=perf_hooks.performance.now(),F=S.run(fe),B=se?Promise.race([F,se]):F;try{let K=await B,W=perf_hooks.performance.now(),H=W-j,ne=d(K,S),re={taskId:S.id,success:ne,value:K,durationMs:H,startedAt:j,finishedAt:W,metadata:S.metadata,aborted:!1};c.push(re),ne?l+=1:f+=1,a?.onTaskComplete&&await a.onTaskComplete(re),s&&!ne&&(m=!0);}catch(K){let W=perf_hooks.performance.now(),H=W-j,ne=K instanceof Error?K:new Error(String(K)),re={taskId:S.id,success:false,error:ne,durationMs:H,startedAt:j,finishedAt:W,metadata:S.metadata,aborted:q.signal.aborted};c.push(re),f+=1,a?.onError&&await a.onError(S,ne,H),s&&(m=true);}finally{Q&&clearTimeout(Q),se&&F.catch(()=>{});}},_=async()=>{for(;!m;){let S=k;if(S>=e.length)break;k+=1;let q=e[S];if(!q||(await v(q),m))break}},w=Math.min(o,e.length),T=[];for(let S=0;S<w;S++)T.push(_());await Promise.all(T);let U=perf_hooks.performance.now()-h,I=c.length?c.reduce((S,q)=>S+q.durationMs,0)/c.length:0,te=U>0?c.length/(U/1e3):c.length;return this.metrics={totalTasks:e.length,startedTasks:g,completedTasks:c.length,successCount:l,failureCount:f,totalDurationMs:U,averageDurationMs:I,throughput:te},c}getMetrics(){return this.metrics}mergeOptions(e){return {maxConcurrency:e.maxConcurrency??this.defaults.maxConcurrency,timeoutMs:e.timeoutMs??this.defaults.timeoutMs,failFast:e.failFast??this.defaults.failFast,evaluateTaskSuccess:e.evaluateTaskSuccess??this.defaults.evaluateTaskSuccess,callbacks:this.mergeCallbacks(this.defaults.callbacks,e.callbacks)}}mergeCallbacks(e,n){if(!(!e&&!n))return {onTaskStart:async r=>{e?.onTaskStart&&await e.onTaskStart(r),n?.onTaskStart&&await n.onTaskStart(r);},onTaskComplete:async r=>{e?.onTaskComplete&&await e.onTaskComplete(r),n?.onTaskComplete&&await n.onTaskComplete(r);},onError:async(r,o,i)=>{e?.onError&&await e.onError(r,o,i),n?.onError&&await n.onError(r,o,i);}}}};u();u();var vr=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 Nc=3,Dc=3e4,Lc=500,_y=t=>{if(typeof t!="number"||Number.isNaN(t)||!Number.isFinite(t))return Nc;let e=Math.floor(t);return e>0?e:Nc},wy=t=>t===void 0||typeof t!="number"||Number.isNaN(t)||t<=0?Dc:t,ky=t=>{if(!t)return {maxRetries:0,retryDelay:Lc};let e=Number.isInteger(t.maxRetries)&&t.maxRetries>=0?t.maxRetries:0,n=typeof t.retryDelay=="number"&&t.retryDelay>=0?t.retryDelay:Lc;return {maxRetries:e,retryDelay:n}},Ts=t=>{let e=t.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},vy=(t,e)=>t<=0?Promise.resolve():new Promise((n,r)=>{let o=setTimeout(()=>{e.removeEventListener("abort",i),n();},t),i=()=>{clearTimeout(o),r(Ts(e));};if(e.aborted){i();return}e.addEventListener("abort",i,{once:true});}),by=async(t,e,n)=>{let r,o;for(let i=0;i<=e.maxRetries;i++){if(n.aborted)throw Ts(n);try{let s=await t();if(r=s,s.success||i===e.maxRetries)return s}catch(s){if(o=s,n.aborted)throw Ts(n);if(i===e.maxRetries)throw s instanceof Error?s:new Error(String(s))}i<e.maxRetries&&await vy(e.retryDelay,n);}if(r)return r;throw o?o instanceof Error?o:new Error(String(o)):new Error("Parallel helper encountered an unexpected state")},Mc=(t,e,n)=>{e.completed+=1,n?e.success+=1:e.failure+=1;try{t.onProgress?.(e.completed,e.total);}catch(r){process.env.NODE_ENV!=="production"&&console.warn("Parallel helper onProgress callback threw an error:",r);}},Ey=t=>t.map(n=>({metadata:n.metadata,taskResult:n})).slice().sort((n,r)=>n.metadata.index-r.metadata.index).map(({metadata:n,taskResult:r})=>{if(r.value){let i=r.value;return {...i,agentId:i.agentId??n.request.agentId,metadata:{...i.metadata,requestIndex:n.index,mode:n.mode}}}let o=r.error??new Error("Unknown error");return {agentId:n.request.agentId,content:o.message,success:false,metadata:{error:o.message,aborted:r.aborted??false,requestIndex:n.index,mode:n.mode}}}),Ry=t=>t.filter(e=>!e.success).map(e=>{let n=e.metadata;if(e.error instanceof Error)return {index:n.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:n.index,error:new Error(r)}}return {index:n.index,error:new Error("Unknown failure")}}),Ty=(t,e)=>({onTaskComplete:async n=>{Mc(e,t,n.success);},onError:async()=>{Mc(e,t,false);}}),Uc=async(t,e,n={})=>{if(!Array.isArray(t))throw new TypeError("Parallel helpers expect an array of requests");if(t.length===0){let v={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 n.onComplete?.(v),[]}let r=_y(n.concurrency),o=wy(n.timeout),i=ky(n.retryPolicy),s=new kr,a=new vr,d=t.map((h,v)=>({id:`${e}:${h.agentId??"anonymous"}:${v}`,metadata:{index:v,mode:e,request:h},run:_=>by(()=>e==="query"?a.query(h):a.execute(h),i,_.signal)})),c={completed:0,success:0,failure:0,total:t.length},l=await s.run(d,{maxConcurrency:r,timeoutMs:o,evaluateTaskSuccess:h=>h.success,callbacks:Ty(c,n)}),f=Ey(l),g=Ry(l),m=s.getMetrics(),k={total:t.length,completed:t.length,successCount:f.filter(h=>h.success).length,failureCount:f.filter(h=>!h.success).length,results:f,errors:g,metrics:m};return n.onComplete?.(k),f},xy=(t,e)=>Uc(t,"query",e),Ay=(t,e)=>Uc(t,"execute",e);ds();as();ss();is();u();u();var Ao=class{capabilities={required:[]}};u();u();u();var jc=2e3;function $c(t){let e=t.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=jc?e:e.slice(0,jc-11)+" [redacted]"}var Ly=10*1024*1024,My={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function xs(t,e){return t===void 0?true:Array.isArray(t)?t.includes(e):t===e}function Uy(t,e){return t===void 0?true:Array.isArray(t)?t.some(n=>e.includes(n)):e.includes(t)}function Fc(t){if(typeof t=="number")return t;let e=t.match(/^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/i);if(!e)return 0;let n=parseFloat(e[1]),r=(e[2]??"b").toLowerCase();return Math.floor(n*(My[r]??1))}function qc(t){return typeof t=="string"}function Hc(t){try{let e=fd.statSync(t);return e.size>Ly?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${t} (${e.size} bytes)
|
|
413
|
-
`),null):
|
|
414
|
-
`).length}catch{return null}}function
|
|
436
|
+
`,i):t.length;n+=t.slice(r,o.index),n+=`[HTTP BODY ${ve}]`,r=a;}return n+t.slice(r)}function py(t,e){let n=t[e];if(n==='"'||n==="'")return fy(t,e,n);if(n!=="{"&&n!=="[")return -1;let r=[],o,i=false;for(let s=e;s<t.length;s+=1){let a=t[s];if(o){i?i=false:a==="\\"?i=true:a===o&&(o=void 0);continue}if(a==='"'||a==="'"){o=a;continue}if(a==="{"||a==="["){r.push(a);continue}if(a!=="}"&&a!=="]")continue;let d=r.pop();if(a==="}"&&d!=="{"||a==="]"&&d!=="[")return -1;if(r.length===0)return s+1}return -1}function fy(t,e,n){let r=false;for(let o=e+1;o<t.length;o+=1){let i=t[o];if(r)r=false;else if(i==="\\")r=true;else if(i===n)return o+1}return -1}var gy=new Set(["USAGE_LIMITED","CONTEXT_WINDOW_EXCEEDED","INPUT_TOO_LARGE","MODEL_NOT_SUPPORTED","MODEL_AT_CAPACITY","AUTH_REQUIRED","CLI_NOT_AVAILABLE","CLI_UPDATE_REQUIRED","AGENT_NOT_FOUND","PERMISSION_OR_TRUST","TIMEOUT_OR_STUCK","NETWORK_OR_PROVIDER_TRANSIENT","PROVIDER_CONFIGURATION","PROCESS_FAILED"]),my={QUOTA_EXHAUSTED:"USAGE_LIMITED",RATE_LIMITED:"USAGE_LIMITED",AUTH_REQUIRED:"AUTH_REQUIRED",TIMEOUT_IDLE:"TIMEOUT_OR_STUCK",TIMEOUT_TOTAL:"TIMEOUT_OR_STUCK",PROVIDER_NOT_FOUND:"PROVIDER_CONFIGURATION",INVALID_PROVIDER_FORMAT:"PROVIDER_CONFIGURATION",PROVIDER_CRASHED:"PROCESS_FAILED",EMPTY_OUTPUT:"PROCESS_FAILED"},hy=[{code:"USAGE_LIMITED",pattern:/(?:rate[ _-]?limit|quota|usage[ /_-]?limit|usage exhausted|too many requests|429\b)/i},{code:"CONTEXT_WINDOW_EXCEEDED",pattern:/context (?:window|length)|maximum context|context[_ -]?window[_ -]?exceeded|too many tokens/i},{code:"INPUT_TOO_LARGE",pattern:/input[_ -]?(?:is[_ -]?)?too[_ -]?large|prompt (?:is )?too (?:large|long)|request[_ -]?(?:is[_ -]?)?too[_ -]?large|payload[_ -]?(?:is[_ -]?)?too[_ -]?large|maximum input/i},{code:"MODEL_AT_CAPACITY",pattern:/(?:model|service|provider).*(?:at capacity|overloaded|temporarily busy)|at capacity|overloaded/i},{code:"MODEL_NOT_SUPPORTED",pattern:/(?:model|invalid_request_error).*(?:not[ _-]?supported|unsupported|does[ _-]?not[ _-]?exist|not[ _-]?found|invalid)|model[_-]?not[_-]?(?:found|supported)/i},{code:"AUTH_REQUIRED",pattern:/(?:401\b|unauthori[sz]ed|not logged in|login required|sign[ -]?in required|api key (?:is )?(?:missing|invalid|required)|authentication required)/i},{code:"CLI_UPDATE_REQUIRED",pattern:/(?:requires? a newer version|update (?:your )?cli|cli version.*(?:old|outdated|unsupported)|version mismatch)/i},{code:"CLI_NOT_AVAILABLE",pattern:/(?:ENOENT|command not found|executable.*not found|cli.*(?:not installed|unavailable)|is .* installed\?)/i},{code:"AGENT_NOT_FOUND",pattern:/agent[_ -]?not[_ -]?found|unknown agent/i},{code:"PERMISSION_OR_TRUST",pattern:/(?:permission denied|operation not permitted|workspace trust|not trusted|access denied|EACCES|EPERM)/i},{code:"TIMEOUT_OR_STUCK",pattern:/(?:timeout|timed out|took too long|stuck|idle timeout|ETIMEDOUT)/i},{code:"NETWORK_OR_PROVIDER_TRANSIENT",pattern:/(?:network (?:unreachable|error)|connection (?:reset|refused|closed)|ECONN(?:RESET|REFUSED|ABORTED)|service unavailable|upstream.*(?:5\d\d|error)|provider.*(?:5\d\d|unavailable|down)|\b5\d\d\b)/i},{code:"PROVIDER_CONFIGURATION",pattern:/(?:invalid provider|unsupported provider|provider namespace|provider configuration|provider config|missing provider)/i}];function yy(t){try{if(!Nt(t)||t.status!=="failed")return Ts();let e=_y(t.error);if(Is(e.message))return Ts();let n=Le(t.providerId)??e.provider??null,r=ky(t.logs),o=$c(e.code);if(o)return kr(o,n,e.message,e);let i=Ao(e.providerCode)??Ao(e.code),s=i?As(i,e.message):void 0;if(s)return kr(s,n,e.message,e,i);let a=vy(r);if(!wy(e)&&a&&(a.type==="user_stop"||Is(a.message)))return Ts();if(a){let c=Ey(a.code,a.providerCode,a.message);if(c)return kr(c,n,a.message??e.message,e,a.providerCode??a.code,a,a.structuredFailure?"terminal":"envelope")}let d=by(e.message,r);return d?kr(d.code,n,d.message,e,d.terminal?.providerCode??d.terminal?.code,d.terminal,d.terminal?.structuredFailure?"terminal":"envelope"):kr("PROCESS_FAILED",n,e.message,e)}catch{return {errorCode:"PROCESS_FAILED",errorProvider:null}}}function Ts(){return {errorCode:null,errorProvider:null}}function kr(t,e,n,r,o,i,s="envelope"){let a={};if(i?.resetAt!==void 0&&(a.resetAt=i.resetAt),r?.model&&(a.model=r.model),i?.type&&(a.upstreamType=i.type),o&&(a.upstreamCode=o),t==="CLI_NOT_AVAILABLE"||t==="CLI_UPDATE_REQUIRED"){let f=e?.startsWith("cli/")?e.slice(4):void 0;f&&(a.cliName=f);}let d=s==="terminal"?n:r?.message,c=s==="terminal"?i?.structuredFailure?d:void 0:r?.isEnvelope?d:void 0,l=Rs(c);return l&&(a.technicalMessage=l),Object.keys(a).length>0?{errorCode:t,errorProvider:e,errorMeta:a}:{errorCode:t,errorProvider:e}}function _y(t){let e=typeof t=="string"?wn(t):t;return Nt(e)?{isEnvelope:true,code:Le(e.code),providerCode:Le(e.providerCode),message:Le(e.message)??Le(e.error),provider:Le(e.provider)??Le(e.errorProvider),model:Le(e.model)}:{isEnvelope:false,...typeof t=="string"&&t.trim()?{message:t.trim()}:{}}}function wn(t){try{return JSON.parse(t)}catch{return}}function wy(t){return !!(t.code||t.providerCode||t.message)}function ky(t){let e=[];if(typeof t=="string"){let n=wn(t);if(Array.isArray(n))e.push(...n);else for(let r of t.split(/\r?\n/)){let o=wn(r.trim());o!==void 0&&e.push(o);}}else Array.isArray(t)?e.push(...t):Nt(t)&&e.push(t);return e.flatMap(_n)}function _n(t){if(!Nt(t))return [];let e=Le(t.type),n=Le(t.message);if(n&&!e){let o=wn(n);if(Array.isArray(o))return o.flatMap(_n);if(Nt(o))return _n(o);let i=n.split(/\r?\n/).map(s=>wn(s.trim())).filter(s=>Nt(s));return i.length>0?i.flatMap(_n):t.level==="stderr"?[{type:"stderr",message:n,rank:1,structuredFailure:false}]:_n({type:"info",content:n})}if(e==="rate_limit_event"){let o=jc(t.rate_limit_info);return Le(o?.status)!=="rejected"?[]:[{type:e,code:"RATE_LIMITED",message:vr(o?.message,t.message),resetAt:Ry(o?.resetsAt),rank:4,structuredFailure:true}]}if(e==="turn.failed"||e==="error"){let o=jc(t.error),i=vr(o?.message,o?.detail,t.message,t.errorMessage,t.content),s=vr(o?.code,t.code,t.errorCode);return [{type:e,code:s,providerCode:vr(o?.providerCode,t.providerCode),message:i,rank:e==="turn.failed"?3:2,structuredFailure:true}]}if(e==="text"&&typeof t.content=="string"){let o=wn(t.content);if(Nt(o))return _n(o)}let r=vr(t.errorMessage,t.content);return r&&Is(r)?[{type:"user_stop",message:r,rank:1,structuredFailure:false}]:r&&/(?:turn\.failed|type:error)/i.test(r)?[{type:r.match(/turn\.failed/i)?"turn.failed":"error",message:r,rank:3,structuredFailure:false}]:[]}function vy(t){return [...t].sort((e,n)=>n.rank-e.rank)[0]}function Ey(t,e,n){let r=$c(t);if(r)return r;if(t){let o=As(t,n);if(o)return o}if(e){let o=As(e,n);if(o)return o}return xs(n)}function by(t,e){let n=xs(t);if(n)return {code:n,message:t};for(let r of [...e].sort((o,i)=>i.rank-o.rank)){let o=xs(r.message);if(o)return {code:o,message:r.message,terminal:r}}}function xs(t){if(!(typeof t!="string"||!t.trim()))return hy.find(e=>e.pattern.test(t))?.code}function As(t,e){let n=Ao(t)??t;if(n==="MODEL_UNAVAILABLE")return /(?:capacity|overloaded|busy)/i.test(e??"")?"MODEL_AT_CAPACITY":"MODEL_NOT_SUPPORTED";if(n!=="UNKNOWN")return my[n]}function $c(t){let e=Ao(t);return e&&gy.has(e)?e:void 0}function Ao(t){return typeof t=="string"&&t.trim()?t.trim().toUpperCase():void 0}function Is(t){return t?/\b(?:stopped|killed|aborted|cancelled|canceled)\s+by\s+user\b/i.test(t)||/사용자에 의해 중지됨/.test(t)||/\b(?:SIGTERM\s+143|143\s+SIGTERM)\b/i.test(t):false}function Nt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function jc(t){return Nt(t)?t:void 0}function Le(t){return typeof t=="string"&&t.trim()?t.trim():void 0}function Ry(t){return typeof t=="string"||typeof t=="number"&&Number.isFinite(t)?t:void 0}function vr(...t){return t.map(Le).find(e=>!!e)}u();var Ty=/^[a-zA-Z0-9._-]+$/,Ss=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,n){this.validateId(e),this.validateId(n);let r=this.storage.findBox(e,n);return r?this.toBoxResponse(r):null}createBox(e,n){this.validateId(e);let r=this.generateBoxId(),o=new Date().toISOString(),i=this.storage.insertBox(e,{id:r,seq:n.seq,firstTaskId:n.firstTaskId,midTaskId:n.midTaskId,lastTaskId:n.lastTaskId,taskCount:n.taskCount,summary:n.summary??null,sourceTokens:n.sourceTokens,summaryTokens:n.summaryTokens??null,createdAt:o});return this.toBoxResponse(i)}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(!Ty.test(e))throw new Error(`Invalid ID format: ${e}`)}generateBoxId(){return Ze("box")}};u();function xy(t,e,n,r,o){let{maxTokens:i,hotzoneRatio:s,warmzoneRatio:a}=r,d=i*s,c=i*a,l=d+c,f=e.getThreadMessages(t),g=[],m=0,k=false,h=[];for(let w=0;w<f.length;w+=2){let T=f[w],x=f[w+1],U=T?.content||"",I=x?.content||"",te=o.countTokens(U+I),S=[];T&&S.push(T),x&&S.push(x),h.push({messages:S,tokens:te});}for(let w=h.length-1;w>=0;w--){let T=h[w];if(m+T.tokens>d){k=true;break}m+=T.tokens,g.unshift(...T.messages);}let v=[],_=0;if(k&&c>0)try{let{boxes:w}=n.listBoxes(t);for(let T=w.length-1;T>=0;T--){let x=w[T],U=x.summaryTokens??x.sourceTokens;if(_+U>c)break;_+=U,v.unshift({boxId:x.id,seq:x.seq,taskCount:x.taskCount,sourceTokens:x.sourceTokens,summary:x.summary,previewFirst:x.previewFirst,previewMid:x.previewMid,previewLast:x.previewLast,createdAt:x.createdAt});}}catch(w){if(w instanceof Error&&!/not found/i.test(w.message))throw w}return {hot:g,warm:v,hotTokens:m,warmTokens:_,hotOverflow:k,totalBudget:l,config:{maxTokens:i,hotzoneRatio:s,warmzoneRatio:a}}}At();Ft();u();var Io=class extends Error{constructor(n,r){super(`Task ${n} timed out after ${r}ms`);this.taskId=n;this.timeoutMs=r;this.name="ParallelRunnerTimeoutError";}taskId;timeoutMs},br=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,n={}){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(n),o=Math.max(1,r.maxConcurrency??5),i=r.timeoutMs,s=r.failFast??false,a=r.callbacks,d=r.evaluateTaskSuccess??(()=>true),c=[],l=0,f=0,g=0,m=false,k=0,h=perf_hooks.performance.now(),v=async S=>{a?.onTaskStart&&await a.onTaskStart(S),g+=1;let q=new AbortController,fe={signal:q.signal},Q,se;typeof i=="number"&&Number.isFinite(i)&&i>0&&(se=new Promise((J,z)=>{Q=setTimeout(()=>{let H=new Io(S.id,i);q.abort(H),z(H);},i);}));let j=perf_hooks.performance.now(),F=S.run(fe),B=se?Promise.race([F,se]):F;try{let J=await B,z=perf_hooks.performance.now(),H=z-j,ne=d(J,S),re={taskId:S.id,success:ne,value:J,durationMs:H,startedAt:j,finishedAt:z,metadata:S.metadata,aborted:!1};c.push(re),ne?l+=1:f+=1,a?.onTaskComplete&&await a.onTaskComplete(re),s&&!ne&&(m=!0);}catch(J){let z=perf_hooks.performance.now(),H=z-j,ne=J instanceof Error?J:new Error(String(J)),re={taskId:S.id,success:false,error:ne,durationMs:H,startedAt:j,finishedAt:z,metadata:S.metadata,aborted:q.signal.aborted};c.push(re),f+=1,a?.onError&&await a.onError(S,ne,H),s&&(m=true);}finally{Q&&clearTimeout(Q),se&&F.catch(()=>{});}},_=async()=>{for(;!m;){let S=k;if(S>=e.length)break;k+=1;let q=e[S];if(!q||(await v(q),m))break}},w=Math.min(o,e.length),T=[];for(let S=0;S<w;S++)T.push(_());await Promise.all(T);let U=perf_hooks.performance.now()-h,I=c.length?c.reduce((S,q)=>S+q.durationMs,0)/c.length:0,te=U>0?c.length/(U/1e3):c.length;return this.metrics={totalTasks:e.length,startedTasks:g,completedTasks:c.length,successCount:l,failureCount:f,totalDurationMs:U,averageDurationMs:I,throughput:te},c}getMetrics(){return this.metrics}mergeOptions(e){return {maxConcurrency:e.maxConcurrency??this.defaults.maxConcurrency,timeoutMs:e.timeoutMs??this.defaults.timeoutMs,failFast:e.failFast??this.defaults.failFast,evaluateTaskSuccess:e.evaluateTaskSuccess??this.defaults.evaluateTaskSuccess,callbacks:this.mergeCallbacks(this.defaults.callbacks,e.callbacks)}}mergeCallbacks(e,n){if(!(!e&&!n))return {onTaskStart:async r=>{e?.onTaskStart&&await e.onTaskStart(r),n?.onTaskStart&&await n.onTaskStart(r);},onTaskComplete:async r=>{e?.onTaskComplete&&await e.onTaskComplete(r),n?.onTaskComplete&&await n.onTaskComplete(r);},onError:async(r,o,i)=>{e?.onError&&await e.onError(r,o,i),n?.onError&&await n.onError(r,o,i);}}}};u();u();var Rr=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 Bc=3,Fc=3e4,qc=500,Ay=t=>{if(typeof t!="number"||Number.isNaN(t)||!Number.isFinite(t))return Bc;let e=Math.floor(t);return e>0?e:Bc},Iy=t=>t===void 0||typeof t!="number"||Number.isNaN(t)||t<=0?Fc:t,Sy=t=>{if(!t)return {maxRetries:0,retryDelay:qc};let e=Number.isInteger(t.maxRetries)&&t.maxRetries>=0?t.maxRetries:0,n=typeof t.retryDelay=="number"&&t.retryDelay>=0?t.retryDelay:qc;return {maxRetries:e,retryDelay:n}},Ps=t=>{let e=t.reason;return e instanceof Error?e:typeof e=="string"?new Error(e):new Error("Parallel operation aborted")},Py=(t,e)=>t<=0?Promise.resolve():new Promise((n,r)=>{let o=setTimeout(()=>{e.removeEventListener("abort",i),n();},t),i=()=>{clearTimeout(o),r(Ps(e));};if(e.aborted){i();return}e.addEventListener("abort",i,{once:true});}),Cy=async(t,e,n)=>{let r,o;for(let i=0;i<=e.maxRetries;i++){if(n.aborted)throw Ps(n);try{let s=await t();if(r=s,s.success||i===e.maxRetries)return s}catch(s){if(o=s,n.aborted)throw Ps(n);if(i===e.maxRetries)throw s instanceof Error?s:new Error(String(s))}i<e.maxRetries&&await Py(e.retryDelay,n);}if(r)return r;throw o?o instanceof Error?o:new Error(String(o)):new Error("Parallel helper encountered an unexpected state")},Hc=(t,e,n)=>{e.completed+=1,n?e.success+=1:e.failure+=1;try{t.onProgress?.(e.completed,e.total);}catch(r){process.env.NODE_ENV!=="production"&&console.warn("Parallel helper onProgress callback threw an error:",r);}},Oy=t=>t.map(n=>({metadata:n.metadata,taskResult:n})).slice().sort((n,r)=>n.metadata.index-r.metadata.index).map(({metadata:n,taskResult:r})=>{if(r.value){let i=r.value;return {...i,agentId:i.agentId??n.request.agentId,metadata:{...i.metadata,requestIndex:n.index,mode:n.mode}}}let o=r.error??new Error("Unknown error");return {agentId:n.request.agentId,content:o.message,success:false,metadata:{error:o.message,aborted:r.aborted??false,requestIndex:n.index,mode:n.mode}}}),Ny=t=>t.filter(e=>!e.success).map(e=>{let n=e.metadata;if(e.error instanceof Error)return {index:n.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:n.index,error:new Error(r)}}return {index:n.index,error:new Error("Unknown failure")}}),Dy=(t,e)=>({onTaskComplete:async n=>{Hc(e,t,n.success);},onError:async()=>{Hc(e,t,false);}}),Wc=async(t,e,n={})=>{if(!Array.isArray(t))throw new TypeError("Parallel helpers expect an array of requests");if(t.length===0){let v={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 n.onComplete?.(v),[]}let r=Ay(n.concurrency),o=Iy(n.timeout),i=Sy(n.retryPolicy),s=new br,a=new Rr,d=t.map((h,v)=>({id:`${e}:${h.agentId??"anonymous"}:${v}`,metadata:{index:v,mode:e,request:h},run:_=>Cy(()=>e==="query"?a.query(h):a.execute(h),i,_.signal)})),c={completed:0,success:0,failure:0,total:t.length},l=await s.run(d,{maxConcurrency:r,timeoutMs:o,evaluateTaskSuccess:h=>h.success,callbacks:Dy(c,n)}),f=Oy(l),g=Ny(l),m=s.getMetrics(),k={total:t.length,completed:t.length,successCount:f.filter(h=>h.success).length,failureCount:f.filter(h=>!h.success).length,results:f,errors:g,metrics:m};return n.onComplete?.(k),f},Ly=(t,e)=>Wc(t,"query",e),My=(t,e)=>Wc(t,"execute",e);fs();ps();us();ls();u();u();var So=class{capabilities={required:[]}};u();u();u();var zc=2e3;function Gc(t){let e=t.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=zc?e:e.slice(0,zc-11)+" [redacted]"}var Wy=10*1024*1024,zy={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function Cs(t,e){return t===void 0?true:Array.isArray(t)?t.includes(e):t===e}function Gy(t,e){return t===void 0?true:Array.isArray(t)?t.some(n=>e.includes(n)):e.includes(t)}function Kc(t){if(typeof t=="number")return t;let e=t.match(/^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/i);if(!e)return 0;let n=parseFloat(e[1]),r=(e[2]??"b").toLowerCase();return Math.floor(n*(zy[r]??1))}function Jc(t){return typeof t=="string"}function Yc(t){try{let e=kd.statSync(t);return e.size>Wy?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${t} (${e.size} bytes)
|
|
437
|
+
`),null):kd.readFileSync(t,"utf8").split(`
|
|
438
|
+
`).length}catch{return null}}function Xc(t){try{return kd.statSync(t).size}catch{return null}}function Vy(t,e,n){if(!t)return true;let r=e,o=r?.path??r?.file_path??r?.filePath??r?.filename;if(typeof o!="string")return false;if(Ke(o,t))return true;if(n&&o.startsWith("/")){let{relative:i,isAbsolute:s}=_e("path");if(s(o)){let a=i(n,o);if(a&&!a.startsWith("..")&&Ke(a,t))return true}}return false}function Ky(t,e){return t?JSON.stringify(e).includes(t):true}function Jy(t,e){if(!t)return true;try{let n=new RegExp(t),r=JSON.stringify(e);return n.test(r)}catch{return false}}function Yy(t,e){if(!t)return true;try{let n=new RegExp(t),r=JSON.stringify(e);return n.test(r)}catch{return false}}function Xy(t,e){if(t.pathSizeMin===void 0&&t.pathSizeMax===void 0)return true;let n=e,r=n?.path??n?.file_path??n?.filePath??n?.filename;if(typeof r!="string")return false;if(t.pathSizeMin!==void 0)if(Jc(t.pathSizeMin)){let o=Xc(r);if(o===null||o<Kc(t.pathSizeMin))return false}else {let o=Yc(r);if(o===null||o<t.pathSizeMin)return false}if(t.pathSizeMax!==void 0)if(Jc(t.pathSizeMax)){let o=Xc(r);if(o===null||o>Kc(t.pathSizeMax))return false}else {let o=Yc(r);if(o===null||o>t.pathSizeMax)return false}return true}function Qy(t){let e=[],n=[];for(let r=0;r<t.length;r++){let o=t[r];if(!o||typeof o!="object"){n.push(`Hook at index ${r}: not an object, skipping`);continue}let i=o;if(typeof i.name!="string"||!i.name){n.push(`Hook at index ${r}: missing or invalid "name", skipping`);continue}let s=i.guide&&typeof i.guide=="object",a=i.deny&&typeof i.deny=="object",d=typeof i.plugin=="string";if(!s&&!a&&!d){n.push(`Hook "${i.name}": missing guide/deny/plugin, skipping`);continue}if(s&&typeof i.guide.say!="string"){n.push(`Hook "${i.name}": guide.say is required and must be string, skipping`);continue}if(a&&typeof i.deny.reason!="string"){n.push(`Hook "${i.name}": deny.reason is required and must be string, skipping`);continue}e.push(i);}return {valid:e,warnings:n}}var Ns=class extends So{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(n=>[n.id,n]));}async run(e){let n=[],r=process.env.CREWX_TASK_LOG_PATH,o=process.env.CREWX_HOOK_LOG_VERBOSE==="1";for(let i of this.hooks)if(this.matchEntryLevel(i,e)&&i.guide){if(!this.matchRuleLevel(i.guide,e)){o&&r&&this.appendHookLog(r,{rule:i.name,action:"pass",once:i.guide.once??false,ctx:e,matched:false});continue}i.guide.once&&this.hasFired(e.sessionId,i.name)||(i.guide.once&&this.markFired(e.sessionId,i.name),n.push(i.guide.say),r&&this.appendHookLog(r,{rule:i.name,action:"inject",once:i.guide.once??false,ctx:e,matched:true,message:i.guide.say}));}return n.length?e.inject(n.join(`
|
|
415
439
|
|
|
416
|
-
`)):e.pass()}appendHookLog(e,n){try{let r={rule:n.rule,action:n.action,once:n.once,sessionId:n.ctx.sessionId,provider:n.ctx.provider,agent:n.ctx.agent.id,toolName:n.ctx.tool.name,rawToolName:n.ctx.tool.rawName};n.message&&(r.chars=n.message.length,process.env.CREWX_HOOK_LOG_VERBOSE==="1"&&(r.message
|
|
417
|
-
`;
|
|
418
|
-
`);}}firedFilePath(e){let n=crypto$1.createHash("sha1").update(e).digest("hex");return
|
|
440
|
+
`)):e.pass()}appendHookLog(e,n){try{let r={rule:n.rule,action:n.action,once:n.once,sessionId:n.ctx.sessionId,provider:n.ctx.provider,agent:n.ctx.agent.id,toolName:n.ctx.tool.name,rawToolName:n.ctx.tool.rawName};n.message&&(r.chars=n.message.length,process.env.CREWX_HOOK_LOG_VERBOSE==="1"&&(r.message=Gc(n.message).slice(0,500)));let o=`[${new Date().toISOString()}] HOOK: ${JSON.stringify(r)}
|
|
441
|
+
`;kd.appendFileSync(e,o,{encoding:"utf8",mode:384});}catch{}}matchEntryLevel(e,n){if(e.provider!==void 0){let r=n.provider.replace(/^cli\//,"");if(!Cs(e.provider,r))return false}if(e.team!==void 0){let o=this.agentMap.get(n.agent.id)?.team??n.agent.team;if(!Cs(e.team,o))return false}if(e.role!==void 0){let o=this.agentMap.get(n.agent.id)?.role??n.agent.role;if(!Cs(e.role,o))return false}if(e.tag!==void 0){let o=this.agentMap.get(n.agent.id)?.tags??[];if(!Gy(e.tag,o))return false}return !(e.agents!==void 0&&!e.agents.includes(n.agent.id))}matchRuleLevel(e,n){return !(e.when!==void 0&&e.when.length>0&&!e.when.includes(n.tool.name)&&!e.when.includes(n.tool.rawName)||!Ky(e.pattern,n.tool.input)||!Jy(e.regex,n.tool.input)||!Vy(e.pathPattern,n.tool.input,n.cwd)||!Xy(e,n.tool.input)||!Yy(e.whenInputRegex,n.tool.input))}hasFired(e,n){try{let r=this.firedFilePath(e);if(!kd.existsSync(r))return !1;let o=JSON.parse(kd.readFileSync(r,"utf8"));return Array.isArray(o.fired)&&o.fired.includes(n)}catch{return false}}markFired(e,n){try{let r=this.firedFilePath(e);kd.mkdirSync(X.dirname(r),{recursive:!0,mode:448});let o=kd.existsSync(r)?JSON.parse(kd.readFileSync(r,"utf8")):{fired:[]};Array.isArray(o.fired)||(o.fired=[]),o.fired.includes(n)||(o.fired.push(n),kd.writeFileSync(r,JSON.stringify(o),{mode:384}));}catch(r){process.stderr.write(`[YamlHookPlugin] once state write failed: ${r}
|
|
442
|
+
`);}}firedFilePath(e){let n=crypto$1.createHash("sha1").update(e).digest("hex");return X.join(Ki.homedir(),".crewx","sessions",n,"fired-rules.json")}};u();u();u();function Zy(t){let e=t.messages.map(n=>({id:n.id,role:n.isAssistant?"assistant":"user",content:n.text,timestamp:new Date(n.timestamp).toISOString(),metadata:n.metadata??null}));return {getThreadMessages(n){return e}}}u();var Ds=class extends Error{code;kind;retryAfterMs;constructor(e,n,r){super(`AdapterError: ${e}`),this.name="AdapterError",this.code=e,this.kind=n,this.retryAfterMs=r;}};u();function e_(t){return t}function t_(t){return {name:t.name,async attach(e){let n=await t.configFactory(e),o=e.registerChannelAdapter,i=t.instanceId??t.name;o&&await o({adapter:t.adapter,instanceId:i,config:n}),t.onAttach&&await t.onAttach(e);},async detach(e){let r=e.unregisterChannelAdapter;r&&await r(t.instanceId??t.name),t.onDetach&&await t.onDetach(e);}}}rn();exports.ARCHIVE_WI_BOARD_ID=hn;exports.AdapterError=Ds;exports.AgentNotFoundError=lt;exports.AgentRuntime=Rr;exports.AgentSkillsSchema=Qs;exports.BrowserFsAdapter=ws;exports.ConfigLoadError=Lt;exports.Crewx=hs;exports.CrewxPlugin=_s;exports.DEFAULT_INPUT_BUDGET_PERCENT=Ys;exports.DEFAULT_LOCAL_SERVER_PROBE_TIMEOUT_MS=Tc;exports.DEFAULT_WI_BOARD_ID=mn;exports.DEFAULT_WI_WORKFLOW_ID=mc;exports.DocumentLoader=Vt;exports.FRESH_PROVIDER_INITIAL_INPUT_FRAMING=Pr;exports.INPUT_BUDGET_TOKENIZER_ENCODING=Wo;exports.LEGACY_UI_CARD_SAFE_SUMMARY=Ja;exports.LayoutLoadError=be;exports.LayoutLoader=Wn;exports.LayoutRenderer=Vn;exports.LocalServerOpenCodeOverlayError=at;exports.MAX_INPUT_BUDGET_PERCENT=Sr;exports.MIN_INPUT_BUDGET_PERCENT=Ir;exports.NodeFsAdapter=Yr;exports.PROVIDER_ORDER=ks;exports.ParallelRunner=br;exports.ParallelRunnerTimeoutError=Io;exports.PropsValidationError=gt;exports.PropsValidator=Gn;exports.RESUME_PROVIDER_INITIAL_INPUT_FRAMING=zo;exports.SdkBoxService=Ss;exports.SpanRepository=fo;exports.TaskRepository=un;exports.TemplateEngine=Hn;exports.TypedEventEmitter=Kn;exports.UiRuntimeError=b;exports.WI_BOARD_ID_PATTERN=xo;exports.WI_DEFAULT_FLOW_FILENAME=nh;exports.WI_PLAN_FLOW_FILENAME=rh;exports.WI_PLAN_WORKFLOW_ID=th;exports.WiBoardSchema=Ol;exports.WiCreateError=oe;exports.YamlHookPlugin=Ns;exports.buildContext=xy;exports.buildLocalServerOpenCodeOverlay=_o;exports.canonicalizeAgentOptions=gu;exports.classifyTaskError=yy;exports.clearModelsOverride=gl;exports.compareProviders=wr;exports.countTokens=Or;exports.createAdapterContext=Ti;exports.createDelegateTool=ay;exports.createGlobalSettingsStore=Jo;exports.createHandler=zi;exports.createPluginProviderFactory=dc;exports.createProvider=ft;exports.createRemoteProviderFactory=oc;exports.createScopedAdapterStore=bi;exports.createTokenCounter=Ko;exports.createUiServerRuntime=Fd;exports.createWorkInstruction=xh;exports.createWorkInstructionBatch=Ah;exports.defaultExtractText=Ni;exports.defaultFsAdapter=Gt;exports.defaultParseEvent=He;exports.defineChannelAdapter=e_;exports.defineChannelAdapterPlugin=t_;exports.escapeHandlebarsHelper=wi;exports.extractLegacyWorkflowRunId=Va;exports.formatDisplayTimestamp=hi;exports.formatFileSizeHelper=ki;exports.formatTimestamp=mi;exports.formatTimestampHelper=vi;exports.generateFingerprint=Rp;exports.generateId=Ze;exports.getAntigravityModels=qo;exports.getClaudeModels=Sn;exports.getCodexModels=Bo;exports.getCopilotModels=Fo;exports.getCrewxHome=Ji;exports.getProviderModels=Ue;exports.getSyncWindowStore=Ap;exports.hashUiDefinition=sr;exports.hashWorkspaceId=lo;exports.initModelsRemote=zh;exports.initPricingRemote=Lh;exports.isAllowedLocalServerIp=Hd;exports.isReservedWiBoardId=hc;exports.lengthHelper=_i;exports.loadYamlFile=Lr;exports.materializeWindowsSpawnProgram=Bt;exports.mergeAdditionalArgs=Pa;exports.mergeModels=Pn;exports.migrateGrokLegacyMode=Fn;exports.normalizeClaudeMode=Wt;exports.normalizeInputBudgetProvider=Go;exports.normalizeProviderId=Jh;exports.normalizeWorkspacePath=Gi;exports.parseLocalServerBaseUrl=fn;exports.parseOverdriveProfile=Jr;exports.parseOverdriveSignal=pi;exports.parseStdoutEvent=jn;exports.parseUsage=ut;exports.parseYamlContent=Dr;exports.probeLocalServer=Ac;exports.providerRank=vs;exports.queryAcpProviderMeta=Dc;exports.queryAllAcpProviderMetas=ty;exports.queryAllCliProviderMetas=iy;exports.queryOpencodeModels=Lc;exports.redactTechnicalMessage=Rs;exports.registerAcpProviders=nc;exports.registerApiProviders=Xd;exports.registerProviderFactory=pt;exports.resolveAgent=Mr;exports.resolveAgentSkills=Gh;exports.resolveAntigravityModel=Uo;exports.resolveCatalogModelId=Tn;exports.resolveCrewxCli=dy;exports.resolveCrewxWorkspace=cy;exports.resolveDefaultAgentsYaml=Yo;exports.resolveInputBudget=Nr;exports.resolveOverdrive=fi;exports.resolveTemplatesPath=tn;exports.resolveTokenizerMetadata=Cr;exports.resolveUiEffectiveCapabilities=uo;exports.resolveWiBoards=oh;exports.resolveWindowsExecutablePath=ru;exports.resolveWindowsSpawnProgram=$t;exports.resolveWorkflowTemplatesPath=Ql;exports.runExecutesParallel=My;exports.runInSyncWindow=Ip;exports.runQueriesParallel=Ly;exports.sanitizeLegacyUiCardText=Zr;exports.sanitizeTemplateMessages=Ci;exports.scanLegacyUiCardAt=Ii;exports.scanLegacyUiCardTags=Xn;exports.selectNextWi=Sh;exports.setAuditVerbose=cp;exports.setModelsOverride=$o;exports.toTaskReader=Zy;exports.toTemplateMessages=Oi;exports.truncateHelper=yi;exports.validateHooksSchema=Qy;
|